org.geotools.resources.geometry
Class XRectangle2D

java.lang.Object
  extended byjava.awt.geom.RectangularShape
      extended byjava.awt.geom.Rectangle2D
          extended byorg.geotools.resources.geometry.XRectangle2D
All Implemented Interfaces:
java.lang.Cloneable, java.io.Serializable, java.awt.Shape

public class XRectangle2D
extends java.awt.geom.Rectangle2D
implements java.io.Serializable

Serializable, high-performance double-precision rectangle. Instead of using , , and , this class store rectangle's coordinates into the following fields: xmin, xmax, ymin et ymax. Methods likes and are faster, which make this class more appropriate for using intensively inside a loop. Furthermore, this class work correctly with infinites and NaN values.

Since:
2.0
Version:
$Id: XRectangle2D.java 17775 2006-01-30 03:26:44Z desruisseaux $
Author:
Martin Desruisseaux
See Also:
Serialized Form

Nested Class Summary
 
Nested classes inherited from class java.awt.geom.Rectangle2D
java.awt.geom.Rectangle2D.Double, java.awt.geom.Rectangle2D.Float
 
Field Summary
static java.awt.geom.Rectangle2D INFINITY
          An immutable instance of a Rectangle2D with bounds extending toward infinities.
protected  double xmax
          Maximal x coordinate.
protected  double xmin
          Minimal x coordinate.
protected  double ymax
          Maximal y coordinate.
protected  double ymin
          Minimal y coordinate.
 
Fields inherited from class java.awt.geom.Rectangle2D
OUT_BOTTOM, OUT_LEFT, OUT_RIGHT, OUT_TOP
 
Constructor Summary
XRectangle2D()
          Construct a default rectangle.
XRectangle2D(double x, double y, double width, double height)
          Construct a rectangle with the specified location and dimension.
XRectangle2D(java.awt.geom.Rectangle2D rect)
          Construct a rectangle with the same coordinates than the supplied rectangle.
 
Method Summary
 void add(double x, double y)
          Adds a point, specified by the double precision arguments and , to this .
 void add(java.awt.geom.Rectangle2D rect)
          Adds a object to this .
 boolean contains(double x, double y)
          Tests if a specified coordinate is inside the boundary of this .
 boolean contains(double x, double y, double width, double height)
          Tests if the interior of this entirely contains the specified set of rectangular coordinates.
 boolean contains(java.awt.geom.Rectangle2D rect)
          Tests if the interior of this shape entirely contains the specified rectangle.
static boolean containsInclusive(java.awt.geom.Rectangle2D outter, java.awt.geom.Rectangle2D inner)
          Tests if the interior of the rectangle is contained in the interior and/or the edge of the rectangle.
static XRectangle2D createFromExtremums(double xmin, double ymin, double xmax, double ymax)
          Create a rectangle using maximal x and y values rather than width and height.
 java.awt.geom.Rectangle2D createIntersection(java.awt.geom.Rectangle2D rect)
          Returns a new object representing the intersection of this with the specified .
 java.awt.geom.Rectangle2D createUnion(java.awt.geom.Rectangle2D rect)
          Returns a new object representing the union of this with the specified .
 double getCenterX()
          Returns the X coordinate of the center of the rectangle.
 double getCenterY()
          Returns the Y coordinate of the center of the rectangle.
 double getHeight()
          Returns the height of the framing rectangle in precision.
 double getMaxX()
          Returns the largest X coordinate of the rectangle.
 double getMaxY()
          Returns the largest Y coordinate of the rectangle.
 double getMinX()
          Returns the smallest X coordinate of the rectangle.
 double getMinY()
          Returns the smallest Y coordinate of the rectangle.
 double getWidth()
          Returns the width of the framing rectangle in precision.
 double getX()
          Returns the X coordinate of the upper left corner of the framing rectangle in precision.
 double getY()
          Returns the Y coordinate of the upper left corner of the framing rectangle in precision.
static boolean intersectInclusive(java.awt.geom.Rectangle2D rect1, java.awt.geom.Rectangle2D rect2)
          Tests if the interior and/or the edge of two rectangles intersect.
static boolean intersectInclusive(java.awt.Shape shape, java.awt.geom.Rectangle2D rect)
          Tests if the interior of the intersects the interior of a specified rectangle.
 boolean intersects(double x, double y, double width, double height)
          Tests if the interior of this intersects the interior of a specified set of rectangular coordinates.
 boolean intersects(java.awt.geom.Rectangle2D rect)
          Tests if the interior of this shape intersects the interior of a specified rectangle.
 boolean isEmpty()
          Determines whether the is empty.
 int outcode(double x, double y)
          Determines where the specified coordinates lie with respect to this .
 void setRect(double x, double y, double width, double height)
          Sets the location and size of this to the specified double values.
 void setRect(java.awt.geom.Rectangle2D r)
          Sets this to be the same as the specified .
 java.lang.String toString()
          Returns the representation of this .
 
