Filtering/vtkCellLocator.h Source File

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

# Filtering/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   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 =========================================================================*/
    00057 #ifndef __vtkCellLocator_h
    00058 #define __vtkCellLocator_h
    00059
    00060 #include "vtkLocator.h"
    00061
    00062 class vtkCellArray;
    00063 class vtkGenericCell;
    00064 class vtkIdList;
    00065 class vtkNeighborCells;
    00066 class vtkPoints;
    00067
    00068 class VTK_FILTERING_EXPORT vtkCellLocator : public vtkLocator
    00069 {
    00070 public:
    00071   vtkTypeRevisionMacro(vtkCellLocator,vtkLocator);
    00072   void PrintSelf(ostream& os, vtkIndent indent);
    00073
    00076   static vtkCellLocator *New();
    00077
    00079
    00080   vtkSetClampMacro(NumberOfCellsPerBucket,int,1,VTK_LARGE_INTEGER);
    00081   vtkGetMacro(NumberOfCellsPerBucket,int);
    00083
    00085
    00090   vtkSetMacro(CacheCellBounds,int);
    00091   vtkGetMacro(CacheCellBounds,int);
    00092   vtkBooleanMacro(CacheCellBounds,int);
    00094
    00096
    00098   virtual int IntersectWithLine(float a0[3], float a1[3], float tol,
    00099                                 float& t, float x[3], float pcoords[3],
    00100                                 int &subId);
    00102
    00104
    00106   virtual int IntersectWithLine(float a0[3], float a1[3], float tol,
    00107                                 float& t, float x[3], float pcoords[3],
    00108                                 int &subId, vtkIdType &cellId);
    00110
    00112
    00115   virtual int IntersectWithLine(float a0[3], float a1[3], float tol,
    00116                                 float& t, float x[3], float pcoords[3],
    00117                                 int &subId, vtkIdType &cellId,
    00118                                 vtkGenericCell *cell);
    00120
    00122
    00125   void FindClosestPoint(float x[3], float closestPoint[3], vtkIdType &cellId,
    00126                         int &subId, float& dist2);
    00128
    00130
    00139   void FindClosestPoint(float x[3], float closestPoint[3],
    00140                         vtkGenericCell *cell, vtkIdType &cellId, int &subId,
    00141                         float& dist2);
    00143
    00145
    00151   int FindClosestPointWithinRadius(float x[3], float radius,
    00152                                    float closestPoint[3], vtkIdType &cellId,
    00153                                    int &subId, float& dist2);
    00155
    00157
    00170   int FindClosestPointWithinRadius(float x[3], float radius,
    00171                                    float closestPoint[3],
    00172                                    vtkGenericCell *cell, vtkIdType &cellId,
    00173                                    int &subId, float& dist2);
    00175
    00177
    00192   int FindClosestPointWithinRadius(float x[3], float radius,
    00193                                    float closestPoint[3],
    00194                                    vtkGenericCell *cell, vtkIdType &cellId,
    00195                                    int &subId, float& dist2, int &inside);
    00197
    00199   virtual vtkIdList *GetCells(int bucket);
    00200
    00203   virtual int GetNumberOfBuckets(void);
    00204
    00206
    00207   void FreeSearchStructure();
    00208   void BuildLocator();
    00209   void GenerateRepresentation(int level, vtkPolyData *pd);
    00211
    00212 protected:
    00213   vtkCellLocator();
    00214   ~vtkCellLocator();
    00215
    00216   void GetBucketNeighbors(int ijk[3], int ndivs, int level);
    00217   void GetOverlappingBuckets(float x[3], int ijk[3], float dist,
    00218                              int prevMinLevel[3], int prevMaxLevel[3]);
    00219
    00220   void ClearCellHasBeenVisited();
    00221   void ClearCellHasBeenVisited(int id);
    00222
    00223   float Distance2ToBucket(float x[3], int nei[3]);
    00224   float Distance2ToBounds(float x[3], float bounds[6]);
    00225
    00226   int NumberOfCellsPerBucket; // cells per octant
    00227   int NumberOfOctants; // number of octants in tree
    00228   float Bounds[6]; // bounding box root octant
    00229   int NumberOfParents; // number of parent octants
    00230   float H[3]; // width of leaf octant in x-y-z directions
    00231   int NumberOfDivisions; // number of "leaf" octant sub-divisions
    00232   vtkIdList **Tree; // octree
    00233
    00234   void MarkParents(void*, int, int, int, int, int);
    00235   void GetChildren(int idx, int level, int children[8]);
    00236   int GenerateIndex(int offset, int numDivs, int i, int j, int k,
    00237                     vtkIdType &idx);
    00238   void GenerateFace(int face, int numDivs, int i, int j, int k,
    00239                     vtkPoints *pts, vtkCellArray *polys);
    00240
    00241   vtkNeighborCells *Buckets;
    00242   unsigned char *CellHasBeenVisited;
    00243   unsigned char QueryNumber;
    00244   int CacheCellBounds;
    00245 //BTX - begin tcl exclude
    00246   float (*CellBounds)[6];
    00247 //ETX - end tcl exclude
    00248 private:
    00249   vtkCellLocator(const vtkCellLocator&);  // Not implemented.
    00250   void operator=(const vtkCellLocator&);  // Not implemented.
    00251 };
    00252
    00253 #endif
    00254
    00255