refactor(engine): retarget ML runner to plate filler

This commit is contained in:
aj
2026-09-21 15:52:45 -04:00
parent 6bcea7919a
commit bb671cb176
2 changed files with 11 additions and 8 deletions
+9 -8
View File
@@ -1,6 +1,7 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using OpenNest.Engine.Jobs.Placement.Fillers;
namespace OpenNest.Engine.ML
{
@@ -30,12 +31,12 @@ namespace OpenNest.Engine.ML
bool forceFullAngleSweep = false
)
{
var engine = new DefaultNestEngine(plate);
engine.ForceFullAngleSweep = forceFullAngleSweep;
var filler = new DefaultPlateFiller(plate);
filler.ForceFullAngleSweep = forceFullAngleSweep;
var item = new NestItem { Drawing = drawing };
var sw = Stopwatch.StartNew();
var parts = engine.Fill(
var parts = filler.Fill(
item,
plate.WorkArea(),
null,
@@ -47,9 +48,9 @@ namespace OpenNest.Engine.ML
return null;
// Rank phase results — winner is explicit, runners-up sorted by count.
var winner = engine.PhaseResults.FirstOrDefault(r => r.Phase == engine.WinnerPhase);
var runnerUps = engine
.PhaseResults.Where(r => r.PartCount > 0 && r.Phase != engine.WinnerPhase)
var winner = filler.PhaseResults.FirstOrDefault(r => r.Phase == filler.WinnerPhase);
var runnerUps = filler
.PhaseResults.Where(r => r.PartCount > 0 && r.Phase != filler.WinnerPhase)
.OrderByDescending(r => r.PartCount)
.ToList();
@@ -60,7 +61,7 @@ namespace OpenNest.Engine.ML
TimeMs = sw.ElapsedMilliseconds,
LayoutData = SerializeLayout(parts),
PlacedParts = parts,
WinnerEngine = engine.WinnerPhase.ToString(),
WinnerEngine = filler.WinnerPhase.ToString(),
WinnerTimeMs = winner?.TimeMs ?? 0,
RunnerUpEngine = runnerUps.Count > 0 ? runnerUps[0].Phase.ToString() : "",
RunnerUpPartCount = runnerUps.Count > 0 ? runnerUps[0].PartCount : 0,
@@ -68,7 +69,7 @@ namespace OpenNest.Engine.ML
ThirdPlaceEngine = runnerUps.Count > 1 ? runnerUps[1].Phase.ToString() : "",
ThirdPlacePartCount = runnerUps.Count > 1 ? runnerUps[1].PartCount : 0,
ThirdPlaceTimeMs = runnerUps.Count > 1 ? runnerUps[1].TimeMs : 0,
AngleResults = engine.AngleResults.ToList(),
AngleResults = filler.AngleResults.ToList(),
};
}
@@ -115,5 +115,7 @@ public class EngineRefactorSmokeTests
Assert.NotNull(result);
Assert.True(result.PartCount > 0);
Assert.False(string.IsNullOrWhiteSpace(result.WinnerEngine));
Assert.NotEmpty(result.AngleResults);
}
}