Table of Contents

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 the MillingToolAnchorReference names 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)

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_TABSGeneral, 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 — declares TOOL_TABS (general / cutter / holder / clamping / intelligent) with CUTTER_SECTIONS and HOLDER_SECTIONS, and routeForTreeId, which turns a toolhouse/tool-<n>/<tab>/<subtab> Control-Tree id into the /tool-house route 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: buildToolChildren emits the tool node's …/cutter, …/holder, …/clamping and …/intelligent children, 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 over wwwroot-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) and Mech/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