//---------------------------------------------------------------------------- // EgalTech 2015-2015 //---------------------------------------------------------------------------- // File : EGkIntersLineSurfTm.h Data : 18.02.15 Versione : 1.6b7 // Contenuto : Dichiarazione della classe intersezione Linea/SurfTriMesh. // // // // Modifiche : 18.02.15 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once #include "/EgtDev/Include/EGkSurfTriMesh.h" #include "/EgtDev/Include/EGkIntersLineTria.h" #include "/EgtDev/Include/EGkHashGrids2d.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 - superficie trimesh struct IntLinStmInfo { int nILTT ; //!< tipo di intersezione linea-triangolo 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( 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) : nILTT( nIL), dU( dUU), dU2( dUU2), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2( ptP2) {} } ; //! 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) ; //----------------------------------------------------------------------------- class IntersParLinesSurfTm { public : EGK_EXPORT IntersParLinesSurfTm( const Frame3d& frLines, const ISurfTriMesh& Stm) ; EGK_EXPORT bool GetInters( const Point3d& ptL, double dLen, ILSIVECTOR& vInfo, bool bFinite = true) const ; private : bool m_bOk ; const Frame3d m_frLines ; const ISurfTriMesh* m_pSTm ; HashGrids2d m_HGrids ; } ; //----------------------------------------------------------------------------- EGK_EXPORT bool FilterLineSurfTmInters( const ILSIVECTOR& vInfo, INTDBLVECTOR& vInters) ;