71e670357b
- aggiornamento prototipi.
89 lines
4.6 KiB
C++
89 lines
4.6 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2024
|
|
//----------------------------------------------------------------------------
|
|
// File : EGkIntersLineSurfBez.h Data : 06.02.24 Versione : 2.6b1
|
|
// Contenuto : Dichiarazione della classe intersezione Linea/SurfTriMesh.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 06.02.24 DB Creazione modulo.
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "/EgtDev/Include/EGkSurfTriMesh.h"
|
|
#include "/EgtDev/Include/EGkIntersLineTria.h"
|
|
#include "/EgtDev/Include/EGkHashGrids2d.h"
|
|
#include "/EgtDev/Include/EGkSurfBezier.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
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Costanti tipo intersezione Linea SurfTriMesh dopo filtraggio
|
|
enum LSBiType { LSBT_NONE = 0,
|
|
LSBT_IN = 1,
|
|
LSBT_OUT = 2,
|
|
LSBT_TG_INI = 3,
|
|
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
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//! dati di intersezione linea - superficie bezier
|
|
struct IntLinSbzInfo {
|
|
int nILSB ; //!< tipo di intersezione linea-bezier
|
|
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) : nILSB( LSBT_NONE), dU( 0), dU2( 0), nT(0), dCosDN(0), ptI(), ptI2(), ptUV(), ptUV2(){}
|
|
IntLinSbzInfo( int nILS, double dUU, int nTT, double dCos, const Point3d& ptP, const Point3d ptSP)
|
|
: nILSB( nILS), dU( dUU), dU2( 0), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2(), ptUV( ptSP), ptUV2() {}
|
|
IntLinSbzInfo( int nILS, double dUU, double dUU2, int nTT, double dCos, const Point3d& ptP, const Point3d& ptP2, const Point3d& ptSP, const Point3d& ptSP2)
|
|
: nILSB( nILS), dU( dUU), dU2( dUU2), nT( nTT), dCosDN( dCos), ptI( ptP), ptI2( ptP2), ptUV( ptSP), ptUV2( ptSP2) {}
|
|
} ;
|
|
//! vettore di IntLinSbzInfo
|
|
typedef std::vector<IntLinSbzInfo> ILSBIVECTOR ;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
EGK_EXPORT bool IntersLineSurfBz( const Point3d& ptL, const Vector3d& vtL, double dLen, const ISurfBezier* pSBz,
|
|
ILSBIVECTOR& vInfo, bool bFinite = true) ;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
class IntersParLinesSurfBz
|
|
{
|
|
public :
|
|
EGK_EXPORT IntersParLinesSurfBz( const Frame3d& frLines, const ISurfBezier& SBz) ;
|
|
EGK_EXPORT bool GetInters( const Point3d& ptL, double dLen, ILSBIVECTOR& vInfo, bool bFinite = true) const ;
|
|
|
|
private :
|
|
bool m_bOk ;
|
|
const Frame3d m_frLines ;
|
|
const ISurfBezier* m_pSBz ;
|
|
HashGrids2d m_HGrids ;
|
|
} ;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
EGK_EXPORT bool FilterLineSurfBzInters( const ILSBIVECTOR& vInfo, INTDBLVECTOR& vInters) ; |