coal 3.0.2 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, CoalScalar 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, | ||
| CoalScalar | 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.
| 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