LibreCAD
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
lc::QuadTreeSub< E > Class Template Reference

The QuadTreeSub class each nide below QuadTree will be a QuadTreeSub type. More...

#include <quadtree.h>

Inheritance diagram for lc::QuadTreeSub< E >:
Collaboration diagram for lc::QuadTreeSub< E >:

Public Member Functions

 QuadTreeSub (int level, const geo::Area &pBounds, short maxLevels, short maxObjects)
 
 QuadTreeSub (const geo::Area &bounds)
 
 QuadTreeSub (const QuadTreeSub &other)
 
 QuadTreeSub ()
 
virtual ~QuadTreeSub ()
 
void clear ()
 clear Clear the quad tree by removing all levels and removing all stored entities More...
 
void insert (const E entity, const lc::geo::Area &entityBoundingBox)
 insert Insert entity into the qauad tree More...
 
void insert (const E entity)
 
bool erase (const E entity)
 remove Remove entity from quad tree More...
 
std::vector< E > retrieve (const geo::Area &area, const short maxLevel=SHRT_MAX) const
 retrieve all object's that are located within a given area More...
 
std::vector< E > retrieve (const short maxLevel=SHRT_MAX) const
 retrieve all object's within this QuadTree up until some level More...
 
unsigned int size () const
 size all object's that are located within a given area More...
 
const E entityByID (const ID_DATATYPE id) const
 entityByID returns a entity by its ID More...
 
geo::Area bounds () const
 bounds of the root portion of the tree More...
 
short level () const
 level returns the current level of this QuadTree More...
 
short maxLevels () const
 maxLevels Maximum number of level's possible This value should be copied from one level to a other level within a single tree More...
 
short maxObjects () const
 maxObjects Maximum number of objects on this level This value should be copied one level to a other level within a single tree More...
 
void walkQuad (const std::function< void(const QuadTreeSub< E > &)> &func)
 walk Allows to walk over each node within the tree specifying a function that can be called for each QuadTreeSub More...
 
template<typename U , typename T >
void each (T func)
 
bool optimise ()
 optimise Optmise this tree. Current implementation will remove empty nodes up till the root node More...
 

Private Member Functions

void _retrieve (std::vector< E > &list, const short maxLevel) const
 retrieve all object's that are located within a given area More...
 
void _retrieve (std::vector< E > &list, const geo::Area &area, const short maxLevel) const
 retrieve all object's that are located within a given area More...
 
unsigned int _size (unsigned int c) const
 
short quadrantIndex (const geo::Area &pRect) const
 quadrantIndex located a possible quadrant index More...
 
bool includes (const geo::Area &area) const
 
void split ()
 split Create 4 new quads below the current quad More...
 

Private Attributes

const short _level
 
std::vector< E > _objects
 
const double _verticalMidpoint
 
const double _horizontalMidpoint
 
const geo::Area _bounds
 
QuadTreeSub_nodes [4]
 
const unsigned short _maxLevels
 
const unsigned short _maxObjects
 

Detailed Description

template<typename E>
class lc::QuadTreeSub< E >

The QuadTreeSub class each nide below QuadTree will be a QuadTreeSub type.

Definition at line 25 of file quadtree.h.

Constructor & Destructor Documentation

template<typename E>
lc::QuadTreeSub< E >::QuadTreeSub ( int  level,
const geo::Area pBounds,
short  maxLevels,
short  maxObjects 
)
inline

Definition at line 27 of file quadtree.h.

27  :
28  _level(level) ,
29  _verticalMidpoint(pBounds.minP().x() + (pBounds.width() / 2.)),
30  _horizontalMidpoint(pBounds.minP().y() + (pBounds.height() / 2.)),
31  _bounds(pBounds), _maxLevels(maxLevels),
33  _objects.reserve(maxObjects / 2);
34  _nodes[0] = nullptr;
35  _nodes[1] = nullptr;
36  _nodes[2] = nullptr;
37  _nodes[3] = nullptr;
38 
39 
40  }
const double _verticalMidpoint
Definition: quadtree.h:481
short maxLevels() const
maxLevels Maximum number of level's possible This value should be copied from one level to a other le...
Definition: quadtree.h:242
const geo::Area _bounds
Definition: quadtree.h:483
std::vector< E > _objects
Definition: quadtree.h:480
const unsigned short _maxLevels
Definition: quadtree.h:485
const double _horizontalMidpoint
Definition: quadtree.h:482
short level() const
level returns the current level of this QuadTree
Definition: quadtree.h:232
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484
const short _level
Definition: quadtree.h:479
const unsigned short _maxObjects
Definition: quadtree.h:486
short maxObjects() const
maxObjects Maximum number of objects on this level This value should be copied one level to a other l...
Definition: quadtree.h:251
template<typename E>
lc::QuadTreeSub< E >::QuadTreeSub ( const geo::Area bounds)
inline

