This commit is contained in:
2026-09-09 17:35:23 +08:00
parent 2a98ae7556
commit 161af68fe3
1271 changed files with 58251 additions and 98639 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

@@ -0,0 +1,222 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>File Explorer | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="File Explorer | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="System/File-Explorer">
<h1 id="file-explorer">File Explorer</h1>
<p>Working with the files a project is built from, on the server rather than on your own machine. The
File Explorer lists what is there, opens text files in an editor beside the listing, and uploads,
downloads, renames, copies and deletes them.</p>
<h2 id="where-it-is">Where it is</h2>
<p>Its own page, reached from the menu bar's <strong>Page → File Explorer</strong>, at <code>/util/file-explorer</code>. It
needs no project loaded. The same browser also runs inside every file dialog the application opens
— the <strong>Project</strong> menu's entries, the Object Management buttons on the Control Tree, and the
Mechanism Builder's Load and Save As actions — so learning it here is learning all of those. Only
the page has the editor beside the listing; a dialog opens with that panel hidden and adds a bar
for confirming the pick.</p>
<h2 id="the-three-roots">The three roots</h2>
<p>The root selector at the left of the toolbar picks which tree is shown. There are three:</p>
<table>
<thead>
<tr>
<th>Root</th>
<th>What it holds</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Admin</strong></td>
<td>The server's working area. Projects and the shared resource library both live under it.</td>
</tr>
<tr>
<td><strong>Project</strong></td>
<td>The folder of the currently-loaded project. Listed only while a project is open.</td>
</tr>
<tr>
<td><strong>Resource</strong></td>
<td>The shipped library — controllers, cutter and workpiece materials, machine tools, spindle capabilities — in a folder named <code>Resource</code> under Admin.</td>
</tr>
</tbody>
</table>
<p>Everything the browser reports is named relative to the chosen root. Absolute server paths are not
shown and are not sent to the browser, so a path copied out of this page names a location inside a
root rather than a place on a disk.</p>
<p><img src="file-explorer-img/listing-row-actions.en.png" alt="The File Explorer at the shipped Table-B1 machine tool folder: the root selector reads Resource, the breadcrumb reads Resource / MachineTool / Table-B1.default, and the hovered row has revealed its four actions — download, rename, duplicate and delete"></p>
<p><em>At <code>/util/file-explorer/Resource/MachineTool/Table-B1.default</code>, with the pointer resting on one
row. The action strip appears only on the row under the pointer, and it is laid over the size and
modified columns so nothing on the row moves as it appears.</em></p>
<h2 id="finding-a-file">Finding a file</h2>
<p>Three ways in, and they agree with each other:</p>
<ol>
<li><strong>Expand the tree.</strong> A folder lists its contents the first time it is opened, so a large tree
costs nothing until it is walked into.</li>
<li><strong>Type the path.</strong> The path box in the toolbar takes a path relative to the selected root;
<code>Enter</code> goes there. The arrow beside it goes up one level.</li>
<li><strong>Use the address.</strong> The location is mirrored into the page address as
<code>/util/file-explorer/&lt;Root&gt;/&lt;path&gt;</code>, so a folder can be bookmarked or pasted to someone else.
Browsing rewrites the address, and editing the address drives the browser.</li>
</ol>
<p>The breadcrumb above the listing goes back up in one click, and the sort control in the toolbar
sets the order — by name, size, modified time or type, ascending or descending, with folders kept
first or not.</p>
<h2 id="reading-and-editing-a-file">Reading and editing a file</h2>
<p>Clicking a text file loads it into the editor on the right; the bar above the editor names the root
and the path, and the language selector beside it picks the syntax highlighting. That selector is
set from the file's extension when the file opens — a project, machine tool, mechanism, material or
milling-parameter file all arrive as XML — and can be changed for the file in hand.</p>
<p><img src="file-explorer-img/editor-panel.en.png" alt="The same folder with the mechanism file open in the editor: the bar names Resource and the file's path, the language selector reads xml, and the anchor elements of the mechanism are syntax-highlighted beside the listing"></p>
<p><em>At <code>/util/file-explorer/Resource/MachineTool/Table-B1.default</code>, after clicking the mechanism file.
The pencil button at the right of the toolbar hides and shows this panel; a file clicked while it is
hidden opens nothing, so a double-click is the gesture that opens a file either way.</em></p>
<p>Edits are not saved until <strong>Save</strong> is pressed, and the file's name carries a red mark while there
are unsaved edits. Ticking <strong>Auto Save</strong> instead writes shortly after typing stops and disables the
button; switching files, closing the panel or leaving the page flushes a pending write first. With
Auto Save off, those same three actions ask before discarding unsaved edits.</p>
<p>Binary files do not open here. A click on one reports that it is binary rather than filling the
editor with bytes, and an <code>.stl</code> file opens a 3D preview in the editor's place instead — closing the
preview brings back whatever text was underneath, unsaved edits included.</p>
<h2 id="renaming-and-moving">Renaming and moving</h2>
<p><strong>Rename</strong> on the row's action strip edits that entry's name. Because the name is written back as a
path relative to the folder it is in, the same action moves files:</p>
<div class="TIP">
<h5>Tip</h5>
<p><strong>Moving by renaming</strong></p>
<ul>
<li>Renaming <code>file1.txt</code> to <code>Folder/file1.txt</code> moves the file into <code>Folder</code>.</li>
<li>Renaming <code>file1.txt</code> inside <code>Folder</code> to <code>../file1.txt</code> moves it out to the folder above.</li>
</ul>
<p>Parent folders that do not exist yet are created. A move that would land outside the root is
refused, and so is one whose destination already exists.</p>
</div>
<p>A rename cannot move a file from one root to another. To do that, download from one and upload to
the other.</p>
<h2 id="the-other-row-actions">The other row actions</h2>
<ul>
<li><strong>Download</strong> saves the file to your own machine. On a folder it becomes <strong>Download as ZIP</strong>,
which packs the folder on the server and sends the archive.</li>
<li><strong>Extract ZIP</strong>, offered on <code>.zip</code> rows only, unpacks the archive beside itself into a folder
named after it.</li>
<li><strong>Duplicate</strong> copies the entry next to itself under the first free <code>-Copy-00</code> … <code>-Copy-19</code> name,
and reports that all twenty are taken rather than overwriting one.</li>
<li><strong>Delete</strong> needs a double-click to confirm. On a folder it removes the folder and everything
under it, and it will not delete a root.</li>
</ul>
<p><strong>Upload</strong>, in the toolbar, sends one file from your own machine into the folder being shown, and
overwrites a file of the same name that is already there. <strong>New Folder</strong> and <strong>New File</strong> beside it
create empty ones; creating a file that already exists fails rather than emptying it.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="../../anatomy/util/file-explorer.html">File Explorer Page</a> — the component this page describes: its toolbar, its picker mode, the roots it exposes and the endpoints behind each action</li>
<li><a href="mech-builder.html">Mechanism Builder</a> — the other Page-menu utility, whose Load and both Save As actions open this browser as a picker</li>
<li><a href="index.html">Utilities</a> — the other screens the Page menu lists beside this one</li>
<li><a href="../basics/projects.html">Projects</a> — what the Project root holds, and which of those files a Save As copies</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,132 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Utilities | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Utilities | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="utilities">Utilities</h1>
<p>The supporting screens the Page menu lists below its first separator, rather than the three that
carry a job from the tool house to a finished run: browsing the files a project is built from,
assembling a mechanism outside the equipment tree, and the controller screen that still owns a
handful of settings on its own. Two of the three open with no project loaded, which is what makes
them supporting screens rather than steps.</p>
<p>Ordered as the Page menu lists them.</p>
<h2 id="pages">Pages</h2>
<ul>
<li><a href="file-explorer.html">File Explorer</a> — Finding, reading, editing and moving the server's files, and the editor beside the listing</li>
<li><a href="mech-builder.html">Mechanism Builder</a> — Building a mechanism out of anchors and branches, and writing it out as a machine tool file</li>
<li><a href="legacy-controller.html">Legacy Controller</a> — The three settings that have no editor anywhere else, and which face to edit for everything else</li>
</ul>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="../setup/index.html">Setup</a> — the equipment these files are loaded into</li>
<li><a href="../basics/index.html">Basics</a> — the window and the Page menu that reach these screens</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

