This commit is contained in:
2026-09-11 03:46:11 +08:00
parent 45b9f9ed5d
commit b7f55aa631
114 changed files with 3646 additions and 576 deletions
@@ -111,10 +111,20 @@ per-fragment arc IJK recomputation — including R-to-IJK conversion — whereve
carries the centre. An arc whose centre lives on a preceding modal block is exempt: its fragments
keep the source block's arc words and share that upstream centre line unchanged, so only their
endpoint and <code>F</code> words move. Two cases where the frozen HardNc optimizer is silently wrong are
downgraded to a non-split rewrite rather than reproduced: a <code>G91</code> incremental block (the old
fragment rewrite always emitted absolute coordinates), and a klartext <code>C … DR±</code> arc whose modal
<code>CC</code> chain left one of the two in-plane axes unstated, so the block's own start point supplied
that component — since every fragment would re-derive the centre from its own start. A klartext
downgraded to a non-split rewrite rather than reproduced, each warned once per run. The first is
an incremental block, and it is now taken by both of its spellings: <code>G91</code> modal state, <strong>or</strong> a
block whose modal state is absolute while individual axis words carry a per-word incremental
override — Siemens <code>X=IC(10)</code> and the coded <code>CIC()</code>, klartext <code>IX+20</code> and <code>IC+90</code>. The frozen
fragment rewrite carries no <code>G90</code>/<code>G91</code> handling at all and always re-emits a coordinate as an
absolute program value, so it splits both shapes and is wrong on each in its own way: the <code>G91</code>
line comes back stating an absolute number the control still reads as a distance, and the
per-word line keeps its incremental source word, so every fragment re-applies the same distance
from its own start. Both now stop at <code>NcOpt--SplitionIncrementalUnsupported</code>. The per-word
spelling is also the only one that can reach klartext: that dialect has no modal <code>G90</code>/<code>G91</code>
word, so a stamped axis word is the only incremental form it produces. The second case is a
klartext <code>C … DR±</code> arc whose modal <code>CC</code> chain left one of the two in-plane axes unstated, so the
block's own start point supplied that component — since every fragment would re-derive the centre
from its own start; that one reports <code>NcOpt--SplitionStartPointCenterUnsupported</code>. A klartext
<code>C</code> block whose centre lands entirely on its own start point never reaches that guard: its radius
is zero, so play degrades it to a chord under a validation warning of its own.
<strong>Neither the controller brand nor klartext as such refuses a split</strong>: a klartext <code>L</code> block