Skip to content

Commit e65607b

Browse files
Overhaul export pipeline and postprocessing
1 parent 4bb43f0 commit e65607b

126 files changed

Lines changed: 21764 additions & 20807 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎CHANGELOG.md‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
# Changelog
22

3+
## 1.9.3 - 2026-10-06
4+
5+
- Consolidate user-facing export into three paths: FULL source-preserving normalization, EXPANDED controller postprocessing from resolved execution, and DXF geometry output. Remove Plot Data and separate cycle-export modes from the current export contract.
6+
- Replace controller-specific conversion code with one EXPANDED JSON-profile engine. Add bundled `fanuc_mill`, `fanuc_lathe_a`, `fanuc_lathe_b`, `sinumerik_iso` and `sinumerik_840d` profiles for motion, comments, arcs, positioning, reference returns, tool/spindle/coolant signals, dwell, units and program wrappers.
7+
- Make controller conversion an EXPANDED-only operation. FULL keeps the source controller/dialect and unfolds only flow/label-dependent constructs that cannot safely survive normalization: evaluated Macro B, IF/GOTO/WHILE, G65/M98/M99 and FANUC turning G70–G76.
8+
- Support four explicit EXPANDED arc outputs (relative IJK, absolute IJK, radius and linearized). Native SINUMERIK profiles emit absolute centers with `AC(...)`, radius with `CR=`, and preserve source comments through `;` formatting.
9+
- Treat Target CNC as a syntax/post-profile selector only: EXPANDED is one universal serializer, so every user output option (coordinates, sequence numbers, delimiter, leading zero, modal feed, decimal precision, force decimal, plus sign, arc output and start/end program text) remains available and is honored across FANUC→FANUC, FANUC→SINUMERIK ISO, FANUC→SINUMERIK native and SINUMERIK→FANUC. Profile values are defaults, not overrides. Remove the `allowProgramStartOverride` user-facing restriction so SINUMERIK keeps the mandatory `G290`/`G291` frame first and emits user start text after it.
10+
- Implement Safety Line in the EXPANDED serializer through a profile-declared `program.safety` block, so no visible export setting is silently ignored. Route serialization cancellation into the FULL/EXPANDED serializers so Cancel stops a heavy export instead of only the final write.
11+
- Reorganize the Export Data dialog into two visually separated columns without group titles, rename `As source (no conversion)` to `Auto (source controller)`, drop the old address-force control, and drive option availability by export mode only. A concrete Target CNC no longer disables ordinary formatting controls.
12+
- Move mandatory frame-word output and word ordering into the post profile: `format.words` now defines `order` and `required` for `motion`, `X`, `Y`, `Z`, `A`, `B`, `C`, `I`, `J`, `K` and `R`, with per-word `decimals`/`sign` in the same object. Address requiredness is a property of the specific post/controller, so it now lives in the profile (`format.words.required`) instead of a separate generic axis setting; `required=true` forces an address when it has a resolved value, `motion.required=false` makes the motion code modal, an axis entry is only valid when declared in `supports.axes`, and `F` is excluded because feed is managed by Modal Feed.
13+
- Add bundled `fanuc_mill_multiaxis` and `sinumerik_840d_multiaxis` post profiles that declare `supports.axes` `X/Y/Z/A/B/C` and emit explicit resolved rotary coordinates. They preserve export ability for programs with explicit rotary axes without weakening the three-axis `fanuc_mill` and `sinumerik_840d` profiles; TCP/tilted-plane/CYCLE800 semantics remain unsupported on both.
14+
- Unify GUI, single-file `export` and `batch-export` on one `ExportRequest`/`write_export` contract. The GUI only fills the shared request from the dialog; all target mapping, option resolution, conversion and atomic writing happen in the shared export service, so CLI and batch output is byte-identical to the GUI for the same settings.
15+
- Add a mandatory batch-export semantic regression gate (`tests/export/test_batch_export_semantics.py`, `tests/export_signatures.py`) that runs the four conversion scenarios and re-executes every successfully exported program, comparing the strict per-motion trajectory signature with the source and reporting a conversion that cannot preserve it.
16+
- Refine the three-axis conversion guard so a selected kinematics profile, G65 arguments and non-rotary turning A/C words do not masquerade as rotary geometry; actual rotary/TWP/TCP use remains fail-closed.
17+
- Correct DXF planar-arc OCS/direction handling, including tilted-plane normals and exact 180-degree arcs, while keeping analytical arcs/circles where representable and sampled polylines for multi-turn/helical geometry.
18+
- Replace the stale batch helper set with four explicit conversion scripts for FANUC mill → SINUMERIK native, FANUC mill → SINUMERIK ISO-M, FANUC lathe Type A → Type B, and SINUMERIK native → FANUC mill; outputs go to `tmp/test_export`.
19+
- Add export-contract regression coverage: the 1.9.2 golden corpus remains a semantic reference, while current FULL/EXPANDED behavior and post profiles are tested as the release contract rather than requiring historical text serialization.
20+
321
## 1.9.2 - 2026-10-05
422

523
- Shorten sandbox test7 playback to a brief Play followed by 10% slider steps and completion; retain complete continuous playback for the flange and turning Stock Removal.

0 commit comments

Comments
 (0)