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:
+28
-14
@@ -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 ;
|
||||
|
||||
Reference in New Issue
Block a user