Hide menu
Loading...
Searching...
No Matches
cadex::ModelData_Box Class Reference

Defines a 3D axis-aligned bounding box. More...

#include <cadex/ModelData_Box.hxx>

Public Member Functions

 ModelData_Box ()
 Constructor. Creates a box with infinite boundaries.
 
 ModelData_Box (const ModelData_Pointd &theCorner1, const ModelData_Pointd &theCorner2)
 Constructor.
 
 ModelData_Box (const Bnd_Box &theBox)
 Constructor.
 
const ModelData_PointMinCorner () const
 
ModelData_PointMinCorner ()
 
const ModelData_PointMaxCorner () const
 
ModelData_PointMaxCorner ()
 
const ModelData_PointCorner (size_t theIdx) const
 Returns one of the bounding box corners.
 
ModelData_Point Center () const
 Returns a center point. Returns a middle of the diagonal between MinCorner() and MaxCorner().
 
void Add (const ModelData_Point &thePoint)
 Adjusts the box corners so that it contains thePoint.
 
void Add (const ModelData_Box &theBox)
 Adjusts the box corners so that it contains theBox.
 
void Clear ()
 Resets the box.
 
void SetXRange (double theMin, double theMax)
 Sets the range of box along X axis to the specified values.
 
void SetYRange (double theMin, double theMax)
 Sets the range of box along Y axis to the specified values.
 
void SetZRange (double theMin, double theMax)
 Sets the range of box along Z axis to the specified values.
 
void SetRange (size_t theIdx, double theMin, double theMax)
 Sets one range of the box to the specified values.
 
double Range (size_t theIdx) const
 Returns the length of range along specified axis.
 
double XRange () const
 Returns the length of range along X axis.
 
double YRange () const
 Returns the length of range along Y axis.
 
double ZRange () const
 Returns the length of range along Z axis.
 
void Enlarge (double theX, double theY, double theZ)
 Enlarge the box dimensions by specified values.
 
void Enlarge (double theSize)
 Enlarge the box dimensions by specified value.
 
ModelData_Box Enlarged (double theX, double theY, double theZ) const
 Return the box with dimensions enlarged by specified values.
 
ModelData_Box Enlarged (double theSize) const
 Return the box with dimensions enlarged by specified value.
 
bool IsIn (const ModelData_Point &thePoint) const
 Returns true if the point lies inside the box.
 
bool Intersects (const ModelData_Box &theOther) const
 Returns the other box has at least one common point with this box.
 
bool IsInfinite () const
 Returns true if at least one coordinate is infinite.
 
void Multiply (double theValue)
 Scales box by scalar value.
 
ModelData_Box Multiplied (double theValue) const
 Returns the box scaled by scalar value.
 
void Transform (const ModelData_Transformation &theTransformation)
 Transforms the box.
 
ModelData_Box Transformed (const ModelData_Transformation &theTransformation) const
 Returns the transformed box.
 
 operator Bnd_Box () const
 Casts to a Bnd_Box object.
 

Detailed Description

Defines a 3D axis-aligned bounding box.

The box is defined via two corners - MinCorner() and MaxCorner() - containing minimum and maximum coordinates respectively.

See also
ModelData_Box2d.
Examples
exploring/validationproperties/Program.cs, exploring/validationproperties/main.cxx, and visualization/qtquick_qml/measurements/main.cxx.

Constructor & Destructor Documentation

◆ ModelData_Box() [1/2]

cadex::ModelData_Box::ModelData_Box ( const ModelData_Pointd &  theCorner1,
const ModelData_Pointd &  theCorner2 
)

Constructor.

Creates a box from 2 points. Minimum corner is determined from the minimum values for each coordinate in the given points. Maximum corner is determined from the maximum values.

◆ ModelData_Box() [2/2]

cadex::ModelData_Box::ModelData_Box ( const Bnd_Box &  theBox)

Constructor.

Creates a box from a Bnd_Box object. If theBox is void then creates an unlimited box.

Member Function Documentation

