---
name: "SbXfBox3f"
section: "3iv"
platform: "linux"
package: "inventor-doc"
version: "2.1.6+ds-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SbXfBox3f/3iv"
---

# SbXfBox3f(3iv)

3D box with an associated transformation matrix

## NAME

SbXfBox3f — 3D box with an associated transformation matrix

## INHERITS FROM

SbBox3f \> SbXfBox3f

## SYNOPSIS

**#include \<Inventor/SbBox.h\>**

Methods from class SbXfBox3f:

	**SbXfBox3f()**\
 	**SbXfBox3f(const SbVec3f &\_min, const SbVec3f &\_max)**\
 	**SbXfBox3f(const SbBox3f &box)**\
 	**~SbXfBox3f()**\
 **void**	**setTransform(const SbMatrix &m)**\
 **const SbMatrix &**	**getTransform() const**\
 **const SbMatrix &**	**getInverse() const**\
 **SbVec3f**	**getCenter() const**\
 **void**	**extendBy(const SbVec3f &pt)**\
 **void**	**extendBy(const SbBox3f &bb)**\
 **void**	**extendBy(const SbXfBox3f &bb)**\
 **SbBool**	**intersect(const SbVec3f &pt) const**\
 **SbBool**	**intersect(const SbBox3f &bb) const**\
 **void**	**setBounds(float xmin, float ymin, float zmin, float xmax, float ymax, float zmax)**\
 **void**	**setBounds(const SbVec3f &\_min, const SbVec3f &\_max)**\
 **void**	**getBounds(float &xmin, float &ymin, float &zmin, float &xmax, float &ymax, float &zmax) const**\
 **void**	**getBounds(SbVec3f &\_min, SbVec3f &\_max) const**\
 **void**	**getOrigin(float &originX, float &originY, float &originZ)**\
 **void**	**getSize(float &sizeX, float &sizeY, float &sizeZ)**\
 **float**	**getVolume() const**\
 **void**	**makeEmpty()**\
 **SbBool**	**isEmpty() const**\
 **SbBool**	**hasVolume() const**\
 **void**	**getSpan(const SbVec3f &direction, float &dMin, float &dMax) const**\
 **void**	**transform(const SbMatrix &m)**\
 **SbBox3f**	**project() const**\
 **int**	**operator ==(const SbXfBox3f &b1, const SbXfBox3f &b2)**\
 **int**	**operator !=(const SbXfBox3f &b1, const SbXfBox3f &b2)**

Methods from class SbBox3f:

**const SbVec3f &**	**getMin()**\
 **const SbVec3f &**	**getMax()**

## DESCRIPTION

**A 3D box with an arbitrary transformation applied. This class is useful when a box will be transformed frequently; if an SbBox3f** is used for this purpose it will expand each time it is transformed in order to keep itself axis-aligned. Transformations can be accumulated on an **SbXfBox3f** without expanding the box, and after all transformations have been done, the box can be expanded to an axis-aligned box if necessary.

## METHODS

	**SbXfBox3f()**\
 	**SbXfBox3f(const SbVec3f &\_min, const SbVec3f &\_max)**\
 	**SbXfBox3f(const SbBox3f &box)**\
 	**~SbXfBox3f()**\
 Constructors and destructor.

**void**	**setTransform(const SbMatrix &m)**\
 Sets the transformation on the box.

**const SbMatrix &**	**getTransform() const**\
 **const SbMatrix &**	**getInverse() const**\
 Gets the transformation on the box, and its inverse.

**SbVec3f**	**getCenter() const**\
 Returns the center of the box.

**void**	**extendBy(const SbVec3f &pt)**\
 Extends the box (if necessary) to contain the given 3D point. If the box has had a non-identity transformation applied using the setTransform() method, the point is assumed to be in the transformed space. For example, the following code sequence:

```
SbXfBox3f bbox; bbox.extendBy(SbVec3f(0,0,0));
SbMatrix trans; trans.setTranslate(SbVec3f(1,1,1));
bbox.setTransform(trans);
bbox.extendBy(SbVec3f(0,0,0));
```

will result in a bounding box extending from (-1,-1,-1) to (0,0,0) in bbox'es local (untransformed) space.

**void**	**extendBy(const SbBox3f &bb)**\
 Extends the box (if necessary) to contain the given **SbBox3f**. If the box has had a non-identity transformation applied using the setTransform() method, the given **SbBox3f** is assumed to be in the transformed space.

**void**	**extendBy(const SbXfBox3f &bb)**\
 Extends the box (if necessary) to contain the given **SbXfBox3f**.

**SbBool**	**intersect(const SbVec3f &pt) const**\
 Returns TRUE if intersection of given point and this box is not empty.

**SbBool**	**intersect(const SbBox3f &bb) const**\
 Returns TRUE if intersection of given box and this box is not empty.

**void**	**setBounds(float xmin, float ymin, float zmin, float xmax, float ymax, float zmax)**\
 **void**	**setBounds(const SbVec3f &\_min, const SbVec3f &\_max)**\
 **void**	**getBounds(float &xmin, float &ymin, float &zmin, float &xmax, float &ymax, float &zmax) const**\
 **void**	**getBounds(SbVec3f &\_min, SbVec3f &\_max) const**\
 Set and get the bounds of the box.

**void**	**getOrigin(float &originX, float &originY, float &originZ)**\
 Returns origin (minimum point) of the box.

**void**	**getSize(float &sizeX, float &sizeY, float &sizeZ)**\
 Returns size of the box.

**float**	**getVolume() const**\
 Gives the volume of the box (0 for an empty box).

**void**	**makeEmpty()**\
 Sets the box to contain nothing.

**SbBool**	**isEmpty() const**\
 Checks if the box is empty (degenerate).

**SbBool**	**hasVolume() const**\
 Checks if the box has volume; i.e., all three dimensions have positive size.

**void**	**getSpan(const SbVec3f &direction, float &dMin, float &dMax) const**\
 Finds the extent of the box along a particular direction.

**void**	**transform(const SbMatrix &m)**\
 Transforms the box by the given matrix.

**SbBox3f**	**project() const**\
 Projects an **SbXfBox3f** to an **SbBox3f**

**int**	**operator ==(const SbXfBox3f &b1, const SbXfBox3f &b2)**\
 **int**	**operator !=(const SbXfBox3f &b1, const SbXfBox3f &b2)**\
 Equality comparisons.

## SEE ALSO

**SbBox3f, SbBox2f, SbBox2s, SbVec3f, SbVec2f, SbVec2s, SbMatrix, SoGetBoundingBoxAction**
