From f46bcd4e4bc295917ae6c8acf529820e0d25cdb1 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Wed, 25 Mar 2026 21:39:03 -0400 Subject: [PATCH] feat: add filter toggle to remnant viewer for showing all remnants The remnant viewer previously always filtered by smallest part dimension, hiding large remnants that were narrower than the smallest part. Added a "Filter by part size" checkbox (on by default) so users can toggle this off to see all remnants regardless of size. Co-Authored-By: Claude Opus 4.6 (1M context) --- OpenNest/Forms/MainForm.cs | 3 +-- OpenNest/Forms/RemnantViewerForm.cs | 32 +++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/OpenNest/Forms/MainForm.cs b/OpenNest/Forms/MainForm.cs index 61706dd..d8d5796 100644 --- a/OpenNest/Forms/MainForm.cs +++ b/OpenNest/Forms/MainForm.cs @@ -848,7 +848,6 @@ namespace OpenNest.Forms } var finder = RemnantFinder.FromPlate(plate); - var tiered = finder.FindTieredRemnants(minDim); if (remnantViewer == null || remnantViewer.IsDisposed) { @@ -862,7 +861,7 @@ namespace OpenNest.Forms Top); } - remnantViewer.LoadRemnants(tiered, activeForm.PlateView); + remnantViewer.LoadRemnants(finder, minDim, activeForm.PlateView); remnantViewer.Show(); remnantViewer.BringToFront(); } diff --git a/OpenNest/Forms/RemnantViewerForm.cs b/OpenNest/Forms/RemnantViewerForm.cs index 805b315..cd9d11a 100644 --- a/OpenNest/Forms/RemnantViewerForm.cs +++ b/OpenNest/Forms/RemnantViewerForm.cs @@ -11,7 +11,10 @@ namespace OpenNest.Forms public class RemnantViewerForm : Form { private ListView listView; + private CheckBox filterCheckBox; private PlateView plateView; + private RemnantFinder finder; + private double minDim; private List remnants = new(); private int selectedIndex = -1; @@ -24,6 +27,15 @@ namespace OpenNest.Forms ShowInTaskbar = false; TopMost = true; + filterCheckBox = new CheckBox + { + Text = "Filter by part size", + Checked = true, + Dock = DockStyle.Top, + Padding = new Padding(4, 2, 0, 2), + }; + filterCheckBox.CheckedChanged += FilterCheckBox_CheckedChanged; + listView = new ListView { Dock = DockStyle.Fill, @@ -42,6 +54,7 @@ namespace OpenNest.Forms listView.SelectedIndexChanged += ListView_SelectedIndexChanged; Controls.Add(listView); + Controls.Add(filterCheckBox); } protected override bool ProcessDialogKey(Keys keyData) @@ -54,10 +67,25 @@ namespace OpenNest.Forms return base.ProcessDialogKey(keyData); } - public void LoadRemnants(List tieredRemnants, PlateView view) + public void LoadRemnants(RemnantFinder finder, double minDim, PlateView view) { plateView = view; - remnants = tieredRemnants; + this.finder = finder; + this.minDim = minDim; + + Refresh(); + } + + private void FilterCheckBox_CheckedChanged(object sender, EventArgs e) + { + if (finder != null) + Refresh(); + } + + private new void Refresh() + { + var dim = filterCheckBox.Checked ? minDim : 0; + remnants = finder.FindTieredRemnants(dim); selectedIndex = -1; listView.BeginUpdate();