Exemplo n.º 1
0
        private static void AddHatching(SvgDocument document, SvgGroup group, Color color, float opacity, int margin, Boolean backDirection)
        {
            var w = document.Width;
            var h = document.Height;

            for (int i = margin; i < w + h; i += 4)
            {
                var x0 = i < h ? 0 : i - h;
                var y0 = i - x0;
                var x1 = (i + 1) < h ? 0 : (i + 1) - h;
                var y1 = (i + 1) - x1;
                var y2 = (i + 1) < w ? 0 : (i + 1) - w;
                var x2 = (i + 1) - y2;
                var y3 = i < w ? 0 : i - w;
                var x3 = i - y3;
                if (backDirection)
                {
                    x0 = w - x0;
                    x1 = w - x1;
                    x2 = w - x2;
                    x3 = w - x3;
                }
                var strPathTemplate = "M{0} {1} L{2} {3} L{4} {5} L{6} {7} z";
                var strPath         = String.Format(strPathTemplate, x0, y0, x1, y1, x2, y2, x3, y3);
                var path            = new SvgPath();
                path.PathData    = SvgPathBuilder.Parse(strPath);
                path.Fill        = new SvgColourServer(color);
                path.FillOpacity = opacity;
                group.Children.Add(path);
            }
        }
Exemplo n.º 2
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");
        }
Exemplo n.º 3
0
        public void DrawOrFillPath(string style, SvgPath path)
        {
            this.m_stringBuilder.Append("<path d=\"");
            this.m_stringBuilder.Append(path.sb);

            // stroke-width:0.26px
            this.m_stringBuilder.Append(style);

            if (this.m_scale != null || this.m_translate != null)
            {
                this.m_stringBuilder.Append(" transform=\"");

                if (this.m_translate != null)
                {
                    this.m_stringBuilder.Append(this.m_translate);
                    if (this.m_scale != null)
                    {
                        this.m_stringBuilder.Append(" ");
                    }
                } // End if(this.m_translate != null)

                if (this.m_scale != null)
                {
                    this.m_stringBuilder.Append(this.m_scale);
                }

                this.m_stringBuilder.Append("\"");
            } // End if (this.m_scale != null || this.m_translate != null)

            this.m_stringBuilder.AppendLine(" />");
        } // End Sub DrawPath
Exemplo n.º 4
0
        public static DrawPath Create(SvgPath svp)
        {
            DrawPath dp;

            try
            {
                string s = svp.PathData.Trim();
                s = s.Replace("\r", "");
                s = s.Replace("\n", " ");
                s = s.Trim();
                string[] arr = s.Split(' ');

                dp = new DrawPath(arr)
                {
                    Name = svp.ShapeName
                };
                dp.SetStyleFromSvg(svp);
            }
            catch (Exception ex)
            {
                ErrH.Log("DrawPath", "Create", ex.ToString(), ErrH._LogPriority.Info);
                dp = null;
            }

            return(dp);
        }
Exemplo n.º 5
0
        private static SvgPath ConvertArc(Arc arc)
        {
            SvgPath svgPath = new SvgPath();

            SvgPathSegmentList svgPathSegmentList = new SvgPathSegmentList();

            svgPathSegmentList.Add(new SvgMoveToSegment(arc.GetEndPoint(0).ConvertToPointF()));

            XYZ a = arc.GetEndPoint(0) - arc.Center;
            XYZ b = arc.GetEndPoint(1) - arc.Center;

            double angleAboutAxis = a.AngleOnPlaneTo(b, arc.Normal);


            SvgArcSweep svgArcSweep = SvgArcSweep.Positive;

            if (angleAboutAxis >= 180)
            {
                svgArcSweep = SvgArcSweep.Negative;
            }

            SvgArcSize svgArcSize = SvgArcSize.Small;

            SvgArcSegment svgArcSegment = new SvgArcSegment(svgPathSegmentList.Last.End, (float)arc.Radius, (float)arc.Radius, (float)angleAboutAxis, svgArcSize, svgArcSweep, arc.GetEndPoint(1).ConvertToPointF());

            svgPathSegmentList.Add(svgArcSegment);
            svgPath.PathData = svgPathSegmentList;

            return(svgPath);
        }
