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, and the two halves of the tree disagree about it. The kind is serialized; only the start-section hookup is not. Such a project reloads with the raw geometry in place, and the Geometry slot's child builder tests the type against the whole kind map rather than against the slot's whitelist, so the ExtendedCylinder kind node and this editor still appear beneath it. The slot's own picker tests the whitelist, finds the type outside it and blanks — leaving an empty type dropdown above a child node that edits an Extended Cylinder. The bound reads zero there, 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 — the half that tests the whole kind map rather than the whitelist.
  • 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.tsgetExtendedCylinder, 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 still carries an ExtendedCylinder arm that no picker can now reach.

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