public virtual void OnRequestSave3DImage(object sender, ImageSaveEventArgs e) { if (RequestSave3DImage != null) { RequestSave3DImage(this, e); } }
public virtual void OnRequestSaveImage(Object sender, ImageSaveEventArgs e) { if (RequestSaveImage != null) { RequestSaveImage(this, e); } }
void DynamoViewModelRequestSaveImage(object sender, ImageSaveEventArgs e) { if (string.IsNullOrEmpty(e.Path)) return; var workspace = dynamoViewModel.Model.CurrentWorkspace; if (workspace == null) return; if (!workspace.Nodes.Any() && (!workspace.Notes.Any())) return; // An empty graph. var initialized = false; var bounds = new Rect(); var dragCanvas = WpfUtilities.ChildOfType<DragCanvas>(this); var childrenCount = VisualTreeHelper.GetChildrenCount(dragCanvas); for (int index = 0; index < childrenCount; ++index) { var child = VisualTreeHelper.GetChild(dragCanvas, index); var firstChild = VisualTreeHelper.GetChild(child, 0); if ((!(firstChild is NodeView)) && (!(firstChild is NoteView))) continue; var childBounds = VisualTreeHelper.GetDescendantBounds(child as Visual); childBounds.X = (double)(child as Visual).GetValue(Canvas.LeftProperty); childBounds.Y = (double)(child as Visual).GetValue(Canvas.TopProperty); if (initialized) bounds.Union(childBounds); else { initialized = true; bounds = childBounds; } } // Add padding to the edge and make them multiples of two. bounds.Width = (((int)Math.Ceiling(bounds.Width)) + 1) & ~0x01; bounds.Height = (((int)Math.Ceiling(bounds.Height)) + 1) & ~0x01; var drawingVisual = new DrawingVisual(); using (var drawingContext = drawingVisual.RenderOpen()) { var targetRect = new Rect(0, 0, bounds.Width, bounds.Height); var visualBrush = new VisualBrush(dragCanvas); drawingContext.DrawRectangle(visualBrush, null, targetRect); // drawingContext.DrawRectangle(null, new Pen(Brushes.Blue, 1.0), childBounds); } // var m = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice; // region.Scale(m.M11, m.M22); var rtb = new RenderTargetBitmap(((int)bounds.Width), ((int)bounds.Height), 96, 96, PixelFormats.Default); rtb.Render(drawingVisual); //endcode as PNG var pngEncoder = new PngBitmapEncoder(); pngEncoder.Frames.Add(BitmapFrame.Create(rtb)); try { using (var stm = File.Create(e.Path)) { pngEncoder.Save(stm); } } catch { dynamoViewModel.Model.Logger.Log(Wpf.Properties.Resources.MessageFailedToSaveAsImage); } }
//void PackageManagerClient_RequestSetLoginState(object sender, LoginStateEventArgs e) //{ // PackageManagerLoginState.Text = e.Text; // PackageManagerLoginButton.IsEnabled = e.Enabled; //} void _vm_RequestSaveImage(object sender, ImageSaveEventArgs e) { if (!string.IsNullOrEmpty(e.Path)) { //var bench = dynSettings.Bench; //if (bench == null) //{ // DynamoLogger.Instance.Log("Cannot export bench as image without UI. No image wil be exported."); // return; //} var control = WPF.FindChild<DragCanvas>(this, null); double width = 1; double height = 1; // connectors are most often within the bounding box of the nodes and notes foreach (NodeModel n in dynSettings.Controller.DynamoModel.CurrentWorkspace.Nodes) { width = Math.Max(n.X + n.Width, width); height = Math.Max(n.Y + n.Height, height); } foreach (NoteModel n in dynSettings.Controller.DynamoModel.CurrentWorkspace.Notes) { width = Math.Max(n.X + n.Width, width); height = Math.Max(n.Y + n.Height, height); } var rtb = new RenderTargetBitmap(Math.Max(1, (int)width), Math.Max(1, (int)height), 96, 96, System.Windows.Media.PixelFormats.Default); rtb.Render(control); //endcode as PNG var pngEncoder = new PngBitmapEncoder(); pngEncoder.Frames.Add(BitmapFrame.Create(rtb)); try { using (var stm = File.Create(e.Path)) { pngEncoder.Save(stm); } } catch { DynamoLogger.Instance.Log("Failed to save the Workspace an image."); } } }
private void DynamoViewModelRequestSave3DImage(object sender, ImageSaveEventArgs e) { var canvas = (DPFCanvas)BackgroundPreview.View.RenderHost; var encoder = new PngBitmapEncoder(); var rtBitmap = new RenderTargetBitmap((int)canvas.ActualWidth, (int)canvas.ActualHeight, 96, 96, PixelFormats.Pbgra32); rtBitmap.Render(canvas); encoder.Frames.Add(BitmapFrame.Create(rtBitmap)); if (File.Exists(e.Path)) { File.Delete(e.Path); } using (var stream = File.Create(e.Path)) { encoder.Save(stream); } }
private void DynamoViewModelRequestSaveImage(object sender, ImageSaveEventArgs e) { var workspace = this.ChildOfType<WorkspaceView>(); workspace.SaveWorkspaceAsImage(e.Path); }
void DynamoViewModelRequestSaveImage(object sender, ImageSaveEventArgs e) { if (!string.IsNullOrEmpty(e.Path)) { var control = WpfUtilities.ChildOfType<ZoomBorder>(this, "zoomBorder"); double width = 1; double height = 1; // connectors are most often within the bounding box of the nodes and notes foreach (NodeModel n in dynamoViewModel.Model.CurrentWorkspace.Nodes) { width = Math.Max(n.X + n.Width, width); height = Math.Max(n.Y + n.Height, height); } foreach (NoteModel n in dynamoViewModel.Model.CurrentWorkspace.Notes) { width = Math.Max(n.X + n.Width, width); height = Math.Max(n.Y + n.Height, height); } var rtb = new RenderTargetBitmap(Math.Max((int)control.ActualWidth, (int)width), Math.Max((int)control.ActualHeight, (int)height), 96, 96, PixelFormats.Default); rtb.Render(control); //endcode as PNG var pngEncoder = new PngBitmapEncoder(); pngEncoder.Frames.Add(BitmapFrame.Create(rtb)); try { using (var stm = File.Create(e.Path)) { pngEncoder.Save(stm); } } catch { dynamoViewModel.Model.Logger.Log(Wpf.Properties.Resources.MessageFailedToSaveAsImage); } } }