This commit is contained in:
2026-09-09 18:06:21 +08:00
parent 161af68fe3
commit 45b9f9ed5d
79 changed files with 1167 additions and 1532 deletions
@@ -89,13 +89,12 @@
<p>The Extended Cylinder editor edits one number on an <a class="xref" href="../../api/Hi.Geom.ExtendedCylinder.html">ExtendedCylinder</a>: its full
length, measured from <code>Z=0</code> and <strong>including the span below the start section</strong>. Its only home on
either client is the Tool House cutter's Upper Beam, where the start section is the flute top.</p>
it is the Tool House cutter's Upper Beam, where the start section is the flute top.</p>
<h2 id="layout">Layout</h2>
<ul>
<li>An explanatory block stating what the type is and, in bold, how the length is measured.</li>
<li><strong>Full Length</strong> — a single numeric field in millimetres, with a hint under it.</li>
</ul>
<p>The desktop panel is a title over the same one field.</p>
<h2 id="behavior">Behavior</h2>
<ul>
<li><strong>The hint states a lower bound only when that bound is positive.</strong> The bound is the Z of the
@@ -113,19 +112,15 @@ minimum — its minimum is inclusive — so a value exactly equal to the bound p
caught one layer up by the editor, which raises an error to its host as a banner rather than an
inline field message. The controller then rejects non-finite, non-positive, and at-or-below-bound
values with a 400.</li>
<li><strong>The field commits on blur or Enter.</strong> The desktop control does not: it writes on every
keystroke, and performs no minimum, positivity or finiteness check at all. The range guard is a
web and backend feature.</li>
<li><strong>The field commits on blur or Enter</strong>, and the range guard runs on both the field and the backend.</li>
<li><strong>Creating one through the cutter is not the same as creating one bare.</strong> The Upper Beam creates
through the cutter's own endpoint so the backend seeds a valid full length and can return
geometry-issue warnings — which the Upper Beam panel renders as persistent banners. The bare
create endpoint seeds a length of 100 and a single start pair.</li>
</ul>
<h2 id="reach">Reach</h2>
<p>Both clients restrict this kind to the cutter's upper beam, by different mechanisms. In the desktop
client the switchboard's Extended Cylinder entry ships collapsed and is revealed by a property that
exactly one host sets — the milling cutter panel. On the web <strong>no Geometry slot offers the kind at
all</strong>: it is absent from the container kinds, so it can be neither a transformation geometry's inner
<p>This kind is restricted to the cutter's upper beam, and the mechanism is absence rather than a flag:
<strong>no Geometry slot offers it at all</strong>. it is absent from the container kinds, so it can be neither a transformation geometry's inner
geometry nor a combination child, and it was taken out of the workpiece's raw geometry once a saved
project was found to reload one degenerate. The single surface that offers it is the cutter's Upper
Beam, which mounts the switchboard itself over its own six-kind list rather than being a Geometry