VTK  9.7.20260805
vtkStaticPointLocator.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
58
59#ifndef vtkStaticPointLocator_h
60#define vtkStaticPointLocator_h
61
63#include "vtkCommonDataModelModule.h" // For export macro
64#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_7_0
65
66VTK_ABI_NAMESPACE_BEGIN
67class vtkDoubleArray;
68class vtkIdList;
69struct vtkBucketList;
70class vtkDataArray;
72
73class VTKCOMMONDATAMODEL_EXPORT vtkStaticPointLocator : public vtkAbstractPointLocator
74{
75public:
81
83
87 void PrintSelf(ostream& os, vtkIndent indent) override;
89
91
96 vtkSetClampMacro(NumberOfPointsPerBucket, int, 1, VTK_INT_MAX);
97 vtkGetMacro(NumberOfPointsPerBucket, int);
99
101
107 vtkSetVector3Macro(Divisions, int);
108 vtkGetVectorMacro(Divisions, int, 3);
110
111 // Reuse any superclass signatures that we don't override.
116
124 vtkIdType FindClosestPoint(const double x[3]) override;
125
127
136 vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double& dist2) override;
138 double radius, const double x[3], double inputDataLength, double& dist2);
140
150 void FindClosestNPoints(int N, const double x[3], vtkIdList* result) override;
151
171 double FindNPointsInShell(int N, const double x[3], vtkDist2TupleArray& results,
172 double minDist2 = (-0.1), bool sort = true, vtkDoubleArray* petals = nullptr);
173
180 void FindPointsWithinRadius(double R, const double x[3], vtkIdList* result) override;
181
191 int IntersectWithLine(double a0[3], double a1[3], double tol, double& t, double lineX[3],
192 double ptX[3], vtkIdType& ptId);
193
204 void MergePoints(double tol, vtkIdType* mergeMap);
205
217
219
223 void Initialize() override;
224 void FreeSearchStructure() override;
225 void BuildLocator() override;
226 void ForceBuildLocator() override;
227 void BuildLocator(const double* inBounds);
229
235 void GenerateRepresentation(int level, vtkPolyData* pd) override;
236
242
248 void GetBucketIds(vtkIdType bNum, vtkIdList* bList);
249
254 void GetBucketCenter(int i, int j, int k, double center[3]);
255
257
271 vtkSetClampMacro(MaxNumberOfBuckets, vtkIdType, 1000, VTK_ID_MAX);
274
282 bool GetLargeIds() { return this->LargeIds; }
283
285
289 virtual double* GetSpacing() { return this->H; }
290 virtual void GetSpacing(double spacing[3])
291 {
292 spacing[0] = this->H[0];
293 spacing[1] = this->H[1];
294 spacing[2] = this->H[2];
295 }
296
297
314
316
321 vtkSetClampMacro(
323 vtkGetMacro(TraversalOrder, int);
330
332
336 vtkSetMacro(Padding, double);
337 vtkGetMacro(Padding, double);
339
341
347 VTK_DEPRECATED_IN_9_7_0("Use UseExistingSearchStructureOn instead.")
348 void StaticOn() { this->Static = true; }
349 VTK_DEPRECATED_IN_9_7_0("Use UseExistingSearchStructureOff instead.")
350 void StaticOff() { this->Static = false; }
351 VTK_DEPRECATED_IN_9_7_0("Use GetUseExistingSearchStructure instead.")
352 vtkGetMacro(Static, vtkTypeBool);
354
358 vtkBucketList* GetBuckets() { return this->Buckets; }
359
360protected:
363
364 void BuildLocatorInternal() override;
365
366 int NumberOfPointsPerBucket; // Used with AutomaticOn to control subdivide
367 int Divisions[3]; // Number of sub-divisions in x-y-z directions
368 double H[3]; // Width of each bucket in x-y-z directions
369 vtkBucketList* Buckets; // Lists of point ids in each bucket
370 vtkIdType MaxNumberOfBuckets; // Maximum number of buckets in locator
371 bool LargeIds; // Integer point ids are small (32-bit) or large (64-bit)
372 int TraversalOrder; // Control traversal order when threading
373 double Padding; // Pad out the bounding box of the locator
374 vtkTypeBool Static; // Control whether to repeatedly check modified time
375
376private:
378 void operator=(const vtkStaticPointLocator&) = delete;
379};
380
381VTK_ABI_NAMESPACE_END
382#endif
virtual void FindPointsWithinRadius(double R, const double x[3], vtkIdList *result)=0
Find all points within a specified radius R of position x.
virtual vtkIdType FindClosestPoint(const double x[3])=0
Given a position x, return the id of the point closest to it.
virtual double * GetBounds()
Provide an accessor to the bounds.
virtual void FindClosestNPoints(int N, const double x[3], vtkIdList *result)=0
Find the closest N points to a position.
dynamic, self-adjusting array of double
list of point or cell ids
Definition vtkIdList.h:26
a simple class to control print indentation
Definition vtkIndent.h:29
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition vtkPolyData.h:72
void StaticOff()
Turn on/off flag to control whether the locator checks modified time after it is built.
void MergePoints(double tol, vtkIdType *mergeMap)
Merge points in the locator given a tolerance.
vtkIdType GetNumberOfPointsInBucket(vtkIdType bNum)
Given a bucket number bNum between 0 <= bNum < this->GetNumberOfBuckets(), return the number of point...
void Initialize() override
See vtkLocator and vtkAbstractPointLocator interface documentation.
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 SetTraversalOrderToBinOrder()
Specify the manner in which points are processed when a non-zero merge tolerance is specified.
void MergePointsWithData(vtkDataArray *data, vtkIdType *mergeMap)
Merge points and associated data in the locator.
void FindClosestNPoints(int N, const double x[3], vtkIdList *result) override
Find the closest N points to a position.
TraversalOrderType
Point merging is inherently an order-dependent process.
virtual void SetTraversalOrder(int)
Specify the manner in which points are processed when a non-zero merge tolerance is specified.
bool GetLargeIds()
Inform the user as to whether large ids are being used.
~vtkStaticPointLocator() override
void BuildLocatorInternal() override
This function is not pure virtual to maintain backwards compatibility.
int IntersectWithLine(double a0[3], double a1[3], double tol, double &t, double lineX[3], double ptX[3], vtkIdType &ptId)
Intersect the points contained in the locator with the line defined by (a0,a1).
void FreeSearchStructure() override
See vtkLocator and vtkAbstractPointLocator interface documentation.
void SetTraversalOrderToPointOrder()
Specify the manner in which points are processed when a non-zero merge tolerance is specified.
virtual vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double inputDataLength, double &dist2)
Given a position x and a radius r, return the id of the point closest to the point in that radius,...
void ForceBuildLocator() override
See vtkLocator and vtkAbstractPointLocator interface documentation.
void GetBucketIds(vtkIdType bNum, vtkIdList *bList)
Given a bucket number bNum between 0 <= bNum < this->GetNumberOfBuckets(), return a list of point ids...
void GenerateRepresentation(int level, vtkPolyData *pd) override
Populate a polydata with the faces of the bins that potentially contain cells.
void FindPointsWithinRadius(double R, const double x[3], vtkIdList *result) override
Find all points within a specified radius R of position x.
void GetBucketCenter(int i, int j, int k, double center[3])
Given a bucket/bin located at position (i,j,k), compute the center of the bucket.
static vtkStaticPointLocator * New()
Construct with automatic computation of divisions, averaging 5 points per bucket.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard type and print methods.
virtual double * GetSpacing()
Provide an accessor to the bucket spacing.
double FindNPointsInShell(int N, const double x[3], vtkDist2TupleArray &results, double minDist2=(-0.1), bool sort=true, vtkDoubleArray *petals=nullptr)
Find approximately N close points which are strictly greater than >minDist2 away from the query point...
vtkIdType FindClosestPoint(const double x[3]) override
Given a position x, return the id of the point closest to it, or (-1) if no point found.
void StaticOn()
Turn on/off flag to control whether the locator checks modified time after it is built.
void BuildLocator(const double *inBounds)
See vtkLocator and vtkAbstractPointLocator interface documentation.
void BuildLocator() override
See vtkLocator and vtkAbstractPointLocator interface documentation.
virtual void GetSpacing(double spacing[3])
Provide an accessor to the bucket spacing.
vtkBucketList * GetBuckets()
This method is useful for accessing the raw binned data.
Private declarations for 3D binned spatial locator.
Represent an array of vtkDist2Tuples.
int vtkTypeBool
Definition vtkABI.h:64
#define vtkDataArray
#define VTK_DEPRECATED_IN_9_7_0(reason)
int vtkIdType
Definition vtkType.h:363
#define VTK_ID_MAX
Definition vtkType.h:367
#define VTK_INT_MAX
Definition vtkType.h:192