#include <opennurbs_bounding_box.h>

Public Member Functions

 ON_BoundingBox () ON_NOEXCEPT
 
 ON_BoundingBox (const ON_BoundingBox &)=default
 
 ON_BoundingBox (const ON_3dPoint &, const ON_3dPoint &)
 
 ~ON_BoundingBox ()=default
 
double Area () const
 
ON_3dPoint Center () const
 
ON_3dPoint ClosestPoint (const ON_3dPoint &test_point) const
 
ON_3dPoint Corner (int, int, int) const
 
void Destroy ()
 OBSOLETE. More...
 
ON_3dVector Diagonal () const
 
void Dump (class ON_TextLog &) const
 
ON_3dPoint FarPoint (const ON_3dPoint &) const
 Point on the box that is farthest from the test_point. More...
 
int GetClosestPoint (const ON_Line &, ON_3dPoint &, double *, double *) const
 Get point in a bounding box that is closest to a line segment. More...
 
bool GetClosestPoint (const ON_BoundingBox &, ON_3dPoint &, ON_3dPoint &) const
 
bool GetCorners (ON_3dPointArray &box_corners) const
 
bool GetCorners (ON_3dPoint box_corners[8]) const
 
bool GetEdges (ON_Line edges[12]) const
 
bool GetFarPoint (const ON_BoundingBox &, ON_3dPoint &, ON_3dPoint &) const
 Get points on bounding boxes that are farthest from each other. More...
 
bool Includes (const ON_BoundingBox &other, bool bProperSubSet=false) const
 Test a box to see if it is contained in this box. More...
 
bool Intersection (const ON_BoundingBox &other_bbox)
 Intersect this with other_bbox and save intersection in this. More...
 
bool Intersection (const ON_BoundingBox &bbox_A, const ON_BoundingBox &bbox_B)
 Set "this" to the intersection of bbox_A and bbox_B. More...
 
bool Intersection (const ON_Line &, double *=nullptr, double *=nullptr) const
 
int IsDegenerate (double tolerance=ON_UNSET_VALUE) const
 Test a bounding box to see if it is degenerate (flat) in one or more directions. More...
 
bool IsDisjoint (const ON_BoundingBox &other_bbox) const
 Test to see if "this" and other_bbox are disjoint (do not intersect). More...
 
bool IsEmpty () const
 
bool IsFartherThan (double d, const ON_3dPoint &P) const
 Quickly determine if the shortest distance from the point P to the bounding box is greater than d. More...
 
bool IsFartherThan (double d, const ON_Line &line) const
 Quickly determine if the shortest distance from the line to the bounding box is greater than d. More...
 
bool IsFartherThan (double d, const ON_Plane &plane) const
 Quickly determine if the shortest distance from the plane to the bounding box is greater than d. More...
 
bool IsFartherThan (double d, const ON_PlaneEquation &plane_equation) const
 Quickly determine if the shortest distance from the plane to the bounding box is greater than d. More...
 
bool IsFartherThan (double d, const ON_BoundingBox &other) const
 Quickly determine if the shortest distance this bounding box to another bounding box is greater than d. More...
 
bool IsNan () const
 
bool IsNotEmpty () const
 
bool IsPoint () const
 
bool IsPointIn (const ON_3dPoint &test_point, int bStrictlyIn=false) const
 
bool IsSet () const
 
bool IsUnset () const
 
bool IsUnsetOrNan () const
 
bool IsValid () const
 OBSOLETE IsValid() = IsNotEmpty() More...
 
int IsVisible (const ON_Xform &bbox2c) const
 
ON_3dPoint Max () const
 
double MaximumDistanceTo (const ON_3dPoint &P) const
 Quickly find an upper bound on the distance between the point and this bounding box. More...
 
double MaximumDistanceTo (const ON_BoundingBox &other) const
 Quickly find an upper bound on the distance between this and the other bounding box. More...
 
