VTK  9.7.20261101
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
86
87#ifndef vtkStaticPointLocator_h
88#define vtkStaticPointLocator_h
89
91#include "vtkCommonDataModelModule.h" // For export macro
92#include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_7_0
93
94VTK_ABI_NAMESPACE_BEGIN
95class vtkDoubleArray;
96class vtkIdList;
97struct vtkBucketList;
98class vtkDataArray;
100
101class VTKCOMMONDATAMODEL_EXPORT vtkStaticPointLocator : public vtkAbstractPointLocator
102{
103public:
109
111
115 void PrintSelf(ostream& os, vtkIndent indent) override;
117
119
124 vtkSetClampMacro(NumberOfPointsPerBucket, int, 1, VTK_INT_MAX);
125 vtkGetMacro(NumberOfPointsPerBucket, int);
127
129
135 vtkSetVector3Macro(Divisions, int);
136 vtkGetVectorMacro(Divisions, int, 3);
138
139 // Reuse any superclass signatures that we don't override.
144
152 vtkIdType FindClosestPoint(const double x[3]) override;
153
155
164 vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double& dist2) override;
166 double radius, const double x[3], double inputDataLength, double& dist2);
168
178 void FindClosestNPoints(int N, const double x[3], vtkIdList* result) override;
179
192 double FindNPointsInShell(int N, const double x[3], vtkDist2TupleArray& results,
193 double minDist2 = (-0.1), bool sort = true, vtkDoubleArray* petals = nullptr) override;
194
202 void FindPointsInShell(const double x[3], vtkDist2TupleArray& results, double minDist2,
203 double maxDist2, bool sort = true, vtkDoubleArray* petals = nullptr) override;
204
211 void FindPointsWithinRadius(double R, const double x[3], vtkIdList* result) override;
212
222 int IntersectWithLine(double a0[3], double a1[3], double tol, double& t, double lineX[3],
223 double ptX[3], vtkIdType& ptId);
224
235 void MergePoints(double tol, vtkIdType* mergeMap);
236
248
250
254 void Initialize() override;
255 void FreeSearchStructure() override;
256 void BuildLocator() override;
257 void ForceBuildLocator() override;
258 void BuildLocator(const double* inBounds);
260
266 void GenerateRepresentation(int level, vtkPolyData* pd) override;
267
273
279 void GetBucketIds(vtkIdType bNum, vtkIdList* bList);
280
285 void GetBucketCenter(int i, int j, int k, double center[3]);
286
288
302 vtkSetClampMacro(MaxNumberOfBuckets, vtkIdType, 1000, VTK_ID_MAX);
305
313 bool GetLargeIds() { return this->LargeIds; }
314
316
320 virtual double* GetSpacing() { return this->H; }
321 virtual void GetSpacing(double spacing[3])
322 {
323 spacing[0] = this->H[0];
324 spacing[1] = this->H[1];
325 spacing[2] = this->H[2];
326 }
327
328
345
347
352 vtkSetClampMacro(
354 vtkGetMacro(TraversalOrder, int);
361
363
367 vtkSetMacro(Padding, double);
368 vtkGetMacro(Padding, double);
370
372
378 VTK_DEPRECATED_IN_9_7_0("Use UseExistingSearchStructureOn instead.")
379 void StaticOn() { this->Static = true; }
380 VTK_DEPRECATED_IN_9_7_0("Use UseExistingSearchStructureOff instead.")
381 void StaticOff() { this->Static = false; }
382 VTK_DEPRECATED_IN_9_7_0("Use GetUseExistingSearchStructure instead.")
383 vtkGetMacro(Static, vtkTypeBool);
385
389 vtkBucketList* GetBuckets() { return this->Buckets; }
390
391protected:
394
395 void BuildLocatorInternal() override;
396
397 int NumberOfPointsPerBucket; // Used with AutomaticOn to control subdivide
398 int Divisions[3]; // Number of sub-divisions in x-y-z directions
399 double H[3]; // Width of each bucket in x-y-z directions
400 vtkBucketList* Buckets; // Lists of point ids in each bucket
401 vtkIdType MaxNumberOfBuckets; // Maximum number of buckets in locator
402 bool LargeIds; // Integer point ids are small (32-bit) or large (64-bit)
403 int TraversalOrder; // Control traversal order when threading
404 double Padding; // Pad out the bounding box of the locator
405 vtkTypeBool Static; // Control whether to repeatedly check modified time
406
407private:
409 void operator=(const vtkStaticPointLocator&) = delete;
410};
411
412VTK_ABI_NAMESPACE_END
413#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:135
a simple class to control print indentation
Definition vtkIndent.h:108
concrete dataset represents vertices, lines, polygons, and triangle strips
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 FindPointsInShell(const double x[3], vtkDist2TupleArray &results, double minDist2, double maxDist2, bool sort=true, vtkDoubleArray *petals=nullptr) override
Find all the points which are strictly greater than minDist2 and at most maxDist2 away from the query...
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.
double FindNPointsInShell(int N, const double x[3], vtkDist2TupleArray &results, double minDist2=(-0.1), bool sort=true, vtkDoubleArray *petals=nullptr) override
Find the N nearest points which are strictly greater than minDist2 away from the query point x,...
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.
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