d3c44f2241
- negli oggetti HashGridsNd vietati costruttore di copia e assegnazione con copia di default.
77 lines
2.8 KiB
C++
77 lines
2.8 KiB
C++
//----------------------------------------------------------------------------
|
|
// 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 <unordered_map>
|
|
|
|
//----------------------- 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<ObjData> ObjList ;
|
|
typedef std::vector<ObjData*> PtrObjVector ;
|
|
typedef std::unordered_map<int,ObjData*> IntPObjUmap ;
|
|
typedef std::list<HashGrid1d*> GridList ;
|
|
|
|
private :
|
|
HashGrids1d( const HashGrids1d&) = delete ;
|
|
HashGrids1d& operator=( const HashGrids1d&) = delete ;
|
|
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
|
|
} ;
|