double MaximumDistanceTo (const ON_Line &line) const
 Quickly find an upper bound on the distance between the line segment and this bounding box. More...
 
double MaximumDistanceTo (const ON_Plane &plane) const
 Quickly find a tight upper bound on the distance between the plane and this bounding box. More...
 
double MaximumDistanceTo (const ON_PlaneEquation &plane_equation) const
 
ON_3dPoint Min () const
 
double MinimumDistanceTo (const ON_3dPoint &P) const
 Quickly find a lower bound on the distance between the point and this bounding box. More...
 
double MinimumDistanceTo (const ON_BoundingBox &other) const
 Quickly find a lower bound on the distance between this and the other bounding box. More...
 
double MinimumDistanceTo (const ON_Line &line) const
 Quickly find a lower bound on the distance between the line segment and this bounding box. More...
 
double MinimumDistanceTo (const ON_Plane &plane) const
 Quickly find a tight lower bound on the distance between the plane and this bounding box. More...
 
double MinimumDistanceTo (const ON_PlaneEquation &plane_equation) const
 
ON_BoundingBoxoperator= (const ON_BoundingBox &)=default
 
ON_3dPointoperator[] (int)
 operator[] returns min if index <= 0 and max if indes >= 1 More...
 
const ON_3dPointoperator[] (int) const
 
bool Set (int dim, bool is_rat, int count, int stride, const double *point_array, int bGrowBox=false)
 
bool Set (const ON_3dPoint &point, int bGrowBox=false)
 
bool Set (const ON_2dPoint &point, int bGrowBox=false)
 
bool Set (const ON_SimpleArray< ON_4dPoint > &point_array, int bGrowBox=false)
 
bool Set (const ON_SimpleArray< ON_3dPoint > &point_array, int bGrowBox=false)
 
bool Set (const ON_SimpleArray< ON_2dPoint > &point_array, int bGrowBox=false)
 
bool Set (int dim, bool is_rat, int count, int stride, const float *point_array, int bGrowBox=false)
 
bool Set (const ON_3fPoint &point, int bGrowBox=false)
 
bool Set (const ON_2fPoint &point, int bGrowBox=false)
 
bool Set (const ON_SimpleArray< ON_4fPoint > &point_array, int bGrowBox=false)
 
bool Set (const ON_SimpleArray< ON_3fPoint > &point_array, int bGrowBox=false)
 
bool Set (const ON_SimpleArray< ON_2fPoint > &point_array, int bGrowBox=false)
 
bool SwapCoordinates (int, int)
 
double Tolerance () const
 
bool Transform (const ON_Xform &)
 
bool Union (const ON_BoundingBox &)
 
bool Union (const ON_BoundingBox &, const ON_BoundingBox &)
 
double Volume () const
 

Public Attributes

ON_3dPoint m_max
 
ON_3dPoint m_min
 

Static Public Attributes

static const ON_BoundingBox EmptyBoundingBox
 
static const ON_BoundingBox NanBoundingBox
 
static const ON_BoundingBox UnsetBoundingBox
 

Constructor & Destructor Documentation

◆ ON_BoundingBox() [1/3]

ON_BoundingBox::ON_BoundingBox ( )

◆ ~ON_BoundingBox()

ON_BoundingBox::~ON_BoundingBox ( )
default

◆ ON_BoundingBox() [2/3]

ON_BoundingBox::ON_BoundingBox ( const ON_BoundingBox )
default

◆ ON_BoundingBox() [3/3]

ON_BoundingBox::ON_BoundingBox ( const ON_3dPoint ,
const ON_3dPoint  
)
explicit

Member Function Documentation

◆ Area()

double ON_BoundingBox::Area ( ) const

◆ Center()

ON_3dPoint ON_BoundingBox::Center ( ) const

◆ ClosestPoint()

ON_3dPoint ON_BoundingBox::ClosestPoint ( const ON_3dPoint test_point) const

◆ Corner()

ON_3dPoint ON_BoundingBox::Corner ( int  ,
int  ,
int   
) const

