PathBuilder

Class

Common
class PathBuilder

PathBuilder provides a fluent API to creates a list of PathNode, used to describe a path.

Properties

Common
val nodes: List<PathNode>

Returns the list of PathNode currently held in this builder.

Functions

fun close(): PathBuilder

Closes the current contour by adding a PathNode.Close to nodes.

fun moveTo(x: Float, y: Float): PathBuilder

Start a new contour at position (x, y) by adding a PathNode.MoveTo to nodes.

Parameters

xThe x coordinate of the start of the new contour
yThe y coordinate of the start of the new contour
fun moveToRelative(dx: Float, dy: Float): PathBuilder

Start a new contour at the offset (dx, dy) relative to the last path position by adding a PathNode.RelativeMoveTo to nodes.

Parameters

dxThe x offset of the start of the new contour, relative to the last path position
dyThe y offset of the start of the new contour, relative to the last path position
fun lineTo(x: Float, y: Float): PathBuilder

Add a line from the last point to the position (x, y) by adding a PathNode.LineTo to nodes. If no contour has been created by calling moveTo first, the origin of the line is set to (0, 0).

Parameters

xThe x coordinate of the end of the line
yThe y coordinate of the end of the line
fun lineToRelative(dx: Float, dy: Float): PathBuilder

Add a line from the last point to the offset (dx, dy) relative to the last point by adding a PathNode.RelativeLineTo to nodes. If no contour has been created by calling moveTo first, the origin of the line is set to (0, 0).

Parameters

dxThe x offset of the end of the line, relative to the last path position
dyThe y offset of the end of the line, relative to the last path position
fun horizontalLineTo(x: Float): PathBuilder

Add a line from the last point to the position (x, oy), where oy is the y coordinate of the last point, by adding a PathNode.HorizontalTo to nodes. If no contour has been created by calling moveTo first, the origin of the line is set to (0, 0).

Parameters

xThe x coordinate of the end of the line
fun horizontalLineToRelative(dx: Float): PathBuilder

Add a line from the last point to the position (dx + ox, oy), where ox and oy are the x and y coordinates of the last point, by adding a PathNode.RelativeHorizontalTo to nodes. If no contour has been created by calling moveTo first, the origin of the line is set to (0, 0).

Parameters

dxThe x offset of the end of the line, relative to the last path position
fun verticalLineTo(y: Float): PathBuilder

Add a line from the last point to the position (ox, y), where ox is the x coordinate of the last point, by adding a PathNode.VerticalTo to nodes. If no contour has been created by calling moveTo first, the origin of the line is set to (0, 0).

Parameters

yThe y coordinate of the end of the line
fun verticalLineToRelative(dy: Float): PathBuilder

Add a line from the last point to the position (ox, dy + oy), where ox and oy are the x and y coordinates of the last point, by adding a PathNode.RelativeVerticalTo to nodes. If no contour has been created by calling moveTo first, the origin of the line is set to (0, 0).

Parameters

dyThe y offset of the end of the line, relative to the last path position
fun curveTo(x1: Float, y1: Float, x2: Float, y2: Float, x3: Float, y3: Float): PathBuilder

Add a cubic Bézier from the last point to the position (x3, y3), approaching the control points (x1, y1) and (x2, y2), by adding a PathNode.CurveTo to nodes. If no contour has been created by calling moveTo first, the origin of the curve is set to (0, 0).

Parameters

x1The x coordinate of the first control point of the cubic curve
y1The y coordinate of the first control point of the cubic curve
x2The x coordinate of the second control point of the cubic curve
y2The y coordinate of the second control point of the cubic curve
x3The x coordinate of the end point of the cubic curve
y3The y coordinate of the end point of the cubic curve
fun curveToRelative(
        dx1: Float,
        dy1: Float,
        dx2: Float,
        dy2: Float,
        dx3: Float,
        dy3: Float,
    ): PathBuilder

Add a cubic Bézier by adding a PathNode.CurveTo to nodes. If no contour has been created by calling moveTo first, the origin of the curve is set to (0, 0). The cubic Bézier control and end points are defined by offsets relative to the last point.

Parameters

dx1The x offset of the first control point of the cubic curve, relative to the last path position
dy1The y offset of the first control point of the cubic curve, relative to the last path position
dx2The x offset of the second control point of the cubic curve, relative to the last path position
dy2The y offset of the second control point of the cubic curve, relative to the last path position
dx3The x offset of the end point of the cubic curve, relative to the last path position
dy3The y offset of the end point of the cubic curve, relative to the last path position
fun reflectiveCurveTo(x1: Float, y1: Float, x2: Float, y2: Float): PathBuilder

Add a cubic Bézier from the last point to the position (x2, y2). The first control point is the reflection of the second control point of the previous command. If there is no previous command or the previous command is not a cubic Bézier, the first control point is set to the last path position. The second control point is defined by (x1, y1). Calling this method adds a PathNode.ReflectiveCurveTo to nodes. If no contour has been created by calling moveTo first, the origin of the curve is set to (0, 0).

Parameters

x1The x coordinate of the second control point of the cubic curve
y1The y coordinate of the second control point of the cubic curve
x2The x coordinate of the end point of the cubic curve
y2The y coordinate of the end point of the cubic curve
fun reflectiveCurveToRelative(dx1: Float, dy1: Float, dx2: Float, dy2: Float): PathBuilder

Add a cubic Bézier by adding a PathNode.RelativeReflectiveCurveTo to nodes. If no contour has been created by calling moveTo first, the origin of the curve is set to (0, 0). The cubic Bézier second control point and end points are defined by offsets relative to the last point. The reflective nature of the curve is described in reflectiveCurveTo.

