60 #ifndef vtkBoundingBox_h
61 #define vtkBoundingBox_h
62 #include "vtkCommonDataModelModule.h"
78 vtkBoundingBox(
double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax);
104 void SetBounds(
const double bounds[6]);
105 void SetBounds(
double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax);
119 vtkPoints* pts,
const std::atomic<unsigned char>* ptUses,
double bounds[6]);
125 this->MinPnt[0] = bds[0];
126 this->MinPnt[1] = bds[2];
127 this->MinPnt[2] = bds[4];
128 this->MaxPnt[0] = bds[1];
129 this->MaxPnt[1] = bds[3];
130 this->MaxPnt[2] = bds[5];
140 vtkPoints*
points,
double u[3],
double v[3],
double w[3],
double outputBounds[6]);
149 void SetMinPoint(
double p[3]);
158 void SetMaxPoint(
double p[3]);
167 static int IsValid(
const double bounds[6]);
244 double& xMin,
double& xMax,
double& yMin,
double& yMax,
double& zMin,
double& zMax)
const;
250 double GetBound(
int i)
const;
257 void GetMinPoint(
double& x,
double& y,
double& z) const;
258 void GetMinPoint(
double x[3]) const;
266 void GetMaxPoint(
double& x,
double& y,
double& z) const;
267 void GetMaxPoint(
double x[3]) const;
274 void GetCorner(
int corner,
double p[3]) const;
280 vtkTypeBool ContainsPoint(const
double p[3]) const;
281 vtkTypeBool ContainsPoint(
double px,
double py,
double pz) const;
282 template <class PointT>
283 bool ContainsPoint(const PointT& p) const;
289 void GetCenter(
double center[3]) const;
294 void GetLengths(
double lengths[3]) const;
299 double GetLength(
int i) const;
304 double GetMaxLength() const;
310 double GetDiagonalLength() const;
324 void Inflate(
double delta);
325 void Inflate(
double deltaX,
double deltaY,
double deltaZ);
327 void InflateSlice(
double delta);
337 void Scale(
double s[3]);
338 void Scale(
double sx,
double sy,
double sz);
347 void ScaleAboutCenter(
double s);
348 void ScaleAboutCenter(
double s[3]);
349 void ScaleAboutCenter(
double sx,
double sy,
double sz);
368 static
void ClampDivisions(
vtkIdType targetBins,
int divs[3]);
376 double MinPnt[3], MaxPnt[3];
381 this->MinPnt[0] = this->MinPnt[1] = this->MinPnt[2] =
VTK_DOUBLE_MAX;
382 this->MaxPnt[0] = this->MaxPnt[1] = this->MaxPnt[2] =
VTK_DOUBLE_MIN;
386 double& xMin,
double& xMax,
double& yMin,
double& yMax,
double& zMin,
double& zMax)
const
388 xMin = this->MinPnt[0];
389 xMax = this->MaxPnt[0];
390 yMin = this->MinPnt[1];
391 yMax = this->MaxPnt[1];
392 zMin = this->MinPnt[2];
393 zMax = this->MaxPnt[2];
401 return ((i & 0x1) ? this->MaxPnt[i >> 1] : this->MinPnt[i >> 1]);
411 x[0] = this->MinPnt[0];
412 x[1] = this->MinPnt[1];
413 x[2] = this->MinPnt[2];
423 x[0] = this->MaxPnt[0];
424 x[1] = this->MaxPnt[1];
425 x[2] = this->MaxPnt[2];
430 return ((this->MinPnt[0] <= this->MaxPnt[0]) && (this->MinPnt[1] <= this->MaxPnt[1]) &&
431 (this->MinPnt[2] <= this->MaxPnt[2]));
436 return (bounds[0] <= bounds[1] && bounds[2] <= bounds[3] && bounds[4] <= bounds[5]);
441 return this->MaxPnt[i] - this->MinPnt[i];
446 lengths[0] = this->GetLength(0);
447 lengths[1] = this->GetLength(1);
448 lengths[2] = this->GetLength(2);
453 center[0] = 0.5 * (this->MaxPnt[0] + this->MinPnt[0]);
454 center[1] = 0.5 * (this->MaxPnt[1] + this->MinPnt[1]);
455 center[2] = 0.5 * (this->MaxPnt[2] + this->MinPnt[2]);
462 return this->MaxPnt[0] < bboxMaxPnt[0] && this->MinPnt[0] > bboxMinPnt[0] &&
463 this->MaxPnt[1] < bboxMaxPnt[1] && this->MinPnt[1] > bboxMinPnt[1] &&
464 this->MaxPnt[2] < bboxMaxPnt[2] && this->MinPnt[2] > bboxMinPnt[2];
469 this->SetBounds(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]);
474 this->
GetBounds(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]);
485 this->SetBounds(bounds);
489 double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax)
492 this->SetBounds(xMin, xMax, yMin, yMax, zMin, zMax);
497 this->MinPnt[0] = bbox.
MinPnt[0];
498 this->MinPnt[1] = bbox.
MinPnt[1];
499 this->MinPnt[2] = bbox.
MinPnt[2];
501 this->MaxPnt[0] = bbox.
MaxPnt[0];
502 this->MaxPnt[1] = bbox.
MaxPnt[1];
503 this->MaxPnt[2] = bbox.
MaxPnt[2];
508 this->MinPnt[0] = bbox.
MinPnt[0];
509 this->MinPnt[1] = bbox.
MinPnt[1];
510 this->MinPnt[2] = bbox.
MinPnt[2];
512 this->MaxPnt[0] = bbox.
MaxPnt[0];
513 this->MaxPnt[1] = bbox.
MaxPnt[1];
514 this->MaxPnt[2] = bbox.
MaxPnt[2];
520 return ((this->MinPnt[0] == bbox.
MinPnt[0]) && (this->MinPnt[1] == bbox.
MinPnt[1]) &&
521 (this->MinPnt[2] == bbox.
MinPnt[2]) && (this->MaxPnt[0] == bbox.
MaxPnt[0]) &&
522 (this->MaxPnt[1] == bbox.
MaxPnt[1]) && (this->MaxPnt[2] == bbox.
MaxPnt[2]));
527 return !((*this) == bbox);
532 this->SetMinPoint(p[0], p[1], p[2]);
537 this->SetMaxPoint(p[0], p[1], p[2]);
556 if ((px < this->MinPnt[0]) || (px > this->MaxPnt[0]))
560 if ((py < this->MinPnt[1]) || (py > this->MaxPnt[1]))
564 if ((pz < this->MinPnt[2]) || (pz > this->MaxPnt[2]))
573 return this->ContainsPoint(p[0], p[1], p[2]);
576 template <
class Po
intT>
579 return this->ContainsPoint(p[0], p[1], p[2]);
584 if ((corner < 0) || (corner > 7))
592 int ix = (corner & 1) ? 1 : 0;
593 int iy = ((corner >> 1) & 1) ? 1 : 0;
594 int iz = (corner >> 2) ? 1 : 0;
596 const double* pts[2] = { this->MinPnt, this->MaxPnt };
Fast, simple class for representing and operating on 3D bounds.
int IntersectBox(const vtkBoundingBox &bbox)
Intersect this box with bbox.
const double * GetMinPoint() const
Get the minimum point of the bounding box.
void SetBounds(double xMin, double xMax, double yMin, double yMax, double zMin, double zMax)
Set the bounds explicitly of the box (using the VTK convention for representing a bounding box).
void AddBox(const vtkBoundingBox &bbox)
Change the bounding box to be the union of itself and the specified bbox.
void AddBounds(const double bounds[])
Adjust the bounding box so it contains the specified bounds (defined by the VTK representation (xmin,...
int Contains(const vtkBoundingBox &bbox) const
Returns 1 if the min and max points of bbox are contained within the bounds of the specified box,...
int IsValid() const
Returns 1 if the bounds have been set and 0 if the box is in its initialized state which is an invert...
int Intersects(const vtkBoundingBox &bbox) const
Returns 1 if the boxes intersect else returns 0.
bool operator!=(const vtkBoundingBox &bbox) const
Equality operator.
void AddPoint(double px, double py, double pz)
Change bounding box so it includes the point p.
int ComputeInnerDimension() const
Returns the inner dimension of the bounding box.
void GetCorner(int corner, double p[3]) const
Get the ith corner of the bounding box.
void ComputeBounds(vtkPoints *pts)
Compute the bounding box from an array of vtkPoints.
bool IsSubsetOf(const vtkBoundingBox &bbox) const
Returns true if this instance is entirely contained by bbox.
static void ComputeBounds(vtkPoints *pts, double bounds[6])
Compute the bounding box from an array of vtkPoints.
bool IntersectsSphere(double center[3], double squaredRadius) const
Intersect this box with a sphere.
void SetMaxPoint(double x, double y, double z)
Set the maximum point of the bounding box - if the max point is less than the min point then the min ...
bool IntersectPlane(double origin[3], double normal[3])
Intersect this box with the half space defined by plane.
bool IntersectsLine(const double p1[3], const double p2[3]) const
Returns true if any part of segment [p1,p2] lies inside the bounding box, as well as on its boundarie...
static void ComputeLocalBounds(vtkPoints *points, double u[3], double v[3], double w[3], double outputBounds[6])
Compute local bounds.
void GetCenter(double center[3]) const
Get the center of the bounding box.
void AddPoint(double p[3])
Change bounding box so it includes the point p.
double GetLength(int i) const
Return the length of the bounding box in the ith direction.
bool operator==(const vtkBoundingBox &bbox) const
Equality operator.
vtkTypeBool ContainsPoint(const double p[3]) const
Returns 1 if the point is contained in the box else 0.
vtkBoundingBox()
Construct a bounding box with the min point set to VTK_DOUBLE_MAX and the max point set to VTK_DOUBLE...
void GetLengths(double lengths[3]) const
Get the length of each side of the box.
void ComputeBounds(vtkPoints *pts, unsigned char *ptUses)
Compute the bounding box from an array of vtkPoints.
static void ComputeBounds(vtkPoints *pts, const unsigned char *ptUses, double bounds[6])
Compute the bounding box from an array of vtkPoints.
void SetBounds(const double bounds[6])
Set the bounds explicitly of the box (using the VTK convention for representing a bounding box).
const double * GetMaxPoint() const
Get the maximum point of the bounding box.
double GetBound(int i) const
Return the ith bounds of the box (defined by VTK style).
static void ComputeBounds(vtkPoints *pts, const std::atomic< unsigned char > *ptUses, double bounds[6])
Compute the bounding box from an array of vtkPoints.
void GetBounds(double bounds[6]) const
Get the bounds of the box (defined by VTK style).
void SetMinPoint(double x, double y, double z)
Set the minimum point of the bounding box - if the min point is greater than the max point then the m...
vtkBoundingBox & operator=(const vtkBoundingBox &bbox)
Assignment Operator.
represent and manipulate 3D points
void GetBounds(T a, double bds[6])
bool VTKCOMMONDATAMODEL_EXPORT operator==(vtkEdgeBase e1, vtkEdgeBase e2)
bool VTKCOMMONDATAMODEL_EXPORT operator!=(vtkEdgeBase e1, vtkEdgeBase e2)
#define VTK_SIZEHINT(...)