Exemplo n.º 6
0
        private SvgPath CreateSvgSpline(SvgElement owner, LayoutPolyLine line, LineExportConfig lineConfig)
        {
            var path = new SvgPath()
            {
                StrokeWidth = GetLineThickness(lineConfig),
                Stroke = new SvgColourServer(lineConfig.Color),
                Fill = SvgPaintServer.None
            };

            if (lineConfig.IsDashed)
                path.StrokeDashArray = LineDashPattern;

            path.PathData.Add(new SvgMoveToSegment(GetRelativePosition(line.Spline.Curves[0].StartPoint)));

            for (int i = 0; i < line.Spline.Curves.Length; i++)
            {
                var curve = line.Spline.Curves[i];
                path.PathData.Add(new SvgCubicCurveSegment(
                    GetRelativePosition(curve.StartPoint),
                    GetRelativePosition(curve.ControlPoints[0]),
                    GetRelativePosition(curve.ControlPoints[1]),
                    GetRelativePosition(curve.EndPoint)
                    )
                );
            }

            if (owner != null)
                owner.Children.Add(path);

            return path;
        }
Exemplo n.º 7
0
        private SvgPath CreateSvgPolyLine(SvgElement owner, LayoutPolyLine line, LineExportConfig lineConfig)
        {
            var path = new SvgPath() { 
                StrokeWidth = GetLineThickness(lineConfig), 
                Stroke = new SvgColourServer(lineConfig.Color), 
                Fill = SvgPaintServer.None 
            };

            if (lineConfig.IsDashed)
                path.StrokeDashArray = LineDashPattern;

            path.PathData.Add(new SvgMoveToSegment(GetRelativePosition(line.Points[0])));

            for (int i = 0; i < line.Points.Count - 1; i++)
            {
                path.PathData.Add(new SvgLineSegment(
                    GetRelativePosition(line.Points[i]),
                    GetRelativePosition(line.Points[i + 1])
                    )
                );
            }
            if (owner != null)
                owner.Children.Add(path);
            return path;
        }
Exemplo n.º 8
0
        public static PathDrawable Create(SvgPath svgPath, SKRect skViewport, DrawableBase?parent, IAssetLoader assetLoader, HashSet <Uri>?references, DrawAttributes ignoreAttributes = DrawAttributes.None)
        {
            var drawable = new PathDrawable(assetLoader, references)
            {
                Element          = svgPath,
                Parent           = parent,
                IgnoreAttributes = ignoreAttributes
            };

            drawable.IsDrawable = drawable.CanDraw(svgPath, drawable.IgnoreAttributes) && drawable.HasFeatures(svgPath, drawable.IgnoreAttributes);

            if (!drawable.IsDrawable)
            {
                return(drawable);
            }

            drawable.Path = svgPath.PathData?.ToPath(svgPath.FillRule);
            if (drawable.Path is null || drawable.Path.IsEmpty)
            {
                drawable.IsDrawable = false;
                return(drawable);
            }

            drawable.Initialize(skViewport, references);

            return(drawable);
        }
Exemplo n.º 9
0
        public pathData(SvgPath svg)
        {
            style = svg.Style;
            if (style == "")
            {
                Color cColor = svg.Stroke;
                strokeColor = Convert.ToString(cColor.R) + Convert.ToString(cColor.G) + Convert.ToString(cColor.B);
                strokeWidth = svg.StrokeWidth;
                Color fColor = svg.Fill;
                fillColor = Convert.ToString(fColor.R) + Convert.ToString(fColor.G) + Convert.ToString(fColor.B);
            }
            else
            {
                //get from style attribute
                extractStyle rStyle = new extractStyle();
                rStyle.getStyle(style);
                Color sCol = ColorTranslator.FromHtml(rStyle.strokeColour);
                Color fCol = ColorTranslator.FromHtml(rStyle.fillColour);
                strokeColor = Convert.ToString(sCol.R) + Convert.ToString(sCol.G) + Convert.ToString(sCol.B);
                strokeWidth = rStyle.strokeWidth;
                fillColor   = Convert.ToString(fCol.R) + Convert.ToString(fCol.G) + Convert.ToString(fCol.B);
                rStyle      = null;
            }

            shapeData      = svg.PathData;
            Id             = svg.Id;
            authPathLength = svg.PathLength;
        }
Exemplo n.º 10
0
    public override List <MandalaElement> Apply(MandalaElement sourceElement)
    {
        // Convert source to correct type
        ME_CircleSector source = (ME_CircleSector)sourceElement;

        SvgPath svgPath = new SvgPath()
        {
            Fill        = Colour,
            StrokeWidth = 0
        };

        svgPath.PathData = new SvgPathSegmentList();

        SvgMoveToSegment svgStartMove = new SvgMoveToSegment(source.InnerVertex);

        svgPath.PathData.Add(svgStartMove);

        SvgLineSegment line = new SvgLineSegment(source.InnerVertex, source.OuterVertex1);

        svgPath.PathData.Add(line);

        SvgArcSegment arc = new SvgArcSegment(source.OuterVertex1, source.OuterRadius, source.OuterRadius, 0, SvgArcSize.Small, SvgArcSweep.Negative, source.OuterVertex2);

        svgPath.PathData.Add(arc);

        source.SvgDocument.Children.Add(svgPath);

        return(new List <MandalaElement>()
        {
        });
    }
