From c9b5ee1918ea0a0162b90ebb7d78d3b2d9f1b07b Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Mon, 30 Mar 2026 13:29:49 -0400 Subject: [PATCH] feat: serialize HasManualLeadIns, LeadInsLocked, and :SUPPRESSED in nest files Co-Authored-By: Claude Opus 4.6 (1M context) --- OpenNest.IO/NestFormat.cs | 2 + OpenNest.IO/NestReader.cs | 2 + OpenNest.IO/NestWriter.cs | 10 ++++- OpenNest.IO/ProgramReader.cs | 77 ++++++++++++++++++++++-------------- 4 files changed, 60 insertions(+), 31 deletions(-) diff --git a/OpenNest.IO/NestFormat.cs b/OpenNest.IO/NestFormat.cs index 26b01af..7aa326a 100644 --- a/OpenNest.IO/NestFormat.cs +++ b/OpenNest.IO/NestFormat.cs @@ -74,6 +74,8 @@ namespace OpenNest.IO public double X { get; init; } public double Y { get; init; } public double Rotation { get; init; } + public bool HasManualLeadIns { get; init; } + public bool LeadInsLocked { get; init; } } public record CutOffDto diff --git a/OpenNest.IO/NestReader.cs b/OpenNest.IO/NestReader.cs index 9a35d19..1cb49a5 100644 --- a/OpenNest.IO/NestReader.cs +++ b/OpenNest.IO/NestReader.cs @@ -214,6 +214,8 @@ namespace OpenNest.IO var part = new Part(dwg); part.Rotate(partDto.Rotation); part.Offset(new Vector(partDto.X, partDto.Y)); + part.HasManualLeadIns = partDto.HasManualLeadIns; + part.LeadInsLocked = partDto.LeadInsLocked; plate.Parts.Add(part); } diff --git a/OpenNest.IO/NestWriter.cs b/OpenNest.IO/NestWriter.cs index f66ecb4..52292bc 100644 --- a/OpenNest.IO/NestWriter.cs +++ b/OpenNest.IO/NestWriter.cs @@ -173,7 +173,9 @@ namespace OpenNest.IO DrawingId = match.Key, X = part.Location.X, Y = part.Location.Y, - Rotation = part.Rotation + Rotation = part.Rotation, + HasManualLeadIns = part.HasManualLeadIns, + LeadInsLocked = part.LeadInsLocked }); } @@ -336,6 +338,9 @@ namespace OpenNest.IO if (arcMove.Layer != LayerType.Cut) sb.Append(GetLayerString(arcMove.Layer)); + if (arcMove.Suppressed) + sb.Append(":SUPPRESSED"); + return sb.ToString(); } @@ -357,6 +362,9 @@ namespace OpenNest.IO if (linearMove.Layer != LayerType.Cut) sb.Append(GetLayerString(linearMove.Layer)); + if (linearMove.Suppressed) + sb.Append(":SUPPRESSED"); + return sb.ToString(); } diff --git a/OpenNest.IO/ProgramReader.cs b/OpenNest.IO/ProgramReader.cs index 316f42a..ab2e896 100644 --- a/OpenNest.IO/ProgramReader.cs +++ b/OpenNest.IO/ProgramReader.cs @@ -142,6 +142,7 @@ namespace OpenNest.IO double x = 0; double y = 0; var layer = LayerType.Cut; + var suppressed = false; while (section == CodeSection.Line) { @@ -164,25 +165,32 @@ namespace OpenNest.IO case ':': { - var value = code.Value.Trim().ToUpper(); + var tags = code.Value.Trim().ToUpper().Split(':'); - switch (value) + foreach (var tag in tags) { - case "DISPLAY": - layer = LayerType.Display; - break; + switch (tag) + { + case "DISPLAY": + layer = LayerType.Display; + break; - case "LEADIN": - layer = LayerType.Leadin; - break; + case "LEADIN": + layer = LayerType.Leadin; + break; - case "LEADOUT": - layer = LayerType.Leadout; - break; + case "LEADOUT": + layer = LayerType.Leadout; + break; - case "SCRIBE": - layer = LayerType.Scribe; - break; + case "SCRIBE": + layer = LayerType.Scribe; + break; + + case "SUPPRESSED": + suppressed = true; + break; + } } break; } @@ -195,7 +203,7 @@ namespace OpenNest.IO if (isRapid) program.Codes.Add(new RapidMove(x, y)); else - program.Codes.Add(new LinearMove(x, y) { Layer = layer }); + program.Codes.Add(new LinearMove(x, y) { Layer = layer, Suppressed = suppressed }); } private void ReadArc(RotationType rotation) @@ -205,6 +213,7 @@ namespace OpenNest.IO double i = 0; double j = 0; var layer = LayerType.Cut; + var suppressed = false; while (section == CodeSection.Arc) { @@ -236,25 +245,32 @@ namespace OpenNest.IO case ':': { - var value = code.Value.Trim().ToUpper(); + var tags = code.Value.Trim().ToUpper().Split(':'); - switch (value) + foreach (var tag in tags) { - case "DISPLAY": - layer = LayerType.Display; - break; + switch (tag) + { + case "DISPLAY": + layer = LayerType.Display; + break; - case "LEADIN": - layer = LayerType.Leadin; - break; + case "LEADIN": + layer = LayerType.Leadin; + break; - case "LEADOUT": - layer = LayerType.Leadout; - break; + case "LEADOUT": + layer = LayerType.Leadout; + break; - case "SCRIBE": - layer = LayerType.Scribe; - break; + case "SCRIBE": + layer = LayerType.Scribe; + break; + + case "SUPPRESSED": + suppressed = true; + break; + } } break; } @@ -269,7 +285,8 @@ namespace OpenNest.IO EndPoint = new Vector(x, y), CenterPoint = new Vector(i, j), Rotation = rotation, - Layer = layer + Layer = layer, + Suppressed = suppressed }); }