VTK  9.1.0
vtkOctreePointLocator.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkOctreePointLocator.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 /*----------------------------------------------------------------------------
16  Copyright (c) Sandia Corporation
17  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
18 ----------------------------------------------------------------------------*/
19 
126 #ifndef vtkOctreePointLocator_h
127 #define vtkOctreePointLocator_h
128 
129 #include "vtkAbstractPointLocator.h"
130 #include "vtkCommonDataModelModule.h" // For export macro
131 
132 class vtkCellArray;
133 class vtkIdTypeArray;
135 class vtkPoints;
136 class vtkPolyData;
137 
138 class VTKCOMMONDATAMODEL_EXPORT vtkOctreePointLocator : public vtkAbstractPointLocator
139 {
140 public:
142  void PrintSelf(ostream& os, vtkIndent indent) override;
143 
145 
147 
150  vtkSetMacro(MaximumPointsPerRegion, int);
151  vtkGetMacro(MaximumPointsPerRegion, int);
153 
155 
158  vtkSetMacro(CreateCubicOctants, int);
159  vtkGetMacro(CreateCubicOctants, int);
161 
163 
169  vtkGetMacro(FudgeFactor, double);
170  vtkSetMacro(FudgeFactor, double);
172 
174 
178  double* GetBounds() override;
179  void GetBounds(double* bounds) override;
181 
183 
186  vtkGetMacro(NumberOfLeafNodes, int);
188 
192  void GetRegionBounds(int regionID, double bounds[6]);
193 
197  void GetRegionDataBounds(int leafNodeID, double bounds[6]);
198 
202  int GetRegionContainingPoint(double x, double y, double z);
203 
209  void BuildLocator() override;
210 
212 
216  vtkIdType FindClosestPoint(const double x[3]) override;
217  vtkIdType FindClosestPoint(double x, double y, double z, double& dist2);
219 
225  vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double& dist2) override;
226 
228 
233  vtkIdType FindClosestPointInRegion(int regionId, double* x, double& dist2);
234  vtkIdType FindClosestPointInRegion(int regionId, double x, double y, double z, double& dist2);
236 
241  void FindPointsWithinRadius(double radius, const double x[3], vtkIdList* result) override;
242 
251  void FindClosestNPoints(int N, const double x[3], vtkIdList* result) override;
252 
257 
261  void FreeSearchStructure() override;
262 
267  void GenerateRepresentation(int level, vtkPolyData* pd) override;
268 
275  void FindPointsInArea(double* area, vtkIdTypeArray* ids, bool clearArray = true);
276 
277 protected:
280 
282  vtkOctreePointLocatorNode** LeafNodeList; // indexed by region/node ID
283 
285 
287 
291  int FindRegion(vtkOctreePointLocatorNode* node, float x, float y, float z);
292  int FindRegion(vtkOctreePointLocatorNode* node, double x, double y, double z);
294 
296 
298 
305  vtkOctreePointLocatorNode* node, double radiusSquared, const double x[3], vtkIdList* ids);
306 
307  // Recursive helper for public FindPointsWithinRadius
309 
310  // Recursive helper for public FindPointsInArea
312 
313  // Recursive helper for public FindPointsInArea
315 
316  void DivideRegion(vtkOctreePointLocatorNode* node, int* ordering, int level);
317 
318  int DivideTest(int size, int level);
319 
321 
326  int _FindClosestPointInRegion(int leafNodeId, double x, double y, double z, double& dist2);
327 
336  double x, double y, double z, double radius, int skipRegion, double& dist2);
337 
339 
345 
346  double FudgeFactor; // a very small distance, relative to the dataset's size
350 
351  float MaxWidth;
352 
361 
363  void operator=(const vtkOctreePointLocator&) = delete;
364 };
365 #endif
abstract class to quickly locate points in 3-space
object to represent cell connectivity
Definition: vtkCellArray.h:290
list of point or cell ids
Definition: vtkIdList.h:140
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition: vtkIndent.h:113
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 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
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...
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)
vtkIdType FindClosestPoint(double x, double y, double z, double &dist2)
Return the Id of the point that is closest to the given point.
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:143
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
@ level
Definition: vtkX3D.h:401
@ radius
Definition: vtkX3D.h:258
@ size
Definition: vtkX3D.h:259
@ index
Definition: vtkX3D.h:252
int vtkIdType
Definition: vtkType.h:332
#define VTK_NEWINSTANCE