java.awt.geom

Class GeneralPath

public final class GeneralPath extends Object implements Shape, Cloneable

A general geometric path, consisting of any number of subpaths constructed out of straight lines and cubic or quadratic Bezier curves.

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.

A drawing of a GeneralPath

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 intWIND_EVEN_ODD
Same constant as {@link PathIterator#WIND_EVEN_ODD}.
static intWIND_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
voidappend(Shape s, boolean connect)
Appends the segments of a Shape to the path.
voidappend(PathIterator iter, boolean connect)
Appends the segments of a PathIterator to this GeneralPath.
Objectclone()
Creates a new shape of the same run-time type with the same contents as this one.
voidclosePath()
Closes the current subpath by drawing a line back to the point of the last moveTo, unless the path is already closed.
booleancontains(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.
booleancontains(Point2D p)
Evaluates if a Point2D is within the GeneralPath, The NON_ZERO winding rule is used, regardless of the set winding rule.
booleancontains(double x, double y, double w, double h)
Evaluates if a rectangle is completely contained within the path.
booleancontains(Rectangle2D r)
Evaluates if a rectangle is completely contained within the path.
ShapecreateTransformedShape(AffineTransform xform)
Creates a transformed version of the path.
voidcurveTo(float x1, float y1, float x2, float y2, float x3, float y3)
Appends a cubic Bezier curve to the current path.
RectanglegetBounds()
Returns the path’s bounding box.
Rectangle2DgetBounds2D()
Returns the path’s bounding box, in float precision
Point2DgetCurrentPoint()
Returns the current appending point of the path.
PathIteratorgetPathIterator(AffineTransform at)
Creates a PathIterator for iterating along the segments of the path.
PathIteratorgetPathIterator(AffineTransform at, double flatness)
Creates a new FlatteningPathIterator for the path
intgetWindingRule()
Returns the path’s current winding rule.
booleanintersects(double x, double y, double w, double h)
Evaluates if a rectangle intersects the path.
booleanintersects(Rectangle2D r)
Evaluates if a Rectangle2D intersects the path.
voidlineTo(float x, float y)
Appends a straight line to the current path.
voidmoveTo(float x, float y)
Adds a new point to a path.
voidquadTo(float x1, float y1, float x2, float y2)
Appends a quadratic Bezier curve to the current path.
voidreset()
Resets the path.
voidsetWindingRule(int rule)
Sets the path’s winding rule, which controls which areas are considered ’inside’ or ’outside’ the path on drawing.
voidtransform(AffineTransform xform)
Applies a transform to the path.

Field Detail

WIND_EVEN_ODD

public static final int WIND_EVEN_ODD
Same constant as {@link PathIterator#WIND_EVEN_ODD}.

WIND_NON_ZERO

public static final int WIND_NON_ZERO
Same constant as {@link PathIterator#WIND_NON_ZERO}.

Constructor Detail

GeneralPath

public GeneralPath()
Constructs a GeneralPath with the default (NON_ZERO) winding rule and initial capacity (20).

GeneralPath

public GeneralPath(int rule)
Constructs a GeneralPath with a specific winding rule and the default initial capacity (20).

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.

GeneralPath

public GeneralPath(int rule, int capacity)
Constructs a GeneralPath with a specific winding rule and the initial capacity. The initial capacity should be the approximate number of path segments to be used.

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.

GeneralPath

public GeneralPath(Shape s)
Constructs a GeneralPath from an arbitrary shape object. The Shapes PathIterator path and winding rule will be used.

Parameters: s the shape (null not permitted).

Throws: NullPointerException if shape is null.

Method Detail

append

public void append(Shape s, boolean connect)
Appends the segments of a Shape to the path. If 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.

append

public void append(PathIterator iter, boolean connect)
Appends the segments of a PathIterator to this GeneralPath. Optionally, the initial {@link PathIterator#SEG_MOVETO} segment of the appended path is changed into a {@link PathIterator#SEG_LINETO} segment.

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.

clone

public Object clone()
Creates a new shape of the same run-time type with the same contents as this one.

Returns: the clone

Throws: OutOfMemoryError If there is not enough memory available.

Since: 1.2

closePath

public void closePath()
Closes the current subpath by drawing a line back to the point of the last moveTo, unless the path is already closed.

contains

public 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.

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

contains

public 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.

Parameters: p The Point2D to evaluate

Returns: true if the point is within the path, false otherwise

contains

public boolean contains(double x, double y, double w, double h)
Evaluates if a rectangle is completely contained within the path. This method will return false in the cases when the box intersects an inner segment of the path. (i.e.: The method is accurate for the EVEN_ODD winding rule)

contains

public boolean contains(Rectangle2D r)
Evaluates if a rectangle is completely contained within the path. This method will return false in the cases when the box intersects an inner segment of the path. (i.e.: The method is accurate for the EVEN_ODD winding rule)

Parameters: r the rectangle

Returns: true if the rectangle is completely contained within the path, false otherwise

createTransformedShape

public Shape createTransformedShape(AffineTransform xform)
Creates a transformed version of the path.

Parameters: xform the transform to apply

Returns: a new transformed GeneralPath

curveTo

public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3)
Appends a cubic Bezier curve to the current path.

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.

getBounds

public Rectangle getBounds()
Returns the path’s bounding box.

getBounds2D

public Rectangle2D getBounds2D()
Returns the path’s bounding box, in float precision

getCurrentPoint

public Point2D getCurrentPoint()
Returns the current appending point of the path.

Returns: The point.

getPathIterator

public PathIterator getPathIterator(AffineTransform at)
Creates a PathIterator for iterating along the segments of the path.

Parameters: at an affine transformation for projecting the returned points, or null to let the created iterator return the original points without any mapping.

getPathIterator

public PathIterator getPathIterator(AffineTransform at, double flatness)
Creates a new FlatteningPathIterator for the path

getWindingRule

public int getWindingRule()
Returns the path’s current winding rule.

Returns: {@link #WIND_EVEN_ODD} or {@link #WIND_NON_ZERO}.

intersects

public boolean intersects(double x, double y, double w, double h)
Evaluates if a rectangle intersects the path.

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

intersects

public boolean intersects(Rectangle2D r)
Evaluates if a Rectangle2D intersects the path.

Parameters: r The rectangle

Returns: true if the rectangle intersects the path, false otherwise

lineTo

public void lineTo(float x, float y)
Appends a straight line to the current path.

Parameters: x x coordinate of the line endpoint. y y coordinate of the line endpoint.

moveTo

public void moveTo(float x, float y)
Adds a new point to a path.

Parameters: x the x-coordinate. y the y-coordinate.

quadTo

public void quadTo(float x1, float y1, float x2, float y2)
Appends a quadratic Bezier curve to the current path.

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.

reset

public void reset()
Resets the path. All points and segments are destroyed.

setWindingRule

public void setWindingRule(int rule)
Sets the path’s winding rule, which controls which areas are considered ’inside’ or ’outside’ the path on drawing. Valid rules are WIND_EVEN_ODD for an even-odd winding rule, or WIND_NON_ZERO for a non-zero winding rule.

Parameters: rule the rule ({@link #WIND_EVEN_ODD} or {@link #WIND_NON_ZERO}).

transform

public void transform(AffineTransform xform)
Applies a transform to the path.

Parameters: xform the transform (null not permitted).