Stick Tool Panel
The term stick is for not only milling, but other remover like electric discharge machining tool.
On the shipped web client the Stick Tool Panel is the toolhouse/tool-<n> node of the
Tool House Page: picking a tool in that page's left list mounts it, and
its editor is the tab strip filling the page's middle column.
The key model is MillingTool.
Layout
- Tool Node (
toolhouse/tool-<n>)- General Tab
- Tool ID TextField — the T-number; committing it renames the tool
- Note TextField (editable)
- Abstract Note (read-only, auto-derived, with a one-click copy button)
- Duplicate Button and Delete Button (icon buttons on the tab's title bar)
- Cutter Tab
- Holder Tab
- Clamping Tab
- Exposed-Cutter-Height numeric field
- Preserved-Distance-Between-Flute-and-Spindle-Nose numeric field
- Int. Holder Tab
- Observation Location
- Reference Anchor Dropdown (
ObservationAnchorReference) — its options are theMillingToolAnchorReferencenames the server sends with the observation: None, Tool Tip, Holder Anchor, Spindle Buckle Anchor - Relative-Z-From-Reference numeric field (
RelativeHeightFromObservationAnchor_mm) - Observation-Ring-Radius numeric field (
ObservationRingRadius_mm)
- Reference Anchor Dropdown (
- Observation Location
- General Tab
All five tabs ship unconditionally: the Int. Holder tab is one of the five TOOL_TABS, and the tool
node always grows its …/intelligent child. Nothing gates it on UserService.EnablePhysics.
Object Management is house-level rather than per-tool: the
Object Management Menu Button sits on the Tool House root
panel with file extension .MachiningToolHouse (load type Hi.Machining.MachiningToolHouse, HiMech)
and covers the whole house, while the tool node offers Duplicate and Delete for the single tool.
There is no per-tool object-management button, and no separate tab for the identity fields — the
Abstract Note and Note sit on the General tab, alongside Tool ID and the Duplicate / Delete buttons.
Tabs and the URL
The tabs are TOOL_TABS — General, Cutter, Holder, Clamping, Int. Holder —
declared in wwwroot-src/src/router/treeRoutes.ts, and those same five names are the :tab? segment
of the page route /tool-house/:toolId?/:tab?/:subtab?. General is the tool node's own panel; the
other four are the tool node's children (…/cutter, …/holder, …/clamping, …/intelligent),
registered in wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts.
Cutter and Holder are type-selector stems, so each grows a second, URL-synced sub-tab strip — the
:subtab? segment, from CUTTER_SECTIONS (Material / Flute Profile / Flute Contours / Upper Beam /
Optimization — Material only while the shell's Show Physics Options preference is on) and
HOLDER_SECTIONS (Geometry / Resolution). The levels below that — Flute Contours
to fluting to flutes to side and bottom contour — nest inside
wwwroot-src/src/components/controlTree/NodeTabCascade.vue, which the page mounts inside the active
tab. wwwroot-src/src/composables/useRouteTabs.ts keeps both segments in the URL, defaulting to
general, and to profile under Cutter / geometry under Holder.
Selecting another tool keeps the tab segments: only the tool part of the URL moves, so the reader
stays on the tab they were reading. A Control-Tree id addressing any of these levels is translated
into the page's route params by routeForTreeId, and an id deeper than the URL carries lands on the
nearest tab.
Note
The Exposed-Cutter-Height and Preserved-Distance-Between-Flute-and-Spindle-Nose are directly
related: ExposedCutterHeight = PreservedDistance + FluteHeight, so each value changes when
the other is changed. Editing Preserved Distance commits
PUT /api/ToolHouse/{id}/preserved-distance, whose response carries the recomputed pair and fills
both fields; editing Exposed Height commits PUT /api/ToolHouse/{id}/exposed-height, which
answers without a body, so the panel re-reads the tool to pick up the new preserved distance.
Source Code Path
See HiNC App Anatomy for git repository links.
HiNC-2025-webservice (Quasar CLI SPA). The tool node is a set of tabs on the Tool House page rather than a panel of its own:
wwwroot-src/src/router/treeRoutes.ts— declaresTOOL_TABS(general / cutter / holder / clamping / intelligent) withCUTTER_SECTIONSandHOLDER_SECTIONS, androuteForTreeId, which turns atoolhouse/tool-<n>/<tab>/<subtab>Control-Tree id into the/tool-houseroute params.wwwroot-src/src/pages/ToolHousePage.vue— renders the five-tab strip, mounts only the active tab's panel, and keeps the tab segments when the selected tool changes.wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts— the Control-Tree ItemType registry:buildToolChildrenemits the tool node's…/cutter,…/holder,…/clampingand…/intelligentchildren, General being the tool node's own panel.wwwroot-src/src/components/controlTree/toolhouse/ToolNodePanel.vue— the General tab: Tool ID / Note / read-only auto Abstract Note with copy, plus Duplicate and Delete. Mounting it points the tool canvas at that tool.wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue— the Cutter tab's type selector (Milling Cutter / Freeform Remover / None) plus the MillingCutter identity fields.wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue— the Holder tab's type selector (None / Cylindroid / Freeform) plus the Cylindroid holder's Name / Note / auto Abstract Note.wwwroot-src/src/components/controlTree/toolhouse/ToolClampingPanel.vue— the Clamping tab and its two coupled fields.wwwroot-src/src/components/controlTree/toolhouse/ToolIntelligentPanel.vue— the Int. Holder tab; a thin wrapper overwwwroot-src/src/components/toolhouse/IntelligentHolderDiv.vue, which holds the Observation Location controls and reads no physics flag.wwwroot-src/src/components/controlTree/NodeTabCascade.vue— hosts the active tab's panel and the levels nested below it.wwwroot-src/src/composables/useRouteTabs.ts— syncs the:tab?/:subtab?params with the URL.wwwroot-src/src/composables/useToolHouse.ts— the module-singleton state every tool-house panel is a thin view over: the tool list, the active tool, and the rendering connection id.Mech/ToolHouseController.cs—[Route("api/[controller]")], so/api/ToolHouse: the tool-level fields the tool node edits —PUT /{id}/note | exposed-height | preserved-distance,GET/PUT /{id}/observation,POST DuplicateTool | RenameTool | SetHolderType,DELETE DeleteTool.Mech/CutterController.cs(/api/Cutter) andMech/CylindroidHolderController.cs(/api/CylindroidHolder) — the server surface behind the Cutter and Holder tabs.wwwroot-src/src/api/toolHouse.ts— the typed client for those endpoints.
See Also
- Tool House Page — the page this tool node sits in, and where the tool list and the route live
- Cutter Tab — the cutter half of the tab cascade
- Holder Tab — the holder half