Definition at line 42 of file quadtree.h.

42  : QuadTreeSub(0, bounds, 10, 25) {
43 
44  }
geo::Area bounds() const
bounds of the root portion of the tree
Definition: quadtree.h:223
template<typename E>
lc::QuadTreeSub< E >::QuadTreeSub ( const QuadTreeSub< E > &  other)
inline

Definition at line 46 of file quadtree.h.

46  :
47  QuadTreeSub(0, other.bounds(), other.maxLevels(), other.maxObjects()) {
48  for (auto i : other.retrieve()) {
49  insert(i);
50  }
51  }
void insert(const E entity, const lc::geo::Area &entityBoundingBox)
insert Insert entity into the qauad tree
Definition: quadtree.h:90
template<typename E>
lc::QuadTreeSub< E >::QuadTreeSub ( )
inline

Definition at line 53 of file quadtree.h.

53  : QuadTreeSub(0, geo::Area(geo::Coordinate(0., 0.), geo::Coordinate(1., 1.)), 10, 25) {
54 
55  }
template<typename E>
virtual lc::QuadTreeSub< E >::~QuadTreeSub ( )
inlinevirtual

Definition at line 57 of file quadtree.h.

57  {
58  if (_nodes[0] != nullptr) {
59  delete _nodes[0];
60  delete _nodes[1];
61  delete _nodes[2];
62  delete _nodes[3];
63  }
64  }
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484

Member Function Documentation

template<typename E>
void lc::QuadTreeSub< E >::_retrieve ( std::vector< E > &  list,
const short  maxLevel 
) const
inlineprivate

retrieve all object's that are located within a given area

Parameters
list
area

Definition at line 326 of file quadtree.h.

326  {
327  if (_nodes[0] != nullptr && maxLevel > _level) {
328  _nodes[0]->_retrieve(list, maxLevel);
329  _nodes[1]->_retrieve(list, maxLevel);
330  _nodes[2]->_retrieve(list, maxLevel);
331  _nodes[3]->_retrieve(list, maxLevel);
332  }
333 
334  list.insert(list.end(), _objects.begin(), _objects.end());
335  }
std::vector< E > _objects
Definition: quadtree.h:480
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484
const short _level
Definition: quadtree.h:479
void _retrieve(std::vector< E > &list, const short maxLevel) const
retrieve all object's that are located within a given area
Definition: quadtree.h:326
template<typename E>
void lc::QuadTreeSub< E >::_retrieve ( std::vector< E > &  list,
const geo::Area area,
const short  maxLevel 
) const
inlineprivate

retrieve all object's that are located within a given area

Parameters
list
area

Definition at line 342 of file quadtree.h.

342  {
343  if (_nodes[0] != nullptr && maxLevel > _level) {
344  if (_nodes[0] -> includes(area)) {
345  _nodes[0]->_retrieve(list, area, maxLevel);
346  }
347 
348  if (_nodes[1] -> includes(area)) {
349  _nodes[1]->_retrieve(list, area, maxLevel);
350  }
351 
352  if (_nodes[2] -> includes(area)) {
353  _nodes[2]->_retrieve(list, area, maxLevel);
354  }
355 
356  if (_nodes[3] -> includes(area)) {
357  _nodes[3]->_retrieve(list, area, maxLevel);
358  }
359  }
360 
361  list.insert(list.end(), _objects.begin(), _objects.end());
362  }
std::vector< E > _objects
Definition: quadtree.h:480
bool includes(const geo::Area &area) const
Definition: quadtree.h:414
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484
const short _level
Definition: quadtree.h:479
void _retrieve(std::vector< E > &list, const short maxLevel) const
retrieve all object's that are located within a given area
Definition: quadtree.h:326
template<typename E>
unsigned int lc::QuadTreeSub< E >::_size ( unsigned int  c) const
inlineprivate

