using System; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Drawing.Drawing2D; using System.Xml; using System.ComponentModel; namespace Svg { public class SvgEllipse : SvgGraphicsElement { private SvgUnit _radiusX; private SvgUnit _radiusY; private SvgUnit _centerX; private SvgUnit _centerY; private GraphicsPath _path; [SvgAttribute("cx")] public virtual SvgUnit CenterX { get { return this._centerX; } set { this._centerX = value; this.IsPathDirty = true; } } [SvgAttribute("cy")] public virtual SvgUnit CenterY { get { return this._centerY; } set { this._centerY = value; this.IsPathDirty = true; } } [SvgAttribute("rx")] public virtual SvgUnit RadiusX { get { return this._radiusX; } set { this._radiusX = value; this.IsPathDirty = true; } } [SvgAttribute("ry")] public virtual SvgUnit RadiusY { get { return this._radiusY; } set { this._radiusY = value; this.IsPathDirty = true; } } /// /// Gets or sets a value to determine if anti-aliasing should occur when the element is being rendered. /// /// protected override bool RequiresSmoothRendering { get { return true; } } /// /// Gets the bounds of the element. /// /// The bounds. public override RectangleF Bounds { get { return this.Path.GetBounds(); } } /// /// Gets the for this element. /// /// public override GraphicsPath Path { get { if (this._path == null || this.IsPathDirty) { PointF center = new PointF(this._centerX.ToDeviceValue(this), this._centerY.ToDeviceValue(this, true)); PointF radius = new PointF(this._radiusX.ToDeviceValue(this), this._radiusY.ToDeviceValue(this, true)); this._path = new GraphicsPath(); _path.StartFigure(); _path.AddEllipse(center.X - radius.X, center.Y - radius.Y, 2 * radius.X, 2 * radius.Y); _path.CloseFigure(); this.IsPathDirty = false; } return _path; } } /// /// Renders the and contents to the specified object. /// /// The object to render to. protected override void Render(Graphics graphics) { if (this._radiusX.Value > 0.0f && this._radiusY.Value > 0.0f) { base.Render(graphics); } } /// /// Initializes a new instance of the class. /// public SvgEllipse() { } } }