//---------------------------------------------------------------------------- // EgalTech 2014-2014 //---------------------------------------------------------------------------- // File : EGkCurveAux.h Data : 23.05.14 Versione : 1.5e9 // Contenuto : Dichiarazione funzioni ausiliarie per ICurve. // // // // Modifiche : 23.05.14 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once #include "/EgtDev/Include/EGkCurveComposite.h" //----------------------- Macro per import/export ---------------------------- #undef EGK_EXPORT #if defined( I_AM_EGK) // da definirsi solo nella DLL #define EGK_EXPORT __declspec( dllexport) #else #define EGK_EXPORT __declspec( dllimport) #endif //---------------------------------------------------------------------------- //! Struttura dati per curva Nurbs struct CNurbsData { int nDeg ; // grado bool bRat ; // flag di curva razionale (pesi non tutti unitari) bool bPeriodic ; // flag per segnalare vettore dei nodi periodico bool bClosed ; // flag di curva chiusa bool bExtraKnotes ; // flag per segnalare presenza di nodi extra all'inizio e fine (totale 2) DBLVECTOR vU ; // vettore dei nodi PNTVECTOR vCP ; // vettore dei punti di controllo DBLVECTOR vW ; // vettore dei pesi CNurbsData( void) : nDeg( 0), bRat( false), bPeriodic( false), bClosed( false), bExtraKnotes( false) {} } ; //---------------------------------------------------------------------------- //! Trasforma un arco in una nuova curva di Bezier semplice o composta EGK_EXPORT ICurve* ArcToBezierCurve( const ICurve* pArc) ; //---------------------------------------------------------------------------- //! Trasforma una curva in una nuova curva semplice o composta senza archi (solo linee o curve di Bezier) EGK_EXPORT ICurve* CurveToNoArcsCurve( const ICurve* pCrv) ; //---------------------------------------------------------------------------- //! Trasformo una curva in una nuova curva semplice o composta con linee o archi perp. a estrusione EGK_EXPORT ICurve* CurveToArcsPerpExtrCurve( const ICurve* pCrv, double dLinTol, double dAngTolDeg) ; //---------------------------------------------------------------------------- //! Rende canonica la rappresentazione della curva Nurbs EGK_EXPORT bool NurbsCurveCanonicalize( CNurbsData& cnData) ; //---------------------------------------------------------------------------- //! Trasforma una curva Nurbs standard in una nuova curva di Bezier semplice o composta EGK_EXPORT ICurve* NurbsToBezierCurve( const CNurbsData& cnData) ; //---------------------------------------------------------------------------- //! Appiattisce la curva sul suo piano medio se rientra nelle tolleranze const int FLTCRV_STD = 0 ; const int FLTCRV_USE_EXTR = 1 ; const int FLTCRV_SET_EXTR = 2 ; EGK_EXPORT ICurve* FlattenCurve( const ICurve& crCrv, double dToler, double dAngToler, int nFlag = FLTCRV_STD) ; //---------------------------------------------------------------------------- //! Proietta la curva sul piano indicato EGK_EXPORT ICurve* ProjectCurveOnPlane( const ICurve& crCrv, const Plane3d& plPlane) ; //---------------------------------------------------------------------------- //! Uniforma la pendenza di una composita tra quota iniziale e finale assegnate EGK_EXPORT bool AdjustCurveSlope( ICurveComposite* pCrv, double dNini, double dNfin) ;