@@ -0,0 +1,208 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Legacy Controller | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Legacy Controller | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="legacy-controller">Legacy Controller</h1>
<p>The Legacy Controller screen owns three settings that have no editor anywhere else in the
application. It edits a different controller model from the General Setup page's Controller branch,
and neither screen sees the other's edits: those three are edited here, and everything else on the
branch.</p>
<h2 id="where-it-is">Where it is</h2>
<p>Its own page, reached from the menu bar's <strong>Page → Legacy-Controller</strong>, at <code>/controller/:tab?</code>. It is
not a Control-Tree branch; nothing in a tree reaches it. The left pane is a strip of seven tabs, each
addressable as the last URL segment: <strong>Coordinate Table</strong> (<code>coordinate-table</code>, which a bare
<code>/controller</code> opens), <strong>Datum Preset</strong>, <strong>Datum Shift</strong>, <strong>Offset Table</strong>, <strong>Machine</strong>, <strong>Brand</strong> and
<strong>Config</strong>; the two datum tab buttons are shown only while the brand reads Heidenhain. The right pane
is a 3D view, described under <a href="#what-the-right-pane-draws">What the right pane draws</a> below.</p>
<h2 id="which-face-to-edit">Which face to edit</h2>
<p>Controller setup for a project belongs on the General Setup page's Controller branch —
<a href="../setup/controller.html">Controller</a>. The brand, the stroke limits, the rapid feedrate, the
tool-change time, the tool offset table, the work coordinates and the Heidenhain datum tables all
have an editor there as well, and apart from one shared project flag — <strong>Set ideal offset dependent
on tool house</strong>, which this screen's Offset Table tab and the branch's Tool Offsets leaf both write —
the two screens edit different models. A value changed on one is not the value the other shows.</p>
<h2 id="align-program-zero-onto-a-work-offset">Align program zero onto a work offset</h2>
<p><strong>Align P0</strong> is on the <strong>Coordinate Table</strong> tab and nowhere else. The branch's Work Coordinates leaf
carries <strong>P0</strong> and <strong>M0</strong> on every row too; the alignment is this screen's. Which direction an
alignment runs — the work offset moved onto program zero, or program zero moved onto the offset as
this button does — and where program zero sits on the workpiece in the first place, are both
<a href="../setup/program-zero-alignment.html">Program Zero Alignment</a>.</p>
<ol>
<li>Find the row holding the work offset program zero should sit at. Ticking the table's selection
column is not part of this — that only moves the viewer's coordinate marker onto the row, and
that marker is not drawn until <strong>Show on Display</strong> in the tab's toolbar is on. It ships off, so
on an untouched project the selection column appears to do nothing.</li>
<li>Press <strong>Align P0</strong> in that row. It does not write the coordinate — it moves the workpiece and
fixture together so that program zero lands on the offset the row already holds. The toast names
the translation it assigned. It needs a workpiece, a fixture and a machine tool on the project —
<a href="../setup/index.html">Setup</a> — and without them nothing is written and the button says so.</li>
<li><strong>Undo Align</strong> and <strong>Redo Align</strong>, in the tab's toolbar, step back and forward through the
alignments this screen has recorded.</li>
</ol>
<p>That history belongs to the screen rather than to the project: it holds 32 steps, survives a walk to
another page and back, and is cleared when the project changes or the browser reloads the page. Each
step restores the whole transform from a snapshot taken earlier, so if the fixture's placement was
changed on another screen in between, an undo replaces that change rather than merging with it.</p>
<p><img src="legacy-controller-img/coordinate-table.en.png" alt="The Legacy Controller on its Coordinate Table tab: five tab buttons, the ISO Coordinate Table with its Undo Align, Redo Align and Show on Display toolbar, and fifteen work-offset rows each carrying P0, M0 and Align P0 in an Actions column"></p>
<p><em>At <code>/controller/coordinate-table</code>. <strong>Align P0 is a row action</strong> — every offset from G54 to G59.9
has its own, and there is no single button for the table. The tab strip shows five buttons here
rather than seven because this project's brand is not Heidenhain; the two datum tabs appear only
under that brand, though their addresses stay valid under any of them.</em></p>
<h2 id="the-two-switches-nothing-else-carries">The two switches nothing else carries</h2>
<table>
<thead>
<tr>
<th>Tab</th>
<th>Setting</th>
<th>What it is for</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Config</strong></td>
<td><strong>Enable Shortest Rotary Path</strong></td>
<td>Takes each rotary axis of a block to the equivalent angle nearest the previous block's, so an axis turns the short way round instead of unwinding a whole turn. It arrives on. Under Heidenhain the same normalisation runs whatever the box reads, so clearing it changes nothing there.</td>
</tr>
<tr>
<td><strong>Brand</strong></td>
<td><strong>Master-axis character</strong></td>
<td>Which rotary axis — <code>A</code>, <code>B</code> or <code>C</code> — the Heidenhain <code>PLANE … SEQ</code> orientations are resolved against; what that dialect's words do is <a href="../../technique/nc-dialects/index.html">NC Dialects</a>. The card holding it is present only while the brand reads Heidenhain.</td>
</tr>
</tbody>
</table>
<p>Both commit on the click. If the master-axis write is refused a toast says so, but the select goes on
showing the character that was picked, so a reload is what shows which one actually took — and a
reloaded <code>A</code> settles nothing, because the Brand tab also falls back to <code>A</code>, silently, when the read
itself fails.</p>
<p><img src="legacy-controller-img/config-tab.en.png" alt="The Config tab: a single Options card holding the Enable Shortest Rotary Path switch, turned on, above an information banner restating what it does"></p>
<p><em>At <code>/controller/config</code>. The whole tab is that one switch. The master-axis select is not beside it
— it is on the <strong>Brand</strong> tab and, as the table above says, only while the brand reads Heidenhain,
which is why it is absent here.</em></p>
<h2 id="what-the-right-pane-draws">What the right pane draws</h2>
<p>The 3D view beside the tabs draws the same scene as the <a href="../run/index.html">Execution page</a>, and
its <strong>Scene</strong> dropdown writes the same switches — so what is ticked here is ticked there. It offers
three groups: the machine tool, the cutter, the workpiece and the fixture; the program-zero and
work-offset markers, the Heidenhain one appearing only under that brand; and the dimension bar and
colour scale bar. Of those, only the <strong>workpiece, the fixture and the dimension bar arrive on</strong>. The
machine tool and the cutter arrive off, and so do the coordinate markers — the work-offset one is
exactly what <strong>Show on Display</strong> turns on for this screen's table. A freshly loaded project
therefore opens this pane with little or nothing in it, and that is the shipped state rather than a
failure to draw.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="index.html">Utilities</a> — the other screens the Page menu lists beside this one</li>
<li><a href="mech-builder.html">Mechanism Builder</a> — another of the supporting screens the Page menu lists, for assembling a machine chain</li>
<li><a href="../setup/controller.html">Controller</a> — the branch that owns controller setup for a project, and every setting this screen does not exclusively hold</li>
<li><a href="../setup/program-zero-alignment.html">Program Zero Alignment</a> — which direction an alignment runs, where program zero sits on the workpiece, and why this screen's table is not the one a run reads</li>
<li><a class="xref" href="../../anatomy/legacy-controller.html">Legacy Controller Page</a> — the component behind this page: its seven tabs, the model it edits and the one it does not</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 336 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 KiB

@@ -0,0 +1,240 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mechanism Builder | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Mechanism Builder | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="mechanism-builder">Mechanism Builder</h1>
<p>Building a mechanism: anchors joined by branches, each branch carrying the transform between its two
ends, and each anchor optionally carrying a shape. It is where a virtual machine tool's topology is
assembled and then written out as a file a project can load.</p>
<h2 id="where-it-is">Where it is</h2>
<p>Its own page, reached from the menu bar's <strong>Page → Mechanism Builder</strong>, at <code>/util/mech-builder</code>.
Nothing on it belongs to a project, so it opens and edits with <strong>no project loaded</strong>, as the File
Explorer beside it does. The mechanism is held by the server rather than by the page — more than the
page keep-alive <a href="../basics/the-app-window.html">The Application Window</a> grants every screen,
because there is one mechanism per server rather than one per browser: a second person editing at the
same time is editing the same one.</p>
<p>Three fixed, equal-width columns, none of them draggable: the <strong>File</strong> menu, the <strong>Add Anchor</strong>
button and the graph of anchors and branches on the left, where clicking a node, or the label on an
edge, selects it; the editor for whatever is selected in the middle, headed <strong>Anchor</strong> or <strong>Branch</strong>;
and <strong>Display</strong>, the 3D view of the mechanism, on the right, which redraws as the mechanism changes.</p>
<p><img src="mech-builder-img/anchor-selected.en.png" alt="The Mechanism Builder with a five-axis machine tool loaded: the graph of ten anchors on the left with the X anchor filled green, the Anchor editor in the middle showing the Identity and Geometry cards, and the assembled machine drawn in the Display column on the right"></p>
<p><em>At <code>/util/mech-builder</code>, with an anchor picked in the graph. The open file's path sits under the
File menu; the header of the middle column carries <strong>Extend</strong> and the delete button; and the
Geometry card here holds a <code>TransformationGeom</code>, so its own inner geometry — an STL file — and its
own inner transformer are edited underneath it.</em></p>
<p>What the anchors and branches must be <em>called</em> — the motion-axis and end-anchor keywords, which way
branches must point, and how to take the numbers off a CAD assembly — is
<a href="../setup/machine-tool.html">Building Virtual Machine Tools</a>; this page is only how to drive the
editor.</p>
<h2 id="starting-loading-and-saving">Starting, loading and saving</h2>
<table>
<thead>
<tr>
<th>File menu entry</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>New</strong></td>
<td>Discards the mechanism on screen and starts an empty one holding a single root anchor.</td>
</tr>
<tr>
<td><strong>Load…</strong></td>
<td>Opens the server file picker — <a href="file-explorer.html">File Explorer</a>'s browser in picker mode, over the roots that page lists — filtered to <code>*.GeneralMechanism</code> and <code>*.xml</code>. The server reads the file where it sits and remembers its folder.</td>
</tr>
<tr>
<td><strong>ReLoad</strong></td>
<td>Re-reads the file you last loaded, dropping the edits made since. Disabled until a file has been loaded.</td>
</tr>
<tr>
<td><strong>Save As General Mechanism</strong></td>
<td>Writes the mechanism as a <code>.GeneralMechanism</code> XML where you pick, and re-points <strong>ReLoad</strong> at it.</td>
</tr>
<tr>
<td><strong>Save As Machine Tool</strong></td>
<td>Wraps the same mechanism as a machine tool and writes a <code>.MachineTool</code> XML. <strong>ReLoad</strong> goes on pointing at the mechanism file, because a machine tool is a different file type.</td>
</tr>
</tbody>
</table>
<p>There is no plain <strong>Save</strong> that overwrites what you opened: both writes are Save As and both ask
where the result goes. Under the File menu the left column shows the open file's relative path, or
<code>(unsaved)</code> while the mechanism has no file yet — after <strong>New</strong>, until the first Save As.</p>
<div class="NOTE">
<h5>Note</h5>
<p><strong>Load's file-type filter does not list the extension the shipped mechanisms use.</strong> The picker
opens filtered to <code>*.GeneralMechanism</code> and <code>*.xml</code>, while the mechanism beside each shipped
machine tool under the Resource root is named <code>.general-mech</code>. Switch the picker's file-type
selector to <strong>All Files (*.*)</strong> to see it. The filter hides those files; it does not refuse
them, and one picked that way loads normally.</p>
</div>
<div class="NOTE">
<h5>Note</h5>
<p><strong>Save As Machine Tool does not check the end-anchor keywords.</strong> The write succeeds and reports
the file saved whatever the anchors are called, including a mechanism whose tool-end and
worktable-end anchors are mis-cased or missing altogether. A file written here asks for its
collision pairs to be generated, and generating them needs those two anchors by their exact
names, so such a file is refused the first time anything reads it — on the General Setup page's
<strong>Machine Tool</strong> branch, not here, and with a message naming the keyword it wanted. Get the names
right before saving; they are in
<a href="../setup/machine-tool.html">Building Virtual Machine Tools</a>.</p>
</div>
<p>A <code>.MachineTool</code> written here is not a project's chain until it is loaded onto one, on the General
Setup page's <strong>Machine Tool</strong> branch — see
<a href="../setup/machine-tool.html">Building Virtual Machine Tools</a>.</p>
<h2 id="growing-the-chain">Growing the chain</h2>
<ol>
<li>Click an anchor in the graph to select it. The root carries a <strong>Root</strong> badge and is the one
anchor that cannot be deleted.</li>
<li>Press <strong>Extend</strong> in its header. That creates a new anchor <em>and</em> the branch reaching it from the
selected one, then selects the new anchor — the normal way a chain grows.</li>
<li><strong>Add Anchor</strong>, beside the File menu, is for a loose anchor instead: it creates one connected to
nothing, which you join up afterwards with the <strong>Add Branch</strong> picker on an anchor's Identity
card. That picker offers every anchor except the selected one and those already joined to it in
either direction.</li>
<li>Name each anchor as you make it. New ones arrive as <code>NewAnchor-001</code>, <code>NewAnchor-002</code> and so on,
so type the real name into <strong>Name</strong> on the Identity card; it commits a moment after you stop
typing. A branch carries a <strong>Name</strong> field of its own in the same place.</li>
</ol>
<p>Deleting an anchor or a branch is a double-click on the red delete button in its header.</p>
<h2 id="geometry-on-an-anchor">Geometry on an anchor</h2>
<p>Geometry is optional and belongs to one anchor at a time. Select the anchor and tick <strong>Geometry</strong> on
the Geometry card; a badge beside the checkbox names the shape currently held, and un-ticking the
box removes it. Five kinds can be built here — <code>Box3d</code>, <code>Cylindroid</code>, <code>StlFile</code>, <code>TransformationGeom</code>
and <code>GeomCombination</code> — and <code>TransformationGeom</code> carries its own inner geometry and inner
transformer, so a shape can be offset from the anchor it hangs on. <strong>Display color</strong>, above the
shape editor, is written into the mechanism file itself, so everyone who opens that file sees the
same colour; until you set one the badge reads <strong>auto</strong> and the view uses a stable colour of its
own, which the reset button beside the swatch returns to.</p>
<h2 id="the-branch-transformer">The branch transformer</h2>
<p>Click the label on a branch's edge — the transformer type, or the branch's name and type — to select
the branch. Its Identity card names the two anchors it joins in order, the one the branch starts from
and then the one it reaches, with an arrow between them; that order is the branch's direction. Below
that, the <strong>Transformer</strong> card picks between seven kinds, in the order the picker lists them:
<code>Static Translation</code>, <code>Static Rotation</code>, <code>Static Freeform</code>, <code>Dynamic Translation</code>,
<code>Dynamic Rotation</code>, <code>General Transform</code> and <code>No Transform</code> — which is what every new branch starts
on. Pick a kind and its fields appear underneath; the choice takes effect at once, so the right-hand
view shows the joint as you edit it. The two dynamic kinds are the ones whose value varies at
runtime — a machine's moving axes are branches carrying those.</p>
<p><img src="mech-builder-img/branch-transformer.en.png" alt="The same mechanism with a branch picked instead: the graph edge is stroked green, the Identity card names the two anchors it joins with an arrow between them, and the Transformer card reads Dynamic Rotation over a rotation axis, an angle and a pivot"></p>
<p><em>At <code>/util/mech-builder</code>, with a branch picked. A <code>Dynamic Rotation</code> carries the axis it turns
about and the pivot it turns around; the angle is the value a run varies, so the number shown here
is the resting one. The sentence under the fields names the same three parts.</em></p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="file-explorer.html">File Explorer</a> — the server-side browser behind this page's Load and Save As dialogs, and the roots they offer</li>
<li><a href="index.html">Utilities</a> — the other screens the Page menu lists beside this one</li>
<li><a href="legacy-controller.html">Legacy Controller</a> — the other supporting screen in the Page menu, for the three settings nothing else edits</li>
<li><a href="../setup/machine-tool.html">Building Virtual Machine Tools</a> — the naming keywords, branch direction and CAD practice a machine chain built here must follow, and where the saved file is attached to a project</li>
<li><a class="xref" href="../../anatomy/util/mech-builder.html">Mechanism Builder Page</a> — the component behind this page: its cards, its file IO and how edits reach the canvas</li>
</ul>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,31 @@
<div id="sidetoggle">
<div>
<div class="sidefilter">
<form class="toc-filter">
<span class="glyphicon glyphicon-filter filter-icon"></span>
<span class="glyphicon glyphicon-remove clear-icon" id="toc_filter_clear"></span>
<input type="text" id="toc_filter_input" placeholder="Filter by title" onkeypress="if(event.keyCode==13) {return false;}">
</form>
</div>
<div class="sidetoc">
<div class="toc" id="toc">
<ul class="nav level1">
<li>
<a href="index.html" name="" title="Overview">Overview</a>
</li>
<li>
<a href="file-explorer.html" name="" title="File Explorer">File Explorer</a>
</li>
<li>
<a href="mech-builder.html" name="" title="Mechanism Builder">Mechanism Builder</a>
</li>
<li>
<a href="legacy-controller.html" name="" title="Legacy Controller">Legacy Controller</a>
</li>
</ul>
</div>
</div>
</div>
</div>
@@ -0,0 +1,2 @@
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"File Explorer","href":"file-explorer.html","topicHref":"file-explorer.html"},{"name":"Mechanism Builder","href":"mech-builder.html","topicHref":"mech-builder.html"},{"name":"Legacy Controller","href":"legacy-controller.html","topicHref":"legacy-controller.html"}]}