//---------------------------------------------------------------------------- // EgalTech 2023-2026 //---------------------------------------------------------------------------- // File : EGkProjectCurveSurfTm.h Data : 14.04.26 Versione : 3.1d3 // Contenuto : Dichiarazione funzioni proiezione curve su superficie Trimesh. // // // // Modifiche : 31.08.23 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once #include "/EgtDev/Include/EGkGeoPoint3d.h" #include "/EgtDev/Include/EGkCurve.h" #include "/EgtDev/Include/EGkSurf.h" #include "/EgtDev/Include/EGkSurfTriMesh.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 enum P5AxAng { // Tipologia di punto P5AX_TO_DELETE = -1 , // da cancellare P5AX_OUT = 0 , // aggiunto prima di inizio o dopo fine P5AX_STD = 1 , // standard P5AX_CVEX = 2 , // su angolo convesso P5AX_CONC = 3 , // in angolo concavo P5AX_BEFORE_CONC = 4 , // adiacente ad angolo concavo P5AX_AFTER_CONC = 5 , // adiacente ad angolo concavo P5AX_SMOOTH_CONC = 6 // zona concava curva, senza spigolo netto }; //---------------------------------------------------------------------------- // Definizione di Punto 5assi e sue raccolte struct Point5ax { Point3d ptP ; Vector3d vtDir1 ; Vector3d vtDir2 ; Vector3d vtDirU ; Vector3d vtDirV ; double dPar ; int nFlag ; Point5ax( void) : ptP(), vtDir1(), vtDir2(), vtDirU(), vtDirV(), dPar(), nFlag() {} ; Point5ax( const Point3d& ptBase, const Vector3d& vtTool, double dU, int nData) : ptP( ptBase), vtDir1( vtTool), vtDir2(), vtDirU(), vtDirV(), dPar( dU), nFlag( nData) {} ; Point5ax( const Point3d& ptBase, const Vector3d& vtTool, const Vector3d& vtTool2, double dU, int nData) : ptP( ptBase), vtDir1( vtTool), vtDir2( vtTool2), vtDirU(), vtDirV(), dPar( dU), nFlag( nData) {} ; Point5ax( const Point3d& ptBase, const Vector3d& vtTool, const Vector3d& vtTool2, const Vector3d& vtDU, const Vector3d& vtDV, double dU, int nData) : ptP( ptBase), vtDir1( vtTool), vtDir2( vtTool2), vtDirU( vtDU), vtDirV( vtDV), dPar( dU), nFlag( nData) {} ; } ; typedef std::vector PNT5AXVECTOR ; // vettore di Punti 5assi //---------------------------------------------------------------------------- // Proiezione di una curva su una o più superfici a distanza minima EGK_EXPORT bool ProjectCurveOnSurf( const ICurve& crCrv, const CISURFPVECTOR& vpSurf, double dLinTol, double dMaxSegmLen, bool bSharpEdges, PNT5AXVECTOR& vPt5ax, bool bNormOrTang = true) ; // Proiezione di una curva su una o più superfici lungo la direzione data (da o verso) EGK_EXPORT bool ProjectCurveOnSurf( const ICurve& crCrv, const CISURFPVECTOR& vpSurf, const Vector3d& vtDir, double dLinTol, double dMaxSegmLen, bool bSharpEdges, bool bFromVsTo, PNT5AXVECTOR& vPt5ax) ; // Proiezione di una curva su una o più superfici in direzione del punto (da o verso) EGK_EXPORT bool ProjectCurveOnSurf( const ICurve& crCrv, const CISURFPVECTOR& vpSurf, const IGeoPoint3d& gpRef, double dLinTol, double dMaxSegmLen, bool bSharpEdges, bool bFromVsTo, PNT5AXVECTOR& vPt5ax) ; // Proiezione di una curva su una o più superfici in direzione della curva (da o verso) EGK_EXPORT bool ProjectCurveOnSurf( const ICurve& crCrv, const CISURFPVECTOR& vpSurf, const ICurve& crRef, double dLinTol, double dMaxSegmLen, bool bSharpEdges, bool bFromVsTo, PNT5AXVECTOR& vPt5ax) ; // Proiezione di una curva su una o più superfici in direzione della superficie (da o verso) EGK_EXPORT bool ProjectCurveOnSurf( const ICurve& crCrv, const CISURFPVECTOR& vpSurf, const ISurf& sfRef, double dLinTol, double dMaxSegmLen, bool bSharpEdges, bool bFromVsTo, PNT5AXVECTOR& vPt5ax) ; // Proiezione di una curva su una o più superfici in direzione della superficie (da o verso) EGK_EXPORT bool GetCurveOnSurfInfo( const ICurve& crCrv, const ISurfTriMesh& pSurf, double dLinTol, double dMaxSegmLen, bool bSharpEdges, PNT5AXVECTOR& vPt5ax, bool bNormOrTang = true) ;