Merge branch 'MoreBezier'

This commit is contained in:
Daniele Bariletti
2024-08-05 10:08:10 +02:00
4 changed files with 79 additions and 1 deletions
+72
View File
@@ -335,6 +335,30 @@ AreSamePointXYEpsilon( const Point3d& ptP1, const Point3d& ptP2, double dToler)
return ( SqDistXY( ptP1, ptP2) < ( dToler * dToler)) ;
}
//----------------------------------------------------------------------------
//! Verifica se due punti sono quasi coincidenti per esclusione (tolleranza come parametro)
//----------------------------------------------------------------------------
inline bool
AreSamePointStepEpsilon( const Point3d& ptP1, const Point3d& ptP2, double dToler)
{
double dX = ptP1.x - ptP2.x ;
if( dX > dToler)
return false ;
else {
double dY = ptP1.y - ptP2.y ;
if( dY > dToler)
return false ;
else {
double dTol = dToler * dToler ;
double dX2 = dX * dX ;
double dY2 = dY * dY ;
double dZ = ptP1.z- ptP2.z ;
double dZ2 = dZ * dZ ;
return dX2 + dY2 + dZ2 < dTol ;
}
}
}
//----------------------------------------------------------------------------
//! Verifica se due punti sono quasi coincidenti (Small error -> Approx)
//----------------------------------------------------------------------------
@@ -353,6 +377,30 @@ AreSamePointXYApprox( const Point3d& ptP1, const Point3d& ptP2)
return ( SqDistXY( ptP1, ptP2) < SQ_EPS_SMALL) ;
}
//----------------------------------------------------------------------------
//! Verifica se due punti sono quasi coincidenti per esclusione (tolleranza come parametro)
//----------------------------------------------------------------------------
inline bool
AreSamePointStepApprox( const Point3d& ptP1, const Point3d& ptP2)
{
double dX = ptP1.x - ptP2.x ;
if( dX > EPS_SMALL)
return false ;
else {
double dY = ptP1.y - ptP2.y ;
if( dY > EPS_SMALL)
return false ;
else {
double dTol = SQ_EPS_SMALL ;
double dX2 = dX * dX ;
double dY2 = dY * dY ;
double dZ = ptP1.z- ptP2.z ;
double dZ2 = dZ * dZ ;
return dX2 + dY2 + dZ2 < dTol ;
}
}
}
//----------------------------------------------------------------------------
//! Verifica se due punti sono esattamente coincidenti (Zero error -> Exact)
//----------------------------------------------------------------------------
@@ -371,6 +419,30 @@ AreSamePointXYExact( const Point3d& ptP1, const Point3d& ptP2)
return ( SqDistXY( ptP1, ptP2) < SQ_EPS_ZERO) ;
}
//----------------------------------------------------------------------------
//! Verifica se due punti sono quasi coincidenti per esclusione (tolleranza come parametro)
//----------------------------------------------------------------------------
inline bool
AreSamePointStepExact( const Point3d& ptP1, const Point3d& ptP2)
{
double dX = ptP1.x - ptP2.x ;
if( dX > EPS_ZERO)
return false ;
else {
double dY = ptP1.y - ptP2.y ;
if( dY > EPS_ZERO)
return false ;
else {
double dTol = SQ_EPS_ZERO ;
double dX2 = dX * dX ;
double dY2 = dY * dY ;
double dZ = ptP1.z- ptP2.z ;
double dZ2 = dZ * dZ ;
return dX2 + dY2 + dZ2 < dTol ;
}
}
}
//----------------------------------------------------------------------------
//! Restituisce una copia in locale del punto passato
//----------------------------------------------------------------------------
+1
View File
@@ -48,3 +48,4 @@ EGK_EXPORT ISurfBezier* GetSurfBezierByScrewing( const ICurve* pCurve, const Poi
//EGK_EXPORT ISurfBezier* GetSurfBezierTransSwept( const ICurve* pSect, const ICurve* pGuide, bool bCapEnds, double dLinTol = 10 * EPS_SMALL) ;
EGK_EXPORT ISurfBezier* GetSurfBezierRuled( const Point3d& ptP, const ICurve* pCurve, double dLinTol = 10 * EPS_SMALL) ;
EGK_EXPORT ISurfBezier* GetSurfBezierRuled( const ICurve* pCurve1, const ICurve* pCurve2, int nType, double dLinTol = 10 * EPS_SMALL) ;
EGK_EXPORT ISurfBezier* GetSurfBezierSkinned( const CICURVEPVECTOR& vCrv, double dLinTol = 10 * EPS_SMALL) ;
+5 -1
View File
@@ -33,7 +33,11 @@ public :
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
public : // IGeoObj
enum Is_Planar { NOT_CALCULATED = -1,
NOT_PLANAR_SURF = 0 ,
PLANAR_SURF = 1};
public : // IGeoObj
ISurfBezier* Clone( void) const override = 0 ;
public :
virtual bool CopyFrom( const IGeoObj* pGObjSrc) = 0 ;
+1
View File
@@ -386,6 +386,7 @@ EXE_EXPORT int ExeCreateSurfBzByRevolve( int nParentId, int nCrvId,
bool bCapEnds, double dLinTol, int nRefType) ;
EXE_EXPORT int ExeCreateSurfBzByPointCurve( int nParentId, int nCrvId, const Point3d& ptAx, bool bCapEnds, double dLinTol, int nRefType) ;
EXE_EXPORT int ExeCreateSurfBzRuled( int nParentId, int nCrvId1, int nCrvId2, int nRuledType, double dLinTol) ;
EXE_EXPORT int ExeCreateSurfBzSkinned( int nParentId, const INTVECTOR& nCrvId1, double dLinTol) ;
// GeomDB Create Volume
EXE_EXPORT int ExeCreateVolZmap( int nParentId, const Point3d& ptIni, double dDimX,