Main Page Class Hierarchy Alphabetical List Compound List File List Compound Members File Members Related Pages

# Graphics/vtkOBBTree.h

Go to the documentation of this file.

    00001 /*=========================================================================
    00002
    00003   Program:   Visualization Toolkit
    00004   Module:    $RCSfile: vtkOBBTree.h,v $
    00005   Language:  C++
    00006
    00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen
    00008   All rights reserved.
    00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
    00010
    00011      This software is distributed WITHOUT ANY WARRANTY; without even
    00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
    00013      PURPOSE.  See the above copyright notice for more information.
    00014
    00015 =========================================================================*/
    00071 #ifndef __vtkOBBTree_h
    00072 #define __vtkOBBTree_h
    00073
    00074 #include "vtkCellLocator.h"
    00075
    00076 class vtkMatrix4x4;
    00077
    00078 // Special class defines node for the OBB tree
    00079 //
    00080 //BTX
    00081 //
    00082 class vtkOBBNode { //;prevent man page generation
    00083 public:
    00084   vtkOBBNode();
    00085   ~vtkOBBNode();
    00086
    00087   float Corner[3]; //center point of this node
    00088   float Axes[3][3]; //the axes defining the OBB - ordered from long->short
    00089   vtkOBBNode *Parent; //parent node; NULL if root
    00090   vtkOBBNode **Kids; //two children of this node; NULL if leaf
    00091   vtkIdList *Cells; //list of cells in node
    00092   void DebugPrintTree( int level, double *leaf_vol, int *minCells,
    00093                        int *maxCells );
    00094 };
    00095 //ETX
    00096 //
    00097
    00098 class VTK_GRAPHICS_EXPORT vtkOBBTree : public vtkCellLocator
    00099 {
    00100 public:
    00101   vtkTypeRevisionMacro(vtkOBBTree,vtkCellLocator);
    00102
    00105   static vtkOBBTree *New();
    00106
    00108
    00111   void ComputeOBB(vtkPoints *pts, float corner[3], float max[3],
    00112                   float mid[3], float min[3], float size[3]);
    00114
    00116
    00120   void ComputeOBB(vtkDataSet *input, float corner[3], float max[3],
    00121                   float mid[3], float min[3], float size[3]);
    00123
    00128   int InsideOrOutside(const float point[3]);
    00129
    00131
    00139   int IntersectWithLine(const float a0[3], const float a1[3],
    00140                         vtkPoints *points, vtkIdList *cellIds);
    00142
    00144
    00147   int IntersectWithLine(float a0[3], float a1[3], float tol,
    00148                         float& t, float x[3], float pcoords[3],
    00149                         int &subId);
    00151
    00152   int IntersectWithLine(float a0[3], float a1[3], float tol,
    00153                         float& t, float x[3], float pcoords[3],
    00154                         int &subId, vtkIdType &cellId);
    00155
    00156   int IntersectWithLine(float a0[3], float a1[3], float tol,
    00157                         float& t, float x[3], float pcoords[3],
    00158                         int &subId, vtkIdType &cellId, vtkGenericCell *cell);
    00159
    00160   //BTX
    00161
    00163
    00165   int DisjointOBBNodes( vtkOBBNode *nodeA, vtkOBBNode *nodeB,
    00166                         vtkMatrix4x4 *XformBtoA );
    00168
    00170   int LineIntersectsNode( vtkOBBNode *pA, float B0[3], float B1[3] );
    00171
    00173
    00174   int TriangleIntersectsNode( vtkOBBNode *pA,
    00175                               float p0[3], float p1[3],
    00176                               float p2[3], vtkMatrix4x4 *XformBtoA );
    00178
    00180
    00182   int IntersectWithOBBTree( vtkOBBTree *OBBTreeB, vtkMatrix4x4 *XformBtoA,
    00183                             int(*function)( vtkOBBNode *nodeA,
    00184                                             vtkOBBNode *nodeB,
    00185                                             vtkMatrix4x4 *Xform,
    00186                                             void *arg ),
    00187                             void *data_arg );
    00188   //ETX
    00190
    00192   /*! Satisfy locator's abstract interface, see vtkLocator. */
    00193   void FreeSearchStructure();
    00194   void BuildLocator();
    00196
    00205   void GenerateRepresentation(int level, vtkPolyData *pd);
    00206
    00207   //BTX
    00208 protected:
    00209   vtkOBBTree();
    00210   ~vtkOBBTree();
    00211
    00212   // Compute an OBB from the list of cells given.  This used to be
    00213   // public but should not have been.  A public call has been added
    00214   // so that the functionality can be accessed.
    00215   void ComputeOBB(vtkIdList *cells, float corner[3], float max[3],
    00216                        float mid[3], float min[3], float size[3]);
    00217
    00218   vtkOBBNode *Tree;
    00219   void BuildTree(vtkIdList *cells, vtkOBBNode *parent, int level);
    00220   vtkPoints *PointsList;
    00221   int *InsertedPoints;
    00222   int OBBCount;
    00223   int DeepestLevel;
    00224
    00225   void DeleteTree(vtkOBBNode *OBBptr);
    00226   void GeneratePolygons(vtkOBBNode *OBBptr, int level, int repLevel,
    00227                         vtkPoints* pts, vtkCellArray *polys);
    00228
    00229   //ETX
    00230 private:
    00231   vtkOBBTree(const vtkOBBTree&);  // Not implemented.
    00232   void operator=(const vtkOBBTree&);  // Not implemented.
    00233 };
    00234
    00235 #endif