VTK  9.7.1
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
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 
66 VTK_ABI_NAMESPACE_BEGIN
67 class vtkDoubleArray;
68 class vtkIdList;
69 struct vtkBucketList;
70 class vtkDataArray;
71 struct vtkDist2TupleArray;
72 
73 class VTKCOMMONDATAMODEL_EXPORT vtkStaticPointLocator : public vtkAbstractPointLocator
74 {
75 public:
80  static vtkStaticPointLocator* New();
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 
216  void MergePointsWithData(vtkDataArray* data, vtkIdType* mergeMap);
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 
241  vtkIdType GetNumberOfPointsInBucket(vtkIdType bNum);
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);
272  vtkGetMacro(MaxNumberOfBuckets, vtkIdType);
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  }
297 
310  {
311  POINT_ORDER = 0,
312  BIN_ORDER = 1
313  };
314 
316 
321  vtkSetClampMacro(
323  vtkGetMacro(TraversalOrder, int);
325  {
326  this->SetTraversalOrder(vtkStaticPointLocator::POINT_ORDER);
327  }
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 
360 protected:
362  ~vtkStaticPointLocator() override;
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 
376 private:
378  void operator=(const vtkStaticPointLocator&) = delete;
379 };
380 
381 VTK_ABI_NAMESPACE_END
382 #endif
virtual void BuildLocator()=0
Build the locator from the input dataset.
virtual double * GetSpacing()
Provide an accessor to the bucket spacing.
virtual vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double &dist2)=0
Given a position x and a radius r, return the id of the point closest to the point in that radius...
#define VTK_INT_MAX
Definition: vtkType.h:192
virtual double * GetBounds()
Provide an accessor to the bounds.
int vtkIdType
Definition: vtkType.h:363
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:71
virtual void FreeSearchStructure()=0
Free the memory required for the spatial data structure.
dynamic, self-adjusting array of double
int vtkTypeBool
Definition: vtkABI.h:64
a simple class to control print indentation
Definition: vtkIndent.h:28
virtual void BuildLocatorInternal()
This function is not pure virtual to maintain backwards compatibility.
Definition: vtkLocator.h:199
void PrintSelf(ostream &os, vtkIndent indent) override
Standard type and print methods.
abstract class to quickly locate points in 3-space
list of point or cell ids
Definition: vtkIdList.h:25
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:44
virtual void FindPointsWithinRadius(double R, const double x[3], vtkIdList *result)=0
Find all points within a specified radius R of position x.
quickly locate points in 3-space
virtual void FindClosestNPoints(int N, const double x[3], vtkIdList *result)=0
Find the closest N points to a position.
void SetTraversalOrderToBinOrder()
Specify the manner in which points are processed when a non-zero merge tolerance is specified...
void SetTraversalOrderToPointOrder()
Specify the manner in which points are processed when a non-zero merge tolerance is specified...
TraversalOrderType
Point merging is inherently an order-dependent process.
#define VTK_ID_MAX
Definition: vtkType.h:367
Represent an array of vtkDist2Tuples.
bool GetLargeIds()
Inform the user as to whether large ids are being used.
virtual vtkIdType FindClosestPoint(const double x[3])=0
Given a position x, return the id of the point closest to it.
Private declarations for 3D binned spatial locator.
virtual void Initialize()
Initialize locator.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
virtual void GetSpacing(double spacing[3])
Provide an accessor to the bucket spacing.
#define VTK_DEPRECATED_IN_9_7_0(reason)
virtual void GenerateRepresentation(int level, vtkPolyData *pd)=0
Method to build a representation at a particular level.
virtual void ForceBuildLocator()
Build the locator from the input dataset (even if UseExistingSearchStructure is on).
Definition: vtkLocator.h:163