private void Form1_Load(object sender, EventArgs e) { svgDoc = new SvgDocument { Width = 500, Height = 500, ViewBox = new SvgViewBox(-250, -250, 500, 500), }; var group = new SvgGroup(); svgDoc.Children.Add(group); group.Children.Add(new SvgCircle { Radius = 100, Fill = new SvgColourServer(Color.Red), Stroke = new SvgColourServer(Color.Black), StrokeWidth = 2 }); var stream = new MemoryStream(); svgDoc.Write(stream); textBox1.Text = Encoding.UTF8.GetString(stream.GetBuffer()); pictureBox1.Image = svgDoc.Draw(); }
private static SvgGroup GetDataGroup(float left, float top, IReadOnlyList <DataPoint> data) { SvgGroup group = Group(left, top); var definitions = new SvgDefinitionList(); var clip = new SvgClipPath() { ID = "data-clip" }; clip.Children.Add(Rect(0, 0, ChartWidth, ChartHeight)); definitions.Children.Add(clip); group.Children.Add(definitions); group.Children.Add(GetChartGroup(0, 0)); group.Children.Add(GetDayGroup(0, ChartHeight)); group.Children.Add(GetDateGroup(0, ChartHeight + DayRow)); for (int i = 0; i <= TotalDays * SegmentsPerDay; i++) { float x = i * SegmentWidth; bool endOfWeek = (i % (SegmentsPerDay * DaysPerWeek)) == 0; bool endOfDay = (i % SegmentsPerDay) == 0; group.Children.Add(Line(x, 0, x, endOfDay ? DataHeight : ChartHeight, endOfWeek ? 2.5f : 1f)); } group.Children.Add(Line(0, ChartHeight + DayRow, ChartWidth, ChartHeight + DayRow)); var chartDataGroup = GetChartDataGroup(0, 0, data); chartDataGroup.ClipPath = new Uri(string.Format("url(#{0})", clip.ID), UriKind.Relative); group.Children.Add(chartDataGroup); group.Children.Add(GetDaysDataGroup(0, ChartHeight, data.First().Time.Date)); return(group); }
public static GroupDrawable Create(SvgGroup svgGroup, SKRect skViewport, DrawableBase?parent, IAssetLoader assetLoader, HashSet <Uri>?references, DrawAttributes ignoreAttributes = DrawAttributes.None) { var drawable = new GroupDrawable(assetLoader, references) { Element = svgGroup, Parent = parent, IgnoreAttributes = ignoreAttributes }; drawable.IsDrawable = drawable.CanDraw(svgGroup, drawable.IgnoreAttributes) && drawable.HasFeatures(svgGroup, drawable.IgnoreAttributes); // NOTE: Call AddMarkers only once. SvgExtensions.AddMarkers(svgGroup); drawable.CreateChildren(svgGroup, skViewport, drawable, assetLoader, references, ignoreAttributes); // TODO: Check if children are explicitly set to be visible. //foreach (var child in drawable.ChildrenDrawables) //{ // if (child.IsDrawable) // { // IsDrawable = true; // break; // } //} if (!drawable.IsDrawable) { return(drawable); } drawable.Initialize(references); return(drawable); }
void SetupInitialView() { //background rect var background = new SvgRectangle(); background.Width = Screen.PrimaryScreen.WorkingArea.Width; background.Height = Screen.PrimaryScreen.WorkingArea.Height; background.Fill = new SvgColourServer(Color.White); background.MouseMove += background_MouseMove; background.MouseDown += background_MouseDown; background.MouseUp += background_MouseUp; //add background to svg doc ViewRoot.Children.Add(background); //group containing all rects FRectGroup = new SvgGroup(); FRectGroup.ID = "RectGroup"; FRectGroup.Transforms.Add(new Svg.Transforms.SvgTranslate(0, 0)); ViewRoot.Children.Add(FRectGroup); AddSomeRects(); //clear context as initial stuff will come via dump already FPoshServer.RemoteContext.ClearAll(); }
void CreateArrow(SvgGroup g, bool startMarker, bool endMarker, float xStart, float yStart, float xEnd, float yEnd) { SvgLine stub = this.doc.AddLine(g); stub.Stroke = Color.Black; stub.X1 = this.ToPx(xStart); stub.X2 = this.ToPx(xEnd); stub.Y1 = this.ToPx(yStart); stub.Y2 = this.ToPx(yEnd); stub.StrokeWidth = this.ToPx(this.BorderWidth); if (startMarker) { stub.MarkerStart = $"url(#{ArrowStart})"; } if (endMarker) { stub.MarkerEnd = $"url(#{ArrowEnd})"; } }
public Form1() { InitializeComponent(); FSvgDoc = new SvgDocument { Width = 500, Height = 500 }; FSvgDoc.ViewBox = new SvgViewBox(-250, -250, 500, 500); var group = new SvgGroup(); FSvgDoc.Children.Add(group); group.Children.Add(new SvgCircle { Radius = 100, Fill = new SvgColourServer(Color.Red), Stroke = new SvgColourServer(Color.Black), StrokeWidth = 2 }); var stream = new MemoryStream(); FSvgDoc.Write(stream); textBox1.Text = Encoding.UTF8.GetString(stream.GetBuffer()); pictureBox1.Image = FSvgDoc.Draw(); }
public bool CreateQRCode(string str, QRCodeGenerator.ECCLevel eccLevel, System.Drawing.Size size) { if (string.IsNullOrEmpty(str)) { return(false); } _qrdata = QrcodeGenerator.CreateQrCode(str, eccLevel); string svg = ""; if (null != _qrdata) { SvgQRCode svgqrcode = new SvgQRCode(_qrdata); svg = svgqrcode.GetGraphic(size, Color.Black, Color.White); using (var stream = new MemoryStream(Encoding.Default.GetBytes(svg))) { _svg = SvgDocument.Open <SvgDocument>(stream, null); var g = new SvgGroup(); var ls = _svg.Children.ToList(); _svg.Children.Clear(); foreach (var c in ls) { g.Children.Add(c); } _svg.Children.Add(g); } DrawCorner(); } _svg.Write(@"d:\1.svg"); _image = _svg.Draw();// CustomQRCode.QRCode.Util.Svg2Bitmap(_svg); return(true); }
internal static void AddMarkers(this SvgGroup svgGroup) { Uri?marker = default; // TODO: The marker can not be set as presentation attribute. //if (svgGroup.TryGetAttribute("marker", out string markerUrl)) //{ // marker = new Uri(markerUrl, UriKind.RelativeOrAbsolute); //} var groupMarkerStart = svgGroup.MarkerStart; var groupMarkerMid = svgGroup.MarkerMid; var groupMarkerEnd = svgGroup.MarkerEnd; if (groupMarkerStart is null && groupMarkerMid is null && groupMarkerEnd is null && marker is null) { return; } foreach (var svgElement in svgGroup.Children) { if (svgElement is not SvgMarkerElement svgMarkerElement) { continue; } if (svgMarkerElement.MarkerStart is null) { if (groupMarkerStart is { })
private SvgGroup CreateAngleText() { var group = new SvgGroup(); var majorAngleIncrement = (float)totalProtractorAngleSweep / majorDivisions; for (int i = 0; i <= majorDivisions; i++) { // The angle from the horizontal, used for positioning each label var a = startAngle + i * majorAngleIncrement; // this is the angle from the vertical. The graduation mark function uses the angle from the horizontal. // the letters start rotated left -60 var textRotation = -90 + a; // go from -n to n var number = -totalProtractorAngleSweep / 2 + i * majorAngleIncrement; var label = Text.EtchedText(number.ToString("#0"), textHeight); float x = -textBaselineRadius *DegreeTrig.Cos(a); float y = -textBaselineRadius *DegreeTrig.Sin(a); label.Transforms.Add(new SvgTranslate(x.Px(), y.Px())); label.Transforms.Add(new SvgRotate(textRotation)); group.Children.Add(label); } return(group); }
public override RenderedSvg RenderColumn() { RenderedSvg result = base.RenderColumn(); SvgGroup group = new SvgGroup(); for (int i = 0; i < vm.Samples.Length; i++) { SampleVM sample = vm.Samples[i]; //sample circle sign SvgCircle circle = new SvgCircle(); circle.CenterX = Helpers.dtos(circleXoffset); circle.CenterY = Helpers.dtos(sample.Level); circle.Radius = Helpers.dtos(circleRadius); circle.Stroke = blackPaint; group.Children.Add(circle); //sample depth label SvgText depthText = new SvgText(string.Format("{0:0.##} м", sample.Depth)); depthText.Transforms.Add(new Svg.Transforms.SvgTranslate(textXoffset, (float)(sample.Level + 2.0 * circleRadius + textFontSize * 0.5))); depthText.Fill = blackPaint; depthText.FontSize = Helpers.dtos(textFontSize); group.Children.Add(depthText); //sample comment SvgText commentText = new SvgText(sample.Comment); commentText.Transforms.Add(new Svg.Transforms.SvgTranslate(textXoffset, (float)(sample.Level + 2.0 * circleRadius + textFontSize * 1.5))); commentText.Fill = blackPaint; commentText.FontSize = Helpers.dtos(textFontSize); group.Children.Add(commentText); } result.SVG = group; return(result); }
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 CreateSvgOsd() { int _width = yascControl1.CamWidth, _height = yascControl1.CamHeight; Pen _whitePen = Pens.White; svgDoc = new SvgDocument() { Width = yascControl1.CamWidth, Height = yascControl1.CamHeight, ViewBox = new SvgViewBox(0, 0, yascControl1.CamWidth, yascControl1.CamHeight) }; var group = new SvgGroup(); svgDoc.Children.Add(group); var headbg = new RectangleF(0, 0, _width, _height * .07f); // Bottom line var line = new SvgLine() { StartX = headbg.Left + 5, StartY = headbg.Bottom - headbg.Height / 5, EndX = (SvgUnit)(headbg.Width - 5), EndY = (SvgUnit)(headbg.Bottom - headbg.Height * .2), }; using (var st = new MemoryStream()) { svgDoc.Write(st); svgData = Encoding.UTF8.GetString(st.GetBuffer()); } }
public static void AddTransforms(SvgGroup group, Flip flip) { if (group.Bounds != default) { System.Drawing.RectangleF bounds = group.Bounds; switch (flip) { case Flip.PN: //(1,-1,1) Vertical group.Transforms = new SvgTransformCollection(); group.Transforms.Add(new SvgTranslate(0, 2 * bounds.Y + bounds.Height)); group.Transforms.Add(new SvgScale(1, -1)); break; case Flip.NN: //(-1,-1,1) V and H, same as rotate 180° group.Transforms = new SvgTransformCollection(); group.Transforms.Add(new SvgTranslate(2 * bounds.X + bounds.Width, 2 * bounds.Y + bounds.Height)); group.Transforms.Add(new SvgScale(-1, -1)); break; case Flip.NP: //(-1,1,1) Horizontal group.Transforms = new SvgTransformCollection(); group.Transforms.Add(new SvgTranslate(2 * bounds.X + bounds.Width)); group.Transforms.Add(new SvgScale(-1, 1)); break; case Flip.None: case Flip.PP: default: break; } } }
public override RenderedSvg RenderColumn() { RenderedSvg result = base.RenderColumn(); SvgGroup group = new SvgGroup(); SvgColourServer blackPaint = new SvgColourServer(System.Drawing.Color.Black); double width = view.RenderSize.Width; //drawing layer boundaries LayerVM[] layers = columnVm.Layers.ToArray(); double boundary = 0.0; for (int i = 0; i < layers.Length; i++) { LayerVM lVM = layers[i]; if (i < layers.Length - 1) { boundary += lVM.Length; SvgLine line = new SvgLine(); line.Stroke = blackPaint; line.StartX = Helpers.dtos(0.0); line.EndX = Helpers.dtos(width); line.StartY = Helpers.dtos(boundary); line.EndY = Helpers.dtos(boundary); group.Children.Add(line); } var layerSvg = layerPainter.Paint(layers[i], width, lVM.Length); layerSvg.Transforms.Add(new Svg.Transforms.SvgTranslate(0.0f, (float)(boundary - lVM.Length))); group.Children.Add(layerSvg); } result.SVG = group; return(result); }
private static SvgGroup GetTopGroup(float left, float top) { SvgGroup group = Group(left, top); group.Children.Add(Line(0, TopRow, ChartWidth, TopRow)); group.Children.Add(Line(0, 0, 0, TopRow)); for (int i = 0; i < DaysPerWeek * Weeks * SegmentsPerDay + 1; i++) { int length = i % SegmentsPerDay == 0 ? TopRow : TopRow / 6; int x = i * SegmentWidth; group.Children.Add(Line(x, TopRow, x, TopRow - length)); bool morning = i % SegmentsPerDay - 1 == 0; bool evening = i % SegmentsPerDay - 3 == 0; float textY = TopRow * 3 / 5f; float textX = x + 4f; if (morning) { group.Children.Add(Text(textX, textY, -90, "6am")); } if (evening) { group.Children.Add(Text(textX, textY, -90, "6pm")); } } return(group); }
protected override SvgElement GetContainer() { var container = new SvgGroup(); container.Transforms.Add(new SvgTranslate(Left, Top)); container.CustomAttributes.Add("visibility", "hidden"); if (String.IsNullOrEmpty(CssClass)) { container.CustomAttributes.Add("class", "popup " + _popupId); } else { container.CustomAttributes.Add("class", CssClass + " popup " + _popupId); } var rectangle = new SvgRectangle { Height = Height, Width = Width, CornerRadiusX = CornerRadius, CornerRadiusY = CornerRadius }; container.Children.Add(rectangle); return(container); }
private static SvgGroup GetColumnGroup(float left, float top) { SvgGroup group = Group(left, top); for (int i = 0; i < SegmentsPerDay + 1; i++) { int x = i * SegmentWidth; group.Children.Add(Line(x, 0, x, ChartHeight)); } for (int i = 0; i <= MaxPef; i += PefIncrement) { int pos = MaxPef - i; if (i % 50 == 0 && i != 0) { group.Children.Add(Rect(0, pos - PefIncrement, SideColumnWidth, PefIncrement * 2)); group.Children.Add(Text(SideColumnWidth / 2f, pos + 6, i.ToString())); } else { group.Children.Add(Line(0, pos, SideColumnWidth, pos)); } } group.Children.Add(Text(SideColumnWidth / 2f, ChartHeight + DayRow / 2f, "Day")); group.Children.Add(Line(0, ChartHeight + DayRow, SideColumnWidth, ChartHeight + DayRow)); group.Children.Add(Text(SideColumnWidth / 2f, ChartHeight + DayRow + DateRow / 2f, "Date")); return(group); }
public static void AddMarkers(this SvgGroup svgGroup) { Uri?marker = null; // TODO: The marker can not be set as presentation attribute. //if (svgGroup.TryGetAttribute("marker", out string markerUrl)) //{ // marker = new Uri(markerUrl, UriKind.RelativeOrAbsolute); //} var groupMarkerStart = svgGroup.MarkerStart; var groupMarkerMid = svgGroup.MarkerMid; var groupMarkerEnd = svgGroup.MarkerEnd; if (groupMarkerStart == null && groupMarkerMid == null && groupMarkerEnd == null && marker == null) { return; } foreach (var svgElement in svgGroup.Children) { if (svgElement is SvgMarkerElement svgMarkerElement) { if (svgMarkerElement.MarkerStart == null) { if (groupMarkerStart != null) { svgMarkerElement.MarkerStart = groupMarkerStart; } else if (marker != null) { svgMarkerElement.MarkerStart = marker; } } if (svgMarkerElement.MarkerMid == null) { if (groupMarkerMid != null) { svgMarkerElement.MarkerMid = groupMarkerMid; } else if (marker != null) { svgMarkerElement.MarkerMid = marker; } } if (svgMarkerElement.MarkerEnd == null) { if (groupMarkerEnd != null) { svgMarkerElement.MarkerEnd = groupMarkerEnd; } else if (marker != null) { svgMarkerElement.MarkerEnd = marker; } } } } }
private static void Sample01() { var svgDoc = new SvgDocument { Width = 500, Height = 500 }; svgDoc.ViewBox = new SvgViewBox(-250, -250, 500, 500); var group = new SvgGroup(); svgDoc.Children.Add(group); group.Children.Add(new SvgCircle { Radius = 100, Fill = new SvgColourServer(Color.FromArgb(43, 138, 190)), Stroke = new SvgColourServer(Color.FromArgb(32, 101, 139)), StrokeWidth = 2 }); group.Children.Add(new SvgLine() { StartX = 0, StartY = -120, EndX = 0, EndY = 120, Stroke = new SvgColourServer(Color.LightGray), StrokeWidth = 3 }); group.Children.Add(new SvgRectangle() { X = -200, Y = -160, Width = 80, Height = 60, Fill = new SvgColourServer(Color.FromArgb(0, 170, 180)) }); var group2 = new SvgGroup(); group.Children.Add(group2); for (int x = -100; x < 0; x += 5) { group2.Children.Add(new SvgRectangle() { X = x, Y = -210, Width = 3, Height = 5, Fill = new SvgColourServer(Color.DarkGray) }); } svgDoc.Write("sample.svg"); }
private static SvgGroup GetBorderGroup(float left, float top) { SvgGroup group = Group(left, top); group.Children.Add(GetTopGroup(SideColumnWidth, 0)); group.Children.Add(GetColumnGroup(0, TopRow)); group.Children.Add(GetColumnGroup(ChartWidth + SideColumnWidth, TopRow)); return(group); }
/// <summary> /// Create or update SVG ball location. /// </summary> private void UpdateSvg() { if (svgDoc == null) { svgDoc = new SvgDocument() { Width = yascControl1.CamWidth, Height = yascControl1.CamHeight, ViewBox = new SvgViewBox(0, 0, yascControl1.CamWidth, yascControl1.CamHeight) }; var group = new SvgGroup(); svgDoc.Children.Add(group); group.Children.Add(new SvgCircle() { Radius = 10, Fill = new SvgColourServer(Color.Red), Stroke = new SvgColourServer(Color.Black), StrokeWidth = 1, CenterX = this.ballX, CenterY = this.ballY, ID = "bouncyball" }); var txtContent = new SvgContentNode() { Content = "TEST SVG" }; group.Children.Add(new SvgText("SVG TEXT") { Stroke = new SvgColourServer(Color.Black), Fill = new SvgColourServer(Color.White), FontSize = 50, FontFamily = "Segoe UI, Sans", ID = "svgtext", StrokeWidth = 1, X = { 200 }, Y = { 100 } }); } var ball = svgDoc.GetElementById <SvgCircle>("bouncyball"); ball.CenterX = this.ballX; ball.CenterY = this.ballY; //pbxTest.Image = svgDoc.Draw(); using (var st = new MemoryStream()) { svgDoc.Write(st); svgData = Encoding.UTF8.GetString(st.GetBuffer()); } }
private SvgDefinitionList GetDefinitions() { var defs = new SvgDefinitionList(); var group = new SvgGroup(); group.ID = "element"; defs.Children.Add(group); AddElementDefinition(group); return(defs); }
static void Main() { var svg = new Svg(1000, 800); SvgGroup grid = Templates.Grid(0, 0, svg.Width, svg.Height, 10, 8); grid.SetFill(Color.Aqua); grid.SetStroke(Color.Black); svg.AddElement(grid); svg.SaveAs("grid.svg"); }
void CreateLine(SvgGroup g, float x1, float y1, float x2, float y2) { SvgLine stub = this.doc.AddLine(g); stub.Class = "connector"; stub.X1 = this.ToPx(x1); stub.X2 = this.ToPx(x2); stub.Y1 = this.ToPx(y1); stub.Y2 = this.ToPx(y2); }
/// <summary> /// adds dynamic circle physics objects for each circle in the SVG /// </summary> /// <param name="group">Group.</param> void addCircles(SvgGroup group) { foreach (var circle in group.circles) { createEntity(circle.id) .setPosition(circle.centerX, circle.centerY) .addComponent(new FSRigidBody()) .setBodyType(BodyType.Dynamic) .addComponent(new FSCollisionCircle(circle.radius)); } }
/// <summary> /// adds dynamic polygon physics objects for each polygon in the SVG /// </summary> /// <param name="group">Group.</param> void addPolygons(SvgGroup group) { foreach (var polygon in group.polygons) { createEntity(polygon.id) .setPosition(polygon.centerX, polygon.centerY) .addComponent <FSRigidBody>() .setBodyType(BodyType.Dynamic) .addComponent(new FSCollisionPolygon(polygon.getRelativePoints())); } }
/// <summary> /// adds dynamic ellipse physics objects for each ellipse in the SVG /// </summary> /// <param name="group">Group.</param> void addEllipses(SvgGroup group) { foreach (var ellipse in group.ellipses) { createEntity(ellipse.id) .setPosition(ellipse.centerX, ellipse.centerY) .addComponent <FSRigidBody>() .setBodyType(BodyType.Dynamic) .addComponent(new FSCollisionEllipse(ellipse.radiusX, ellipse.radiusY)); } }
//called when data for any output pin is requested public void Evaluate(int SpreadMax) { //check transforms if (FTransformIn.IsChanged) { //assign size and clear group list FOutput.SliceCount = FTransformIn.SliceCount; FGroups.Clear(); //create groups and add matrix to it for (int i = 0; i < FTransformIn.SliceCount; i++) { var g = new SvgGroup(); g.Transforms = new SvgTransformCollection(); var m = FTransformIn[i]; var mat = new SvgMatrix(new List <float>() { m.M11, m.M12, m.M21, m.M22, m.M41, m.M42 }); g.Transforms.Add(mat); FGroups.Add(g); } } //add all elements to each group if (FInput.IsChanged || FTransformIn.IsChanged || FEnabledIn.IsChanged) { foreach (var g in FGroups) { g.Children.Clear(); if (FEnabledIn[0]) { for (int i = 0; i < FInput.SliceCount; i++) { var pin = FInput[i]; for (int j = 0; j < pin.SliceCount; j++) { var elem = pin[j]; if (elem != null) { g.Children.Add(elem); } } } } } //write groups to output FOutput.AssignFrom(FGroups); } }
DrawObject CreateGroup(SvgGroup svg) { DrawObject o = null; SvgElement child = svg.getChild(); if (child != null) { AddFromSvg(child); } return(o); }
private SvgGroup BuildTileGroup(OutputTile tile, Func <float, float> yCoordinateConverter) { var tileGroup = new SvgGroup(); var mediaBoxRect = new SvgRectangle { Width = tile.MediaBox.Width, Height = tile.MediaBox.Height, X = tile.MediaBox.Left, Y = yCoordinateConverter(tile.MediaBox.Top), Stroke = new SvgColourServer(Color.Magenta), Fill = new SvgColourServer(Color.White), StrokeWidth = 1.0f }; var cutBoxRect = new SvgRectangle { Width = tile.CutBox.Width, Height = tile.CutBox.Height, X = tile.CutBox.Left, Y = yCoordinateConverter(tile.CutBox.Top), Stroke = new SvgColourServer(Color.Black), Fill = new SvgColourServer(Color.White), StrokeWidth = 1.0f }; var pageNUmberFontSize = tile.CutBox.Height / 4.0f; var pageNumberText = new SvgText(tile.SourcePage.Number.ToString()) { X = { tile.CutBox.GetCenter().X - 70.0f }, Y = { yCoordinateConverter(tile.CutBox.GetCenter().Y - pageNUmberFontSize / 2.0f) }, FontSize = pageNUmberFontSize, FontFamily = "Courier New", Transforms = { new SvgRotate(tile.MediaRotationAngle, tile.CutBox.GetCenter().X, yCoordinateConverter(tile.CutBox.GetCenter().Y)) } }; var sourceFileText = new SvgText(Path.GetFileNameWithoutExtension(tile.SourceFilePath)) { X = { tile.CutBox.Left + 50.0f }, Y = { yCoordinateConverter(tile.CutBox.Bottom + 20) }, FontSize = 24, FontFamily = "Courier New" }; tileGroup.Children.Add(mediaBoxRect); tileGroup.Children.Add(cutBoxRect); tileGroup.Children.Add(pageNumberText); tileGroup.Children.Add(sourceFileText); return(tileGroup); }
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(); }