ExtendedCylinder Editor
The Extended Cylinder editor edits one number on an ExtendedCylinder: its full
length, measured from Z=0 and including the span below the start section. Its only home on
it is the Tool House cutter's Upper Beam, where the start section is the flute top.
Layout
- An explanatory block stating what the type is and, in bold, how the length is measured.
- Full Length — a single numeric field in millimetres, with a hint under it.
Behavior
- The hint states a lower bound only when that bound is positive. The bound is the Z of the
start section, served with the value as
minFullLength; above zero the hint reads “must exceed the start-section Z”, and at zero it degrades to a plain “full length from Z=0”. The test is the number, not the wiring — a geometry with no start-section source and one whose source sits atZ=0read identically here, because the controller answers0for both. There is no upper bound anywhere — not in the editor and not in the controller. - A live bound belongs to the cutter alone. The bare create endpoint installs a constant start
pair at
Z=0, and the container-aware create switches install no source at all; both answer a bound of zero. Only the cutter upper beam wires a real one — setting the beam links it to the flute top — so only there does a bound appear. - The guard is two layers, and they differ by one. The numeric field rejects a value below the minimum — its minimum is inclusive — so a value exactly equal to the bound passes the field and is 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.
- The field commits on blur or Enter, and the range guard runs on both the field and the backend.
- Creating one through the cutter is not the same as creating one bare. 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.
Reach
This kind is restricted to the cutter's upper beam, and the mechanism is absence rather than a flag: no Geometry slot offers it at all. 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 slot.
Note
A project saved earlier can still carry one on a workpiece. The kind is serialized; only the
start-section hookup is not. Such a project reloads with the raw geometry in place: the Geometry
slot's child builder recognises every kind in the kind map, so the ExtendedCylinder kind node
and this editor appear beneath the slot, and the slot's picker — which recognises the current kind
the same way and whitelists only what can be created — shows ExtendedCylinder as the selected
entry. Re-selecting it changes nothing; picking any offered kind replaces it. The bound reads zero
here, because nothing is wiring a start section.
Source Code Path
See HiNC App Anatomy for git repository links.
HiNC-2025-webservice (Quasar CLI SPA):
wwwroot-src/src/components/geom/ExtendedCylinderEditor.vue— the description block and the Full Length field, its hint, and the at-or-below-bound check that raises an error to the host.wwwroot-src/src/components/widgets/NumericInput.vue— the shared numeric field: an inclusive minimum rejected on blur, and the hint slot under it.wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue— the component's real home: the cutter's Upper Beam, which creates through the container-aware cutter endpoint and renders the returned geometry-issue warnings.wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue— mounts that panel for the cutter's Upper Beam node, and deliberately skips its own fetch there.wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts— builds the Upper Beam child of the Cutter node.wwwroot-src/src/components/geom/geometryEditors.ts— maps theExtendedCylinderkind to this editor.wwwroot-src/src/components/geom/GeometryEditor.vue— the kind picker.wwwroot-src/src/components/controlTree/itemTypes.ts— registersExtendedCylinderagainst the sole-editor panel, is where its absence from the container kinds is declared, and holds the Geometry slot's child builder, which recognises the current kind by the whole kind map — the same test the picker applies.wwwroot-src/src/components/controlTree/useControlTreeHost.ts— the workpiece raw-geometry whitelist, and the comment recording why the kind is no longer in it.wwwroot-src/src/api/geometry.ts—getExtendedCylinder,updateExtendedCylinderFullLengthand the create entry.wwwroot-src/src/api/toolHouse.ts— the upper-beam get, create and resync wrappers, and the warnings contract.wwwroot-src/src/i18n/en/geom.ts— theextCylinder.*strings: the label, the description and measure rule, both hints, and the below-minimum error.Geom/ExtendedCylinderController.cs— REST endpoints at/api/ExtendedCylinder/*:New,Get,UpdateFullLengthandGetFullLength.GetcarriesminFullLengthalongside the value.Mech/CutterController.cs— the upper-beam routes the Tool House host actually goes through, and the geometry-issue warnings it surfaces.Mech/WorkpieceController.cs— the raw-geometry create switch, which no longer builds anExtendedCylinder(its summary records why);Mech/CutterController.csis the one create path left, for the upper beam.
See Also
- Geometry Editor — the switchboard that offers this kind and hosts this editor
- Milling Cutter Panel — the cutter whose Upper Beam is this editor's real home, and the one surface that supplies a start section