VTK  9.4.20241217
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
77#ifndef vtkStaticPointLocator_h
78#define vtkStaticPointLocator_h
79
81#include "vtkCommonDataModelModule.h" // For export macro
82
83VTK_ABI_NAMESPACE_BEGIN
84class vtkIdList;
85struct vtkBucketList;
86class vtkDataArray;
87
88class VTKCOMMONDATAMODEL_EXPORT vtkStaticPointLocator : public vtkAbstractPointLocator
89{
90public:
96
98
102 void PrintSelf(ostream& os, vtkIndent indent) override;
104
106
111 vtkSetClampMacro(NumberOfPointsPerBucket, int, 1, VTK_INT_MAX);
112 vtkGetMacro(NumberOfPointsPerBucket, int);
114
116
122 vtkSetVector3Macro(Divisions, int);
123 vtkGetVectorMacro(Divisions, int, 3);
125
126 // Re-use any superclass signatures that we don't override.
131
139 vtkIdType FindClosestPoint(const double x[3]) override;
140
142
151 vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double& dist2) override;
153 double radius, const double x[3], double inputDataLength, double& dist2);
155
164 void FindClosestNPoints(int N, const double x[3], vtkIdList* result) override;
165
172 void FindPointsWithinRadius(double R, const double x[3], vtkIdList* result) override;
173
183 int IntersectWithLine(double a0[3], double a1[3], double tol, double& t, double lineX[3],
184 double ptX[3], vtkIdType& ptId);
185
196 void MergePoints(double tol, vtkIdType* mergeMap);
197
209
211
215 void Initialize() override;
216 void FreeSearchStructure() override;
217 void BuildLocator() override;
218 void ForceBuildLocator() override;
219 void BuildLocator(const double* inBounds);
221
227 void GenerateRepresentation(int level, vtkPolyData* pd) override;
228
234
240 void GetBucketIds(vtkIdType bNum, vtkIdList* bList);
241
243
257 vtkSetClampMacro(MaxNumberOfBuckets, vtkIdType, 1000, VTK_ID_MAX);
258 vtkGetMacro(MaxNumberOfBuckets, vtkIdType);
260
268 bool GetLargeIds() { return this->LargeIds; }
269
271
275 virtual double* GetSpacing() { return this->H; }
276 virtual void GetSpacing(double spacing[3])
277 {
278 spacing[0] = this->H[0];
279 spacing[1] = this->H[1];
280 spacing[2] = this->H[2];
281 }
283
296 {
297 POINT_ORDER = 0,
298 BIN_ORDER = 1
299 };
300
302
307 vtkSetClampMacro(
309 vtkGetMacro(TraversalOrder, int);
311 {
312 this->SetTraversalOrder(vtkStaticPointLocator::POINT_ORDER);
313 }
316
317protected:
320
321 void BuildLocatorInternal() override;
322
323 int NumberOfPointsPerBucket; // Used with AutomaticOn to control subdivide
324 int Divisions[3]; // Number of sub-divisions in x-y-z directions
325 double H[3]; // Width of each bucket in x-y-z directions
326 vtkBucketList* Buckets; // Lists of point ids in each bucket
327 vtkIdType MaxNumberOfBuckets; // Maximum number of buckets in locator
328 bool LargeIds; // indicate whether integer ids are small or large
329 int TraversalOrder; // Control traversal order when threading
330
331private:
333 void operator=(const vtkStaticPointLocator&) = delete;
334};
335
336VTK_ABI_NAMESPACE_END
337#endif
abstract class to quickly locate points in 3-space
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.
abstract superclass for arrays of numeric data
list of point or cell ids
Definition vtkIdList.h:133
a simple class to control print indentation
Definition vtkIndent.h:108
concrete dataset represents vertices, lines, polygons, and triangle strips
quickly locate points in 3-space
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.
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.
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 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.
int vtkIdType
Definition vtkType.h:315
#define VTK_ID_MAX
Definition vtkType.h:319
#define VTK_INT_MAX
Definition vtkType.h:144