EgtGeomKernel 1.6k1 :
- aggiunto offset di regioni - migliorato offset di curve - migliorata creazione di regioni.
This commit is contained in:
+53
-1
@@ -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 ;
|
||||
|
||||
Reference in New Issue
Block a user