Exemple #1
0
        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);
             }
 }
Exemple #4
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);
                 }
 }
Exemple #5
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);
                    }
        }
Exemple #6
0
        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);
            }
        }
Exemple #7
0
 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);
        }
Exemple #9
0
        /// <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));
        }
Exemple #10
0
        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());
        }
Exemple #11
0
        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) { }
            });
        }
Exemple #12
0
        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);
            }
        }
Exemple #13
0
        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) { }
            });
        }