Class Path2D.Double
- All Implemented Interfaces:
Shape
,Serializable
,Cloneable
- Enclosing class:
Path2D
Double
class defines a geometric path with
coordinates stored in double precision floating point.- Since:
- 1.6
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class java.awt.geom.Path2D
Path2D.Double, Path2D.Float
-
Field Summary
Fields inherited from class java.awt.geom.Path2D
WIND_EVEN_ODD, WIND_NON_ZERO
-
Constructor Summary
ConstructorDescriptionDouble()
Constructs a new empty double precisionPath2D
object with a default winding rule ofPath2D.WIND_NON_ZERO
.Double
(int rule) Constructs a new empty double precisionPath2D
object with the specified winding rule to control operations that require the interior of the path to be defined.Double
(int rule, int initialCapacity) Constructs a new empty double precisionPath2D
object with the specified winding rule and the specified initial capacity to store path segments.Constructs a new double precisionPath2D
object from an arbitraryShape
object.Double
(Shape s, AffineTransform at) Constructs a new double precisionPath2D
object from an arbitraryShape
object, transformed by anAffineTransform
object. -
Method Summary
Modifier and TypeMethodDescriptionfinal void
append
(PathIterator pi, boolean connect) Appends the geometry of the specifiedPathIterator
object to the path, possibly connecting the new geometry to the existing path segments with a line segment.final Object
clone()
Creates a new object of the same class as this object.final void
curveTo
(double x1, double y1, double x2, double y2, double x3, double y3) Adds a curved segment, defined by three new points, to the path by drawing a Bézier curve that intersects both the current coordinates and the specified coordinates(x3,y3)
, using the specified points(x1,y1)
and(x2,y2)
as Bézier control points.final Rectangle2D
Returns a high precision and more accurate bounding box of theShape
than thegetBounds
method.final PathIterator
Returns an iterator object that iterates along theShape
boundary and provides access to the geometry of theShape
outline.final void
lineTo
(double x, double y) Adds a point to the path by drawing a straight line from the current coordinates to the new specified coordinates specified in double precision.final void
moveTo
(double x, double y) Adds a point to the path by moving to the specified coordinates specified in double precision.final void
quadTo
(double x1, double y1, double x2, double y2) Adds a curved segment, defined by two new points, to the path by drawing a Quadratic curve that intersects both the current coordinates and the specified coordinates(x2,y2)
, using the specified point(x1,y1)
as a quadratic parametric control point.final void
Transforms the geometry of this path using the specifiedAffineTransform
.final void
Trims the capacity of this Path2D instance to its current size.Methods inherited from class java.awt.geom.Path2D
append, closePath, contains, contains, contains, contains, contains, contains, contains, contains, createTransformedShape, getBounds, getCurrentPoint, getPathIterator, getWindingRule, intersects, intersects, intersects, intersects, reset, setWindingRule
-
Constructor Details
-
Double
public Double()Constructs a new empty double precisionPath2D
object with a default winding rule ofPath2D.WIND_NON_ZERO
.- Since:
- 1.6
-
Double
public Double(int rule) Constructs a new empty double precisionPath2D
object with the specified winding rule to control operations that require the interior of the path to be defined.- Parameters:
rule
- the winding rule- Throws:
IllegalArgumentException
- ifrule
is not eitherPath2D.WIND_EVEN_ODD
orPath2D.WIND_NON_ZERO
- Since:
- 1.6
- See Also:
-
Double
public Double(int rule, int initialCapacity) Constructs a new empty double precisionPath2D
object with the specified winding rule and the specified initial capacity to store path segments. This number is an initial guess as to how many path segments are in the path, but the storage is expanded as needed to store whatever path segments are added to this path.- Parameters:
rule
- the winding ruleinitialCapacity
- the estimate for the number of path segments in the path- Throws:
IllegalArgumentException
- ifrule
is not eitherPath2D.WIND_EVEN_ODD
orPath2D.WIND_NON_ZERO
NegativeArraySizeException
- ifinitialCapacity
is negative- Since:
- 1.6
- See Also:
-
Double
Constructs a new double precisionPath2D
object from an arbitraryShape
object. All of the initial geometry and the winding rule for this path are taken from the specifiedShape
object.- Parameters:
s
- the specifiedShape
object- Throws:
NullPointerException
- ifs
isnull
- Since:
- 1.6
-
Double
Constructs a new double precisionPath2D
object from an arbitraryShape
object, transformed by anAffineTransform
object. All of the initial geometry and the winding rule for this path are taken from the specifiedShape
object and transformed by the specifiedAffineTransform
object.- Parameters:
s
- the specifiedShape
objectat
- the specifiedAffineTransform
object- Throws:
NullPointerException
- ifs
isnull
- Since:
- 1.6
-
-
Method Details
-
trimToSize
public final void trimToSize()Description copied from class:Path2D
Trims the capacity of this Path2D instance to its current size. An application can use this operation to minimize the storage of a path.- Specified by:
trimToSize
in classPath2D
- Since:
- 10
-
moveTo
-
lineTo
public final void lineTo(double x, double y) Adds a point to the path by drawing a straight line from the current coordinates to the new specified coordinates specified in double precision. -
quadTo
public final void quadTo(double x1, double y1, double x2, double y2) Adds a curved segment, defined by two new points, to the path by drawing a Quadratic curve that intersects both the current coordinates and the specified coordinates(x2,y2)
, using the specified point(x1,y1)
as a quadratic parametric control point. All coordinates are specified in double precision. -
curveTo
public final void curveTo(double x1, double y1, double x2, double y2, double x3, double y3) Adds a curved segment, defined by three new points, to the path by drawing a Bézier curve that intersects both the current coordinates and the specified coordinates(x3,y3)
, using the specified points(x1,y1)
and(x2,y2)
as Bézier control points. All coordinates are specified in double precision.- Specified by:
curveTo
in classPath2D
- Parameters:
x1
- the X coordinate of the first Bézier control pointy1
- the Y coordinate of the first Bézier control pointx2
- the X coordinate of the second Bézier control pointy2
- the Y coordinate of the second Bézier control pointx3
- the X coordinate of the final end pointy3
- the Y coordinate of the final end point- Since:
- 1.6
-
append
Appends the geometry of the specifiedPathIterator
object to the path, possibly connecting the new geometry to the existing path segments with a line segment. If theconnect
parameter istrue
and the path is not empty then any initialmoveTo
in the geometry of the appendedShape
is turned into alineTo
segment. If the destination coordinates of such a connectinglineTo
segment match the ending coordinates of a currently open subpath then the segment is omitted as superfluous. The winding rule of the specifiedShape
is ignored and the appended geometry is governed by the winding rule specified for this path. -
transform
Transforms the geometry of this path using the specifiedAffineTransform
. The geometry is transformed in place, which permanently changes the boundary defined by this object. -
getBounds2D
Returns a high precision and more accurate bounding box of theShape
than thegetBounds
method. Note that there is no guarantee that the returnedRectangle2D
is the smallest bounding box that encloses theShape
, only that theShape
lies entirely within the indicatedRectangle2D
. The bounding box returned by this method is usually tighter than that returned by thegetBounds
method and never fails due to overflow problems since the return value can be an instance of theRectangle2D
that uses double precision values to store the dimensions.Note that the definition of insideness can lead to situations where points on the defining outline of the
shape
may not be considered contained in the returnedbounds
object, but only in cases where those points are also not considered contained in the originalshape
.If a
point
is inside theshape
according to thecontains(point)
method, then it must be inside the returnedRectangle2D
bounds object according to thecontains(point)
method of thebounds
. Specifically:shape.contains(p)
requiresbounds.contains(p)
If a
point
is not inside theshape
, then it might still be contained in thebounds
object:bounds.contains(p)
does not implyshape.contains(p)
- Specified by:
getBounds2D
in interfaceShape
- Returns:
- an instance of
Rectangle2D
that is a high-precision bounding box of theShape
. - Since:
- 1.6
- See Also:
-
getPathIterator
Returns an iterator object that iterates along theShape
boundary and provides access to the geometry of theShape
outline. If an optionalAffineTransform
is specified, the coordinates returned in the iteration are transformed accordingly.Each call to this method returns a fresh
PathIterator
object that traverses the geometry of theShape
object independently from any otherPathIterator
objects in use at the same time.It is recommended, but not guaranteed, that objects implementing the
Shape
interface isolate iterations that are in process from any changes that might occur to the original object's geometry during such iterations.The iterator for this class is not multi-threaded safe, which means that the
Path2D
class does not guarantee that modifications to the geometry of thisPath2D
object do not affect any iterations of that geometry that are already in process.- Specified by:
getPathIterator
in interfaceShape
- Parameters:
at
- anAffineTransform
- Returns:
- a new
PathIterator
that iterates along the boundary of thisShape
and provides access to the geometry of thisShape
's outline - Since:
- 1.6
-
clone
Creates a new object of the same class as this object.- Specified by:
clone
in classPath2D
- Returns:
- a clone of this instance.
- Throws:
OutOfMemoryError
- if there is not enough memory.- Since:
- 1.6
- See Also:
-