From 3ef15352f51f4bf549ddee26e00b830b8dec3d5b Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Sun, 30 Aug 2020 11:27:31 +0000 Subject: [PATCH] EgtGeomKernel : - a funzione FlattenCurve aggiunto parametro opzionale per uso estrusione. --- CurveAux.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/CurveAux.cpp b/CurveAux.cpp index 7512a58..48ebc9a 100644 --- a/CurveAux.cpp +++ b/CurveAux.cpp @@ -701,14 +701,16 @@ NurbsToBezierCurve( const CNurbsData& cnData) //---------------------------------------------------------------------------- ICurve* -FlattenCurve( const ICurve& crCrv, double dToler, double dAngToler) +FlattenCurve( const ICurve& crCrv, double dToler, double dAngToler, int nFlag) { // Determino il piano medio della curva e verifico se scostamento accettabile Plane3d plMid ; - if ( ! crCrv.IsFlat( plMid, false, dToler)) + if ( ! crCrv.IsFlat( plMid, ( nFlag == FLTCRV_USE_EXTR), dToler)) return nullptr ; // Recupero estrusione rispetto alla normale al piano medio Vector3d vtExtr ; crCrv.GetExtrusion( vtExtr) ; + if ( nFlag == FLTCRV_USE_EXTR) + plMid.Set( plMid.GetPoint(), vtExtr) ; // Determino il suo centro geometrico Point3d ptCen ; if ( ! crCrv.GetCentroid( ptCen)) @@ -732,7 +734,14 @@ FlattenCurve( const ICurve& crCrv, double dToler, double dAngToler) if ( IsNull( pCrv)) return nullptr ; // assegno estrusione - pCrv->SetExtrusion( vtExtr) ; + if ( nFlag != FLTCRV_SET_EXTR) + pCrv->SetExtrusion( vtExtr) ; + else { + if ( vtExtr * plMid.GetVersN() >= 0) + pCrv->SetExtrusion( plMid.GetVersN()) ; + else + pCrv->SetExtrusion( - plMid.GetVersN()) ; + } // restituisco la copia della curva return Release( pCrv) ; } @@ -750,7 +759,14 @@ FlattenCurve( const ICurve& crCrv, double dToler, double dAngToler) if ( ! pCrv->Scale( frRef, 1, 1, 0)) return nullptr ; // assegno estrusione - pCrv->SetExtrusion( vtExtr) ; + if ( nFlag != FLTCRV_SET_EXTR) + pCrv->SetExtrusion( vtExtr) ; + else { + if ( vtExtr * plMid.GetVersN() >= 0) + pCrv->SetExtrusion( plMid.GetVersN()) ; + else + pCrv->SetExtrusion( - plMid.GetVersN()) ; + } // restituisco la nuova curva return Release( pCrv) ; }