afec3ef6ce
- aggiunte HashGrids 2d e 3d - aggiunta intersezione con curve di Bezier e con archi fuori piano XY.
68 lines
2.5 KiB
C++
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
|
|
} ;
|