VTK  9.3.0
vtkOctreePointLocator.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-FileCopyrightText: Copyright (c) Sandia Corporation
3 // SPDX-License-Identifier: BSD-3-Clause
4 
34 #ifndef vtkOctreePointLocator_h
35 #define vtkOctreePointLocator_h
36 
38 #include "vtkCommonDataModelModule.h" // For export macro
39 
40 VTK_ABI_NAMESPACE_BEGIN
41 class vtkCellArray;
42 class vtkIdTypeArray;
44 class vtkPoints;
45 class vtkPolyData;
46 
47 class VTKCOMMONDATAMODEL_EXPORT vtkOctreePointLocator : public vtkAbstractPointLocator
48 {
49 public:
51  void PrintSelf(ostream& os, vtkIndent indent) override;
52 
54 
56 
59  vtkSetMacro(MaximumPointsPerRegion, int);
60  vtkGetMacro(MaximumPointsPerRegion, int);
62 
64 
67  vtkSetMacro(CreateCubicOctants, int);
68  vtkGetMacro(CreateCubicOctants, int);
70 
72 
78  vtkGetMacro(FudgeFactor, double);
79  vtkSetMacro(FudgeFactor, double);
81 
83 
87  double* GetBounds() override;
88  void GetBounds(double* bounds) override;
90 
92 
95  vtkGetMacro(NumberOfLeafNodes, int);
97 
101  void GetRegionBounds(int regionID, double bounds[6]);
102 
106  void GetRegionDataBounds(int leafNodeID, double bounds[6]);
107 
111  int GetRegionContainingPoint(double x, double y, double z);
112 
120  void BuildLocator() override;
121 
125  void ForceBuildLocator() override;
126 
128 
132  vtkIdType FindClosestPoint(const double x[3]) override;
133  vtkIdType FindClosestPoint(double x, double y, double z, double& dist2);
135 
141  vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double& dist2) override;
142 
144 
149  vtkIdType FindClosestPointInRegion(int regionId, double* x, double& dist2);
150  vtkIdType FindClosestPointInRegion(int regionId, double x, double y, double z, double& dist2);
152 
157  void FindPointsWithinRadius(double radius, const double x[3], vtkIdList* result) override;
158 
167  void FindClosestNPoints(int N, const double x[3], vtkIdList* result) override;
168 
173 
177  void FreeSearchStructure() override;
178 
183  void GenerateRepresentation(int level, vtkPolyData* pd) override;
184 
191  void FindPointsInArea(double* area, vtkIdTypeArray* ids, bool clearArray = true);
192 
193 protected:
196 
197  void BuildLocatorInternal() override;
198 
200  vtkOctreePointLocatorNode** LeafNodeList; // indexed by region/node ID
201 
203 
205 
209  int FindRegion(vtkOctreePointLocatorNode* node, float x, float y, float z);
210  int FindRegion(vtkOctreePointLocatorNode* node, double x, double y, double z);
212 
214 
216 
223  vtkOctreePointLocatorNode* node, double radiusSquared, const double x[3], vtkIdList* ids);
224 
225  // Recursive helper for public FindPointsWithinRadius
227 
228  // Recursive helper for public FindPointsInArea
230 
231  // Recursive helper for public FindPointsInArea
233 
234  void DivideRegion(vtkOctreePointLocatorNode* node, int* ordering, int level);
235 
236  int DivideTest(int size, int level);
237 
239 
244  int FindClosestPointInRegion_(int leafNodeId, double x, double y, double z, double& dist2);
245 
254  double x, double y, double z, double radius, int skipRegion, double& dist2);
255 
257 
263 
264  double FudgeFactor; // a very small distance, relative to the dataset's size
268 
269  float MaxWidth;
270 
279 
281  void operator=(const vtkOctreePointLocator&) = delete;
282 };
283 VTK_ABI_NAMESPACE_END
284 #endif
abstract class to quickly locate points in 3-space
object to represent cell connectivity
Definition: vtkCellArray.h:185
list of point or cell ids
Definition: vtkIdList.h:32
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition: vtkIndent.h:38
Octree node that has 8 children each of equal size.
an octree spatial decomposition of a set of points
void AddPolys(vtkOctreePointLocatorNode *node, vtkPoints *pts, vtkCellArray *polys)
void FindPointsWithinRadius(double radius, const double x[3], vtkIdList *result) override
Find all points within a specified radius of position x.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard type and print methods.
int FindClosestPointInSphere(double x, double y, double z, double radius, int skipRegion, double &dist2)
Given a location and a radiues, find the closest point within this radius.
vtkIdTypeArray * GetPointsInRegion(int leafNodeId)
Get a list of the original IDs of all points in a leaf node.
vtkIdType FindClosestPointInRegion(int regionId, double *x, double &dist2)
Find the Id of the point in the given leaf region which is closest to the given point.
void ForceBuildLocator() override
Build the locator from the input dataset (even if UseExistingSearchStructure is on).
void FindClosestNPoints(int N, const double x[3], vtkIdList *result) override
Find the closest N points to a position.
void FindPointsInArea(vtkOctreePointLocatorNode *node, double *area, vtkIdTypeArray *ids)
void AddAllPointsInRegion(vtkOctreePointLocatorNode *node, vtkIdTypeArray *ids)
static vtkOctreePointLocator * New()
vtkOctreePointLocator(const vtkOctreePointLocator &)=delete
static void DeleteAllDescendants(vtkOctreePointLocatorNode *octant)
int DivideTest(int size, int level)
int NumberOfLeafNodes
The maximum number of points in a region/octant before it is subdivided.
vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double &dist2) override
Given a position x and a radius r, return the id of the point closest to the point in that radius.
void FindPointsInArea(double *area, vtkIdTypeArray *ids, bool clearArray=true)
Fill ids with points found in area.
double * GetBounds() override
Get the spatial bounds of the entire octree space.
void BuildLeafNodeList(vtkOctreePointLocatorNode *node, int &index)
void AddAllPointsInRegion(vtkOctreePointLocatorNode *node, vtkIdList *ids)
vtkIdType FindClosestPointInRegion(int regionId, double x, double y, double z, double &dist2)
Find the Id of the point in the given leaf region which is closest to the given point.
int FindRegion(vtkOctreePointLocatorNode *node, double x, double y, double z)
Given a point and a node return the leaf node id that contains the point.
void GetRegionDataBounds(int leafNodeID, double bounds[6])
Get the bounds of the data within the leaf node.
int FindRegion(vtkOctreePointLocatorNode *node, float x, float y, float z)
Given a point and a node return the leaf node id that contains the point.
static void SetDataBoundsToSpatialBounds(vtkOctreePointLocatorNode *node)
void BuildLocatorInternal() override
This function is not pure virtual to maintain backwards compatibility.
vtkIdType FindClosestPoint(double x, double y, double z, double &dist2)
Return the Id of the point that is closest to the given point.
int FindClosestPointInRegion_(int leafNodeId, double x, double y, double z, double &dist2)
Given a leaf node id and point, return the local id and the squared distance between the closest poin...
vtkOctreePointLocatorNode * Top
~vtkOctreePointLocator() override
vtkIdType FindClosestPoint(const double x[3]) override
Return the Id of the point that is closest to the given point.
void GenerateRepresentation(int level, vtkPolyData *pd) override
Create a polydata representation of the boundaries of the octree regions.
int GetRegionContainingPoint(double x, double y, double z)
Get the id of the leaf region containing the specified location.
int MaximumPointsPerRegion
The maximum number of points in a region/octant before it is subdivided.
void DivideRegion(vtkOctreePointLocatorNode *node, int *ordering, int level)
int CreateCubicOctants
If CreateCubicOctants is non-zero, the bounding box of the points will be expanded such that all octa...
vtkOctreePointLocatorNode ** LeafNodeList
void GetRegionBounds(int regionID, double bounds[6])
Get the spatial bounds of octree region.
void BuildLocator() override
Create the octree decomposition of the cells of the data set or data sets.
void operator=(const vtkOctreePointLocator &)=delete
void GetBounds(double *bounds) override
Get the spatial bounds of the entire octree space.
void FreeSearchStructure() override
Delete the octree data structure.
void FindPointsWithinRadius(vtkOctreePointLocatorNode *node, double radiusSquared, const double x[3], vtkIdList *ids)
Recursive helper for public FindPointsWithinRadius.
represent and manipulate 3D points
Definition: vtkPoints.h:38
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:89
@ level
Definition: vtkX3D.h:395
@ radius
Definition: vtkX3D.h:252
@ size
Definition: vtkX3D.h:253
@ index
Definition: vtkX3D.h:246
int vtkIdType
Definition: vtkType.h:315
#define VTK_NEWINSTANCE