deploy.
This commit is contained in:
@@ -112,9 +112,6 @@ hold across it, and the traps that survive a careful reading of any single file.
|
||||
where a shipped surface depends on it, but the engine's own structure is covered by the generated
|
||||
<a href="../../api/Hi.Machining.html">API Reference</a>, which stays correct in a way a hand-written index could
|
||||
not.</p>
|
||||
<p>Neither is the outgoing Windows desktop client. It takes no new feature work, so a hand-written
|
||||
index of its tree drifts with every flagship change and is read by nobody; the same reasoning
|
||||
retired the page-by-page map of its files.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="../index.html">HiNC App Anatomy</a> — the section index, and the surface-keyed way in</li>
|
||||
|
||||
@@ -259,9 +259,15 @@ copy-paste for indexed objects. Documented in
|
||||
<a class="xref" href="../widget/mat4d-control.html">Mat4dControl Component</a>.</li>
|
||||
</ul>
|
||||
<h2 id="controller-and-demo">Controller and Demo</h2>
|
||||
<p><code>Controller/</code> is the single-file surface behind the legacy controller page. It has a successor in
|
||||
<code>Mech/SoftNcRunnerController.cs</code>, whose own doc comment says so, but <strong>both are live</strong> — the legacy
|
||||
page has not been removed. Documented in <a class="xref" href="../legacy-controller.html">Legacy Controller</a>.</p>
|
||||
<p><code>Controller/</code> is the single-file surface over the legacy HardNcEnv model, <code>MachiningProject.NcEnv</code>.
|
||||
The Legacy Controller page that drove it was removed on 2026-09-11, but the controller is still
|
||||
mounted: its routes edit the legacy tables, a different store from the runner tables that
|
||||
<code>Mech/SoftNcRunnerController.cs</code> — its successor, as that file's own doc comment says — edits. The
|
||||
successor covers the brand, the axis limits and rapid feedrates, the tooling time, the work
|
||||
coordinates, the datum tables and the tool offsets, but not every route — among them the work-coordinate Align
|
||||
P0 pair, the shortest-rotary toggle, the per-axis max rotary speed and the Heidenhain master-axis
|
||||
character have no soft-runner endpoint. Only <code>GET cnc-brand</code> still has a client — the Execution
|
||||
tool bar's Heidenhain Coordinate gate. Documented in <a class="xref" href="../legacy-controller-settings.html">Legacy Controller Model (HardNcEnv)</a>.</p>
|
||||
<p><code>Demo/</code> is customer-facing sample code — a custom colour guide and a per-step optimization sweep —
|
||||
compiled into the assembly with no call site in the running application. Read it as an example of
|
||||
how to extend the engine, not as part of the shipped behaviour.</p>
|
||||
|
||||
@@ -95,8 +95,8 @@ out where they occur.</p>
|
||||
<h2 id="the-one-thing-to-know-first">The One Thing to Know First</h2>
|
||||
<p><code>components/</code> is grouped <strong>both ways at the same level</strong>, and that is deliberate rather than untidy:</p>
|
||||
<ul>
|
||||
<li><strong>Page-scoped</strong> — <code>components/controller/</code>, <code>components/execution/</code> and half of <code>components/mech/</code>
|
||||
are chrome for exactly one route.</li>
|
||||
<li><strong>Page-scoped</strong> — <code>components/execution/</code> and half of <code>components/mech/</code> are chrome for exactly
|
||||
one route.</li>
|
||||
<li><strong>Domain-scoped</strong> — <code>components/geom/</code>, <code>components/topo/</code>, <code>components/toolhouse/</code>,
|
||||
<code>components/spindle/</code>, <code>components/workpiece/</code> and <code>components/mission/</code> are pulled in from
|
||||
wherever the domain surfaces, most often the Control Tree.</li>
|
||||
@@ -200,7 +200,7 @@ place” behaviour the tree pages describe. Documented in
|
||||
<a class="xref" href="../platform/session-state.html">Session State</a> for the keep-mounted flag that decides whether a
|
||||
collapse unmounts its content.</li>
|
||||
<li><code>wwwroot-src/src/components/mission/</code>, <code>.../toolhouse/</code>, <code>.../spindle/</code>, <code>.../preference/</code>,
|
||||
<code>.../mech/</code>, <code>.../workpiece/</code> and <code>.../controller/</code> — the domain and page folders named above. The
|
||||
<code>.../mech/</code> and <code>.../workpiece/</code> — the domain and page folders named above. The
|
||||
<code>*Div.vue</code> suffix inside the Tool House folder is a convention carried over from the legacy Blazor
|
||||
components: a Div is an embeddable content fragment with no panel chrome.</li>
|
||||
</ul>
|
||||
|
||||
@@ -153,9 +153,11 @@ can put its own content on a canvas without touching the transport.</p>
|
||||
Execution displayee to it</li>
|
||||
</ul>
|
||||
<p>Six further controllers bind content the same way — the STL preview, the Tool House, the General
|
||||
Setup equipment, the machine tool, the Mech Builder general mechanism and the Controller page —
|
||||
each with its own route and its own displayee, all reaching the engine through the same connection
|
||||
ID.</p>
|
||||
Setup equipment, the machine tool, the Mech Builder general mechanism and the legacy HardNcEnv
|
||||
controller — each with its own route, all reaching the engine through the same connection ID. The
|
||||
first five bind a displayee of their own; the last binds the shared Execution displayee, and it has
|
||||
had no caller since the Legacy Controller page was removed on 2026-09-11 — the route is still
|
||||
mounted, but no canvas in the SPA initializes against it.</p>
|
||||
<h2 id="key-points">Key Points</h2>
|
||||
<ul>
|
||||
<li>Every canvas data-stream operation is indexed by the connection ID.</li>
|
||||
@@ -186,8 +188,9 @@ Execution displayee to the engine named by the connection ID.</li>
|
||||
(<code>api/mech/machine-tool/display</code>).</li>
|
||||
<li><code>Mech/MechBuilder/GeneralMechanismDisplayController.cs</code> — the Mech Builder canvas binding
|
||||
(<code>api/general-mechanism/display</code>).</li>
|
||||
<li><code>Controller/ControllerController.cs</code> — the Controller page's canvas binding
|
||||
(<code>initialize-display/{connectionId}</code>).</li>
|
||||
<li><code>Controller/ControllerController.cs</code> — the legacy controller surface's canvas binding
|
||||
(<code>initialize-display/{connectionId}</code>), which assigns the shared Execution displayee; still mounted,
|
||||
with no SPA caller since the Legacy Controller page was removed.</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
|
||||
@@ -181,8 +181,8 @@ rendering flags and the anchor labels.</li>
|
||||
control-tree node names and the mission command kinds.</li>
|
||||
<li><code>wwwroot-src/src/i18n/zh-Hant/mission.ts</code> — the PreSetting command fields, including Machining
|
||||
Resolution and the meshed-geometry file picker.</li>
|
||||
<li><code>wwwroot-src/src/i18n/zh-Hant/controller.ts</code> and <code>wwwroot-src/src/i18n/zh-Hant/softNc.ts</code> — the
|
||||
Datum Preset tab, its table, and the runner's datum-preset row.</li>
|
||||
<li><code>wwwroot-src/src/i18n/zh-Hant/softNc.ts</code> — the runner's Datum Preset and Datum Shift rows and the
|
||||
datum table behind them.</li>
|
||||
<li><code>wwwroot-src/src/i18n/zh-Hant/execution.ts</code> — the Execution rendering flags, where Meshed
|
||||
Geometry and Fixture appear together.</li>
|
||||
<li><code>wwwroot-src/src/i18n/index.ts</code> — <code>createI18n()</code>, <code>applyLocale()</code> and <code>SUPPORTED_LOCALES</code>, the
|
||||
|
||||
+1
-1
@@ -103,7 +103,7 @@
|
||||
<li><strong>Coordinate</strong> — Program Zero, ISO Coordinate, Heidenhain Coordinate</li>
|
||||
<li><strong>Display Aids</strong> — Dimension Bar, Color Scale Bar</li>
|
||||
</ul>
|
||||
<p>The ClStrip flag is not offered here; the <code>Tool Path</code> button owns it. Heidenhain Coordinate appears only when <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.<a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_NcEnv">NcEnv</a>.<a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_CncBrand">CncBrand</a> is <a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Heidenhain">Heidenhain</a>. The menu is a shared component because other screens use it too — see the <a class="xref" href="../legacy-controller.html">Legacy Controller Page</a>.</p>
|
||||
<p>The ClStrip flag is not offered here; the <code>Tool Path</code> button owns it. Heidenhain Coordinate appears only when <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.<a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_NcEnv">NcEnv</a>.<a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_CncBrand">CncBrand</a> is <a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Heidenhain">Heidenhain</a> — the tool bar reads that value through <code>GET /api/Controller/cnc-brand</code>, and the Execution displayee applies the same test before it draws the Heidenhain coordinate, so the row is offered exactly when the scene can show it. Mind which brand that is: the legacy HardNcEnv model's, loaded with the project, not the runner brand chosen on the General Setup page's Controller branch — switching the runner to Heidenhain does not reveal the row. Since the Legacy Controller page was removed on 2026-09-11 no screen writes the value: it comes from the project's <code>NcEnv</code> element, or from the still-mounted REST face — the <code>PUT</code> half of the same route, or a whole-model swap through <code>POST /api/Controller/update</code>. The menu is a shared component because other canvases use it too — see the <a class="xref" href="../widget/renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a>.</p>
|
||||
</li>
|
||||
<li><p><code>Meshed Geom ▾</code> — the workpiece's rendering cache and geometry-diff settings: the <a class="xref" href="graphic-cache-menu.html">Graphic-Cache SubMenu</a> and Diff Visual Radius, with a <code>Diff</code> badge when a difference is present.</p>
|
||||
</li>
|
||||
|
||||
@@ -237,9 +237,9 @@ but with one panel mounted at a time, the change that matters in practice is a p
|
||||
<h2 id="the-table-primitive">The Table Primitive</h2>
|
||||
<p>Where a leaf renders a table it is Quasar's markup table — dense, flat, bordered — with a
|
||||
hand-written header and body and a repeat over the rows. No panel in the branch uses the data-table
|
||||
component, and the four data tables left in the application are the legacy controller tabs this
|
||||
branch supersedes. The practical difference is that these tables have no built-in sort, no pagination
|
||||
and no column menu: what the header says is what the column is.</p>
|
||||
component, and since the legacy controller tabs were removed nothing else in the application does
|
||||
either. The practical difference is that these tables have no built-in sort, no pagination and no
|
||||
column menu: what the header says is what the column is.</p>
|
||||
<p>Key columns are rendered as plain text and cannot be edited: the tool and edge numbers of a <code>$TC_DP</code>
|
||||
row, a tool name, an <code>R</code> number, a <code>#</code> variable number, a datum row index, a native parameter id, and
|
||||
the axis names of every per-axis table, which follow the machining chain rather than the panel. The
|
||||
|
||||
@@ -90,8 +90,9 @@
|
||||
<p>The Controller branch is the SoftNcRunner-native settings face: the controller the project actually
|
||||
parses NC with, edited one tree node at a time. It lives on the General Setup page at
|
||||
<code>/general-setup</code> under the Control-Tree id <code>equipment/controller</code>, and grows two plane stems beneath
|
||||
it — <code>equipment/controller/machine</code> and <code>equipment/controller/program-data</code>. The superseded
|
||||
HardNcEnv surface still ships as a route of its own at <code>/controller</code>, and edits a different model.</p>
|
||||
it — <code>equipment/controller/machine</code> and <code>equipment/controller/program-data</code>. A bookmark to the
|
||||
retired <code>/controller</code> address, where the Legacy Controller page used to edit the deprecating HardNcEnv
|
||||
model instead of the runner, redirects to this branch root.</p>
|
||||
<div class="IMPORTANT">
|
||||
<h5>Important</h5>
|
||||
<p>Anatomy makes no claim that these ids are stable across versions. See
|
||||
@@ -230,12 +231,6 @@ switch. No panel refreshes it, so an edit that empties a table changes neither t
|
||||
branch until one of those happens.</p>
|
||||
<p>Both structural writes are refused while an NC program is playing: installing a runner and switching
|
||||
brand each answer a conflict rather than swapping the parser under a running session.</p>
|
||||
<h2 id="the-superseded-route">The Superseded Route</h2>
|
||||
<p>The legacy controller page still ships at <code>/controller/:tab?</code> and is reached from the app menu bar's
|
||||
<strong>Page → Legacy-Controller</strong> entry. It edits <a class="xref" href="../../../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a> through its own REST
|
||||
surface, which is a different model from the runner this branch edits — the two are not two views of
|
||||
one object, and an edit on one is invisible to the other. Its anatomy is
|
||||
<a class="xref" href="../../legacy-controller.html">Legacy Controller Page</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li><strong>General Setup</strong> Control Tree — the left dock of <code>/general-setup</code>
|
||||
@@ -319,9 +314,8 @@ browser and its extension filter, the expected type it sends with a paste, and t
|
||||
panel listens to.</li>
|
||||
<li><code>wwwroot-src/src/pages/GeneralSetupPage.vue</code> — the route that creates the <code>equipment</code>-scoped tree
|
||||
host this branch is built in.</li>
|
||||
<li><code>wwwroot-src/src/router/routes.ts</code> — the <code>/general-setup</code> route and the still-shipping
|
||||
<code>/controller/:tab?</code> route beside it.</li>
|
||||
<li><code>wwwroot-src/src/components/AppMenuBar.vue</code> — the Page menu entry that reaches the legacy route.</li>
|
||||
<li><code>wwwroot-src/src/router/routes.ts</code> — the <code>/general-setup</code> route, and the redirect stub that sends a
|
||||
bookmarked <code>/controller</code> address to this branch root.</li>
|
||||
<li><code>wwwroot-src/src/i18n/en/softNc.ts</code> — every label, group intro, hint and empty string this branch
|
||||
renders.</li>
|
||||
<li><code>wwwroot-src/src/i18n/en/tree.ts</code> — the <strong>Controller</strong> root label.</li>
|
||||
@@ -378,10 +372,8 @@ settings, one page per editor</li>
|
||||
ownership rules that keep them on the project</li>
|
||||
<li><a class="xref" href="../index.html">General Setup Page</a> — the page that hosts this branch, and the equipment items beside it</li>
|
||||
<li><a class="xref" href="../../platform/control-tree.html">Control Tree</a> — the engine that builds, rebuilds and selects this branch</li>
|
||||
<li><a class="xref" href="../../legacy-controller.html">Legacy Controller Page</a> — the superseded HardNcEnv route this branch replaces, still shipped
|
||||
at <code>/controller</code></li>
|
||||
<li><a class="xref" href="../../legacy-controller-settings.html">Legacy Controller Settings</a> — the model that route edits, what this branch shares with
|
||||
it, and the three settings it holds alone</li>
|
||||
<li><a class="xref" href="../../legacy-controller-settings.html">Legacy Controller Model (HardNcEnv)</a> — the deprecating HardNcEnv model the project still carries
|
||||
beside this runner, what this branch shares with it, and the three settings that retire with it</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
-3
@@ -308,9 +308,6 @@ row as seeded. The legacy work-coordinate table is replayed first, through the s
|
||||
aliases onto preset rows 1 through 6, so where the two overlap the explicit datum copy is what
|
||||
stands.</li>
|
||||
</ul>
|
||||
<p>The superseded <code>/controller</code> route also carries datum preset and datum shift surfaces, over the
|
||||
separate environment model rather than over the runner — an edit made there does not reach the table
|
||||
on this page. That route's own anatomy is <a class="xref" href="../../../legacy-controller.html">Legacy Controller Page</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li><strong>General Setup</strong> Control Tree — the left dock of <code>/general-setup</code>
|
||||
|
||||
@@ -110,8 +110,9 @@ application.</p>
|
||||
<li><a href="controller/index.html">Controller</a> — The SoftNcRunner-native controller branch: its two planes, the brand matrix behind which nodes appear at all, and the contract every leaf edits by</li>
|
||||
<li><a href="hidden-controllers.html">Hidden Controller Branches</a> — The two runner-suit nodes a fresh installation never builds, the device-local checkboxes that reveal them, and the second kind of invisibility a link cannot undo</li>
|
||||
</ul>
|
||||
<p>The superseded <a class="xref" href="../legacy-controller.html">Legacy Controller</a> screen at its own route is a separate
|
||||
surface, editing a different model from the branch above.</p>
|
||||
<p>A bookmark to the retired <code>/controller</code> address — the Legacy Controller page, which edited the
|
||||
deprecating HardNcEnv model rather than the runner — now redirects here and lands on the Controller
|
||||
branch.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="../execution/index.html">Execution Page</a> — the other Control-Tree page, and the one this was split out of</li>
|
||||
@@ -120,8 +121,7 @@ surface, editing a different model from the branch above.</p>
|
||||
<li><a class="xref" href="../platform/control-tree.html">Control Tree</a> — the engine behind this page's tree: how a branch is built, rebuilt and selected</li>
|
||||
<li><a href="controller/index.html">Controller Branch</a> — the branch this page hosts whose node set changes with the controller brand</li>
|
||||
<li><a href="hidden-controllers.html">Hidden Controller Branches</a> — the two equipment nodes this page withholds until a preference or a link asks for them</li>
|
||||
<li><a class="xref" href="../legacy-controller.html">Legacy Controller</a> — the superseded controller screen at its own route: its seven tabs, how an edit commits, and its viewer</li>
|
||||
<li><a class="xref" href="../legacy-controller-settings.html">Legacy Controller Settings</a> — the model that screen edits, and the three settings the equipment tree has no editor for</li>
|
||||
<li><a class="xref" href="../legacy-controller-settings.html">Legacy Controller Model (HardNcEnv)</a> — the deprecating HardNcEnv model the project still carries beside the runner, what it shares with the Controller branch, and the three settings that retire with it rather than gaining an editor in the equipment tree</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
@@ -131,10 +131,6 @@ regroup adds a migration hop. The ids themselves have moved repeatedly.</p>
|
||||
<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>
|
||||
@@ -174,23 +170,16 @@ regroup adds a migration hop. The ids themselves have moved repeatedly.</p>
|
||||
<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="legacy-controller-settings.html">Legacy Controller Settings</a> — The HardNcEnv model that surface edits: the three settings it owns alone, what it shares with the Controller branch, and the engine files behind both</li>
|
||||
<li><a href="legacy-controller-settings.html">Legacy Controller Model (HardNcEnv)</a> — The deprecating HardNc controller model the project still carries beside the runner: what the live pipeline still reads from it, the three settings that retire with it and the Align P0 action the runner path does not offer, what the Controller branch edits a runner-side copy of, and the engine files behind both</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>
|
||||
<h2 id="the-codebase">The Codebase</h2>
|
||||
<p>A page's <em>Source Code Path</em> section lists the files that implement it in the flagship web service,
|
||||
which is the only application codebase Anatomy documents.</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
|
||||
@@ -204,8 +193,7 @@ Control Tree, its <code>?tree=</code> id. Make no claim that the id is stable.</
|
||||
<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>
|
||||
bare file name by its base name, and refuses an entry carrying no backticks at all.</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,
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Legacy Controller Settings | HiAPI-C# 2025 </title>
|
||||
<title>Legacy Controller Model (HardNcEnv) | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Legacy Controller Settings | HiAPI-C# 2025 ">
|
||||
<meta name="title" content="Legacy Controller Model (HardNcEnv) | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
@@ -85,15 +85,23 @@
|
||||
</div>
|
||||
|
||||
<article data-uid="Anatomy-LegacyControllerSettings">
|
||||
<h1 id="legacy-controller-settings">Legacy Controller Settings</h1>
|
||||
<h1 id="legacy-controller-model-hardncenv">Legacy Controller Model (HardNcEnv)</h1>
|
||||
|
||||
<p><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a> is the model the Legacy Controller page at <code>/controller/:tab?</code> edits,
|
||||
and this page is what that model holds: how it stands to the runner the rest of the application
|
||||
configures, the three settings this screen owns alone, the ones it shares with the Controller Branch
|
||||
on General Setup, and the one marker class both faces draw a work coordinate with. The screen itself
|
||||
— its seven tabs, how an edit commits, its object-management chain, its viewer and its layout — is
|
||||
<a class="xref" href="legacy-controller.html">Legacy Controller Page</a>.</p>
|
||||
<h2 id="the-model-it-edits-and-the-one-it-does-not">The Model It Edits, and the One It Does Not</h2>
|
||||
<p><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a> is the HardNc controller model: the one the project still carries as
|
||||
<code>MachiningProject.NcEnv</code> and serializes as its <code>NcEnv</code> element, and the one the deprecating HardNc
|
||||
pipeline plays. It is a model with no screen. The Legacy-Controller page at <code>/controller/:tab?</code> that
|
||||
edited it was removed on 2026-09-11 — <code>/controller/…</code> now redirects to
|
||||
<code>/general-setup?tree=equipment/controller</code>, following the route file's convention for retired
|
||||
pages — and controller settings are edited on the General Setup page's
|
||||
<a class="xref" href="general-setup/controller/index.html">Controller Branch</a>, the settings face of the SoftNc runner, which is the
|
||||
live pipeline. What survives of the legacy face is its REST implementation,
|
||||
<code>Controller/ControllerController.cs</code>, still mounted under <code>/api/Controller/*</code>, and its typed client
|
||||
<code>wwwroot-src/src/api/controller.ts</code>, kept as those endpoints' only client; one wrapper in it,
|
||||
<code>getCncBrand</code>, is still called from a live component. This page is what the model holds: how it
|
||||
stands to the runner, what the live pipeline still reads from it, the settings that retire with it,
|
||||
the ones the branch edits a runner-side copy of, and the one marker class both stores draw a work
|
||||
coordinate with.</p>
|
||||
<h2 id="the-model-and-the-runner-beside-it">The Model, and the Runner Beside It</h2>
|
||||
<p>The project carries both models side by side and serializes both. <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a> is
|
||||
loaded from the project's own <code>NcEnv</code> element unconditionally; <a class="xref" href="../api/Hi.NcParsers.NcRunnerSuit.html">NcRunnerSuit</a> — the
|
||||
runner plus the project's per-case dependency list — is read from its own nested element. The legacy
|
||||
@@ -101,121 +109,149 @@ element is a <em>fallback source</em> for the suit rather than a shared store: a
|
||||
no runner element derives one from the legacy element at load time, and from then on the two drift
|
||||
apart, because every later edit lands on one of them alone.</p>
|
||||
<p>The legacy model is still read at play time. The legacy NC runner is constructed over a delegate
|
||||
onto the project's <code>NcEnv</code>, so installing a replacement through the screen's ⋮ menu propagates
|
||||
onto the project's <code>NcEnv</code>, so a replacement installed through the <code>update</code> endpoint — the removed
|
||||
page's object-management chain was its caller, and nothing in the SPA calls it now — propagates
|
||||
without rewiring, and a project-level switch selects which of the two pipelines plays. That switch
|
||||
defaults to the SoftNc pipeline and no screen in the web application changes it; it is a scripting
|
||||
property, <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_EnableSoftNcRunner_">EnableSoftNcRunner</a><small>(API)</small>. The legacy
|
||||
NC optimisation route is the other live reader: it is taken whenever the switch is off or the
|
||||
session holds no played SoftNc layers, and it is handed <code>MachiningProject.NcEnv</code> directly.</p>
|
||||
<h2 id="what-only-this-screen-edits">What Only This Screen Edits</h2>
|
||||
<p>Three settings on this screen have no editor anywhere else in the web application — neither on the
|
||||
branch, nor on any other page.</p>
|
||||
<h3 id="align-p0-and-its-undo-history">Align P0, and its undo history</h3>
|
||||
<p>The Coordinate Table tab — that is the tab button's label; <strong>ISO Coordinate Table</strong> is the heading
|
||||
over the panel it opens — carries a third row action beside <strong>P0</strong> and <strong>M0</strong>: <strong>Align P0</strong>, titled
|
||||
<em>"Move workpiece+fixture so ProgramZero coincides with this ISO entry (mutates
|
||||
Fixture.GeomToTableTransformer)"</em>. It does not write the coordinate — it writes the <strong>fixture's
|
||||
geometry-to-table transformer</strong>, moving the workpiece and fixture so that program zero lands on the
|
||||
offset the row holds. The write goes to the authored setup equipment and reports the edit, so the
|
||||
runtime face follows at the next rebuild. The branch's Work Coordinates leaf carries P0 and M0 and
|
||||
no alignment.</p>
|
||||
<p>The endpoint keeps no undo slot. It answers with the assigned translation plus the transformer as it
|
||||
stood <strong>before</strong> and <strong>after</strong> the write, both serialized as XML, and the tab holds the history
|
||||
itself: <strong>Undo Align</strong> and <strong>Redo Align</strong> buttons over two component-local stacks, the undo stack
|
||||
capped at 32 entries and the oldest dropped past it. A third button sits beside them, <strong>Show on
|
||||
Display</strong>, which belongs to the viewer rather than to the history: it is a bound toggle over the
|
||||
<code>IsoCoordinate</code> rendering flag, carrying a <code>visibility</code> / <code>visibility_off</code> icon and writing through
|
||||
the same flag endpoint the Scene dropdown writes. The two datum tabs carry the same button over
|
||||
<code>HeidenhainCoordinate</code>. Each step posts a stashed snapshot back to a stateless revert endpoint,
|
||||
which parses it and assigns the result as the fixture's transformer. Both stacks are cleared
|
||||
whenever the tab's has-a-project prop changes, and the snapshot the component believes is current is
|
||||
only what it last saw — a transformer changed from another surface is overwritten wholesale by the
|
||||
next undo or redo rather than merged.</p>
|
||||
<p>The engine exposes the same operation as a script call,
|
||||
<a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_AlignWorkpieceProgramZeroToIso_">AlignWorkpieceProgramZeroToIso</a><small>(API)</small>; the
|
||||
history is the screen's own.</p>
|
||||
<h2 id="what-the-live-pipeline-still-reads-from-it">What the Live Pipeline Still Reads From It</h2>
|
||||
<p>Selecting the SoftNc pipeline does not silence the legacy model. Four reads still land on it with
|
||||
the switch on, so a value that only the legacy endpoints or the project XML can change still shows
|
||||
up on a runner play.</p>
|
||||
<ul>
|
||||
<li><strong>Stroke limits, as a fallback.</strong> The per-step stroke check reads the runner's
|
||||
<a class="xref" href="../api/Hi.NcParsers.Dependencys.IStrokeLimitConfig.html">IStrokeLimitConfig</a> when the switch is on and one is present, and
|
||||
falls back to the legacy stroke boxes otherwise — a CSV or NX-CL suit carries no stroke config, so
|
||||
a play on those falls through to the boxes. The pre-play audit that warns of an unlimited linear
|
||||
axis reads both sources end by end, the runner's first and the legacy box behind it, and stays
|
||||
silent for an axis either source guards.</li>
|
||||
<li><strong>The home position, as a fallback.</strong> The chain is re-homed from the runner's home config; the
|
||||
legacy <code>HomeMc</code> fills in only when no linear axis was ever configured there.</li>
|
||||
<li><strong>The Execution canvas's coordinate markers.</strong> The <code>IsoCoordinate</code> and <code>HeidenhainCoordinate</code>
|
||||
rendering flags on the Execution page draw from the legacy tables — see
|
||||
<a href="#two-faces-of-a-work-coordinate">Two Faces of a Work Coordinate</a>.</li>
|
||||
<li><strong>The Execution tool bar's brand.</strong> The Scene dropdown offers its Heidenhain-coordinate entry only
|
||||
while the brand is Heidenhain, and the brand it asks for is the legacy model's, through
|
||||
<code>getCncBrand</code> — the one wrapper in <code>wwwroot-src/src/api/controller.ts</code> a live component still
|
||||
calls.</li>
|
||||
</ul>
|
||||
<p>The kinematics solver the service builds is mirrored onto <code>NcEnv.XyzabcSolver</code> as well, but that
|
||||
slot is wiring the service maintains rather than a setting, and it is never serialized.</p>
|
||||
<h2 id="settings-that-retire-with-the-model">Settings That Retire With the Model</h2>
|
||||
<p>Four controls had no editor anywhere in the web application but the removed screen. None of them
|
||||
gained one on the branch: three are legacy-only settings and retire with the model, and the fourth is an
|
||||
action the runner path does not offer. Every one keeps its endpoint under <code>/api/Controller/*</code>, so
|
||||
the value can still be read and written over REST or in the project XML — there is just no UI for
|
||||
it.</p>
|
||||
<h3 id="align-p0--not-offered-on-the-runner-path">Align P0 — not offered on the runner path</h3>
|
||||
<p>The removed Coordinate Table tab carried a third row action beside <strong>P0</strong> and <strong>M0</strong>: <strong>Align P0</strong>,
|
||||
which moves the <em>part</em> so that program zero lands on the offset the row holds — the reproducing
|
||||
direction, <em>program zero onto the work offset</em> in the manual's terms. It did not write the
|
||||
coordinate; it wrote the <strong>fixture's geometry-to-table transformer</strong>, so the workpiece and fixture
|
||||
moved together and the runtime face followed at the next rebuild. The branch's Work Coordinates
|
||||
leaf carries P0 and M0 only, which write the row <em>from</em> the machine position — the opposite
|
||||
direction — and no alignment. The operation is not offered on the runner path.</p>
|
||||
<p>The tab's undo history — <strong>Undo Align</strong> and <strong>Redo Align</strong> over two component-local stacks, the
|
||||
undo stack capped at 32 entries — was the component's own and went with it; the endpoint never kept
|
||||
an undo slot. It still answers with the assigned translation plus the transformer as it stood
|
||||
<strong>before</strong> and <strong>after</strong> the write, both serialized as XML, and the stateless revert endpoint still
|
||||
parses such a snapshot and assigns it as the fixture's transformer; nothing in the SPA posts to
|
||||
either now. The engine exposes the same operation as a script call,
|
||||
<a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_AlignWorkpieceProgramZeroToIso_">AlignWorkpieceProgramZeroToIso</a><small>(API)</small>, which
|
||||
looks the row up in the legacy model's ISO coordinate table — an API for a script, not a
|
||||
replacement for the removed control.</p>
|
||||
<h3 id="enable-shortest-rotary-path">Enable Shortest Rotary Path</h3>
|
||||
<p>The <strong>Config</strong> tab's single toggle writes <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_EnableShortestRotary">EnableShortestRotary</a>, which
|
||||
constructs <code>true</code>. Its banner reads <em>"<strong>Shortest Rotary Path:</strong> optimises rotary axis motion to use
|
||||
the shortest angular distance between positions."</em> On the legacy pipeline the flag gates one step:
|
||||
each rotary axis of a block is cycled into the ±180° window around the previous block's value. The
|
||||
toggle is narrower than it reads, because that same cycle is applied unconditionally on
|
||||
<p><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_EnableShortestRotary">EnableShortestRotary</a> constructs <code>true</code>, and its only editor was the
|
||||
removed Config tab's single toggle. On the legacy pipeline the flag gates one step: each rotary
|
||||
axis of a block is cycled into the ±180° window around the previous block's value. The flag is
|
||||
narrower than its name, because that same cycle is applied unconditionally on
|
||||
<a class="xref" href="../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Heidenhain">Heidenhain</a> — the brand branch runs it before the flag is consulted, so
|
||||
clearing the box changes nothing there.</p>
|
||||
clearing it changes nothing there.</p>
|
||||
<p>The runner's dependency layer declares no counterpart: no brand parameter table, no generic config
|
||||
and no branch leaf carries a shortest-rotary switch. The nearest thing the runner pipeline has is the
|
||||
Heidenhain <code>M126</code> / <code>M127</code> pair, which is read from the program text rather than from any setting.</p>
|
||||
and no branch leaf carries a shortest-rotary switch. What the runner pipeline has instead is the
|
||||
Heidenhain <code>M126</code> / <code>M127</code> pair, modal codes read from the program text rather than from any
|
||||
setting.</p>
|
||||
<h3 id="max-rotary-speed-per-axis">Max rotary speed per axis</h3>
|
||||
<p><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_MaxRotarySpeedABC_radds">MaxRotarySpeedABC_radds</a> is the per-axis rotary speed ceiling the
|
||||
HardNc pipeline clamps feed and cycle time against; its editor was the removed Machine tab's
|
||||
<strong>Max Speed (rpm)</strong> column. On the runner pipeline the ceiling is not a setting of its own: the
|
||||
polar feed clamp reads it from the per-axis rapid-feedrate bucket,
|
||||
<a class="xref" href="../api/Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html">IRapidFeedrateConfig</a>, and the legacy import funnels this field into
|
||||
that bucket at rpm × 360 deg/min, so the branch's Rapid Feedrates leaf edits the runner-side
|
||||
number. The legacy field itself retires with the model.</p>
|
||||
<h3 id="heidenhain-master-axis-character">Heidenhain master-axis character</h3>
|
||||
<p>The <strong>Brand</strong> tab grows a second card while the brand is Heidenhain, holding one select over <code>A</code>,
|
||||
<code>B</code>, <code>C</code> labelled <strong>Master-axis character</strong>. It writes
|
||||
<a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_HeidenhainMasterAxisChar">HeidenhainMasterAxisChar</a>, a character face over the integer axis
|
||||
direction the <code>PLANE … SEQ</code> solution family is resolved against. Reads are normalised: anything that
|
||||
is not <code>B</code> or <code>C</code> after trimming and upper-casing becomes <code>A</code>. On the runner pipeline the master
|
||||
<p><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_HeidenhainMasterAxisChar">HeidenhainMasterAxisChar</a> is a character face over the integer axis
|
||||
direction the <code>PLANE … SEQ</code> solution family is resolved against; its editor was a second card the
|
||||
removed Brand tab grew while the brand was Heidenhain, one select over <code>A</code>, <code>B</code>, <code>C</code>. The setter
|
||||
takes only <code>A</code>, <code>B</code> or <code>C</code> and throws on anything else; the <code>PUT</code> endpoint upper-cases the first
|
||||
character it is sent and answers 400 to anything but those three. On the runner pipeline the master
|
||||
rotary is <strong>derived rather than configured</strong> — it is the first declared rotary axis — so the branch
|
||||
has nothing to expose and no leaf for it.</p>
|
||||
<h2 id="what-it-shares-with-the-branch">What It Shares With the Branch</h2>
|
||||
<p>Naming what is <em>not</em> exclusive matters as much. The CNC brand, the stroke limits, the rapid feed,
|
||||
<h2 id="what-the-branch-edits-a-runner-side-copy-of">What the Branch Edits a Runner-Side Copy Of</h2>
|
||||
<p>Naming what is <em>not</em> legacy-only matters as much. The CNC brand, the stroke limits, the rapid feed,
|
||||
the tool-change time, the tool offset table with its tool-house dependence, the work coordinates
|
||||
with their P0 and M0 actions, and the Heidenhain datum preset and datum shift tables all have
|
||||
editors on the branch — see
|
||||
<a class="xref" href="general-setup/controller/brand-matrix.html">Brand Matrix</a> for which of those leaves each brand grows. The
|
||||
<strong>Max Speed (rpm)</strong> column has a counterpart too: on the runner pipeline the rotary speed ceiling is
|
||||
read from the rapid-feedrate config, and the legacy import funnels this field into it at rpm × 360
|
||||
deg/min, so the branch's Rapid Feedrates leaf edits the runner-side number.</p>
|
||||
<p>One control on this screen writes a value the branch also writes. <strong>Set ideal offset dependent on
|
||||
tool house</strong> is a project-level configuration flag rather than a member of either NC model, and both
|
||||
the Offset Table tab and the branch's Tool Offsets leaf read and write that one flag. The two
|
||||
<em>tables</em> stay separate: this tab's <strong>Refresh from Tool House</strong> recomputes
|
||||
<a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_MillingToolOffsetTable">MillingToolOffsetTable</a> from <a class="xref" href="../api/Hi.Machining.MachiningToolHouse.html">MachiningToolHouse</a>,
|
||||
while the branch's refresh recomputes the runner's own tool-offset table.</p>
|
||||
editors on the branch — see <a class="xref" href="general-setup/controller/brand-matrix.html">Brand Matrix</a> for which of those
|
||||
leaves each brand grows. The branch edits the <em>runner's</em> copy of each; the legacy copy in
|
||||
<a class="xref" href="../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a> is reachable only through its endpoint and the project XML, and the
|
||||
two are not kept in step.</p>
|
||||
<p>One flag sits outside both models. <strong>Set ideal offset dependent on tool house</strong> is a project-level
|
||||
configuration flag, and the branch's Tool Offsets leaf and the legacy <code>ideal-offset-dependent</code>
|
||||
endpoint read and write that one flag. The two <em>tables</em> stay separate: the legacy
|
||||
<code>set-ideal-offset-from-toolhouse</code> endpoint — the removed Offset Table tab's <strong>Refresh from Tool
|
||||
House</strong> — recomputes <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_MillingToolOffsetTable">MillingToolOffsetTable</a> from
|
||||
<a class="xref" href="../api/Hi.Machining.MachiningToolHouse.html">MachiningToolHouse</a>, while the branch's refresh recomputes the runner's own
|
||||
tool-offset table.</p>
|
||||
<h2 id="two-faces-of-a-work-coordinate">Two Faces of a Work Coordinate</h2>
|
||||
<p>The work-coordinate marker is one displayee class serving two providers. The screen's viewer draws
|
||||
<p>The work-coordinate marker is one displayee class serving two providers. The Execution canvas draws
|
||||
it from <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_IsoCoordinateTable">IsoCoordinateTable</a> — a
|
||||
<a class="xref" href="../api/Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html">IsoCoordinateTable</a> instance owned by the legacy model, which
|
||||
constructs with <code>G54</code> … <code>G59</code> and <code>G59.1</code> … <code>G59.9</code> all at zero. The General Setup canvas builds the
|
||||
same displayee over the active runner's effective
|
||||
<a class="xref" href="../api/Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html">IIsoCoordinateConfig</a> instead, which on most brands is the brand
|
||||
parameter table. Same marker, same code, two stores.</p>
|
||||
<p>Selecting a row on the ISO Coordinate Table tab writes the marker's id onto the shared Execution
|
||||
displayee, so it decides which offset the marker draws at. It decides that whether or not the marker
|
||||
is drawn: all three coordinate flags are off in the shipped rendering-flag set — as are the machine
|
||||
tool and the cutter, leaving the workpiece, the fixture, the dimension bar and the cutter-location
|
||||
strip as the four that arrive on — so on an untouched project the selection column moves something
|
||||
invisible until <strong>Show on Display</strong> is pressed. The datum tabs also carry a single-selection column,
|
||||
but nothing is sent when it changes — there the selection is a highlight and nothing more.</p>
|
||||
constructs with <code>G54</code> … <code>G59</code> and <code>G59.1</code> … <code>G59.9</code> all at zero — and draws its Heidenhain datum
|
||||
marker from the legacy datum tables the same way. The General Setup canvas builds the same
|
||||
displayee over the active runner's effective <a class="xref" href="../api/Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html">IIsoCoordinateConfig</a>
|
||||
instead, which on most brands is the brand parameter table. Same marker, same code, two stores.</p>
|
||||
<p>Which row the Execution marker draws is the displayee's own id, constructed as <code>G54</code>. Its only
|
||||
writer is the legacy <code>iso-coordinate-selection</code> endpoint, which the removed tab's row selection
|
||||
posted to and nothing in the SPA posts to now, so the Execution marker stays on <code>G54</code>. Whether it
|
||||
is drawn is the <code>IsoCoordinate</code> rendering flag, toggled from the Execution page's Scene dropdown;
|
||||
all three coordinate flags are off in the shipped rendering-flag set — as are the machine tool and
|
||||
the cutter, leaving the workpiece, the fixture, the dimension bar and the cutter-location strip as
|
||||
the four that arrive on. The General Setup marker's row is a user-config value of its own, with an
|
||||
endpoint on the equipment-setup display controller.</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>
|
||||
<h3 id="web-application">Web Application</h3>
|
||||
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/controller/CoordinateTableTab.vue</code> — <strong>Align P0</strong> with its two
|
||||
client-side history stacks and their cap, and the <strong>Show on Display</strong> toggle bound to the
|
||||
<code>IsoCoordinate</code> rendering flag.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/DatumPresetTab.vue</code> and
|
||||
<code>wwwroot-src/src/components/controller/DatumShiftTab.vue</code> — the same <strong>Show on Display</strong> button
|
||||
over <code>HeidenhainCoordinate</code>, and the row selection that is a highlight and nothing more.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/OffsetTableTab.vue</code> — <strong>Refresh from Tool House</strong>, and the
|
||||
two-step toggle over the project-level tool-house dependence flag the branch also writes.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/ConfigTab.vue</code> — the shortest-rotary toggle and its banner.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/BrandTab.vue</code> — the Heidenhain master-axis card: its read
|
||||
normalisation and its write.</li>
|
||||
<li><code>wwwroot-src/src/api/renderingFlags.ts</code> — the flag indices those toggles write, and which of the
|
||||
shipped set default on.</li>
|
||||
<li><code>wwwroot-src/src/api/controller.ts</code> — the typed wrappers over the align and revert endpoints, and
|
||||
the brand constants these settings are read against.</li>
|
||||
<li><code>Controller/ControllerController.cs</code> — the align endpoint that snapshots the transformer either
|
||||
side of the write, and the stateless revert this screen's history posts back to.</li>
|
||||
<li><code>Controller/ControllerController.cs</code> — the model's REST face, still mounted: every legacy table
|
||||
and setting, the align endpoint that snapshots the transformer either side of the write, the
|
||||
stateless revert, the <code>update</code> rebind, and the marker-row selection.</li>
|
||||
<li><code>wwwroot-src/src/api/controller.ts</code> — the typed wrappers over all of it, kept as those endpoints'
|
||||
only client; <code>getCncBrand</code> and the brand constants are what a live component still imports.</li>
|
||||
<li><code>wwwroot-src/src/components/execution/ExecutionExtendedToolBar.vue</code> — that component: the Scene
|
||||
dropdown that toggles the coordinate flags, and asks the legacy model for its brand.</li>
|
||||
<li><code>wwwroot-src/src/api/renderingFlags.ts</code> — the flag indices the Scene dropdown writes.</li>
|
||||
<li><code>Disp/ExecutionDisplayee.cs</code> — the Execution canvas's displayee: the shipped flag set, and the
|
||||
work-coordinate and datum markers it builds over the legacy tables.</li>
|
||||
<li><code>Disp/IsoCoordinateEntryDisplayee.cs</code> — the one marker class both canvases draw with.</li>
|
||||
<li><code>Disp/EquipmentSetupDisplayee.cs</code> — the General Setup canvas's marker, over the runner's
|
||||
providers.</li>
|
||||
<li><code>wwwroot-src/src/router/routes.ts</code> — the <code>/controller/…</code> redirect stub onto the Controller branch.</li>
|
||||
</ul>
|
||||
<h3 id="hiapi-engine">HiAPI Engine</h3>
|
||||
<ul>
|
||||
<li><code>HiUniNc/Numerical/HardNcEnv.cs</code> — the model this screen edits: the coordinate, datum and offset
|
||||
tables, the stroke boxes that construct infinite, the rapid rate and tooling time, the
|
||||
shortest-rotary flag with its Heidenhain exclusion, and the master-axis character over its integer
|
||||
direction.</li>
|
||||
<li><code>HiUniNc/Numerical/HardNcEnv.cs</code> — the model: the coordinate, datum and offset tables, the stroke
|
||||
boxes that construct infinite, the rapid rate and tooling time, the per-axis rotary speed
|
||||
ceiling, the shortest-rotary flag with its Heidenhain exclusion, and the master-axis character
|
||||
over its integer direction.</li>
|
||||
<li><code>HiUniNc/Numerical/HardNcLine.cs</code> — the legacy consumers of two of those settings: the
|
||||
shortest-rotary path application and the <code>SEQ</code> solve that reads the master-axis direction.</li>
|
||||
<li><code>HiUniNc/Numerical/NcProc.cs</code> — the legacy consumer of the rotary speed ceiling: feed and cycle
|
||||
time re-limited per rotary axis.</li>
|
||||
<li><code>HiUniNc/Numerical/MillingToolOffsetTable.cs</code> — the offset table and the tool-house recompute the
|
||||
Refresh button calls.</li>
|
||||
legacy refresh endpoint calls.</li>
|
||||
<li><code>HiMech/NcParsers/Dependencys/Generic/IsoCoordinateTable.cs</code> — the coordinate table type and the
|
||||
fifteen G-code keys it constructs with, shared by name with the runner's brand-agnostic table.</li>
|
||||
<li><code>HiMech/Machining/MachiningEquipmentUtils/MachiningEquipmentUtil.cs</code> — the alignment itself: the
|
||||
@@ -229,17 +265,16 @@ on the runner pipeline: the first declared rotary axis, with no configured alter
|
||||
<li><code>HiNc/MachiningProcs/MachiningProject.cs</code> — where both models hang off the project, and the load
|
||||
path that derives a runner from the legacy element only when no runner element is present.</li>
|
||||
<li><code>HiNc/MachiningProcs/LocalProjectService.cs</code> — the legacy runner built over a delegate onto the
|
||||
project's model, and the switch that selects which pipeline is active.</li>
|
||||
project's model, the switch that selects which pipeline is active, and the stroke-limit and
|
||||
home-position fallbacks onto the legacy model.</li>
|
||||
<li><code>HiNc/Numerical/FilePlayers/HardNcRunner.cs</code> — the legacy runner itself.</li>
|
||||
<li><code>HiNc/MachiningProcs/SessionShell.cs</code> — the scripting face of the pipeline switch and of the
|
||||
alignment, and the optimisation route that passes the legacy model directly.</li>
|
||||
</ul>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="legacy-controller.html">Legacy Controller Page</a> — the screen these settings are edited on: its seven tabs, its commit
|
||||
and rollback rules, its object-management chain and its viewer</li>
|
||||
<li><a class="xref" href="general-setup/controller/index.html">Controller Branch</a> — the SoftNcRunner-native controller branch that carries the editors for
|
||||
everything named above as shared</li>
|
||||
<li><a class="xref" href="general-setup/controller/index.html">Controller Branch</a> — the SoftNcRunner-native controller branch: the live settings face,
|
||||
and the editor for everything named above as having a runner-side copy</li>
|
||||
<li><a class="xref" href="general-setup/index.html">General Setup Page</a> — the page that hosts that branch, and the rest of the equipment tree
|
||||
beside it</li>
|
||||
</ul>
|
||||
|
||||
@@ -1,472 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Legacy Controller Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Legacy Controller Page | 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-ControllerPage">
|
||||
<h1 id="legacy-controller-page">Legacy Controller Page</h1>
|
||||
|
||||
<p>The Legacy Controller page is the superseded controller face: the screen that edits
|
||||
<a class="xref" href="../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a>, kept reachable while it still carries settings nothing else in the
|
||||
application edits. It ships at the route <code>/controller/:tab?</code>, is reached from the app menu bar's
|
||||
<strong>Page → Legacy-Controller</strong> entry, and owns no Control-Tree id of its own. Controller settings for
|
||||
a project are edited on the General Setup page at <code>/general-setup</code> under the Control-Tree id
|
||||
<code>equipment/controller</code> — <a class="xref" href="general-setup/controller/index.html">Controller Branch</a> — and the two surfaces edit
|
||||
different models, so an edit on one is invisible to the other.</p>
|
||||
<div class="IMPORTANT">
|
||||
<h5>Important</h5>
|
||||
<p>The <code>equipment/controller</code> id named above belongs to the Controller Branch rather than to this
|
||||
page, and Anatomy makes no claim that it is stable across versions. The migration hop that keeps
|
||||
an older value resolving is described in <a class="xref" href="platform/tree-ids-and-routes.html">Tree Ids and Routes</a>.</p>
|
||||
</div>
|
||||
<p>The model this screen edits — what <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a> holds, the three settings it
|
||||
owns alone, what it shares with the branch, and the engine files behind all of it — is
|
||||
<a class="xref" href="legacy-controller-settings.html">Legacy Controller Settings</a>.</p>
|
||||
<h2 id="the-tabs">The Tabs</h2>
|
||||
<p>The left pane is a tab strip over seven panels, addressable as the route's optional segment:
|
||||
<code>coordinate-table</code>, <code>datum-preset</code>, <code>datum-shift</code>, <code>offset-table</code>, <code>machine</code>, <code>brand</code>, <code>config</code>. A
|
||||
bare <code>/controller</code> canonicalises to <code>coordinate-table</code>. Two tab <strong>buttons</strong> are conditional — Datum
|
||||
Preset and Datum Shift render only while the brand reads Heidenhain — but their panels are always
|
||||
present in the template, so both segments stay valid URL targets under any brand. Switching the brand
|
||||
away from Heidenhain while one of those two is active moves the selection back to Coordinate Table.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Tab</th>
|
||||
<th>Edits</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Coordinate Table</td>
|
||||
<td><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_IsoCoordinateTable">IsoCoordinateTable</a>, plus the P0 / M0 / Align P0 row actions</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Datum Preset</td>
|
||||
<td><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_HeidenhainDatumPresetTable">HeidenhainDatumPresetTable</a>, keyed <code>Q339</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Datum Shift</td>
|
||||
<td><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_HeidenhainDatumShiftTable">HeidenhainDatumShiftTable</a>, keyed <code>D</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Offset Table</td>
|
||||
<td><a class="xref" href="../api/Hi.Numerical.MillingToolOffsetTable.html">MillingToolOffsetTable</a> with row-level add, delete and key rename</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Machine</td>
|
||||
<td><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_RapidFeedrate_mmdmin">RapidFeedrate_mmdmin</a>, <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_ToolingTime">ToolingTime</a>, <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_StrokeLimitXyz_mm">StrokeLimitXyz_mm</a>, <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_StrokeLimitAbc_rad">StrokeLimitAbc_rad</a>, <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_MaxRotarySpeedABC_radds">MaxRotarySpeedABC_radds</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Brand</td>
|
||||
<td><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_CncBrand">CncBrand</a>, and the master-axis character on Heidenhain</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Config</td>
|
||||
<td><a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_EnableShortestRotary">EnableShortestRotary</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The brand select offers all five declared brands — <a class="xref" href="../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Fanuc">Fanuc</a>,
|
||||
<a class="xref" href="../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Heidenhain">Heidenhain</a>, <a class="xref" href="../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Mazak">Mazak</a>,
|
||||
<a class="xref" href="../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Siemens">Siemens</a> and <a class="xref" href="../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Syntec">Syntec</a> — labelled with the
|
||||
brand names verbatim rather than through the locale bundle, and warns above the select that
|
||||
<em>"Brand-specific settings may be lost when the brand changes."</em></p>
|
||||
<p><strong>The Machine tab's axis rows are fixed, not chain-driven.</strong> It renders exactly <code>X</code>, <code>Y</code>, <code>Z</code> under
|
||||
<strong>Linear Axis Stroke (mm)</strong> and exactly <code>A</code>, <code>B</code>, <code>C</code> under <strong>Rotary Axis Stroke (deg) & Max Speed
|
||||
(rpm)</strong>, because both row sets are literal in the template. Every write there sends the whole vector
|
||||
— all six linear bounds, all six rotary bounds converted to radians, or all three speeds converted to
|
||||
rad/s — rather than the one cell that changed. The branch's per-axis leaves take the opposite shape:
|
||||
one row per machine-chain axis, one axis per write, described in
|
||||
<a class="xref" href="general-setup/controller/machine/per-axis-tables.html">Per-Axis Tables</a>.</p>
|
||||
<p>Both stroke limits construct as an infinite box, and the service serializes named floating-point
|
||||
literals, so those bounds reach the browser as the tokens <code>Infinity</code> and <code>-Infinity</code> rather than as
|
||||
numbers. The shared numeric field prints what it is handed and parses both words back, so an
|
||||
unconfigured Machine tab opens showing those words rather than a blank and takes them typed in; the
|
||||
rotary rows carry them through unconverted, because the degree conversion guards on a finite value.</p>
|
||||
<p><strong>A stroke write does not survive its own re-read.</strong> The read and the write agree on the wire order:
|
||||
the read emits the six bounds interleaved per axis, <code>[minX, maxX, minY, maxY, minZ, maxZ]</code>, and the
|
||||
tab posts the same six back. The write then hands that vector to the box constructor, which reads its
|
||||
arguments <em>grouped</em> — the whole minimum corner first, the whole maximum corner second. The vector is
|
||||
de-interleaved on the way in, so only the first and the last number land where they were sent and the
|
||||
four between them move to other rows; from the infinite default above, that is enough to leave the
|
||||
middle axis reading a <code>Max</code> below its <code>Min</code> after any single edit. The rotary stroke endpoints share
|
||||
the constructor and the behaviour; the three <strong>Max Speed</strong> values travel as a plain triple and are
|
||||
unaffected. The regrouped box is not inert — with the stroke check on and no runner-side stroke
|
||||
config resolving, the legacy play path validates every step against
|
||||
<a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_StrokeLimitXyz_mm">StrokeLimitXyz_mm</a> and <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_StrokeLimitAbc_rad">StrokeLimitAbc_rad</a>
|
||||
as stored. The branch's per-axis leaves, writing one axis at a time, carry none of it.</p>
|
||||
<h2 id="how-an-edit-commits">How an Edit Commits</h2>
|
||||
<p>The tabs reuse the same numeric field the rest of the application uses, so the timing is that
|
||||
widget's: commit on blur or on Enter, never per keystroke, with the bounds and parse behaviour set
|
||||
out in <a class="xref" href="widget/numeric-input.html">Numeric Input</a>. Clearing a cell parses to null and every legacy
|
||||
handler returns on null, so an emptied cell is not an edit — the one exception is the Offset Table's
|
||||
tool-number cell, which forbids an empty value and shows a parse error in place instead. Selects,
|
||||
toggles and row buttons commit on the click.</p>
|
||||
<p>The optimistic write is the same capture-assign-await-restore shape the branch's panels use, and
|
||||
<a class="xref" href="general-setup/controller/editing-contract.html">Editing Contract</a> is where that shape, its row-scoped
|
||||
payloads and its rollback semantics are set out once. Four differences are this screen's own:</p>
|
||||
<ul>
|
||||
<li><strong>Three fields commit without a rollback.</strong> The Machine tab's <strong>Rapid Feedrate</strong> and <strong>Tooling
|
||||
Time</strong> handlers assign the new value and await the write without capturing the old one, so a
|
||||
refused write raises the toast and leaves the field showing the number the server rejected. The
|
||||
Brand tab's <strong>Master-axis character</strong> select is the third and the least recoverable: its handler
|
||||
captures nothing and restores nothing, and its two-way binding has already put the pick into the
|
||||
tab's own state before the handler runs, so a refused write leaves the rejected character on screen
|
||||
looking accepted. Every other value handler — the stroke and speed vectors, the coordinate and
|
||||
datum cells, the offset row and its key rename, the brand select itself, the shortest-rotary toggle
|
||||
(two-way bound as well, but reconstructing its old value from the new one) — restores the old value
|
||||
on failure. Row actions are outside the shape entirely: <strong>P0</strong>, <strong>M0</strong>, the datum reset, an add and
|
||||
a delete all write first and touch the local rows only once the request resolves.</li>
|
||||
<li><strong>The REST surface answers with status codes, not a success envelope.</strong> A missing table, an
|
||||
unknown index or an unexpected paste type is answered as <em>not found</em>, <em>bad request</em> or <em>conflict</em>.
|
||||
Most of those answers are bare English sentences; four carry a code — no project loaded, no NcEnv
|
||||
found, no NcEnv configuration and no fixture — which the client re-renders from the locale bundle
|
||||
under any language but English. The branch's surface instead answers a missing dependency inside a
|
||||
200 envelope; nothing here does.</li>
|
||||
<li><strong>A refused load is silent on six of the seven tabs.</strong> Every write wrapper in this page's API
|
||||
module goes through the plain-JSON helper, which throws on any non-2xx and returns the parsed body
|
||||
otherwise, so a refused write always reaches a toast. Eight read wrappers deliberately bypass it
|
||||
and answer a benign default on any non-2xx: an empty list for the coordinate table, both datum
|
||||
tables and the offset table, <em>unknown</em> for the brand, <code>A</code> for the master-axis character, and <em>off</em>
|
||||
for the tool-house dependence and shortest-rotary flags. A refused load therefore renders as an
|
||||
empty or default tab, indistinguishable from one whose table really is empty, with no toast and no
|
||||
console line. Only the Machine tab's five reads throw, so it is the one tab on which a refused load
|
||||
shows.</li>
|
||||
<li><strong>The tool-house dependence toggle writes before it flips.</strong> Turning it on awaits the flag write,
|
||||
then flips the local toggle, then refreshes the offsets from the tool house and re-reads the table.
|
||||
A failure in the refresh therefore leaves the flag committed on both sides rather than reverted.</li>
|
||||
</ul>
|
||||
<p>Every tab composes its failure toast the same way: negative, 3.5 seconds, the tab's own localized
|
||||
context followed by the thrown error's own text, with a console line naming the component. That text
|
||||
is built by the shared helper as <code>HTTP <status>: <server message></code>, so the status code reaches the
|
||||
user in the toast — where the branch's envelope failures surface the server's sentence alone.</p>
|
||||
<p>Each tab fetches once on mount and again when its has-a-project prop turns true; the tab panels are
|
||||
kept alive, so moving between tabs does not refetch. That prop is the indexed key rather than the
|
||||
project store's own flag: Initialize answers <em>not found</em> where the project carries no <code>NcEnv</code>, so a
|
||||
project can be open while every tab still reads as having none. Nothing pushes changes at a mounted
|
||||
tab, and no tab re-reads after a cell edit — the Offset Table's two tool-house actions are the one
|
||||
exception, because the server recomputes the table under them.</p>
|
||||
<p>The four tables that render as data tables — the coordinate table, the two datum tables and the
|
||||
offset table — are the only places in the application that use that component. None of them declares
|
||||
a sortable column, and all four run unpaginated with every row shown.</p>
|
||||
<h2 id="object-management-and-the-install-chain">Object Management and the Install Chain</h2>
|
||||
<p>The left pane's head line carries the shared object-management ⋮ menu, the title <strong>Controller</strong>, and
|
||||
a badge reading <em>ready</em> while a key is indexed and <em>no project</em> otherwise. The menu's entries are
|
||||
Load, Save As, Copy, Paste and XML Mode; Load Resource is absent because the page passes no resource
|
||||
directory. Load and Save As browse the server file system through the shared file-explorer dialog
|
||||
filtered to <code>*.NcEnv / *.xml</code>, rooted at the project directory once a project is open; Save As
|
||||
proposes the name <code>NcEnv.xml</code>; Paste is checked against the expected type
|
||||
<code>Hi.Numerical.HardNcEnv, HiUniNc</code>.</p>
|
||||
<p>Load, Paste and an XML apply swap only the indexed object, so the page then installs it: it posts the
|
||||
indexed key to the install endpoint <strong>before</strong> re-running Initialize, because Initialize re-indexes
|
||||
from the project and would otherwise resurrect the object that was replaced. A failed install stops
|
||||
the chain with a toast. A successful one re-reads the brand, which is what re-gates the two Heidenhain
|
||||
tabs, refreshes the rendering flags, and raises an informational toast naming the installed type. The
|
||||
XML dialog's Apply raises the load event as well as its own, and the page listens only to the load
|
||||
event, so the chain runs once rather than twice.</p>
|
||||
<p>Initialize mints a fresh index key on every call, and the page registers each one for cleanup and
|
||||
drops the key it replaced, so repeated installs do not accumulate entries.</p>
|
||||
<h2 id="the-viewer">The Viewer</h2>
|
||||
<p>The right pane is a rendering canvas with its own toolbar: the shared view toolbar, a <strong>Scene ▾</strong>
|
||||
dropdown, and a badge reading <em>rendering</em> or <em>disconnected</em>. The canvas binds the <strong>shared Execution
|
||||
displayee</strong> rather than a viewer of its own, so what is toggled here is what the Execution page
|
||||
shows.</p>
|
||||
<p>The Scene dropdown groups its checkboxes as <strong>Solid</strong> — Machine, Tool, Workpiece, Fixture —
|
||||
<strong>Coordinate</strong> — Program Zero, ISO Coordinate, Heidenhain Coordinate — and <strong>Display Aids</strong> —
|
||||
Dimension Bar, Color Scale Bar. The Heidenhain Coordinate row is listed only while the brand reads
|
||||
Heidenhain. Three tabs carry a <strong>Show on Display</strong> button of their own that flips the same shared
|
||||
flags: the coordinate tab flips ISO Coordinate, and the two datum tabs both flip Heidenhain
|
||||
Coordinate.</p>
|
||||
<p>The Heidenhain marker is gated twice over, and the second gate is never satisfied. The displayee is
|
||||
added to the scene only while its flag is set <em>and</em> the model's brand is Heidenhain; it then returns
|
||||
without drawing until an active datum number or datum-shift argument has been assigned to it, and no
|
||||
code path in the web service assigns either. So the marker stays absent whatever the flag reads.
|
||||
Where it does draw, it resolves its offset through the legacy datum tables — the ones this page's two
|
||||
datum tabs edit — and not through the runner's.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li><strong>Legacy Controller</strong> Page — <code>/controller/:tab?</code>, a two-pane splitter, left pane 55 % and draggable
|
||||
between 25 % and 75 %
|
||||
<ul>
|
||||
<li>Management Pane
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li><a class="xref" href="widget/object-management-menu-button.html">Object Management Menu Button</a> (<code>⋮</code>) — Load, Save
|
||||
As, Copy, Paste, XML Mode</li>
|
||||
<li><strong>Controller</strong> Title</li>
|
||||
<li>Status Badge — <em>ready</em> / <em>no project</em></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Tab Strip — <strong>Coordinate Table</strong>, <strong>Datum Preset</strong>, <strong>Datum Shift</strong>, <strong>Offset Table</strong>,
|
||||
<strong>Machine</strong>, <strong>Brand</strong>, <strong>Config</strong>; the two datum buttons rendered only under Heidenhain</li>
|
||||
<li>Tab Panels — kept alive; one shown at a time
|
||||
<ul>
|
||||
<li><strong>ISO Coordinate Table</strong> Panel
|
||||
<ul>
|
||||
<li>Toolbar — <strong>Undo Align</strong>, <strong>Redo Align</strong>, <strong>Show on Display</strong></li>
|
||||
<li>Table — columns <strong>Index</strong>, <strong>X</strong>, <strong>Y</strong>, <strong>Z</strong>, <strong>Actions</strong>, with a single-selection column
|
||||
<ul>
|
||||
<li>Row Actions — <strong>P0</strong>, <strong>M0</strong>, <strong>Align P0</strong></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Datum Preset Table</strong> Panel — <strong>Show on Display</strong>; columns <strong>Q339</strong>, <strong>X</strong>, <strong>Y</strong>, <strong>Z</strong>,
|
||||
<strong>Actions</strong>, the action being a reset-to-zero button</li>
|
||||
<li><strong>Datum Shift Table</strong> Panel — the same shape, keyed <strong>D</strong></li>
|
||||
<li><strong>Tool Offset Table</strong> Panel
|
||||
<ul>
|
||||
<li>Toolbar — <strong>Set ideal offset dependent on tool house</strong> toggle, and <strong>Refresh from Tool
|
||||
House</strong> while it is on</li>
|
||||
<li>Table — columns <strong>Tool #</strong>, <strong>Ideal Radius</strong>, <strong>Radial Wear</strong>, <strong>Ideal Height</strong>, <strong>Axial
|
||||
Wear</strong>, and a delete button; the tool number is editable and the delete button present only
|
||||
while the dependence is off</li>
|
||||
<li><strong>Add</strong> Button — below the table, shown only while the dependence is off</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Machine Configuration</strong> Panel
|
||||
<ul>
|
||||
<li><strong>General</strong> Card — <strong>Rapid Feedrate (mm/min)</strong> and <strong>Tooling Time (sec)</strong> numeric fields</li>
|
||||
<li><strong>Linear Axis Stroke (mm)</strong> Card — <strong>Axis</strong> / <strong>Min</strong> / <strong>Max</strong> over fixed rows X, Y, Z</li>
|
||||
<li><strong>Rotary Axis Stroke (deg) & Max Speed (rpm)</strong> Card — <strong>Axis</strong> / <strong>Min (deg)</strong> /
|
||||
<strong>Max (deg)</strong> / <strong>Max Speed (rpm)</strong> over fixed rows A, B, C</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>CNC Brand</strong> Panel
|
||||
<ul>
|
||||
<li><strong>Selection</strong> Card — the brand select over the five brands, above the brand-change warning
|
||||
banner</li>
|
||||
<li><strong>Heidenhain Settings</strong> Card — <strong>Master-axis character</strong> select over A / B / C; shown only
|
||||
under Heidenhain</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Configuration</strong> Panel
|
||||
<ul>
|
||||
<li><strong>Options</strong> Card — <strong>Enable Shortest Rotary Path</strong> toggle above its explanatory banner</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Viewer Pane
|
||||
<ul>
|
||||
<li>Viewer Toolbar
|
||||
<ul>
|
||||
<li><a class="xref" href="widget/renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a></li>
|
||||
<li><strong>Scene ▾</strong> Dropdown — <strong>Solid</strong>, <strong>Coordinate</strong> and <strong>Display Aids</strong> groups</li>
|
||||
<li>Connection Badge — <em>rendering</em> / <em>disconnected</em></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Rendering Canvas — bound to the shared Execution displayee</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<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>
|
||||
<h3 id="web-application">Web Application</h3>
|
||||
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/pages/ControllerPage.vue</code> — the page shell: the splitter, the seven tab panels and
|
||||
the Heidenhain gate over two of the buttons, the install-then-initialize chain, the rendering-flag
|
||||
snapshot the per-tab toggles read, and the tab reset on leaving Heidenhain.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/CoordinateTableTab.vue</code> — the coordinate table: the per-cell
|
||||
whole-row write, the row selection that names the marker, the P0 / M0 actions, and Align P0 with
|
||||
its two client-side history stacks and their cap.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/DatumPresetTab.vue</code> and
|
||||
<code>wwwroot-src/src/components/controller/DatumShiftTab.vue</code> — the two Heidenhain tables: the <code>Q339</code>
|
||||
and <code>D</code> key columns, the reset-to-zero action, and the selection that is a highlight only.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/OffsetTableTab.vue</code> — the offset editor: row add, delete and
|
||||
key rename with its duplicate guard, and the two-step tool-house dependence toggle.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/MachineTab.vue</code> — the fixed X/Y/Z and A/B/C row sets, the
|
||||
whole-vector writes, the degree and rpm conversions with their infinity guards, and the two
|
||||
handlers that commit without capturing a rollback value.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/BrandTab.vue</code> — the five-brand select with its captured
|
||||
rollback, the change warning, and the Heidenhain master-axis card: its read normalisation, its
|
||||
two-way binding and its write with no rollback.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/ConfigTab.vue</code> — the shortest-rotary toggle, its banner and
|
||||
its reconstructed rollback.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/ControllerExtendedToolBar.vue</code> — the <strong>Scene</strong> dropdown: the
|
||||
three flag groups and the brand test that hides the Heidenhain row.</li>
|
||||
<li><code>wwwroot-src/src/api/controller.ts</code> — the typed wrappers over every endpoint above, the brand
|
||||
constants and their literal labels, the align / revert payloads, the documented stroke-vector order,
|
||||
and the eight read wrappers that answer a default instead of raising.</li>
|
||||
<li><code>wwwroot-src/src/api/http.ts</code> — the plain-JSON helper every write goes through, its coded-error
|
||||
keys, and the success-envelope helper this module does not use.</li>
|
||||
<li><code>wwwroot-src/src/api/renderingFlags.ts</code> — the flag indices the Scene dropdown and the per-tab
|
||||
toggles write.</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/NumericInput.vue</code> — the numeric cell: commit on blur or Enter,
|
||||
the empty-to-null parse the handlers reject, the generic text path that prints the infinity tokens,
|
||||
and the parse branch that takes them back.</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue</code> — the ⋮ menu, its server file
|
||||
browser and extension filter, the paste type check, and the load event an XML apply also raises.</li>
|
||||
<li><code>wwwroot-src/src/components/RenderingCanvas.vue</code> and
|
||||
<code>wwwroot-src/src/components/RenderingCanvasToolBar.vue</code> — the viewer pane's canvas and its shared
|
||||
view toolbar.</li>
|
||||
<li><code>wwwroot-src/src/composables/useRouteTabs.ts</code> — the tab-to-URL sync, the seven valid segments and
|
||||
the default the bare route canonicalises to.</li>
|
||||
<li><code>wwwroot-src/src/composables/useCleanupHub.ts</code> — the registration that drops each superseded index
|
||||
key.</li>
|
||||
<li><code>wwwroot-src/src/router/routes.ts</code> — the <code>/controller/:tab?</code> route beside <code>/general-setup</code>.</li>
|
||||
<li><code>wwwroot-src/src/components/AppMenuBar.vue</code> — the <strong>Page</strong> dropdown carrying the
|
||||
<strong>Legacy-Controller</strong> entry.</li>
|
||||
<li><code>wwwroot-src/src/stores/project.ts</code> — the project flag the page watches in order to re-run
|
||||
Initialize; the indexed key that call returns is what the seven tabs and the status badge read.</li>
|
||||
<li><code>wwwroot-src/src/layouts/MainLayout.vue</code> — the keep-alive that holds the page across navigation and
|
||||
rebuilds it on a project epoch change.</li>
|
||||
<li><code>wwwroot-src/src/i18n/en/controller.ts</code> — every title, tab label, column header, banner and error
|
||||
context quoted above.</li>
|
||||
<li><code>wwwroot-src/src/i18n/en/menu.ts</code> — the <strong>Page</strong> and <strong>Legacy-Controller</strong> menu strings.</li>
|
||||
<li><code>wwwroot-src/src/i18n/en/common.ts</code> — the shared column, action and status strings the tabs reuse.</li>
|
||||
<li><code>Controller/ControllerController.cs</code> — the page's whole REST surface: the index-and-install pair,
|
||||
the per-property readers and writers, the interleaved stroke reads beside the grouped stroke
|
||||
writes, the four coded error payloads, the row-level offset CRUD, the align endpoint that snapshots
|
||||
the transformer either side of the write, the stateless revert, and the display binding that
|
||||
attaches the shared Execution displayee.</li>
|
||||
<li><code>Common/ApiError.cs</code> — the four coded payloads named above.</li>
|
||||
<li><code>Program.cs</code> — the named-floating-point-literal serializer the infinite bounds travel under.</li>
|
||||
<li><code>Widget/ObjectManagementController.cs</code> — the server half of the ⋮ menu, including the paste that
|
||||
rejects an object the expected-type string does not admit.</li>
|
||||
<li><code>Disp/ExecutionDisplayee.cs</code> — the displayee this page's canvas binds: the two coordinate flags,
|
||||
the extra brand test on the Heidenhain one, and the legacy tables both markers are built over.</li>
|
||||
<li><code>Disp/IsoCoordinateEntryDisplayee.cs</code> — the one marker class serving both faces, over whichever
|
||||
coordinate provider it is handed.</li>
|
||||
<li><code>Disp/HeidenhainCoordinateEntryDisplayee.cs</code> — the Heidenhain marker: the brand guard, the datum
|
||||
number and shift argument it draws nothing without, and the legacy tables it resolves through.</li>
|
||||
<li><code>Common/ProjectDisplayeeService.cs</code> — where that single shared displayee is created.</li>
|
||||
</ul>
|
||||
<h3 id="hiapi-engine">HiAPI Engine</h3>
|
||||
<ul>
|
||||
<li><code>HiUniNc/Numerical/HardNcEnv.cs</code> — the model behind the tab table above: the coordinate, datum and
|
||||
offset tables, the two stroke boxes that construct infinite, and the rapid rate and tooling time
|
||||
the Machine tab writes.</li>
|
||||
<li><code>HiGeom/Geom/Box3d.cs</code> — the box the two stroke limits are, its infinite construction, and the
|
||||
six-argument constructor whose grouped argument order the interleaved stroke writes are handed to.</li>
|
||||
<li><code>HiUniNc/Numerical/MillingToolOffsetTable.cs</code> — the offset table the Offset Table tab edits: a
|
||||
dictionary keyed on the offset id, which is the key a row rename moves an entry to.</li>
|
||||
<li><code>HiNc/MachiningProcs/LocalProjectService.cs</code> — the per-step stroke check that falls back to the
|
||||
legacy boxes when no runner-side stroke config resolves, which is what makes a regrouped box
|
||||
observable.</li>
|
||||
</ul>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="legacy-controller-settings.html">Legacy Controller Settings</a> — the model this screen edits, the three settings it
|
||||
owns alone, and the engine files behind them</li>
|
||||
<li><a class="xref" href="general-setup/controller/index.html">Controller Branch</a> — the SoftNcRunner-native controller branch that supersedes this screen,
|
||||
and where controller settings for a project are edited</li>
|
||||
<li><a class="xref" href="general-setup/index.html">General Setup Page</a> — the page that hosts the branch above, and the rest of the equipment
|
||||
tree beside it</li>
|
||||
<li><a href="../manual/utilities/legacy-controller.html">Legacy Controller (manual)</a> — the end-user task: the settings this screen still
|
||||
owns alone, and which face to edit for everything else</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>
|
||||
@@ -98,7 +98,7 @@ translations are held to under <a class="xref" href="../conventions/translation-
|
||||
<h2 id="the-three-bundles">The Three Bundles</h2>
|
||||
<p>Each locale is a folder under the i18n directory holding one file per namespace plus an index file
|
||||
that re-exports them as a single object. The three folders carry identical file lists — the same
|
||||
twenty-three namespaces, from <code>apiErrors</code> and <code>auth</code> through <code>tree</code> and <code>widgets</code> — because a
|
||||
twenty-two namespaces, from <code>apiErrors</code> and <code>auth</code> through <code>tree</code> and <code>widgets</code> — because a
|
||||
namespace's keys are added to all three locales in the same change. Keys are named
|
||||
<code>namespace.area.element</code> in lowerCamelCase and are split by the UI region they serve rather than by
|
||||
the source file that reads them.</p>
|
||||
@@ -332,7 +332,7 @@ and the re-title registration.</li>
|
||||
<li><code>wwwroot-src/src/i18n/schema.ts</code> — the English bundle as <code>MessageSchema</code>.</li>
|
||||
<li><code>wwwroot-src/src/i18n/schema.d.ts</code> — the ambient augmentation that registers that shape as
|
||||
vue-i18n's global message schema.</li>
|
||||
<li><code>wwwroot-src/src/i18n/en/index.ts</code> — the English bundle: the twenty-three namespaces assembled into
|
||||
<li><code>wwwroot-src/src/i18n/en/index.ts</code> — the English bundle: the twenty-two namespaces assembled into
|
||||
one object.</li>
|
||||
<li><code>wwwroot-src/src/i18n/zh-Hant/index.ts</code> and <code>wwwroot-src/src/i18n/zh-Hans/index.ts</code> — the same
|
||||
assembly, each annotated with <code>MessageSchema</code>.</li>
|
||||
|
||||
@@ -212,7 +212,7 @@ not per browser: two browsers pointed at the same service read and write the sam
|
||||
machining project is server-side in the same way — one project is loaded at a time and every connected
|
||||
browser sees it, which is why the status-hub broadcast is what keeps a second tab honest.</p>
|
||||
<p>The URL carries the rest: the route, the <code>?tree=</code> selection on the two Control-Tree pages, the browsed
|
||||
path on the File Explorer route, and the tab segments on the Tool House and Controller routes. Those
|
||||
path on the File Explorer route, and the tab segments on the Tool House route. Those
|
||||
come back on a reload from the address bar, and when a Control-Tree page is opened with no <code>?tree=</code> the
|
||||
host lands on the stored last selection for that page, falling back to the page's root when the stored
|
||||
id is not in the current project's tree.</p>
|
||||
@@ -286,13 +286,13 @@ focus starts a fresh burst immediately.</p>
|
||||
Because pages are cached, navigating away does not close one, and whether the backend engine stops
|
||||
drawing for it depends on the host. The Execution, General Setup and Tool House pages hand their
|
||||
activation flag to the canvas's <code>active</code> prop, which pauses the engine while the page sits off-screen;
|
||||
the Controller, Machine Tool and Mech Builder canvases and the File Explorer's STL preview bind no
|
||||
the Machine Tool and Mech Builder canvases and the File Explorer's STL preview bind no
|
||||
such prop, and the Execution page's CWE canvas pins it true, so all of those keep rendering until
|
||||
something unmounts them. Collapsing a panel does close one, unless that panel keeps its content
|
||||
mounted: the Execution page's 3D canvas panel does, so it survives a collapse, while the CWE panel
|
||||
beside it does not and its canvas connection goes with it.</li>
|
||||
<li>The cleanup hub is opened once per Control-Tree host and once each on the Controller and Tool House
|
||||
pages. Its composable also holds the set of IndexService keys that owner registered; on unmount it
|
||||
<li>The cleanup hub is opened once per Control-Tree host and once on the Tool House page. Its composable
|
||||
also holds the set of IndexService keys that owner registered; on unmount it
|
||||
posts a removal for every one of them and then stops the connection, so a teardown releases the
|
||||
server-side objects the page had indexed even if the hub never connected.</li>
|
||||
</ul>
|
||||
@@ -364,9 +364,8 @@ guard on the <code>?tree=</code> sync, the landing selection, and the cleanup re
|
||||
and the panel that keeps the 3D canvas mounted through a collapse.</li>
|
||||
<li><code>wwwroot-src/src/pages/GeneralSetupPage.vue</code> — the same lifecycle for the equipment host.</li>
|
||||
<li><code>wwwroot-src/src/pages/ToolHousePage.vue</code> — the page that reloads its singleton explicitly on mount.</li>
|
||||
<li><code>wwwroot-src/src/pages/ControllerPage.vue</code>, <code>wwwroot-src/src/pages/MachineToolPage.vue</code>,
|
||||
<code>wwwroot-src/src/pages/MechBuilderPage.vue</code> and <code>wwwroot-src/src/components/StlPreviewPane.vue</code> —
|
||||
the canvases mounted with no <code>active</code> binding.</li>
|
||||
<li><code>wwwroot-src/src/pages/MachineToolPage.vue</code>, <code>wwwroot-src/src/pages/MechBuilderPage.vue</code> and
|
||||
<code>wwwroot-src/src/components/StlPreviewPane.vue</code> — the canvases mounted with no <code>active</code> binding.</li>
|
||||
<li><code>wwwroot-src/src/components/execution/StepVolumePanel.vue</code> — the CWE canvas that pins <code>active</code> true
|
||||
and is stopped only by its own unmount.</li>
|
||||
<li><code>wwwroot-src/src/pages/FileExplorerPage.vue</code> — the route-leave guard that settles the editor buffer.</li>
|
||||
|
||||
@@ -133,11 +133,6 @@ is one of its children, so each renders inside the Main Panel's frame and menu b
|
||||
<td>The machining chain on a canvas of its own, beside a left column that shows either a read-only identity panel or the chain's XML source — two states of one column, chosen with a GUI/XML toggle. A load button installs a chain file into the project. Carries no Page-menu entry and is reached by URL.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/controller/:tab?</code></td>
|
||||
<td><code>controller</code></td>
|
||||
<td>The superseded HardNcEnv controller surface. The optional segment mirrors the active tab.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/tool-house/:toolId(\d+)?/:tab?/:subtab?</code></td>
|
||||
<td><code>tool-house</code></td>
|
||||
<td>The tool library and the per-tool editor. The three optional segments carry the selected tool and the two nested tab levels.</td>
|
||||
@@ -170,9 +165,9 @@ is one of its children, so each renders inside the Main Panel's frame and menu b
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The menu bar's Page dropdown holds every one of these that is menu-reachable, in setup order: Tool
|
||||
House, General Setup and Execution, then File Explorer and Mechanism Builder below a separator,
|
||||
then the legacy Controller below a second one. The Log Viewer has a button of its own rather than a
|
||||
menu entry, and <code>/machine-tool</code> has neither — it is reached by URL.</p>
|
||||
House, General Setup and Execution, then File Explorer and Mechanism Builder below a separator. The
|
||||
Log Viewer has a button of its own rather than a menu entry, and <code>/machine-tool</code> has neither — it is
|
||||
reached by URL.</p>
|
||||
<p>The Tool House route's tool segment is constrained to digits, but all three of its segments are
|
||||
optional, so a non-numeric segment in the tool position is not rejected: the router skips the tool
|
||||
parameter and reads that segment as the tab, which is what makes <code>/tool-house/cutter</code> a working tab
|
||||
@@ -193,6 +188,10 @@ moved into a Control Tree still lands on the editor.</p>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>/controller/:rest(.*)*</code></td>
|
||||
<td><code>/general-setup?tree=equipment/controller</code> — any trailing path is discarded, the retired Controller page's <code>/<tab></code> segment included, so every form lands on the branch root.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/spindle-capability/:tab?</code></td>
|
||||
<td><code>/general-setup?tree=equipment/spindle</code>, with <code>/<tab></code> appended when the segment is one of <code>thermal</code>, <code>gear-shift</code>, <code>dry-run</code>, <code>power</code>, <code>torque</code>. An unrecognised segment is dropped and the branch root is selected.</td>
|
||||
</tr>
|
||||
@@ -321,8 +320,9 @@ expansion set still unfolds the branches it names;</li>
|
||||
<li>as the first step of <code>routeForTreeId</code>, so the id-to-page resolver never sees an unmigrated id.</li>
|
||||
</ul>
|
||||
<p>Note what the first rule implies: a bare <code>?tree=controller</code> selects the <code>equipment/controller</code>
|
||||
branch — the current controller editor on the General Setup page — and has nothing to do with the
|
||||
<code>/controller</code> route, which is the separate legacy HardNcEnv surface.</p>
|
||||
branch — the controller editor on the General Setup page — and the redirect-only <code>/controller</code> path
|
||||
above lands on the same branch, so a bookmark from the retired Controller page's era resolves in
|
||||
either form.</p>
|
||||
<h2 id="landing-an-id-on-its-page">Landing an Id on Its Page</h2>
|
||||
<p><code>TREE_PAGE_ROOTS</code> lists the first segments that name a page: <code>execution</code>, <code>equipment</code> and
|
||||
<code>toolhouse</code>. <code>spindle</code> is absent on purpose — migration folds it into <code>equipment/…</code> before any root
|
||||
@@ -356,18 +356,18 @@ it, whereas the tool step is tested on its own, so a second segment that is not
|
||||
can carry is discarded either way — an id pointing at a single flute contour under
|
||||
<code>…/cutter/contours/fluting/…</code> lands on the nearest tab the URL can express. The same three name
|
||||
lists are imported by the page itself, so the tab set and the translation cannot drift apart.</p>
|
||||
<p>Once on the page, the tab segments are kept in step with the tabs by <code>useRouteTabs</code>, the composable
|
||||
the Controller route uses as well. It gives each tab level one route param, a valid-name set and a
|
||||
<p>Once on the page, the tab segments are kept in step with the tabs by <code>useRouteTabs</code>, a composable
|
||||
whose only consumer this page is. It gives each tab level one route param, a valid-name set and a
|
||||
default; a nested level may declare which parent values make it apply, and while its parent is
|
||||
something else the level is <strong>dormant</strong> — its segment is dropped from the URL while its reference
|
||||
quietly remembers the last value, so returning to that parent tab returns to the sub-tab it had.
|
||||
The Tool House sub-tab level applies under <code>cutter</code> and <code>holder</code> only, and both its valid set and
|
||||
its default depend on which of the two is showing. A segment the level does not recognise resolves
|
||||
to that default rather than failing. Canonicalisation runs on the first mount and on every
|
||||
keep-alive re-entry, which is why a bare <code>/controller</code> becomes <code>/controller/coordinate-table</code> and a
|
||||
bare <code>/tool-house</code> acquires its tab segments. The tool segment is not one of the composable's
|
||||
levels: the page fills it in itself, adopting the URL's tool when the project holds it and the first
|
||||
tool in the list otherwise, then replacing the URL with what it adopted. That resolver reacts to the
|
||||
keep-alive re-entry, which is why a bare <code>/tool-house</code> acquires its tab segments. The tool segment
|
||||
is not one of the composable's levels: the page fills it in itself, adopting the URL's tool when the
|
||||
project holds it and the first tool in the list otherwise, then replacing the URL with what it
|
||||
adopted. That resolver reacts to the
|
||||
<code>toolId</code> param and to the tool list rather than to page activation, so it also re-points the URL
|
||||
when the list changes underneath it.</p>
|
||||
<p>The Tool House page never reads or writes <code>?tree=</code>. A <code>toolhouse/…</code> id reaches it only by way of
|
||||
@@ -452,8 +452,8 @@ and the retitle hook registered with the i18n module.</li>
|
||||
<code>rawTreePathOfRoute</code>, <code>treePathOfRoute</code>, the two selection/URL watchers and the unguarded
|
||||
controller-checkbox watcher beside them, <code>landingSelection</code>, <code>applyRouteSelection</code> and
|
||||
<code>syncUrlBack</code>, plus the build-time reveal of a URL-named CSV or CL controller node.</li>
|
||||
<li><code>wwwroot-src/src/composables/useRouteTabs.ts</code> — the tab-to-param sync used by the Tool House and
|
||||
Controller routes, including dormant levels and the keep-alive re-entry canonicalisation.</li>
|
||||
<li><code>wwwroot-src/src/composables/useRouteTabs.ts</code> — the tab-to-param sync the Tool House route uses,
|
||||
including dormant levels and the keep-alive re-entry canonicalisation.</li>
|
||||
<li><code>wwwroot-src/src/pages/ToolHousePage.vue</code> — consumes the shared tab lists, resolves the tool from
|
||||
its path param, and navigates by route name when the tool changes.</li>
|
||||
<li><code>wwwroot-src/src/pages/FileExplorerPage.vue</code> — mirrors the browsed location into the route's
|
||||
|
||||
@@ -125,10 +125,8 @@ Open <a class="xref" href="../execution/index.html">Execution Page</a></li>
|
||||
<li>File Explorer MenuItem (below a separator). See <a href="../util/index.html">Util Pages</a>.</li>
|
||||
<li>Mechanism Builder MenuItem
|
||||
Open <a class="xref" href="../util/mech-builder.html">Mechanism Builder Page</a></li>
|
||||
<li>Legacy-Controller MenuItem (below a separator)
|
||||
Open <a class="xref" href="../legacy-controller.html">Legacy Controller Page</a></li>
|
||||
</ul>
|
||||
<p>The dropdown is not every route the application has. The Machine Tool page stays reachable by URL for its chain-only canvas preview, the Log Viewer is reached by the <code>Show Log</code> button, and the Fixture, Workpiece, Spindle Capability, Mission and Background / Coolant paths resolve as redirects into the two tree pages.</p>
|
||||
<p>The dropdown is not every route the application has. The Machine Tool page stays reachable by URL for its chain-only canvas preview, the Log Viewer is reached by the <code>Show Log</code> button, and the Fixture, Workpiece, Spindle Capability, Mission, Background / Coolant and legacy Controller paths resolve as redirects into the two tree pages.</p>
|
||||
</li>
|
||||
<li><p><a class="xref" href="preference-menu.html">Preference Menu Dropdown</a></p>
|
||||
</li>
|
||||
@@ -205,7 +203,7 @@ watching for project changes itself.</li>
|
||||
<ul>
|
||||
<li>The <a class="xref" href="../execution/index.html">Execution Page</a> is the landing route — <code>/</code> redirects to <code>/execution</code></li>
|
||||
<li>The page URL and panel state are synchronized (bi-directional navigation)</li>
|
||||
<li>There is no Environment dropdown. Machine Tool, Fixture, Workpiece, Controller, Background / Coolant and Spindle Capability are branches of the General Setup page's Control Tree, and Tool House and Execution are pages of their own; the remaining paths resolve as redirects into those pages. The menu bar is therefore <code>Project ▾ | Page ▾ | Preference ▾</code>, and the Controller page is reached from <code>Page ▾</code> as <code>Legacy-Controller</code>.</li>
|
||||
<li>There is no Environment dropdown. Machine Tool, Fixture, Workpiece, Controller, Background / Coolant and Spindle Capability are branches of the General Setup page's Control Tree, and Tool House and Execution are pages of their own; the remaining paths resolve as redirects into those pages. The menu bar is therefore <code>Project ▾ | Page ▾ | Preference ▾</code>.</li>
|
||||
</ul>
|
||||
<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>
|
||||
|
||||
@@ -43,10 +43,7 @@
|
||||
<a href="util/index.html" name="util/toc.html" title="Utility Pages">Utility Pages</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="legacy-controller.html" name="" title="Legacy Controller (HardNcEnv)">Legacy Controller (HardNcEnv)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="legacy-controller-settings.html" name="" title="Legacy Controller Settings">Legacy Controller Settings</a>
|
||||
<a href="legacy-controller-settings.html" name="" title="Legacy Controller Model (HardNcEnv)">Legacy Controller Model (HardNcEnv)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="by-source/index.html" name="by-source/toc.html" title="By Source Directory">By Source Directory</a>
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Conventions","href":"conventions/index.html","tocHref":"conventions/toc.html","topicHref":"conventions/index.html","homepage":"conventions/index.html"},{"name":"Platform","href":"platform/index.html","tocHref":"platform/toc.html","topicHref":"platform/index.html","homepage":"platform/index.html"},{"name":"App Shell","href":"shell/index.html","tocHref":"shell/toc.html","topicHref":"shell/index.html","homepage":"shell/index.html"},{"name":"Widgets","href":"widget/index.html","tocHref":"widget/toc.html","topicHref":"widget/index.html","homepage":"widget/index.html"},{"name":"Geometry Panels","href":"geom/index.html","tocHref":"geom/toc.html","topicHref":"geom/index.html","homepage":"geom/index.html"},{"name":"Execution Page","href":"execution/index.html","tocHref":"execution/toc.html","topicHref":"execution/index.html","homepage":"execution/index.html"},{"name":"General Setup Page","href":"general-setup/index.html","tocHref":"general-setup/toc.html","topicHref":"general-setup/index.html","homepage":"general-setup/index.html"},{"name":"Tool House Page","href":"tool-house/index.html","tocHref":"tool-house/toc.html","topicHref":"tool-house/index.html","homepage":"tool-house/index.html"},{"name":"Utility Pages","href":"util/index.html","tocHref":"util/toc.html","topicHref":"util/index.html","homepage":"util/index.html"},{"name":"Legacy Controller (HardNcEnv)","href":"legacy-controller.html","topicHref":"legacy-controller.html"},{"name":"Legacy Controller Settings","href":"legacy-controller-settings.html","topicHref":"legacy-controller-settings.html"},{"name":"By Source Directory","href":"by-source/index.html","tocHref":"by-source/toc.html","topicHref":"by-source/index.html","homepage":"by-source/index.html"}]}
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Conventions","href":"conventions/index.html","tocHref":"conventions/toc.html","topicHref":"conventions/index.html","homepage":"conventions/index.html"},{"name":"Platform","href":"platform/index.html","tocHref":"platform/toc.html","topicHref":"platform/index.html","homepage":"platform/index.html"},{"name":"App Shell","href":"shell/index.html","tocHref":"shell/toc.html","topicHref":"shell/index.html","homepage":"shell/index.html"},{"name":"Widgets","href":"widget/index.html","tocHref":"widget/toc.html","topicHref":"widget/index.html","homepage":"widget/index.html"},{"name":"Geometry Panels","href":"geom/index.html","tocHref":"geom/toc.html","topicHref":"geom/index.html","homepage":"geom/index.html"},{"name":"Execution Page","href":"execution/index.html","tocHref":"execution/toc.html","topicHref":"execution/index.html","homepage":"execution/index.html"},{"name":"General Setup Page","href":"general-setup/index.html","tocHref":"general-setup/toc.html","topicHref":"general-setup/index.html","homepage":"general-setup/index.html"},{"name":"Tool House Page","href":"tool-house/index.html","tocHref":"tool-house/toc.html","topicHref":"tool-house/index.html","homepage":"tool-house/index.html"},{"name":"Utility Pages","href":"util/index.html","tocHref":"util/toc.html","topicHref":"util/index.html","homepage":"util/index.html"},{"name":"Legacy Controller Model (HardNcEnv)","href":"legacy-controller-settings.html","topicHref":"legacy-controller-settings.html"},{"name":"By Source Directory","href":"by-source/index.html","tocHref":"by-source/toc.html","topicHref":"by-source/index.html","homepage":"by-source/index.html"}]}
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
<h1 id="freeform-remover-panel">Freeform Remover Panel</h1>
|
||||
|
||||
<p>The key model is <a class="xref" href="../../../api/Hi.Machining.FreeformRemover.html">FreeformRemover</a>: a cutter whose removal volume comes from two referenced geometries — a non-cutting strut and a cutting shaper — anchored to the holder buckle.</p>
|
||||
<p>This cutter is offered in the Cutter Type selector and nowhere else. There is no Freeform Remover editor here and no freeform-remover endpoint in the backend, so nothing on this surface can create or change one — the shipped caption says as much, naming the WPF client and HiNcRcl.</p>
|
||||
<p>This cutter is offered in the Cutter Type selector and nowhere else. There is no Freeform Remover editor here and no freeform-remover endpoint in the backend, so nothing on this surface can create or change one — the shipped caption says as much, and names HiNcRcl as the place to edit one.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<h3 id="web-layout">Web Layout</h3>
|
||||
<ul>
|
||||
|
||||
@@ -211,7 +211,7 @@ The model <code>UserService</code> is the server-side <code>Environments/UserSer
|
||||
<h5>Note</h5>
|
||||
<p>The fluting type is named loosely on the wire, and every spelling resolves. <code>PUT /{id}/fluting</code> accepts <code>UniformFluting</code> / <code>uniform</code> and <code>FreeFluting</code> / <code>free</code>, and equally <code>UniformContourTray</code> / <code>FreeContourTray</code>. A Control-Tree id whose cutter branch reads <code>…/contours/tray…</code> resolves to the <code>…/contours/fluting…</code> node.</p>
|
||||
</div>
|
||||
<p>One cutter type has no editor here, and the app says so where the type is chosen: the <strong>FreeformRemover</strong>. Selecting it keeps the existing model intact and shows a note — <em>FreeformRemover editor is not yet available in the web frontend. Use the WPF client or HiNcRcl for now.</em></p>
|
||||
<p>One cutter type has no editor here, and the app says so where the type is chosen: the <strong>FreeformRemover</strong>. Selecting it keeps the existing model intact and shows a note — <em>No FreeformRemover editor here. The existing model is kept unchanged; edit one in HiNcRcl.</em></p>
|
||||
<p>Three smaller surfaces are absent for the same reason: the InsertCutter and FluteInnerBeam physics groups, and the <code>CustomSpinningProfile</code> shaper-profile type — the profile tab offers the five APT types (General / Ball / Column / Cone / Taper).</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
|
||||
@@ -184,7 +184,7 @@ actions.</p>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>xml</code></td>
|
||||
<td><code>xml</code>, <code>hincproj</code>, <code>CoatingMaterial</code>, <code>CutterMaterial</code>, <code>Holder</code>, <code>WorkpieceMaterial</code>, <code>mp</code>, <code>MillingPara</code>, <code>SpindleCapability</code>, <code>StickMachiningTool</code>, <code>general-mech</code>, <code>mt</code></td>
|
||||
<td><code>xml</code>, <code>hincproj</code>, <code>CoatingMaterial</code>, <code>CutterMaterial</code>, <code>Holder</code>, <code>WorkpieceMaterial</code>, <code>mp</code>, <code>MillingPara</code>, <code>SpindleCapability</code>, <code>StickMachiningTool</code>, <code>GeneralMechanism</code>, <code>general-mech</code>, <code>MachineTool</code>, <code>mt</code>, <code>Controller</code>, <code>SoftNcRunner</code>, <code>Cutter</code>, <code>CoolantHeatCondition</code>, <code>MachiningToolHouse</code>, <code>Fixture</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>markdown</code></td>
|
||||
|
||||
@@ -111,10 +111,6 @@ server-side Load and Save As through the File Explorer's picker.</li>
|
||||
<li><a href="stl-preview-pane.html">STL Preview Pane</a> — the 3D preview that takes over the File Explorer's
|
||||
editor column for an <code>.stl</code> row: its cancellable load, the rendering connection it owns, and the
|
||||
transform it can bake into the file.</li>
|
||||
<li><a class="xref" href="../legacy-controller.html">Legacy-Controller</a> — the legacy controller screen, reachable from
|
||||
<code>Page → Legacy-Controller</code> below the second separator. The General Setup page's Controller branch
|
||||
is the settings face for the SoftNcRunner; this page stays reachable while it carries settings
|
||||
that tree has no editor for.</li>
|
||||
</ul>
|
||||
<h2 id="where-neighbouring-editors-live">Where Neighbouring Editors Live</h2>
|
||||
<p>Three editors a reader might expect here are shipped surfaces of other pages:</p>
|
||||
|
||||
@@ -108,7 +108,7 @@
|
||||
<li>File Menu
|
||||
<ul>
|
||||
<li>New — discards the current mechanism and starts an empty one with a root anchor.</li>
|
||||
<li>Load… — opens the server file picker (Admin / Project / Resource) filtered to <code>*.GeneralMechanism</code> / <code>*.xml</code>; the backend parses the picked file in place and records its directory so ReLoad can re-read it. <strong>That filter matches none of the shipped mechanisms</strong>, which are named <code>.general-mech</code> beside the machine tool they belong to; the dialog's appended All Files entry is what reaches them, and the backend parses whatever is picked.</li>
|
||||
<li>Load… — opens the server file picker (Admin / Project / Resource) filtered to <code>*.GeneralMechanism</code> / <code>*.general-mech</code> / <code>*.xml</code>; the backend parses the picked file in place and records its directory so ReLoad can re-read it. <code>.GeneralMechanism</code> is the canonical spelling — <code>GeneralMechanism.XName</code>, what this page's Save As writes and what the shipped mechanism inside the <code>Table-B1.default</code> package is named; <code>.general-mech</code> is the older hand-authored spelling case files still carry. The filter is display-only either way, since the backend dispatches on the parsed root element and parses whatever is picked.</li>
|
||||
<li>ReLoad — re-parses the file last loaded (disabled until a file has been loaded). The entry is spelled <code>ReLoad</code>, with the second capital.</li>
|
||||
<li>Save As General Mechanism — writes a <code>.GeneralMechanism</code> XML to the picked server location and retargets ReLoad at it.</li>
|
||||
<li>Save As Machine Tool — wraps the mechanism in a <a class="xref" href="../../api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> and writes a <code>.MachineTool</code> XML to the picked server location, leaving the open-mechanism pointer where it is. The envelope is the Xyzabc machine tool; the menu entry names neither that nor the file type.</li>
|
||||
|
||||
@@ -89,8 +89,8 @@
|
||||
|
||||
<p>NumericInput is the single-value numeric field the rest of the web application embeds. It has no
|
||||
route and no Control-Tree node of its own: it is reached only through the editors that host it,
|
||||
and those span the equipment and mission trees, the Tool House tool editors, the Legacy Controller
|
||||
tabs, the transformer and geometry editors and the Preference menu. The rule for carrying <code>NaN</code> and
|
||||
and those span the equipment and mission trees, the Tool House tool editors, the transformer and
|
||||
geometry editors and the Preference menu. The rule for carrying <code>NaN</code> and
|
||||
the infinities across the JSON boundary is stated once in
|
||||
<a class="xref" href="../conventions/numeric-io-utilities.html">Numeric Input/Output</a>; this page is the widget that implements
|
||||
the client end of it.</p>
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
<p>The component is generic over the radio <code>value</code> type, so <code>RenderingMode</code> / <code>HolderRenderingMode</code> / etc. stay fully typed at the call site. Besides <code>groups</code> it accepts <code>label</code>, <code>disable</code>, <code>title</code>, <code>minWidthPx</code> (default 220), <code>size</code> (default <code>sm</code>), <code>contentClass</code> and <code>compact</code>. <code>compact</code> is a tighter-than-dense row mode, used by the General Setup and Tool House panels for their long option lists; the General Setup, Tool House and Execution callers pass <code>content-class="bg-white"</code> to opt out of Quasar's transparent menu.</p>
|
||||
<h3 id="hinc-2025-webservice-quasar-cli-spa">HiNC-2025-webservice (Quasar CLI SPA)</h3>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue</code> — the shared <code><q-btn-dropdown></code> + <code><q-list></code> implementation behind four of the app's five Scene menus. The Controller viewer is the exception: <code>wwwroot-src/src/components/controller/ControllerExtendedToolBar.vue</code> builds its Scene dropdown inline against the same <code>/api/rendering-flags</code> surface.</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue</code> — the shared <code><q-btn-dropdown></code> + <code><q-list></code> implementation behind all four of the app's Scene menus.</li>
|
||||
<li>Callers (each reads a <code>DisplayGroup[]</code> computed from its page-local state and forwards <code>onUpdate</code> to its existing handlers):
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/execution/ExecutionExtendedToolBar.vue</code></li>
|
||||
@@ -158,7 +158,7 @@
|
||||
<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/RenderingCanvasToolBar.vue</code> — the <code>View ▾</code> menu. Eight callers embed it, one per canvas: <code>wwwroot-src/src/pages/ExecutionPage.vue</code> (teleported into the canvas panel's header, beside <code>ExecutionExtendedToolBar</code>), <code>wwwroot-src/src/pages/ControllerPage.vue</code> (beside <code>ControllerExtendedToolBar</code>), <code>wwwroot-src/src/pages/MachineToolPage.vue</code>, <code>wwwroot-src/src/pages/MechBuilderPage.vue</code>, <code>wwwroot-src/src/components/mech/EquipmentSetupPanel.vue</code> (the General Setup canvas column, mounted by <code>wwwroot-src/src/pages/GeneralSetupPage.vue</code>), <code>wwwroot-src/src/components/toolhouse/ToolHouseSetupPanel.vue</code> (mounted by <code>wwwroot-src/src/pages/ToolHousePage.vue</code>), <code>wwwroot-src/src/components/StlPreviewPane.vue</code> (the File Explorer preview pane, mounted by <code>wwwroot-src/src/components/FileExplorer.vue</code>) and <code>wwwroot-src/src/components/execution/StepVolumePanel.vue</code> (the CWE footprint canvas, teleported into its host expansion's header). Four of those sit beside a <code>Scene ▾</code> menu — the Execution, General Setup, Tool House and STL preview canvases; the Machine Tool, Mechanism Builder and CWE canvases carry the <code>View ▾</code> menu alone, and the Controller viewer pairs it with an inlined Scene dropdown.</li>
|
||||
<li><code>wwwroot-src/src/components/RenderingCanvasToolBar.vue</code> — the <code>View ▾</code> menu. Seven callers embed it, one per canvas: <code>wwwroot-src/src/pages/ExecutionPage.vue</code> (teleported into the canvas panel's header, beside <code>ExecutionExtendedToolBar</code>), <code>wwwroot-src/src/pages/MachineToolPage.vue</code>, <code>wwwroot-src/src/pages/MechBuilderPage.vue</code>, <code>wwwroot-src/src/components/mech/EquipmentSetupPanel.vue</code> (the General Setup canvas column, mounted by <code>wwwroot-src/src/pages/GeneralSetupPage.vue</code>), <code>wwwroot-src/src/components/toolhouse/ToolHouseSetupPanel.vue</code> (mounted by <code>wwwroot-src/src/pages/ToolHousePage.vue</code>), <code>wwwroot-src/src/components/StlPreviewPane.vue</code> (the File Explorer preview pane, mounted by <code>wwwroot-src/src/components/FileExplorer.vue</code>) and <code>wwwroot-src/src/components/execution/StepVolumePanel.vue</code> (the CWE footprint canvas, teleported into its host expansion's header). Four of those sit beside a <code>Scene ▾</code> menu — the Execution, General Setup, Tool House and STL preview canvases; the Machine Tool, Mechanism Builder and CWE canvases carry the <code>View ▾</code> menu alone.</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue</code> — schema-driven dropdown described above.</li>
|
||||
<li><code>wwwroot-src/src/components/RenderingCanvas.vue</code> — SignalR-hosted WebSocket canvas whose exposed <code>setView</code> / <code>setViewTo*View</code> methods the tool bar calls (see <a class="xref" href="../conventions/rendering-canvas-web-service.html">Rendering Canvas on Web Service</a>).</li>
|
||||
<li><code>wwwroot-src/src/i18n/en/widgets.ts</code> — the <code>widgets.canvas.*</code> keys: <code>view</code>, the seven preset labels, and <code>scene</code>.</li>
|
||||
@@ -166,7 +166,7 @@
|
||||
<ul>
|
||||
<li><code>Disp/RenderingHub.cs</code> — the <code>SetView(string)</code> hub method that maps each preset name onto engine calls.</li>
|
||||
<li><code>Disp/RenderingService.cs</code> — <code>GetOrCreateEngine(connectionId)</code>, the per-connection <code>DispEngine</code> store the hub resolves against.</li>
|
||||
<li><code>Common/RenderingFlagsController.cs</code> — the <code>/api/rendering-flags</code> surface (<code>GET</code>, <code>POST update</code>, <code>POST batch</code>) behind the Execution page's Scene menu and the Controller viewer's inlined one, wrapped by <code>wwwroot-src/src/api/renderingFlags.ts</code>. It reads and writes <code>ExecutionDisplayee.RenderingFlagBitArray</code> through <code>ProjectDisplayeeService</code>.</li>
|
||||
<li><code>Common/RenderingFlagsController.cs</code> — the <code>/api/rendering-flags</code> surface (<code>GET</code>, <code>POST update</code>, <code>POST batch</code>) behind the Execution page's Scene menu, wrapped by <code>wwwroot-src/src/api/renderingFlags.ts</code>. It reads and writes <code>ExecutionDisplayee.RenderingFlagBitArray</code> through <code>ProjectDisplayeeService</code>.</li>
|
||||
<li><code>wwwroot-src/src/api/equipmentSetup.ts</code>, <code>wwwroot-src/src/api/toolHouse.ts</code> and <code>wwwroot-src/src/api/stlPreview.ts</code> — the typed wrappers the other three Scene menus post through.</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
Reference in New Issue
Block a user