| public | 
Inheritance Graph
graph BT
	kDTree
	kDTree --> TriangleTree
	ABTree --> kDTree
	click kDTree "classMinSG_1_1TriangleTrees_1_1kDTree"
	click TriangleTree "classMinSG_1_1TriangleTrees_1_1TriangleTree"
	click ABTree "classMinSG_1_1TriangleTrees_1_1ABTree"
Description
One object of this class represents a node in a k-D-tree. To be exact this class does not work with k dimensions but with exactly three dimensions.
Author: Benjamin Eikel
Date: 2009-06-30
Protected Attributes
| std::vector< TriangleAccessor > * | triangleStorage | 
| std::vector< uint32_t > | sorted | 
| float | splitValue | 
| std::unique_ptr< kDTree > | firstChild First child of this node or nullptrif leaf. | 
| std::unique_ptr< kDTree > | secondChild Second child of this node or nullptrif leaf. | 
| const uint32_t | maxTrianglesPerNode | 
| const float | maxBoundingBoxEnlargement Fraction of allowed bounding box increase. | 
Public Functions
| kDTree( Rendering::Mesh * mesh, uint32_t trianglesPerNode, float allowedBBEnlargement) | |
| ~kDTree() Clean up memory for possible children. | |
| bool | isLeaf() const | 
| std::vector< const TriangleTree * > | getChildren() const | 
| uint8_t | getSplitDimension() const | 
| float | getSplitValue() const | 
| const TriangleAccessor & | getTriangle(uint32_t index) const | 
| uint32_t | getTriangleCount() const | 
| bool | shouldSplit() const | 
| void | split() | 
| bool | contains(const TriangleAccessor & triangle) const | 
| void | fetchAttributes( Util::AttributeProvider * container) const | 
Protected Functions
| kDTree(const Geometry::Box & childBound, const kDTree & parent) | |
| kDTree * | createChild(const Geometry::Box & childBound, const kDTree & parent) const Return a child node. Needed for polymorphism. | 
| void | calculateSplittingPlane(uint32_t & numFirstChild, uint32_t & numSecondChild) | 
Protected Static Functions
| bool | needCut(const TriangleAccessor & triangle, uint8_t splitDimension, float splitValue, float & minPos, float & maxPos) | 
Documentation
variable
 MinSG::TriangleTrees::kDTree::triangleStorage
| protected | 
| std::vector< TriangleAccessor > * triangleStorage | 
Internal storage of the triangles inside the nodes. The root node allocates this storage and hands the pointer to the children.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:165
variable
 MinSG::TriangleTrees::kDTree::sorted
| protected | 
| std::vector< uint32_t > sorted | 
These array of vectors contains the indices of the triangles insidetriangleStorage. The three vectors are sorted by each of the three coordinates of the center of the triangles. The vectors are only used during the construction of the tree and freed afterwards.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:174
variable
 MinSG::TriangleTrees::kDTree::splitValue
| protected | 
| float splitValue | 
Coordinate value of the splitting plane in the splitting dimension.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:180
variable
 MinSG::TriangleTrees::kDTree::firstChild
| protected | 
| std::unique_ptr< kDTree > firstChild | 
First child of this node ornullptrif leaf.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:183
variable
 MinSG::TriangleTrees::kDTree::secondChild
| protected | 
| std::unique_ptr< kDTree > secondChild | 
Second child of this node ornullptrif leaf.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:186
variable
 MinSG::TriangleTrees::kDTree::maxTrianglesPerNode
| protected | 
| const uint32_t maxTrianglesPerNode | 
Maximum number of triangles stored in a node. If the actual number is bigger, the node will be split.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:192
variable
 MinSG::TriangleTrees::kDTree::maxBoundingBoxEnlargement
| protected | 
| const float maxBoundingBoxEnlargement | 
Fraction of allowed bounding box increase.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:195
function
 MinSG::TriangleTrees::kDTree::kDTree
| public | explicit | 
| kDTree( | Rendering::Mesh * | mesh, | 
| uint32_t | trianglesPerNode, | |
| float | allowedBBEnlargement | |
| ) | 
Create a new kDTree node with the given triangles. This creates a root node which creates a copy of the triangles. Furthermore it builds a axis-aligned bounding box around the triangles.
Parameters
- mesh
- Mesh containing the triangles.
- trianglesPerNode
- Maximum number of triangles to store inside a node. Bigger nodes will be split.
- allowedBBEnlargement
- Maximum increase of the size of the bounding box when triangles are inserted. If a triangle fits into the at most increased bounding box it will not be cut. This parameter is the fraction of the original bounding box size that is used for increase. For example if the value is0.1fthen a maximum increase of 10% is allowed.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:60
function
 MinSG::TriangleTrees::kDTree::~kDTree
| public | virtual | 
| ~kDTree( | ) | 
Clean up memory for possible children.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:65
function
 MinSG::TriangleTrees::kDTree::isLeaf
