Class QuadraticCurveTo
- java.lang.Object
-
- com.itextpdf.svg.renderers.path.impl.AbstractPathShape
-
- com.itextpdf.svg.renderers.path.impl.QuadraticCurveTo
-
- All Implemented Interfaces:
IControlPointCurve
,IPathShape
- Direct Known Subclasses:
QuadraticSmoothCurveTo
public class QuadraticCurveTo extends AbstractPathShape implements IControlPointCurve
Implements quadratic Bezier curveTo(Q) attribute of SVG's path element
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static int
ARGUMENT_SIZE
-
Fields inherited from class com.itextpdf.svg.renderers.path.impl.AbstractPathShape
coordinates, copier, properties, relative
-
-
Constructor Summary
Constructors Constructor Description QuadraticCurveTo()
QuadraticCurveTo(boolean relative)
QuadraticCurveTo(boolean relative, IOperatorConverter copier)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static void
addTValueToList(double t, java.util.List<java.lang.Double> tValuesList)
Check that t is in the range [0, 1] and add it to listprivate static double
calculateExtremeCoordinate(double t, double p0, double p1, double p2)
void
draw(PdfCanvas canvas)
Draws a quadratic Bezier curve from the current point to (x,y) using (x1,y1) as the control pointprivate static double[]
getBezierMinMaxPoints(double x0, double y0, double x1, double y1, double x2, double y2)
The algorithm is similar to cubic curve in the method CurveTo#getBezierMinMaxPoints, but the initial function is f(t) = (1 - t)^2*P0 + 2*(1-t)*t*P1 + t^2*P2, 0 <= t <= 1private static double[]
getExtremeTValues(double x0, double y0, double x1, double y1, double x2, double y2)
Calculate values of t at which the function reaches its extreme points.Point
getLastControlPoint()
Returns coordinates of the last control point (the one closest to the ending point) in the Bezier curve, in SVG space coordinatesRectangle
getPathShapeRectangle(Point lastPoint)
Get bounding rectangle of the current path shape.private static double
getTValue(double p0, double p1, double p2)
void
setCoordinates(java.lang.String[] inputCoordinates, Point startPoint)
This method sets the coordinates for the path painting operator and does internal preprocessing, if necessary-
Methods inherited from class com.itextpdf.svg.renderers.path.impl.AbstractPathShape
createPoint, getEndingPoint, isRelative
-
-
-
-
Field Detail
-
ARGUMENT_SIZE
static final int ARGUMENT_SIZE
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
QuadraticCurveTo
public QuadraticCurveTo()
-
QuadraticCurveTo
public QuadraticCurveTo(boolean relative)
-
QuadraticCurveTo
public QuadraticCurveTo(boolean relative, IOperatorConverter copier)
-
-
Method Detail
-
draw
public void draw(PdfCanvas canvas)
Draws a quadratic Bezier curve from the current point to (x,y) using (x1,y1) as the control point- Specified by:
draw
in interfaceIPathShape
- Parameters:
canvas
- to which this instruction is drawn
-
setCoordinates
public void setCoordinates(java.lang.String[] inputCoordinates, Point startPoint)
Description copied from interface:IPathShape
This method sets the coordinates for the path painting operator and does internal preprocessing, if necessary- Specified by:
setCoordinates
in interfaceIPathShape
- Parameters:
inputCoordinates
- an array containing point values for path coordinatesstartPoint
- the ending point of the previous operator, or, in broader terms, the point that the coordinates should be absolutized against, for relative operators
-
getLastControlPoint
public Point getLastControlPoint()
Description copied from interface:IControlPointCurve
Returns coordinates of the last control point (the one closest to the ending point) in the Bezier curve, in SVG space coordinates- Specified by:
getLastControlPoint
in interfaceIControlPointCurve
- Returns:
- coordinates of the last control point in SVG space coordinates
-
getPathShapeRectangle
public Rectangle getPathShapeRectangle(Point lastPoint)
Description copied from class:AbstractPathShape
Get bounding rectangle of the current path shape.- Specified by:
getPathShapeRectangle
in interfaceIPathShape
- Overrides:
getPathShapeRectangle
in classAbstractPathShape
- Parameters:
lastPoint
- start point for this shape- Returns:
- calculated rectangle
-
getBezierMinMaxPoints
private static double[] getBezierMinMaxPoints(double x0, double y0, double x1, double y1, double x2, double y2)
The algorithm is similar to cubic curve in the method CurveTo#getBezierMinMaxPoints, but the initial function is f(t) = (1 - t)^2*P0 + 2*(1-t)*t*P1 + t^2*P2, 0 <= t <= 1- Parameters:
x0
- x coordinate of the starting pointy0
- y coordinate of the starting pointx1
- x coordinate of the control pointy1
- y coordinate of the control pointx2
- x coordinate of the ending pointy2
- y coordinate of the ending point- Returns:
- array of {xMin, yMin, xMax, yMax} values
-
getExtremeTValues
private static double[] getExtremeTValues(double x0, double y0, double x1, double y1, double x2, double y2)
Calculate values of t at which the function reaches its extreme points. To do this, we get the derivative of the function and equate it to 0: f'(t) = 2a*t + b. t can only be in the range [0, 1] and it discarded otherwise.- Parameters:
x0
- x coordinate of the starting pointy0
- y coordinate of the starting pointx1
- x coordinate of the control pointy1
- y coordinate of the control pointx2
- x coordinate of the ending pointy2
- y coordinate of the ending point- Returns:
- array of theta values corresponding to extreme points
-
addTValueToList
private static void addTValueToList(double t, java.util.List<java.lang.Double> tValuesList)
Check that t is in the range [0, 1] and add it to list- Parameters:
t
- value of ttValuesList
- list storing t values
-
getTValue
private static double getTValue(double p0, double p1, double p2)
-
calculateExtremeCoordinate
private static double calculateExtremeCoordinate(double t, double p0, double p1, double p2)
-
-