diff --git a/EGkSurfBezier.h b/EGkSurfBezier.h index d4e0620..c79ff3a 100644 --- a/EGkSurfBezier.h +++ b/EGkSurfBezier.h @@ -1,13 +1,13 @@ //---------------------------------------------------------------------------- -// EgalTech 2020-2024 +// EgalTech 2020-2025 //---------------------------------------------------------------------------- -// File : EGkSurfBezier.h Data : 10.04.24 Versione : 2.6d2 +// File : EGkSurfBezier.h Data : 22.08.25 Versione : 2.7h1 // Contenuto : Dichiarazione della interfaccia ISurfBezier. // // // // Modifiche : 22.03.20 DS Creazione modulo. -// +// 22.08.25 DS Aggiunte funzioni globali di impostazione tolleranze. // //---------------------------------------------------------------------------- @@ -17,6 +17,15 @@ #include "/EgtDev/Include/EGkCurveComposite.h" #include "/EgtDev/Include/EgtPointerOwner.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 + +//----------------------- Forward -------------------------------------------- class PolyLine ; class ICurveComposite ; class ISurfFlatRegion ; @@ -28,16 +37,16 @@ class __declspec( novtable) ISurfBezier : public ISurf public : enum Side { FROM_MINUS = -1, // da valori inferiori del parametro FROM_PLUS = 1} ; // da valori superiori del parametro -public : - enum RuledType { RLT_B_ISOPAR = 0, // con parametrizzazione simile tra le due curve - RLT_B_MINDIST = 1, // con distanza minima tra le due curve, usando start e end delle curve presenti - RLT_B_MINDIST_PLUS = 2, // con distanza minima tra le due curve, aggiungendo punti lungo le curve dove necessario - RLT_B_LENPAR = 3} ; // aggiungo punti alla curve in modo da matchare meglio le sottocurve, inoltre parametrizzo le curve in base alla lunghezza e non al numero di curve - enum Is_Planar { NOT_CALCULATED = -1, - NOT_PLANAR_SURF = 0 , - PLANAR_SURF = 1}; + public : + enum RuledType { RLT_B_ISOPAR = 0, // con parametrizzazione simile tra le due curve + RLT_B_MINDIST = 1, // con distanza minima tra le due curve, usando start e end delle curve presenti + RLT_B_MINDIST_PLUS = 2, // con distanza minima tra le due curve, aggiungendo punti lungo le curve dove necessario + RLT_B_LENPAR = 3} ; // aggiungo punti alla curve in modo da matchare meglio le sottocurve, inoltre parametrizzo le curve in base alla lunghezza e non al numero di curve + enum Is_Planar { NOT_CALCULATED = -1, + NOT_PLANAR_SURF = 0 , + PLANAR_SURF = 1} ; -public : // IGeoObj + public : // IGeoObj ISurfBezier* Clone( void) const override = 0 ; public : virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ; @@ -94,7 +103,7 @@ public : // IGeoObj } ; //----------------------------------------------------------------------------- -static const double SBZ_TREG_COEFF = 1000 ; +static const double SBZ_TREG_COEFF = 1024 ; //----------------------------------------------------------------------------- inline ISurfBezier* CreateSurfBezier( void) @@ -112,6 +121,10 @@ inline ISurfBezier* GetSurfBezier( IGeoObj* pGObj) return nullptr ; return (static_cast(pGObj)) ; } +//---------------------------------------------------------------------------- +EGK_EXPORT void SetSurfBezierAuxSurfTol( double dTol) ; +EGK_EXPORT void SetSurfBezierAuxSurfRefinedTol( double dTol) ; + //---------------------------------------------------------------------------- // Raccolte di puntatori a ISurfBezier typedef std::vector CISURFBEZPVECTOR ; // vettore di puntatori a const ISurfBezier diff --git a/EgtNumUtils.h b/EgtNumUtils.h index a43ed9f..946bb4a 100644 --- a/EgtNumUtils.h +++ b/EgtNumUtils.h @@ -13,6 +13,8 @@ #pragma once +#include + //---------------------------------------------------------------------------- inline int Clamp( int nVal, int nMin, int nMax) @@ -34,3 +36,22 @@ bool IsEven( int nVal) return ( ( nVal % 2) == 0) ; } +//---------------------------------------------------------------------------- +inline +double Pow( double dBase, int nExp) +{ + if ( nExp == 0) + return 1 ; + else if ( nExp < 0) { + if ( dBase < -DBL_EPSILON || dBase > DBL_EPSILON) + return Pow( 1 / dBase, -nExp) ; + else + return NAN ; + } + else { + double dVal = 1 ; + for ( int i = 1 ; i <= nExp ; ++ i) + dVal *= dBase ; + return dVal ; + } +}