This repository has been archived on 2026-10-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
HiNC-2025-win-desktop-Deploy/App/wwwroot/HiAPI-docsite/anatomy/tool-house/stick-tool-panel.html
T
2026-09-09 18:06:21 +08:00

243 lines
13 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Stick Tool Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Stick Tool Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Anatomy-StickToolPanel">
<h1 id="stick-tool-panel">Stick Tool Panel</h1>
<p>The term stick is for not only milling, but other remover like electric discharge machining tool.</p>
<p>On the shipped web client the Stick Tool Panel is the <code>toolhouse/tool-&lt;n&gt;</code> node of the
<a class="xref" href="index.html">Tool House Page</a>: picking a tool in that page's left list mounts it, and
its editor is the tab strip filling the page's middle column.</p>
<p>The key model is <a class="xref" href="../../api/Hi.Milling.MillingTools.MillingTool.html">MillingTool</a>.</p>
<h2 id="layout">Layout</h2>
<ul>
<li>Tool Node (<code>toolhouse/tool-&lt;n&gt;</code>)
<ul>
<li>General Tab
<ul>
<li>Tool ID TextField — the T-number; committing it renames the tool</li>
<li>Note TextField (editable)</li>
<li>Abstract Note (read-only, auto-derived, with a one-click copy button)</li>
<li>Duplicate Button and Delete Button (icon buttons on the tab's title bar)</li>
</ul>
</li>
<li>Cutter Tab
<ul>
<li><a class="xref" href="cutter/cutter-panel.html">Cutter Panel</a></li>
</ul>
</li>
<li>Holder Tab
<ul>
<li><a class="xref" href="holder/holder-panel.html">Holder Panel</a></li>
</ul>
</li>
<li>Clamping Tab
<ul>
<li>Exposed-Cutter-Height numeric field</li>
<li>Preserved-Distance-Between-Flute-and-Spindle-Nose numeric field</li>
</ul>
</li>
<li>Int. Holder Tab
<ul>
<li>Observation Location
<ul>
<li>Reference Anchor Dropdown (<code>ObservationAnchorReference</code>) — its options are the <code>MillingToolAnchorReference</code> names the server sends with the observation: None, Tool Tip, Holder Anchor, Spindle Buckle Anchor</li>
<li>Relative-Z-From-Reference numeric field (<code>RelativeHeightFromObservationAnchor_mm</code>)</li>
<li>Observation-Ring-Radius numeric field (<code>ObservationRingRadius_mm</code>)</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>All five tabs ship unconditionally: the Int. Holder tab is one of the five <code>TOOL_TABS</code>, and the tool
node always grows its <code>…/intelligent</code> child. Nothing gates it on <code>UserService.EnablePhysics</code>.</p>
<p>Object Management is house-level rather than per-tool: the
<a class="xref" href="../widget/object-management-menu-button.html">Object Management Menu Button</a> sits on the Tool House root
panel with file extension <code>.MachiningToolHouse</code> (load type <code>Hi.Machining.MachiningToolHouse, HiMech</code>)
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.</p>
<h2 id="tabs-and-the-url">Tabs and the URL</h2>
<p>The tabs are <code>TOOL_TABS</code> — <strong>General</strong>, <strong>Cutter</strong>, <strong>Holder</strong>, <strong>Clamping</strong>, <strong>Int. Holder</strong> —
declared in <code>wwwroot-src/src/router/treeRoutes.ts</code>, and those same five names are the <code>:tab?</code> segment
of the page route <code>/tool-house/:toolId?/:tab?/:subtab?</code>. General is the tool node's own panel; the
other four are the tool node's children (<code>…/cutter</code>, <code>…/holder</code>, <code>…/clamping</code>, <code>…/intelligent</code>),
registered in <code>wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts</code>.</p>
<p>Cutter and Holder are type-selector stems, so each grows a second, URL-synced sub-tab strip — the
<code>:subtab?</code> segment, from <code>CUTTER_SECTIONS</code> (Material / Flute Profile / Flute Contours / Upper Beam /
Optimization — Material only while the shell's <strong>Show Physics Options</strong> preference is on) and
<code>HOLDER_SECTIONS</code> (Geometry / Resolution). The levels below that — Flute Contours
to fluting to flutes to side and bottom contour — nest inside
<code>wwwroot-src/src/components/controlTree/NodeTabCascade.vue</code>, which the page mounts inside the active
tab. <code>wwwroot-src/src/composables/useRouteTabs.ts</code> keeps both segments in the URL, defaulting to
<code>general</code>, and to <code>profile</code> under Cutter / <code>geometry</code> under Holder.</p>
<p>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 <code>routeForTreeId</code>, and an id deeper than the URL carries lands on the
nearest tab.</p>
<div class="NOTE">
<h5>Note</h5>
<p>The Exposed-Cutter-Height and Preserved-Distance-Between-Flute-and-Spindle-Nose are directly
related: <code>ExposedCutterHeight</code> = <code>PreservedDistance</code> + <code>FluteHeight</code>, so each value changes when
the other is changed. Editing Preserved Distance commits
<code>PUT /api/ToolHouse/{id}/preserved-distance</code>, whose response carries the recomputed pair and fills
both fields; editing Exposed Height commits <code>PUT /api/ToolHouse/{id}/exposed-height</code>, which
answers without a body, so the panel re-reads the tool to pick up the new preserved distance.</p>
</div>
<h2 id="source-code-path">Source Code Path</h2>
<p>See <a class="xref" href="../index.html">HiNC App Anatomy</a> for git repository links.</p>
<p>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:</p>
<ul>
<li><code>wwwroot-src/src/router/treeRoutes.ts</code> — declares <code>TOOL_TABS</code> (general / cutter / holder /
clamping / intelligent) with <code>CUTTER_SECTIONS</code> and <code>HOLDER_SECTIONS</code>, and <code>routeForTreeId</code>, which
turns a <code>toolhouse/tool-&lt;n&gt;/&lt;tab&gt;/&lt;subtab&gt;</code> Control-Tree id into the <code>/tool-house</code> route params.</li>
<li><code>wwwroot-src/src/pages/ToolHousePage.vue</code> — renders the five-tab strip, mounts only the active
tab's panel, and keeps the tab segments when the selected tool changes.</li>
<li><code>wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts</code> — the Control-Tree ItemType
registry: <code>buildToolChildren</code> emits the tool node's <code>…/cutter</code>, <code>…/holder</code>, <code>…/clamping</code> and
<code>…/intelligent</code> children, General being the tool node's own panel.</li>
<li><code>wwwroot-src/src/components/controlTree/toolhouse/ToolNodePanel.vue</code> — 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.</li>
<li><code>wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue</code> — the Cutter tab's type
selector (Milling Cutter / Freeform Remover / None) plus the MillingCutter identity fields.</li>
<li><code>wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue</code> — the Holder tab's type
selector (None / Cylindroid / Freeform) plus the Cylindroid holder's Name / Note / auto Abstract
Note.</li>
<li><code>wwwroot-src/src/components/controlTree/toolhouse/ToolClampingPanel.vue</code> — the Clamping tab and
its two coupled fields.</li>
<li><code>wwwroot-src/src/components/controlTree/toolhouse/ToolIntelligentPanel.vue</code> — the Int. Holder tab;
a thin wrapper over <code>wwwroot-src/src/components/toolhouse/IntelligentHolderDiv.vue</code>, which holds
the Observation Location controls and reads no physics flag.</li>
<li><code>wwwroot-src/src/components/controlTree/NodeTabCascade.vue</code> — hosts the active tab's panel and the
levels nested below it.</li>
<li><code>wwwroot-src/src/composables/useRouteTabs.ts</code> — syncs the <code>:tab?</code> / <code>:subtab?</code> params with the URL.</li>
<li><code>wwwroot-src/src/composables/useToolHouse.ts</code> — the module-singleton state every tool-house panel
is a thin view over: the tool list, the active tool, and the rendering connection id.</li>
<li><code>Mech/ToolHouseController.cs</code> — <code>[Route(&quot;api/[controller]&quot;)]</code>, so <code>/api/ToolHouse</code>: the tool-level
fields the tool node edits — <code>PUT /{id}/note | exposed-height | preserved-distance</code>,
<code>GET/PUT /{id}/observation</code>, <code>POST DuplicateTool | RenameTool | SetHolderType</code>,
<code>DELETE DeleteTool</code>.</li>
<li><code>Mech/CutterController.cs</code> (<code>/api/Cutter</code>) and <code>Mech/CylindroidHolderController.cs</code>
(<code>/api/CylindroidHolder</code>) — the server surface behind the Cutter and Holder tabs.</li>
<li><code>wwwroot-src/src/api/toolHouse.ts</code> — the typed client for those endpoints.</li>
</ul>
<h2 id="see-also">See Also</h2>
<ul>
<li><a class="xref" href="index.html">Tool House Page</a> — the page this tool node sits in, and where the tool list and the route live</li>
<li><a href="cutter/index.html">Cutter Tab</a> — the cutter half of the tab cascade</li>
<li><a href="holder/index.html">Holder Tab</a> — the holder half</li>
</ul>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>