Return the number of items in this and lower nodes

Definition at line 366 of file quadtree.h.

366  {
367  if (_nodes[0] != nullptr) {
368  c += _nodes[0]->_size(_nodes[1]->_size(_nodes[2]->_size(_nodes[3]->_size(c))));
369  }
370 
371  return c + _objects.size();
372  }
std::vector< E > _objects
Definition: quadtree.h:480
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484
unsigned int _size(unsigned int c) const
Definition: quadtree.h:366
template<typename E>
geo::Area lc::QuadTreeSub< E >::bounds ( ) const
inline

bounds of the root portion of the tree

Returns

Definition at line 223 of file quadtree.h.

223  {
224  return _bounds;
225  }
const geo::Area _bounds
Definition: quadtree.h:483
template<typename E>
void lc::QuadTreeSub< E >::clear ( )
inline

clear Clear the quad tree by removing all levels and removing all stored entities

Definition at line 70 of file quadtree.h.

70  {
71  if (_nodes[0] != nullptr) {
72  delete _nodes[0];
73  delete _nodes[1];
74  delete _nodes[2];
75  delete _nodes[3];
76  _nodes[0] = nullptr;
77  _nodes[1] = nullptr;
78  _nodes[2] = nullptr;
79  _nodes[3] = nullptr;
80  }
81  }
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484
template<typename E>
template<typename U , typename T >
void lc::QuadTreeSub< E >::each ( func)
inline

Call a function for each entity within this node and it's sub nodes

Definition at line 274 of file quadtree.h.

274  {
275  if (_nodes[0] != nullptr) {
276  _nodes[0]->template each<U>(func);
277  _nodes[1]->template each<U>(func);
278  _nodes[2]->template each<U>(func);
279  _nodes[3]->template each<U>(func);
280  }
281 
282  std::for_each(_objects.begin(), _objects.end(), [&](E item) {
283  std::shared_ptr<U> b = std::dynamic_pointer_cast< U >(item);
284  func(b);
285  });
286  }
std::vector< E > _objects
Definition: quadtree.h:480
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484
template<typename E>
const E lc::QuadTreeSub< E >::entityByID ( const ID_DATATYPE  id) const
inline

entityByID returns a entity by its ID

Parameters
id
Returns

Definition at line 205 of file quadtree.h.

205  {
206  // // LOG4CXX_WARN(logger, "Using non optmised entityById method, this is going to be VERY slow. To solve please call the root QuadTreeSub to get a cached version!")
207 
208  for (auto i : retrieve()) {
209  if (i->id() == id) {
210  return i;
211  }
212  }
213 
214  return E();
215  }
std::vector< E > retrieve(const geo::Area &area, const short maxLevel=SHRT_MAX) const
retrieve all object's that are located within a given area
Definition: quadtree.h:172
template<typename E>
bool lc::QuadTreeSub< E >::erase ( const E  entity)
inline

remove Remove entity from quad tree

Parameters
pRect
entity

Definition at line 143 of file quadtree.h.

143  {
144  // Find a Quad Tree area where this item might be located
145  if (_nodes[0] != nullptr) {
146  short index = quadrantIndex(entity->boundingBox());
147 
148  if (index != -1) {
149  if (_nodes[index]->erase(entity)) {
150  return true;
151  }
152  }
153  }
154 
155  for (typename std::vector<E>::iterator it = _objects.begin(); it != _objects.end(); it++) {
156  if ((*it)->id() == entity->id()) {
157  _objects.erase(it);
158  return true;
159  }
160  }
161 
162  return false;
163  }
std::vector< E > _objects
Definition: quadtree.h:480
bool erase(const E entity)
remove Remove entity from quad tree
Definition: quadtree.h:143
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484
short quadrantIndex(const geo::Area &pRect) const
quadrantIndex located a possible quadrant index
Definition: quadtree.h:380
template<typename E>
bool lc::QuadTreeSub< E >::includes ( const geo::Area area) const
inlineprivate

This if this node overlaps or includes a given area

Definition at line 414 of file quadtree.h.

