From 9cbfcd74226ac982d34815a6385e431101b29bb9 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Wed, 10 Sep 2025 09:47:47 +0200 Subject: [PATCH 1/3] Include : - aggiunte intersezioni linea triangolo ausiliario per le sup di bezier. --- EGkIntersLineSurfBez.h | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/EGkIntersLineSurfBez.h b/EGkIntersLineSurfBez.h index e446042..3394085 100644 --- a/EGkIntersLineSurfBez.h +++ b/EGkIntersLineSurfBez.h @@ -29,7 +29,7 @@ //----------------------------------------------------------------------------- //! dati di intersezione linea - superficie trimesh struct IntLinSbzInfo { - int nILTT ; //!< tipo di intersezione linea-triangolo // se -1 vuol dire che l'intersezione è stata calcolata direttamente, senza usare la trimesh + int nILTA ; //!< tipo di intersezione linea-triangolo // se -1 vuol dire che l'intersezione è stata calcolata direttamente, senza usare la trimesh double dU ; //!< parametro sulla linea double dU2 ; //!< secondo parametro sulla linea int nT ; //!< indice del triangolo della superficie trimesh // se -1 vuol dire che l'intersezione è stata calcolata direttamente, senza usare la trimesh @@ -39,11 +39,11 @@ struct IntLinSbzInfo { Point3d ptUV ; //!< coordinate del punto nello spazio parametrico Point3d ptUV2 ; //!< coordinate del secondo punto nello spazio parametrico // costruttori - IntLinSbzInfo( void) : nILTT( ILTT_NO), dU( 0), dU2( 0), nT(0), dCosDN(0), ptI(), ptI2(), ptUV(), ptUV2(){} - IntLinSbzInfo( int nIL, double dUU, int nTT, double dCos, const Point3d& ptP, const Point3d ptSP) - : nILTT( nIL), dU( dUU), dU2( 0), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2(), ptUV( ptSP), ptUV2() {} - IntLinSbzInfo( int nIL, double dUU, double dUU2, int nTT, double dCos, const Point3d& ptP, const Point3d& ptP2, const Point3d& ptSP, const Point3d& ptSP2) - : nILTT( nIL), dU( dUU), dU2( dUU2), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2( ptP2), ptUV( ptSP), ptUV2( ptSP2) {} + IntLinSbzInfo( void) : nILTA( ILTA_NO), dU( 0), dU2( 0), nT(0), dCosDN(0), ptI(), ptI2(), ptUV(), ptUV2(){} + IntLinSbzInfo( int nILTA, double dUU, int nTT, double dCos, const Point3d& ptP, const Point3d ptSP) + : nILTT( nILTA), dU( dUU), dU2( 0), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2(), ptUV( ptSP), ptUV2() {} + IntLinSbzInfo( int nILTA, double dUU, double dUU2, int nTT, double dCos, const Point3d& ptP, const Point3d& ptP2, const Point3d& ptSP, const Point3d& ptSP2) + : nILTT( nILTA), dU( dUU), dU2( dUU2), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2( ptP2), ptUV( ptSP), ptUV2( ptSP2) {} } ; //! vettore di IntLinSbzInfo typedef std::vector ILSBIVECTOR ; @@ -57,6 +57,16 @@ enum LSBiType { LSBT_NONE = 0, LSBT_TG_FIN = 4, LSBT_TOUCH = 5} ; +//----------------------------------------------------------------------------- +// Tipo di intersezione linea-triangolo ausiliario (della trimesh ausilaria) +enum IntLineTriaAuxType { ILTA_NO_TRIA = -1, // l'intersezione è stata calcolata direttamente con la superficie bezier + ILTA_NO = 0, // non c'è intersezione + ILTA_SEGM = 1, // una parte di linea appartiene all'interno del triangolo + ILTA_SEGM_ON_EDGE = 2, // una parte di linea appartiene ad un lato del triangolo + ILTA_VERT = 3, // intersezione coincide con un vertice + ILTA_EDGE = 4, // intersezione coincide con interno di un lato + ILTA_IN = 5} ; // intersezione in interno del triangolo + //----------------------------------------------------------------------------- EGK_EXPORT bool IntersLineSurfBz( const Point3d& ptL, const Vector3d& vtL, double dLen, const ISurfBezier* pSBz, ILSBIVECTOR& vInfo, bool bFinite = true) ; From d39e6dfe191d603494c959695d8cea7006125015 Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Fri, 12 Sep 2025 13:18:19 +0200 Subject: [PATCH 2/3] Include : - enum per intersezione linea bezier. --- EGkIntersLineSurfBez.h | 48 +++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/EGkIntersLineSurfBez.h b/EGkIntersLineSurfBez.h index 3394085..2fb536b 100644 --- a/EGkIntersLineSurfBez.h +++ b/EGkIntersLineSurfBez.h @@ -26,28 +26,6 @@ #define EGK_EXPORT __declspec( dllimport) #endif -//----------------------------------------------------------------------------- -//! dati di intersezione linea - superficie trimesh -struct IntLinSbzInfo { - int nILTA ; //!< tipo di intersezione linea-triangolo // se -1 vuol dire che l'intersezione è stata calcolata direttamente, senza usare la trimesh - double dU ; //!< parametro sulla linea - double dU2 ; //!< secondo parametro sulla linea - int nT ; //!< indice del triangolo della superficie trimesh // se -1 vuol dire che l'intersezione è stata calcolata direttamente, senza usare la trimesh - double dCosDN ; //!< coseno dell'angolo tra la direzione della linea e la normale del triangolo - Point3d ptI ; //!< punto di intersezione - Point3d ptI2 ; //!< secondo punto di intersezione (termine di tratto sovrapposto) - Point3d ptUV ; //!< coordinate del punto nello spazio parametrico - Point3d ptUV2 ; //!< coordinate del secondo punto nello spazio parametrico - // costruttori - IntLinSbzInfo( void) : nILTA( ILTA_NO), dU( 0), dU2( 0), nT(0), dCosDN(0), ptI(), ptI2(), ptUV(), ptUV2(){} - IntLinSbzInfo( int nILTA, double dUU, int nTT, double dCos, const Point3d& ptP, const Point3d ptSP) - : nILTT( nILTA), dU( dUU), dU2( 0), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2(), ptUV( ptSP), ptUV2() {} - IntLinSbzInfo( int nILTA, double dUU, double dUU2, int nTT, double dCos, const Point3d& ptP, const Point3d& ptP2, const Point3d& ptSP, const Point3d& ptSP2) - : nILTT( nILTA), dU( dUU), dU2( dUU2), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2( ptP2), ptUV( ptSP), ptUV2( ptSP2) {} -} ; -//! vettore di IntLinSbzInfo -typedef std::vector ILSBIVECTOR ; - //----------------------------------------------------------------------------- // Costanti tipo intersezione Linea SurfTriMesh dopo filtraggio enum LSBiType { LSBT_NONE = 0, @@ -59,14 +37,36 @@ enum LSBiType { LSBT_NONE = 0, //----------------------------------------------------------------------------- // Tipo di intersezione linea-triangolo ausiliario (della trimesh ausilaria) -enum IntLineTriaAuxType { ILTA_NO_TRIA = -1, // l'intersezione è stata calcolata direttamente con la superficie bezier - ILTA_NO = 0, // non c'è intersezione +enum IntLineTriaAuxType { ILTA_NO_TRIA = -1, // l'intersezione è stata calcolata direttamente con la superficie bezier + ILTA_NO = 0, // non c'è intersezione ILTA_SEGM = 1, // una parte di linea appartiene all'interno del triangolo ILTA_SEGM_ON_EDGE = 2, // una parte di linea appartiene ad un lato del triangolo ILTA_VERT = 3, // intersezione coincide con un vertice ILTA_EDGE = 4, // intersezione coincide con interno di un lato ILTA_IN = 5} ; // intersezione in interno del triangolo +//----------------------------------------------------------------------------- +//! dati di intersezione linea - superficie trimesh +struct IntLinSbzInfo { + int nILTA ; //!< tipo di intersezione linea-triangolo // se -1 vuol dire che l'intersezione � stata calcolata direttamente, senza usare la trimesh + double dU ; //!< parametro sulla linea + double dU2 ; //!< secondo parametro sulla linea + int nT ; //!< indice del triangolo della superficie trimesh // se -1 vuol dire che l'intersezione � stata calcolata direttamente, senza usare la trimesh + double dCosDN ; //!< coseno dell'angolo tra la direzione della linea e la normale del triangolo + Point3d ptI ; //!< punto di intersezione + Point3d ptI2 ; //!< secondo punto di intersezione (termine di tratto sovrapposto) + Point3d ptUV ; //!< coordinate del punto nello spazio parametrico + Point3d ptUV2 ; //!< coordinate del secondo punto nello spazio parametrico + // costruttori + IntLinSbzInfo( void) : nILTA( ILTA_NO), dU( 0), dU2( 0), nT(0), dCosDN(0), ptI(), ptI2(), ptUV(), ptUV2(){} + IntLinSbzInfo( int nILT, double dUU, int nTT, double dCos, const Point3d& ptP, const Point3d ptSP) + : nILTA( nILT), dU( dUU), dU2( 0), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2(), ptUV( ptSP), ptUV2() {} + IntLinSbzInfo( int nILT, double dUU, double dUU2, int nTT, double dCos, const Point3d& ptP, const Point3d& ptP2, const Point3d& ptSP, const Point3d& ptSP2) + : nILTA( nILT), dU( dUU), dU2( dUU2), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2( ptP2), ptUV( ptSP), ptUV2( ptSP2) {} +} ; +//! vettore di IntLinSbzInfo +typedef std::vector ILSBIVECTOR ; + //----------------------------------------------------------------------------- EGK_EXPORT bool IntersLineSurfBz( const Point3d& ptL, const Vector3d& vtL, double dLen, const ISurfBezier* pSBz, ILSBIVECTOR& vInfo, bool bFinite = true) ; From 65e20afeabfe98536f4aaab5a0eb3b563fdd232e Mon Sep 17 00:00:00 2001 From: Daniele Bariletti Date: Fri, 12 Sep 2025 15:39:24 +0200 Subject: [PATCH 3/3] Include : - aggiornate le interfacce per le funzioni di conversione di curve in/da bezier. --- EGkCurveAux.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/EGkCurveAux.h b/EGkCurveAux.h index e695fd2..137fb1f 100644 --- a/EGkCurveAux.h +++ b/EGkCurveAux.h @@ -51,19 +51,19 @@ EGK_EXPORT ICurve* CurveToBezierCurve( const ICurve* pCrv, int nDeg = 3, bool bM //---------------------------------------------------------------------------- //! Trasforma una linea in una nuova curva di Bezier semplice -EGK_EXPORT ICurveBezier* LineToBezierCurve( const ICurve* pCrv, int nDeg = 3, bool bMakeRatOrNot = true) ; +EGK_EXPORT ICurveBezier* LineToBezierCurve( const ICurveLine* pCrvLine, int nDeg = 3, bool bMakeRatOrNot = true) ; //---------------------------------------------------------------------------- //! Trasforma un arco in una nuova curva di Bezier semplice o composta -EGK_EXPORT ICurve* ArcToBezierCurve( const ICurve* pArc, int nDeg = 3, bool bMakeRatOrNot = true) ; +EGK_EXPORT ICurve* ArcToBezierCurve( const ICurveArc* pArc, int nDeg = 3, bool bMakeRatOrNot = true) ; //---------------------------------------------------------------------------- //! Trasforma una curva compo in una nuova curva di Bezier semplice o composta -EGK_EXPORT ICurve* CompositeToBezierCurve( const ICurve* pCrv, int nDeg = 3, bool bMakeRatOrNot = true) ; +EGK_EXPORT ICurve* CompositeToBezierCurve( const ICurveComposite* pCrv, int nDeg = 3, bool bMakeRatOrNot = true) ; //---------------------------------------------------------------------------- //! Trasforma una curva bezier in una nuova curva di Bezier semplice o composta della razionalità e grado desiderato ( minimo 3) -EGK_EXPORT ICurve* EditBezierCurve( const ICurve* pCrv, int nDeg = 3, bool bMakeRatOrNot = true, double dTol = 10 * EPS_SMALL) ; +EGK_EXPORT ICurve* EditBezierCurve( const ICurveBezier* pCrv, int nDeg = 3, bool bMakeRatOrNot = true, double dTol = 10 * EPS_SMALL) ; //---------------------------------------------------------------------------- //! Approssima una bezier con una serie di bezier cubiche