Helios++
Helios software for LiDAR simulations
SAHKDTreeGeometricStrategy.h
1 #pragma once
2 
3 #include <SAHKDTreeFactory.h>
4 #include <SimpleKDTreeGeometricStrategy.h>
5 
18  // *** FRIENDS *** //
19  // ***************** //
20  friend class MultiThreadKDTreeFactory;
21 
22 protected:
23  // *** ATTRIBUTES *** //
24  // ******************** //
30 
31 public:
32  // *** CONSTRUCTION / DESTRUCTION *** //
33  // ************************************ //
42  sahkdtf(kdtf)
43  {}
44  virtual ~SAHKDTreeGeometricStrategy() = default;
45 
46  // *** CLONE *** //
47  // *************** //
55  ) const override;
56 
57 protected:
58  // *** GEOMETRY LEVEL BUILDING *** //
59  // ********************************* //
67  void GEOM_defineSplit(
68  KDTreeNode *node,
69  KDTreeNode *parent,
70  vector<Primitive *> &primitives,
71  int const depth,
72  int const assignedThreads
73  ) const override;
82  KDTreeNode *node,
83  KDTreeNode *parent,
84  vector<Primitive *> const &primitives,
85  int const depth,
86  int const index,
87  vector<Primitive *> &leftPrimitives,
88  vector<Primitive *> &rightPrimitives,
89  std::shared_ptr<SharedTaskSequencer> masters
90  ) override;
99  virtual double GEOM_findSplitPositionBySAH(
100  KDTreeNode *node,
101  vector<Primitive *> &primitives,
102  int assignedThreads
103  ) const;
104 };
Class representing a KDTree node.
Definition: KDTreeNode.h:9
Decorator for any KDTree factory which provides support for multi thread KDTree building.
Definition: MultiThreadKDTreeFactory.h:34
shared_ptr< SharedTaskSequencer > masters
All masters threads (except main thread) are handled by this shared task sequencer.
Definition: MultiThreadKDTreeFactory.h:118
Class providing building methods for k-dimensional trees with surface area heuristic (SAH)
Definition: SAHKDTreeFactory.h:126
Class providing a strategy for geometry-level parallelization of SAH KDTree building....
Definition: SAHKDTreeGeometricStrategy.h:17
SAHKDTreeFactory & sahkdtf
The surface area heuristic KDTree factory to which geometric strategy shall be applied.
Definition: SAHKDTreeGeometricStrategy.h:29
void GEOM_defineSplit(KDTreeNode *node, KDTreeNode *parent, vector< Primitive * > &primitives, int const depth, int const assignedThreads) const override
Geometry-level parallel version of the SAHKDTreeFactory::defineSplit function.
Definition: SAHKDTreeGeometricStrategy.cpp:18
void GEOM_buildChildrenNodes(KDTreeNode *node, KDTreeNode *parent, vector< Primitive * > const &primitives, int const depth, int const index, vector< Primitive * > &leftPrimitives, vector< Primitive * > &rightPrimitives, std::shared_ptr< SharedTaskSequencer > masters) override
Geometry-level parallel version of the SAHKDTreeFactory::buildChildrenNodes.
Definition: SAHKDTreeGeometricStrategy.cpp:159
SimpleKDTreeGeometricStrategy * clone(SimpleKDTreeFactory *kdtf) const override
Create a clone of the SAHKDTreeGeometricStrategy.
Definition: SAHKDTreeGeometricStrategy.cpp:10
SAHKDTreeGeometricStrategy(SAHKDTreeFactory &kdtf)
SAHKDTreeGeometricStrategy default constructor.
Definition: SAHKDTreeGeometricStrategy.h:40
virtual double GEOM_findSplitPositionBySAH(KDTreeNode *node, vector< Primitive * > &primitives, int assignedThreads) const
Geometry-level parallel version of the SAHKDTreeFactory::findSplitPositionBySAH function.
Definition: SAHKDTreeGeometricStrategy.cpp:30
Class providing building methods for simple k-dimensional trees.
Definition: SimpleKDTreeFactory.h:18
Class providing a strategy for geometry-level parallelization of Simple KDTree building....
Definition: SimpleKDTreeGeometricStrategy.h:15
SimpleKDTreeFactory & kdtf
The simple KDTree factory to which geometric strategy shall be applied.
Definition: SimpleKDTreeGeometricStrategy.h:27