Include :

- aggiunta funzione Pow per potenze con esponente intere caclolate in modo efficiente
- aggiunti prototipi di funzioni per impostazione tolleranze per superfici di Bezier.
This commit is contained in:
Dario Sassi
2025-08-22 11:29:30 +02:00
parent fd382173c9
commit 31436bfb7c
2 changed files with 47 additions and 13 deletions
+26 -13
View File
@@ -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<ISurfBezier*>(pGObj)) ; }
//----------------------------------------------------------------------------
EGK_EXPORT void SetSurfBezierAuxSurfTol( double dTol) ;
EGK_EXPORT void SetSurfBezierAuxSurfRefinedTol( double dTol) ;
//----------------------------------------------------------------------------
// Raccolte di puntatori a ISurfBezier
typedef std::vector<const ISurfBezier*> CISURFBEZPVECTOR ; // vettore di puntatori a const ISurfBezier
+21
View File
@@ -13,6 +13,8 @@
#pragma once
#include <cmath>
//----------------------------------------------------------------------------
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 ;
}
}