◆ Destroy()

void ON_BoundingBox::Destroy ( )

OBSOLETE.

◆ Diagonal()

ON_3dVector ON_BoundingBox::Diagonal ( ) const

◆ Dump()

void ON_BoundingBox::Dump ( class ON_TextLog ) const

◆ FarPoint()

ON_3dPoint ON_BoundingBox::FarPoint ( const ON_3dPoint ) const

Point on the box that is farthest from the test_point.

◆ GetClosestPoint() [1/2]

int ON_BoundingBox::GetClosestPoint ( const ON_Line ,
ON_3dPoint ,
double *  ,
double *   
) const

Get point in a bounding box that is closest to a line segment.

Parameters
line[in] line segment
box_point[out] point in box that is closest to line segment point at t0.
t0[out] parameter of point on line that is closest to the box.
t1[out] parameter of point on line that is closest to the box.
Returns
3 success - line segments intersects box in a segment from line(t0) to line(t1) (t0 < t1) 2 success - line segments intersects box in a single point at line(t0) (t0==t1) 1 success - line segment does not intersect box. Closest point on the line is at line(t0) (t0==t1) 0 failure - box is invalid.

The box is treated as a solid box. If the intersection of the line segment, then 3 is returned.

◆ GetClosestPoint() [2/2]

bool ON_BoundingBox::GetClosestPoint ( const ON_BoundingBox ,
ON_3dPoint ,
ON_3dPoint  
) const

◆ GetCorners() [1/2]

bool ON_BoundingBox::GetCorners ( ON_3dPointArray box_corners) const

◆ GetCorners() [2/2]

bool ON_BoundingBox::GetCorners ( ON_3dPoint  box_corners[8]) const

◆ GetEdges()

bool ON_BoundingBox::GetEdges ( ON_Line  edges[12]) const

TODODOC: edges[] - out TODODOC: 12 edge lines. If the bounding box has no height, width or depth, TODODOC: then the corresponding edges will have the same "from" and "to" TODODOC: points.

Returns
If the bounding box is valid, then true is returned and 12 line segments, some possibly a single point, are returned. Otherwise false is returned and 12 line segments with "from" and "to" points set to ON_3dPoint::UnsetPoint are returned.

◆ GetFarPoint()

bool ON_BoundingBox::GetFarPoint ( const ON_BoundingBox ,
ON_3dPoint ,
ON_3dPoint  
) const

Get points on bounding boxes that are farthest from each other.

◆ Includes()

bool ON_BoundingBox::Includes ( const ON_BoundingBox other,
bool  bProperSubSet = false 
) const

Test a box to see if it is contained in this box.

Parameters
other[in] box to test
bProperSubSet[in] if true, then the test is for a proper inclusion.
Returns
If bProperSubSet is false, then the result is true when this->m_min[i] <= other.m_min[i] and other.m_max[i] <= this->m_max[i]. for i=0,1 and 2. If bProperSubSet is true, then the result is true when the above condition is true and at least one of the inequalities is strict.

◆ Intersection() [1/3]

bool ON_BoundingBox::Intersection ( const ON_BoundingBox other_bbox)

Intersect this with other_bbox and save intersection in this.

Parameters
other_bbox[in]
Returns
True if this-intesect-other_bbox is a non-empty valid bounding box and this is set. False if the intersection is empty, in which case "this" is set to an invalid bounding box.

If "this" or other_bbox is invalid, they are treated as the empty set, and false is returned.

◆ Intersection() [2/3]

bool ON_BoundingBox::Intersection ( const ON_BoundingBox bbox_A,
const ON_BoundingBox bbox_B 
)

Set "this" to the intersection of bbox_A and bbox_B.

Parameters
bbox_A[in]
bbox_B[in]
Returns
True if the "this" is a non-empty valid bounding box. False if the intersection is empty, in which case "this" is set to an invalid bounding box.

