Properly implement Quadtratic and Cubic bezier-curves and use Quadtratic in CalculatePath to fix #625

This commit is contained in:
BobLd 2024-04-01 13:49:37 +01:00
parent f62929eb7c
commit 2d6cb1aa0c
8 changed files with 387 additions and 203 deletions

View File

@ -176,7 +176,7 @@
} }
/// <summary> /// <summary>
/// Add a <see cref="BezierCurve"/> to the path. /// Add a <see cref="CubicBezierCurve"/> to the path.
/// </summary> /// </summary>
public void BezierCurveTo(double x1, double y1, double x2, double y2, double x3, double y3) public void BezierCurveTo(double x1, double y1, double x2, double y2, double x3, double y3)
{ {
@ -187,7 +187,29 @@
shoeLaceSum += (x3 - x2) * (y3 + y2); shoeLaceSum += (x3 - x2) * (y3 + y2);
var to = new PdfPoint(x3, y3); var to = new PdfPoint(x3, y3);
commands.Add(new BezierCurve(currentPosition.Value, new PdfPoint(x1, y1), new PdfPoint(x2, y2), to)); commands.Add(new CubicBezierCurve(currentPosition.Value, new PdfPoint(x1, y1), new PdfPoint(x2, y2), to));
currentPosition = to;
}
else
{
// PDF Reference 1.7 p226
throw new ArgumentNullException("BezierCurveTo(): currentPosition is null.");
}
}
/// <summary>
/// Add a <see cref="QuadraticBezierCurve"/> to the path.
/// <para>Only used in fonts.</para>
/// </summary>
public void BezierCurveTo(double x1, double y1, double x2, double y2)
{
if (currentPosition.HasValue)
{
shoeLaceSum += (x1 - currentPosition.Value.X) * (y1 + currentPosition.Value.Y);
shoeLaceSum += (x2 - x1) * (y2 + y1);
var to = new PdfPoint(x2, y2);
commands.Add(new QuadraticBezierCurve(currentPosition.Value, new PdfPoint(x1, y1), to));
currentPosition = to; currentPosition = to;
} }
else else
@ -540,14 +562,127 @@
} }
/// <summary> /// <summary>
/// Draw a Bezier curve given by the start, control and end points. /// Draw a quadratic Bezier-curve given by the start, control and end points.
/// <para>Only used in fonts.</para>
/// </summary> /// </summary>
public class BezierCurve : IPathCommand public sealed class QuadraticBezierCurve : BezierCurve
{ {
/// <summary> /// <summary>
/// The start point of the Bezier curve. /// Create a quadratic Bezier-curve at the provided points.
/// <para>Only used in fonts.</para>
/// </summary> /// </summary>
public PdfPoint StartPoint { get; } public QuadraticBezierCurve(PdfPoint startPoint, PdfPoint controlPoint, PdfPoint endPoint)
: base(startPoint, endPoint)
{
ControlPoint = controlPoint;
}
/// <summary>
/// The control point of the curve.
/// </summary>
public PdfPoint ControlPoint { get; }
/// <inheritdoc/>
public override void WriteSvg(StringBuilder builder, double height)
{
builder.Append($"C {ControlPoint.X} {height - ControlPoint.Y}, {EndPoint.X} {height - EndPoint.Y} ");
}
/// <inheritdoc/>
protected internal override bool TrySolve(bool isX, double currentMin, double currentMax, out (double min, double max) solutions)
{
solutions = default((double, double));
// Given k points the general form is:
// P = (1-t)^(k - i - 1)*t^(i)*P_i
//
// For 3 points this gives:
// P = (1-t)^2*P_1 + 2(1-t)*t*P_2 + t^2*P_3
// The differential is:
// P' = 2(1-t)(P_2 - P_1) + 2t(P_3 - P_2)
var p1 = isX ? StartPoint.X : StartPoint.Y;
var p2 = isX ? ControlPoint.X : ControlPoint.Y;
var p3 = isX ? EndPoint.X : EndPoint.Y;
var t = (p1 - p2) / (p1 - 2.0 * p2 + p3);
if (t >= 0 && t <= 1)
{
var sol = ValueWithT(p1, p2, p3, t);
if (sol < currentMin)
{
currentMin = sol;
}
if (sol > currentMax)
{
currentMax = sol;
}
}
solutions = (currentMin, currentMax);
return true;
}
/// <inheritdoc />
public override IReadOnlyList<Line> ToLines(int n)
{
if (n < 1)
{
throw new ArgumentException("BezierCurve.ToLines(): n must be greater than 0.");
}
List<Line> lines = new List<Line>();
var previousPoint = StartPoint;
for (int p = 1; p <= n; p++)
{
double t = p / (double)n;
var currentPoint = new PdfPoint(ValueWithT(StartPoint.X, ControlPoint.X, EndPoint.X, t),
ValueWithT(StartPoint.Y, ControlPoint.Y, EndPoint.Y, t));
lines.Add(new Line(previousPoint, currentPoint));
previousPoint = currentPoint;
}
return lines;
}
/// <inheritdoc />
public override bool Equals(object obj)
{
if (obj is QuadraticBezierCurve curve)
{
return StartPoint.Equals(curve.StartPoint) &&
ControlPoint.Equals(curve.ControlPoint) &&
EndPoint.Equals(curve.EndPoint);
}
return false;
}
/// <inheritdoc />
public override int GetHashCode()
{
return HashCode.Combine(StartPoint, ControlPoint, EndPoint);
}
}
/// <summary>
/// Draw a cubic Bezier-curve given by the start, control and end points.
/// </summary>
public sealed class CubicBezierCurve : BezierCurve
{
/// <summary>
/// Create a cubic Bezier-curve at the provided points.
/// </summary>
public CubicBezierCurve(PdfPoint startPoint, PdfPoint firstControlPoint, PdfPoint secondControlPoint, PdfPoint endPoint)
: base(startPoint, endPoint)
{
FirstControlPoint = firstControlPoint;
SecondControlPoint = secondControlPoint;
}
/// <summary> /// <summary>
/// The first control point of the curve. /// The first control point of the curve.
@ -559,71 +694,16 @@
/// </summary> /// </summary>
public PdfPoint SecondControlPoint { get; } public PdfPoint SecondControlPoint { get; }
/// <summary> /// <inheritdoc/>
/// The end point of the curve. public override void WriteSvg(StringBuilder builder, double height)
/// </summary>
public PdfPoint EndPoint { get; }
/// <summary>
/// Create a Bezier curve at the provided points.
/// </summary>
public BezierCurve(PdfPoint startPoint, PdfPoint firstControlPoint, PdfPoint secondControlPoint, PdfPoint endPoint)
{ {
StartPoint = startPoint; builder.Append($"C {FirstControlPoint.X} {height - FirstControlPoint.Y}, {SecondControlPoint.X} {height - SecondControlPoint.Y}, {EndPoint.X} {height - EndPoint.Y} ");
FirstControlPoint = firstControlPoint;
SecondControlPoint = secondControlPoint;
EndPoint = endPoint;
} }
/// <inheritdoc /> /// <inheritdoc/>
public PdfRectangle? GetBoundingRectangle() protected internal override bool TrySolve(bool isX, double currentMin, double currentMax, out (double min, double max) solutions)
{ {
// Optimised return TrySolveQuadratic(isX, currentMin, currentMax, out solutions);
double minX;
double maxX;
if (StartPoint.X <= EndPoint.X)
{
minX = StartPoint.X;
maxX = EndPoint.X;
}
else
{
minX = EndPoint.X;
maxX = StartPoint.X;
}
double minY;
double maxY;
if (StartPoint.Y <= EndPoint.Y)
{
minY = StartPoint.Y;
maxY = EndPoint.Y;
}
else
{
minY = EndPoint.Y;
maxY = StartPoint.Y;
}
if (TrySolveQuadratic(true, minX, maxX, out var xSolutions))
{
minX = xSolutions.min;
maxX = xSolutions.max;
}
if (TrySolveQuadratic(false, minY, maxY, out var ySolutions))
{
minY = ySolutions.min;
maxY = ySolutions.max;
}
return new PdfRectangle(minX, minY, maxX, maxY);
}
/// <inheritdoc />
public void WriteSvg(StringBuilder builder, double height)
{
builder.Append($"C {FirstControlPoint.X} { height - FirstControlPoint.Y}, { SecondControlPoint.X} {height - SecondControlPoint.Y}, {EndPoint.X} {height - EndPoint.Y} ");
} }
private bool TrySolveQuadratic(bool isX, double currentMin, double currentMax, out (double min, double max) solutions) private bool TrySolveQuadratic(bool isX, double currentMin, double currentMax, out (double min, double max) solutions)
@ -705,27 +785,8 @@
return true; return true;
} }
/// <summary> /// <inheritdoc />
/// Calculate the value of the Bezier curve at t. public override IReadOnlyList<Line> ToLines(int n)
/// </summary>
public static double ValueWithT(double p1, double p2, double p3, double p4, double t)
{
// P = (1t)^3*P_1 + 3(1t)^2*t*P_2 + 3(1t)*t^2*P_3 + t^3*P_4
var oneMinusT = 1 - t;
var p = ((oneMinusT * oneMinusT * oneMinusT) * p1)
+ (3 * (oneMinusT * oneMinusT) * t * p2)
+ (3 * oneMinusT * (t * t) * p3)
+ ((t * t * t) * p4);
return p;
}
/// <summary>
/// Converts the bezier curve into approximated lines.
/// </summary>
/// <param name="n">Number of lines required (minimum is 1).</param>
/// <returns></returns>
public IReadOnlyList<Line> ToLines(int n)
{ {
if (n < 1) if (n < 1)
{ {
@ -749,7 +810,7 @@
/// <inheritdoc /> /// <inheritdoc />
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
if (obj is BezierCurve curve) if (obj is CubicBezierCurve curve)
{ {
return StartPoint.Equals(curve.StartPoint) && return StartPoint.Equals(curve.StartPoint) &&
FirstControlPoint.Equals(curve.FirstControlPoint) && FirstControlPoint.Equals(curve.FirstControlPoint) &&
@ -766,6 +827,119 @@
} }
} }
/// <summary>
/// Draw a Bezier-curve given by the start, control and end points.
/// </summary>
public abstract class BezierCurve : IPathCommand
{
/// <summary>
/// The start point of the Bezier-curve.
/// </summary>
public PdfPoint StartPoint { get; }
/// <summary>
/// The end point of the curve.
/// </summary>
public PdfPoint EndPoint { get; }
/// <summary>
/// Create a Bezier-curve at the provided points.
/// </summary>
protected BezierCurve(PdfPoint startPoint, PdfPoint endPoint)
{
StartPoint = startPoint;
EndPoint = endPoint;
}
/// <inheritdoc />
public PdfRectangle? GetBoundingRectangle()
{
// Optimised
double minX;
double maxX;
if (StartPoint.X <= EndPoint.X)
{
minX = StartPoint.X;
maxX = EndPoint.X;
}
else
{
minX = EndPoint.X;
maxX = StartPoint.X;
}
double minY;
double maxY;
if (StartPoint.Y <= EndPoint.Y)
{
minY = StartPoint.Y;
maxY = EndPoint.Y;
}
else
{
minY = EndPoint.Y;
maxY = StartPoint.Y;
}
if (TrySolve(true, minX, maxX, out var xSolutions))
{
minX = xSolutions.min;
maxX = xSolutions.max;
}
if (TrySolve(false, minY, maxY, out var ySolutions))
{
minY = ySolutions.min;
maxY = ySolutions.max;
}
return new PdfRectangle(minX, minY, maxX, maxY);
}
/// <inheritdoc />
public abstract void WriteSvg(StringBuilder builder, double height);
/// <summary>
/// TODO
/// </summary>
protected internal abstract bool TrySolve(bool isX, double currentMin, double currentMax, out (double min, double max) solutions);
/// <summary>
/// Calculate the value of the Quadratic Bezier-curve at t.
/// </summary>
public static double ValueWithT(double p1, double p2, double p3, double t)
{
// P = (1t)^2*P_1 + 2(1t)*t*P_2 + t^2*P_3
var oneMinusT = 1 - t;
var p = ((oneMinusT * oneMinusT) * p1)
+ (2 * (oneMinusT) * t * p2)
+ ((t * t) * p3);
return p;
}
/// <summary>
/// Calculate the value of the Cubic Bezier-curve at t.
/// </summary>
public static double ValueWithT(double p1, double p2, double p3, double p4, double t)
{
// P = (1t)^3*P_1 + 3(1t)^2*t*P_2 + 3(1t)*t^2*P_3 + t^3*P_4
var oneMinusT = 1 - t;
var p = ((oneMinusT * oneMinusT * oneMinusT) * p1)
+ (3 * (oneMinusT * oneMinusT) * t * p2)
+ (3 * oneMinusT * (t * t) * p3)
+ ((t * t * t) * p4);
return p;
}
/// <summary>
/// Converts the bezier curve into approximated lines.
/// </summary>
/// <param name="n">Number of lines required (minimum is 1).</param>
public abstract IReadOnlyList<Line> ToLines(int n);
}
/// <summary> /// <summary>
/// Compares two <see cref="PdfSubpath"/>s for equality. Paths will only be considered equal if the commands which construct the paths are in the same order. /// Compares two <see cref="PdfSubpath"/>s for equality. Paths will only be considered equal if the commands which construct the paths are in the same order.
/// </summary> /// </summary>

View File

@ -295,13 +295,19 @@
var to = Transform(line.To); var to = Transform(line.To);
trSubpath.LineTo(to.X, to.Y); trSubpath.LineTo(to.X, to.Y);
} }
else if (c is BezierCurve curve) else if (c is CubicBezierCurve cubic)
{ {
var first = Transform(curve.FirstControlPoint); var first = Transform(cubic.FirstControlPoint);
var second = Transform(curve.SecondControlPoint); var second = Transform(cubic.SecondControlPoint);
var end = Transform(curve.EndPoint); var end = Transform(cubic.EndPoint);
trSubpath.BezierCurveTo(first.X, first.Y, second.X, second.Y, end.X, end.Y); trSubpath.BezierCurveTo(first.X, first.Y, second.X, second.Y, end.X, end.Y);
} }
else if (c is QuadraticBezierCurve quadratic)
{
var control = Transform(quadratic.ControlPoint);
var end = Transform(quadratic.EndPoint);
trSubpath.BezierCurveTo(control.X, control.Y, end.X, end.Y);
}
else if (c is Close) else if (c is Close)
{ {
trSubpath.CloseSubpath(); trSubpath.CloseSubpath();

View File

@ -182,16 +182,14 @@
} }
else if (contour[j + 1].IsOnCurve) else if (contour[j + 1].IsOnCurve)
{ {
var pPrevious = contour[j - 1];
var pNext = contour[j + 1]; var pNext = contour[j + 1];
subpath.BezierCurveTo(pPrevious.X, pPrevious.Y, pNow.X, pNow.Y, pNext.X, pNext.Y); subpath.BezierCurveTo(pNow.X, pNow.Y, pNext.X, pNext.Y);
++j; ++j;
} }
else else
{ {
var pPrevious = contour[j - 1];
var pmid = midValue(pNow, contour[j + 1]); var pmid = midValue(pNow, contour[j + 1]);
subpath.BezierCurveTo(pPrevious.X, pPrevious.Y, pNow.X, pNow.Y, pmid.X, pmid.Y); subpath.BezierCurveTo(pNow.X, pNow.Y, pmid.X, pmid.Y);
} }
} }
subpath.CloseSubpath(); subpath.CloseSubpath();