Exemplo n.º 11
0
        public void ReadContent(XmlElement xmlElement, SvgReader svgReader)
        {
            _background = null;
            _border     = null;
            foreach (var node in xmlElement.ChildNodes)
            {
                var childElement = node as XmlElement;
                if (childElement != null && childElement.Name != "clipPath")
                {
                    var svgNode = svgReader.CreateSvgNodeFromXml(childElement);
                    svgReader.Read(svgNode, childElement);
                    if (svgNode is SvgVoContent)
                    {
                        Content = svgNode as SvgVoContent;
                    }
                    else if (svgNode is SvgPath)
                    {
                        var path = svgNode as SvgPath;
                        if (path.ID.Contains("_background"))
                        {
                            _background = path;
                        }
                        else if (path.ID.Contains("_border"))
                        {
                            _border = path;
                        }
                    }
                    else if (svgNode is SvgRect)
                    {
                        var rect = svgNode as SvgRect;
                        if (rect.ID.Contains("_background"))
                        {
                            _background = RectToPath(rect);
                        }
                        else if (rect.ID.Contains("_border"))
                        {
                            _border = RectToPath(rect);
                        }
                    }
                }

                if (_background != null && _border != null && Content != null)
                {
                    break;
                }
            }

            if (_background != null && _border != null)
            {
                Path        = _border.Path;
                Fill        = _background.Fill;
                Stroke      = _border.Stroke;
                StrokeWidth = _border.StrokeWidth;
            }
            else
            {
                throw new SvgParseException(Resources.Exceptions.CanNotParseSvgVoPlaceholder);
            }
        }
Exemplo n.º 12
0
        internal SvgPath ToSvgPath()
        {
            var svgPath = new SvgPath();

            svgPath.Path.AddRange(ToPathCommands());

            return(svgPath);
        }
Exemplo n.º 13
0
        public PathDrawable(SvgPath svgPath, SKRect skOwnerBounds, Drawable?root, Drawable?parent, Attributes ignoreAttributes = Attributes.None)
            : base(svgPath, root, parent)
        {
            IgnoreAttributes = ignoreAttributes;
            IsDrawable       = CanDraw(svgPath, IgnoreAttributes) && HasFeatures(svgPath, IgnoreAttributes);

            if (!IsDrawable)
            {
                return;
            }

            Path = svgPath.PathData?.ToSKPath(svgPath.FillRule, _disposable);
            if (Path == null || Path.IsEmpty)
            {
                IsDrawable = false;
                return;
            }

            IsAntialias = SvgPaintingExtensions.IsAntialias(svgPath);

            TransformedBounds = Path.Bounds;

            Transform = SvgTransformsExtensions.ToSKMatrix(svgPath.Transforms);

            bool canDrawFill   = true;
            bool canDrawStroke = true;

            if (SvgPaintingExtensions.IsValidFill(svgPath))
            {
                Fill = SvgPaintingExtensions.GetFillSKPaint(svgPath, TransformedBounds, ignoreAttributes, _disposable);
                if (Fill == null)
                {
                    canDrawFill = false;
                }
            }

            if (SvgPaintingExtensions.IsValidStroke(svgPath, TransformedBounds))
            {
                Stroke = SvgPaintingExtensions.GetStrokeSKPaint(svgPath, TransformedBounds, ignoreAttributes, _disposable);
                if (Stroke == null)
                {
                    canDrawStroke = false;
                }
            }

            if (canDrawFill && !canDrawStroke)
            {
                IsDrawable = false;
                return;
            }

            SvgMarkerExtensions.CreateMarkers(svgPath, Path, skOwnerBounds, ref MarkerDrawables, _disposable);

            // TODO: Transform _skBounds using _skMatrix.
            SKMatrix.MapRect(ref Transform, out TransformedBounds, ref TransformedBounds);
        }
Exemplo n.º 14
0
        private double RenderLine(double position)
        {
            var path = new SvgPath(_svgRoot, string.Format("M0.5,{0}L{1},{0}", position.ToString("0.00", CultureInfo.InvariantCulture), _diagramWidth.ToString("0.00", CultureInfo.InvariantCulture)));

            path.StrokeWidth = 1;
            path.Stroke      = "#979797";
            _svgRoot.AppendChild(path.XmlElement);

            return(position + 20);
        }