| public | const | inline | virtual | 
| bool isLeaf( | ) const | 
Tell if the node is a leaf node.
Returns
trueif the node is a leaf andfalseif it is an inner node.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:73
function
 MinSG::TriangleTrees::kDTree::getChildren
| public | const | inline | virtual | 
| std::vector< const TriangleTree * > getChildren( | ) const | 
Retrieve the two child nodes.
Returns
Pointers to children.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:82
function
 MinSG::TriangleTrees::kDTree::getSplitDimension
| public | const | inline | virtual | 
| uint8_t getSplitDimension( | ) const | 
Return the dimension which is orthogonal to the splitting plane.
Returns
Dimension X = 0, Y = 1, Z = 2
Defined in MinSG/Ext/TriangleTrees/kDTree.h:95
function
 MinSG::TriangleTrees::kDTree::getSplitValue
| public | const | inline | 
| float getSplitValue( | ) const | 
Return the coordinate value of the splitting plane.
Returns
Coordinate in split dimension
Defined in MinSG/Ext/TriangleTrees/kDTree.h:105
function
 MinSG::TriangleTrees::kDTree::getTriangle
| public | const | virtual | 
| const TriangleAccessor & getTriangle( | uint32_t | index ) const | 
Return one triangle.
Parameters
- index
- Index of triangle stored in this node.
Returns
Indices stored in this node.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:115
function
 MinSG::TriangleTrees::kDTree::getTriangleCount
| public | const | inline | virtual | 
| uint32_t getTriangleCount( | ) const | 
Return the number of triangles that are stored in this tree node.
Returns
Triangle count
Defined in MinSG/Ext/TriangleTrees/kDTree.h:122
function
 MinSG::TriangleTrees::kDTree::shouldSplit
| public | const | inline | 
| bool shouldSplit( | ) const | 
Check if this node should be split.
Returns
trueif this node should be split.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:131
function
 MinSG::TriangleTrees::kDTree::split
| public | 
| void split( | ) | 
Split this node if it is a leaf. It creates two children and converts this node into an inner node.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:140
function
 MinSG::TriangleTrees::kDTree::contains
| public | const | virtual | 
| bool contains( | const TriangleAccessor & | triangle ) const | 
Check if the triangle fits into the bounding box of the tree node.
Parameters
- triangle
- Triangle to check.
Returns
trueif the triangle is inside or at most touching the bounds.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:150
function
 MinSG::TriangleTrees::kDTree::fetchAttributes
| public | const | virtual | 
| void fetchAttributes( | Util::AttributeProvider * | container ) const | 
Add attributes specific to this object to the given container.
Parameters
- container
- Container for attributes.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:157
function
 MinSG::TriangleTrees::kDTree::kDTree
| protected | explicit | 
| kDTree( | const Geometry::Box & | childBound, | 
| const kDTree & | parent | |
| ) | 
Create a new kDTree node. This is used to create child nodes. The creating node has to assign the triangles to the node.
Parameters
- childBound
- Axis-aligned bounding box for the child.
- parent
- Parent node which is used to copy the parameters from.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:206
function
 MinSG::TriangleTrees::kDTree::createChild
| protected | const | inline | virtual | 
| kDTree * createChild( | const Geometry::Box & | childBound, | 
| const kDTree & | parent | |
| ) const | 
Return a child node. Needed for polymorphism.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:209
function
 MinSG::TriangleTrees::kDTree::calculateSplittingPlane
| protected | virtual | 
| void calculateSplittingPlane( | uint32_t & | numFirstChild, | 
| uint32_t & | numSecondChild | |
| ) | 
Calculate the value of the splitting plane in the current splitting dimension.
Parameters
- numFirstChild
- Number of triangles that will be assigned to the first child. This value has to be reliable.
- numSecondChild
- Number of triangles that will be assigned to the second child. This value has to be reliable. assigned to the first child. This value has to be reliable.
Note: It has the side effect that thesplitValuewill be set to the calculated value.
Defined in MinSG/Ext/TriangleTrees/kDTree.h:225
function
 MinSG::TriangleTrees::kDTree::needCut
| protected | static | 
| bool needCut( | const TriangleAccessor & | triangle, | 
| uint8_t | splitDimension, | |
| float | splitValue, | |
| float & | minPos, | |
| float & | maxPos | |
| ) | 
Check if the triangle given by itsindexlies on both sides of the splitting plane given bysplitValuein thesplitDimension.
Parameters
- triangle
- Triangle to check
- splitDimension
- Dimension orthogonal to the splitting plane
- splitValue
- Coordinate value of the splitting plane
- minPos
- Minimum coordinate of the vertices of the triangle
- maxPos
- Maximum coordinate of the vertices of the triangle
Defined in MinSG/Ext/TriangleTrees/kDTree.h:243