feat: add scrap zone identification to MultiPlateNester

Adds IsScrapRemnant(), FindScrapZones(), and FindViableRemnants() to
MultiPlateNester. A remnant is scrap only when both dimensions fall
below the minimum remnant size threshold (AND logic, not OR).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-06 13:53:32 -04:00
parent 35e89600d0
commit af57153269
2 changed files with 79 additions and 0 deletions

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
using OpenNest.Engine.Fill;
using OpenNest.Geometry;
namespace OpenNest
@@ -56,5 +57,40 @@ namespace OpenNest
return PartClass.Small;
}
public static bool IsScrapRemnant(Box remnant, double minRemnantSize)
{
return remnant.Width < minRemnantSize && remnant.Length < minRemnantSize;
}
public static List<Box> FindScrapZones(Plate plate, double minRemnantSize)
{
var finder = RemnantFinder.FromPlate(plate);
var remnants = finder.FindRemnants();
var scrap = new List<Box>();
foreach (var remnant in remnants)
{
if (IsScrapRemnant(remnant, minRemnantSize))
scrap.Add(remnant);
}
return scrap;
}
public static List<Box> FindViableRemnants(Plate plate, double minRemnantSize)
{
var finder = RemnantFinder.FromPlate(plate);
var remnants = finder.FindRemnants();
var viable = new List<Box>();
foreach (var remnant in remnants)
{
if (!IsScrapRemnant(remnant, minRemnantSize))
viable.Add(remnant);
}
return viable;
}
}
}