From 700b2ad5caaf3dcfcfd8914be4b7fa7fe4fee7dc Mon Sep 17 00:00:00 2001 From: SaraP Date: Tue, 13 Sep 2022 17:07:04 +0200 Subject: [PATCH] EgtGeomKernel : - piccola miglioria a GetSurfFlatRegionFromFatCurve per gestire interni. --- SfrCreate.cpp | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/SfrCreate.cpp b/SfrCreate.cpp index 15f02be..f118932 100644 --- a/SfrCreate.cpp +++ b/SfrCreate.cpp @@ -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 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() ; }