VTK  9.2.5
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 
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 
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 
231  vtkCell* cell, int useDataBounds, int cellRegion = -1, double* cellBounds = nullptr);
232 
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 
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:
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
abstract class to specify cell behavior
Definition: vtkCell.h:150
a simple class to control print indentation
Definition: vtkIndent.h:119
This class represents a single spatial region in an 3D axis aligned binary spatial partitioning.
Definition: vtkKdNode.h:46
int IntersectsRegion(vtkPlanesIntersection *pi, int useDataBounds)
A vtkPlanesIntersection object represents a convex 3D region bounded by planes, and it is capable of ...
void SetLeft(vtkKdNode *left)
Set/Get a pointer to the left child of this node.
void SetRight(vtkKdNode *right)
Set/Get a pointer to the right child of this node.
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 PrintVerboseNode(int depth)
For debugging purposes, print out this node.
void SetMinBounds(const double *mb)
Set the xmin, ymin and zmin value of the bounds of this region.
double * GetMinBounds()
Get a pointer to the 3 bound minima (xmin, ymin and zmin) or the 3 bound maxima (xmax,...
Definition: vtkKdNode.h:107
void SetBounds(const double b[6])
Set/Get the bounds of the spatial region represented by this node.
Definition: vtkKdNode.h:83
int IntersectsBox(double x1, double x2, double y1, double y2, double z1, double z2, int useDataBounds)
Return 1 if this spatial region intersects the axis-aligned box given by the bounds passed in.
int ContainsBox(double x1, double x2, double y1, double y2, double z1, double z2, int useDataBounds)
Return 1 if this spatial region entirely contains a box specified by it's bounds.
void SetMinDataBounds(const double *mb)
Set the xmin, ymin and zmin value of the bounds of this data within this region.
void SetDataBounds(double x1, double x2, double y1, double y2, double z1, double z2)
Set/Get the bounds of the points contained in this spatial region.
void SetMaxBounds(const double *mb)
Set the xmax, ymax and zmax value of the bounds of this region.
int IntersectsCell(vtkCell *cell, int useDataBounds, int cellRegion=-1, double *cellBounds=nullptr)
Return 1 if the cell specified intersects this region.
void SetMaxDataBounds(const double *mb)
Set the xmax, ymax and zmax value of the bounds of this data within this region.
double GetDistance2ToInnerBoundary(double x, double y, double z)
Calculate the distance from the specified point (which is required to be inside this spatial region) ...
int IntersectsSphere2(double x, double y, double z, double rSquared, int useDataBounds)
Return 1 if this spatial region intersects a sphere described by it's center and the square of it's r...
void AddChildNodes(vtkKdNode *left, vtkKdNode *right)
Add the left and right children.
double * GetMaxDataBounds()
Definition: vtkKdNode.h:125
void SetUp(vtkKdNode *up)
Set/Get a pointer to the parent of this node.
void GetDataBounds(double *b) const
Set/Get the bounds of the points contained in this spatial region.
void SetDataBounds(float *v)
Given a pointer to NumberOfPoints points, set the DataBounds of this node to the bounds of these poin...
double * GetMaxBounds()
Definition: vtkKdNode.h:108
vtkTypeBool ContainsPoint(double x, double y, double z, int useDataBounds)
Return 1 if this spatial region entirely contains the given point.
static vtkKdNode * New()
double GetDistance2ToBoundary(double x, double y, double z, double *boundaryPt, int useDataBounds)
Calculate the distance squared from any point to the boundary of this region.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetBounds(double x1, double x2, double y1, double y2, double z1, double z2)
Set/Get the bounds of the spatial region represented by this node.
void DeleteChildNodes()
Delete the left and right children.
virtual double GetDivisionPosition()
Get the location of the division plane along the axis the region is divided.
void PrintNode(int depth)
For debugging purposes, print out this node.
~vtkKdNode() override
double GetDistance2ToBoundary(double x, double y, double z, int useDataBounds)
Calculate the distance squared from any point to the boundary of this region.
void GetBounds(double *b) const
Set/Get the bounds of the spatial region represented by this node.
abstract base class for most VTK objects
Definition: vtkObject.h:82
A vtkPlanesIntersection object is a vtkPlanes object that can compute whether the arbitrary convex re...
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_SIZEHINT(...)