fix SoftNcRunner GM code normalization.

This commit is contained in:
2026-05-06 13:21:19 +08:00
parent 0fe9497552
commit 2f57932000
1238 changed files with 69405 additions and 22511 deletions
@@ -0,0 +1,264 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>List Command Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="List Command Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &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="list-command-panel">List Command Panel</h1>
<p>The key model is <a class="xref" href="../../api/Hi.ShellCommands.ListCommand.html">ListCommand</a>.</p>
<ul>
<li>Assistant Model
<ul>
<li><a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></li>
<li><a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a></li>
</ul>
</li>
</ul>
<h2 id="layout">Layout</h2>
<ul>
<li>Columns Layout (Two column with one splition bar)
<ul>
<li>Command Entry List Panel
Provide entrys for selection
The model is <a class="xref" href="../../api/Hi.ShellCommands.ListCommand.html#Hi_ShellCommands_ListCommand_CommandEntryList">CommandEntryList</a>.
<ul>
<li>Head Line
<ul>
<li>Add Command Dropdown Button
(Note that Dropdown is not combobox.)
<ul>
<li>Buttons for adding:
<ul>
<li><a class="xref" href="../../api/Hi.ShellCommands.PreSettingCommand.html">PreSettingCommand</a>
<ul>
<li>Content Panel: <a href="PreSettingCommand-panel.html">PreSetting Command Panel</a></li>
</ul>
<div class="NOTE">
<h5>Note</h5>
<p>This command sets up initial parameters before NC simulation which attempt to take the effect.</p>
</div>
</li>
<li><a class="xref" href="../../api/Hi.ShellCommands.NcOptOptionCommand.html">NcOptOptionCommand</a>
<ul>
<li>Content Panel: <a href="NcOptOption-panel.html">NcOptOption Panel</a></li>
</ul>
<div class="NOTE">
<h5>Note</h5>
<p>This command is also a type of pre-setting that should be applied before NC simulation which attempt to take the effect.</p>
</div>
</li>
<li><a class="xref" href="../../api/Hi.ShellCommands.NcFileCommand.html">NcFileCommand</a>
<ul>
<li>Content Panel: <a href="NcFileCommand-panel.html">NcFile Command Panel</a></li>
</ul>
</li>
<li><a class="xref" href="../../api/Hi.ShellCommands.NcCodeCommand.html">NcCodeCommand</a></li>
<li><a class="xref" href="../../api/Hi.ShellCommands.ScriptCommand.html">ScriptCommand</a>
<ul>
<li>Content Panel: <a href="script-command-panel.html">Script Command Panel</a></li>
</ul>
</li>
<li><a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html">PostExecutionCommand</a>
<ul>
<li>Content Panel: <a href="PostExecutionCommand-panel.html">PostExecution Command Panel</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Remove Command Button</li>
<li>Move Up Command Button</li>
<li>Move Down Command Button</li>
</ul>
</li>
<li>Command Entrys Selection Panel
<ul>
<li>(Each) Command Entry Box:
The boxes are multi-selectable for re-order, remove and etc..
The boxes are draggable for re-order.
<ul>
<li>Enable CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.EnablingWrapper.html#Hi_ShellCommands_EnablingWrapper_IsEnabled">IsEnabled</a>.</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>Show the label text.</p>
</div>
</li>
<li>Title Label
<ul>
<li>Apply <a class="xref" href="../../api/Hi.ShellCommands.ITitleCommand.html#Hi_ShellCommands_ITitleCommand_GetCommandTitle_">GetCommandTitle</a> if the command is inherited from <a class="xref" href="../../api/Hi.ShellCommands.ITitleCommand.html">ITitleCommand</a>; otherwise, show the class name.</li>
</ul>
</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>Apply style changed if the entry is selected.</p>
</div>
<ul>
<li>If there is only one <a class="xref" href="../../api/Hi.ShellCommands.PreSettingCommand.html">PreSettingCommand</a> in the list and at the begining, Keep it at begining when items adding, shows a &ldquo;pin at begining&rdquo; label with a pin icon.</li>
<li>If there is only one <a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html">PostExecutionCommand</a> in the list and at the end, Keep it at end when items adding, shows a &ldquo;pin at end&rdquo; label a pin icon.</li>
</ul>
</li>
</ul>
</li>
<li>Support file drag from the external application (such as file explorer), files drag into the Command Entrys List Panel is equivalent to create <a class="xref" href="../../api/Hi.ShellCommands.NcFileCommand.html">NcFileCommand</a>s (with the <a class="xref" href="../../api/Hi.ShellCommands.EnablingWrapper.html">EnablingWrapper</a>) and set the file into the NC File Command.</li>
</ul>
</li>
<li>Vertical Splition Bar
<ul>
<li>The bar can be drag to tune the width.</li>
</ul>
</li>
<li>Selected Command Content Panel
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.EnablingWrapper.html#Hi_ShellCommands_EnablingWrapper_Command">Command</a>.</li>
<li>The panel is based on command type</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>The width of the entry block should expand to fulfill the content block.</p>
</div>
</li>
</ul>
</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>Use Disabled Style for command panels if the Enable checkbox is not checked.</p>
</div>
<div class="NOTE">
<h5>Note</h5>
<p>Each command entry can be individually enabled or disabled without removing it from the list.</p>
</div>
<h2 id="features">Features</h2>
<p>Update the Title Label if the Command is updated by the Command Content Panel.</p>
<h2 id="source-code-path">Source Code Path</h2>
<p>See <a href="../index.html">this page</a> for git repository.</p>
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
<ul>
<li>Mission/ListCommandPanel</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
<p>The ListCommand editor is not a standalone component in the Quasar SPA. Instead it is expressed inline by <code>MissionPage.vue</code>, which renders the root <code>ListCommand</code>'s entries as a draggable <code>&lt;q-splitter&gt;</code> left-pane. Nested <code>ListCommand</code> recursion is supported by the backend path scheme (<code>&quot;0.2&quot;</code>) but the Quasar UI currently renders only root-level entries; recursion support is tracked under <em>Not yet ported</em> below.</p>
<ul>
<li><code>wwwroot-src/src/pages/MissionPage.vue</code> — hosts the root-level ListCommand list: Add Command ▾ / Delete / Move Up / Move Down / Reload toolbar + draggable row list + per-kind editor panel on the right. Native HTML5 <code>draggable=&quot;true&quot;</code> + <code>@dragstart/over/drop</code> handlers; Drop sends the full path order once via <code>PUT /api/Mission/list-command/reorder</code>.</li>
<li><code>wwwroot-src/src/api/mission.ts</code> — typed wrapper over the ListCommand CRUD: <code>addCommand</code>, <code>removeCommand</code>, <code>moveCommand</code>, <code>reorderList</code>.</li>
<li><code>Missions/MissionController.cs</code> — REST endpoints: <code>POST /list-command/entries</code>, <code>DELETE /list-command/entries/{index}</code>, <code>POST /list-command/entries/{index}/move</code>, <code>PUT /list-command/reorder</code> (genuinely rebuilds <code>CommandEntryList</code>; earlier stub returned success without reordering).</li>
</ul>
<p>Not yet ported:</p>
<ul>
<li>Nested <code>ListCommand</code> UI (backend supports the <code>&quot;0.2&quot;</code> path; UI renders root only).</li>
<li><code>ObjectManagementMenuButton</code> integration on the Mission toolbar for whole-<code>.shellcommand</code> file load / save.</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,160 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>NcCodeCommand Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="NcCodeCommand Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &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="nccodecommand-panel">NcCodeCommand Panel</h1>
<p>The key model is <a class="xref" href="../../api/Hi.ShellCommands.NcCodeCommand.html">NcCodeCommand</a>.</p>
<h2 id="layout">Layout</h2>
<ul>
<li>Head Line
<ul>
<li>NC Code Label</li>
</ul>
</li>
<li>NC Code Editor Area
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.NcCodeCommand.html#Hi_ShellCommands_NcCodeCommand_NcText">NcText</a>.</li>
<li>Multi-line text editor for NC code input</li>
<li>Monospace font for better code readability</li>
<li>Line numbers display (optional)</li>
</ul>
</li>
</ul>
<h2 id="features">Features</h2>
<ul>
<li>Direct NC code input without file</li>
<li>Syntax highlighting for NC code (optional)</li>
<li>Real-time validation (optional)</li>
<li>Code statistics (line count, character count)</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>The NC Code editor should expand to fill available space in the panel.</p>
</div>
<div class="NOTE">
<h5>Note</h5>
<p>Unlike NcFileCommand, this command stores the NC code directly in memory.</p>
</div>
<h2 id="source-code-path">Source Code Path</h2>
<p>See <a href="../index.html">this page</a> for git repository.</p>
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
<ul>
<li>Mission/NcCodeCommandPanel</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
<ul>
<li><code>wwwroot-src/src/components/mission/NcCodeCommandPanel.vue</code> — monospace <code>&lt;q-input type=&quot;textarea&quot;&gt;</code> with 400 ms-debounced save, line / character stats, Trim Blank Lines + Clear actions. Monaco upgrade deferred.</li>
<li><code>wwwroot-src/src/api/mission.ts</code> — typed wrapper over the NcCode-related endpoints on <code>MissionController.cs</code>.</li>
<li><code>Missions/MissionController.cs</code> — REST endpoints for <code>NcText</code> per-property updates.</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,180 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>NcFileCommand Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="NcFileCommand Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &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="ncfilecommand-panel">NcFileCommand Panel</h1>
<p>The key model is <a class="xref" href="../../api/Hi.ShellCommands.NcFileCommand.html">NcFileCommand</a>.</p>
<ul>
<li>Other Model: string BaseDirectory.</li>
</ul>
<h2 id="layout">Layout</h2>
<ul>
<li>NcFileCommand Panel
<ul>
<li>Head Line
<ul>
<li>NC File Setting
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.NcFileCommand.html#Hi_ShellCommands_NcFileCommand_NcFile">NcFile</a>.</li>
<li>NC File Label</li>
<li>NC File Text Field
<ul>
<li>About 20 charactor width</li>
</ul>
</li>
<li>Load File Browser Button
<ul>
<li>Apply universal file filter for the NC files.
Since NC File has too many extensions, such as but not limits to: nc, h, mpf, ptp.</li>
<li>Follow the <a href="../widget/gui-file-path-assignment.html">Load Pattern</a>.</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>NC File Editor
The editor only available for text file.
If the file lines within 20000 line, enable the NC File Editor;
Otherwise, just preview the first 20000 line of the file and show the message to the Head Message Place.
Auto-Save the file if the content changed.
<ul>
<li>Head Message Place
<ul>
<li>Show the error or exception of the File.</li>
</ul>
</li>
<li>NC Code TextArea</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>Fix the height of NC Code TextArea to the panel bottom.
Set NC Code TextArea height resizable.</p>
</div>
<h2 id="source-code-path">Source Code Path</h2>
<p>See <a href="../index.html">this page</a> for git repository.</p>
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
<ul>
<li>Mission/NcFileCommandPanel</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
<ul>
<li><code>wwwroot-src/src/components/mission/NcFileCommandPanel.vue</code> — NC File text field + Browse (prompt-based per <code>apply-prompt-instead-of-local-file-upload-browser</code>) + <code>&lt;q-banner&gt;</code> live file-info banner + Preview dialog. File-loading is server-side; the browser never uploads file bytes.</li>
<li><code>wwwroot-src/src/api/mission.ts</code> — typed wrapper over the NcFile-related endpoints on <code>MissionController.cs</code>.</li>
<li><code>Missions/MissionController.cs</code> — REST endpoints for <code>NcFile</code> property updates and file-info queries.</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,246 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>NC Optimization Option Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="NC Optimization Option Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &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="nc-optimization-option-panel">NC Optimization Option Panel</h1>
<p>Key model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html">NcOptOption</a>.</p>
<h2 id="layout">Layout</h2>
<ul>
<li><p>General Optimization Section</p>
<ul>
<li>Enable Optimization CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableOpt">EnableOpt</a>.</li>
</ul>
</li>
<li>Enable Feedrate Optimization CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableOptFeedrate">EnableOptFeedrate</a>.</li>
</ul>
</li>
<li>Enable Depth Splitting CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableDepthSplition">EnableDepthSplition</a>.</li>
</ul>
</li>
<li>Enable Interpolation CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableInterpolation">EnableInterpolation</a>.</li>
</ul>
</li>
</ul>
</li>
<li><p>Distance Settings Section</p>
<ul>
<li>Extended Pre-Distance Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_ExtendedPreDistance_mm">ExtendedPreDistance_mm</a>.</li>
</ul>
</li>
<li>Extended Post-Distance Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_ExtendedPostDistance_mm">ExtendedPostDistance_mm</a>.</li>
</ul>
</li>
</ul>
</li>
<li><p>Feedrate Limits Section</p>
<ul>
<li>Minimum Feedrate Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MinFeedrate_mmdmin">MinFeedrate_mmdmin</a>.</li>
</ul>
</li>
<li>Maximum Feedrate Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MaxFeedrate_mmdmin">MaxFeedrate_mmdmin</a>.</li>
</ul>
</li>
<li>Rapid Feed Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_RapidFeed_mmdmin">RapidFeed_mmdmin</a>.</li>
</ul>
</li>
</ul>
</li>
<li><p>Motion Dynamics Section</p>
<ul>
<li>Maximum Acceleration Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MaxAcceleration_mmds2">MaxAcceleration_mmds2</a>.</li>
</ul>
</li>
<li>Maximum Jerk Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MaxJerk_mmds3">MaxJerk_mmds3</a>.</li>
</ul>
</li>
</ul>
</li>
<li><p>Force and Safety Section</p>
<ul>
<li>Preferred Force Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_PreferedForce_N">PreferedForce_N</a>.</li>
</ul>
</li>
<li>Spindle Torque Safety Factor Floating Number Field
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MaxSpindleTorqueSafetyFactor">MaxSpindleTorqueSafetyFactor</a>.</li>
</ul>
</li>
<li>Spindle Power Safety Factor Floating Number Field
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MaxSpindlePowerSafetyFactor">MaxSpindlePowerSafetyFactor</a>.</li>
</ul>
</li>
</ul>
</li>
<li><p>Compensation Section</p>
<ul>
<li>Enable Forward Compensation CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableForwardCompensation">EnableForwardCompensation</a>.</li>
</ul>
</li>
<li>Enable Side Compensation CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableSideCompensation">EnableSideCompensation</a>.</li>
</ul>
</li>
<li>Enable Depth Compensation CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableDepthCompensation">EnableDepthCompensation</a>.</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>Use XmlConvert.ToDouble and FromDouble to parse the <code>double</code> value for dealing with the inf value.</p>
</div>
<h2 id="source-code-path">Source Code Path</h2>
<p>See <a href="../index.html">this page</a> for git repository.</p>
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
<ul>
<li>NcOpt/NcOptOptionPanel</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
<ul>
<li><code>wwwroot-src/src/components/mission/NcOptOptionCommandPanel.vue</code> — six grouped <code>&lt;q-card&gt;</code>s (General / Distances / Feedrate / Motion Dynamics / Force &amp; Safety / Compensation) backed by a setter-map table so adding a new property requires one line. <code>preferedForce_N</code> and <code>maxFeedPerTooth_mm</code> round-trip <code>Infinity</code> through the string-accepting backend endpoint.</li>
<li><code>wwwroot-src/src/api/mission.ts</code> — typed wrapper over the NcOptOption-related endpoints.</li>
<li><code>Missions/NcOptOptionEndpoints.cs</code> — REST endpoints for every <code>NcOptOption</code> property (per-property PUT with string body to accept <code>Infinity</code>).</li>
<li><code>Missions/MissionController.cs</code> — hosts the <code>NcOptOption</code> command CRUD that wraps the property endpoints.</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,215 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PostExecutionCommand Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="PostExecutionCommand Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &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="postexecutioncommand-panel">PostExecutionCommand Panel</h1>
<ul>
<li>Key Model
<ul>
<li><a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html">PostExecutionCommand</a></li>
</ul>
</li>
<li>Assistant Model
<ul>
<li><a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></li>
<li><a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a></li>
</ul>
</li>
</ul>
<h2 id="layout">Layout</h2>
<ul>
<li>Output Step Files Section
<ul>
<li>Enable Write Step Files CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html#Hi_ShellCommands_PostExecutionCommand_EnableWriteStepFiles">EnableWriteStepFiles</a>.</li>
</ul>
</li>
<li>Step File Template Label</li>
<li>Step File Template Text Field
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html#Hi_ShellCommands_PostExecutionCommand_StepFileTemplate">StepFileTemplate</a>.</li>
<li>Default value: &ldquo;Output/[NcName].step.csv&rdquo;</li>
</ul>
</li>
<li>Apply one line layout to the label and the text field.</li>
</ul>
</li>
<li>Output Shot Files Section
Visible if <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true.
<ul>
<li>Enable Write Shot Files CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html#Hi_ShellCommands_PostExecutionCommand_EnableWriteShotFiles">EnableWriteShotFiles</a>.</li>
</ul>
</li>
<li>Shot File Template Text Field
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html#Hi_ShellCommands_PostExecutionCommand_ShotFileTemplate">ShotFileTemplate</a>.</li>
<li>Default value: <code>Output/[NcName].shot.csv</code></li>
</ul>
</li>
<li>Shot File Time Resolution (ms) Number Field
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html#Hi_ShellCommands_PostExecutionCommand_ShotFileTimeResolution_ms">ShotFileTimeResolution_ms</a>.</li>
<li>Default value: 1</li>
</ul>
</li>
</ul>
</li>
<li>Optimization Files Section
Visible if <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true.
<ul>
<li>Enable Optimize To Files CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html#Hi_ShellCommands_PostExecutionCommand_EnableOptimizeToFiles">EnableOptimizeToFiles</a>.</li>
</ul>
</li>
<li>Optimization File Template Text Field
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html#Hi_ShellCommands_PostExecutionCommand_OptimizationFileTemplate">OptimizationFileTemplate</a>.</li>
<li>Default value: &ldquo;Output/Opt-[NcName]&rdquo;</li>
</ul>
</li>
</ul>
</li>
<li>Geometry Difference Section
<ul>
<li>Enable Geom Diff CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html#Hi_ShellCommands_PostExecutionCommand_EnableGeomDiff">EnableGeomDiff</a>.</li>
</ul>
</li>
<li>Geom Diff Detect Radius Number Field (with Unit)
<ul>
<li>One Line layout</li>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PostExecutionCommand.html#Hi_ShellCommands_PostExecutionCommand_GeomDiffDetectRadius_mm">GeomDiffDetectRadius_mm</a>.</li>
<li>Default value: 1</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="source-code-path">Source Code Path</h2>
<p>See <a href="../index.html">this page</a> for git repository.</p>
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
<ul>
<li>Mission/PostExecutionCommandPanel</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
<ul>
<li><code>wwwroot-src/src/components/mission/PostExecutionCommandPanel.vue</code> — five cards: Step Files / Shot Files / Optimization / Geom Diff / Runtime Geom. Shot Files and Optimization cards are gated on <code>appState.isShowPhysicsOptions</code> (matches legacy). GeomDiff is embedded inline because it is a property on <code>PostExecutionCommand</code> rather than a standalone <code>IShellCommand</code>.</li>
<li><code>wwwroot-src/src/api/mission.ts</code> — typed wrapper; uses <code>commands/{path}/postexecution/*</code> endpoints including <code>enable-geom-diff</code> + <code>geom-diff-detect-radius-mm</code>.</li>
<li><code>Missions/MissionController.cs</code> — REST endpoints for PostExecution per-property PUTs.</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,213 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PreSettingCommand Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="PreSettingCommand Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &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="presettingcommand-panel">PreSettingCommand Panel</h1>
<ul>
<li>Key Model
<ul>
<li><a class="xref" href="../../api/Hi.ShellCommands.PreSettingCommand.html">PreSettingCommand</a></li>
</ul>
</li>
<li>Assistant Model
<ul>
<li><a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></li>
<li><a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a></li>
</ul>
</li>
</ul>
<h2 id="layout">Layout</h2>
<ul>
<li>Machining Resolution Label (with Unit)</li>
<li>Machining Resolution ComboBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PreSettingCommand.html#Hi_ShellCommands_PreSettingCommand_MachiningResolution_mm">MachiningResolution_mm</a>.</li>
<li>Default value: 0.125</li>
<li>Options (powers of 2)
<ul>
<li>0.0009765625</li>
<li>0.001953125</li>
<li>0.00390625</li>
<li>0.0078125</li>
<li>0.015625</li>
<li>0.03125</li>
<li>0.0625</li>
<li>0.125</li>
<li>0.25</li>
<li>0.5</li>
<li>1</li>
<li>2</li>
<li>4</li>
<li>8</li>
<li>16</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="NOTE">
<h5>Note</h5>
<p>The Machining Resolution is initialized from workpiece's InitResolution if available.</p>
</div>
<ul>
<li><p>Machining Motion Resolution Setting</p>
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PreSettingCommand.html#Hi_ShellCommands_PreSettingCommand_MachiningMotionResolution">MachiningMotionResolution</a>.</li>
<li>Motion Resolution Label</li>
<li>Type ComboBox (Feed Per Cycle, Feed Per Tooth, Fixed)</li>
</ul>
</li>
<li><p>FixedMachiningMotionResolution Section
If <a class="xref" href="../../api/Hi.ShellCommands.PreSettingCommand.html#Hi_ShellCommands_PreSettingCommand_MachiningMotionResolution">MachiningMotionResolution</a> is <a class="xref" href="../../api/Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html">FixedMachiningMotionResolution</a>, show the panel.</p>
<ul>
<li>Linear Resolution Label (with Unit)</li>
<li>Linear Resolution Number Input Field</li>
<li>Angle Resolution Label (with Unit)</li>
<li>Angle Resolution Number Input Field</li>
</ul>
</li>
<li><p>Detection Settings Setting</p>
<ul>
<li>Enable Collision Detection CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PreSettingCommand.html#Hi_ShellCommands_PreSettingCommand_EnableCollisionDetection">EnableCollisionDetection</a>.</li>
<li>Default value: true</li>
</ul>
</li>
<li>Enable Pause On Failure CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PreSettingCommand.html#Hi_ShellCommands_PreSettingCommand_EnablePauseOnFailure">EnablePauseOnFailure</a>.</li>
<li>Default value: false</li>
</ul>
</li>
</ul>
</li>
<li><p>Enable Physics CheckBox</p>
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.PreSettingCommand.html#Hi_ShellCommands_PreSettingCommand_EnablePhysics">EnablePhysics</a>.</li>
</ul>
</li>
</ul>
<h2 id="source-code-path">Source Code Path</h2>
<p>See <a href="../index.html">this page</a> for git repository.</p>
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
<ul>
<li>Mission/PreSettingCommandPanel</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
<ul>
<li><code>wwwroot-src/src/components/mission/PreSettingCommandPanel.vue</code> — Runtime Geometry + Machining Resolution + Motion Resolution type select (with embedded Fixed sub-fields: Linear + Rotary) + Collision / Pause / Physics checkboxes. <code>MachiningMotionResolution</code> is embedded inline because it is a property on <code>PreSettingCommand</code> rather than a standalone <code>IShellCommand</code>.</li>
<li><code>wwwroot-src/src/api/mission.ts</code> — typed wrapper; uses <code>commands/{path}/presetting/*</code> endpoints including <code>machining-motion-resolution-type</code>, <code>fixed-linear-resolution-mm</code>, <code>fixed-rotary-resolution-deg</code>.</li>
<li><code>Missions/MissionController.cs</code> — REST endpoints for PreSetting per-property PUTs.</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,246 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Classic Session Command Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Classic Session Command Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &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="classic-session-command-panel">Classic Session Command Panel</h1>
<p>The key model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html">SimpleSessionCommand</a>.</p>
<h2 id="layout">Layout</h2>
<ul>
<li>Head Line
<ul>
<li><a href="../widget/object-management-menu-button.html">Object Management Menu Button</a>
<ul>
<li>file extension is ShellCommand</li>
<li>The pointed Editor Panel is Session Management Panel</li>
</ul>
</li>
</ul>
</li>
<li>Title Label</li>
<li>Session Management Panel
<ul>
<li>NC/Command List Tab
<ul>
<li>Shell Commands ListBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_NcCommandList">NcCommandList</a>.</li>
<li>Support add, remove, reorder commands.</li>
<li>The items are multi-selectable.</li>
<li>Support file drag from the external application (such as file explorer), files drag into the Shell Commands List is equivalent to create <a class="xref" href="../../api/Hi.ShellCommands.NcFileCommand.html">NcFileCommand</a>s.</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>don't use file filter to the drag behavior</p>
</div>
<ul>
<li>On each NC File Command:
<ul>
<li>Only one line for each entry.</li>
<li>Batch Selection CheckBox with &lsquo;Select&rsquo; Text Label</li>
<li><a href="NcFileCommand-panel.html">NC File Command Panel</a>.</li>
</ul>
</li>
<li>The horizontal auto scroll bar is required.</li>
</ul>
</li>
</ul>
</li>
<li>Output Tab
<ul>
<li>Output Shot Files Tab
<ul>
<li>Enable Write Shot Files CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_EnableWriteShotFiles">EnableWriteShotFiles</a>.</li>
</ul>
</li>
<li>Shot File Template Text Field
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_ShotFileTemplate">ShotFileTemplate</a>.</li>
<li>Default value: <code>Output/[NcName].shot.csv</code></li>
</ul>
</li>
<li>Shot File Time Resolution (ms) Number Field
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_ShotFileTimeResolution_ms">ShotFileTimeResolution_ms</a>.</li>
<li>Default value: 1</li>
</ul>
</li>
</ul>
</li>
<li>Output Step Files Tab
<ul>
<li>Enable Write Step Files CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_EnableWriteStepFiles">EnableWriteStepFiles</a>.</li>
</ul>
</li>
<li>Step File Template Label</li>
<li>Step File Template Text Field
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_StepFileTemplate">StepFileTemplate</a>.</li>
<li>Default value: &ldquo;Output/[NcName].step.csv&rdquo;</li>
</ul>
</li>
<li>Apply one line layout to the label and the text field.</li>
</ul>
</li>
<li>Optimization Files Tab
<ul>
<li>Enable Optimize To Files CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_EnableOptimizeToFiles">EnableOptimizeToFiles</a>.</li>
</ul>
</li>
<li>Optimization File Template Text Field
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_OptimizationFileTemplate">OptimizationFileTemplate</a>.</li>
<li>Default value: &ldquo;Output/Opt-[NcName]&rdquo;</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Geometry Difference Tab
<ul>
<li>Enable Geom Diff CheckBox
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_EnableGeomDiff">EnableGeomDiff</a>.</li>
</ul>
</li>
<li>Geom Diff Detect Radius (mm) Number Field
<ul>
<li>One Line layout</li>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_GeomDiffDetectRadius_mm">GeomDiffDetectRadius_mm</a>.</li>
<li>Default value: 1</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>Use Disabled Style if the section key checkbox is not checked.</p>
</div>
<div class="TIP">
<h5>Tip</h5>
<p>The file templates support placeholder <code>[NcName]</code> which will be replaced with actual NC program name.</p>
</div>
<h2 id="wpf-application-source-code-path">WPF Application Source Code Path</h2>
<ul>
<li>Mission/SimpleSessionCommandPanel</li>
</ul>
<p>see <a href="../index.html">this page</a> for git repository.</p>
</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,186 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mission Page | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Mission Page | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &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="mission-page">Mission Page</h1>
<p>The Mission Page manages machining mission commands and execution settings.</p>
<h2 id="key-models">Key Models</h2>
<ul>
<li><strong>Primary</strong>: <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_PlayerCommand">PlayerCommand</a></li>
<li><strong>Supporting</strong>:
<ul>
<li><a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></li>
<li><a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a></li>
</ul>
</li>
</ul>
<h2 id="layout">Layout</h2>
<ul>
<li>Mission Page
<ul>
<li>Head Line
<ul>
<li><a href="../widget/object-management-menu-button.html">Object Management Menu Button</a>
<ul>
<li>file extension is ShellCommand</li>
<li>The pointed Editor Panel is Mission Edit Panel</li>
</ul>
</li>
<li>Mission Type Selection Section
<ul>
<li>Mission Type Label</li>
<li>Mission Type ComboBox</li>
</ul>
</li>
</ul>
</li>
<li>Mission Edit Panel
<ul>
<li>Content depends on the Mission Type Selection.</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="mission-type-selection-combobox">Mission Type Selection ComboBox</h2>
<p>The options:</p>
<ul>
<li><a href="script-command-panel.html">Script Command Panel</a> for <a class="xref" href="../../api/Hi.ShellCommands.ScriptCommand.html">ScriptCommand</a>.</li>
<li><a href="ListCommand-panel.html">List Command Panel</a> for <a class="xref" href="../../api/Hi.ShellCommands.ListCommand.html">ListCommand</a>.</li>
</ul>
<h2 id="source-code-locations">Source Code Locations</h2>
<p>See <a href="../index.html">HiNC GUI Architecture</a> for git repository links.</p>
<div class="TIP">
<h5>Tip</h5>
<p><strong>Implementation Order</strong>: When building a new Mission Page, create the page window/panel first, then implement the command panels (List Command Panel, Script Command Panel).</p>
</div>
<h3 id="wpf-application">WPF Application</h3>
<ul>
<li><code>Mission/MissionWindow</code></li>
<li><code>Mission/MissionPanel</code></li>
</ul>
<h3 id="web-application">Web Application</h3>
<p>Current (Quasar CLI SPA):</p>
<ul>
<li><code>wwwroot-src/src/pages/MissionPage.vue</code> - Mission page (List / Script mode toggle + drag-and-drop command list + per-kind editor pane)</li>
<li><code>wwwroot-src/src/components/mission/PreSettingCommandPanel.vue</code></li>
<li><code>wwwroot-src/src/components/mission/NcFileCommandPanel.vue</code></li>
<li><code>wwwroot-src/src/components/mission/NcCodeCommandPanel.vue</code></li>
<li><code>wwwroot-src/src/components/mission/ScriptCommandPanel.vue</code></li>
<li><code>wwwroot-src/src/components/mission/NcOptOptionCommandPanel.vue</code></li>
<li><code>wwwroot-src/src/components/mission/PostExecutionCommandPanel.vue</code></li>
<li><code>wwwroot-src/src/api/mission.ts</code> - Typed wrapper for every <code>/api/Mission/*</code> endpoint</li>
<li><code>wwwroot-src/src/router/routes.ts</code> - <code>/mission</code> route entry</li>
<li><code>Missions/MissionController.cs</code> - REST API endpoints (per-property PUTs; fixed reorder + move)</li>
<li><code>Missions/NcOptOptionEndpoints.cs</code> - NcOptOption per-property PUT endpoints</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,145 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Script Command Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Script Command Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &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="script-command-panel">Script Command Panel</h1>
<p>The key model is <a class="xref" href="../../api/Hi.ShellCommands.ScriptCommand.html">ScriptCommand</a>.</p>
<h2 id="layout">Layout</h2>
<ul>
<li>Head Line
<ul>
<li>Script Title Label</li>
<li>Script Title Text Field</li>
</ul>
</li>
<li>C# Rich Text Editor Area
<ul>
<li>The model is <a class="xref" href="../../api/Hi.ShellCommands.ScriptCommand.html#Hi_ShellCommands_ScriptCommand_ScriptText">ScriptText</a>.</li>
</ul>
</li>
</ul>
<h2 id="source-code-path">Source Code Path</h2>
<p>See <a href="../index.html">this page</a> for git repository.</p>
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
<ul>
<li>Mission/ScriptCommandPanel</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
<ul>
<li><code>wwwroot-src/src/components/mission/ScriptCommandPanel.vue</code> — title + <strong>CodeMirror 6</strong> editor with a Lezer-based C# grammar (<code>@replit/codemirror-lang-csharp</code>) + live autocomplete backed by Roslyn's <code>CompletionService</code>. Explicit Save button with dirty-tracking; inserted text is the plain Roslyn <code>DisplayText</code> (snippet-style placeholders intentionally dropped).</li>
<li><code>wwwroot-src/src/components/mission/csharpCompletionSource.ts</code> — CodeMirror <code>CompletionSource</code> adapter that calls the Roslyn-backed endpoint and maps the response into CM6 <code>Completion</code> records.</li>
<li><code>Missions/ScriptCompletionService.cs</code> — in-process singleton <code>AdhocWorkspace</code> that reuses <code>RuntimeApi.ScriptOptions</code> for completion queries.</li>
<li><code>Missions/ScriptCompletionController.cs</code><code>POST /api/script/completions</code>. Returns <code>{ label, kind, detail }</code> tuples; per-item Roslyn description (<code>GetDescriptionAsync</code>) is deferred.</li>
<li><code>Missions/MissionController.cs</code> — REST endpoints for <code>ScriptText</code> + title per-property PUTs.</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>