f81bb32e20
- aggiornamento prototipi (aggiunta classe Distanza Punto Regione).
73 lines
2.9 KiB
C++
73 lines
2.9 KiB
C++
//----------------------------------------------------------------------------
|
|
// 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) ;}
|