VTK  9.3.20240328
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 
83 VTK_ABI_NAMESPACE_BEGIN
84 class vtkIdList;
85 struct vtkBucketList;
86 class vtkDataArray;
87 
88 class VTKCOMMONDATAMODEL_EXPORT vtkStaticPointLocator : public vtkAbstractPointLocator
89 {
90 public:
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 
317 protected:
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 
331 private:
333  void operator=(const vtkStaticPointLocator&) = delete;
334 };
335 
336 VTK_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
Definition: vtkDataArray.h:154
list of point or cell ids
Definition: vtkIdList.h:132
a simple class to control print indentation
Definition: vtkIndent.h:108
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:180
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.
static vtkStaticPointLocator * New()
Construct with automatic computation of divisions, averaging 5 points per bucket.
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.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard type and print methods.
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.
virtual double * GetSpacing()
Provide an accessor to the bucket spacing.
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.
@ level
Definition: vtkX3D.h:395
@ spacing
Definition: vtkX3D.h:481
@ radius
Definition: vtkX3D.h:252
@ data
Definition: vtkX3D.h:315
int vtkIdType
Definition: vtkType.h:315
#define VTK_ID_MAX
Definition: vtkType.h:319
#define VTK_INT_MAX
Definition: vtkType.h:144