|
coal 3.0.1
Coal, The Collision Detection Library. Previously known as HPP-FCL, fork of FCL -- The Flexible Collision Library
|
Class for hierarchy tree structure. More...
#include <coal/broadphase/detail/hierarchy_tree.h>

Public Types | |
| typedef NodeBase< BV > | Node |
Public Member Functions | |
| HierarchyTree (int bu_threshold_=16, int topdown_level_=0) | |
| Create hierarchy tree with suitable setting. bu_threshold decides the height of tree node to start bottom-up construction / optimization; topdown_level decides different methods to construct tree in topdown manner. lower level method constructs tree with better quality but is slower. | |
| ~HierarchyTree () | |
| void | init (std::vector< Node * > &leaves, int level=0) |
| Initialize the tree by a set of leaves using algorithm with a given level. | |
| Node * | insert (const BV &bv, void *data) |
| Insest a node. | |
| void | remove (Node *leaf) |
| Remove a leaf node. | |
| void | clear () |
| Clear the tree. | |
| bool | empty () const |
| Whether the tree is empty. | |
| void | update (Node *leaf, int lookahead_level=-1) |
Updates a leaf node. A use case is when the bounding volume of an object changes. Ensure every parent node has its bounding volume expand or shrink to fit the bounding volumes of its children. | |
| bool | update (Node *leaf, const BV &bv) |
| update the tree when the bounding volume of a given leaf has changed | |
| bool | update (Node *leaf, const BV &bv, const Vec3s &vel, Scalar margin) |
| update one leaf's bounding volume, with prediction | |
| bool | update (Node *leaf, const BV &bv, const Vec3s &vel) |
| update one leaf's bounding volume, with prediction | |
| size_t | getMaxHeight () const |
| get the max height of the tree | |
| size_t | getMaxDepth () const |
| get the max depth of the tree | |
| void | balanceBottomup () |
| balance the tree from bottom | |
| void | balanceTopdown () |
| balance the tree from top | |
| void | balanceIncremental (int iterations) |
| balance the tree in an incremental way | |
| void | refit () |
| refit the tree, i.e., when the leaf nodes' bounding volumes change, update the entire tree in a bottom-up manner | |
| void | extractLeaves (const Node *root, std::vector< Node * > &leaves) const |
| extract all the leaves of the tree | |
| size_t | size () const |
| number of leaves in the tree | |
| Node * | getRoot () const |
| get the root of the tree | |
| Node *& | getRoot () |
| void | print (Node *root, int depth) |
| print the tree in a recursive way | |
Public Attributes | |
| int | topdown_level |
| decide which topdown algorithm to use | |
| int | bu_threshold |
| decide the depth to use expensive bottom-up algorithm | |
Protected Attributes | |
| Node * | root_node |
| size_t | n_leaves |
| unsigned int | opath |
| Node * | free_node |
| int | max_lookahead_level |
Class for hierarchy tree structure.
| typedef NodeBase<BV> coal::detail::HierarchyTree< BV >::Node |
| coal::detail::HierarchyTree< BV >::HierarchyTree | ( | int | bu_threshold_ = 16, |
| int | topdown_level_ = 0 |
||
| ) |
Create hierarchy tree with suitable setting. bu_threshold decides the height of tree node to start bottom-up construction / optimization; topdown_level decides different methods to construct tree in topdown manner. lower level method constructs tree with better quality but is slower.
| coal::detail::HierarchyTree< BV >::~HierarchyTree | ( | ) |
| void coal::detail::HierarchyTree< BV >::balanceBottomup | ( | ) |
balance the tree from bottom
| void coal::detail::HierarchyTree< BV >::balanceIncremental | ( | int | iterations | ) |
balance the tree in an incremental way
| void coal::detail::HierarchyTree< BV >::balanceTopdown | ( | ) |
balance the tree from top
| void coal::detail::HierarchyTree< BV >::clear | ( | ) |
Clear the tree.
| bool coal::detail::HierarchyTree< BV >::empty | ( | ) | const |
Whether the tree is empty.
| void coal::detail::HierarchyTree< BV >::extractLeaves | ( | const Node * | root, |
| std::vector< Node * > & | leaves | ||
| ) | const |
extract all the leaves of the tree
| size_t coal::detail::HierarchyTree< BV >::getMaxDepth | ( | ) | const |
get the max depth of the tree
| size_t coal::detail::HierarchyTree< BV >::getMaxHeight | ( | ) | const |
get the max height of the tree
| HierarchyTree< BV >::Node *& coal::detail::HierarchyTree< BV >::getRoot | ( | ) |
| HierarchyTree< BV >::Node * coal::detail::HierarchyTree< BV >::getRoot | ( | ) | const |
get the root of the tree
| void coal::detail::HierarchyTree< BV >::init | ( | std::vector< Node * > & | leaves, |
| int | level = 0 |
||
| ) |
Initialize the tree by a set of leaves using algorithm with a given level.
| HierarchyTree< BV >::Node * coal::detail::HierarchyTree< BV >::insert | ( | const BV & | bv, |
| void * | data | ||
| ) |
Insest a node.
| void coal::detail::HierarchyTree< BV >::print | ( | Node * | root, |
| int | depth | ||
| ) |
print the tree in a recursive way
| void coal::detail::HierarchyTree< BV >::refit | ( | ) |
refit the tree, i.e., when the leaf nodes' bounding volumes change, update the entire tree in a bottom-up manner
| void coal::detail::HierarchyTree< BV >::remove | ( | Node * | leaf | ) |
Remove a leaf node.
| size_t coal::detail::HierarchyTree< BV >::size | ( | ) | const |
number of leaves in the tree
| bool coal::detail::HierarchyTree< BV >::update | ( | Node * | leaf, |
| const BV & | bv | ||
| ) |
update the tree when the bounding volume of a given leaf has changed
| bool coal::detail::HierarchyTree< BV >::update | ( | Node * | leaf, |
| const BV & | bv, | ||
| const Vec3s & | vel | ||
| ) |
update one leaf's bounding volume, with prediction
| bool coal::detail::HierarchyTree< BV >::update | ( | Node * | leaf, |
| const BV & | bv, | ||
| const Vec3s & | vel, | ||
| Scalar | margin | ||
| ) |
update one leaf's bounding volume, with prediction
| void coal::detail::HierarchyTree< BV >::update | ( | Node * | leaf, |
| int | lookahead_level = -1 |
||
| ) |
Updates a leaf node. A use case is when the bounding volume of an object changes. Ensure every parent node has its bounding volume expand or shrink to fit the bounding volumes of its children.
leaf node does not change. It is just another valid tree of the same set of objects. This is because update() works by first removing leaf and then inserting leaf back. The structural change could be as simple as switching the order of two leaves if the sibling of the leaf is also a leaf. Or it could be more complicated if the sibling is an internal node. | int coal::detail::HierarchyTree< BV >::bu_threshold |
decide the depth to use expensive bottom-up algorithm
|
protected |
This is a one Node cache, the reason is that we need to remove a node and then add it again frequently.
|
protected |
|
protected |
|
protected |
|
protected |
| int coal::detail::HierarchyTree< BV >::topdown_level |
decide which topdown algorithm to use