VTK
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) VTK_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])
84  {
85  this->SetBounds(b[0], b[1], b[2], b[3], b[4], b[5]);
86  }
87  void GetBounds(double *b) const;
89 
91 
96  void SetDataBounds(double x1,double x2,double y1,double y2,double z1,double z2);
97  void GetDataBounds(double *b) const;
99 
104  void SetDataBounds(float *v);
105 
110  double *GetMinBounds() {return this->Min;}
111  double *GetMaxBounds() {return this->Max;}
112 
116  void SetMinBounds(const double *mb);
117 
121  void SetMaxBounds(const double *mb);
122 
127  double *GetMinDataBounds() {return this->MinVal;}
128  double *GetMaxDataBounds() {return this->MaxVal;}
129 
134  void SetMinDataBounds(const double *mb);
135 
140  void SetMaxDataBounds(const double *mb);
141 
143 
147  vtkSetMacro(ID, int);
148  vtkGetMacro(ID, int);
150 
152 
159  vtkGetMacro(MinID, int);
160  vtkGetMacro(MaxID, int);
161  vtkSetMacro(MinID, int);
162  vtkSetMacro(MaxID, int);
164 
168  void AddChildNodes(vtkKdNode *left, vtkKdNode *right);
169 
174 
176 
179  vtkGetObjectMacro(Left, vtkKdNode);
180  void SetLeft(vtkKdNode* left);
182 
184 
187  vtkGetObjectMacro(Right, vtkKdNode);
188  void SetRight(vtkKdNode *right);
190 
192 
195  vtkGetObjectMacro(Up, vtkKdNode);
196  void SetUp(vtkKdNode* up);
198 
204  int IntersectsBox(double x1,double x2,double y1,double y2,double z1,double z2,
205  int useDataBounds);
206 
212  int IntersectsSphere2(double x, double y, double z, double rSquared,
213  int useDataBounds);
214 
223  int IntersectsRegion(vtkPlanesIntersection *pi, int useDataBounds);
224 
234  int IntersectsCell(vtkCell *cell, int useDataBounds,
235  int cellRegion=-1, double *cellBounds=NULL);
236 
242  int ContainsBox(double x1,double x2,double y1,double y2,double z1,double z2,
243  int useDataBounds);
244 
250  int ContainsPoint(double x, double y, double z, int useDataBounds);
251 
257  double GetDistance2ToBoundary(double x, double y, double z, int useDataBounds);
258 
264  double GetDistance2ToBoundary(double x, double y, double z, double *boundaryPt,
265  int useDataBounds);
266 
273  double GetDistance2ToInnerBoundary(double x, double y, double z);
274 
276 
279  void PrintNode(int depth);
280  void PrintVerboseNode(int depth);
282 
283 protected:
284 
286  ~vtkKdNode() VTK_OVERRIDE;
287 
288 private:
289 
290  double _GetDistance2ToBoundary(
291  double x, double y, double z, double *boundaryPt,
292  int innerBoundaryOnly, int useDataBounds);
293 
294  double Min[3]; // spatial bounds of node
295  double Max[3]; // spatial bounds of node
296  double MinVal[3]; // spatial bounds of data within node
297  double MaxVal[3]; // spatial bounds of data within node
298  int NumberOfPoints;
299 
300  vtkKdNode *Up;
301 
302  vtkKdNode *Left;
303  vtkKdNode *Right;
304 
305  int Dim;
306 
307  int ID; // region id
308 
309  int MinID;
310  int MaxID;
311 
312  vtkKdNode(const vtkKdNode&) VTK_DELETE_FUNCTION;
313  void operator=(const vtkKdNode&) VTK_DELETE_FUNCTION;
314 };
315 
316 #endif
vtkKdNode::SetMaxBounds
void SetMaxBounds(const double *mb)
Set the xmax, ymax and zmax value of the bounds of this region.
vtkKdNode
This class represents a single spatial region in an 3D axis aligned binary spatial partitioning.
Definition: vtkKdNode.h:46
vtkKdNode::GetDistance2ToInnerBoundary
double GetDistance2ToInnerBoundary(double x, double y, double z)
Calculate the distance from the specified point (which is required to be inside this spatial region) ...
vtkKdNode::~vtkKdNode
~vtkKdNode() override
vtkKdNode::SetUp
void SetUp(vtkKdNode *up)
vtkKdNode::GetMaxDataBounds
double * GetMaxDataBounds()
Definition: vtkKdNode.h:128
vtkKdNode::SetLeft
void SetLeft(vtkKdNode *left)
vtkKdNode::SetMaxDataBounds
void SetMaxDataBounds(const double *mb)
Set the xmax, ymax and zmax value of the bounds of this data within this region.
vtkKdNode::New
static vtkKdNode * New()
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:60
vtkKdNode::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkKdNode::GetDataBounds
void GetDataBounds(double *b) const
vtkKdNode::SetMinBounds
void SetMinBounds(const double *mb)
Set the xmin, ymin and zmin value of the bounds of this region.
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:110
vtkKdNode::GetDistance2ToBoundary
double GetDistance2ToBoundary(double x, double y, double z, int useDataBounds)
Calculate the distance squared from any point to the boundary of this region.
vtkPlanesIntersection
A vtkPlanesIntersection object is a vtkPlanes object that can compute whether the arbitrary convex re...
Definition: vtkPlanesIntersection.h:56
vtkKdNode::SetDataBounds
void SetDataBounds(float *v)
Given a pointer to NumberOfPoints points, set the DataBounds of this node to the bounds of these poin...
vtkKdNode::SetDataBounds
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.
vtkKdNode::PrintVerboseNode
void PrintVerboseNode(int depth)
vtkKdNode::IntersectsSphere2
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...
vtkKdNode::vtkKdNode
vtkKdNode()
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:127
vtkKdNode::SetBounds
void SetBounds(const double b[6])
Definition: vtkKdNode.h:83
vtkKdNode::IntersectsBox
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.
vtkKdNode::GetDivisionPosition
virtual double GetDivisionPosition()
Get the location of the division plane along the axis the region is divided.
vtkKdNode::PrintNode
void PrintNode(int depth)
For debugging purposes, print out this node.
vtkCell
abstract class to specify cell behavior
Definition: vtkCell.h:60
vtkKdNode::DeleteChildNodes
void DeleteChildNodes()
Delete the left and right children.
vtkKdNode::SetRight
void SetRight(vtkKdNode *right)
vtkKdNode::GetMaxBounds
double * GetMaxBounds()
Definition: vtkKdNode.h:111
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
vtkKdNode::SetBounds
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.
vtkKdNode::GetBounds
void GetBounds(double *b) const
vtkKdNode::GetDistance2ToBoundary
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.
vtkObject.h
vtkSetMacro
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkKdNode::SetMinDataBounds
void SetMinDataBounds(const double *mb)
Set the xmin, ymin and zmin value of the bounds of this data within this region.
vtkKdNode::AddChildNodes
void AddChildNodes(vtkKdNode *left, vtkKdNode *right)
Add the left and right children.
vtkKdNode::ContainsPoint
int ContainsPoint(double x, double y, double z, int useDataBounds)
Return 1 if this spatial region entirely contains the given point.
vtkKdNode::ContainsBox
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.
vtkKdNode::IntersectsRegion
int IntersectsRegion(vtkPlanesIntersection *pi, int useDataBounds)
A vtkPlanesIntersection object represents a convex 3D region bounded by planes, and it is capable of ...
vtkKdNode::IntersectsCell
int IntersectsCell(vtkCell *cell, int useDataBounds, int cellRegion=-1, double *cellBounds=NULL)
Return 1 if the cell specified intersects this region.