dox/Filtering/vtkCellLocator.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00040
#ifndef __vtkCellLocator_h
00041
#define __vtkCellLocator_h
00042
00043
#include "vtkLocator.h"
00044
00045
class vtkCellArray;
00046
class vtkGenericCell;
00047
class vtkIdList;
00048
class vtkNeighborCells;
00049
class vtkPoints;
00050
00051 class VTK_FILTERING_EXPORT vtkCellLocator :
public vtkLocator
00052 {
00053
public:
00054 vtkTypeRevisionMacro(vtkCellLocator,
vtkLocator);
00055
void PrintSelf(ostream& os,
vtkIndent indent);
00056
00059
static vtkCellLocator *
New();
00060
00062
00063 vtkSetClampMacro(NumberOfCellsPerBucket,
int,1,VTK_LARGE_INTEGER);
00064 vtkGetMacro(NumberOfCellsPerBucket,
int);
00066
00068
00073 vtkSetMacro(CacheCellBounds,
int);
00074 vtkGetMacro(CacheCellBounds,
int);
00075 vtkBooleanMacro(CacheCellBounds,
int);
00077
00079
00081
virtual int IntersectWithLine(
double a0[3],
double a1[3],
double tol,
00082
double& t,
double x[3],
double pcoords[3],
00083
int &subId);
00085
00087
00089
virtual int IntersectWithLine(
double a0[3],
double a1[3],
double tol,
00090
double& t,
double x[3],
double pcoords[3],
00091
int &subId,
vtkIdType &cellId);
00093
00095
00098
virtual int IntersectWithLine(
double a0[3],
double a1[3],
double tol,
00099
double& t,
double x[3],
double pcoords[3],
00100
int &subId,
vtkIdType &cellId,
00101
vtkGenericCell *cell);
00103
00105
00108
void FindClosestPoint(
double x[3],
double closestPoint[3],
vtkIdType &cellId,
00109
int &subId,
double& dist2);
00111
00113
00122
void FindClosestPoint(
double x[3],
double closestPoint[3],
00123
vtkGenericCell *cell,
vtkIdType &cellId,
int &subId,
00124
double& dist2);
00126
00128
00134
int FindClosestPointWithinRadius(
double x[3],
double radius,
00135
double closestPoint[3],
vtkIdType &cellId,
00136
int &subId,
double& dist2);
00138
00140
00153
int FindClosestPointWithinRadius(
double x[3],
double radius,
00154
double closestPoint[3],
00155
vtkGenericCell *cell,
vtkIdType &cellId,
00156
int &subId,
double& dist2);
00158
00160
00175
int FindClosestPointWithinRadius(
double x[3],
double radius,
00176
double closestPoint[3],
00177
vtkGenericCell *cell,
vtkIdType &cellId,
00178
int &subId,
double& dist2,
int &inside);
00180
00182
virtual vtkIdList *GetCells(
int bucket);
00183
00186
virtual int GetNumberOfBuckets(
void);
00187
00189
00190
void FreeSearchStructure();
00191
void BuildLocator();
00192
void GenerateRepresentation(
int level,
vtkPolyData *pd);
00194
00195
protected:
00196 vtkCellLocator();
00197 ~vtkCellLocator();
00198
00199
void GetBucketNeighbors(
int ijk[3],
int ndivs,
int level);
00200
void GetOverlappingBuckets(
double x[3],
int ijk[3],
double dist,
00201
int prevMinLevel[3],
int prevMaxLevel[3]);
00202
00203
void ClearCellHasBeenVisited();
00204
void ClearCellHasBeenVisited(
int id);
00205
00206
double Distance2ToBucket(
double x[3],
int nei[3]);
00207
double Distance2ToBounds(
double x[3],
double bounds[6]);
00208
00209 int NumberOfCellsPerBucket;
00210 int NumberOfOctants;
00211 double Bounds[6];
00212 int NumberOfParents;
00213 double H[3];
00214 int NumberOfDivisions;
00215 vtkIdList **Tree;
00216
00217
void MarkParents(
void*,
int,
int,
int,
int,
int);
00218
void GetChildren(
int idx,
int level,
int children[8]);
00219
int GenerateIndex(
int offset,
int numDivs,
int i,
int j,
int k,
00220
vtkIdType &idx);
00221
void GenerateFace(
int face,
int numDivs,
int i,
int j,
int k,
00222
vtkPoints *pts,
vtkCellArray *polys);
00223
00224 vtkNeighborCells *Buckets;
00225 unsigned char *CellHasBeenVisited;
00226 unsigned char QueryNumber;
00227 int CacheCellBounds;
00228
00229 double (*CellBounds)[6];
00230
00231
00232
void ComputeOctantBounds(
int i,
int j,
int k);
00233 double OctantBounds[6];
00234 int IsInOctantBounds(
double x[3])
00235 {
00236
if ( this->OctantBounds[0] <= x[0] && x[0] <= this->OctantBounds[1] &&
00237 this->OctantBounds[2] <= x[1] && x[1] <= this->OctantBounds[3] &&
00238 this->OctantBounds[4] <= x[2] && x[2] <= this->OctantBounds[5] )
00239 {
00240
return 1;
00241 }
00242
else
00243 {
00244
return 0;
00245 }
00246 }
00247
00248
private:
00249 vtkCellLocator(
const vtkCellLocator&);
00250
void operator=(
const vtkCellLocator&);
00251 };
00252
00253
#endif
00254
00255