48#ifndef vtkBoundingBox_h
49#define vtkBoundingBox_h
50#include "vtkCommonDataModelModule.h"
54VTK_ABI_NAMESPACE_BEGIN
73 vtkBoundingBox(
double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax);
103 void SetBounds(
const double bounds[6]);
104 void SetBounds(
double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax);
118 vtkPoints* pts,
const std::atomic<unsigned char>* ptUses,
double bounds[6]);
119 template <
typename TIter>
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];
136 this->MinPnt[0] = bds[0];
137 this->MinPnt[1] = bds[2];
138 this->MinPnt[2] = bds[4];
139 this->MaxPnt[0] = bds[1];
140 this->MaxPnt[1] = bds[3];
141 this->MaxPnt[2] = bds[5];
151 vtkPoints* points,
double u[3],
double v[3],
double w[3],
double outputBounds[6]);
160 void SetMinPoint(
double p[3]);
169 void SetMaxPoint(
double p[3]);
178 static int IsValid(
const double bounds[6]);
265 static bool ContainsLine(
const double x[3],
const double s[3],
const double lineEnd[3],
double& t,
266 double xInt[3],
int& plane);
272 void GetBounds(
double bounds[6])
const;
274 double& xMin,
double& xMax,
double& yMin,
double& yMax,
double& zMin,
double& zMax)
const;
280 double GetBound(
int i)
const;
287 void GetMinPoint(
double& x,
double& y,
double& z) const;
288 void GetMinPoint(
double x[3]) const;
296 void GetMaxPoint(
double& x,
double& y,
double& z) const;
297 void GetMaxPoint(
double x[3]) const;
304 void GetCorner(
int corner,
double p[3]) const;
310 vtkTypeBool ContainsPoint(const
double p[3]) const;
311 vtkTypeBool ContainsPoint(
double px,
double py,
double pz) const;
312 template <class PointT>
313 bool ContainsPoint(const PointT& p) const;
319 void GetCenter(
double center[3]) const;
324 void GetLengths(
double lengths[3]) const;
329 double GetLength(
int i) const;
334 double GetMaxLength() const;
341 double GetDiagonalLength2() const;
342 double GetDiagonalLength() const;
357 void Inflate(
double delta);
358 void Inflate(
double deltaX,
double deltaY,
double deltaZ);
360 void InflateSlice(
double delta);
370 void Scale(
double s[3]);
371 void Scale(
double sx,
double sy,
double sz);
380 void ScaleAboutCenter(
double s);
381 void ScaleAboutCenter(
double s[3]);
382 void ScaleAboutCenter(
double sx,
double sy,
double sz);
401 static
void ClampDivisions(
vtkIdType targetBins,
int divs[3]);
412 void ClampPoint(
double point[3]);
420 void GetDistance(
double point[3],
double distance[3]);
426 void Translate(
double motion[3]);
429 double MinPnt[3], MaxPnt[3];
434 this->MinPnt[0] = this->MinPnt[1] = this->MinPnt[2] =
VTK_DOUBLE_MAX;
435 this->MaxPnt[0] = this->MaxPnt[1] = this->MaxPnt[2] =
VTK_DOUBLE_MIN;
439 double& xMin,
double& xMax,
double& yMin,
double& yMax,
double& zMin,
double& zMax)
const
441 xMin = this->MinPnt[0];
442 xMax = this->MaxPnt[0];
443 yMin = this->MinPnt[1];
444 yMax = this->MaxPnt[1];
445 zMin = this->MinPnt[2];
446 zMax = this->MaxPnt[2];
454 return ((i & 0x1) ? this->MaxPnt[i >> 1] : this->MinPnt[i >> 1]);
464 x[0] = this->MinPnt[0];
465 x[1] = this->MinPnt[1];
466 x[2] = this->MinPnt[2];
476 x[0] = this->MaxPnt[0];
477 x[1] = this->MaxPnt[1];
478 x[2] = this->MaxPnt[2];
483 return ((this->MinPnt[0] <= this->MaxPnt[0]) && (this->MinPnt[1] <= this->MaxPnt[1]) &&
484 (this->MinPnt[2] <= this->MaxPnt[2]));
489 return (bounds[0] <= bounds[1] && bounds[2] <= bounds[3] && bounds[4] <= bounds[5]);
494 return this->MaxPnt[i] - this->MinPnt[i];
499 lengths[0] = this->GetLength(0);
500 lengths[1] = this->GetLength(1);
501 lengths[2] = this->GetLength(2);
506 center[0] = 0.5 * (this->MaxPnt[0] + this->MinPnt[0]);
507 center[1] = 0.5 * (this->MaxPnt[1] + this->MinPnt[1]);
508 center[2] = 0.5 * (this->MaxPnt[2] + this->MinPnt[2]);
515 return this->MaxPnt[0] < bboxMaxPnt[0] && this->MinPnt[0] > bboxMinPnt[0] &&
516 this->MaxPnt[1] < bboxMaxPnt[1] && this->MinPnt[1] > bboxMinPnt[1] &&
517 this->MaxPnt[2] < bboxMaxPnt[2] && this->MinPnt[2] > bboxMinPnt[2];
522 this->SetBounds(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]);
527 this->GetBounds(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]);
538 this->SetBounds(bounds);
542 double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax)
545 this->SetBounds(xMin, xMax, yMin, yMax, zMin, zMax);
550 this->MinPnt[0] = bbox.
MinPnt[0];
551 this->MinPnt[1] = bbox.
MinPnt[1];
552 this->MinPnt[2] = bbox.
MinPnt[2];
554 this->MaxPnt[0] = bbox.
MaxPnt[0];
555 this->MaxPnt[1] = bbox.
MaxPnt[1];
556 this->MaxPnt[2] = bbox.
MaxPnt[2];
562 this->AddPoint(center);
563 this->Inflate(delta);
568 this->MinPnt[0] = bbox.
MinPnt[0];
569 this->MinPnt[1] = bbox.
MinPnt[1];
570 this->MinPnt[2] = bbox.
MinPnt[2];
572 this->MaxPnt[0] = bbox.
MaxPnt[0];
573 this->MaxPnt[1] = bbox.
MaxPnt[1];
574 this->MaxPnt[2] = bbox.
MaxPnt[2];
580 return ((this->MinPnt[0] == bbox.
MinPnt[0]) && (this->MinPnt[1] == bbox.
MinPnt[1]) &&
581 (this->MinPnt[2] == bbox.
MinPnt[2]) && (this->MaxPnt[0] == bbox.
MaxPnt[0]) &&
582 (this->MaxPnt[1] == bbox.
MaxPnt[1]) && (this->MaxPnt[2] == bbox.
MaxPnt[2]));
587 return !((*this) == bbox);
592 this->SetMinPoint(p[0], p[1], p[2]);
597 this->SetMaxPoint(p[0], p[1], p[2]);
616 if ((px < this->MinPnt[0]) || (px > this->MaxPnt[0]))
620 if ((py < this->MinPnt[1]) || (py > this->MaxPnt[1]))
624 if ((pz < this->MinPnt[2]) || (pz > this->MaxPnt[2]))
633 return this->ContainsPoint(p[0], p[1], p[2]);
636template <
class Po
intT>
639 return this->ContainsPoint(p[0], p[1], p[2]);
644 if ((corner < 0) || (corner > 7))
652 int ix = (corner & 1) ? 1 : 0;
653 int iy = ((corner >> 1) & 1) ? 1 : 0;
654 int iz = (corner >> 2) ? 1 : 0;
656 const double* pts[2] = { this->MinPnt, this->MaxPnt };
Fast, simple class for representing and operating on 3D bounds.
static bool ContainsLine(const double x[3], const double s[3], const double lineEnd[3], double &t, double xInt[3], int &plane)
A specialized, performant method to compute the containment of a finite line emanating from the cente...
void AddBounds(const double bounds[6])
Adjust the bounding box so it contains the specified bounds (defined by the VTK representation (xmin,...
static void ComputeBounds(vtkPoints *pts, TIter ptIds, vtkIdType numPointIds, double bounds[6])
Compute the bounding box from an array of vtkPoints.
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.
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
bool VTKCOMMONCORE_EXPORT operator==(const std::string &a, const vtkStringToken &b)
bool VTKCOMMONCORE_EXPORT operator!=(const std::string &a, const vtkStringToken &b)
#define VTK_SIZEHINT(...)