LSSTApplications
20.0.0
LSSTDataManagementBasePackage
|
A floating-point coordinate rectangle geometry. More...
#include <Box.h>
Public Types | |
typedef Point2D | Point |
typedef Extent2D | Extent |
typedef double | Element |
using | Interval = IntervalD |
Public Member Functions | |
Box2D () noexcept | |
Construct an empty box. More... | |
Box2D (Point2D const &minimum, Point2D const &maximum, bool invert=true) noexcept | |
Construct a box from its minimum and maximum points. More... | |
Box2D (Point2D const &corner, Extent2D const &dimensions, bool invert=true) noexcept | |
Construct a box from one corner and dimensions. More... | |
Box2D (Interval const &x, Interval const &y) | |
Construct a box from a pair of intervals. More... | |
Box2D (Box2I const &other) noexcept | |
Construct a floating-point box from an integer box. More... | |
Box2D (Box2D const &) noexcept=default | |
Standard copy constructor. More... | |
Box2D (Box2D &&) noexcept=default | |
~Box2D () noexcept=default | |
void | swap (Box2D &other) noexcept |
Box2D & | operator= (Box2D const &) noexcept=default |
Standard assignment operator. More... | |
Box2D & | operator= (Box2D &&) noexcept=default |
Min/Max Accessors | |
Return the minimum (inclusive) and maximum (exclusive) coordinates of the box. | |
Point2D const | getMin () const noexcept |
double | getMinX () const noexcept |
double | getMinY () const noexcept |
Point2D const | getMax () const noexcept |
double | getMaxX () const noexcept |
double | getMaxY () const noexcept |
Size Accessors | |
Return the size of the box. | |
Extent2D const | getDimensions () const noexcept |
1-d interval accessors More... | |
double | getWidth () const noexcept |
1-d interval accessors More... | |
double | getHeight () const noexcept |
1-d interval accessors More... | |
double | getArea () const noexcept |
1-d interval accessors More... | |
Interval | getX () const |
1-d interval accessors More... | |
Interval | getY () const |
1-d interval accessors More... | |
Static Public Member Functions | |
static Box2D | makeCenteredBox (Point2D const ¢er, Extent const &size) noexcept |
Create a box centered on a particular point. More... | |
Static Public Attributes | |
static double const | EPSILON = std::numeric_limits<double>::epsilon() * 2 |
Value the maximum coordinate is multiplied by to increase it by the smallest possible amount. More... | |
static double const | INVALID = std::numeric_limits<double>::quiet_NaN() |
Value used to specify undefined coordinate values. More... | |
Center Accessors | |
Point2D const | getCenter () const noexcept |
Return true if the box contains no points. More... | |
double | getCenterX () const noexcept |
Return true if the box contains no points. More... | |
double | getCenterY () const noexcept |
Return true if the box contains no points. More... | |
bool | isEmpty () const noexcept |
Return true if the box contains no points. More... | |
bool | contains (Point2D const &point) const noexcept |
Return true if the box contains the point. More... | |
bool | contains (Element x, Element y) const noexcept |
Return true if the box contains no points. More... | |
bool | contains (Box2D const &other) const |
Return true if all points contained by other are also contained by this. More... | |
bool | overlaps (Box2D const &other) const noexcept |
Return true if any points in other are also in this. More... | |
bool | intersects (Box2D const &other) const noexcept |
Return true if the box contains no points. More... | |
bool | isDisjointFrom (Box2D const &other) const noexcept |
Return true if there are no points in both this and other . More... | |
void | grow (double buffer) |
Increase the size of the box by the given buffer amount in all directions. More... | |
void | grow (Extent2D const &buffer) |
Increase the size of the box by the given buffer amount in each direction. More... | |
void | shift (Extent2D const &offset) |
Shift the position of the box by the given offset. More... | |
void | flipLR (float xExtent) |
Flip a bounding box about the y-axis given a parent box of extent (xExtent). More... | |
void | flipTB (float yExtent) |
Flip a bounding box about the x-axis given a parent box of extent (yExtent). More... | |
void | include (Point2D const &point) noexcept |
Expand this to ensure that this->contains(point). More... | |
void | include (Box2D const &other) noexcept |
Expand this to ensure that this->contains(other). More... | |
void | clip (Box2D const &other) noexcept |
Shrink this to ensure that other.contains(*this) . More... | |
Box2D | dilatedBy (Extent const &buffer) const |
Increase the size of the box by the given amount(s) on all sides (returning a new object). More... | |
Box2D | dilatedBy (Element buffer) const |
Return true if the box contains no points. More... | |
Box2D | erodedBy (Extent const &buffer) const |
Decrease the size of the box by the given amount(s) on all sides (returning a new object). More... | |
Box2D | erodedBy (Element buffer) const |
Return true if the box contains no points. More... | |
Box2D | shiftedBy (Extent const &offset) const |
Shift the position of the box by the given offset (returning a new object). More... | |
Box2D | reflectedAboutX (Element x) const |
Reflect the box about a vertical line (returning a new object). More... | |
Box2D | reflectedAboutY (Element y) const |
Reflect the box about a horizontal line (returning a new object). More... | |
Box2D | expandedTo (Point const &other) const |
Expand a box to ensure that contains(other) is true (returning a new object). More... | |
Box2D | expandedTo (Box2D const &other) const |
Expand a box to ensure that contains(other) is true (returning a new object). More... | |
Box2D | clippedTo (Box2D const &other) const |
Shrink a box to ensure that it is contained by other (returning a new object). More... | |
bool | operator== (Box2D const &other) const noexcept |
Compare two boxes for equality. More... | |
bool | operator!= (Box2D const &other) const noexcept |
Compare two boxes for equality. More... | |
std::size_t | hash_value () const noexcept |
Return a hash of this object. More... | |
std::vector< Point2D > | getCorners () const |
Get the corner points. More... | |
std::string | toString () const |
Return true if the box contains no points. More... | |
A floating-point coordinate rectangle geometry.
Box2D is a half-open (minimum is inclusive, maximum is exclusive) box. A box never has negative dimensions; the empty box is defined to zero-size dimensions and its minimum and maximum values set to NaN. Only the empty box may have zero-size dimensions.
typedef double lsst::geom::Box2D::Element |
typedef Extent2D lsst::geom::Box2D::Extent |
using lsst::geom::Box2D::Interval = IntervalD |
typedef Point2D lsst::geom::Box2D::Point |
|
noexcept |
|
noexcept |
Construct a box from its minimum and maximum points.
If any(minimum == maximum), the box will always be empty (even if invert==true).
[in] | minimum | Minimum (lower left) coordinate (inclusive). |
[in] | maximum | Maximum (upper right) coordinate (exclusive). |
[in] | invert | If true (default), swap the minimum and maximum coordinates if minimum > maximum instead of creating an empty box. |
Definition at line 276 of file Box.cc.
|
noexcept |
Construct a box from one corner and dimensions.
[in] | corner | Reference coordinate (inclusive). This is the lower left corner if both dimensions are positive, but a right corner or upper corner if the corresponding dimension is negative and invert is set. |
[in] | dimensions | Box dimensions. If either dimension coordinate is 0, the box will be empty. |
[in] | invert | If true (default), invert any negative dimensions instead of creating an empty box. |
Definition at line 293 of file Box.cc.
|
explicitnoexcept |
Construct a floating-point box from an integer box.
Integer to floating-point box conversion is based on the concept that a pixel is not an infinitesimal point but rather a square of unit size centered on integer-valued coordinates. While the output floating-point box thus has the same dimensions as the input integer box, its minimum/maximum coordinates are 0.5 smaller/greater.
|
defaultnoexcept |
Standard copy constructor.
|
defaultnoexcept |
|
defaultnoexcept |
|
noexcept |
bool lsst::geom::Box2D::contains | ( | Box2D const & | other | ) | const |
|
noexcept |
Increase the size of the box by the given amount(s) on all sides (returning a new object).
If buffer
is negative, this is equivalent to eroding by -buffer
.
If the final size of the box is less than zero in either dimension the new box will empty.
Empty boxes remain empty after dilation. Infinite bounds are unaffected by dilation.
lsst::pex::exceptions::InvalidParameterError | Thrown if buffer is not finite. |
Decrease the size of the box by the given amount(s) on all sides (returning a new object).
If buffer
is negative, this is equivalent to dilating by -buffer
.
If the final size of the box is less than zero in either dimension the new box will empty.
Empty boxes remain empty after erosion. Infinite bounds are unaffected by erosion.
lsst::pex::exceptions::InvalidParameterError | Thrown if buffer is not finite. |
Definition at line 671 of file Box.h.
Expand a box to ensure that contains(other)
is true (returning a new object).
Expanding an empty box with a second box is equivalent to assignment.
Expand a box to ensure that contains(other)
is true (returning a new object).
Expanding an empty box with a single point yields a box with dimensions == (0, 0)
at that point.
lsst::pex::exceptions::InvalidParameterError | Thrown if other is not finite. |
void lsst::geom::Box2D::flipLR | ( | float | xExtent | ) |
void lsst::geom::Box2D::flipTB | ( | float | yExtent | ) |
|
inlinenoexcept |
1-d interval accessors
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
std::vector< Point2D > lsst::geom::Box2D::getCorners | ( | ) | const |
Get the corner points.
The order is counterclockise, starting from the lower left corner, i.e.: (minX, minY), (maxX, maxY), (maxX, maxX), (minX, maxY)
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inline |
|
inline |
|
inline |
void lsst::geom::Box2D::grow | ( | Extent2D const & | buffer | ) |
Increase the size of the box by the given buffer amount in each direction.
If a negative buffer is passed and the final size of the box is less than or equal to zero, the box will be made empty.
|
noexcept |
|
noexcept |
|
noexcept |
|
inlinenoexcept |
|
noexcept |
|
inlinenoexcept |
|
staticnoexcept |
Create a box centered on a particular point.
center | The desired center of the box. |
size | The desired width and height (in that order) of the box. |
size
is positive, a box with size size
; otherwise, an empty box. If the returned box is not empty, it shall be centered on center
. Behavior is undefined if either center
or size
is non-finite. Definition at line 316 of file Box.cc.
|
noexcept |
|
noexcept |
|
noexcept |
Return true if any points in other are also in this.
Any overlap operation involving an empty box returns false.
void lsst::geom::Box2D::shift | ( | Extent2D const & | offset | ) |
Shift the position of the box by the given offset (returning a new object).
Empty boxes remain empty when shifted. Infinite bounds are unaffected by shifting.
lsst::pex::exceptions::InvalidParameterError | Thrown if offset is not finite. |
|
inlinenoexcept |
|
inline |
|
static |
|
static |