diff --git a/EXeExecutor.h b/EXeExecutor.h index aa19439..0c3b990 100644 --- a/EXeExecutor.h +++ b/EXeExecutor.h @@ -809,6 +809,8 @@ EXE_EXPORT bool ExeLineBoxInters( const Point3d& ptP, const Vector3d& vtDir, con INTDBLVECTOR& vInters) ; EXE_EXPORT bool ExeLineSurfTmInters( const Point3d& ptP, const Vector3d& vtDir, int nId, int nRefType, INTDBLVECTOR& vInters) ; +EXE_EXPORT bool ExeLineSurfBzInters( const Point3d& ptP, const Vector3d& vtDir, int nId, int nRefType, + INTDBLVECTOR& vInters) ; EXE_EXPORT bool ExeLineVolZmapInters( const Point3d& ptP, const Vector3d& vtDir, int nId, int nRefType, INTDBLVECTOR& vInters) ; EXE_EXPORT int ExePlaneCurveInters( const Point3d& ptOn, const Vector3d& vtN, const int nId, const int nDestGrpId, const int nRefType, diff --git a/EgkIntersLineSurfBez.h b/EgkIntersLineSurfBez.h new file mode 100644 index 0000000..69ef158 --- /dev/null +++ b/EgkIntersLineSurfBez.h @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------------- +// 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 + +//----------------------------------------------------------------------------- +//! dati di intersezione linea - superficie trimesh +struct IntLinSbzInfo { + int nILTT ; //!< tipo di intersezione linea-triangolo + double dU ; //!< parametro sulla linea + double dU2 ; //!< secondo parametro 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) + 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) {} +} ; +//! 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) ; + +//----------------------------------------------------------------------------- +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 ; +} ;