feat: add LeadInAssigner for auto-assigning lead-ins to plate parts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-30 13:26:43 -04:00
parent a2a19938d3
commit f34dce95da
2 changed files with 138 additions and 0 deletions

View File

@@ -0,0 +1,40 @@
using OpenNest.Engine.Sequencing;
using OpenNest.Geometry;
using System.Linq;
namespace OpenNest.Engine
{
public class LeadInAssigner
{
public IPartSequencer Sequencer { get; set; }
public void Assign(Plate plate)
{
var parameters = plate.CuttingParameters;
if (parameters == null)
return;
var sequenced = Sequencer.Sequence(plate.Parts.ToList(), plate);
var currentPoint = PlateHelper.GetExitPoint(plate);
foreach (var sp in sequenced)
{
var part = sp.Part;
if (part.LeadInsLocked)
{
currentPoint = part.Location;
continue;
}
if (part.HasManualLeadIns)
part.RemoveLeadIns();
var localApproach = currentPoint - part.Location;
part.ApplyLeadIns(parameters, localApproach);
currentPoint = part.Location;
}
}
}
}