Represents a cartesian 3D box. More...
#include <vgl_box_3d.h>
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. |
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
Definition at line 65 of file vgl_box_3d.h.
enum vgl_box_3d::point_type |
Definition at line 87 of file vgl_box_3d.h.
vgl_box_3d< Type >::vgl_box_3d | ( | ) |
Default constructor (creates empty box).
Definition at line 17 of file vgl_box_3d.txx.
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.
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.
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.
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.
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.
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.
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.
vgl_point_3d< Type > vgl_box_3d< Type >::centroid | ( | ) | const |
Get the centroid point.
Definition at line 145 of file vgl_box_3d.txx.
Type vgl_box_3d< Type >::centroid_x | ( | ) | const |
Get x component of centroid.
Definition at line 151 of file vgl_box_3d.txx.
Type vgl_box_3d< Type >::centroid_y | ( | ) | const |
Get y component of centroid.
Definition at line 158 of file vgl_box_3d.txx.
Type vgl_box_3d< Type >::centroid_z | ( | ) | const |
Get z component of centroid.
Definition at line 165 of file vgl_box_3d.txx.
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.
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.
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.
Type vgl_box_3d< Type >::depth | ( | ) | const |
Get depth of this box (= z dimension).
Definition at line 139 of file vgl_box_3d.txx.
void vgl_box_3d< Type >::empty | ( | ) |
Make the box empty.
Definition at line 419 of file vgl_box_3d.txx.
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.
Type vgl_box_3d< Type >::height | ( | ) | const |
Get height of this box (= y dimension).
Definition at line 133 of file vgl_box_3d.txx.
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.
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.
Type vgl_box_3d< Type >::max_x | ( | ) | const [inline] |
Get max x.
Definition at line 131 of file vgl_box_3d.h.
Type vgl_box_3d< Type >::max_y | ( | ) | const [inline] |
Get max y.
Definition at line 133 of file vgl_box_3d.h.
Type vgl_box_3d< Type >::max_z | ( | ) | const [inline] |
Get max z.
Definition at line 135 of file vgl_box_3d.h.
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.
Type vgl_box_3d< Type >::min_x | ( | ) | const [inline] |
Get min x.
Definition at line 124 of file vgl_box_3d.h.
Type vgl_box_3d< Type >::min_y | ( | ) | const [inline] |
Get min y.
Definition at line 126 of file vgl_box_3d.h.
Type vgl_box_3d< Type >::min_z | ( | ) | const [inline] |
Get min z.
Definition at line 128 of file vgl_box_3d.h.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
void vgl_box_3d< Type >::set_depth | ( | Type | depth | ) |
Set depth (z), centroid unchanged.
Definition at line 234 of file vgl_box_3d.txx.
void vgl_box_3d< Type >::set_height | ( | Type | height | ) |
Set height (y), centroid unchanged.
Definition at line 227 of file vgl_box_3d.txx.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
void vgl_box_3d< Type >::set_width | ( | Type | width | ) |
Set width (x), centroid unchanged.
Definition at line 220 of file vgl_box_3d.txx.
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.
Type vgl_box_3d< Type >::volume | ( | ) | const [inline] |
Get volume of this box.
Definition at line 121 of file vgl_box_3d.h.
Type vgl_box_3d< Type >::width | ( | ) | const |
Get width of this box (= x dimension).
Definition at line 127 of file vgl_box_3d.txx.
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.
vcl_ostream & operator<< | ( | vcl_ostream & | s, |
vgl_orient_box_3d< Type > const & | p | ||
) | [related] |
Write box to stream.
vcl_ostream & operator<< | ( | vcl_ostream & | s, |
vgl_box_3d< Type > const & | p | ||
) | [related] |
Write box to stream.
vcl_istream & operator>> | ( | vcl_istream & | is, |
vgl_orient_box_3d< Type > & | p | ||
) | [related] |
Read box from stream.
vcl_istream & operator>> | ( | vcl_istream & | is, |
vgl_box_3d< Type > & | p | ||
) | [related] |
Read box from stream.
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
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.
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.
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.
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.
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.
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.
Type vgl_box_3d< Type >::max_pos_[3] [protected] |
Definition at line 254 of file vgl_box_3d.h.
Type vgl_box_3d< Type >::min_pos_[3] [protected] |
Definition at line 253 of file vgl_box_3d.h.