EgtGeomKernel 2.2d1 :

- alla classe Polygon3d aggiunto metodo Add
- nella classe SurfFlatRegion corretto possesso curva in AddExtLoop e AddIntLoop
- gli attributi delle entità vengono assegnati se non vuoti, altrimenti vengono rimossi.
This commit is contained in:
Dario Sassi
2020-04-04 09:43:06 +00:00
parent 2c6ebdadca
commit eba240cb2a
5 changed files with 92 additions and 30 deletions
+28 -14
View File
@@ -84,22 +84,29 @@ SurfFlatRegion::AddExtLoop( const ICurve& cCrv)
bool
SurfFlatRegion::AddExtLoop( ICurve* pCrv)
{
// acquisisco la curva
PtrOwner<ICurve> pMyCrv( pCrv) ;
if ( IsNull( pMyCrv))
return false ;
// verifico sia chiusa
if ( ! pMyCrv->IsClosed())
return false ;
// verifico sia piana e imposto estrusione come normale al piano
double dArea ;
Plane3d plPlane ;
if ( ! pCrv->GetArea( plPlane, dArea))
if ( ! pMyCrv->GetArea( plPlane, dArea))
return false ;
pCrv->SetExtrusion( plPlane.GetVersN()) ;
pCrv->SetThickness( 0) ;
pMyCrv->SetExtrusion( plPlane.GetVersN()) ;
pMyCrv->SetThickness( 0) ;
// rimuovo eventuali sovrapposizioni (calcolate nel suo piano)
ICURVEPLIST CrvLst ;
if ( ! RemoveCurveOverlaps( pCrv, true, true, CrvLst))
if ( ! RemoveCurveOverlaps( Release( pMyCrv), true, true, CrvLst))
return false ;
// aggiungo le singole curve
bool bOk = true ;
for ( auto& pCrv : CrvLst) {
for ( auto& pSingCrv : CrvLst) {
// se curva composita
CurveComposite* pCrvCo = GetBasicCurveComposite( pCrv) ;
CurveComposite* pCrvCo = GetBasicCurveComposite( pSingCrv) ;
if ( pCrvCo != nullptr) {
// unisco eventuali tratti allineati
pCrvCo->MergeCurves( LIN_TOL_MIN, ANG_TOL_STD_DEG) ;
@@ -107,7 +114,7 @@ SurfFlatRegion::AddExtLoop( ICurve* pCrv)
RemoveCurveSpikes( pCrvCo) ;
}
// aggiungo il loop
if ( ! AddSimpleExtLoop( pCrv))
if ( ! AddSimpleExtLoop( pSingCrv))
bOk = false ;
}
return bOk ;
@@ -230,22 +237,29 @@ SurfFlatRegion::AddIntLoop( const ICurve& cCrv)
bool
SurfFlatRegion::AddIntLoop( ICurve* pCrv)
{
// acquisisco la curva
PtrOwner<ICurve> pMyCrv( pCrv) ;
if ( IsNull( pMyCrv))
return false ;
// verifico sia chiusa
if ( ! pMyCrv->IsClosed())
return false ;
// verifico sia piana e imposto estrusione come normale al piano
double dArea ;
Plane3d plPlane ;
if ( ! pCrv->GetArea( plPlane, dArea))
if ( ! pMyCrv->GetArea( plPlane, dArea))
return false ;
pCrv->SetExtrusion( plPlane.GetVersN()) ;
pCrv->SetThickness( 0) ;
pMyCrv->SetExtrusion( plPlane.GetVersN()) ;
pMyCrv->SetThickness( 0) ;
// rimuovo eventuali sovrapposizioni (calcolate nel suo piano)
ICURVEPLIST CrvLst ;
if ( ! RemoveCurveOverlaps( pCrv, true, true, CrvLst))
if ( ! RemoveCurveOverlaps( Release( pMyCrv), true, true, CrvLst))
return false ;
// aggiungo le singole curve
bool bOk = true ;
for ( auto& pCrv : CrvLst) {
for ( auto& pSingCrv : CrvLst) {
// se curva composita
CurveComposite* pCrvCo = GetBasicCurveComposite( pCrv) ;
CurveComposite* pCrvCo = GetBasicCurveComposite( pSingCrv) ;
if ( pCrvCo != nullptr) {
// unisco eventuali tratti allineati
pCrvCo->MergeCurves( LIN_TOL_MIN, ANG_TOL_STD_DEG) ;
@@ -253,7 +267,7 @@ SurfFlatRegion::AddIntLoop( ICurve* pCrv)
RemoveCurveSpikes( pCrvCo) ;
}
// aggiungo il loop
if ( ! AddSimpleIntLoop( pCrv))
if ( ! AddSimpleIntLoop( pSingCrv))
bOk = false ;
}
return bOk ;