Exemplo n.º 15
0
        private void DrawBaseTypes()
        {
            var offset = _leftMargin;

            for (int i = 0; i < _classDiagram.BaseTypes.Count; i++)
            {
                var diagram     = _classDiagramSvgRenderer.RenderDiagram(_classDiagram.BaseTypes[i]);
                var diagramSize = new Size(
                    _classDiagramSvgRenderer.CalculateDiagramWidth(_classDiagram.BaseTypes[i]),
                    _classDiagramSvgRenderer.CalculateDiagramHeight(_classDiagram.BaseTypes[i]));

                var positionX = (i * 50) + offset;
                var positionY = 0;

                var translate = diagram.CreateAttribute("transform");
                translate.Value = string.Format("translate({0}, {1})", positionX.ToString("0.00", CultureInfo.InvariantCulture), positionY.ToString("0.00", CultureInfo.InvariantCulture));
                diagram["svg"]["g"].Attributes.Append(translate);

                _mainDiagram.ImportAdd((SvgElement)diagram["svg"]["g"]);

                offset += diagramSize.Width;

                var pathGraphic = new SvgGraphic(_mainDiagram);

                //line
                if (i == 0)
                {
                    var path = new SvgPath(_mainDiagram, string.Format("M{0},{1}L{0},{2}",
                                                                       (positionX + 50).ToString("0.00", CultureInfo.InvariantCulture),
                                                                       (positionY + diagramSize.Height).ToString("0.00", CultureInfo.InvariantCulture),
                                                                       _topMargin.ToString("0.00", CultureInfo.InvariantCulture)));
                    path.StrokeWidth = 1;
                    path.Stroke      = "#979797";
                    pathGraphic.Add(path);
                }

                //arrow
                var startX = positionX + 50;
                var startY = diagramSize.Height;

                var points = string.Format("{0},{1} {2},{3} {4},{3}",
                                           startX.ToString("0.00", CultureInfo.InvariantCulture),
                                           startY.ToString("0.00", CultureInfo.InvariantCulture),
                                           (startX - 5).ToString("0.00", CultureInfo.InvariantCulture),
                                           (startY + 10).ToString("0.00", CultureInfo.InvariantCulture),
                                           (startX + 5).ToString("0.00", CultureInfo.InvariantCulture));
                var arrow = new SvgPolygon(_mainDiagram, points);
                arrow.Stroke = "#979797";
                arrow.Fill   = "#FFFFFF";

                pathGraphic.Add(arrow);

                _mainDiagram.Add(pathGraphic);
            }
        }
Exemplo n.º 16
0
        public void AddJointsToPath(SvgPath path, List <Joint> joints, int scale)
        {
            path.PathData.Add(new SvgMoveToSegment(new PointF(joints[0].Position.X + 1, TranslatePosition(joints[0].Position.Y))));
            for (var i = 0; i < joints.Count - 1; i++)
            {
                var start = joints[i];
                var end   = joints[i + 1];

                path.PathData.Add(new SvgLineSegment(new PointF(start.Position.X + 1, TranslatePosition(start.Position.Y)), new PointF(end.Position.X + 1, TranslatePosition(end.Position.Y))));
            }
        }
Exemplo n.º 17
0
        public static DrawablePath FromDotgridSVG(byte[] data, Brush brush = null, Pen pen = null, bool flatten = true)
        {
            XmlDocument xml = new XmlDocument();

            using (MemoryStream ms = new MemoryStream(data))
                using (StreamReader reader = new StreamReader(ms, Encoding.UTF8)) {
                    xml.Load(reader);
                }

            SvgDocument svg   = SvgDocument.Open(xml);
            SvgPath     layer = svg.GetElementById <SvgPath>("layer_1");

            if (pen != null)
            {
                pen.Width = layer.StrokeWidth;
                switch (layer.StrokeLineCap)
                {
                case SvgStrokeLineCap.Butt:
                    // This is even the case when it should be square.
                    pen.StartCap = LineCap.Square;
                    pen.DashCap  = DashCap.Flat;
                    pen.EndCap   = LineCap.Square;
                    break;

                case SvgStrokeLineCap.Round:
                    pen.StartCap = LineCap.Round;
                    pen.DashCap  = DashCap.Round;
                    pen.EndCap   = LineCap.Round;
                    break;

                case SvgStrokeLineCap.Square:
                    pen.StartCap = LineCap.Square;
                    pen.DashCap  = DashCap.Flat;
                    pen.EndCap   = LineCap.Square;
                    break;
                }
            }

            GraphicsPath path = svg.Path;
            Matrix       fix  = new Matrix();

            fix.Translate(-svg.Width / 2f, -svg.Height / 2f);
            path.Transform(fix);
            if (flatten)
            {
                path.Flatten();
            }

            return(new DrawablePath {
                Path = path,
                Brush = brush,
                Pen = pen
            });
        }
