28 #ifndef vtkBoundingBox_h
29 #define vtkBoundingBox_h
30 #include "vtkCommonDataModelModule.h"
34 VTK_ABI_NAMESPACE_BEGIN
47 vtkBoundingBox(
double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax);
73 void SetBounds(
const double bounds[6]);
74 void SetBounds(
double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax);
88 vtkPoints* pts,
const std::atomic<unsigned char>* ptUses,
double bounds[6]);
90 vtkPoints* pts,
const long long* ptIds,
long long numPointIds,
double bounds[6]);
97 this->MinPnt[0] = bds[0];
98 this->MinPnt[1] = bds[2];
99 this->MinPnt[2] = bds[4];
100 this->MaxPnt[0] = bds[1];
101 this->MaxPnt[1] = bds[3];
102 this->MaxPnt[2] = bds[5];
108 this->MinPnt[0] = bds[0];
109 this->MinPnt[1] = bds[2];
110 this->MinPnt[2] = bds[4];
111 this->MaxPnt[0] = bds[1];
112 this->MaxPnt[1] = bds[3];
113 this->MaxPnt[2] = bds[5];
123 vtkPoints*
points,
double u[3],
double v[3],
double w[3],
double outputBounds[6]);
132 void SetMinPoint(
double p[3]);
141 void SetMaxPoint(
double p[3]);
150 static int IsValid(
const double bounds[6]);
237 static bool ContainsLine(
const double x[3],
const double s[3],
const double lineEnd[3],
double& t,
238 double xInt[3],
int& plane);
246 double& xMin,
double& xMax,
double& yMin,
double& yMax,
double& zMin,
double& zMax)
const;
252 double GetBound(
int i)
const;
259 void GetMinPoint(
double& x,
double& y,
double& z) const;
260 void GetMinPoint(
double x[3]) const;
268 void GetMaxPoint(
double& x,
double& y,
double& z) const;
269 void GetMaxPoint(
double x[3]) const;
276 void GetCorner(
int corner,
double p[3]) const;
282 vtkTypeBool ContainsPoint(const
double p[3]) const;
283 vtkTypeBool ContainsPoint(
double px,
double py,
double pz) const;
284 template <class PointT>
285 bool ContainsPoint(const PointT& p) const;
291 void GetCenter(
double center[3]) const;
296 void GetLengths(
double lengths[3]) const;
301 double GetLength(
int i) const;
306 double GetMaxLength() const;
313 double GetDiagonalLength2() const;
314 double GetDiagonalLength() const;
329 void Inflate(
double delta);
330 void Inflate(
double deltaX,
double deltaY,
double deltaZ);
332 void InflateSlice(
double delta);
342 void Scale(
double s[3]);
343 void Scale(
double sx,
double sy,
double sz);
352 void ScaleAboutCenter(
double s);
353 void ScaleAboutCenter(
double s[3]);
354 void ScaleAboutCenter(
double sx,
double sy,
double sz);
373 static
void ClampDivisions(
vtkIdType targetBins,
int divs[3]);
381 double MinPnt[3], MaxPnt[3];
386 this->MinPnt[0] = this->MinPnt[1] = this->MinPnt[2] =
VTK_DOUBLE_MAX;
387 this->MaxPnt[0] = this->MaxPnt[1] = this->MaxPnt[2] =
VTK_DOUBLE_MIN;
391 double& xMin,
double& xMax,
double& yMin,
double& yMax,
double& zMin,
double& zMax)
const
393 xMin = this->MinPnt[0];
394 xMax = this->MaxPnt[0];
395 yMin = this->MinPnt[1];
396 yMax = this->MaxPnt[1];
397 zMin = this->MinPnt[2];
398 zMax = this->MaxPnt[2];
406 return ((i & 0x1) ? this->MaxPnt[i >> 1] : this->MinPnt[i >> 1]);
416 x[0] = this->MinPnt[0];
417 x[1] = this->MinPnt[1];
418 x[2] = this->MinPnt[2];
428 x[0] = this->MaxPnt[0];
429 x[1] = this->MaxPnt[1];
430 x[2] = this->MaxPnt[2];
435 return ((this->MinPnt[0] <= this->MaxPnt[0]) && (this->MinPnt[1] <= this->MaxPnt[1]) &&
436 (this->MinPnt[2] <= this->MaxPnt[2]));
441 return (bounds[0] <= bounds[1] && bounds[2] <= bounds[3] && bounds[4] <= bounds[5]);
446 return this->MaxPnt[i] - this->MinPnt[i];
451 lengths[0] = this->GetLength(0);
452 lengths[1] = this->GetLength(1);
453 lengths[2] = this->GetLength(2);
458 center[0] = 0.5 * (this->MaxPnt[0] + this->MinPnt[0]);
459 center[1] = 0.5 * (this->MaxPnt[1] + this->MinPnt[1]);
460 center[2] = 0.5 * (this->MaxPnt[2] + this->MinPnt[2]);
467 return this->MaxPnt[0] < bboxMaxPnt[0] && this->MinPnt[0] > bboxMinPnt[0] &&
468 this->MaxPnt[1] < bboxMaxPnt[1] && this->MinPnt[1] > bboxMinPnt[1] &&
469 this->MaxPnt[2] < bboxMaxPnt[2] && this->MinPnt[2] > bboxMinPnt[2];
474 this->SetBounds(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]);
479 this->
GetBounds(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]);
490 this->SetBounds(bounds);
494 double xMin,
double xMax,
double yMin,
double yMax,
double zMin,
double zMax)
497 this->SetBounds(xMin, xMax, yMin, yMax, zMin, zMax);
502 this->MinPnt[0] = bbox.
MinPnt[0];
503 this->MinPnt[1] = bbox.
MinPnt[1];
504 this->MinPnt[2] = bbox.
MinPnt[2];
506 this->MaxPnt[0] = bbox.
MaxPnt[0];
507 this->MaxPnt[1] = bbox.
MaxPnt[1];
508 this->MaxPnt[2] = bbox.
MaxPnt[2];
513 this->MinPnt[0] = bbox.
MinPnt[0];
514 this->MinPnt[1] = bbox.
MinPnt[1];
515 this->MinPnt[2] = bbox.
MinPnt[2];
517 this->MaxPnt[0] = bbox.
MaxPnt[0];
518 this->MaxPnt[1] = bbox.
MaxPnt[1];
519 this->MaxPnt[2] = bbox.
MaxPnt[2];
525 return ((this->MinPnt[0] == bbox.
MinPnt[0]) && (this->MinPnt[1] == bbox.
MinPnt[1]) &&
526 (this->MinPnt[2] == bbox.
MinPnt[2]) && (this->MaxPnt[0] == bbox.
MaxPnt[0]) &&
527 (this->MaxPnt[1] == bbox.
MaxPnt[1]) && (this->MaxPnt[2] == bbox.
MaxPnt[2]));
532 return !((*this) == bbox);
537 this->SetMinPoint(p[0], p[1], p[2]);
542 this->SetMaxPoint(p[0], p[1], p[2]);
561 if ((px < this->MinPnt[0]) || (px > this->MaxPnt[0]))
565 if ((py < this->MinPnt[1]) || (py > this->MaxPnt[1]))
569 if ((pz < this->MinPnt[2]) || (pz > this->MaxPnt[2]))
578 return this->ContainsPoint(p[0], p[1], p[2]);
581 template <
class Po
intT>
584 return this->ContainsPoint(p[0], p[1], p[2]);
589 if ((corner < 0) || (corner > 7))
597 int ix = (corner & 1) ? 1 : 0;
598 int iy = ((corner >> 1) & 1) ? 1 : 0;
599 int iz = (corner >> 2) ? 1 : 0;
601 const double* pts[2] = { this->MinPnt, this->MaxPnt };
607 VTK_ABI_NAMESPACE_END
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...
static void ComputeBounds(vtkPoints *pts, const long long *ptIds, long long numPointIds, double bounds[6])
Compute the bounding box from an array of vtkPoints.
void AddBounds(const double bounds[6])
Adjust the bounding box so it contains the specified bounds (defined by the VTK representation (xmin,...
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 ComputeBounds(vtkPoints *pts, const long *ptIds, long numPointIds, double bounds[6])
Compute the bounding box from an array of vtkPoints.
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...
static void ComputeBounds(vtkPoints *pts, const int *ptIds, int numPointIds, double bounds[6])
Compute the bounding box from an array of vtkPoints.
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 VTKCOMMONCORE_EXPORT operator==(const std::string &a, const vtkStringToken &b)
bool VTKCOMMONCORE_EXPORT operator!=(const std::string &a, const vtkStringToken &b)
#define VTK_SIZEHINT(...)