public void AddEllipse(RectangleF rect)
{
const float C1 = 0.552285f;
const float C2 = 0.552285f;
float rx = rect.Width / 2;
float ry = rect.Height / 2;
float cx = rect.X + rx;
float cy = rect.Y + ry;
if (!isReverseWindingOnFill) {
/* origin */
Append (cx + rx, cy, PathPointType.Start, false);
/* quadrant I */
AppendBezier (cx + rx, cy - C1 * ry,
cx + C1 * rx, cy - ry,
cx, cy - ry);
/* quadrant II */
AppendBezier (cx - C1 * rx, cy - ry,
cx - rx, cy - C1 * ry,
cx - rx, cy);
/* quadrant III */
AppendBezier (cx - rx, cy + C1 * ry,
cx - C1 * rx, cy + ry,
cx, cy + ry);
/* quadrant IV */
AppendBezier (cx + C1 * rx, cy + ry,
cx + rx, cy + C1 * ry,
cx + rx, cy);
}
else
{
// We need to reverse the drawing of the ellipse so that the
// winding is taken into account to not leave holes.
/* origin */
Append (cx + rx, cy, PathPointType.Start, false);
/* quadrant IV */
AppendBezier (cx + C1 * rx, cy + ry,
cx + rx, cy + C1 * ry,
cx + rx, cy);
/* quadrant I */
AppendBezier (cx + rx, cy - C1 * ry,
cx + C1 * rx, cy - ry,
cx, cy - ry);
/* quadrant II */
AppendBezier (cx - C1 * rx, cy - ry,
cx - rx, cy - C1 * ry,
cx - rx, cy);
/* quadrant III */
AppendBezier (cx - rx, cy + C1 * ry,
cx - C1 * rx, cy + ry,
cx, cy + ry);
}
CloseFigure ();
}