Esempio n. 1
0
        static List<PathData> CreateTextData(XElement textElem, MatrixTransform parentTransform)
        {
            if (textElem == null) return null;

            var globalData = new PathData();
            XAttribute attr = textElem.Attribute ("style");
            if (attr != null && !string.IsNullOrWhiteSpace(attr.Value))
            {
                // парсим стили объекта
                string[] rawStyles = attr.Value.Split(';');
                foreach (var rawStyle in rawStyles)
                {
                    string name = rawStyle.Split(':')[0];
                    string val = rawStyle.Split(':')[1];
                    if (rawStyle.StartsWith("fill:")) globalData.color = val;
                    if (rawStyle.StartsWith("fill-opacity:")) globalData.opacity = Convert.ToDouble(val, CultureInfo.InvariantCulture);
                    if (rawStyle.StartsWith("font-size:")) globalData.fontSize = Convert.ToDouble(val.Replace("px",""), CultureInfo.InvariantCulture);
                    if (rawStyle.StartsWith("font-family:")) globalData.fontFamily = val;
                    if (rawStyle.StartsWith("font-weight:")) globalData.fontWeight = val;
                    if (rawStyle.StartsWith("text-align:")) globalData.align = val;
                }
            }

            MatrixTransform transform = null;
            if (textElem.Attribute ("transform") != null)
            {
                transform = MatrixTransform.Parse (textElem.Attribute ("transform").Value);
                if (parentTransform != null)
                    transform = parentTransform.Multiply (transform);
            }
            else
            {
                transform = parentTransform;
            }
            //if (transform != null)
            //	globalData.matrix = transform.ToString ();

            List<PathData> list = new List<PathData>();
            foreach (var spanElem in textElem.Elements ("{" + textElem.Name.NamespaceName + "}tspan"))
            {
                PathData pathData = globalData.Clone();
                attr = spanElem.Attribute ("x");
                pathData.x = Convert.ToDouble (attr.Value.Replace("px",""), CultureInfo.InvariantCulture);
                attr = spanElem.Attribute ("y");
                pathData.y = Convert.ToDouble (attr.Value.Replace("px",""), CultureInfo.InvariantCulture);
                pathData.text = spanElem.Value;

                if (transform != null)
                    transform.Apply(pathData);

                list.Add(pathData);
            }

            return list;
        }
Esempio n. 2
0
        static PathData CreatePathData(XElement pathElem, MatrixTransform parentTransform)
        {
            if (pathElem == null) return null;

            string objectPath = pathElem.Attribute ("d").Value;
            var transformAttr = pathElem.Attribute ("transform");
            MatrixTransform transform = null;
            if (transformAttr != null)
            {
                transform = MatrixTransform.Parse (transformAttr.Value);
                if (parentTransform != null)
                    transform = parentTransform.Multiply (transform);
            }
            else
            {
                transform = parentTransform;
            }

            PathData pathData = new PathData { path = objectPath };
            var attr = pathElem.Attribute ("style");
            if (attr != null && !string.IsNullOrWhiteSpace(attr.Value))
            {
                // парсим стили объекта
                string[] rawStyles = attr.Value.Split(';');
                foreach (var rawStyle in rawStyles)
                {
                    string name = rawStyle.Split(':')[0];
                    string val = rawStyle.Split(':')[1];
                    switch (name)
                    {
                    case "fill":
                        pathData.bgColor = val;
                        break;
                    case "fill-opacity":
                        pathData.opacity = Convert.ToDouble (val, CultureInfo.InvariantCulture);
                        break;
                    case "stroke":
                        pathData.borderColor = val;
                        break;
                    case "stroke-width":
                        pathData.borderWidth = Convert.ToDouble (val.Replace ("px", ""), CultureInfo.InvariantCulture);
                        break;
                    case "stroke-linejoin":
                        pathData.borderJoin = val;
                        break;
                    case "stroke-linecap":
                        pathData.borderCap = val;
                        break;
                    }
                }
            }
            if (transform != null)
            {
                //pathData.matrix = transform.ToString ();
                transform.Apply(pathData);
            }

            return pathData;
        }