View File

@ -8,11 +8,11 @@
[Fact] [Fact]
public void BezierCurveGeneratesCorrectBoundingBox() public void BezierCurveGeneratesCorrectBoundingBox()
{ {
var curve = new PdfSubpath.BezierCurve(new PdfPoint(60, 105), var curve = new PdfSubpath.CubicBezierCurve(new PdfPoint(60, 105),
new PdfPoint(75, 30), new PdfPoint(75, 30),
new PdfPoint(215, 115), new PdfPoint(215, 115),
new PdfPoint(140, 160)); new PdfPoint(140, 160));
var result = curve.GetBoundingRectangle(); var result = curve.GetBoundingRectangle();
Assert.NotNull(result); Assert.NotNull(result);
Assert.Equal(160, result.Value.Top); Assert.Equal(160, result.Value.Top);
@ -26,7 +26,7 @@
[Fact] [Fact]
public void LoopBezierCurveGeneratesCorrectBoundingBox() public void LoopBezierCurveGeneratesCorrectBoundingBox()
{ {
var curve = new PdfSubpath.BezierCurve(new PdfPoint(166, 142), var curve = new PdfSubpath.CubicBezierCurve(new PdfPoint(166, 142),
new PdfPoint(75, 30), new PdfPoint(75, 30),
new PdfPoint(215, 115), new PdfPoint(215, 115),
new PdfPoint(140, 160)); new PdfPoint(140, 160));
@ -45,7 +45,7 @@
[Fact] [Fact]
public void BezierCurveAddsCorrectSvgCommand() public void BezierCurveAddsCorrectSvgCommand()
{ {
var curve = new PdfSubpath.BezierCurve(new PdfPoint(60, 105), var curve = new PdfSubpath.CubicBezierCurve(new PdfPoint(60, 105),
new PdfPoint(75, 30), new PdfPoint(75, 30),
new PdfPoint(215, 115), new PdfPoint(215, 115),
new PdfPoint(140, 160)); new PdfPoint(140, 160));

View File

@ -4,7 +4,7 @@
using UglyToad.PdfPig.Geometry; using UglyToad.PdfPig.Geometry;
using static UglyToad.PdfPig.Core.PdfSubpath; using static UglyToad.PdfPig.Core.PdfSubpath;
public class BezierCurveTests public class CubicBezierCurveTests
{ {
private static readonly DoubleComparer DoubleComparer = new DoubleComparer(3); private static readonly DoubleComparer DoubleComparer = new DoubleComparer(3);
private static readonly DoubleComparer PreciseDoubleComparer = new DoubleComparer(6); private static readonly DoubleComparer PreciseDoubleComparer = new DoubleComparer(6);
@ -15,391 +15,391 @@
{ {
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(860.9740224161592, 157.5429444845594), new PdfPoint(344.7182734270533, 213.88461672251213), new PdfPoint(854.7209159935761, 959.185777687854), new PdfPoint(905.7470922668831, 16.404795800137208)), new CubicBezierCurve(new PdfPoint(860.9740224161592, 157.5429444845594), new PdfPoint(344.7182734270533, 213.88461672251213), new PdfPoint(854.7209159935761, 959.185777687854), new PdfPoint(905.7470922668831, 16.404795800137208)),
new PdfLine(254.79108145162598, 682.060779843296, 947.7904279176938, 520.4272311180389), new PdfLine(254.79108145162598, 682.060779843296, 947.7904279176938, 520.4272311180389),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(860.9740224161592, 157.5429444845594), new PdfPoint(344.7182734270533, 213.88461672251213), new PdfPoint(854.7209159935761, 959.185777687854), new PdfPoint(905.7470922668831, 16.404795800137208)), new CubicBezierCurve(new PdfPoint(860.9740224161592, 157.5429444845594), new PdfPoint(344.7182734270533, 213.88461672251213), new PdfPoint(854.7209159935761, 959.185777687854), new PdfPoint(905.7470922668831, 16.404795800137208)),
new PdfLine(729.8566728331167, 136.87608890796832, 990.5738508807495, 839.4324109521033), new PdfLine(729.8566728331167, 136.87608890796832, 990.5738508807495, 839.4324109521033),
new PdfPoint[] { new PdfPoint(748.25810798903, 186.4625591984302), new PdfPoint(829.089079069829, 404.27831715898503), } new PdfPoint[] { new PdfPoint(748.25810798903, 186.4625591984302), new PdfPoint(829.089079069829, 404.27831715898503), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(212.206206559851, 172.10078974021147), new PdfPoint(997.301042585529, 180.0045754823748), new PdfPoint(933.8767807399723, 931.436109575299), new PdfPoint(188.95424054200916, 62.185727940236355)), new CubicBezierCurve(new PdfPoint(212.206206559851, 172.10078974021147), new PdfPoint(997.301042585529, 180.0045754823748), new PdfPoint(933.8767807399723, 931.436109575299), new PdfPoint(188.95424054200916, 62.185727940236355)),
new PdfLine(88.36094493352186, 597.4280390307932, 602.2923798085163, 245.06103961412552), new PdfLine(88.36094493352186, 597.4280390307932, 602.2923798085163, 245.06103961412552),
new PdfPoint[] { new PdfPoint(592.4920528842322, 251.78044138111852), new PdfPoint(463.44158905248514, 340.2613585384481), } new PdfPoint[] { new PdfPoint(592.4920528842322, 251.78044138111852), new PdfPoint(463.44158905248514, 340.2613585384481), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(212.206206559851, 172.10078974021147), new PdfPoint(997.301042585529, 180.0045754823748), new PdfPoint(933.8767807399723, 931.436109575299), new PdfPoint(188.95424054200916, 62.185727940236355)), new CubicBezierCurve(new PdfPoint(212.206206559851, 172.10078974021147), new PdfPoint(997.301042585529, 180.0045754823748), new PdfPoint(933.8767807399723, 931.436109575299), new PdfPoint(188.95424054200916, 62.185727940236355)),
new PdfLine(665.1316218529099, 713.5599052691191, 586.3797657351924, 403.96970028621337), new PdfLine(665.1316218529099, 713.5599052691191, 586.3797657351924, 403.96970028621337),
new PdfPoint[] { new PdfPoint(594.0987775183773, 434.31476842847394), } new PdfPoint[] { new PdfPoint(594.0987775183773, 434.31476842847394), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(212.206206559851, 172.10078974021147), new PdfPoint(997.301042585529, 180.0045754823748), new PdfPoint(933.8767807399723, 931.436109575299), new PdfPoint(188.95424054200916, 62.185727940236355)), new CubicBezierCurve(new PdfPoint(212.206206559851, 172.10078974021147), new PdfPoint(997.301042585529, 180.0045754823748), new PdfPoint(933.8767807399723, 931.436109575299), new PdfPoint(188.95424054200916, 62.185727940236355)),
new PdfLine(804.1323688937351, 66.82304158268526, 940.224642584682, 100.47258256631386), new PdfLine(804.1323688937351, 66.82304158268526, 940.224642584682, 100.47258256631386),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(212.206206559851, 172.10078974021147), new PdfPoint(997.301042585529, 180.0045754823748), new PdfPoint(933.8767807399723, 931.436109575299), new PdfPoint(188.95424054200916, 62.185727940236355)), new CubicBezierCurve(new PdfPoint(212.206206559851, 172.10078974021147), new PdfPoint(997.301042585529, 180.0045754823748), new PdfPoint(933.8767807399723, 931.436109575299), new PdfPoint(188.95424054200916, 62.185727940236355)),
new PdfLine(812.8104597545758, 745.4386135457731, 318.3220239520439, 8.025319010011579), new PdfLine(812.8104597545758, 745.4386135457731, 318.3220239520439, 8.025319010011579),
new PdfPoint[] { new PdfPoint(447.12538816961035, 200.10526725150086), new PdfPoint(610.3284245812009, 443.48424246088365), } new PdfPoint[] { new PdfPoint(447.12538816961035, 200.10526725150086), new PdfPoint(610.3284245812009, 443.48424246088365), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(212.206206559851, 172.10078974021147), new PdfPoint(997.301042585529, 180.0045754823748), new PdfPoint(933.8767807399723, 931.436109575299), new PdfPoint(188.95424054200916, 62.185727940236355)), new CubicBezierCurve(new PdfPoint(212.206206559851, 172.10078974021147), new PdfPoint(997.301042585529, 180.0045754823748), new PdfPoint(933.8767807399723, 931.436109575299), new PdfPoint(188.95424054200916, 62.185727940236355)),
new PdfLine(697.2949312513251, 648.7844047047331, 839.7087362266726, 142.62959416728316), new PdfLine(697.2949312513251, 648.7844047047331, 839.7087362266726, 142.62959416728316),
new PdfPoint[] { new PdfPoint(766.2642561966622, 403.65960373023546), new PdfPoint(745.1687908479832, 478.63527949852437), } new PdfPoint[] { new PdfPoint(766.2642561966622, 403.65960373023546), new PdfPoint(745.1687908479832, 478.63527949852437), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(162.30704808607365, 77.7857017776299), new PdfPoint(654.5209449168806, 511.8017465626018), new PdfPoint(39.140335951874825, 185.74361298083087), new PdfPoint(886.0097844389244, 713.4305002270161)), new CubicBezierCurve(new PdfPoint(162.30704808607365, 77.7857017776299), new PdfPoint(654.5209449168806, 511.8017465626018), new PdfPoint(39.140335951874825, 185.74361298083087), new PdfPoint(886.0097844389244, 713.4305002270161)),
new PdfLine(728.6021436206884, 342.0432715186694, 358.18963651006, 701.7986839375765), new PdfLine(728.6021436206884, 342.0432715186694, 358.18963651006, 701.7986839375765),
new PdfPoint[] { new PdfPoint(560.5715695500569, 505.2394576985048), } new PdfPoint[] { new PdfPoint(560.5715695500569, 505.2394576985048), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(162.30704808607365, 77.7857017776299), new PdfPoint(654.5209449168806, 511.8017465626018), new PdfPoint(39.140335951874825, 185.74361298083087), new PdfPoint(886.0097844389244, 713.4305002270161)), new CubicBezierCurve(new PdfPoint(162.30704808607365, 77.7857017776299), new PdfPoint(654.5209449168806, 511.8017465626018), new PdfPoint(39.140335951874825, 185.74361298083087), new PdfPoint(886.0097844389244, 713.4305002270161)),
new PdfLine(355.302180992641, 584.1839996311045, 667.9136863127338, 812.4410346366244), new PdfLine(355.302180992641, 584.1839996311045, 667.9136863127338, 812.4410346366244),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(162.30704808607365, 77.7857017776299), new PdfPoint(654.5209449168806, 511.8017465626018), new PdfPoint(39.140335951874825, 185.74361298083087), new PdfPoint(886.0097844389244, 713.4305002270161)), new CubicBezierCurve(new PdfPoint(162.30704808607365, 77.7857017776299), new PdfPoint(654.5209449168806, 511.8017465626018), new PdfPoint(39.140335951874825, 185.74361298083087), new PdfPoint(886.0097844389244, 713.4305002270161)),
new PdfLine(792.6269422654265, 273.42816187201356, 952.9930110855164, 77.33157342656027), new PdfLine(792.6269422654265, 273.42816187201356, 952.9930110855164, 77.33157342656027),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(162.30704808607365, 77.7857017776299), new PdfPoint(654.5209449168806, 511.8017465626018), new PdfPoint(39.140335951874825, 185.74361298083087), new PdfPoint(886.0097844389244, 713.4305002270161)), new CubicBezierCurve(new PdfPoint(162.30704808607365, 77.7857017776299), new PdfPoint(654.5209449168806, 511.8017465626018), new PdfPoint(39.140335951874825, 185.74361298083087), new PdfPoint(886.0097844389244, 713.4305002270161)),
new PdfLine(325.37975926326266, 492.66111408728386, 913.4899158744134, 500.3537703864336), new PdfLine(325.37975926326266, 492.66111408728386, 913.4899158744134, 500.3537703864336),
new PdfPoint[] { new PdfPoint(546.2479353326921, 495.5501357217896), } new PdfPoint[] { new PdfPoint(546.2479353326921, 495.5501357217896), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(162.30704808607365, 77.7857017776299), new PdfPoint(654.5209449168806, 511.8017465626018), new PdfPoint(39.140335951874825, 185.74361298083087), new PdfPoint(886.0097844389244, 713.4305002270161)), new CubicBezierCurve(new PdfPoint(162.30704808607365, 77.7857017776299), new PdfPoint(654.5209449168806, 511.8017465626018), new PdfPoint(39.140335951874825, 185.74361298083087), new PdfPoint(886.0097844389244, 713.4305002270161)),
new PdfLine(465.07931499599465, 884.2994016134486, 50.2667032360784, 395.9516429181256), new PdfLine(465.07931499599465, 884.2994016134486, 50.2667032360784, 395.9516429181256),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(94.5510147955867, 954.8838185846764), new PdfPoint(842.5175777578082, 857.3411537953642), new PdfPoint(393.2405256504369, 894.0951969270949), new PdfPoint(295.14463007696446, 485.31151069277814)), new CubicBezierCurve(new PdfPoint(94.5510147955867, 954.8838185846764), new PdfPoint(842.5175777578082, 857.3411537953642), new PdfPoint(393.2405256504369, 894.0951969270949), new PdfPoint(295.14463007696446, 485.31151069277814)),
new PdfLine(324.6339714193924, 894.3162595100404, 980.3117167961021, 179.2305485734329), new PdfLine(324.6339714193924, 894.3162595100404, 980.3117167961021, 179.2305485734329),
new PdfPoint[] { new PdfPoint(447.17620899022927, 760.6710295308544), } new PdfPoint[] { new PdfPoint(447.17620899022927, 760.6710295308544), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(94.5510147955867, 954.8838185846764), new PdfPoint(842.5175777578082, 857.3411537953642), new PdfPoint(393.2405256504369, 894.0951969270949), new PdfPoint(295.14463007696446, 485.31151069277814)), new CubicBezierCurve(new PdfPoint(94.5510147955867, 954.8838185846764), new PdfPoint(842.5175777578082, 857.3411537953642), new PdfPoint(393.2405256504369, 894.0951969270949), new PdfPoint(295.14463007696446, 485.31151069277814)),
new PdfLine(234.3408935547563, 927.5491824730019, 207.72270423898487, 133.5652610679523), new PdfLine(234.3408935547563, 927.5491824730019, 207.72270423898487, 133.5652610679523),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(94.5510147955867, 954.8838185846764), new PdfPoint(842.5175777578082, 857.3411537953642), new PdfPoint(393.2405256504369, 894.0951969270949), new PdfPoint(295.14463007696446, 485.31151069277814)), new CubicBezierCurve(new PdfPoint(94.5510147955867, 954.8838185846764), new PdfPoint(842.5175777578082, 857.3411537953642), new PdfPoint(393.2405256504369, 894.0951969270949), new PdfPoint(295.14463007696446, 485.31151069277814)),
new PdfLine(65.09615514441158, 591.9902038678356, 954.7371941806332, 932.2313731349518), new PdfLine(65.09615514441158, 591.9902038678356, 954.7371941806332, 932.2313731349518),
new PdfPoint[] { new PdfPoint(418.1216123613029, 727.0039780465277), } new PdfPoint[] { new PdfPoint(418.1216123613029, 727.0039780465277), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(94.5510147955867, 954.8838185846764), new PdfPoint(842.5175777578082, 857.3411537953642), new PdfPoint(393.2405256504369, 894.0951969270949), new PdfPoint(295.14463007696446, 485.31151069277814)), new CubicBezierCurve(new PdfPoint(94.5510147955867, 954.8838185846764), new PdfPoint(842.5175777578082, 857.3411537953642), new PdfPoint(393.2405256504369, 894.0951969270949), new PdfPoint(295.14463007696446, 485.31151069277814)),
new PdfLine(339.46434964602633, 183.7357141951579, 60.811093697461295, 155.73387900126434), new PdfLine(339.46434964602633, 183.7357141951579, 60.811093697461295, 155.73387900126434),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(94.5510147955867, 954.8838185846764), new PdfPoint(842.5175777578082, 857.3411537953642), new PdfPoint(393.2405256504369, 894.0951969270949), new PdfPoint(295.14463007696446, 485.31151069277814)), new CubicBezierCurve(new PdfPoint(94.5510147955867, 954.8838185846764), new PdfPoint(842.5175777578082, 857.3411537953642), new PdfPoint(393.2405256504369, 894.0951969270949), new PdfPoint(295.14463007696446, 485.31151069277814)),
new PdfLine(278.2347023405965, 917.386189447998, 247.1459794296712, 521.2005738378359), new PdfLine(278.2347023405965, 917.386189447998, 247.1459794296712, 521.2005738378359),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(886.2246600944047, 424.21223636569306), new PdfPoint(193.37982587845337, 561.8168900800805), new PdfPoint(142.7023893319638, 663.0592498576402), new PdfPoint(623.1621885864697, 764.1597027877965)), new CubicBezierCurve(new PdfPoint(886.2246600944047, 424.21223636569306), new PdfPoint(193.37982587845337, 561.8168900800805), new PdfPoint(142.7023893319638, 663.0592498576402), new PdfPoint(623.1621885864697, 764.1597027877965)),
new PdfLine(587.2729667027255, 259.030420708796, 484.6376100771876, 963.951407114335), new PdfLine(587.2729667027255, 259.030420708796, 484.6376100771876, 963.951407114335),
new PdfPoint[] { new PdfPoint(552.0129702448811, 501.20341353429967), new PdfPoint(517.2933000779457, 739.6653329588719), } new PdfPoint[] { new PdfPoint(552.0129702448811, 501.20341353429967), new PdfPoint(517.2933000779457, 739.6653329588719), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(886.2246600944047, 424.21223636569306), new PdfPoint(193.37982587845337, 561.8168900800805), new PdfPoint(142.7023893319638, 663.0592498576402), new PdfPoint(623.1621885864697, 764.1597027877965)), new CubicBezierCurve(new PdfPoint(886.2246600944047, 424.21223636569306), new PdfPoint(193.37982587845337, 561.8168900800805), new PdfPoint(142.7023893319638, 663.0592498576402), new PdfPoint(623.1621885864697, 764.1597027877965)),
new PdfLine(816.8296988364423, 746.2086830959222, 3.46277248213811, 809.5714236153934), new PdfLine(816.8296988364423, 746.2086830959222, 3.46277248213811, 809.5714236153934),
new PdfPoint[] { new PdfPoint(613.2846778895625, 762.0652048309472), } new PdfPoint[] { new PdfPoint(613.2846778895625, 762.0652048309472), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(886.2246600944047, 424.21223636569306), new PdfPoint(193.37982587845337, 561.8168900800805), new PdfPoint(142.7023893319638, 663.0592498576402), new PdfPoint(623.1621885864697, 764.1597027877965)), new CubicBezierCurve(new PdfPoint(886.2246600944047, 424.21223636569306), new PdfPoint(193.37982587845337, 561.8168900800805), new PdfPoint(142.7023893319638, 663.0592498576402), new PdfPoint(623.1621885864697, 764.1597027877965)),
new PdfLine(560.0064517763149, 301.3770694336605, 753.7553240633188, 898.319162798539), new PdfLine(560.0064517763149, 301.3770694336605, 753.7553240633188, 898.319162798539),
new PdfPoint[] { new PdfPoint(619.0791872752442, 483.38072175574905), } new PdfPoint[] { new PdfPoint(619.0791872752442, 483.38072175574905), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(886.2246600944047, 424.21223636569306), new PdfPoint(193.37982587845337, 561.8168900800805), new PdfPoint(142.7023893319638, 663.0592498576402), new PdfPoint(623.1621885864697, 764.1597027877965)), new CubicBezierCurve(new PdfPoint(886.2246600944047, 424.21223636569306), new PdfPoint(193.37982587845337, 561.8168900800805), new PdfPoint(142.7023893319638, 663.0592498576402), new PdfPoint(623.1621885864697, 764.1597027877965)),
new PdfLine(623.1281970170056, 275.3483340185553, 302.8753987740701, 471.6548554918094), new PdfLine(623.1281970170056, 275.3483340185553, 302.8753987740701, 471.6548554918094),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(886.2246600944047, 424.21223636569306), new PdfPoint(193.37982587845337, 561.8168900800805), new PdfPoint(142.7023893319638, 663.0592498576402), new PdfPoint(623.1621885864697, 764.1597027877965)), new CubicBezierCurve(new PdfPoint(886.2246600944047, 424.21223636569306), new PdfPoint(193.37982587845337, 561.8168900800805), new PdfPoint(142.7023893319638, 663.0592498576402), new PdfPoint(623.1621885864697, 764.1597027877965)),
new PdfLine(864.450032242052, 186.96506468480533, 826.8630880039641, 128.24197360402235), new PdfLine(864.450032242052, 186.96506468480533, 826.8630880039641, 128.24197360402235),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(741.7837621228784, 579.5834860990241), new PdfPoint(467.9250981072021, 391.151508990668), new PdfPoint(363.9348547812733, 907.7828368542935), new PdfPoint(398.33133393885555, 595.4799798620128)), new CubicBezierCurve(new PdfPoint(741.7837621228784, 579.5834860990241), new PdfPoint(467.9250981072021, 391.151508990668), new PdfPoint(363.9348547812733, 907.7828368542935), new PdfPoint(398.33133393885555, 595.4799798620128)),
new PdfLine(812.6218111750429, 408.5331924593578, 977.316830923921, 236.95892418679153), new PdfLine(812.6218111750429, 408.5331924593578, 977.316830923921, 236.95892418679153),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(741.7837621228784, 579.5834860990241), new PdfPoint(467.9250981072021, 391.151508990668), new PdfPoint(363.9348547812733, 907.7828368542935), new PdfPoint(398.33133393885555, 595.4799798620128)), new CubicBezierCurve(new PdfPoint(741.7837621228784, 579.5834860990241), new PdfPoint(467.9250981072021, 391.151508990668), new PdfPoint(363.9348547812733, 907.7828368542935), new PdfPoint(398.33133393885555, 595.4799798620128)),
new PdfLine(385.9780089087079, 480.59420237123163, 978.9247102753087, 688.5102135329972), new PdfLine(385.9780089087079, 480.59420237123163, 978.9247102753087, 688.5102135329972),
new PdfPoint[] { new PdfPoint(570.8435601367289, 545.4170741807284), } new PdfPoint[] { new PdfPoint(570.8435601367289, 545.4170741807284), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(741.7837621228784, 579.5834860990241), new PdfPoint(467.9250981072021, 391.151508990668), new PdfPoint(363.9348547812733, 907.7828368542935), new PdfPoint(398.33133393885555, 595.4799798620128)), new CubicBezierCurve(new PdfPoint(741.7837621228784, 579.5834860990241), new PdfPoint(467.9250981072021, 391.151508990668), new PdfPoint(363.9348547812733, 907.7828368542935), new PdfPoint(398.33133393885555, 595.4799798620128)),
new PdfLine(975.415154947096, 389.2211415358068, 784.0273503458359, 816.3183722500186), new PdfLine(975.415154947096, 389.2211415358068, 784.0273503458359, 816.3183722500186),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(741.7837621228784, 579.5834860990241), new PdfPoint(467.9250981072021, 391.151508990668), new PdfPoint(363.9348547812733, 907.7828368542935), new PdfPoint(398.33133393885555, 595.4799798620128)), new CubicBezierCurve(new PdfPoint(741.7837621228784, 579.5834860990241), new PdfPoint(467.9250981072021, 391.151508990668), new PdfPoint(363.9348547812733, 907.7828368542935), new PdfPoint(398.33133393885555, 595.4799798620128)),
new PdfLine(9.623350905034522, 540.8884601927914, 656.7986861143004, 260.68139283950296), new PdfLine(9.623350905034522, 540.8884601927914, 656.7986861143004, 260.68139283950296),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(741.7837621228784, 579.5834860990241), new PdfPoint(467.9250981072021, 391.151508990668), new PdfPoint(363.9348547812733, 907.7828368542935), new PdfPoint(398.33133393885555, 595.4799798620128)), new CubicBezierCurve(new PdfPoint(741.7837621228784, 579.5834860990241), new PdfPoint(467.9250981072021, 391.151508990668), new PdfPoint(363.9348547812733, 907.7828368542935), new PdfPoint(398.33133393885555, 595.4799798620128)),
new PdfLine(115.74084344003543, 599.980254898775, 551.5217964035138, 790.9417820407351), new PdfLine(115.74084344003543, 599.980254898775, 551.5217964035138, 790.9417820407351),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(761.1330468650299, 456.00742702080333), new PdfPoint(182.90272632814052, 617.3448547080981), new PdfPoint(721.876316846038, 281.94753549503184), new PdfPoint(340.73639627949484, 580.77195708543)), new CubicBezierCurve(new PdfPoint(761.1330468650299, 456.00742702080333), new PdfPoint(182.90272632814052, 617.3448547080981), new PdfPoint(721.876316846038, 281.94753549503184), new PdfPoint(340.73639627949484, 580.77195708543)),
new PdfLine(237.7978352805149, 786.1896089759643, 585.0592514258757, 705.0119767611551), new PdfLine(237.7978352805149, 786.1896089759643, 585.0592514258757, 705.0119767611551),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(761.1330468650299, 456.00742702080333), new PdfPoint(182.90272632814052, 617.3448547080981), new PdfPoint(721.876316846038, 281.94753549503184), new PdfPoint(340.73639627949484, 580.77195708543)), new CubicBezierCurve(new PdfPoint(761.1330468650299, 456.00742702080333), new PdfPoint(182.90272632814052, 617.3448547080981), new PdfPoint(721.876316846038, 281.94753549503184), new PdfPoint(340.73639627949484, 580.77195708543)),
new PdfLine(558.5653313005904, 666.4921114581327, 360.4834930562492, 83.78829620601691), new PdfLine(558.5653313005904, 666.4921114581327, 360.4834930562492, 83.78829620601691),
new PdfPoint[] { new PdfPoint(486.51491141314335, 454.5390372588546), new PdfPoint(502.37913196387734, 501.2073331654721), new PdfPoint(487.17926688095383, 456.4933934441966), } new PdfPoint[] { new PdfPoint(486.51491141314335, 454.5390372588546), new PdfPoint(502.37913196387734, 501.2073331654721), new PdfPoint(487.17926688095383, 456.4933934441966), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(761.1330468650299, 456.00742702080333), new PdfPoint(182.90272632814052, 617.3448547080981), new PdfPoint(721.876316846038, 281.94753549503184), new PdfPoint(340.73639627949484, 580.77195708543)), new CubicBezierCurve(new PdfPoint(761.1330468650299, 456.00742702080333), new PdfPoint(182.90272632814052, 617.3448547080981), new PdfPoint(721.876316846038, 281.94753549503184), new PdfPoint(340.73639627949484, 580.77195708543)),
new PdfLine(104.55978912027008, 57.53865842452832, 871.8296698367745, 778.2391903340998), new PdfLine(104.55978912027008, 57.53865842452832, 871.8296698367745, 778.2391903340998),
new PdfPoint[] { new PdfPoint(573.8142472187677, 498.3117762702451), } new PdfPoint[] { new PdfPoint(573.8142472187677, 498.3117762702451), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(761.1330468650299, 456.00742702080333), new PdfPoint(182.90272632814052, 617.3448547080981), new PdfPoint(721.876316846038, 281.94753549503184), new PdfPoint(340.73639627949484, 580.77195708543)), new CubicBezierCurve(new PdfPoint(761.1330468650299, 456.00742702080333), new PdfPoint(182.90272632814052, 617.3448547080981), new PdfPoint(721.876316846038, 281.94753549503184), new PdfPoint(340.73639627949484, 580.77195708543)),
new PdfLine(659.0571440544695, 336.2959913781267, 203.4469774579617, 748.1490737189705), new PdfLine(659.0571440544695, 336.2959913781267, 203.4469774579617, 748.1490737189705),
new PdfPoint[] { new PdfPoint(482.8630677523453, 495.5682788191853), } new PdfPoint[] { new PdfPoint(482.8630677523453, 495.5682788191853), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(761.1330468650299, 456.00742702080333), new PdfPoint(182.90272632814052, 617.3448547080981), new PdfPoint(721.876316846038, 281.94753549503184), new PdfPoint(340.73639627949484, 580.77195708543)), new CubicBezierCurve(new PdfPoint(761.1330468650299, 456.00742702080333), new PdfPoint(182.90272632814052, 617.3448547080981), new PdfPoint(721.876316846038, 281.94753549503184), new PdfPoint(340.73639627949484, 580.77195708543)),
new PdfLine(452.87536927032426, 215.0197140000346, 710.2231575812335, 694.4299018319648), new PdfLine(452.87536927032426, 215.0197140000346, 710.2231575812335, 694.4299018319648),
new PdfPoint[] { new PdfPoint(602.4966262601054, 493.74740537798215), } new PdfPoint[] { new PdfPoint(602.4966262601054, 493.74740537798215), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(865.9944513828455, 956.5362580453102), new PdfPoint(782.6869569291499, 747.3495997791625), new PdfPoint(317.18348234495784, 31.68848505555455), new PdfPoint(398.5671847222113, 176.87460728239634)), new CubicBezierCurve(new PdfPoint(865.9944513828455, 956.5362580453102), new PdfPoint(782.6869569291499, 747.3495997791625), new PdfPoint(317.18348234495784, 31.68848505555455), new PdfPoint(398.5671847222113, 176.87460728239634)),
new PdfLine(714.4640515887536, 821.9230436439221, 610.7576468776002, 752.4659521198244), new PdfLine(714.4640515887536, 821.9230436439221, 610.7576468776002, 752.4659521198244),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(865.9944513828455, 956.5362580453102), new PdfPoint(782.6869569291499, 747.3495997791625), new PdfPoint(317.18348234495784, 31.68848505555455), new PdfPoint(398.5671847222113, 176.87460728239634)), new CubicBezierCurve(new PdfPoint(865.9944513828455, 956.5362580453102), new PdfPoint(782.6869569291499, 747.3495997791625), new PdfPoint(317.18348234495784, 31.68848505555455), new PdfPoint(398.5671847222113, 176.87460728239634)),
new PdfLine(805.0974764755789, 377.4993051728441, 789.6394933705419, 195.31328867320363), new PdfLine(805.0974764755789, 377.4993051728441, 789.6394933705419, 195.31328867320363),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(865.9944513828455, 956.5362580453102), new PdfPoint(782.6869569291499, 747.3495997791625), new PdfPoint(317.18348234495784, 31.68848505555455), new PdfPoint(398.5671847222113, 176.87460728239634)), new CubicBezierCurve(new PdfPoint(865.9944513828455, 956.5362580453102), new PdfPoint(782.6869569291499, 747.3495997791625), new PdfPoint(317.18348234495784, 31.68848505555455), new PdfPoint(398.5671847222113, 176.87460728239634)),
new PdfLine(643.8193142857785, 192.33689963389267, 957.4633999511751, 664.8632026912574), new PdfLine(643.8193142857785, 192.33689963389267, 957.4633999511751, 664.8632026912574),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(865.9944513828455, 956.5362580453102), new PdfPoint(782.6869569291499, 747.3495997791625), new PdfPoint(317.18348234495784, 31.68848505555455), new PdfPoint(398.5671847222113, 176.87460728239634)), new CubicBezierCurve(new PdfPoint(865.9944513828455, 956.5362580453102), new PdfPoint(782.6869569291499, 747.3495997791625), new PdfPoint(317.18348234495784, 31.68848505555455), new PdfPoint(398.5671847222113, 176.87460728239634)),
new PdfLine(222.66810768767786, 419.5890343762126, 831.173170361083, 160.22486369346035), new PdfLine(222.66810768767786, 419.5890343762126, 831.173170361083, 160.22486369346035),
new PdfPoint[] { new PdfPoint(489.5301582372624, 305.8439586599893), } new PdfPoint[] { new PdfPoint(489.5301582372624, 305.8439586599893), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(865.9944513828455, 956.5362580453102), new PdfPoint(782.6869569291499, 747.3495997791625), new PdfPoint(317.18348234495784, 31.68848505555455), new PdfPoint(398.5671847222113, 176.87460728239634)), new CubicBezierCurve(new PdfPoint(865.9944513828455, 956.5362580453102), new PdfPoint(782.6869569291499, 747.3495997791625), new PdfPoint(317.18348234495784, 31.68848505555455), new PdfPoint(398.5671847222113, 176.87460728239634)),
new PdfLine(653.8226121220232, 324.86672038120514, 280.12608023148135, 1.8176514901221408), new PdfLine(653.8226121220232, 324.86672038120514, 280.12608023148135, 1.8176514901221408),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(571.0331154847579, 710.9172996950756), new PdfPoint(603.826336638094, 764.8051595944524), new PdfPoint(889.7321919148364, 831.3142555845308), new PdfPoint(537.5059435773143, 360.1678513223413)), new CubicBezierCurve(new PdfPoint(571.0331154847579, 710.9172996950756), new PdfPoint(603.826336638094, 764.8051595944524), new PdfPoint(889.7321919148364, 831.3142555845308), new PdfPoint(537.5059435773143, 360.1678513223413)),
new PdfLine(857.0486102867367, 8.053120258918911, 689.6009745287959, 489.4170154955638), new PdfLine(857.0486102867367, 8.053120258918911, 689.6009745287959, 489.4170154955638),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(571.0331154847579, 710.9172996950756), new PdfPoint(603.826336638094, 764.8051595944524), new PdfPoint(889.7321919148364, 831.3142555845308), new PdfPoint(537.5059435773143, 360.1678513223413)), new CubicBezierCurve(new PdfPoint(571.0331154847579, 710.9172996950756), new PdfPoint(603.826336638094, 764.8051595944524), new PdfPoint(889.7321919148364, 831.3142555845308), new PdfPoint(537.5059435773143, 360.1678513223413)),
new PdfLine(784.7831019215643, 688.0133561511867, 621.3775330041834, 299.36972195021605), new PdfLine(784.7831019215643, 688.0133561511867, 621.3775330041834, 299.36972195021605),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(571.0331154847579, 710.9172996950756), new PdfPoint(603.826336638094, 764.8051595944524), new PdfPoint(889.7321919148364, 831.3142555845308), new PdfPoint(537.5059435773143, 360.1678513223413)), new CubicBezierCurve(new PdfPoint(571.0331154847579, 710.9172996950756), new PdfPoint(603.826336638094, 764.8051595944524), new PdfPoint(889.7321919148364, 831.3142555845308), new PdfPoint(537.5059435773143, 360.1678513223413)),
new PdfLine(926.449282686191, 928.527953644007, 570.8158929584562, 397.32608249528033), new PdfLine(926.449282686191, 928.527953644007, 570.8158929584562, 397.32608249528033),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(571.0331154847579, 710.9172996950756), new PdfPoint(603.826336638094, 764.8051595944524), new PdfPoint(889.7321919148364, 831.3142555845308), new PdfPoint(537.5059435773143, 360.1678513223413)), new CubicBezierCurve(new PdfPoint(571.0331154847579, 710.9172996950756), new PdfPoint(603.826336638094, 764.8051595944524), new PdfPoint(889.7321919148364, 831.3142555845308), new PdfPoint(537.5059435773143, 360.1678513223413)),
new PdfLine(745.8848784094445, 706.5077086524171, 905.541769813007, 244.76748165592775), new PdfLine(745.8848784094445, 706.5077086524171, 905.541769813007, 244.76748165592775),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(571.0331154847579, 710.9172996950756), new PdfPoint(603.826336638094, 764.8051595944524), new PdfPoint(889.7321919148364, 831.3142555845308), new PdfPoint(537.5059435773143, 360.1678513223413)), new CubicBezierCurve(new PdfPoint(571.0331154847579, 710.9172996950756), new PdfPoint(603.826336638094, 764.8051595944524), new PdfPoint(889.7321919148364, 831.3142555845308), new PdfPoint(537.5059435773143, 360.1678513223413)),
new PdfLine(563.4446397905452, 260.0561288178326, 462.78668418670253, 720.424868017386), new PdfLine(563.4446397905452, 260.0561288178326, 462.78668418670253, 720.424868017386),
new PdfPoint[] { new PdfPoint(540.6377802339489, 364.3654714444053), } new PdfPoint[] { new PdfPoint(540.6377802339489, 364.3654714444053), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(462.50581163068796, 546.9240692426745), new PdfPoint(724.5292960882908, 328.1770520621827), new PdfPoint(228.71930273635854, 186.30096428379704), new PdfPoint(432.60327076584093, 555.6858096007285)), new CubicBezierCurve(new PdfPoint(462.50581163068796, 546.9240692426745), new PdfPoint(724.5292960882908, 328.1770520621827), new PdfPoint(228.71930273635854, 186.30096428379704), new PdfPoint(432.60327076584093, 555.6858096007285)),
new PdfLine(735.7728875760906, 71.71025174000023, 509.4157424519464, 98.71654353902338), new PdfLine(735.7728875760906, 71.71025174000023, 509.4157424519464, 98.71654353902338),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(462.50581163068796, 546.9240692426745), new PdfPoint(724.5292960882908, 328.1770520621827), new PdfPoint(228.71930273635854, 186.30096428379704), new PdfPoint(432.60327076584093, 555.6858096007285)), new CubicBezierCurve(new PdfPoint(462.50581163068796, 546.9240692426745), new PdfPoint(724.5292960882908, 328.1770520621827), new PdfPoint(228.71930273635854, 186.30096428379704), new PdfPoint(432.60327076584093, 555.6858096007285)),
new PdfLine(290.6164038900004, 831.9249213821381, 519.4846042793789, 532.4912102190885), new PdfLine(290.6164038900004, 831.9249213821381, 519.4846042793789, 532.4912102190885),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(462.50581163068796, 546.9240692426745), new PdfPoint(724.5292960882908, 328.1770520621827), new PdfPoint(228.71930273635854, 186.30096428379704), new PdfPoint(432.60327076584093, 555.6858096007285)), new CubicBezierCurve(new PdfPoint(462.50581163068796, 546.9240692426745), new PdfPoint(724.5292960882908, 328.1770520621827), new PdfPoint(228.71930273635854, 186.30096428379704), new PdfPoint(432.60327076584093, 555.6858096007285)),
new PdfLine(838.5087104882521, 808.8048725506934, 103.65632203336162, 813.6019503826726), new PdfLine(838.5087104882521, 808.8048725506934, 103.65632203336162, 813.6019503826726),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(462.50581163068796, 546.9240692426745), new PdfPoint(724.5292960882908, 328.1770520621827), new PdfPoint(228.71930273635854, 186.30096428379704), new PdfPoint(432.60327076584093, 555.6858096007285)), new CubicBezierCurve(new PdfPoint(462.50581163068796, 546.9240692426745), new PdfPoint(724.5292960882908, 328.1770520621827), new PdfPoint(228.71930273635854, 186.30096428379704), new PdfPoint(432.60327076584093, 555.6858096007285)),
new PdfLine(351.39319636968924, 519.0210361462613, 657.4630070539363, 810.9560590151057), new PdfLine(351.39319636968924, 519.0210361462613, 657.4630070539363, 810.9560590151057),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(462.50581163068796, 546.9240692426745), new PdfPoint(724.5292960882908, 328.1770520621827), new PdfPoint(228.71930273635854, 186.30096428379704), new PdfPoint(432.60327076584093, 555.6858096007285)), new CubicBezierCurve(new PdfPoint(462.50581163068796, 546.9240692426745), new PdfPoint(724.5292960882908, 328.1770520621827), new PdfPoint(228.71930273635854, 186.30096428379704), new PdfPoint(432.60327076584093, 555.6858096007285)),
new PdfLine(353.53963245785314, 294.14283010796936, 709.6774633468119, 830.4539260427701), new PdfLine(353.53963245785314, 294.14283010796936, 709.6774633468119, 830.4539260427701),
new PdfPoint[] { new PdfPoint(498.4426937326664, 512.3536261995338), new PdfPoint(394.2946897465945, 355.5162297966572), } new PdfPoint[] { new PdfPoint(498.4426937326664, 512.3536261995338), new PdfPoint(394.2946897465945, 355.5162297966572), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(514.5423236364574, 750.5549041630848), new PdfPoint(301.0481922911653, 383.0262248024422), new PdfPoint(344.8999855512257, 479.2380329411904), new PdfPoint(936.3442536990252, 905.2054764541147)), new CubicBezierCurve(new PdfPoint(514.5423236364574, 750.5549041630848), new PdfPoint(301.0481922911653, 383.0262248024422), new PdfPoint(344.8999855512257, 479.2380329411904), new PdfPoint(936.3442536990252, 905.2054764541147)),
new PdfLine(399.9106058852349, 824.3378921470427, 592.8116030553027, 246.70363535307936), new PdfLine(399.9106058852349, 824.3378921470427, 592.8116030553027, 246.70363535307936),
new PdfPoint[] { new PdfPoint(457.40664110278004, 652.1683333644837), new PdfPoint(484.6170207749005, 570.6879487652808), } new PdfPoint[] { new PdfPoint(457.40664110278004, 652.1683333644837), new PdfPoint(484.6170207749005, 570.6879487652808), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(514.5423236364574, 750.5549041630848), new PdfPoint(301.0481922911653, 383.0262248024422), new PdfPoint(344.8999855512257, 479.2380329411904), new PdfPoint(936.3442536990252, 905.2054764541147)), new CubicBezierCurve(new PdfPoint(514.5423236364574, 750.5549041630848), new PdfPoint(301.0481922911653, 383.0262248024422), new PdfPoint(344.8999855512257, 479.2380329411904), new PdfPoint(936.3442536990252, 905.2054764541147)),
new PdfLine(826.4422311470968, 63.988003211555956, 53.64088839817449, 169.14904278567656), new PdfLine(826.4422311470968, 63.988003211555956, 53.64088839817449, 169.14904278567656),
new PdfPoint[] { } new PdfPoint[] { }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(514.5423236364574, 750.5549041630848), new PdfPoint(301.0481922911653, 383.0262248024422), new PdfPoint(344.8999855512257, 479.2380329411904), new PdfPoint(936.3442536990252, 905.2054764541147)), new CubicBezierCurve(new PdfPoint(514.5423236364574, 750.5549041630848), new PdfPoint(301.0481922911653, 383.0262248024422), new PdfPoint(344.8999855512257, 479.2380329411904), new PdfPoint(936.3442536990252, 905.2054764541147)),
new PdfLine(63.79296653085132, 824.6522054066996, 583.240959660422, 508.2047961495084), new PdfLine(63.79296653085132, 824.6522054066996, 583.240959660422, 508.2047961495084),
new PdfPoint[] { new PdfPoint(429.09432343278115, 602.1108354934324), new PdfPoint(482.80839235708083, 569.3882565700844), } new PdfPoint[] { new PdfPoint(429.09432343278115, 602.1108354934324), new PdfPoint(482.80839235708083, 569.3882565700844), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(458.50781394598704, 707.3485601935173), new PdfPoint(748.9434779967539, 564.5704869197178), new PdfPoint(585.631258629734, 176.9209403651224), new PdfPoint(941.3690598933631, 810.6237820894949)), new CubicBezierCurve(new PdfPoint(458.50781394598704, 707.3485601935173), new PdfPoint(748.9434779967539, 564.5704869197178), new PdfPoint(585.631258629734, 176.9209403651224), new PdfPoint(941.3690598933631, 810.6237820894949)),
new PdfLine(858.0542006924267, 341.47945951061007, 433.8542949825894, 745.0827456986186), new PdfLine(858.0542006924267, 341.47945951061007, 433.8542949825894, 745.0827456986186),
new PdfPoint[] { new PdfPoint(592.1372218843604, 594.4850944848324), new PdfPoint(495.5670660759227, 686.366379009761), new PdfPoint(722.5408527250166, 470.41308685421814), } new PdfPoint[] { new PdfPoint(592.1372218843604, 594.4850944848324), new PdfPoint(495.5670660759227, 686.366379009761), new PdfPoint(722.5408527250166, 470.41308685421814), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)), new CubicBezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)),
new PdfLine(326.2357536886028, 288.677023060252, 619.1470513533108, 901.0961222063911), new PdfLine(326.2357536886028, 288.677023060252, 619.1470513533108, 901.0961222063911),
new PdfPoint[] { new PdfPoint(416.08706148161923, 476.5381858573592), new PdfPoint(502.03557864242435, 656.2393918955745), new PdfPoint(536.1359422779292, 727.5364505775408), } new PdfPoint[] { new PdfPoint(416.08706148161923, 476.5381858573592), new PdfPoint(502.03557864242435, 656.2393918955745), new PdfPoint(536.1359422779292, 727.5364505775408), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)), new CubicBezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)),
new PdfLine(629.3474858004759, 487.28739837111635, 299.8830299735877, 909.475729551436), new PdfLine(629.3474858004759, 487.28739837111635, 299.8830299735877, 909.475729551436),
new PdfPoint[] { new PdfPoint(521.6238559803111, 625.3285700304907), new PdfPoint(507.1287870133768, 643.9031047618156), new PdfPoint(587.138939481947, 541.375040957758), } new PdfPoint[] { new PdfPoint(521.6238559803111, 625.3285700304907), new PdfPoint(507.1287870133768, 643.9031047618156), new PdfPoint(587.138939481947, 541.375040957758), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)), new CubicBezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)),
new PdfLine(538.9251091148191, 479.2330068612399, 480.22096698155246, 922.603946932848), new PdfLine(538.9251091148191, 479.2330068612399, 480.22096698155246, 922.603946932848),
new PdfPoint[] { new PdfPoint(519.2565485724904, 627.7824594315703), new PdfPoint(534.6183658439363, 511.7602654714332), new PdfPoint(510.0087018496723, 697.6280673586205), } new PdfPoint[] { new PdfPoint(519.2565485724904, 627.7824594315703), new PdfPoint(534.6183658439363, 511.7602654714332), new PdfPoint(510.0087018496723, 697.6280673586205), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)), new CubicBezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)),
new PdfLine(310.5455186650514, 198.7470740535222, 576.0638592446712, 824.557301144184), new PdfLine(310.5455186650514, 198.7470740535222, 576.0638592446712, 824.557301144184),
new PdfPoint[] { new PdfPoint(429.88688944378305, 480.02726805184784), new PdfPoint(503.13503708244207, 652.6685997491355), new PdfPoint(534.1246812723195, 725.7092651343974), } new PdfPoint[] { new PdfPoint(429.88688944378305, 480.02726805184784), new PdfPoint(503.13503708244207, 652.6685997491355), new PdfPoint(534.1246812723195, 725.7092651343974), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)), new CubicBezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)),
new PdfLine(444.55767730339, 830.1279827584818, 791.9021809752611, 112.98057959909968), new PdfLine(444.55767730339, 830.1279827584818, 791.9021809752611, 112.98057959909968),
new PdfPoint[] { new PdfPoint(558.1937680022871, 595.5083861090311), new PdfPoint(585.3436265805482, 539.453229428223), new PdfPoint(509.30077476036126, 696.455666879191), } new PdfPoint[] { new PdfPoint(558.1937680022871, 595.5083861090311), new PdfPoint(585.3436265805482, 539.453229428223), new PdfPoint(509.30077476036126, 696.455666879191), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)), new CubicBezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)),
new PdfLine(577.0683277988691, 893.501658783371, 484.526604079171, 449.9617060977552), new PdfLine(577.0683277988691, 893.501658783371, 484.526604079171, 449.9617060977552),
new PdfPoint[] { new PdfPoint(521.204454228015, 625.7536760950204), new PdfPoint(494.56752682342517, 498.0864893835719), new PdfPoint(543.8188906700069, 734.1416082225257), } new PdfPoint[] { new PdfPoint(521.204454228015, 625.7536760950204), new PdfPoint(494.56752682342517, 498.0864893835719), new PdfPoint(543.8188906700069, 734.1416082225257), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)), new CubicBezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)),
new PdfLine(728.4474245894388, 171.61053488736044, 453.36320863722045, 827.8850101340745), new PdfLine(728.4474245894388, 171.61053488736044, 453.36320863722045, 827.8850101340745),
new PdfPoint[] { new PdfPoint(547.3866186775634, 603.5712890740092), new PdfPoint(577.1131481652287, 532.6520526761924), new PdfPoint(508.80699470905273, 695.6115480452754), } new PdfPoint[] { new PdfPoint(547.3866186775634, 603.5712890740092), new PdfPoint(577.1131481652287, 532.6520526761924), new PdfPoint(508.80699470905273, 695.6115480452754), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)), new CubicBezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)),
new PdfLine(612.6791399228442, 543.8367328799828, 296.02688700623446, 839.5333062790671), new PdfLine(612.6791399228442, 543.8367328799828, 296.02688700623446, 839.5333062790671),
new PdfPoint[] { new PdfPoint(554.0303686415244, 598.6041963741395), new PdfPoint(509.1959187925791, 640.4715542358172), new PdfPoint(590.9874165558272, 564.0929231065433), } new PdfPoint[] { new PdfPoint(554.0303686415244, 598.6041963741395), new PdfPoint(509.1959187925791, 640.4715542358172), new PdfPoint(590.9874165558272, 564.0929231065433), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)), new CubicBezierCurve(new PdfPoint(257.49795998118753, 441.06811766151986), new PdfPoint(939.9811830880345, 581.4356546220961), new PdfPoint(333.65358960691793, 569.9741022882824), new PdfPoint(549.8549381788116, 738.9885079920657)),
new PdfLine(821.7010676907131, 61.7139119382617, 456.865417708614, 817.4864163011968), new PdfLine(821.7010676907131, 61.7139119382617, 456.865417708614, 817.4864163011968),
new PdfPoint[] { new PdfPoint(567.3781193717792, 588.5546731889699), new PdfPoint(589.0169510459666, 543.728916696448), new PdfPoint(512.7201754656179, 701.780919448937), } new PdfPoint[] { new PdfPoint(567.3781193717792, 588.5546731889699), new PdfPoint(589.0169510459666, 543.728916696448), new PdfPoint(512.7201754656179, 701.780919448937), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(689.9339095577008, 819.1509167750643), new PdfPoint(91.7293938752487, 735.5359196067776), new PdfPoint(643.7352012702722, 26.344515492747412), new PdfPoint(576.406805896636, 125.74372626431362)), new CubicBezierCurve(new PdfPoint(689.9339095577008, 819.1509167750643), new PdfPoint(91.7293938752487, 735.5359196067776), new PdfPoint(643.7352012702722, 26.344515492747412), new PdfPoint(576.406805896636, 125.74372626431362)),
new PdfLine(604.8045113270402, 23.87003518469999, 428.32162520427863, 682.1304647860862), new PdfLine(604.8045113270402, 23.87003518469999, 428.32162520427863, 682.1304647860862),
new PdfPoint[] { new PdfPoint(432.15313855588636, 667.8393701634704), new PdfPoint(579.1518317449497, 119.55151599631576), new PdfPoint(578.215503704165, 123.04390957574823), } new PdfPoint[] { new PdfPoint(432.15313855588636, 667.8393701634704), new PdfPoint(579.1518317449497, 119.55151599631576), new PdfPoint(578.215503704165, 123.04390957574823), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(814.4149501833379, 401.71941182812145), new PdfPoint(135.72990952948194, 281.0865094136146), new PdfPoint(620.9400702233997, 265.5947273598864), new PdfPoint(7.934191369715626, 823.4171385446947)), new CubicBezierCurve(new PdfPoint(814.4149501833379, 401.71941182812145), new PdfPoint(135.72990952948194, 281.0865094136146), new PdfPoint(620.9400702233997, 265.5947273598864), new PdfPoint(7.934191369715626, 823.4171385446947)),
new PdfLine(578.8014613067338, 130.17633578810862, 53.08065925533256, 807.255035108184), new PdfLine(578.8014613067338, 130.17633578810862, 53.08065925533256, 807.255035108184),
new PdfPoint[] { new PdfPoint(419.12248807828684, 335.82775966254644), new PdfPoint(338.39810018166963, 439.793140806256), new PdfPoint(140.32343925823216, 694.8945810821413), } new PdfPoint[] { new PdfPoint(419.12248807828684, 335.82775966254644), new PdfPoint(338.39810018166963, 439.793140806256), new PdfPoint(140.32343925823216, 694.8945810821413), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(218.276369458279, 235.3424839558388), new PdfPoint(284.1217842134851, 982.5910790231849), new PdfPoint(366.6074844595172, 582.3854701119949), new PdfPoint(32.42150688046408, 51.18416289826666)), new CubicBezierCurve(new PdfPoint(218.276369458279, 235.3424839558388), new PdfPoint(284.1217842134851, 982.5910790231849), new PdfPoint(366.6074844595172, 582.3854701119949), new PdfPoint(32.42150688046408, 51.18416289826666)),
new PdfLine(360.84227236659336, 883.0984708659082, 134.65259158424092, 204.85753196849643), new PdfLine(360.84227236659336, 883.0984708659082, 134.65259158424092, 204.85753196849643),
new PdfPoint[] { new PdfPoint(262.25442342530295, 587.4779323933412), new PdfPoint(276.68708006114014, 630.7549667550165), new PdfPoint(166.69043710960756, 300.924595480044), } new PdfPoint[] { new PdfPoint(262.25442342530295, 587.4779323933412), new PdfPoint(276.68708006114014, 630.7549667550165), new PdfPoint(166.69043710960756, 300.924595480044), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(218.276369458279, 235.3424839558388), new PdfPoint(284.1217842134851, 982.5910790231849), new PdfPoint(366.6074844595172, 582.3854701119949), new PdfPoint(32.42150688046408, 51.18416289826666)), new CubicBezierCurve(new PdfPoint(218.276369458279, 235.3424839558388), new PdfPoint(284.1217842134851, 982.5910790231849), new PdfPoint(366.6074844595172, 582.3854701119949), new PdfPoint(32.42150688046408, 51.18416289826666)),
new PdfLine(47.837368636920566, 70.9255239988813, 307.4295713877724, 706.0977994394767), new PdfLine(47.837368636920566, 70.9255239988813, 307.4295713877724, 706.0977994394767),
new PdfPoint[] { new PdfPoint(265.3481171796182, 603.1325611156734), new PdfPoint(276.7157187476435, 630.9468994422933), new PdfPoint(54.30803564806219, 86.7580037326037), } new PdfPoint[] { new PdfPoint(265.3481171796182, 603.1325611156734), new PdfPoint(276.7157187476435, 630.9468994422933), new PdfPoint(54.30803564806219, 86.7580037326037), }
}, },
new object[] new object[]
{ {
new BezierCurve(new PdfPoint(218.276369458279, 235.3424839558388), new PdfPoint(284.1217842134851, 982.5910790231849), new PdfPoint(366.6074844595172, 582.3854701119949), new PdfPoint(32.42150688046408, 51.18416289826666)), new CubicBezierCurve(new PdfPoint(218.276369458279, 235.3424839558388), new PdfPoint(284.1217842134851, 982.5910790231849), new PdfPoint(366.6074844595172, 582.3854701119949), new PdfPoint(32.42150688046408, 51.18416289826666)),
new PdfLine(80.91649794342514, 86.06780648689072, 385.7230402289716, 904.9572417263104), new PdfLine(80.91649794342514, 86.06780648689072, 385.7230402289716, 904.9572417263104),
new PdfPoint[] { new PdfPoint(257.2955610347613, 559.9255861785546), new PdfPoint(268.58529358253224, 590.2564401055265), new PdfPoint(139.04696640209485, 242.24039428432843), } new PdfPoint[] { new PdfPoint(257.2955610347613, 559.9255861785546), new PdfPoint(268.58529358253224, 590.2564401055265), new PdfPoint(139.04696640209485, 242.24039428432843), }
} }
@ -408,7 +408,7 @@
[Theory] [Theory]
[MemberData(nameof(IntersectLineData))] [MemberData(nameof(IntersectLineData))]
public void IntersectLine(BezierCurve source, PdfLine other, PdfPoint[] expected) public void IntersectLine(CubicBezierCurve source, PdfLine other, PdfPoint[] expected)
{ {
var intersections = source.Intersect(other); var intersections = source.Intersect(other);
Assert.Equal(expected.Length, intersections.Length); Assert.Equal(expected.Length, intersections.Length);

View File

@ -24,7 +24,7 @@
private const string OutputPath = "ImagesGlyphs"; private const string OutputPath = "ImagesGlyphs";
private const float Scale = 2.5f; private const float Scale = 10f;
private static readonly SKMatrix ScaleMatrix = SKMatrix.CreateScale(Scale, Scale); private static readonly SKMatrix ScaleMatrix = SKMatrix.CreateScale(Scale, Scale);
@ -125,6 +125,12 @@
Run("FontMatrix-raw"); Run("FontMatrix-raw");
} }
[Fact]
public void JudgementDocument()
{
Run("Judgement Document");
}
[Fact] [Fact]
public void veraPDF_Issue1010_4() public void veraPDF_Issue1010_4()
{ {

View File

@ -41,21 +41,21 @@
{ {
skPath.LineTo((float)line.To.X, (float)line.To.Y); skPath.LineTo((float)line.To.X, (float)line.To.Y);
} }
else if (c is PdfSubpath.BezierCurve curve) else if (c is PdfSubpath.CubicBezierCurve curve)
{ {
if (curve.StartPoint.Equals(curve.FirstControlPoint)) // TODO - This needs to be fixed in PdfPig skPath.CubicTo((float)curve.FirstControlPoint.X,
{ (float)curve.FirstControlPoint.Y,
// Quad curve (float)curve.SecondControlPoint.X,
skPath.QuadTo((float)curve.SecondControlPoint.X, (float)curve.SecondControlPoint.Y, (float)curve.SecondControlPoint.Y,
(float)curve.EndPoint.X, (float)curve.EndPoint.Y); (float)curve.EndPoint.X,
} (float)curve.EndPoint.Y);
else }
{ else if (c is PdfSubpath.QuadraticBezierCurve quadratic)
// Cubic curve {
skPath.CubicTo((float)curve.FirstControlPoint.X, (float)curve.FirstControlPoint.Y, skPath.QuadTo((float)quadratic.ControlPoint.X,
(float)curve.SecondControlPoint.X, (float)curve.SecondControlPoint.Y, (float)quadratic.ControlPoint.Y,
(float)curve.EndPoint.X, (float)curve.EndPoint.Y); (float)quadratic.EndPoint.X,
} (float)quadratic.EndPoint.Y);
} }
else if (c is PdfSubpath.Close) else if (c is PdfSubpath.Close)
{ {

View File

@ -804,11 +804,11 @@
#region Path Bezier Curve #region Path Bezier Curve
/// <summary> /// <summary>
/// Split a bezier curve into 2 bezier curves, at tau. /// Split a cubic bezier-curve into 2 bezier-curves, at tau.
/// </summary> /// </summary>
/// <param name="bezierCurve">The original bezier curve.</param> /// <param name="bezierCurve">The original cubic bezier-curve.</param>
/// <param name="tau">The t value were to split the curve, usually between 0 and 1, but not necessary.</param> /// <param name="tau">The t value were to split the curve, usually between 0 and 1, but not necessary.</param>
public static (BezierCurve, BezierCurve) Split(this BezierCurve bezierCurve, double tau) public static (CubicBezierCurve, CubicBezierCurve) Split(this CubicBezierCurve bezierCurve, double tau)
{ {
// De Casteljau Algorithm // De Casteljau Algorithm
PdfPoint[][] points = new PdfPoint[4][]; PdfPoint[][] points = new PdfPoint[4][];
@ -835,29 +835,29 @@
} }
} }
return (new BezierCurve(points[0][0], points[1][0], points[2][0], points[3][0]), return (new CubicBezierCurve(points[0][0], points[1][0], points[2][0], points[3][0]),
new BezierCurve(points[3][0], points[2][1], points[1][2], points[0][3])); new CubicBezierCurve(points[3][0], points[2][1], points[1][2], points[0][3]));
} }
/// <summary> /// <summary>
/// Checks if the curve and the line are intersecting. /// Checks if the curve and the line are intersecting.
/// <para>Avoid using this method as it is not optimised. Use <see cref="Intersect(BezierCurve, PdfLine)"/> instead.</para> /// <para>Avoid using this method as it is not optimised. Use <see cref="Intersect(CubicBezierCurve, PdfLine)"/> instead.</para>
/// </summary> /// </summary>
public static bool IntersectsWith(this BezierCurve bezierCurve, PdfLine line) public static bool IntersectsWith(this CubicBezierCurve bezierCurve, PdfLine line)
{ {
return IntersectsWith(bezierCurve, line.Point1, line.Point2); return IntersectsWith(bezierCurve, line.Point1, line.Point2);
} }
/// <summary> /// <summary>
/// Checks if the curve and the line are intersecting. /// Checks if the curve and the line are intersecting.
/// <para>Avoid using this method as it is not optimised. Use <see cref="Intersect(BezierCurve, Line)"/> instead.</para> /// <para>Avoid using this method as it is not optimised. Use <see cref="Intersect(CubicBezierCurve, Line)"/> instead.</para>
/// </summary> /// </summary>
public static bool IntersectsWith(this BezierCurve bezierCurve, Line line) public static bool IntersectsWith(this CubicBezierCurve bezierCurve, Line line)
{ {
return IntersectsWith(bezierCurve, line.From, line.To); return IntersectsWith(bezierCurve, line.From, line.To);
} }
private static bool IntersectsWith(BezierCurve bezierCurve, PdfPoint p1, PdfPoint p2) private static bool IntersectsWith(CubicBezierCurve bezierCurve, PdfPoint p1, PdfPoint p2)
{ {
return Intersect(bezierCurve, p1, p2).Length > 0; return Intersect(bezierCurve, p1, p2).Length > 0;
} }
@ -865,7 +865,7 @@
/// <summary> /// <summary>
/// Get the <see cref="PdfPoint"/>s that are the intersections of the line and the curve. /// Get the <see cref="PdfPoint"/>s that are the intersections of the line and the curve.
/// </summary> /// </summary>
public static PdfPoint[] Intersect(this BezierCurve bezierCurve, PdfLine line) public static PdfPoint[] Intersect(this CubicBezierCurve bezierCurve, PdfLine line)
{ {
return Intersect(bezierCurve, line.Point1, line.Point2); return Intersect(bezierCurve, line.Point1, line.Point2);
} }
@ -873,12 +873,12 @@
/// <summary> /// <summary>
/// Get the <see cref="PdfPoint"/>s that are the intersections of the line and the curve. /// Get the <see cref="PdfPoint"/>s that are the intersections of the line and the curve.
/// </summary> /// </summary>
public static PdfPoint[] Intersect(this BezierCurve bezierCurve, Line line) public static PdfPoint[] Intersect(this CubicBezierCurve bezierCurve, Line line)
{ {
return Intersect(bezierCurve, line.From, line.To); return Intersect(bezierCurve, line.From, line.To);
} }
private static PdfPoint[] Intersect(BezierCurve bezierCurve, PdfPoint p1, PdfPoint p2) private static PdfPoint[] Intersect(CubicBezierCurve bezierCurve, PdfPoint p1, PdfPoint p2)
{ {
var ts = IntersectT(bezierCurve, p1, p2); var ts = IntersectT(bezierCurve, p1, p2);
if (ts is null || ts.Length == 0) return []; if (ts is null || ts.Length == 0) return [];
@ -905,8 +905,8 @@
/// <summary> /// <summary>
/// Get the t values that are the intersections of the line and the curve. /// Get the t values that are the intersections of the line and the curve.
/// </summary> /// </summary>
/// <returns>List of t values where the <see cref="BezierCurve"/> and the <see cref="PdfLine"/> intersect.</returns> /// <returns>List of t values where the <see cref="CubicBezierCurve"/> and the <see cref="PdfLine"/> intersect.</returns>
public static double[]? IntersectT(this BezierCurve bezierCurve, PdfLine line) public static double[]? IntersectT(this CubicBezierCurve bezierCurve, PdfLine line)
{ {
return IntersectT(bezierCurve, line.Point1, line.Point2); return IntersectT(bezierCurve, line.Point1, line.Point2);
} }
@ -914,13 +914,13 @@
/// <summary> /// <summary>
/// Get the t values that are the intersections of the line and the curve. /// Get the t values that are the intersections of the line and the curve.
/// </summary> /// </summary>
/// <returns>List of t values where the <see cref="BezierCurve"/> and the <see cref="Line"/> intersect.</returns> /// <returns>List of t values where the <see cref="CubicBezierCurve"/> and the <see cref="Line"/> intersect.</returns>
public static double[]? IntersectT(this BezierCurve bezierCurve, Line line) public static double[]? IntersectT(this CubicBezierCurve bezierCurve, Line line)
{ {
return IntersectT(bezierCurve, line.From, line.To); return IntersectT(bezierCurve, line.From, line.To);
} }
private static double[]? IntersectT(BezierCurve bezierCurve, PdfPoint p1, PdfPoint p2) private static double[]? IntersectT(CubicBezierCurve bezierCurve, PdfPoint p1, PdfPoint p2)
{ {
// if the bounding boxes do not intersect, they cannot intersect // if the bounding boxes do not intersect, they cannot intersect
var bezierBbox = bezierCurve.GetBoundingRectangle(); var bezierBbox = bezierCurve.GetBoundingRectangle();