VTK  9.2.6
vtkIncrementalOctreePointLocator.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkIncrementalOctreePointLocator.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=========================================================================*/
50
51#ifndef vtkIncrementalOctreePointLocator_h
52#define vtkIncrementalOctreePointLocator_h
53
54#include "vtkCommonDataModelModule.h" // For export macro
56
57class vtkPoints;
58class vtkIdList;
59class vtkIntArray;
60class vtkPolyData;
61class vtkCellArray;
63
64class VTKCOMMONDATAMODEL_EXPORT vtkIncrementalOctreePointLocator : public vtkIncrementalPointLocator
65{
66public:
68 void PrintSelf(ostream& os, vtkIndent indent) override;
69
71
73
83 vtkSetMacro(MaxPointsPerLeaf, int);
84 vtkGetMacro(MaxPointsPerLeaf, int);
86
88
91 vtkSetMacro(BuildCubicOctree, vtkTypeBool);
92 vtkGetMacro(BuildCubicOctree, vtkTypeBool);
93 vtkBooleanMacro(BuildCubicOctree, vtkTypeBool);
95
97
101 vtkGetObjectMacro(LocatorPoints, vtkPoints);
103
107 void Initialize() override { this->FreeSearchStructure(); }
108
112 void FreeSearchStructure() override;
113
117 void GetBounds(double* bounds) override;
118
122 double* GetBounds() override
123 {
124 this->GetBounds(this->Bounds);
125 return this->Bounds;
126 }
127
135 vtkGetMacro(NumberOfNodes, int);
136
144 vtkIdType FindClosestInsertedPoint(const double x[3]) override;
145
147
159 void GenerateRepresentation(int level, vtkPolyData* polysData) override;
160 void GenerateRepresentation(int level, vtkPolyData* polysData,
161 bool (*UserGetBounds)(void* data, vtkIncrementalOctreeNode* node, double* bounds), void* data);
163
164 // -------------------------------------------------------------------------
165 // ---------------------------- Point Location ----------------------------
166 // -------------------------------------------------------------------------
167
173 void BuildLocator() override;
174
178 void ForceBuildLocator() override;
179
185 vtkIdType FindClosestPoint(const double x[3]) override;
186
193 virtual vtkIdType FindClosestPoint(double x, double y, double z);
194
201 virtual vtkIdType FindClosestPoint(const double x[3], double* miniDist2);
202
209 virtual vtkIdType FindClosestPoint(double x, double y, double z, double* miniDist2);
210
219 vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double& dist2) override;
220
229 vtkIdType FindClosestPointWithinSquaredRadius(double radius2, const double x[3], double& dist2);
230
237 void FindPointsWithinRadius(double R, const double x[3], vtkIdList* result) override;
238
245 void FindPointsWithinSquaredRadius(double R2, const double x[3], vtkIdList* result);
246
253 void FindClosestNPoints(int N, const double x[3], vtkIdList* result) override;
254
255 // -------------------------------------------------------------------------
256 // ---------------------------- Point Insertion ----------------------------
257 // -------------------------------------------------------------------------
258
268 int InitPointInsertion(vtkPoints* points, const double bounds[6]) override;
269
280 int InitPointInsertion(vtkPoints* points, const double bounds[6], vtkIdType estSize) override;
281
287 vtkIdType IsInsertedPoint(const double x[3]) override;
288
294 vtkIdType IsInsertedPoint(double x, double y, double z) override;
295
304 int InsertUniquePoint(const double point[3], vtkIdType& pntId) override;
305
314 void InsertPoint(vtkIdType ptId, const double x[3]) override;
315
324 vtkIdType InsertNextPoint(const double x[3]) override;
325
334
335 void InsertPointWithoutChecking(const double point[3], vtkIdType& pntId, int insert);
336
337 vtkIncrementalOctreeNode* GetRoot() const { return OctreeRootNode; }
338
344
345protected:
348
349private:
350 vtkTypeBool BuildCubicOctree;
351 int MaxPointsPerLeaf;
352 double InsertTolerance2;
353 double OctreeMaxDimSize;
354 double FudgeFactor;
355 vtkPoints* LocatorPoints;
356 vtkIncrementalOctreeNode* OctreeRootNode;
357 int NumberOfNodes;
358
359 void BuildLocatorInternal() override;
360
364 static void DeleteAllDescendants(vtkIncrementalOctreeNode* node);
365
370 static void AddPolys(vtkIncrementalOctreeNode* node, vtkPoints* points, vtkCellArray* polygs,
371 vtkIntArray* nodeIndexes, vtkIdType& cellIndex,
372 bool (*GetBounds)(void* data, vtkIncrementalOctreeNode* node, double* bounds), void* data);
373
378 vtkIncrementalOctreeNode* GetLeafContainer(vtkIncrementalOctreeNode* node, const double pnt[3]);
379
387 vtkIdType FindClosestPointInLeafNode(
388 vtkIncrementalOctreeNode* leafNode, const double point[3], double* dist2);
389
402 vtkIdType FindClosestPointInSphere(const double point[3], double radius2,
403 vtkIncrementalOctreeNode* maskNode, double* minDist2, const double* refDist2);
404
405 // -------------------------------------------------------------------------
406 // ---------------------------- Point Location ----------------------------
407 // -------------------------------------------------------------------------
408
419 vtkIdType FindClosestPointInSphereWithoutTolerance(
420 const double point[3], double radius2, vtkIncrementalOctreeNode* maskNode, double* minDist2);
421
428 vtkIncrementalOctreeNode* node, double radius2, const double point[3], vtkIdList* idList);
429
430 // -------------------------------------------------------------------------
431 // ---------------------------- Point Insertion ----------------------------
432 // -------------------------------------------------------------------------
433
445 vtkIdType FindClosestPointInSphereWithTolerance(
446 const double point[3], double radius2, vtkIncrementalOctreeNode* maskNode, double* minDist2);
447
457 vtkIdType IsInsertedPoint(const double x[3], vtkIncrementalOctreeNode** leafContainer);
458
467 vtkIdType IsInsertedPointForZeroTolerance(
468 const double x[3], vtkIncrementalOctreeNode** leafContainer);
469
479 vtkIdType IsInsertedPointForNonZeroTolerance(
480 const double x[3], vtkIncrementalOctreeNode** leafContainer);
481
489 vtkIdType FindDuplicatePointInLeafNode(vtkIncrementalOctreeNode* leafNode, const double point[3]);
490
498 vtkIdType FindDuplicateFloatTypePointInVisitedLeafNode(
499 vtkIncrementalOctreeNode* leafNode, const double point[3]);
500
508 vtkIdType FindDuplicateDoubleTypePointInVisitedLeafNode(
509 vtkIncrementalOctreeNode* leafNode, const double point[3]);
510
512 void operator=(const vtkIncrementalOctreePointLocator&) = delete;
513};
514#endif
virtual double * GetBounds()
Provide an accessor to the bounds.
object to represent cell connectivity
list of point or cell ids
Definition vtkIdList.h:34
Octree node constituting incremental octree (in support of both point location and point insertion)
void GenerateRepresentation(int level, vtkPolyData *polysData, bool(*UserGetBounds)(void *data, vtkIncrementalOctreeNode *node, double *bounds), void *data)
vtkIdType IsInsertedPoint(const double x[3]) override
Determine whether or not a given point has been inserted into the octree.
vtkIncrementalOctreeNode * GetRoot() const
vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double &dist2) override
Given a point x and a radius, return the id of the closest point within the radius and the associated...
virtual vtkIdType FindClosestPoint(const double x[3], double *miniDist2)
Given a point x, return the id of the closest point and the associated minimum squared distance (via ...
int InitPointInsertion(vtkPoints *points, const double bounds[6]) override
Initialize the point insertion process.
void InsertPoint(vtkIdType ptId, const double x[3]) override
Insert a given point into the octree with a specified point index ptId.
void FindClosestNPoints(int N, const double x[3], vtkIdList *result) override
Find the closest N points to a given point.
void FindPointsWithinSquaredRadius(double R2, const double x[3], vtkIdList *result)
Find all points within a squared radius R2 relative to a given point x.
int InsertUniquePoint(const double point[3], vtkIdType &pntId) override
Insert a point to the octree unless there has been a duplicate point.
void Initialize() override
Delete the octree search structure.
void GetBounds(double *bounds) override
Get the spatial bounding box of the octree.
void FindPointsWithinRadius(double R, const double x[3], vtkIdList *result) override
Find all points within a radius R relative to a given point x.
void InsertPointWithoutChecking(const double point[3], vtkIdType &pntId, int insert)
"Insert" a point to the octree without any checking.
double * GetBounds() override
Get the spatial bounding box of the octree.
vtkIdType FindClosestPointWithinSquaredRadius(double radius2, const double x[3], double &dist2)
Given a point x and a squared radius radius2, return the id of the closest point within the radius an...
virtual vtkIdType FindClosestPoint(double x, double y, double z)
Given a point (x, y, z), return the id of the closest point.
vtkIdType InsertNextPoint(const double x[3]) override
Insert a given point into the octree and return the point index.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard type and print methods.
void ForceBuildLocator() override
Build the locator from the input dataset (even if UseExistingSearchStructure is on).
int GetNumberOfPoints()
Get the number of points maintained by the octree.
vtkIdType FindClosestPoint(const double x[3]) override
Given a point x, return the id of the closest point.
void GenerateRepresentation(int level, vtkPolyData *polysData) override
Create a polygonal representation of the octree 'level': for each node on the specified level we gene...
vtkIdType IsInsertedPoint(double x, double y, double z) override
Determine whether or not a given point has been inserted into the octree.
void FreeSearchStructure() override
Delete the octree search structure.
virtual vtkIdType FindClosestPoint(double x, double y, double z, double *miniDist2)
Given a point (x, y, z), return the id of the closest point and the associated minimum squared distan...
int GetNumberOfLevels()
Returns the maximum level of the tree.
vtkIdType FindClosestInsertedPoint(const double x[3]) override
Given a point x assumed to be covered by the octree, return the index of the closest in-octree point ...
static vtkIncrementalOctreePointLocator * New()
int InitPointInsertion(vtkPoints *points, const double bounds[6], vtkIdType estSize) override
Initialize the point insertion process.
void BuildLocator() override
Load points from a dataset to construct an octree for point location.
virtual vtkIdType IsInsertedPoint(double x, double y, double z)=0
Determine whether or not a given point has been inserted.
a simple class to control print indentation
Definition vtkIndent.h:40
dynamic, self-adjusting array of int
Definition vtkIntArray.h:46
virtual void BuildLocatorInternal()
This function is not pure virtual to maintain backwards compatibility.
Definition vtkLocator.h:203
virtual void FreeSearchStructure()=0
Free the memory required for the spatial data structure.
represent and manipulate 3D points
Definition vtkPoints.h:40
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:91
int vtkTypeBool
Definition vtkABI.h:69
int vtkIdType
Definition vtkType.h:332