Methods inherited from class java.awt.geom.Rectangle2D
add, equals, getBounds2D, getPathIterator, getPathIterator, hashCode, intersect, intersectsLine, intersectsLine, outcode, setFrame, union
 
Methods inherited from class java.awt.geom.RectangularShape
clone, contains, getBounds, getFrame, setFrame, setFrame, setFrameFromCenter, setFrameFromCenter, setFrameFromDiagonal, setFrameFromDiagonal
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

INFINITY

public static final java.awt.geom.Rectangle2D INFINITY
An immutable instance of a Rectangle2D with bounds extending toward infinities. The getMinX() and getMinY() methods return always Double.NEGATIVE_INFINITY, while the getMaxX() and getMaxY() methods return always Double.POSITIVE_INFINITY. This rectangle can be used as argument in the XRectangle2D constructor for initializing a new to infinite bounds.


xmin

protected double xmin
Minimal x coordinate.


ymin

protected double ymin
Minimal y coordinate.


xmax

protected double xmax
Maximal x coordinate.


ymax

protected double ymax
Maximal y coordinate.

Constructor Detail

XRectangle2D

public XRectangle2D()
Construct a default rectangle. Initial coordinates are .


XRectangle2D

public XRectangle2D(double x,
                    double y,
                    double width,
                    double height)
Construct a rectangle with the specified location and dimension. This constructor uses the same signature than Rectangle2D for consistency.


XRectangle2D

public XRectangle2D(java.awt.geom.Rectangle2D rect)
Construct a rectangle with the same coordinates than the supplied rectangle.

Parameters:
rect - The rectangle, or in none (in which case this constructor is equivalents to the no-argument constructor). Use INFINITY for initializing this with infinite bounds.
Method Detail

createFromExtremums

public static XRectangle2D createFromExtremums(double xmin,
                                               double ymin,
                                               double xmax,
                                               double ymax)
Create a rectangle using maximal x and y values rather than width and height. This factory avoid the problem of NaN values when extremums are infinite numbers.


isEmpty

public boolean isEmpty()
Determines whether the is empty. When the is empty, it encloses no area.

Returns:
if the is empty; otherwise.

getX

public double getX()
Returns the X coordinate of the upper left corner of the framing rectangle in precision.

Returns:
the x coordinate of the upper left corner of the framing rectangle.

getY

public double getY()
Returns the Y coordinate of the upper left corner of the framing rectangle in precision.

Returns:
the y coordinate of the upper left corner of the framing rectangle.

getWidth

public double getWidth()
Returns the width of the framing rectangle in precision.

Returns:
the width of the framing rectangle.

getHeight

public double getHeight()
Returns the height of the framing rectangle in precision.

Returns:
the height of the framing rectangle.

getMinX

public double getMinX()
Returns the smallest X coordinate of the rectangle.


getMinY

public double getMinY()
Returns the smallest Y coordinate of the rectangle.


getMaxX

public double getMaxX()
Returns the largest X coordinate of the rectangle.


getMaxY

public double getMaxY()
Returns the largest Y coordinate of the rectangle.


getCenterX

public double getCenterX()
Returns the X coordinate of the center of the rectangle.


getCenterY

public double getCenterY()
Returns the Y coordinate of the center of the rectangle.


setRect

public void setRect(double x,
                    double y,
                    double width,
                    double height)
Sets the location and size of this to the specified double values.

Parameters:
x - the x coordinates to which to set the location of the upper left corner of this
y - the y coordinates to which to set the location of the upper left corner of this
width - the value to use to set the width of this
height - the value to use to set the height of this

setRect

public void setRect(java.awt.geom.Rectangle2D r)
Sets this to be the same as the specified .

Parameters:
r - the specified

intersects

public boolean intersects(double x,
                          double y,
                          double width,
                          double height)
Tests if the interior of this intersects the interior of a specified set of rectangular coordinates.

Specified by:
intersects in interface java.awt.Shape
Parameters:
x - the x coordinates of the upper left corner of the specified set of rectangular coordinates
y - the y coordinates of the upper left corner of the specified set of rectangular coordinates
width - the width of the specified set of rectangular coordinates
height - the height of the specified set of rectangular coordinates
Returns:
if this intersects the interior of a specified set of rectangular coordinates; otherwise.

intersects

public boolean intersects(java.awt.geom.Rectangle2D rect)
Tests if the interior of this shape intersects the interior of a specified rectangle. This methods overrides the default Rectangle2D implementation in order to work correctly with infinites and NaN values.

Specified by:
intersects in interface java.awt.Shape
Parameters:
rect - the specified rectangle.
Returns:
if this shape and the specified rectangle intersect each other.
See Also:
intersectInclusive(Rectangle2D, Rectangle2D)

intersectInclusive

public static boolean intersectInclusive(java.awt.geom.Rectangle2D rect1,
                                         java.awt.geom.Rectangle2D rect2)
