VTK  9.2.6
vtkKdNode.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkKdNode.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 =========================================================================*/
15 /*----------------------------------------------------------------------------
16  Copyright (c) Sandia Corporation
17  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
18 ----------------------------------------------------------------------------*/
19 
36 #ifndef vtkKdNode_h
37 #define vtkKdNode_h
38 
39 #include "vtkCommonDataModelModule.h" // For export macro
40 #include "vtkObject.h"
41 
42 class vtkCell;
44 
45 class VTKCOMMONDATAMODEL_EXPORT vtkKdNode : public vtkObject
46 {
47 public:
48  vtkTypeMacro(vtkKdNode, vtkObject);
49  void PrintSelf(ostream& os, vtkIndent indent) override;
50 
51  static vtkKdNode* New();
52 
54 
58  vtkSetMacro(Dim, int);
59  vtkGetMacro(Dim, int);
61 
67  virtual double GetDivisionPosition();
68 
70 
73  vtkSetMacro(NumberOfPoints, int);
74  vtkGetMacro(NumberOfPoints, int);
76 
78 
82  void SetBounds(double x1, double x2, double y1, double y2, double z1, double z2);
83  void SetBounds(const double b[6]) { this->SetBounds(b[0], b[1], b[2], b[3], b[4], b[5]); }
84  void GetBounds(double* b) const;
86 
88 
93  void SetDataBounds(double x1, double x2, double y1, double y2, double z1, double z2);
94  void GetDataBounds(double* b) const;
96 
101  void SetDataBounds(float* v);
102 
107  double* GetMinBounds() VTK_SIZEHINT(3) { return this->Min; }
108  double* GetMaxBounds() VTK_SIZEHINT(3) { return this->Max; }
109 
113  void SetMinBounds(const double* mb);
114 
118  void SetMaxBounds(const double* mb);
119 
124  double* GetMinDataBounds() VTK_SIZEHINT(3) { return this->MinVal; }
125  double* GetMaxDataBounds() VTK_SIZEHINT(3) { return this->MaxVal; }
126 
131  void SetMinDataBounds(const double* mb);
132 
137  void SetMaxDataBounds(const double* mb);
138 
140 
144  vtkSetMacro(ID, int);
145  vtkGetMacro(ID, int);
147 
149 
156  vtkGetMacro(MinID, int);
157  vtkGetMacro(MaxID, int);
158  vtkSetMacro(MinID, int);
159  vtkSetMacro(MaxID, int);
161 
165  void AddChildNodes(vtkKdNode* left, vtkKdNode* right);
166 
170  void DeleteChildNodes();
171 
173 
176  vtkGetObjectMacro(Left, vtkKdNode);
177  void SetLeft(vtkKdNode* left);
179 
181 
184  vtkGetObjectMacro(Right, vtkKdNode);
185  void SetRight(vtkKdNode* right);
187 
189 
192  vtkGetObjectMacro(Up, vtkKdNode);
193  void SetUp(vtkKdNode* up);
195 
201  int IntersectsBox(
202  double x1, double x2, double y1, double y2, double z1, double z2, int useDataBounds);
203 
209  int IntersectsSphere2(double x, double y, double z, double rSquared, int useDataBounds);
210 
219  int IntersectsRegion(vtkPlanesIntersection* pi, int useDataBounds);
220 
230  int IntersectsCell(
231  vtkCell* cell, int useDataBounds, int cellRegion = -1, double* cellBounds = nullptr);
232 
238  int ContainsBox(
239  double x1, double x2, double y1, double y2, double z1, double z2, int useDataBounds);
240 
246  vtkTypeBool ContainsPoint(double x, double y, double z, int useDataBounds);
247 
253  double GetDistance2ToBoundary(double x, double y, double z, int useDataBounds);
254 
260  double GetDistance2ToBoundary(
261  double x, double y, double z, double* boundaryPt, int useDataBounds);
262 
269  double GetDistance2ToInnerBoundary(double x, double y, double z);
270 
272 
275  void PrintNode(int depth);
276  void PrintVerboseNode(int depth);
278 
279 protected:
280  vtkKdNode();
281  ~vtkKdNode() override;
282 
283 private:
284  double GetDistance2ToBoundaryPrivate(
285  double x, double y, double z, double* boundaryPt, int innerBoundaryOnly, int useDataBounds);
286 
287  double Min[3]; // spatial bounds of node
288  double Max[3]; // spatial bounds of node
289  double MinVal[3]; // spatial bounds of data within node
290  double MaxVal[3]; // spatial bounds of data within node
291  int NumberOfPoints;
292 
293  vtkKdNode* Up;
294 
295  vtkKdNode* Left;
296  vtkKdNode* Right;
297 
298  int Dim;
299 
300  int ID; // region id
301 
302  int MinID;
303  int MaxID;
304 
305  vtkKdNode(const vtkKdNode&) = delete;
306  void operator=(const vtkKdNode&) = delete;
307 };
308 
309 #endif
double * GetMinDataBounds()
Get a pointer to the 3 data bound minima (xmin, ymin and zmin) or the 3 data bound maxima (xmax...
Definition: vtkKdNode.h:124
void GetBounds(T a, double bds[6])
double * GetMinBounds()
Get a pointer to the 3 bound minima (xmin, ymin and zmin) or the 3 bound maxima (xmax, ymax, zmax).
Definition: vtkKdNode.h:107
This class represents a single spatial region in an 3D axis aligned binary spatial partitioning...
Definition: vtkKdNode.h:45
abstract base class for most VTK objects
Definition: vtkObject.h:62
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
A vtkPlanesIntersection object is a vtkPlanes object that can compute whether the arbitrary convex re...
double * GetMaxDataBounds()
Definition: vtkKdNode.h:125
int vtkTypeBool
Definition: vtkABI.h:69
double * GetMaxBounds()
Definition: vtkKdNode.h:108
abstract class to specify cell behavior
Definition: vtkCell.h:60
a simple class to control print indentation
Definition: vtkIndent.h:39
#define VTK_SIZEHINT(...)
void SetBounds(const double b[6])
Set/Get the bounds of the spatial region represented by this node.
Definition: vtkKdNode.h:83
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...