Helios++
Helios software for LiDAR simulations
SimpleKDTreePopulateSplitsSubTask.h
1 #pragma once
2 
3 #include <SharedSubTask.h>
4 #include <SharedTaskSequencer.h>
5 
18 protected:
19  // *** ATTRIBUTES *** //
20  // ******************** //
24  vector<Primitive *> const &primitives;
28  int const splitAxis;
32  double const splitPos;
36  vector<Primitive *> &leftPrimitives;
40  vector<Primitive *> &rightPrimitives;
45  size_t const startPrimitive;
50  size_t const endPrimitive;
55  std::function<void(
56  Primitive * p,
57  int const splitAxis,
58  double const splitPos,
59  vector<Primitive *> &leftPrimitives,
60  vector<Primitive *> &rightPrimitives
62 
63 public:
64  // *** CONSTRUCTION / DESTRUCTION *** //
65  // ************************************ //
70  std::shared_ptr<SharedTaskSequencer> ch,
71  vector<Primitive *> const &primitives,
72  int const splitAxis,
73  double const splitPos,
74  vector<Primitive *> &leftPrimitives,
75  vector<Primitive *> &rightPrimitives,
76  size_t const startPrimitive,
77  size_t const endPrimitive,
78  std::function<void(
79  Primitive * p,
80  int const splitAxis,
81  double const splitPos,
82  vector<Primitive *> &leftPrimitives,
83  vector<Primitive *> &rightPrimitives
85  ) :
95  {}
97 
98  // *** RUNNABLE SHARED TASK *** //
99  // ****************************** //
105  void run() override{
106  for(size_t pi = startPrimitive ; pi < endPrimitive ; ++pi){
108  primitives[pi],
109  splitAxis,
110  splitPos,
113  );
114  }
115  }
116 };
Abstract class defining the common behavior for all primitives.
Definition: Primitive.h:24
A shared task is said to be a collection of shared sub-tasks. Each shared sub-task can be computed in...
Definition: SharedSubTask.h:16
std::shared_ptr< SharedSubTaskCompletionHandler > ch
The shared sub-task completion handler that handles what must be done after a shared sub-task executi...
Definition: SharedSubTask.h:28
Shared sub-task to populate splits when building a Simple KDTree. It is meant to be used at geometry-...
Definition: SimpleKDTreePopulateSplitsSubTask.h:17
vector< Primitive * > & leftPrimitives
Where primitives of left split must be stored.
Definition: SimpleKDTreePopulateSplitsSubTask.h:36
std::function< void(Primitive *p, int const splitAxis, double const splitPos, vector< Primitive * > &leftPrimitives, vector< Primitive * > &rightPrimitives)> onPopulateSplitsDigestPrimitive
Function to digest a primitive when populating splits.
Definition: SimpleKDTreePopulateSplitsSubTask.h:61
SimpleKDTreePopulateSplitsSubTask(std::shared_ptr< SharedTaskSequencer > ch, vector< Primitive * > const &primitives, int const splitAxis, double const splitPos, vector< Primitive * > &leftPrimitives, vector< Primitive * > &rightPrimitives, size_t const startPrimitive, size_t const endPrimitive, std::function< void(Primitive *p, int const splitAxis, double const splitPos, vector< Primitive * > &leftPrimitives, vector< Primitive * > &rightPrimitives)> onPopulateSplitsDigestPrimitive)
Main constructor for Simple KDTree populate splits sub-task.
Definition: SimpleKDTreePopulateSplitsSubTask.h:69
void run() override
Implementation of the populate splits method.
Definition: SimpleKDTreePopulateSplitsSubTask.h:105
size_t const endPrimitive
Index of primitive (exclusive) at which the sub-task must end iterating.
Definition: SimpleKDTreePopulateSplitsSubTask.h:50
vector< Primitive * > & rightPrimitives
Where primitives of right split must be stored.
Definition: SimpleKDTreePopulateSplitsSubTask.h:40
double const splitPos
Position on given axis of the split point.
Definition: SimpleKDTreePopulateSplitsSubTask.h:32
vector< Primitive * > const & primitives
Primitives of node being splitted.
Definition: SimpleKDTreePopulateSplitsSubTask.h:24
int const splitAxis
Index of axis defining the split.
Definition: SimpleKDTreePopulateSplitsSubTask.h:28
size_t const startPrimitive
Index of primitive (inclusive) at which the sub-task must start to iterate.
Definition: SimpleKDTreePopulateSplitsSubTask.h:45