Files
Include/EGkChainCurves.h
T
Dario Sassi 92a7a9cfc9 Include :
- aggiornamento prototipi.
2015-03-17 11:11:12 +00:00

88 lines
3.9 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, 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 :
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 bHaltOnFork, int& nNext) ;
bool ChoosePrev( const Vector3d& vtCurr, const INTVECTOR& vPrev, bool bHaltOnFork, int& nPrev) ;
private :
bool m_bAllowInvert ;
double m_dToler ;
INTUSET m_sCrvId ;
CRVDATAVECTOR m_vCrvData ;
PointGrid3d m_PointGrid ;
bool m_bIsFork ;
INTVECTOR m_vFork ;
} ;