diff --git a/MatterControlLib/PartPreviewWindow/View3D/SceneActions.cs b/MatterControlLib/PartPreviewWindow/View3D/SceneActions.cs index 8f7e6a91e..1e728d505 100644 --- a/MatterControlLib/PartPreviewWindow/View3D/SceneActions.cs +++ b/MatterControlLib/PartPreviewWindow/View3D/SceneActions.cs @@ -172,7 +172,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - public static async void AutoArrangeChildren(this InteractiveScene scene, View3DWidget view3DWidget) + public static async Task AutoArrangeChildren(this InteractiveScene scene, View3DWidget view3DWidget) { await Task.Run(() => { diff --git a/MatterControlLib/PartPreviewWindow/ViewControls3D.cs b/MatterControlLib/PartPreviewWindow/ViewControls3D.cs index 1656d53fc..6704acc45 100644 --- a/MatterControlLib/PartPreviewWindow/ViewControls3D.cs +++ b/MatterControlLib/PartPreviewWindow/ViewControls3D.cs @@ -45,6 +45,7 @@ using MatterHackers.MatterControl.Library; using MatterHackers.MatterControl.PrinterControls.PrinterConnections; using MatterHackers.MatterControl.PrintLibrary; using MatterHackers.MatterControl.SlicerConfiguration; +using MatterHackers.MeshVisualizer; using MatterHackers.VectorMath; namespace MatterHackers.MatterControl.PartPreviewWindow @@ -325,12 +326,26 @@ namespace MatterHackers.MatterControl.PartPreviewWindow await printer.Bed.LoadContent(editContext); + bool allInBounds = true; + foreach (var item in printer.Bed.Scene.Children) + { + allInBounds &= printer.InsideBuildVolume(item); + } + + if(!allInBounds) + { + await printer.Bed.Scene.AutoArrangeChildren(view3DWidget); + } + // Switch to printer ApplicationController.Instance.AppView.TabControl.SelectedTabKey = printer.Settings.GetValue(SettingsKey.printer_name); // Slice and print + // Save any pending changes before starting print operation + await ApplicationController.Instance.Tasks.Execute("Saving Changes".Localize(), printer.Bed.SaveChanges); + await ApplicationController.Instance.PrintPart( - editContext, + printer.Bed.EditContext, printer, null, CancellationToken.None);