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>
49 lines
1.7 KiB
C#
49 lines
1.7 KiB
C#
using OpenNest.Engine;
|
|
using OpenNest.Engine.Fill;
|
|
using OpenNest.Geometry;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading;
|
|
|
|
namespace OpenNest.Engine.Strategies
|
|
{
|
|
public class FillContext
|
|
{
|
|
public NestItem Item { get; init; }
|
|
public Box WorkArea { get; init; }
|
|
public Plate Plate { get; init; }
|
|
public int PlateNumber { get; init; }
|
|
public CancellationToken Token { get; init; }
|
|
public IProgress<NestProgress> Progress { get; init; }
|
|
public FillPolicy Policy { get; init; }
|
|
public int MaxQuantity { get; init; }
|
|
public PartType PartType { get; set; }
|
|
|
|
public List<Part> CurrentBest { get; set; }
|
|
/// <summary>For progress reporting only; comparisons use Policy.Comparer.</summary>
|
|
public FillScore CurrentBestScore { get; set; }
|
|
public NestPhase WinnerPhase { get; set; }
|
|
public NestPhase ActivePhase { get; set; }
|
|
public List<PhaseResult> PhaseResults { get; } = new();
|
|
public List<AngleResult> AngleResults { get; } = new();
|
|
|
|
public Dictionary<string, object> SharedState { get; } = new();
|
|
|
|
/// <summary>
|
|
/// Standard progress reporting for strategies and fillers. Reports intermediate
|
|
/// results using the current ActivePhase, PlateNumber, and WorkArea.
|
|
/// </summary>
|
|
public void ReportProgress(List<Part> parts, string description)
|
|
{
|
|
NestEngineBase.ReportProgress(Progress, new ProgressReport
|
|
{
|
|
Phase = ActivePhase,
|
|
PlateNumber = PlateNumber,
|
|
Parts = parts,
|
|
WorkArea = WorkArea,
|
|
Description = description,
|
|
});
|
|
}
|
|
}
|
|
}
|