/usr/include/vtk-7.1/vtkKdNode.h is in libvtk7-dev 7.1.1+dfsg1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 | /*=========================================================================
Program: Visualization Toolkit
Module: vtkKdNode.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/*----------------------------------------------------------------------------
Copyright (c) Sandia Corporation
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
----------------------------------------------------------------------------*/
/**
* @class vtkKdNode
* @brief This class represents a single spatial region
* in an 3D axis aligned binary spatial partitioning. It is assumed
* the region bounds some set of points. Regions are represented
* as nodes in a binary tree.
*
*
*
* @sa
* vtkKdTree vtkOBSPCuts
*/
#ifndef vtkKdNode_h
#define vtkKdNode_h
#include "vtkCommonDataModelModule.h" // For export macro
#include "vtkObject.h"
class vtkCell;
class vtkPlanesIntersection;
class VTKCOMMONDATAMODEL_EXPORT vtkKdNode : public vtkObject
{
public:
vtkTypeMacro(vtkKdNode, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
static vtkKdNode *New();
//@{
/**
* Set/Get the dimension along which this region is divided.
* (0 - x, 1 - y, 2 - z, 3 - leaf node (default)).
*/
vtkSetMacro(Dim, int);
vtkGetMacro(Dim, int);
//@}
/**
* Get the location of the division plane along the axis the region
* is divided. See also GetDim(). The result is undertermined if
* this node is not divided (a leaf node).
*/
virtual double GetDivisionPosition();
//@{
/**
* Set/Get the number of points contained in this region.
*/
vtkSetMacro(NumberOfPoints, int);
vtkGetMacro(NumberOfPoints, int);
//@}
//@{
/**
* Set/Get the bounds of the spatial region represented by this node.
* Caller allocates storage for 6-vector in GetBounds.
*/
void SetBounds(double x1,double x2,double y1,double y2,double z1,double z2);
void SetBounds(const double b[6])
{
this->SetBounds(b[0], b[1], b[2], b[3], b[4], b[5]);
}
void GetBounds(double *b) const;
//@}
//@{
/**
* Set/Get the bounds of the points contained in this spatial region.
* This may be smaller than the bounds of the region itself.
* Caller allocates storage for 6-vector in GetDataBounds.
*/
void SetDataBounds(double x1,double x2,double y1,double y2,double z1,double z2);
void GetDataBounds(double *b) const;
//@}
/**
* Given a pointer to NumberOfPoints points, set the DataBounds of this
* node to the bounds of these points.
*/
void SetDataBounds(float *v);
/**
* Get a pointer to the 3 bound minima (xmin, ymin and zmin) or the
* 3 bound maxima (xmax, ymax, zmax). Don't free this pointer.
*/
double *GetMinBounds() {return this->Min;}
double *GetMaxBounds() {return this->Max;}
/**
* Set the xmin, ymin and zmin value of the bounds of this region
*/
void SetMinBounds(const double *mb);
/**
* Set the xmax, ymax and zmax value of the bounds of this region
*/
void SetMaxBounds(const double *mb);
/**
* Get a pointer to the 3 data bound minima (xmin, ymin and zmin) or the
* 3 data bound maxima (xmax, ymax, zmax). Don't free this pointer.
*/
double *GetMinDataBounds() {return this->MinVal;}
double *GetMaxDataBounds() {return this->MaxVal;}
/**
* Set the xmin, ymin and zmin value of the bounds of this
* data within this region
*/
void SetMinDataBounds(const double *mb);
/**
* Set the xmax, ymax and zmax value of the bounds of this
* data within this region
*/
void SetMaxDataBounds(const double *mb);
//@{
/**
* Set/Get the ID associated with the region described by this node. If
* this is not a leaf node, this value should be -1.
*/
vtkSetMacro(ID, int);
vtkGetMacro(ID, int);
//@}
//@{
/**
* If this node is not a leaf node, there are leaf nodes below it whose
* regions represent a partitioning of this region. The IDs of these
* leaf nodes form a contigous set. Set/Get the range of the IDs of
* the leaf nodes below this node. If this is already a leaf node, these
* values should be the same as the ID.
*/
vtkGetMacro(MinID, int);
vtkGetMacro(MaxID, int);
vtkSetMacro(MinID, int);
vtkSetMacro(MaxID, int);
//@}
/**
* Add the left and right children.
*/
void AddChildNodes(vtkKdNode *left, vtkKdNode *right);
/**
* Delete the left and right children.
*/
void DeleteChildNodes();
//@{
/**
* Set/Get a pointer to the left child of this node.
*/
vtkGetObjectMacro(Left, vtkKdNode);
void SetLeft(vtkKdNode* left);
//@}
//@{
/**
* Set/Get a pointer to the right child of this node.
*/
vtkGetObjectMacro(Right, vtkKdNode);
void SetRight(vtkKdNode *right);
//@}
//@{
/**
* Set/Get a pointer to the parent of this node.
*/
vtkGetObjectMacro(Up, vtkKdNode);
void SetUp(vtkKdNode* up);
//@}
/**
* Return 1 if this spatial region intersects the axis-aligned box given
* by the bounds passed in. Use the possibly smaller bounds of the points
* within the region if useDataBounds is non-zero.
*/
int IntersectsBox(double x1,double x2,double y1,double y2,double z1,double z2,
int useDataBounds);
/**
* Return 1 if this spatial region intersects a sphere described by
* it's center and the square of it's radius. Use the possibly smaller
* bounds of the points within the region if useDataBounds is non-zero.
*/
int IntersectsSphere2(double x, double y, double z, double rSquared,
int useDataBounds);
/**
* A vtkPlanesIntersection object represents a convex 3D region bounded
* by planes, and it is capable of computing intersections of
* boxes with itself. Return 1 if this spatial region intersects
* the spatial region described by the vtkPlanesIntersection object.
* Use the possibly smaller bounds of the points within the region
* if useDataBounds is non-zero.
*/
int IntersectsRegion(vtkPlanesIntersection *pi, int useDataBounds);
/**
* Return 1 if the cell specified intersects this region. If you
* already know the ID of the region containing the cell's centroid,
* provide that as an argument. If you already know the bounds of the
* cell, provide that as well, in the form of xmin,xmax,ymin,ymax,zmin,
* zmax. Either of these may speed the calculation.
* Use the possibly smaller bounds of the points within the region
* if useDataBounds is non-zero.
*/
int IntersectsCell(vtkCell *cell, int useDataBounds,
int cellRegion=-1, double *cellBounds=NULL);
/**
* Return 1 if this spatial region entirely contains a box specified
* by it's bounds. Use the possibly smaller
* bounds of the points within the region if useDataBounds is non-zero.
*/
int ContainsBox(double x1,double x2,double y1,double y2,double z1,double z2,
int useDataBounds);
/**
* Return 1 if this spatial region entirely contains the given point.
* Use the possibly smaller bounds of the points within the region
* if useDataBounds is non-zero.
*/
int ContainsPoint(double x, double y, double z, int useDataBounds);
/**
* Calculate the distance squared from any point to the boundary of this
* region. Use the boundary of the points within the region if useDataBounds
* is non-zero.
*/
double GetDistance2ToBoundary(double x, double y, double z, int useDataBounds);
/**
* Calculate the distance squared from any point to the boundary of this
* region. Use the boundary of the points within the region if useDataBounds
* is non-zero. Set boundaryPt to the point on the boundary.
*/
double GetDistance2ToBoundary(double x, double y, double z, double *boundaryPt,
int useDataBounds);
/**
* Calculate the distance from the specified point (which is required to
* be inside this spatial region) to an interior boundary. An interior
* boundary is one that is not also an boundary of the entire space
* partitioned by the tree of vtkKdNode's.
*/
double GetDistance2ToInnerBoundary(double x, double y, double z);
//@{
/**
* For debugging purposes, print out this node.
*/
void PrintNode(int depth);
void PrintVerboseNode(int depth);
//@}
protected:
vtkKdNode();
~vtkKdNode() VTK_OVERRIDE;
private:
double _GetDistance2ToBoundary(
double x, double y, double z, double *boundaryPt,
int innerBoundaryOnly, int useDataBounds);
double Min[3]; // spatial bounds of node
double Max[3]; // spatial bounds of node
double MinVal[3]; // spatial bounds of data within node
double MaxVal[3]; // spatial bounds of data within node
int NumberOfPoints;
vtkKdNode *Up;
vtkKdNode *Left;
vtkKdNode *Right;
int Dim;
int ID; // region id
int MinID;
int MaxID;
vtkKdNode(const vtkKdNode&) VTK_DELETE_FUNCTION;
void operator=(const vtkKdNode&) VTK_DELETE_FUNCTION;
};
#endif
|