public static BezierCurve FromEllipse(Point center, Size radius) { var pt1 = new Point(0, radius.Height); // top var pt2 = new Point(radius.Width, 0); // right var pt3 = new Point(0, -radius.Height); // bottom var pt4 = new Point(-radius.Width, 0); // left double dx = radius.Width * 4.0 * (System.Math.Sqrt(2) - 1) / 3; double dy = radius.Height * 4.0 * (System.Math.Sqrt(2) - 1) / 3; var curve_control_points = new [] { pt1, pt1.Add(dx, 0), pt2.Add(0, dy), pt2, pt2.Add(0, -dy), pt3.Add(dx, 0), pt3, pt3.Add(-dx, 0), pt4.Add(0, -dy), pt4, pt4.Add(0, dy), pt1.Add(-dx, 0), pt1 } .Select(p => p + center).ToArray(); var curve_Degree = 3; var curve = new BezierCurve(curve_control_points, curve_Degree); return curve; }
public IVisio.Shape DrawOval(Point center, double radius) { var A = center.Add(-radius, -radius); var B = center.Add(radius, radius); var rect = new Rectangle(A, B); return this.DrawOval(rect); }