Table of Contents

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 at Z=0 read identically here, because the controller answers 0 for 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 the ExtendedCylinder kind to this editor.
  • wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker.
  • wwwroot-src/src/components/controlTree/itemTypes.ts — registers ExtendedCylinder against 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, updateExtendedCylinderFullLength and 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 — the extCylinder.* 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, UpdateFullLength and GetFullLength. Get carries minFullLength alongside 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 an ExtendedCylinder (its summary records why); Mech/CutterController.cs is 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