Helios++
Helios software for LiDAR simulations
KDGrove.h
1 #pragma once
2 
3 #include <BasicDynGrove.h>
4 #include <GroveKDTreeRaycaster.h>
5 #include <DynMovingObject.h>
6 #include <KDGroveStats.h>
7 #include <KDGroveSubject.h>
8 
9 #include <string>
10 #include <memory>
11 
19 class KDGrove : public BasicDynGrove<GroveKDTreeRaycaster, DynMovingObject>
20 {
21 protected:
22  // *** ATTRIBUTES *** //
23  // ******************** //
28  std::shared_ptr<KDGroveStats> stats;
29 
30 public:
31  // *** CONSTRUCTION / DESTRUCTION *** //
32  // ************************************ //
36  KDGrove() :
38  stats(nullptr)
39  {}
40  virtual ~KDGrove() = default;
41 
42  // *** OBSERVER METHODS *** //
43  // ************************** //
50  inline void addSubject(
51  KDGroveSubject *subject,
52  std::shared_ptr<GroveKDTreeRaycaster> tree
53  ){
56  subject,
57  tree
58  );
59  }
66  inline void removeSubject(KDGroveSubject *subject){
69  subject
70  );
71  }
72 
73  // *** KDGROVE METHODS *** //
74  // ************************* //
97  virtual std::shared_ptr<KDGrove> makeTemporalClone() const;
98 
99  // *** GETTERs and SETTERs *** //
100  // ***************************** //
105  virtual std::shared_ptr<KDGroveStats> getStats()
106  {return stats;}
111  virtual void setStats(std::shared_ptr<KDGroveStats> stats)
112  {this->stats = stats;}
113 };
Basic implementation of a DynGrove which extends BasicStaticGrove to provided dynamic funcionalities.
Definition: BasicDynGrove.h:26
virtual void addSubject(BasicDynGroveSubject< Tree, Subject > *subject, std::shared_ptr< Tree > tree)
Add a new subject which identifier is automatically and internally computed.
virtual void removeSubject(BasicDynGroveSubject< Tree, Subject > *subject)
Remove subject with given identifier from the grove.
Implementation of a dynamic object which supports dynamic motions (extended rigid motions)
Definition: DynMovingObject.h:39
Grove KDTree Raycaster extends KDTreeRaycaster to make it compatible with groves by implementing the ...
Definition: GroveKDTreeRaycaster.h:21
Interface defining the behaviors that must be supported by any object that can notify to a KDGrove.
Definition: KDGroveSubject.h:20
Grove of KDTrees. It supports both static and dynamic KDTrees, handling each accordingly.
Definition: KDGrove.h:20
virtual std::shared_ptr< KDGrove > makeTemporalClone() const
Make a temporal clone of the KDGrove.
Definition: KDGrove.cpp:5
KDGrove()
Default constructor for KDGrove.
Definition: KDGrove.h:36
virtual void setStats(std::shared_ptr< KDGroveStats > stats)
Set the KDGrove stats.
Definition: KDGrove.h:111
std::shared_ptr< KDGroveStats > stats
Stats of the KDGgrove.
Definition: KDGrove.h:28
void removeSubject(KDGroveSubject *subject)
Workaround to redirect calls from KDGrove::removeSubject(KDGroveSubject *) to BasicDynGrove::removeSu...
Definition: KDGrove.h:66
void addSubject(KDGroveSubject *subject, std::shared_ptr< GroveKDTreeRaycaster > tree)
Workaround to redirect calls from KDGrove::addSubject(KDGroveSubject *, shared_ptr<GroveKDTreeRaycast...
Definition: KDGrove.h:50
virtual std::shared_ptr< KDGroveStats > getStats()
Obtain the KDGrove stats.
Definition: KDGrove.h:105