Archived
246 lines
12 KiB
HTML
246 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>HiNC App Anatomy | HiAPI-C# 2025 </title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="title" content="HiNC App Anatomy | 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">
|
|
<h1 id="hinc-app-anatomy">HiNC App Anatomy</h1>
|
|
|
|
<p>Anatomy is the <em>view ↔ model ↔ source</em> reference for the shipped HiNC applications: one page per
|
|
component, each naming the widget tree the user sees, the HiAPI types behind it, and the files that
|
|
implement it. It documents how the shipped apps are put together — it is not a build tutorial, and
|
|
for that see <a class="xref" href="../technique/api-foundations/getting-started.html">Getting Started</a>.</p>
|
|
<p>The section is grouped by <strong>the surface that owns a page</strong>: a folder per live route that hosts a
|
|
Control-Tree branch or several pages, a single page where a route needs only one, and — where the
|
|
shipped surface owns nothing, as with a reusable control or a cross-screen rule — the source
|
|
directory the components actually live in.</p>
|
|
<div class="IMPORTANT">
|
|
<h5>Important</h5>
|
|
<p>Anatomy makes <strong>no claim</strong> that Control-Tree ids are stable across versions, and no page may state
|
|
one. <code>treeRoutes.ts</code> guarantees something narrower: an old id keeps <em>resolving</em>, because each
|
|
regroup adds a migration hop. The ids themselves have moved repeatedly.</p>
|
|
</div>
|
|
<h2 id="finding-the-page-from-the-app">Finding the Page From the App</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>What you are looking at</th>
|
|
<th>Where its anatomy is</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>The window frame, its menu bar and its message bars</td>
|
|
<td><a href="shell/index.html">App Shell</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>/execution</code>, and <code>?tree=execution/…</code> on it</td>
|
|
<td><a href="execution/index.html">Execution Page</a> — its Mission branch is under <a href="execution/mission/index.html">Mission</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>/general-setup</code>, and <code>?tree=equipment/…</code> on it</td>
|
|
<td><a href="general-setup/index.html">General Setup Page</a> — its Controller branch is under <a href="general-setup/controller/index.html">Controller</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>/machine-tool</code></td>
|
|
<td><a href="general-setup/machine-tool.html">Machine Tool</a> — the route is a read-only preview of the same branch</td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>/tool-house/:toolId?/:tab?/:subtab?</code>, and <code>?tree=toolhouse/…</code></td>
|
|
<td><a href="tool-house/index.html">Tool House Page</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>/controller/:tab?</code></td>
|
|
<td><a href="legacy-controller.html">Legacy Controller</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>/util/file-explorer</code>, <code>/util/mech-builder</code></td>
|
|
<td><a href="util/index.html">Utility Pages</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>/login</code>, <code>/preference/log</code></td>
|
|
<td><a href="platform/index.html">Platform</a> — the two routes that document the platform rather than a machining step</td>
|
|
</tr>
|
|
<tr>
|
|
<td>A geometry editor embedded in any of the above</td>
|
|
<td><a href="geom/index.html">Geometry Panels</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td>A control that appears on more than one screen</td>
|
|
<td><a href="widget/index.html">Widgets</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td>A rule that holds across screens rather than on one</td>
|
|
<td><a href="conventions/index.html">Conventions</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td>Machinery under every screen — the Control-Tree engine, the <code>?tree=</code> id surface, the locale bundles, the host process</td>
|
|
<td><a href="platform/index.html">Platform</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td>A directory in one of the source trees, rather than a screen</td>
|
|
<td><a href="by-source/index.html">By Source Directory</a></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h2 id="sections">Sections</h2>
|
|
<ul>
|
|
<li><a href="conventions/index.html">Conventions</a> — The rules and shared contracts every page assumes: messaging, file paths, numeric values, the hub patterns, the canvas transport</li>
|
|
<li><a href="platform/index.html">Platform</a> — The machinery every route sits on and no user can point at: the Control-Tree engine, the id and route surface, session state, the locale bundles, the login gate, the log viewer and the host process</li>
|
|
<li><a href="shell/index.html">App Shell</a> — The frame every route renders inside: the Main Panel, its two message bars, and the Preference menu</li>
|
|
<li><a href="widget/index.html">Widgets</a> — The reusable controls pages embed rather than own, most-embedded first</li>
|
|
<li><a href="geom/index.html">Geometry Panels</a> — The primitive solids, the operators that combine and mesh them, and the switchboards that host both</li>
|
|
<li><a href="execution/index.html">Execution Page</a> — The run cockpit: its tool bars, the step column, the charts, and the Mission branch it hosts</li>
|
|
<li><a href="general-setup/index.html">General Setup Page</a> — The equipment Control Tree: the machine, the spindle envelope, the scene, the fixture, the workpiece and the controller branch</li>
|
|
<li><a href="tool-house/index.html">Tool House Page</a> — The tool library and the per-tool editor tabs, cutter and holder</li>
|
|
<li><a href="legacy-controller.html">Legacy Controller</a> — The superseded HardNcEnv controller surface and its REST implementation</li>
|
|
<li><a href="util/index.html">Utility Pages</a> — The two <code>/util/</code> routes: the File Explorer and the Mechanism Builder</li>
|
|
<li><a href="by-source/index.html">By Source Directory</a> — The same knowledge keyed on the source tree instead of the screen: one directory index per half of the flagship</li>
|
|
</ul>
|
|
<h2 id="the-two-codebases">The Two Codebases</h2>
|
|
<p>A page's <em>Source Code Path</em> section lists the files that implement it in the flagship web service.
|
|
The desktop client's counterparts are not listed at all: it takes no new feature work, and a
|
|
hand-maintained map of its files went stale faster than anyone read it. The two codebases are not
|
|
peers.</p>
|
|
<p><strong>HiNC-2025-webservice</strong> is the flagship — a Quasar SPA (Vue 3 + TypeScript + Pinia) served by
|
|
ASP.NET Core, and the only target for new feature work. Repository:
|
|
<a href="https://superhightech-gitea.webredirect.org/HiAPI/HiNC-2025-webservice.git">HiNC-2025-webservice.git</a></p>
|
|
<p><strong>HiNC-2025-win-desktop</strong> is the outgoing WPF client, kept here only so a reader familiar with the
|
|
desktop UI can find the equivalent web-service component. Do not start new work against it.
|
|
Repository:
|
|
<a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/HiNC-2025-win-desktop.git">HiNC-2025-win-desktop.git</a></p>
|
|
<div class="TIP">
|
|
<h5>Tip</h5>
|
|
<p>The host process, its configuration and the address it listens on are documented in
|
|
<a href="platform/program-and-hosting.html">Program and Hosting</a>.</p>
|
|
</div>
|
|
<h2 id="writing-a-page-here">Writing a Page Here</h2>
|
|
<ol>
|
|
<li><strong>Name the surface it documents</strong> in prose — the route, and where the component lives in a
|
|
Control Tree, its <code>?tree=</code> id. Make no claim that the id is stable.</li>
|
|
<li><strong>Layout</strong> — the widget tree as the user meets it, nested as the UI nests.</li>
|
|
<li><strong>Key Model</strong> — the backing HiAPI types, as <code><xref:></code> so the API reference is one click away.</li>
|
|
<li><strong>Source Code Path</strong> — the implementing files <strong>in the web service</strong>. Backtick every path, with
|
|
its extension: <code>tools/check-source-paths.ps1</code> resolves a full path against the source tree and a
|
|
bare file name by its base name, and refuses an entry carrying no backticks at all. Do not add
|
|
desktop-client files.</li>
|
|
<li><strong><code>## See Also</code></strong> — mandatory, and audited for reciprocity. An entry is not landed until the
|
|
target links back.
|
|
Anatomy is <strong>authoritative</strong> on component and source facts: when Manual and Anatomy disagree,
|
|
Anatomy is corrected first and Manual follows.</li>
|
|
</ol>
|
|
<h2 id="see-also">See Also</h2>
|
|
<ul>
|
|
<li><a href="by-source/index.html">Anatomy by Source Directory</a> — the inverse index: enter by the directory a
|
|
change landed in rather than by the screen it shows up on</li>
|
|
<li><a href="../manual/index.html">Manual</a> — the same shipped screens as an operating procedure rather than a
|
|
component breakdown</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>
|