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) ; }