VTK  9.0.1
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 
33 #ifndef vtkKdNode_h
34 #define vtkKdNode_h
35 
36 #include "vtkCommonDataModelModule.h" // For export macro
37 #include "vtkObject.h"
38 
39 class vtkCell;
41 
42 class VTKCOMMONDATAMODEL_EXPORT vtkKdNode : public vtkObject
43 {
44 public:
45  vtkTypeMacro(vtkKdNode, vtkObject);
46  void PrintSelf(ostream& os, vtkIndent indent) override;
47 
48  static vtkKdNode* New();
49 
51 
55  vtkSetMacro(Dim, int);
56  vtkGetMacro(Dim, int);
58 
64  virtual double GetDivisionPosition();
65 
67 
70  vtkSetMacro(NumberOfPoints, int);
71  vtkGetMacro(NumberOfPoints, int);
73 
75 
79  void SetBounds(double x1, double x2, double y1, double y2, double z1, double z2);
80  void SetBounds(const double b[6]) { this->SetBounds(b[0], b[1], b[2], b[3], b[4], b[5]); }
81  void GetBounds(double* b) const;
83 
85 
90  void SetDataBounds(double x1, double x2, double y1, double y2, double z1, double z2);
91  void GetDataBounds(double* b) const;
93 
98  void SetDataBounds(float* v);
99 
104  double* GetMinBounds() VTK_SIZEHINT(3) { return this->Min; }
105  double* GetMaxBounds() VTK_SIZEHINT(3) { return this->Max; }
106 
110  void SetMinBounds(const double* mb);
111 
115  void SetMaxBounds(const double* mb);
116 
121  double* GetMinDataBounds() VTK_SIZEHINT(3) { return this->MinVal; }
122  double* GetMaxDataBounds() VTK_SIZEHINT(3) { return this->MaxVal; }
123 
128  void SetMinDataBounds(const double* mb);
129 
134  void SetMaxDataBounds(const double* mb);
135 
137 
141  vtkSetMacro(ID, int);
142  vtkGetMacro(ID, int);
144 
146 
153  vtkGetMacro(MinID, int);
154  vtkGetMacro(MaxID, int);
155  vtkSetMacro(MinID, int);
156  vtkSetMacro(MaxID, int);
158 
162  void AddChildNodes(vtkKdNode* left, vtkKdNode* right);
163 
167  void DeleteChildNodes();
168 
170 
173  vtkGetObjectMacro(Left, vtkKdNode);
174  void SetLeft(vtkKdNode* left);
176 
178 
181  vtkGetObjectMacro(Right, vtkKdNode);
182  void SetRight(vtkKdNode* right);
184 
186 
189  vtkGetObjectMacro(Up, vtkKdNode);
190  void SetUp(vtkKdNode* up);
192 
198  int IntersectsBox(
199  double x1, double x2, double y1, double y2, double z1, double z2, int useDataBounds);
200 
206  int IntersectsSphere2(double x, double y, double z, double rSquared, int useDataBounds);
207 
216  int IntersectsRegion(vtkPlanesIntersection* pi, int useDataBounds);
217 
227  int IntersectsCell(
228  vtkCell* cell, int useDataBounds, int cellRegion = -1, double* cellBounds = nullptr);
229 
235  int ContainsBox(
236  double x1, double x2, double y1, double y2, double z1, double z2, int useDataBounds);
237 
243  vtkTypeBool ContainsPoint(double x, double y, double z, int useDataBounds);
244 
250  double GetDistance2ToBoundary(double x, double y, double z, int useDataBounds);
251 
257  double GetDistance2ToBoundary(
258  double x, double y, double z, double* boundaryPt, int useDataBounds);
259 
266  double GetDistance2ToInnerBoundary(double x, double y, double z);
267 
269 
272  void PrintNode(int depth);
273  void PrintVerboseNode(int depth);
275 
276 protected:
277  vtkKdNode();
278  ~vtkKdNode() override;
279 
280 private:
281  double _GetDistance2ToBoundary(
282  double x, double y, double z, double* boundaryPt, int innerBoundaryOnly, int useDataBounds);
283 
284  double Min[3]; // spatial bounds of node
285  double Max[3]; // spatial bounds of node
286  double MinVal[3]; // spatial bounds of data within node
287  double MaxVal[3]; // spatial bounds of data within node
288  int NumberOfPoints;
289 
290  vtkKdNode* Up;
291 
292  vtkKdNode* Left;
293  vtkKdNode* Right;
294 
295  int Dim;
296 
297  int ID; // region id
298 
299  int MinID;
300  int MaxID;
301 
302  vtkKdNode(const vtkKdNode&) = delete;
303  void operator=(const vtkKdNode&) = delete;
304 };
305 
306 #endif
vtkKdNode
This class represents a single spatial region in an 3D axis aligned binary spatial partitioning....
Definition: vtkKdNode.h:42
vtkKdNode::GetMaxDataBounds
double * GetMaxDataBounds()
Definition: vtkKdNode.h:122
vtkObject::New
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:62
vtkKdNode::GetMinBounds
double * GetMinBounds()
Get a pointer to the 3 bound minima (xmin, ymin and zmin) or the 3 bound maxima (xmax,...
Definition: vtkKdNode.h:104
vtkPlanesIntersection
A vtkPlanesIntersection object is a vtkPlanes object that can compute whether the arbitrary convex re...
Definition: vtkPlanesIntersection.h:52
vtkKdNode::GetMinDataBounds
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:121
vtkKdNode::SetBounds
void SetBounds(const double b[6])
Definition: vtkKdNode.h:80
VTK_SIZEHINT
#define VTK_SIZEHINT(...)
Definition: vtkWrappingHints.h:45
vtkCell
abstract class to specify cell behavior
Definition: vtkCell.h:56
vtkKdNode::GetMaxBounds
double * GetMaxBounds()
Definition: vtkKdNode.h:105
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkObject::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkObject.h
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69