![]() |
http://www.sim.no http://www.coin3d.org |
The SbXfBox3d class is a 3 dimensional box with double precision coordinates and an attached transformation.It provides storage for two box corners with double precision floating point coordinates, and for a double precision 4x4 transformation matrix. More...
#include <Inventor/SbBox.h>
Public Member Functions | |
SbXfBox3d (void) | |
SbXfBox3d (const SbVec3d &boxmin, const SbVec3d &boxmax) | |
SbXfBox3d (const SbBox3d &box) | |
void | setTransform (const SbDPMatrix &matrix) |
const SbDPMatrix & | getTransform (void) const |
const SbDPMatrix & | getInverse (void) const |
SbVec3d | getCenter (void) const |
void | extendBy (const SbVec3d &pt) |
void | extendBy (const SbBox3d &bb) |
void | extendBy (const SbXfBox3d &bb) |
SbBool | intersect (const SbVec3d &pt) const |
SbBool | intersect (const SbBox3d &bb) const |
SbBool | intersect (const SbXfBox3d &bb) const |
SbBox3d | project (void) const |
void | getSpan (const SbVec3d &direction, double &dMin, double &dMax) const |
void | transform (const SbDPMatrix &matrix) |
double | getVolume (void) const |
![]() | |
SbBox3d (void) | |
SbBox3d (double xmin, double ymin, double zmin, double xmax, double ymax, double zmax) | |
SbBox3d (const SbVec3d &minpoint, const SbVec3d &maxpoint) | |
SbBox3d (const SbBox3f &box) | |
SbBox3d (const SbBox3s &box) | |
SbBox3d (const SbBox3i32 &box) | |
SbBox3d & | setBounds (double xmin, double ymin, double zmin, double xmax, double ymax, double zmax) |
SbBox3d & | setBounds (const SbVec3d &minpoint, const SbVec3d &maxpoint) |
SbBox3d & | setBounds (const SbBox3f &box) |
SbBox3d & | setBounds (const SbBox3s &box) |
SbBox3d & | setBounds (const SbBox3i32 &box) |
void | getBounds (double &xmin, double &ymin, double &zmin, double &xmax, double &ymax, double &zmax) const |
void | getBounds (SbVec3d &minpoint, SbVec3d &maxpoint) const |
const SbVec3d & | getMin (void) const |
SbVec3d & | getMin (void) |
const SbVec3d & | getMax (void) const |
SbVec3d & | getMax (void) |
void | extendBy (const SbVec3d &pt) |
void | extendBy (const SbBox3d &box) |
void | transform (const SbDPMatrix &matrix) |
void | makeEmpty (void) |
SbBool | isEmpty (void) const |
SbBool | hasVolume (void) const |
double | getVolume (void) const |
SbBool | intersect (const SbVec3d &point) const |
SbBool | intersect (const SbBox3d &box) const |
SbVec3d | getClosestPoint (const SbVec3d &point) const |
SbBool | outside (const SbDPMatrix &mvp, int &cullbits) const |
SbVec3d | getCenter (void) const |
void | getOrigin (double &origoX, double &origoY, double &origoZ) const |
void | getSize (double &sizeX, double &sizeY, double &sizeZ) const |
void | getSpan (const SbVec3d &dir, double &dmin, double &dmax) const |
void | print (FILE *file) const |
Additional Inherited Members | |
![]() | |
SbVec3d | minpt |
SbVec3d | maxpt |
![]() | |
int | operator== (const SbBox3d &b1, const SbBox3d &b2) |
int | operator!= (const SbBox3d &b1, const SbBox3d &b2) |
The SbXfBox3d class is a 3 dimensional box with double precision coordinates and an attached transformation.
It provides storage for two box corners with double precision floating point coordinates, and for a double precision 4x4 transformation matrix.
SbXfBox3d::SbXfBox3d | ( | void | ) |
The default constructor makes an empty box and identity matrix.
References SbDPMatrix::makeIdentity().
Referenced by getVolume().
Constructs a box with the given corners.
The coordinates of min should be less than the coordinates of max if you want to make a valid box.
References SbDPMatrix::makeIdentity().
SbXfBox3d::SbXfBox3d | ( | const SbBox3d & | box | ) |
Constructs a box from the given SbBox3d.
The transformation is set to the identity matrix.
References SbDPMatrix::makeIdentity().
void SbXfBox3d::setTransform | ( | const SbDPMatrix & | m | ) |
Sets the transformation to the given SbMatrix.
Referenced by extendBy(), and transform().
|
inline |
Returns the current transformation matrix.
References SbBox3d::extendBy(), SbBox3d::getCenter(), SbBox3d::getMax(), SbBox3d::getMin(), SbBox3d::getSpan(), SbBox3d::getVolume(), SbBox3d::intersect(), SbBox3d::operator!=(), SbBox3d::operator==(), and SbBox3d::transform().
Referenced by extendBy(), and project().
const SbDPMatrix & SbXfBox3d::getInverse | ( | void | ) | const |
Returns the inverse of the current transformation matrix.
Referenced by extendBy(), and intersect().
SbVec3d SbXfBox3d::getCenter | ( | void | ) | const |
Return the transformed center point of the box.
References SbBox3d::getCenter(), and SbDPMatrix::multVecMatrix().
void SbXfBox3d::extendBy | ( | const SbVec3d & | pt | ) |
Extend the boundaries of the box by the given point, i.e. make the point fit inside the box if it isn't already so.
The point is assumed to be in transformed space.
References SbBox3d::extendBy(), getInverse(), SbBox3d::isEmpty(), SbDPMatrix::makeIdentity(), and SbDPMatrix::multVecMatrix().
void SbXfBox3d::extendBy | ( | const SbBox3d & | bb | ) |
Extend the boundaries of the box by the given bb parameter. The given box is assumed to be in transformed space.
The two given boxes will be combined in such a way so that the resultant bounding box always has the smallest possible volume. To accomplish this, the transformation on this SbXfBox3f will sometimes be flattened before it's combined with bb.
References SbBox3d::extendBy(), getInverse(), SbBox3d::getMax(), SbBox3d::getMin(), getVolume(), SbBox3d::getVolume(), SbBox3d::isEmpty(), SbDPMatrix::makeIdentity(), SbDPMatrix::multVecMatrix(), SoDebugError::postInfo(), SoDebugError::postWarning(), project(), SbBox3d::setBounds(), setTransform(), and SbVec3d::setValue().
void SbXfBox3d::extendBy | ( | const SbXfBox3d & | bb | ) |
Extend the boundaries of the box by the given bb parameter.
The given box is assumed to be in transformed space.
Note: is not guaranteed to give an optimal result if used for bbox calculation since the transformation matrix might change. See documentation in SoGetBoundingBoxAction for more details.
References SbBox3d::getMax(), SbBox3d::getMin(), getTransform(), SbBox3d::isEmpty(), SbDPMatrix::multRight(), SbDPMatrix::multVecMatrix(), SoDebugError::postInfo(), SoDebugError::postWarning(), and SbVec3d::setValue().
SbBool SbXfBox3d::intersect | ( | const SbVec3d & | pt | ) | const |
Check if the given point lies within the boundaries of this box.
The point is assumed to be in transformed space.
References SbBox3d::extendBy(), SbBox3d::intersect(), SbDPMatrix::multVecMatrix(), SbVec3d::normalize(), and SbVec3d::setValue().
Referenced by intersect().
SbBool SbXfBox3d::intersect | ( | const SbBox3d & | bb | ) | const |
Check if the given box lies wholly or partly within the boundaries of this box.
The given box is assumed to be in transformed space.
References SbBox3d::getMax(), SbBox3d::getMin(), SbDPMatrix::identity(), SbBox3d::intersect(), SbBox3d::isEmpty(), and SoDebugError::postWarning().
SbBool SbXfBox3d::intersect | ( | const SbXfBox3d & | xfbb | ) | const |
Check if two transformed boxes intersect.
This function is an extension for Coin, and it is not available in the original SGI Open Inventor v2.1 API.
References getInverse(), intersect(), and transform().
SbBox3d SbXfBox3d::project | ( | void | ) | const |
Project the SbXfBox3d into a SbBox3d.
This gives the same resulting SbBox3d as doing a SbBox3d::transform() with this transformation matrix as parameter.
References SbBox3d::getMax(), SbBox3d::getMin(), getTransform(), SbBox3d::isEmpty(), SbBox3d::operator!=(), SbBox3d::operator==(), and SbBox3d::transform().
Referenced by extendBy(), getSpan(), and getVolume().
void SbXfBox3d::getSpan | ( | const SbVec3d & | direction, |
double & | dMin, | ||
double & | dMax | ||
) | const |
Find the span of the box in the given direction (i.e. how much room in the given direction the box needs). The distance is returned as the minimum and maximum distance from origo to the closest and furthest plane defined by the direction vector and each of the box' corners. The difference between these values gives the span.
References SbBox3d::getSpan(), and project().
void SbXfBox3d::transform | ( | const SbDPMatrix & | m | ) |
Overridden from SbBox3d, as the transformations are to be kept separate from the box in the SbXfBox3d class.
References SbDPMatrix::multRight(), and setTransform().
Referenced by intersect().
double SbXfBox3d::getVolume | ( | void | ) | const |
Return box volume. Overridden from parent class to take into account the possibility of scaling in the transformation matrix.
References SbDPMatrix::det3(), SbDPMatrix::det4(), SbBox3d::getVolume(), SbBox3d::hasVolume(), SbDPMatrix::inverse(), SoDebugError::postWarning(), project(), and SbXfBox3d().
Referenced by extendBy().
Copyright © 1998-2007 by Systems in Motion AS. All rights reserved.
Generated on Fri Feb 17 2017 for Coin by Doxygen. 1.8.13