Public Types | Public Member Functions | Protected Attributes | Related Functions
vgl_box_3d< Type > Class Template Reference

Represents a cartesian 3D box. More...

#include <vgl_box_3d.h>

List of all members.

Public Types

enum  point_type { centre = 0, min_pos, max_pos }

Public Member Functions

 vgl_box_3d ()
 Default constructor (creates empty box).
 vgl_box_3d (Type const corner1[3], Type const corner2[3])
 Construct using two corner points.
 vgl_box_3d (vgl_point_3d< Type > const &corner1, vgl_point_3d< Type > const &corner2)
 Construct using two corner points.
 vgl_box_3d (Type xmin, Type ymin, Type zmin, Type xmax, Type ymax, Type zmax)
 Construct from ranges in x,y,z (take care with order of inputs).
 vgl_box_3d (Type const ref_point[3], Type width, Type height, Type depth, point_type)
 Construct a box sized width x height x depth at a given reference point.
 vgl_box_3d (vgl_point_3d< Type > const &ref_point, Type width, Type height, Type depth, point_type)
 Construct a box sized width x height x depth at a given reference point.
bool operator== (vgl_box_3d< Type > const &b) const
 Equality test.
Type width () const
 Get width of this box (= x dimension).
Type height () const
 Get height of this box (= y dimension).
Type depth () const
 Get depth of this box (= z dimension).
Type volume () const
 Get volume of this box.
Type min_x () const
 Get min x.
Type min_y () const
 Get min y.
Type min_z () const
 Get min z.
Type max_x () const
 Get max x.
Type max_y () const
 Get max y.
Type max_z () const
 Get max z.
vgl_point_3d< Type > centroid () const
 Get the centroid point.
Type centroid_x () const
 Get x component of centroid.
Type centroid_y () const
 Get y component of centroid.
Type centroid_z () const
 Get z component of centroid.
vgl_point_3d< Type > min_point () const
 Return lower left corner of box.
vgl_point_3d< Type > max_point () const
 Return upper right corner of box.
vcl_vector< vgl_point_3d< Type > > vertices () const
 Return the 8 vertices of the box.
bool is_empty () const
 Return true if this box is empty.
void add (vgl_point_3d< Type > const &p)
 Add a point to this box.
void add (vgl_box_3d< Type > const &b)
 Make the convex union of two boxes.
bool contains (vgl_point_3d< Type > const &p) const
 Return true iff the point p is inside this box.
bool contains (vgl_box_3d< Type > const &b) const
 Return true iff the corner points of b are inside this box.
bool contains (Type const &x, Type const &y, Type const &z) const
 Return true if (x,y,z) is inside this box, ie x_min <= x <= x_max etc.
void empty ()
 Make the box empty.
void set_min_x (Type m)
 Set min x ordinate of box (other sides unchanged).
void set_min_y (Type m)
 Set min y ordinate of box (other sides unchanged).
void set_min_z (Type m)
 Set min z ordinate of box (other sides unchanged).
void set_max_x (Type m)
 Set max x ordinate of box (other sides unchanged).
void set_max_y (Type m)
 Set max y ordinate of box (other sides unchanged).
void set_max_z (Type m)
 Set max z ordinate of box (other sides unchanged).
void set_centroid_x (Type cx)
 Move box so centroid lies at cx (size unchanged).
void set_centroid_y (Type cy)
 Move box so centroid lies at cy (size unchanged).
void set_centroid_z (Type cz)
 Move box so centroid lies at cz (size unchanged).
void set_width (Type width)
 Set width (x), centroid unchanged.
void set_height (Type height)
 Set height (y), centroid unchanged.
void set_depth (Type depth)
 Set depth (z), centroid unchanged.
void expand_about_centroid (Type expand)
 Add to width and height, centroid unchanged.
void scale_about_centroid (double s)
 Scale width, height and depth, centroid unchanged.
void scale_about_origin (double s)
 Scale width, height and depth, keeping scaled position of origin unchanged.
void set_min_position (Type const m[3])
 Modify min corner point. Max corner point only changed if necessary to avoid empty box.
void set_max_position (Type const m[3])
 Modify max corner point. Min corner point only changed if necessary to avoid empty box.
void set_min_point (vgl_point_3d< Type > const &min_pt)
 Modify min corner point. Max corner point only changed if necessary to avoid empty box.
