//---------------------------------------------------------------------------- // EgalTech 2015-2015 //---------------------------------------------------------------------------- // File : HashGrids3d.h Data : 04.07.15 Versione : 1.6g1 // Contenuto : Dichiarazione della classe HashGrids3d. // // // // Modifiche : 02.07.15 DS Creazione modulo. // // //---------------------------------------------------------------------------- #pragma once #include "EgtDev/Include/EGkBBox3d.h" #include "EgtDev/Include/EgtNumCollection.h" #include //---------------------------------------------------------------------------- class HashGrids3d { public : HashGrids3d( void) ; ~HashGrids3d( void) ; void SetActivationGrid( bool bActivate) ; bool Add( int nObjId, const BBox3d& box) ; bool Modify( int nObjId, const BBox3d& box) ; bool Remove( int nObjId) ; bool Update( void) ; bool Find( const BBox3d& b3Test, INTVECTOR& vnIds) ; void Clear( void) ; friend class HashGrid3d ; private : struct ObjData { int nId ; BBox3d box ; HashGrid3d* pHGrid ; size_t nHash ; size_t nCellId ; ObjData( void) : nId( -1), box(), pHGrid( nullptr), nHash( 0), nCellId( 0) {} ObjData( int nI, const BBox3d& bb, HashGrid3d* 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 } ;