If bbox_A or bbox_B is invalid, they are treated as the empty set, and false is returned.

◆ Intersection() [3/3]

bool ON_BoundingBox::Intersection ( const ON_Line ,
double *  = nullptr,
double *  = nullptr 
) const

◆ IsDegenerate()

int ON_BoundingBox::IsDegenerate ( double  tolerance = ON_UNSET_VALUE) const

Test a bounding box to see if it is degenerate (flat) in one or more directions.

Parameters
tolerance[in] Distances <= tolerance will be considered to be zero. If tolerance is negative (default), then a scale invarient tolerance is used.
Returns
table 0 box is not degenerate 1 box is a rectangle (degenerate in one direction) 2 box is a line (degenerate in two directions) 3 box is a point (degenerate in three directions) 4 box is not valid

◆ IsDisjoint()

bool ON_BoundingBox::IsDisjoint ( const ON_BoundingBox other_bbox) const

Test to see if "this" and other_bbox are disjoint (do not intersect).

Parameters
other_bbox[in]
Returns
True if "this" and other_bbox are disjoint.

If "this" or other_bbox is invalid, then true is returned.

◆ IsEmpty()

bool ON_BoundingBox::IsEmpty ( ) const

◆ IsFartherThan() [1/5]

bool ON_BoundingBox::IsFartherThan ( double  d,
const ON_3dPoint P 
) const

Quickly determine if the shortest distance from the point P to the bounding box is greater than d.

Parameters
d[in] distance (> 0.0)
P[in]
Returns
True if if the shortest distance from the point P to the bounding box is greater than d.

◆ IsFartherThan() [2/5]

bool ON_BoundingBox::IsFartherThan ( double  d,
const ON_Line line 
) const

Quickly determine if the shortest distance from the line to the bounding box is greater than d.

Parameters
d[in] distance (> 0.0)
line[in]
Returns
True if the shortest distance from the line to the bounding box is greater than d. It is not the case that false means that the shortest distance is less than or equal to d.

◆ IsFartherThan() [3/5]

bool ON_BoundingBox::IsFartherThan ( double  d,
const ON_Plane plane 
) const

Quickly determine if the shortest distance from the plane to the bounding box is greater than d.

Parameters
d[in] distance (> 0.0)
plane[in]
Returns
True if the shortest distance from the plane to the bounding box is greater than d, and false if the shortest distance is less than or equal to d.

◆ IsFartherThan() [4/5]

bool ON_BoundingBox::IsFartherThan ( double  d,
const ON_PlaneEquation plane_equation 
) const

Quickly determine if the shortest distance from the plane to the bounding box is greater than d.

Parameters
d[in] distance (> 0.0)
plane_equation[in] (the first three coefficients are assumed to be a unit vector. If not, adjust your d accordingly.)
Returns
True if the shortest distance from the plane to the bounding box is greater than d, and false if the shortest distance is less than or equal to d.

◆ IsFartherThan() [5/5]

bool ON_BoundingBox::IsFartherThan ( double  d,
const ON_BoundingBox other 
) const

Quickly determine if the shortest distance this bounding box to another bounding box is greater than d.

Parameters
d[in] distance (> 0.0)
other[in] other bounding box
Returns
True if if the shortest distance from this bounding box to the other bounding box is greater than d.

◆ IsNan()

bool ON_BoundingBox::IsNan ( ) const

◆ IsNotEmpty()

bool ON_BoundingBox::IsNotEmpty ( ) const

◆ IsPoint()

bool ON_BoundingBox::IsPoint ( ) const

◆ IsPointIn()

bool ON_BoundingBox::IsPointIn ( const ON_3dPoint test_point,
int  bStrictlyIn = false 
) const

◆ IsSet()

bool ON_BoundingBox::IsSet ( ) const

◆ IsUnset()

bool ON_BoundingBox::IsUnset ( ) const

◆ IsUnsetOrNan()

bool ON_BoundingBox::IsUnsetOrNan ( ) const

