feat: integrate MultiPlateNester into MainForm auto-nest workflow
Wires part-first mode from AutoNestForm into RunAutoNestAsync: reads PartFirstMode, SortOrder, MinRemnantSize, and AllowPlateCreation from the form, passes them through to a new part-first branch that delegates to MultiPlateNester.Nest instead of the plate-first loop. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -932,6 +932,10 @@ namespace OpenNest.Forms
|
|||||||
var optimizePlateSize = form.OptimizePlateSize;
|
var optimizePlateSize = form.OptimizePlateSize;
|
||||||
var plateOptions = optimizePlateSize ? form.GetPlateOptions() : null;
|
var plateOptions = optimizePlateSize ? form.GetPlateOptions() : null;
|
||||||
var salvageRate = form.SalvageRate;
|
var salvageRate = form.SalvageRate;
|
||||||
|
var partFirstMode = form.PartFirstMode;
|
||||||
|
var sortOrder = form.SortOrder;
|
||||||
|
var minRemnantSize = form.MinRemnantSize;
|
||||||
|
var allowPlateCreation = form.AllowPlateCreation;
|
||||||
|
|
||||||
if (optimizePlateSize)
|
if (optimizePlateSize)
|
||||||
{
|
{
|
||||||
@@ -960,7 +964,7 @@ namespace OpenNest.Forms
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await RunAutoNestAsync(items, progressForm, progress, nestingCts.Token,
|
await RunAutoNestAsync(items, progressForm, progress, nestingCts.Token,
|
||||||
plateOptions, salvageRate);
|
plateOptions, salvageRate, partFirstMode, sortOrder, minRemnantSize, allowPlateCreation);
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -984,8 +988,43 @@ namespace OpenNest.Forms
|
|||||||
IProgress<NestProgress> progress,
|
IProgress<NestProgress> progress,
|
||||||
CancellationToken token,
|
CancellationToken token,
|
||||||
List<PlateOption> plateOptions = null,
|
List<PlateOption> plateOptions = null,
|
||||||
double salvageRate = 0.5)
|
double salvageRate = 0.5,
|
||||||
|
bool partFirstMode = false,
|
||||||
|
PartSortOrder sortOrder = PartSortOrder.BoundingBoxArea,
|
||||||
|
double minRemnantSize = 12.0,
|
||||||
|
bool allowPlateCreation = true)
|
||||||
{
|
{
|
||||||
|
if (partFirstMode)
|
||||||
|
{
|
||||||
|
var existingPlates = new List<Plate>();
|
||||||
|
for (var i = 0; i < activeForm.Nest.Plates.Count; i++)
|
||||||
|
{
|
||||||
|
var p = activeForm.Nest.Plates[i];
|
||||||
|
if (p.Parts.Count > 0)
|
||||||
|
existingPlates.Add(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
var template = activeForm.PlateView.Plate;
|
||||||
|
|
||||||
|
var result = await Task.Run(() =>
|
||||||
|
MultiPlateNester.Nest(items, template, plateOptions, salvageRate,
|
||||||
|
sortOrder, minRemnantSize, allowPlateCreation, existingPlates, progress, token));
|
||||||
|
|
||||||
|
foreach (var pr in result.Plates)
|
||||||
|
{
|
||||||
|
if (pr.IsNew)
|
||||||
|
{
|
||||||
|
var plate = GetOrCreatePlate(progressForm);
|
||||||
|
plate.Size = pr.Plate.Size;
|
||||||
|
plate.Parts.AddRange(pr.Parts);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
activeForm.Nest.UpdateDrawingQuantities();
|
||||||
|
progressForm.ShowCompleted();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const int maxPlates = 100;
|
const int maxPlates = 100;
|
||||||
|
|
||||||
for (var plateIndex = 0; plateIndex < maxPlates; plateIndex++)
|
for (var plateIndex = 0; plateIndex < maxPlates; plateIndex++)
|
||||||
|
|||||||
Reference in New Issue
Block a user