# Ticket #126: 4eb768c0cccc.patch

File 4eb768c0cccc.patch, 9.6 KB (added by Peter Kovacs, 12 years ago)
• ## lemon/dim2.h

# HG changeset patch
# User Peter Kovacs <kpeter@inf.elte.hu>
# Date 1219827855 -7200
# Node ID 4eb768c0cccc2488ee56780c41c5c62534e9b646
# Parent  d0aae16df1bb28a8cce519d53b1004399b71d9a7
Rename BoundingBox to Box (ticket #126)

diff -r d0aae16df1bb -r 4eb768c0cccc lemon/dim2.h
 a /// The class \ref lemon::dim2::Point "dim2::Point" implements /// a two dimensional vector with the usual operations. /// /// The class \ref lemon::dim2::BoundingBox "dim2::BoundingBox" /// can be used to determine /// The class \ref lemon::dim2::Box "dim2::Box" can be used to determine /// the rectangular bounding box of a set of /// \ref lemon::dim2::Point "dim2::Point"'s. /// \addtogroup misc /// @{ /// A simple two dimensional vector (plain vector) implementation /// Two dimensional vector (plain vector) /// A simple two dimensional vector (plain vector) implementation /// with the usual vector operations. /// A class to calculate or store the bounding box of plain vectors. /// Bounding box of plain vectors (\ref Point points). /// A class to calculate or store the bounding box of plain vectors. /// template class BoundingBox { /// A class to calculate or store the bounding box of plain vectors /// (\ref Point points). template class Box { Point _bottom_left, _top_right; bool _empty; public: ///Default constructor: creates an empty bounding box BoundingBox() { _empty = true; } ///Default constructor: creates an empty box Box() { _empty = true; } ///Construct an instance from one point BoundingBox(Point a) { ///Construct a box from one point Box(Point a) { _bottom_left = _top_right = a; _empty = false; } ///Construct an instance from two points ///Construct a box from two points ///Construct an instance from two points. ///Construct a box from two points. ///\param a The bottom left corner. ///\param b The top right corner. ///\warning The coordinates of the bottom left corner must be no more ///than those of the top right one. BoundingBox(Point a,Point b) Box(Point a,Point b) { _bottom_left = a; _top_right = b; _empty = false; } ///Construct an instance from four numbers ///Construct a box from four numbers ///Construct an instance from four numbers. ///Construct a box from four numbers. ///\param l The left side of the box. ///\param b The bottom of the box. ///\param r The right side of the box. ///\param t The top of the box. ///\warning The left side must be no more than the right side and ///bottom must be no more than the top. BoundingBox(T l,T b,T r,T t) Box(T l,T b,T r,T t) { _bottom_left=Point(l,b); _top_right=Point(r,t); _empty = false; } ///Return \c true if the bounding box is empty. ///Return \c true if the box is empty. ///Return \c true if the bounding box is empty (i.e. return \c false ///Return \c true if the box is empty (i.e. return \c false ///if at least one point was added to the box or the coordinates of ///the box were set). /// ///The coordinates of an empty bounding box are not defined. ///The coordinates of an empty box are not defined. bool empty() const { return _empty; } ///Make the BoundingBox empty ///Make the box empty void clear() { _empty = true; } ///Give back the bottom left corner of the box ///Give back the bottom left corner of the box. ///If the bounding box is empty, then the return value is not defined. ///If the box is empty, then the return value is not defined. Point bottomLeft() const { return _bottom_left; } ///Give back the top right corner of the box ///Give back the top right corner of the box. ///If the bounding box is empty, then the return value is not defined. ///If the box is empty, then the return value is not defined. Point topRight() const { return _top_right; } ///Give back the bottom right corner of the box ///Give back the bottom right corner of the box. ///If the bounding box is empty, then the return value is not defined. ///If the box is empty, then the return value is not defined. Point bottomRight() const { return Point(_top_right.x,_bottom_left.y); } ///Give back the top left corner of the box ///Give back the top left corner of the box. ///If the bounding box is empty, then the return value is not defined. ///If the box is empty, then the return value is not defined. Point topLeft() const { return Point(_bottom_left.x,_top_right.y); } ///Give back the bottom of the box ///Give back the bottom of the box. ///If the bounding box is empty, then the return value is not defined. ///If the box is empty, then the return value is not defined. T bottom() const { return _bottom_left.y; } ///Give back the top of the box ///Give back the top of the box. ///If the bounding box is empty, then the return value is not defined. ///If the box is empty, then the return value is not defined. T top() const { return _top_right.y; } ///Give back the left side of the box ///Give back the left side of the box. ///If the bounding box is empty, then the return value is not defined. ///If the box is empty, then the return value is not defined. T left() const { return _bottom_left.x; } /// Give back the right side of the box /// Give back the right side of the box. ///If the bounding box is empty, then the return value is not defined. ///If the box is empty, then the return value is not defined. T right() const { return _top_right.x; } ///Give back the height of the box ///Give back the height of the box. ///If the bounding box is empty, then the return value is not defined. ///If the box is empty, then the return value is not defined. T height() const { return _top_right.y-_bottom_left.y; } ///Give back the width of the box ///Give back the width of the box. ///If the bounding box is empty, then the return value is not defined. ///If the box is empty, then the return value is not defined. T width() const { return _top_right.x-_bottom_left.x; } ///Checks whether a point is inside a bounding box ///Checks whether a point is inside the box bool inside(const Point& u) const { if (_empty) return false; } } ///Increments a bounding box with a point ///Increments the box with a point ///Increments a bounding box with a point. ///Increments the box with a point. /// BoundingBox& add(const Point& u){ Box& add(const Point& u){ if (_empty) { _bottom_left = _top_right = u; _empty = false; return *this; } ///Increments a bounding box to contain another bounding box ///Increments the box to contain another box ///Increments a bounding box to contain another bounding box. ///Increments the box to contain another box. /// BoundingBox& add(const BoundingBox &u){ Box& add(const Box &u){ if ( !u.empty() ){ add(u._bottom_left); add(u._top_right); return *this; } ///Intersection of two bounding boxes ///Intersection of two boxes ///Intersection of two bounding boxes. ///Intersection of two boxes. /// BoundingBox operator&(const BoundingBox& u) const { BoundingBox b; Box operator&(const Box& u) const { Box b; if (_empty || u._empty) { b._empty = true; } else { return b; } };//class Boundingbox };//class Box ///Read a bounding box from a stream ///Read a box from a stream ///Read a bounding box from a stream. ///\relates BoundingBox ///Read a box from a stream. ///\relates Box template inline std::istream& operator>>(std::istream &is, BoundingBox& b) { inline std::istream& operator>>(std::istream &is, Box& b) { char c; Point p; if (is >> c) { return is; } ///Write a bounding box to a stream ///Write a box to a stream ///Write a bounding box to a stream. ///\relates BoundingBox ///Write a box to a stream. ///\relates Box template inline std::ostream& operator<<(std::ostream &os, const BoundingBox& b) inline std::ostream& operator<<(std::ostream &os, const Box& b) { os << "(" << b.bottomLeft() << "," << b.topRight() << ")"; return os;