Table of Contents

Cylindroid Holder Panel

The key model is CylindroidHolder: a holder revolved from a Z-R profile, carrying its own name and note and its own STL tessellation resolution.

The holder occupies two child nodes of the Holder node in the picked tool's Control Tree — Geometry and Resolution, the nodes whose role paths end in .../holder/geometry and .../holder/resolution, reached at /tool-house/:toolId/holder/geometry and /tool-house/:toolId/holder/resolution. Its Name, readonly Abstract Note and Note are edited one level up, on the Holder Panel itself, under the Metadata-on-container convention.

Layout

Web Layout

  • Geometry Section
    • Cylindroid Panel — the reusable Z-R pair table, driven by a model key
    • Initializing Caption — stands in for the editor until the holder's cylindroid has been published under a key
  • Resolution Section
    • Resolution Hint Caption — names the STL tessellation resolution used for display and collision meshing
    • Linear Resolution (mm) Input Field
    • Angle Resolution (deg) Input Field

Feature

The two web sections reach the model by different routes, and that difference is why the holder resync belongs to one of them and not the other.

Geometry. The section mounts the reusable Cylindroid editor on a key. Get publishes the holder's own Cylindroid in the index service under the per-session key {sessionKey}-HolderCylindroid and hands that key back — but only when the caller supplies its session key; with no session key the response carries a null key and the section shows its initializing caption in the editor's place. The key names the same object the holder holds, so an edit lands on the holder's geometry directly. Because that generic editor mutates the bare geometry and holds no reference back to the holder, the section issues the holder resync itself after each geometry edit: UpdateGeometryContent runs UpdateByCylindroid() and then ClearCache(), recomputing the holder topology before regenerating the solid — clearing the cache alone would skip the recompute. The key belongs to the session, not to the tool: every Get with the session key re-points it at the cylindroid of the holder it reads, and both the Holder node's panel and this node's panel call it on mount. The editor column mounts only the selected node's panel, so at most one holder-geometry panel is alive at a time and the shared key never collides.

Resolution. The section writes the polar resolution straight onto the holder: SetPolarResolution assigns a fresh PolarResolution2d built from the two values and calls ClearCache(), so the server regenerates the solid cache at the new tessellation. No topology resync is involved on this path. Get also returns the current pair, which is how the two fields are seeded; a null resolution on the model is reported as 0 mm / 0 deg.

Guards sit on both sides. Every action on the controller answers Not Found for an unknown tool id and Bad Request when the tool's holder is not a CylindroidHolder; SetPolarResolution additionally rejects a linear or angle value that is not greater than zero, and the Resolution section refuses to send a non-positive value at all. Both fields commit on blur or Enter.

Source Code Path

See HiNC App Anatomy for git repository links.

HiNC-2025-webservice (Quasar CLI SPA):

  • wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — both sections in one panel, chosen by the last segment of the node's role path: the Cylindroid editor on the indexed key plus the resync on change, and the linear-mm / angle-deg fields with their positive-value guard.
  • wwwroot-src/src/components/geom/CylindroidEditor.vue — the reusable Z-R profile editor the Geometry section wraps, driven by model key.
  • wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the parent Holder node's panel, which hosts this holder's Name, readonly Abstract Note and Note and commits them through setCylindroidHolderName / setCylindroidHolderNote.
  • wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — grows the two child nodes for a CylindroidHolder and routes both to the HolderSection item type.
  • wwwroot-src/src/api/cylindroidHolder.ts — the typed wrapper over /api/CylindroidHolder: getCylindroidHolder, updateCylindroidHolderGeometry, setCylindroidHolderName, setCylindroidHolderNote, setCylindroidHolderResolution.
  • wwwroot-src/src/i18n/en/toolhouse.ts — the two section labels, the tessellation hint, the two field labels and the initializing caption.
  • Mech/CylindroidHolderController.cs — POST Get (name / note / abstract note, the polar resolution, and — with a session key — the indexed cylindroid key) plus POST UpdateGeometryContent | SetName | SetNote | SetPolarResolution. All but Get answer 409 ToolEditRefusedWhileRunning while the pace player is locked — a run in progress or paused — since the holder hangs on the tool the run mounted and the resync swaps its solid.

See Also

  • Holder Panel — the Holder node above these two: the type selector, and this holder's Name, Abstract Note and Note
  • Polar Resolution 2D Panel — the linear / angle resolution pair the Resolution node edits
  • Cylindroid Editor — the shape editor this panel's Geometry surface embeds, and the shape whose tessellation the Resolution surface governs
  • Cutter Geometry — the frame the Z-R profile is written in, the placeholder a new holder starts as, and how the profile's length reaches the tool length