diff --git a/CurveArc.cpp b/CurveArc.cpp index b7a9ce0..0d03474 100644 --- a/CurveArc.cpp +++ b/CurveArc.cpp @@ -1720,6 +1720,27 @@ CurveArc::ChangeDeltaN( double dNewDeltaN) return Validate() ; } +//---------------------------------------------------------------------------- +bool +CurveArc::ChangeStartPoint( double dU) +{ + // la curva deve essere chiusa (ne verifica anche lo stato) + if ( ! IsClosed()) + return false ; + // recupero il punto che corrisponde al valore del parametro + Point3d ptP ; + if ( ! GetPointD1D2( dU, ICurve::FROM_MINUS, ptP)) + return false ; + // cambio il versore start + Vector3d vtDir = ptP - m_PtCen ; + if ( ! vtDir.Normalize()) + return false ; + m_VtS = vtDir ; + // imposto ricalcolo della grafica + m_OGrMgr.Reset() ; + return true ; +} + //---------------------------------------------------------------------------- bool CurveArc::ToAdditional( void) diff --git a/CurveArc.h b/CurveArc.h index 850e465..31f8da7 100644 --- a/CurveArc.h +++ b/CurveArc.h @@ -155,6 +155,7 @@ class CurveArc : public ICurveArc, public IGeoObjRW virtual bool InvertN( void) ; virtual bool ChangeRadius( double dNewRadius) ; virtual bool ChangeDeltaN( double dNewDeltaN) ; + virtual bool ChangeStartPoint( double dU) ; virtual bool ExtendedOffset( double dDist, int nType = OFF_FILLET) ; virtual bool ToAdditional( void) ; virtual bool Flip( void) ; diff --git a/CurveComposite.cpp b/CurveComposite.cpp index a133ee9..7268b77 100644 --- a/CurveComposite.cpp +++ b/CurveComposite.cpp @@ -2100,27 +2100,8 @@ CurveComposite::ChangeStartPoint( double dU) if ( ! IsClosed()) return false ; - // il nuovo inizio è l'estremo di una curva semplice più vicino al parametro ricevuto - int nCurve = static_cast ( dU + 0.5) ; - - // verifico ci siano abbastanza curve - if ( nCurve > m_nCounter) - return false ; - - // tolgo le curve dalla testa e le inserisco in coda - for ( int i = 0 ; i < nCurve ; ++ i) { - // estraggo la curva dall'inizio - ICurve* pCrv = RemoveFirstOrLastCurve( false) ; - if ( pCrv == nullptr) - return false ; - // la inserisco alla fine - if ( ! AddCurve( pCrv, true)) { - delete pCrv ; - return false ; - } - } - - return true ; + // questa funzione gestisce già anche il cambio di inizio su curve chiuse + return TrimStartEndAtParam( dU, dU) ; } //---------------------------------------------------------------------------- diff --git a/EgtGeomKernel.rc b/EgtGeomKernel.rc index 3c4bd99..04a364a 100644 Binary files a/EgtGeomKernel.rc and b/EgtGeomKernel.rc differ