Parameters

dx1The x offset of the second control point of the cubic curve, relative to the last path position
dy1The y offset of the second control point of the cubic curve, relative to the last path position
dx2The x offset of the end point of the cubic curve, relative to the last path position
dy2The y offset of the end point of the cubic curve, relative to the last path position
fun quadTo(x1: Float, y1: Float, x2: Float, y2: Float): PathBuilder

Add a quadratic Bézier from the last point to the position (x2, y2), approaching the control point (x1, y1), by adding a PathNode.QuadTo to nodes. If no contour has been created by calling moveTo first, the origin of the curve is set to (0, 0).

Parameters

x1The x coordinate of the control point of the quadratic curve
y1The y coordinate of the control point of the quadratic curve
x2The x coordinate of the end point of the quadratic curve
y2The y coordinate of the end point of the quadratic curve
fun quadToRelative(dx1: Float, dy1: Float, dx2: Float, dy2: Float): PathBuilder

Add a quadratic Bézier by adding a PathNode.RelativeQuadTo to nodes. If no contour has been created by calling moveTo first, the origin of the curve is set to (0, 0). The control point and end point of the curve are defined by offsets relative to the last point.

Parameters

dx1The x offset of the control point of the quadratic curve, relative to the last path position
dy1The y offset of the control point of the quadratic curve, relative to the last path position
dx2The x offset of the end point of the quadratic curve, relative to the last path position
dy2The y offset of the end point of the quadratic curve, relative to the last path position
fun reflectiveQuadTo(x1: Float, y1: Float): PathBuilder

Add a quadratic Bézier from the last point to the position (x1, y1). The control point is the reflection of the control point of the previous command. If there is no previous command or the previous command is not a quadratic Bézier, the control point is set to the last path position. Calling this method adds a PathNode.ReflectiveQuadTo to nodes. If no contour has been created by calling moveTo first, the origin of the curve is set to (0, 0).

Parameters

x1The x coordinate of the end point of the quadratic curve
y1The y coordinate of the end point of the quadratic curve
fun reflectiveQuadToRelative(dx1: Float, dy1: Float): PathBuilder

Add a quadratic Bézier by adding a PathNode.RelativeReflectiveQuadTo to nodes. If no contour has been created by calling moveTo first, the origin of the curve is set to (0, 0). The quadratic Bézier end point is defined by an offset relative to the last point. The reflective nature of the curve is described in reflectiveQuadTo.

Parameters

dx1The x offset of the end point of the quadratic curve, relative to the last path position
dy1The y offset of the end point of the quadratic curve, relative to the last path position
fun arcTo(
        horizontalEllipseRadius: Float,
        verticalEllipseRadius: Float,
        theta: Float,
        isMoreThanHalf: Boolean,
        isPositiveArc: Boolean,
        x1: Float,
        y1: Float,
    ): PathBuilder

Add an elliptical arc from the last point to the position (x1, y1) by adding PathNode.ArcTo to nodes. If no contour has been created by calling moveTo first, the origin of the arc is set to (0, 0).

The ellipse is defined by 3 parameters:

  • horizontalEllipseRadius and verticalEllipseRadius to define the size of the ellipse
  • theta to define the orientation (as an X-axis rotation) of the ellipse

In most situations, there are four arc candidates that can be drawn from the origin to (x1, y1). Which of the arcs is used is influenced by isMoreThanHalf and isPositiveArc.

When isMoreThanHalf is set to true, the added arc will be chosen amongst the two candidates that represent an arc sweep greater than or equal to 180 degrees.

When isPositiveArc is set to true, the added arc will be chosen amongst the two candidates with a positive-angle direction (counter-clockwise)

Parameters

horizontalEllipseRadiusThe horizontal radius of the ellipse
verticalEllipseRadiusThe vertical radius of the ellipse
thetaThe rotation of the ellipse around the X-axis, in degrees
isMoreThanHalfDefines whether to use an arc candidate with a sweep greater than or equal to 180 degrees
isPositiveArcDefines whether to use an arc candidate that's counter-clockwise or not
x1The x coordinate of the end point of the arc
y1The y coordinate of the end point of the arc
fun arcToRelative(
        a: Float,
        b: Float,
        theta: Float,
        isMoreThanHalf: Boolean,
        isPositiveArc: Boolean,
        dx1: Float,
        dy1: Float,
    ): PathBuilder

Add an elliptical arc by adding PathNode.RelativeArcTo to nodes. If no contour has been created by calling moveTo first, the origin of the arc is set to (0, 0). The arc Bézier end point is defined by an offset relative to the last point.

The ellipse is defined by 3 parameters:

  • a and b to define the size of the ellipse
  • theta to define the orientation (as an X-axis rotation) of the ellipse

In most situations, there are four arc candidates that can be drawn from the origin to the end point. Which of the arcs is used is influenced by isMoreThanHalf and isPositiveArc.

When isMoreThanHalf is set to true, the added arc will be chosen amongst the two candidates that represent an arc sweep greater than or equal to 180 degrees.

When isPositiveArc is set to true, the added arc will be chosen amongst the two candidates with a positive-angle direction (counter-clockwise)

Parameters

aThe horizontal radius of the ellipse
bThe vertical radius of the ellipse
thetaThe rotation of the ellipse around the X-axis, in degrees
isMoreThanHalfDefines whether to use an arc candidate with a sweep greater than or equal to 180 degrees
isPositiveArcDefines whether to use an arc candidate that's counter-clockwise or not
dx1The x offset of the end point of the arc, relative to the last path position
dy1The y offset of the end point of the arc, relative to the last path position