void set_max_point (vgl_point_3d< Type > const &max_pt)
 Modify max corner point. Min corner point only changed if necessary to avoid empty box.
void set_centroid (Type const c[3])
 Move box so centroid lies at c (size unchanged).
void set_centroid (vgl_point_3d< Type > const &c)
 Move box so centroid lies at c (size unchanged).
vcl_ostream & print (vcl_ostream &) const
 Write "<vgl_box_3d x0,y0,z0 to x1,y1,z1>" to stream.
vcl_ostream & write (vcl_ostream &) const
 Write "x0 y0 z0 x1 y1 z1(endl)" to stream.
vcl_istream & read (vcl_istream &)
 Read x0,y0,z0,x1,y1,z1 from stream.

Protected Attributes

Type min_pos_ [3]
Type max_pos_ [3]

Related Functions

(Note that these are not member functions.)

template<class T >
bool vgl_intersection (vgl_box_3d< T > const &b, vcl_list< vgl_point_3d< T > > &p)
 Return true if the box and polygon intersect in 3-d, regions include boundaries.
template<class Type >
vcl_ostream & operator<< (vcl_ostream &s, vgl_orient_box_3d< Type > const &p)
 Write box to stream.
template<class Type >
vcl_istream & operator>> (vcl_istream &is, vgl_orient_box_3d< Type > &p)
 Read box from stream.
template<class Type >
vcl_ostream & operator<< (vcl_ostream &s, vgl_box_3d< Type > const &p)
 Write box to stream.
template<class Type >
vcl_istream & operator>> (vcl_istream &is, vgl_box_3d< Type > &p)
 Read box from stream.
template<class T >
bool vgl_intersection (vgl_box_3d< T > const &b, vgl_point_3d< T > const &p)
 Return true if the point lies inside the box.
template<class T >
bool vgl_intersection (vgl_point_3d< T > const &p, vgl_box_3d< T > const &b)
 Return true if the point lies inside the box.
template<class T >
bool vgl_intersection (vgl_box_3d< T > const &b, vgl_plane_3d< T > const &plane)
 Return true if a box and plane intersect in 3D.
template<class T >
vgl_box_3d< T > vgl_intersection (vgl_box_3d< T > const &, vgl_box_3d< T > const &)
 Return the intersection of two boxes (which is itself either a box, or empty).
template<class T >
vcl_vector< vgl_point_3d< T > > vgl_intersection (vgl_box_3d< T > const &b, vcl_vector< vgl_point_3d< T > > const &p)
 Return the points from the list that lie inside the box.
template<class T >
vcl_vector< vgl_point_3d< T > > vgl_intersection (vcl_vector< vgl_point_3d< T > > const &p, vgl_box_3d< T > const &b)
 Return the points from the list that lie inside the box.

Detailed Description

template<class Type>
class vgl_box_3d< Type >

Represents a cartesian 3D box.

A 3d box with sides aligned with x, y and z axes. Supports operations required of a bounding box for geometric volume tests.

A box can be empty; this is what the default constructor creates, or what is left after applying the empty() method. Use the add() methods to enlarge a box, and use the contains() methods to check for inclusion of a point or an other box.

To make the convex union of two boxes, use box1.add(box2).

                                   MaxPosition
                         |<--width-->|
                         O-----------O  ---
                        /           /|   ^
                       /           / |   |
                      O-----------O  | height
                      |       o   |  |   |
                      |  centroid |  |   v
                      |           |  O  ---
       Y              |           | /   /_____depth
       |   Z          |           |/   /
       |  /           O-----------O  ---
       | /         MinPosition
       O-----X
   
See also:
vgl_box_2d

Definition at line 65 of file vgl_box_3d.h.


Member Enumeration Documentation

template<class Type>
enum vgl_box_3d::point_type
Enumerator:
centre 
min_pos 
max_pos 

Definition at line 87 of file vgl_box_3d.h.


Constructor & Destructor Documentation

template<class Type >
vgl_box_3d< Type >::vgl_box_3d ( )

Default constructor (creates empty box).

Definition at line 17 of file vgl_box_3d.txx.

template<class Type >
vgl_box_3d< Type >::vgl_box_3d ( Type const  corner1[3],
Type const  corner2[3] 
)

Construct using two corner points.

Definition at line 24 of file vgl_box_3d.txx.

template<class Type >
vgl_box_3d< Type >::vgl_box_3d ( vgl_point_3d< Type > const &  corner1,
vgl_point_3d< Type > const &  corner2 
)

