using System; using System.Text; namespace SharpVectors.Dom.Svg { public sealed class SvgPathSegCurvetoCubicSmoothAbs : SvgPathSegCurvetoCubic, ISvgPathSegCurvetoCubicSmoothAbs { #region constructors internal SvgPathSegCurvetoCubicSmoothAbs(double x, double y, double x2, double y2) : base(SvgPathSegType.CurveToCubicSmoothAbs) { this.x = x; this.y = y; this.x2 = x2; this.y2 = y2; } #endregion #region ISvgPathSegCurvetoCubicSmoothAbs Members private double x; public double X { get { return x; } set { x = value; } } private double y; public double Y { get { return y; } set { y = value; } } private double x2; public double X2 { get { return x2; } set { x2 = value; } } private double y2; public double Y2 { get { return y2; } set { y2 = value; } } #endregion #region Public Methods public override SvgPointF AbsXY { get { return new SvgPointF(x, y); } } public override SvgPointF CubicX1Y1 { get { SvgPathSeg prevSeg = PreviousSeg; if (prevSeg == null || !(prevSeg is SvgPathSegCurvetoCubic)) { return prevSeg.AbsXY; } else { SvgPointF prevXY = prevSeg.AbsXY; SvgPointF prevX2Y2 = ((SvgPathSegCurvetoCubic)prevSeg).CubicX2Y2; return new SvgPointF(2 * prevXY.X - prevX2Y2.X, 2 * prevXY.Y - prevX2Y2.Y); } } } public override SvgPointF CubicX2Y2 { get { return new SvgPointF(x2, y2); } } public override string PathText { get { StringBuilder sb = new StringBuilder(); sb.Append(PathSegTypeAsLetter); sb.Append(X2); sb.Append(","); sb.Append(Y2); sb.Append(","); sb.Append(X); sb.Append(","); sb.Append(Y); return sb.ToString(); } } #endregion } }