feat: serialize plate optimizer settings in nest files

Add PlateOptions and SalvageRate properties to the Nest class and
round-trip them through NestWriter/NestReader via a new PlateOptionDto.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-05 00:38:02 -04:00
parent a360452da3
commit ffd060bf61
4 changed files with 34 additions and 1 deletions
+5
View File
@@ -1,6 +1,7 @@
using OpenNest.Collections; using OpenNest.Collections;
using OpenNest.Geometry; using OpenNest.Geometry;
using System; using System;
using System.Collections.Generic;
namespace OpenNest namespace OpenNest
{ {
@@ -51,6 +52,10 @@ namespace OpenNest
public PlateSettings PlateDefaults { get; set; } public PlateSettings PlateDefaults { get; set; }
public List<PlateOption> PlateOptions { get; set; } = new();
public double SalvageRate { get; set; } = 0.5;
public Plate CreatePlate() public Plate CreatePlate()
{ {
var plate = PlateDefaults.CreateNew(); var plate = PlateDefaults.CreateNew();
+9
View File
@@ -29,6 +29,8 @@ namespace OpenNest.IO
public PlateDefaultsDto PlateDefaults { get; init; } = new(); public PlateDefaultsDto PlateDefaults { get; init; } = new();
public List<DrawingDto> Drawings { get; init; } = new(); public List<DrawingDto> Drawings { get; init; } = new();
public List<PlateDto> Plates { get; init; } = new(); public List<PlateDto> Plates { get; init; } = new();
public List<PlateOptionDto> PlateOptions { get; init; } = new();
public double SalvageRate { get; init; } = 0.5;
} }
public record PlateDefaultsDto public record PlateDefaultsDto
@@ -153,6 +155,13 @@ namespace OpenNest.IO
public string NoteText { get; init; } = ""; public string NoteText { get; init; } = "";
} }
public record PlateOptionDto
{
public double Width { get; init; }
public double Length { get; init; }
public double Cost { get; init; }
}
public record BestFitSetDto public record BestFitSetDto
{ {
public double PlateWidth { get; init; } public double PlateWidth { get; init; }
+12
View File
@@ -192,6 +192,18 @@ namespace OpenNest.IO
nest.PlateDefaults.PartSpacing = pd.PartSpacing; nest.PlateDefaults.PartSpacing = pd.PartSpacing;
nest.PlateDefaults.EdgeSpacing = new Spacing(pd.EdgeSpacing.Left, pd.EdgeSpacing.Bottom, pd.EdgeSpacing.Right, pd.EdgeSpacing.Top); nest.PlateDefaults.EdgeSpacing = new Spacing(pd.EdgeSpacing.Left, pd.EdgeSpacing.Bottom, pd.EdgeSpacing.Right, pd.EdgeSpacing.Top);
// Plate optimizer settings
nest.SalvageRate = dto.SalvageRate;
if (dto.PlateOptions != null)
{
nest.PlateOptions = dto.PlateOptions.Select(o => new PlateOption
{
Width = o.Width,
Length = o.Length,
Cost = o.Cost,
}).ToList();
}
// Drawings // Drawings
foreach (var d in drawingMap.OrderBy(k => k.Key)) foreach (var d in drawingMap.OrderBy(k => k.Key))
nest.Drawings.Add(d.Value); nest.Drawings.Add(d.Value);
+8 -1
View File
@@ -88,7 +88,14 @@ namespace OpenNest.IO
}, },
PlateDefaults = BuildPlateDefaultsDto(), PlateDefaults = BuildPlateDefaultsDto(),
Drawings = BuildDrawingDtos(), Drawings = BuildDrawingDtos(),
Plates = BuildPlateDtos() Plates = BuildPlateDtos(),
PlateOptions = nest.PlateOptions?.Select(o => new PlateOptionDto
{
Width = o.Width,
Length = o.Length,
Cost = o.Cost,
}).ToList() ?? new(),
SalvageRate = nest.SalvageRate,
}; };
} }