diff --git a/PartPreviewWindow/View3D/View3DAlign.cs b/PartPreviewWindow/View3D/View3DAlign.cs index 5e763f0ca..d661b9601 100644 --- a/PartPreviewWindow/View3D/View3DAlign.cs +++ b/PartPreviewWindow/View3D/View3DAlign.cs @@ -48,18 +48,16 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // set the progress lable text processingProgressControl.PercentComplete = 0; processingProgressControl.Visible = true; - string makingCopyLabel = LocalizedString.Get("Finding Meshes"); + string makingCopyLabel = LocalizedString.Get("Aligning"); string makingCopyLabelFull = string.Format("{0}:", makingCopyLabel); - processingProgressControl.textWidget.Text = makingCopyLabelFull; + processingProgressControl.ProcessType = makingCopyLabelFull; LockEditControls(); viewIsInEditModePreLock = true; BackgroundWorker createDiscreteMeshesBackgroundWorker = null; createDiscreteMeshesBackgroundWorker = new BackgroundWorker(); - createDiscreteMeshesBackgroundWorker.WorkerReportsProgress = true; - createDiscreteMeshesBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged); createDiscreteMeshesBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(alignSelectedBackgroundWorker_RunWorkerCompleted); createDiscreteMeshesBackgroundWorker.DoWork += new DoWorkEventHandler(alignSelectedBackgroundWorker_DoWork); @@ -138,9 +136,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // create the selection info PlatingHelper.CreateITraceableForMeshGroup(asynchPlatingDatas, asynchMeshGroups, i, (double progress0To1, string processingState, out bool continueProcessing) => { - continueProcessing = true; - int nextPercent = (int)((currentRatioDone + ratioPerMeshGroup * progress0To1) * 100); - backgroundWorker.ReportProgress(nextPercent); + BackgroundWorker_ProgressChanged(progress0To1, processingState, out continueProcessing); }); currentRatioDone += ratioPerMeshGroup; diff --git a/PartPreviewWindow/View3D/View3DAutoArange.cs b/PartPreviewWindow/View3D/View3DAutoArange.cs index 523deb8cf..6eac45d81 100644 --- a/PartPreviewWindow/View3D/View3DAutoArange.cs +++ b/PartPreviewWindow/View3D/View3DAutoArange.cs @@ -46,16 +46,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { string progressArrangeParts = LocalizedString.Get("Arranging Parts"); string progressArrangePartsFull = string.Format("{0}:", progressArrangeParts); - processingProgressControl.textWidget.Text = progressArrangePartsFull; + processingProgressControl.ProcessType = progressArrangePartsFull; processingProgressControl.Visible = true; processingProgressControl.PercentComplete = 0; LockEditControls(); BackgroundWorker arrangeMeshGroupsBackgroundWorker = new BackgroundWorker(); - arrangeMeshGroupsBackgroundWorker.WorkerReportsProgress = true; arrangeMeshGroupsBackgroundWorker.DoWork += new DoWorkEventHandler(arrangeMeshGroupsBackgroundWorker_DoWork); - arrangeMeshGroupsBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged); arrangeMeshGroupsBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(arrangeMeshGroupsBackgroundWorker_RunWorkerCompleted); arrangeMeshGroupsBackgroundWorker.RunWorkerAsync(); @@ -123,9 +121,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // and create the trace info so we can select it PlatingHelper.CreateITraceableForMeshGroup(asynchPlatingDatas, asynchMeshGroups, meshGroupIndex, (double progress0To1, string processingState, out bool continueProcessing) => { - continueProcessing = true; - int nextPercent = (int)((currentRatioDone + ratioPerMeshGroup * progress0To1) * 100); - backgroundWorker.ReportProgress(nextPercent); + BackgroundWorker_ProgressChanged(progress0To1, processingState, out continueProcessing); }); currentRatioDone += ratioPerMeshGroup; diff --git a/PartPreviewWindow/View3D/View3DCopyGroup.cs b/PartPreviewWindow/View3D/View3DCopyGroup.cs index f2c7780d0..c3d20b323 100644 --- a/PartPreviewWindow/View3D/View3DCopyGroup.cs +++ b/PartPreviewWindow/View3D/View3DCopyGroup.cs @@ -43,17 +43,15 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { string makingCopyLabel = LocalizedString.Get("Making Copy"); string makingCopyLabelFull = string.Format("{0}:", makingCopyLabel); - processingProgressControl.textWidget.Text = makingCopyLabelFull; + processingProgressControl.ProcessType = makingCopyLabelFull; processingProgressControl.Visible = true; processingProgressControl.PercentComplete = 0; LockEditControls(); BackgroundWorker copyGroupBackgroundWorker = null; copyGroupBackgroundWorker = new BackgroundWorker(); - copyGroupBackgroundWorker.WorkerReportsProgress = true; copyGroupBackgroundWorker.DoWork += new DoWorkEventHandler(copyGroupBackgroundWorker_DoWork); - copyGroupBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged); copyGroupBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(copyGroupBackgroundWorker_RunWorkerCompleted); copyGroupBackgroundWorker.RunWorkerAsync(); @@ -75,16 +73,15 @@ namespace MatterHackers.MatterControl.PartPreviewWindow Mesh mesh = asynchMeshGroups[SelectedMeshGroupIndex].Meshes[i]; copyMeshGroup.Meshes.Add(Mesh.Copy(mesh, (double progress0To1, string processingState, out bool continueProcessing) => { - continueProcessing = true; - int nextPercent = (int)(100 * (progress0To1 * .8 * i / meshCount)); - backgroundWorker.ReportProgress(nextPercent); + BackgroundWorker_ProgressChanged(progress0To1, processingState, out continueProcessing); })); } PlatingHelper.FindPositionForGroupAndAddToPlate(copyMeshGroup, SelectedMeshGroupTransform, asynchPlatingDatas, asynchMeshGroups, asynchMeshGroupTransforms); PlatingHelper.CreateITraceableForMeshGroup(asynchPlatingDatas, asynchMeshGroups, asynchMeshGroups.Count - 1, null); - backgroundWorker.ReportProgress(95); + bool continueProcessing2; + BackgroundWorker_ProgressChanged(.95, "", out continueProcessing2); } void copyGroupBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) diff --git a/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs b/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs index ec4ffc453..b6eda0c0a 100644 --- a/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs +++ b/PartPreviewWindow/View3D/View3DCreateSelecitonData.cs @@ -58,9 +58,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow BackgroundWorker createSelectionDataBackgroundWorker = null; createSelectionDataBackgroundWorker = new BackgroundWorker(); - createSelectionDataBackgroundWorker.WorkerReportsProgress = true; - createSelectionDataBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged); createSelectionDataBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(createSelectionDataBackgroundWorker_RunWorkerCompleted); createSelectionDataBackgroundWorker.DoWork += new DoWorkEventHandler(createSelectionDataBackgroundWorker_DoWork); @@ -72,7 +70,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { string makingCopyLabel = LocalizedString.Get("Preparing Meshes"); string makingCopyLabelFull = string.Format("{0}:", makingCopyLabel); - processingProgressControl.textWidget.Text = makingCopyLabelFull; + processingProgressControl.ProcessType = makingCopyLabelFull; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; BackgroundWorker backgroundWorker = (BackgroundWorker)sender; @@ -92,13 +90,15 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // create the selection info PlatingHelper.CreateITraceableForMeshGroup(asynchPlatingDatas, asynchMeshGroups, i, (double progress0To1, string processingState, out bool continueProcessing) => { - continueProcessing = true; - int nextPercent = (int)((currentRatioDone + ratioPerMeshGroup * progress0To1) * 100); - backgroundWorker.ReportProgress(nextPercent); + BackgroundWorker_ProgressChanged(progress0To1, processingState, out continueProcessing); }); currentRatioDone += ratioPerMeshGroup; } + + bool continueProcessing2; + BackgroundWorker_ProgressChanged(1, "Creating GL Data", out continueProcessing2); + meshViewerWidget.CreateGlDataForMeshes(asynchMeshGroups); } void createSelectionDataBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) diff --git a/PartPreviewWindow/View3D/View3DGroup.cs b/PartPreviewWindow/View3D/View3DGroup.cs index c85e066f9..2e75eb16f 100644 --- a/PartPreviewWindow/View3D/View3DGroup.cs +++ b/PartPreviewWindow/View3D/View3DGroup.cs @@ -50,9 +50,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow BackgroundWorker createDiscreteMeshesBackgroundWorker = null; createDiscreteMeshesBackgroundWorker = new BackgroundWorker(); - createDiscreteMeshesBackgroundWorker.WorkerReportsProgress = true; - createDiscreteMeshesBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged); createDiscreteMeshesBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(groupSelectedBackgroundWorker_RunWorkerCompleted); createDiscreteMeshesBackgroundWorker.DoWork += new DoWorkEventHandler(groupSelectedBackgroundWorker_DoWork); @@ -62,9 +60,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow void groupSelectedBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { - string makingCopyLabel = LocalizedString.Get("Grouping Meshes"); + string makingCopyLabel = LocalizedString.Get("Grouping"); string makingCopyLabelFull = string.Format("{0}:", makingCopyLabel); - processingProgressControl.textWidget.Text = makingCopyLabelFull; + processingProgressControl.ProcessType = makingCopyLabelFull; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; BackgroundWorker backgroundWorker = (BackgroundWorker)sender; @@ -75,8 +73,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { asynchMeshGroups[i].Transform(asynchMeshGroupTransforms[i].TotalTransform); - int nextPercent = (i + 1) * 40 / asynchMeshGroups.Count; - backgroundWorker.ReportProgress(nextPercent); + bool continueProcessing; + BackgroundWorker_ProgressChanged((i+1) * .4 / asynchMeshGroups.Count, "", out continueProcessing); } DoGroup(backgroundWorker); @@ -119,9 +117,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // create the selection info PlatingHelper.CreateITraceableForMeshGroup(asynchPlatingDatas, asynchMeshGroups, i, (double progress0To1, string processingState, out bool continueProcessing) => { - continueProcessing = true; - int nextPercent = (int)((currentRatioDone + ratioPerMeshGroup * progress0To1) * 100); - backgroundWorker.ReportProgress(nextPercent); + BackgroundWorker_ProgressChanged(progress0To1, processingState, out continueProcessing); }); currentRatioDone += ratioPerMeshGroup; diff --git a/PartPreviewWindow/View3D/View3DUngroup.cs b/PartPreviewWindow/View3D/View3DUngroup.cs index 01dcbe8ca..4f7d47a86 100644 --- a/PartPreviewWindow/View3D/View3DUngroup.cs +++ b/PartPreviewWindow/View3D/View3DUngroup.cs @@ -50,9 +50,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow BackgroundWorker createDiscreteMeshesBackgroundWorker = null; createDiscreteMeshesBackgroundWorker = new BackgroundWorker(); - createDiscreteMeshesBackgroundWorker.WorkerReportsProgress = true; - createDiscreteMeshesBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged); createDiscreteMeshesBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(ungroupSelectedBackgroundWorker_RunWorkerCompleted); createDiscreteMeshesBackgroundWorker.DoWork += new DoWorkEventHandler(ungroupSelectedBackgroundWorker_DoWork); @@ -62,9 +60,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow void ungroupSelectedBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { - string makingCopyLabel = LocalizedString.Get("Finding Meshes"); + string makingCopyLabel = LocalizedString.Get("Ungrouping"); string makingCopyLabelFull = string.Format("{0}:", makingCopyLabel); - processingProgressControl.textWidget.Text = makingCopyLabelFull; + processingProgressControl.ProcessType = makingCopyLabelFull; Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; BackgroundWorker backgroundWorker = (BackgroundWorker)sender; @@ -75,9 +73,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow asynchMeshGroups[indexBeingReplaced].Transform(asynchMeshGroupTransforms[indexBeingReplaced].TotalTransform); List discreetMeshes = CreateDiscreteMeshes.SplitConnectedIntoMeshes(asynchMeshGroups[indexBeingReplaced], (double progress0To1, string processingState, out bool continueProcessing) => { - continueProcessing = true; - int nextPercent = (int)(progress0To1 * 50); - backgroundWorker.ReportProgress(nextPercent); + BackgroundWorker_ProgressChanged(progress0To1 * .5, processingState, out continueProcessing); }); asynchMeshGroups.RemoveAt(indexBeingReplaced); @@ -102,9 +98,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow // and create selection info PlatingHelper.CreateITraceableForMeshGroup(asynchPlatingDatas, asynchMeshGroups, addedMeshIndex, (double progress0To1, string processingState, out bool continueProcessing) => { - continueProcessing = true; - int nextPercent = (int)((currentRatioDone + ratioPerDiscreetMesh * progress0To1) * 50) + 50; - backgroundWorker.ReportProgress(nextPercent); + BackgroundWorker_ProgressChanged(progress0To1 * .5 + .5, processingState, out continueProcessing); }); currentRatioDone += ratioPerDiscreetMesh; } diff --git a/PartPreviewWindow/View3D/View3DWidget.cs b/PartPreviewWindow/View3D/View3DWidget.cs index 14e37cc6a..0d1077cfb 100644 --- a/PartPreviewWindow/View3D/View3DWidget.cs +++ b/PartPreviewWindow/View3D/View3DWidget.cs @@ -629,7 +629,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { string loadingPartLabel = LocalizedString.Get("Loading Parts"); string loadingPartLabelFull = "{0}:".FormatWith(loadingPartLabel); - processingProgressControl.textWidget.Text = loadingPartLabelFull; + processingProgressControl.ProcessType = loadingPartLabelFull; processingProgressControl.Visible = true; processingProgressControl.PercentComplete = 0; LockEditControls(); @@ -638,10 +638,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow BackgroundWorker loadAndAddPartsToPlateBackgroundWorker = null; loadAndAddPartsToPlateBackgroundWorker = new BackgroundWorker(); - loadAndAddPartsToPlateBackgroundWorker.WorkerReportsProgress = true; loadAndAddPartsToPlateBackgroundWorker.DoWork += new DoWorkEventHandler(loadAndAddPartsToPlateBackgroundWorker_DoWork); - loadAndAddPartsToPlateBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged); loadAndAddPartsToPlateBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(loadAndAddPartsToPlateBackgroundWorker_RunWorkerCompleted); loadAndAddPartsToPlateBackgroundWorker.RunWorkerAsync(filesToLoad); @@ -649,8 +647,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } enum TraceInfoOpperation { DONT_COPY, DO_COPY }; - private void PushMeshGroupDataToAsynchLists(TraceInfoOpperation traceInfoOpperation) + private void PushMeshGroupDataToAsynchLists(TraceInfoOpperation traceInfoOpperation, ReportProgressRatio reportProgress = null) { + UiThread.RunOnIdle((state) => + { + processingProgressControl.ProgressMessage = "Async Copy"; + }); asynchMeshGroups.Clear(); asynchMeshGroupTransforms.Clear(); for (int meshGroupIndex = 0; meshGroupIndex < MeshGroups.Count; meshGroupIndex++) @@ -681,6 +683,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } asynchPlatingDatas.Add(meshData); } + UiThread.RunOnIdle((state) => + { + processingProgressControl.ProgressMessage = ""; + }); } private void PullMeshGroupDataFromAsynchLists() @@ -732,7 +738,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow continueProcessing = !this.WidgetHasBeenClosed; double ratioAvailable = (ratioPerFile * .5); double currentRatio = currentRatioDone + progress0To1 * ratioAvailable; - backgroundWorker.ReportProgress((int)(currentRatio * 100)); + BackgroundWorker_ProgressChanged(currentRatio, processingState, out continueProcessing); }); if (WidgetHasBeenClosed) @@ -758,7 +764,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow continueProcessing = !this.WidgetHasBeenClosed; double ratioAvailable = (ratioPerFile * .5); double currentRatio = currentRatioDone + currentPlatingRatioDone + ratioAvailable + progress0To1 * ratioAvailable; - backgroundWorker.ReportProgress((int)(currentRatio * 100)); + BackgroundWorker_ProgressChanged(currentRatio, processingState, out continueProcessing); }); currentPlatingRatioDone += ratioPerSubMesh; @@ -886,9 +892,19 @@ namespace MatterHackers.MatterControl.PartPreviewWindow } } - void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) + Stopwatch timeSinceReported = new Stopwatch(); + void BackgroundWorker_ProgressChanged(double progress0To1, string processingState, out bool continueProcessing) { - processingProgressControl.PercentComplete = e.ProgressPercentage; + if (!timeSinceReported.IsRunning || timeSinceReported.ElapsedMilliseconds > 100) + { + UiThread.RunOnIdle((state) => + { + processingProgressControl.PercentComplete = (int)(progress0To1 * 100 + .5); + processingProgressControl.ProgressMessage = processingState; + }); + timeSinceReported.Restart(); + } + continueProcessing = true; } private void CreateOptionsContent() @@ -1690,16 +1706,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { string progressSavingPartsLabel = LocalizedString.Get("Saving"); string progressSavingPartsLabelFull = "{0}:".FormatWith(progressSavingPartsLabel); - processingProgressControl.textWidget.Text = progressSavingPartsLabelFull; + processingProgressControl.ProcessType = progressSavingPartsLabelFull; processingProgressControl.Visible = true; processingProgressControl.PercentComplete = 0; LockEditControls(); BackgroundWorker mergeAndSavePartsBackgroundWorker = new BackgroundWorker(); - mergeAndSavePartsBackgroundWorker.WorkerReportsProgress = true; mergeAndSavePartsBackgroundWorker.DoWork += new DoWorkEventHandler(mergeAndSavePartsBackgroundWorker_DoWork); - mergeAndSavePartsBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged); mergeAndSavePartsBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(mergeAndSavePartsBackgroundWorker_RunWorkerCompleted); mergeAndSavePartsBackgroundWorker.RunWorkerAsync(); @@ -1720,8 +1734,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow { asynchMeshGroups[i].Transform(asynchMeshGroupTransforms[i].TotalTransform); - int nextPercent = (i + 1) * 40 / asynchMeshGroups.Count; - backgroundWorker.ReportProgress(nextPercent); + bool continueProcessing; + BackgroundWorker_ProgressChanged((i + 1) * .4 / asynchMeshGroups.Count, "", out continueProcessing); } LibraryData.SaveToLibraryFolder(printItemWrapper, asynchMeshGroups); diff --git a/StaticData/Translations/Master.txt b/StaticData/Translations/Master.txt index 055c9e261..2cb6b010e 100644 --- a/StaticData/Translations/Master.txt +++ b/StaticData/Translations/Master.txt @@ -2807,3 +2807,9 @@ Translated:Beta English:Alpha Translated:Alpha +English:Ungrouping +Translated:Ungrouping + +English:Grouping +Translated:Grouping +