diff --git a/OpenNest/Actions/ActionFillArea.cs b/OpenNest/Actions/ActionFillArea.cs index 00d2da3..4101232 100644 --- a/OpenNest/Actions/ActionFillArea.cs +++ b/OpenNest/Actions/ActionFillArea.cs @@ -47,7 +47,7 @@ namespace OpenNest.Actions { try { - var engine = new NestEngine(plateView.Plate); + var engine = NestEngineRegistry.Create(plateView.Plate); var parts = await Task.Run(() => engine.Fill(new NestItem { Drawing = drawing }, SelectedArea, progress, cts.Token)); @@ -61,7 +61,7 @@ namespace OpenNest.Actions } else { - var engine = new NestEngine(plateView.Plate); + var engine = NestEngineRegistry.Create(plateView.Plate); engine.Fill(new NestItem { Drawing = drawing }, SelectedArea); plateView.Invalidate(); } diff --git a/OpenNest/Controls/PlateView.cs b/OpenNest/Controls/PlateView.cs index 5db1be3..5d884ac 100644 --- a/OpenNest/Controls/PlateView.cs +++ b/OpenNest/Controls/PlateView.cs @@ -833,7 +833,7 @@ namespace OpenNest.Controls try { - var engine = new NestEngine(Plate); + var engine = NestEngineRegistry.Create(Plate); var parts = await Task.Run(() => engine.Fill(groupParts, workArea, progress, cts.Token)); diff --git a/OpenNest/Forms/MainForm.cs b/OpenNest/Forms/MainForm.cs index a90a5e7..afdf448 100644 --- a/OpenNest/Forms/MainForm.cs +++ b/OpenNest/Forms/MainForm.cs @@ -53,6 +53,9 @@ namespace OpenNest.Forms if (GpuEvaluatorFactory.GpuAvailable) BestFitCache.CreateSlideComputer = () => GpuEvaluatorFactory.CreateSlideComputer(); + + var enginesDir = Path.Combine(Application.StartupPath, "Engines"); + NestEngineRegistry.LoadPlugins(enginesDir); } private Nest CreateDefaultNest() @@ -794,7 +797,8 @@ namespace OpenNest.Forms if (workArea.Width <= 0 || workArea.Length <= 0) break; - var engine = new NestEngine(plate) { PlateNumber = plateCount }; + var engine = NestEngineRegistry.Create(plate); + engine.PlateNumber = plateCount; var parts = await Task.Run(() => engine.FillExact(item, workArea, progress, token)); @@ -826,10 +830,10 @@ namespace OpenNest.Forms if (packItems.Count > 0 && workArea.Width > 0 && workArea.Length > 0 && !token.IsCancellationRequested) { - var engine = new NestEngine(plate); - var partsBefore = plate.Parts.Count; - engine.PackArea(workArea, packItems); - var packed = plate.Parts.Count - partsBefore; + var engine = NestEngineRegistry.Create(plate); + var packParts = engine.PackArea(workArea, packItems, null, CancellationToken.None); + plate.Parts.AddRange(packParts); + var packed = packParts.Count; if (packed > 0) { @@ -962,7 +966,7 @@ namespace OpenNest.Forms try { var plate = activeForm.PlateView.Plate; - var engine = new NestEngine(plate); + var engine = NestEngineRegistry.Create(plate); var parts = await Task.Run(() => engine.Fill(new NestItem { Drawing = drawing },