◆ Add()

void cadex::ModelData_Box::Add ( const ModelData_Point thePoint)

Adjusts the box corners so that it contains thePoint.

Takes into account only finite coordinates of thePoint (those whose absolute value is less than \(10^{100}\)).

◆ Clear()

void cadex::ModelData_Box::Clear ( )

Resets the box.

Assigns infinite values to the coordinates, so that IsInfinite() returns true.

◆ Corner()

const ModelData_Point & cadex::ModelData_Box::Corner ( size_t  theIdx) const
inline

Returns one of the bounding box corners.

Corner Index
Minimum corner 0
Maximum corner 1

◆ Enlarge() [1/2]

void cadex::ModelData_Box::Enlarge ( double  theSize)
inline

Enlarge the box dimensions by specified value.

Each box extent is shifted by \(\frac{1}{2}\cdot\mathrm{theSize}\) to the negative and positive side along respective axis.

◆ Enlarge() [2/2]

void cadex::ModelData_Box::Enlarge ( double  theX,
double  theY,
double  theZ 
)
inline

Enlarge the box dimensions by specified values.

Each box extent is shifted by \(\frac{1}{2}\) of the specified shift value to the negative and positive side along respective axis.

◆ Enlarged() [1/2]

ModelData_Box cadex::ModelData_Box::Enlarged ( double  theSize) const
inline

Return the box with dimensions enlarged by specified value.

Each box extent of the result is shifted by \(\frac{1}{2}\cdot\mathrm{theSize}\) to the negative and positive side along respective axis compared to the original.

◆ Enlarged() [2/2]

ModelData_Box cadex::ModelData_Box::Enlarged ( double  theX,
double  theY,
double  theZ 
) const
inline

Return the box with dimensions enlarged by specified values.

Each box extent of the result is shifted by \(\frac{1}{2}\) of the specified shift value to the negative and positive side along respective axis compared to the original.

◆ IsInfinite()

bool cadex::ModelData_Box::IsInfinite ( ) const

Returns true if at least one coordinate is infinite.

"Infinite" means that coordinate's absolute value is greater than \(10^{100}\).

See also
Clear()
Examples
visualization/qtquick_qml/measurements/main.cxx.

◆ MaxCorner() [1/2]

ModelData_Point & cadex::ModelData_Box::MaxCorner ( )
inline

Returns the MaxCorner property.

◆ MaxCorner() [2/2]

const ModelData_Point & cadex::ModelData_Box::MaxCorner ( ) const
inline

Returns the MaxCorner property.

◆ MinCorner() [1/2]

ModelData_Point & cadex::ModelData_Box::MinCorner ( )
inline

Returns the MinCorner property.

◆ MinCorner() [2/2]

const ModelData_Point & cadex::ModelData_Box::MinCorner ( ) const
inline

Returns the MinCorner property.

◆ Multiply()

void cadex::ModelData_Box::Multiply ( double  theValue)

Scales box by scalar value.

Performs the scaling transformation of all the points of the box in the form:

\[ P'=\mathrm{theValue}\; P \]

where \(P\) and \(P'\) are the box points before and after transformation respectively and \(\mathrm{theValue}\) is the scale factor.

◆ SetRange()

void cadex::ModelData_Box::SetRange ( size_t  theIdx,
double  theMin,
double  theMax 
)
inline

Sets one range of the box to the specified values.

Range axis Index
X 0
Y 1
Z 2

◆ Transform()

void cadex::ModelData_Box::Transform ( const ModelData_Transformation theTransformation)

Transforms the box.

If the transformation does not contain anything besides perhaps a translation, the box dimensions are kept as is and its position is recalcuated accordingly.

If rotation or scale are present, all box corners are transformed and a new axis-aligned box containing them is built. If the box was infinite in one of the directions, the new box will also be infinite in the directions that are results of applying the transformation to the original directions. The new box most likely has larger dimensions than the original.

For more accurate results, it's recommended instead to transform the arguments the box was built from and only then calculate the box.