Class GeneralPath
- All Implemented Interfaces:
Shape
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 #WIND_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 #WIND_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)
Form hi = new Form("Shape");
// We create a 50 x 100 shape, this is arbitrary since we can scale it easily
GeneralPath path = new GeneralPath();
path.moveTo(20,0);
path.lineTo(30, 0);
path.lineTo(30, 100);
path.lineTo(20, 100);
path.lineTo(20, 15);
path.lineTo(5, 40);
path.lineTo(5, 25);
path.lineTo(20,0);
hi.getContentPane().getUnselectedStyle().setBgPainter((Graphics g, Rectangle rect) -> {
g.setColor(0xff);
float widthRatio = ((float)rect.getWidth()) / 50f;
float heightRatio = ((float)rect.getHeight()) / 100f;
g.scale(widthRatio, heightRatio);
g.translate((int)(((float)rect.getX()) / widthRatio), (int)(((float)rect.getY()) / heightRatio));
g.fillShape(path);
g.resetAffine();
});
hi.show();
Note: This description and image were copied from the GNU classpath docs). License here http://www.gnu.org/licenses/licenses.html#FDL
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intSame constant asPathIterator#WIND_EVEN_ODDstatic final intSame constant asPathIterator#WIND_NON_ZERO -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a GeneralPath with the default (#WIND_NON_ZERO) winding rule and initial capacity (10).GeneralPath(int rule) Constructs a GeneralPath with a specific winding rule and the default initial capacity (10).GeneralPath(int rule, int initialCapacity) Constructs a GeneralPath with a specific winding rule and the initial capacity.GeneralPath(Shape shape) Constructs a GeneralPath from an arbitrary shape object. -
Method Summary
Modifier and TypeMethodDescriptionvoidappend(PathIterator path, boolean connect) Appends the segments of a PathIterator to this GeneralPath.voidAppends the segments of a Shape to the path.voidarc(double x, double y, double w, double h, double startAngle, double sweepAngle) Draws an elliptical arc on the path given the provided bounds.voidarc(double x, double y, double w, double h, double startAngle, double sweepAngle, boolean joinPath) Draws an elliptical arc on the path given the provided bounds.voidarc(float x, float y, float w, float h, float startAngle, float sweepAngle) Draws an elliptical arc on the path given the provided bounds.voidarc(float x, float y, float w, float h, float startAngle, float sweepAngle, boolean joinPath) Draws an elliptical arc on the path given the provided bounds.voidarcTo(double cX, double cY, double endX, double endY) Adds an arc to the path.voidarcTo(double cX, double cY, double endX, double endY, boolean clockwise) Adds an arc to the path.voidarcTo(float cX, float cY, float endX, float endY) Adds an arc to the path.voidarcTo(float cX, float cY, float endX, float endY, boolean clockwise) Adds an arc to the path.voidCloses the current subpath by drawing a line back to the point of the last moveTo, unless the path is already closed.booleancontains(float x, float y) Checks if the given point is contained in the current shape.booleancontains(int x, int y) {Checks if the shape contains the given point.static GeneralPathCreates a new GeneralPath from an object Pool.Returns a shape formed by transforming the current shape with the provided transform.voidcurveTo(double x1, double y1, double x2, double y2, double x3, double y3) voidcurveTo(float x1, float y1, float x2, float y2, float x3, float y3) Appends a cubic Bezier curve to the current path.booleanReturns the path's bounding box.voidSets the coordinates of the provided rectangle to the bounding box of this path.float[]Returns the path's bounding box, in float precision.voidgetBounds2D(float[] out) Sets the 4-element array to the bounding box coordinates of the path.float[]Returns the current appending point of the path.voidgetCurrentPoint(float[] point) Sets the coordinates of the given point to the current point in the path.{Gets an iterator to walk all of the path segments of the shape.{Gets an iterator where all points are transformed by the provided transform.voidgetPoints(float[] out) Returns a copy of the points in this path.intReturns the number of points in this path.voidgetTypes(byte[] out) Returns a copy of the types (aka path commands) in this path.intReturns the number of path commands in this path.intReturns the path's current winding rule.booleanintersect(int x, int y, int w, int h) booleanSets the current path to the intersection of itself and the provided rectangle.voidResets this path to be the intersection of itself with the given shape.intersection(Rectangle rect) {Returns the shape formed by the intersection of this shape and the provided rectangle.static booleanisConvexPolygon(float[] xPoints, float[] yPoints) Checks to see if the set of points form a convex polygon.static booleanisConvexPolygon(int[] xPoints, int[] yPoints) booleanChecks to see if this path forms a polygon.booleanChecks to see if this path is a rectangle.voidlineTo(double x, double y) voidlineTo(float x, float y) Appends a straight line to the current path.voidmoveTo(double x, double y) voidmoveTo(float x, float y) Adds a new point to a path.voidquadTo(double x1, double y1, double x2, double y2) voidquadTo(float x1, float y1, float x2, float y2) Appends a quadratic Bezier curve to the current path.static voidReturns a GeneralPath to the reusable object pool for GeneralPaths.voidreset()Resets the path.voidsetPath(GeneralPath p, Transform t) Sets this path to be identical to the provided pathpwith the given Transformtapplied to it.voidSets this path to be a rectangle with the provided bounds, but with the given transform applied to it.voidSets this path to be a copy of the provided shape, but with the provided transform applied to it.voidsetWindingRule(int rule) Sets the path's winding rule, which controls which areas are considered 'inside' or 'outside' the path on drawing.toString()voidTransforms the current path in place using the given transform.
-
Field Details
-
WIND_EVEN_ODD
public static final int WIND_EVEN_ODDSame constant asPathIterator#WIND_EVEN_ODD- See Also:
-
WIND_NON_ZERO
public static final int WIND_NON_ZEROSame constant asPathIterator#WIND_NON_ZERO- See Also:
-
-
Constructor Details
-
GeneralPath
public GeneralPath()Constructs a GeneralPath with the default (#WIND_NON_ZERO) winding rule and initial capacity (10). -
GeneralPath
public GeneralPath(int rule) Constructs a GeneralPath with a specific winding rule and the default initial capacity (10).
Parameters
rule: @param rule The winding rule. One of#WIND_NON_ZEROand#WIND_EVEN_ODD
See also
-
#WIND_NON_ZERO
-
#WIND_EVEN_ODD
-
GeneralPath
public GeneralPath(int rule, int initialCapacity) 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: @param rule The winding rule. (#WIND_NON_ZEROor#WIND_EVEN_ODD). -
initialCapacity: the inital capacity, in path segments
-
-
GeneralPath
Constructs a GeneralPath from an arbitrary shape object. The Shapes PathIterator path and winding rule will be used.
Parameters
shape
-
-
Method Details
-
recycle
Returns a GeneralPath to the reusable object pool for GeneralPaths.
Parameters
p: The path to recycle.
See also
- #createFromPool()
-
createFromPool
Creates a new GeneralPath from an object Pool. This is useful if you need to create a temporary General path that you wish to dispose of after using.
You should return this object back to the pool when you are done using the
#recycle(com.codename1.ui.geom.GeneralPath)method. -
isConvexPolygon
public static boolean isConvexPolygon(float[] xPoints, float[] yPoints) Checks to see if the set of points form a convex polygon. if
Parameters
-
xPoints: The x coordinates of the polygon. -
yPoints: The y coordinates of the polygon.
Returns
True if the points comprise a convex polygon.
-
-
isConvexPolygon
public static boolean isConvexPolygon(int[] xPoints, int[] yPoints) -
isPolygon
public boolean isPolygon()Checks to see if this path forms a polygon.
Returns
True if the path is a polygon.
-
getTypesSize
public int getTypesSize()Returns the number of path commands in this path.
Returns
The number of path commands in this path.
-
getPointsSize
public int getPointsSize()Returns the number of points in this path.
Returns
The number of points in this path.
-
getTypes
public void getTypes(byte[] out) Returns a copy of the types (aka path commands) in this path.
Parameters
out: An array to copy the path commands into.
-
getPoints
public void getPoints(float[] out) Returns a copy of the points in this path.
Parameters
out: An array to copy the points into.
-
toString
-
equals
-
getWindingRule
public int getWindingRule()Returns the path's current winding rule.
Returns
#WIND_NON_ZEROor#WIND_EVEN_ODD -
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_ODDfor an even-odd winding rule, or#WIND_NON_ZEROfor a non-zero winding rule.Parameters
rule: the rule. (#WIND_NON_ZEROor#WIND_EVEN_ODD).
-
moveTo
public void moveTo(double x, double y) -
moveTo
public void moveTo(float x, float y) Adds a new point to a path.
Parameters
-
x: the x-coordinate. -
y: the y-coordinate.
-
-
lineTo
public void lineTo(double x, double y) -
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.
-
-
quadTo
public void quadTo(double x1, double y1, double x2, double y2) -
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.
-
-
curveTo
public void curveTo(double x1, double y1, double x2, double y2, double x3, double y3) -
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.
-
-
arc
public void arc(float x, float y, float w, float h, float startAngle, float sweepAngle) Draws an elliptical arc on the path given the provided bounds.
Parameters
-
x: Left x coord of bounding rect. -
y: Top y coordof bounding rect. -
w: Width of bounding rect. -
h: Height of bounding rect. -
startAngle: Start angle on ellipse in radians. Counter-clockwise from 3-o'clock. -
sweepAngle: Sweep angle in radians. Counter-clockwise.
-
-
arc
public void arc(float x, float y, float w, float h, float startAngle, float sweepAngle, boolean joinPath) Draws an elliptical arc on the path given the provided bounds.
Parameters
-
x: Left x coord of bounding rect. -
y: Top y coordof bounding rect. -
w: Width of bounding rect. -
h: Height of bounding rect. -
startAngle: Start angle on ellipse in radians. Counter-clockwise from 3-o'clock. -
sweepAngle: Sweep angle in radians. Counter-clockwise. -
joinPath: If true, then this will join the arc to the existing path with a line.
-
-
arc
public void arc(double x, double y, double w, double h, double startAngle, double sweepAngle) Draws an elliptical arc on the path given the provided bounds.
Parameters
-
x: Left x coord of bounding rect. -
y: Top y coordof bounding rect. -
w: Width of bounding rect. -
h: Height of bounding rect. -
startAngle: Start angle on ellipse in radians. Counter-clockwise from 3-o'clock. -
sweepAngle: Sweep angle in radians. Counter-clockwise.
-
-
arc
public void arc(double x, double y, double w, double h, double startAngle, double sweepAngle, boolean joinPath) Draws an elliptical arc on the path given the provided bounds.
Parameters
-
x: Left x coord of bounding rect. -
y: Top y coordof bounding rect. -
w: Width of bounding rect. -
h: Height of bounding rect. -
startAngle: Start angle on ellipse in radians. Counter-clockwise from 3-o'clock. -
sweepAngle: Sweep angle in radians. Counter-clockwise. -
joinPath: If true then this will join the arc to the existing path with a line.
-
-
arcTo
public void arcTo(float cX, float cY, float endX, float endY) Adds an arc to the path. This method uses an approximation of an arc using a cubic path. It is not a precise arc.
Note: The arc is drawn counter-clockwise around the center point. See
double, double, double, boolean)to draw clockwise.Parameters
-
cX: The x-coordinate of the oval center. -
cY: The y-coordinate of the oval center. -
endX: The end X coordinate. -
endY: The end Y coordinate.
-
-
arcTo
public void arcTo(float cX, float cY, float endX, float endY, boolean clockwise) Adds an arc to the path. This method uses an approximation of an arc using a cubic path. It is not a precise arc.
Parameters
-
cX: The x-coordinate of the oval center. -
cY: The y-coordinate of the oval center. -
endX: The end X coordinate. -
endY: The end Y coordinate. -
clockwise: If true, the arc is drawn clockwise around the center point.
-
-
arcTo
public void arcTo(double cX, double cY, double endX, double endY) Adds an arc to the path. This method uses an approximation of an arc using a cubic path. It is not a precise arc.
Note: The arc is drawn counter-clockwise around the center point. See
double, double, double, boolean)to draw clockwise.Parameters
-
cX: The x-coordinate of the oval center. -
cY: The y-coordinate of the oval center. -
endX: The end X coordinate. -
endY: The end Y coordinate.
-
-
arcTo
public void arcTo(double cX, double cY, double endX, double endY, boolean clockwise) Adds an arc to the path. This method uses an approximation of an arc using a cubic path. It is not a precise arc.
Parameters
-
cX: The x-coordinate of the oval center. -
cY: The y-coordinate of the oval center. -
endX: The end X coordinate. -
endY: The end Y coordinate. -
clockwise: If true, the arc is drawn clockwise around the center point.
-
-
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. -
append
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
-
shape: the shape (null not permitted). -
connect: whether to connect the new shape to the existing path.
-
-
append
Appends the segments of a PathIterator to this GeneralPath. Optionally, the initial
PathIterator#SEG_MOVETOsegment of the appended path is changed into aPathIterator#SEG_LINETOsegment.Parameters
-
path: @param path the PathIterator specifying which segments shall be appended (null not permitted). -
connect: @param connect true for substituting the initialPathIterator#SEG_MOVETOsegment by aPathIterator#SEG_LINETO, or false for not performing any substitution. If thisGeneralPathis currently empty, connect is assumed to be false, thus leaving the initialPathIterator#SEG_MOVETOunchanged.
-
-
getCurrentPoint
public float[] getCurrentPoint()Returns the current appending point of the path.
Returns
- Returns:
- 2-element array of the form
[x,y]representingxandycoordinate of the current appending point of the path..
-
getCurrentPoint
public void getCurrentPoint(float[] point) Sets the coordinates of the given point to the current point in the path.
Parameters
point: Out parameter. Will be filled with the coords of the current point.
-
reset
public void reset()Resets the path. All points and segments are destroyed. -
getBounds2D
public float[] getBounds2D()Returns the path's bounding box, in float precision.
Returns
4-element array of the form
[x, y, width, height].- Specified by:
getBounds2Din interfaceShape
-
getBounds2D
public void getBounds2D(float[] out) Sets the 4-element array to the bounding box coordinates of the path. x, y, width, height.
Parameters
out: 4-element float[] array.
-
getBounds
-
getBounds
Sets the coordinates of the provided rectangle to the bounding box of this path.
Parameters
out
-
isRectangle
public boolean isRectangle()Checks to see if this path is a rectangle.
Returns
True if this path forms a rectangle. False otherwise.
- Specified by:
isRectanglein interfaceShape
-
getPathIterator
{
Gets an iterator to walk all of the path segments of the shape.
Returns
A PathIterator that can iterate over the path segments of the shape.
}- Specified by:
getPathIteratorin interfaceShape
-
getPathIterator
{
Gets an iterator where all points are transformed by the provided transform.
Note: If
com.codename1.ui.Transform#isSupported()is false, then using this iterator will throw a Runtime Exception.Parameters
transform
Returns
A PathIterator where points are transformed by the provided transform.
}- Specified by:
getPathIteratorin interfaceShape
-
createTransformedShape
Returns a shape formed by transforming the current shape with the provided transform.
Note: If
com.codename1.ui.Transform#isSupportedis false, this may throw a RuntimeException.Parameters
m: The transform to be used to transform the shape.
Returns
The transformed shape.
-
setPath
Sets this path to be identical to the provided path
pwith the given Transformtapplied to it.Parameters
-
p: The path to copy. -
t: The transform to apply to all points in the path.
-
-
setRect
-
setShape
-
intersect
Sets the current path to the intersection of itself and the provided rectangle.
Parameters
rect: The rectangle to intersect with this path.
Returns
- Returns:
- True if
rectintersects the current path. False otherwise. If there is no intersection, the path will be reset to be empty.
-
intersect
public boolean intersect(int x, int y, int w, int h) -
transform
Transforms the current path in place using the given transform.
Parameters
m: The transform to apply to the path.
-
intersect
Resets this path to be the intersection of itself with the given shape. Note that only
com.codename1.ui.geom.Rectangles are current supported. If you pass any other shape, it will throw a RuntimeException.Note: If
com.codename1.ui.TransformisSupportedis false, this will throw a Runtime ExceptionParameters
shape: The shape to intersect with the current shape.
-
intersection
{
Returns the shape formed by the intersection of this shape and the provided rectangle.
Parameters
rect: A rectangle with which to form an intersection.
Returns
The shape formed by intersecting the current shape with the provided rectangle.
}- Specified by:
intersectionin interfaceShape
-
contains
public boolean contains(float x, float y) Checks if the given point is contained in the current shape.
Parameters
-
x: The x coordinate to check -
y: The y coordinate to check
Returns
True if the point is inside the shape.
-
-
contains
-