public async Task <Stream> PlotToStream(ViewPortViewModelBase viewModel, Drawing drawing, ViewPort viewPort) { var stream = new MemoryStream(); IPlotterFactory plotterFactory = viewModel switch { PdfPlotterViewModel _ => _pdfPlotterFactory, SvgPlotterViewModel _ => _svgPlotterFactory, _ => throw new System.Exception($"Unexpected view model: {viewModel?.GetType().Name}"), }; var plotter = plotterFactory.CreatePlotter(viewModel); await plotter.Plot(drawing, viewPort, stream, _workspace.FileSystemService.GetContentResolverRelativeToPath(drawing.Settings.FileName)); stream.Seek(0, SeekOrigin.Begin); return(stream); }
public ViewPortViewModelBase CreateAndPopulateViewModel(ClientPlotSettings settings, DrawingSettings drawingSettings, string plotTypeOverride = null) { ViewPortViewModelBase viewModel = null; switch (plotTypeOverride ?? settings.PlotType) { case "pdf": var pdfViewModel = (PdfPlotterViewModel)_pdfPlotterFactory.CreatePlotterViewModel(); pdfViewModel.DisplayWidth = settings.Width; pdfViewModel.DisplayHeight = settings.Height; viewModel = pdfViewModel; break; case "svg": var svgViewModel = (SvgPlotterViewModel)_svgPlotterFactory.CreatePlotterViewModel(); svgViewModel.PlotAsDocument = true; svgViewModel.DisplayWidth = settings.Width; svgViewModel.DisplayHeight = settings.Height; svgViewModel.OutputWidth = settings.Width; svgViewModel.OutputHeight = settings.Height; viewModel = svgViewModel; break; } if (viewModel is object) { var transform = _workspace.ActiveViewPort.GetTransformationMatrixWindowsStyle(Agent.Width, Agent.Height).Inverse(); var topLeft = transform.Transform(settings.Viewport.TopLeft.ToPoint()); var bottomRight = transform.Transform(settings.Viewport.BottomRight.ToPoint()); viewModel.ViewPortType = settings.ViewPortType; viewModel.ScalingType = settings.ScalingType; var(scaleA, scaleB) = settings.GetUnitAdjustedScale(drawingSettings); viewModel.ScaleA = scaleA; viewModel.ScaleB = scaleB; viewModel.BottomLeft = new Point(topLeft.X, bottomRight.Y, 0.0); viewModel.TopRight = new Point(bottomRight.X, topLeft.Y, 0.0); } return(viewModel); }