Archived
deploy.
This commit is contained in:
@@ -0,0 +1,189 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Cylindroid Holder Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Cylindroid Holder 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<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-CylindroidHolderPanel">
|
||||
<h1 id="cylindroid-holder-panel">Cylindroid Holder Panel</h1>
|
||||
|
||||
<p>The key model is <a class="xref" href="../../../api/Hi.NcMech.Holders.CylindroidHolder.html">CylindroidHolder</a>: a holder revolved from a Z-R profile, carrying its own name and note and its own STL tessellation resolution.</p>
|
||||
<p>On the web client the holder occupies two child sections of the Holder node under the selected tool — Geometry and Resolution, the nodes whose role paths end in <code>.../holder/geometry</code> and <code>.../holder/resolution</code>, reached at <code>/tool-house/:toolId/holder/geometry</code> and <code>/tool-house/:toolId/holder/resolution</code>. Its Name, readonly Abstract Note and Note are edited one level up, on the <a class="xref" href="holder-panel.html">Holder Panel</a> itself, under the Metadata-on-container convention. Every field ships on both clients; what differs is the surface hosting them — the WPF client gives the same three fields a tab of their own.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<h3 id="web-layout">Web Layout</h3>
|
||||
<ul>
|
||||
<li>Geometry Section
|
||||
<ul>
|
||||
<li><a class="xref" href="../../geom/cylindroid-control.html">Cylindroid Panel</a> — the reusable Z-R pair table, driven by a model key</li>
|
||||
<li>Initializing Caption — stands in for the editor until the holder's cylindroid has been published under a key</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Resolution Section
|
||||
<ul>
|
||||
<li>Resolution Hint Caption — names the STL tessellation resolution used for display and collision meshing</li>
|
||||
<li>Linear Resolution (mm) Input Field</li>
|
||||
<li>Angle Resolution (deg) Input Field</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="wpf-layout">WPF Layout</h3>
|
||||
<ul>
|
||||
<li>Cylindroid Holder Panel
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Tabs
|
||||
<ul>
|
||||
<li>Geometry Tab
|
||||
<ul>
|
||||
<li><a class="xref" href="../../geom/cylindroid-control.html">Cylindroid Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Resolution Tab
|
||||
Model: <a class="xref" href="../../../api/Hi.NcMech.Holders.CylindroidHolder.html#Hi_NcMech_Holders_CylindroidHolder_PolarResolution2d">PolarResolution2d</a>
|
||||
<a class="xref" href="../../widget/polar-resolution-2d-panel.html">Polar Resolution 2d</a></li>
|
||||
<li>Info Tab
|
||||
<ul>
|
||||
<li>Name TextField (editable)</li>
|
||||
<li>AbstractNote TextField (readonly)</li>
|
||||
<li>Note TextField (editable)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Remember to call <a class="xref" href="../../../api/Hi.NcMech.Holders.CylindroidHolder.html#Hi_NcMech_Holders_CylindroidHolder_UpdateByCylindroid">UpdateByCylindroid()</a> after geometry reference or content changed.</p>
|
||||
<h2 id="feature">Feature</h2>
|
||||
<p>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.</p>
|
||||
<p><strong>Geometry.</strong> The section mounts the reusable Cylindroid editor on a key. <code>Get</code> publishes the holder's own <a class="xref" href="../../../api/Hi.NcMech.Holders.CylindroidHolder.html#Hi_NcMech_Holders_CylindroidHolder_Cylindroid">Cylindroid</a> in the index service under a per-session <code>-HolderCylindroid</code> 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: <code>UpdateGeometryContent</code> runs <code>UpdateByCylindroid()</code> and then <code>ClearCache()</code>, 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.</p>
|
||||
<p><strong>Resolution.</strong> The section writes the polar resolution straight onto the holder: <code>SetPolarResolution</code> assigns a fresh <a class="xref" href="../../../api/Hi.Geom.Resolution.PolarResolution2d.html">PolarResolution2d</a> built from the two values and calls <code>ClearCache()</code>, so the server regenerates the solid cache at the new tessellation. No topology resync is involved on this path. <code>Get</code> 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.</p>
|
||||
<p>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 <code>CylindroidHolder</code>; <code>SetPolarResolution</code> 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.</p>
|
||||
<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):</p>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue</code> — 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.</li>
|
||||
<li><code>wwwroot-src/src/components/geom/CylindroidEditor.vue</code> — the reusable Z-R profile editor the Geometry section wraps, driven by model key.</li>
|
||||
<li><code>wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue</code> — the parent Holder node's panel, which hosts this holder's Name, readonly Abstract Note and Note and commits them through <code>setCylindroidHolderName</code> / <code>setCylindroidHolderNote</code>.</li>
|
||||
<li><code>wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts</code> — grows the two child sections for a <code>CylindroidHolder</code> and routes both to the <code>HolderSection</code> item type.</li>
|
||||
<li><code>wwwroot-src/src/api/cylindroidHolder.ts</code> — the typed wrapper over <code>/api/CylindroidHolder</code>: <code>getCylindroidHolder</code>, <code>updateCylindroidHolderGeometry</code>, <code>setCylindroidHolderName</code>, <code>setCylindroidHolderNote</code>, <code>setCylindroidHolderResolution</code>.</li>
|
||||
<li><code>wwwroot-src/src/i18n/en/toolhouse.ts</code> — the two section labels, the tessellation hint, the two field labels and the initializing caption.</li>
|
||||
<li><code>Mech/CylindroidHolderController.cs</code> — <code>GET Get</code> (name / note / abstract note, the polar resolution, and — with a session key — the indexed cylindroid key) plus <code>POST UpdateGeometryContent | SetName | SetNote | SetPolarResolution</code>.</li>
|
||||
</ul>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../widget/polar-resolution-2d-panel.html">Polar Resolution 2D Panel</a> — the resolution editor this panel embeds</li>
|
||||
<li><a class="xref" href="../../geom/cylindroid-control.html">Cylindroid Control</a> — the shape editor this panel's Geometry surface
|
||||
embeds, and the shape whose tessellation the Resolution surface governs</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>
|
||||
@@ -0,0 +1,209 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Freeform Holder Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Freeform Holder 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<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-FreeformHolderPanel">
|
||||
<h1 id="freeform-holder-panel">Freeform Holder Panel</h1>
|
||||
|
||||
<p>The key model is <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html">FreeformHolder</a>: a holder whose shape comes from a referenced geometry, typically an STL, positioned by two anchor transformers — one to the spindle, one to the cutter.</p>
|
||||
<p>On the web client the holder occupies four child sections of the Holder node under the selected tool — Geometry, Geom To Spindle, Geom To Cutter and Resolution, the nodes whose role paths end in <code>.../holder/geometry</code>, <code>.../holder/geom-to-spindle</code>, <code>.../holder/geom-to-cutter</code> and <code>.../holder/resolution</code>, reached at <code>/tool-house/:toolId/holder/:subtab</code>. Its Name, readonly Abstract Note and Note are edited one level up, on the <a class="xref" href="holder-panel.html">Holder Panel</a> itself, under the Metadata-on-container convention. Every field ships on both clients; what differs is the surface hosting them — the WPF client gives the same fields a tab strip of its own.</p>
|
||||
<p>The three shape sections are not holder-specific editors. They are the same generic Geometry and Transformer slots the <a class="xref" href="../../general-setup/fixture.html">Fixture</a> branch of the General Setup page is built from: a kind picker on the section node, and the chosen kind's own editor on the child node below it. So an STL holder is picked as <code>StlFile</code> and its source file set through the shared StlFile editor, a <code>TransformationGeom</code> holder grows Inner Geometry and Inner Transformer nodes, a <code>GeomCombination</code> holder grows one node per item, and each placement grows the chosen transformer kind's editor — Static Translation for the usual <code>(0, 0, h)</code> offset.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<h3 id="web-layout">Web Layout</h3>
|
||||
<ul>
|
||||
<li>Geometry Section
|
||||
<ul>
|
||||
<li>Geometry Type Selector — None / Box3d / Cylindroid / StlFile / TransformationGeom / GeomCombination</li>
|
||||
<li>The chosen kind's editor, on the child node the kind grows</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Geom To Spindle Section — where the holder sits relative to the spindle
|
||||
<ul>
|
||||
<li>Transformer Type Selector — Static Translation / Static Rotation / Static Freeform / Dynamic Translation / Dynamic Rotation / General Transform / No Transform</li>
|
||||
<li>The chosen kind's editor, on the child node the kind grows</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Geom To Cutter Section — where the cutter sits relative to the holder
|
||||
<ul>
|
||||
<li>Transformer Type Selector and the chosen kind's editor, as above</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Resolution Section
|
||||
<ul>
|
||||
<li>Resolution Hint Caption — names the STL tessellation resolution used for display and collision meshing</li>
|
||||
<li>Linear Resolution (mm) Input Field</li>
|
||||
<li>Angle Resolution (deg) Input Field</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="wpf-layout">WPF Layout</h3>
|
||||
<ul>
|
||||
<li>Freeform Holder Panel
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Tabs
|
||||
<ul>
|
||||
<li>Geometry Tab
|
||||
<ul>
|
||||
<li><a class="xref" href="../../geom/geom-manage-control.html">Geometry Management Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Anchor Tab
|
||||
(Apply <a class="xref" href="../../geom/transformer-panel.html">Transformer Manage Panel</a> to set the following tabs)
|
||||
<ul>
|
||||
<li>Geom To Spindle Tab</li>
|
||||
<li>Geom To Cutter Tab</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Resolution Tab
|
||||
Model: <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html#Hi_NcMech_Holders_FreeformHolder_PolarResolution2d">PolarResolution2d</a>
|
||||
<a class="xref" href="../../widget/polar-resolution-2d-panel.html">Polar Resolution 2d</a></li>
|
||||
<li>Info Tab
|
||||
<ul>
|
||||
<li>Name TextField (editable)</li>
|
||||
<li>AbstractNote TextField (readonly)</li>
|
||||
<li>Note TextField (editable)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Remember to call <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html#Hi_NcMech_Holders_FreeformHolder_UpdateByGeom">UpdateByGeom()</a> after geometry reference or content changed.</p>
|
||||
<h2 id="feature">Feature</h2>
|
||||
<p>The generic editors reach the holder's own members, and that is what makes the split work. When the Holder node's children are built, the page calls <code>FreeformHolderController</code>'s <code>Get</code> with its session key; the server publishes the holder's <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html#Hi_NcMech_Holders_FreeformHolder_Geom">Geom</a>, <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html#Hi_NcMech_Holders_FreeformHolder_GeomToSpindleTransformer">GeomToSpindleTransformer</a> and <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html#Hi_NcMech_Holders_FreeformHolder_GeomToCutterTransformer">GeomToCutterTransformer</a> in the index service under three per-session keys (<code>-HolderGeom</code>, <code>-HolderGeomToSpindle</code>, <code>-HolderGeomToCutter</code>) and hands the keys back. The keys name the very objects the holder holds, so an edit through a kind editor lands on the holder directly. The keys are returned even when a member is empty — nothing is published then, the section's picker reads an empty slot, and picking a kind fills that same key — which is how a freshly switched-to Freeform holder, whose geometry starts empty, gets its first shape.</p>
|
||||
<p>Picking a kind is a container-aware create, not a bare <code>New</code>. The Geometry picker calls <code>CreateGeometry</code>, which builds the geometry, sets it as the holder's <code>Geom</code> and publishes it under the section's key (None clears the geometry). A placement picker first creates the transformer through the kind's own <code>New</code> endpoint and then attaches it with <code>UpdateGeomToSpindleTransformer</code> or <code>UpdateGeomToCutterTransformer</code>. Without the attach, only the index-service entry would change and the holder would keep pointing at its old transformer.</p>
|
||||
<p>Because the generic editors hold no reference back to the holder, every edit at or below a section ends in the holder resync the page wires onto the section: a geometry edit calls <code>UpdateGeometryContent</code>, a placement edit re-attaches the transformer under its key. Both run <code>UpdateByGeom()</code> to regenerate the solid, <code>ClearCache()</code>, and <code>AlignAnchorByExposedCutterHeight()</code> to re-place the cutter under the holder — clearing the cache alone would leave the cutter where it was. The page then refreshes the tool list and the canvas.</p>
|
||||
<p>The Resolution section writes the polar resolution straight onto the holder: <code>SetPolarResolution</code> assigns a fresh <a class="xref" href="../../../api/Hi.Geom.Resolution.PolarResolution2d.html">PolarResolution2d</a> and the holder swaps its solid for one born with the new value, keeping the geometry. <code>Get</code> also returns the current pair, which is how the two fields are seeded.</p>
|
||||
<p>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 <code>FreeformHolder</code>; <code>SetPolarResolution</code> rejects a linear or angle value that is not greater than zero, and the Resolution section refuses to send one. Fields commit on blur or Enter.</p>
|
||||
<p>Switching a tool to Freeform is a committing choice. <code>SetHolderType</code> assigns a new <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html">FreeformHolder</a> only when the tool does not already carry one, so a holder authored on the WPF client or through HiNcRcl survives a round trip through the web page with its geometry, anchors and resolution intact.</p>
|
||||
<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):</p>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts</code> — grows the four child sections for a <code>FreeformHolder</code>: reads <code>Get</code> to publish the three members, binds the Geometry section to the generic <code>Geometry</code> item type and the two placements to the generic <code>Transformer</code> item type (with the create hooks and the resync chain), and routes Resolution to the <code>HolderSection</code> item type.</li>
|
||||
<li><code>wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue</code> / <code>TransformerSlotPanel.vue</code> — the kind pickers on the three shape sections; the chosen kind's editor lives on the child node (<code>wwwroot-src/src/components/geom/geometryEditors.ts</code>, <code>wwwroot-src/src/components/topo/transformerEditors.ts</code>).</li>
|
||||
<li><code>wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue</code> — the Resolution section, dispatching on the holder type to <code>FreeformHolderController</code> for a Freeform holder.</li>
|
||||
<li><code>wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue</code> — the parent Holder node's panel, which hosts this holder's Name, readonly Abstract Note and Note and commits them through <code>setFreeformHolderName</code> / <code>setFreeformHolderNote</code>.</li>
|
||||
<li><code>wwwroot-src/src/api/freeformHolder.ts</code> — the typed wrapper over <code>/api/FreeformHolder</code>: <code>getFreeformHolder</code>, <code>createFreeformHolderGeometry</code>, <code>updateFreeformHolderGeometry</code>, <code>resyncFreeformHolder</code>, <code>updateFreeformHolderGeomToSpindle</code>, <code>updateFreeformHolderGeomToCutter</code>, <code>setFreeformHolderName</code>, <code>setFreeformHolderNote</code>, <code>setFreeformHolderResolution</code>.</li>
|
||||
<li><code>wwwroot-src/src/i18n/en/toolhouse.ts</code> — the two placement section labels (<code>toolhouse.node.geomToSpindle</code> / <code>geomToCutter</code>) and the Freeform sections hint; the zh-Hans and zh-Hant files carry the same keys.</li>
|
||||
<li><code>Mech/FreeformHolderController.cs</code> — <code>GET Get</code> (name / note / abstract note, the polar resolution, and — with a session key — the three member keys) plus <code>POST CreateGeometry | UpdateGeometry | IndexCurrentGeometry | UpdateGeometryContent | UpdateGeomToSpindleTransformer | UpdateGeomToCutterTransformer | SetName | SetNote | SetPolarResolution</code>.</li>
|
||||
</ul>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../widget/polar-resolution-2d-panel.html">Polar Resolution 2D Panel</a> — the resolution editor this panel embeds</li>
|
||||
<li><a class="xref" href="../../general-setup/fixture.html">Fixture Page</a> — the other user of the generic Geometry and Transformer slots this holder's shape sections are made of</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>
|
||||
@@ -0,0 +1,191 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Holder Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Holder 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<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-HolderPanel">
|
||||
<h1 id="holder-panel">Holder Panel</h1>
|
||||
|
||||
<p>This section describes the user interface and behavior for managing different types of tool holders in the application. Tool holders are crucial components in defining a complete tool assembly.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>While tool holders are essential components in real-world machining operations, some users may choose not to define them in simulation environments for convenience, particularly when collision detection is not a primary concern. The system allows for this flexibility, though it's recommended to include holders for accurate representation and comprehensive collision analysis.</p>
|
||||
</div>
|
||||
<p>The primary models involved are subclasses of <a class="xref" href="../../../api/Hi.NcMech.Holders.IHolder.html">IHolder</a>. Two common types are:</p>
|
||||
<ul>
|
||||
<li><strong><a class="xref" href="cylindroid-holder-panel.html">Cylindroid Holder</a></strong>: Represents holders with a cylindrical geometry. See <a class="xref" href="../../../api/Hi.NcMech.Holders.CylindroidHolder.html">CylindroidHolder</a>.</li>
|
||||
<li><strong><a class="xref" href="freeform-holder-panel.html">Freeform Holder</a></strong>: Represents holders with more complex, freeform geometry, often defined by STL files. See <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html">FreeformHolder</a>.</li>
|
||||
</ul>
|
||||
<p>Each holder type has its own user interface elements for defining its geometry and properties.</p>
|
||||
<p>On the web client this panel is the Holder tab of the <a class="xref" href="../index.html">Tool House Page</a>, reached at <code>/tool-house/:toolId/holder</code>. It is the panel of the Control-Tree Holder node under the selected tool — the node whose role path ends in <code>.../holder</code>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<h3 id="web-layout">Web Layout</h3>
|
||||
<ul>
|
||||
<li>Holder Node Panel
|
||||
<ul>
|
||||
<li>Title Label</li>
|
||||
<li>Holder Type Selector — None / Cylindroid Holder / Freeform Holder</li>
|
||||
<li>Holder branch, rendered while the type is Cylindroid or Freeform
|
||||
<ul>
|
||||
<li>Name TextField (editable)</li>
|
||||
<li>Abstract Note TextField (readonly, derived by the model)</li>
|
||||
<li>Note TextField (editable)</li>
|
||||
<li>Sections Hint Caption — names the sections below for the current type</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>No-holder branch — one hint, <code>toolhouse.holder.noHolderHint</code>, inviting the reader to pick Cylindroid Holder or Freeform Holder</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>The three identity fields belong to whichever holder the tool carries. They sit on this panel under the Metadata-on-container convention — a container's own General fields are edited on the container's panel instead of in a General child — and they commit through the per-type holder controller's <code>SetName</code> and <code>SetNote</code> (<code>CylindroidHolderController</code> or <code>FreeformHolderController</code>), not through <code>ToolHouseController</code>. No holder leaves the panel without them.</p>
|
||||
<p>The type also decides what grows below the node. A Cylindroid holder grows two child sections, Geometry and Resolution — the nodes whose role paths end in <code>.../holder/geometry</code> and <code>.../holder/resolution</code>; see <a class="xref" href="cylindroid-holder-panel.html">Cylindroid Holder Panel</a>. A Freeform holder grows four — Geometry, Geom To Spindle, Geom To Cutter and Resolution; see <a class="xref" href="freeform-holder-panel.html">Freeform Holder Panel</a>. Selecting a section replaces this panel in the slave column with that section's own panel. None grows no children, so the Holder node is a leaf and the hint is the whole surface.</p>
|
||||
<p>This panel carries no object management of its own. Object management for the tool library sits on the tool-house root node, where the <a class="xref" href="../../widget/object-management-menu-button.html">Object Management Menu Button</a> is bound to the whole <code>.MachiningToolHouse</code> file rather than to a per-holder file.</p>
|
||||
<h3 id="wpf-layout">WPF Layout</h3>
|
||||
<ul>
|
||||
<li>Holder Panel
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li><a class="xref" href="../../widget/object-management-menu-button.html">Object Management Menu Button</a>
|
||||
<ul>
|
||||
<li>File extension is <code>.Holder</code>, load type <a class="xref" href="../../../api/Hi.NcMech.Holders.IHolder.html">IHolder</a></li>
|
||||
<li>The pointed Editor Panel is the Holder Sub Management Panel.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Holder Management Panel
|
||||
<ul>
|
||||
<li>Holder Type Selection Bar — None / Cylindroid / Freeform</li>
|
||||
<li>Holder Sub Management Panel
|
||||
A ContentPresenter whose content varies by the Holder Type: the <a class="xref" href="cylindroid-holder-panel.html">Cylindroid Holder Panel</a>, the <a class="xref" href="freeform-holder-panel.html">Freeform Holder Panel</a>, or nothing for None.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="feature">Feature</h2>
|
||||
<p>Committing a type on the web is one server call plus a cache clear. <code>SetHolderType</code> maps the selector value onto the holder classes: none clears the tool's holder, while cylindroid and freeform each assign a new holder <strong>only when the tool does not already carry one of that class</strong> — so re-picking the type a tool already has keeps the holder it has, and the edits on it, rather than replacing it. When the caller passes its session key the server re-indexes the resulting holder under that session's holder key, and removes that entry for None, so the session key keeps pointing at the tool's current holder. The response carries the holder's class name and its abstract note.</p>
|
||||
<p>The panel then calls <code>ClearToolCache</code>, which clears the tool's cached solids and, when the holder implements <a class="xref" href="../../../api/Hi.Common.IClearCache.html">IClearCache</a>, the holder's own cache as well, so the tool canvas redraws against the new holder. Finally it emits a structure change for its own node, which is how the Geometry and Resolution sections appear or disappear with the type.</p>
|
||||
<p><code>GetHolder</code> reports the same pair — class name and abstract note — and is what the panel reads on mount to seed the selector; an unknown tool id answers Not Found. The panel then reads the per-type controller's <code>Get</code> (<code>CylindroidHolderController</code> or <code>FreeformHolderController</code>) to fill the three identity fields; for a Freeform holder that same call also publishes the holder's geometry and two placements under the session's keys for the sections below.</p>
|
||||
<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):</p>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue</code> — the Holder node's panel: the None / Cylindroid / Freeform selector, the holder's Name / readonly Abstract Note / Note (committed through the per-type controller) and the no-holder hint. Commits a type change through <code>setHolderType</code> followed by <code>clearToolCache</code>.</li>
|
||||
<li><code>wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts</code> — registers this panel as the <code>ToolHolder</code> item type; its holder child builder grows Geometry and Resolution for a <code>CylindroidHolder</code>, Geometry / Geom To Spindle / Geom To Cutter / Resolution for a <code>FreeformHolder</code>, and nothing for None.</li>
|
||||
<li><code>wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue</code> — the panel behind the Cylindroid holder's two sections and both holders' Resolution section, dispatching on the last segment of the node's role path and on the holder type.</li>
|
||||
<li><code>wwwroot-src/src/components/controlTree/toolhouse/ToolHouseRootPanel.vue</code> — the tool-house root panel, which carries the Object Management Menu Button for the <code>.MachiningToolHouse</code> file.</li>
|
||||
<li><code>wwwroot-src/src/api/toolHouse.ts</code> — <code>getHolder</code>, <code>setHolderType</code> and <code>clearToolCache</code>, plus the <code>HolderType</code> union (<code>None</code> / <code>CylindroidHolder</code> / <code>FreeformHolder</code>) the selector's three values map onto.</li>
|
||||
<li><code>wwwroot-src/src/api/cylindroidHolder.ts</code> / <code>wwwroot-src/src/api/freeformHolder.ts</code> — <code>get…Holder</code>, <code>set…HolderName</code> and <code>set…HolderNote</code> for each holder type, behind the three identity fields.</li>
|
||||
<li><code>wwwroot-src/src/i18n/en/toolhouse.ts</code> — the <code>toolhouse.holder.*</code> strings this panel renders: holderType, abstractNote, sectionsHint, freeformSectionsHint, noHolderHint, cylindroidHolder, freeformHolder.</li>
|
||||
<li><code>Mech/ToolHouseController.cs</code> — <code>POST SetHolderType</code>, <code>GET GetHolder</code> and <code>POST ClearToolCache</code>, the three endpoints behind the selector. Per-holder-type editing lives in the dedicated holder controllers.</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>
|
||||
@@ -0,0 +1,131 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Holder Tab | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Holder Tab | 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<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-Holder">
|
||||
<h1 id="holder-tab">Holder Tab</h1>
|
||||
|
||||
<p>The Holder tab of the Tool House page, reached as <code>/tool-house/:toolId/holder</code> and, for its inner
|
||||
editors, <code>/tool-house/:toolId/holder/:subtab</code>. The tab's own panel chooses the holder type; the type
|
||||
chosen decides which editor grows below it, and each type carries its own geometry and resolution.</p>
|
||||
<p>Ordered with the tab's own panel first, then one page per holder type.</p>
|
||||
<h2 id="pages">Pages</h2>
|
||||
<ul>
|
||||
<li><a href="holder-panel.html">Holder Panel</a> — The tab itself: the holder type selector and the fields common to every holder</li>
|
||||
<li><a href="cylindroid-holder-panel.html">Cylindroid Holder Panel</a> — The revolved Z-R profile holder, its geometry and its polar resolution</li>
|
||||
<li><a href="freeform-holder-panel.html">Freeform Holder Panel</a> — The freeform holder, and where its geometry is edited</li>
|
||||
</ul>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="../index.html">Tool House Page</a> — the page these tabs belong to</li>
|
||||
<li><a href="../cutter/index.html">Cutter Tab</a> — the sibling tab, and the other half of a tool</li>
|
||||
<li><a href="../stick-tool-panel.html">Stick Tool Panel</a> — the tool node whose tab cascade this tab belongs to</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>
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
<div id="sidetoggle">
|
||||
<div>
|
||||
<div class="sidefilter">
|
||||
<form class="toc-filter">
|
||||
<span class="glyphicon glyphicon-filter filter-icon"></span>
|
||||
<span class="glyphicon glyphicon-remove clear-icon" id="toc_filter_clear"></span>
|
||||
<input type="text" id="toc_filter_input" placeholder="Filter by title" onkeypress="if(event.keyCode==13) {return false;}">
|
||||
</form>
|
||||
</div>
|
||||
<div class="sidetoc">
|
||||
<div class="toc" id="toc">
|
||||
|
||||
<ul class="nav level1">
|
||||
<li>
|
||||
<a href="index.html" name="" title="Overview">Overview</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="holder-panel.html" name="" title="Holder Panel">Holder Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="cylindroid-holder-panel.html" name="" title="Cylindroid Holder Panel">Cylindroid Holder Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="freeform-holder-panel.html" name="" title="Freeform Holder Panel">Freeform Holder Panel</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Holder Panel","href":"holder-panel.html","topicHref":"holder-panel.html"},{"name":"Cylindroid Holder Panel","href":"cylindroid-holder-panel.html","topicHref":"cylindroid-holder-panel.html"},{"name":"Freeform Holder Panel","href":"freeform-holder-panel.html","topicHref":"freeform-holder-panel.html"}]}
|
||||
Reference in New Issue
Block a user