Esempio n. 1
0
        private void button3_Click(object sender, System.EventArgs e)
        {
            SvgNumList a = "3, 5.6 901		-7  ";

            Assert.Equals(a[3], -7f);

            SvgTransformList b = "rotate ( 45 ), translate (11, 10)skewX(3)";

            Assert.Equals(b[1].Matrix.OffsetX, 11f);

            SvgColor c = "rgb( 100%, 100%, 50%)";

            Assert.Equals(c.Color.B, 0x7f);

            SvgColor d = "#abc";

            Assert.Equals(d.Color.G, 0xbb);

            SvgPath f = "M 5,5 L 1.1 -6    , Q 1,3 9,10  z";

            Assert.Equals(f.Count, 4f);
            Assert.Equals(f[1].Abs, true);
            Assert.Equals(f[2].Data[3], 10f);

            MessageBox.Show("Tests completed Ok");
        }
 private void PopTransformsMatrix(SvgTransformList transforms)
 {
     if (transforms.Count > 0)
     {
         PopMatrix();
     }
 }
        private void PushTransformsMatrix(SvgTransformList transforms)
        {
            if (transforms.Count == 0)
            {
                return;
            }
            var matrix = transforms.Aggregate(SvgMatrix.Identity, (current, transform) => current * transform.Matrix);

            PushMatrix(matrix);
        }
 private void TransformAndVisitElements(SvgTransformList transforms, IEnumerable <SvgElement> elements)
 {
     PushTransformsMatrix(transforms);
     {
         foreach (var child in elements)
         {
             child.Accept(this);
         }
     }
     PopTransformsMatrix(transforms);
 }
        protected void SetTransform(GdiGraphics gr)
        {
            if (_svgElement is ISvgTransformable)
            {
                if (_transformMatrix == null)
                {
                    ISvgTransformable transElm  = (ISvgTransformable)_svgElement;
                    SvgTransformList  svgTList  = (SvgTransformList)transElm.Transform.AnimVal;
                    SvgMatrix         svgMatrix = ((SvgTransformList)transElm.Transform.AnimVal).TotalMatrix;

                    _transformMatrix = new Matrix((float)svgMatrix.A, (float)svgMatrix.B, (float)svgMatrix.C,
                                                  (float)svgMatrix.D, (float)svgMatrix.E, (float)svgMatrix.F);
                }
                gr.Transform = _transformMatrix;
            }
        }
Esempio n. 6
0
        public static Matrix GetTransformMatrix(SvgElement element)
        {
            ISvgTransformable transElm = element as ISvgTransformable;

            if (transElm == null)
            {
                return(Matrix.Identity);
            }

            SvgTransformList svgTList     = (SvgTransformList)transElm.Transform.AnimVal;
            SvgTransform     svgTransform = (SvgTransform)svgTList.Consolidate();
            SvgMatrix        svgMatrix    = ((SvgTransformList)transElm.Transform.AnimVal).TotalMatrix;

            return(new Matrix(svgMatrix.A, svgMatrix.B, svgMatrix.C,
                              svgMatrix.D, svgMatrix.E, svgMatrix.F));
        }
Esempio n. 7
0
 /// <summary>
 /// Given a document and a current node, read this element from the node.
 /// </summary>
 /// <param name="doc"></param>
 /// <param name="el"></param>
 public override void ReadXmlElement(XmlDocument doc, XmlElement el)
 {
     foreach (XmlAttribute att in el.Attributes)
     {
         if (att.Name == "style")
         {
             Style = new SvgStyle(att.Value);
         }
         else if (att.Name == "transform")
         {
             Transform = new SvgTransformList(att.Value);
         }
         else
         {
             this[att.Name] = att.Value;
         }
     }
 }
 public override void ReadXmlElement(XmlDocument doc, XmlElement el)
 {
     foreach (XmlAttribute xmlAttribute in el.Attributes)
     {
         if (xmlAttribute.Name == "style")
         {
             this.Style = new SvgStyle(xmlAttribute.Value);
         }
         else if (xmlAttribute.Name == "transform")
         {
             this.Transform = new SvgTransformList(xmlAttribute.Value);
         }
         else
         {
             base[xmlAttribute.Name] = xmlAttribute.Value;
         }
     }
 }
Esempio n. 9
0
        private PageElement TransformAndVisitElements(SvgTransformList transforms, IEnumerable <SvgElement> elements)
        {
            var result = new Group();

            PushTransformsMatrix(transforms);
            {
                foreach (var child in elements)
                {
                    var transformed = child.Accept(this);
                    if (transformed != null)
                    {
                        result.Add(transformed);
                    }
                }
            }
            PopTransformsMatrix(transforms);
            return(result);
        }
