internal static void ExportPdf(IToolContext context, string path, IContainerView containerView) { using (var stream = new SKFileWStream(path)) using (var pdf = SKDocument.CreatePdf(stream, SKDocument.DefaultRasterDpi)) using (var canvas = pdf.BeginPage((float)containerView.Width, (float)containerView.Height)) using (var skiaContainerPresenter = new SkiaExportContainerPresenter(context, containerView)) { skiaContainerPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0); pdf.Close(); } }
public void ConvertToGeometryDrawing(IToolContext context, IContainerView containerView, StringBuilder sb, string indent) { if (containerView.SelectionState?.Shapes != null && containerView.SelectionState?.Shapes.Count > 0) { var shapes = new List <IBaseShape>(containerView.SelectionState?.Shapes); foreach (var shape in shapes) { if (shape is IPointShape || shape is FigureShape) { continue; } var style = context.DocumentContainer?.StyleLibrary?.Get(shape.StyleId); if (style == null) { continue; } var geometry = context.PathConverter?.ToSvgPathData(context, new[] { shape })?.TrimEnd(NewLine); if (geometry == null) { continue; } var stroke = style.StrokePaint; var fill = style.FillPaint; if (style.IsStroked && style.IsFilled) { sb.AppendLine($"{indent}<GeometryDrawing Brush=\"{fill.Color.ToHex()}\" Geometry=\"{geometry}\">"); sb.AppendLine($"{indent} <GeometryDrawing.Pen>"); sb.AppendLine($"{indent} <Pen Brush=\"{stroke.Color.ToHex()}\" Thickness=\"{stroke.StrokeWidth}\" LineCap=\"{stroke.StrokeCap}\" LineJoin=\"{stroke.StrokeJoin}\" MiterLimit=\"{stroke.StrokeMiter}\"/>"); sb.AppendLine($"{indent} </GeometryDrawing.Pen>"); sb.AppendLine($"{indent}</GeometryDrawing>"); } else if (style.IsStroked && !style.IsFilled) { sb.AppendLine($"{indent}<GeometryDrawing Geometry=\"{geometry}\">"); sb.AppendLine($"{indent} <GeometryDrawing.Pen>"); sb.AppendLine($"{indent} <Pen Brush=\"{stroke.Color.ToHex()}\" Thickness=\"{stroke.StrokeWidth}\" LineCap=\"{stroke.StrokeCap}\" LineJoin=\"{stroke.StrokeJoin}\" MiterLimit=\"{stroke.StrokeMiter}\"/>"); sb.AppendLine($"{indent} </GeometryDrawing.Pen>"); sb.AppendLine($"{indent}</GeometryDrawing>"); } else if (!style.IsStroked && style.IsFilled) { sb.AppendLine($"{indent}<GeometryDrawing Brush=\"{fill.Color.ToHex()}\" Geometry=\"{geometry}\" />"); } } } }
protected override void OnChildAdded(Agent child) { base.OnChildAdded(child); if (!(child is Item)) { return; } foreach (IAgentView agentView in this.GetAgentViews()) { IContainerView containerView = agentView as IContainerView; if (containerView != null) { containerView.OnChildAdded((Item)child); } } }
internal static void ExportImage(IToolContext context, string path, IContainerView containerView, SKEncodedImageFormat format, int quality) { var info = new SKImageInfo((int)containerView.Width, (int)containerView.Height, SKImageInfo.PlatformColorType, SKAlphaType.Unpremul); using var bitmap = new SKBitmap(info); using (var canvas = new SKCanvas(bitmap)) using (var skiaContainerPresenter = new SkiaExportContainerPresenter(context, containerView)) { skiaContainerPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0); } using var image = SKImage.FromBitmap(bitmap); using var data = image.Encode(format, quality); if (data != null) { using var stream = File.OpenWrite(path); data.SaveTo(stream); } }
private void DrawPoints(IContainerView view, SKCanvas canvas, IShapeRenderer renderer, double scale) { var selected = new List <IBaseShape>(view.SelectionState.Shapes); foreach (var shape in selected) { if (shape is IPointShape point) { double s = 1.0 / scale; canvas.Save(); double dx = 0.0 - (point.X * s) + point.X; double dy = 0.0 - (point.Y * s) + point.Y; canvas.Translate((float)dx, (float)dy); canvas.Scale((float)s); point.Draw(canvas, renderer, 0.0, 0.0, scale, null, null); canvas.Restore(); } } }
protected void RaiseUpdateEvents() { foreach (IAgentView agentView in this.GetAgentViews()) { agentView.OnAgentUpdated(); } PhysicalAgent physicalAgent = this.Parent as PhysicalAgent; if (physicalAgent == null || !(this is Item)) { return; } foreach (IAgentView agentView in physicalAgent.GetAgentViews()) { IContainerView containerView = agentView as IContainerView; if (containerView != null) { containerView.OnChildUpdated((Item)this); } } }
public void ConvertToPath(IToolContext context, IContainerView containerView, StringBuilder sb, string indent) { if (containerView.SelectionState?.Shapes != null && containerView.SelectionState?.Shapes.Count > 0) { var shapes = new List <IBaseShape>(containerView.SelectionState?.Shapes); foreach (var shape in shapes) { if (shape is IPointShape) { continue; } var style = context.StyleLibrary?.Get(shape.StyleId); if (style == null) { continue; } var geometry = context.PathConverter?.ToSvgPathData(context, new[] { shape })?.TrimEnd(NewLine); if (geometry == null) { continue; } if (style.IsStroked && style.IsFilled) { sb.AppendLine($"{indent}<Path Fill=\"{style.Fill.ToHex()}\" Stroke=\"{style.Stroke.ToHex()}\" StrokeThickness=\"{style.StrokeWidth}\" StrokeLineCap=\"{style.StrokeCap}\" StrokeJoin=\"{style.StrokeJoin}\" Data=\"{geometry}\"/>"); } else if (style.IsStroked && !style.IsFilled) { sb.AppendLine($"{indent}<Path Stroke=\"{style.Stroke.ToHex()}\" StrokeThickness=\"{style.StrokeWidth}\" StrokeLineCap=\"{style.StrokeCap}\" StrokeJoin=\"{style.StrokeJoin}\" Data=\"{geometry}\"/>"); } else if (!style.IsStroked && style.IsFilled) { sb.AppendLine($"{indent}<Path Fill=\"{style.Fill.ToHex()}\" Data=\"{geometry}\"/>"); } } } }
public string ConvertToSvgDocument(IToolContext context, IContainerView containerView) { using var stream = new MemoryStream(); using (var wstream = new SKManagedWStream(stream)) using (var canvas = SKSvgCanvas.Create(SKRect.Create(0, 0, (int)containerView.Width, (int)containerView.Height), wstream)) { 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, 1.0); } else { using var skiaContainerPresenter = new SkiaExportContainerPresenter(context, containerView); skiaContainerPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0, 1.0); } } stream.Position = 0; using var reader = new StreamReader(stream, Encoding.UTF8); var xml = reader.ReadToEnd(); return(FormatXml(xml)); }
internal static void ExportSkp(IToolContext context, string path, IContainerView containerView) { var recorder = new SKPictureRecorder(); var rect = new SKRect(0f, 0f, (float)containerView.Width, (float)containerView.Height); var canvas = recorder.BeginRecording(rect); using (var skiaContainerPresenter = new SkiaExportContainerPresenter(context, containerView)) { skiaContainerPresenter.Draw(canvas, containerView.Width, containerView.Height, 0, 0, 1.0, 1.0); } var picture = recorder.EndRecording(); var dimensions = new SKSizeI((int)containerView.Width, (int)containerView.Height); using (var image = SKImage.FromPicture(picture, dimensions)) { var data = image.EncodedData; if (data != null) { using var stream = File.OpenWrite(path); data.SaveTo(stream); } } picture.Dispose(); }
protected override void Context() { _individualItem = IndividualItems.Settings; _view = A.Fake <IContainerView>(); }
public void ConvertToCanvas(IToolContext context, IContainerView containerView, StringBuilder sb, string indent) { sb.AppendLine($"{indent}<Canvas Width=\"{containerView.Width}\" Height=\"{containerView.Height}\">"); ConvertToPath(context, containerView, sb, indent + " "); sb.AppendLine($"{indent}</Canvas>"); }
private void DrawShapesWorking(IContainerView view, SKCanvas canvas, IShapeRenderer renderer, double scale) { view.WorkingContainer.Draw(canvas, renderer, 0.0, 0.0, scale, null, null); }
public SkiaExportSelectedPresenter(IToolContext context, IContainerView view) { _context = context; _view = view; }
public void ConvertToDrawingGroup(IToolContext context, IContainerView containerView, StringBuilder sb, string indent) { sb.AppendLine($"{indent}<DrawingGroup>"); ConvertToGeometryDrawing(context, containerView, sb, indent + " "); sb.AppendLine($"{indent}</DrawingGroup>"); }
public static void HideControl <TSubPresenterItem>(this IContainerView view, TSubPresenterItem itemToHide) where TSubPresenterItem : ISubPresenterItem { view.SetControlVisible(itemToHide, false); }
public static void DisableControl <TSubPresenterItem>(this IContainerView view, TSubPresenterItem itemToDisable) where TSubPresenterItem : ISubPresenterItem { view.SetControlEnabled(itemToDisable, false); }
public static void ShowControl <TSubPresenterItem>(this IContainerView view, TSubPresenterItem itemToShow) where TSubPresenterItem : ISubPresenterItem { view.SetControlVisible(itemToShow, true); }
public void SetContainerView(IContainerView containerView) { this._containerView = containerView; }
public void ConvertToDrawingPresenter(IToolContext context, IContainerView containerView, StringBuilder sb, string indent) { sb.AppendLine($"{indent}<DrawingPresenter Width=\"{containerView.Width}\" Height=\"{containerView.Height}\" Stretch=\"Uniform\">"); ConvertToDrawingGroup(context, containerView, sb, indent + " "); sb.AppendLine($"{indent}</DrawingPresenter>"); }
public void Export(IToolContext context, string path, IContainerView containerView) { try { var outputExtension = Path.GetExtension(path); if (string.Compare(outputExtension, ".svg", StringComparison.OrdinalIgnoreCase) == 0) { ExportSvg(context, path, containerView); } else if (string.Compare(outputExtension, ".pdf", StringComparison.OrdinalIgnoreCase) == 0) { ExportPdf(context, path, containerView); } else if (string.Compare(outputExtension, ".xps", StringComparison.OrdinalIgnoreCase) == 0) { ExportXps(context, path, containerView); } else if (string.Compare(outputExtension, ".skp", StringComparison.OrdinalIgnoreCase) == 0) { ExportSkp(context, path, containerView); } else if (string.Compare(outputExtension, ".bmp", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Bmp, 100); } else if (string.Compare(outputExtension, ".gif", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Gif, 100); } else if (string.Compare(outputExtension, ".ico", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Ico, 100); } else if (string.Compare(outputExtension, ".jpeg", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Jpeg, 100); } else if (string.Compare(outputExtension, ".jpg", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Jpeg, 100); } else if (string.Compare(outputExtension, ".png", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Png, 100); } else if (string.Compare(outputExtension, ".wbmp", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Wbmp, 100); } else if (string.Compare(outputExtension, ".webp", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Webp, 100); } else if (string.Compare(outputExtension, ".pkm", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Pkm, 100); } else if (string.Compare(outputExtension, ".ktx", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Ktx, 100); } else if (string.Compare(outputExtension, ".astc", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Astc, 100); } else if (string.Compare(outputExtension, ".dng", StringComparison.OrdinalIgnoreCase) == 0) { ExportImage(context, path, containerView, SKEncodedImageFormat.Dng, 100); } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); System.Diagnostics.Debug.WriteLine(ex.StackTrace); } }