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_Point & | MinCorner () const |
ModelData_Point & | MinCorner () |
const ModelData_Point & | MaxCorner () const |
ModelData_Point & | MaxCorner () |
const ModelData_Point & | Corner (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. | |
Defines a 3D axis-aligned bounding box.
The box is defined via two corners - MinCorner() and MaxCorner() - containing minimum and maximum coordinates respectively.
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.
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.
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}\)).
void cadex::ModelData_Box::Clear | ( | ) |
Resets the box.
Assigns infinite values to the coordinates, so that IsInfinite() returns true.
|
inline |
Returns one of the bounding box corners.
Corner | Index |
---|---|
Minimum corner | 0 |
Maximum corner | 1 |
|
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.
|
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.
|
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.
|
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.
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}\).
|
inline |
Returns the MaxCorner property.
|
inline |
Returns the MaxCorner property.
|
inline |
Returns the MinCorner property.
|
inline |
Returns the MinCorner property.
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.
|
inline |
Sets one range of the box to the specified values.
Range axis | Index |
---|---|
X | 0 |
Y | 1 |
Z | 2 |
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.