//---------------------------------------------------------------------------- // EgalTech 2013-2024 //---------------------------------------------------------------------------- // File : EGkDistPointLine.h Data : 20.05.24 Versione : 2.6e5 // Contenuto : Dichiarazione della classe distanza punto da linea/segmento. // // // // Modifiche : 30.12.12 DS Creazione modulo. // 20.05.24 DS Pubblicato in Include. // //---------------------------------------------------------------------------- #pragma once #include "/EgtDev/Include/EGkPoint3d.h" #include "/EgtDev/Include/EGkCurveLine.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 //----------------------------------------------------------------------------- class DistPointLine { friend class DistPointCurve ; public : EGK_EXPORT DistPointLine( const Point3d& ptP, const ICurveLine& crvLine, bool bIsSegment = true) ; EGK_EXPORT DistPointLine( const Point3d& ptP, const Point3d& ptIni, const Point3d& ptFin, bool bIsSegment = true) ; EGK_EXPORT DistPointLine( const Point3d& ptP, const Point3d& ptIni, const Vector3d& vtDir, double dLen, bool bIsSegment = true) ; public : EGK_EXPORT bool GetSqDist( double& dSqDist) const ; EGK_EXPORT bool GetDist( double& dDist) const ; EGK_EXPORT bool IsEpsilon( double dTol) const { double dSqDist ; return ( GetSqDist( dSqDist) && ( dSqDist < SQ_EPS_ZERO || dSqDist < dTol * dTol)) ; } EGK_EXPORT bool IsSmall( void) const { return IsEpsilon( EPS_SMALL) ; } EGK_EXPORT bool IsZero( void) const { return IsEpsilon( EPS_ZERO) ; } EGK_EXPORT int GetNbrMinDist( void) const { return (( m_dSqDist < 0) ? 0 : 1) ; } EGK_EXPORT bool GetMinDistPoint( Point3d& ptMinDist) const ; EGK_EXPORT bool GetParamAtMinDistPoint( double& dParam) const ; private : void Calculate( const Point3d& ptP, const Point3d& ptIni, const Vector3d& vtDir, double dLen, bool bIsSegment) ; private : double m_dSqDist ; mutable double m_dDist ; double m_dParam ; Point3d m_ptMinDist ; } ;