//---------------------------------------------------------------------------- // EgalTech 2015-2018 //---------------------------------------------------------------------------- // File : EGkHashGrids1d.h Data : 02.05.21 Versione : 2.4e1 // Contenuto : Dichiarazione della classe HashGrids1d. // // // // Modifiche : 04.07.15 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once #include "EgtDev/Include/EGkBBox3d.h" #include "EgtDev/Include/EgtNumCollection.h" #include //----------------------- 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 HashGrids1d { public : EGK_EXPORT HashGrids1d( void) ; EGK_EXPORT ~HashGrids1d( void) ; EGK_EXPORT void SetActivationGrid( bool bActivate) ; EGK_EXPORT bool Add( int nObjId, const BBox3d& box) ; EGK_EXPORT bool Modify( int nObjId, const BBox3d& box) ; EGK_EXPORT bool Remove( int nObjId) ; EGK_EXPORT bool Update( void) ; EGK_EXPORT bool Find( const BBox3d& b3Test, INTVECTOR& vnIds) const ; EGK_EXPORT void Clear( void) ; friend class HashGrid1d ; private : struct ObjData { int nId ; BBox3d box ; HashGrid1d* pHGrid ; size_t nHash ; size_t nCellId ; ObjData( void) : nId( -1), box(), pHGrid( nullptr), nHash( 0), nCellId( 0) {} ObjData( int nI, const BBox3d& bb, HashGrid1d* pHG, size_t nH, size_t nCI) : nId( nI), box( bb), pHGrid( pHG), nHash( nH), nCellId( nCI) {} } ; typedef std::list ObjList ; typedef std::vector PtrObjVector ; typedef std::unordered_map IntPObjUmap ; private : typedef std::list GridList ; // Tipo per lista di hash grid private : void addGrid( ObjData& obj) ; void addList( ObjData& obj) ; private : ObjList m_ObjsList ; // Lista degli oggetti IntPObjUmap m_ObjsMap ; // Map da Id a PtrObj PtrObjVector m_objsToAdd ; // Vettore di puntatori agli oggetti da inserire PtrObjVector m_nonGridObjs ; // Vettore di puntatori agli oggetti non assegnati alle griglie (per dimensioni o perchè pochi) GridList m_GridList ; // Lista delle griglie di dimensione fissa ( in ordine crescente di dimensione di cella) bool m_bActivate ; // Flag che abilita l'attivazione delle griglie bool m_bGridActive ; // Flag di attivazione delle griglie BBox3d m_b3Objs ; // Box totale di tutti gli oggetti inseriti } ;