Tests if the interior and/or the edge of two rectangles intersect. This method is similar to intersects(Rectangle2D) except for the following points: This method is said inclusive because it tests bounds as closed interval rather then open interval (the default Java2D behavior). Usage of closed interval is required if at least one rectangle may be the bounding box of a perfectly horizontal or vertical line; such a bounding box has 0 width or height.

Parameters:
rect1 - The first rectangle to test.
rect2 - The second rectangle to test.
Returns:
if the interior and/or the edge of the two specified rectangles intersects.

intersectInclusive

public static boolean intersectInclusive(java.awt.Shape shape,
                                         java.awt.geom.Rectangle2D rect)
Tests if the interior of the intersects the interior of a specified rectangle. This method might conservatively return when there is a high probability that the rectangle and the shape intersect, but the calculations to accurately determine this intersection are prohibitively expensive. This is similar to Shape.intersects(Rectangle2D), except that this method tests also rectangle with zero width or height (which are empty according Shape contract). However, rectangle with negative width or height are still considered as empty.

This method is said inclusive because it try to mimic intersectInclusive(Rectangle2D, Rectangle2D) behavior, at least for rectangle with zero width or height.

Parameters:
shape - The shape.
rect - The rectangle to test for inclusion.
Returns:
if the interior of the shape and the interior of the specified rectangle intersect, or are both highly likely to intersect.

contains

public boolean contains(double x,
                        double y,
                        double width,
                        double height)
Tests if the interior of this entirely contains the specified set of rectangular coordinates.

Specified by:
contains in interface java.awt.Shape
Parameters:
x - the x coordinates of the upper left corner of the specified set of rectangular coordinates
y - the y coordinates of the upper left corner of the specified set of rectangular coordinates
width - the width of the specified set of rectangular coordinates
height - the height of the specified set of rectangular coordinates
Returns:
if this entirely contains specified set of rectangular coordinates; otherwise.

contains

public boolean contains(java.awt.geom.Rectangle2D rect)
Tests if the interior of this shape entirely contains the specified rectangle. This methods overrides the default Rectangle2D implementation in order to work correctly with infinites and NaN values.

Specified by:
contains in interface java.awt.Shape
Parameters:
rect - the specified rectangle.
Returns:
if this shape entirely contains the specified rectangle.

contains

public boolean contains(double x,
                        double y)
Tests if a specified coordinate is inside the boundary of this .

Specified by:
contains in interface java.awt.Shape
Parameters:
x - the x coordinates to test.
y - the y coordinates to test.
Returns:
if the specified coordinates are inside the boundary of this ; otherwise.

containsInclusive

public static boolean containsInclusive(java.awt.geom.Rectangle2D outter,
                                        java.awt.geom.Rectangle2D inner)
Tests if the interior of the rectangle is contained in the interior and/or the edge of the rectangle. This method is similar to contains(Rectangle2D) except for the following points: This method is said inclusive because it tests bounds as closed interval rather then open interval (the default Java2D behavior). Usage of closed interval is required if at least one rectangle may be the bounding box of a perfectly horizontal or vertical line; such a bounding box has 0 width or height.

Parameters:
outter - The first rectangle to test.
inner - The second rectangle to test.
Returns:
if the interior of is inside the interior and/or the edge of .
To Do:
Check for negative width or height (should returns ).

outcode

public int outcode(double x,
                   double y)
Determines where the specified coordinates lie with respect to this . This method computes a binary OR of the appropriate mask values indicating, for each side of this , whether or not the specified coordinates are on the same side of the edge as the rest of this .

Returns:
the logical OR of all appropriate out codes.
See Also:
Rectangle2D.OUT_LEFT, Rectangle2D.OUT_TOP, Rectangle2D.OUT_RIGHT, Rectangle2D.OUT_BOTTOM

createIntersection

public java.awt.geom.Rectangle2D createIntersection(java.awt.geom.Rectangle2D rect)
Returns a new object representing the intersection of this with the specified .

Parameters:
rect - the to be intersected with this
Returns:
the largest contained in both the specified and in this .

createUnion

public java.awt.geom.Rectangle2D createUnion(java.awt.geom.Rectangle2D rect)
Returns a new object representing the union of this with the specified .

Parameters:
rect - the to be combined with this
Returns:
the smallest containing both the specified and this .

add

public void add(double x,
                double y)
Adds a point, specified by the double precision arguments and , to this . The resulting is the smallest that contains both the original and the specified point.

After adding a point, a call to with the added point as an argument does not necessarily return . The method does not return for points on the right or bottom edges of a rectangle. Therefore, if the added point falls on the left or bottom edge of the enlarged rectangle, returns for that point.


add

public void add(java.awt.geom.Rectangle2D rect)
Adds a object to this . The resulting is the union of the two objects.

Parameters:
rect - the to add to this .

toString

public java.lang.String toString()
Returns the representation of this .

Returns:
a representing this .


Copyright © GeoTools. All Rights Reserved.