using System.Collections.Generic; using OpenNest.Engine.Fill; using OpenNest.Math; namespace OpenNest.Engine.Strategies { public class LinearFillStrategy : IFillStrategy { public string Name => "Linear"; public NestPhase Phase => NestPhase.Linear; public int Order => 400; public List Fill(FillContext context) { var angles = context.SharedState.TryGetValue("AngleCandidates", out var cached) ? (List)cached : new List { 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" ); } } }