EgtGeomKernel :
- piccola miglioria a GetSurfFlatRegionFromFatCurve per gestire interni.
This commit is contained in:
+29
-6
@@ -169,15 +169,21 @@ GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, b
|
||||
if ( ! OffsCrv1.Make( pCompo1, dRadius, nOffsType))
|
||||
return nullptr ;
|
||||
ICurve* pOffs1 = OffsCrv1.GetLongerCurve() ;
|
||||
if ( pOffs1 != nullptr)
|
||||
while ( pOffs1 != nullptr) {
|
||||
SfrCntr.AddCurve( pOffs1) ;
|
||||
pOffs1 = OffsCrv1.GetLongerCurve() ;
|
||||
}
|
||||
|
||||
// offset della seconda curva a destra del raggio (è invertita rispetto alla precedente)
|
||||
OffsetCurve OffsCrv2 ;
|
||||
if ( ! OffsCrv2.Make( pCompo2, dRadius, nOffsType))
|
||||
return nullptr ;
|
||||
ICurve* pOffs2 = OffsCrv2.GetLongerCurve() ;
|
||||
if ( pOffs2 != nullptr)
|
||||
while ( pOffs2 != nullptr) {
|
||||
SfrCntr.AddCurve( pOffs2) ;
|
||||
pOffs2 = OffsCrv2.GetLongerCurve() ;
|
||||
}
|
||||
|
||||
// creo la regione
|
||||
return SfrCntr.GetSurf() ;
|
||||
}
|
||||
@@ -194,6 +200,10 @@ GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, b
|
||||
PtrOwner<CurveComposite> pCompo2( pCompo1->Clone()) ;
|
||||
if ( IsNull( pCompo2) || ! pCompo2->Invert())
|
||||
return nullptr ;
|
||||
|
||||
// creo la regione
|
||||
SurfFlatRegionByContours SfrCntr( false, false) ;
|
||||
|
||||
// offset della prima curva a destra del raggio
|
||||
OffsetCurve OffsCrv1 ;
|
||||
if ( ! OffsCrv1.Make( pCompo1, dRadius, nOffsType))
|
||||
@@ -202,7 +212,14 @@ GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, b
|
||||
if ( pOffs1 == nullptr)
|
||||
return nullptr ;
|
||||
pCompo1->Clear() ;
|
||||
pCompo1->AddCurve( pOffs1) ;
|
||||
while ( pOffs1 != nullptr) {
|
||||
if ( pOffs1->IsClosed())
|
||||
SfrCntr.AddCurve( pOffs1) ;
|
||||
else
|
||||
pCompo1->AddCurve( pOffs1) ;
|
||||
pOffs1 = OffsCrv1.GetLongerCurve() ;
|
||||
}
|
||||
|
||||
// offset della seconda curva a destra del raggio
|
||||
OffsetCurve OffsCrv2 ;
|
||||
if ( ! OffsCrv2.Make( pCompo2, dRadius, nOffsType))
|
||||
@@ -211,7 +228,14 @@ GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, b
|
||||
if ( pOffs2 == nullptr)
|
||||
return nullptr ;
|
||||
pCompo2->Clear() ;
|
||||
pCompo2->AddCurve( pOffs2) ;
|
||||
while ( pOffs2 != nullptr) {
|
||||
if ( pOffs2->IsClosed())
|
||||
SfrCntr.AddCurve( pOffs2) ;
|
||||
else
|
||||
pCompo2->AddCurve( pOffs2) ;
|
||||
pOffs2 = OffsCrv2.GetLongerCurve() ;
|
||||
}
|
||||
|
||||
// se estremi squadrati
|
||||
if ( bSquareEnds) {
|
||||
// aggiungo alla prima curva una linea che la unisca alla seconda
|
||||
@@ -277,8 +301,7 @@ GetSurfFlatRegionFromFatCurve( ICurve* pCrv, double dRadius, bool bSquareEnds, b
|
||||
if ( ! pCompo1->AddCurve( Release( pCompo2)))
|
||||
return nullptr ;
|
||||
}
|
||||
// creo la regione
|
||||
SurfFlatRegionByContours SfrCntr( false, false) ;
|
||||
|
||||
SfrCntr.AddCurve( Release( pCompo1)) ;
|
||||
return SfrCntr.GetSurf() ;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user