37#ifndef vtkBoundingBox_h
38#define vtkBoundingBox_h
39#include "vtkCommonDataModelModule.h"
55 vtkBoundingBox(
double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax);
81 void SetBounds(
const double bounds[6]);
82 void SetBounds(
double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax);
96 vtkPoints* pts,
const std::atomic<unsigned char>* ptUses,
double bounds[6]);
102 this->MinPnt[0] = bds[0];
103 this->MinPnt[1] = bds[2];
104 this->MinPnt[2] = bds[4];
105 this->MaxPnt[0] = bds[1];
106 this->MaxPnt[1] = bds[3];
107 this->MaxPnt[2] = bds[5];
117 vtkPoints*
points,
double u[3],
double v[3],
double w[3],
double outputBounds[6]);
126 void SetMinPoint(
double p[3]);
135 void SetMaxPoint(
double p[3]);
144 static int IsValid(
const double bounds[6]);
221 double& xMin,
double& xMax,
double& yMin,
double& yMax,
double& zMin,
double& zMax)
const;
227 double GetBound(
int i)
const;
234 void GetMinPoint(
double& x,
double& y,
double& z) const;
235 void GetMinPoint(
double x[3]) const;
243 void GetMaxPoint(
double& x,
double& y,
double& z) const;
244 void GetMaxPoint(
double x[3]) const;
251 void GetCorner(
int corner,
double p[3]) const;
257 vtkTypeBool ContainsPoint(const
double p[3]) const;
258 vtkTypeBool ContainsPoint(
double px,
double py,
double pz) const;
259 template <class PointT>
260 bool ContainsPoint(const PointT& p) const;
266 void GetCenter(
double center[3]) const;
271 void GetLengths(
double lengths[3]) const;
276 double GetLength(
int i) const;
281 double GetMaxLength() const;
287 double GetDiagonalLength() const;
298 void Inflate(
double delta);
299 void Inflate(
double deltaX,
double deltaY,
double deltaZ);
310 void Scale(
double s[3]);
311 void Scale(
double sx,
double sy,
double sz);
320 void ScaleAboutCenter(
double s);
321 void ScaleAboutCenter(
double s[3]);
322 void ScaleAboutCenter(
double sx,
double sy,
double sz);
341 static
void ClampDivisions(
vtkIdType targetBins,
int divs[3]);
349 double MinPnt[3], MaxPnt[3];
354 this->MinPnt[0] = this->MinPnt[1] = this->MinPnt[2] =
VTK_DOUBLE_MAX;
355 this->MaxPnt[0] = this->MaxPnt[1] = this->MaxPnt[2] =
VTK_DOUBLE_MIN;
359 double& xMin,
double& xMax,
double& yMin,
double& yMax,
double& zMin,
double& zMax)
const
361 xMin = this->MinPnt[0];
362 xMax = this->MaxPnt[0];
363 yMin = this->MinPnt[1];
364 yMax = this->MaxPnt[1];
365 zMin = this->MinPnt[2];
366 zMax = this->MaxPnt[2];
374 return ((i & 0x1) ? this->MaxPnt[i >> 1] : this->MinPnt[i >> 1]);
384 x[0] = this->MinPnt[0];
385 x[1] = this->MinPnt[1];
386 x[2] = this->MinPnt[2];
396 x[0] = this->MaxPnt[0];
397 x[1] = this->MaxPnt[1];
398 x[2] = this->MaxPnt[2];
403 return ((this->MinPnt[0] <= this->MaxPnt[0]) && (this->MinPnt[1] <= this->MaxPnt[1]) &&
404 (this->MinPnt[2] <= this->MaxPnt[2]));
409 return (bounds[0] <= bounds[1] && bounds[2] <= bounds[3] && bounds[4] <= bounds[5]);
414 return this->MaxPnt[i] - this->MinPnt[i];
419 lengths[0] = this->GetLength(0);
420 lengths[1] = this->GetLength(1);
421 lengths[2] = this->GetLength(2);
426 center[0] = 0.5 * (this->MaxPnt[0] + this->MinPnt[0]);
427 center[1] = 0.5 * (this->MaxPnt[1] + this->MinPnt[1]);
428 center[2] = 0.5 * (this->MaxPnt[2] + this->MinPnt[2]);
435 return this->MaxPnt[0] < bboxMaxPnt[0] && this->MinPnt[0] > bboxMinPnt[0] &&
436 this->MaxPnt[1] < bboxMaxPnt[1] && this->MinPnt[1] > bboxMinPnt[1] &&
437 this->MaxPnt[2] < bboxMaxPnt[2] && this->MinPnt[2] > bboxMinPnt[2];
442 this->SetBounds(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]);
447 this->
GetBounds(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]);
458 this->SetBounds(bounds);
462 double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax)
465 this->SetBounds(xMin, xMax, yMin, yMax, zMin, zMax);
470 this->MinPnt[0] = bbox.
MinPnt[0];
471 this->MinPnt[1] = bbox.
MinPnt[1];
472 this->MinPnt[2] = bbox.
MinPnt[2];
474 this->MaxPnt[0] = bbox.
MaxPnt[0];
475 this->MaxPnt[1] = bbox.
MaxPnt[1];
476 this->MaxPnt[2] = bbox.
MaxPnt[2];
481 this->MinPnt[0] = bbox.
MinPnt[0];
482 this->MinPnt[1] = bbox.
MinPnt[1];
483 this->MinPnt[2] = bbox.
MinPnt[2];
485 this->MaxPnt[0] = bbox.
MaxPnt[0];
486 this->MaxPnt[1] = bbox.
MaxPnt[1];
487 this->MaxPnt[2] = bbox.
MaxPnt[2];
493 return ((this->MinPnt[0] == bbox.
MinPnt[0]) && (this->MinPnt[1] == bbox.
MinPnt[1]) &&
494 (this->MinPnt[2] == bbox.
MinPnt[2]) && (this->MaxPnt[0] == bbox.
MaxPnt[0]) &&
495 (this->MaxPnt[1] == bbox.
MaxPnt[1]) && (this->MaxPnt[2] == bbox.
MaxPnt[2]));
500 return !((*this) == bbox);
505 this->SetMinPoint(p[0], p[1], p[2]);
510 this->SetMaxPoint(p[0], p[1], p[2]);
529 if ((px < this->MinPnt[0]) || (px > this->MaxPnt[0]))
533 if ((py < this->MinPnt[1]) || (py > this->MaxPnt[1]))
537 if ((pz < this->MinPnt[2]) || (pz > this->MaxPnt[2]))
546 return this->ContainsPoint(p[0], p[1], p[2]);
549template <
class Po
intT>
552 return this->ContainsPoint(p[0], p[1], p[2]);
557 if ((corner < 0) || (corner > 7))
565 int ix = (corner & 1) ? 1 : 0;
566 int iy = ((corner >> 1) & 1) ? 1 : 0;
567 int iz = (corner >> 2) ? 1 : 0;
569 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])
VTKCOMMONCORE_EXPORT bool operator!=(const vtkUnicodeString &lhs, const vtkUnicodeString &rhs)
VTKCOMMONCORE_EXPORT bool operator==(const vtkUnicodeString &lhs, const vtkUnicodeString &rhs)
#define VTK_SIZEHINT(...)