fd382173c9
- In IntersParLinesSurfTm aggiunta estensione per intersezione con vettore di superfici TriMesh e aggiunto indice di superficie in IntLinStmInfo.
83 lines
4.0 KiB
C++
83 lines
4.0 KiB
C++
//----------------------------------------------------------------------------
|
|
// 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 nStm ; //!< indice della superficie TriMesh di intersezione
|
|
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), nStm( 0), nT( 0), dCosDN( 0), ptI(), ptI2() {}
|
|
IntLinStmInfo( int nIL, double dUU, int nSurfTm, int nTT, double dCos, const Point3d& ptP)
|
|
: nILTT( nIL), dU( dUU), dU2( 0), nStm( nSurfTm), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2() {}
|
|
IntLinStmInfo( int nIL, double dUU, double dUU2, int nSurfTm, int nTT, double dCos, const Point3d& ptP, const Point3d& ptP2)
|
|
: nILTT( nIL), dU( dUU), dU2( dUU2), nStm( nSurfTm), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2( ptP2) {}
|
|
} ;
|
|
//! vettore di IntLinStmInfo
|
|
typedef std::vector<IntLinStmInfo> 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 IntersParLinesSurfTm( const Frame3d& frLines, const CISURFTMPVECTOR& vStm) ;
|
|
EGK_EXPORT bool GetInters( const Point3d& ptL, double dLen, ILSIVECTOR& vInfo, bool bFinite = true) const ;
|
|
|
|
private :
|
|
int GetSurfInd( int nT) const ;
|
|
|
|
private :
|
|
bool m_bOk ;
|
|
const Frame3d m_frLines ; // direzione della linea come versore Z
|
|
CISURFTMPVECTOR m_vpSTm ; // vettore delle superfici con cui calcolare le intersezioni con le linee
|
|
INTVECTOR m_vBaseInd ; // [0, nTriaStm0, nTriaStm0 + nTriaStm1, nTriaStm0 + nTriaStm1 + nTriaStm2, ...]
|
|
HashGrids2d m_HGrids ; // HasGrid di ottimizzazione per ricerca triangoli
|
|
} ;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
EGK_EXPORT bool FilterLineSurfTmInters( const ILSIVECTOR& vInfo, INTDBLVECTOR& vInters) ;
|