From c825f40213e7169d2138011b650246995641a47b Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Sat, 26 Sep 2026 22:35:23 -0400 Subject: [PATCH] refactor(posts): move post-processor projects under Posts/ Group the Cincinnati and GravographIS plugin projects in a Posts/ folder so new machine posts have one home. Project names, namespaces, and the runtime Posts/ deploy target are unchanged; only relative paths in the solution and project references move. --- AGENTS.md | 4 ++-- OpenNest.Tests/OpenNest.Tests.csproj | 4 ++-- OpenNest.sln | 4 ++-- OpenNest/OpenNest.csproj | 2 +- .../OpenNest.Posts.Cincinnati}/CincinnatiFeatureWriter.cs | 0 .../CincinnatiPartSubprogramWriter.cs | 0 .../OpenNest.Posts.Cincinnati}/CincinnatiPostConfig.cs | 0 .../OpenNest.Posts.Cincinnati}/CincinnatiPostProcessor.cs | 0 .../OpenNest.Posts.Cincinnati}/CincinnatiPreambleWriter.cs | 0 .../OpenNest.Posts.Cincinnati}/CincinnatiSheetWriter.cs | 0 .../OpenNest.Posts.Cincinnati}/CoordinateFormatter.cs | 0 .../OpenNest.Posts.Cincinnati}/FeatureUtils.cs | 0 .../MaterialLibraryNameConverter.cs | 0 .../OpenNest.Posts.Cincinnati}/MaterialLibraryResolver.cs | 0 .../OpenNest.Posts.Cincinnati.csproj | 4 ++-- .../OpenNest.Posts.Cincinnati}/OpenNest.Posts.Cincinnati.json | 0 .../OpenNest.Posts.Cincinnati}/SpeedClassifier.cs | 0 .../OpenNest.Posts.GravographIS}/GravographISPort.cs | 0 .../OpenNest.Posts.GravographIS}/GravographISPostConfig.cs | 0 .../OpenNest.Posts.GravographIS}/GravographISPostProcessor.cs | 0 .../OpenNest.Posts.GravographIS}/GravographISWriter.cs | 0 .../OpenNest.Posts.GravographIS}/GravographISWriterOptions.cs | 0 .../OpenNest.Posts.GravographIS}/NestPolylineExtractor.cs | 0 .../OpenNest.Posts.GravographIS.csproj | 4 ++-- .../OpenNest.Posts.GravographIS}/PolylinePrePass.cs | 0 README.md | 2 +- 26 files changed, 12 insertions(+), 12 deletions(-) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/CincinnatiFeatureWriter.cs (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/CincinnatiPartSubprogramWriter.cs (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/CincinnatiPostConfig.cs (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/CincinnatiPostProcessor.cs (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/CincinnatiPreambleWriter.cs (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/CincinnatiSheetWriter.cs (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/CoordinateFormatter.cs (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/FeatureUtils.cs (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/MaterialLibraryNameConverter.cs (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/MaterialLibraryResolver.cs (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/OpenNest.Posts.Cincinnati.csproj (86%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/OpenNest.Posts.Cincinnati.json (100%) rename {OpenNest.Posts.Cincinnati => Posts/OpenNest.Posts.Cincinnati}/SpeedClassifier.cs (100%) rename {OpenNest.Posts.GravographIS => Posts/OpenNest.Posts.GravographIS}/GravographISPort.cs (100%) rename {OpenNest.Posts.GravographIS => Posts/OpenNest.Posts.GravographIS}/GravographISPostConfig.cs (100%) rename {OpenNest.Posts.GravographIS => Posts/OpenNest.Posts.GravographIS}/GravographISPostProcessor.cs (100%) rename {OpenNest.Posts.GravographIS => Posts/OpenNest.Posts.GravographIS}/GravographISWriter.cs (100%) rename {OpenNest.Posts.GravographIS => Posts/OpenNest.Posts.GravographIS}/GravographISWriterOptions.cs (100%) rename {OpenNest.Posts.GravographIS => Posts/OpenNest.Posts.GravographIS}/NestPolylineExtractor.cs (100%) rename {OpenNest.Posts.GravographIS => Posts/OpenNest.Posts.GravographIS}/OpenNest.Posts.GravographIS.csproj (79%) rename {OpenNest.Posts.GravographIS => Posts/OpenNest.Posts.GravographIS}/PolylinePrePass.cs (100%) diff --git a/AGENTS.md b/AGENTS.md index 5b41a37..c3cd07b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -14,7 +14,7 @@ This is a .NET 8 solution using SDK-style `.csproj` files. The desktop app and W dotnet build OpenNest.sln ``` -Cross-platform whole-job engine tests (net8.0, runs on Linux/macOS/Windows without the desktop project or DXF fixtures): `dotnet test OpenNest.Engine.Tests/OpenNest.Engine.Tests.csproj`. The main `OpenNest.Tests` suite also targets `net8.0`: run `dotnet test OpenNest.Tests/OpenNest.Tests.csproj` independently on Linux/macOS/Windows. It must not reference the WinForms `OpenNest` project. The API, Data, Cincinnati, and GravographIS libraries target `net8.0`; post-processor build deployment still targets the desktop app's `net8.0-windows/Posts` directory. Optional CHR-font fixtures are configured through `OpenNest.Tests/test-config.json` and skip when absent. +Cross-platform whole-job engine tests (net8.0, runs on Linux/macOS/Windows without the desktop project or DXF fixtures): `dotnet test OpenNest.Engine.Tests/OpenNest.Engine.Tests.csproj`. The main `OpenNest.Tests` suite also targets `net8.0`: run `dotnet test OpenNest.Tests/OpenNest.Tests.csproj` independently on Linux/macOS/Windows. It must not reference the WinForms `OpenNest` project. The API, Data, and post-processor libraries target `net8.0`. Post-processor projects live under `Posts/` (`Posts/OpenNest.Posts./`, referencing `..\..\OpenNest.Core`); their build deployment still targets the desktop app's `net8.0-windows/Posts` directory. Optional CHR-font fixtures are configured through `OpenNest.Tests/test-config.json` and skip when absent. `OpenNest.WinForms.Tests` contains the desktop-assembly-dependent `CadBendNoteTests` (`CadText`) and `CuttingParametersSerializerTests` (`CuttingParametersSerializer`). It targets `net8.0-windows`, references `OpenNest`, and requires a Windows runner: `dotnet test OpenNest.WinForms.Tests/OpenNest.WinForms.Tests.csproj`. Keep future desktop-dependent tests here rather than in `OpenNest.Tests`. Linux cross-compilation uses `dotnet build OpenNest.WinForms.Tests/OpenNest.WinForms.Tests.csproj -p:EnableWindowsTargeting=true`; cross-compilation is not Windows runtime verification. @@ -110,7 +110,7 @@ The UI application with MDI interface. - **Forms/**: `MainForm` (MDI parent), `EditNestForm` (MDI child per nest), `SplitDrawingForm` (split oversized drawings into smaller pieces, launched from CadConverterForm), plus dialogs for plate editing, auto-nesting, DXF conversion, cut parameters, etc. - **Controls/**: `PlateView` (2D plate renderer with zoom/pan, supports temporary preview parts), `DrawingListBox`, `DrawControl`, `QuadrantSelect`. - **Actions/**: User interaction modes — `ActionSelect`, `ActionClone`, `ActionFillArea`, `ActionSelectArea`, `ActionZoomWindow`, `ActionSetSequence`, `ActionCutOff`. -- **Post-processing**: `IPostProcessor` plugin interface loaded from DLLs in a `Posts/` directory at runtime. +- **Post-processing**: `IPostProcessor` plugin interface loaded from DLLs in a `Posts/` directory at runtime. Plugin sources live in the repository's `Posts/` folder (the solution's `PostProcessors` folder). ## File Format diff --git a/OpenNest.Tests/OpenNest.Tests.csproj b/OpenNest.Tests/OpenNest.Tests.csproj index cf0b302..ba03b22 100644 --- a/OpenNest.Tests/OpenNest.Tests.csproj +++ b/OpenNest.Tests/OpenNest.Tests.csproj @@ -28,8 +28,8 @@ - - + + diff --git a/OpenNest.sln b/OpenNest.sln index f925c30..25e0a69 100644 --- a/OpenNest.sln +++ b/OpenNest.sln @@ -28,9 +28,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenNest.Api", "OpenNest.Ap EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "PostProcessors", "PostProcessors", "{4052CFAC-1F12-48BE-872D-F503C3B65D7E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenNest.Posts.Cincinnati", "OpenNest.Posts.Cincinnati\OpenNest.Posts.Cincinnati.csproj", "{FB1B2EB2-9D80-4499-BA93-B4E2F295A532}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenNest.Posts.Cincinnati", "Posts\OpenNest.Posts.Cincinnati\OpenNest.Posts.Cincinnati.csproj", "{FB1B2EB2-9D80-4499-BA93-B4E2F295A532}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenNest.Posts.GravographIS", "OpenNest.Posts.GravographIS\OpenNest.Posts.GravographIS.csproj", "{3A6B8E7E-9B5F-4D2C-8AE3-2C9F5E3D1A40}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenNest.Posts.GravographIS", "Posts\OpenNest.Posts.GravographIS\OpenNest.Posts.GravographIS.csproj", "{3A6B8E7E-9B5F-4D2C-8AE3-2C9F5E3D1A40}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenNest.Data", "OpenNest.Data\OpenNest.Data.csproj", "{A0B4B48E-1DF0-4DD3-B42C-B9B7779EA8B0}" EndProject diff --git a/OpenNest/OpenNest.csproj b/OpenNest/OpenNest.csproj index 82d6615..b93048f 100644 --- a/OpenNest/OpenNest.csproj +++ b/OpenNest/OpenNest.csproj @@ -27,7 +27,7 @@ - + diff --git a/OpenNest.Posts.Cincinnati/CincinnatiFeatureWriter.cs b/Posts/OpenNest.Posts.Cincinnati/CincinnatiFeatureWriter.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/CincinnatiFeatureWriter.cs rename to Posts/OpenNest.Posts.Cincinnati/CincinnatiFeatureWriter.cs diff --git a/OpenNest.Posts.Cincinnati/CincinnatiPartSubprogramWriter.cs b/Posts/OpenNest.Posts.Cincinnati/CincinnatiPartSubprogramWriter.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/CincinnatiPartSubprogramWriter.cs rename to Posts/OpenNest.Posts.Cincinnati/CincinnatiPartSubprogramWriter.cs diff --git a/OpenNest.Posts.Cincinnati/CincinnatiPostConfig.cs b/Posts/OpenNest.Posts.Cincinnati/CincinnatiPostConfig.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/CincinnatiPostConfig.cs rename to Posts/OpenNest.Posts.Cincinnati/CincinnatiPostConfig.cs diff --git a/OpenNest.Posts.Cincinnati/CincinnatiPostProcessor.cs b/Posts/OpenNest.Posts.Cincinnati/CincinnatiPostProcessor.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/CincinnatiPostProcessor.cs rename to Posts/OpenNest.Posts.Cincinnati/CincinnatiPostProcessor.cs diff --git a/OpenNest.Posts.Cincinnati/CincinnatiPreambleWriter.cs b/Posts/OpenNest.Posts.Cincinnati/CincinnatiPreambleWriter.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/CincinnatiPreambleWriter.cs rename to Posts/OpenNest.Posts.Cincinnati/CincinnatiPreambleWriter.cs diff --git a/OpenNest.Posts.Cincinnati/CincinnatiSheetWriter.cs b/Posts/OpenNest.Posts.Cincinnati/CincinnatiSheetWriter.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/CincinnatiSheetWriter.cs rename to Posts/OpenNest.Posts.Cincinnati/CincinnatiSheetWriter.cs diff --git a/OpenNest.Posts.Cincinnati/CoordinateFormatter.cs b/Posts/OpenNest.Posts.Cincinnati/CoordinateFormatter.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/CoordinateFormatter.cs rename to Posts/OpenNest.Posts.Cincinnati/CoordinateFormatter.cs diff --git a/OpenNest.Posts.Cincinnati/FeatureUtils.cs b/Posts/OpenNest.Posts.Cincinnati/FeatureUtils.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/FeatureUtils.cs rename to Posts/OpenNest.Posts.Cincinnati/FeatureUtils.cs diff --git a/OpenNest.Posts.Cincinnati/MaterialLibraryNameConverter.cs b/Posts/OpenNest.Posts.Cincinnati/MaterialLibraryNameConverter.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/MaterialLibraryNameConverter.cs rename to Posts/OpenNest.Posts.Cincinnati/MaterialLibraryNameConverter.cs diff --git a/OpenNest.Posts.Cincinnati/MaterialLibraryResolver.cs b/Posts/OpenNest.Posts.Cincinnati/MaterialLibraryResolver.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/MaterialLibraryResolver.cs rename to Posts/OpenNest.Posts.Cincinnati/MaterialLibraryResolver.cs diff --git a/OpenNest.Posts.Cincinnati/OpenNest.Posts.Cincinnati.csproj b/Posts/OpenNest.Posts.Cincinnati/OpenNest.Posts.Cincinnati.csproj similarity index 86% rename from OpenNest.Posts.Cincinnati/OpenNest.Posts.Cincinnati.csproj rename to Posts/OpenNest.Posts.Cincinnati/OpenNest.Posts.Cincinnati.csproj index 1a1bdc6..75584bf 100644 --- a/OpenNest.Posts.Cincinnati/OpenNest.Posts.Cincinnati.csproj +++ b/Posts/OpenNest.Posts.Cincinnati/OpenNest.Posts.Cincinnati.csproj @@ -4,7 +4,7 @@ OpenNest.Posts.Cincinnati - + @@ -13,7 +13,7 @@ - ..\OpenNest\bin\$(Configuration)\net8.0-windows\Posts\ + ..\..\OpenNest\bin\$(Configuration)\net8.0-windows\Posts\ $(MSBuildProjectDirectory)\OpenNest.Posts.Cincinnati.json $(PostsDir)OpenNest.Posts.Cincinnati.json diff --git a/OpenNest.Posts.Cincinnati/OpenNest.Posts.Cincinnati.json b/Posts/OpenNest.Posts.Cincinnati/OpenNest.Posts.Cincinnati.json similarity index 100% rename from OpenNest.Posts.Cincinnati/OpenNest.Posts.Cincinnati.json rename to Posts/OpenNest.Posts.Cincinnati/OpenNest.Posts.Cincinnati.json diff --git a/OpenNest.Posts.Cincinnati/SpeedClassifier.cs b/Posts/OpenNest.Posts.Cincinnati/SpeedClassifier.cs similarity index 100% rename from OpenNest.Posts.Cincinnati/SpeedClassifier.cs rename to Posts/OpenNest.Posts.Cincinnati/SpeedClassifier.cs diff --git a/OpenNest.Posts.GravographIS/GravographISPort.cs b/Posts/OpenNest.Posts.GravographIS/GravographISPort.cs similarity index 100% rename from OpenNest.Posts.GravographIS/GravographISPort.cs rename to Posts/OpenNest.Posts.GravographIS/GravographISPort.cs diff --git a/OpenNest.Posts.GravographIS/GravographISPostConfig.cs b/Posts/OpenNest.Posts.GravographIS/GravographISPostConfig.cs similarity index 100% rename from OpenNest.Posts.GravographIS/GravographISPostConfig.cs rename to Posts/OpenNest.Posts.GravographIS/GravographISPostConfig.cs diff --git a/OpenNest.Posts.GravographIS/GravographISPostProcessor.cs b/Posts/OpenNest.Posts.GravographIS/GravographISPostProcessor.cs similarity index 100% rename from OpenNest.Posts.GravographIS/GravographISPostProcessor.cs rename to Posts/OpenNest.Posts.GravographIS/GravographISPostProcessor.cs diff --git a/OpenNest.Posts.GravographIS/GravographISWriter.cs b/Posts/OpenNest.Posts.GravographIS/GravographISWriter.cs similarity index 100% rename from OpenNest.Posts.GravographIS/GravographISWriter.cs rename to Posts/OpenNest.Posts.GravographIS/GravographISWriter.cs diff --git a/OpenNest.Posts.GravographIS/GravographISWriterOptions.cs b/Posts/OpenNest.Posts.GravographIS/GravographISWriterOptions.cs similarity index 100% rename from OpenNest.Posts.GravographIS/GravographISWriterOptions.cs rename to Posts/OpenNest.Posts.GravographIS/GravographISWriterOptions.cs diff --git a/OpenNest.Posts.GravographIS/NestPolylineExtractor.cs b/Posts/OpenNest.Posts.GravographIS/NestPolylineExtractor.cs similarity index 100% rename from OpenNest.Posts.GravographIS/NestPolylineExtractor.cs rename to Posts/OpenNest.Posts.GravographIS/NestPolylineExtractor.cs diff --git a/OpenNest.Posts.GravographIS/OpenNest.Posts.GravographIS.csproj b/Posts/OpenNest.Posts.GravographIS/OpenNest.Posts.GravographIS.csproj similarity index 79% rename from OpenNest.Posts.GravographIS/OpenNest.Posts.GravographIS.csproj rename to Posts/OpenNest.Posts.GravographIS/OpenNest.Posts.GravographIS.csproj index 6842a7c..cb468ab 100644 --- a/OpenNest.Posts.GravographIS/OpenNest.Posts.GravographIS.csproj +++ b/Posts/OpenNest.Posts.GravographIS/OpenNest.Posts.GravographIS.csproj @@ -4,7 +4,7 @@ OpenNest.Posts.GravographIS - + @@ -12,7 +12,7 @@ - ..\OpenNest\bin\$(Configuration)\net8.0-windows\Posts\ + ..\..\OpenNest\bin\$(Configuration)\net8.0-windows\Posts\ diff --git a/OpenNest.Posts.GravographIS/PolylinePrePass.cs b/Posts/OpenNest.Posts.GravographIS/PolylinePrePass.cs similarity index 100% rename from OpenNest.Posts.GravographIS/PolylinePrePass.cs rename to Posts/OpenNest.Posts.GravographIS/PolylinePrePass.cs diff --git a/README.md b/README.md index 9bad6a3..a0335ac 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ Layouts are validated (bounds, spacing, quantity, rotation, stock match); invali | **OpenNest.Gpu** | GPU-accelerated pair evaluation (ILGPU) | | **OpenNest.Benchmark** | Head-to-head engine comparison | | **OpenNest.Mcp** | MCP server for AI tool integration | -| **OpenNest.Posts.Cincinnati** | Cincinnati laser post-processor plugin | +| **Posts/** | Post-processor plugins (Cincinnati CL lasers, Gravograph IS8000) | | **\*.Tests** | Cross-platform suites; WinForms tests are Windows-only | ## Nesting Engines