Esempio n. 10
0
        protected void Transform(GraphicsWrapper gr)
        {
            if (element is ISvgTransformable)
            {
                if (TransformMatrix == null)
                {
                    ISvgTransformable transElm = (ISvgTransformable)element;
                    SvgTransformList  svgTList = (SvgTransformList)transElm.Transform.AnimVal;
                    //SvgTransform svgTransform = (SvgTransform)svgTList.Consolidate();
                    SvgMatrix svgMatrix = ((SvgTransformList)transElm.Transform.AnimVal).TotalMatrix;

                    TransformMatrix = new Matrix(
                        (float)svgMatrix.A,
                        (float)svgMatrix.B,
                        (float)svgMatrix.C,
                        (float)svgMatrix.D,
                        (float)svgMatrix.E,
                        (float)svgMatrix.F);
                }
                gr.Transform = TransformMatrix;
            }
        }
Esempio n. 11
0
        public static Matrix GetTransformMatrix(SvgElement element, TransformGroup transform)
        {
            ISvgTransformable transElm = element as ISvgTransformable;

            if (transElm == null)
            {
                return(Matrix.Identity);
            }

            SvgTransformList svgTList     = (SvgTransformList)transElm.Transform.AnimVal;
            SvgTransform     svgTransform = (SvgTransform)svgTList.Consolidate();
            SvgMatrix        svgMatrix    = ((SvgTransformList)transElm.Transform.AnimVal).TotalMatrix;

            var matrix = new Matrix(svgMatrix.A, svgMatrix.B, svgMatrix.C,
                                    svgMatrix.D, svgMatrix.E, svgMatrix.F);

            if (!matrix.IsIdentity)
            {
                transform.Children.Add(new MatrixTransform(matrix));
            }

            return(matrix);
        }
Esempio n. 12
0
        protected void SetTransform(WpfDrawingContext context)
        {
            _transformMatrix = null;

            ISvgTransformable transElm = _svgElement as ISvgTransformable;

            if (transElm != null)
            {
                SvgTransformList transformList = (SvgTransformList)transElm.Transform.AnimVal;
                if (transformList.NumberOfItems > 1 && _combineTransforms == false)
                {
                    TransformGroup   transformGroup = new TransformGroup();
                    List <Transform> transforms     = new List <Transform>();

                    for (uint i = 0; i < transformList.NumberOfItems; i++)
                    {
                        ISvgTransform transform = transformList.GetItem(i);
                        double[]      values    = transform.InputValues;
                        switch (transform.TransformType)
                        {
                        case SvgTransformType.Translate:
                            if (values.Length == 1)
                            {
                                // SetTranslate(values[0], 0);
                                //transformGroup.Children.Add(new TranslateTransform(values[0], 0));
                                transforms.Add(new TranslateTransform(values[0], 0));
                            }
                            else if (values.Length == 2)
                            {
                                // SetTranslate(values[0], values[1]);
                                //transformGroup.Children.Add(new TranslateTransform(values[0], values[1]));
                                transforms.Add(new TranslateTransform(values[0], values[1]));
                            }
                            break;

                        case SvgTransformType.Rotate:
                            if (values.Length == 1)
                            {
                                // SetRotate(values[0]);
                                //transformGroup.Children.Add(new RotateTransform(values[0]));
                                transforms.Add(new RotateTransform(values[0]));
                            }
                            else if (values.Length == 3)
                            {
                                // SetRotate(values[0], values[1], values[2]);
                                //transformGroup.Children.Add(new RotateTransform(values[0], values[1], values[2]));
                                transforms.Add(new RotateTransform(values[0], values[1], values[2]));
                            }
                            break;

                        case SvgTransformType.Scale:
                            if (values.Length == 1)
                            {
                                //SetScale(values[0], values[0]);
                                transformGroup.Children.Add(new ScaleTransform(values[0], values[0]));
                            }
                            else if (values.Length == 2)
                            {
                                //SetScale(values[0], values[1]);
                                //transformGroup.Children.Add(new ScaleTransform(values[0], values[1]));
                                transforms.Add(new ScaleTransform(values[0], values[1]));
                            }
                            break;

                        case SvgTransformType.SkewX:
                            if (values.Length == 1)
                            {
                                //SetSkewX(values[0]);
                                //transformGroup.Children.Add(new SkewTransform(values[0], 0));
                                transforms.Add(new SkewTransform(values[0], 0));
                            }
                            break;

                        case SvgTransformType.SkewY:
                            if (values.Length == 1)
                            {
                                //SetSkewY(values[0]);
                                //transformGroup.Children.Add(new SkewTransform(0, values[0]));
                                transforms.Add(new SkewTransform(0, values[0]));
                            }
                            break;

                        case SvgTransformType.Matrix:
                            if (values.Length == 6)
                            {
                                //SetMatrix(new SvgMatrix(values[0], values[1], values[2], values[3], values[4], values[5]));
                                //transformGroup.Children.Add(new MatrixTransform(values[0], values[1], values[2], values[3], values[4], values[5]));
                                transforms.Add(new MatrixTransform(values[0], values[1], values[2], values[3], values[4], values[5]));
                            }
                            break;
                        }
                    }

                    transforms.Reverse();
                    transformGroup.Children = new TransformCollection(transforms);
                    _transformMatrix        = transformGroup;
                    //_transformMatrix = new MatrixTransform(transformGroup.Value);
                    return;
                }
                SvgMatrix svgMatrix = transformList.TotalMatrix;

                if (svgMatrix.IsIdentity)
                {
                    return;
                }

                _transformMatrix = new MatrixTransform(Math.Round(svgMatrix.A, 4), Math.Round(svgMatrix.B, 4),
                                                       Math.Round(svgMatrix.C, 4), Math.Round(svgMatrix.D, 4),
                                                       Math.Round(svgMatrix.E, 4), Math.Round(svgMatrix.F, 4));
            }
        }
