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); } }
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"); }
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
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); }
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); }
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; }
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; }
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); }
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; }
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>() { }); }
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); } }
internal SvgPath ToSvgPath() { var svgPath = new SvgPath(); svgPath.Path.AddRange(ToPathCommands()); return(svgPath); }
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); }
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); }
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); } }
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)))); } }
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 }); }
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); }
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)); } }
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); }
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); }
} // 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
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; }
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); }
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); }
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); }
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; } }
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); }
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(); }