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
57class vtkPoints;
58class vtkIdList;
59class vtkPolyData;
60class vtkCellArray;
62
63class VTKCOMMONDATAMODEL_EXPORT vtkIncrementalOctreePointLocator : public vtkIncrementalPointLocator
64{
65public:
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
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
319protected:
320
323
324private:
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
489 ( const vtkIncrementalOctreePointLocator & ) VTK_DELETE_FUNCTION;
490 void operator = ( const vtkIncrementalOctreePointLocator & ) VTK_DELETE_FUNCTION;
491
492};
493#endif
virtual double * GetBounds()
Provide an accessor to the bounds.
object to represent cell connectivity
Definition: vtkCellArray.h:51
list of point or cell ids
Definition: vtkIdList.h:37
Octree node constituting incremental octree (in support of both point location and point insertion)
Incremental octree in support of both point location and point insertion.
void Initialize() override
Delete the octree search structure.
void GenerateRepresentation(int nodeLevel, vtkPolyData *polysData) override
Create a polygonal representation of the octree boundary (from the root node to a specified level).
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int GetNumberOfPoints()
Get the number of points maintained by the octree.
void FreeSearchStructure() override
Delete the octree search structure.
vtkIdType FindClosestInsertedPoint(const double x[3]) override
Given a point x assumed to be covered by the octree, return the index of the closest in-octree point ...
static vtkIncrementalOctreePointLocator * New()
void BuildLocator() override
Load points from a dataset to construct an octree for point location.
Abstract class in support of both point location and point insertion.
a simple class to control print indentation
Definition: vtkIndent.h:40
virtual void FreeSearchStructure()=0
Free the memory required for the spatial data structure.
represent and manipulate 3D points
Definition: vtkPoints.h:40
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:86
@ point
Definition: vtkX3D.h:236
@ points
Definition: vtkX3D.h:446
@ radius
Definition: vtkX3D.h:252
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkBooleanMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
int vtkIdType
Definition: vtkType.h:287