//---------------------------------------------------------------------------- // EgalTech 2024-2024 //---------------------------------------------------------------------------- // File : EGkDistPointSurfFr.h Data : 18.07.24 Versione : 2.6g5 // Contenuto : Dichiarazione della classe distanza Punto da FlatRegion. // // // // Modifiche : 18.07.24 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once #include "/EgtDev/Include/EGkSurfFlatRegion.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 //---------------------------------------------------------------------------- // Calcola la distanza tra punto e Flat Region. // Risultati : // - distanza // - punto sulla superficie a minima distanza // - indici del chunk e del loop e parametro del punto di frontiera a minima distanza // - indicazione se il punto passato è sul bordo (PRS_ON), interno (PRS_IN) o esterno (PRS_OUT) alla regione. // Note : // - nel caso di più punti di frontiera vicini, ne viene calcolato solo uno // - se il punto non giace nel piano della Regione //---------------------------------------------------------------------------- //---------------------------------------------------------------------------- enum PrSide { PRS_IN = -1, PRS_ON = 0, PRS_OUT = +1} ; // Corrispondono a MDS_LEFT, MDS_ON e MDS_RIGHT per giacitura punto rispetto a curva. //---------------------------------------------------------------------------- class DistPointSurfFr { public : EGK_EXPORT DistPointSurfFr( const Point3d& ptP, const ISurfFlatRegion& frSurf) ; public : EGK_EXPORT bool GetDist( double& dDist) const ; EGK_EXPORT bool GetDistOnRegionPlane( double& dDist) const ; EGK_EXPORT bool GetPointAtMinDist( Point3d& ptMinDistPoint) const ; EGK_EXPORT bool GetParamAtMinDist( int& nMinChunk, int& nMinLoop, double& dMinPar) const ; EGK_EXPORT bool GetSideAtMinDist( int& nSide) const ; private : void Calculate( const Point3d& ptP, const ISurfFlatRegion& frSurf) ; private : double m_dDist ; double m_dDistOnPlane ; int m_nMinChunk ; int m_nMinLoop ; double m_dMinPar ; Point3d m_ptMinDistPoint ; int m_nSide ; } ; //---------------------------------------------------------------------------- // Verifica velocizzata EGK_EXPORT bool IsPointInsideSurfFr( const Point3d& ptP, const ISurfFlatRegion* pSfr, double dMinDist, bool& bInside, int& nChunk) ; inline bool IsPointInsideSurfFr( const Point3d& ptP, const ISurfFlatRegion* pSfr, double dMinDist, bool& bInside) { int nChunk ; return IsPointInsideSurfFr( ptP, pSfr, dMinDist, bInside, nChunk) ;}