EgtGeomKernel 1.6k1 :

- aggiunto offset di regioni
- migliorato offset di curve
- migliorata creazione di regioni.
This commit is contained in:
Dario Sassi
2015-11-03 21:24:31 +00:00
parent 740392c456
commit ba71993098
11 changed files with 553 additions and 22 deletions
+53 -1
View File
@@ -18,6 +18,8 @@
#include "NgeWriter.h"
#include "NgeReader.h"
#include "CurveAux.h"
#include "CurveComposite.h"
#include "RemoveCurveOverlaps.h"
#include "GeoConst.h"
#include "/EgtDev/Include/EGkStringUtils3d.h"
#include "/EgtDev/Include/EGkUiUnits.h"
@@ -80,6 +82,28 @@ SurfFlatRegion::AddExtLoop( const ICurve& cCrv)
//----------------------------------------------------------------------------
bool
SurfFlatRegion::AddExtLoop( ICurve* pCrv)
{
// rimuovo eventuali sovrapposizioni
ICURVEPLIST CrvLst ;
if ( ! RemoveCurveOverlaps( pCrv, true, true, CrvLst))
return false ;
// aggiungo le singole curve
bool bOk = true ;
for ( auto& pCrv : CrvLst) {
// se curva composita, unisco eventuali tratti allineati
CurveComposite* pCrvCo = GetBasicCurveComposite( pCrv) ;
if ( pCrvCo != nullptr)
pCrvCo->MergeCurves( LIN_TOL_MIN, ANG_TOL_STD_DEG) ;
// aggiungo il loop
if ( ! AddSimpleExtLoop( pCrv))
bOk = false ;
}
return bOk ;
}
//----------------------------------------------------------------------------
bool
SurfFlatRegion::AddSimpleExtLoop( ICurve* pCrv)
{
// acquisisco la curva
PtrOwner<ICurve> pMyCrv( pCrv) ;
@@ -116,7 +140,10 @@ SurfFlatRegion::AddExtLoop( ICurve* pCrv)
// porto la curva nel riferimento intrinseco
if ( ! pMyCrv->ToLoc( m_frF))
return false ;
// verifico non abbia auto-intersezioni che si attraversano
Vector3d vtExtr ;
if ( pMyCrv->GetExtrusion( vtExtr) && ! vtExtr.IsSmall())
pMyCrv->SetExtrusion( Z_AX) ;
// verifico non abbia auto-intersezioni che si attraversano o si sovrappongano
SelfIntersCurve sInt( *pMyCrv) ;
if ( sInt.GetCrossOrOverlapIntersCount() > 0)
return false ;
@@ -190,6 +217,28 @@ SurfFlatRegion::AddIntLoop( const ICurve& cCrv)
//----------------------------------------------------------------------------
bool
SurfFlatRegion::AddIntLoop( ICurve* pCrv)
{
// rimuovo eventuali sovrapposizioni
ICURVEPLIST CrvLst ;
if ( ! RemoveCurveOverlaps( pCrv, true, true, CrvLst))
return false ;
// aggiungo le singole curve
bool bOk = true ;
for ( auto& pCrv : CrvLst) {
// se curva composita, unisco eventuali tratti allineati
CurveComposite* pCrvCo = GetBasicCurveComposite( pCrv) ;
if ( pCrvCo != nullptr)
pCrvCo->MergeCurves( LIN_TOL_MIN, ANG_TOL_STD_DEG) ;
// aggiungo il loop
if ( ! AddSimpleIntLoop( pCrv))
bOk = false ;
}
return bOk ;
}
//----------------------------------------------------------------------------
bool
SurfFlatRegion::AddSimpleIntLoop( ICurve* pCrv)
{
// acquisisco la curva
PtrOwner<ICurve> pMyCrv( pCrv) ;
@@ -204,6 +253,9 @@ SurfFlatRegion::AddIntLoop( ICurve* pCrv)
// porto la curva nel riferimento intrinseco
if ( ! pMyCrv->ToLoc( m_frF))
return false ;
Vector3d vtExtr ;
if ( pMyCrv->GetExtrusion( vtExtr) && ! vtExtr.IsSmall())
pMyCrv->SetExtrusion( Z_AX) ;
// verifico sia piana e il piano coincida con quello XY intrinseco
double dArea ;
Plane3d plPlane ;