Construct using two corner points.

Definition at line 34 of file vgl_box_3d.txx.

template<class Type >
vgl_box_3d< Type >::vgl_box_3d ( Type  xmin,
Type  ymin,
Type  zmin,
Type  xmax,
Type  ymax,
Type  zmax 
)

Construct from ranges in x,y,z (take care with order of inputs).

The x range is given by the 1st and 4th coordinates, the y range is given by the 2nd and 5th coordinates, the z range is given by the 3rd and 6th coordinates.

Definition at line 44 of file vgl_box_3d.txx.

template<class Type>
vgl_box_3d< Type >::vgl_box_3d ( Type const  ref_point[3],
Type  width,
Type  height,
Type  depth,
point_type   
)

Construct a box sized width x height x depth at a given reference point.

The box will either be centered at ref_point or will have ref_point as its min-position or max-position, as specified by the 5th argument.

template<class Type>
vgl_box_3d< Type >::vgl_box_3d ( vgl_point_3d< Type > const &  ref_point,
Type  width,
Type  height,
Type  depth,
point_type   
)

Construct a box sized width x height x depth at a given reference point.

The box will either be centered at ref_point or will have ref_point as its min-position or max-position, as specified by the 5th argument.


Member Function Documentation

template<class Type >
void vgl_box_3d< Type >::add ( vgl_point_3d< Type > const &  p)

Add a point to this box.

Do this by possibly enlarging the box so that the point just falls within the box. Adding a point to an empty box makes it a size zero box only containing p.

Definition at line 370 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::add ( vgl_box_3d< Type > const &  b)

Make the convex union of two boxes.

Do this by possibly enlarging this box so that the corner points of the given box just fall within the box. Adding an empty box does not change the current box.

Definition at line 394 of file vgl_box_3d.txx.

template<class Type >
vgl_point_3d< Type > vgl_box_3d< Type >::centroid ( ) const

Get the centroid point.

Definition at line 145 of file vgl_box_3d.txx.

template<class Type >
Type vgl_box_3d< Type >::centroid_x ( ) const

Get x component of centroid.

Definition at line 151 of file vgl_box_3d.txx.

template<class Type >
Type vgl_box_3d< Type >::centroid_y ( ) const

Get y component of centroid.

Definition at line 158 of file vgl_box_3d.txx.

template<class Type >
Type vgl_box_3d< Type >::centroid_z ( ) const

Get z component of centroid.

Definition at line 165 of file vgl_box_3d.txx.

template<class Type >
bool vgl_box_3d< Type >::contains ( vgl_point_3d< Type > const &  p) const

Return true iff the point p is inside this box.

Definition at line 403 of file vgl_box_3d.txx.

template<class Type >
bool vgl_box_3d< Type >::contains ( vgl_box_3d< Type > const &  b) const

Return true iff the corner points of b are inside this box.

Definition at line 410 of file vgl_box_3d.txx.

template<class Type>
bool vgl_box_3d< Type >::contains ( Type const &  x,
Type const &  y,
Type const &  z 
) const [inline]

Return true if (x,y,z) is inside this box, ie x_min <= x <= x_max etc.

Definition at line 180 of file vgl_box_3d.h.

template<class Type >
Type vgl_box_3d< Type >::depth ( ) const

Get depth of this box (= z dimension).

Definition at line 139 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::empty ( )

Make the box empty.

Definition at line 419 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::expand_about_centroid ( Type  expand)

Add to width and height, centroid unchanged.

Will move each side by expand / 2.

Definition at line 243 of file vgl_box_3d.txx.

template<class Type >
Type vgl_box_3d< Type >::height ( ) const

Get height of this box (= y dimension).

Definition at line 133 of file vgl_box_3d.txx.

template<class Type>
bool vgl_box_3d< Type >::is_empty ( ) const [inline]

Return true if this box is empty.

Definition at line 158 of file vgl_box_3d.h.

template<class Type >
vgl_point_3d< Type > vgl_box_3d< Type >::max_point ( ) const

Return upper right corner of box.

Definition at line 330 of file vgl_box_3d.txx.

template<class Type>
Type vgl_box_3d< Type >::max_x ( ) const [inline]

Get max x.

Definition at line 131 of file vgl_box_3d.h.

template<class Type>
Type vgl_box_3d< Type >::max_y ( ) const [inline]

