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

graphics/vtkCellLocator.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkCellLocator.h,v $
00005   Language:  C++
00006 
00007 
00008 Copyright (c) 1993-2001 Ken Martin, Will Schroeder, Bill Lorensen 
00009 All rights reserved.
00010 
00011 Redistribution and use in source and binary forms, with or without
00012 modification, are permitted provided that the following conditions are met:
00013 
00014  * Redistributions of source code must retain the above copyright notice,
00015    this list of conditions and the following disclaimer.
00016 
00017  * Redistributions in binary form must reproduce the above copyright notice,
00018    this list of conditions and the following disclaimer in the documentation
00019    and/or other materials provided with the distribution.
00020 
00021  * Neither name of Ken Martin, Will Schroeder, or Bill Lorensen nor the names
00022    of any contributors may be used to endorse or promote products derived
00023    from this software without specific prior written permission.
00024 
00025  * Modified source versions must be plainly marked as such, and must not be
00026    misrepresented as being the original software.
00027 
00028 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
00029 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00030 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00031 ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
00032 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00033 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00034 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00035 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00036 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00037 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00038 
00039 =========================================================================*/
00067 #ifndef __vtkCellLocator_h
00068 #define __vtkCellLocator_h
00069 
00070 #include "vtkLocator.h"
00071 
00072 class vtkNeighborCells;
00073 
00074 class VTK_EXPORT vtkCellLocator : public vtkLocator
00075 {
00076 public:
00077   vtkTypeMacro(vtkCellLocator,vtkLocator);
00078   void PrintSelf(ostream& os, vtkIndent indent);
00079 
00082   static vtkCellLocator *New();
00083 
00085   vtkSetClampMacro(NumberOfCellsPerBucket,int,1,VTK_LARGE_INTEGER);
00086   vtkGetMacro(NumberOfCellsPerBucket,int);
00087 
00093   vtkSetMacro(CacheCellBounds,int);
00094   vtkGetMacro(CacheCellBounds,int);
00095   vtkBooleanMacro(CacheCellBounds,int);
00096 
00099   virtual int IntersectWithLine(float a0[3], float a1[3], float tol,
00100             float& t, float x[3], float pcoords[3],
00101             int &subId);
00102 
00105   virtual int IntersectWithLine(float a0[3], float a1[3], float tol,
00106             float& t, float x[3], float pcoords[3],
00107             int &subId, int &cellId);
00108 
00112   virtual int IntersectWithLine(float a0[3], float a1[3], float tol,
00113             float& t, float x[3], float pcoords[3],
00114             int &subId, int &cellId, vtkGenericCell *cell);
00115 
00119   void FindClosestPoint(float x[3], float closestPoint[3], int &cellId,
00120          int &subId, float& dist2);
00121   
00131   void FindClosestPoint(float x[3], float closestPoint[3],
00132          vtkGenericCell *cell, int &cellId, int &subId,
00133          float& dist2);
00134   
00141   int FindClosestPointWithinRadius(float x[3], float radius,
00142                float closestPoint[3], int &cellId,
00143                int &subId, float& dist2);
00144  
00158   int FindClosestPointWithinRadius(float x[3], float radius,
00159                float closestPoint[3],
00160                vtkGenericCell *cell, int &cellId,
00161                int &subId, float& dist2);
00162 
00178   int FindClosestPointWithinRadius(float x[3], float radius,
00179                float closestPoint[3],
00180                vtkGenericCell *cell, int &cellId,
00181                int &subId, float& dist2, int &inside);
00182   
00184   virtual vtkIdList *GetCells(int bucket);
00185 
00188   virtual int GetNumberOfBuckets(void);
00189 
00191   void FreeSearchStructure();
00192   void BuildLocator();
00193   void GenerateRepresentation(int level, vtkPolyData *pd);
00194   
00195 protected:
00196   vtkCellLocator();
00197   ~vtkCellLocator();
00198   vtkCellLocator(const vtkCellLocator&) {};
00199   void operator=(const vtkCellLocator&) {};
00200 
00201   void GetBucketNeighbors(int ijk[3], int ndivs, int level);
00202   void GetOverlappingBuckets(float x[3], int ijk[3], float dist, 
00203                              int prevMinLevel[3], int prevMaxLevel[3]);
00204 
00205   void ClearCellHasBeenVisited();
00206   void ClearCellHasBeenVisited(int id);
00207 
00208   float Distance2ToBucket(float x[3], int nei[3]);
00209   float Distance2ToBounds(float x[3], float bounds[6]);
00210   
00211   int NumberOfCellsPerBucket; // cells per octant
00212   int NumberOfOctants; // number of octants in tree
00213   float Bounds[6]; // bounding box root octant
00214   int NumberOfParents; // number of parent octants
00215   float H[3]; // width of leaf octant in x-y-z directions
00216   int NumberOfDivisions; // number of "leaf" octant sub-divisions
00217   vtkIdList **Tree; // octree
00218 
00219   void MarkParents(void*, int, int, int, int, int);
00220   void GetChildren(int idx, int level, int children[8]);
00221   int GenerateIndex(int offset, int numDivs, int i, int j, int k, int &idx);
00222   void GenerateFace(int face, int numDivs, int i, int j, int k,
00223                     vtkPoints *pts, vtkCellArray *polys);
00224 
00225   vtkNeighborCells *Buckets;
00226   unsigned char *CellHasBeenVisited;
00227   unsigned char QueryNumber;
00228   int CacheCellBounds;
00229 //BTX - begin tcl exclude
00230   float (*CellBounds)[6];
00231 //ETX - end tcl exclude
00232 };
00233 
00234 #endif
00235 
00236 

Generated on Wed Nov 21 12:26:57 2001 for VTK by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001