VTK  9.2.20230201
vtkStaticPointLocator.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkStaticPointLocator.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 =========================================================================*/
89 #ifndef vtkStaticPointLocator_h
90 #define vtkStaticPointLocator_h
91 
93 #include "vtkCommonDataModelModule.h" // For export macro
94 
95 VTK_ABI_NAMESPACE_BEGIN
96 class vtkIdList;
97 struct vtkBucketList;
98 class vtkDataArray;
99 
100 class VTKCOMMONDATAMODEL_EXPORT vtkStaticPointLocator : public vtkAbstractPointLocator
101 {
102 public:
108 
110 
114  void PrintSelf(ostream& os, vtkIndent indent) override;
116 
118 
123  vtkSetClampMacro(NumberOfPointsPerBucket, int, 1, VTK_INT_MAX);
124  vtkGetMacro(NumberOfPointsPerBucket, int);
126 
128 
134  vtkSetVector3Macro(Divisions, int);
135  vtkGetVectorMacro(Divisions, int, 3);
137 
138  // Re-use any superclass signatures that we don't override.
143 
151  vtkIdType FindClosestPoint(const double x[3]) override;
152 
154 
163  vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double& dist2) override;
165  double radius, const double x[3], double inputDataLength, double& dist2);
167 
176  void FindClosestNPoints(int N, const double x[3], vtkIdList* result) override;
177 
184  void FindPointsWithinRadius(double R, const double x[3], vtkIdList* result) override;
185 
195  int IntersectWithLine(double a0[3], double a1[3], double tol, double& t, double lineX[3],
196  double ptX[3], vtkIdType& ptId);
197 
208  void MergePoints(double tol, vtkIdType* mergeMap);
209 
221 
223 
227  void Initialize() override;
228  void FreeSearchStructure() override;
229  void BuildLocator() override;
230  void ForceBuildLocator() override;
231  void BuildLocator(const double* inBounds);
233 
239  void GenerateRepresentation(int level, vtkPolyData* pd) override;
240 
246 
252  void GetBucketIds(vtkIdType bNum, vtkIdList* bList);
253 
255 
269  vtkSetClampMacro(MaxNumberOfBuckets, vtkIdType, 1000, VTK_ID_MAX);
270  vtkGetMacro(MaxNumberOfBuckets, vtkIdType);
272 
280  bool GetLargeIds() { return this->LargeIds; }
281 
283 
287  virtual double* GetSpacing() { return this->H; }
288  virtual void GetSpacing(double spacing[3])
289  {
290  spacing[0] = this->H[0];
291  spacing[1] = this->H[1];
292  spacing[2] = this->H[2];
293  }
295 
308  {
309  POINT_ORDER = 0,
310  BIN_ORDER = 1
311  };
312 
314 
319  vtkSetClampMacro(
321  vtkGetMacro(TraversalOrder, int);
323  {
324  this->SetTraversalOrder(vtkStaticPointLocator::POINT_ORDER);
325  }
328 
329 protected:
332 
333  void BuildLocatorInternal() override;
334 
335  int NumberOfPointsPerBucket; // Used with AutomaticOn to control subdivide
336  int Divisions[3]; // Number of sub-divisions in x-y-z directions
337  double H[3]; // Width of each bucket in x-y-z directions
338  vtkBucketList* Buckets; // Lists of point ids in each bucket
339  vtkIdType MaxNumberOfBuckets; // Maximum number of buckets in locator
340  bool LargeIds; // indicate whether integer ids are small or large
341  int TraversalOrder; // Control traversal order when threading
342 
343 private:
345  void operator=(const vtkStaticPointLocator&) = delete;
346 };
347 
348 VTK_ABI_NAMESPACE_END
349 #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:166
list of point or cell ids
Definition: vtkIdList.h:144
a simple class to control print indentation
Definition: vtkIndent.h:120
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:201
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:407
@ spacing
Definition: vtkX3D.h:493
@ radius
Definition: vtkX3D.h:264
@ data
Definition: vtkX3D.h:327
int vtkIdType
Definition: vtkType.h:327
#define VTK_ID_MAX
Definition: vtkType.h:331
#define VTK_INT_MAX
Definition: vtkType.h:156