Get max y.

Definition at line 133 of file vgl_box_3d.h.

template<class Type>
Type vgl_box_3d< Type >::max_z ( ) const [inline]

Get max z.

Definition at line 135 of file vgl_box_3d.h.

template<class Type >
vgl_point_3d< Type > vgl_box_3d< Type >::min_point ( ) const

Return lower left corner of box.

Definition at line 323 of file vgl_box_3d.txx.

template<class Type>
Type vgl_box_3d< Type >::min_x ( ) const [inline]

Get min x.

Definition at line 124 of file vgl_box_3d.h.

template<class Type>
Type vgl_box_3d< Type >::min_y ( ) const [inline]

Get min y.

Definition at line 126 of file vgl_box_3d.h.

template<class Type>
Type vgl_box_3d< Type >::min_z ( ) const [inline]

Get min z.

Definition at line 128 of file vgl_box_3d.h.

template<class Type>
bool vgl_box_3d< Type >::operator== ( vgl_box_3d< Type > const &  b) const [inline]

Equality test.

Definition at line 104 of file vgl_box_3d.h.

template<class Type >
vcl_ostream & vgl_box_3d< Type >::print ( vcl_ostream &  s) const

Write "<vgl_box_3d x0,y0,z0 to x1,y1,z1>" to stream.

Definition at line 312 of file vgl_box_3d.txx.

template<class Type >
vcl_istream & vgl_box_3d< Type >::read ( vcl_istream &  s)

Read x0,y0,z0,x1,y1,z1 from stream.

Definition at line 360 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::scale_about_centroid ( double  s)

Scale width, height and depth, centroid unchanged.

Definition at line 253 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::scale_about_origin ( double  s)

Scale width, height and depth, keeping scaled position of origin unchanged.

Definition at line 263 of file vgl_box_3d.txx.

template<class Type>
void vgl_box_3d< Type >::set_centroid ( Type const  c[3]) [inline]

Move box so centroid lies at c (size unchanged).

Definition at line 235 of file vgl_box_3d.h.

template<class Type>
void vgl_box_3d< Type >::set_centroid ( vgl_point_3d< Type > const &  c) [inline]

Move box so centroid lies at c (size unchanged).

Definition at line 237 of file vgl_box_3d.h.

template<class Type >
void vgl_box_3d< Type >::set_centroid_x ( Type  cx)

Move box so centroid lies at cx (size unchanged).

Definition at line 172 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::set_centroid_y ( Type  cy)

Move box so centroid lies at cy (size unchanged).

Definition at line 181 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::set_centroid_z ( Type  cz)

Move box so centroid lies at cz (size unchanged).

Definition at line 190 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::set_depth ( Type  depth)

Set depth (z), centroid unchanged.

Definition at line 234 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::set_height ( Type  height)

Set height (y), centroid unchanged.

Definition at line 227 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::set_max_point ( vgl_point_3d< Type > const &  max_pt)

Modify max corner point. Min corner point only changed if necessary to avoid empty box.

Definition at line 304 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::set_max_position ( Type const  m[3])

Modify max corner point. Min corner point only changed if necessary to avoid empty box.

Definition at line 285 of file vgl_box_3d.txx.

template<class Type>
void vgl_box_3d< Type >::set_max_x ( Type  m) [inline]

Set max x ordinate of box (other sides unchanged).

Definition at line 197 of file vgl_box_3d.h.

template<class Type>
void vgl_box_3d< Type >::set_max_y ( Type  m) [inline]

Set max y ordinate of box (other sides unchanged).

Definition at line 199 of file vgl_box_3d.h.

template<class Type>
void vgl_box_3d< Type >::set_max_z ( Type  m) [inline]

Set max z ordinate of box (other sides unchanged).

Definition at line 201 of file vgl_box_3d.h.

template<class Type >
void vgl_box_3d< Type >::set_min_point ( vgl_point_3d< Type > const &  min_pt)

Modify min corner point. Max corner point only changed if necessary to avoid empty box.

Definition at line 296 of file vgl_box_3d.txx.

template<class Type >
void vgl_box_3d< Type >::set_min_position ( Type const  m[3])

Modify min corner point. Max corner point only changed if necessary to avoid empty box.

Definition at line 274 of file vgl_box_3d.txx.

template<class Type>
void vgl_box_3d< Type >::set_min_x ( Type  m) [inline]

