From f0968a8d40a329cd9fa304084c859a3e0ef6650a Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Fri, 19 Jul 2024 13:14:53 +0200 Subject: [PATCH 1/3] Include : - aggiunte le skinned con le bezier. --- EGkSbzFromCurves.h | 1 + EXeExecutor.h | 1 + 2 files changed, 2 insertions(+) diff --git a/EGkSbzFromCurves.h b/EGkSbzFromCurves.h index a688a21..6ca56da 100644 --- a/EGkSbzFromCurves.h +++ b/EGkSbzFromCurves.h @@ -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) ; diff --git a/EXeExecutor.h b/EXeExecutor.h index 9a244ad..29688ea 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -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, From d6e6531d9264a0e5d0d4d0bc3f75e624f71779b8 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Thu, 25 Jul 2024 16:25:43 +0200 Subject: [PATCH 2/3] =?UTF-8?q?Include=20:=20-=20aggiunta=20di=20un=20enum?= =?UTF-8?q?=20per=20il=20calcolo=20della=20planarit=C3=A0=20di=20una=20sup?= =?UTF-8?q?erficie=20di=20Bezier.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- EGkSurfBezier.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/EGkSurfBezier.h b/EGkSurfBezier.h index aa049dd..08e6fd2 100644 --- a/EGkSurfBezier.h +++ b/EGkSurfBezier.h @@ -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 ; From e51df31d13779b29b0ecc067bef40283139644b4 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Tue, 30 Jul 2024 16:25:17 +0200 Subject: [PATCH 3/3] Include : - aggiunta di una funzione per la distanza tra punti. --- EGkPoint3d.h | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/EGkPoint3d.h b/EGkPoint3d.h index eb82b46..699a514 100644 --- a/EGkPoint3d.h +++ b/EGkPoint3d.h @@ -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 //----------------------------------------------------------------------------