using CutList.Core.Nesting.Pipeline; namespace CutList.Core.Nesting { /// /// Advanced bin packing engine using First-Fit Decreasing with optimization. /// This is a stateless engine that uses a composable pipeline of steps. /// public class AdvancedFitEngine : IEngine { private readonly PackingPipeline _pipeline; public AdvancedFitEngine() { _pipeline = new PackingPipeline() .AddStep(new FilterOversizedItemsStep()) .AddStep(new SortItemsDescendingStep()) .AddStep(new FirstFitDecreasingStep()) .AddStep(new OptimizationStep()) .AddStep(new SortBinItemsStep()) .AddStep(new DuplicateBinsStep()) .AddStep(new SortBinsByUtilizationStep()); } /// /// Packs items into bins using the FFD algorithm with optimization passes. /// public PackResult Pack(PackingRequest request) { return _pipeline.Execute(request); } } }