Exemplo n.º 18
0
        public static Path GetPath(SvgPath path)
        {
            string data = path.PathData.ToString();
            Path   p    = new Path()
            {
                Data            = Geometry.Parse(data),
                Fill            = GetBrush(path),
                StrokeThickness = path.StrokeWidth.Value,
            };

            return(p);
        }
Exemplo n.º 19
0
        internal void Build(Wheel wheel, SvgSvgElement root)
        {
            SvgGroupElement helperLinesGroup = new SvgGroupElement("HelperLines");

            helperLinesGroup.Style = Styles.HelperLineStyle;
            root.AddChild(helperLinesGroup);

            // Wheel pitch circle
            helperLinesGroup.AddChild(SvgHelper.CreateCircle(wheel.Center, wheel.PitchDiameter / 2.0));

            // Wheel addendum circle
            helperLinesGroup.AddChild(SvgHelper.CreateCircle(wheel.Center, wheel.PitchDiameter / 2.0 + wheel.Addendum));

            // Wheel dedendum circle
            helperLinesGroup.AddChild(SvgHelper.CreateCircle(wheel.Center, wheel.PitchDiameter / 2.0 - wheel.Dedendum));

            // wheel center
            double halfCrossLength = 10;

            helperLinesGroup.AddChild(new SvgLineElement(wheel.Center.X - halfCrossLength, wheel.Center.Y, wheel.Center.X + halfCrossLength, wheel.Center.Y));
            helperLinesGroup.AddChild(new SvgLineElement(wheel.Center.X, wheel.Center.Y - halfCrossLength, wheel.Center.X, wheel.Center.Y + halfCrossLength));


            SvgGroupElement mainGroup = new SvgGroupElement("Main");

            mainGroup.Style = Styles.MinorLineStyle;
            root.AddChild(mainGroup);


            WheelTooth[]  teeth       = wheel.GetTeeth(0);
            StringBuilder pathBuilder = new StringBuilder();

            pathBuilder.AppendFormat(CultureInfo.InvariantCulture, "M{0},{1}", (float)teeth[0].DedendumIntersectLeft.X, (float)teeth[0].DedendumIntersectLeft.Y);
            for (int i = 0; i < teeth.Length; i++)
            {
                WheelTooth tooth     = teeth[i];
                WheelTooth nextTooth = teeth[(i + 1) % teeth.Length];
                InsertWheelToothPath(wheel, tooth, nextTooth, pathBuilder);
            }
            pathBuilder.Append(" z");

            SvgPath        svgPath        = new SvgPath(pathBuilder.ToString());
            SvgPathElement svgPathElement = new SvgPathElement();

            svgPathElement.D = svgPath;

            mainGroup.AddChild(svgPathElement);

            if (wheel.CenterHoleDiameter > 0)
            {
                mainGroup.AddChild(SvgHelper.CreateCircle(wheel.Center, wheel.CenterHoleDiameter / 2.0));
            }
        }
Exemplo n.º 20
0
        private void RenderLine(double position)
        {
            var path = new SvgPath(
                _svgRoot,
                string.Format("M0.5,{0}L{1},{0}",
                              position.ToString("0.00", CultureInfo.InvariantCulture),
                              _diagramSize.Width.ToString("0.00", CultureInfo.InvariantCulture)));

            path.StrokeWidth = 1;
            path.Stroke      = "#979797";
            _svgGraphic.Add(path);
        }
Exemplo n.º 21
0
        protected override void AddElementDefinition(SvgGroup group)
        {
            var pathLeft    = new SvgPath();
            var strPathLeft = "M0 0 c 0 -1 1 -1 2 0 l1 1 c 1 1 2 2.6 2 4 l0 6.8 c 0 1 -1 1 -2 0 l-1 -1 c -1 -1 -2 -2.6 -2 -4 l0 -6.8 z";

            pathLeft.PathData = SvgPathBuilder.Parse(strPathLeft);
            group.Children.Add(pathLeft);
            var pathRight    = new SvgPath();
            var strPathRight = "M8 1 c -1 1 -2 2.6 -2 4 l0 6.8 c 0 1 1 1 2 0 l1 -1 c 1 -1 2 -2.6 2 -4 l0 -6.8 c 0 -1 -1 -1 -2 0 l-1 1 z";

            pathRight.PathData = SvgPathBuilder.Parse(strPathRight);
            group.Children.Add(pathRight);
        }
