VTK
vtkIncrementalOctreePointLocator.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkIncrementalOctreePointLocator.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 =========================================================================*/
51 #ifndef vtkIncrementalOctreePointLocator_h
52 #define vtkIncrementalOctreePointLocator_h
53 
54 #include "vtkCommonDataModelModule.h" // For export macro
56 
57 class vtkPoints;
58 class vtkIdList;
59 class vtkPolyData;
60 class vtkCellArray;
62 
63 class VTKCOMMONDATAMODEL_EXPORT vtkIncrementalOctreePointLocator : public vtkIncrementalPointLocator
64 {
65 public:
66 
68  void PrintSelf( ostream & os, vtkIndent indent ) VTK_OVERRIDE;
69 
71 
73 
83  vtkSetClampMacro( MaxPointsPerLeaf, int, 16, 256 );
84  vtkGetMacro( MaxPointsPerLeaf, int );
86 
88 
91  vtkSetMacro( BuildCubicOctree, int );
92  vtkGetMacro( BuildCubicOctree, int );
93  vtkBooleanMacro( BuildCubicOctree, int );
95 
97 
101  vtkGetObjectMacro( LocatorPoints, vtkPoints );
103 
107  void Initialize() VTK_OVERRIDE { this->FreeSearchStructure(); }
108 
112  void FreeSearchStructure() VTK_OVERRIDE;
113 
117  void GetBounds( double * bounds ) VTK_OVERRIDE;
118 
122  double * GetBounds() VTK_OVERRIDE
123  { this->GetBounds( this->Bounds ); return this->Bounds; }
124 
128  int GetNumberOfPoints();
129 
137  vtkIdType FindClosestInsertedPoint( const double x[3] ) VTK_OVERRIDE;
138 
143  void GenerateRepresentation( int nodeLevel, vtkPolyData * polysData ) VTK_OVERRIDE;
144 
145  // -------------------------------------------------------------------------
146  // ---------------------------- Point Location ----------------------------
147  // -------------------------------------------------------------------------
148 
153  void BuildLocator() VTK_OVERRIDE;
154 
160  vtkIdType FindClosestPoint( const double x[3] ) VTK_OVERRIDE;
161 
168  virtual vtkIdType FindClosestPoint( double x, double y, double z );
169 
176  virtual vtkIdType FindClosestPoint( const double x[3], double * miniDist2 );
177 
184  virtual vtkIdType FindClosestPoint( double x, double y, double z, double * miniDist2 );
185 
194  vtkIdType FindClosestPointWithinRadius
195  ( double radius, const double x[3], double & dist2 ) VTK_OVERRIDE;
196 
205  vtkIdType FindClosestPointWithinSquaredRadius
206  ( double radius2, const double x[3], double & dist2 );
207 
214  void FindPointsWithinRadius
215  ( double R, const double x[3], vtkIdList * result ) VTK_OVERRIDE;
216 
223  void FindPointsWithinSquaredRadius
224  ( double R2, const double x[3], vtkIdList * result );
225 
232  void FindClosestNPoints
233  ( int N, const double x[3], vtkIdList * result ) VTK_OVERRIDE;
234 
235  // -------------------------------------------------------------------------
236  // ---------------------------- Point Insertion ----------------------------
237  // -------------------------------------------------------------------------
238 
248  int InitPointInsertion
249  ( vtkPoints * points, const double bounds[6] ) VTK_OVERRIDE;
250 
261  int InitPointInsertion( vtkPoints * points, const double bounds[6],
262  vtkIdType estSize ) VTK_OVERRIDE;
263 
269  vtkIdType IsInsertedPoint( const double x[3] ) VTK_OVERRIDE;
270 
276  vtkIdType IsInsertedPoint( double x, double y, double z ) VTK_OVERRIDE;
277 
286  int InsertUniquePoint( const double point[3], vtkIdType & pntId ) VTK_OVERRIDE;
287 
296  void InsertPoint( vtkIdType ptId, const double x[3] ) VTK_OVERRIDE;
297 
306  vtkIdType InsertNextPoint( const double x[3] ) VTK_OVERRIDE;
307 
316  void InsertPointWithoutChecking
317  ( const double point[3], vtkIdType & pntId, int insert );
318 
319 protected:
320 
322  ~vtkIncrementalOctreePointLocator() VTK_OVERRIDE;
323 
324 private:
325 
326  int BuildCubicOctree;
327  int MaxPointsPerLeaf;
328  double InsertTolerance2;
329  double OctreeMaxDimSize;
330  double FudgeFactor;
331  vtkPoints * LocatorPoints;
332  vtkIncrementalOctreeNode * OctreeRootNode;
333 
337  static void DeleteAllDescendants( vtkIncrementalOctreeNode * node );
338 
343  static void AddPolys( vtkIncrementalOctreeNode * node,
344  vtkPoints * points, vtkCellArray * polygs );
345 
350  vtkIncrementalOctreeNode * GetLeafContainer( vtkIncrementalOctreeNode * node,
351  const double pnt[3] );
352 
360  vtkIdType FindClosestPointInLeafNode( vtkIncrementalOctreeNode * leafNode,
361  const double point[3], double * dist2 );
362 
375  vtkIdType FindClosestPointInSphere
376  ( const double point[3], double radius2, vtkIncrementalOctreeNode * maskNode,
377  double * minDist2, const double * refDist2 );
378 
379 
380  // -------------------------------------------------------------------------
381  // ---------------------------- Point Location ----------------------------
382  // -------------------------------------------------------------------------
383 
394  vtkIdType FindClosestPointInSphereWithoutTolerance( const double point[3],
395  double radius2, vtkIncrementalOctreeNode * maskNode, double * minDist2 );
396 
402  void FindPointsWithinSquaredRadius( vtkIncrementalOctreeNode * node,
403  double radius2, const double point[3], vtkIdList * idList );
404 
405  // -------------------------------------------------------------------------
406  // ---------------------------- Point Insertion ----------------------------
407  // -------------------------------------------------------------------------
408 
420  vtkIdType FindClosestPointInSphereWithTolerance( const double point[3],
421  double radius2, vtkIncrementalOctreeNode * maskNode, double * minDist2 );
422 
432  vtkIdType IsInsertedPoint( const double x[3],
433  vtkIncrementalOctreeNode ** leafContainer );
434 
443  vtkIdType IsInsertedPointForZeroTolerance
444  ( const double x[3], vtkIncrementalOctreeNode ** leafContainer );
445 
455  vtkIdType IsInsertedPointForNonZeroTolerance
456  ( const double x[3], vtkIncrementalOctreeNode ** leafContainer );
457 
465  vtkIdType FindDuplicatePointInLeafNode( vtkIncrementalOctreeNode * leafNode,
466  const double point[3] );
467 
475  vtkIdType FindDuplicateFloatTypePointInVisitedLeafNode
476  ( vtkIncrementalOctreeNode * leafNode, const double point[3] );
477 
485  vtkIdType FindDuplicateDoubleTypePointInVisitedLeafNode
486  ( vtkIncrementalOctreeNode * leafNode, const double point[3] );
487 
488  vtkIncrementalOctreePointLocator
489  ( const vtkIncrementalOctreePointLocator & ) VTK_DELETE_FUNCTION;
490  void operator = ( const vtkIncrementalOctreePointLocator & ) VTK_DELETE_FUNCTION;
491 
492 };
493 #endif
virtual void BuildLocator()=0
Build the locator from the input dataset.
Abstract class in support of both point location and point insertion.
virtual double * GetBounds()
Provide an accessor to the bounds.
int vtkIdType
Definition: vtkType.h:287
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:85
virtual void FreeSearchStructure()=0
Free the memory required for the spatial data structure.
a simple class to control print indentation
Definition: vtkIndent.h:39
list of point or cell ids
Definition: vtkIdList.h:36
Octree node constituting incremental octree (in support of both point location and point insertion) ...
void Initialize() override
Delete the octree search structure.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard type and print methods.
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
object to represent cell connectivity
Definition: vtkCellArray.h:50
virtual vtkIdType FindClosestInsertedPoint(const double x[3])=0
Given a point x assumed to be covered by the search structure, return the index of the closest point ...
vtkBooleanMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
virtual void GenerateRepresentation(int level, vtkPolyData *pd)=0
Method to build a representation at a particular level.
represent and manipulate 3D points
Definition: vtkPoints.h:39
Incremental octree in support of both point location and point insertion.