Esempio n. 1
0
        public Group(SVG svg, XmlNode node, Shape parent)
            : base(svg, node)
        {
            // parent on group must be set before children are added
            var clp = XmlUtil.AttrValue(node, "clip-path", null);

            if (!string.IsNullOrEmpty(clp))
            {
                Shape  result;
                string id = ShapeUtil.ExtractBetween(clp, '(', ')');
                if (id.Length > 0 && id[0] == '#')
                {
                    id = id.Substring(1);
                }
                svg.m_shapes.TryGetValue(id, out result);
                this.m_clip = result as Clip;
            }

            this.Parent = parent;
            foreach (XmlNode childnode in node.ChildNodes)
            {
                Shape shape = AddToList(svg, this.m_elements, childnode, this);
                if (shape != null)
                {
                    shape.Parent = this;
                }
            }
            if (this.Id.Length > 0)
            {
                svg.AddShape(this.Id, this);
            }
        }
Esempio n. 2
0
        public Group(SVG svg, XmlNode node, Shape parent)
            : base(svg, node)
        {
            // parent on group must be set before children are added
            var clp = XmlUtil.AttrValue(node, "clip-path", null);
            if (!string.IsNullOrEmpty(clp))
            {
                Shape result;
                string id = ShapeUtil.ExtractBetween(clp, '(', ')');
                if (id.Length > 0 && id[0] == '#') id = id.Substring(1);
                svg.m_shapes.TryGetValue(id, out result);
                this.m_clip = result as Clip;
            }

            this.Parent = parent;
            foreach (XmlNode childnode in node.ChildNodes)
            {
                Shape shape = AddToList(svg, this.m_elements, childnode, this);
                if (shape != null) shape.Parent = this;
            }
            if (this.Id.Length > 0) svg.AddShape(this.Id, this);
        }
Esempio n. 3
0
        public static Shape AddToList(SVG svg, List <Shape> list, XmlNode childnode, Shape parent)
        {
            if (childnode.NodeType != XmlNodeType.Element)
            {
                return(null);
            }

            Shape retVal = null;

            if (childnode.Name == SVGTags.sStyle)
            {
                var match = _regexStyle.Match(childnode.InnerText);
                while (match.Success)
                {
                    var name  = match.Groups[1].Value.Trim();
                    var value = match.Groups[2].Value;
                    svg.m_styles.Add(name, new List <XmlAttribute>());
                    foreach (ShapeUtil.Attribute styleitem in XmlUtil.SplitStyle(svg, value))
                    {
                        svg.m_styles[name].Add(new XmlUtil.StyleItem(childnode, styleitem.Name, styleitem.Value));
                    }
                    match = match.NextMatch();
                }
            }
            else if (childnode.Name == SVGTags.sShapeRect)
            {
                retVal = new RectangleShape(svg, childnode);
            }
            else if (childnode.Name == SVGTags.sFilter)
            {
                retVal = new Filter(svg, childnode, parent);
            }
            else if (childnode.Name == SVGTags.sFeGaussianBlur)
            {
                retVal = new FilterFeGaussianBlur(svg, childnode, parent);
            }
            else if (childnode.Name == SVGTags.sShapeCircle)
            {
                retVal = new CircleShape(svg, childnode);
            }
            else if (childnode.Name == SVGTags.sShapeEllipse)
            {
                retVal = new EllipseShape(svg, childnode);
            }
            else if (childnode.Name == SVGTags.sShapeLine)
            {
                retVal = new LineShape(svg, childnode);
            }
            else if (childnode.Name == SVGTags.sShapePolyline)
            {
                retVal = new PolylineShape(svg, childnode);
            }
            else if (childnode.Name == SVGTags.sShapePolygon)
            {
                retVal = new PolygonShape(svg, childnode);
            }
            else if (childnode.Name == SVGTags.sShapePath)
            {
                retVal = new PathShape(svg, childnode, parent);
            }
            else if (childnode.Name == SVGTags.sClipPath)
            {
                retVal = new Clip(svg, childnode, parent);
            }
            else if (childnode.Name == SVGTags.sShapeGroup || childnode.Name == SVGTags.sSwitch)
            {
                retVal = new Group(svg, childnode, parent);
            }
            else if (childnode.Name == SVGTags.sShapeUse)
            {
                retVal = new UseShape(svg, childnode);
            }
            else if (childnode.Name == SVGTags.sShapeImage)
            {
                retVal = new ImageShape(svg, childnode);
            }
            else if (childnode.Name == SVGTags.sAnimate)
            {
                retVal = new Animate(svg, childnode, parent);
            }
            else if (childnode.Name == SVGTags.sAnimateColor)
            {
                retVal = new AnimateColor(svg, childnode, parent);
            }
            else if (childnode.Name == SVGTags.sAnimateMotion)
            {
                retVal = new AnimateMotion(svg, childnode, parent);
            }
            else if (childnode.Name == SVGTags.sAnimateTransform)
            {
                retVal = new AnimateTransform(svg, childnode, parent);
            }
            else if (childnode.Name == SVGTags.sText)
            {
                retVal = new TextShape(svg, childnode, parent);
            }
            else if (childnode.Name == SVGTags.sLinearGradient)
            {
                svg.PaintServers.Create(childnode);
                return(null);
            }
            else if (childnode.Name == SVGTags.sRadialGradient)
            {
                svg.PaintServers.Create(childnode);
                return(null);
            }
            else if (childnode.Name == SVGTags.sDefinitions)
            {
                ReadDefs(svg, list, childnode);
                return(null);
            }

            if (retVal != null)
            {
                list.Add(retVal);
                if (retVal.Id.Length > 0)
                {
                    svg.AddShape(retVal.Id, retVal);
                }
            }

            return(retVal);
        }
