7084ab34c8
- spostata la funzione GetChainedCurves.
100 lines
4.6 KiB
C++
100 lines
4.6 KiB
C++
//----------------------------------------------------------------------------
|
|
// EgalTech 2014-2020
|
|
//----------------------------------------------------------------------------
|
|
// File : EGkChainCurves.h Data : 07.10.20 Versione : 2.2j1
|
|
// Contenuto : Dichiarazione funzione per concatenamento curve.
|
|
//
|
|
//
|
|
//
|
|
// Modifiche : 20.07.14 DS Creazione modulo.
|
|
// 10.09.19 DS Aggiunto m_vPtFork (vettore punti di fork).
|
|
// 07.10.20 Ds A Init aggiunto parametro dCellDim.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include "/EgtDev/Include/EGkPointGrid3d.h"
|
|
#include "/EgtDev/Include/EGkGeoCollection.h"
|
|
|
|
class IGeomDB ;
|
|
|
|
//----------------------- 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 ChainCurves
|
|
{
|
|
public :
|
|
EGK_EXPORT ChainCurves( void)
|
|
: m_bAllowInvert( false), m_dToler( EPS_SMALL), m_bIsFork( false) {}
|
|
|
|
public :
|
|
//! Inizializza il concatenamento
|
|
EGK_EXPORT bool Init( bool bAllowInvert, double dToler, int nCrvNbrHint, double dCellDim = 10) ;
|
|
//! Aggiunge una curva tra quelle disponibili per il concatenamento
|
|
EGK_EXPORT bool AddCurve( int nId, const Point3d& ptStart, const Vector3d& vtStart,
|
|
const Point3d& ptEnd, const Vector3d& vtEnd) ;
|
|
//! Concatenazione automatica nei due sensi dall'entità più vicina al punto passato
|
|
EGK_EXPORT bool GetChainFromNear( const Point3d& ptStart, bool bHaltOnFork, INTVECTOR& vIds) ;
|
|
//! Concatenazione in avanti da punto e direzione passati, con possibilità di arresto su biforcazione
|
|
EGK_EXPORT bool GetChainFromPoint( const Point3d& ptStart, const Vector3d& vtStart,
|
|
const Point3d& ptStop, bool bHaltOnFork,
|
|
INTVECTOR& vIds, bool& bStopped) ;
|
|
//! \brief Concatenazione all'indietro da punto e direzione passati, con possibilità di arresto su biforcazione.
|
|
//! Anche l'ordine delle entità restituite è rovesciato
|
|
EGK_EXPORT bool GetReverseChainFromPoint( const Point3d& ptStart, const Vector3d& vtStart,
|
|
const Point3d& ptStop, bool bHaltOnFork,
|
|
INTVECTOR& vIds, bool& bStopped) ;
|
|
//! Restituisce flag di arresto su biforcazione
|
|
EGK_EXPORT bool IsFork( void)
|
|
{ return m_bIsFork ; }
|
|
//! Restituisce il vettore con gli Id delle entità tra cui scegliere sulla biforcazione
|
|
EGK_EXPORT bool GetForkIds( INTVECTOR& vForkIds) ;
|
|
|
|
private :
|
|
struct CrvData {
|
|
int nId ;
|
|
Point3d ptStart ;
|
|
Vector3d vtStart ;
|
|
Point3d ptEnd ;
|
|
Vector3d vtEnd ;
|
|
CrvData( void) : nId( 0), ptStart(), vtStart(), ptEnd(), vtEnd() {}
|
|
CrvData( int nI, const Point3d& ptS, const Vector3d& vtS, const Point3d& ptE, const Vector3d& vtE)
|
|
: nId( nI), ptStart( ptS), vtStart( vtS), ptEnd( ptE), vtEnd( vtE) {}
|
|
} ;
|
|
typedef std::vector<CrvData> CRVDATAVECTOR ;
|
|
struct ForkData {
|
|
Point3d ptFork ;
|
|
INTVECTOR vnFork ;
|
|
ForkData( void) : ptFork(), vnFork() {}
|
|
ForkData( const Point3d& ptP, const INTVECTOR& vF)
|
|
: ptFork( ptP), vnFork( vF) {}
|
|
} ;
|
|
typedef std::vector<ForkData> FORKDATAVECTOR ;
|
|
typedef FORKDATAVECTOR::iterator FDV_CONST_ITER ;
|
|
|
|
private :
|
|
bool AddToChain( int nId, bool bEquiv, INTVECTOR& vIds) ;
|
|
bool RemoveEntityFromGrid( int nInd) ;
|
|
bool ChooseStart( const Point3d& ptStart, const INTVECTOR& vStart, int& nStart) ;
|
|
bool ChooseNext( const Point3d& ptCurr, const Vector3d& vtCurr, const INTVECTOR& vNext, bool bHaltOnFork, int& nNext) ;
|
|
bool ChoosePrev( const Point3d& ptCurr, const Vector3d& vtCurr, const INTVECTOR& vPrev, bool bHaltOnFork, int& nPrev) ;
|
|
FDV_CONST_ITER GetForkPoint( const Point3d& ptP) ;
|
|
|
|
private :
|
|
bool m_bAllowInvert ;
|
|
double m_dToler ;
|
|
INTUNORDSET m_sCrvId ;
|
|
CRVDATAVECTOR m_vCrvData ;
|
|
PointGrid3d m_PointGrid ;
|
|
bool m_bFromNear ;
|
|
FORKDATAVECTOR m_vForkData ;
|
|
bool m_bIsFork ;
|
|
INTVECTOR m_vFork ;
|
|
} ; |