HDK
|
#include <BV_OBBTree.h>
Classes | |
class | bvLeaf |
Public Types | |
typedef BV_Tree | BaseClass |
![]() | |
enum | BV_Status { BV_PASS, BV_FAIL_ROTATIONS_UNSUPPORTED, BV_FAIL_BAD_TYPE, BV_FAIL } |
Public Member Functions | |
BV_OBBTree () | |
BV_OBBTree (const BV_OBBTree &) | |
~BV_OBBTree () override | |
BV_OBBTree & | operator= (const BV_OBBTree &) |
const char * | getType () const override |
const BV_Tree * | castTo (const char *type) const override |
BV_Tree * | castTo (const char *type) override |
void | buildLazy (BV_LeafIterator &leafIt) |
void | getRootOBB (UT_Matrix4 &xform, UT_Vector3 &radii) const |
void | setUseConvexHull (bool bValue) |
bool | getUseConvexHull () |
![]() | |
BV_Tree () | |
virtual | ~BV_Tree () |
BV_Tree * | clone () const |
int64 | getMemoryUsage () const |
int | getNumLeaves () const |
void | build (BV_LeafIterator &leafIt) |
Construct a volume hierarchy from the given primitives. More... | |
void | updateExtents (BV_LeafIterator &leafIt) |
void | save (std::ostream &os, bool onlyStructure) const |
bool | load (UT_IStream &is, bool onlyStructure) |
BV_Status | intersect (BV_Callback &callback, const BV_Tree &treeb, const UT_DMatrix4 &xforma, const UT_DMatrix4 &xformb, fpreal tol=0.001F) const |
BV_Status | intersect (BV_Callback &callback, const BV_Tree &treeb, fpreal tol=0.001F) const |
Static boxes only! More... | |
BV_Status | intersect (BV_Callback &callback, const BV_Tree &treeb, const UT_DMatrix4 &startxforma, const UT_DMatrix4 &startxformb, const UT_DMatrix4 &endxforma, const UT_DMatrix4 &endxformb, fpreal tol=0.001F) const |
Moving boxes only! More... | |
BV_Status | intersect (BV_Callback &callback, const BV_Tree &treeb, const UT_DMatrix4 &xforma, const UT_DMatrix4 &startxforma, const UT_DMatrix4 &startxformb, const UT_DMatrix4 &xformb, const UT_DMatrix4 &endxforma, const UT_DMatrix4 &endxformb, fpreal tol=0.001F) const |
Moving boxes only! More... | |
Protected Member Functions | |
BV_Tree * | cloneSubclass () const override |
int64 | getMemoryUsageSubclass () const override |
int | getNumLeavesSubclass () const override |
void | buildSubclass (BV_LeafIterator &leafIt) override |
void | updateExtentsSubclass (BV_LeafIterator &leafIt) override |
BV_Status | intersectSubclass (BV_Callback &callback, const BV_Tree &treeb, const UT_DMatrix4 &startxforma, const UT_DMatrix4 &startxformb, const UT_DMatrix4 &endxforma, const UT_DMatrix4 &endxformb, fpreal tol) const override |
WARNING: not thread-safe if tree was lazily built! More... | |
BV_OBB * | getRoot () |
void | buildInternal (BV_LeafIterator &leafIt, bool lazy) |
BV_OBB * | createTree (int startprim, int numleaves, const UT_Matrix3 &rootBasis, const UT_Vector3 &rootPos, int depth=-1) |
void | createChildren (BV_OBB &root, int depth=-1) |
bool | updateExtentsRecurse (BV_OBB &node, const UT_Matrix3 &parentBasis, const UT_Vector3 &parentPos) |
void | getBounds (const UT_Matrix3 &basis, UT_BoundingBox &bbox, bool &firstPrim) |
void | calcOBB (BV_OBB &node) |
void | calcSize (BV_OBB &node) |
bool | computeConvexHull (const TPointArray &source_points_in, TSimpleTriangleArray &final_triangles_out) |
bool | doConvexHullIteration (BV_CHDataManager &data_manager, TTriArray &working_triangles) |
bool | intersectRecurse (BV_Callback &callback, const BV_OBBTree &treeb, const BV_OBB &a, const BV_OBB &b, const bvTransform &t1, const bvTransform &t2, const bvTransform &t3, const bvTransform &t4, fpreal tol, int identities) const |
void | calculateSortKeys (bvLeaf *prims, int numleaves, UT_Matrix3 &basis, int axis) const |
void | saveSubclass (std::ostream &os, bool onlyStructure) const override |
Saving and loading only works for non-lazy building. More... | |
bool | loadSubclass (UT_IStream &is, bool onlyStructure) override |
Saving and loading only works for non-lazy building. More... | |
![]() | |
BV_Tree (const BV_Tree &tree) | |
Static Protected Member Functions | |
static int | compareLeaves (const void *t1, const void *t2) |
Protected Attributes | |
BV_OBB * | myRoot |
UT_Array< bvLeaf > | myLeaves |
BV_LeafIterator * | myLeafIt |
bool | myUseConvexHullForBBoxes |
Bounding volume hierarchy based on Oriented Bounding Boxes (OBBs).
Build: O(n^2) Update extents: O(n^2)
Definition at line 266 of file BV_OBBTree.h.
typedef BV_Tree BV_OBBTree::BaseClass |
Definition at line 269 of file BV_OBBTree.h.
BV_OBBTree::BV_OBBTree | ( | ) |
BV_OBBTree::BV_OBBTree | ( | const BV_OBBTree & | ) |
|
override |
|
protected |
|
inline |
Alternative lazy building: sections of the tree are only built when a query needs them. In this case, the leaf iterator must not be destroyed until the tree is destroyed, or until a fresh call to buildLazy.
Definition at line 285 of file BV_OBBTree.h.
|
inlineoverrideprotectedvirtual |
Implements BV_Tree.
Definition at line 323 of file BV_OBBTree.h.
Calculate the OBB associated with the given node. Stores orientation in node->myRot, and calls calcSize to calculate the extents. May disable the node if it contains no enabled leaves.
Given the input OBB orientation, calculate the OBB extents. Stores extents (radii) and position in node.
|
protected |
|
overridevirtual |
Reimplemented from BV_Tree.
|
protected |
Compute a convex hull around the points provided, output result as a series of triangles to the array provided. This is currently slower than it should be. Also, note that if coplanar points are present, the convex hull constructed might be around jiggled versions of those points.
|
protected |
Build the tree. If depth is non-negative, the algorithm is lazy and stops after depth levels.
|
protected |
|
protected |
|
inlineprotected |
Definition at line 338 of file BV_OBBTree.h.
void BV_OBBTree::getRootOBB | ( | UT_Matrix4 & | xform, |
UT_Vector3 & | radii | ||
) | const |
|
overridevirtual |
Implements BV_Tree.
bool BV_OBBTree::getUseConvexHull | ( | ) |
|
protected |
|
overrideprotectedvirtual |
WARNING: not thread-safe if tree was lazily built!
Implements BV_Tree.
|
overrideprotectedvirtual |
Saving and loading only works for non-lazy building.
Implements BV_Tree.
BV_OBBTree& BV_OBBTree::operator= | ( | const BV_OBBTree & | ) |
|
overrideprotectedvirtual |
Saving and loading only works for non-lazy building.
Implements BV_Tree.
void BV_OBBTree::setUseConvexHull | ( | bool | bValue | ) |
If true, a somewhat different version of the algorithm is used to compute OBBs around nodes, which uses a convex hull around the points instead of the points themselves. While slower, it results in a consistent bbox that is not influenced by the density/inner points on the mesh. False by default.
|
protected |
|
overrideprotectedvirtual |
Implements BV_Tree.
|
protected |
Definition at line 385 of file BV_OBBTree.h.
Definition at line 384 of file BV_OBBTree.h.
|
protected |
Definition at line 383 of file BV_OBBTree.h.
|
protected |
Definition at line 387 of file BV_OBBTree.h.