Ahead of the new laser schedule, three ways a post could silently cut
with the wrong process, and one way its settings silently reset:
- Cincinnati CL wrote no G89 when no cut library matched the nest's
material, thickness and gas (or no etch library for etch features),
so the controller cut with whatever library it loaded last. It now
refuses, unless the new "Require libraries" setting is turned off.
- Cincinnati CL declared G20/G21 from its own setting without comparing
the nest's units, so a metric nest posted 25.4x too large. It now
refuses a mismatch.
- CI Fiber posted any material missing from its table as the default
code (MSN), so stainless or aluminum ran with mild-steel technology.
A named, unmapped material is now refused; the default code covers
only nests with no material.
- Posts saved their settings beside their DLL, inside the install
folder a Velopack update replaces, so every update reset them to the
shipped defaults. Saves now go to %APPDATA%\OpenNest\Posts and the
shipped JSON only seeds them; constructing a post no longer writes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Repo-wide sweep with the pinned CSharpier 1.3.0 tool. Whitespace and
line-wrapping only; OpenNest.Engine.Tests (109) and OpenNest.IO.Tests
pass after reformat, full solution builds 0 errors.
Added .csharpierignore so csproj/config XML keeps its existing layout
(CSharpier's XML wrapping churns attributes with zero benefit).
Formatting is now enforceable: dotnet csharpier check . passes.
Cutoff features now substitute plate-edge coordinates with #SheetWidthVariable
and #SheetLengthVariable references. Vertical cutoffs at Y=plate_width emit
Y#110, horizontal cutoffs at X=plate_length emit X#111. Segmented cutoffs
only substitute the edge coordinate, interior segment endpoints stay literal.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When programs have user-defined variables, the Cincinnati post now:
- Assigns numbered machine variables (#200, #201, etc.) to non-inline variables
- Emits declarations like #200=48.0 (SHEET WIDTH) in the variable declaration subprogram
- Emits X#200 instead of X48.0 in coordinates that have VariableRefs
- Handles global variables (shared number across drawings) vs local (per-drawing number)
- Inline variables emit the literal value as before
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>