2D rectangle using 'double' precision coordinates. More...
#include <mi32/rect.h>

Public Member Functions | |
| DRECT2D (const LRECT2D &rect) | |
| DRECT2D (double xi, double yi, double xl, double yl) | |
| DRECT2D (const DPOINT2D &pt1, const DPOINT2D &pt2) | |
| DRECT2D (const DPOINT2D &pt) | |
| DRECT2D (const FPOINT2D &pt) | |
| DRECT2D () | |
| void | AlignToMultiple (double AlignSize, double RoundTolerance=.000001) |
| void | ClipTo (const DRECT2D &rect) |
| bool | ComputeEdgePoint (const DPOINT2D &OutsidePt, DPOINT2D &EdgePt) const |
| bool | Contains (const DRECT2D &rhs) const |
| bool | Contains (const DPOINT2D &pt) const |
| bool | Contains (double x, double y) const |
| void | Expand (const double xval, const double yval) |
| void | Expand (const double value) |
| void | Extend (const DPOINT2D &pt) |
| void | Extend (const DRECT2D &rect) |
| void | Extend (const double xval, const double yval) |
| double | GetArea () const |
| void | GetBottomLeft (DPOINT2D &ret) const |
| void | GetBottomRight (DPOINT2D &ret) const |
| void | GetCenter (DPOINT2D &ret) const |
| DPOINT2D | GetCenter () const |
| void | GetCorners (DPOINT3D *corners, bool ClosePoly=false, bool OrientCCW=false) const |
| void | GetCorners (DPOINT2D *corners, bool ClosePoly=false, bool OrientCCW=false) const |
| int | GetDimension () const |
| double | GetDistance (const DRECT2D &rect) const |
| double | GetHeight () const |
| double | GetMaxDistance (const DRECT2D &rect) const |
| double | GetMaxDistanceSquared (const DRECT2D &rect) const |
| DEPRECATED void | GetRect (LRECT2D &rect) const |
| void | GetRectRoundLimited (LRECT2D &rect) const |
| void | GetRectRoundNoLimit (LRECT2D &rect) const |
| void | GetRectRoundPositive (LRECT2D &rect) const |
| void | GetRectTruncate (LRECT2D &rect) const |
| void | GetSize (DPOINT2D &ret) const |
| void | GetTopLeft (DPOINT2D &ret) const |
| void | GetTopRight (DPOINT2D &ret) const |
| double | GetWidth () const |
| bool | IniRead (INIHANDLE IniHandle, const char *IniGroup, const char *IniName, const DRECT2D &dft) |
| bool | IniRead (INIHANDLE IniHandle, const char *IniGroup, const char *IniName) |
| void | IniWrite (INIHANDLE IniHandle, const char *IniGroup, const char *IniName) const |
| void | Intersect (const DRECT2D &rect) |
| bool | Intersects (const DRECT2D &rhs) const |
| bool | IsEquivalentTo (const DRECT2D &rhs, double threshold=0.0) const |
| bool | IsNonEmpty () const |
| bool | IsValid () const |
| void | Limit (DPOINT2D &point) const |
| DRECT2D & | operator= (const LRECT2D &rhs) |
| DRECT2D & | operator= (const DPOINT2D &pt) |
| bool | Overlaps (const DRECT2D &rhs) const |
| void | Set (double x1, double y1, double x2, double y2) |
| void | SetCorners (const DPOINT2D pt1, const DPOINT2D pt2) |
| void | SetInvalid () |
| void | SwapBytes () |
Public Attributes | |
| double | xinit |
| double | xlast |
| double | yinit |
| double | ylast |
2D rectangle using 'double' precision coordinates.
| DRECT2D::DRECT2D | ( | ) | [inline] |
Default constructor, initialize to "invalid" area.
Construct from two DPOINT2D's (or DPOINT3D's).
A regular ctor from DPOINT2D and then a call to Extend(DPOINT2D&) would use 6 assignments and 4 comparisons, this uses 2 compares and 4 assignments
| DRECT2D::DRECT2D | ( | double | xi, | |
| double | yi, | |||
| double | xl, | |||
| double | yl | |||
| ) | [inline] |
| void DRECT2D::AlignToMultiple | ( | double | AlignSize, | |
| double | RoundTolerance = .000001 | |||
| ) | [inline] |
Align rectangle to integer multiple of specified size.
| void DRECT2D::ClipTo | ( | const DRECT2D & | rect | ) | [inline] |
Clip this rectangle to specified rectangle.
Given the center point of the DRECT2D and the 'TestPt' which is outside the box, compute the point on the edge of the box which falls between the center point and the 'TestPt'.
| OutsidePt | Point outside of 'this' | |
| EdgePt | Point on rectangle edge RETURNED if 'true' returned, center of the box if 'false' is returned |
| bool DRECT2D::Contains | ( | const DRECT2D & | rhs | ) | const [inline] |
Check if contains specified point.
Reimplemented in DRECT3D.
| bool DRECT2D::Contains | ( | const DPOINT2D & | pt | ) | const [inline] |
Check if contains specified point.
| bool DRECT2D::Contains | ( | double | x, | |
| double | y | |||
| ) | const [inline] |
Check if contains specified point.
| void DRECT2D::Expand | ( | const double | xval, | |
| const double | yval | |||
| ) | [inline] |
Expand rectangle by specified amounts.
Reimplemented in DRECT3D.
| void DRECT2D::Expand | ( | const double | value | ) | [inline] |
Expand rectangle by specified amount.
Reimplemented in DRECT3D.
| void DRECT2D::Extend | ( | const DPOINT2D & | pt | ) | [inline] |
| void DRECT2D::Extend | ( | const DRECT2D & | rect | ) | [inline] |
Extend rectangle to encompass both rectangles.
Reimplemented in DRECT3D.
| void DRECT2D::Extend | ( | const double | xval, | |
| const double | yval | |||
| ) | [inline] |
Extend rectangle to include specified X,Y point.
Reimplemented in DRECT3D.
| double DRECT2D::GetArea | ( | ) | const [inline] |
Compute area of rectangle.
| void DRECT2D::GetBottomLeft | ( | DPOINT2D & | ret | ) | const [inline] |
Return bottom left point of rectangle.
| void DRECT2D::GetBottomRight | ( | DPOINT2D & | ret | ) | const [inline] |
Return bottom right point of rectangle.
| void DRECT2D::GetCenter | ( | DPOINT2D & | ret | ) | const [inline] |
Return center point of rectangle.
| DPOINT2D DRECT2D::GetCenter | ( | ) | const [inline] |
Return center point of rectangle.
Reimplemented in DRECT3D.
| void DRECT2D::GetCorners | ( | DPOINT3D * | corners, | |
| bool | ClosePoly = false, |
|||
| bool | OrientCCW = false | |||
| ) | const [inline] |
Get corners as array.
| corners | Array of points to fill in | |
| ClosePoly | Return "closed" polygon, corners[4] = corners[0] | |
| OrientCCW | Orient points in counterclockwise order for right-hand cartesian |
| void DRECT2D::GetCorners | ( | DPOINT2D * | corners, | |
| bool | ClosePoly = false, |
|||
| bool | OrientCCW = false | |||
| ) | const [inline] |
Get corners as array.
| corners | Array of points to fill in | |
| ClosePoly | Return "closed" polygon, corners[4] = corners[0] | |
| OrientCCW | Orient points in counterclockwise order for right-hand cartesian |
| int DRECT2D::GetDimension | ( | ) | const [inline] |
Compute number of non zero dimensions (0, 1, or 2).
Reimplemented in DRECT3D.
| double DRECT2D::GetDistance | ( | const DRECT2D & | rect | ) | const [inline] |
Compute the distance between two disjoint rectangles.
| double DRECT2D::GetHeight | ( | ) | const [inline] |
Return height of rectangle.
| double DRECT2D::GetMaxDistance | ( | const DRECT2D & | rect | ) | const [inline] |
Compute the maximum distance between two rectangles Uses Extend() and then computes the diagonal distance.
| double DRECT2D::GetMaxDistanceSquared | ( | const DRECT2D & | rect | ) | const [inline] |
Compute the maximum distance between two rectangles Uses Extend() and then computes the diagonal distance.
| DEPRECATED void DRECT2D::GetRect | ( | LRECT2D & | rect | ) | const [inline] |
Get rectangle as an LRECT2D (with rounding).
| void DRECT2D::GetRectRoundLimited | ( | LRECT2D & | rect | ) | const [inline] |
Get rectangle as LRECT2D with rounding, subject to range restrictions of FAST_ROUND_LIMITED.
| void DRECT2D::GetRectRoundNoLimit | ( | LRECT2D & | rect | ) | const [inline] |
Get rectangle as LRECT2D with rounding, subject to accuracy of FAST_ROUND_NOLIMIT.
| void DRECT2D::GetRectRoundPositive | ( | LRECT2D & | rect | ) | const [inline] |
Get rectangle as LRECT2D with rounding, valid for all positive coordinates only.
| void DRECT2D::GetRectTruncate | ( | LRECT2D & | rect | ) | const [inline] |
Get rectangle as an LRECT2D (with truncating towards 0).
| void DRECT2D::GetSize | ( | DPOINT2D & | ret | ) | const [inline] |
Get size of rectangle.
| void DRECT2D::GetTopLeft | ( | DPOINT2D & | ret | ) | const [inline] |
Return top left point of rectangle.
| void DRECT2D::GetTopRight | ( | DPOINT2D & | ret | ) | const [inline] |
Return top right point of rectangle.
| double DRECT2D::GetWidth | ( | ) | const [inline] |
Return width of rectangle.
| bool DRECT2D::IniRead | ( | INIHANDLE | IniHandle, | |
| const char * | IniGroup, | |||
| const char * | IniName, | |||
| const DRECT2D & | dft | |||
| ) | [inline] |
Read rectangle from INI file with default.
| bool DRECT2D::IniRead | ( | INIHANDLE | IniHandle, | |
| const char * | IniGroup, | |||
| const char * | IniName | |||
| ) | [inline] |
Read rectangle from INI file.
Reimplemented in DRECT3D.
| void DRECT2D::IniWrite | ( | INIHANDLE | IniHandle, | |
| const char * | IniGroup, | |||
| const char * | IniName | |||
| ) | const [inline] |
Read rectangle from INI file.
Reimplemented in DRECT3D.
| void DRECT2D::Intersect | ( | const DRECT2D & | rect | ) | [inline] |
Intersect two DRECT2D's, may result in an invalid rectangle.
Reimplemented in DRECT3D.
| bool DRECT2D::Intersects | ( | const DRECT2D & | rhs | ) | const [inline] |
Determine if two rectangles have non-empty intersection.
| bool DRECT2D::IsEquivalentTo | ( | const DRECT2D & | rhs, | |
| double | threshold = 0.0 | |||
| ) | const [inline] |
Determine if the two rectangles are equivalent This method uses "Fuzzy" edge comparisons Specify a different threshold to allow greater distances.
| threshold | Default threshold is max absolute value of rectangle coordinate * 1.0E-13 |
| bool DRECT2D::IsNonEmpty | ( | ) | const [inline] |
Check if rectangle is non-empty (has positive area).
| bool DRECT2D::IsValid | ( | ) | const [inline] |
Check if rectangle is valid.
Reimplemented in DRECT3D.
| void DRECT2D::Limit | ( | DPOINT2D & | point | ) | const [inline] |
Limit point to extents specified by rectangle.
| bool DRECT2D::Overlaps | ( | const DRECT2D & | rhs | ) | const [inline] |
Check if rectangle overlaps.
Reimplemented in DRECT3D.
| void DRECT2D::Set | ( | double | x1, | |
| double | y1, | |||
| double | x2, | |||
| double | y2 | |||
| ) | [inline] |
Set given (x1,y1), (x2,y2) with no ordering test.
Reimplemented in DRECT3D.
Set from any two opposite corners.
| void DRECT2D::SetInvalid | ( | ) | [inline] |
Sets the initial values to the maximum possible and the final values to the minimum possible, thus making the rectangle "invalid".
Setting a rectangle to invalid means that no point will be in it. It also makes it easy to compute the min/max of a bunch of points. You just iterate through all the points and Extend() the rectangle. Normally, you'd have to handle the first point specially.
Reimplemented in DRECT3D.
| void DRECT2D::SwapBytes | ( | ) | [inline] |
Perform byte-order swapping.
Reimplemented in DRECT3D.
| double DRECT2D::xinit |
Minimum X coordinate (inclusive).
| double DRECT2D::xlast |
Maximum X coordinate (inclusive).
| double DRECT2D::yinit |
Minimum Y coordinate (inclusive).
| double DRECT2D::ylast |
Maximum Y coordinate (inclusive).
1.6.1