From 4d30178752796938178abca0b44ec3dd4f252ce1 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Mon, 16 Mar 2026 12:51:25 -0400 Subject: [PATCH] refactor: replace ComputeRemainderWithin with RemnantFinder in Nest() Co-Authored-By: Claude Sonnet 4.6 --- OpenNest.Engine/NestEngineBase.cs | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/OpenNest.Engine/NestEngineBase.cs b/OpenNest.Engine/NestEngineBase.cs index 145b490..a71fa1b 100644 --- a/OpenNest.Engine/NestEngineBase.cs +++ b/OpenNest.Engine/NestEngineBase.cs @@ -88,8 +88,12 @@ namespace OpenNest { allParts.AddRange(parts); item.Quantity = System.Math.Max(0, item.Quantity - parts.Count); - var placedBox = parts.Cast().GetBoundingBox(); - workArea = ComputeRemainderWithin(workArea, placedBox, Plate.PartSpacing); + var placedObstacles = parts.Select(p => p.BoundingBox.Offset(Plate.PartSpacing)).ToList(); + var finder = new RemnantFinder(workArea, placedObstacles); + var remnants = finder.FindRemnants(); + if (remnants.Count == 0) + break; + workArea = remnants[0]; // Largest remnant } } @@ -117,21 +121,6 @@ namespace OpenNest return allParts; } - protected static Box ComputeRemainderWithin(Box workArea, Box usedBox, double spacing) - { - var hWidth = workArea.Right - usedBox.Right - spacing; - var hStrip = hWidth > 0 - ? new Box(usedBox.Right + spacing, workArea.Y, hWidth, workArea.Length) - : Box.Empty; - - var vHeight = workArea.Top - usedBox.Top - spacing; - var vStrip = vHeight > 0 - ? new Box(workArea.X, usedBox.Top + spacing, workArea.Width, vHeight) - : Box.Empty; - - return hStrip.Area() >= vStrip.Area() ? hStrip : vStrip; - } - // --- FillExact (non-virtual, delegates to virtual Fill) --- public List FillExact(NestItem item, Box workArea,