Example #1
0
 public SvgTransform(Matrix m, SvgTransformType type)
 {
     _m = m;
     this._type = type;
 }
Example #2
0
        /// <summary>
        /// Parse a transformation according to the SVG standard.  This is complex enough that it makes
        /// me wish it was worth using a real parser, but antlr is so unwieldy.
        /// </summary>
        public void FromString(string s)
        {
            _m = new Matrix();

            string name, args;

            int idx = s.IndexOf("(");

            if (idx != -1)
            {
                name = s.Substring(0, idx).Trim();

                int idx2 = s.IndexOf(")");

                if (idx2 != -1)
                {
                    args = s.Substring(idx+1, (idx2 - idx) -1);
                    float[] points = SvgNumList.String2Floats(args);

                    if (name.IndexOf("matrix")!=-1)
                    {
                        _type = SvgTransformType.SVG_TRANSFORM_MATRIX;
                        if (points.Length == 6)
                        {
                            _m = new Matrix(points[0], points[1], points[2], points[3], points[4], points[5]);
                            return;
                        }
                    }
                    else if (name.IndexOf("translate")!=-1)
                    {
                        _type = SvgTransformType.SVG_TRANSFORM_TRANSLATE;
                        if (points.Length == 1)
                        {
                            _m.Translate(points[0], 0);
                            return;
                        }
                        if (points.Length == 2)
                        {
                            _m.Translate(points[0], points[1]);
                            return;
                        }
                    }
                    else if (name.IndexOf("scale")!=-1)
                    {
                        _type = SvgTransformType.SVG_TRANSFORM_SCALE;
                        if (points.Length == 1)
                        {
                            _m.Scale(points[0], 0);
                            return;
                        }
                        if (points.Length == 2)
                        {
                            _m.Scale(points[0], points[1]);
                            return;
                        }
                    }
                    else if (name.IndexOf("rotate")!=-1)
                    {
                        _type = SvgTransformType.SVG_TRANSFORM_ROTATE;
                        if (points.Length == 1)
                        {
                            _m.Rotate(points[0]);
                            _angle = points[0];
                            return;
                        }
                        else if (points.Length == 3)
                        {
                            _angle = points[0];
                            _m.Translate(points[1], points[2]);
                            _m.Rotate(points[0]);
                            _m.Translate(points[1]*-1, points[2]*-1);
                            return;
                        }
                    }
                    else if (name.IndexOf("skewX")!=-1)
                    {
                        _type = SvgTransformType.SVG_TRANSFORM_SKEWX;
                        if (points.Length == 1)
                        {
                            _m.Shear(points[0], 0);
                            return;
                        }
                    }
                    else if (name.IndexOf("skewY")!=-1)
                    {
                        _type = SvgTransformType.SVG_TRANSFORM_SKEWY;
                        if (points.Length == 1)
                        {
                            _m.Shear(0, points[0]);
                            return;
                        }
                    }
                }
            }

            throw new SvgException("Invalid SvgTransformation", s);
        }
