Files
Include/EGkChainCurves.h
T
Dario Sassi b947c9b512 Include :
- aggiunta interfaccia per Chain di curve.
2014-07-28 16:13:38 +00:00

86 lines
3.8 KiB
C++

//----------------------------------------------------------------------------
// EgalTech 2014-2014
//----------------------------------------------------------------------------
// File : EGkChainCurves.h Data : 20.07.14 Versione : 1.5g3
// Contenuto : Dichiarazione funzione per concatenamento curve.
//
//
//
// Modifiche : 20.07.14 DS Creazione modulo.
//
//
//----------------------------------------------------------------------------
#pragma once
#include "/EgtDev/Include/EGkPointGrid3d.h"
#include <unordered_set>
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) ;
//! 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, INTVECTOR& vIds) ;
//! Concatenazione in avanti dal punto e direzione passati, con possibilità di arresto su biforcazione
EGK_EXPORT bool GetChainFromPoint( const Point3d& ptStart, const Vector3d& vtStart, bool bStopOnFork,
INTVECTOR& vIds) ;
//! \brief Concatenazione all'indietro dal 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, bool bStopOnFork,
INTVECTOR& vIds) ;
//! 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 :
typedef std::unordered_set<int> INTUSET ;
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 ;
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 Vector3d& vtCurr, const INTVECTOR& vNext, bool bStopOnFork, int& nNext) ;
bool ChoosePrev( const Vector3d& vtCurr, const INTVECTOR& vPrev, bool bStopOnFork, int& nPrev) ;
private :
bool m_bAllowInvert ;
double m_dToler ;
INTUSET m_sCrvId ;
CRVDATAVECTOR m_vCrvData ;
PointGrid3d m_PointGrid ;
bool m_bIsFork ;
INTVECTOR m_vFork ;
} ;