Esempio n. 4
0
        public static Shape AddToList(SVG svg, List <Shape> list, XmlNode childnode, Shape parent)
        {
            if (childnode.NodeType != XmlNodeType.Element)
            {
                return(null);
            }

            Shape retVal = null;

            var nodeName = GetNodeName(childnode);

            if (nodeName == null)
            {
                return(null);
            }
            if (nodeName == SVGTags.sStyle)
            {
                StyleParser.ParseStyle(svg, childnode.InnerText);
            }
            else if (nodeName == SVGTags.sShapeRect)
            {
                retVal = new RectangleShape(svg, childnode);
            }
            else if (nodeName == SVGTags.sFilter)
            {
                retVal = new Filter(svg, childnode, parent);
            }
            else if (nodeName == SVGTags.sFeGaussianBlur)
            {
                retVal = new FilterFeGaussianBlur(svg, childnode, parent);
            }
            else if (nodeName == SVGTags.sShapeCircle)
            {
                retVal = new CircleShape(svg, childnode);
            }
            else if (nodeName == SVGTags.sShapeEllipse)
            {
                retVal = new EllipseShape(svg, childnode);
            }
            else if (nodeName == SVGTags.sShapeLine)
            {
                retVal = new LineShape(svg, childnode);
            }
            else if (nodeName == SVGTags.sShapePolyline)
            {
                retVal = new PolylineShape(svg, childnode);
            }
            else if (nodeName == SVGTags.sShapePolygon)
            {
                retVal = new PolygonShape(svg, childnode);
            }
            else if (nodeName == SVGTags.sShapePath)
            {
                retVal = new PathShape(svg, childnode, parent);
            }
            else if (nodeName == SVGTags.sClipPath)
            {
                retVal = new Clip(svg, childnode, parent);
            }
            else if (nodeName == SVGTags.sShapeGroup)
            {
                retVal = new Group(svg, childnode, parent);
            }
            else if (nodeName == SVGTags.sSwitch)
            {
                retVal = new Group(svg, childnode, parent)
                {
                    IsSwitch = true
                }
            }
            ;
            else if (nodeName == SVGTags.sShapeUse)
            {
                retVal = new UseShape(svg, childnode);
            }
            else if (nodeName == SVGTags.sShapeImage)
            {
                retVal = new ImageShape(svg, childnode);
            }
            else if (nodeName == SVGTags.sAnimate)
            {
                retVal = new Animate(svg, childnode, parent);
            }
            else if (nodeName == SVGTags.sAnimateColor)
            {
                retVal = new AnimateColor(svg, childnode, parent);
            }
            else if (nodeName == SVGTags.sAnimateMotion)
            {
                retVal = new AnimateMotion(svg, childnode, parent);
            }
            else if (nodeName == SVGTags.sAnimateTransform)
            {
                retVal = new AnimateTransform(svg, childnode, parent);
            }
            else if (nodeName == SVGTags.sText)
            {
                retVal = new TextShape(svg, childnode, parent);
            }
            else if (nodeName == SVGTags.sLinearGradient)
            {
                svg.PaintServers.Create(svg, childnode);
                return(null);
            }
            else if (nodeName == SVGTags.sRadialGradient)
            {
                svg.PaintServers.Create(svg, childnode);
                return(null);
            }
            else if (nodeName == SVGTags.sDefinitions)
            {
                ReadDefs(svg, list, childnode);
                return(null);
            }
            else if (nodeName == SVGTags.sSymbol)
            {
                retVal = new Group(svg, childnode, parent);
            }

            if (retVal != null)
            {
                list.Add(retVal);
                if (retVal.Id.Length > 0)
                {
                    svg.AddShape(retVal.Id, retVal);
                }
            }

            if (nodeName == SVGTags.sSymbol)
            {
                return(null);
            }

            return(retVal);
        }