Example #3
0
 public SvgTransform()
 {
     _m = new Matrix();
     _type = SvgTransformType.SVG_TRANSFORM_MATRIX;
 }
 public SvgTransform(ISvgMatrix matrix)
 {
     _type   = SvgTransformType.Matrix;
     _matrix = matrix;
 }
        public SvgTransform(string str)
        {
            int    start      = str.IndexOf("(", StringComparison.OrdinalIgnoreCase);
            string type       = str.Substring(0, start);
            string valuesList = (str.Substring(start + 1, str.Length - start - 2)).Trim();           //JR added trim
            Regex  re         = new Regex("[\\s\\,]+");

            valuesList = re.Replace(valuesList, ",");

            string[] valuesStr = valuesList.Split(new char[] { ',' });
            int      len       = valuesStr.GetLength(0);

            double[] values = new double[len];

            try
            {
                for (int i = 0; i < len; i++)
                {
                    values[i] = SvgNumber.Parse(valuesStr[i]);
                }
            }
            catch
            {
                values = SvgNumber.ParseDoubles(str);
                len    = values.Length;
            }

            _values = values;

            switch (type.Trim())
            {
            case "translate":
                switch (len)
                {
                case 1:
                    SetTranslate(values[0], 0);
                    break;

                case 2:
                    SetTranslate(values[0], values[1]);
                    break;

                default:
                    throw new ApplicationException("Wrong number of arguments in translate transform");
                }
                break;

            case "rotate":
                switch (len)
                {
                case 1:
                    SetRotate(values[0]);
                    break;

                case 3:
                    SetRotate(values[0], values[1], values[2]);
                    break;

                default:
                    throw new ApplicationException("Wrong number of arguments in rotate transform");
                }
                break;

            case "scale":
                switch (len)
                {
                case 1:
                    SetScale(values[0], values[0]);
                    break;

                case 2:
                    SetScale(values[0], values[1]);
                    break;

                default:
                    throw new ApplicationException("Wrong number of arguments in scale transform");
                }
                break;

            case "skewX":
                if (len != 1)
                {
                    throw new ApplicationException("Wrong number of arguments in skewX transform");
                }
                SetSkewX(values[0]);
                break;

            case "skewY":
                if (len != 1)
                {
                    throw new ApplicationException("Wrong number of arguments in skewY transform");
                }
                SetSkewY(values[0]);
                break;

            case "matrix":
                if (len != 6)
                {
                    throw new ApplicationException("Wrong number of arguments in matrix transform");
                }
                SetMatrix(new SvgMatrix(values[0], values[1], values[2], values[3], values[4], values[5]));
                break;

            default:
                _type = SvgTransformType.Unknown;
                break;
            }
        }
 public void SetRotate(double angle, double cx, double cy)
 {
     _type   = SvgTransformType.Rotate;
     _angle  = angle;
     _matrix = new SvgMatrix().Translate(cx, cy).Rotate(angle).Translate(-cx, -cy);
 }
 public void SetSkewY(double angle)
 {
     _type   = SvgTransformType.SkewY;
     _angle  = angle;
     _matrix = new SvgMatrix().SkewY(angle);
 }
 public void SetScale(double sx, double sy)
 {
     _type   = SvgTransformType.Scale;
     _matrix = new SvgMatrix().ScaleNonUniform(sx, sy);
 }
 public void SetRotate(double angle)
 {
     _type   = SvgTransformType.Rotate;
     _angle  = angle;
     _matrix = new SvgMatrix().Rotate(angle);
 }
 public void SetMatrix(ISvgMatrix matrix)
 {
     _type   = SvgTransformType.Matrix;
     _matrix = matrix;
 }
 public void SetTranslate(double tx, double ty)
 {
     _type   = SvgTransformType.Translate;
     _matrix = new SvgMatrix().Translate(tx, ty);
 }
Example #12
0
 internal SvgTransform(SvgTransformType transformType, SvgMatrix matrix, float angle = 0)
 {
     Matrix        = matrix ?? throw new ArgumentNullException(nameof(matrix));
     TransformType = transformType;
     Angle         = angle;
 }
Example #13
0
		internal SvgTransform(SvgTransformType type, SvgMatrix matrix)
		{
			this.Type = type;
			this.Matrix = matrix;
		}
Example #14
0
		internal SvgTransform(SvgTransformType type, SvgMatrix matrix, SvgAngle angle)
		{
			this.Type = type;
			this.Matrix = matrix;
			this.Angle = angle;
		}
Example #15
0
 internal SvgTransform(SvgTransformType type, SvgMatrix matrix)
 {
     this.Type   = type;
     this.Matrix = matrix;
 }
Example #16
0
 internal SvgTransform(SvgTransformType type, SvgMatrix matrix, SvgAngle angle)
 {
     this.Type   = type;
     this.Matrix = matrix;
     this.Angle  = angle;
 }