Strategies and fillers previously called NestEngineBase.ReportProgress directly, each constructing ProgressReport structs with phase, plate number, and work area manually. Some strategies (RectBestFit) reported nothing at all. This made progress updates inconsistent and flakey. Add FillContext.ReportProgress(parts, description) as the single standard method for intermediate progress. RunPipeline sets ActivePhase before each strategy, and the context handles common fields. Lower-level fillers (PairFiller, FillExtents, StripeFiller) now accept an Action<List<Part>, string> callback instead of raw IProgress, removing their coupling to NestEngineBase and ProgressReport. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
47 lines
1.6 KiB
C#
47 lines
1.6 KiB
C#
using OpenNest.Engine.Fill;
|
|
using OpenNest.Math;
|
|
using System.Collections.Generic;
|
|
|
|
namespace OpenNest.Engine.Strategies
|
|
{
|
|
public class LinearFillStrategy : IFillStrategy
|
|
{
|
|
public string Name => "Linear";
|
|
public NestPhase Phase => NestPhase.Linear;
|
|
public int Order => 400;
|
|
|
|
public List<Part> Fill(FillContext context)
|
|
{
|
|
var angles = context.SharedState.TryGetValue("AngleCandidates", out var cached)
|
|
? (List<double>)cached
|
|
: new List<double> { 0, Angle.HalfPI };
|
|
|
|
var workArea = context.WorkArea;
|
|
var comparer = context.Policy?.Comparer ?? new DefaultFillComparer();
|
|
var preferred = context.Policy?.PreferredDirection;
|
|
|
|
return FillHelpers.BestOverAngles(context, angles,
|
|
angle =>
|
|
{
|
|
var engine = new FillLinear(workArea, context.Plate.PartSpacing) { Label = "Linear" };
|
|
var result = FillHelpers.FillWithDirectionPreference(
|
|
dir => engine.Fill(context.Item.Drawing, angle, dir),
|
|
preferred, comparer, workArea);
|
|
|
|
if (result != null && result.Count > 0)
|
|
{
|
|
context.AngleResults.Add(new AngleResult
|
|
{
|
|
AngleDeg = Angle.ToDegrees(angle),
|
|
Direction = preferred ?? NestDirection.Horizontal,
|
|
PartCount = result.Count
|
|
});
|
|
}
|
|
|
|
return result;
|
|
},
|
|
"Linear");
|
|
}
|
|
}
|
|
}
|