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 sections of the Holder node under the selected tool — 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 a per-session -HolderCylindroid key 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 slave 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 sections 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.csGET Get (name / note / abstract note, the polar resolution, and — with a session key — the indexed cylindroid key) plus POST UpdateGeometryContent | SetName | SetNote | SetPolarResolution.

See Also

  • Polar Resolution 2D Panel — the resolution editor this panel embeds
  • Cylindroid Editor — the shape editor this panel's Geometry surface embeds, and the shape whose tessellation the Resolution surface governs