diff --git a/CutList/Forms/MainForm.cs b/CutList/Forms/MainForm.cs index 63832c1..71daa6c 100644 --- a/CutList/Forms/MainForm.cs +++ b/CutList/Forms/MainForm.cs @@ -41,8 +41,6 @@ namespace CutList.Forms toolbox = new Toolbox(); cutMethodComboBox.DataSource = toolbox.Tools; - currentDocument = new Document(); - #if DEBUG loadExampleDataButton.Visible = true; #else diff --git a/CutList/Services/CutListService.cs b/CutList/Services/CutListService.cs index 3b0817c..e8c197c 100644 --- a/CutList/Services/CutListService.cs +++ b/CutList/Services/CutListService.cs @@ -27,11 +27,9 @@ namespace CutList.Services var multiBins = ConvertToMultiBins(stockBins); var binItems = ConvertToBinItems(parts); - var engine = new MultiBinEngine - { - Spacing = cuttingTool.Kerf, - Bins = multiBins - }; + var engine = new MultiBinEngine(); + engine.SetBins(multiBins); + engine.Spacing = cuttingTool.Kerf; var packResult = engine.Pack(binItems); return Result.Success(packResult); diff --git a/SawCut/Nesting/MultiBinEngine.cs b/SawCut/Nesting/MultiBinEngine.cs index bec2c34..e4ead14 100644 --- a/SawCut/Nesting/MultiBinEngine.cs +++ b/SawCut/Nesting/MultiBinEngine.cs @@ -15,15 +15,34 @@ namespace SawCut.Nesting public MultiBinEngine(IEngineFactory engineFactory) { _engineFactory = engineFactory ?? throw new ArgumentNullException(nameof(engineFactory)); + _bins = new List(); } - public List Bins { get; set; } + private readonly List _bins; + + /// + /// Gets the read-only collection of bins. + /// Use SetBins() to configure bins for packing. + /// + public IReadOnlyList Bins => _bins.AsReadOnly(); + + /// + /// Sets the bins to use for packing. + /// + public void SetBins(IEnumerable bins) + { + _bins.Clear(); + if (bins != null) + { + _bins.AddRange(bins); + } + } public double Spacing { get; set; } public Result Pack(List items) { - var bins = Bins + var bins = _bins .Where(b => b.Length > 0) .OrderBy(b => b.Priority) .ThenBy(b => b.Length)