From 0b9a42e84c026a908794c673bf45c33ce8541be0 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Mon, 16 Mar 2026 13:51:30 -0400 Subject: [PATCH] fix(engine): use smallest remaining part as minimum remnant size Skip remnants that are too small to fit any remaining part, avoiding wasted fill attempts. Recalculated each iteration as quantities deplete. Co-Authored-By: Claude Opus 4.6 (1M context) --- OpenNest.Engine/StripNestEngine.cs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/OpenNest.Engine/StripNestEngine.cs b/OpenNest.Engine/StripNestEngine.cs index 283a145..7053617 100644 --- a/OpenNest.Engine/StripNestEngine.cs +++ b/OpenNest.Engine/StripNestEngine.cs @@ -270,7 +270,23 @@ namespace OpenNest while (madeProgress && !token.IsCancellationRequested) { madeProgress = false; - var freeBoxes = finder.FindRemnants(spacing); + + // Minimum remnant size = smallest remaining part dimension + var minRemnantDim = double.MaxValue; + foreach (var item in effectiveRemainder) + { + if (localQty[item.Drawing.Name] <= 0) + continue; + var bb = item.Drawing.Program.BoundingBox(); + var dim = System.Math.Min(bb.Width, bb.Length); + if (dim < minRemnantDim) + minRemnantDim = dim; + } + + if (minRemnantDim == double.MaxValue) + break; // No items with remaining quantity + + var freeBoxes = finder.FindRemnants(minRemnantDim); if (freeBoxes.Count == 0) break;