From e5a170a38b149426e575807b482c2ad6986fd5a1 Mon Sep 17 00:00:00 2001 From: larsbrubaker Date: Fri, 18 Jul 2014 12:21:43 -0700 Subject: [PATCH] Made it possible to show and hide the grid in 3d gcode view. Made the post load processing on gcode files happen in a background thread so as not to lock up the ui. --- PartPreviewWindow/ViewGcodeBasic.cs | 3 +- PartPreviewWindow/ViewGcodeWidget.cs | 62 ++++++++++++++++++++-------- 2 files changed, 46 insertions(+), 19 deletions(-) diff --git a/PartPreviewWindow/ViewGcodeBasic.cs b/PartPreviewWindow/ViewGcodeBasic.cs index 6e55406cb..d84e95590 100644 --- a/PartPreviewWindow/ViewGcodeBasic.cs +++ b/PartPreviewWindow/ViewGcodeBasic.cs @@ -447,9 +447,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { CheckBox showGrid = new CheckBox(LocalizedString.Get("Show Grid"), textColor: ActiveTheme.Instance.PrimaryTextColor); showGrid.Checked = gcodeViewWidget.RenderGrid; + meshViewerWidget.RenderBed = showGrid.Checked; showGrid.CheckedStateChanged += (sender, e) => { gcodeViewWidget.RenderGrid = showGrid.Checked; + meshViewerWidget.RenderBed = showGrid.Checked; }; layerInfoContainer.AddChild(showGrid); } @@ -957,6 +959,5 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } base.OnDraw(graphics2D); } - } } diff --git a/PartPreviewWindow/ViewGcodeWidget.cs b/PartPreviewWindow/ViewGcodeWidget.cs index 2a3eabd63..e719a4f2b 100644 --- a/PartPreviewWindow/ViewGcodeWidget.cs +++ b/PartPreviewWindow/ViewGcodeWidget.cs @@ -52,7 +52,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public ProgressChangedEventHandler LoadingProgressChanged; - public bool RenderGrid { get { return (UserSettings.Instance.get("GcodeViewerRenderGrid") == "True"); } @@ -69,7 +68,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public ETransformState TransformState { get; set; } - public bool RenderMoves { get { return (UserSettings.Instance.get("GcodeViewerRenderMoves") == "True"); } @@ -80,7 +78,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - public bool RenderRetractions { get { return (UserSettings.Instance.get("GcodeViewerRenderRetractions") == "True"); } @@ -231,17 +228,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) - { - SetGCodeAfterLoad((GCodeFile)e.Result); - - if(DoneLoading != null) - { - DoneLoading(this, null); - } - } - - void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) + void initialLoading_ProgressChanged(object sender, ProgressChangedEventArgs e) { if (LoadingProgressChanged != null) { @@ -249,7 +236,47 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - PathStorage grid = new PathStorage(); + void initialLoading_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + SetGCodeAfterLoad((GCodeFile)e.Result); + + backgroundWorker = new BackgroundWorker(); + backgroundWorker.WorkerReportsProgress = true; + backgroundWorker.WorkerSupportsCancellation = true; + + backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(postLoadInitialization_ProgressChanged); + backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(postLoadInitialization_RunWorkerCompleted); + + backgroundWorker.DoWork += new DoWorkEventHandler(DoPostLoadInitialization); + + gCodeRenderer = new GCodeRenderer(loadedGCode); + backgroundWorker.RunWorkerAsync(gCodeRenderer); + } + + public static void DoPostLoadInitialization(object sender, DoWorkEventArgs doWorkEventArgs) + { + GCodeRenderer gCodeRenderer = (GCodeRenderer)doWorkEventArgs.Argument; + gCodeRenderer.CreateFeaturesForLayerIfRequired(0); + } + + void postLoadInitialization_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + if (LoadingProgressChanged != null) + { + LoadingProgressChanged(this, e); + } + } + + void postLoadInitialization_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + if (DoneLoading != null) + { + DoneLoading(this, null); + } + } + + + PathStorage grid = new PathStorage(); public override void OnDraw(Graphics2D graphics2D) { if (loadedGCode != null) @@ -404,8 +431,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow backgroundWorker.WorkerReportsProgress = true; backgroundWorker.WorkerSupportsCancellation = true; - backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged); - backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted); + backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(initialLoading_ProgressChanged); + backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(initialLoading_RunWorkerCompleted); loadedGCode = null; GCodeFile.LoadInBackground(backgroundWorker, gcodePathAndFileName); @@ -444,7 +471,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow public void CenterPartInView() { - gCodeRenderer = new GCodeRenderer(loadedGCode); RectangleDouble partBounds = loadedGCode.GetBounds(); Vector2 weightedCenter = loadedGCode.GetWeightedCenter();