414  {
415 
416  if (area.maxP().x() <= _bounds.minP().x() ||
417  area.minP().x() >= _bounds.maxP().x() ||
418  area.maxP().y() <= _bounds.minP().y() ||
419  area.minP().y() >= _bounds.maxP().y()) {
420  return false;
421  } else {
422  return true;
423  }
424  }
const Coordinate minP() const
Definition: geoarea.h:60
const geo::Area _bounds
Definition: quadtree.h:483
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
const Coordinate maxP() const
Definition: geoarea.h:67
template<typename E>
void lc::QuadTreeSub< E >::insert ( const E  entity,
const lc::geo::Area entityBoundingBox 
)
inline

insert Insert entity into the qauad tree

Parameters
pRect
pRect
entity

Definition at line 90 of file quadtree.h.

90  {
91  // Find a Quad Tree area where this item fits
92  if (_nodes[0] != nullptr) {
93  short entityIndex = quadrantIndex(entityBoundingBox);
94 
95  if (entityIndex != -1) {
96  _nodes[entityIndex]->insert(entity, entityBoundingBox);
97  return;
98  }
99  }
100 
101  _objects.push_back(entity);
102 
103  // If it fits in this box, see if we can/must split this area into sub area's
104  // loop over the current container and see if the entities fit at a lower level
105  // So each entity is only tried once
106  if (_nodes[0] == nullptr && _objects.size() >= _maxObjects && _level < _maxLevels) {
107  split();
108  // Split two level's deep to reduce the number of object iterations
109  // This will help mostly when adding lots of little objects that would fit in 1/8 of the quad
110  _nodes[0]->split();
111  _nodes[1]->split();
112  _nodes[2]->split();
113  _nodes[3]->split();
114 
115  for (auto it = _objects.begin() ; it != _objects.end();) {
116  auto sentityBoundingBox = (*it)->boundingBox();
117  short index = quadrantIndex(sentityBoundingBox);
118 
119  if (index != -1) {
120  _nodes[index]->insert(*it, sentityBoundingBox);
121  it = _objects.erase(it);
122  }
123  else {
124  it++;
125  }
126  }
127  }
128  }
std::vector< E > _objects
Definition: quadtree.h:480
const unsigned short _maxLevels
Definition: quadtree.h:485
void insert(const E entity, const lc::geo::Area &entityBoundingBox)
insert Insert entity into the qauad tree
Definition: quadtree.h:90
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484
const short _level
Definition: quadtree.h:479
void split()
split Create 4 new quads below the current quad
Definition: quadtree.h:430
const unsigned short _maxObjects
Definition: quadtree.h:486
short quadrantIndex(const geo::Area &pRect) const
quadrantIndex located a possible quadrant index
Definition: quadtree.h:380
template<typename E>
void lc::QuadTreeSub< E >::insert ( const E  entity)
inline

Insert a nide into the quad tree,

See also
insert(const E entity, const lc::geo::Area &entityBoundingBox)

Definition at line 133 of file quadtree.h.

133  {
134  insert(entity, entity->boundingBox());
135  }
void insert(const E entity, const lc::geo::Area &entityBoundingBox)
insert Insert entity into the qauad tree
Definition: quadtree.h:90
template<typename E>
short lc::QuadTreeSub< E >::level ( ) const
inline

level returns the current level of this QuadTree

Returns

Definition at line 232 of file quadtree.h.

232  {
233  return _level;
234  }
const short _level
Definition: quadtree.h:479
template<typename E>
short lc::QuadTreeSub< E >::maxLevels ( ) const
inline

maxLevels Maximum number of level's possible This value should be copied from one level to a other level within a single tree

Returns

Definition at line 242 of file quadtree.h.

242  {
243  return _maxLevels;
244  }
const unsigned short _maxLevels
Definition: quadtree.h:485
template<typename E>
short lc::QuadTreeSub< E >::maxObjects ( ) const
inline

maxObjects Maximum number of objects on this level This value should be copied one level to a other level within a single tree

Returns

Definition at line 251 of file quadtree.h.

251  {
252  return _maxObjects;
253  }
const unsigned short _maxObjects
Definition: quadtree.h:486
template<typename E>
bool lc::QuadTreeSub< E >::optimise ( )
inline

optimise Optmise this tree. Current implementation will remove empty nodes up till the root node