Exemplo n.º 22
0
        } // End Sub TranslateTransform

        // Fills the interior of a System.Drawing.Drawing2D.GraphicsPath.
        //   brush: System.Drawing.Brush that determines the characteristics of the fill.
        //   path: System.Drawing.Drawing2D.GraphicsPath that represents the path to fill.
        // Ausnahmen: T:System.ArgumentNullException: brush is null. -or- path is null.
        public void FillPath(SvgSolidBrush brush, SvgPath path)
        {
            DrawOrFillPath($"\" style=\"fill: {brush.Color}; stroke: none;\"", path);

            // this.m_stringBuilder.AppendLine("<!--");
            // this.m_stringBuilder.AppendLine("FillPath: ");
            // this.m_stringBuilder.Append(path.sb);
            // this.m_stringBuilder.AppendLine();

            // this.m_stringBuilder.AppendLine("Brush: " + brush.ToString());
            // this.m_stringBuilder.AppendLine("-->");
            // this.m_stringBuilder.AppendLine();
        } // End Sub FillPath
Exemplo n.º 23
0
        public void DrawPath(SvgPath svgPath, bool ignoreDisplay)
        {
            if (!CanDraw(svgPath, ignoreDisplay))
            {
                return;
            }

            _skCanvas.Save();

            var skMatrix = SkiaUtil.GetSKMatrix(svgPath.Transforms);

            SetTransform(skMatrix);
            SetClipPath(svgPath, _disposable);

            var skPaintOpacity = SetOpacity(svgPath, _disposable);

            var skPaintFilter = SetFilter(svgPath, _disposable);

            var skPath = SkiaUtil.ToSKPath(svgPath.PathData, svgPath.FillRule, _disposable);

            if (skPath != null && !skPath.IsEmpty)
            {
                var skBounds = skPath.Bounds;

                if (SkiaUtil.IsValidFill(svgPath))
                {
                    var skPaint = SkiaUtil.GetFillSKPaint(svgPath, _skSize, skBounds, _disposable);
                    _skCanvas.DrawPath(skPath, skPaint);
                }

                if (SkiaUtil.IsValidStroke(svgPath))
                {
                    var skPaint = SkiaUtil.GetStrokeSKPaint(svgPath, _skSize, skBounds, _disposable);
                    _skCanvas.DrawPath(skPath, skPaint);
                }

                DrawMarkers(svgPath, skPath);
            }

            if (skPaintFilter != null)
            {
                _skCanvas.Restore();
            }

            if (skPaintOpacity != null)
            {
                _skCanvas.Restore();
            }

            _skCanvas.Restore();
        }
        private void DrawVerticalLines(SequenceDiagram sequenceDiagram)
        {
            foreach (var node in _nodeMiddlePoints)
            {
                var path = new SvgPath(_svgRoot, string.Format("M{0},{1}L{0},{2}",
                                                               node.Value.ToString("0.50", CultureInfo.InvariantCulture),
                                                               45,
                                                               _diagramSize.Height.ToString("0.50", CultureInfo.InvariantCulture)));
                path.StrokeWidth = 1;
                path.Stroke      = "#979797";

                _svgGraphic.Add(path);
            }
        }
        private void DrawConnectionLine(SequenceDiagramConnection connection, double callerNodeMiddlePoint, double calledNodeMiddlePoint)
        {
            if (connection.CallerId == connection.CalledId)
            {
                double x1 = callerNodeMiddlePoint;
                double x2 = callerNodeMiddlePoint - 10;
                double y1 = _diagramSize.Height + 10;
                double y2 = _diagramSize.Height + 20;

                var path = new SvgPath(_svgRoot, string.Format("M{0},{1}L{2},{1}",
                                                               x1.ToString("0.00", CultureInfo.InvariantCulture),
                                                               y1.ToString("0.00", CultureInfo.InvariantCulture),
                                                               x2.ToString("0.00", CultureInfo.InvariantCulture)));
                path.StrokeWidth = 1;
                path.Stroke      = "#979797";

                var path2 = new SvgPath(_svgRoot, string.Format("M{0},{1}L{0},{2}",
                                                                x2.ToString("0.00", CultureInfo.InvariantCulture),
                                                                y1.ToString("0.00", CultureInfo.InvariantCulture),
                                                                y2.ToString("0.00", CultureInfo.InvariantCulture)));
                path2.StrokeWidth = 1;
                path2.Stroke      = "#979797";

                var path3 = new SvgPath(_svgRoot, string.Format("M{0},{1}L{2},{1}",
                                                                x2.ToString("0.00", CultureInfo.InvariantCulture),
                                                                y2.ToString("0.00", CultureInfo.InvariantCulture),
                                                                x1.ToString("0.00", CultureInfo.InvariantCulture)));
                path3.StrokeWidth = 1;
                path3.Stroke      = "#979797";

                _svgGraphic.Add(path);
                _svgGraphic.Add(path2);
                _svgGraphic.Add(path3);
            }
            else
            {
                var path = new SvgPath(_svgRoot, string.Format("M{0},{2}L{1},{2}",
                                                               callerNodeMiddlePoint.ToString("0.00", CultureInfo.InvariantCulture),
                                                               calledNodeMiddlePoint.ToString("0.00", CultureInfo.InvariantCulture),
                                                               (_diagramSize.Height + 20).ToString("0.00", CultureInfo.InvariantCulture)));
                path.StrokeWidth = 1;
                path.Stroke      = "#979797";

                _svgGraphic.Add(path);
            }

            _diagramSize.Height += 20;
        }
