Files
EgtGeomKernel/HashGrids3d.h
T
Dario Sassi afec3ef6ce EgtGeomKernel 1.6g1 :
- aggiunte HashGrids 2d e 3d
- aggiunta intersezione con curve di Bezier e con archi fuori piano XY.
2015-07-05 17:54:12 +00:00

68 lines
2.5 KiB
C++

//----------------------------------------------------------------------------
// 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 <unordered_map>
//----------------------------------------------------------------------------
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<ObjData> ObjList ;
typedef std::vector<ObjData*> PtrObjVector ;
typedef std::unordered_map<int,ObjData*> IntPObjUmap ;
private :
typedef std::list<HashGrid3d*> 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
} ;