mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-07-15 09:00:38 +08:00
Properly implement Quadtratic and Cubic bezier-curves and use Quadtratic in CalculatePath to fix #625
This commit is contained in:
parent
f62929eb7c
commit
2d6cb1aa0c
@ -176,7 +176,7 @@
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add a <see cref="BezierCurve"/> to the path.
|
||||
/// Add a <see cref="CubicBezierCurve"/> to the path.
|
||||
/// </summary>
|
||||
public void BezierCurveTo(double x1, double y1, double x2, double y2, double x3, double y3)
|
||||
{
|
||||
@ -187,7 +187,29 @@
|
||||
shoeLaceSum += (x3 - x2) * (y3 + y2);
|
||||
|
||||
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;
|
||||
}
|
||||
else
|
||||
@ -540,14 +562,127 @@
|
||||
}
|
||||
|
||||
/// <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>
|
||||
public class BezierCurve : IPathCommand
|
||||
public sealed class QuadraticBezierCurve : BezierCurve
|
||||
{
|
||||
/// <summary>
|
||||
/// The start point of the Bezier curve.
|
||||
/// Create a quadratic Bezier-curve at the provided points.
|
||||
/// <para>Only used in fonts.</para>
|
||||
/// </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>
|
||||
/// The first control point of the curve.
|
||||
@ -559,71 +694,16 @@
|
||||
/// </summary>
|
||||
public PdfPoint SecondControlPoint { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The end point of the curve.
|
||||
/// </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)
|
||||
/// <inheritdoc/>
|
||||
public override void WriteSvg(StringBuilder builder, double height)
|
||||
{
|
||||
StartPoint = startPoint;
|
||||
FirstControlPoint = firstControlPoint;
|
||||
SecondControlPoint = secondControlPoint;
|
||||
EndPoint = endPoint;
|
||||
builder.Append($"C {FirstControlPoint.X} {height - FirstControlPoint.Y}, {SecondControlPoint.X} {height - SecondControlPoint.Y}, {EndPoint.X} {height - EndPoint.Y} ");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public PdfRectangle? GetBoundingRectangle()
|
||||
/// <inheritdoc/>
|
||||
protected internal override bool TrySolve(bool isX, double currentMin, double currentMax, out (double min, double max) solutions)
|
||||
{
|
||||
// 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 (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} ");
|
||||
return TrySolveQuadratic(isX, currentMin, currentMax, out solutions);
|
||||
}
|
||||
|
||||
private bool TrySolveQuadratic(bool isX, double currentMin, double currentMax, out (double min, double max) solutions)
|
||||
@ -705,27 +785,8 @@
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calculate the value of the Bezier curve at t.
|
||||
/// </summary>
|
||||
public static double ValueWithT(double p1, double p2, double p3, double p4, double t)
|
||||
{
|
||||
// P = (1−t)^3*P_1 + 3(1−t)^2*t*P_2 + 3(1−t)*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)
|
||||
/// <inheritdoc />
|
||||
public override IReadOnlyList<Line> ToLines(int n)
|
||||
{
|
||||
if (n < 1)
|
||||
{
|
||||
@ -749,7 +810,7 @@
|
||||
/// <inheritdoc />
|
||||
public override bool Equals(object obj)
|
||||
{
|
||||
if (obj is BezierCurve curve)
|
||||
if (obj is CubicBezierCurve curve)
|
||||
{
|
||||
return StartPoint.Equals(curve.StartPoint) &&
|
||||
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 = (1−t)^2*P_1 + 2(1−t)*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 = (1−t)^3*P_1 + 3(1−t)^2*t*P_2 + 3(1−t)*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>
|
||||
/// 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>
|
||||
|
@ -295,13 +295,19 @@
|
||||
var to = Transform(line.To);
|
||||
trSubpath.LineTo(to.X, to.Y);
|
||||
}
|
||||
else if (c is BezierCurve curve)
|
||||
else if (c is CubicBezierCurve cubic)
|
||||
{
|
||||
var first = Transform(curve.FirstControlPoint);
|
||||
var second = Transform(curve.SecondControlPoint);
|
||||
var end = Transform(curve.EndPoint);
|
||||
var first = Transform(cubic.FirstControlPoint);
|
||||
var second = Transform(cubic.SecondControlPoint);
|
||||
var end = Transform(cubic.EndPoint);
|
||||
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)
|
||||
{
|
||||
trSubpath.CloseSubpath();
|
||||
|
@ -182,16 +182,14 @@
|
||||
}
|
||||
else if (contour[j + 1].IsOnCurve)
|
||||
{
|
||||
var pPrevious = 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;
|
||||
}
|
||||
else
|
||||
{
|
||||
var pPrevious = 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();
|
||||
|
@ -8,11 +8,11 @@
|
||||
[Fact]
|
||||
public void BezierCurveGeneratesCorrectBoundingBox()
|
||||
{
|
||||
var curve = new PdfSubpath.BezierCurve(new PdfPoint(60, 105),
|
||||
new PdfPoint(75, 30),
|
||||
new PdfPoint(215, 115),
|
||||
var curve = new PdfSubpath.CubicBezierCurve(new PdfPoint(60, 105),
|
||||
new PdfPoint(75, 30),
|
||||
new PdfPoint(215, 115),
|
||||
new PdfPoint(140, 160));
|
||||
|
||||
|
||||
var result = curve.GetBoundingRectangle();
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(160, result.Value.Top);
|
||||
@ -26,7 +26,7 @@
|
||||
[Fact]
|
||||
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(215, 115),
|
||||
new PdfPoint(140, 160));
|
||||
@ -45,7 +45,7 @@
|
||||
[Fact]
|
||||
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(215, 115),
|
||||
new PdfPoint(140, 160));
|
||||
|
@ -4,7 +4,7 @@
|
||||
using UglyToad.PdfPig.Geometry;
|
||||
using static UglyToad.PdfPig.Core.PdfSubpath;
|
||||
|
||||
public class BezierCurveTests
|
||||
public class CubicBezierCurveTests
|
||||
{
|
||||
private static readonly DoubleComparer DoubleComparer = new DoubleComparer(3);
|
||||
private static readonly DoubleComparer PreciseDoubleComparer = new DoubleComparer(6);
|
||||
@ -15,391 +15,391 @@
|
||||
{
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(748.25810798903, 186.4625591984302), new PdfPoint(829.089079069829, 404.27831715898503), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(592.4920528842322, 251.78044138111852), new PdfPoint(463.44158905248514, 340.2613585384481), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(594.0987775183773, 434.31476842847394), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(447.12538816961035, 200.10526725150086), new PdfPoint(610.3284245812009, 443.48424246088365), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(766.2642561966622, 403.65960373023546), new PdfPoint(745.1687908479832, 478.63527949852437), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(560.5715695500569, 505.2394576985048), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(546.2479353326921, 495.5501357217896), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(447.17620899022927, 760.6710295308544), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(418.1216123613029, 727.0039780465277), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(552.0129702448811, 501.20341353429967), new PdfPoint(517.2933000779457, 739.6653329588719), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(613.2846778895625, 762.0652048309472), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(619.0791872752442, 483.38072175574905), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(570.8435601367289, 545.4170741807284), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(486.51491141314335, 454.5390372588546), new PdfPoint(502.37913196387734, 501.2073331654721), new PdfPoint(487.17926688095383, 456.4933934441966), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(573.8142472187677, 498.3117762702451), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(482.8630677523453, 495.5682788191853), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(602.4966262601054, 493.74740537798215), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(489.5301582372624, 305.8439586599893), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(540.6377802339489, 364.3654714444053), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(498.4426937326664, 512.3536261995338), new PdfPoint(394.2946897465945, 355.5162297966572), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(457.40664110278004, 652.1683333644837), new PdfPoint(484.6170207749005, 570.6879487652808), }
|
||||
},
|
||||
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 PdfPoint[] { }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(429.09432343278115, 602.1108354934324), new PdfPoint(482.80839235708083, 569.3882565700844), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(592.1372218843604, 594.4850944848324), new PdfPoint(495.5670660759227, 686.366379009761), new PdfPoint(722.5408527250166, 470.41308685421814), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(416.08706148161923, 476.5381858573592), new PdfPoint(502.03557864242435, 656.2393918955745), new PdfPoint(536.1359422779292, 727.5364505775408), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(521.6238559803111, 625.3285700304907), new PdfPoint(507.1287870133768, 643.9031047618156), new PdfPoint(587.138939481947, 541.375040957758), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(519.2565485724904, 627.7824594315703), new PdfPoint(534.6183658439363, 511.7602654714332), new PdfPoint(510.0087018496723, 697.6280673586205), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(429.88688944378305, 480.02726805184784), new PdfPoint(503.13503708244207, 652.6685997491355), new PdfPoint(534.1246812723195, 725.7092651343974), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(558.1937680022871, 595.5083861090311), new PdfPoint(585.3436265805482, 539.453229428223), new PdfPoint(509.30077476036126, 696.455666879191), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(521.204454228015, 625.7536760950204), new PdfPoint(494.56752682342517, 498.0864893835719), new PdfPoint(543.8188906700069, 734.1416082225257), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(547.3866186775634, 603.5712890740092), new PdfPoint(577.1131481652287, 532.6520526761924), new PdfPoint(508.80699470905273, 695.6115480452754), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(554.0303686415244, 598.6041963741395), new PdfPoint(509.1959187925791, 640.4715542358172), new PdfPoint(590.9874165558272, 564.0929231065433), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(567.3781193717792, 588.5546731889699), new PdfPoint(589.0169510459666, 543.728916696448), new PdfPoint(512.7201754656179, 701.780919448937), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(432.15313855588636, 667.8393701634704), new PdfPoint(579.1518317449497, 119.55151599631576), new PdfPoint(578.215503704165, 123.04390957574823), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(419.12248807828684, 335.82775966254644), new PdfPoint(338.39810018166963, 439.793140806256), new PdfPoint(140.32343925823216, 694.8945810821413), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(262.25442342530295, 587.4779323933412), new PdfPoint(276.68708006114014, 630.7549667550165), new PdfPoint(166.69043710960756, 300.924595480044), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(265.3481171796182, 603.1325611156734), new PdfPoint(276.7157187476435, 630.9468994422933), new PdfPoint(54.30803564806219, 86.7580037326037), }
|
||||
},
|
||||
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 PdfPoint[] { new PdfPoint(257.2955610347613, 559.9255861785546), new PdfPoint(268.58529358253224, 590.2564401055265), new PdfPoint(139.04696640209485, 242.24039428432843), }
|
||||
}
|
||||
@ -408,7 +408,7 @@
|
||||
|
||||
[Theory]
|
||||
[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);
|
||||
Assert.Equal(expected.Length, intersections.Length);
|
||||
|
@ -24,7 +24,7 @@
|
||||
|
||||
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);
|
||||
|
||||
@ -125,6 +125,12 @@
|
||||
Run("FontMatrix-raw");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void JudgementDocument()
|
||||
{
|
||||
Run("Judgement Document");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void veraPDF_Issue1010_4()
|
||||
{
|
||||
|
@ -41,21 +41,21 @@
|
||||
{
|
||||
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
|
||||
{
|
||||
// Quad curve
|
||||
skPath.QuadTo((float)curve.SecondControlPoint.X, (float)curve.SecondControlPoint.Y,
|
||||
(float)curve.EndPoint.X, (float)curve.EndPoint.Y);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Cubic curve
|
||||
skPath.CubicTo((float)curve.FirstControlPoint.X, (float)curve.FirstControlPoint.Y,
|
||||
(float)curve.SecondControlPoint.X, (float)curve.SecondControlPoint.Y,
|
||||
(float)curve.EndPoint.X, (float)curve.EndPoint.Y);
|
||||
}
|
||||
skPath.CubicTo((float)curve.FirstControlPoint.X,
|
||||
(float)curve.FirstControlPoint.Y,
|
||||
(float)curve.SecondControlPoint.X,
|
||||
(float)curve.SecondControlPoint.Y,
|
||||
(float)curve.EndPoint.X,
|
||||
(float)curve.EndPoint.Y);
|
||||
}
|
||||
else if (c is PdfSubpath.QuadraticBezierCurve quadratic)
|
||||
{
|
||||
skPath.QuadTo((float)quadratic.ControlPoint.X,
|
||||
(float)quadratic.ControlPoint.Y,
|
||||
(float)quadratic.EndPoint.X,
|
||||
(float)quadratic.EndPoint.Y);
|
||||
}
|
||||
else if (c is PdfSubpath.Close)
|
||||
{
|
||||
|
@ -804,11 +804,11 @@
|
||||
|
||||
#region Path Bezier Curve
|
||||
/// <summary>
|
||||
/// Split a bezier curve into 2 bezier curves, at tau.
|
||||
/// Split a cubic bezier-curve into 2 bezier-curves, at tau.
|
||||
/// </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>
|
||||
public static (BezierCurve, BezierCurve) Split(this BezierCurve bezierCurve, double tau)
|
||||
public static (CubicBezierCurve, CubicBezierCurve) Split(this CubicBezierCurve bezierCurve, double tau)
|
||||
{
|
||||
// De Casteljau Algorithm
|
||||
PdfPoint[][] points = new PdfPoint[4][];
|
||||
@ -835,29 +835,29 @@
|
||||
}
|
||||
}
|
||||
|
||||
return (new BezierCurve(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]));
|
||||
return (new CubicBezierCurve(points[0][0], points[1][0], points[2][0], points[3][0]),
|
||||
new CubicBezierCurve(points[3][0], points[2][1], points[1][2], points[0][3]));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 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>
|
||||
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);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
@ -865,7 +865,7 @@
|
||||
/// <summary>
|
||||
/// Get the <see cref="PdfPoint"/>s that are the intersections of the line and the curve.
|
||||
/// </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);
|
||||
}
|
||||
@ -873,12 +873,12 @@
|
||||
/// <summary>
|
||||
/// Get the <see cref="PdfPoint"/>s that are the intersections of the line and the curve.
|
||||
/// </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);
|
||||
}
|
||||
|
||||
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);
|
||||
if (ts is null || ts.Length == 0) return [];
|
||||
@ -905,8 +905,8 @@
|
||||
/// <summary>
|
||||
/// Get the t values that are the intersections of the line and the curve.
|
||||
/// </summary>
|
||||
/// <returns>List of t values where the <see cref="BezierCurve"/> and the <see cref="PdfLine"/> intersect.</returns>
|
||||
public static double[]? IntersectT(this BezierCurve bezierCurve, PdfLine line)
|
||||
/// <returns>List of t values where the <see cref="CubicBezierCurve"/> and the <see cref="PdfLine"/> intersect.</returns>
|
||||
public static double[]? IntersectT(this CubicBezierCurve bezierCurve, PdfLine line)
|
||||
{
|
||||
return IntersectT(bezierCurve, line.Point1, line.Point2);
|
||||
}
|
||||
@ -914,13 +914,13 @@
|
||||
/// <summary>
|
||||
/// Get the t values that are the intersections of the line and the curve.
|
||||
/// </summary>
|
||||
/// <returns>List of t values where the <see cref="BezierCurve"/> and the <see cref="Line"/> intersect.</returns>
|
||||
public static double[]? IntersectT(this BezierCurve bezierCurve, Line line)
|
||||
/// <returns>List of t values where the <see cref="CubicBezierCurve"/> and the <see cref="Line"/> intersect.</returns>
|
||||
public static double[]? IntersectT(this CubicBezierCurve bezierCurve, Line line)
|
||||
{
|
||||
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
|
||||
var bezierBbox = bezierCurve.GetBoundingRectangle();
|
||||
|
Loading…
Reference in New Issue
Block a user