Exemplo n.º 26
0
        private static SvgPath ConvertLine(Line line)
        {
            SvgPath svgPath = new SvgPath();

            SvgPathSegmentList svgPathSegmentList = new SvgPathSegmentList();

            svgPathSegmentList.Add(new SvgMoveToSegment(line.GetEndPoint(0).ConvertToPointF()));

            SvgLineSegment svgLineSegment = new SvgLineSegment(svgPathSegmentList.Last.End, line.GetEndPoint(1).ConvertToPointF());

            svgPathSegmentList.Add(svgLineSegment);
            svgPath.PathData = svgPathSegmentList;


            return(svgPath);
        }
Exemplo n.º 27
0
        private void AddSlice(SvgGroupElement group, double radius, double angle, double angularWidth)
        {
            PointF firstPointOnCircle  = GetPointOnCircle(radius, angle - angularWidth / 2.0);
            PointF secondPointOnCircle = GetPointOnCircle(radius, angle + angularWidth / 2.0);

            // for an explanation of the arc syntax see: http://www.codestore.net/store.nsf/unid/EPSD-5DTT4L
            string path = String.Format(
                CultureInfo.InvariantCulture,
                "M0,0 L{0},{1} A{2},{2} 0 0,1 {3},{4} z",
                firstPointOnCircle.X, firstPointOnCircle.Y, (float)radius, secondPointOnCircle.X, secondPointOnCircle.Y);

            SvgPath        svgPath        = new SvgPath(path);
            SvgPathElement svgPathElement = new SvgPathElement();

            svgPathElement.D = svgPath;
            group.AddChild(svgPathElement);
        }
Exemplo n.º 28
0
        private void RenderHeader()
        {
            var accessibility = new SvgText(
                _svgRoot,
                _classDiagram.Accessibility,
                (_diagramSize.Width - _classDiagram.Accessibility.GetWidth(11, Fonts.FontItalic)) / 2,
                ACCESSIBILITY_LABEL_Y);

            accessibility.FontSize = 11;

            SvgElement name;

            if (_classDiagram.IsProjectStranger)
            {
                name = new SvgText(
                    _svgRoot,
                    _classDiagram.Name,
                    (_diagramSize.Width - _classDiagram.Name.GetWidth(14, Fonts.FontLight)) / 2,
                    CLASSLABEL_Y);
                ((SvgText)name).FontSize = 14;
            }
            else
            {
                name = new SvgLink(
                    _svgRoot,
                    _classDiagram.Name,
                    string.Format("{{{{type-link:{0}}}}}", _classDiagram.TypeIdentifier),
                    (_diagramSize.Width - _classDiagram.Name.GetWidth(14, Fonts.FontLight)) / 2,
                    CLASSLABEL_Y);
                ((SvgLink)name).Text.FontSize = 14;
            }

            var path = new SvgPath(
                _svgRoot,
                string.Format("M0.5,{0}L{1},{0}",
                              (CLASSLABEL_Y + 10).ToString("0.00", CultureInfo.InvariantCulture),
                              _diagramSize.Width.ToString("0.00", CultureInfo.InvariantCulture)));

            path.StrokeWidth = 1;
            path.Stroke      = "#979797";

            _svgGraphic.Add(accessibility);
            _svgGraphic.Add(name);
            _svgGraphic.Add(path);
        }
