From b3d5483564431d144eff57c689d8f0996f2a3963 Mon Sep 17 00:00:00 2001 From: Dario Sassi Date: Mon, 26 Feb 2024 15:16:24 +0100 Subject: [PATCH] Include : - aggiornamento prototipi. --- EGkIntersCurveSurfTm.h | 63 +++++++++++++++++++++++++++++++++++++++++ EGkIntersLineSurfTm.h | 18 ++++++++++-- EGkIntersLineTria.h | 12 ++++---- EGkIntersLineVolZmap.h | 62 ++++++++++++++++++++++++++++++++++++++++ EGkIntersPlaneVolZmap.h | 27 ++++++++++++++++++ EGkVolZmap.h | 28 ------------------ EXeConst.h | 8 ------ EXeExecutor.h | 2 ++ 8 files changed, 175 insertions(+), 45 deletions(-) create mode 100644 EGkIntersCurveSurfTm.h create mode 100644 EGkIntersLineVolZmap.h create mode 100644 EGkIntersPlaneVolZmap.h diff --git a/EGkIntersCurveSurfTm.h b/EGkIntersCurveSurfTm.h new file mode 100644 index 0000000..122464f --- /dev/null +++ b/EGkIntersCurveSurfTm.h @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------------- +// EgalTech 2024-2024 +//---------------------------------------------------------------------------- +// File : EGkIntersCurveSurfTm.h Data : 23.02.24 Versione : 2.6b4 +// Contenuto : Dichiarazione della classe intersezione Curva/SurfTriMesh. +// +// +// +// Modifiche : 23.02.24 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkCurve.h" +#include "/EgtDev/Include/EGkSurfTriMesh.h" +#include "/EgtDev/Include/EGkIntersLineTria.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 + +//----------------------------------------------------------------------------- +//! dati di intersezione curva - superficie trimesh +struct IntCrvStmInfo { + int nILTT ; //!< tipo di intersezione curva-triangolo + double dU ; //!< parametro sulla curva (non distanza) + double dU2 ; //!< secondo parametro sulla curva (non distanza) + int nT ; //!< indice del triangolo della superficie trimesh + double dCosDN ; //!< coseno dell'angolo tra la direzione della curva e la normale del triangolo + Point3d ptI ; //!< punto di intersezione + Point3d ptI2 ; //!< secondo punto di intersezione (termine di tratto sovrapposto) + // costruttori + IntCrvStmInfo( void) : nILTT( ILTT_NO), dU( 0), dU2( 0), nT(0), dCosDN(0), ptI(), ptI2() {} + IntCrvStmInfo( int nIL, double dUU, int nTT, double dCos, const Point3d& ptP) + : nILTT( nIL), dU( dUU), dU2( 0), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2() {} + IntCrvStmInfo( int nIL, double dUU, double dUU2, int nTT, double dCos, const Point3d& ptP, const Point3d& ptP2) + : nILTT( nIL), dU( dUU), dU2( dUU2), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2( ptP2) {} +} ; +//! vettore di IntCrvStmInfo +typedef std::vector ICSIVECTOR ; + +//----------------------------------------------------------------------------- +// Costanti tipo intersezione filtrata Curva-Superficie +enum CSiType { CSIT_NONE = 0, + CSIT_OUT_IN = 1, + CSIT_IN_OUT = 2, + CSIT_IN_IN = 3, + CSIT_OUT_OUT = 4, + CSIT_IN_ON = 5, + CSIT_ON_IN = 6, + CSIT_OUT_ON = 7, + CSIT_ON_OUT = 8} ; + +//----------------------------------------------------------------------------- +EGK_EXPORT bool IntersCurveSurfTm( const ICurve& Curve, const ISurfTriMesh& Stm, double dLinTol, ICSIVECTOR& vInfo) ; +EGK_EXPORT bool IntersCurveSurfTmExt( const ICurve& Curve, const ISurfTriMesh& Stm, double dLinTol, INTDBLVECTOR& vInters) ; +EGK_EXPORT bool FilterCurveSurfTmInters( const ICurve& Curve, const ICSIVECTOR& vInfo, INTDBLVECTOR& vInters) ; diff --git a/EGkIntersLineSurfTm.h b/EGkIntersLineSurfTm.h index e344c28..1aa857a 100644 --- a/EGkIntersLineSurfTm.h +++ b/EGkIntersLineSurfTm.h @@ -29,14 +29,14 @@ //! dati di intersezione linea - superficie trimesh struct IntLinStmInfo { int nILTT ; //!< tipo di intersezione linea-triangolo - double dU ; //!< parametro sulla linea - double dU2 ; //!< secondo parametro sulla linea + double dU ; //!< distanza sulla linea + double dU2 ; //!< seconda distanza sulla linea int nT ; //!< indice del triangolo della superficie 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) // costruttori - IntLinStmInfo( void) : nILTT( ILTT_NO), dU( 0), dU2( 0), nT(0), dCosDN(0), ptI(), ptI2() {} + IntLinStmInfo( void) : nILTT( ILTT_NO), dU( 0), dU2( 0), nT( 0), dCosDN( 0), ptI(), ptI2() {} IntLinStmInfo( int nIL, double dUU, int nTT, double dCos, const Point3d& ptP) : nILTT( nIL), dU( dUU), dU2( 0), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2() {} IntLinStmInfo( int nIL, double dUU, double dUU2, int nTT, double dCos, const Point3d& ptP, const Point3d& ptP2) @@ -45,6 +45,15 @@ struct IntLinStmInfo { //! vettore di IntLinStmInfo typedef std::vector ILSIVECTOR ; +//----------------------------------------------------------------------------- +// Costanti tipo intersezione Linea SurfTriMesh dopo filtraggio +enum LSiType { LST_NONE = 0, + LST_IN = 1, + LST_OUT = 2, + LST_TG_INI = 3, + LST_TG_FIN = 4, + LST_TOUCH = 5} ; + //----------------------------------------------------------------------------- EGK_EXPORT bool IntersLineSurfTm( const Point3d& ptL, const Vector3d& vtL, double dLen, const ISurfTriMesh& Stm, ILSIVECTOR& vInfo, bool bFinite = true) ; @@ -62,3 +71,6 @@ class IntersParLinesSurfTm const ISurfTriMesh* m_pSTm ; HashGrids2d m_HGrids ; } ; + +//----------------------------------------------------------------------------- +EGK_EXPORT bool FilterLineSurfTmInters( const ILSIVECTOR& vInfo, INTDBLVECTOR& vInters) ; diff --git a/EGkIntersLineTria.h b/EGkIntersLineTria.h index 3cf11f0..77660fc 100644 --- a/EGkIntersLineTria.h +++ b/EGkIntersLineTria.h @@ -23,12 +23,6 @@ #define EGK_EXPORT __declspec( dllimport) #endif -//----------------------------------------------------------------------------- -EGK_EXPORT int IntersLineTria( const Point3d& ptL1, const Point3d& ptL2, const Triangle3d& trTria, - Point3d& ptInt, Point3d& ptInt2, bool bFinite = true) ; -EGK_EXPORT int IntersLineTria( const Point3d& ptL, const Vector3d& vtL, double dLen, const Triangle3d& trTria, - Point3d& ptInt, Point3d& ptInt2, bool bFinite = true) ; - //----------------------------------------------------------------------------- // Tipo di intersezione linea-triangolo enum IntLineTriaType { ILTT_NO = 0, // non c'è intersezione @@ -37,3 +31,9 @@ enum IntLineTriaType { ILTT_NO = 0, // non c' ILTT_VERT = 3, // intersezione coincide con un vertice ILTT_EDGE = 4, // intersezione coincide con interno di un lato ILTT_IN = 5} ; // intersezione in interno del triangolo + +//----------------------------------------------------------------------------- +EGK_EXPORT int IntersLineTria( const Point3d& ptL1, const Point3d& ptL2, const Triangle3d& trTria, + Point3d& ptInt, Point3d& ptInt2, bool bFinite = true) ; +EGK_EXPORT int IntersLineTria( const Point3d& ptL, const Vector3d& vtL, double dLen, const Triangle3d& trTria, + Point3d& ptInt, Point3d& ptInt2, bool bFinite = true) ; diff --git a/EGkIntersLineVolZmap.h b/EGkIntersLineVolZmap.h new file mode 100644 index 0000000..d083264 --- /dev/null +++ b/EGkIntersLineVolZmap.h @@ -0,0 +1,62 @@ +//---------------------------------------------------------------------------- +// EgalTech 2024-2024 +//---------------------------------------------------------------------------- +// File : EGkIntersLineVolZmap.h Data : 22.02.24 Versione : 2.6b4 +// Contenuto : Dichiarazione prototipi intersezione Linea/VolZmap. +// +// +// +// Modifiche : 22.02.24 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkVolZmap.h" +#include "/EgtDev/Include/EGkIntersLineTria.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 + +//----------------------------------------------------------------------------- +// dati di intersezione linea - volume Zmap +struct IntLineZmapInfo { + int nILTT ; // Tipo di intersezione linea-triangolo + double dU ; // Distanza sulla linea + double dU2 ; // Seconda distanza sulla linea + int nVox ; // Indice del voxel del triangolo + int nBlock ; // Indice del blocco del triangolo + Triangle3d trTria ; // Triangolo + 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) + // Costruttori + IntLineZmapInfo( void) + : nILTT( ILTT_NO), dU( 0), dU2( 0), nVox( -1), nBlock( -1), trTria(), dCosDN( 0), ptI(), ptI2() {} + IntLineZmapInfo( int nIL, double dUU, int nVx, int nBl, Triangle3d& trTr, double dCos, const Point3d& ptP) + : nILTT( nIL), dU( dUU), dU2( 0), nVox( nVx), nBlock( nBl), dCosDN( dCos), trTria( trTr), ptI( ptP), ptI2() {} + IntLineZmapInfo( int nIL, double dUU, double dUU2, int nVx, int nBl, Triangle3d& trTr, double dCos, + const Point3d& ptP, const Point3d& ptP2) + : nILTT( nIL), dU( dUU), dU2( dUU2), nVox( nVx), nBlock( nBl), trTria( trTr), dCosDN( dCos), ptI( ptP), ptI2( ptP2) {} +} ; +// Vettore di IntLineZmapInfo +typedef std::vector ILZIVECTOR ; + +//----------------------------------------------------------------------------- +// Costanti tipo intersezione Linea VolZmap dopo filtraggio +enum LZiType { LZT_NONE = 0, + LZT_IN = 1, + LZT_OUT = 2, + LZT_TG_INI = 3, + LZT_TG_FIN = 4, + LZT_TOUCH = 5} ; + +//----------------------------------------------------------------------------- +EGK_EXPORT bool IntersLineVolZmap( const Point3d& ptL, const Vector3d& vtL, const IVolZmap& Vzm, ILZIVECTOR& vInfo) ; +EGK_EXPORT bool FilterLineVolZmapInters( const ILZIVECTOR& vInfo, INTDBLVECTOR& vInters) ; diff --git a/EGkIntersPlaneVolZmap.h b/EGkIntersPlaneVolZmap.h new file mode 100644 index 0000000..fac31b5 --- /dev/null +++ b/EGkIntersPlaneVolZmap.h @@ -0,0 +1,27 @@ +//---------------------------------------------------------------------------- +// EgalTech 2024-2024 +//---------------------------------------------------------------------------- +// File : EGkIntersPlaneVolZmap.h Data : 22.02.24 Versione : 2.6b4 +// Contenuto : Dichiarazione prototipi intersezione Piano/VolZmap. +// +// +// +// Modifiche : 22.02.24 DS Creazione modulo. +// +// +//---------------------------------------------------------------------------- + +#pragma once + +#include "/EgtDev/Include/EGkVolZmap.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 + +//----------------------------------------------------------------------------- +EGK_EXPORT bool IntersPlaneVolZmap( const Plane3d& plPlane, const IVolZmap& Vzm, ICURVEPOVECTOR& vpLoop) ; diff --git a/EGkVolZmap.h b/EGkVolZmap.h index 0a81696..f1a1245 100644 --- a/EGkVolZmap.h +++ b/EGkVolZmap.h @@ -15,35 +15,9 @@ #pragma once #include "/EgtDev/Include/EGkGeoObj.h" -#include "/EgtDev/Include/EGkPolyLine.h" #include "/EgtDev/Include/EGkCurveComposite.h" #include "/EgtDev/Include/EGkSurfFlatRegion.h" #include "/EgtDev/Include/EGkSurfTriMesh.h" -#include "/EgtDev/Include/EGkTriangle3d.h" -#include "/EgtDev/Include/EGkIntersLineTria.h" - -// ------------------------- STRUTTURE ----------------------------------------------------------- -// Informazioni su intersezione linea - volume Zmap -struct IntLineZmapInfo { - int nILTT ; // Tipo di intersezione linea-triangolo - double dU ; // Parametro sulla linea - double dU2 ; // Secondo parametro sulla linea - int nVox ; // Indice del voxel del triangolo - int nBlock ; // Indice del blocco del triangolo - Point3d ptI ; // Punto di intersezione - Point3d ptI2 ; // Secondo punto di intersezione (termine di tratto sovrapposto) - Triangle3d trTria ; // Triangolo - // Costruttori - IntLineZmapInfo( void) - : nILTT( ILTT_NO), dU( 0), dU2( 0), nVox( -1), nBlock( -1), ptI(), ptI2(), trTria() {} - IntLineZmapInfo( int nIL, double dUU, int nVx, int nBl, const Point3d& ptP, Triangle3d& trTr) - : nILTT( nIL), dU( dUU), dU2( 0), nVox( nVx), nBlock( nBl), ptI( ptP), ptI2(), trTria( trTr) {} - IntLineZmapInfo( int nIL, double dUU, double dUU2, int nVx, int nBl, - const Point3d& ptP, const Point3d& ptP2, Triangle3d& trTr) - : nILTT( nIL), dU( dUU), dU2( dUU2), nVox( nVx), nBlock( nBl), ptI( ptP), ptI2( ptP2), trTria( trTr) {} -} ; -// Vettore di IntLineZmapInfo -typedef std::vector ILZIVECTOR ; //---------------------------------------------------------------------------- class __declspec( novtable) IVolZmap : public IGeoObj @@ -89,8 +63,6 @@ class __declspec( novtable) IVolZmap : public IGeoObj const Point3d& ptPs, const Vector3d& vtDs, const Vector3d& vtAs, const Point3d& ptPe, const Vector3d& vtDe, const Vector3d& vtAe) = 0 ; virtual bool GetDepth( const Point3d& ptP, const Vector3d& vtDir, double& dInLength, double& dOutLength, bool bExact) const = 0 ; - virtual bool GetLineIntersection( const Point3d& ptP, const Vector3d& vtD, ILZIVECTOR& vIntersInfo) const = 0 ; - virtual bool GetPlaneIntersection( const Plane3d& plPlane, ICURVEPOVECTOR& vpLoop) const = 0 ; virtual bool CDeBox( const Frame3d& frBox, const Vector3d& vtDiag, double dSafeDist, bool bPrecise = false) const = 0 ; virtual bool CDeSphere( const Point3d& ptCenter, double dRad, double dSafeDist, bool bPrecise = false) const = 0 ; virtual bool CDeCylinder( const Frame3d& frCyl, double dR, double dH, double dSafeDist, bool bPrecise = false) const = 0 ; diff --git a/EXeConst.h b/EXeConst.h index b6352d3..181478a 100644 --- a/EXeConst.h +++ b/EXeConst.h @@ -78,14 +78,6 @@ enum CLiType { CLT_NONE = 0, CLT_TGINI_OUT = 7, CLT_TGFIN_OUT = 8} ; -//----------------- Costanti tipo punto intersezione Linea SurfTriMesh --------- -enum SLiType { SLT_NONE = 0, - SLT_IN = 1, - SLT_OUT = 2, - SLT_TG_INI = 3, - SLT_TG_FIN = 4, - SLT_TOUCH = 5} ; - //----------------- Costanti tipo di costruzione di superficie rigata ---------- enum RuledType{ RUL_TYPE_ISOPAR = 0, // come ISurfTrimesh::RLT_ISOPAR RUL_TYPE_MINDIST = 1, // come ISurfTrimesh::RLT_MINDIST diff --git a/EXeExecutor.h b/EXeExecutor.h index 12cf406..4927c0a 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -822,6 +822,8 @@ EXE_EXPORT int ExePlaneVolZmapInters( const Point3d& ptOn, const Vector3d& vtN, int* pnCount) ; EXE_EXPORT int ExeCurveCurveInters( const int nId1, const int nId2, const int nDestGrpId, int* pnPntCount, int* pnCrvCount) ; +EXE_EXPORT int ExeCurveSurfTmInters( const int nCrvId, const int nStmId, const int nDestGrpId, + int* pnPntCount, int* pnCrvCount) ; EXE_EXPORT int ExeSurfTmSurfTmInters( int nId1, int nId2, int nDestGrpId, double dToler, int* pnPntCount, int* pnCrvCount, int* pnSrfCount) ;