45c642e51a
- salvataggio file come UTF-8 no BOM.
110 lines
4.5 KiB
C++
110 lines
4.5 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2025
|
|
//----------------------------------------------------------------------------
|
|
// File : EGkIntersCurvePlane.h Data : 07.11.25 Versione : 2.7k1
|
|
// Contenuto : Dichiarazione della classe intersezione curva-piano.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 07.11.25 DB Creazione modulo.
|
|
//
|
|
//
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "/EgtDev/Include/EGkPoint3d.h"
|
|
#include "/EgtDev/Include/EGkCurve.h"
|
|
#include "/EgtDev/Include/EGkIntersCurves.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
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Tipo di intersezione
|
|
// nulla
|
|
// puntiforme
|
|
// sovrapposizione
|
|
|
|
// Costanti per tipo di approccio/allontanamento dall'intersezione
|
|
const int ICPT_NULL = 0 ; //!< Approccio/allontanamento non definito
|
|
const int ICPT_IN = 1 ; //!< Approccio/allontanamento interno
|
|
const int ICPT_OUT = 2 ; //!< Approccio/allontanamento esterno
|
|
const int ICPT_ON = 3 ; //!< Approccio/allontanamento sovrapposto
|
|
|
|
//! dati di intersezione tra una curva e un piano
|
|
struct IntCrvPlnInfo {
|
|
bool bOverlap ; //!< intersezione con overlap
|
|
IntCrvInfo Ici[2] ; //!< Ici[0] intersez. isolata o inizio overlap, Ici[1] fine overlap
|
|
// costruttore
|
|
IntCrvPlnInfo( void)
|
|
: bOverlap( false) {}
|
|
} ;
|
|
//! vettore di IntCrvPlnInfo
|
|
typedef std::vector<IntCrvPlnInfo> ICPIVECTOR ;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//! Classificazione di parti di curva rispetto ad un piano
|
|
struct CrvPlaneClass {
|
|
double dParS ;
|
|
double dParE ;
|
|
int nClass ;
|
|
// costruttori
|
|
CrvPlaneClass( void)
|
|
: dParS( 0), dParE( 0), nClass( 0) {}
|
|
CrvPlaneClass( double dPS, double dPE, int nC)
|
|
: dParS( dPS), dParE( dPE), nClass( nC) {}
|
|
} ;
|
|
//! Vettore di CrvPlaneClass
|
|
typedef std::vector<CrvPlaneClass> CRVPLNCVECTOR ;
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Costanti per classe parti di curva rispetto ad un piano
|
|
const int CRVPLN_NULL = 0 ; //!< Parte di curva non classificabile
|
|
const int CRVPLN_IN = 1 ; //!< Parte di curva interna ( dal lato negativo della normale)
|
|
const int CRVPLN_OUT = 2 ; //!< Parte di curva esterna ( dal lato positivo della normale)
|
|
const int CRVPLN_ON = 3 ; //!< Parte di curva sovrapposta al piano
|
|
|
|
//-----------------------------------------------------------------------------
|
|
//! Classe per calcolo intersezione tra una curve e un piano, nel riferimento locale del piano
|
|
class IntersCurvePlane
|
|
{
|
|
public :
|
|
//! Le intersezioni sono calcolate nel piano XY locale.<br>
|
|
EGK_EXPORT IntersCurvePlane( const ICurve& CurveA, const Point3d& ptOrig, const Vector3d& vtN) ;
|
|
|
|
public :
|
|
//! Indica la presenza di intersezioni con sovrapposizioni
|
|
EGK_EXPORT bool GetOverlaps( void) ;
|
|
//! Restituisce il numero di intersezioni (intersezioni doppie coincidenti e sovrapposte contano uno)
|
|
EGK_EXPORT int GetIntersCount( void) ;
|
|
//! Restituisce informazioni sull'intersezione di indice nInd ( 0 based)
|
|
EGK_EXPORT bool GetIntCrvPlnInfo( int nInd, IntCrvPlnInfo& aInfo) ;
|
|
//! Restituisce il punto di intersezione più vicino al punto passato
|
|
EGK_EXPORT bool GetIntersPointNearTo( const Point3d& ptNear, Point3d& ptI, double& dParam) ;
|
|
//! Restituisce la classificazione di una curva rispetto al piano
|
|
EGK_EXPORT bool GetCurveClassification( double dLenMin, CRVPLNCVECTOR& ccClass) ;
|
|
|
|
private :
|
|
IntersCurvePlane( void) ;
|
|
bool CalcIntersLinePlane( const Plane3d& plPlane, const ICurve& Curve, int nCrv = 0) ;
|
|
bool IsArcToApprox( const ICurve& Curve) ;
|
|
bool AdjustIntersParams( bool bAdjCrv) ;
|
|
bool CalcCurveClassification( const ICurve* pCurve, const ICPIVECTOR& Info, double dLenMin, CRVPLNCVECTOR& ccClass) ;
|
|
bool CalcCurveInOrOut( const ICurve* pCurve, CRVPLNCVECTOR& ccClass) ;
|
|
void OrderAndCompleteIntersections() ;
|
|
|
|
private :
|
|
int m_nIntersType ;
|
|
int m_nIntersCount ;
|
|
ICPIVECTOR m_Info ;
|
|
const ICurve* m_pCurve ; // puntatore alla curva
|
|
Plane3d m_plPlane ;
|
|
} ;
|