From fb067187b4f3c38706d7d1a832fdd0e23d46eeb3 Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Wed, 1 Apr 2026 09:24:32 -0400 Subject: [PATCH] fix: ensure absolute coordinates and .lib extension in post output Convert programs to absolute mode before extracting features for Cincinnati post output, fixing incorrect coordinates when programs are stored in incremental mode. Also ensure G89 library names always end with .lib extension. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../CincinnatiPartSubprogramWriter.cs | 1 + OpenNest.Posts.Cincinnati/FeatureUtils.cs | 7 +++++-- .../MaterialLibraryResolver.cs | 15 +++++++++++++-- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/OpenNest.Posts.Cincinnati/CincinnatiPartSubprogramWriter.cs b/OpenNest.Posts.Cincinnati/CincinnatiPartSubprogramWriter.cs index f08f62e..38f944b 100644 --- a/OpenNest.Posts.Cincinnati/CincinnatiPartSubprogramWriter.cs +++ b/OpenNest.Posts.Cincinnati/CincinnatiPartSubprogramWriter.cs @@ -99,6 +99,7 @@ public sealed class CincinnatiPartSubprogramWriter mapping[key] = subNum; var pgm = part.Program.Clone() as Program; + pgm.Mode = Mode.Absolute; var bbox = pgm.BoundingBox(); pgm.Offset(-bbox.Location.X, -bbox.Location.Y); diff --git a/OpenNest.Posts.Cincinnati/FeatureUtils.cs b/OpenNest.Posts.Cincinnati/FeatureUtils.cs index 20fc501..e4384b5 100644 --- a/OpenNest.Posts.Cincinnati/FeatureUtils.cs +++ b/OpenNest.Posts.Cincinnati/FeatureUtils.cs @@ -69,8 +69,11 @@ public static class FeatureUtils /// Splits a part's program into features by rapids, classifies each as etch or cut, /// and orders etch features before cut features. /// - public static List<(List codes, bool isEtch)> SplitAndClassify(Part part) => - ClassifyAndOrder(SplitByRapids(part.Program.Codes)); + public static List<(List codes, bool isEtch)> SplitAndClassify(Part part) + { + part.Program.Mode = Mode.Absolute; + return ClassifyAndOrder(SplitByRapids(part.Program.Codes)); + } /// /// Returns true if any non-rapid move in the feature has LayerType.Scribe. diff --git a/OpenNest.Posts.Cincinnati/MaterialLibraryResolver.cs b/OpenNest.Posts.Cincinnati/MaterialLibraryResolver.cs index 6fca9e3..a42c2c4 100644 --- a/OpenNest.Posts.Cincinnati/MaterialLibraryResolver.cs +++ b/OpenNest.Posts.Cincinnati/MaterialLibraryResolver.cs @@ -24,7 +24,7 @@ public sealed class MaterialLibraryResolver System.Math.Abs(e.Thickness - thickness) <= ThicknessTolerance && string.Equals(e.Gas, gas, StringComparison.OrdinalIgnoreCase)); - return entry?.Library ?? ""; + return EnsureLibExtension(entry?.Library ?? ""); } public string ResolveEtchLibrary(string gas) @@ -32,7 +32,18 @@ public sealed class MaterialLibraryResolver var entry = _etchLibraries.FirstOrDefault(e => string.Equals(e.Gas, gas, StringComparison.OrdinalIgnoreCase)); - return entry?.Library ?? ""; + return EnsureLibExtension(entry?.Library ?? ""); + } + + private static string EnsureLibExtension(string library) + { + if (string.IsNullOrEmpty(library)) + return library; + + if (!library.EndsWith(".lib", StringComparison.OrdinalIgnoreCase)) + return library + ".lib"; + + return library; } public static string ResolveGas(Nest nest, CincinnatiPostConfig config)