Exemplo n.º 29
0
        protected override void OnParametersSet()
        {
            _paths.Clear();
            _legends.Clear();
            double startx, starty, endx, endy;
            var    ndata             = GetNormalizedData();
            double cumulativeRadians = 0;

            for (var i = 0; i < ndata.Length; i++)
            {
                var data = ndata[i];
                startx             = Math.Cos(cumulativeRadians);
                starty             = Math.Sin(cumulativeRadians);
                cumulativeRadians += 2 * Math.PI * data;
                endx = Math.Cos(cumulativeRadians);
                endy = Math.Sin(cumulativeRadians);
                var largeArcFlag = data > 0.5 ? 1 : 0;
                var path         = new SvgPath()
                {
                    Index = i,
                    Data  = $"M {ToS(startx)} {ToS(starty)} A 1 1 0 {ToS(largeArcFlag)} 1 {ToS(endx)} {ToS(endy)} L 0 0"
                };
                _paths.Add(path);
            }

            var counter = 0;

            foreach (var data in ndata)
            {
                var percent = data * 100;
                var labels  = "";
                if (counter < InputLabels.Length)
                {
                    labels = InputLabels[counter];
                }
                var legend = new SvgLegend()
                {
                    Index  = counter,
                    Labels = labels,
                    Data   = ToS(Math.Round(percent, 1))
                };
                _legends.Add(legend);
                counter += 1;
            }
        }
Exemplo n.º 30
0
        private static SvgPath ConverPolyCurve(List <Curve> curves)
        {
            SvgPath svgPath = new SvgPath();

            SvgPathSegmentList svgPathSegmentList = new SvgPathSegmentList();

            svgPathSegmentList.Add(new SvgMoveToSegment(curves[0].GetEndPoint(0).ConvertToPointF()));

            foreach (Curve curve in curves)
            {
                if (curve is Arc)
                {
                    Arc arc = (Arc)curve;

                    XYZ a = arc.GetEndPoint(0) - arc.Center;
                    XYZ b = arc.GetEndPoint(1) - arc.Center;

                    double angleAboutAxis = a.AngleOnPlaneTo(b, arc.Normal);

                    SvgArcSweep svgArcSweep = SvgArcSweep.Positive;

                    if (angleAboutAxis >= 180)
                    {
                        svgArcSweep = SvgArcSweep.Negative;
                    }

                    SvgArcSize svgArcSize = SvgArcSize.Small;

                    SvgArcSegment svgArcSegment = new SvgArcSegment(svgPathSegmentList.Last.End, (float)arc.Radius, (float)arc.Radius, (float)angleAboutAxis, svgArcSize, svgArcSweep, arc.GetEndPoint(1).ConvertToPointF());

                    svgPathSegmentList.Add(svgArcSegment);
                }
                else if (curve is Line)
                {
                    SvgLineSegment svgLineSegment = new SvgLineSegment(svgPathSegmentList.Last.End, ((Line)curve).GetEndPoint(1).ConvertToPointF());

                    svgPathSegmentList.Add(svgLineSegment);
                }
            }


            svgPath.PathData = svgPathSegmentList;

            return(svgPath);
        }
Exemplo n.º 31
0
        public void TestArrowCodeCreation()
        {
            // Sample code from Issue 212. Thanks to podostro.
            const int width = 50;
            const int height = 50;

            var document = new SvgDocument()
            {
                ID = "svgMap",
                ViewBox = new SvgViewBox(0, 0, width, height)
            };

            var defsElement = new SvgDefinitionList() { ID = "defsMap" };
            document.Children.Add(defsElement);

            var groupElement = new SvgGroup() { ID = "gMap" };
            document.Children.Add(groupElement);

            var arrowPath = new SvgPath()
            {
                ID = "pathMarkerArrow",
                Fill = new SvgColourServer(Color.Black),
                PathData = SvgPathBuilder.Parse(@"M0,0 L4,2 L0,4 L1,2 z")
            };

            var arrowMarker = new SvgMarker()
            {
                ID = "markerArrow",
                MarkerUnits = SvgMarkerUnits.StrokeWidth,
                MarkerWidth = 5,
                MarkerHeight = 5,
                RefX = 3,
                RefY = 2,
                Orient = new SvgOrient() { IsAuto = true },
                Children = { arrowPath }
            };

            defsElement.Children.Add(arrowMarker);

            var line = new SvgLine()
            {
                ID = "lineLinkedPoint",
                StartX = 0,
                StartY = 15,
                EndX = 35,
                EndY = 35,
                Stroke = new SvgColourServer(Color.Black),
                StrokeWidth = 3,
                MarkerEnd = new Uri(string.Format("url(#{0})", arrowMarker.ID), UriKind.Relative)
            };

            groupElement.Children.Add(line);

            var svgXml = document.GetXML();
            var img = document.Draw();

            var file = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
            File.WriteAllText(file + ".svg", svgXml);
            img.Save(file + ".png");
            Debug.WriteLine(string.Format("Svg saved to '{0}'", file));

            Debugger.Break();

            // Remove
            var svg = new FileInfo(file + ".svg");
            if (svg.Exists) svg.Delete();
            var png = new FileInfo(file + ".png");
            if (png.Exists) png.Delete();
        }