diff --git a/CurveAux.cpp b/CurveAux.cpp index a9e861c..4f32309 100644 --- a/CurveAux.cpp +++ b/CurveAux.cpp @@ -403,6 +403,40 @@ CopyThickness( const ICurve* pSouCrv, ICurve* pDestCrv) return true ; } +//---------------------------------------------------------------------------- +ICurve* +CurveToBezierCurve( const ICurve* pCrv) +{ + PtrOwner pBezierForm ; + switch ( pCrv->GetType()) { + case CRV_LINE :{ + const ICurveLine* pCrvLine = static_cast( pCrv) ; + pBezierForm.Set( LineToBezierCurve( pCrvLine)) ; + break ; + } + case CRV_ARC : { + const ICurveArc* pCrvArc = static_cast( pCrv) ; + pBezierForm.Set( ArcToBezierCurve( pCrvArc)) ; + break ; + } + case CRV_COMPO : { + const ICurveComposite* pCrvCompo = static_cast( pCrv) ; + pBezierForm.Set( CompositeToBezierCurve( pCrvCompo)) ; + break ; + } + case CRV_BEZIER : { + const ICurveBezier* pCrvBezier = static_cast( pCrv) ; + pBezierForm.Set( BezierToBasicBezierCurve( pCrvBezier)) ; + break ; + } + default : + return nullptr ; + break ; + } + + return Release( pBezierForm) ; +} + //---------------------------------------------------------------------------- ICurveBezier* LineToBezierCurve( const ICurveLine* pCrvLine) diff --git a/CurveBezier.cpp b/CurveBezier.cpp index afc6c6d..8fd2aed 100644 --- a/CurveBezier.cpp +++ b/CurveBezier.cpp @@ -2208,3 +2208,17 @@ CurveBezier::ResetVoronoiObject() const delete m_pVoronoiObj ; m_pVoronoiObj = nullptr ; } + +//---------------------------------------------------------------------------- +bool +CurveBezier::MakeRational( void) +{ + if ( m_bRat) + return true ; + // creo il vettore dei pesi e li setto tutti a 1 + m_vWeCtrl.assign( m_nDeg + 1, 1) ; + // aggiorno il flag rational + m_bRat = true ; + + return true ; +} diff --git a/CurveBezier.h b/CurveBezier.h index b402f6c..e51780a 100644 --- a/CurveBezier.h +++ b/CurveBezier.h @@ -148,6 +148,7 @@ class CurveBezier : public ICurveBezier, public IGeoObjRW double GetControlWeight( int nInd, bool* pbOk = NULL) const override ; bool GetControlPolygonLength( double& dLen) const override ; int GetSingularParam( double& dPar) const override ; + bool MakeRational( void) override ; public : // IGeoObjRW int GetNgeId( void) const override ;