◆ IsValid()

bool ON_BoundingBox::IsValid ( ) const

OBSOLETE IsValid() = IsNotEmpty()

◆ IsVisible()

int ON_BoundingBox::IsVisible ( const ON_Xform bbox2c) const

◆ Max()

ON_3dPoint ON_BoundingBox::Max ( ) const

◆ MaximumDistanceTo() [1/5]

double ON_BoundingBox::MaximumDistanceTo ( const ON_3dPoint P) const

Quickly find an upper bound on the distance between the point and this bounding box.

Parameters
P[in]
Returns
A distance that is greater than or equal to the longest distance from the point P to this bounding box. Put another way, if Q is any point in this bounding box, then P.DistanceTo(Q) <= MaximumDistanceTo(bbox).

◆ MaximumDistanceTo() [2/5]

double ON_BoundingBox::MaximumDistanceTo ( const ON_BoundingBox other) const

Quickly find an upper bound on the distance between this and the other bounding box.

Parameters
other[in]
Returns
A distance that is greater than or equal to the longest distance between the bounding boxes. Put another way, if Q is any point in this bounding box and P is any point in the other bounding box, then P.DistanceTo(Q) <= MaximumDistanceTo(bbox).

◆ MaximumDistanceTo() [3/5]

double ON_BoundingBox::MaximumDistanceTo ( const ON_Line line) const

Quickly find an upper bound on the distance between the line segment and this bounding box.

Parameters
line[in]
Returns
A distance that is greater than or equal to the longest distance from the line to this bounding box. Put another way, if Q is any point on the line and P is any point in this bounding box, then P.DistanceTo(Q) <= MaximumDistanceTo(bbox).

◆ MaximumDistanceTo() [4/5]

double ON_BoundingBox::MaximumDistanceTo ( const ON_Plane plane) const

Quickly find a tight upper bound on the distance between the plane and this bounding box.

Parameters
plane[in]
Returns
A distance that is equal to the longest distance from the plane to this bounding box. Put another way, if Q is any point on the plane and P is any point in this bounding box, then P.DistanceTo(Q) <= MaximumDistanceTo(bbox) and there is at least one point on the bounding box where the distance is equal to the returned value.
See also
ON_PlaneEquation::MaximumValueAt

◆ MaximumDistanceTo() [5/5]

double ON_BoundingBox::MaximumDistanceTo ( const ON_PlaneEquation plane_equation) const

◆ Min()

ON_3dPoint ON_BoundingBox::Min ( ) const

◆ MinimumDistanceTo() [1/5]

double ON_BoundingBox::MinimumDistanceTo ( const ON_3dPoint P) const

Quickly find a lower bound on the distance between the point and this bounding box.

Parameters
P[in]
Returns
A distance that is less than or equal to the shortest distance from the line to this bounding box. Put another way, if Q is any point in this bounding box, then P.DistanceTo(Q) >= MinimumDistanceTo(bbox).

◆ MinimumDistanceTo() [2/5]

double ON_BoundingBox::MinimumDistanceTo ( const ON_BoundingBox other) const

Quickly find a lower bound on the distance between this and the other bounding box.

Parameters
other[in]
Returns
A distance that is less than or equal to the shortest distance between the bounding boxes. Put another way, if Q is any point in this bounding box and P is any point in the other bounding box, then P.DistanceTo(Q) >= MinimumDistanceTo(bbox).

◆ MinimumDistanceTo() [3/5]

double ON_BoundingBox::MinimumDistanceTo ( const ON_Line line) const

Quickly find a lower bound on the distance between the line segment and this bounding box.

Parameters
line[in]
Returns
A distance that is less than or equal to the shortest distance from the line to this bounding box. Put another way, if Q is any point on line and P is any point in this bounding box, then P.DistanceTo(Q) >= MinimumDistanceTo(bbox).

◆ MinimumDistanceTo() [4/5]

double ON_BoundingBox::MinimumDistanceTo ( const ON_Plane plane) const