Set min x ordinate of box (other sides unchanged).

Definition at line 190 of file vgl_box_3d.h.

template<class Type>
void vgl_box_3d< Type >::set_min_y ( Type  m) [inline]

Set min y ordinate of box (other sides unchanged).

Definition at line 192 of file vgl_box_3d.h.

template<class Type>
void vgl_box_3d< Type >::set_min_z ( Type  m) [inline]

Set min z ordinate of box (other sides unchanged).

Definition at line 194 of file vgl_box_3d.h.

template<class Type >
void vgl_box_3d< Type >::set_width ( Type  width)

Set width (x), centroid unchanged.

Definition at line 220 of file vgl_box_3d.txx.

template<class Type >
vcl_vector< vgl_point_3d< Type > > vgl_box_3d< Type >::vertices ( ) const

Return the 8 vertices of the box.

Definition at line 337 of file vgl_box_3d.txx.

template<class Type>
Type vgl_box_3d< Type >::volume ( ) const [inline]

Get volume of this box.

Definition at line 121 of file vgl_box_3d.h.

template<class Type >
Type vgl_box_3d< Type >::width ( ) const

Get width of this box (= x dimension).

Definition at line 127 of file vgl_box_3d.txx.

template<class Type >
vcl_ostream & vgl_box_3d< Type >::write ( vcl_ostream &  s) const

Write "x0 y0 z0 x1 y1 z1(endl)" to stream.

Definition at line 353 of file vgl_box_3d.txx.


Friends And Related Function Documentation

template<class Type >
vcl_ostream & operator<< ( vcl_ostream &  s,
vgl_orient_box_3d< Type > const &  p 
) [related]

Write box to stream.

template<class Type >
vcl_ostream & operator<< ( vcl_ostream &  s,
vgl_box_3d< Type > const &  p 
) [related]

Write box to stream.

template<class Type >
vcl_istream & operator>> ( vcl_istream &  is,
vgl_orient_box_3d< Type > &  p 
) [related]

Read box from stream.

template<class Type >
vcl_istream & operator>> ( vcl_istream &  is,
vgl_box_3d< Type > &  p 
) [related]

Read box from stream.

template<class T >
bool vgl_intersection ( vgl_box_3d< T > const &  b,
vcl_list< vgl_point_3d< T > > &  p 
) [related]

Return true if the box and polygon intersect in 3-d, regions include boundaries.

Polygon is represented as an ordered vector of 3-d points

template<class T >
bool vgl_intersection ( vgl_box_3d< T > const &  b,
vgl_point_3d< T > const &  p 
) [related]

Return true if the point lies inside the box.

Definition at line 213 of file vgl_intersection.h.

template<class T >
bool vgl_intersection ( vgl_point_3d< T > const &  p,
vgl_box_3d< T > const &  b 
) [related]

Return true if the point lies inside the box.

Definition at line 220 of file vgl_intersection.h.

template<class T >
bool vgl_intersection ( vgl_box_3d< T > const &  b,
vgl_plane_3d< T > const &  plane 
) [related]

Return true if a box and plane intersect in 3D.

Definition at line 198 of file vgl_intersection.txx.

template<class T >
vgl_box_3d< T > vgl_intersection ( vgl_box_3d< T > const &  b1,
vgl_box_3d< T > const &  b2 
) [related]

Return the intersection of two boxes (which is itself either a box, or empty).

Definition at line 230 of file vgl_intersection.txx.

template<class T >
vcl_vector< vgl_point_3d< T > > vgl_intersection ( vgl_box_3d< T > const &  b,
vcl_vector< vgl_point_3d< T > > const &  p 
) [related]

Return the points from the list that lie inside the box.

Definition at line 985 of file vgl_intersection.txx.

template<class T >
vcl_vector< vgl_point_3d< T > > vgl_intersection ( vcl_vector< vgl_point_3d< T > > const &  p,
vgl_box_3d< T > const &  b 
) [related]

Return the points from the list that lie inside the box.

Definition at line 999 of file vgl_intersection.txx.


Member Data Documentation

template<class Type>
Type vgl_box_3d< Type >::max_pos_[3] [protected]

Definition at line 254 of file vgl_box_3d.h.

template<class Type>
Type vgl_box_3d< Type >::min_pos_[3] [protected]

Definition at line 253 of file vgl_box_3d.h.


The documentation for this class was generated from the following files: