deploy.
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 179 KiB |
@@ -0,0 +1,313 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Finding Your Way | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Finding Your Way | 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="">
|
||||
<h1 id="finding-your-way">Finding Your Way</h1>
|
||||
|
||||
<p>The application is a handful of screens, and most of what a job configures lives inside a tree on
|
||||
two of them. The <strong>Page</strong> menu reaches six of those screens, and it is not all of them. Every node
|
||||
of a tree has an address of its own, so a place in the application can be linked to rather than
|
||||
described.</p>
|
||||
<h2 id="the-screens">The screens</h2>
|
||||
<p>The <strong>Page</strong> dropdown on the menu bar carries six entries in three groups. The first group is the
|
||||
job, in the order a job uses it:</p>
|
||||
<ul>
|
||||
<li><strong>Tool House</strong> — the tools, one editor per tool</li>
|
||||
<li><strong>General Setup</strong> — the equipment: the machine tool, the spindle capability, the background and
|
||||
coolant conditions, the fixture, the workpiece and the controller</li>
|
||||
<li><strong>Execution</strong> — the run: the mission that is executed, the program as it was played, and what the
|
||||
run reports</li>
|
||||
</ul>
|
||||
<p>Below a separator, the two utilities:</p>
|
||||
<ul>
|
||||
<li><strong>File Explorer</strong> — browsing the files under the roots the service exposes</li>
|
||||
<li><strong>Mechanism Builder</strong> — authoring a kinematic chain</li>
|
||||
</ul>
|
||||
<p>Below a second separator, one more:</p>
|
||||
<ul>
|
||||
<li><strong>Legacy-Controller</strong> — the controller settings that the General Setup tree's Controller branch
|
||||
has no editor for. The page it opens is titled <em>Controller</em>.</li>
|
||||
</ul>
|
||||
<p>No entry is ever greyed out. All six are selectable with no project open; what they lead to is what
|
||||
changes.</p>
|
||||
<p>Three screens have no entry in this menu:</p>
|
||||
<ul>
|
||||
<li><strong>Machine Tool</strong>, at <code>/machine-tool</code>, reached by address only. It shows the machine chain beside a
|
||||
folder button whose tooltip reads <strong>Browse</strong> and a GUI / XML view switch, so it is more than a
|
||||
look at the chain — and it needs a project open.</li>
|
||||
<li><strong>Log Viewer</strong>, reached from the <strong>Show Log</strong> button near the right-hand end of the menu bar. Its
|
||||
address is <code>/preference/log</code>.</li>
|
||||
<li>The sign-in page, which the service raises on its own when it wants one.</li>
|
||||
</ul>
|
||||
<h2 id="selecting-inside-a-tree">Selecting inside a tree</h2>
|
||||
<p>General Setup and Execution each carry a Control Tree in their left dock, under a header reading
|
||||
<strong>Control Tree</strong>, with the selected node's editor in the row beneath it. That editor row is titled
|
||||
with the path of the selection — <em>General Setup / Workpiece / Anchor / Geom To Fixture</em> — which is
|
||||
also how these pages name a place in prose.</p>
|
||||
<p>General Setup's tree has one root, <strong>General Setup</strong>, holding <strong>Machine Tool</strong>, <strong>Spindle
|
||||
Capability</strong>, <strong>Background</strong>, <strong>Coolant</strong>, <strong>Fixture</strong>, <strong>Workpiece</strong> and <strong>Controller</strong>, in that
|
||||
order. With a project open, a <strong>CSV Controller</strong> and a <strong>CL Controller</strong> node follow, each behind
|
||||
its own Preference checkbox — as siblings of Controller at the same level, not as children of it.
|
||||
With no project open neither node is built, whatever the preferences say. Execution's tree has one
|
||||
root, <strong>Execution</strong>, holding <strong>Mission</strong> above <strong>Program</strong>.</p>
|
||||
<p>General Setup's middle column belongs to the Spindle Capability branch: its items put their power
|
||||
and torque charts there. Every other selection leaves the column reading <em>The selected item has no
|
||||
expanded content.</em> That is the column's resting state rather than a fault.</p>
|
||||
<p>General Setup at <code>/general-setup?tree=equipment/workpiece/anchor/geom-to-fixture</code>, with the
|
||||
Workpiece branch's <strong>Anchor</strong> group expanded and <strong>Geom To Fixture</strong> selected. Its editor is the row
|
||||
below the tree, the middle column carries the empty-content message, and the canvas on the right
|
||||
draws the workpiece with its anchor labels.</p>
|
||||
<p><img src="finding-your-way-img/general-setup-tree.en.png" alt="The General Setup Control Tree with Geom To Fixture selected under Workpiece and Anchor, the middle column reading that the selected item has no expanded content, and the workpiece on the canvas"></p>
|
||||
<h2 id="linking-to-a-node">Linking to a node</h2>
|
||||
<p>The selection rides in the address as a <code>?tree=</code> value, so the address bar is already the link:
|
||||
copying it copies the node, not just the page.</p>
|
||||
<ol>
|
||||
<li>To take a link from the tree instead, right-click a node's label. Every label is a real link to
|
||||
that node's address, so the browser's own copy-link and open-in-new-tab entries both apply to
|
||||
it.</li>
|
||||
<li>Ctrl-click, Cmd-click or Shift-click a label to open that node in a new tab. The current tab's
|
||||
selection stays where it is.</li>
|
||||
<li>A plain left click selects the node in place, without navigating.</li>
|
||||
<li>Paste a <code>?tree=</code> value belonging to the other tree page and it redirects to the page that owns
|
||||
it, so a link does not have to name the right screen to reach the right node.</li>
|
||||
</ol>
|
||||
<p>Tool House has no <code>?tree=</code> at all — its address already names the selection, as
|
||||
<code>/tool-house/<tool>/<tab>/<sub-tab></code>, so <code>/tool-house/1/cutter/material</code> is a link to one tool's
|
||||
Material sub-tab.</p>
|
||||
<p>Arriving at a tree page with no <code>?tree=</code> still lands on a selected node — the last selection this
|
||||
browser made there, or the tree's root — and the address takes that node's <code>?tree=</code> value on as soon
|
||||
as the tree is built, so the address bar is a whole link from then on.</p>
|
||||
<div class="IMPORTANT">
|
||||
<h5>Important</h5>
|
||||
<p>An address for a node its Preference checkbox is currently hiding — a <strong>CSV Controller</strong> or <strong>CL
|
||||
Controller</strong> node — is honoured only when the tree is built while that address is the current
|
||||
one, and it reveals nothing without a project open. In practice that means a full page load:
|
||||
pasting the link into a new tab, or reloading on it. Jumping to it from a screen that has already
|
||||
shown General Setup for the current project does not rebuild that tree, so the address is dropped
|
||||
in silence with the selection left where it was.</p>
|
||||
</div>
|
||||
<p>The same page at <code>/general-setup?tree=equipment/controller-csv</code>, loaded fresh on that address with
|
||||
the CSV Controller preference still off — the address alone is what puts the node in the tree.
|
||||
<strong>CSV Controller</strong> sits below <strong>Controller</strong> at the same indent — a sibling of it — and its editor
|
||||
describes the fields as column tags matched against the CSV header line: <strong>Machine coordinate
|
||||
prefix</strong> <code>MC.</code>, <strong>Cutter location prefix</strong> <code>CL.</code> and <strong>Tool id column</strong> <code>ToolId</code>.</p>
|
||||
<p><img src="finding-your-way-img/controller-csv-revealed.en.png" alt="The General Setup Control Tree with a CSV Controller node at the same indent as Controller, a sibling rather than a child of it, and the CSV column-tag editor below the tree"></p>
|
||||
<h2 id="the-addresses">The addresses</h2>
|
||||
<p>Nine addresses render a screen of their own. The bracketed segments are optional, so the bare
|
||||
address resolves too and the screen fills them in from its own state; File Explorer's trailing path
|
||||
carries as many segments as the browsed folder is deep.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Address</th>
|
||||
<th>Screen</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>/execution</code></td>
|
||||
<td>Execution</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/general-setup</code></td>
|
||||
<td>General Setup</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/tool-house/<tool>/<tab>/<sub-tab></code></td>
|
||||
<td>Tool House</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/machine-tool</code></td>
|
||||
<td>Machine Tool</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/controller/<tab></code></td>
|
||||
<td>Controller</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/util/file-explorer/<root>/<path></code></td>
|
||||
<td>File Explorer</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/util/mech-builder</code></td>
|
||||
<td>Mechanism Builder</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/preference/log</code></td>
|
||||
<td>Log Viewer</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/login</code></td>
|
||||
<td>the sign-in page</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><code>/</code> lands on Execution. Six further addresses render nothing of their own and redirect into a tree
|
||||
page's node instead:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Address</th>
|
||||
<th>Lands on</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>/spindle-capability/<tab></code></td>
|
||||
<td>General Setup, the Spindle Capability branch — on that tab's item when the segment names one, on the branch itself otherwise</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/equipment/spindle</code></td>
|
||||
<td>General Setup, the Spindle Capability branch</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/fixture</code>, and anything below it</td>
|
||||
<td>General Setup, the Fixture branch</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/workpiece</code>, and anything below it</td>
|
||||
<td>General Setup, the Workpiece branch</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/equipment/background-coolant</code></td>
|
||||
<td>General Setup, the Background item</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>/mission</code></td>
|
||||
<td>Execution, the Mission branch</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>An address matching none of these lands on the application's own <strong>404 Not Found</strong> page, which
|
||||
prints the address it could not match and offers <strong>Back to Execution</strong>. A <code>?tree=</code> value naming no
|
||||
node of the built tree is ignored instead: the page opens with nothing selected, and the editor row
|
||||
reads <em>Select an item in the Control Tree to edit it here.</em></p>
|
||||
<div class="WARNING">
|
||||
<h5>Warning</h5>
|
||||
<p>Tree ids are not promised to survive a version change. An old link keeps resolving because the
|
||||
application migrates known older ids, but nothing should be built on an id staying the same.</p>
|
||||
</div>
|
||||
<h2 id="if-the-tree-is-not-there">If the tree is not there</h2>
|
||||
<p>The left dock is one of the column toggles at the right-hand end of the menu bar, left of the page
|
||||
title — three of them on General Setup, one per column — and its title is <em>Toggle the Control Tree /
|
||||
editor dock</em>. Switching it off removes the dock whole, tree and editor together, and the browser
|
||||
remembers the choice, so the dock is still gone after a reload. The same button switches it back
|
||||
on. General Setup's middle column has a toggle of its own beside it, which is the other way that
|
||||
page can arrive looking short of a column.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="index.html">Basics</a> — the rest of what is true on every screen</li>
|
||||
<li><a href="the-app-window.html">The Application Window</a> — the menu bar the Page dropdown sits on, and what keeps a visited screen alive between visits</li>
|
||||
<li><a href="signing-in.html">Signing In</a> — the screen that has no menu entry because the service raises it</li>
|
||||
<li><a href="projects.html">Projects</a> — what a project change does to a tree, and to the node an address selects</li>
|
||||
<li><a href="preferences.html">Preferences</a> — the two checkboxes behind the controller nodes, and the setting that changes what a tree carries</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="contribution d-print-none">
|
||||
</div>
|
||||
|
||||
<div class="next-article d-print-none border-top" id="nextArticle"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="affix">
|
||||
<nav id="affix"></nav>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div class="container-xxl search-results" id="search-results"></div>
|
||||
|
||||
<footer class="border-top text-secondary">
|
||||
<div class="container-xxl">
|
||||
<div class="flex-fill">
|
||||
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,138 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Basics | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Basics | 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="">
|
||||
<h1 id="basics">Basics</h1>
|
||||
|
||||
<p>This section covers the sign-in gate in front of the application and what is true on every screen
|
||||
behind it: the frame that stays put while the page area changes, the project the rest of the
|
||||
application is configured against, the ways one screen leads to another, and the surfaces that
|
||||
report what the service is doing. The task sections build on it rather than restating it. The pages
|
||||
below are ordered as the application presents them: the gate, the frame, the project, the screens,
|
||||
the settings, the messages.</p>
|
||||
<p>For a first end-to-end run rather than a reference, start with
|
||||
<a href="../../workflows/basic-simulation.html">Basic Machining Simulation</a>.</p>
|
||||
<h2 id="pages">Pages</h2>
|
||||
<ul>
|
||||
<li><a href="signing-in.html">Signing In</a> — Whether the service asks for a sign-in, what to do when it does, and what happens when it cannot answer</li>
|
||||
<li><a href="the-app-window.html">The Application Window</a> — The menu bar, the page area and the footer, and what a project change does to them</li>
|
||||
<li><a href="projects.html">Projects</a> — Creating, opening, saving and closing a project, and what Save As does and does not copy</li>
|
||||
<li><a href="finding-your-way.html">Finding Your Way</a> — The screens the Page menu reaches and the ones it does not, selecting inside a tree, and linking to a node</li>
|
||||
<li><a href="preferences.html">Preferences</a> — The settings the service keeps for everyone on it, and the ones the browser keeps for the device it is sitting at</li>
|
||||
<li><a href="messages-and-logs.html">Messages and Logs</a> — The footer's three channels, the four session message tabs and the service log, and which answers which question</li>
|
||||
</ul>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="../setup/index.html">Setup</a> — configuring the equipment, once a project is open</li>
|
||||
<li><a href="../run/index.html">Running a Simulation</a> — building a mission and playing it, once the equipment is set up</li>
|
||||
<li><a href="../utilities/index.html">Utilities</a> — the supporting screens beside these tasks</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>
|
||||
|
After Width: | Height: | Size: 188 KiB |
@@ -0,0 +1,341 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Messages and Logs | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Messages and Logs | 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="">
|
||||
<h1 id="messages-and-logs">Messages and Logs</h1>
|
||||
|
||||
<p>Where a message lands decides how long it lasts and who else can see it, and that is usually more
|
||||
useful than what it said at the time. The toasts and the footer belong to one browser and are gone
|
||||
at its next reload; the four session message lists and the day's log file are held by the service.
|
||||
Picking the right surface is most of the difference between a specific question and a vague one.</p>
|
||||
<h2 id="where-a-message-can-land">Where a message can land</h2>
|
||||
<p>The application has several places to put a message, and they do not carry the same things.</p>
|
||||
<ul>
|
||||
<li><strong>A toast</strong> — bottom right, for a few seconds, then gone. The only surface that interrupts, and
|
||||
the only one that keeps nothing itself.</li>
|
||||
<li><strong>The footer's latest line, and the recent list behind it</strong> — every toast that carried any text is
|
||||
copied here before it is shown, so this list is the toast's afterlife. Only a toast with neither
|
||||
message nor caption is skipped, and a small number of status lines are written straight here and
|
||||
never toast at all.</li>
|
||||
<li><strong>The footer's session strip</strong> — the middle of the bar, drawn once a run has produced something
|
||||
and empty until then.</li>
|
||||
<li><strong>The footer's background zone</strong> — the right end, drawn only while a project file operation is in
|
||||
flight, naming the operation and the path it is working on.</li>
|
||||
<li><strong>The Session Messages panel</strong> — on the Execution page, four lists kept by the service.</li>
|
||||
<li><strong>The Log Viewer</strong> — the file the service itself writes for the current day.</li>
|
||||
</ul>
|
||||
<p>The footer summarises; it does not hold. Everything a run reports also goes into one of the panel's
|
||||
four lists, and the panel is where it stays.</p>
|
||||
<h2 id="messages-a-project-load-raises">Messages a project load raises</h2>
|
||||
<p>Opening or re-reading a project can report holes in it — a referenced STL missing from disk, or a
|
||||
mesh-geometry <code>.wct</code> file a raw geometry names but that is not there. <strong>None of these fail the load.</strong>
|
||||
The project opens, the body that needed the missing file simply comes up without its geometry, and
|
||||
the action still reports success. The message is the only thing that says otherwise.</p>
|
||||
<p>These messages then take a path of their own, and it has a consequence worth knowing before you rely
|
||||
on it. A project file operation runs outside any session, so the panel's four lists — which belong to
|
||||
the service, and are where everything a <em>run</em> reports stays — never see them. Instead the first five
|
||||
errors and warnings are toasted, anything past that goes straight to the footer's recent list, and
|
||||
one more toast says how many did not get their own. Anything milder than a warning is not surfaced in
|
||||
the window at all.</p>
|
||||
<p>That leaves the footer's recent list holding the only copy in the window, and that list is the
|
||||
browser's: <strong>a reload empties it</strong>. So read the messages when a project opens with pieces missing, or
|
||||
read <a href="#the-service-log">the service log</a>, which has them either way. The Session Messages panel will
|
||||
not.</p>
|
||||
<h2 id="the-footer">The footer</h2>
|
||||
<p>The left region is this browser's own record and nothing else's. The list behind the latest line is
|
||||
newest first, capped at a hundred entries, emptied by its <strong>Clear</strong> button and by a reload, and
|
||||
written down nowhere — nothing about it survives closing the tab. Each entry keeps the wording it
|
||||
was raised in, so switching the language leaves the list as a mixture while the panel's lists
|
||||
re-render at once. The frame page describes the regions themselves: see
|
||||
<a href="the-app-window.html">The Application Window</a>.</p>
|
||||
<p><strong>Nothing marks the list as having something new in it.</strong> The button carries no badge and no dot,
|
||||
deliberately, because a toast has already drawn attention once. The consequence is the failure this
|
||||
page exists to prevent: a message raised while another screen was open, or while the window was
|
||||
behind something else, is invisible until that menu is opened by hand. Opening it after an action
|
||||
that seemed to do nothing is the cheapest check available.</p>
|
||||
<p>The middle strip is the other way round — the service pushes it, so every connected browser sees the
|
||||
same run activity, and each browser keeps its own short ring of the last entries behind it. What it
|
||||
last showed stays on the bar after the run has ended; a project change is what empties the ring and
|
||||
takes the strip away with it. A cursor line carries <code>Sn</code> and the sentence index it sits on; a
|
||||
message line carries whatever anchor the message supplies. Two limits are worth knowing: the strip
|
||||
mirrors the newest message across three of the four lists — nothing from <strong>NC Manipulation</strong> reaches
|
||||
it — and it is sampled rather than recorded, so messages arriving faster than it refreshes never
|
||||
appear on it at all. The lists on the service drop nothing.</p>
|
||||
<h2 id="the-session-message-panel">The session message panel</h2>
|
||||
<p>The panel sits on the Execution page, in the middle column, below the 3D Rendering Canvas. Its
|
||||
header row reads <strong>Session Messages</strong> and stays visible when the panel is collapsed, so a grey strip
|
||||
with that name on it is the panel, shut.</p>
|
||||
<p><strong>The whole column can be switched off, and nothing on the page says so.</strong> The column quick-toggles
|
||||
in the middle of the menu bar include one whose tooltip reads <em>Toggle the Execution canvas &
|
||||
messages column</em>; with it off, neither the panel nor its header row is drawn, and the page simply
|
||||
looks like it has fewer parts. That choice is the browser's and survives a reload. The expanded or
|
||||
collapsed state of the panel itself is not: it is kept by the service, and is therefore the same for
|
||||
every browser that opens the page afterwards.</p>
|
||||
<p>Four tabs, each a separate list:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Tab</th>
|
||||
<th>What it holds</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>Shell</strong></td>
|
||||
<td>The session's own lifecycle and routine progress — what began, what finished, what was refused. It is empty outside a session, because the list is created with the session.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>NC Diagnostics</strong></td>
|
||||
<td>What the NC pipeline reported while playing a program.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Step Diagnostics</strong></td>
|
||||
<td>What was reported against a machining step rather than against program text.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>NC Manipulation</strong></td>
|
||||
<td>What converting a played program to NC, or optimising one, reported. Each such run clears the list before it starts filling it again.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>A tab shows a small count badge only once its list has something in it, so an empty sink is a tab
|
||||
with nothing beside its name.</p>
|
||||
<p>Where a message carries a position, the row shows it in a monospaced anchor column: a step
|
||||
diagnostic names its step, and its block as well when it has one; an NC diagnostic names the block's
|
||||
position in execution order, and its tooltip adds the source file and line where the diagnostic
|
||||
carries them. <strong>Not every NC diagnostic has one</strong> — a complaint about the pipeline rather than about
|
||||
a particular block has no anchor to show, and shell messages never have one. A run of consecutive
|
||||
identical messages arrives already folded into a single row with a multiplier badge. A row with more
|
||||
behind its one line carries a chevron; clicking it opens what the message brought with it, with a
|
||||
<strong>Copy</strong> of its own.</p>
|
||||
<p>Each tab filters independently: a <strong>Severity</strong> list, a <strong>Category</strong> list, a <em>Filter text…</em> box, and
|
||||
a <strong>Reset</strong>. The badge at the right of that toolbar reads two numbers separated by a slash, and they
|
||||
count different things — rows currently shown on the left, raw messages on the right, so folding
|
||||
alone makes them differ, and on a long session the left number stops at the most recent thousand
|
||||
while the right goes on counting. That badge is also the tab's connection indicator: it is outlined
|
||||
green only while the connection behind that list is up, and its tooltip names the state. <strong>Export</strong>
|
||||
writes the tab's filtered rows to a CSV file.</p>
|
||||
<div class="IMPORTANT">
|
||||
<h5>Important</h5>
|
||||
<p>Two different controls on this screen answer to <strong>Reset</strong>, and only one of them is labelled with
|
||||
it. The labelled one sits in each tab's filter toolbar and clears that tab's three filters and
|
||||
nothing else. The other is the transport group's eject button, which carries no text at all and
|
||||
reads <strong>Reset</strong> only in its tooltip; it ends the session and empties three of the four lists —
|
||||
<strong>Shell</strong>, <strong>NC Diagnostics</strong> and <strong>Step Diagnostics</strong>. Only <strong>NC Manipulation</strong> is left standing,
|
||||
and the same is true of a project change: opening, reloading, creating or closing a project
|
||||
empties the same three and leaves that one alone. It is the list to read for what the last
|
||||
conversion or optimisation said, long after the run that produced it has been reset away.</p>
|
||||
</div>
|
||||
<p><strong>The lists are the service's, not the browser's.</strong> They survive a reload, a move to another screen
|
||||
and a second tab opened on the same service, and two browsers watching the same run read the same
|
||||
four lists.</p>
|
||||
<p>That is also what makes collapsing the panel harmless. Collapsing it takes it down entirely rather
|
||||
than hiding it, and all four connections drop with it. Nothing is lost, because nothing was being
|
||||
held here. What does not come back is the arrangement: re-expanding builds the panel fresh, on the
|
||||
first tab, with every tab's severity, category and text filters back at their defaults.</p>
|
||||
<h2 id="the-service-log">The service log</h2>
|
||||
<p><strong>Show Log</strong>, near the right-hand end of the menu bar, opens the Log Viewer at <code>/preference/log</code>.
|
||||
Its tooltip reads <em>View the application log</em>, and the page it opens is titled <strong>Log Viewer</strong>.</p>
|
||||
<p>The viewer shows one file: the one the service is writing for the current day. There is no way to
|
||||
reach an earlier day's file from this page.</p>
|
||||
<ol>
|
||||
<li>Read the header row for what is on screen — the day the file covers, the time it was last
|
||||
fetched, and how many lines came back. The pane opens at the end of the file, which is where the
|
||||
newest lines are, and stays at the end through later fetches unless it has been scrolled away
|
||||
from the bottom.</li>
|
||||
<li>Press <strong>Refresh</strong> for a fresh copy, or switch <strong>Auto</strong> on and choose an interval — two, five, ten
|
||||
or thirty seconds — to have it re-fetched on its own.</li>
|
||||
<li>Take the text with <strong>Copy</strong>, or the whole file with <strong>Download</strong>. Both are unavailable while
|
||||
there is nothing loaded.</li>
|
||||
</ol>
|
||||
<p><strong>Switch Auto off before leaving the page.</strong> Moving to another screen does not stop it: the page is
|
||||
kept alive behind the one on screen and goes on re-fetching at its interval. Reloading the browser
|
||||
stops it, and so does a project change, because both rebuild the page area from scratch.</p>
|
||||
<p>An empty file and a missing file look almost alike and are not the same thing. Both show <em>No log
|
||||
file for today.</em>, and both hide the line count entirely — no count is drawn at all rather than one
|
||||
reading zero, so the caption simply being absent is itself the signal that nothing came back. The
|
||||
day badge is what separates them: when the file exists, the day comes from the service's own clock;
|
||||
when there is no file at all, it comes from the browser's clock in UTC, which need not name the same
|
||||
day.</p>
|
||||
<p>A fetch that fails replaces the pane with the reason and a <strong>Retry</strong> button, and posts the reason to
|
||||
the footer under the viewer's own name — one of the few lines that reaches the footer without ever
|
||||
having been a toast.</p>
|
||||
<p>The Log Viewer at <code>/preference/log</code>, on a service that has been running for a while. The header
|
||||
carries the page name, the day the file covers, when it was last loaded and its line count, then the
|
||||
<strong>Auto</strong> toggle — off here — beside its interval, and <strong>Refresh</strong>, <strong>Copy</strong> and <strong>Download</strong>. The
|
||||
lines in view are the service's own connection traffic for a whole screen: everything a page
|
||||
connects — the four message tabs among them — arrives in one block and leaves in another once the
|
||||
page is left, and most of what lies between is the rendering canvas being set up and reporting
|
||||
frames.</p>
|
||||
<p><img src="messages-and-logs-img/log-viewer.en.png" alt="The Log Viewer: a header row with a day badge, a last-loaded time, a line count, an Auto toggle switched off beside a 5 s interval, and Refresh, Copy and Download at the right; below it a dark monospaced pane, scrolled to the end of the file, whose lines record a screen's connections arriving together, the four message lists among them, then a stretch of canvas rendering and frame compression, then the same connections leaving together"></p>
|
||||
<p>This is the log of the <strong>service</strong>, not of the browser. A message seen in the footer reaches it only
|
||||
if the service also recorded it, and much of what it holds was never shown anywhere in the
|
||||
application.</p>
|
||||
<h2 id="which-surface-answers-which-question">Which surface answers which question</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>To find out</th>
|
||||
<th>Read</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>what the last action reported</td>
|
||||
<td>the footer's latest line</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>what was reported while another screen was open</td>
|
||||
<td>the recent list behind it — nothing else will mention it</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>where a run has got to</td>
|
||||
<td>the footer's session strip</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>whether a project file operation is still running</td>
|
||||
<td>the footer's background zone</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>what the session itself started, finished or refused</td>
|
||||
<td>the <strong>Shell</strong> tab</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>why a program did not do what its text says</td>
|
||||
<td>the <strong>NC Diagnostics</strong> tab</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>why a move behaved the way it did</td>
|
||||
<td>the <strong>Step Diagnostics</strong> tab</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>what the last conversion or optimisation reported</td>
|
||||
<td>the <strong>NC Manipulation</strong> tab, which a reset does not clear</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>why a project opened with pieces missing</td>
|
||||
<td>the toasts it raised, or the Log Viewer — <strong>not</strong> the Session Messages panel</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>what the service recorded, shown or not</td>
|
||||
<td>the Log Viewer</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="index.html">Basics</a> — the rest of what is true on every screen</li>
|
||||
<li><a href="the-app-window.html">The Application Window</a> — the footer's three regions, and the menu bar Show Log sits on</li>
|
||||
<li><a href="preferences.html">Preferences</a> — the Preference menu that Show Log is not an entry of, and what else the service keeps for everyone on it</li>
|
||||
<li><a href="projects.html">Projects</a> — the actions behind the footer's background zone, and what a project change clears</li>
|
||||
<li><a href="../run/when-something-goes-wrong.html">When Something Goes Wrong</a> — using these lists on a run that did not do what was expected</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>
|
||||
|
After Width: | Height: | Size: 125 KiB |
@@ -0,0 +1,222 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Preferences | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Preferences | 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="">
|
||||
<h1 id="preferences">Preferences</h1>
|
||||
|
||||
<p>The settings that follow the application rather than the project are kept on two sides: the service,
|
||||
where one value serves every browser signed in to it, and the browser, for the device it is sitting
|
||||
at. The <strong>Preference</strong> menu is where most of them are set, and the rest are reached from the panel
|
||||
each one belongs to. Which side keeps a setting is the thing worth knowing about it, because that is
|
||||
what decides who else sees the change.</p>
|
||||
<h2 id="where-it-is">Where it is</h2>
|
||||
<p>The <strong>Preference</strong> dropdown on the menu bar, after <strong>Project</strong> and <strong>Page</strong>. It carries no OK and no
|
||||
Cancel: every control commits the moment it is pressed. Picking a language closes the language
|
||||
submenu and leaves the dropdown itself open, exactly as the checkboxes do; nothing in the dropdown
|
||||
commits on a close. A setting the service refuses is rolled back in the menu, so the dropdown never
|
||||
shows a value that did not take — the refusal arrives separately, as a message naming what failed.</p>
|
||||
<h2 id="what-the-dropdown-carries">What the dropdown carries</h2>
|
||||
<p><strong>Language</strong> opens a submenu of the codes the service offers, each row carrying a language's own name
|
||||
over the code that names it — <em>English</em> over <code>en</code>, and the two Chinese scripts over <code>zh-Hans</code> and
|
||||
<code>zh-Hant</code>. The caption on the parent row is the language in force. Picking one re-resolves the
|
||||
interface immediately and without navigating, which is why the confirmation message already reads in
|
||||
the language just chosen. The service keeps this one.</p>
|
||||
<p><strong>Show Physics Options</strong> reveals the physics-only parts of two editors, named under <em>Making a physics
|
||||
change take</em> below, and switches the cutter drawn on the Tool House canvas and on the
|
||||
Execution page's <strong>CWE</strong> canvas from a plain bounding shape to its detailed flute geometry. The
|
||||
service reports whether the physics feature is licensed alongside the setting itself, and without
|
||||
that licence the checkbox is drawn disabled and clear, with nothing in the menu saying more about
|
||||
why. Where the licence is present the setting starts on: a service that has never had a preference
|
||||
saved reports it as on. The service keeps this one too.</p>
|
||||
<p><strong>CSV Controller</strong> and <strong>CL Controller</strong> each add a node of their own to the General Setup tree once
|
||||
a project is open — with no project open neither node is built, whatever the boxes say. Both are
|
||||
kept by the browser, are clear by default, and are never sent to the service. The caption under each
|
||||
box says whether the open project actually plays that kind — <em>This project plays CSV</em>, or <em>Not used
|
||||
by this project</em> — and is blank when no project is open and when the service cannot say; it is read
|
||||
when the menu opens, so it answers for whatever project is open at that moment.</p>
|
||||
<h2 id="what-is-kept-where">What is kept where</h2>
|
||||
<p><strong>One service holds one set of values.</strong> There is nothing per account: two people signed in under
|
||||
different names read and write the same language, the same physics setting, the same everything else
|
||||
on this side. A change one browser makes is what the next browser to ask will be told. What the
|
||||
service keeps this way is the language, the physics setting, the properties the Execution page lists
|
||||
for a selected step, which of that page's charts, its <strong>Session Messages</strong> panel and its <strong>Step
|
||||
Properties</strong> panel are switched on, the General Setup canvas's display options including the work
|
||||
coordinate its marker draws, and the graphic cache budget.</p>
|
||||
<p><strong>The browser keeps the arrangement of the screen in front of it.</strong> That is the two tree pages'
|
||||
layout — which columns are shown, how wide the docks are, which tree nodes are left unfolded and
|
||||
which node each tree page reopens on — together with the two controller checkboxes above, and the
|
||||
File Explorer's editor pane, its split and its sort order. Three of the Execution page's panels sit
|
||||
on this side rather than with that page's others: the <strong>3D Rendering Canvas</strong>, <strong>CWE</strong> and
|
||||
<strong>Sentence Syntax</strong>. The browser also holds a copy of the language, used only to paint the first
|
||||
frame before the service can be asked; the service's value wins every disagreement, so a language
|
||||
changed from another browser shows up here immediately after that first frame.</p>
|
||||
<p><strong>The graphic cache budget is the exception on the service side.</strong> A new budget takes effect at once
|
||||
and applies to every browser on that service, exactly like the rest — but the write stops there. It
|
||||
reaches the service's preference file only when some later preference save writes that file out, so a
|
||||
service stopped before any such save comes back on the budget it had before.</p>
|
||||
<h2 id="making-a-physics-change-take">Making a physics change take</h2>
|
||||
<p><strong>Show Physics Options</strong> is read while a tree or a tab row is being built, not while one is on screen,
|
||||
so the four routes below are what the tree and the tab row need; the two canvases pick the change up
|
||||
on their own next draw instead. Ticking it therefore changes nothing already built: the tree does
|
||||
not grow the nodes it gates, and the Tool House tab row does not grow the tab, until something
|
||||
builds them again. Folding a branch shut and opening it again is not a rebuild.</p>
|
||||
<p>Four things do rebuild one:</p>
|
||||
<ol>
|
||||
<li>Reload the browser. That rebuilds the whole application, every tree included.</li>
|
||||
<li>The project under the session changes — <strong>New</strong>, <strong>Load</strong>, <strong>Close Project</strong>, or a <strong>Save As</strong> to a
|
||||
location other than the one already open. Every screen the session has built is discarded and
|
||||
built again, and <strong>ReLoad</strong> does the same on the path already open.</li>
|
||||
<li>On Tool House, select a different tool in the left column and come back. The tab row is built for
|
||||
whichever tool is being shown, so moving between two tools rebuilds it twice.</li>
|
||||
<li>Edit the structure of a branch and that branch alone is rebuilt — adding, removing or re-kinding a
|
||||
mission command, or installing a different tool house — so a branch being worked on picks the
|
||||
setting up without being asked.</li>
|
||||
</ol>
|
||||
<p>What appears once one of those has happened: in the Execution tree's Mission branch, the <strong>Shot Files
|
||||
Output</strong> and <strong>Optimization Output</strong> blocks under a <strong>Post-Execution</strong> command; and in Tool House, the
|
||||
cutter's <strong>Material</strong> section tab.</p>
|
||||
<p>Tool House at <code>/tool-house/1/cutter/material</code>, with the setting on. The tab row above the editor —
|
||||
<strong>General</strong>, <strong>Cutter</strong>, <strong>Holder</strong>, <strong>Clamping</strong>, <strong>Int. Holder</strong> — belongs to the tool; the section
|
||||
tabs below the Cutter fields belong to the cutter, and <strong>Material</strong> leads that row only while the
|
||||
physics setting is on. With it off the row starts at <strong>Flute Profile</strong> and the address is left alone,
|
||||
so a link naming the Material tab opens a complete, plausible-looking panel that is not the one it
|
||||
named.</p>
|
||||
<p><img src="preferences-img/physics-material-tab.en.png" alt="The Tool House Cutter tab: a Cutter Type selector reading Milling Cutter above Shank Mass, Hone Radius and Relief Angle, then a row of section tabs reading Material, Flute Profile, Flute Contours, Upper Beam and Optimization with Material selected, showing a Flute Material picker with the chosen material's description under it and a Coating Layers group reading no coating layers, and the cutter drawn on the canvas at the right"></p>
|
||||
<h2 id="settings-that-live-elsewhere">Settings that live elsewhere</h2>
|
||||
<p><strong>Show Log</strong> is a button on the menu bar, not an entry of this dropdown.</p>
|
||||
<p><strong>Step Present</strong> — which properties the Execution page lists for the selected step — opens from the
|
||||
title bar of that page's <strong>Step Properties</strong> panel, in the Step Info column; the small button there is
|
||||
titled <em>Step Present — choose which properties are displayed</em>. Its <strong>Clear</strong> and its <strong>Reset</strong> each ask
|
||||
for confirmation before they act, and its lists of keys are fetched again every time it opens and again
|
||||
whenever the language changes.</p>
|
||||
<p><strong>Graphic Cache</strong> is reached through a panel rather than through the menu bar. On the Execution page,
|
||||
with the canvas-and-messages column shown and the <strong>3D Rendering Canvas</strong> panel expanded, that panel's
|
||||
title bar carries a toolbar; its <strong>Meshed Geom</strong> dropdown holds <strong>Graphic Cache</strong>, which opens the
|
||||
<strong>Graphic Cache (MB)</strong> panel — a <em>Lower</em> and an <em>Upper</em> field bounding a <em>Current</em> field and its
|
||||
slider. The toolbar belongs to the canvas and is only lent to the title bar, so collapsing the panel
|
||||
takes the whole toolbar away with it, Graphic Cache included.</p>
|
||||
<h2 id="taking-settings-to-another-machine">Taking settings to another machine</h2>
|
||||
<p>Nothing carries a preference from one installation to another. A second service starts on the built-in
|
||||
defaults — English, and the physics options on wherever the licence allows them — and has no
|
||||
preference file at all until something is saved on it, so an installation that has never had a
|
||||
preference changed has nothing to carry in the first place.</p>
|
||||
<p>What the browser keeps travels less far still. It belongs to one browser profile on one device, so the
|
||||
same person at a second machine, or in a private window on the same one, finds the tree pages laid out
|
||||
as they come and both controller checkboxes clear.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="index.html">Basics</a> — the rest of what is true on every screen</li>
|
||||
<li><a href="the-app-window.html">The Application Window</a> — the menu bar this dropdown sits on, and what a language switch does to the footer</li>
|
||||
<li><a href="messages-and-logs.html">Messages and Logs</a> — where the Show Log button goes, since it is not an entry here</li>
|
||||
<li><a href="signing-in.html">Signing In</a> — why one language setting serves everyone on the service</li>
|
||||
<li><a href="finding-your-way.html">Finding Your Way</a> — the tree nodes the two controller checkboxes add, and the branch the physics setting changes</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>
|
||||
|
After Width: | Height: | Size: 35 KiB |
@@ -0,0 +1,264 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Projects | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Projects | 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="">
|
||||
<h1 id="projects">Projects</h1>
|
||||
|
||||
<p>A project is the whole of what a simulation runs against: the machine tool, the spindle capability,
|
||||
the background and coolant conditions, the fixture, the workpiece, the tool house, the controller and
|
||||
the NC programs a mission plays. It is a project file together with the folder that file sits in, and
|
||||
the <strong>Project</strong> dropdown on the menu bar is where one is created, opened, saved and closed. The
|
||||
equipment and mission screens are editors on whichever project is open, so a change of project
|
||||
reaches all of them at once.</p>
|
||||
<h2 id="where-it-is">Where it is</h2>
|
||||
<p>The <strong>Project</strong> dropdown, at the left of the menu bar beside <strong>Page</strong> and <strong>Preference</strong>. Its first
|
||||
row is a read-only field holding the path of the open project — selectable, so it can be copied — and
|
||||
reading <em>No Project Loaded</em> until one is open. The path is written relative to the admin directory
|
||||
the service was started against rather than as a location on the machine running it.</p>
|
||||
<p>That row is the only place the path stays put; everywhere else it is transient — a line drawn while
|
||||
something is happening, or a record of something that has. While a project action is running, the
|
||||
footer's background zone names the action and the path together, as <em>Loading project: …</em> and its
|
||||
equivalents for the other entries. The toast that reports the finished action carries the path as
|
||||
its caption, and that line outlives the toast in the footer's <strong>Recent messages</strong> list. The service
|
||||
holds one open project rather than one per browser, so every browser connected to it is working on
|
||||
the same project.</p>
|
||||
<h2 id="what-each-entry-does">What each entry does</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Entry</th>
|
||||
<th>What it does</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>New</strong></td>
|
||||
<td>Creates a project at a chosen path and opens it, refusing a path that already holds a file</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Load</strong></td>
|
||||
<td>Opens an existing project file</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>ReLoad</strong></td>
|
||||
<td>Re-reads the open project from its own path, discarding anything unsaved</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Save</strong></td>
|
||||
<td>Writes the open project back to its own path</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Save As</strong></td>
|
||||
<td>Writes it to a chosen path, which then becomes the open project</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>Close Project</strong></td>
|
||||
<td>Closes it, leaving the application with no project</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><strong>ReLoad, Save, Save As and Close Project are greyed out until a project is open.</strong> New and Load are
|
||||
always selectable.</p>
|
||||
<p>The three entries that need a path — New, Load and Save As — open the shared file browser as a
|
||||
picker, filtered to <strong>HiNC Project (*.hincproj)</strong>. It never offers the <strong>Resource</strong> root: the
|
||||
<strong>Admin</strong> root is always there, and the <strong>Project</strong> root beside it only while a project is open. It
|
||||
opens at the Admin root — in the folder the open project sits in, when there is one. Saving forces
|
||||
the extension, so a name typed without one still gets it.</p>
|
||||
<h2 id="what-a-project-actually-is">What a project actually is</h2>
|
||||
<p>The project file is an XML document of references. Values that mean nothing outside this one project
|
||||
are written into it directly, while the pieces that are shared, large or edited on their own — the
|
||||
machine chain, the spindle capability, the workpiece and cutter materials, the cutting parameters,
|
||||
the mesh geometry — are held as references to files beside it, each named by a path relative to the
|
||||
project file's own folder. Opening the project file in a text editor shows those references rather
|
||||
than what they point at.</p>
|
||||
<div class="IMPORTANT">
|
||||
<h5>Important</h5>
|
||||
<p><strong>A reference that points at nothing does not stop the project opening.</strong> Load and ReLoad read what
|
||||
they can and report what they could not — a missing STL, or a mesh-geometry <code>.wct</code> file a raw
|
||||
geometry names — and the project comes up with that body simply having no geometry, the action
|
||||
still reporting success. The message is the only thing that says otherwise, and it is not kept
|
||||
where a run's messages are kept: see
|
||||
<a href="messages-and-logs.html#messages-a-project-load-raises">Messages a project load raises</a>.</p>
|
||||
</div>
|
||||
<p>A project is therefore a folder at least as much as a file. Copying one to another machine, archiving
|
||||
one, or handing one to somebody else means taking the folder.</p>
|
||||
<p>The demo project's own folder, at <code>/util/file-explorer/Project</code>. The File Explorer's root switcher,
|
||||
beside the page name, is set to <strong>Project</strong> — the root that exists only while a project is open, and
|
||||
that resolves to the folder holding the open project file — and the path field reads <code>.</code>, the root
|
||||
folder itself. Three folders sit at the top, <strong>MachineTool</strong>, <strong>NC</strong> and <strong>Output</strong>, and five files
|
||||
below them: the cutting parameters and the workpiece material, the project file itself at about
|
||||
135 KB, the spindle capability, and a cutter material. The right-hand pane is the explorer's text
|
||||
editor, waiting on a file to be given to it.</p>
|
||||
<p><img src="projects-img/project-folder.en.png" alt="The File Explorer showing the open project's folder under the Project root: the folders MachineTool, NC and Output above five files with their sizes, among them the project file at 135.2 KB and four side files named for a cutting parameter set, a workpiece material, a spindle capability and a cutter material, with the empty text editor pane on the right"></p>
|
||||
<div class="WARNING">
|
||||
<h5>Warning</h5>
|
||||
<p><strong>A Save As into a new folder can produce a project that finds none of its programs.</strong> Save As
|
||||
writes out every side file the project file holds as a reference, into the new folder and at the
|
||||
same relative place, and nothing it does not. What it leaves behind is whatever the project names
|
||||
as a plain path instead of as a reference — and the NC programs a mission plays are named that
|
||||
way. Nothing rewrites those paths either, so the saved project still asks for <code>NC/…</code>, now
|
||||
underneath the new folder, where nothing has put it. The programs have to be brought across by
|
||||
hand, or the Save As aimed at a folder that already holds them.</p>
|
||||
</div>
|
||||
<p>The folder a run writes its output into is named the same way, and it is not a dependency of the same
|
||||
kind: nothing has to put it there, because the writers create it on demand under the folder the open
|
||||
project was read from. A Save As does not move it — a run still writes beside the folder the project
|
||||
came from, until that project is opened at its new path.</p>
|
||||
<h2 id="what-a-project-change-does-to-the-rest-of-the-window">What a project change does to the rest of the window</h2>
|
||||
<p>What decides a rebuild is the path changing, not the entry chosen. New, a Load that picks a different
|
||||
project, Close Project and a Save As to a location other than the one already open all change it,
|
||||
and each throws away every screen the browser has built and rebuilds against whatever the project is
|
||||
afterwards — which is what stops one screen showing values from a project that is not open any more.
|
||||
ReLoad always rebuilds as well, being the entry meant for re-reading the same path. A Load that
|
||||
picks the project already open rebuilds nothing: the file is read again on the service, but the
|
||||
screens keep what they were showing. <a href="the-app-window.html">The Application Window</a> states the same
|
||||
rule from the frame's side, and covers what a rebuild costs a screen carrying unsaved state.</p>
|
||||
<p>How far a change travels beyond the browser that made it is not the same for every entry. The three
|
||||
that change which project the service holds open are announced to every browser connected to it, so
|
||||
all of them follow. ReLoad
|
||||
re-reads the same path: the browser that asked for it rebuilds, while a second browser — whose path
|
||||
did not change — carries on with what it was showing.</p>
|
||||
<p><strong>Save As announces nothing at all.</strong> The service moves onto the new path, and only the browser that
|
||||
performed the Save As is told, in the reply to its own request. Every other browser goes on
|
||||
displaying the old path in its <strong>Project</strong> dropdown, although the service is working with the new one
|
||||
underneath — so a Save from any of them writes to the new path. A stale row corrects itself the next
|
||||
time the service reports its state to that browser: a reload, another project change, or a run being
|
||||
started, paused, finished or reset from any browser.</p>
|
||||
<p>New, Load, ReLoad, Save and Save As take a turn each. A second one asked for while the first is still
|
||||
running is refused rather than queued, and the refusal arrives as a warning reading <em>Another project
|
||||
operation is in progress. Please try again.</em> Close Project takes no part in that turn-taking: it
|
||||
neither waits for a running operation nor holds one off, and it never raises the warning.</p>
|
||||
<h2 id="losing-work">Losing work</h2>
|
||||
<p>Nothing keeps track of whether the open project has unsaved changes. No marker in the menu bar or in
|
||||
the path row says the project has been edited, there is no prompt in front of <strong>ReLoad</strong> or <strong>Close
|
||||
Project</strong>, and nothing at all stands in the way of a browser tab being closed or reloaded. Both
|
||||
ReLoad and Close Project discard what the service is holding and has not written, in silence and at
|
||||
once; a <strong>Save</strong> beforehand is the only thing that keeps it.</p>
|
||||
<p><strong>Save As</strong> asks nothing either. Its dialog opens on the open project's own folder with the open
|
||||
project's own file name already filled in, and nothing checks whether a file is already at the path
|
||||
chosen: confirming writes over whatever is there. Confirming on the name as it arrives therefore
|
||||
overwrites the project that is open — which is harmless, being what Save does — but the same
|
||||
confirmation one folder away overwrites a different project just as quietly. <strong>New</strong> is the one entry
|
||||
that refuses: it will not create a project where a file already exists, and reports that as an error
|
||||
whose message can carry the location in full.</p>
|
||||
<h2 id="before-one-is-built">Before one is built</h2>
|
||||
<p>The data to collect from the machine owner before a project can be built is a checklist of its own:
|
||||
<a class="xref" href="../../workflows/project-data-checklist.html">Project Data Checklist</a>. The order the pieces then go together in
|
||||
is <a href="../../workflows/project-construction.html">Project Construction</a>.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="index.html">Basics</a> — the rest of what is true on every screen</li>
|
||||
<li><a href="the-app-window.html">The Application Window</a> — the menu bar this dropdown sits on, and the page rebuild a project change triggers</li>
|
||||
<li><a href="finding-your-way.html">Finding Your Way</a> — the screens a project change rebuilds, and what happens to a selection in one</li>
|
||||
<li><a href="messages-and-logs.html">Messages and Logs</a> — the footer's background zone and the toasts a project action raises, and where they can be read afterwards</li>
|
||||
<li><a href="../utilities/file-explorer.html">File Explorer</a> — the browser these entries open as a picker, and the Project root that is this folder</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>
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,217 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Signing In | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Signing In | 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="">
|
||||
<h1 id="signing-in">Signing In</h1>
|
||||
|
||||
<p>The sign-in card is the <code>/login</code> route, and whether anyone ever reaches it is the service's decision
|
||||
rather than the browser's. With the gate on, the service's data and its live updates stay closed
|
||||
until a browser has signed in; with it off, the route sends every visitor straight back into the
|
||||
application. A sign-in buys admission and nothing more — the service matches a name and a password
|
||||
once, then carries the name only to label the sign-out button, and nothing it does afterwards
|
||||
depends on which account was used.</p>
|
||||
<h2 id="whether-the-gate-is-on">Whether the gate is on</h2>
|
||||
<p>The <code>Auth</code> section of the service's configuration decides it, through its <code>Enabled</code> flag. The flag
|
||||
falls back to off when nothing sets it, so a service whose configuration carries no <code>Auth</code> section,
|
||||
or carries one with the flag off, runs with no login at all. The configuration as shipped turns the
|
||||
flag on and supplies one account, so a service started from it asks for a sign-in.</p>
|
||||
<p>The accounts are the <code>Users</code> list in that same section — username and password pairs, read once when
|
||||
the service starts. Every entry grants exactly the same access: there are no roles, no group
|
||||
memberships, and nothing at all is kept per account. There is also no way to create an account,
|
||||
change a password or recover one from inside the application. All three are edits to the service's
|
||||
configuration, made by whoever runs the service, and they take effect at its next restart.</p>
|
||||
<p>What the gate closes is the service's own surface: the requests each screen makes for data, and the
|
||||
live channels that keep those screens current. It does not close the page. The application shell,
|
||||
the brand image and the sign-in card itself are served before authorization is consulted, which is
|
||||
what lets the card be drawn for a browser that holds no session.</p>
|
||||
<h2 id="signing-in-1">Signing in</h2>
|
||||
<p>The card asks for one pair of credentials, under the prompt <em>Please sign in to continue</em>.</p>
|
||||
<ol>
|
||||
<li>Type the account name into <strong>Username</strong> and the password into <strong>Password</strong>. The username field
|
||||
already holds the focus when the card appears, and the eye icon at the right of the password
|
||||
field toggles the typing visible.</li>
|
||||
<li>Submit with the <strong>Sign In</strong> button, or by pressing Enter in either field.</li>
|
||||
<li>Neither field is checked in the browser, so whatever is entered — an empty pair included — goes
|
||||
to the service, and a refusal comes from there rather than from the form. It arrives as one red
|
||||
line under the password field, <em>Incorrect username or password</em>, and the card stays as it is.</li>
|
||||
</ol>
|
||||
<p>A successful sign-in reloads the application at the screen that was wanted. When the browser was
|
||||
sent to the card while trying to reach a particular screen, that address travels with it in the
|
||||
card's <code>redirect</code> query argument — <code>?tree=</code> selection included — and is where the sign-in returns
|
||||
to. A browser that came to the card on its own lands on the Execution page.</p>
|
||||
<p>Two smaller things the card carries. The grey line below the name is a version mark, the same
|
||||
version the menu bar shows from inside. And the card's own language is whichever this browser last
|
||||
used, or the browser's own language on a first visit, because the language setting belongs to the
|
||||
service and is behind the gate like everything else there; after signing in, the interface follows
|
||||
that setting — one value for everyone on the service — chosen in the <strong>Preference</strong> menu's language
|
||||
submenu (see <a href="preferences.html">Preferences</a>).</p>
|
||||
<p>The sign-in card at <code>/login</code>, in a browser holding no session. The card is all the screen holds —
|
||||
none of the application frame is drawn behind it — with the version mark and the prompt under the
|
||||
name, the focus already in <strong>Username</strong>, and the eye toggle at the right of <strong>Password</strong>.</p>
|
||||
<p><img src="signing-in-img/login-card.en.png" alt="A plain grey page holding one white card: the HiNC brand mark and name above a version mark and the prompt Please sign in to continue, an empty Username field holding the focus, a Password field with an eye toggle, and a Sign In button at the lower right"></p>
|
||||
<h2 id="when-the-sign-in-page-does-not-appear">When the sign-in page does not appear</h2>
|
||||
<p>Three situations account for it, in the order they are likely.</p>
|
||||
<p><strong>The gate is off.</strong> With no <code>Auth</code> section, or with <code>Enabled</code> off, the <code>/login</code> route redirects
|
||||
every visitor back into the application instead of showing a form. From inside, the quickest tell is
|
||||
the menu bar: a service with no gate carries no sign-out button.</p>
|
||||
<p><strong>The browser is already signed in.</strong> Its session cookie is still good, so the card is skipped and
|
||||
the screen that was asked for opens directly.</p>
|
||||
<p><strong>The service could not say.</strong> The application asks the service once, on its first navigation,
|
||||
whether a gate exists and whether this browser has passed it. If that question fails to get an
|
||||
answer, the application assumes there is no gate and lets the browser through — it fails open. On a
|
||||
service whose gate is in fact on, the result is a window that opens on the screen that was asked for
|
||||
and can then load nothing: no project, panels that never fill, and requests the service is refusing
|
||||
behind them. The menu bar is the giveaway — no version mark beside the brand image, and no sign-out
|
||||
button at the right end, because both are filled in from the answer that never arrived. In this
|
||||
state nothing offers a sign-in card and nothing redirects to one. Reloading the page puts the
|
||||
question again; it is re-asked on every navigation until it is answered, and once the service
|
||||
answers, the browser reaches the card in the ordinary way.</p>
|
||||
<h2 id="signing-out">Signing out</h2>
|
||||
<p>The sign-out button sits at the right end of the menu bar, after <strong>Show Log</strong>. It is labelled with
|
||||
the signed-in user name — or with <strong>Logout</strong> when the service reported no name — and its tooltip
|
||||
reads <strong>Log out</strong>. It is drawn only while the gate is on and this browser is signed in.</p>
|
||||
<p>Press it to end this browser's session. The page is torn down and rebuilt at the sign-in card. If
|
||||
the request to the service did not get through, the service still holds this browser as signed in, so
|
||||
the card sends it straight back into the application — press the button again.</p>
|
||||
<p>What ends is one browser's admission. Another browser signed in under the same account is untouched
|
||||
and carries on working: the service keeps no register of who is connected, so there is no notice
|
||||
that an account is in use elsewhere, and no limit on how many browsers may hold it.</p>
|
||||
<h2 id="when-a-session-ends-on-its-own">When a session ends on its own</h2>
|
||||
<p>A sign-in belongs to the browser session, so closing the browser ends it whatever the configuration
|
||||
says. While the browser stays open it lasts up to the number of hours in the <code>Auth</code> section's
|
||||
<code>SessionHours</code> setting — eight in the configuration as shipped, and never less than one whatever the
|
||||
setting says. Sliding expiration is on by default, and the service describes that setting as
|
||||
refreshing the expiry with activity.</p>
|
||||
<p>Nothing announces that the end is near. There is no countdown, no prompt and no way to extend. The
|
||||
first sign is the sign-in card, which arrives the moment a screen next asks the service for
|
||||
something and is refused.</p>
|
||||
<p>Recovery is a second sign-in. The screen that was open travels in the <code>redirect</code> argument, so
|
||||
signing in comes straight back to it; what does not come back is anything entered or arranged on
|
||||
that screen and not yet saved, because a sign-in reloads the application from scratch. The session
|
||||
is the browser's admission and nothing else — ending it changes what that browser may ask for, not
|
||||
what the service is holding.</p>
|
||||
<h2 id="locked-out">Locked out</h2>
|
||||
<p>A gate that is on over an empty account list admits nobody, and it looks exactly like a mistyped
|
||||
password — the same single red line, for every name tried, in every browser. Nothing counts
|
||||
attempts and nothing locks after a bad one, so a refusal that repeats for every account anyone can
|
||||
think of is the symptom to read as a configuration problem rather than a credential one.</p>
|
||||
<p>The way out is one entry. Add a username and password pair to the <code>Users</code> list in the <code>Auth</code> section
|
||||
of the service's configuration, then restart the service — that list is read once at startup.</p>
|
||||
<p>The state is neither permanent nor damaging. The service runs normally the whole time it is turning
|
||||
browsers away; it simply has no credential to match one against.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="index.html">Basics</a> — the rest of what is true on every screen</li>
|
||||
<li><a href="the-app-window.html">The Application Window</a> — the menu bar the sign-out button sits at the end of</li>
|
||||
<li><a href="finding-your-way.html">Finding Your Way</a> — the screens a sign-in returns to, and the addresses that name them</li>
|
||||
<li><a href="preferences.html">Preferences</a> — the settings the service keeps for everyone on it, the language among them</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>
|
||||
|
After Width: | Height: | Size: 112 KiB |
@@ -0,0 +1,230 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>The Application Window | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="The Application Window | 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="">
|
||||
<h1 id="the-application-window">The Application Window</h1>
|
||||
|
||||
<p>One frame surrounds every screen: a menu bar across the top, the current page between, and a footer
|
||||
along the bottom. The frame is built once and stays mounted for the whole session, so everything
|
||||
described here is present on every page. A project change is the one event that reaches into it and
|
||||
rebuilds what the middle holds.</p>
|
||||
<p>The whole frame at <code>/execution</code>, with the demo project open. Only the column quick-toggles and the
|
||||
connection badge, in the middle of the bar, are there because of the page underneath them — the logo,
|
||||
the three dropdowns, the page title and <strong>Show Log</strong> sit on the bar whatever page is open, and the
|
||||
sign-out button turns on whether a sign-in is asked for rather than on the page. The strip along the
|
||||
very bottom is the footer, reading <strong>Ready</strong> because nothing has been reported yet.</p>
|
||||
<p><img src="the-app-window-img/app-window.en.png" alt="The Execution page inside the application frame: a menu bar carrying a version badge and the Project, Page and Preference menus, a Control Tree dock and transport buttons down the left, the 3D Rendering Canvas above the Session Messages tabs in the centre, strip charts and step panels on the right, and a one-line footer reading Ready"></p>
|
||||
<h2 id="the-menu-bar">The menu bar</h2>
|
||||
<p>From the left: the brand logo, a version badge, and the <strong>Project</strong>, <strong>Page</strong> and <strong>Preference</strong>
|
||||
dropdowns. The badge is filled from the service's own reply about itself rather than from anything in
|
||||
a project, so it carries a version before a project is open. It is drawn only when that reply carried
|
||||
one, so a service that cannot answer its own status probe leaves the space empty. The bar is not drawn
|
||||
on the sign-in screen at all — the same version appears under the logo on the sign-in card instead.</p>
|
||||
<p>The rest of the bar is pushed to the right, and renders in this order:</p>
|
||||
<ul>
|
||||
<li><strong>The column quick-toggles</strong> — one button per column the current page actually has: four on
|
||||
Execution (the dock, the canvas-and-messages column, the Strip Charts column, the Step Info
|
||||
column), three on General Setup. Each glyph is a small map of the page with its own column filled,
|
||||
and each tooltip names the column it toggles. Tool House lays itself out with draggable splitters
|
||||
and gets no buttons here.</li>
|
||||
<li><strong>The connection badge</strong> — the Execution page only. See below.</li>
|
||||
<li><strong>The current page's title</strong> — the destination's own title, which is where two controls read
|
||||
differently from where they land: the Page menu's <strong>Legacy-Controller</strong> entry opens the page titled
|
||||
<strong>Controller</strong>, and <strong>Show Log</strong> opens the page titled <strong>Log Viewer</strong>.</li>
|
||||
<li><strong>Show Log</strong> — present on every page.</li>
|
||||
<li><strong>The sign-out button</strong> — labelled with the signed-in user name, or <strong>Logout</strong> when the service has
|
||||
no name for it. It is there only while the service asks for a sign-in.</li>
|
||||
</ul>
|
||||
<h2 id="the-page-area">The page area</h2>
|
||||
<p>Everything between the bars is the current page, and every page reached during a session stays built:
|
||||
there is no cap and nothing is excluded. Coming back to one finds its component state, an edit left
|
||||
half-finished and an established rendering connection exactly as they were.</p>
|
||||
<p>Two things it does not carry over. Nothing restores a scroll position inside a panel: coming back to a
|
||||
page finds its panels scrolled to where a fresh mount would put them. And a browser reload is not a
|
||||
navigation — it rebuilds the whole application and empties the cache; what survives it is what lives
|
||||
outside the page area, namely the address (a <code>?tree=</code> selection in it included) and the layout the
|
||||
browser keeps for itself.</p>
|
||||
<p><strong>F5 to F8 belong to the Execution page.</strong> They drive its transport — F5 starts or resumes, F6
|
||||
pauses, F7 runs one NC line, F8 runs one machining step — and they are bound only while that page is
|
||||
the one on screen, so on every other screen F5 is the browser's own reload. A key whose button is not
|
||||
available at that moment, or that is pressed with the focus in a text field, is handed back to the
|
||||
browser instead. That matters most for F5: while a run is in progress the start button is
|
||||
unavailable, so the key reloads the page and takes the session with it.</p>
|
||||
<h2 id="what-a-project-change-does">What a project change does</h2>
|
||||
<p><strong>New</strong>, <strong>Load</strong>, <strong>ReLoad</strong> and <strong>Close Project</strong> discard every page the session has built and
|
||||
rebuild it against whatever the project is afterwards — nothing at all, after <strong>Close Project</strong>.
|
||||
That is what stops a screen showing values from a project that is not open any more, and it is also
|
||||
why in-page state that was never saved does not survive one.</p>
|
||||
<p>What decides a rebuild is the path changing, not the action. A plain <strong>Save</strong> never rebuilds.
|
||||
<strong>Save As</strong> back to the path already open behaves exactly like Save and rebuilds nothing, while
|
||||
<strong>Save As</strong> to a different location moves the window onto that path and everything rebuilds. For the
|
||||
same reason, picking the already-open project out of the <strong>Load</strong> browser rebuilds nothing either —
|
||||
the file is read again on the service, but the screens keep what they were showing. <strong>ReLoad</strong> is the
|
||||
entry to use for that, and it is the one that always rebuilds.</p>
|
||||
<p>The same rebuild runs once at startup, with nobody having done anything: a browser reaching a service
|
||||
that already has a project open receives that path as its first project change and builds on it.</p>
|
||||
<p><strong>New</strong>, <strong>Load</strong>, <strong>ReLoad</strong>, <strong>Save</strong> and <strong>Save As</strong> run one at a time. A second one started while
|
||||
the first is still running is refused rather than queued, and the refusal arrives as a warning reading
|
||||
<strong>Another project operation is in progress. Please try again.</strong> Nothing is rebuilt and nothing is
|
||||
lost. <strong>Close Project</strong> takes no part in that turn-taking and never raises the warning.</p>
|
||||
<h2 id="the-footer">The footer</h2>
|
||||
<p>A 29-pixel strip holding three regions, each independent of the other two.</p>
|
||||
<p><strong>Left — the latest reported line, with the recent ones behind it.</strong> The text is the most recent
|
||||
message the application has raised, or <strong>Ready</strong> before there has been one, and its tooltip carries
|
||||
the full text with whatever caption came with it. The icon in front decodes the severity: a grey
|
||||
information mark for a plain status line, a green tick for a success, an amber triangle for a warning,
|
||||
a red mark for a failure. The clock button beside it opens <strong>Recent messages</strong> — newest first, capped
|
||||
at a hundred, each row repeating its severity as a coloured strip down the left edge and carrying the
|
||||
time it arrived. That list belongs to this browser and this session: <strong>Clear</strong> empties it, a reload
|
||||
empties it, and it is written down nowhere.</p>
|
||||
<p><strong>Middle — the session strip.</strong> It is drawn only while a run has produced something, and the space is
|
||||
simply empty the rest of the time. A glyph leads each line — a locator mark on a cursor tick, the
|
||||
message's own severity mark otherwise — and an anchor follows it in a monospaced prefix wherever the
|
||||
entry carries one: a cursor line carries <code>Sn</code> and the sentence index it sits on, a message line the
|
||||
anchor the message itself supplies. Hovering opens the recent activity behind it; clicking pins that
|
||||
list open.</p>
|
||||
<p><strong>Right — the background zone.</strong> It appears only while a project file operation is in flight, names
|
||||
the operation and the path it is working on, and vanishes when the operation ends.</p>
|
||||
<p>Switching the language re-resolves the interface at once and without navigating: the menus, the page
|
||||
title in the bar and the browser tab title all change. The two message regions do not follow. Each
|
||||
line in the recent list and in the session strip keeps the language it was raised in, so a footer read
|
||||
after a language switch is a mixture by design.</p>
|
||||
<h2 id="the-connection-badge">The connection badge</h2>
|
||||
<p>The badge on the menu bar belongs to the Execution page alone; the other canvases carry their own
|
||||
badge inside their panel. It aggregates that page's rendering connection with the service connections
|
||||
behind its panels, and reads a green <strong>connected</strong> only while every connection in the set is up —
|
||||
orange while any of them is (re)connecting, and red only once none is connecting and one is still
|
||||
down.</p>
|
||||
<p>The set is not fixed. The rendering connection is always folded in on that page, but a service
|
||||
connection joins only while something is actually using it — an open panel, or the frame itself. One
|
||||
that nothing is consuming is left out rather than forced to connect. <code>ExecutionStatus</code> has a consumer
|
||||
for the whole session and is therefore always in the set; the rest come and go, which is why opening
|
||||
and collapsing panels changes what the badge reports. A green badge means every connection in use is
|
||||
healthy rather than every connection that exists.</p>
|
||||
<p>Only the two problem states carry a tooltip — when everything is connected there is nothing to
|
||||
explain and none appears. The tooltip lists one row per connection, <code>Rendering</code>, <code>Shell</code>, <code>NcDiag</code> and
|
||||
the rest, and those names are identifiers rather than interface text: in a translated session only the
|
||||
state beside each name changes language.</p>
|
||||
<p>The buttons that hide those panels' columns are remembered per page. The two tree pages each keep
|
||||
their own column choices, while the dock widths and the list of unfolded tree nodes are single
|
||||
settings both of them share — widening the dock on Execution widens it on General Setup too.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="index.html">Basics</a> — the rest of what is true on every screen</li>
|
||||
<li><a href="signing-in.html">Signing In</a> — what puts the sign-out button on this bar in the first place</li>
|
||||
<li><a href="projects.html">Projects</a> — the Project menu, and what each of its entries does</li>
|
||||
<li><a href="finding-your-way.html">Finding Your Way</a> — the Page menu and the screens behind it</li>
|
||||
<li><a href="preferences.html">Preferences</a> — the Preference menu, and the settings that are not in it</li>
|
||||
<li><a href="messages-and-logs.html">Messages and Logs</a> — the surfaces the footer summarises, and the log behind Show Log</li>
|
||||
<li><a href="../run/running-a-simulation.html">Starting and Stepping</a> — the transport those F5–F8 keys drive, and the connection the bar's badge reports on</li>
|
||||
<li><a href="../run/watching-the-run.html">Watching the Run</a> — the two columns the quick-toggles show and hide</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="contribution d-print-none">
|
||||
</div>
|
||||
|
||||
<div class="next-article d-print-none border-top" id="nextArticle"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="affix">
|
||||
<nav id="affix"></nav>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div class="container-xxl search-results" id="search-results"></div>
|
||||
|
||||
<footer class="border-top text-secondary">
|
||||
<div class="container-xxl">
|
||||
<div class="flex-fill">
|
||||
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
<div id="sidetoggle">
|
||||
<div>
|
||||
<div class="sidefilter">
|
||||
<form class="toc-filter">
|
||||
<span class="glyphicon glyphicon-filter filter-icon"></span>
|
||||
<span class="glyphicon glyphicon-remove clear-icon" id="toc_filter_clear"></span>
|
||||
<input type="text" id="toc_filter_input" placeholder="Filter by title" onkeypress="if(event.keyCode==13) {return false;}">
|
||||
</form>
|
||||
</div>
|
||||
<div class="sidetoc">
|
||||
<div class="toc" id="toc">
|
||||
|
||||
<ul class="nav level1">
|
||||
<li>
|
||||
<a href="index.html" name="" title="Overview">Overview</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="signing-in.html" name="" title="Signing In">Signing In</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="the-app-window.html" name="" title="The Application Window">The Application Window</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="projects.html" name="" title="Projects">Projects</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="finding-your-way.html" name="" title="Finding Your Way">Finding Your Way</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="preferences.html" name="" title="Preferences">Preferences</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="messages-and-logs.html" name="" title="Messages and Logs">Messages and Logs</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Signing In","href":"signing-in.html","topicHref":"signing-in.html"},{"name":"The Application Window","href":"the-app-window.html","topicHref":"the-app-window.html"},{"name":"Projects","href":"projects.html","topicHref":"projects.html"},{"name":"Finding Your Way","href":"finding-your-way.html","topicHref":"finding-your-way.html"},{"name":"Preferences","href":"preferences.html","topicHref":"preferences.html"},{"name":"Messages and Logs","href":"messages-and-logs.html","topicHref":"messages-and-logs.html"}]}
|
||||