Mesh Oriented datABase
(version 5.4.1)
Array-based unstructured mesh datastructure
|
Class representing axis-aligned bounding box. More...
#include <AxisBox.hpp>
Public Member Functions | |
AxisBox () | |
AxisBox (const double *min, const double *max) | |
AxisBox (const double *point) | |
AxisBox & | operator&= (const AxisBox &other) |
AxisBox & | operator|= (const AxisBox &other) |
AxisBox & | operator|= (const double *point) |
const double * | minimum () const |
const double * | maximum () const |
double * | minimum () |
double * | maximum () |
void | center (double *center_out) const |
void | diagonal (double *diagonal_out) const |
bool | intersects (const AxisBox &other, double tolerance) const |
Check if two boxes intersect. | |
bool | intersects (const double *point, double tolerance) const |
Check if box contains point. | |
bool | valid () const |
Check that box is valid. | |
void | closest_position_within_box (const double *input_position, double *output_position) const |
Find closest position on/within box to input position. | |
Static Public Member Functions | |
static ErrorCode | get_tag (Tag &tag_handle_out, Interface *interface, const char *tag_name=0) |
static ErrorCode | calculate (AxisBox &box_out, EntityHandle set, Interface *interface) |
static ErrorCode | calculate (AxisBox &box_out, const Range &elements, Interface *interface) |
Private Attributes | |
double | minVect [3] |
double | maxVect [3] |
Class representing axis-aligned bounding box.
Definition at line 30 of file AxisBox.hpp.
moab::AxisBox::AxisBox | ( | ) | [inline] |
moab::AxisBox::AxisBox | ( | const double * | min, |
const double * | max | ||
) | [inline] |
moab::AxisBox::AxisBox | ( | const double * | point | ) | [inline] |
ErrorCode moab::AxisBox::calculate | ( | AxisBox & | box_out, |
EntityHandle | set, | ||
Interface * | interface | ||
) | [static] |
Calculate a box bounding the entities contained in the passed set
Definition at line 41 of file AxisBox.cpp.
References ErrorCode, moab::Interface::get_entities_by_handle(), and MB_SUCCESS.
{ Range range; ErrorCode rval = interface->get_entities_by_handle( set, range ); if( MB_SUCCESS != rval ) return rval; return calculate( box, range, interface ); }
ErrorCode moab::AxisBox::calculate | ( | AxisBox & | box_out, |
const Range & | elements, | ||
Interface * | interface | ||
) | [static] |
Calculate a box bounding the vertices/elements in the passed Range
Definition at line 50 of file AxisBox.cpp.
References AxisBox(), moab::Range::begin(), ErrorCode, moab::Interface::get_adjacencies(), moab::Interface::get_coords(), moab::Range::lower_bound(), MB_SUCCESS, MBENTITYSET, MBVERTEX, moab::Range::merge(), moab::Range::size(), and moab::Range::upper_bound().
{ ErrorCode rval; Range vertices; Range elements; elements.merge( entities.upper_bound( MBVERTEX ), entities.lower_bound( MBENTITYSET ) ); rval = interface->get_adjacencies( elements, 0, false, vertices ); if( MB_SUCCESS != rval ) return rval; vertices.merge( entities.begin(), entities.upper_bound( MBVERTEX ) ); std::vector< double > coords( 3 * vertices.size() ); rval = interface->get_coords( vertices, &coords[0] ); if( MB_SUCCESS != rval ) return rval; box = AxisBox(); std::vector< double >::const_iterator i = coords.begin(); for( ; i != coords.end(); i += 3 ) box |= &*i; return MB_SUCCESS; }
void moab::AxisBox::center | ( | double * | center_out | ) | const [inline] |
void moab::AxisBox::closest_position_within_box | ( | const double * | input_position, |
double * | output_position | ||
) | const [inline] |
Find closest position on/within box to input position.
Find the closest position in the solid box to the input position. If the input position is on or within the box, then the output position will be the same as the input position. If the input position is outside the box, the outside position will be the closest point on the box boundary to the input position.
Definition at line 220 of file AxisBox.hpp.
void moab::AxisBox::diagonal | ( | double * | diagonal_out | ) | const [inline] |
ErrorCode moab::AxisBox::get_tag | ( | Tag & | tag_handle_out, |
Interface * | interface, | ||
const char * | tag_name = 0 |
||
) | [static] |
Definition at line 31 of file AxisBox.cpp.
References moab::AXIS_BOX_TAG_NAME, MB_TAG_BYTES, MB_TAG_CREAT, MB_TAG_DENSE, MB_TYPE_DOUBLE, and moab::Interface::tag_get_handle().
{ assert( sizeof( AxisBox ) == 6 * sizeof( double ) ); if( !tagname ) tagname = AXIS_BOX_TAG_NAME; return interface->tag_get_handle( tagname, sizeof( AxisBox ), MB_TYPE_DOUBLE, tag_out, MB_TAG_DENSE | MB_TAG_CREAT | MB_TAG_BYTES ); }
bool moab::AxisBox::intersects | ( | const AxisBox & | other, |
double | tolerance | ||
) | const [inline] |
Check if two boxes intersect.
Check if two boxes are within the specified tolerance of each other. If tolerance is less than zero, then boxes must overlap by at least the magnitude of the tolerance to be considered intersecting.
Definition at line 201 of file AxisBox.hpp.
References maxVect, minVect, and moab::tolerance.
bool moab::AxisBox::intersects | ( | const double * | point, |
double | tolerance | ||
) | const [inline] |
Check if box contains point.
Check if a position is in or on the box, within the specified tolerance
Definition at line 208 of file AxisBox.hpp.
References maxVect, minVect, and moab::tolerance.
const double* moab::AxisBox::maximum | ( | ) | const [inline] |
Definition at line 61 of file AxisBox.hpp.
References maxVect.
Referenced by moab::operator||().
{ return maxVect; }
double* moab::AxisBox::maximum | ( | ) | [inline] |
const double* moab::AxisBox::minimum | ( | ) | const [inline] |
Definition at line 56 of file AxisBox.hpp.
References minVect.
Referenced by moab::operator||().
{ return minVect; }
double* moab::AxisBox::minimum | ( | ) | [inline] |
AxisBox & moab::AxisBox::operator|= | ( | const double * | point | ) | [inline] |
bool moab::AxisBox::valid | ( | ) | const [inline] |
double moab::AxisBox::maxVect[3] [private] |
Definition at line 112 of file AxisBox.hpp.
Referenced by AxisBox(), center(), closest_position_within_box(), diagonal(), intersects(), maximum(), operator&=(), operator|=(), and valid().
double moab::AxisBox::minVect[3] [private] |
Definition at line 112 of file AxisBox.hpp.
Referenced by AxisBox(), center(), closest_position_within_box(), diagonal(), intersects(), minimum(), operator&=(), operator|=(), and valid().