Helios++
Helios software for LiDAR simulations
KDGroveFactory.h
1 #pragma once
2 
3 #include <KDTreeFactory.h>
4 #include <SimpleKDTreeFactory.h>
5 #include <SAHKDTreeFactory.h>
6 #include <AxisSAHKDTreeFactory.h>
7 #include <FastSAHKDTreeFactory.h>
8 #include <MultiThreadKDTreeFactory.h>
9 #include <MultiThreadSAHKDTreeFactory.h>
10 #include <KDGrove.h>
11 
12 #include <memory>
13 #include <vector>
14 
15 using std::shared_ptr;
16 using std::vector;
17 
19 private:
20  // *** SERIALIZATION *** //
21  // *********************** //
22  friend class boost::serialization::access;
29  template <class Archive>
30  void serialize(Archive &ar, const unsigned int version){
31  // Serialization itself
32  //ar &kdtf; // Not necessary, already handled with inplace constructor
33  }
34 
35 protected:
36  // *** ATTRIBUTES *** //
37  // ******************** //
41  shared_ptr<KDTreeFactory> kdtf;
42 
43 public:
44  // *** CONSTRUCTION / DESTRUCTION *** //
45  // ************************************ //
49  KDGroveFactory(shared_ptr<KDTreeFactory> kdtf) : kdtf(kdtf) {}
50  virtual ~KDGroveFactory() = default;
51 
52  // *** K-DIMENSIONAL GROVE FACTORY METHODS *** //
53  // ********************************************* //
73  virtual shared_ptr<KDGrove> makeFromSceneParts(
74  vector<shared_ptr<ScenePart>> parts,
75  bool const mergeNonMoving=false,
76  bool const safe=false,
77  bool const computeKDGroveStats=false,
78  bool const reportKDGroveStats=false,
79  bool const computeKDTreeStats=false,
80  bool const reportKDTreeStats=false
81  );
82 
83  // *** STATISTICS METHODS *** //
84  // **************************** //
93  void handleKDGroveStats(
94  shared_ptr<KDGrove> kdgrove,
95  vector<double> &buildingTimes,
96  vector<int> &treePrimitives
97  );
98 
99 protected:
100  // *** UTIL BUILDING METHODS *** //
101  // ******************************* //
109  virtual shared_ptr<KDGrove> makeCommon(
110  vector<shared_ptr<ScenePart>> parts,
111  bool const safe,
112  bool const computeKDGroveStats,
113  bool const reportKDGroveStats,
114  bool const computeKDTreeStats,
115  bool const reportKDTreeStats
116  );
121  virtual shared_ptr<KDGrove> makeFull(
122  vector<shared_ptr<ScenePart>> parts,
123  bool const safe,
124  bool const computeKDGroveStats,
125  bool const reportKDGroveStats,
126  bool const computeKDTreeStats,
127  bool const reportKDTreeStats
128  );
134  virtual shared_ptr<KDGrove> makeMergeNonMoving(
135  vector<shared_ptr<ScenePart>> parts,
136  bool const safe,
137  bool const computeKDGroveStats,
138  bool const reportKDGroveStats,
139  bool const computeKDTreeStats,
140  bool const reportKDTreeStats
141  );
142 
143 public:
144  // *** GETTERs and SETTERs *** //
145  // ***************************** //
151  inline shared_ptr<KDTreeFactory> getKdtf() const {return kdtf;}
157  inline void setKdtf(shared_ptr<KDTreeFactory> kdtf) {this->kdtf = kdtf;}
158 
159 };
Definition: KDGroveFactory.h:18
KDGroveFactory(shared_ptr< KDTreeFactory > kdtf)
K dimensional grove factory default constructor.
Definition: KDGroveFactory.h:49
shared_ptr< KDTreeFactory > kdtf
The KDTree factory used to build trees composing the grove.
Definition: KDGroveFactory.h:41
virtual shared_ptr< KDGrove > makeMergeNonMoving(vector< shared_ptr< ScenePart >> parts, bool const safe, bool const computeKDGroveStats, bool const reportKDGroveStats, bool const computeKDTreeStats, bool const reportKDTreeStats)
Build a KDGrove where all non moving scene parts are merged to build a single KDTree.
Definition: KDGroveFactory.cpp:273
virtual shared_ptr< KDGrove > makeFromSceneParts(vector< shared_ptr< ScenePart >> parts, bool const mergeNonMoving=false, bool const safe=false, bool const computeKDGroveStats=false, bool const reportKDGroveStats=false, bool const computeKDTreeStats=false, bool const reportKDTreeStats=false)
Bulid a KDGrove from given scene parts.
Definition: KDGroveFactory.cpp:12
virtual shared_ptr< KDGrove > makeCommon(vector< shared_ptr< ScenePart >> parts, bool const safe, bool const computeKDGroveStats, bool const reportKDGroveStats, bool const computeKDTreeStats, bool const reportKDTreeStats)
The common implementation of building a KDGrove. It handles the common building process for both full...
Definition: KDGroveFactory.cpp:200
shared_ptr< KDTreeFactory > getKdtf() const
Obtain the KDTreeFactory used by the KDGroveFactory.
Definition: KDGroveFactory.h:151
virtual shared_ptr< KDGrove > makeFull(vector< shared_ptr< ScenePart >> parts, bool const safe, bool const computeKDGroveStats, bool const reportKDGroveStats, bool const computeKDTreeStats, bool const reportKDTreeStats)
Build a KDGrove on a KDTree per ScenePart basis.
Definition: KDGroveFactory.cpp:255
void setKdtf(shared_ptr< KDTreeFactory > kdtf)
Set the KDTreeFactory to be used by the KDGroveFactory.
Definition: KDGroveFactory.h:157
void serialize(Archive &ar, const unsigned int version)
Serialize a KDGrove factory to a stream of bytes.
Definition: KDGroveFactory.h:30
void handleKDGroveStats(shared_ptr< KDGrove > kdgrove, vector< double > &buildingTimes, vector< int > &treePrimitives)
Method to handle the update of KDGrove stats after all KDTrees and the KDGrove itself have been creat...
Definition: KDGroveFactory.cpp:42