internal void WriteSegment(ArcSegment seg)
{
if (!DevHelper.FlattenArcSegments)
{
int pieces;
System.Windows.Media.PointCollection points =
GeometryHelper.ArcToBezier(this.currentPoint.X, this.currentPoint.Y, seg.Size.Width, seg.Size.Height, seg.RotationAngle, seg.IsLargeArc,
seg.SweepDirection == SweepDirection.Clockwise, seg.Point.X, seg.Point.Y, out pieces);
if (pieces == 0)
{
// just draw single line
WriteLiteral("{0:0.####} {1:0.####} l\n", seg.Point.X, seg.Point.Y);
this.currentPoint = seg.Point;
return;
}
else if (pieces < 0)
return;
int count = points.Count;
Debug.Assert(count % 3 == 0);
for (int idx = 0; idx < count - 2; idx += 3)
{
WriteLiteral("{0:0.####} {1:0.####} {2:0.####} {3:0.####} {4:0.####} {5:0.####} c\n",
points[idx].X, points[idx].Y, points[idx + 1].X, points[idx + 1].Y, points[idx + 2].X, points[idx + 2].Y);
this.currentPoint = new Point(points[idx + 2].X, points[idx + 2].Y);
}
}
else
{
PolyLineSegment lseg = WpfUtils.FlattenSegment(this.currentPoint, seg);
WriteSegment(lseg);
}
}