Quickly find a tight lower bound on the distance between the plane and this bounding box.

Parameters
plane[in]
Returns
The minimum distance between a point on the plane and a point on the bounding box.
See also
ON_PlaneEquation::MimimumValueAt, ON_PlaneEquation::MaximumValueAt

◆ MinimumDistanceTo() [5/5]

double ON_BoundingBox::MinimumDistanceTo ( const ON_PlaneEquation plane_equation) const

◆ operator=()

ON_BoundingBox& ON_BoundingBox::operator= ( const ON_BoundingBox )
default

◆ operator[]() [1/2]

ON_3dPoint& ON_BoundingBox::operator[] ( int  )

operator[] returns min if index <= 0 and max if indes >= 1

◆ operator[]() [2/2]

const ON_3dPoint& ON_BoundingBox::operator[] ( int  ) const

◆ Set() [1/12]

bool ON_BoundingBox::Set ( int  dim,
bool  is_rat,
int  count,
int  stride,
const double *  point_array,
int  bGrowBox = false 
)

◆ Set() [2/12]

bool ON_BoundingBox::Set ( const ON_3dPoint point,
int  bGrowBox = false 
)

◆ Set() [3/12]

bool ON_BoundingBox::Set ( const ON_2dPoint point,
int  bGrowBox = false 
)

◆ Set() [4/12]

bool ON_BoundingBox::Set ( const ON_SimpleArray< ON_4dPoint > &  point_array,
int  bGrowBox = false 
)

◆ Set() [5/12]

bool ON_BoundingBox::Set ( const ON_SimpleArray< ON_3dPoint > &  point_array,
int  bGrowBox = false 
)

◆ Set() [6/12]

bool ON_BoundingBox::Set ( const ON_SimpleArray< ON_2dPoint > &  point_array,
int  bGrowBox = false 
)

◆ Set() [7/12]

bool ON_BoundingBox::Set ( int  dim,
bool  is_rat,
int  count,
int  stride,
const float *  point_array,
int  bGrowBox = false 
)

◆ Set() [8/12]

bool ON_BoundingBox::Set ( const ON_3fPoint point,
int  bGrowBox = false 
)

◆ Set() [9/12]

bool ON_BoundingBox::Set ( const ON_2fPoint point,
int  bGrowBox = false 
)

◆ Set() [10/12]

bool ON_BoundingBox::Set ( const ON_SimpleArray< ON_4fPoint > &  point_array,
int  bGrowBox = false 
)

◆ Set() [11/12]

bool ON_BoundingBox::Set ( const ON_SimpleArray< ON_3fPoint > &  point_array,
int  bGrowBox = false 
)

◆ Set() [12/12]

bool ON_BoundingBox::Set ( const ON_SimpleArray< ON_2fPoint > &  point_array,
int  bGrowBox = false 
)

◆ SwapCoordinates()

bool ON_BoundingBox::SwapCoordinates ( int  ,
int   
)

◆ Tolerance()

double ON_BoundingBox::Tolerance ( ) const

◆ Transform()

bool ON_BoundingBox::Transform ( const ON_Xform )

◆ Union() [1/2]

bool ON_BoundingBox::Union ( const ON_BoundingBox )

◆ Union() [2/2]

bool ON_BoundingBox::Union ( const ON_BoundingBox ,
const ON_BoundingBox  
)

◆ Volume()

double ON_BoundingBox::Volume ( ) const

Member Data Documentation

◆ EmptyBoundingBox

const ON_BoundingBox ON_BoundingBox::EmptyBoundingBox
static

◆ m_max

ON_3dPoint ON_BoundingBox::m_max

◆ m_min

ON_3dPoint ON_BoundingBox::m_min

◆ NanBoundingBox

const ON_BoundingBox ON_BoundingBox::NanBoundingBox
static

◆ UnsetBoundingBox

const ON_BoundingBox ON_BoundingBox::UnsetBoundingBox
static