//---------------------------------------------------------------------------- // EgalTech 2023-2023 //---------------------------------------------------------------------------- // File : EGkSurfAux.h Data : 09.08.23 Versione : // Contenuto : Dichiarazione funzioni ausiliarie per ISurf. // // // // Modifiche : 09.08.23 DB Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once #include "/EgtDev/Include/EGkCurveComposite.h" #include "/EgtDev/Include/EGkSurf.h" #include "/EgtDev/Include/EGkGeoCollection.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 superficie Nurbs struct SNurbsSurfData { int nDegU ; // grado in U int nDegV ; // grado in V bool bRat ; // flag di superficie razionale (pesi non tutti unitari) bool bPeriodicU ; // flag per segnalare vettore dei nodi periodico in U bool bPeriodicV ; // flag per segnalare vettore dei nodi periodico in V bool bClosedU ; // flag di superficie chiusa sul parametro U bool bClosedV ; // flag di superficie chiusa sul parametro V bool bClampedU ; // flag di superficie clamped sul parametro U bool bClampedV ; // flag di superficie clamped sul parametro V bool bExtraKnotes ; // flag per segnalare presenza di nodi extra all'inizio e fine (totale 2) DBLVECTOR vU ; // vettore dei nodi in U DBLVECTOR vV ; // vettore dei nodi in V int nCPU ; // numero di punti di controllo in U int nCPV ; // numero di punti di controllo in V PNTVECTOR vCP ; // vettore dei punti di controllo PNTMATRIX mCP ; // matrice dei punti di controllo DBLMATRIX mW ; // matrice dei pesi SNurbsSurfData( void) : nDegU( 0), nDegV( 0), bRat( false), bPeriodicU( false), bPeriodicV( false), bClosedU( false), bClosedV( false), bClampedU( false), bClampedV( false), bExtraKnotes(false) {} } ; // N.B. : in caso la superficie sia razionale i punti di controllo sono in forma NON OMOGENEA [ x, y, z, w] ( dove la forma omogenea è [ w*x, w*y, w*z, w]) // tutte le operazioni richiedono la forma OMOGENEA, finite le quali posso riportarmi alla forma NON OMOGENEA //---------------------------------------------------------------------------- //! Trasforma una superficie Nurbs standard in una nuova superficie di Bezier semplice o composta EGK_EXPORT bool NurbsSurfaceCanonicalize( SNurbsSurfData& snData) ; EGK_EXPORT ISurf* NurbsToBezierSurface( const SNurbsSurfData& snData) ;