Returns
true if this node doesn't contain any entities

Definition at line 294 of file quadtree.h.

294  {
295  if (_nodes[0] != nullptr) {
296  bool ret1 = _nodes[0]->optimise();
297  bool ret2 = _nodes[1]->optimise();
298  bool ret3 = _nodes[2]->optimise();
299  bool ret4 = _nodes[3]->optimise();
300 
301  if (ret1 && ret2 && ret3 && ret4) {
302  delete _nodes[0];
303  delete _nodes[1];
304  delete _nodes[2];
305  delete _nodes[3];
306  _nodes[0] = nullptr;
307  _nodes[1] = nullptr;
308  _nodes[2] = nullptr;
309  _nodes[3] = nullptr;
310  }
311  else {
312  return false;
313  }
314  }
315 
316  return _objects.size() == 0;
317  }
std::vector< E > _objects
Definition: quadtree.h:480
bool optimise()
optimise Optmise this tree. Current implementation will remove empty nodes up till the root node ...
Definition: quadtree.h:294
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484
template<typename E>
short lc::QuadTreeSub< E >::quadrantIndex ( const geo::Area pRect) const
inlineprivate

quadrantIndex located a possible quadrant index

Parameters
pRect
Returns
-1 if it doesn't fit in any of the quadrants

Definition at line 380 of file quadtree.h.

380  {
381 
382  bool topQuadrant = (pRect.minP().y() >= _horizontalMidpoint) &&
383  (pRect.maxP().y() < _bounds.maxP().y());
384  bool bottomQuadrant = (pRect.minP().y() > _bounds.minP().y()) &&
385  (pRect.maxP().y() <= _horizontalMidpoint);
386 
387  if (!(topQuadrant || bottomQuadrant)) {
388  return -1;
389  }
390 
391  bool leftQuadrant = (pRect.minP().x() > _bounds.minP().x()) &&
392  (pRect.maxP().x() <= _verticalMidpoint);
393  bool rightQuandrant = (pRect.minP().x() >= _verticalMidpoint) &&
394  (pRect.maxP().x() < _bounds.maxP().x());
395 
396  if (!(leftQuadrant || rightQuandrant)) {
397  return -1;
398  }
399  else if (topQuadrant && rightQuandrant) {
400  return 0;
401  }
402  else if (topQuadrant && leftQuadrant) {
403  return 1;
404  }
405  else if (bottomQuadrant && leftQuadrant) {
406  return 2;
407  }
408 
409  return 3;
410  }
const Coordinate minP() const
Definition: geoarea.h:60
const double _verticalMidpoint
Definition: quadtree.h:481
const geo::Area _bounds
Definition: quadtree.h:483
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
const double _horizontalMidpoint
Definition: quadtree.h:482
const Coordinate maxP() const
Definition: geoarea.h:67
template<typename E>
std::vector<E> lc::QuadTreeSub< E >::retrieve ( const geo::Area area,
const short  maxLevel = SHRT_MAX 
) const
inline

retrieve all object's that are located within a given area

Parameters
list
area

Definition at line 172 of file quadtree.h.

172  {
173  std::vector<E> list;
174  _retrieve(list, area, maxLevel);
175  return list;
176  }
void _retrieve(std::vector< E > &list, const short maxLevel) const
retrieve all object's that are located within a given area
Definition: quadtree.h:326
template<typename E>
std::vector<E> lc::QuadTreeSub< E >::retrieve ( const short  maxLevel = SHRT_MAX) const
inline

retrieve all object's within this QuadTree up until some level

Parameters
list
area

Definition at line 184 of file quadtree.h.

184  {
185  std::vector<E> list;
186  _retrieve(list, maxLevel);
187  return list;
188  }
void _retrieve(std::vector< E > &list, const short maxLevel) const
retrieve all object's that are located within a given area
Definition: quadtree.h:326
template<typename E>
unsigned int lc::QuadTreeSub< E >::size ( ) const
inline

size all object's that are located within a given area

Parameters
list
area

Definition at line 195 of file quadtree.h.

195  {
196  return _size(0);
197  }
unsigned int _size(unsigned int c) const
Definition: quadtree.h:366
template<typename E>
void lc::QuadTreeSub< E >::split ( )
inlineprivate

