feat: serialize/deserialize bends in nest file format

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-24 20:22:55 -04:00
parent 7056f8816f
commit dd2892a9fe
4 changed files with 139 additions and 2 deletions

View File

@@ -50,6 +50,7 @@ namespace OpenNest.IO
public ConstraintsDto Constraints { get; init; } = new();
public MaterialDto Material { get; init; } = new();
public SourceDto Source { get; init; } = new();
public List<BendDto> Bends { get; init; } = new();
}
public record PlateDto
@@ -62,6 +63,7 @@ namespace OpenNest.IO
public double PartSpacing { get; init; }
public MaterialDto Material { get; init; } = new();
public SpacingDto EdgeSpacing { get; init; } = new();
public double GrainAngle { get; init; }
public List<PartDto> Parts { get; init; } = new();
public List<CutOffDto> CutOffs { get; init; } = new();
}
@@ -137,6 +139,18 @@ namespace OpenNest.IO
public double Y { get; init; }
}
public record BendDto
{
public double StartX { get; init; }
public double StartY { get; init; }
public double EndX { get; init; }
public double EndY { get; init; }
public string Direction { get; init; } = "Unknown";
public double? Angle { get; init; }
public double? Radius { get; init; }
public string NoteText { get; init; } = "";
}
public record BestFitSetDto
{
public double PlateWidth { get; init; }

View File

@@ -1,3 +1,4 @@
using OpenNest.Bending;
using OpenNest.CNC;
using OpenNest.Engine.BestFit;
using OpenNest.Geometry;
@@ -91,6 +92,23 @@ namespace OpenNest.IO
drawing.Source.Path = d.Source.Path;
drawing.Source.Offset = new Vector(d.Source.Offset.X, d.Source.Offset.Y);
if (d.Bends != null)
{
foreach (var b in d.Bends)
{
drawing.Bends.Add(new Bend
{
StartPoint = new Vector(b.StartX, b.StartY),
EndPoint = new Vector(b.EndX, b.EndY),
Direction = Enum.TryParse<BendDirection>(b.Direction, true, out var dir)
? dir : BendDirection.Unknown,
Angle = b.Angle,
Radius = b.Radius,
NoteText = b.NoteText
});
}
}
if (programs.TryGetValue(d.Id, out var pgm))
drawing.Program = pgm;
@@ -186,6 +204,7 @@ namespace OpenNest.IO
plate.PartSpacing = p.PartSpacing;
plate.Material = new Material(p.Material.Name, p.Material.Grade, p.Material.Density);
plate.EdgeSpacing = new Spacing(p.EdgeSpacing.Left, p.EdgeSpacing.Bottom, p.EdgeSpacing.Right, p.EdgeSpacing.Top);
plate.GrainAngle = p.GrainAngle;
foreach (var partDto in p.Parts)
{

View File

@@ -1,3 +1,4 @@
using OpenNest.Bending;
using OpenNest.CNC;
using OpenNest.Engine.BestFit;
using System;
@@ -140,7 +141,18 @@ namespace OpenNest.IO
{
Path = d.Source.Path ?? "",
Offset = new OffsetDto { X = d.Source.Offset.X, Y = d.Source.Offset.Y }
}
},
Bends = d.Bends?.Select(b => new BendDto
{
StartX = b.StartPoint.X,
StartY = b.StartPoint.Y,
EndX = b.EndPoint.X,
EndY = b.EndPoint.Y,
Direction = b.Direction.ToString(),
Angle = b.Angle,
Radius = b.Radius,
NoteText = b.NoteText ?? ""
}).ToList() ?? new List<BendDto>()
});
}
return list;
@@ -200,7 +212,8 @@ namespace OpenNest.IO
Bottom = plate.EdgeSpacing.Bottom
},
Parts = parts,
CutOffs = cutoffs
CutOffs = cutoffs,
GrainAngle = plate.GrainAngle
});
}
return list;