Introduces PartClass enum and Classify() static method that categorizes parts as Large (exceeds half work area in either dimension), Medium (area > 1/9 work area), or Small. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
61 lines
1.7 KiB
C#
61 lines
1.7 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using OpenNest.Geometry;
|
|
|
|
namespace OpenNest
|
|
{
|
|
public enum PartClass
|
|
{
|
|
Large,
|
|
Medium,
|
|
Small,
|
|
}
|
|
|
|
public static class MultiPlateNester
|
|
{
|
|
public static List<NestItem> SortItems(List<NestItem> items, PartSortOrder sortOrder)
|
|
{
|
|
switch (sortOrder)
|
|
{
|
|
case PartSortOrder.BoundingBoxArea:
|
|
return items
|
|
.OrderByDescending(i =>
|
|
{
|
|
var bb = i.Drawing.Program.BoundingBox();
|
|
return bb.Width * bb.Length;
|
|
})
|
|
.ToList();
|
|
|
|
case PartSortOrder.Size:
|
|
return items
|
|
.OrderByDescending(i =>
|
|
{
|
|
var bb = i.Drawing.Program.BoundingBox();
|
|
return System.Math.Max(bb.Width, bb.Length);
|
|
})
|
|
.ToList();
|
|
|
|
default:
|
|
return items.ToList();
|
|
}
|
|
}
|
|
|
|
public static PartClass Classify(Box partBounds, Box workArea)
|
|
{
|
|
var halfWidth = workArea.Width / 2.0;
|
|
var halfLength = workArea.Length / 2.0;
|
|
|
|
if (partBounds.Width > halfWidth || partBounds.Length > halfLength)
|
|
return PartClass.Large;
|
|
|
|
var workAreaArea = workArea.Width * workArea.Length;
|
|
var partArea = partBounds.Width * partBounds.Length;
|
|
|
|
if (partArea > workAreaArea / 9.0)
|
|
return PartClass.Medium;
|
|
|
|
return PartClass.Small;
|
|
}
|
|
}
|
|
}
|