From a04460c57b10fa9a1eb6430f025c05f3052b3193 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Sun, 27 Sep 2026 20:43:34 -0400 Subject: [PATCH] refactor(ui): drop duplicate plate preview from nesting progress dialog The dialog rendered the same best-parts layout as transparent ghost parts already shown live on the main plate view, and its embedded view reset zoom on every improvement while lacking placed parts, work-area and cut-off context. The progress dialog is now a compact stats strip (266px wide) with the plate counter preserved for multi-plate runs. Removes the never-called SetStationaryParts stationary-preview path along with PreviewPlate/UpdatePreview/CreatePreviewPlate. --- OpenNest/Controls/PlateView.cs | 18 +--- OpenNest/Controls/PreviewManager.cs | 32 +------- OpenNest/Forms/MainForm.cs | 33 ++------ OpenNest/Forms/NestProgressForm.Designer.cs | 91 +-------------------- OpenNest/Forms/NestProgressForm.cs | 28 ------- 5 files changed, 17 insertions(+), 185 deletions(-) diff --git a/OpenNest/Controls/PlateView.cs b/OpenNest/Controls/PlateView.cs index 3d94702..e9f4bab 100644 --- a/OpenNest/Controls/PlateView.cs +++ b/OpenNest/Controls/PlateView.cs @@ -10,13 +10,13 @@ using System.Threading.Tasks; using System.Windows.Forms; using OpenNest.Actions; using OpenNest.Collections; +using OpenNest.Engine; using OpenNest.Engine.Fill; +using OpenNest.Engine.Jobs.Placement; using OpenNest.Forms; using OpenNest.Geometry; using OpenNest.Math; using Timer = System.Timers.Timer; -using OpenNest.Engine; -using OpenNest.Engine.Jobs.Placement; namespace OpenNest.Controls { @@ -562,9 +562,6 @@ namespace OpenNest.Controls Plate.Parts.Add(part); } - public void SetStationaryParts(List parts) => - previewManager.SetStationaryParts(parts); - public void SetActiveParts(List parts) => previewManager.SetActiveParts(parts); public void ClearPreviewParts() => previewManager.ClearPreviewParts(); @@ -578,23 +575,12 @@ namespace OpenNest.Controls var cts = new CancellationTokenSource(); var progressForm = new NestProgressForm(cts, showPlateRow: false); - var previewPlate = new Plate(Plate.Size) - { - Quadrant = Plate.Quadrant, - PartSpacing = Plate.PartSpacing, - }; - previewPlate.EdgeSpacing = Plate.EdgeSpacing; - progressForm.PreviewPlate = previewPlate; - var progress = new Progress(p => { progressForm.UpdateProgress(p); if (p.IsOverallBest) - { - progressForm.UpdatePreview(p.BestParts); SetActiveParts(p.BestParts); - } ActiveWorkArea = p.ActiveWorkArea; }); diff --git a/OpenNest/Controls/PreviewManager.cs b/OpenNest/Controls/PreviewManager.cs index 62b7f95..26e8aca 100644 --- a/OpenNest/Controls/PreviewManager.cs +++ b/OpenNest/Controls/PreviewManager.cs @@ -6,7 +6,6 @@ namespace OpenNest.Controls internal class PreviewManager { private readonly PlateView view; - private readonly List stationaryParts = new List(); private readonly List activeParts = new List(); public PreviewManager(PlateView view) @@ -14,32 +13,11 @@ namespace OpenNest.Controls this.view = view; } - public IReadOnlyList PreviewParts => - activeParts.Count > 0 ? activeParts : stationaryParts; + public IReadOnlyList PreviewParts => activeParts; - public Brush PreviewBrush => - activeParts.Count > 0 - ? view.ColorScheme.ActivePreviewPartBrush - : view.ColorScheme.PreviewPartBrush; + public Brush PreviewBrush => view.ColorScheme.ActivePreviewPartBrush; - public Pen PreviewPen => - activeParts.Count > 0 - ? view.ColorScheme.ActivePreviewPartPen - : view.ColorScheme.PreviewPartPen; - - public void SetStationaryParts(List parts) - { - stationaryParts.Clear(); - activeParts.Clear(); - - if (parts != null) - { - foreach (var part in parts) - stationaryParts.Add(LayoutPart.Create(part, view)); - } - - view.Invalidate(); - } + public Pen PreviewPen => view.ColorScheme.ActivePreviewPartPen; public void SetActiveParts(List parts) { @@ -56,7 +34,6 @@ namespace OpenNest.Controls public void ClearPreviewParts() { - stationaryParts.Clear(); activeParts.Clear(); view.Invalidate(); } @@ -69,19 +46,16 @@ namespace OpenNest.Controls view.Plate.Parts.Add(part); } - stationaryParts.Clear(); activeParts.Clear(); } public void Update() { - stationaryParts.ForEach(p => p.Update(view)); activeParts.ForEach(p => p.Update(view)); } public void Clear() { - stationaryParts.Clear(); activeParts.Clear(); } } diff --git a/OpenNest/Forms/MainForm.cs b/OpenNest/Forms/MainForm.cs index 0c52b34..763ac5b 100644 --- a/OpenNest/Forms/MainForm.cs +++ b/OpenNest/Forms/MainForm.cs @@ -10,16 +10,16 @@ using System.Windows.Forms; using OpenNest.Actions; using OpenNest.Collections; using OpenNest.Data; +using OpenNest.Engine; using OpenNest.Engine.BestFit; using OpenNest.Engine.Fill; +using OpenNest.Engine.Jobs; +using OpenNest.Engine.Jobs.Adapters; +using OpenNest.Engine.Jobs.Placement; using OpenNest.Geometry; using OpenNest.Gpu; using OpenNest.IO; using OpenNest.Properties; -using OpenNest.Engine; -using OpenNest.Engine.Jobs; -using OpenNest.Engine.Jobs.Adapters; -using OpenNest.Engine.Jobs.Placement; namespace OpenNest.Forms { @@ -1040,7 +1040,6 @@ namespace OpenNest.Forms nestingCts = new CancellationTokenSource(); var progressForm = new NestProgressForm(nestingCts, showPlateRow: true); - progressForm.PreviewPlate = CreatePreviewPlate(activeForm.PlateView.Plate); var jobEngineName = EngineSelection.IsFillStrategy(EngineSelection.EngineName) ? null @@ -1052,9 +1051,7 @@ namespace OpenNest.Forms progressForm.UpdateProgress(p); if (p.IsOverallBest) - progressForm.UpdatePreview(p.BestParts); - - activeForm.PlateView.SetActiveParts(p.BestParts); + activeForm.PlateView.SetActiveParts(p.BestParts); activeForm.PlateView.ActiveWorkArea = p.ActiveWorkArea; }); @@ -1152,7 +1149,7 @@ namespace OpenNest.Forms { if (pr.IsNew) { - var plate = GetOrCreatePlate(progressForm); + var plate = GetOrCreatePlate(); plate.Size = pr.Plate.Size; plate.Parts.AddRange(pr.Parts); } @@ -1172,7 +1169,7 @@ namespace OpenNest.Forms if (remaining.Count == 0 || token.IsCancellationRequested) break; - var plate = GetOrCreatePlate(progressForm); + var plate = GetOrCreatePlate(); var placed = await NestSinglePlateAsync( plate, @@ -1242,7 +1239,7 @@ namespace OpenNest.Forms if (parts.Count == 0) continue; - var plate = GetOrCreatePlate(progressForm); + var plate = GetOrCreatePlate(); plate.Size = sheet.Stock.Size; plate.Parts.AddRange(parts); } @@ -1260,11 +1257,10 @@ namespace OpenNest.Forms ); } - private Plate GetOrCreatePlate(NestProgressForm progressForm) + private Plate GetOrCreatePlate() { var plate = activeForm.PlateManager.GetOrCreateEmpty(); activeForm.PlateManager.LoadLast(); - progressForm.PreviewPlate = CreatePreviewPlate(plate); return plate; } @@ -1340,17 +1336,6 @@ namespace OpenNest.Forms return true; } - private static Plate CreatePreviewPlate(Plate source) - { - var plate = new Plate(source.Size) - { - Quadrant = source.Quadrant, - PartSpacing = source.PartSpacing, - }; - plate.EdgeSpacing = source.EdgeSpacing; - return plate; - } - private void SequenceAllPlates_Click(object sender, EventArgs e) { if (activeForm == null) diff --git a/OpenNest/Forms/NestProgressForm.Designer.cs b/OpenNest/Forms/NestProgressForm.Designer.cs index 0362dcf..ebc1997 100644 --- a/OpenNest/Forms/NestProgressForm.Designer.cs +++ b/OpenNest/Forms/NestProgressForm.Designer.cs @@ -17,11 +17,6 @@ namespace OpenNest.Forms private void InitializeComponent() { - ColorScheme colorScheme1 = new ColorScheme(); - CutOffSettings cutOffSettings1 = new CutOffSettings(); - Plate plate1 = new Plate(); - Collections.ObservableList observableList_11 = new Collections.ObservableList(); - Collections.ObservableList observableList_12 = new Collections.ObservableList(); phaseStepper = new OpenNest.Controls.PhaseStepperControl(); resultsPanel = new System.Windows.Forms.Panel(); resultsTable = new System.Windows.Forms.TableLayoutPanel(); @@ -46,8 +41,6 @@ namespace OpenNest.Forms buttonPanel = new System.Windows.Forms.FlowLayoutPanel(); stopButton = new System.Windows.Forms.Button(); acceptButton = new System.Windows.Forms.Button(); - splitContainer = new System.Windows.Forms.SplitContainer(); - previewPlateView = new OpenNest.Controls.PlateView(); statsPanel = new System.Windows.Forms.Panel(); resultsPanel.SuspendLayout(); resultsTable.SuspendLayout(); @@ -55,10 +48,6 @@ namespace OpenNest.Forms statusPanel.SuspendLayout(); statusTable.SuspendLayout(); buttonPanel.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)splitContainer).BeginInit(); - splitContainer.Panel1.SuspendLayout(); - splitContainer.Panel2.SuspendLayout(); - splitContainer.SuspendLayout(); statsPanel.SuspendLayout(); SuspendLayout(); // @@ -365,74 +354,6 @@ namespace OpenNest.Forms acceptButton.UseVisualStyleBackColor = true; acceptButton.Click += AcceptButton_Click; // - // splitContainer - // - splitContainer.Dock = System.Windows.Forms.DockStyle.Fill; - splitContainer.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - splitContainer.Location = new System.Drawing.Point(0, 0); - splitContainer.Name = "splitContainer"; - // - // splitContainer.Panel1 - // - splitContainer.Panel1.Controls.Add(previewPlateView); - // - // splitContainer.Panel2 - // - splitContainer.Panel2.Controls.Add(statsPanel); - splitContainer.Size = new System.Drawing.Size(626, 341); - splitContainer.SplitterDistance = 356; - splitContainer.TabIndex = 0; - // - // previewPlateView - // - previewPlateView.ActiveWorkArea = null; - previewPlateView.AllowPan = true; - previewPlateView.AllowSelect = true; - previewPlateView.AllowZoom = true; - previewPlateView.BackColor = System.Drawing.Color.DarkGray; - colorScheme1.BackgroundColor = System.Drawing.Color.DarkGray; - colorScheme1.BoundingBoxColor = System.Drawing.Color.FromArgb(128, 128, 255); - colorScheme1.EdgeSpacingColor = System.Drawing.Color.FromArgb(180, 180, 180); - colorScheme1.LayoutFillColor = System.Drawing.Color.WhiteSmoke; - colorScheme1.LayoutOutlineColor = System.Drawing.Color.Gray; - colorScheme1.OriginColor = System.Drawing.Color.Gray; - colorScheme1.PreviewPartColor = System.Drawing.Color.FromArgb(255, 140, 0); - colorScheme1.RapidColor = System.Drawing.Color.DodgerBlue; - previewPlateView.ColorScheme = colorScheme1; - cutOffSettings1.CutDirection = CutDirection.AwayFromOrigin; - cutOffSettings1.MinSegmentLength = 0.05D; - cutOffSettings1.Overtravel = 0D; - cutOffSettings1.PartClearance = 0.02D; - previewPlateView.CutOffSettings = cutOffSettings1; - previewPlateView.DebugRemnantPriorities = null; - previewPlateView.DebugRemnants = null; - previewPlateView.Dock = System.Windows.Forms.DockStyle.Fill; - previewPlateView.DrawBounds = true; - previewPlateView.DrawCutDirection = false; - previewPlateView.DrawOffset = false; - previewPlateView.DrawOrigin = true; - previewPlateView.DrawPiercePoints = false; - previewPlateView.DrawRapid = false; - previewPlateView.FillParts = true; - previewPlateView.Location = new System.Drawing.Point(0, 0); - previewPlateView.Name = "previewPlateView"; - previewPlateView.OffsetIncrementDistance = 10D; - previewPlateView.OffsetTolerance = 0.001D; - plate1.CutOffs = observableList_11; - plate1.CuttingParameters = null; - plate1.GrainAngle = 0D; - plate1.Parts = observableList_12; - plate1.PartSpacing = 0D; - plate1.Quadrant = 1; - plate1.Quantity = 0; - previewPlateView.Plate = plate1; - previewPlateView.RotateIncrementAngle = 10D; - - previewPlateView.ShowBendLines = false; - previewPlateView.Size = new System.Drawing.Size(356, 341); - previewPlateView.Status = "Select"; - previewPlateView.TabIndex = 0; - // // statsPanel // statsPanel.AutoScroll = true; @@ -450,12 +371,12 @@ namespace OpenNest.Forms // AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - ClientSize = new System.Drawing.Size(626, 341); - Controls.Add(splitContainer); + ClientSize = new System.Drawing.Size(266, 341); + Controls.Add(statsPanel); FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; MaximizeBox = false; MinimizeBox = false; - MinimumSize = new System.Drawing.Size(550, 380); + MinimumSize = new System.Drawing.Size(320, 380); Name = "NestProgressForm"; ShowInTaskbar = false; StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; @@ -471,10 +392,6 @@ namespace OpenNest.Forms statusTable.ResumeLayout(false); statusTable.PerformLayout(); buttonPanel.ResumeLayout(false); - splitContainer.Panel1.ResumeLayout(false); - splitContainer.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)splitContainer).EndInit(); - splitContainer.ResumeLayout(false); statsPanel.ResumeLayout(false); statsPanel.PerformLayout(); ResumeLayout(false); @@ -506,8 +423,6 @@ namespace OpenNest.Forms private System.Windows.Forms.FlowLayoutPanel buttonPanel; private System.Windows.Forms.Button acceptButton; private System.Windows.Forms.Button stopButton; - private System.Windows.Forms.SplitContainer splitContainer; private System.Windows.Forms.Panel statsPanel; - private Controls.PlateView previewPlateView; } } diff --git a/OpenNest/Forms/NestProgressForm.cs b/OpenNest/Forms/NestProgressForm.cs index acc256a..57db375 100644 --- a/OpenNest/Forms/NestProgressForm.cs +++ b/OpenNest/Forms/NestProgressForm.cs @@ -38,23 +38,11 @@ namespace OpenNest.Forms set => acceptButton.Visible = value; } - public Plate PreviewPlate - { - get => previewPlateView.Plate; - set - { - previewPlateView.Plate = value; - previewPlateView.ZoomToFit(); - } - } - public NestProgressForm(CancellationTokenSource cts, bool showPlateRow = true) { this.cts = cts; InitializeComponent(); - previewPlateView.AllowSelect = false; - if (!showPlateRow) { plateLabel.Visible = false; @@ -104,20 +92,6 @@ namespace OpenNest.Forms : progress.Phase.DisplayName(); } - public void UpdatePreview(List bestParts) - { - if (IsDisposed || !IsHandleCreated) - return; - - var plate = previewPlateView.Plate; - plate.Parts.Clear(); - - foreach (var part in bestParts) - plate.Parts.Add((Part)part.Clone()); - - previewPlateView.ZoomToFit(); - } - public void ShowCompleted() { if (IsDisposed || !IsHandleCreated) @@ -178,8 +152,6 @@ namespace OpenNest.Forms if (!cts.IsCancellationRequested) cts.Cancel(); - previewPlateView.Dispose(); - base.OnFormClosing(e); }