Esempio n. 13
0
        private void RenderTextPath(SvgTextPathElement textPath, ref Point ctp,
                                    double rotate, WpfTextPlacement placement)
        {
            if (textPath.ChildNodes == null || textPath.ChildNodes.Count == 0)
            {
                return;
            }

            SvgElement targetPath = textPath.ReferencedElement as SvgElement;

            if (targetPath == null)
            {
                return;
            }

            Geometry textGeometry = CreateGeometry(targetPath, true);

            if (textGeometry == null)
            {
                return;
            }
            PathGeometry pathGeometry = textGeometry as PathGeometry;

            if (pathGeometry == null)
            {
                pathGeometry = textGeometry.GetFlattenedPathGeometry();
            }

            // If the path has a transform, apply it to get a transformed path...
            if (targetPath.HasAttribute("transform"))
            {
                var svgTransform = new SvgTransformList(targetPath.GetAttribute("transform"));
                var svgMatrix    = svgTransform.TotalMatrix;

                if (!svgMatrix.IsIdentity)
                {
                    pathGeometry.Transform = new MatrixTransform(svgMatrix.A, svgMatrix.B, svgMatrix.C,
                                                                 svgMatrix.D, svgMatrix.E, svgMatrix.F);

                    var transformPath = new PathGeometry();
                    transformPath.AddGeometry(pathGeometry);

                    pathGeometry = transformPath;
                }
            }

            WpfPathTextBuilder pathBuilder = new WpfPathTextBuilder(_textElement);

            pathBuilder.BeginTextPath(textPath);

            var comparer = StringComparison.OrdinalIgnoreCase;

            XmlNodeType nodeType = XmlNodeType.None;

            int nodeCount = textPath.ChildNodes.Count;

            for (int i = 0; i < nodeCount; i++)
            {
                XmlNode child = textPath.ChildNodes[i];
                nodeType = child.NodeType;
                if (nodeType == XmlNodeType.Text)
                {
                    var nodeText = GetText(textPath, child);
                    if (i == (nodeCount - 1))
                    {
                        // No need to render the last white space...
                        if (nodeCount == 1)
                        {
                            if (nodeText.StartsWith(NonBreaking, StringComparison.OrdinalIgnoreCase))
                            {
                                if (!nodeText.EndsWith(NonBreaking, StringComparison.OrdinalIgnoreCase))
                                {
                                    nodeText = nodeText.TrimEnd();
                                }
                            }
                            else if (nodeText.EndsWith(NonBreaking, StringComparison.OrdinalIgnoreCase))
                            {
                                nodeText = nodeText.TrimStart();
                            }
                            else
                            {
                                nodeText = nodeText.Trim();
                            }
                        }
                        else
                        {
                            if (!nodeText.EndsWith(NonBreaking, StringComparison.OrdinalIgnoreCase))
                            {
                                nodeText = nodeText.TrimEnd();
                            }
                        }
                    }
                    else if (i == 0)
                    {
                        nodeText = nodeText.Trim();
                    }

                    RenderTextPath(textPath, pathBuilder, nodeText, new Point(ctp.X, ctp.Y), rotate, placement);
                }
                else if (nodeType == XmlNodeType.Element)
                {
                    string nodeName = child.Name;
                    if (string.Equals(nodeName, "tref", comparer))
                    {
                        RenderTRefPath((SvgTRefElement)child, pathBuilder, ref ctp);
                    }
                    else if (string.Equals(nodeName, "tspan", comparer))
                    {
                        RenderTSpanPath((SvgTSpanElement)child, pathBuilder, ref ctp);
                    }
                }
            }

            WpfTextStringFormat stringFormat = GetTextStringFormat(textPath);

            //ISvgAnimatedLength pathOffset  = textPath.StartOffset;
            //SvgTextPathMethod pathMethod   = (SvgTextPathMethod)textPath.Method.BaseVal;
            //SvgTextPathSpacing pathSpacing = (SvgTextPathSpacing)textPath.Spacing.BaseVal;

            pathBuilder.RenderTextPath(_drawContext, pathGeometry, stringFormat.Alignment);

            pathBuilder.EndTextPath();
        }
        public SvgTransformListEnumerator(SvgTransformList list) : base(list)

        {
        }