java.awt.geom
public final class GeneralPath extends Object implements Shape, Cloneable
The inside of the curve is defined for drawing purposes by a winding rule. Either the WIND_EVEN_ODD or WIND_NON_ZERO winding rule can be chosen.
The EVEN_ODD winding rule defines a point as inside a path if: A ray from the point towards infinity in an arbitrary direction intersects the path an odd number of times. Points A and C in the image are considered to be outside the path. (both intersect twice) Point B intersects once, and is inside.
The NON_ZERO winding rule defines a point as inside a path if: The path intersects the ray in an equal number of opposite directions. Point A in the image is outside (one intersection in the ’up’ direction, one in the ’down’ direction) Point B in the image is inside (one intersection ’down’) Point C in the image is inside (two intersections in the ’down’ direction)
Since: 1.2
See Also: Line2D CubicCurve2D
Field Summary | |
---|---|
static int | WIND_EVEN_ODD Same constant as {@link PathIterator#WIND_EVEN_ODD}. |
static int | WIND_NON_ZERO Same constant as {@link PathIterator#WIND_NON_ZERO}. |
Constructor Summary | |
---|---|
GeneralPath()
Constructs a GeneralPath with the default (NON_ZERO)
winding rule and initial capacity (20). | |
GeneralPath(int rule)
Constructs a GeneralPath with a specific winding rule
and the default initial capacity (20). | |
GeneralPath(int rule, int capacity)
Constructs a GeneralPath with a specific winding rule
and the initial capacity. | |
GeneralPath(Shape s)
Constructs a GeneralPath from an arbitrary shape object.
|
Method Summary | |
---|---|
void | append(Shape s, boolean connect)
Appends the segments of a Shape to the path. |
void | append(PathIterator iter, boolean connect)
Appends the segments of a PathIterator to this GeneralPath.
|
Object | clone()
Creates a new shape of the same run-time type with the same contents
as this one.
|
void | closePath()
Closes the current subpath by drawing a line
back to the point of the last moveTo, unless the path is already closed. |
boolean | contains(double x, double y)
Evaluates if a point is within the GeneralPath,
The NON_ZERO winding rule is used, regardless of the
set winding rule. |
boolean | contains(Point2D p)
Evaluates if a Point2D is within the GeneralPath,
The NON_ZERO winding rule is used, regardless of the
set winding rule. |
boolean | contains(double x, double y, double w, double h)
Evaluates if a rectangle is completely contained within the path.
|
boolean | contains(Rectangle2D r)
Evaluates if a rectangle is completely contained within the path.
|
Shape | createTransformedShape(AffineTransform xform)
Creates a transformed version of the path. |
void | curveTo(float x1, float y1, float x2, float y2, float x3, float y3)
Appends a cubic Bezier curve to the current path. |
Rectangle | getBounds()
Returns the path’s bounding box. |
Rectangle2D | getBounds2D()
Returns the path’s bounding box, in float precision |
Point2D | getCurrentPoint()
Returns the current appending point of the path.
|
PathIterator | getPathIterator(AffineTransform at)
Creates a PathIterator for iterating along the segments of the path.
|
PathIterator | getPathIterator(AffineTransform at, double flatness)
Creates a new FlatteningPathIterator for the path |
int | getWindingRule()
Returns the path’s current winding rule.
|
boolean | intersects(double x, double y, double w, double h)
Evaluates if a rectangle intersects the path. |
boolean | intersects(Rectangle2D r)
Evaluates if a Rectangle2D intersects the path. |
void | lineTo(float x, float y)
Appends a straight line to the current path. |
void | moveTo(float x, float y)
Adds a new point to a path.
|
void | quadTo(float x1, float y1, float x2, float y2)
Appends a quadratic Bezier curve to the current path. |
void | reset()
Resets the path. |
void | setWindingRule(int rule)
Sets the path’s winding rule, which controls which areas are
considered ’inside’ or ’outside’ the path
on drawing. |
void | transform(AffineTransform xform)
Applies a transform to the path.
|
Parameters: rule the winding rule ({@link #WIND_NON_ZERO} or {@link #WIND_EVEN_ODD})
Throws: IllegalArgumentException if rule
is not one of the
listed values.
Parameters: rule the winding rule ({@link #WIND_NON_ZERO} or {@link #WIND_EVEN_ODD}) capacity the inital capacity, in path segments
Throws: IllegalArgumentException if rule
is not one of the
listed values.
Parameters: s the shape (null
not permitted).
Throws: NullPointerException if shape
is null
.
connect
is
true, the new path segments are connected to the existing one with a line.
The winding rule of the Shape is ignored.
Parameters: s the shape (null
not permitted). connect whether to connect the new shape to the existing path.
Throws: NullPointerException if s
is null
.
Parameters: iter the PathIterator specifying which segments shall be
appended (null
not permitted).
connect true
for substituting the initial
{@link PathIterator#SEG_MOVETO} segment by a {@link
PathIterator#SEG_LINETO}, or false
for not
performing any substitution. If this GeneralPath is currently
empty, connect
is assumed to be false
,
thus leaving the initial {@link PathIterator#SEG_MOVETO}
unchanged.
Returns: the clone
Throws: OutOfMemoryError If there is not enough memory available.
Since: 1.2
Parameters: x x coordinate of the point to evaluate y y coordinate of the point to evaluate
Returns: true if the point is within the path, false otherwise
Parameters: p The Point2D to evaluate
Returns: true if the point is within the path, false otherwise
Parameters: r the rectangle
Returns: true
if the rectangle is completely contained
within the path, false
otherwise
Parameters: xform the transform to apply
Returns: a new transformed GeneralPath
Parameters: x1 x coordinate of the first control point y1 y coordinate of the first control point x2 x coordinate of the second control point y2 y coordinate of the second control point x3 x coordinate of the curve endpoint. y3 y coordinate of the curve endpoint.
float
precisionReturns: The point.
Parameters: at an affine transformation for projecting the returned
points, or null
to let the created iterator return
the original points without any mapping.
Returns: {@link #WIND_EVEN_ODD} or {@link #WIND_NON_ZERO}.
Parameters: x x coordinate of the rectangle y y coordinate of the rectangle w width of the rectangle h height of the rectangle
Returns: true
if the rectangle intersects the path,
false
otherwise
Parameters: r The rectangle
Returns: true
if the rectangle intersects the path,
false
otherwise
Parameters: x x coordinate of the line endpoint. y y coordinate of the line endpoint.
Parameters: x the x-coordinate. y the y-coordinate.
Parameters: x1 x coordinate of the control point y1 y coordinate of the control point x2 x coordinate of the curve endpoint. y2 y coordinate of the curve endpoint.
Parameters: rule the rule ({@link #WIND_EVEN_ODD} or {@link #WIND_NON_ZERO}).
Parameters: xform the transform (null
not permitted).