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:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user