38 #ifndef vtkCellLocator_h
39 #define vtkCellLocator_h
41 #include "vtkCommonDataModelModule.h"
44 class vtkNeighborCells;
78 double& t,
double x[3],
double pcoords[3],
94 double x[3],
double closestPoint[3],
96 int &subId,
double& dist2) VTK_OVERRIDE;
116 double x[3],
double radius,
double closestPoint[3],
118 int &subId,
double& dist2,
int &inside) VTK_OVERRIDE;
129 virtual int GetNumberOfBuckets(
void);
138 double pcoords[3],
double *weights) VTK_OVERRIDE;
155 double tolerance,
vtkIdList *cells) VTK_OVERRIDE;
162 void BuildLocator() VTK_OVERRIDE;
163 virtual
void BuildLocatorIfNeeded();
164 virtual
void ForceBuildLocator();
165 virtual
void BuildLocatorInternal();
171 ~vtkCellLocator() VTK_OVERRIDE;
173 void GetBucketNeighbors(
int ijk[3],
int ndivs,
int level);
174 void GetOverlappingBuckets(
double x[3],
int ijk[3],
double dist,
175 int prevMinLevel[3],
int prevMaxLevel[3]);
177 void ClearCellHasBeenVisited();
178 void ClearCellHasBeenVisited(
int id);
180 double Distance2ToBucket(
double x[3],
int nei[3]);
181 double Distance2ToBounds(
double x[3],
double bounds[6]);
187 int NumberOfDivisions;
190 void MarkParents(
void*,
int,
int,
int,
int,
int);
191 void GetChildren(
int idx,
int level,
int children[8]);
192 int GenerateIndex(
int offset,
int numDivs,
int i,
int j,
int k,
194 void GenerateFace(
int face,
int numDivs,
int i,
int j,
int k,
197 vtkNeighborCells *Buckets;
198 unsigned char *CellHasBeenVisited;
199 unsigned char QueryNumber;
201 void ComputeOctantBounds(
int i,
int j,
int k);
202 double OctantBounds[6];
203 int IsInOctantBounds(
double x[3],
double tol = 0.0)
205 if ( this->OctantBounds[0]-tol <= x[0] && x[0] <= this->OctantBounds[1]+tol &&
206 this->OctantBounds[2]-tol <= x[1] && x[1] <= this->OctantBounds[3]+tol &&
207 this->OctantBounds[4]-tol <= x[2] && x[2] <= this->OctantBounds[5]+tol )
virtual vtkIdType FindClosestPointWithinRadius(double x[3], double radius, double closestPoint[3], vtkIdType &cellId, int &subId, double &dist2)
Return the closest point within a specified radius and the cell which is closest to the point x...
virtual void FindClosestPoint(double x[3], double closestPoint[3], vtkIdType &cellId, int &subId, double &dist2)
Return the closest point and the cell which is closest to the point x.
virtual void FindCellsAlongLine(double p1[3], double p2[3], double tolerance, vtkIdList *cells)
Given a finite line defined by the two points (p1,p2), return the list of unique cell ids in the buck...
virtual void FindCellsWithinBounds(double *bbox, vtkIdList *cells)
Return a list of unique cell ids inside of a given bounding box.
virtual void SetNumberOfCellsPerNode(int)
Specify the preferred/maximum number of cells in each node/bucket.
an abstract base class for locators which find cells
int GetNumberOfCellsPerBucket()
void SetNumberOfCellsPerBucket(int N)
Specify the average number of cells in each octant.
concrete dataset represents vertices, lines, polygons, and triangle strips
virtual void FreeSearchStructure()=0
Free the memory required for the spatial data structure.
provides thread-safe access to cells
octree-based spatial search object to quickly locate cells
a simple class to control print indentation
virtual vtkIdType FindCell(double x[3])
Returns the Id of the cell containing the point, returns -1 if no cell found.
list of point or cell ids
virtual int IntersectWithLine(double p1[3], double p2[3], double tol, double &t, double x[3], double pcoords[3], int &subId)
Return intersection point (if any) of finite line with cells contained in cell locator.
object to represent cell connectivity
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
represent and manipulate 3D points