|
virtual int | IsA (const char *type) |
|
vtkOBBTree * | NewInstance () const |
|
void | PrintSelf (ostream &os, vtkIndent indent) |
|
int | InsideOrOutside (const double point[3]) |
|
int | LineIntersectsNode (vtkOBBNode *pA, double b0[3], double b1[3]) |
|
void | GenerateRepresentation (int level, vtkPolyData *pd) |
|
|
int | IntersectWithLine (const double a0[3], const double a1[3], vtkPoints *points, vtkIdList *cellIds) |
|
|
int | IntersectWithLine (double a0[3], double a1[3], double tol, double &t, double x[3], double pcoords[3], int &subId, vtkIdType &cellId, vtkGenericCell *cell) |
|
|
void | ComputeOBB (vtkDataSet *input, double corner[3], double max[3], double mid[3], double min[3], double size[3]) |
|
|
int | DisjointOBBNodes (vtkOBBNode *nodeA, vtkOBBNode *nodeB, vtkMatrix4x4 *XformBtoA) |
|
|
int | TriangleIntersectsNode (vtkOBBNode *pA, double p0[3], double p1[3], double p2[3], vtkMatrix4x4 *XformBtoA) |
|
|
int | IntersectWithOBBTree (vtkOBBTree *OBBTreeB, vtkMatrix4x4 *XformBtoA, int(*function)(vtkOBBNode *nodeA, vtkOBBNode *nodeB, vtkMatrix4x4 *Xform, void *arg), void *data_arg) |
|
|
void | FreeSearchStructure () |
|
void | BuildLocator () |
|
vtkAbstractCellLocator * | NewInstance () const |
|
virtual void | FindCellsWithinBounds (double *bbox, vtkIdList *cells) |
|
virtual vtkIdType | FindCell (double x[3]) |
|
virtual bool | InsideCellBounds (double x[3], vtkIdType cell_ID) |
|
virtual void | SetNumberOfCellsPerNode (int) |
|
virtual int | GetNumberOfCellsPerNode () |
|
virtual void | SetCacheCellBounds (int) |
|
virtual int | GetCacheCellBounds () |
|
virtual void | CacheCellBoundsOn () |
|
virtual void | CacheCellBoundsOff () |
|
virtual void | SetRetainCellLists (int) |
|
virtual int | GetRetainCellLists () |
|
virtual void | RetainCellListsOn () |
|
virtual void | RetainCellListsOff () |
|
virtual void | SetLazyEvaluation (int) |
|
virtual int | GetLazyEvaluation () |
|
virtual void | LazyEvaluationOn () |
|
virtual void | LazyEvaluationOff () |
|
virtual void | SetUseExistingSearchStructure (int) |
|
virtual int | GetUseExistingSearchStructure () |
|
virtual void | UseExistingSearchStructureOn () |
|
virtual void | UseExistingSearchStructureOff () |
|
virtual int | IntersectWithLine (double p1[3], double p2[3], double tol, double &t, double x[3], double pcoords[3], int &subId) |
|
virtual int | IntersectWithLine (double p1[3], double p2[3], double tol, double &t, double x[3], double pcoords[3], int &subId, vtkIdType &cellId) |
|
virtual void | FindClosestPoint (double x[3], double closestPoint[3], vtkIdType &cellId, int &subId, double &dist2) |
|
virtual void | FindClosestPoint (double x[3], double closestPoint[3], vtkGenericCell *cell, vtkIdType &cellId, int &subId, double &dist2) |
|
virtual vtkIdType | FindClosestPointWithinRadius (double x[3], double radius, double closestPoint[3], vtkIdType &cellId, int &subId, double &dist2) |
|
virtual vtkIdType | FindClosestPointWithinRadius (double x[3], double radius, double closestPoint[3], vtkGenericCell *cell, vtkIdType &cellId, int &subId, double &dist2) |
|
virtual vtkIdType | FindClosestPointWithinRadius (double x[3], double radius, double closestPoint[3], vtkGenericCell *cell, vtkIdType &cellId, int &subId, double &dist2, int &inside) |
|
virtual void | FindCellsAlongLine (double p1[3], double p2[3], double tolerance, vtkIdList *cells) |
|
virtual vtkIdType | FindCell (double x[3], double tol2, vtkGenericCell *GenCell, double pcoords[3], double *weights) |
|
vtkLocator * | NewInstance () const |
|
virtual void | Update () |
|
virtual void | Initialize () |
|
virtual void | SetDataSet (vtkDataSet *) |
|
virtual vtkDataSet * | GetDataSet () |
|
virtual void | SetMaxLevel (int) |
|
virtual int | GetMaxLevel () |
|
virtual int | GetLevel () |
|
virtual void | SetAutomatic (int) |
|
virtual int | GetAutomatic () |
|
virtual void | AutomaticOn () |
|
virtual void | AutomaticOff () |
|
virtual void | SetTolerance (double) |
|
virtual double | GetTolerance () |
|
virtual unsigned long | GetBuildTime () |
|
virtual void | Register (vtkObjectBase *o) |
|
virtual void | UnRegister (vtkObjectBase *o) |
|
vtkObject * | NewInstance () const |
|
virtual void | DebugOn () |
|
virtual void | DebugOff () |
|
bool | GetDebug () |
|
void | SetDebug (bool debugFlag) |
|
virtual void | Modified () |
|
virtual unsigned long | GetMTime () |
|
unsigned long | AddObserver (unsigned long event, vtkCommand *, float priority=0.0f) |
|
unsigned long | AddObserver (const char *event, vtkCommand *, float priority=0.0f) |
|
vtkCommand * | GetCommand (unsigned long tag) |
|
void | RemoveObserver (vtkCommand *) |
|
void | RemoveObservers (unsigned long event, vtkCommand *) |
|
void | RemoveObservers (const char *event, vtkCommand *) |
|
int | HasObserver (unsigned long event, vtkCommand *) |
|
int | HasObserver (const char *event, vtkCommand *) |
|
void | RemoveObserver (unsigned long tag) |
|
void | RemoveObservers (unsigned long event) |
|
void | RemoveObservers (const char *event) |
|
void | RemoveAllObservers () |
|
int | HasObserver (unsigned long event) |
|
int | HasObserver (const char *event) |
|
template<class U , class T > |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(), float priority=0.0f) |
|
template<class U , class T > |
unsigned long | AddObserver (unsigned long event, U observer, void(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
|
template<class U , class T > |
unsigned long | AddObserver (unsigned long event, U observer, bool(T::*callback)(vtkObject *, unsigned long, void *), float priority=0.0f) |
|
int | InvokeEvent (unsigned long event, void *callData) |
|
int | InvokeEvent (const char *event, void *callData) |
|
int | InvokeEvent (unsigned long event) |
|
int | InvokeEvent (const char *event) |
|
const char * | GetClassName () const |
|
virtual void | Delete () |
|
virtual void | FastDelete () |
|
void | Print (ostream &os) |
|
void | SetReferenceCount (int) |
|
void | PrintRevisions (ostream &) |
|
virtual void | PrintHeader (ostream &os, vtkIndent indent) |
|
virtual void | PrintTrailer (ostream &os, vtkIndent indent) |
|
int | GetReferenceCount () |
|
generate oriented bounding box (OBB) tree
vtkOBBTree is an object to generate oriented bounding box (OBB) trees. An oriented bounding box is a bounding box that does not necessarily line up along coordinate axes. The OBB tree is a hierarchical tree structure of such boxes, where deeper levels of OBB confine smaller regions of space.
To build the OBB, a recursive, top-down process is used. First, the root OBB is constructed by finding the mean and covariance matrix of the cells (and their points) that define the dataset. The eigenvectors of the covariance matrix are extracted, giving a set of three orthogonal vectors that define the tightest-fitting OBB. To create the two children OBB's, a split plane is found that (approximately) divides the number cells in half. These are then assigned to the children OBB's. This process then continues until the MaxLevel ivar limits the recursion, or no split plane can be found.
A good reference for OBB-trees is Gottschalk & Manocha in Proceedings of Siggraph `96.
- Warning
- Since this algorithms works from a list of cells, the OBB tree will only bound the "geometry" attached to the cells if the convex hull of the cells bounds the geometry.
-
Long, skinny cells (i.e., cells with poor aspect ratio) may cause unsatisfactory results. This is due to the fact that this is a top-down implementation of the OBB tree, requiring that one or more complete cells are contained in each OBB. This requirement makes it hard to find good split planes during the recursion process. A bottom-up implementation would go a long way to correcting this problem.
- See also
- vtkLocator vtkCellLocator vtkPointLocator
- Tests:
- vtkOBBTree (Tests)
Definition at line 87 of file vtkOBBTree.h.