split Create 4 new quads below the current quad

Definition at line 430 of file quadtree.h.

430  {
431  double subWidth = _bounds.width() / 2.;
432  double subHeight = _bounds.height() / 2.;
433  double x = _bounds.minP().x();
434  double y = _bounds.minP().y();
435 
436  if (_nodes[0] != nullptr) {
437  // // LOG4CXX_DEBUG(logger, "Split is called on an already split node, please fix!");
438  } else {
439  _nodes[0] = new QuadTreeSub(
440  _level + 1,
441  geo::Area(geo::Coordinate(x + subWidth, y + subHeight),
442  geo::Coordinate(_bounds.maxP().x(), _bounds.maxP().y())
443  ),
444  _maxLevels,
446  );
447 
448  _nodes[1] = new QuadTreeSub(
449  _level + 1,
450  geo::Area(geo::Coordinate(x, y + subHeight),
451  geo::Coordinate(x + subWidth, _bounds.maxP().y())
452  ),
453  _maxLevels,
455  );
456 
457  _nodes[2] = new QuadTreeSub(
458  _level + 1,
459  geo::Area(geo::Coordinate(x, y),
460  geo::Coordinate(x + subWidth, y + subHeight)
461  ),
462  _maxLevels,
464  );
465 
466  _nodes[3] = new QuadTreeSub(
467  _level + 1,
468  geo::Area(geo::Coordinate(x + subWidth, y),
469  geo::Coordinate(_bounds.maxP().x(), y + subHeight)
470  ),
471  _maxLevels,
473  );
474  }
475 
476  }
const Coordinate minP() const
Definition: geoarea.h:60
const geo::Area _bounds
Definition: quadtree.h:483
double x() const
Returns x of Coordinate.
Definition: geocoordinate.h:26
const unsigned short _maxLevels
Definition: quadtree.h:485
double y() const
Returns y of Coordinate.
Definition: geocoordinate.h:34
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484
const short _level
Definition: quadtree.h:479
const Coordinate maxP() const
Definition: geoarea.h:67
const unsigned short _maxObjects
Definition: quadtree.h:486
double height() const
height Returns the height of this area
Definition: geoarea.h:85
double width() const
width Returns the width of this area
Definition: geoarea.h:76
template<typename E>
void lc::QuadTreeSub< E >::walkQuad ( const std::function< void(const QuadTreeSub< E > &)> &  func)
inline

walk Allows to walk over each node within the tree specifying a function that can be called for each QuadTreeSub

Parameters
foo

Definition at line 260 of file quadtree.h.

260  {
261  func(*this);
262 
263  if (_nodes[0] != nullptr) {
264  _nodes[0]->walkQuad(func);
265  _nodes[1]->walkQuad(func);
266  _nodes[2]->walkQuad(func);
267  _nodes[3]->walkQuad(func);
268  }
269  }
void walkQuad(const std::function< void(const QuadTreeSub< E > &)> &func)
walk Allows to walk over each node within the tree specifying a function that can be called for each ...
Definition: quadtree.h:260
QuadTreeSub * _nodes[4]
Definition: quadtree.h:484

Member Data Documentation

template<typename E>
const geo::Area lc::QuadTreeSub< E >::_bounds
private

Definition at line 483 of file quadtree.h.

template<typename E>
const double lc::QuadTreeSub< E >::_horizontalMidpoint
private

Definition at line 482 of file quadtree.h.

template<typename E>
const short lc::QuadTreeSub< E >::_level
private

Definition at line 479 of file quadtree.h.

template<typename E>
const unsigned short lc::QuadTreeSub< E >::_maxLevels
private

Definition at line 485 of file quadtree.h.

template<typename E>
const unsigned short lc::QuadTreeSub< E >::_maxObjects
private

Definition at line 486 of file quadtree.h.

template<typename E>
QuadTreeSub* lc::QuadTreeSub< E >::_nodes[4]
private

Definition at line 484 of file quadtree.h.

template<typename E>
std::vector<E> lc::QuadTreeSub< E >::_objects
private

Definition at line 480 of file quadtree.h.

template<typename E>
const double lc::QuadTreeSub< E >::_verticalMidpoint
private

Definition at line 481 of file quadtree.h.


The documentation for this class was generated from the following file: