neuray API Programmer's Manual

mi::math::Bbox< T, DIM> Template Class Reference

[Bounding Box Class]

template< typename T, Size DIM>

class mi::math::Bbox< T, DIM>

Description

Axis-aligned N-dimensional bounding box class template of fixed dimension. A bounding box is represented by two mi::math::Vector vectors representing the elementwise minimal box corner, min, and the elementwise largest box corner, max.

An instantiation of the bounding box class template is a model of the STL container concept. It provides random access to its two vectors and corresponding random access iterators.

The template parameters have the following requirements:

  • T: an arithmetic type supporting + - * / == != < > <= >= .

  • DIM: a value > 0 of type mi::Size that defines the fixed dimension of the vectors used to represent the bounding box.

See also:

The underlying POD type mi::math::Bbox_struct.

For the free functions and operators available for bounding boxes see Bounding Box Class.

Public Enumerations

enum Uninitialized_tag{ UNINITIALIZED_TAG}
Enum type used to tag a special constructor that does not initialize the elements of the constructed bounding box.

Public Typedefs

typedef Bbox_struct< T, DIM> Pod_type
POD class corresponding to this bounding box.
typedef math::Vector< T, DIM> Vector
Corresponding vector type.
typedef Vector* const_pointer
Const pointer to vector.
typedef Vector& const_reference
Const reference to vector.
typedef Difference difference_type
Difference type, signed.
typedef Vector* pointer
Mutable pointer to vector.
typedef Vector& reference
Mutable reference to vector.
typedef Size size_type
Size type, unsigned.
typedef Vector value_type
Coordinate type.

Public Constructors

 Bbox()
Bounding box initialized to the empty space, see also the clear function. More...
 Bbox( Uninitialized_tag)
Bounding box with its elements not initialized.
 Bbox( const Bbox_struct < T , DIM >& bbox_struct)
Bounding box initialized from corresponding POD type.
 Bbox( const Vector& point)
Bounding box initialized to a single point.
 Bbox( const Vector& nmin, const Vector& nmax)
Bounding box initialized to the new extreme corner vectors, nmin and nmax.
 Bbox( T min_x, T max_x)
1D bounding box (interval) initialized to the new extreme corner vectors, (min_x) and (max_x). More...
 Bbox( T min_x, T min_y, T max_x, T max_y)
2D bounding box (interval) initialized to the new extreme corner vectors, (min_x,min_y) and (max_x,max_y). More...
 Bbox( T min_x, T min_y, T min_z, T max_x, T max_y, T max_z)
3D bounding box (interval) initialized to the new extreme corner vectors, (min_x,min_y,min_z) and (max_x,max_y,max_z). More...
template< typename InputIterator> Bbox( InputIterator first, InputIterator last)
Constructs a bounding box from a range [first, last) of items. More...
template< typename T2> Bbox( const Bbox < T2 , DIM >& other)
Template constructor that allows explicit conversions from other bounding boxes with assignment compatible element value type.

Public Member Functions

Bbox add_motionbox( const Bbox& vbox, T t) const
Returns the translation of this bounding box by vectors that are inside the scaled bounding box of vectors, i.e., t*vbox. More...
Vectorbegin()
Returns the pointer to the first vector, min.
const Vectorbegin() const
Returns the pointer to the first vector, min.
Vector center() const
Returns the center point of the bounding box.
void clear()
Reinitializes this bounding box to the empty space. More...
bool  contains( const Vector& vec) const
Returns true if the point is inside or on the boundary of the bounding box.
diagonal_length() const
Returns the length of the diagonal. More...
bool  empty() const
Returns true if the box is empty. More...
Vectorend()
Returns the past-the-end pointer. More...
const Vectorend() const
Returns the past-the-end pointer. More...
void insert( const Bbox& other)
Assigns the union of this bounding box and the other bounding box to this bounding box.
void insert( const Vector& point)
Assigns the union of this bounding box and the point to this bounding box.
template< typename InputIterator>void insert( InputIterator first, InputIterator last)
Inserts a range [first,last) of items into this bounding box. More...
bool  intersects( const Bbox& other) const
Returns true if this bounding box and the other bounding box intersect in their interiors or on their boundaries.
bool  is_line() const
Returns true the bounding box is an axis-aligned line. More...
bool  is_plane() const
Returns true the bounding box is an axis-aligned plane. More...
bool  is_point() const
Returns true the bounding box is a single point.
bool  is_volume() const
Returns true the bounding box has a volume. More...
Size largest_extent_index() const
Returns the index of the dimension in which the bounding box has its largest extent, i.e., 0=x, 1=y, 2=z.
 operator Bbox_struct< T, DIM >() const
Conversion to corresponding POD type.
Bboxoperator=( const Bbox& other)
Assignment.
Bboxoperator=( const Bbox_struct < T , DIM >& other)
Assignment from corresponding POD type.
Vectoroperator[]( Size i)
Returns the vector min for i==0, and the vector max for i==1.
const Vectoroperator[]( Size i) const
Returns the vector min for i==0, and the vector max for i==1.
void push_back( const Bbox& other)
Assigns the union of this bounding box and the other bounding box to this bounding box. More...
Size rank() const
Returns the rank of the bounding box. More...
void robust_grow( T eps = T(1.0e-5f))
Robustly grows the bounding box by a value computed automatically from the bounding box dimensions and location in space. More...
volume() const
Returns the volume of the bounding box.

Static Public Member Functions

static Size max_size()
Constant maximum size of the bounding box.
static Size size()
Constant size of the bounding box.

Public Variables

Vector max
Elementwise maximal bounding box corner.
Vector min
Elementwise minimal bounding box corner.

Static Public Variables

static const Size DIMENSION = DIM
Constant dimension of the vectors.
static const Size SIZE = 2
Constant size of the bounding box.

Typedefs

typedef Bbox_struct< T, DIM> mi::math::Bbox< T, DIM>::Pod_type

POD class corresponding to this bounding box.

typedef math::Vector< T, DIM> mi::math::Bbox< T, DIM>::Vector

Corresponding vector type.

typedef Vector* mi::math::Bbox< T, DIM>::const_pointer

Const pointer to vector.

typedef Vector& mi::math::Bbox< T, DIM>::const_reference

Const reference to vector.

typedef Difference mi::math::Bbox< T, DIM>::difference_type

Difference type, signed.

typedef Vector* mi::math::Bbox< T, DIM>::pointer

Mutable pointer to vector.

typedef Vector& mi::math::Bbox< T, DIM>::reference

Mutable reference to vector.

typedef Size mi::math::Bbox< T, DIM>::size_type

Size type, unsigned.

typedef Vector mi::math::Bbox< T, DIM>::value_type

Coordinate type.

Enums

enum mi::math::Bbox< T, DIM>::Uninitialized_tag

Enum type used to tag a special constructor that does not initialize the elements of the constructed bounding box.

Enumerator:

UNINITIALIZED_TAG
Enum value used to call a special constructor that does not initialize the elements of the constructed bounding box.

Constructors

mi::math::Bbox< T, DIM>::Bbox() [inline]

Bounding box initialized to the empty space, see also the clear function. The vector min is set elementwise to mi::base::numeric_traits<T>::max() and the vector max is set elementwise to mi::base::numeric_traits< T>::negative_max(). This initialization allows to insert points and other bounding boxes; a cleared bounding box will take the value of the first inserted point or bound box.

mi::math::Bbox< T, DIM>::Bbox( Uninitialized_tag) [inline, explicit]

Bounding box with its elements not initialized.

mi::math::Bbox< T, DIM>::Bbox( const Bbox_struct < T , DIM >& bbox_struct) [inline]

Bounding box initialized from corresponding POD type.

mi::math::Bbox< T, DIM>::Bbox( const Vector& point) [inline, explicit]

Bounding box initialized to a single point.

Parameters

point
point.
mi::math::Bbox< T, DIM>::Bbox( const Vector& nmin, const Vector& nmax) [inline]

Bounding box initialized to the new extreme corner vectors, nmin and nmax.

Parameters

nmin
min corner vector
nmax
max corner vector
mi::math::Bbox< T, DIM>::Bbox( T min_x, T max_x) [inline]

1D bounding box (interval) initialized to the new extreme corner vectors, (min_x) and (max_x).

Precondition:

DIM == 1

Parameters

min_x
x-coordinate of min corner vector
max_x
x coordinate of max corner vector
mi::math::Bbox< T, DIM>::Bbox( T min_x, T min_y, T max_x, T max_y) [inline]

2D bounding box (interval) initialized to the new extreme corner vectors, (min_x,min_y) and (max_x,max_y).

Precondition:

DIM == 2

Parameters

min_x
x-coordinate of min corner vector
min_y
y-coordinate of min corner vector
max_x
x coordinate of max corner vector
max_y
y coordinate of max corner vector
mi::math::Bbox< T, DIM>::Bbox( T min_x, T min_y, T min_z, T max_x, T max_y, T max_z) [inline]

3D bounding box (interval) initialized to the new extreme corner vectors, (min_x,min_y,min_z) and (max_x,max_y,max_z).

Precondition:

DIM == 3

Parameters

min_x
x-coordinate of min corner vector
min_y
y-coordinate of min corner vector
min_z
z-coordinate of min corner vector
max_x
x coordinate of max corner vector
max_y
y coordinate of max corner vector
max_z
z coordinate of max corner vector

template< typename InputIterator>

mi::math::Bbox< T, DIM>::Bbox( InputIterator first, InputIterator last) [inline]

Constructs a bounding box from a range [first, last) of items. The value type of InputIterator can be either Vector to insert points, or it can be Bbox to insert bounding boxes.

Parameters

first
first element of the sequence to insert
last
past-the-end position of sequence to insert

template< typename T2>

mi::math::Bbox< T, DIM>::Bbox( const Bbox < T2 , DIM >& other) [inline, explicit]

Template constructor that allows explicit conversions from other bounding boxes with assignment compatible element value type.

Member Functions

Bbox mi::math::Bbox< T, DIM>::add_motionbox( const Bbox& vbox, T t) const [inline]

Returns the translation of this bounding box by vectors that are inside the scaled bounding box of vectors, i.e., t*vbox.

Precondition:

this bounding box and vbox are not empty

Parameters

vbox
vector bounding box to add
t
scale parameter. A negative scale inverts vbox.
Vector* mi::math::Bbox< T, DIM>::begin() [inline]

Returns the pointer to the first vector, min.

const Vector* mi::math::Bbox< T, DIM>::begin() const [inline]

Returns the pointer to the first vector, min.

Vector mi::math::Bbox< T, DIM>::center() const [inline]

Returns the center point of the bounding box.

void mi::math::Bbox< T, DIM>::clear() [inline]

Reinitializes this bounding box to the empty space. The vector min is set elementwise to mi::base::numeric_traits<T>::max() and the vector max is set elementwise to mi::base::numeric_traits< T>::negative_max(). This initialization allows to insert points and other bounding boxes; a cleared bounding box will take the value of the first inserted point or bound box.

bool mi::math::Bbox< T, DIM>::contains( const Vector& vec) const [inline]

Returns true if the point is inside or on the boundary of the bounding box.

T mi::math::Bbox< T, DIM>::diagonal_length() const [inline]

Returns the length of the diagonal.

Precondition:

the bounding box is not empty

bool mi::math::Bbox< T, DIM>::empty() const [inline]

Returns true if the box is empty. For example, the box is empty after the default constructor or the clear() method call.

Vector* mi::math::Bbox< T, DIM>::end() [inline]

Returns the past-the-end pointer. The range [begin(),end()) forms the range [min,max].

const Vector* mi::math::Bbox< T, DIM>::end() const [inline]

Returns the past-the-end pointer. The range [begin(),end()) forms the range [min,max].

void mi::math::Bbox< T, DIM>::insert( const Bbox& other) [inline]

Assigns the union of this bounding box and the other bounding box to this bounding box.

void mi::math::Bbox< T, DIM>::insert( const Vector& point) [inline]

Assigns the union of this bounding box and the point to this bounding box.

template< typename InputIterator>

void mi::math::Bbox< T, DIM>::insert( InputIterator first, InputIterator last) [inline]

Inserts a range [first,last) of items into this bounding box. The value type of InputIterator can be either Vector to insert points, or it can be Bbox to insert bounding boxes.

Parameters

first
first element of the sequence to insert
last
past-the-end position of sequence to insert
bool mi::math::Bbox< T, DIM>::intersects( const Bbox& other) const [inline]

Returns true if this bounding box and the other bounding box intersect in their interiors or on their boundaries.

bool mi::math::Bbox< T, DIM>::is_line() const [inline]

Returns true the bounding box is an axis-aligned line.

Returns

true if rank() returns 1

bool mi::math::Bbox< T, DIM>::is_plane() const [inline]

Returns true the bounding box is an axis-aligned plane.

Returns

true if rank() returns 2

bool mi::math::Bbox< T, DIM>::is_point() const [inline]

Returns true the bounding box is a single point.

bool mi::math::Bbox< T, DIM>::is_volume() const [inline]

Returns true the bounding box has a volume.

Returns

true if rank() returns 3

Size mi::math::Bbox< T, DIM>::largest_extent_index() const [inline]

Returns the index of the dimension in which the bounding box has its largest extent, i.e., 0=x, 1=y, 2=z.

static Size mi::math::Bbox< T, DIM>::max_size() [inline, static]

Constant maximum size of the bounding box.

mi::math::Bbox< T, DIM>::operator Bbox_struct< T, DIM >() const [inline]

Conversion to corresponding POD type.

Bbox& mi::math::Bbox< T, DIM>::operator=( const Bbox& other) [inline]

Assignment.

Bbox& mi::math::Bbox< T, DIM>::operator=( const Bbox_struct < T , DIM >& other) [inline]

Assignment from corresponding POD type.

Vector& mi::math::Bbox< T, DIM>::operator[]( Size i) [inline]

Returns the vector min for i==0, and the vector max for i==1.

const Vector& mi::math::Bbox< T, DIM>::operator[]( Size i) const [inline]

Returns the vector min for i==0, and the vector max for i==1.

void mi::math::Bbox< T, DIM>::push_back( const Bbox& other) [inline]

Assigns the union of this bounding box and the other bounding box to this bounding box. Makes the bounding box compatible with the std::back_inserter function, which allows you to use STL functions, such as std::copy to compute the union of a sequence of bounding boxes.

Size mi::math::Bbox< T, DIM>::rank() const [inline]

Returns the rank of the bounding box.

Returns

0 if the bounding box is a point or empty, 1 if it is an axis-aligned line, 2 if it is an axis-aligned plane, and 3 if it has a volume.

void mi::math::Bbox< T, DIM>::robust_grow( T eps = T(1.0e-5f))

Robustly grows the bounding box by a value computed automatically from the bounding box dimensions and location in space. If a bounding box is far away from the origin, just enlarging the bounding box by eps * (largest box extent) may result in cancellation. To avoid cancellation problems, this method computes the value for enlarging the box by computing coordinatewise the sum of the absolute values of the min and max coordinates and the bounding box extent. It takes then the maximum of all these sums, multiplies it by eps, adds it to bbox.max and subtracts it from bbox.min, enlarging the bounding box by an equal amount on all sides. grow factor

static Size mi::math::Bbox< T, DIM>::size() [inline, static]

Constant size of the bounding box.

T mi::math::Bbox< T, DIM>::volume() const [inline]

Returns the volume of the bounding box.

Variables

const Size mi::math::Bbox< T, DIM>::DIMENSION = DIM [static]

Constant dimension of the vectors.

const Size mi::math::Bbox< T, DIM>::SIZE = 2 [static]

Constant size of the bounding box.

Vector mi::math::Bbox< T, DIM>::max

Elementwise maximal bounding box corner.

Vector mi::math::Bbox< T, DIM>::min

Elementwise minimal bounding box corner.