public string ConvertToSvgDocument(IToolContext context, IContainerView containerView) { using (var stream = new MemoryStream()) { using (var wstream = new SKManagedWStream(stream)) using (var writer = new SKXmlStreamWriter(wstream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)containerView.Width, (int)containerView.Height), writer)) { if (containerView.SelectionState?.Shapes?.Count > 0) { using (var skiaSelectedPresenter = new SkiaExportSelectedPresenter(context, containerView)) { skiaSelectedPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0); } } else { using (var skiaContainerPresenter = new SkiaExportContainerPresenter(context, containerView)) { skiaContainerPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0); } } } stream.Position = 0; using (var reader = new StreamReader(stream, Encoding.UTF8)) { var xml = reader.ReadToEnd(); return(FormatXml(xml)); } } }
/// <inheritdoc/> public void Save(Stream stream, IPageContainer container) { using var wstream = new SKManagedWStream(stream); using var writer = new SKXmlStreamWriter(wstream); using var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)container.Width, (int)container.Height), writer); _presenter.Render(canvas, _renderer, container, 0, 0); }
void Save(string path, XContainer container) { using (var stream = new SKFileWStream(path)) using (var writer = new SKXmlStreamWriter(stream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)container.Width, (int)container.Height), writer)) { _presenter.Render(canvas, _renderer, container, 0, 0); } }
internal static void ExportSvg(IToolContext context, string path, IContainerView containerView) { using (var stream = new SKFileWStream(path)) using (var writer = new SKXmlStreamWriter(stream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)containerView.Width, (int)containerView.Height), writer)) using (var skiaContainerPresenter = new SkiaExportContainerPresenter(context, containerView)) { skiaContainerPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0); } }
private void SaveButton_OnClicked(object sender, RoutedEventArgs e) { var width = Canvas.CanvasSize.Width; var bounds = SKRect.Create(0, 0, width, width); using (var stream = new SKFileWStream(@"C:\Temp\grid.svg")) using (var writer = new SKXmlStreamWriter(stream)) using (var canvas = SKSvgCanvas.Create(bounds, writer)) { _hexPainter.DrawGrid(_gol.Grid, canvas, _cellRadius); } }
public void SvgCanvasCreatesValidDrawing() { using (var stream = new MemoryStream()) { // draw the SVG using (var skStream = new SKManagedWStream(stream, false)) using (var writer = new SKXmlStreamWriter(skStream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(200, 150), writer)) { var rectPaint = new SKPaint { Color = SKColors.Blue, Style = SKPaintStyle.Fill }; canvas.DrawRect(SKRect.Create(50, 70, 100, 30), rectPaint); var circlePaint = new SKPaint { Color = SKColors.Red, Style = SKPaintStyle.Fill }; canvas.DrawOval(SKRect.Create(50, 70, 100, 30), circlePaint); skStream.Flush(); } // reset the sream stream.Position = 0; // read the SVG var xdoc = XDocument.Load(stream); var svg = xdoc.Root; var ns = (XNamespace)"http://www.w3.org/2000/svg"; Assert.Equal(ns, svg.GetDefaultNamespace()); Assert.Equal("200", svg.Attribute("width").Value); Assert.Equal("150", svg.Attribute("height").Value); var rect = svg.Element(ns + "rect"); Assert.Equal("rgb(0,0,255)", rect.Attribute("fill").Value); Assert.Equal("50", rect.Attribute("x").Value); Assert.Equal("70", rect.Attribute("y").Value); Assert.Equal("100", rect.Attribute("width").Value); Assert.Equal("30", rect.Attribute("height").Value); var ellipse = svg.Element(ns + "ellipse"); Assert.Equal("rgb(255,0,0)", ellipse.Attribute("fill").Value); Assert.Equal("100", ellipse.Attribute("cx").Value); Assert.Equal("85", ellipse.Attribute("cy").Value); Assert.Equal("50", ellipse.Attribute("rx").Value); Assert.Equal("15", ellipse.Attribute("ry").Value); } }
public void Draw(ParameterModel p) { using (var stream = new SKFileWStream(p.OutputFile)) using (var writer = new SKXmlStreamWriter(stream)) { var badge = this._BadgeFactory.GetBadge(p); var width = this._BadgeService.GetWidth(badge); var bounds = new SKRect(0, 0, width, p.Height); using (var canvas = SKSvgCanvas.Create(bounds, writer)) { this._BadgeService.DrawBadge(canvas, badge); } } }
public static bool ToSvg(this SKPicture skPicture, string path, SKColor background, float scaleX, float scaleY) { float width = skPicture.CullRect.Width * scaleX; float height = skPicture.CullRect.Height * scaleY; if (width <= 0 || height <= 0) { return(false); } using var skFileWStream = new SKFileWStream(path); using var writer = new SKXmlStreamWriter(skFileWStream); using var skCanvas = SKSvgCanvas.Create(SKRect.Create(0, 0, width, height), writer); Draw(skPicture, background, scaleX, scaleY, skCanvas); return(true); }
/// <inheritdoc/> public void Export(IPlotModel model, Stream stream) { using var skStream = new SKManagedWStream(stream); using var writer = new SKXmlStreamWriter(skStream); using var canvas = SKSvgCanvas.Create(new SKRect(0, 0, this.Width, this.Height), writer); if (!model.Background.IsInvisible()) { canvas.Clear(model.Background.ToSKColor()); } // SVG export does not work with UseTextShaping=true. However SVG does text shaping by itself anyway, so we can just disable it using var context = new SkiaRenderContext { RenderTarget = RenderTarget.VectorGraphic, SkCanvas = canvas, UseTextShaping = false }; model.Update(true); model.Render(context, new OxyRect(0, 0, this.Width, this.Height)); }
public static byte[] RenderSvg(int size, VoxelData voxelData) { var ms = new MemoryStream(); using (var skStream = new SKManagedWStream(ms)) { using (var writer = new SKXmlStreamWriter(skStream)) { using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, size, size), writer)) { RenderQuads(voxelData, size, canvas, new MeshSettings { FrontFaces = true, FakeLighting = true, MeshType = MeshType.Quads, }); } } } return(ms.ToArray()); }
private void UpdateSvg() { bool exportPresenter = _previewWindow.svgExport.IsChecked == true; bool showPrintable = _previewWindow.svgPrintable.IsChecked == true; Task.Factory.StartNew(() => { try { IImageCache ic = _projectEditor.Project; var container = _projectEditor.Project.CurrentContainer; var renderer = new SkiaSharpRenderer(true, 96.0); if (!showPrintable) { renderer.State.DrawShapeState.Flags = ShapeStateFlags.Printable; } renderer.State.ImageCache = _projectEditor.Project; var presenter = exportPresenter ? (ContainerPresenter) new ExportPresenter() : (ContainerPresenter) new EditorPresenter(); using (var ms = new MemoryStream()) { using (var stream = new SKManagedWStream(ms)) { using (var writer = new SKXmlStreamWriter(stream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)container.Width, (int)container.Height), writer)) { presenter.Render(canvas, renderer, container, 0, 0); } stream.Flush(); } var svg = Encoding.ASCII.GetString(ms.GetBuffer(), 0, (int)ms.Length); Dispatcher.Invoke(() => { _previewWindow.svgText.Text = svg; }); } } catch (Exception) { } }); }
public void SvgCanvasSavesFile() { var stream = new MemoryStream(); using (var wstream = new SKManagedWStream(stream)) using (var writer = new SKXmlStreamWriter(wstream)) using (var svg = SKSvgCanvas.Create(SKRect.Create(100, 100), writer)) { var paint = new SKPaint { Color = SKColors.Red, Style = SKPaintStyle.Fill }; svg.DrawRect(SKRect.Create(10, 10, 80, 80), paint); } stream.Position = 0; using (var reader = new StreamReader(stream)) { var xml = reader.ReadToEnd(); var xdoc = XDocument.Parse(xml); var svg = xdoc.Root; var ns = svg.Name.Namespace; Assert.Equal(ns + "svg", svg.Name); Assert.Equal("100", svg.Attribute("width")?.Value); Assert.Equal("100", svg.Attribute("height")?.Value); var rect = svg.Element(ns + "rect"); Assert.Equal(ns + "rect", rect.Name); Assert.Equal("rgb(255,0,0)", rect.Attribute("fill")?.Value); Assert.Equal("none", rect.Attribute("stroke")?.Value); Assert.Equal("10", rect.Attribute("x")?.Value); Assert.Equal("10", rect.Attribute("y")?.Value); Assert.Equal("80", rect.Attribute("width")?.Value); Assert.Equal("80", rect.Attribute("height")?.Value); } }
private void UpdateSvg() { bool exportPresenter = _previewWindow.svgExport.IsChecked == true; bool showPrintable = _previewWindow.svgPrintable.IsChecked == true; Task.Factory.StartNew(() => { try { IImageCache ic = _projectEditor.Project; var container = _projectEditor.Project.CurrentContainer; var renderer = new SkiaRenderer(true, 96.0); if (!showPrintable) { renderer.State.DrawShapeState.Flags = ShapeStateFlags.Printable; } renderer.State.ImageCache = _projectEditor.Project; var presenter = exportPresenter ? (ContainerPresenter)new ExportPresenter() : (ContainerPresenter)new EditorPresenter(); using (var ms = new MemoryStream()) { using (var stream = new SKManagedWStream(ms)) { using (var writer = new SKXmlStreamWriter(stream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)container.Width, (int)container.Height), writer)) { presenter.Render(canvas, renderer, container, 0, 0); } stream.Flush(); } var svg = Encoding.ASCII.GetString(ms.GetBuffer(), 0, (int)ms.Length); Dispatcher.Invoke(() => { _previewWindow.svgText.Text = svg; }); } } catch (Exception) { } }); }