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
abstract class to specify cell behavior
Definition: vtkCell.h:60
a simple class to control print indentation
Definition: vtkIndent.h:40
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)
void SetRight(vtkKdNode *right)
int IntersectsCell(vtkCell *cell, int useDataBounds, int cellRegion=-1, double *cellBounds=NULL)
Return 1 if the cell specified intersects this region.
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
void PrintVerboseNode(int depth)
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:110
void SetBounds(const double b[6])
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.
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:128
void SetUp(vtkKdNode *up)
int ContainsPoint(double x, double y, double z, int useDataBounds)
Return 1 if this spatial region entirely contains the given point.
void GetDataBounds(double *b) const
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:111
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
abstract base class for most VTK objects
Definition: vtkObject.h:60
A vtkPlanesIntersection object is a vtkPlanes object that can compute whether the arbitrary convex re...
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.