fix SoftNcRunner GM code normalization.
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>DictionaryService and DictionaryHub Pattern | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="DictionaryService and DictionaryHub Pattern | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="dictionaryservice-and-dictionaryhub-pattern">DictionaryService and DictionaryHub Pattern</h1>
|
||||
|
||||
<h2 id="overview">Overview</h2>
|
||||
<p>A connection-scoped indexing pattern for referencing backend objects across hierarchical SignalR hub connections.</p>
|
||||
<h2 id="core-components">Core Components</h2>
|
||||
<p><code>DictionaryService</code>: Manages connection-scoped index dictionaries</p>
|
||||
<ul>
|
||||
<li>First layer key: Hub connectionId (auto-generated by SignalR)</li>
|
||||
<li>Second layer key: LocalId (resource name)</li>
|
||||
<li>Value: References to backend objects (functions, getters/setters)</li>
|
||||
</ul>
|
||||
<p><code>DictionaryHub</code>: Base hub that auto-cleans index entries on disconnect</p>
|
||||
<h2 id="architecture">Architecture</h2>
|
||||
<pre><code>Root-Hub
|
||||
└── Child-Hub - has parent's connectionId
|
||||
└── Grandchild-Hub - has parent's connectionId
|
||||
</code></pre>
|
||||
<p>Each hub gets a unique system-generated hub-connectionId. Child hubs receive parent's connectionId to access parent data.</p>
|
||||
<h2 id="key-patterns">Key Patterns</h2>
|
||||
<ol>
|
||||
<li><strong>Parent ConnectionId Passing</strong>: Child hubs copy parent's function references via connectionId</li>
|
||||
<li><strong>Frontend ConnectionId Chain</strong>: Components pass connectionId down the hierarchy</li>
|
||||
<li><strong>Wrapper Function Pattern</strong>: Child hubs should create wrapper functions that dynamically retrieve and invoke parent functions at runtime, rather than directly copying references. This ensures type safety through runtime checking and supports dynamic function updates from the parent.</li>
|
||||
</ol>
|
||||
<h2 id="benefits">Benefits</h2>
|
||||
<ul>
|
||||
<li><strong>Isolation</strong>: Each component has its own connection/index space</li>
|
||||
<li><strong>Nesting Support</strong>: Same components can be nested without conflicts</li>
|
||||
<li><strong>Auto-cleanup</strong>: Index entries cleaned on disconnect</li>
|
||||
<li><strong>Data Inheritance</strong>: Access parent's backend objects via connectionId chain</li>
|
||||
</ul>
|
||||
<h2 id="best-practices">Best Practices</h2>
|
||||
<ul>
|
||||
<li>Apply or inherit from DictionaryHub for auto-cleanup</li>
|
||||
<li>Use meaningful key names (e.g., “transformer-getter”)</li>
|
||||
<li>Always setup dictionary functions unconditionally during initialization - put condition checks inside the functions, not around the setup. This ensures child panels can access functions even when parent objects temporarily don't meet the conditions.</li>
|
||||
</ul>
|
||||
<h2 id="common-pitfalls">Common Pitfalls</h2>
|
||||
<ul>
|
||||
<li>Don't use child's connectionId to index parent's data</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>
|
||||
+123
@@ -0,0 +1,123 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Webapi with hub-cleapup assistence pattern | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Webapi with hub-cleapup assistence pattern | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="webapi-with-hub-cleapup-assistence-pattern">Webapi with hub-cleapup assistence pattern</h1>
|
||||
|
||||
<p>any of the index key should be registerForCleanup. i.e. any of indexXxx should follow the registerForCleanup.</p>
|
||||
<p>clean the indexed key which indexed by the host component in beforeUnmount. And so that the component doesn't clean the key that doesn't create by the component itself.</p>
|
||||
<p>Although cleanupHub clean them for sure, the code demonstrates example of pure web-api cleanup (So that it can be a complete web-api workflow).</p>
|
||||
<h2 id="notice">Notice</h2>
|
||||
<ol>
|
||||
<li>before current key modified, the previous key should be called this.cleanupKey.</li>
|
||||
<li>A twin key should be made from the outside key to keep the lifecycle maintained.</li>
|
||||
</ol>
|
||||
|
||||
</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,327 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Controller Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Controller Page | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="controller-page">Controller Page</h1>
|
||||
|
||||
<p>The Controller Page is responsible for configuring and managing the CNC controller settings for the machine tool.</p>
|
||||
<h2 id="key-models">Key Models</h2>
|
||||
<p>The key models used by the Controller Page are:</p>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a></li>
|
||||
</ul>
|
||||
<p>The <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a> contains <a class="xref" href="../../api/Hi.Numerical.IsoCoordinateEntryDisplayee.html">IsoCoordinateEntryDisplayee</a> and <a class="xref" href="../../api/Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html">HeidenhainCoordinateEntryDisplayee</a>. They are used in this GUI.</p>
|
||||
<h3 id="connection-with-main-panel">Connection with Main Panel</h3>
|
||||
<p>The Controller Page is activated through the <a href="../main-panel.html">Main Panel</a>'s Environment menu. It retrieves the <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> from the Main Panel and updates the model.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Controller Page
|
||||
<ul>
|
||||
<li>Management Panel
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li><a href="../widget/object-management-menu-button.html">Object Management Menu Button</a>
|
||||
<ul>
|
||||
<li>file extension is NcEnv</li>
|
||||
<li>The pointed Editor Panel is Management Tabs Panel</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Management Tabs Panel
|
||||
<ul>
|
||||
<li>Coordinate Table Tab
|
||||
<ul>
|
||||
<li>ISO Coordinate Table Panel
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a>.<a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_IsoCoordinateTable">IsoCoordinateTable</a> Display
|
||||
(Note that The XYZ is not sortable on the table.)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Datum Preset Table Tab (Only visible for <a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Heidenhain">Heidenhain</a> controllers)
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_HeidenhainDatumPresetTable">HeidenhainDatumPresetTable</a> Panel
|
||||
(Note that The XYZ is not sortable on the table.)
|
||||
<ul>
|
||||
<li>Show Datum Preset Toggle Button for <a class="xref" href="../../api/Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html">HeidenhainCoordinateEntryDisplayee</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Datum Shift Table Tab (Only visible for <a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Heidenhain">Heidenhain</a> controllers)
|
||||
(Note that The XYZ is not sortable on the table.)
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_HeidenhainDatumShiftTable">HeidenhainDatumShiftTable</a> Panel</li>
|
||||
<li>Show Datum Shift Toggle Button for <a class="xref" href="../../api/Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html">HeidenhainCoordinateEntryDisplayee</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Offset Table Tab
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.MillingToolOffsetTable.html">MillingToolOffsetTable</a> Panel
|
||||
<ul>
|
||||
<li>Set Ideal Offset Dependent on Tool House Checkbox</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Machine Tab
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_RapidFeedrate_mmdmin">RapidFeedrate_mmdmin</a> Settings</li>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_ToolingTime">ToolingTime</a> Settings</li>
|
||||
<li>Linear Axis Limits Table
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_StrokeLimitXyz_mm">StrokeLimitXyz_mm</a> Min and Max for X, Y, Z</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Rotary Axis Table
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_StrokeLimitAbc_rad">StrokeLimitAbc_rad</a> Min and Max for A, B, C</li>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_MaxRotarySpeedABC_radds">MaxRotarySpeedABC_radds</a> for A, B, C</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Brand Tab
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_CncBrand">CncBrand</a> Selection Dropdown
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Syntec">Syntec</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Fanuc">Fanuc</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Heidenhain">Heidenhain</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Siemens">Siemens</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Brand-specific Settings Panel (content varies based on selected brand)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Config Tab
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_EnableShortestRotary">EnableShortestRotary</a> Setting</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Viewer Panel
|
||||
<ul>
|
||||
<li>Viewer Toolbar
|
||||
<ul>
|
||||
<li><a href="../renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a></li>
|
||||
<li>Rendering Items SubMenu
|
||||
See Rendering Items SubMenu from <a href="../player/player-extended-renderingcanvas-tool-bar.html">Player extended RenderingCanvas Tool Bar</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>RenderingCanvas
|
||||
<ul>
|
||||
<li>The <a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_Displayee">Displayee</a> is <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>Viewer Panel is not essential in the single user desktop application if this page raises a new window so that there arises a duplicate rendering content with the Main Window. This page should have a code-behind boolean property to add / remove the Viewer Panel. There should not preserve space for the un-existed Viewer Panel.</p>
|
||||
<p>Apply <a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToIsometricView">SetViewToIsometricView()</a> on initialization if Viewer Panel has enabled.</p>
|
||||
</div>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>Add a resizable splitter between the Manage Panel and Viewer Panel to allow users to customize the interface layout according to their needs.</p>
|
||||
</div>
|
||||
<h2 id="behavior">Behavior</h2>
|
||||
<h3 id="iso-coordinate-table">ISO Coordinate Table</h3>
|
||||
<p>The ISO coordinate table allows users to edit and manage coordinates for the <a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_IsoCoordinateTable">IsoCoordinateTable</a>. Each entry consists of:</p>
|
||||
<ul>
|
||||
<li>An index identifier</li>
|
||||
<li>X, Y, Z coordinate values</li>
|
||||
<li>Action buttons to set the entry to program zero or machine zero</li>
|
||||
</ul>
|
||||
<p>Row selection updates <a class="xref" href="../../api/Hi.Numerical.IsoCoordinateEntryDisplayee.html#Hi_Numerical_IsoCoordinateEntryDisplayee_IsoCoordinateId">IsoCoordinateId</a>.</p>
|
||||
<h3 id="datum-preset-and-shift-tables-heidenhain">Datum Preset and Shift Tables (Heidenhain)</h3>
|
||||
<p>These tables are specific to <a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Heidenhain">Heidenhain</a> controllers and provide interfaces for:</p>
|
||||
<ul>
|
||||
<li>Setting datum preset positions in <a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_HeidenhainDatumPresetTable">HeidenhainDatumPresetTable</a></li>
|
||||
<li>Configuring datum shifts in <a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_HeidenhainDatumShiftTable">HeidenhainDatumShiftTable</a></li>
|
||||
<li>Visualizing selected datum in the 3D viewer with <a class="xref" href="../../api/Hi.Numerical.HeidenhainCoordinateEntryDisplayee.html">HeidenhainCoordinateEntryDisplayee</a></li>
|
||||
</ul>
|
||||
<h3 id="offset-table">Offset Table</h3>
|
||||
<p>Manages tool offsets with the following capabilities:</p>
|
||||
<ul>
|
||||
<li>Display and edit ideal radius and height values in <a class="xref" href="../../api/Hi.Numerical.MillingToolOffsetTable.html">MillingToolOffsetTable</a></li>
|
||||
<li>Configure radial and axial wear values</li>
|
||||
<li>Option to automatically set ideal offset based on the <a class="xref" href="../../api/Hi.Machining.MachiningToolHouse.html">MachiningToolHouse</a> configuration</li>
|
||||
<li>Add new tool offset entries (when not using tool house dependency)</li>
|
||||
</ul>
|
||||
<h3 id="machine-configuration">Machine Configuration</h3>
|
||||
<p>Controls machine-specific settings:</p>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_RapidFeedrate_mmdmin">RapidFeedrate_mmdmin</a> (mm/min)</li>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_ToolingTime">ToolingTime</a> (seconds)</li>
|
||||
<li>Stroke limits (minimum and maximum) for linear axes (<a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_StrokeLimitXyz_mm">StrokeLimitXyz_mm</a>)</li>
|
||||
<li>Stroke limits and maximum speeds for rotary axes (<a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_StrokeLimitAbc_rad">StrokeLimitAbc_rad</a> and <a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_MaxRotarySpeedABC_radds">MaxRotarySpeedABC_radds</a>)</li>
|
||||
</ul>
|
||||
<h3 id="brand-selection">Brand Selection</h3>
|
||||
<p>Allows switching between different CNC controller brands via <a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_CncBrand">CncBrand</a>:</p>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Syntec">Syntec</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Fanuc">Fanuc</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Heidenhain">Heidenhain</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Siemens">Siemens</a></li>
|
||||
</ul>
|
||||
<p>Each brand may have specialized settings that appear when selected.</p>
|
||||
<h3 id="config-options">Config Options</h3>
|
||||
<p>General configuration options including:</p>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_EnableShortestRotary">EnableShortestRotary</a> optimization</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>Numerical/Controller/ControllerWindow</li>
|
||||
<li>Numerical/Controller/IsoCoordinateTablePanel</li>
|
||||
<li>Numerical/Controller/DatumPresetTablePanel</li>
|
||||
<li>Numerical/Controller/DatumShiftTablePanel</li>
|
||||
<li>Numerical/Controller/OffsetTablePanel</li>
|
||||
<li>Numerical/Controller/MachinePanel</li>
|
||||
<li>Numerical/Controller/BrandPanel</li>
|
||||
<li>Numerical/Controller/ConfigPanel</li>
|
||||
<li>Numerical/Controller/ControllerExtendedRenderingCanvasToolBar</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<p>HiNC-2025-webservice (Quasar CLI SPA) — see <a href="web-implementation.html">web-implementation.md</a> for full detail.</p>
|
||||
<ul>
|
||||
<li><code>Controller/ControllerController.cs</code> — REST endpoints (Initialize + CNC brand + ISO coordinate table + Heidenhain datum preset / shift + Milling tool offset table with row-level CRUD + Machine stroke/speed + Config + Master-axis char).</li>
|
||||
<li><code>wwwroot-src/src/pages/ControllerPage.vue</code> — routed page, two-pane splitter + seven tabs with Heidenhain-conditional visibility + shared rendering viewer.</li>
|
||||
<li><code>wwwroot-src/src/api/controller.ts</code> — typed wrapper covering every Controller endpoint.</li>
|
||||
<li><code>wwwroot-src/src/components/controller/ControllerExtendedToolBar.vue</code> — Display Options dropdown on the viewer toolbar (reuses <code>/api/rendering-flags</code> just like <code>PlayerExtendedToolBar.vue</code>).</li>
|
||||
<li><code>wwwroot-src/src/components/controller/*.vue</code> — per-tab components:
|
||||
<ul>
|
||||
<li><code>CoordinateTableTab.vue</code> — ISO coordinate table (string keys).</li>
|
||||
<li><code>DatumPresetTab.vue</code> — Heidenhain-only datum preset.</li>
|
||||
<li><code>DatumShiftTab.vue</code> — Heidenhain-only datum shift.</li>
|
||||
<li><code>OffsetTableTab.vue</code> — <a class="xref" href="../../api/Hi.Numerical.MillingToolOffsetTable.html">MillingToolOffsetTable</a> editor with row-level CRUD.</li>
|
||||
<li><code>MachineTab.vue</code> — strokes + speeds + rapid feed (rad ↔ deg, rad/s ↔ rpm conversion client-side).</li>
|
||||
<li><code>BrandTab.vue</code> — CNC brand + Heidenhain master-axis character.</li>
|
||||
<li><code>ConfigTab.vue</code> — shortest-rotary toggle.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue</code> — reused object-management dropdown (see <a href="../widget/object-management-menu-button.html">Object Management Menu Button</a>).</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,239 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Controller Page Web Implementation | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Controller Page Web Implementation | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="controller-page-web-implementation">Controller Page Web Implementation</h1>
|
||||
|
||||
<p>This document describes the Quasar-based web implementation of the Controller Page in the <code>HiNC-2025-webservice</code> project.</p>
|
||||
<h2 id="overview">Overview</h2>
|
||||
<p>The Controller Page is built on the Quasar CLI SPA that lives under <code>HiNC-2025-webservice/wwwroot-src/</code>.</p>
|
||||
<p>Top-level structure:</p>
|
||||
<ul>
|
||||
<li>Backend API controller: <code>Controller/ControllerController.cs</code> (extended; see Endpoints).</li>
|
||||
<li>Frontend Vue 3 / TypeScript <code><script setup></code> components: <code>wwwroot-src/src/pages/ControllerPage.vue</code> + seven sibling components under <code>wwwroot-src/src/components/controller/</code>.</li>
|
||||
<li>Typed API wrapper: <code>wwwroot-src/src/api/controller.ts</code>.</li>
|
||||
<li>Shared infrastructure reused unchanged: <code>ObjectManagementMenuButton</code>, <code>RenderingCanvas</code>, <code>RenderingCanvasToolBar</code>, <code>NumericInput</code>, <code>useCleanupHub</code>, <code>projectStore</code>.</li>
|
||||
</ul>
|
||||
<h2 id="backend-implementation">Backend Implementation</h2>
|
||||
<h3 id="endpoints">Endpoints</h3>
|
||||
<p>All endpoints live under <code>Controller/ControllerController.cs</code> (route prefix <code>api/Controller</code>). Endpoints introduced in the 2026-04-19 rebuild are marked <strong>new</strong>.</p>
|
||||
<ul>
|
||||
<li><strong>Initialize</strong>
|
||||
<ul>
|
||||
<li><code>POST /api/Controller/initialize</code> - <strong>new</strong>. Registers the project's <a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a> under a fresh IndexService key so the <code>ObjectManagementMenuButton</code> can target it. Returns <code>{ ncEnvKey, cncBrand }</code>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Brand</strong>
|
||||
<ul>
|
||||
<li><code>GET/PUT /api/Controller/cnc-brand</code> - read / write <a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_CncBrand">CncBrand</a>.</li>
|
||||
<li><code>GET/PUT /api/Controller/heidenhain-master-axis-char</code> - <strong>new</strong>. Exposes <a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_HeidenhainMasterAxisChar">HeidenhainMasterAxisChar</a> as a single-character string (<code>A</code>, <code>B</code>, or <code>C</code>).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>ISO coordinate table</strong> (string keys: <code>G54</code>, ..., <code>G59.9</code>)
|
||||
<ul>
|
||||
<li><code>GET /api/Controller/iso-coordinate-table</code></li>
|
||||
<li><code>PUT /api/Controller/iso-coordinate-table/{index}</code></li>
|
||||
<li><code>POST /api/Controller/iso-coordinate-table/{index}/set-to-program-zero</code></li>
|
||||
<li><code>POST /api/Controller/iso-coordinate-table/{index}/set-to-machine-zero</code></li>
|
||||
<li><code>PUT /api/Controller/iso-coordinate-selection</code> - updates <a class="xref" href="../../api/Hi.Numerical.IsoCoordinateEntryDisplayee.html">IsoCoordinateEntryDisplayee</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Heidenhain datum preset / shift</strong>
|
||||
<ul>
|
||||
<li><code>GET/PUT /api/Controller/heidenhain-datum-preset-table</code> and <code>/{index}</code></li>
|
||||
<li><code>POST /api/Controller/heidenhain-datum-preset-table/{index}/reset</code> - <strong>new</strong>. Resets the entry to zero (matches WPF <code>DatumPresetTablePanel.SetDatumPosition_Click</code>).</li>
|
||||
<li><code>GET/PUT /api/Controller/heidenhain-datum-shift-table</code> and <code>/{index}</code></li>
|
||||
<li><code>POST /api/Controller/heidenhain-datum-shift-table/{index}/reset</code> - <strong>new</strong>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Milling tool offset table</strong> (<a class="xref" href="../../api/Hi.Numerical.MillingToolOffsetTable.html">MillingToolOffsetTable</a>)
|
||||
<ul>
|
||||
<li><code>GET /api/Controller/milling-tool-offset-table</code> - returns <code>Dictionary<int, MillingToolOffsetTableRow></code>.</li>
|
||||
<li><code>PUT /api/Controller/milling-tool-offset-table</code> - whole-table replacement (legacy batch API, still supported).</li>
|
||||
<li><code>PUT /api/Controller/milling-tool-offset-table/{toolId:int}</code> - <strong>new</strong>. Row-level PUT.</li>
|
||||
<li><code>POST /api/Controller/milling-tool-offset-table</code> - <strong>new</strong>. Adds a default-valued row and returns the new tool ID.</li>
|
||||
<li><code>DELETE /api/Controller/milling-tool-offset-table/{toolId:int}</code> - <strong>new</strong>.</li>
|
||||
<li><code>POST /api/Controller/milling-tool-offset-table/{toolId:int}/rename</code> - <strong>new</strong>. Body: <code>int newToolId</code>. Rejects duplicate keys.</li>
|
||||
<li><code>POST /api/Controller/set-ideal-offset-from-toolhouse</code> - recomputes the offset table from the current <code>MachiningToolHouse</code>.</li>
|
||||
<li><code>GET/PUT /api/Controller/ideal-offset-dependent</code> - <code>IsIdealOffsetDependentOnToolHouse</code> toggle.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Machine (strokes, speeds, rapid feed)</strong>
|
||||
<ul>
|
||||
<li><code>GET/PUT /api/Controller/rapid-feedrate</code></li>
|
||||
<li><code>GET/PUT /api/Controller/tooling-time</code></li>
|
||||
<li><code>GET/PUT /api/Controller/stroke-limit-xyz</code> - <code>double[6]</code> in mm.</li>
|
||||
<li><code>GET/PUT /api/Controller/stroke-limit-abc</code> - <code>double[6]</code> in radians.</li>
|
||||
<li><code>GET/PUT /api/Controller/max-rotary-speed-abc</code> - <code>double[3]</code> in rad/s.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Config</strong>
|
||||
<ul>
|
||||
<li><code>GET/PUT /api/Controller/shortest-rotary</code> - <a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_EnableShortestRotary">EnableShortestRotary</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Display</strong>
|
||||
<ul>
|
||||
<li><code>POST /api/Controller/initialize-display/{connectionId}</code> - binds the shared <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a> to the rendering engine keyed by <code>connectionId</code>. The Controller page and Player page share this displayee, so <code>Display Options ▾</code> toggles via the rendering-flags API propagate to both viewers.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="frontend-implementation">Frontend Implementation</h2>
|
||||
<h3 id="pagescontrollerpagevue"><code>pages/ControllerPage.vue</code></h3>
|
||||
<ul>
|
||||
<li>Two-pane <code><q-splitter></code>. Left: management tabs. Right: rendering viewer.</li>
|
||||
<li>Head line: <code>ObjectManagementMenuButton</code> + “Controller” title + status badge; binds to <code>HardNcEnv</code> via the <code>initialize</code> endpoint.</li>
|
||||
<li>Tabs: a <code><q-tabs></code> row with seven tabs. Datum Preset and Datum Shift are gated behind <code>isHeidenhain</code> (<code>cncBrand === CncBrand.Heidenhain</code>), mirroring the WPF <code>UpdateBrandSpecificTabs()</code> behaviour.</li>
|
||||
<li>Viewer: <code>RenderingCanvasToolBar</code> (View dropdown) + <code>ControllerExtendedToolBar</code> (Display Options dropdown) + <code>RenderingCanvas</code>.</li>
|
||||
</ul>
|
||||
<h3 id="srcapicontrollerts"><code>src/api/controller.ts</code></h3>
|
||||
<p>Full-feature typed wrapper. Retains the <code>CncBrand</code> / <code>getCncBrand</code> exports used by <code>PlayerExtendedToolBar.vue</code> so the Player page stays compatible. Adds <code>initializeController</code>, row-level offset-table helpers, master-axis char read/write, and the two new datum reset helpers.</p>
|
||||
<h3 id="per-tab-components-srccomponentscontroller">Per-tab components (<code>src/components/controller/</code>)</h3>
|
||||
<ul>
|
||||
<li><code>CoordinateTableTab.vue</code> - string-keyed ISO coordinate editor (<code>G54</code>, ..., <code>G59.9</code>). P0 / M0 action buttons. Row-click → <code>iso-coordinate-selection</code> so the selected coordinate is highlighted in the viewer.</li>
|
||||
<li><code>DatumPresetTab.vue</code> - Heidenhain-only. Q339 int key. Reset-to-zero action. “Show on Display” icon toggles <code>RenderingFlag.HeidenhainCoordinate</code>.</li>
|
||||
<li><code>DatumShiftTab.vue</code> - Heidenhain-only. D int key. Same structure as DatumPresetTab.</li>
|
||||
<li><code>OffsetTableTab.vue</code> - <a class="xref" href="../../api/Hi.Numerical.MillingToolOffsetTable.html">MillingToolOffsetTable</a> editor. When <code>isIdealOffsetDependentOnToolHouse</code> is on, tool IDs are read-only and a “Refresh from Tool House” button appears. When off, each tool ID is inline-editable via the shared <code>NumericInput</code>, and an Add button creates new rows.</li>
|
||||
<li><code>MachineTab.vue</code> - Rapid Feedrate (mm/min) + Tooling Time (sec) + Linear Stroke (mm) + Rotary Stroke (deg) + Max Rotary Speed (rpm). Client-side unit conversion (rad ↔ deg, rad/s ↔ rpm) in the <code>onStrokeAbcChange</code> / <code>onMaxRotaryChange</code> handlers. Uses <code>NumericInput</code> so the backend's <code>±Infinity</code> default stroke limits display literally.</li>
|
||||
<li><code>BrandTab.vue</code> - <code><q-select></code> with Fanuc / Heidenhain / Mazak / Siemens / Syntec. When Heidenhain, exposes a Master-axis character <code><q-select></code> with options A / B / C. Emits <code>@brand-changed</code> to the parent.</li>
|
||||
<li><code>ConfigTab.vue</code> - “Enable Shortest Rotary Path” toggle + info banner.</li>
|
||||
</ul>
|
||||
<h3 id="controllerextendedtoolbarvue"><code>ControllerExtendedToolBar.vue</code></h3>
|
||||
<p>Thin <code>Display Options ▾</code> wrapper around the shared <code>/api/rendering-flags</code> endpoints, grouped into Solid / Coordinate / Display Aids (the same structure as <code>PlayerExtendedToolBar.vue</code>). The Heidenhain Coordinate row is visible only when the current brand is Heidenhain. Mirrors the win-desktop <code>ControllerExtendedRenderingCanvasToolBar.xaml</code> which is itself a <code>RenderingFlagSubmenu</code> wrapper.</p>
|
||||
<h2 id="integration-points">Integration Points</h2>
|
||||
<ul>
|
||||
<li><strong>Shared displayee with Player</strong>: <code>initialize-display/{connectionId}</code> attaches <code>ProjectDisplayeeService.MachiningProjectDisplayee</code>, so flag toggles on the Controller page's extended toolbar also update the Player viewer.</li>
|
||||
<li><strong>Project reload</strong>: the page is hosted under <code>MainLayout.vue</code>'s <code><keep-alive :key="projectEpoch"></code> wrapper, so it remounts automatically on project open / reload (no explicit project-watch boilerplate in <code>ControllerPage.vue</code>).</li>
|
||||
<li><strong>Cleanup hub</strong>: <code>initialize</code> returns a fresh NcEnv key each time; the page registers it with <code>useCleanupHub</code> so it is dropped on unmount to prevent IndexService leaks.</li>
|
||||
</ul>
|
||||
<h2 id="notable-design-decisions">Notable design decisions</h2>
|
||||
<ul>
|
||||
<li><strong>Row-level tool-offset CRUD</strong> replaces the older “PUT whole table” pattern. Backed by the four endpoints <code>PUT /{toolId}</code> (update one row), <code>POST</code> (add a default-valued row), <code>DELETE /{toolId}</code> (remove one row), and <code>POST /{toolId}/rename</code> (change the tool ID of an existing row).</li>
|
||||
<li><strong>Infinity round-trip</strong>: <code>Program.cs</code> enables <code>JsonNumberHandling.AllowNamedFloatingPointLiterals</code>, and the shared <code>NumericInput.vue</code> already parses / formats <code>Infinity</code>, <code>-Infinity</code>, and <code>NaN</code> strings. Default <code>StrokeLimitXyz_mm</code> of <code>[-Inf, +Inf, ...]</code> is therefore displayed and editable without any special handling in <code>MachineTab.vue</code>.</li>
|
||||
<li><strong>IsoCoordinateTable string keys</strong>: the table is a <code>Dictionary<string, Vec3d></code> with human-readable G-code keys (<code>"G54"</code>, <code>"G59.2"</code>). The frontend consumes this directly - no <code>IndexDisplay</code> computed property is required. See <code>iso-coordinate-table-string-key.md</code> in the Second Brain.</li>
|
||||
<li><strong>Heidenhain-conditional tab visibility</strong> is driven by a single <code>cncBrand: CncBrandValue | null</code> state on the page. <code>BrandTab</code> emits <code>@brand-changed</code>; <code>ObjectManagementMenuButton</code> reloads trigger a full <code>initialize</code> refetch. Switching away from Heidenhain while one of those tabs is active falls back to Coordinate Table.</li>
|
||||
</ul>
|
||||
<h2 id="key-differences-from-wpf-implementation">Key Differences from WPF Implementation</h2>
|
||||
<ol>
|
||||
<li><strong>Dependency-free SPA</strong>: served by the same ASP.NET Core host that provides the REST API; no embedded WPF or web-view bridge.</li>
|
||||
<li><strong>Component architecture</strong>: Vue 3 <code><script setup></code> + Quasar <code><q-tabs></code> / <code><q-splitter></code> / <code><q-markup-table></code> / <code><q-select></code> instead of WPF <code>UserControl</code> + <code>TabControl</code> + <code>DataGrid</code>.</li>
|
||||
<li><strong>Shared displayee</strong>: the Quasar implementation binds <code>MachiningProjectDisplayee</code> once (via <code>initialize-display</code>) and lets the rendering-flags API drive toggles, rather than each WPF tab owning per-tab <code>ShowXxx</code> bool bindings.</li>
|
||||
<li><strong>Granular endpoints</strong>: both the legacy and Quasar implementations split NcEnv into per-property endpoints, but the Quasar implementation additionally introduces row-level CRUD for the tool offset table.</li>
|
||||
<li><strong>Unit conversion</strong>: handled in the per-tab component (rad ↔ deg, rad/s ↔ rpm), same as the legacy draft.</li>
|
||||
</ol>
|
||||
<h2 id="future-enhancements">Future Enhancements</h2>
|
||||
<ul>
|
||||
<li>Undo / redo coordination with <code>HardNcEnv</code>'s change-tracking.</li>
|
||||
<li>Batch updates (debounced “commit all deltas” for high-frequency sliders).</li>
|
||||
<li>Keyboard shortcuts (Arrow keys for row navigation, <code>Enter</code> to commit, <code>Esc</code> to revert inline edits).</li>
|
||||
<li>Additional per-row tooltips explaining each column.</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,136 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>General Rules | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="General Rules | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
<meta name="docfx:navrel" content="../toc.html">
|
||||
<meta name="docfx:tocrel" content="toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="general-rules">General Rules</h1>
|
||||
|
||||
<p>This document describes the common patterns and conventions used throughout the HiNC GUI codebase.</p>
|
||||
<h2 id="message-and-exception-handling">Message and Exception Handling</h2>
|
||||
<p>HiNC uses three independent message categories: <strong>Diagnostic</strong> (<code>IProgress<object></code>), <strong>UI Notification</strong> (<code>MessageBoardUtil</code>), and <strong>App Log</strong> (<code>ILogger</code>). See <a href="../fundamentals/common/message-management.html">Message Management</a> for the full design pattern.</p>
|
||||
<p>For async exception handling, use <code>CatchExceptions</code> with a caller-provided handler:</p>
|
||||
<pre><code class="lang-csharp">await task.CatchExceptions(ex => progress?.Report(ex));
|
||||
</code></pre>
|
||||
<p>The <a href="message-section-on-main-panel.html">Bottom Message Bar</a> displays UI-level notifications. The <a href="session-message-panel/index.html">Session Message Panel</a> displays session diagnostic messages.</p>
|
||||
<h2 id="loose-manner">Loose Manner</h2>
|
||||
<p>The Loose Manner pattern handles rapidly-called synchronous actions where only the last call needs to be effective.</p>
|
||||
<p>The <a class="xref" href="../api/Hi.Common.LooseRunner.html">LooseRunner</a> class manages skippable rapid-calling synchronous actions. When an action is called rapidly, only the last call is executed while previous calls are safely skipped. The <a class="xref" href="../api/Hi.Common.LooseRunner.html#Hi_Common_LooseRunner_TryRun_">TryRun</a> method is used to execute actions in this manner.</p>
|
||||
<p>The <a class="xref" href="../api/Hi.Common.LooseRunner.html">LooseRunner</a> should be disposed when its owner is disposed to ensure proper resource cleanup.</p>
|
||||
<h2 id="gui-file-path-assignment">GUI File Path Assignment</h2>
|
||||
<p>See <a href="widget/gui-file-path-assignment.html">GUI File Path Assignment</a>.</p>
|
||||
<h2 id="numeric-inputoutput-handling">Numeric Input/Output Handling</h2>
|
||||
<p>The <code>numeric-utils.js</code> module handles special floating-point values (such as NaN, Infinity) in web forms. See <a href="widget/numeric-io-utilities.html">Numeric Input/Output Utilities</a> for details.</p>
|
||||
<h2 id="webapi-with-hub-cleapup-assistence-pattern">Webapi with hub-cleapup assistence pattern</h2>
|
||||
<p><a href="common/webapi-with-hub-cleanup-assistence-pattern.html">Webapi with hub-cleapup assistence pattern</a></p>
|
||||
<h2 id="loose-couple">Loose Couple</h2>
|
||||
<p>If model of the UI component is null or mismatch, apply status badge instead of throwing exception to keep UI work.</p>
|
||||
<h2 id="translation-remarks">Translation Remarks</h2>
|
||||
<p>See <a href="translation-remarks.html">Translation Remarks</a>.</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,150 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Box3dControl | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Box3dControl | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="box3dcontrol">Box3dControl</h1>
|
||||
|
||||
<p>The <code>Box3dControl</code> provides a user interface for editing a 3D box defined by its minimum and maximum coordinates.</p>
|
||||
<h2 id="features">Features</h2>
|
||||
<ul>
|
||||
<li>Edit the minimum and maximum coordinates of the box</li>
|
||||
<li>View the calculated dimensions and center of the box</li>
|
||||
<li>Read-Only Mode and Edit Mode</li>
|
||||
<li>There are three sub-edit modes that can be selected in Edit Mode:
|
||||
<ul>
|
||||
<li>Min and Max</li>
|
||||
<li>Min and Dimension</li>
|
||||
<li>Center and Dimension</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="ui-layout">UI Layout</h2>
|
||||
<p>The <code>Box3dControl</code> includes the following UI elements:</p>
|
||||
<ol>
|
||||
<li><strong>Min</strong> Vec3dControl</li>
|
||||
<li><strong>Max</strong> Vec3dControl</li>
|
||||
<li><strong>Dimension</strong> Vec3dControl</li>
|
||||
<li><strong>Center</strong> Vec3dControl</li>
|
||||
</ol>
|
||||
<p>The sub-edit mode rules the controls to readonly or editable.</p>
|
||||
<p>Since the native of <a class="xref" href="../../api/Hi.Geom.Box3d.html">Box3d</a> is that only Min and Max Properties are editable, the other mode requires little additional logic to take effect.</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>Geom/Box3dControl</li>
|
||||
</ul>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/geom/box3d-control.js</li>
|
||||
<li>Geom/Box3dHub.cs</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,141 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>CylindroidControl | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="CylindroidControl | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="cylindroidcontrol">CylindroidControl</h1>
|
||||
|
||||
<p>The <code>CylindroidControl</code> provides a user interface for editing a cylindroid, which is a generalized cylinder defined by a series of radius values along the Z-axis.</p>
|
||||
<h2 id="features">Features</h2>
|
||||
<ul>
|
||||
<li>Edit the Z-radius pairs that define the cylindroid's profile</li>
|
||||
<li>Set the longitude number (resolution) for the cylindroid</li>
|
||||
<li>Add and remove Z-radius pairs</li>
|
||||
</ul>
|
||||
<h2 id="ui-layout">UI Layout</h2>
|
||||
<p>The <code>CylindroidControl</code> includes the following UI elements:</p>
|
||||
<ol>
|
||||
<li><strong>Longitude Number</strong> - A numeric input for setting the resolution of the cylindroid</li>
|
||||
<li><strong>Z-Radius Pairs</strong> - A DataGrid showing the Z-coordinate and radius pairs</li>
|
||||
<li><strong>Add Button</strong> - Adds a new Z-radius pair</li>
|
||||
<li><strong>Remove Button</strong> - Removes the selected Z-radius pair</li>
|
||||
</ol>
|
||||
<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>Geom/CylindroidControl</li>
|
||||
</ul>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/geom/cylindroid-control.js</li>
|
||||
<li>Geom/CylindroidHub.cs</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,137 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Extended Cylinder Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Extended Cylinder 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="extended-cylinder-panel">Extended Cylinder Panel</h1>
|
||||
|
||||
<p>The model is <a class="xref" href="../../api/Hi.Geom.ExtendedCylinder.html">ExtendedCylinder</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Extended Cylinder Panel
|
||||
<ul>
|
||||
<li>FullLength Input Field</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>Geom/ExtendedCylinderControl</li>
|
||||
</ul>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/geom/ExtendedCylinderEditor.vue</code> — FullLength input; reachable through <code>GeometryEditor</code>'s kind dropdown (A3.1).</li>
|
||||
<li><code>wwwroot-src/src/api/geometry.ts</code> — <code>getExtendedCylinder</code> / <code>updateExtendedCylinderFullLength</code> wrappers + <code>createGeometry('ExtendedCylinder', key)</code> factory.</li>
|
||||
<li><code>Geom/ExtendedCylinderController.cs</code> — REST endpoints <code>New</code> / <code>Get</code> / <code>UpdateFullLength</code> / <code>GetFullLength</code>.</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,157 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>GeomCombinationControl | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="GeomCombinationControl | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="geomcombinationcontrol">GeomCombinationControl</h1>
|
||||
|
||||
<p>The <code>GeomCombinationControl</code> provides a user interface for combining multiple geometric objects into a single composite geometry. This is useful for creating complex shapes from simpler primitives.</p>
|
||||
<h2 id="features">Features</h2>
|
||||
<ul>
|
||||
<li>Add multiple geometric objects to the combination</li>
|
||||
<li>Remove selected objects from the combination</li>
|
||||
<li>Edit the properties of each included geometry</li>
|
||||
<li>Support for various geometry types</li>
|
||||
</ul>
|
||||
<h2 id="ui-layout">UI Layout</h2>
|
||||
<p>The <code>GeomCombinationControl</code> includes the following UI elements:</p>
|
||||
<ol>
|
||||
<li><strong>Geometry List</strong> - A ListView showing all the geometries in the combination</li>
|
||||
<li><strong>Add Geometry</strong> - A section for adding new geometries:
|
||||
<ul>
|
||||
<li><strong>Geometry Type</strong> - A combo box for selecting the type of geometry to add</li>
|
||||
<li><strong>Add Button</strong> - Adds a new geometry of the selected type to the combination</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Remove Button</strong> - Removes the selected geometry from the combination</li>
|
||||
<li><strong>Geometry Properties</strong> - A container that shows the appropriate control for editing the selected geometry</li>
|
||||
</ol>
|
||||
<h2 id="supported-geometry-types">Supported Geometry Types</h2>
|
||||
<p>The control supports adding the following geometry types to the combination:</p>
|
||||
<ul>
|
||||
<li>Box3d</li>
|
||||
<li>Cylindroid</li>
|
||||
<li>StlFile</li>
|
||||
<li>TransformationGeom</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>Geom/GeomCombinationControl</li>
|
||||
</ul>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/geom/GeomCombinationEditor.vue</code> — children list with Add / Remove / Clear + per-child inline editors (Box3d / Cylindroid / StlFile; matches the backend <code>AddItem</code> switch). Reachable through <code>GeometryEditor</code> (and nested inside <code>TransformationGeomEditor</code> since <code>TransformationGeomController.CreateGeom</code> accepts <code>"GeomCombination"</code>). (A3.2).</li>
|
||||
<li><code>wwwroot-src/src/api/geometry.ts</code> — <code>getGeomCombination</code> / <code>addGeomCombinationItem</code> / <code>removeGeomCombinationItemAt</code> / <code>clearGeomCombination</code> / <code>indexGeomCombinationItemAt</code> wrappers + <code>createGeometry('GeomCombination', key)</code> factory.</li>
|
||||
<li><code>Geom/GeomCombinationController.cs</code> — REST endpoints <code>New</code> / <code>Get</code> / <code>AddItem</code> / <code>RemoveItemAt</code> / <code>Clear</code> / <code>IndexItemAt</code> / <code>GetCount</code> / <code>GetItemTypeAt</code>.</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,162 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Geometry Management Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Geometry Management 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="geometry-management-panel">Geometry Management Panel</h1>
|
||||
|
||||
<p>Geometry Management Panel get and set a TargetGeometry <a class="xref" href="../../api/Hi.Geom.IStlSource.html">IStlSource</a>.</p>
|
||||
<p>null is acceptable for TargetGeometry.</p>
|
||||
<p>The TargetGeometry can be convert to <a class="xref" href="../../api/Hi.Geom.TransformationGeom.html">TransformationGeom</a> or get out of the <a class="xref" href="../../api/Hi.Geom.TransformationGeom.html">TransformationGeom</a>. The conversion button can be hide by the code-behind property.</p>
|
||||
<p>The TargetGeometry can be convert to <a class="xref" href="../../api/Hi.Geom.GeomCombination.html">GeomCombination</a> or get out of the <a class="xref" href="../../api/Hi.Geom.GeomCombination.html">GeomCombination</a> if there is only one geometry in <a class="xref" href="../../api/Hi.Geom.GeomCombination.html#Hi_Geom_GeomCombination_StlSources">StlSources</a>. The conversion button can be hide by the code-behind property.</p>
|
||||
<p>The geometry type in the</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Geometry Management Panel
|
||||
<ul>
|
||||
<li>Geometry Selection and Conversion Bar
|
||||
<ul>
|
||||
<li>Geometry Type Selection Bar</li>
|
||||
<li><a class="xref" href="../../api/Hi.Geom.TransformationGeom.html">TransformationGeom</a> Conversion Button</li>
|
||||
<li><a class="xref" href="../../api/Hi.Geom.GeomCombination.html">GeomCombination</a> Conversion Button</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Content Panel (varied by the TargetGeometry)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="geometry-type-selection-bar-setting">Geometry Type Selection Bar Setting</h2>
|
||||
<p>See <a href="index.html">Geometry Panels</a> for the various geometry type.</p>
|
||||
<p>The geometries are availible by default:</p>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Geom.Box3d.html">Box3d</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Geom.Cylindroid.html">Cylindroid</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Geom.StlFile.html">StlFile</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Geom.TransformationGeom.html">TransformationGeom</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Geom.GeomCombination.html">GeomCombination</a></li>
|
||||
</ul>
|
||||
<p>The geometries are default hiding but they can be code-behind optionally enabled:</p>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Cbtr.CubeTree.html">CubeTree</a></li>
|
||||
<li><a class="xref" href="../../api/Hi.Geom.ExtendedCylinder.html">ExtendedCylinder</a></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>Geom/GeometryManagementPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/geom/geometry-management-panel.js</li>
|
||||
<li>Geom/GeomHub.cs</li>
|
||||
<li>Geom/GeometryController.cs</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,188 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Geometry Panels | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Geometry Panels | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="geometry-panels">Geometry Panels</h1>
|
||||
|
||||
<p>The Geometry Panels provide GUI components for editing <a href="../../fundamentals/geom/basic-geometry.html">Geometry Objects</a>. The <a href="geom-manage-control.html">Geometry Management Control</a> handles geometry selection, modification, and lifecycle management.</p>
|
||||
<h2 id="basic-geometry-controls">Basic Geometry Controls</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Control</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="box3d-control.html">Box3dControl</a></td>
|
||||
<td>Edits a 3D box defined by min/max coordinates</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="cylindroid-control.html">CylindroidControl</a></td>
|
||||
<td>Edits a cylindroid with radius values along Z-axis</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="stlfile-control.html">StlFileControl</a></td>
|
||||
<td>Loads and manipulates STL files</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="transformation-controls">Transformation Controls</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Control</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="transformation-geom-control.html">TransformationGeomControl</a></td>
|
||||
<td>Applies transformations to geometric objects</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="geom-combination-control.html">GeomCombinationControl</a></td>
|
||||
<td>Combines multiple geometric objects</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="special-controls">Special Controls</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Control</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a href="runtime-geom-panel.html">Runtime Geometry Panel</a></td>
|
||||
<td>Manages runtime geometry (not <a class="xref" href="../../api/Hi.Geom.IStlSource.html">IStlSource</a>, but follows similar patterns)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="extended-cylinder-panel.html">Extended Cylinder Panel</a></td>
|
||||
<td>Extended cylindrical geometry editing</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="source-code-locations">Source Code Locations</h2>
|
||||
<p>See <a href="../index.html">HiNC GUI Architecture</a> for git repository links.</p>
|
||||
<h3 id="wpf-application">WPF Application</h3>
|
||||
<ul>
|
||||
<li><code>Geom/</code></li>
|
||||
</ul>
|
||||
<h3 id="web-application">Web Application</h3>
|
||||
<ul>
|
||||
<li><code>wwwroot/geom/</code></li>
|
||||
<li><code>Geom/GeomHub.cs</code></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,140 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Runtime Geometry Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Runtime Geometry 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="runtime-geometry-panel">Runtime Geometry Panel</h1>
|
||||
|
||||
<p>Key model is <a class="xref" href="../../api/Hi.Cbtr.CubeTreeFile.html">CubeTreeFile</a>.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>The term Runtime Geometry is <a class="xref" href="../../api/Hi.Cbtr.CubeTree.html">CubeTree</a>.</p>
|
||||
</div>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Runtime Geom Panel
|
||||
<ul>
|
||||
<li>File Selector</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>Geom/RuntimeGeomPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/geom/runtime-geom-panel.js</li>
|
||||
<li>Geom/RuntimeGeomHub.cs (to be created)</li>
|
||||
<li>Geom/GeometryController.cs</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,140 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>StlFileControl | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="StlFileControl | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="stlfilecontrol">StlFileControl</h1>
|
||||
|
||||
<p>The <code>StlFileControl</code> provides a user interface for loading and manipulating STL (STereoLithography) files, which are commonly used for representing 3D surface geometry.</p>
|
||||
<h2 id="features">Features</h2>
|
||||
<ul>
|
||||
<li>Load STL files from the file system</li>
|
||||
<li>Display the path of the loaded STL file</li>
|
||||
<li>View basic information about the loaded STL (when available)</li>
|
||||
</ul>
|
||||
<h2 id="ui-layout">UI Layout</h2>
|
||||
<p>The <code>StlFileControl</code> includes the following UI elements:</p>
|
||||
<ol>
|
||||
<li><strong>File Path</strong> - A text box showing the path of the loaded STL file</li>
|
||||
<li><strong>Browse Button</strong> - Opens a file dialog to select an STL file</li>
|
||||
<li><strong>Information Panel</strong> - Displays information about the loaded STL file (when available)</li>
|
||||
</ol>
|
||||
<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>Geom/StlFileControl</li>
|
||||
</ul>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/geom/stlfile-control.js</li>
|
||||
<li>Geom/StlFileHub.cs</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,156 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>TransformationGeomControl | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="TransformationGeomControl | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="transformationgeomcontrol">TransformationGeomControl</h1>
|
||||
|
||||
<p>The <code>TransformationGeomControl</code> provides a user interface for applying transformations to geometric objects. It allows you to wrap any geometry with transformation parameters like scaling, rotation, and translation.</p>
|
||||
<h2 id="features">Features</h2>
|
||||
<ul>
|
||||
<li>Select and edit the base geometry object</li>
|
||||
<li>Apply transformations including scaling, rotation, and translation</li>
|
||||
<li>Preview the transformed geometry</li>
|
||||
</ul>
|
||||
<h2 id="ui-layout">UI Layout</h2>
|
||||
<p>The <code>TransformationGeomControl</code> includes the following UI elements:</p>
|
||||
<ul>
|
||||
<li>Base Geometry - A combo box for selecting the type of base geometry</li>
|
||||
<li>Geometry Properties - A container that shows the appropriate control for the selected geometry type</li>
|
||||
<li><a href="../mech/topo/transformers.html">Transformation Selection Bar</a>
|
||||
<ul>
|
||||
<li>Available options (The dynamic transformer is not avaible):
|
||||
<ul>
|
||||
<li>Null Transform Option (Show if originally existed or code-behind optionally assinged)</li>
|
||||
<li>Identity Transform Option (Show if originally existed or code-behind optionally assinged)</li>
|
||||
<li>Static Translate Option</li>
|
||||
<li>General Transform Option</li>
|
||||
<li>Freeform Transform Option</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="../../fundamentals/mechanism/transformers/index.html">Transformers</a></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-source-code-path">WPF Source Code Path</h3>
|
||||
<ul>
|
||||
<li>Geom/TransformationGeomControl</li>
|
||||
</ul>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/geom/transformation-geom-control.js</li>
|
||||
<li>Geom/TransformationGeomHub.cs (to be created)</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,165 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Rendering Canvas on Web Service Application | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Rendering Canvas on Web Service Application | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="rendering-canvas-on-web-service-application">Rendering Canvas on Web Service Application</h1>
|
||||
|
||||
<h2 id="overview">Overview</h2>
|
||||
<p>In the HiNC-2025-webservice example project, the 3D canvas rendering is handled through a WebSocket-based architecture using SignalR Hub connections.</p>
|
||||
<h2 id="core-component">Core Component</h2>
|
||||
<p>The primary component for 3D canvas rendering:</p>
|
||||
<ul>
|
||||
<li><strong>Location</strong>: <code>wwwroot/disp/rendering-canvas.js</code></li>
|
||||
<li><strong>Purpose</strong>: Manages all 3D canvas rendering operations</li>
|
||||
</ul>
|
||||
<h2 id="connection-management">Connection Management</h2>
|
||||
<h3 id="signalr-hub-connection">SignalR Hub Connection</h3>
|
||||
<ul>
|
||||
<li>Components using WebSocket (corresponding to SignalR Hub) receive a unique Hub <code>connectionId</code></li>
|
||||
<li>The <code>rendering-canvas</code> component maintains a primary <code>connectionId</code></li>
|
||||
<li>This ID serves as the index for all canvas data stream operations</li>
|
||||
</ul>
|
||||
<h3 id="connection-id-naming-convention">Connection ID Naming Convention</h3>
|
||||
<p>In other components, the connection ID may be referenced with different naming patterns:</p>
|
||||
<ul>
|
||||
<li><code>renderingConnectionId</code></li>
|
||||
<li><code>rendering-connectionId</code></li>
|
||||
<li>Similar variations</li>
|
||||
</ul>
|
||||
<h3 id="naming-convention-examples">Naming Convention Examples</h3>
|
||||
<p>Different components may reference the connection ID with various naming patterns:</p>
|
||||
<ul>
|
||||
<li><code>player-panel</code> component: uses <code>renderingConnectionId</code> (<code>wwwroot/player/player-panel.js</code>)</li>
|
||||
<li>Other components may use similar variations like <code>rendering-connectionId</code></li>
|
||||
</ul>
|
||||
<h2 id="data-flow-architecture">Data Flow Architecture</h2>
|
||||
<h3 id="frontend-responsibilities">Frontend Responsibilities</h3>
|
||||
<ul>
|
||||
<li>The <code>rendering-canvas</code> component handles data stream transmission via WebSocket</li>
|
||||
<li>Manages real-time rendering updates through the connection ID</li>
|
||||
</ul>
|
||||
<h3 id="backend-integration">Backend Integration</h3>
|
||||
<p>Multiple backend controllers can specify content to be rendered on the <code>rendering-canvas</code>. The architecture is designed to be flexible and reusable across different features.</p>
|
||||
<h4 id="example-player-controller">Example: Player Controller</h4>
|
||||
<p>One example of backend integration:</p>
|
||||
<ul>
|
||||
<li><strong>File</strong>: <code>Players/PlayerController.cs</code></li>
|
||||
<li><strong>Method</strong>: <code>InitializePlayer</code></li>
|
||||
<li><strong>Purpose</strong>: Initializes player-specific rendering content</li>
|
||||
</ul>
|
||||
<p>This is just one example - any controller in the application can interact with the rendering canvas using the same connection ID mechanism to display different types of 3D content</p>
|
||||
<h2 id="key-points">Key Points</h2>
|
||||
<ul>
|
||||
<li>All canvas data stream operations are indexed by the connection ID</li>
|
||||
<li>The WebSocket connection enables real-time rendering updates</li>
|
||||
<li>The architecture separates rendering logic (frontend) from content specification (backend)</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,196 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>HiNC App Anatomy | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="HiNC App Anatomy | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
<meta name="docfx:navrel" content="../toc.html">
|
||||
<meta name="docfx:tocrel" content="toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="hinc-app-anatomy">HiNC App Anatomy</h1>
|
||||
|
||||
<p>This section is a <strong>transparent, per-component anatomy of the HiNC application family</strong> — the <strong>HiNC-2025-webservice</strong> (the current flagship product: Quasar SPA + ASP.NET Core) and the <strong>HiNC-2025-win-desktop</strong> (the WPF desktop client). Every page dissects one UI component and exposes three layers:</p>
|
||||
<ol>
|
||||
<li><strong>Layout</strong> — the visual / widget tree the user sees.</li>
|
||||
<li><strong>Key Model</strong> — the backing HiAPI types (<a class="xref" href="../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>, <a class="xref" href="../api/Hi.HiNcKits.UserService.html">UserService</a>, …).</li>
|
||||
<li><strong>Source Code Path</strong> — the concrete files (WPF <code>.xaml</code> + Quasar <code>.vue</code> + controller <code>.cs</code>) that implement the component, per application variant.</li>
|
||||
</ol>
|
||||
<p>The sibling <a href="general-rules.html">General Rules</a> describes conventions shared across the anatomy.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>This is <strong>not</strong> a from-scratch build tutorial. It documents how the shipped HiNC apps are put together, so that:</p>
|
||||
<ul>
|
||||
<li>End users can understand exactly what each product screen does and which project model each widget edits.</li>
|
||||
<li>Developers extending HiAPI-based apps can see a live, production-scale example of every building block mapped to its source.</li>
|
||||
<li>AI agents working on the codebase have a single reference for the <em>view ↔ model ↔ source</em> correspondence.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2 id="source-code-repositories">Source Code Repositories</h2>
|
||||
<p>The anatomy covers two codebases in parallel. Each page's <em>Source Code Path</em> section lists the file in each repository that implements the same component.</p>
|
||||
<h3 id="hinc-2025-webservice-current-flagship">HiNC-2025-webservice (current flagship)</h3>
|
||||
<p>Quasar CLI SPA (Vue 3 + TypeScript + Pinia + Quasar) served by ASP.NET Core. This is the primary product delivered to end users today.</p>
|
||||
<ul>
|
||||
<li>Repository: <a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/HiNC-2025-webservice.git">https://superhightech-gitea.webredirect.org/HiNC-Deploy/HiNC-2025-webservice.git</a></li>
|
||||
</ul>
|
||||
<h3 id="hinc-2025-win-desktop">HiNC-2025-win-desktop</h3>
|
||||
<p>Native Windows desktop client built on WPF.</p>
|
||||
<ul>
|
||||
<li>Repository: <a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/HiNC-2025-win-desktop.git">https://superhightech-gitea.webredirect.org/HiNC-Deploy/HiNC-2025-win-desktop.git</a></li>
|
||||
</ul>
|
||||
<h2 id="architecture-patterns">Architecture Patterns</h2>
|
||||
<p>Cross-cutting patterns referenced by many pages:</p>
|
||||
<ul>
|
||||
<li><a href="common/dictionary-service-pattern.html">DictionaryService and DictionaryHub Pattern</a> — Connection-scoped object indexing for hierarchical components.</li>
|
||||
<li><a href="hinc-web-service/disp-web-service.html">Rendering Canvas on Web Service</a> — WebSocket / SignalR-based 3D canvas architecture.</li>
|
||||
</ul>
|
||||
<h2 id="reading-guide">Reading Guide</h2>
|
||||
<p>Jump straight to the component you want to understand. Most readers will land here via an in-text cross-link; the sections below are a browsable index of the anatomy.</p>
|
||||
<h3 id="core-framework">Core Framework</h3>
|
||||
<ul>
|
||||
<li><a href="initialize-hiapi.html">Initialize HiAPI</a> — Application startup and HiAPI bootstrap.</li>
|
||||
<li><a href="main-panel.html">Main Panel</a> — The top-level window / layout shell.</li>
|
||||
<li><a href="message-section-on-main-panel.html">Message Section</a> — Status and notification bar.</li>
|
||||
</ul>
|
||||
<h3 id="rendering-and-visualization">Rendering and Visualization</h3>
|
||||
<ul>
|
||||
<li><a href="renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a> — 3D view-control toolbar.</li>
|
||||
<li><a href="player/index.html">Player Panel</a> — Simulation playback and visualization.</li>
|
||||
</ul>
|
||||
<h3 id="configuration-panels">Configuration Panels</h3>
|
||||
<ul>
|
||||
<li><a href="preference/index.html">Preference Menu</a> — Application settings entry point.</li>
|
||||
<li><a href="preference/graphic-cache-dropdown.html">Graphic-Cache Dropdown</a> — Graphics caching tuning.</li>
|
||||
</ul>
|
||||
<h3 id="geometry-and-mechanism">Geometry and Mechanism</h3>
|
||||
<ul>
|
||||
<li><a href="widget/vec3d/index.html">Widget Components</a> — Reusable primitives (Vec3dControl, NumericInput, …).</li>
|
||||
<li><a href="geom/index.html">Geometry Panels</a> — Geometry creation and management.</li>
|
||||
<li><a href="mech/topo/transformers.html">Transformers</a> — Coordinate-transformation editors.</li>
|
||||
<li><a href="mech/fixture-page.html">Fixture Page</a> — Fixture configuration.</li>
|
||||
<li><a href="mech/workpiece-page.html">Workpiece Page</a> — Workpiece definition.</li>
|
||||
<li><a href="mech/tool-house-page.html">ToolHouse Page</a> — Tool library.</li>
|
||||
</ul>
|
||||
<h3 id="operation">Operation</h3>
|
||||
<ul>
|
||||
<li><a href="controller/index.html">Controller Page</a> — CNC controller settings.</li>
|
||||
<li><a href="mission/index.html">Mission Page</a> — Mission (shell-command sequence) editor.</li>
|
||||
</ul>
|
||||
<h2 id="reading-a-page">Reading a Page</h2>
|
||||
<p>Each anatomy page is structured so the reader can pivot between the three layers in a single glance:</p>
|
||||
<ol>
|
||||
<li>Start at <strong>Layout</strong> to see the widget tree and understand the user-visible structure.</li>
|
||||
<li>Drop down to <strong>Key Model</strong> to learn which backing type each widget edits; click the <code><xref:…></code> links to open the API reference.</li>
|
||||
<li>Finish at <strong>Source Code Path</strong> to open the actual file in each repository. “Web Page Application Source Code Path” is authoritative for the current flagship product; the WPF entry supplies the desktop-client comparison.</li>
|
||||
</ol>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>If you are starting a new application on top of HiAPI and want a step-by-step build guide instead, see <a href="../fundamentals/getting-started/index.html">Getting Started</a>. The anatomy is the reference you keep open while you build; the Getting Started page is the tutorial you follow in sequence.</p>
|
||||
</div>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>If you are using an AI agent to make changes across both apps, point it at the specific anatomy page whose component you are editing. Each page intentionally names the WPF and Quasar source files in lock-step so the agent keeps the two in sync.</p>
|
||||
</div>
|
||||
|
||||
</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,130 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>HiAPI Initialization | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="HiAPI Initialization | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
<meta name="docfx:navrel" content="../toc.html">
|
||||
<meta name="docfx:tocrel" content="toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="hiapi-initialization">HiAPI Initialization</h1>
|
||||
|
||||
<p>The HiNC applications initialize HiAPI at the application entry point using the following methods:</p>
|
||||
<ul>
|
||||
<li><a class="xref" href="../api/Hi.HiNcKits.LocalApp.html#Hi_HiNcKits_LocalApp_AppBegin_">AppBegin</a> - Called at application startup</li>
|
||||
<li><a class="xref" href="../api/Hi.HiNcKits.LocalApp.html#Hi_HiNcKits_LocalApp_AppEnd_">AppEnd</a> - Called on application shutdown</li>
|
||||
</ul>
|
||||
<p>These methods handle the initialization and release of:</p>
|
||||
<ul>
|
||||
<li>Licensing</li>
|
||||
<li>Display engine</li>
|
||||
<li>Background resources</li>
|
||||
</ul>
|
||||
<div class="IMPORTANT">
|
||||
<h5>Important</h5>
|
||||
<p>Both DI-based and legacy flow implementations require calling <code>LocalApp.AppBegin()</code> at startup and <code>LocalApp.AppEnd()</code> on shutdown.</p>
|
||||
</div>
|
||||
|
||||
</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,241 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Main Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Main 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="main-panel">Main Panel</h1>
|
||||
|
||||
<p>The Main Panel is the primary window of the HiNC application, providing navigation and access to all major features.</p>
|
||||
<h2 id="key-models">Key Models</h2>
|
||||
<ul>
|
||||
<li>Project Service
|
||||
<ul>
|
||||
<li><strong>WPF Single-User Desktop Application</strong>: Uses self-hosted <a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a></li>
|
||||
<li><strong>Web Service Application</strong>: Service inherits from <a class="xref" href="../api/Hi.MachiningProcs.IProjectService.html">IProjectService</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>User Service</strong>: <a class="xref" href="../api/Hi.HiNcKits.UserService.html">UserService</a></li>
|
||||
</ul>
|
||||
<h2 id="layout-structure">Layout Structure</h2>
|
||||
<ul>
|
||||
<li>Top <code>Navigation Menu</code>
|
||||
<ul>
|
||||
<li><code>Project Menu Dropdown</code>
|
||||
<ul>
|
||||
<li><code>Project Path Text Field</code></li>
|
||||
<li><code>New MenuItem</code></li>
|
||||
<li><code>Load MenuItem</code></li>
|
||||
<li><code>Save MenuItem</code></li>
|
||||
<li><code>Save As MenuItem</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><code>Environment Menu Dropdown</code>
|
||||
<ul>
|
||||
<li>Machine Tool MenuItem
|
||||
Open <a href="mech/machining-chain-page.html">Machine Tool Page</a>
|
||||
Sole window in WPF app.
|
||||
The page manages <a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_MachiningEquipment">MachiningEquipment</a>.<a class="xref" href="../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_MachiningChain">MachiningChain</a>.</li>
|
||||
<li>Controller MenuItem
|
||||
Open <a href="controller/index.html">Controller Page</a></li>
|
||||
<li>Tool House MenuItem</li>
|
||||
<li>Fixture MenuItem
|
||||
Open <a href="mech/fixture-page.html">Fixture Page</a></li>
|
||||
<li>Workpiece MenuItem
|
||||
Open <a href="mech/workpiece-page.html">Workpiece Page</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Mission MenuItem
|
||||
Open <a href="mission/index.html">Mission Page</a></li>
|
||||
<li>Player MenuItem
|
||||
Link to <a href="player/index.html">Player Panel</a>
|
||||
(Not exist on WPF app.)</li>
|
||||
<li>Player Belonged Tool Bars. See <a href="player/index.html">Player Panel</a>. Shows only if the Main Panel content is Player Panel.</li>
|
||||
<li><a href="preference/index.html">Preference Menu Dropdown</a></li>
|
||||
<li>Help MenuItem
|
||||
<ul>
|
||||
<li>HiAPI Version label
|
||||
A label to show the HiNc library version.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Log MenuItem
|
||||
Open Log Viewer to display application logs for the current day.
|
||||
The Log Viewer provides real-time access to system logs with filtering and download capabilities.
|
||||
It reads log files from the server's log directory and presents them in a formatted, searchable interface.
|
||||
Users can refresh the log content or download the current day's log file for offline analysis.</li>
|
||||
<li>Central <code>Page Panel</code></li>
|
||||
<li><a href="message-section-on-main-panel.html">Message Section on Main Panel</a></li>
|
||||
</ul>
|
||||
<h2 id="project-menu-behavior">Project Menu Behavior</h2>
|
||||
<p>The <code>Project Path Text Field</code> displays the current project path when a project is loaded. It is implemented as a pure text field (not a button) that allows users to select and copy the path.</p>
|
||||
<p>The <code>Project</code> Menu manages <a class="xref" href="../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> with the following operations:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Operation</th>
|
||||
<th>Description</th>
|
||||
<th>Example</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>New</td>
|
||||
<td>Creates a new project</td>
|
||||
<td>See <a class="xref" href="../sample/Sample.Machining.DemoBuildGeomOnlyMachiningProject.html">DemoBuildGeomOnlyMachiningProject</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Load</td>
|
||||
<td>Opens an existing project</td>
|
||||
<td>See <a class="xref" href="../sample/Sample.Machining.DemoUseMachiningProject.html">DemoUseMachiningProject</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Save</td>
|
||||
<td>Saves the current project</td>
|
||||
<td>See <a class="xref" href="../sample/Sample.Machining.DemoBuildGeomOnlyMachiningProject.html">DemoBuildGeomOnlyMachiningProject</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Save As</td>
|
||||
<td>Saves the project to a new location</td>
|
||||
<td>See <a class="xref" href="../sample/Sample.Machining.DemoBuildGeomOnlyMachiningProject.html">DemoBuildGeomOnlyMachiningProject</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>All operation results (success or exception) are displayed via <a class="xref" href="../api/Hi.Common.Messages.MultiTagMessageUtil.html">MultiTagMessageUtil</a>. When a project is loaded, the Player Panel's RenderingCanvas is set to isometric view using <a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToIsometricView">SetViewToIsometricView()</a>.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>The implementation uses static functions of <a class="xref" href="../api/Hi.Common.Messages.MultiTagMessageUtil.html">MultiTagMessageUtil</a> for message handling. Async operations ensure smooth user experience during file I/O.</p>
|
||||
</div>
|
||||
<h2 id="platform-specific-differences">Platform-Specific Differences</h2>
|
||||
<h3 id="wpf-application">WPF Application</h3>
|
||||
<ul>
|
||||
<li>Only a single instance of each sub-window (Mission, Workpiece, Fixture) can exist at a time</li>
|
||||
<li>The Player MenuItem does not exist in the WPF version, as the Main Panel itself serves as the Player Panel</li>
|
||||
</ul>
|
||||
<h3 id="web-application">Web Application</h3>
|
||||
<ul>
|
||||
<li>The Player Panel is the default panel displayed on the main page</li>
|
||||
<li>The page URL and panel state are synchronized (bi-directional navigation)</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>
|
||||
<h3 id="wpf-application-1">WPF Application</h3>
|
||||
<ul>
|
||||
<li><code>MainWindow</code></li>
|
||||
</ul>
|
||||
<h3 id="web-application-1">Web Application</h3>
|
||||
<ul>
|
||||
<li><code>Environments/PreferenceController.cs</code></li>
|
||||
<li><code>Environments/ProjectController.cs</code></li>
|
||||
<li><code>wwwroot/app.js</code></li>
|
||||
<li><code>wwwroot/index.html</code></li>
|
||||
<li><code>wwwroot/preference/log-viewer.js</code></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,179 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Background / Coolant Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Background / Coolant Page | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="background--coolant-page">Background / Coolant Page</h1>
|
||||
|
||||
<p>The Background / Coolant page edits three thermal scalars on the current project's <a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html">MachiningEquipment</a>:</p>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_BackgroundTemperature_C">BackgroundTemperature_C</a></li>
|
||||
<li><code>CoolantHeatCondition.CoolantTemperature_C</code></li>
|
||||
<li><code>CoolantHeatCondition.CoolantConvectionCoefficient_Wdm2K</code></li>
|
||||
</ul>
|
||||
<p>Key Model: <a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html">MachiningEquipment</a> (+ its <code>CoolantHeatCondition</code>).</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>This page exists only in the Quasar webservice. The WPF desktop app has no equivalent; the values are edited via scripting or XML.</p>
|
||||
</div>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Background / Coolant Page
|
||||
<ul>
|
||||
<li>Background Card
|
||||
<ul>
|
||||
<li>Background Temperature NumberField (°C) — <a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_BackgroundTemperature_C">BackgroundTemperature_C</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Coolant Card
|
||||
<ul>
|
||||
<li>“Not attached” badge — visible until the first coolant-related save (see <em>Lazy CoolantHeatCondition creation</em> below).</li>
|
||||
<li>Coolant Temperature NumberField (°C) — <code>CoolantHeatCondition.CoolantTemperature_C</code>.</li>
|
||||
<li>Coolant Convection Coefficient NumberField (W/(m²·K)) — <code>CoolantHeatCondition.CoolantConvectionCoefficient_Wdm2K</code>. Clamped to <code>min: 0</code>.</li>
|
||||
<li>Sanity-range hint — echoes the table from <code>CoolantHeatCondition.cs</code> doc-comments (forced air 10–500, typical coolant 1000–10000).</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="behavior">Behavior</h2>
|
||||
<ul>
|
||||
<li><strong>Lazy <code>CoolantHeatCondition</code> creation.</strong> If the machining equipment has no <code>CoolantHeatCondition</code> yet, the first write lazy-creates one server-side so the page can edit a fresh project before the operator explicitly attaches a coolant condition. The “not attached” badge disappears once the first value is saved.</li>
|
||||
<li><strong>Celsius is the wire format.</strong> <code>CoolantHeatCondition</code> stores Kelvin internally but exposes <code>_C</code> getters that handle the conversion.</li>
|
||||
<li><strong>No file IO.</strong> Background / coolant settings are part of the <code>.hincproj</code> save; there's no separate file to load.</li>
|
||||
<li><strong>Infinity round-trip.</strong> <code>NumericInput</code> handles <code>Infinity</code> for free. Background and coolant temperatures allow negatives (e.g. -40 °C for cryogenic coolant); the convection coefficient is clamped to <code>min: 0</code>.</li>
|
||||
</ul>
|
||||
<h2 id="source-code-path">Source Code Path</h2>
|
||||
<p>See <a href="../index.html">HiNC App Anatomy</a> for git repository links.</p>
|
||||
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>Not implemented.</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/pages/BackgroundCoolantPage.vue</code> — routed page at <code>/equipment/background-coolant</code>.</li>
|
||||
<li><code>wwwroot-src/src/api/backgroundCoolant.ts</code> — typed wrapper over <code>/api/mech/background-coolant/*</code>.</li>
|
||||
<li><code>wwwroot-src/src/router/routes.ts</code> — <code>/equipment/background-coolant</code> entry.</li>
|
||||
<li><code>wwwroot-src/src/layouts/AppMenuBar.vue</code> — <code>Environment → Background / Coolant</code> menu entry below Workpiece.</li>
|
||||
<li><code>Mech/BackgroundCoolantController.cs</code> — REST endpoints:
|
||||
<ul>
|
||||
<li><code>GET /api/mech/background-coolant</code> — flat snapshot <code>{ hasEquipment, backgroundTemperature_C, hasCoolant, coolantTemperature_C, coolantConvectionCoefficient_Wdm2K }</code>.</li>
|
||||
<li><code>PUT /background-temperature-c</code> — set <a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_BackgroundTemperature_C">BackgroundTemperature_C</a>.</li>
|
||||
<li><code>PUT /coolant-temperature-c</code> — lazy-creates <code>CoolantHeatCondition</code> if needed, then sets <code>CoolantTemperature_C</code>.</li>
|
||||
<li><code>PUT /coolant-convection-coefficient-wdm2k</code> — same pattern for the heat-transfer coefficient.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="related-pages">Related Pages</h2>
|
||||
<ul>
|
||||
<li><a href="spindle-capability-page.html">Spindle Capability Page</a> — sibling under <code>Environment</code>, also targets <code>MachiningEquipment</code>.</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,151 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>APT Profile Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="APT Profile 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="apt-profile-panel">APT Profile Panel</h1>
|
||||
|
||||
<p>The main model is <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html">AptProfile</a> and its property <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html">AptProfile</a>.<a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Apt">Apt</a>.</p>
|
||||
<p>See <a href="../../../manual/setup/apt.html">APT Cutter Definition</a>. <a class="xref" href="../../../api/Hi.Milling.Apts.GeneralApt.html">GeneralApt</a> is the generalization of other <a class="xref" href="../../../api/Hi.Milling.Apts.IAptBased.html">IAptBased</a> types.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>APT Profile Panel
|
||||
<ul>
|
||||
<li>Diameter Input Field (mm)</li>
|
||||
<li>Round Radius Input Field (mm)
|
||||
Visibly if <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Apt">Apt</a> is <a class="xref" href="../../../api/Hi.Milling.Apts.IAptRc.html">IAptRc</a></li>
|
||||
<li>Round Ring Radius Input Field(mm)
|
||||
Visibly if <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Apt">Apt</a> is <a class="xref" href="../../../api/Hi.Milling.Apts.IAptRr.html">IAptRr</a></li>
|
||||
<li>Round Ring Height Input Field(mm)
|
||||
Visibly if <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Apt">Apt</a> is <a class="xref" href="../../../api/Hi.Milling.Apts.IAptRz.html">IAptRz</a></li>
|
||||
<li>Bottom Cone Angle Input Field (deg)
|
||||
Visibly if <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Apt">Apt</a> is <a class="xref" href="../../../api/Hi.Milling.Apts.IAptAlpha.html">IAptAlpha</a></li>
|
||||
<li>Top Cone Angle Input Field (deg)
|
||||
Visibly if <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Apt">Apt</a> is <a class="xref" href="../../../api/Hi.Milling.Apts.IAptBeta.html">IAptBeta</a></li>
|
||||
<li>Length of Cut Input Field (mm)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>Keep field format “G4”</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>Mech/ToolHouse/AptProfilePanel</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/cutter/apt-profile-panel.js</li>
|
||||
<li>Controller/Mech/MechController.cs</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,200 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Freeform Remover Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Freeform Remover 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="freeform-remover-panel">Freeform Remover Panel</h1>
|
||||
|
||||
<p>The key model is <a class="xref" href="../../../api/Hi.Machining.FreeformRemover.html">FreeformRemover</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Freeform Remover Panel
|
||||
<ul>
|
||||
<li>Tabs
|
||||
<ul>
|
||||
<li>Strut Geometry Tab
|
||||
<ul>
|
||||
<li><a href="../../geom/geom-manage-control.html">Geometry Management Panel</a>
|
||||
<ul>
|
||||
<li>Manages <a class="xref" href="../../../api/Hi.Machining.FreeformRemover.html#Hi_Machining_FreeformRemover_StrutGeom">StrutGeom</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Shaper Geometry Tab
|
||||
<ul>
|
||||
<li><a href="../../geom/geom-manage-control.html">Geometry Management Panel</a>
|
||||
<ul>
|
||||
<li>Manages <a class="xref" href="../../../api/Hi.Machining.FreeformRemover.html#Hi_Machining_FreeformRemover_ShaperGeom">ShaperGeom</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Anchor Tab
|
||||
<ul>
|
||||
<li>Label: Geometry Anchor To Holder Buckle</li>
|
||||
<li><a class="xref" href="../../../api/Hi.Machining.FreeformRemover.html#Hi_Machining_FreeformRemover_KeepHolderBuckleOnTop">KeepHolderBuckleOnTop</a> Checkbox</li>
|
||||
<li><a href="../topo/transformers.html">Transformer Manage Panel</a>
|
||||
<ul>
|
||||
<li>Model is <a class="xref" href="../../../api/Hi.Machining.FreeformRemover.html#Hi_Machining_FreeformRemover_GeomToHolderTransformer">GeomToHolderTransformer</a></li>
|
||||
<li>Enabled if <a class="xref" href="../../../api/Hi.Machining.FreeformRemover.html#Hi_Machining_FreeformRemover_KeepHolderBuckleOnTop">KeepHolderBuckleOnTop</a> is true.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Property Tab
|
||||
<ul>
|
||||
<li>Is Spinning Cutter Checkbox
|
||||
<ul>
|
||||
<li>Controls <a class="xref" href="../../../api/Hi.Machining.FreeformRemover.html#Hi_Machining_FreeformRemover_IsSpinningCutter">IsSpinningCutter</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Info Tab
|
||||
<ul>
|
||||
<li>Name TextField (editable)</li>
|
||||
<li>AbstractNote TextField (readonly)</li>
|
||||
<li>Note TextField (editable)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="geometry-definitions">Geometry Definitions</h2>
|
||||
<ul>
|
||||
<li><strong>Strut Geometry</strong> - The non-cutting portion (holder/shank)
|
||||
<ul>
|
||||
<li>Used for collision detection</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Shaper Geometry</strong> - The cutting portion
|
||||
<ul>
|
||||
<li>Defines cutting surfaces</li>
|
||||
<li>Used for material removal simulation</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="implementation-note">Implementation Note</h2>
|
||||
<p>Remember to call <a class="xref" href="../../../api/Hi.Machining.FreeformRemover.html#Hi_Machining_FreeformRemover_ClearCache">ClearCache()</a> after geometry changes.</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>Mech/ToolHouse/FreeformRemoverPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/cutter/freeform-remover-panel.js</li>
|
||||
<li>Controller/Mech/MechController.cs</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,161 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Cutter Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Cutter 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="cutter-panel">Cutter Panel</h1>
|
||||
|
||||
<h2 id="overview">Overview</h2>
|
||||
<p>The key component is <a class="xref" href="../../../api/Hi.Machining.ICutter.html">ICutter</a>.</p>
|
||||
<p>The Cutter Panel is used to manage cutting tool definitions in HiNC. It supports two main types of cutting tools: <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html">MillingCutter</a> and <a class="xref" href="../../../api/Hi.Machining.FreeformRemover.html">FreeformRemover</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Cutter Panel
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li><a href="../../widget/object-management-menu-button.html">Object Management Menu Button</a>
|
||||
<ul>
|
||||
<li>File extension is <code>.Cutter</code></li>
|
||||
<li>The pointed Editor Panel is Cutter Management Panel</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Title Label</li>
|
||||
<li>Cutter Type Selection Dropdown
|
||||
<ul>
|
||||
<li>Options: Milling Cutter, Freeform Remover, Unset</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Cutter Management Panel
|
||||
Varies by the Cutter Type. It can be:
|
||||
<ul>
|
||||
<li><a href="milling-cutter-panel.html">Milling Cutter Panel</a></li>
|
||||
<li><a href="freeform-remover-panel.html">Freeform Remover Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="features">Features</h2>
|
||||
<p>Since <a class="xref" href="../../../api/Hi.Machining.ICutter.html">ICutter</a> implements <a class="xref" href="../../../api/Hi.Common.IClearCache.html">IClearCache</a>, remember to call the <a class="xref" href="../../../api/Hi.Common.IClearCache.html#Hi_Common_IClearCache_ClearCache_">ClearCache</a> method when the cutter geometry or properties change to ensure proper updates in simulation.</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>Mech/ToolHouse/CutterManagementPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/cutter/cutter-management-panel.js</li>
|
||||
<li>Controller/Mech/MechController.cs</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,451 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Milling Cutter Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Milling Cutter 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="milling-cutter-panel">Milling Cutter Panel</h1>
|
||||
|
||||
<p>The key model is <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html">MillingCutter</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Milling Cutter Panel
|
||||
<ul>
|
||||
<li>Tabs
|
||||
<ul>
|
||||
<li><a href="#flute-profile-tab">Flute-Profile Tab</a></li>
|
||||
<li>Upper-Beam Tab
|
||||
<ul>
|
||||
<li><a href="../../geom/geom-manage-control.html">Geometry Management Control</a>
|
||||
<a class="xref" href="../../../api/Hi.Geom.ExtendedCylinder.html">ExtendedCylinder</a> option is enabled.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a href="#property-tab">Property Tab</a></li>
|
||||
<li><a href="#insert-cutter-tab">Insert-Cutter Tab</a></li>
|
||||
<li><a href="#material-tab">Material Tab</a></li>
|
||||
<li><a href="#flute-contours-tab">Flute-Contours Tab</a></li>
|
||||
<li><a href="#flute-inner-beam-tab">Flute-Inner-Beam Tab</a></li>
|
||||
<li><a href="#optimization-tab">Optimization Tab</a></li>
|
||||
<li>Info Tab
|
||||
<ul>
|
||||
<li>Name TextField (editable)</li>
|
||||
<li>AbstractNote TextField (readonly)</li>
|
||||
<li>Note TextField (editable)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="flute-profile-tab">Flute-Profile Tab</h3>
|
||||
<ul>
|
||||
<li>Profile Type Selection Dropdown
|
||||
<ul>
|
||||
<li>APT General (<a class="xref" href="../../../api/Hi.Milling.Apts.GeneralApt.html">GeneralApt</a>)</li>
|
||||
<li>APT Ball (<a class="xref" href="../../../api/Hi.Milling.Apts.BallApt.html">BallApt</a>)</li>
|
||||
<li>APT Column (<a class="xref" href="../../../api/Hi.Milling.Apts.ColumnApt.html">ColumnApt</a>)</li>
|
||||
<li>APT Cone (<a class="xref" href="../../../api/Hi.Milling.Apts.ConeApt.html">ConeApt</a>)</li>
|
||||
<li>APT Taper (<a class="xref" href="../../../api/Hi.Milling.Apts.TaperApt.html">TaperApt</a>)</li>
|
||||
<li>Custom Spinning Profile (<a class="xref" href="../../../api/Hi.Milling.Cutters.CustomSpinningProfile.html">CustomSpinningProfile</a>)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Profile Configuration Panel
|
||||
<ul>
|
||||
<li>Dynamic component based on selected profile type</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>See <a class="xref" href="../../../sample/Sample.Machining.DemoBuildMachiningProject.html">DemoBuildMachiningProject</a> for creating the apt profile and setting to the cutter.</p>
|
||||
<p>See <a href="apt-profile-panel.html">APT Panel</a> for APT-based Profile Configuration Panel. The APT series option is all wrap by <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html">AptProfile</a> but with different property <a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html">AptProfile</a>.<a class="xref" href="../../../api/Hi.Milling.Cutters.AptProfile.html#Hi_Milling_Cutters_AptProfile_Apt">Apt</a> assigned.</p>
|
||||
<ul>
|
||||
<li>Custom Spinning Profile Panel
|
||||
<ul>
|
||||
<li><a href="../../geom/geom-manage-control.html">Geometry Management Control</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="property-tab">Property Tab</h3>
|
||||
<p>Visible if <a class="xref" href="../../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true.</p>
|
||||
<ul>
|
||||
<li>Integral Mode Selection Dropdown
|
||||
<ul>
|
||||
<li>Solid End</li>
|
||||
<li>Insert End</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Cutter/Shank Mass Input Field (g)
|
||||
<ul>
|
||||
<li>Show the label ‘Cutter Mass’ if the Cutter is Solid End Integral Mode; Show the label ‘Shank Mass’ if the Cutter is Insert End Integral Mode.</li>
|
||||
<li>Value format “G4”</li>
|
||||
<li>Auto Update CheckBox
|
||||
The model is <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_ShankMassAssignmentMode">ShankMassAssignmentMode</a>.
|
||||
<ul>
|
||||
<li>When enabled: field becomes readonly and shows calculated value.</li>
|
||||
<li>When disabled: field is editable</li>
|
||||
<li>Functionality Note: The value is calculate by the volume and density. The volume is the inner beam volume and the upper beam volume.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Hone Radius (μm) Input Field</li>
|
||||
<li>Relief Angle (deg) Input Field</li>
|
||||
<li>Minimum Available Cutting Thickness (μm)
|
||||
<ul>
|
||||
<li>Readonly field with format “G4”</li>
|
||||
<li>Shows calculated value from <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_GetMinimumUncutChipThickness_um_Hi_MillingForces_Fittings_ICuttingPara_">GetMinimumUncutChipThickness_um(ICuttingPara)</a>. The argument (cutting parameter) is obtained by the <a class="xref" href="../../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_Workpiece">Workpiece</a>.<a class="xref" href="../../../api/Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_CuttingPara">CuttingPara</a>. Series pass the models by the GUI if needed.</li>
|
||||
<li>Note Label
|
||||
<ul>
|
||||
<li>Show Workpiece Cutting Parameter Name.
|
||||
Label Text "Reference: Workpiece Cutting Parameter - {<a class="xref" href="../../../api/Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_CuttingPara">CuttingPara</a>.<a class="xref" href="../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>}".
|
||||
Since the thickness depdents on the Workpiece Cutting Parameter and hone radius.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="insert-cutter-tab">Insert-Cutter Tab</h3>
|
||||
<p>Visible if <a class="xref" href="../../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true and Integral Mode is Insert End.</p>
|
||||
<ul>
|
||||
<li>Insert Number Input field</li>
|
||||
<li>Insert Mass Input field (g)
|
||||
<ul>
|
||||
<li>Format “G4”</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Insert Thickness Input field (mm)
|
||||
<ul>
|
||||
<li>Format “G4”</li>
|
||||
<li>The Insert Thickness is for computing heat transfer.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="material-tab">Material Tab</h3>
|
||||
<p>Visible if <a class="xref" href="../../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true.</p>
|
||||
<ul>
|
||||
<li>Shank Material (visible only for Integral Mode is Insert End mode)
|
||||
<ul>
|
||||
<li>Material File Selector
|
||||
Apply <a class="xref" href="../../../api/Hi.Physics.IStructureMaterial.html">IStructureMaterial</a>
|
||||
<ul>
|
||||
<li>Menu Dropdown
|
||||
<ul>
|
||||
<li>Browse Button</li>
|
||||
<li>Browse Resource Button</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Readonly Name TextBox (<a class="xref" href="../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>)
|
||||
<ul>
|
||||
<li>ToolTip by <a class="xref" href="../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Note">Note</a> from the material</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Flute Material
|
||||
<ul>
|
||||
<li>Material File Selector
|
||||
Apply <a class="xref" href="../../../api/Hi.Physics.CutterMaterial.html">CutterMaterial</a>
|
||||
<ul>
|
||||
<li>Menu Dropdown
|
||||
<ul>
|
||||
<li>Browse Button</li>
|
||||
<li>Browse Resource Button</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Readonly Name TextBox (<a class="xref" href="../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>)
|
||||
<ul>
|
||||
<li>ToolTip by <a class="xref" href="../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Note">Note</a> from the material</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Coating Panel
|
||||
<ul>
|
||||
<li>Show note that the sequence starts from surface, i.e. from outer to inner.</li>
|
||||
<li>Manages <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_CoatingLayerList">CoatingLayerList</a>
|
||||
<ul>
|
||||
<li>Exists sequence management.</li>
|
||||
<li>The first layer has the remark: Air-Exposing Coating.</li>
|
||||
<li><a class="xref" href="../../../api/Hi.Physics.ThermalLayer1D.html">ThermalLayer1D</a> Component
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<ul>
|
||||
<li>Keep the child components to one line.</li>
|
||||
<li>After Coating Material is manual loaded, set the <a class="xref" href="../../../api/Hi.Physics.CoatingMaterial.html#Hi_Physics_CoatingMaterial_PreferedThickness_um">PreferedThickness_um</a> to the <a class="xref" href="../../../api/Hi.Physics.ThermalLayer1D.html#Hi_Physics_ThermalLayer1D_Length_um">Length_um</a> and update the corresponding field.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<ul>
|
||||
<li>Coating Material
|
||||
<ul>
|
||||
<li>Material File Selector
|
||||
Apply <a class="xref" href="../../../api/Hi.Physics.CoatingMaterial.html">CoatingMaterial</a>
|
||||
<ul>
|
||||
<li>Menu Dropdown
|
||||
<ul>
|
||||
<li>Browse Button</li>
|
||||
<li>Browse Resource Button</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Readonly Name TextBox (<a class="xref" href="../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>)
|
||||
<ul>
|
||||
<li>ToolTip by <a class="xref" href="../../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Note">Note</a> from the material</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Thickness Input Field (um) (editable)
|
||||
<ul>
|
||||
<li><a class="xref" href="../../../api/Hi.Physics.ThermalLayer1D.html#Hi_Physics_ThermalLayer1D_Length_um">Length_um</a></li>
|
||||
<li>Use format “G4”</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>If the cutter is Solid End, the Shank Material should keep the same with Flute Material. i.e. Set the Shank Material when Flute Material set.</p>
|
||||
<h4 id="default-resource">Default Resource</h4>
|
||||
<p>The default resources of Material exist in <code>Resource</code> folder under application folder (Not project folder). Set the corresponding default folder of the File Selector to the <code>Resource</code> sub folder:</p>
|
||||
<ul>
|
||||
<li>“Resource/StructureMaterial”</li>
|
||||
<li>“Resource/CutterMaterial”</li>
|
||||
<li>“Resource/CoatingMaterial”</li>
|
||||
</ul>
|
||||
<h3 id="flute-contours-tab">Flute-Contours Tab</h3>
|
||||
<p>Visible if <a class="xref" href="../../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true.</p>
|
||||
<p>This part manages <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_FluteContourTray">FluteContourTray</a>.</p>
|
||||
<ul>
|
||||
<li>Contour Tray Selection Dropdown
|
||||
<ul>
|
||||
<li>Uniform Contour Tray (<a class="xref" href="../../../api/Hi.Milling.FluteContours.UniformContourTray.html">UniformContourTray</a>)</li>
|
||||
<li>Free Contour Tray (<a class="xref" href="../../../api/Hi.Milling.FluteContours.FreeContourTray.html">FreeContourTray</a>)</li>
|
||||
<li>Unset</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Contour Tray Configuration Panel
|
||||
<ul>
|
||||
<li>Dynamic component based on selected contour tray type</li>
|
||||
<li>For Uniform Contour Tray:
|
||||
<ul>
|
||||
<li>Track Number Input Field</li>
|
||||
<li>Baseline Contour Configuration
|
||||
//building</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>For Free Contour Tray:
|
||||
<ul>
|
||||
<li>Individual contour configuration for each flute
|
||||
//building</li>
|
||||
<li>Add/Remove contour controls</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="flute-inner-beam-tab">Flute-Inner-Beam Tab</h3>
|
||||
<p>Visible if <a class="xref" href="../../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true.</p>
|
||||
<p>This part manages <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_InnerBeamProfile">InnerBeamProfile</a>.</p>
|
||||
<ul>
|
||||
<li>Profile Type Selection Dropdown
|
||||
<ul>
|
||||
<li>Flute Dependent Ratio Profile (<a class="xref" href="../../../api/Hi.Milling.Cutters.FluteDependentRatioProfile.html">FluteDependentRatioProfile</a>)</li>
|
||||
<li>Const Ratio Profile (<a class="xref" href="../../../api/Hi.Milling.Cutters.ConstRatioProfile.html">ConstRatioProfile</a>)</li>
|
||||
<li>Custom Spinning Profile (<a class="xref" href="../../../api/Hi.Milling.Cutters.CustomSpinningProfile.html">CustomSpinningProfile</a>)</li>
|
||||
<li>Unset</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Profile Configuration Panel
|
||||
<ul>
|
||||
<li>Dynamic component based on selected profile type</li>
|
||||
<li>For Flute Dependent Ratio Profile:
|
||||
<ul>
|
||||
<li>Radius Ratio Number Field (readonly)
|
||||
<ul>
|
||||
<li>Label also shows the additional information: ‘Dependent on flute num xxx’, the ‘xxx’ is the flute number that pass by <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html">MillingCutter</a>.<a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_FluteContourTray_">FluteContourTray</a>. Series pass the model by the GUI if needed.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>For Const Ratio Profile:
|
||||
<ul>
|
||||
<li>Radius Ratio Number Field (editable)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>For Custom Spinning Profile:
|
||||
<ul>
|
||||
<li><a href="../../geom/geom-manage-control.html">Geometry Management Control</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="optimization-tab">Optimization Tab</h3>
|
||||
<p>Visible if <a class="xref" href="../../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true.</p>
|
||||
<p>This part manages <a class="xref" href="../../../api/Hi.NcOpt.MillingCutterOptOption.html">MillingCutterOptOption</a>.</p>
|
||||
<ul>
|
||||
<li>Enable Optimization Checkbox
|
||||
<ul>
|
||||
<li>Controls whether optimization limits are active</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>When optimization is enabled:
|
||||
<ul>
|
||||
<li>Limit by Theoretical Minimum Feed Per Tooth Checkbox
|
||||
<ul>
|
||||
<li>Shows calculated minimum uncut chip thickness value.
|
||||
To get the value, <a class="xref" href="../../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_Workpiece">Workpiece</a>.<a class="xref" href="../../../api/Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_CuttingPara_">CuttingPara</a> and <a class="xref" href="../../../api/Hi.Milling.Cutters.MillingCutter.html">MillingCutter</a> are required. Series pass the model by the GUI if needed.</li>
|
||||
<li>When checked, enforces minimum feed constraint</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Min Feed Per Tooth (mm) Number Field
|
||||
<ul>
|
||||
<li>Step (If UI supported): 0.01</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Max Feed Per Tooth (mm) Number Field
|
||||
<ul>
|
||||
<li>Step (If UI supported): 0.01</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Safety Factor for Yielding Number Field
|
||||
<ul>
|
||||
<li>Step (If UI supported): 0.1</li>
|
||||
<li>Default value typically around 2.0</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>Mech/ToolHouse/MillingCutterPanel</li>
|
||||
<li>Mech/ToolHouse/AptProfilePanel</li>
|
||||
<li>Mech/ToolHouse/MaterialTabPanel</li>
|
||||
<li>Mech/ToolHouse/PropertyTabPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/cutter/milling-cutter-panel.js</li>
|
||||
<li>wwwroot/mech/cutter/apt-profile-panel.js</li>
|
||||
<li>wwwroot/mech/cutter/material-tab-panel.js</li>
|
||||
<li>wwwroot/mech/cutter/property-tab-panel.js</li>
|
||||
<li>Controller/Mech/MechController.cs</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,200 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Fixture Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Fixture Page | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="fixture-page">Fixture Page</h1>
|
||||
|
||||
<p>The page triggers by <a href="../main-panel.html">Main Panel</a>.</p>
|
||||
<p>The key model is <a class="xref" href="../../api/Hi.NcMech.Fixtures.Fixture.html">Fixture</a> and <a class="xref" href="../../api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html">FixtureEditorDisplayeeConfig</a>.
|
||||
Fixture is assigned from the Main Panel's <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_Fixture">Fixture</a>.</p>
|
||||
<p><a class="xref" href="../../api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html">FixtureEditorDisplayeeConfig</a> is from <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_UserConfig">UserConfig</a> which assigned from the parent component.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Fixture Page
|
||||
<ul>
|
||||
<li>Management Panel
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li><a href="../widget/object-management-menu-button.html">Object Management Menu Button</a>
|
||||
<ul>
|
||||
<li>file extension is Fixture</li>
|
||||
<li>The pointed Editor Panel is Management Tabs Panel</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Management Tabs Panel
|
||||
<ul>
|
||||
<li>Geometry Tab
|
||||
(Apply <a href="../geom/geom-manage-control.html">Geometry Management Control</a> to set the <a class="xref" href="../../api/Hi.NcMech.Fixtures.Fixture.html">Fixture</a>.<a class="xref" href="../../api/Hi.NcMech.Fixtures.Fixture.html#Hi_NcMech_Fixtures_Fixture_Geom">Geom</a>.)</li>
|
||||
<li>Anchor Tab
|
||||
(Apply <a href="topo/transformers.html">Transformer Manage Panel</a> to set the following tabs)
|
||||
<ul>
|
||||
<li>Geom To Workpiece Tab</li>
|
||||
<li>Geom To Table Tab</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Viewer Panel
|
||||
<ul>
|
||||
<li>Viewer ToolBar
|
||||
<ul>
|
||||
<li><a href="../renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a></li>
|
||||
<li>SetupDisplayee Options ToolBar
|
||||
<ul>
|
||||
<li>Options of <a class="xref" href="../../api/Hi.NcMech.Fixtures.FixtureEditorDisplayee.html">FixtureEditorDisplayee</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>RenderingCanvas
|
||||
<ul>
|
||||
<li>The <a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_Displayee">Displayee</a> is <a class="xref" href="../../api/Hi.NcMech.Fixtures.FixtureEditorDisplayee.html">FixtureEditorDisplayee</a> (Apply the model <a class="xref" href="../../api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html">FixtureEditorDisplayeeConfig</a>).</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>Add a resizable splition bar between Manage Panel and Viewer Panel.</p>
|
||||
</div>
|
||||
<h2 id="behavior">Behavior</h2>
|
||||
<ul>
|
||||
<li>Call <a class="xref" href="../../api/Hi.NcMech.Fixtures.Fixture.html">Fixture</a>.<a class="xref" href="../../api/Hi.NcMech.Fixtures.Fixture.html#Hi_NcMech_Fixtures_Fixture_ClearGeomCache">ClearGeomCache()</a> on geometry set or changed.</li>
|
||||
<li>Call RenderCanvas.<a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToIsometricView">SetViewToIsometricView()</a> on geometry set. (Since the assumption of the shape set raise larger viewer changed than content changed, only adjust view of the setter event.)</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>Mech/Fixtures/FixturePage</li>
|
||||
<li>Mech/Fixtures/FixtureWindow</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/pages/FixturePage.vue</code> — routed page, splitter + Geometry/Anchor tabs + Display Options dropdown.</li>
|
||||
<li><code>wwwroot-src/src/api/fixture.ts</code> — typed wrapper over <code>FixtureController</code> and <code>FixtureDisplayController</code>.</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue</code> — reused object-management dropdown (see <a href="../widget/object-management-menu-button.html">Object Management Menu Button</a>).</li>
|
||||
<li><code>wwwroot-src/src/components/geom/GeometryEditor.vue</code> — Geometry tab switchboard (Box3d / Cylindroid / StlFile / TransformationGeom).</li>
|
||||
<li><code>wwwroot-src/src/components/topo/TransformerSelectPanel.vue</code> — Anchor tab transformer switchboard.</li>
|
||||
<li><code>Mech/FixtureController.cs</code> — REST endpoints for Initialize / CreateGeometry / Update{GeomTo…}Transformer / ClearGeometryCache.</li>
|
||||
<li><code>Mech/FixtureDisplayController.cs</code> — REST endpoints for display options (Solid/Edge/Hide rendering mode + 3 anchor visibility flags).</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,159 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Cylindroid Holder Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Cylindroid Holder 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="cylindroid-holder-panel">Cylindroid Holder Panel</h1>
|
||||
|
||||
<p>The key model is <a class="xref" href="../../../api/Hi.NcMech.Holders.CylindroidHolder.html">CylindroidHolder</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Cylindroid Holder Panel
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Tabs
|
||||
<ul>
|
||||
<li>Geometry Tab
|
||||
<ul>
|
||||
<li><a href="../../geom/cylindroid-control.html">Cylindroid Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Resolution Tab
|
||||
Model: <a class="xref" href="../../../api/Hi.NcMech.Holders.CylindroidHolder.html#Hi_NcMech_Holders_CylindroidHolder_PolarResolution2d">PolarResolution2d</a>
|
||||
<a href="../../widget/polar-resolution-2d-panel.html">Polar Resolution 2d</a></li>
|
||||
<li>Info Tab
|
||||
<ul>
|
||||
<li>Name TextField (editable)</li>
|
||||
<li>AbstractNote TextField (readonly)</li>
|
||||
<li>Note TextField (editable)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Remember to call <a class="xref" href="../../../api/Hi.NcMech.Holders.CylindroidHolder.html#Hi_NcMech_Holders_CylindroidHolder_UpdateByCylindroid">UpdateByCylindroid()</a> after geometry reference or content changed.</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>Mech/ToolHouse/CylindroidHolderPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/holder/cylindroid-holder-panel.js</li>
|
||||
<li>Controller/Mech/MechController.cs</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,166 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Freeform Holder Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Freeform Holder 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="freeform-holder-panel">Freeform Holder Panel</h1>
|
||||
|
||||
<p>The key model is <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html">FreeformHolder</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Freeform Holder Panel
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Tabs
|
||||
<ul>
|
||||
<li>Geometry Tab
|
||||
<ul>
|
||||
<li><a href="../../geom/geom-manage-control.html">Geometry Management Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Anchor Tab
|
||||
(Apply <a href="../topo/transformers.html">Transformer Manage Panel</a> to set the following tabs)
|
||||
<ul>
|
||||
<li>Geom To Spindle Tab</li>
|
||||
<li>Geom To Cutter Tab</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Resolution Tab
|
||||
Model: <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html#Hi_NcMech_Holders_FreeformHolder_PolarResolution2d">PolarResolution2d</a>
|
||||
<a href="../../widget/polar-resolution-2d-panel.html">Polar Resolution 2d</a></li>
|
||||
<li>Info Tab
|
||||
<ul>
|
||||
<li>Name TextField (editable)</li>
|
||||
<li>AbstractNote TextField (readonly)</li>
|
||||
<li>Note TextField (editable)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Remember to call <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html#Hi_NcMech_Holders_FreeformHolder_UpdateByGeom">UpdateByGeom()</a> after geometry reference or content changed.</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>Mech/ToolHouse/FreeformHolderPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/holder/freeform-holder-panel.js</li>
|
||||
<li>Controller/Mech/MechController.cs</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,162 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Holder Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Holder 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="holder-panel">Holder Panel</h1>
|
||||
|
||||
<p>This section describes the user interface and behavior for managing different types of tool holders in the application. Tool holders are crucial components in defining a complete tool assembly.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>While tool holders are essential components in real-world machining operations, some users may choose not to define them in simulation environments for convenience, particularly when collision detection is not a primary concern. The system allows for this flexibility, though it's recommended to include holders for accurate representation and comprehensive collision analysis.</p>
|
||||
</div>
|
||||
<p>The primary models involved are subclasses of <a class="xref" href="../../../api/Hi.NcMech.Holders.IHolder.html">IHolder</a>. Two common types are:</p>
|
||||
<ul>
|
||||
<li><strong><a href="cylindroid-holder-panel.html">Cylindroid Holder</a></strong>: Represents holders with a cylindrical geometry. See <a class="xref" href="../../../api/Hi.NcMech.Holders.CylindroidHolder.html">CylindroidHolder</a>.</li>
|
||||
<li><strong><a href="freeform-holder-panel.html">Freeform Holder</a></strong>: Represents holders with more complex, freeform geometry, often defined by STL files. See <a class="xref" href="../../../api/Hi.NcMech.Holders.FreeformHolder.html">FreeformHolder</a>.</li>
|
||||
</ul>
|
||||
<p>Each holder type will have its own specific user interface elements for defining its geometry and properties.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Holder Panel
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li><a href="../../widget/object-management-menu-button.html">Object Management Menu Button</a>
|
||||
<ul>
|
||||
<li>file extension is Holder</li>
|
||||
<li>The pointed Editor Panel is Holder Management Panel.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Holder Management Panel
|
||||
<ul>
|
||||
<li>Holder Type Selection Bar</li>
|
||||
<li>Holder Sub Management Panel
|
||||
The content varied by the Holder Type.</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>Mech/ToolHouse/HolderPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/holder/holder-panel.js</li>
|
||||
<li>Controller/Mech/MechController.cs</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,174 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Machine Tool Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Machine Tool Page | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="machine-tool-page">Machine Tool Page</h1>
|
||||
|
||||
<ul>
|
||||
<li>Key Model:
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Mech.IMachiningChain.html">IMachiningChain</a>
|
||||
The model is managed by the getter function and setter function (see <a href="../widget/object-management-menu-button.html">Object Management Menu Button</a> for the design pattern).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Assistant Model:
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<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 <code>mt</code>.</li>
|
||||
<li>The pointed Editor Panel is Management Panel</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Title Label “Machine Tool”</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Management Panel
|
||||
<ul>
|
||||
<li>If the key model inherits <a class="xref" href="../../api/Hi.Common.INameNote.html">INameNote</a>:
|
||||
<ul>
|
||||
<li>Name Setting Line
|
||||
<ul>
|
||||
<li>Name Label</li>
|
||||
<li>Name TextField</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Note Setting Line
|
||||
<ul>
|
||||
<li>Note Label</li>
|
||||
<li>Note TextField</li>
|
||||
</ul>
|
||||
</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>Mech/MachiningChains/MachiningChainPage</li>
|
||||
<li>Mech/MachiningChains/MachiningChainWindow</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/machining-chain-page.js</li>
|
||||
<li>Controller/Mech/MechController.cs</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,200 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Mechanism Builder Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Mechanism Builder Page | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="mechanism-builder-page">Mechanism Builder Page</h1>
|
||||
|
||||
<p>The Mechanism Builder page edits a standalone <a class="xref" href="../../api/Hi.Mech.GeneralMechanism.html">GeneralMechanism</a> — its anchor topology, per-branch <code>ITransformer</code>, and per-anchor optional <a class="xref" href="../../api/Hi.Geom.TransformationGeom.html">TransformationGeom</a> inside a <code>Solid</code>. Unlike the project-scoped editors (Fixture / Workpiece / ToolHouse / Spindle Capability), this page is <strong>user-scoped</strong> — no project needs to be loaded.</p>
|
||||
<ul>
|
||||
<li>Key Model: <a class="xref" href="../../api/Hi.Mech.GeneralMechanism.html">GeneralMechanism</a></li>
|
||||
<li>Related Model:
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Numerical.Xyzabc.GeneralXyzabcChain.html">GeneralXyzabcChain</a> + <a class="xref" href="../../api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> (used by “Save As Machine Tool”)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Mechanism Builder Page
|
||||
<ul>
|
||||
<li>File Menu
|
||||
<ul>
|
||||
<li>New — discards the current mechanism and starts an empty one.</li>
|
||||
<li>Load… — <code><input type=file></code> picks a local XML; POSTs its content to the backend.</li>
|
||||
<li>Reload — re-reads the file last loaded from disk (only available after a prior disk load).</li>
|
||||
<li>Save As General Mechanism — downloads a <code>.general-mech</code> XML via Blob.</li>
|
||||
<li>Save As Xyzabc Machine Tool — wraps the mechanism in a <a class="xref" href="../../api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> and downloads as <code>.mt</code>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Three-Column Layout (<code><q-splitter></code> × 2)
|
||||
<ul>
|
||||
<li>Graph Panel (left) — mermaid diagram of anchors (nodes) + branches (edges); node / edge click selects.</li>
|
||||
<li>Editor Panel (middle) — content depends on selection:
|
||||
<ul>
|
||||
<li><strong>Anchor selected:</strong> inline rename + “Add Branch ▾” dropdown + optional <a class="xref" href="../../api/Hi.Geom.TransformationGeom.html">TransformationGeom</a> attach / detach. While attached, the panel embeds <a href="../geom/geom-manage-control.html">Geometry Management Control</a> restricted to <a class="xref" href="../../api/Hi.Geom.TransformationGeom.html">TransformationGeom</a>; the inner <code>Box3d</code> / <code>Cylindroid</code> / <code>StlFile</code> / <code>CubeTreeFile</code> remain reachable inside the <code>TransformationGeomEditor</code>'s <code>Geom</code> slot.</li>
|
||||
<li><strong>Branch selected:</strong> inline rename + <a href="topo/transformers.html">Transformer Select Panel</a> (7 transformer kinds).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Viewer Panel (right) — <a href="../renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a> + <code>RenderingCanvas</code> bound to <code>DelegateFuncDisplayee(() => MechService.GeneralMechanism as IDisplayee)</code>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="behavior">Behavior</h2>
|
||||
<ul>
|
||||
<li><strong>New-anchor auto-naming.</strong> Newly-created anchors receive placeholder names (<code>NewAnchor-001</code>, <code>NewAnchor-002</code>, …). Inline rename is debounced 400 ms.</li>
|
||||
<li><strong>Branch add filter.</strong> The “Add Branch ▾” dropdown inside the anchor editor filters out the selected anchor itself and anchors already directly connected.</li>
|
||||
<li><strong>Root protection.</strong> The root anchor cannot be deleted; double-click delete on any other anchor works.</li>
|
||||
<li><strong>Branch transformer swap.</strong> <code>TransformerSelectPanel</code> uses a parent-aware <code>onCreate</code> hook that calls <code>POST /branch/{id}/update-transformer</code>, so the new transformer takes effect on the next frame without a re-init round-trip. Same idiom as <a href="fixture-page.html">Fixture Page</a>.</li>
|
||||
<li><strong>Geometry cache invalidation.</strong> Geometry edits POST to <code>anchor/{id}/refresh-geom-cache</code>, which triggers the same <code>Solid.ClearCache()</code> pattern used across the project.</li>
|
||||
<li><strong>DelegateFuncDisplayee.</strong> The <code>RenderingCanvas</code> is wired through a delegate so edits render next frame without IndexService churn.</li>
|
||||
</ul>
|
||||
<h2 id="source-code-path">Source Code Path</h2>
|
||||
<p>See <a href="../index.html">HiNC App Anatomy</a> for git repository links.</p>
|
||||
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>See <a href="machining-chain-page.html">Machine Tool Page</a> for the WPF chain editor. The generic <code>GeneralMechanism</code> XML is typically authored via scripting or hand-edited XML on the WPF side.</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/pages/MechBuilderPage.vue</code> — routed page at <code>/util/mech-builder</code>.</li>
|
||||
<li><code>wwwroot-src/src/components/mech/MechBuilderGraph.vue</code> — lazy mermaid loader + click-proxy onto mermaid node / edge DOM. Mermaid is dynamic-imported so the first bundle stays slim (~1 MB raw split into its own chunk).</li>
|
||||
<li><code>wwwroot-src/src/api/generalMechanism.ts</code> — typed wrapper over <code>/api/general-mechanism/*</code>.</li>
|
||||
<li><code>wwwroot-src/src/router/routes.ts</code> — <code>/util/mech-builder</code> entry.</li>
|
||||
<li><code>wwwroot-src/src/layouts/AppMenuBar.vue</code> — <code>Util → Mechanism Builder</code> entry.</li>
|
||||
<li><code>Mech/MechBuilder/GeneralMechanismService.cs</code> — DI singleton that holds the current mechanism + last <code>BaseDirectory</code> + <code>RelFile</code>.</li>
|
||||
<li><code>Mech/MechBuilder/GeneralMechanismController.cs</code> — <code>/api/general-mechanism/*</code> CRUD over anchors / branches / per-anchor <code>TransformationGeom</code>; XML Save As for both <code>GeneralMechanism</code> and <code>GeneralXyzabcMachineTool</code> envelopes.</li>
|
||||
<li><code>Mech/MechBuilder/GeneralMechanismDisplayController.cs</code> — <code>/api/general-mechanism/display/*</code> view init.</li>
|
||||
<li><code>Program.cs</code> — registers <code>GeneralMechanismService</code> as a DI singleton.</li>
|
||||
</ul>
|
||||
<h2 id="indexservice-keys">IndexService Keys</h2>
|
||||
<p>The mechanism state is persistent across pages (unlike Fixture which re-initialises on mount), so mechanism keys are <strong>not</strong> registered with <code>useCleanupHub</code>. Stale keys are harmless; they are re-pointed on the next <code>index-transformer</code> / <code>index-transformation-geom</code> call.</p>
|
||||
<ul>
|
||||
<li><code>general-mechanism.current</code> — the mechanism itself (informational; <code>DelegateFuncDisplayee</code> bypasses IndexService at render time).</li>
|
||||
<li><code>general-mechanism.branch.{guid:N}.transformer</code> — stable per-branch transformer key used by <code>TransformerSelectPanel</code>.</li>
|
||||
<li><code>general-mechanism.anchor.{guid:N}.transformation-geom</code> — stable per-anchor <code>TransformationGeom</code> key used by <code>GeometryEditor</code>.</li>
|
||||
</ul>
|
||||
<h2 id="deferred">Deferred</h2>
|
||||
<ul>
|
||||
<li><strong>Server-side file picker.</strong> Load currently uses a plain <code><input type=file></code> and Save As always streams as a browser download (<code>Blob + <a download></code>). An in-app picker rooted at the project / resource folders would let users save directly into the server tree; revisit if that workflow is requested.</li>
|
||||
<li><strong>Plain “Save”</strong> (no path prompt, overwrite last path). Needs a dedicated server-side write endpoint that reuses the last <code>BaseDirectory + RelFile</code> held by <code>GeneralMechanismService</code>; depends on the server-side file picker above.</li>
|
||||
<li><strong>G2 Machine Tool page integration.</strong> If a dedicated Machine Tool page ships, it should wrap this page with preset Branch names (X / Y / Z / A / B / C) + Table / Tool buckle anchors rather than duplicate the editor.</li>
|
||||
</ul>
|
||||
<h2 id="related-pages">Related Pages</h2>
|
||||
<ul>
|
||||
<li><a href="fixture-page.html">Fixture Page</a> — parent-aware <code>onCreate</code> transformer rebind pattern reused for Branch.</li>
|
||||
<li><a href="topo/transformers.html">Transformers</a> — the shared 7-transformer switchboard.</li>
|
||||
<li><a href="../geom/geom-manage-control.html">Geometry Management Control</a> — embedded under the anchor editor.</li>
|
||||
<li><a href="machining-chain-page.html">Machine Tool Page</a> — future merge candidate for a preset-chain wrapper.</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,217 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Spindle Capability Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Spindle Capability Page | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="spindle-capability-page">Spindle Capability Page</h1>
|
||||
|
||||
<p>The Spindle Capability page edits <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html">SpindleCapability</a> attached to the current project's <code>MachiningEquipment</code> (<a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html">MachiningEquipment</a>; the <code>MachiningProject.MachiningEquipment</code> property itself is <code>internal</code> and therefore not individually linkable). It exposes metadata scalars (name / note / efficiency / working-temperature ceiling), the gear-shift spindle speed, dry-run coefficients, and the power / torque contour lists.</p>
|
||||
<ul>
|
||||
<li>Key Model: <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html">SpindleCapability</a></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.Machining.MachiningEquipmentUtils.MachiningEquipment.html">MachiningEquipment</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>This page exists only in the Quasar webservice. The WPF desktop app has no equivalent today — spindle-capability editing happens via XML through <code>ObjectManagementMenuButton</code> on the Equipment panel in WPF.</p>
|
||||
</div>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Spindle Capability Page
|
||||
<ul>
|
||||
<li>Metadata Card
|
||||
<ul>
|
||||
<li>Name TextField — <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_Name">Name</a>.</li>
|
||||
<li>Note TextField — <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_Note">Note</a>.</li>
|
||||
<li>Energy Efficiency NumberField — <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_EnergyEfficiency">EnergyEfficiency</a>.</li>
|
||||
<li>Working Temperature Upper Boundary NumberField (°C) — <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_WorkingTemperatureUpperBoundary_C">WorkingTemperatureUpperBoundary_C</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Gear Shift Card
|
||||
<ul>
|
||||
<li>Has-Gear-Shift CheckBox
|
||||
<ul>
|
||||
<li>Flips <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_GearShiftSpindleSpeed_rpm">GearShiftSpindleSpeed_rpm</a> between <code>null</code> (no mechanism) and <code>0</code> (mechanism present; operator dials in the speed).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Gear Shift Spindle Speed NumberField (rpm) — visible when the checkbox is on.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Dry Run Card
|
||||
<ul>
|
||||
<li>Friction Power Coefficient NumberField (mW/rpm) — <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_DryRunFrictionPowerCoefficient_mWdrpm">DryRunFrictionPowerCoefficient_mWdrpm</a>.</li>
|
||||
<li>Windage Power Coefficient NumberField (pW/rpm³) — <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_DryRunWindagePowerCoefficient_pWdrpm3">DryRunWindagePowerCoefficient_pWdrpm3</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Power Contours Table
|
||||
<ul>
|
||||
<li>Rows of <code>{ duration key, point count, delete }</code>.</li>
|
||||
<li>Add Contour Button — opens a duration prompt (blank → continuous / ∞) and clones the first existing contour's points as a seed.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Torque Contours Table — same shape as the Power Contours table.</li>
|
||||
<li>File Menu
|
||||
<ul>
|
||||
<li>Load… — prompts for XML text (read-only paste) plus an optional project-relative path; POSTs to <code>/load</code> which replaces <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html">SpindleCapability</a> and stamps <code>SpindleCapabilityFile</code>.</li>
|
||||
<li>Reload — re-reads the file last stamped on the equipment.</li>
|
||||
<li>Save As… — pulls serialised XML via <code>GET /xml</code> and downloads it as a Blob; optionally updates <code>SpindleCapabilityFile</code>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="behavior">Behavior</h2>
|
||||
<ul>
|
||||
<li><strong>Rpm ↔ cycles/s conversion lives server-side.</strong> <a class="xref" href="../../api/Hi.Milling.SpindleCapability.html">SpindleCapability</a> stores spindle speed in cycles/s (Hz); the controller converts to rpm in DTOs and back on POST. The frontend only sees rpm.</li>
|
||||
<li><strong>Nullable gear shift.</strong> The Has-Gear-Shift checkbox flips the value between <code>null</code> (no gear-shift mechanism) and <code>0</code> (mechanism present; operator dials in the speed).</li>
|
||||
<li><strong>Project-scoped.</strong> Unlike <code>GeneralMechanism</code> (see <a href="mech-builder-page.html">Mechanism Builder Page</a>), the spindle capability lives on <code>LocalProjectService.MachiningEquipment</code> and is persisted as part of the <code>.hincproj</code> save.</li>
|
||||
<li><strong>Contour seed.</strong> Add Contour clones the first existing contour so operators rarely draw from scratch; per-point drag editing is deferred (see below).</li>
|
||||
</ul>
|
||||
<h2 id="source-code-path">Source Code Path</h2>
|
||||
<p>See <a href="../index.html">HiNC App Anatomy</a> for git repository links.</p>
|
||||
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>Not implemented. Edit via <code>ObjectManagementMenuButton</code> on the Equipment panel using a <code>.SpindleCapability</code> XML file.</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/pages/SpindleCapabilityPage.vue</code> — routed page at <code>/equipment/spindle</code>.</li>
|
||||
<li><code>wwwroot-src/src/api/spindleCapability.ts</code> — typed wrapper over <code>/api/mech/spindle-capability/*</code>.</li>
|
||||
<li><code>wwwroot-src/src/router/routes.ts</code> — <code>/equipment/spindle</code> entry.</li>
|
||||
<li><code>wwwroot-src/src/layouts/AppMenuBar.vue</code> — <code>Environment → Spindle Capability</code> menu entry between Controller and Tool House.</li>
|
||||
<li><code>Mech/SpindleCapabilityController.cs</code> — REST endpoints:
|
||||
<ul>
|
||||
<li><code>GET /api/mech/spindle-capability</code> — flat snapshot (metadata + contour keys).</li>
|
||||
<li><code>GET /power-contours</code>, <code>GET /torque-contours</code> — per-axis contour lists.</li>
|
||||
<li><code>PUT /name | /note | /energy-efficiency | /working-temperature-upper-boundary-c | /gear-shift-spindle-speed-rpm | /dry-run-friction-power-coefficient-mwdrpm | /dry-run-windage-power-coefficient-pwdrpm3</code> — one scalar each.</li>
|
||||
<li><code>POST /power-contours | /torque-contours</code> — add one contour.</li>
|
||||
<li><code>DELETE /power-contours/{key} | /torque-contours/{key}</code> — remove one contour (<code>{key}</code> accepts numeric strings and <code>"infinity"</code>).</li>
|
||||
<li><code>GET /xml</code> — serialises to XML text.</li>
|
||||
<li><code>POST /load | /reload</code> — XML round-trip.</li>
|
||||
<li><code>PUT /capability-file</code> — set <code>SpindleCapabilityFile</code> without reloading.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="deferred">Deferred</h2>
|
||||
<ul>
|
||||
<li><strong>Full contour-curve editor</strong> (per-point drag on a chart). Tracked with the uPlot chart engine introduced in Section O of the pages-migration plan.</li>
|
||||
<li><strong><code>ObjectManagementMenuButton</code> integration.</strong> The File menu currently uses a plain XML-paste prompt; revisit once the widget gains an “apply XML without a project-scoped target” mode.</li>
|
||||
</ul>
|
||||
<h2 id="related-pages">Related Pages</h2>
|
||||
<ul>
|
||||
<li><a href="mech-builder-page.html">Mechanism Builder Page</a> — same file-level IO pattern (Load / Reload / Save As) but user-scoped rather than project-scoped.</li>
|
||||
<li><a href="background-coolant-page.html">Background / Coolant Page</a> — sibling under <code>Environment</code>, also targets <code>MachiningEquipment</code>.</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,188 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Stick Tool Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Stick Tool 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="stick-tool-panel">Stick Tool Panel</h1>
|
||||
|
||||
<p>The term stick is for not only milling, but other remover like electric discharge machining tool.</p>
|
||||
<p>The key model is MillingTool.
|
||||
Other model: <a class="xref" href="../../../api/Hi.HiNcKits.UserService.html">UserService</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 MillingTool</li>
|
||||
<li>the pointed Editor Panel is Stick Tool Management Panel</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Stick Tool Management Panel
|
||||
<ul>
|
||||
<li>Cutter Tab
|
||||
<ul>
|
||||
<li><a href="../cutter/index.html">Cutter Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Holder Tab
|
||||
<ul>
|
||||
<li><a href="../holder/index.html">Holder Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Clamping Tab
|
||||
<ul>
|
||||
<li>Exposed-Cutter-Height TextField</li>
|
||||
<li>Preserved-Distance-Between-Flute-and-Spindle-Nose TextField</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Intelligent Holder Tab
|
||||
Visible if <a class="xref" href="../../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true.</li>
|
||||
<li>Info Tab
|
||||
<ul>
|
||||
<li>Abstract Note TextField (readonly)</li>
|
||||
<li>Note TextField (editable)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>The Exposed-Cutter-Height and Preserved-Distance-Between-Flute-and-Spindle-Nose are directly related. Each value changed if each other value is changed.</p>
|
||||
</div>
|
||||
<h2 id="step-by-step-build-guide">Step by Step Build Guide</h2>
|
||||
<ol>
|
||||
<li>Build the Stick Tool Panel Layout framework. Since the framework helps to check of the child componenet.</li>
|
||||
<li>Build accessory part of the framework.
|
||||
<ol>
|
||||
<li>Object Management Menu Button</li>
|
||||
<li>Info Tab</li>
|
||||
<li>Clamping Tab</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>Build <a href="../holder/index.html">Holder Panel</a> and the related holder type panel.</li>
|
||||
<li>Build <a href="../cutter/index.html">Cutter Panel</a> and the related cutter type panel.</li>
|
||||
</ol>
|
||||
<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>Mech/ToolHouse/StickToolPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/stick-tool-panel.js</li>
|
||||
<li>Controller/Mech/MechController.cs</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,264 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Tool House Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Tool House Page | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="tool-house-page">Tool House Page</h1>
|
||||
|
||||
<p>The page triggers by <a href="../main-panel.html">Main Panel</a>.</p>
|
||||
<p>The key model is MachiningToolHouse.
|
||||
The model <a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a> is delivered by the host GUI.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Tool House Page
|
||||
<ul>
|
||||
<li>Tool List Panel
|
||||
The panel has CRUD (and Duplicate) of the tools. Read and Update the selected tool by the Selected Tool Editor Panel.
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li><a href="../widget/object-management-menu-button.html">Object Management Menu Button</a>
|
||||
<ul>
|
||||
<li>file extension is MachiningToolHouse</li>
|
||||
<li>The pointed Editor Panel is Tool List</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Batch Action Menu
|
||||
<ul>
|
||||
<li>Select All Button</li>
|
||||
<li>De-Select All Button</li>
|
||||
<li>(splition bar)</li>
|
||||
<li>Duplication Button</li>
|
||||
<li>Remove Button</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Create Tool Button</li>
|
||||
<li>Tool List
|
||||
<ul>
|
||||
<li>Selection Checkbox (for batch action)</li>
|
||||
<li>Editable Tool ID TextField</li>
|
||||
<li>Editable Note/Abstract TextField</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Selected Tool Editor Panel
|
||||
<ul>
|
||||
<li><a href="stick-tool-panel/index.html">Stick Tool Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Viewer Panel
|
||||
<ul>
|
||||
<li>Viewer ToolBar
|
||||
<ul>
|
||||
<li>Title Label</li>
|
||||
<li><a href="../renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a></li>
|
||||
<li>EditorDisplayee Options ToolBar
|
||||
<ul>
|
||||
<li>EditorDisplayee Options Menu Dropdown
|
||||
<ul>
|
||||
<li>Head Label: Cutter</li>
|
||||
<li>Show Cutter CheckBox</li>
|
||||
<li>(Options of <a class="xref" href="../../api/Hi.Milling.Cutters.MillingCutterEditorDisplayee.html">MillingCutterEditorDisplayee</a>)
|
||||
<ul>
|
||||
<li>Shape Mode SubMenu
|
||||
Set <a class="xref" href="../../api/Hi.Milling.Cutters.MillingCutterEditorDisplayee.html#Hi_Milling_Cutters_MillingCutterEditorDisplayee_ShapeMode">ShapeMode</a> to Solid Bounding Shape if <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is false on GUI initialization.
|
||||
<ul>
|
||||
<li>Solid Bounding Shape Ratio Button</li>
|
||||
<li>Detail Physics Shape Ratio Button
|
||||
Visible if <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>(spliter)</li>
|
||||
<li>Head Label: Holder</li>
|
||||
<li>Show Holder CheckBox</li>
|
||||
<li>(Options of <a class="xref" href="../../api/Hi.NcMech.Holders.HolderEditorDisplayee.html">HolderEditorDisplayee</a>)
|
||||
<ul>
|
||||
<li>Show Geometry Anchor CheckBox</li>
|
||||
<li>Show Spindle Buckle CheckBox</li>
|
||||
<li>Show Cutter Buckle CheckBox</li>
|
||||
<li>Rendering Mode SubMenu
|
||||
<ul>
|
||||
<li>Solid CheckBox</li>
|
||||
<li>Edge CheckBox</li>
|
||||
<li>Hide CheckBox</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>RenderingCanvas
|
||||
<ul>
|
||||
<li>The <a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_Displayee">Displayee</a> is <a class="xref" href="../../api/Hi.Milling.MillingTools.MillingToolEditorDisplayee.html">MillingToolEditorDisplayee</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<ul>
|
||||
<li>Do not apply new window for tool creation. Assume the workflow is user create a default content tool and then user setup it in by the edit panel.</li>
|
||||
<li>Add a resizable splition bar between Tool List Panel, Selected Tool Editor Panel and Viewer Panel.</li>
|
||||
<li>The options of <a class="xref" href="../../api/Hi.Milling.Cutters.MillingCutterEditorDisplayee.html">MillingCutterEditorDisplayee</a> and <a class="xref" href="../../api/Hi.NcMech.Holders.HolderEditorDisplayee.html">HolderEditorDisplayee</a> is enabled only if the upper level options are enabled, i.e. <a class="xref" href="../../api/Hi.Milling.MillingTools.MillingToolEditorDisplayee.html#Hi_Milling_MillingTools_MillingToolEditorDisplayee_ShowCutter">ShowCutter</a> and <a class="xref" href="../../api/Hi.Milling.MillingTools.MillingToolEditorDisplayee.html#Hi_Milling_MillingTools_MillingToolEditorDisplayee_ShowHolder">ShowHolder</a>.</li>
|
||||
<li>Use less layer of EditorDisplayee Options ToolBar for user convenient. Flatten the options of the children displayee except the ratio button group.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<p>The Tool ID can not be repeated. When create new tool, assign a new tool ID (maybe the largest ID plus 1).</p>
|
||||
<p>When a tool is entered, call the renderingCanvas.<a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToHomeView">SetViewToHomeView()</a>.</p>
|
||||
<h3 id="duplication-button">Duplication Button</h3>
|
||||
<p>Use <a class="xref" href="../../api/Hi.Milling.MillingTools.MillingTool.html#Hi_Milling_MillingTools_MillingTool_Duplicate_System_Object___">Duplicate(params object[])</a> to duplicate the tool.</p>
|
||||
<h3 id="noteabstract-textfield">Note/Abstract TextField</h3>
|
||||
<p>The Note/Abstract TextField shows note if note existed and is not empty string; otherwise it shows the <a class="xref" href="../../api/Hi.Milling.MillingTools.MillingTool.html#Hi_Milling_MillingTools_MillingTool_AbstractNote">AbstractNote</a>. The tooltip is the abstract note.</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>Mech/ToolHouse/ToolHousePage</li>
|
||||
<li>Mech/ToolHouse/ToolHouseWindow</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/pages/ToolHousePage.vue</code> — routed page: left Tool List (with inline double-click Tool ID rename) + middle Selected Tool Editor + right Viewer, three <code><q-splitter></code> panes with Display Options dropdown (Show Cutter / Show Holder + 3 anchor flags + Holder Rendering Mode).</li>
|
||||
<li><code>wwwroot-src/src/components/toolhouse/StickToolEditor.vue</code> — Cutter / Holder / Clamping / Int. Holder / Info tabs.</li>
|
||||
<li><code>wwwroot-src/src/components/toolhouse/IntelligentHolderDiv.vue</code> — Intelligent Holder (Observation Location) editor: <code>ObservationAnchorReference</code> enum dropdown + relative Z + ring radius.</li>
|
||||
<li><code>wwwroot-src/src/components/toolhouse/CutterManagementPanel.vue</code> — cutter-type select + inner tabs (General / Flute Profile / Flute Contours / Optimization).</li>
|
||||
<li><code>wwwroot-src/src/components/toolhouse/contourTray/ContourTrayDiv.vue</code> — Uniform / Free tray switch + <code>FreeContourTray</code> child CRUD.</li>
|
||||
<li><code>wwwroot-src/src/components/toolhouse/contourTray/FluteContourDiv.vue</code> — SetupAngle + SideContour selector + BottomContour selector.</li>
|
||||
<li><code>wwwroot-src/src/components/toolhouse/contourTray/ConstHelixSideContourDiv.vue</code> — Helix / Radial Rake / Radial Relief angles.</li>
|
||||
<li><code>wwwroot-src/src/components/toolhouse/contourTray/SlideBottomContourDiv.vue</code> — OuterRadius / CutterLength / Eccentric / Disk / AxialRake.</li>
|
||||
<li><code>wwwroot-src/src/components/toolhouse/MillingCutterOptLimitDiv.vue</code> — EnableOpt + MinFeed / MaxFeed / YieldingUtilizationFactor.</li>
|
||||
<li><code>wwwroot-src/src/components/toolhouse/HolderPanel.vue</code> — None / CylindroidHolder / FreeformHolder switch; CylindroidHolder edits its backing <code>Cylindroid</code> via the reusable <code>CylindroidEditor.vue</code>.</li>
|
||||
<li><code>wwwroot-src/src/api/toolHouse.ts</code> — typed wrapper over <code>ToolHouseController</code> (CRUD + Initialize / SelectTool / EnsureCutter / shaper profile / contour tray / holder / <code>FreeContour</code> CRUD / opt-limit / general) and <code>ToolHouseDisplayController</code> (Show flags + Holder rendering mode + Cutter shape mode).</li>
|
||||
<li><code>Mech/ToolHouseController.cs</code> — REST endpoints: <code>GET /</code>, <code>GET /{id}</code>, <code>GET/PUT /{id}/observation</code>, <code>PUT /{id}/note | exposed-height | preserved-distance | shaper-profile | contour-tray | general | opt-limit</code>, <code>POST /Initialize | SelectTool | CreateTool | DuplicateTool | RenameTool | EnsureCutter | ClearCutter | SetHolderType | GetHolder | ClearToolCache</code>, <code>DELETE /DeleteTool</code>, and <code>FreeContourTray</code> child CRUD at <code>/{id}/contour-tray/contours[/{index}]</code>.</li>
|
||||
<li><code>Mech/ToolHouseDisplayController.cs</code> — REST endpoints at <code>/api/mech/tool-house-display/*</code> for display options (initialize, select-tool, show-cutter / show-holder / show-geom-anchor / show-spindle-buckle / show-cutter-buckle, holder-rendering-mode, cutter-shape-mode, clear-cache).</li>
|
||||
</ul>
|
||||
<p>Not yet ported to the Quasar page (deferred; edit via the WPF client in the meantime):</p>
|
||||
<ul>
|
||||
<li>FreeformRemover cutter type.</li>
|
||||
<li>FreeformHolder geometry / transformer editing.</li>
|
||||
<li>FreeformSideContour per-flute CSV position list editing. Existing FreeformSideContour values are preserved on save but read-only in the web UI.</li>
|
||||
<li>Physics-only cutter sub-tabs (Material, InsertCutter, FluteInnerBeam, UpperBeam).</li>
|
||||
<li>CustomSpinningProfile shaper profile type.</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,161 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Transformers GUI | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Transformers GUI | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="transformers-gui">Transformers GUI</h1>
|
||||
|
||||
<p>Each <a href="../../../fundamentals/mechanism/transformers/index.html">Transformers</a> has GUI component.</p>
|
||||
<h2 id="transformer-manage-panel">Transformer Manage Panel</h2>
|
||||
<p>Use Transformer Manage Panel to setup the <a class="xref" href="../../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a>.</p>
|
||||
<h3 id="layout">Layout</h3>
|
||||
<ul>
|
||||
<li>Transformer Manage Panel
|
||||
<ul>
|
||||
<li>Transformer Type Selection Bar</li>
|
||||
<li>Transformer Content Panel (vary by the selected Transformer)</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p><a class="xref" href="../../../api/Hi.Mech.Topo.GeneralTransform.html">GeneralTransform</a> control uses its own layout with direct API calls and <a class="xref" href="../../../api/Hi.Geom.Vec3d.html">Vec3d</a> components, instead of embedding <a class="xref" href="../../../api/Hi.Mech.Topo.StaticRotation.html">StaticRotation</a> and <a class="xref" href="../../../api/Hi.Mech.Topo.StaticTranslation.html">StaticTranslation</a> as sub-components. This avoids redundant title display when nested.</p>
|
||||
</div>
|
||||
<h3 id="transformer-type-selection-bar">Transformer Type Selection Bar</h3>
|
||||
<p>Transformer Type Selection Bar get or set <a class="xref" href="../../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a>.</p>
|
||||
<p>The Transformer Type Selection Bar has code-behind option to choose what the transformer options to show.</p>
|
||||
<p>If the original model (i.e. source model) transformer conflicts with the restricted transformers, show the model.</p>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>Consider one line layout to save the space for the selection bar.</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>Mech/Topo/TransformerSelectPanel</li>
|
||||
<li>Mech/Topo/StaticTranslationPanel</li>
|
||||
<li>Mech/Topo/StaticFreeformPanel</li>
|
||||
<li>Mech/Topo/DynamicTranslationPanel</li>
|
||||
<li>Mech/Topo/DynamicRotationPanel</li>
|
||||
<li>Mech/Topo/GeneralTransformPanel</li>
|
||||
<li>Mech/Topo/TransformerDemoWindow</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/topo/transformer-select-panel.js</li>
|
||||
<li>wwwroot/mech/topo/static-translation-control.js</li>
|
||||
<li>wwwroot/mech/topo/static-rotation-control.js</li>
|
||||
<li>wwwroot/mech/topo/static-freeform-control.js</li>
|
||||
<li>wwwroot/mech/topo/dynamic-translation-control.js</li>
|
||||
<li>wwwroot/mech/topo/dynamic-rotation-control.js</li>
|
||||
<li>wwwroot/mech/topo/general-transform-control.js</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,284 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Workpiece Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Workpiece Page | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="workpiece-page">Workpiece Page</h1>
|
||||
|
||||
<p>The page triggers by <a href="../main-panel.html">Main Panel</a>.</p>
|
||||
<p>The key model is <a class="xref" href="../../api/Hi.NcMech.Workpieces.Workpiece.html">Workpiece</a> and <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html">WorkpieceEditorDisplayeeConfig</a>.
|
||||
Which is assigned from the Main Panel's <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_Workpiece">Workpiece</a>.</p>
|
||||
<p><a class="xref" href="../../api/Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html">FixtureEditorDisplayeeConfig</a> is from <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_UserConfig">UserConfig</a> which assigned from the parent component.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Workpiece Page
|
||||
<ul>
|
||||
<li>Management Panel
|
||||
<ul>
|
||||
<li>Head Line
|
||||
<ul>
|
||||
<li><a href="../widget/object-management-menu-button.html">Object Management Menu Button</a>
|
||||
<ul>
|
||||
<li>file extension is Workpiece</li>
|
||||
<li>The pointed Editor Panel is Management Tabs Panel</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Title Label</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Management Tabs Panel
|
||||
<ul>
|
||||
<li>Raw Shape Tab
|
||||
<ul>
|
||||
<li>Raw Geometry Source DropDown (Common Geometry and Runtime Geometry are EXCLUSIVE)
|
||||
<ul>
|
||||
<li>Common Geometry
|
||||
Apply <a href="../geom/geom-manage-control.html">Geometry Management Control</a></li>
|
||||
<li>Runtime Geometry
|
||||
Apply <a href="../geom/runtime-geom-panel.html">Runtime Geometry Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Target Shape Tab
|
||||
<ul>
|
||||
<li>Geometry Management Control</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Anchor Tab
|
||||
<ul>
|
||||
<li>Geom To Fixture Tab
|
||||
<ul>
|
||||
<li><a href="topo/transformers.html">Transformer Manage Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Geom To Program-Zero Tab
|
||||
<ul>
|
||||
<li>Transformer Manage Panel</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Runtime Tab
|
||||
<ul>
|
||||
<li>Initial Resolution Dropdown (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>
|
||||
<li>Material Tab
|
||||
Visible if <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_EnablePhysics">EnablePhysics</a> is true.
|
||||
<ul>
|
||||
<li>Workpiece Material File Selector
|
||||
<ul>
|
||||
<li>Browse Button
|
||||
The initial directory is the project directory.</li>
|
||||
<li>Browse Resource Button
|
||||
The directory is the Default Resource directory.</li>
|
||||
<li>Readonly File Path TextBox</li>
|
||||
<li>Readonly Name TextBox (<a class="xref" href="../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>)
|
||||
<ul>
|
||||
<li>ToolTip: <a class="xref" href="../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Note">Note</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Cutting Parameter File Selector
|
||||
<ul>
|
||||
<li>Browse Button
|
||||
The initial directory is the project directory.</li>
|
||||
<li>Browse Resource Button
|
||||
The directory is the Default Resource directory.</li>
|
||||
<li>Readonly File Path TextBox</li>
|
||||
<li>Readonly Name TextBox (<a class="xref" href="../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>)
|
||||
<ul>
|
||||
<li>ToolTip: <a class="xref" href="../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Note">Note</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Viewer Panel
|
||||
<ul>
|
||||
<li>Viewer ToolBar
|
||||
<ul>
|
||||
<li><a href="../renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a></li>
|
||||
<li>SetupDisplayee Options ToolBar
|
||||
<ul>
|
||||
<li>Options of <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html">WorkpieceEditorDisplayee</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>RenderingCanvas
|
||||
<ul>
|
||||
<li>The <a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_Displayee">Displayee</a> is <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html">WorkpieceEditorDisplayee</a> (Apply the model <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html">WorkpieceEditorDisplayeeConfig</a>).</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>Add a resizable splition bar between Manage Panel and Viewer Panel.</p>
|
||||
</div>
|
||||
<h2 id="default-resource">Default Resource</h2>
|
||||
<p>The default resources of Workpiece Material and Cutting Parameter exist in <code>Resource</code> folder under application folder (Not project folder). Set the default folder of the File Selector to the <code>Resource</code> sub folder:</p>
|
||||
<ul>
|
||||
<li>“Resource/WorkpieceMaterial”</li>
|
||||
<li>“Resource/CuttingParameter”</li>
|
||||
</ul>
|
||||
<h2 id="behavior">Behavior</h2>
|
||||
<ul>
|
||||
<li><p>Call <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html">WorkpieceEditorDisplayee</a>.<a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html#Hi_NcMech_Workpieces_WorkpieceEditorDisplayee_ClearRawGeomCache">ClearRawGeomCache()</a> on Raw Shape set or changed.</p>
|
||||
</li>
|
||||
<li><p>Call <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html">WorkpieceEditorDisplayee</a>.<a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html#Hi_NcMech_Workpieces_WorkpieceEditorDisplayee_ClearIdealGeomCache">ClearIdealGeomCache()</a> on Target Shape set or changed.</p>
|
||||
</li>
|
||||
<li><p>Call RenderCanvas.<a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToIsometricView">SetViewToIsometricView()</a> on Raw Shape set or Target Shape set. (Since the assumption of the shape set raise larger viewer changed than content changed, only adjust view of the setter event.)</p>
|
||||
</li>
|
||||
<li><p>Keep <a href="../widget/gui-file-path-assignment.html#portability">Portability</a> of the Material properties.</p>
|
||||
</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>Mech/Workpieces/WorkpiecePage</li>
|
||||
<li>Mech/Workpieces/WorkpieceWindow</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/mech/workpiece-page.js</li>
|
||||
<li>Controller/Mech/MechController.cs</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,183 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Bottom Message Bar | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Bottom Message Bar | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
<meta name="docfx:navrel" content="../toc.html">
|
||||
<meta name="docfx:tocrel" content="toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="bottom-message-bar">Bottom Message Bar</h1>
|
||||
|
||||
<p>The Bottom Message Bar displays application-level notifications at the bottom of the Main Panel. This is the <strong>UI Error Notification</strong> channel — see <a href="../fundamentals/common/message-management.html">Message Management</a> for how it fits into the overall message architecture.</p>
|
||||
<h2 id="message-handling">Message Handling</h2>
|
||||
<p>The Bottom Message Bar is connected to <a class="xref" href="../api/Hi.Common.Messages.MessageBoardUtil.html">MessageBoardUtil</a> (or <code>ILogger</code> with level-filtered treatment). When a notification is triggered:</p>
|
||||
<ol>
|
||||
<li>The <code>Brief Message Text Field</code> content is updated</li>
|
||||
<li>The message is appended to the daily log file at <code>logs/log-{DateTime.Now:yyyy-MM-dd}.txt</code></li>
|
||||
</ol>
|
||||
<h3 id="message-types">Message Types</h3>
|
||||
<p>The <a class="xref" href="../api/Hi.Common.Messages.MessageFlag.html">MessageFlag</a> determines the display behavior:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Flag</th>
|
||||
<th>Display Behavior</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a class="xref" href="../api/Hi.Common.Messages.MessageFlag.html#Hi_Common_Messages_MessageFlag_Exception">Exception</a></td>
|
||||
<td>Alert style, shown in Message Bar</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../api/Hi.Common.Messages.MessageFlag.html#Hi_Common_Messages_MessageFlag_Warning">Warning</a> and above</td>
|
||||
<td>Shown in Message Bar</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../api/Hi.Common.Messages.MessageFlag.html#Hi_Common_Messages_MessageFlag_Info">Info</a> and below</td>
|
||||
<td>Logged only, not shown in Message Bar</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>When the message is an <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception">Exception</a>, the brief message shows <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.message">Message</a> while the full exception details are logged to file.</p>
|
||||
</div>
|
||||
<h2 id="platform-specific-layouts">Platform-Specific Layouts</h2>
|
||||
<h3 id="wpf-application">WPF Application</h3>
|
||||
<p>The WPF version uses a fixed bottom bar:</p>
|
||||
<ul>
|
||||
<li><strong>Message Section Bottom Bar</strong>
|
||||
<ul>
|
||||
<li>Brief Message Text Field (selectable for copy)</li>
|
||||
<li>Show Log Button</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h3 id="web-application">Web Application</h3>
|
||||
<p>The Web version uses Bootstrap-style stacking toasts:</p>
|
||||
<ul>
|
||||
<li><strong>Message Section Stacking Toast</strong>
|
||||
<ul>
|
||||
<li>Brief Message Text Field</li>
|
||||
<li>Auto-hide enabled only for low-priority messages</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 id="log-page">Log Page</h4>
|
||||
<p>The Log Page provides access to daily logs:</p>
|
||||
<ul>
|
||||
<li><strong>Header</strong>: Log Label, Refresh Button, Download Button</li>
|
||||
<li><strong>Content</strong>: Log TextArea</li>
|
||||
</ul>
|
||||
<h2 id="show-log-button">Show Log Button</h2>
|
||||
<p>The Show Log Button opens a modal or editor view displaying the current day's log content.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>The log file may not exist if no messages have been recorded yet.</p>
|
||||
</div>
|
||||
|
||||
</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,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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="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 “pin at begining” 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 “pin at end” 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><q-splitter></code> left-pane. Nested <code>ListCommand</code> recursion is supported by the backend path scheme (<code>"0.2"</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="true"</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>"0.2"</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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="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><q-input type="textarea"></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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="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><q-banner></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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="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><q-card></code>s (General / Distances / Feedrate / Motion Dynamics / Force & 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="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: “Output/[NcName].step.csv”</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: “Output/Opt-[NcName]”</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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="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 ‘Select’ 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: “Output/[NcName].step.csv”</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: “Output/Opt-[NcName]”</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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="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>
|
||||
@@ -0,0 +1,201 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Cycle-Line Charts | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Cycle-Line Charts | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="cycle-line-charts">Cycle-Line Charts</h1>
|
||||
|
||||
<p>The cycle-line charts visualise a <strong>per-step, per-cycle detail view</strong> of force / moment signals around the currently-selected step. They are re-fetched whenever <code>SelectedStepInfoHub</code> pushes a new step, so the operator can zoom into one spindle revolution (or the configured cycle window) as they scrub through the mission timeline on the strip charts.</p>
|
||||
<p>The anatomy covers four cycle-line charts in the webservice, all sharing <code>BaseCycleLineChart.vue</code>:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chart</th>
|
||||
<th>Source Data</th>
|
||||
<th>Notes</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Force Cycle-Line Chart</td>
|
||||
<td><code>MachiningStep.ForceToWorkpieceOnProgramCoordinate</code> or <code>ForceToToolOnToolRunningCoordinate</code></td>
|
||||
<td>Header dropdown picks between the two flag values; swaps the <code>fetcher</code> prop so <code>BaseCycleLineChart</code> refetches.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sim Spindle Moment Cycle-Line Chart</td>
|
||||
<td><code>MachiningStep.MomentsToToolAboutObservationPointOnSpindleRotationCoordinate_Nm</code></td>
|
||||
<td>Simulated moment from the physics model.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Sensor Spindle Moment Cycle-Line Chart</td>
|
||||
<td><code>IMomentShot</code> via <code>MachiningProject.TimeMapping.GetShots(stepIndex)</code></td>
|
||||
<td>Sensor-measured moment. Rendered as a sibling card to the sim chart, not a twin overlay (see <em>Deferred</em>).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Dynamometer Force Cycle-Line Chart</td>
|
||||
<td><code>IForceShot</code> via <code>TimeMapping.GetShots(stepIndex)</code></td>
|
||||
<td>Sensor-measured force. Returns empty shape when no dynamometer data.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Key Model: <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.<a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_TimeMapping">TimeMapping</a> + the selected <a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<p>Each cycle-line chart is a card:</p>
|
||||
<ul>
|
||||
<li>Header Row
|
||||
<ul>
|
||||
<li>Title label.</li>
|
||||
<li>Flag picker (Force chart only) — <code><q-btn-dropdown></code> between <code>ForceToWorkpieceOnProgramCoordinate</code> (default) and <code>ForceToToolOnToolRunningCoordinate</code>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Body — <code>UplotChart.vue</code> rendering three series (X / Y / Z channels) over a shared time axis <code>ts</code>.</li>
|
||||
<li>Empty-state overlay — when <code>hasData=false</code> (no selection, no shots), a placeholder is shown; the underlying series still carry a shape-preserving <code>ts=[0,360]</code>, <code>xs/ys/zs=[NaN,NaN]</code> payload so the canvas does not jump.</li>
|
||||
</ul>
|
||||
<h2 id="behavior">Behavior</h2>
|
||||
<ul>
|
||||
<li><strong>Step-driven refetch.</strong> <code>BaseCycleLineChart</code> accepts a <code>fetcher: () => Promise<CycleLineResponse></code> prop. On <code>SelectedStepInfoHub.StepChanged</code> the fetcher is re-invoked and the chart re-renders.</li>
|
||||
<li><strong>Server-resolved step.</strong> Cycle-line endpoints resolve “currently-selected step” from <code>LocalProjectService.ClStrip.GetSelectedPos()</code> rather than accepting <code>stepIndex</code> as a query parameter. This keeps the contract simple and aligns with the event-driven model used by the rest of the player plumbing.</li>
|
||||
<li><strong>Toolbar slot.</strong> The optional <code>#toolbar</code> slot lets callers embed per-chart controls (e.g. the Force chart's flag picker) without subclassing.</li>
|
||||
</ul>
|
||||
<h2 id="source-code-path">Source Code Path</h2>
|
||||
<p>See <a href="../index.html">HiNC App Anatomy</a> for git repository links.</p>
|
||||
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>Not implemented.</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/player/charts/BaseCycleLineChart.vue</code> — shared cycle-line skeleton.</li>
|
||||
<li><code>wwwroot-src/src/components/player/charts/UplotChart.vue</code> — uplot wrapper (shared with strip charts).</li>
|
||||
<li><code>wwwroot-src/src/components/player/charts/ForceCycleLineChart.vue</code> — force cycle-line chart with flag picker.</li>
|
||||
<li><code>wwwroot-src/src/components/player/charts/SimSpindleMomentCycleLineChart.vue</code> — simulated spindle moment.</li>
|
||||
<li><code>wwwroot-src/src/components/player/charts/SensorSpindleMomentCycleLineChart.vue</code> — sensor-measured spindle moment.</li>
|
||||
<li><code>wwwroot-src/src/components/player/charts/DynamometerForceCycleLineChart.vue</code> — dynamometer force.</li>
|
||||
<li><code>Players/PlayerChartsController.cs</code> — cycle-line endpoints:
|
||||
<ul>
|
||||
<li><code>GET /api/player/cycle-line/force?flag=ForceToWorkpieceOnProgramCoordinate|ForceToToolOnToolRunningCoordinate</code></li>
|
||||
<li><code>GET /api/player/cycle-line/sim-spindle-moment</code></li>
|
||||
<li><code>GET /api/player/cycle-line/sensor-spindle-moment</code></li>
|
||||
<li><code>GET /api/player/cycle-line/dynamometer-force</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>All four endpoints return <code>{ hasData, ts, xs, ys, zs }</code> flattened for direct uplot consumption. Empty payloads use a shape-preserving <code>ts=[0,360]</code>, <code>xs/ys/zs=[NaN,NaN]</code> fill.</p>
|
||||
<h2 id="deferred">Deferred</h2>
|
||||
<ul>
|
||||
<li><strong>True twin overlay</strong> (two series on one canvas) for Sim + Sensor Spindle Moment. Currently rendered as two sibling cards sharing the same chart grid, which keeps the uplot instances independent. Revisit if operators ask for overlap.</li>
|
||||
</ul>
|
||||
<h2 id="related-pages">Related Pages</h2>
|
||||
<ul>
|
||||
<li><a href="strip-charts.html">Strip Charts</a> — windowed mission-timeline charts that share the same <code>uplot</code> engine and drive step selection.</li>
|
||||
<li><a href="index.html">Player Panel</a> — top-level layout that hosts the charts.</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,212 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Player Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Player 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="player-panel">Player Panel</h1>
|
||||
|
||||
<p>The Player Panel is the primary visualization component for machining simulation playback.</p>
|
||||
<h2 id="key-models">Key Models</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> - Project data service</li>
|
||||
<li><a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a> - User service</li>
|
||||
</ul>
|
||||
<h2 id="associated-tool-bars">Associated Tool Bars</h2>
|
||||
<ul>
|
||||
<li><a href="player-tool-bar.html">Player Tool Bar</a></li>
|
||||
<li><a href="../renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a></li>
|
||||
<li><a href="player-extended-renderingcanvas-tool-bar.html">Player extended RenderingCanvas Tool Bar</a></li>
|
||||
</ul>
|
||||
<h2 id="layout-structure">Layout Structure</h2>
|
||||
<p>The Player Panel consists of:</p>
|
||||
<ul>
|
||||
<li><strong>Central Area</strong>: <a href="../../fundamentals/rendering/rendering-canvas/index.html">RenderingCanvas</a> for 3D visualization</li>
|
||||
<li><strong>Vertical Splitter</strong>: Draggable bar to resize widths</li>
|
||||
<li><strong>Side Panel</strong>:
|
||||
<ul>
|
||||
<li>Upper: <a href="selected-step-info-panel.html">Selected-Step Info Panel</a></li>
|
||||
<li>Horizontal Splitter: Draggable bar to resize heights</li>
|
||||
<li>Lower: <a href="../session-message-panel/index.html">Session Message Panel</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="default-panel-configuration">Default Panel Configuration</h2>
|
||||
<p>The Player Panel is set as the default panel on the <code>Page Panel</code> when the main window opens. The associated toolbars (Player Tool Bar, RenderingCanvas Tool Bar, Player Extended RenderingCanvas Tool Bar) are also configured accordingly.</p>
|
||||
<h2 id="player-extended-renderingcanvas-tool-bar-behavior">Player Extended RenderingCanvas Tool Bar Behavior</h2>
|
||||
<p>The <a href="player-extended-renderingcanvas-tool-bar.html">Player Extended RenderingCanvas Tool Bar</a> provides additional controls:</p>
|
||||
<ul>
|
||||
<li><a href="player-extended-renderingcanvas-tool-bar.html#behavior-of-cl-strip-buttons-and-fit-view-button">CL Strip Buttons and Fit View Button</a> - Controls for CL strip display and view fitting</li>
|
||||
<li><a href="player-extended-renderingcanvas-tool-bar.html#behavior-of-project-rendering-items-dropdown">Project Rendering Items DropDown</a> - Selection of rendering items</li>
|
||||
</ul>
|
||||
<p>The toolbar receives notifications when the project is changed from <a href="../main-panel.html">Main Panel</a>.</p>
|
||||
<h2 id="related-preference">Related Preference</h2>
|
||||
<ul>
|
||||
<li><a href="../preference/step-present-preference-page.html">Step Present Preference Page</a> - Controls step presentation settings</li>
|
||||
</ul>
|
||||
<h2 id="renderingcanvas-behavior">RenderingCanvas Behavior</h2>
|
||||
<p>The RenderingCanvas displays the machining project visualization:</p>
|
||||
<ol>
|
||||
<li>On initialization, a <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a> is created and assigned to <code>RenderingCanvas</code>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_Displayee">Displayee</a></li>
|
||||
<li>The displayee receives project data from <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a></li>
|
||||
<li>The RenderingCanvas is disposed when the Player Panel is disposed</li>
|
||||
</ol>
|
||||
<h2 id="source-code-locations">Source Code Locations</h2>
|
||||
<p>See <a href="../index.html">HiNC GUI Architecture</a> for git repository links.</p>
|
||||
<h3 id="wpf-application">WPF Application</h3>
|
||||
<ul>
|
||||
<li><code>Play/PlayerPanel</code></li>
|
||||
</ul>
|
||||
<h3 id="web-application">Web Application</h3>
|
||||
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
|
||||
<p>Core page + toolbars:</p>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/pages/PlayerPage.vue</code> — routed page at <code>/player</code>. Hosts the top toolbar row, the central <code><RenderingCanvas></code>, and the right-hand splitter with step-info + session-message panels.</li>
|
||||
<li><code>wwwroot-src/src/components/player/PlayerToolBar.vue</code> — play / pause / stop / seek controls.</li>
|
||||
<li><code>wwwroot-src/src/components/player/PlayerExtendedToolBar.vue</code> — Display Options ▾ (via the shared <code>DisplayOptionsMenu</code>) + CL-strip fit-view controls + Project Rendering Items dropdown.</li>
|
||||
<li><code>wwwroot-src/src/components/player/PlayerDivisionVisibilityButton.vue</code> — <code>view_quilt</code> icon button that drives the ten O1.1 layout toggles (which strip charts / cycle-line charts / info panels are visible). Persists via <code>/api/preference/player-div-config</code>.</li>
|
||||
<li><code>wwwroot-src/src/components/player/SelectedStepInfoPanel.vue</code> — condensed step-info summary (see <a href="selected-step-info-panel.html">Selected-Step Info Panel</a>).</li>
|
||||
<li><code>wwwroot-src/src/components/player/SessionMessagePanel.vue</code> — mission-time message list.</li>
|
||||
</ul>
|
||||
<p>Charts (see the dedicated anatomy pages for details):</p>
|
||||
<ul>
|
||||
<li><a href="strip-charts.html">Strip Charts</a> — three <code>uplot</code>-backed strip charts (availability / surface roughness / individual-property) driven by <code>ClStrip</code>.</li>
|
||||
<li><a href="cycle-line-charts.html">Cycle-Line Charts</a> — four <code>uplot</code>-backed cycle-line charts (force / sim spindle moment / sensor spindle moment / dynamometer force).</li>
|
||||
</ul>
|
||||
<p>Shared chart primitives (under <code>components/player/charts/</code>):</p>
|
||||
<ul>
|
||||
<li><code>UplotChart.vue</code> — thin uplot wrapper with <code>ResizeObserver</code> + reactive <code>data</code> / <code>series</code> / <code>bands</code> bindings.</li>
|
||||
<li><code>BaseStripChart.vue</code> — strip-chart skeleton that matches <code>PluralStripChart</code> (min / max banded series, header aspect picker, wheel / drag / click pointer handlers).</li>
|
||||
<li><code>BaseCycleLineChart.vue</code> — cycle-line skeleton that takes a <code>fetcher</code> prop and re-fetches on <code>SelectedStepInfoHub</code> updates.</li>
|
||||
</ul>
|
||||
<p>Backends:</p>
|
||||
<ul>
|
||||
<li><code>Players/PlayerController.cs</code> — play / pause / stop / seek.</li>
|
||||
<li><code>Players/PlayerStatusHub.cs</code> + <code>Players/PlayerStatusService.cs</code> — session lifecycle broadcasts.</li>
|
||||
<li><code>Players/SessionMessageHub.cs</code> + <code>Players/SessionMessageService.cs</code> — mission-time message stream.</li>
|
||||
<li><code>Players/SelectedStepInfoHub.cs</code> + <code>Players/SelectedStepInfoService.cs</code> — selected-step push notifications (drives step-info panel + cycle-line chart refetches).</li>
|
||||
<li><code>Players/ClStripController.cs</code> + <code>Players/ClStripHub.cs</code> + <code>Players/ClStripBroadcastService.cs</code> — CL-strip range state + zoom / pan / select / enter broadcasts.</li>
|
||||
<li><code>Players/PlayerChartsController.cs</code> — unified strip-chart + cycle-line-chart data endpoints.</li>
|
||||
<li><code>Players/PlayerCanvasHub.cs</code> — rendering-canvas SignalR hub for the central viewer.</li>
|
||||
</ul>
|
||||
<h2 id="implementation-checklist">Implementation Checklist</h2>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>When building a new Player Panel implementation:</p>
|
||||
<ol>
|
||||
<li>Create the layout with RenderingCanvas</li>
|
||||
<li>Set up RenderingCanvas behavior</li>
|
||||
<li>Create <a href="player-tool-bar.html">Player Tool Bar</a></li>
|
||||
<li>Create <a href="player-extended-renderingcanvas-tool-bar.html">Player Extended RenderingCanvas Tool Bar</a> with CL Strip, Fit View, and Rendering Items behaviors</li>
|
||||
<li>Connect to Navigation Menu on <a href="../main-panel.html">Main Panel</a></li>
|
||||
<li>Set Player Panel as default panel with associated toolbars</li>
|
||||
<li>Build <a href="../session-message-panel/index.html">Session Message Panel</a>, <a href="selected-step-info-panel.html">Selected-Step Info Panel</a>, and <a href="../preference/step-present-preference-page.html">Step Present Preference Page</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
</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>
|
||||
+157
@@ -0,0 +1,157 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Player extended RenderingCanvas Tool Bar | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Player extended RenderingCanvas Tool Bar | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="player-extended-renderingcanvas-tool-bar">Player extended RenderingCanvas Tool Bar</h1>
|
||||
|
||||
<p>The model of the tool bar is <a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a> which is assigned from the RenderingCanvas of <a href="index.html">Player Panel</a>.</p>
|
||||
<p>The content of DispEngine.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_Displayee">Displayee</a> here is <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a>. the key content of the <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a> is <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.</p>
|
||||
<p>The sub-model is <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a> and <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li><code>Player extended RenderingCanvas Tool Bar</code>
|
||||
<ul>
|
||||
<li><code>Show CL Strip Button</code></li>
|
||||
<li><code>Show CL Strip Dots Button</code>
|
||||
Only editable if the <a class="xref" href="../../api/Hi.MachiningProcs.RenderingFlag.html#Hi_MachiningProcs_RenderingFlag_ClStrip">ClStrip</a> in <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html#Hi_MachiningProcs_MachiningProjectDisplayee_RenderingFlagBitArray">RenderingFlagBitArray</a> is true.</li>
|
||||
<li><code>Fit View Button</code></li>
|
||||
<li><code>Rendering Items SubMenu</code>
|
||||
<a class="xref" href="../../api/Hi.MachiningProcs.RenderingFlag.html">RenderingFlag</a>-based checkboxes that deal the boolean value in <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html#Hi_MachiningProcs_MachiningProjectDisplayee_RenderingFlagBitArray">RenderingFlagBitArray</a>, such as “Show Machine”, “Show Workpiece”, etc..
|
||||
Except the ClStrip option since there has already be managed by the Show CL Strip Button.
|
||||
Show HeidenhainCoordinate checkbox only if <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.<a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_NcEnv">NcEnv</a>.<a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_CncBrand">CncBrand</a> is <a class="xref" href="../../api/Hi.Numerical.CncBrand.html#Hi_Numerical_CncBrand_Heidenhain">Heidenhain</a>.
|
||||
Create the submenu component class since the other GUI component also use it. See <a href="../controller/index.html">controller page</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>checkboxs in Project Rendering Items SubMenu can be classified by the category of <a class="xref" href="../../api/Hi.MachiningProcs.RenderingFlag.html">RenderingFlag</a> (see the hyperlink for the categories).</p>
|
||||
</div>
|
||||
<h2 id="behavior-of-cl-strip-buttons-and-fit-view-button">Behavior of CL Strip Buttons and Fit View Button</h2>
|
||||
<p>Apply <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html#Hi_MachiningProcs_MachiningProjectDisplayee_RenderingFlagBitArray">RenderingFlagBitArray</a> to set the Project Rendering Items.</p>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>Extract the <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> From the <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a> and use it to set the behaviors.</p>
|
||||
</div>
|
||||
<h2 id="behavior-of-project-rendering-items-dropdown">Behavior of <code>Project Rendering Items DropDown</code></h2>
|
||||
<p>See <a class="xref" href="../../sample/Sample.Machining.DemoRenderingMachiningProcessAndStripPosSelection.html">DemoRenderingMachiningProcessAndStripPosSelection</a> for the sample code to complete the behavior of the buttons.</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>Play/PlayerExtendedRenderingCanvasToolBar</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/player/player-extended-toolbar.js</li>
|
||||
<li>Players/PlayerController.cs</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,191 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Player Tool Bar | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Player Tool Bar | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="player-tool-bar">Player Tool Bar</h1>
|
||||
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li><code>Player Tool Bar</code>
|
||||
<ul>
|
||||
<li><code>Status Text Field</code></li>
|
||||
<li><code>Start Button</code></li>
|
||||
<li><code>Pause Button</code></li>
|
||||
<li><code>Run-One-Line Button</code></li>
|
||||
<li><code>Run-One-Step Button</code></li>
|
||||
<li><code>Stop Button</code></li>
|
||||
<li><code>Reset Button</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="behavior-of-player-tool-bar">Behavior of <code>Player Tool Bar</code></h2>
|
||||
<p>See the example code to:</p>
|
||||
<ul>
|
||||
<li>complete the behavior of the buttons and <code>Status Text Field</code>.</li>
|
||||
<li>The rapidly used buttons should has hotkey. At least the following buttons:
|
||||
<ul>
|
||||
<li>Run One Line Button</li>
|
||||
<li>Run One Step Button</li>
|
||||
<li>Start/Continue</li>
|
||||
<li>Pause</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Both webservice and win-desktop applications use <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> events for monitoring <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_PacePlayer">PacePlayer</a> status changes.</li>
|
||||
<li>In webservice applications, the <code>PlayerStatusService</code> subscribes to these <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> events and broadcasts status changes via <code>PlayerStatusHub</code> using SignalR for real-time communication.</li>
|
||||
<li>Win-desktop applications can directly subscribe to <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> events for status updates.</li>
|
||||
<li>Alter the background color of the <code>Status Text Field</code> if the status changed.
|
||||
<ul>
|
||||
<li>Warning style color
|
||||
<ul>
|
||||
<li>Running</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Secondary style color
|
||||
<ul>
|
||||
<li>Paused</li>
|
||||
<li>No Project</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Success style color
|
||||
<ul>
|
||||
<li>Finished</li>
|
||||
<li>Ready</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>The action of <code>Reset Button</code> should be async for user experience.</p>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>Use icon instead of text to the tool bar button. Run One Line Button and Run One Step Button use the same icon, use the different color to resolve them.</p>
|
||||
<ul>
|
||||
<li>Run One Line Button > default color with green seasoned</li>
|
||||
<li>Run One Step Button > default color with blue seasoned</li>
|
||||
</ul>
|
||||
<p>The other button use the default color is enough.</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>Play/PlayerToolBar</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/player/player-tool-bar.js</li>
|
||||
<li>Players/PlayerController.cs</li>
|
||||
<li>Players/PlayerStatusHub.cs</li>
|
||||
<li>Players/PlayerStatusService.cs</li>
|
||||
</ul>
|
||||
<h4 id="signalr-implementation-webapi-only">SignalR Implementation (Webapi Only)</h4>
|
||||
<p><code>PlayerStatusHub</code> provides real-time player status updates, with methods <code>GetPlayerStatus()</code> and event <code>PlayerStatusUpdated</code>. <code>PlayerStatusService</code> monitors <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_PacePlayer">PacePlayer</a> events (<a class="xref" href="../../api/Hi.Common.PacePlayer.html#Hi_Common_PacePlayer_IsRunningChangedEvent">IsRunningChangedEvent</a>, <a class="xref" href="../../api/Hi.Common.PacePlayer.html#Hi_Common_PacePlayer_IsLockedChangedEvent">IsLockedChangedEvent</a>, <a class="xref" href="../../api/Hi.Common.PacePlayer.html#Hi_Common_PacePlayer_IsFinishedChangedEvent">IsFinishedChangedEvent</a>, <a class="xref" href="../../api/Hi.Common.PacePlayer.html#Hi_Common_PacePlayer_ResetedEvent">ResetedEvent</a>) and broadcasts changes via SignalR. The JavaScript component connects to <code>/playerStatusHub</code> and listens for status updates. API endpoints include <code>/api/player/start</code>, <code>/api/player/pause</code>, <code>/api/player/resume</code>, <code>/api/player/run-line</code>, <code>/api/player/run-step</code>, <code>/api/player/stop</code>, and <code>/api/player/reset</code>.</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,149 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Selected-Step Info Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Selected-Step Info 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="selected-step-info-panel">Selected-Step Info Panel</h1>
|
||||
|
||||
<p>The panel locates on the <a href="index.html">Player Panel</a>.</p>
|
||||
<p>The model is <a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> and <a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a>.</p>
|
||||
<p>The <a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> is assigned by <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_ClStrip">ClStrip</a>.<a class="xref" href="../../api/Hi.CutterLocations.ClStrips.ClStrip.html#Hi_CutterLocations_ClStrips_ClStrip_PosSelected">PosSelected</a>.</p>
|
||||
<p>Show step infomation from <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_DisplayedStepPresentAccessList">DisplayedStepPresentAccessList</a>.</p>
|
||||
<p>The resx of <a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> contains the translation of <a class="xref" href="../../api/Hi.MachiningSteps.PresentAttribute.html">PresentAttribute</a>.<a class="xref" href="../../api/Hi.MachiningSteps.PresentAttribute.html#Hi_MachiningSteps_PresentAttribute_Name">Name</a>, apply the translation to the GUI. If the translation not existed, use the original value.</p>
|
||||
<p>See Also <a href="../preference/step-present-preference-page.html">Step Present Preference Page</a>.</p>
|
||||
<h2 id="sample-code">Sample Code</h2>
|
||||
<p>Refer the code to show step infomation.</p>
|
||||
<pre><code class="lang-csharp" name="SampleCode-ShowStepPresent">internal static void ShowStepPresent(
|
||||
UserService userEnv, MachiningStep machiningStep)
|
||||
{
|
||||
foreach (var entry in userEnv.DisplayedStepPresentAccessList)
|
||||
{
|
||||
var present = entry.Value.Present;
|
||||
var valueText = string.Format("{0:" + present.DataFormatString + "}", entry.Value.GetValueFunc.Invoke(machiningStep));
|
||||
Console.WriteLine($"{present.ShortName}: {valueText} {present.TailUnitString} ({present.Name} [{entry.Key}])");
|
||||
}
|
||||
}
|
||||
</code></pre><h2 id="signalr-implementation-webapi-only">SignalR Implementation (Webapi Only)</h2>
|
||||
<p><code>SelectedStepInfoHub</code> provides real-time step updates with method <code>GetSelectedStepInfo()</code> and event <code>SelectedStepInfoUpdated</code>. <code>SelectedStepInfoService</code> monitors <a class="xref" href="../../api/Hi.CutterLocations.ClStrips.ClStrip.html#Hi_CutterLocations_ClStrips_ClStrip_PosSelected">PosSelected</a> and <a class="xref" href="../../api/Hi.CutterLocations.ClStrips.ClStrip.html#Hi_CutterLocations_ClStrips_ClStrip_MachiningStepSelected">MachiningStepSelected</a> events and broadcasts updates. The JavaScript component connects to <code>/selectedStepInfoHub</code> to receive step change notifications and update the UI accordingly.</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>Play/SelectedStepInfoPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/player/selected-step-info-panel.js (Vue component)</li>
|
||||
<li>wwwroot/player/selected-step-info-panel.css (Styles)</li>
|
||||
<li>Players/PlayerController.cs (REST API - GetSelectedStepInfo endpoint)</li>
|
||||
<li>Players/SelectedStepInfoService.cs (Business logic)</li>
|
||||
<li>Players/SelectedStepInfoHub.cs (SignalR Hub for real-time 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,218 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Strip Charts | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Strip Charts | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="strip-charts">Strip Charts</h1>
|
||||
|
||||
<p>The strip charts visualise a <strong>windowed, downsampled view of the full mission timeline</strong> for physics / quality aspects that are computed per step across the whole NC program. They are rendered as min/max banded series over the <code>ClStrip.GetDispBegin() .. AbsDispEnd</code> window. Operators use them to spot which segments of the mission are loading the spindle, degrading surface quality, or hitting thermal limits.</p>
|
||||
<p>The anatomy covers three strip charts in the webservice, all sharing <code>BaseStripChart.vue</code>:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Chart</th>
|
||||
<th>Source Aspect</th>
|
||||
<th>Items</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Plural Strip Availability Chart</td>
|
||||
<td><code>Availability</code></td>
|
||||
<td>Yielding-stress / max-spindle-torque / max-spindle-power / spindle-working-temperature / thermal-yield ratios (5 series).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Plural Strip Roughness Chart</td>
|
||||
<td><code>SurfaceRoughness</code></td>
|
||||
<td>Re-cut depth + program-side cusp + Δ tip deflection X / Y / Z in µm (5 series).</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Strip Individual Chart</td>
|
||||
<td><code>Individual</code></td>
|
||||
<td>One series of a user-picked <code>StepPropertyAccessDictionary</code> key (≈90 keys).</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Key Model: <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> via <code>LocalProjectService.ClStrip</code> + <code>LocalProjectService.StepPropertyAccessDictionary</code>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<p>Each strip chart is a card:</p>
|
||||
<ul>
|
||||
<li>Header Row
|
||||
<ul>
|
||||
<li>Title label (aspect name).</li>
|
||||
<li>Aspect picker (Individual chart only) — <code>tune</code> icon dropdown listing every <code>StepPropertyAccessDictionary</code> key with a <code>GetQuantityFunc</code>, sorted by <code>PresentAttribute.Name</code>. Picking a key calls <code>POST /api/player/inspecting-key</code> and re-fetches the chart.</li>
|
||||
<li>X-axis picker — <code>IndexByTime</code> (default) / <code>IndexByStep</code>.</li>
|
||||
<li>Window chip — displays <code>[dispBegin..absDispEnd] / count</code> for at-a-glance scope.</li>
|
||||
<li><code>zoom_out_map</code> reset button — returns the window to the full mission.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Body — <code>UplotChart.vue</code> rendering one min/max band pair per item (two stroked series of the same colour + a filled band at 15% opacity).</li>
|
||||
<li>“No physics data” overlay — shown when every item's min / max arrays are all NaN (typical for Availability without a physics licence).</li>
|
||||
</ul>
|
||||
<h2 id="behavior">Behavior</h2>
|
||||
<ul>
|
||||
<li><strong>Windowed fetch.</strong> Only the <code>ClStrip.GetDispBegin() .. AbsDispEnd</code> window is fetched, at a bucket count matching the chart's pixel width. The server-side <code>ClStrip.GetMinMaxList(threshold, itemCount)</code> handles down-sampling.</li>
|
||||
<li><strong>Pointer interactions</strong>:
|
||||
<ul>
|
||||
<li><code>wheel</code> over the plot area → <code>POST /api/cl-strip/wheel</code> with <code>scale = Math.pow(1.05, deltaY * 1/166)</code> + <code>xPositionPercentage</code>.</li>
|
||||
<li>Right / middle-button drag → <code>POST /api/cl-strip/pan</code> with accumulated <code>xOffsetPercentage</code>. Frame-batched via <code>requestAnimationFrame</code>. Touch / pen drags also pan without a button modifier.</li>
|
||||
<li>Left click → <code>POST /api/cl-strip/select-step</code> with the nearest bucket's original step index (via <code>chart.valToPos</code> reverse lookup).</li>
|
||||
<li>Mouse move (debounced 80 ms) → <code>POST /api/cl-strip/enter-step</code> for hover.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Live refresh.</strong> <code>useClStripHub</code> subscribes to <code>DispRangeChanged</code> (re-fetch when anyone else zooms / pans) and <code>Updated</code> (coalesced re-broadcast while a mission is running). <code>PlayerStatusHub.hasProject</code> rising edge also triggers a refetch.</li>
|
||||
<li><strong>Client-side debounce.</strong> <code>BaseStripChart.load()</code> is debounced 50 ms on the client so a burst of <code>Updated</code> events during a fast-running mission coalesces into one fetch.</li>
|
||||
</ul>
|
||||
<h2 id="source-code-path">Source Code Path</h2>
|
||||
<p>See <a href="../index.html">HiNC App Anatomy</a> for git repository links.</p>
|
||||
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>Not implemented.</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/player/charts/BaseStripChart.vue</code> — shared strip-chart skeleton.</li>
|
||||
<li><code>wwwroot-src/src/components/player/charts/UplotChart.vue</code> — uplot wrapper.</li>
|
||||
<li><code>wwwroot-src/src/components/player/charts/PluralStripAvailabilityChart.vue</code> — availability chart.</li>
|
||||
<li><code>wwwroot-src/src/components/player/charts/PluralStripRoughnessChart.vue</code> — surface-roughness chart.</li>
|
||||
<li><code>wwwroot-src/src/components/player/charts/StripIndividualChart.vue</code> — aspect-picker individual chart.</li>
|
||||
<li><code>wwwroot-src/src/api/clStrip.ts</code> — typed REST wrappers: <code>getClStripRange</code>, <code>setClStripDispRange</code>, <code>clStripWheel</code>, <code>clStripPan</code>, <code>selectClStripStep</code>, <code>enterClStripStep</code>.</li>
|
||||
<li><code>wwwroot-src/src/composables/useClStripHub.ts</code> — singleton hub wrapper (same ref-counting pattern as the other player hubs).</li>
|
||||
<li><code>Players/PlayerChartsController.cs</code> — strip-chart data:
|
||||
<ul>
|
||||
<li><code>GET /api/player/strip-chart?aspect=Availability|SurfaceRoughness|Individual&xValueCategory=IndexByTime|IndexByStep&widthHint=…&dispBegin=…&dispEnd=…&inspectingKey=…</code> → <code>{ xs, indexes, items:[{ key, label, unit, min, max }], isXTicksRangeMode, dispBegin, absDispEnd, count }</code>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><code>Players/ClStripController.cs</code> — range manipulation (server-side counterparts of the pointer handlers above):
|
||||
<ul>
|
||||
<li><code>GET /api/cl-strip/range</code> — snapshot <code>{ dispBegin, absDispEnd, count, selectedIndex, enteredIndex }</code>.</li>
|
||||
<li><code>POST /api/cl-strip/disp-range</code> body <code>{ dispBegin, dispEnd }</code>.</li>
|
||||
<li><code>POST /api/cl-strip/wheel</code> body <code>{ scale, xPositionPercentage, xValueCategory }</code>.</li>
|
||||
<li><code>POST /api/cl-strip/pan</code> body <code>{ xOffsetPercentage, xValueCategory }</code>. Legacy <code>feelingRatio=2</code>.</li>
|
||||
<li><code>POST /api/cl-strip/select-step</code> body <code>{ stepIndex }</code> → <code>ClStrip.SetSelectedPos(...)</code>.</li>
|
||||
<li><code>POST /api/cl-strip/enter-step</code> body <code>{ stepIndex }</code> (nullable) → <code>ClStrip.SetEnteredPos(...)</code>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><code>Players/ClStripHub.cs</code> + <code>Players/ClStripBroadcastService.cs</code> — SignalR at <code>/clStripHub</code>. Broadcasts <code>DispRangeChanged(snapshot)</code>, <code>StepSelected({ stepIndex })</code>, <code>StepEntered({ stepIndex })</code>, <code>Updated(snapshot)</code>. Single-flight <code>Interlocked</code> mutex coalesces re-broadcasts; client debounce handles the rest of the rate-limiting.</li>
|
||||
</ul>
|
||||
<h2 id="deferred">Deferred</h2>
|
||||
<ul>
|
||||
<li>Y-axis custom tick formatter (e.g. <code>0.60</code> → <code>60%</code> for Availability). Port is <code>axes[1].values: (_, vals) => vals.map(v => \</code>${(v*100).toFixed(0)}%`)` in uPlot; not yet applied. Same one-liner for µm / N suffixes.</li>
|
||||
<li><code>triggerHover</code> external programmatic hover — the server-side event flow + client-side hover-on-drag are shipped, but the uPlot cursor is not yet programmatically positioned on incoming <code>StepEntered</code> events from other charts. Pure UX polish.</li>
|
||||
<li><code>RangeColorRule</code> per-value colour bands — legacy paints bar backgrounds by value thresholds. Requires a custom uPlot <code>draw</code> hook.</li>
|
||||
<li><code>VRange</code> modes (Fit / Lock / Symmetric) from <code>StripIndividualInputGroup</code> — uPlot supports via <code>scales.y.range</code> function; deferred (auto-fit default is fine for now).</li>
|
||||
</ul>
|
||||
<h2 id="related-pages">Related Pages</h2>
|
||||
<ul>
|
||||
<li><a href="cycle-line-charts.html">Cycle-Line Charts</a> — per-selected-step charts that share the same <code>uplot</code> engine.</li>
|
||||
<li><a href="index.html">Player Panel</a> — top-level layout that hosts the charts.</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>Graphic-Cache SubMenu | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Graphic-Cache SubMenu | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="graphic-cache-submenu">Graphic-Cache SubMenu</h1>
|
||||
|
||||
<p>The submenu locates on the <a href="index.html">Preference Menu Dropdown</a>.</p>
|
||||
<p>The model <a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a> is from its parent component.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Graphic-Cache SubMenu
|
||||
<ul>
|
||||
<li><code>Graphic-Cache Lower Limit Input Text Field</code></li>
|
||||
<li><code>Graphic-Cache Upper Limit Input Text Field</code></li>
|
||||
<li><code>Graphic-Cache Input Text Field</code></li>
|
||||
<li><code>Graphic-Cache Slider</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="behavior">Behavior</h2>
|
||||
<p><code>Graphic-Cache Input Text Field</code> and <code>Graphic-Cache Slider</code> bind the <a class="xref" href="../../api/Hi.HiNcKits.UserConfig.html#Hi_HiNcKits_UserConfig_GraphicCacheMb">GraphicCacheMb</a>. The limit text fields also bind to the properties of <a class="xref" href="../../api/Hi.HiNcKits.UserConfig.html">UserConfig</a>.</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>MainWindow (be included in preference menu)</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/preference/GraphicCacheMenu.vue</code> — nested <code><q-menu></code> under <code>Preference → Graphic Cache</code> with Lower / Upper (<code>NumericInput</code>) + Current (<code>NumericInput</code>) + <code><q-slider></code>. Commits on blur / change.</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/NumericInput.vue</code> — shared <code>Infinity</code>-friendly numeric field reused for the three limit inputs.</li>
|
||||
<li><code>wwwroot-src/src/layouts/AppMenuBar.vue</code> — hosts the Graphic Cache entry inside the Preference dropdown.</li>
|
||||
<li><code>wwwroot-src/src/api/preference.ts</code> — typed wrapper over <code>GET/POST /api/preference/graphic-cache</code>.</li>
|
||||
<li><code>Environments/PreferenceController.cs</code> — REST endpoints: <code>GET /api/preference/graphic-cache</code> returns <code>{ graphicCacheMb, lowerLimitMb, upperLimitMb }</code>; <code>POST</code> writes through <code>UserService.SaveUserConfig()</code> → <code>UserConfig.GraphicCacheMb</code> → <code>CubeTree.DispCacheMb</code>.</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,148 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Preference Menu Dropdown | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Preference Menu Dropdown | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="preference-menu-dropdown">Preference Menu Dropdown</h1>
|
||||
|
||||
<p>The model of the UI is <a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a>.
|
||||
<a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a> contains <a class="xref" href="../../api/Hi.HiNcKits.UserConfig.html">UserConfig</a>, which is rapidly used in the GUI.</p>
|
||||
<p>The dropdown is on the <a href="../main-panel.html">Main Panel</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Preference Menu Dropdown
|
||||
<ul>
|
||||
<li><a href="step-present-preference-page.html">Step Present Preference</a> Button</li>
|
||||
<li><a href="graphic-cache-dropdown.html">Graphic-Cache Dropdown</a></li>
|
||||
<li><a href="language-selection-submenu.html">Language Selection SubMenu</a></li>
|
||||
<li>Show Physics Options CheckBox
|
||||
<ul>
|
||||
<li>The model is <a class="xref" href="../../api/Hi.HiNcKits.UserConfig.html#Hi_HiNcKits_UserConfig_ShowPhysicsOptions">ShowPhysicsOptions</a>.</li>
|
||||
<li>The checkbox is disabled and unchecked if <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_IsPhysicsLicensed">IsPhysicsLicensed</a> is false.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Show Log Button
|
||||
See <a href="../message-section-on-main-panel.html">Message Section</a>.
|
||||
The button does not exist on WPF application.</li>
|
||||
</ul>
|
||||
</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>
|
||||
<h3 id="wpf-application">WPF Application</h3>
|
||||
<ul>
|
||||
<li><code>MainWindow</code> (includes preference menu)</li>
|
||||
</ul>
|
||||
<h3 id="web-application">Web Application</h3>
|
||||
<ul>
|
||||
<li><code>wwwroot/preference/preference-menu.js</code></li>
|
||||
<li><code>Environments/PreferenceController.cs</code></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,150 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Language Selection SubMenu | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Language Selection SubMenu | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="language-selection-submenu">Language Selection SubMenu</h1>
|
||||
|
||||
<p>The submenu locates on the <a href="index.html">Preference Menu Dropdown</a>.</p>
|
||||
<p>The model <a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a> is from its parent component.</p>
|
||||
<p>Load the language preference on application start.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>Keep language resource on each UI componenets.</p>
|
||||
</div>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Language Selection SubMenu
|
||||
<ul>
|
||||
<li>English Radio CheckBox</li>
|
||||
<li>Simlified Chinese Radio CheckBox</li>
|
||||
<li>Traditional Chinese Radio CheckBox</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>MainWindow (In the preference menu)</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/layouts/AppMenuBar.vue</code> — nested <code>Preference → Language ▸</code> dropdown with English / 简体中文 / 繁體中文 radio items. The selected code is persisted via <code>appState.setLanguageCode(code)</code>.</li>
|
||||
<li><code>wwwroot-src/src/stores/appState.ts</code> — <code>languageCode</code> state + <code>setLanguageCode(code)</code> action; hydrated on layout mount by <code>loadServerPreferences()</code>.</li>
|
||||
<li><code>wwwroot-src/src/api/preference.ts</code> — typed wrapper over <code>GET/POST /api/preference/language</code>.</li>
|
||||
<li><code>Environments/PreferenceController.cs</code> — REST endpoints: <code>GET /api/preference/language</code> → <code>{ languageCode }</code>; <code>POST</code> validates against <code>["en", "zh-Hans", "zh-Hant"]</code> and writes through <code>UserService.SaveUserConfig()</code> → <code>UserConfig.LanguageCode</code>.</li>
|
||||
</ul>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>The rendered text does not yet flip when the language is changed — the preference is persisted but UI text localisation (via <code>vue-i18n</code> + translation bundles) is deferred. The confirmation toast informs the user of this intentionally.</p>
|
||||
</div>
|
||||
|
||||
</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,193 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Step Present Preference Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Step Present Preference Page | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="step-present-preference-page">Step Present Preference Page</h1>
|
||||
|
||||
<p>The model <a class="xref" href="../../api/Hi.HiNcKits.UserService.html">UserService</a> is from its parent component. The <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_UserConfig">UserConfig</a> is rapidly used.</p>
|
||||
<p>The model of Candidate Keys Panel is <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_CandidateStepPresentKeyList">CandidateStepPresentKeyList</a>.
|
||||
The model of Displayed Keys Panel is <a class="xref" href="../../api/Hi.HiNcKits.UserConfig.html#Hi_HiNcKits_UserConfig_DisplayedStepPresentKeyList">DisplayedStepPresentKeyList</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Step Present Preference Page (or window)
|
||||
<ul>
|
||||
<li>Candidate Keys Panel
|
||||
<ul>
|
||||
<li>Category A Panel
|
||||
<ul>
|
||||
<li>Key a ToggleButton</li>
|
||||
<li>Key b ToggleButton</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Category B Panel
|
||||
<ul>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>...</li>
|
||||
<li>Category Other Panel</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Displayed Keys Panel
|
||||
<ul>
|
||||
<li>Key 1</li>
|
||||
<li>Key 2</li>
|
||||
<li>...</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>The categories are not defined for programming logic but only for user experience. So decide and define the categories in the GUI here only.</p>
|
||||
<p>Since the Keys are not all come from the properties of <a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a>, a category panel (Category Other Panel) for the uncategoried keys is required.</p>
|
||||
<p>The keys in the Displayed Keys Panel is in sequence of <a class="xref" href="../../api/Hi.HiNcKits.UserConfig.html#Hi_HiNcKits_UserConfig_DisplayedStepPresentKeyList">DisplayedStepPresentKeyList</a>. User tune the sequence and remove key by the Displayed Keys Panel. User add and remove the key from the ToggleButtons in Candidate Keys Panel. Those UI control items are required.</p>
|
||||
<p>To both Candidate Keys Panel and Displayed Keys Panel:
|
||||
Apply <a class="xref" href="../../api/Hi.MachiningSteps.PresentAttribute.html">PresentAttribute</a>.<a class="xref" href="../../api/Hi.MachiningSteps.PresentAttribute.html#Hi_MachiningSteps_PresentAttribute_Name">Name</a> as Key label by <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_StepPresentAccessDictionary">StepPresentAccessDictionary</a>. Apply the key to the button tooltip.</p>
|
||||
<p>The resx of <a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> contains the translation of <a class="xref" href="../../api/Hi.MachiningSteps.PresentAttribute.html">PresentAttribute</a>.<a class="xref" href="../../api/Hi.MachiningSteps.PresentAttribute.html#Hi_MachiningSteps_PresentAttribute_Name">Name</a>, apply the translation to the GUI. If the translation not existed, use the original value.</p>
|
||||
<h3 id="categories">Categories</h3>
|
||||
<p>Categories are a GUI-level grouping of keys. The seven canonical categories are hard-coded on both the WPF window and the webservice backend, and share the same <code>nameof(MachiningStep.*)</code> switch so that adding a new property requires one change in one place (<code>ResolveStepPresentCategory(key)</code>). The current category order is:</p>
|
||||
<ol>
|
||||
<li>File (<code>NcName</code>, <code>NcLineNumber</code>, …).</li>
|
||||
<li>Time (<code>AccumulatedTime</code>, <code>StepTime</code>, …).</li>
|
||||
<li>Tool (<code>ToolId</code>, <code>CutterName</code>, …).</li>
|
||||
<li>Coordinate (<code>Position</code>, <code>Coordinate</code>, <code>Orientation</code>, …).</li>
|
||||
<li>Motion (<code>Feedrate</code>, <code>SpindleSpeed</code>, <code>Move</code>, …).</li>
|
||||
<li>Cutting / Chip (<code>CuttingGeom</code>, <code>ChipThickness</code>, <code>CuspHeight</code>, …).</li>
|
||||
<li>Physics (<code>Force</code>, <code>Power</code>, <code>Temperature</code>, …) — visible only when <code>UserService.EnablePhysics</code> is true.</li>
|
||||
</ol>
|
||||
<p>Keys whose property is not declared on <a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> (for example keys contributed by physics add-ons) fall into a catch-all “Other” category at the end of the panel.</p>
|
||||
<p>Refer to the code to apply <a class="xref" href="../../api/Hi.MachiningSteps.PresentAttribute.html">PresentAttribute</a>:</p>
|
||||
<pre><code class="lang-csharp" name="SampleCode-ShowStepPresent">internal static void ShowStepPresent(
|
||||
UserService userEnv, MachiningStep machiningStep)
|
||||
{
|
||||
foreach (var entry in userEnv.DisplayedStepPresentAccessList)
|
||||
{
|
||||
var present = entry.Value.Present;
|
||||
var valueText = string.Format("{0:" + present.DataFormatString + "}", entry.Value.GetValueFunc.Invoke(machiningStep));
|
||||
Console.WriteLine($"{present.ShortName}: {valueText} {present.TailUnitString} ({present.Name} [{entry.Key}])");
|
||||
}
|
||||
}
|
||||
</code></pre><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>Preference/StepPresentPreferenceWindow</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<p>Current (Quasar CLI SPA):</p>
|
||||
<ul>
|
||||
<li>wwwroot-src/src/pages/StepPresentPreferencePage.vue — two-pane editor (Candidate Keys grouped by the seven canonical categories / Displayed Keys drag-and-drop list) with Reload / Reset / Cancel / Save toolbar.</li>
|
||||
<li>wwwroot-src/src/api/preference.ts — <code>getStepPresentKeys</code> / <code>setStepPresentKeys</code> / <code>resetStepPresentKeys</code> + <code>STEP_PRESENT_CATEGORY_ORDER</code>.</li>
|
||||
<li>wwwroot-src/src/router/routes.ts — <code>/preference/step-present</code> entry.</li>
|
||||
<li>Environments/PreferenceController.cs — <code>GetStepPresentKeys</code> / <code>UpdateStepPresentKeys</code> (persists through <code>UserService.SaveUserConfig()</code>) / <code>ResetStepPresentKeys</code> + <code>ResolveStepPresentCategory</code> helper (shares the exact <code>nameof(MachiningStep.*)</code> switch with the WPF window).</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,204 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>RenderingCanvas Tool Bar | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="RenderingCanvas Tool Bar | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
<meta name="docfx:navrel" content="../toc.html">
|
||||
<meta name="docfx:tocrel" content="toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="renderingcanvas-tool-bar">RenderingCanvas Tool Bar</h1>
|
||||
|
||||
<p>The RenderingCanvas Tool Bar provides view control buttons for the 3D rendering canvas. It operates on <a class="xref" href="../api/Hi.Disp.DispEngine.html">DispEngine</a>.</p>
|
||||
<h2 id="view-buttons">View Buttons</h2>
|
||||
<p>The toolbar includes standard view buttons:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Button</th>
|
||||
<th>API Method</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Front View</td>
|
||||
<td><a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToFrontView">SetViewToFrontView()</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Back View</td>
|
||||
<td><a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToFrontView">SetViewToFrontView()</a> + <a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_TurnBackView">TurnBackView()</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Right View</td>
|
||||
<td><a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToRightView">SetViewToRightView()</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Left View</td>
|
||||
<td><a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToRightView">SetViewToRightView()</a> + <a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_TurnBackView">TurnBackView()</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Top View</td>
|
||||
<td><a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToTopView">SetViewToTopView()</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bottom View</td>
|
||||
<td><a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToTopView">SetViewToTopView()</a> + <a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_TurnBackView">TurnBackView()</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Isometric View</td>
|
||||
<td><a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToIsometricView">SetViewToIsometricView()</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="back-view-implementation">Back View Implementation</h3>
|
||||
<p>Back / Left / Bottom views are composed by first calling the corresponding forward-view method (<code>SetViewToFrontView</code> / <code>SetViewToRightView</code> / <code>SetViewToTopView</code>) and then invoking <a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_TurnBackView">TurnBackView()</a> to flip the camera about the view plane.</p>
|
||||
<h2 id="display-options-dropdown">Display Options Dropdown</h2>
|
||||
<p>Pages that sit next to a <code>RenderingCanvas</code> surface a per-page <code>Display Options ▾</code> menu button that toggles visibility / rendering-mode flags on the engine's current <code>Displayee</code>. The dropdown's layout (header + checkboxes + radio rows) is shared across four callers — Workpiece, Fixture, ToolHouse, and the Player extended toolbar — so it is implemented once as a generic, schema-driven component.</p>
|
||||
<h3 id="schema">Schema</h3>
|
||||
<p>Each dropdown consumes a <code>DisplayGroup[]</code> array. A group has an optional header and a flat list of items:</p>
|
||||
<ul>
|
||||
<li><code>{ kind: 'check', label, modelValue, disable?, onUpdate }</code> — a checkbox row.</li>
|
||||
<li><code>{ kind: 'radio', label, groupValue, value, disable?, onUpdate }</code> — a radio row inside an implicit radio-group keyed by <code>groupValue</code>.</li>
|
||||
</ul>
|
||||
<p>The component is generic over the radio <code>value</code> type, so <code>RenderingMode</code> / <code>HolderRenderingMode</code> / etc. stay fully typed at the call site.</p>
|
||||
<h3 id="hinc-2025-webservice-quasar-cli-spa">HiNC-2025-webservice (Quasar CLI SPA)</h3>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue</code> — the shared <code><q-btn-dropdown></code> + <code><q-list></code> implementation. Replaces the previously-inlined markup in all four callers.</li>
|
||||
<li>Callers (each reads a <code>DisplayGroup[]</code> computed from its page-local state and forwards <code>onUpdate</code> to its existing handlers):
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/pages/WorkpiecePage.vue</code></li>
|
||||
<li><code>wwwroot-src/src/pages/FixturePage.vue</code></li>
|
||||
<li><code>wwwroot-src/src/pages/ToolHousePage.vue</code></li>
|
||||
<li><code>wwwroot-src/src/components/player/PlayerExtendedToolBar.vue</code></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Backends: the existing per-page display controllers (<code>WorkpieceDisplayController.cs</code>, <code>FixtureDisplayController.cs</code>, <code>ToolHouseDisplayController.cs</code>, <code>Players/*DisplayController.cs</code>, and the shared <code>/api/rendering-flags</code> surface) drive the underlying <code>DispEngine.RenderingFlag</code> state. <code>DisplayOptionsMenu.vue</code> is UI-only; it does no REST work itself — the page owns the <code>onUpdate</code> handlers.</li>
|
||||
</ul>
|
||||
<h3 id="wpf">WPF</h3>
|
||||
<ul>
|
||||
<li><code>Common/DisplayOptionsMenu</code> — each page owns its own <code><MenuItem></code>-based dropdown; no shared component. Behaviour parity only (no schema-driven reuse).</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>
|
||||
<h3 id="wpf-application">WPF Application</h3>
|
||||
<ul>
|
||||
<li><code>Disp/RenderingCanvasToolBar</code></li>
|
||||
</ul>
|
||||
<h3 id="web-application">Web Application</h3>
|
||||
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/widgets/RenderingCanvasToolBar.vue</code> — View dropdown (Isometric / Front / Back / Right / Left / Top / Bottom). Shared across Workpiece / Fixture / ToolHouse / Controller / Player viewer sections.</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue</code> — schema-driven dropdown described above.</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/RenderingCanvas.vue</code> — SignalR-hosted WebSocket canvas (see <a href="hinc-web-service/disp-web-service.html">Rendering Canvas on Web Service</a>).</li>
|
||||
<li>Backends:
|
||||
<ul>
|
||||
<li><code>Disp/RenderingHub.cs</code> — handles view changes from the toolbar.</li>
|
||||
<li><code>Disp/RenderingService.cs</code> — manages <code>DispEngine</code> instances.</li>
|
||||
<li><code>Disp/RenderingFlagsController.cs</code> — the shared <code>/api/rendering-flags</code> surface consumed by <code>DisplayOptionsMenu.vue</code> callers.</li>
|
||||
</ul>
|
||||
</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,204 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Session Message Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Session Message 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="session-message-panel">Session Message Panel</h1>
|
||||
|
||||
<p>The model is <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_SessionProgress">SessionProgress</a>.</p>
|
||||
<p><a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> is obtained via dependency injection.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Top Message Filter ToolBar
|
||||
<ul>
|
||||
<li>Message Type Filter SubMenu
|
||||
<ul>
|
||||
<li>NC CheckBox</li>
|
||||
<li>Progress CheckBox</li>
|
||||
<li>Error CheckBox</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Message Text Filter Input
|
||||
<ul>
|
||||
<li>Message Text Filter Input Text Area</li>
|
||||
<li>Message Text Filter Reset Button</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Export Button</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Central Message Table</li>
|
||||
</ul>
|
||||
<h2 id="central-message-table">Central Message Table</h2>
|
||||
<p>The model of Central Message Table is <a class="xref" href="../../api/Hi.MachiningProcs.SessionProgress.html">SessionProgress</a>.<a class="xref" href="../../api/Hi.MachiningProcs.SessionProgress.html#Hi_MachiningProcs_SessionProgress_MessageCollection">MessageCollection</a>.</p>
|
||||
<p>Only take last 1000 filtered elements in the <a class="xref" href="../../api/Hi.MachiningProcs.SessionProgress.html#Hi_MachiningProcs_SessionProgress_MessageCollection">MessageCollection</a> by <a class="xref" href="../../api/Hi.MachiningProcs.SessionProgress.html#Hi_MachiningProcs_SessionProgress_GetFliteredList_Hi_MachiningProcs_SessionProgress_FilterFlag_System_String_">GetFliteredList(FilterFlag, string)</a> to show for user experience. Find the usage example in the code:</p>
|
||||
<pre><code class="lang-csharp" name="Demo_UseSessionMessageHost">internal static void DemoUseSessionMessageHost(LocalProjectService localProjectService)
|
||||
{
|
||||
SessionProgress sessionMessageHost = localProjectService.SessionProgress;
|
||||
|
||||
SessionProgress.FilterFlag filterFlags =
|
||||
SessionProgress.FilterFlag.NC |
|
||||
SessionProgress.FilterFlag.Progress |
|
||||
SessionProgress.FilterFlag.Error;
|
||||
string filterText = null;
|
||||
var filteredSessionMessageList = sessionMessageHost
|
||||
.GetFliteredList(filterFlags, filterText);
|
||||
|
||||
foreach (var sessionMessage in filteredSessionMessageList)
|
||||
{
|
||||
//M.I.: Message Index.
|
||||
Console.Write($"M.I.: {sessionMessage.Index}; Role: {sessionMessage.MessageRoleText}");
|
||||
|
||||
// For SessionMessageHost.FilterFlag.NC
|
||||
var nc = sessionMessage.DirectInstantSourceCommand;
|
||||
if (nc != null)
|
||||
Console.Write($"Message/NC: {nc.Line}; File: {nc.FilePath}; LineNo: {nc.GetLineNo()}; ");
|
||||
|
||||
// For SessionMessageHost.FilterFlag.Progress or Error.
|
||||
var multiTagMessage = sessionMessage.MultiTagMessage;
|
||||
if (multiTagMessage != null)
|
||||
Console.WriteLine($"Message/NC: {multiTagMessage.Message}");
|
||||
var exception = sessionMessage.Exception;
|
||||
if (exception != null)
|
||||
Console.WriteLine($"Message/NC: {exception.Message}");
|
||||
}
|
||||
File.WriteAllLines("output-session-messages.txt",
|
||||
filteredSessionMessageList.Select(m =>
|
||||
$"Msg[{m.Index}][{m.MessageRoleText}]: {m}"));
|
||||
}
|
||||
</code></pre>
|
||||
<p>In the table, show the columns: <code>Role</code>, <code>NC/Message</code>.</p>
|
||||
<p>Add update table event to <a class="xref" href="../../api/Hi.MachiningProcs.SessionProgress.html#Hi_MachiningProcs_SessionProgress_CollectionItemChanged">CollectionItemChanged</a>. The updating process has to be called by <a href="../general-rules.html">Loose Manner</a> for user experience.</p>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>On window desktop application (WPF), consider use textarea instead of datagrid to MessageTable for better performance. Use padding to show the different columns. And use the font in the textarea that with consistent width.</p>
|
||||
</div>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>The message display should be real-time.</p>
|
||||
</div>
|
||||
<h2 id="behavior-of-export-button">Behavior of Export Button</h2>
|
||||
<p>Export ALL filtered elements in the <a class="xref" href="../../api/Hi.MachiningProcs.SessionProgress.html#Hi_MachiningProcs_SessionProgress_MessageCollection">MessageCollection</a> by <a class="xref" href="../../api/Hi.MachiningProcs.SessionProgress.html#Hi_MachiningProcs_SessionProgress_GetFliteredList_Hi_MachiningProcs_SessionProgress_FilterFlag_System_String_">GetFliteredList(FilterFlag, string)</a>.</p>
|
||||
<h2 id="signalr-implementation-webapi-only">SignalR Implementation (Webapi Only)</h2>
|
||||
<p><code>SessionMessageHub</code> provides real-time message updates with method <code>GetSessionMessages(string filterFlags, string filterText, int limit)</code> and event <code>SessionMessagesUpdated</code>. <code>SessionMessageService</code> monitors <a class="xref" href="../../api/Hi.MachiningProcs.SessionProgress.html#Hi_MachiningProcs_SessionProgress_CollectionItemChanged">CollectionItemChanged</a> and broadcasts updates. The service uses <a class="xref" href="../../api/Hi.Common.LooseRunner.html">LooseRunner</a> for non-blocking async operations. The JavaScript component connects to <code>/sessionMessageHub</code> to receive real-time message updates.</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>Play/SessionMessagePanel</li>
|
||||
</ul>
|
||||
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/player/session-message-panel.js (Vue component)</li>
|
||||
<li>Players/PlayerController.cs (REST API - GetSessionMessages endpoint)</li>
|
||||
<li>Players/SessionMessageService.cs (Business logic)</li>
|
||||
<li>Players/SessionMessageHub.cs (SignalR Hub for real-time 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,277 @@
|
||||
|
||||
<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="general-rules.html" name="" title="General Rules">General Rules</a>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a>Common Patterns</a>
|
||||
|
||||
<ul class="nav level2">
|
||||
<li>
|
||||
<a href="common/dictionary-service-pattern.html" name="" title="DictionaryService and DictionaryHub Pattern">DictionaryService and DictionaryHub Pattern</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="common/webapi-with-hub-cleanup-assistence-pattern.html" name="" title="Webapi with Hub Cleanup Assistence Pattern">Webapi with Hub Cleanup Assistence Pattern</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a>Web Service Architecture</a>
|
||||
|
||||
<ul class="nav level2">
|
||||
<li>
|
||||
<a href="hinc-web-service/disp-web-service.html" name="" title="Rendering Canvas on Web Service">Rendering Canvas on Web Service</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a href="initialize-hiapi.html" name="" title="Initialize HiAPI">Initialize HiAPI</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="main-panel.html" name="" title="Main Panel">Main Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="message-section-on-main-panel.html" name="" title="Bottom Message Bar (UI Notification)">Bottom Message Bar (UI Notification)</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="renderingcanvas-tool-bar.html" name="" title="RenderingCanvas Tool Bar">RenderingCanvas Tool Bar</a>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a href="player/index.html" name="" title="Player Panel">Player Panel</a>
|
||||
|
||||
<ul class="nav level2">
|
||||
<li>
|
||||
<a href="player/player-tool-bar.html" name="" title="Player Tool Bar">Player Tool Bar</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="player/player-extended-renderingcanvas-tool-bar.html" name="" title="Player Extended RenderingCanvas Tool Bar">Player Extended RenderingCanvas Tool Bar</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="player/selected-step-info-panel.html" name="" title="Selected-Step Info Panel">Selected-Step Info Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="player/strip-charts.html" name="" title="Strip Charts">Strip Charts</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="player/cycle-line-charts.html" name="" title="Cycle-Line Charts">Cycle-Line Charts</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<a href="session-message-panel/index.html" name="" title="Session Message Panel">Session Message Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a>Preference</a>
|
||||
|
||||
<ul class="nav level2">
|
||||
<li>
|
||||
<a href="preference/index.html" name="" title="Preference Menu">Preference Menu</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="preference/graphic-cache-dropdown.html" name="" title="Graphic-Cache Dropdown">Graphic-Cache Dropdown</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="preference/language-selection-submenu.html" name="" title="Language Selection">Language Selection</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="preference/step-present-preference-page.html" name="" title="Step Present Preference">Step Present Preference</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a>Widget</a>
|
||||
|
||||
<ul class="nav level2">
|
||||
<li>
|
||||
<a href="widget/vec3d/index.html" name="" title="Vec3d Control">Vec3d Control</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="widget/mat4d/index.html" name="" title="Mat4d Control">Mat4d Control</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="widget/object-management-menu-button.html" name="" title="Object Management Menu Button">Object Management Menu Button</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="widget/gui-file-path-assignment.html" name="" title="GUI File Path Assignment">GUI File Path Assignment</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="widget/polar-resolution-2d-panel.html" name="" title="Polar Resolution 2D Panel">Polar Resolution 2D Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="widget/numeric-io-utilities.html" name="" title="Numeric Input/Output Utilities">Numeric Input/Output Utilities</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="widget/resizable-bar.html" name="" title="Resizable Bar">Resizable Bar</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a href="geom/index.html" name="" title="Geometry Panels">Geometry Panels</a>
|
||||
|
||||
<ul class="nav level2">
|
||||
<li>
|
||||
<a href="geom/box3d-control.html" name="" title="Box3d Control">Box3d Control</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="geom/cylindroid-control.html" name="" title="Cylindroid Control">Cylindroid Control</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="geom/extended-cylinder-panel.html" name="" title="Extended Cylinder Panel">Extended Cylinder Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="geom/geom-combination-control.html" name="" title="Geometry Combination Control">Geometry Combination Control</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="geom/geom-manage-control.html" name="" title="Geometry Management Panel">Geometry Management Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="geom/runtime-geom-panel.html" name="" title="Runtime Geometry Panel">Runtime Geometry Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="geom/stlfile-control.html" name="" title="STL File Control">STL File Control</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="geom/transformation-geom-control.html" name="" title="Transformation Geometry Control">Transformation Geometry Control</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a>Mechanism</a>
|
||||
|
||||
<ul class="nav level2">
|
||||
<li>
|
||||
<a href="mech/topo/transformers.html" name="" title="Transformers">Transformers</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/machining-chain-page.html" name="" title="Machine Tool Page">Machine Tool Page</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/mech-builder-page.html" name="" title="Mechanism Builder Page">Mechanism Builder Page</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/tool-house-page.html" name="" title="Tool House Page">Tool House Page</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/fixture-page.html" name="" title="Fixture Page">Fixture Page</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/workpiece-page.html" name="" title="Workpiece Page">Workpiece Page</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/spindle-capability-page.html" name="" title="Spindle Capability Page">Spindle Capability Page</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/background-coolant-page.html" name="" title="Background / Coolant Page">Background / Coolant Page</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/stick-tool-panel/index.html" name="" title="Stick Tool Panel">Stick Tool Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a href="mech/holder/index.html" name="" title="Holder Panel">Holder Panel</a>
|
||||
|
||||
<ul class="nav level3">
|
||||
<li>
|
||||
<a href="mech/holder/freeform-holder-panel.html" name="" title="Freeform Holder Panel">Freeform Holder Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/holder/cylindroid-holder-panel.html" name="" title="Cylindroid Holder Panel">Cylindroid Holder Panel</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a href="mech/cutter/index.html" name="" title="Cutter Panel">Cutter Panel</a>
|
||||
|
||||
<ul class="nav level3">
|
||||
<li>
|
||||
<a href="mech/cutter/milling-cutter-panel.html" name="" title="Milling Cutter Panel">Milling Cutter Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/cutter/freeform-remover-panel.html" name="" title="Freeform Remover Panel">Freeform Remover Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mech/cutter/apt-profile-panel.html" name="" title="APT Profile Panel">APT Profile Panel</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a href="controller/index.html" name="" title="Controller Page">Controller Page</a>
|
||||
|
||||
<ul class="nav level2">
|
||||
<li>
|
||||
<a href="controller/web-implementation.html" name="" title="Web Implementation">Web Implementation</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a href="util/index.html" name="" title="Util">Util</a>
|
||||
|
||||
<ul class="nav level2">
|
||||
<li>
|
||||
<a href="util/file-explorer.html" name="" title="File Explorer">File Explorer</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
<span class="expand-stub"></span>
|
||||
<a href="mission/index.html" name="" title="Mission Page">Mission Page</a>
|
||||
|
||||
<ul class="nav level2">
|
||||
<li>
|
||||
<a href="mission/script-command-panel.html" name="" title="Script Command Panel">Script Command Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mission/ListCommand-panel.html" name="" title="List Command Panel">List Command Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mission/PreSettingCommand-panel.html" name="" title="PreSetting Command Panel">PreSetting Command Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mission/NcOptOption-panel.html" name="" title="NcOptOption Panel">NcOptOption Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mission/NcFileCommand-panel.html" name="" title="NcFile Command Panel">NcFile Command Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mission/NcCodeCommand-panel.html" name="" title="NcCode Command Panel">NcCode Command Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mission/PostExecutionCommand-panel.html" name="" title="PostExecution Command Panel">PostExecution Command Panel</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="mission/SimpleSessionCommand-panel.html" name="" title="Classic Session Command Panel">Classic Session Command Panel</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,164 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Translation Remarks | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Translation Remarks | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
<meta name="docfx:navrel" content="../toc.html">
|
||||
<meta name="docfx:tocrel" content="toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../index.html">
|
||||
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="translation-remarks">Translation Remarks</h1>
|
||||
|
||||
<p>The translation terminology and convention has to keep consistency.</p>
|
||||
<ul>
|
||||
<li><p>Anchor 定位</p>
|
||||
</li>
|
||||
<li><p>Cutter 刀具</p>
|
||||
<ul>
|
||||
<li>Insert Cutter 刀片式刀具
|
||||
<ul>
|
||||
<li>Insert 刀片</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>Holder 刀把</p>
|
||||
<ul>
|
||||
<li>Cylindroid Holder 柱狀刀把</li>
|
||||
<li>Freeform Holder 任意形刀把</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>Shank 刀柄</p>
|
||||
</li>
|
||||
<li><p>Fixture 夾具</p>
|
||||
</li>
|
||||
<li><p>Milling Cutter 銑刀</p>
|
||||
</li>
|
||||
<li><p>Freeform Remover 任意移除工具</p>
|
||||
</li>
|
||||
<li><p>Flute 刀刃</p>
|
||||
<ul>
|
||||
<li>Flute-Profile 刃包絡型</li>
|
||||
<li>Flute-Contours 刃型</li>
|
||||
<li>Flute-Inner-Beam 刃中芯</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>Upper-Beam 夾持柱</p>
|
||||
</li>
|
||||
<li><p>Integral Mode 組裝形式</p>
|
||||
<ul>
|
||||
<li>Solid End 一體式</li>
|
||||
<li>Insert End 刀片式</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>Preset 前設置</p>
|
||||
</li>
|
||||
<li><p>Runtime Geometry 運行時幾何</p>
|
||||
</li>
|
||||
<li><p>Machining Resolution 加工解析度</p>
|
||||
</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,123 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Machine Tool Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Machine Tool 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="machine-tool-panel"><code>Machine Tool Panel</code></h1>
|
||||
|
||||
<h2 id="layout-of-machine-tool-panel">Layout of <code>Machine Tool Panel</code></h2>
|
||||
<ul>
|
||||
<li>Top Item: <code>Load</code> button and the Loaded Machine Tool File Name readonly textarea.</li>
|
||||
<li>Central Panel: RenderingCanvas</li>
|
||||
</ul>
|
||||
<h2 id="behavior-of-machine-tool-panel">Behavior of Machine Tool Panel</h2>
|
||||
<p>RenderingCanvas.Displayee is the machine tool (<a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_MachiningEquipment">MachiningEquipment</a>.<a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_MachiningChain">MachiningChain</a>)</p>
|
||||
<p><code>Load</code> button load the machine tool to <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_MachiningChain">MachiningChain</a> and <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_MachiningChainFile">MachiningChainFile</a> by <a class="xref" href="../../api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_GenByFile_">GenByFile</a>.</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,306 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>File Explorer Page | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="File Explorer Page | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="file-explorer-page">File Explorer Page</h1>
|
||||
|
||||
<p>The File Explorer page is a server-side filesystem browser covering three named roots:</p>
|
||||
<ul>
|
||||
<li><strong>AdminDirectory</strong> — server-wide admin area.</li>
|
||||
<li><strong>ProjectDirectory</strong> — the currently-loaded project directory (omitted from the root list when no project is loaded).</li>
|
||||
<li><strong>ResourceDir</strong> — the shared resource tree under <code>AdminDirectory + "Resource/"</code>.</li>
|
||||
</ul>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>Absolute filesystem paths <strong>never leave the server</strong>. The <code>/roots</code> endpoint returns only <code>{ name, displayName }</code>, and every exception message is scrubbed to replace root prefixes with the tokens <code><Admin></code> / <code><Project></code> / <code><Resource></code> before it is returned to the browser.</p>
|
||||
</div>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>File Explorer Page
|
||||
<ul>
|
||||
<li>Toolbar
|
||||
<ul>
|
||||
<li>Root Selector Dropdown — display-name only, sourced from <code>GET /roots</code>.</li>
|
||||
<li>Up Button</li>
|
||||
<li>Path Input — editable; <code>Enter</code> navigates.</li>
|
||||
<li>Refresh / New Folder / New File / Upload Buttons.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Breadcrumb Row — single-click navigation up the tree.</li>
|
||||
<li>Listing Table (<code><q-table></code>) — columns Name / Size / Modified / Actions. Directories first, then files, name-ascending.
|
||||
<ul>
|
||||
<li>Row click:
|
||||
<ul>
|
||||
<li>Directory → navigate into it.</li>
|
||||
<li>Non-binary file → open the editor dialog.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Actions: Edit (non-binary files only), Download (files), Download ZIP (folders), Extract ZIP (<code>.zip</code> only), Rename, Duplicate, Delete (double-click to confirm).</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Editor Dialog (full-width / full-height)
|
||||
<ul>
|
||||
<li>Title Bar — file name + language chip + Cancel / Save / Close.</li>
|
||||
<li>Body — <code><TextEditor></code> wrapping CodeMirror 6 filling the viewport.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="behavior">Behavior</h2>
|
||||
<ul>
|
||||
<li><strong>Path-traversal defence.</strong> Every request is resolved via <code>Path.GetFullPath</code> and validated with <code>Hi.Common.PathUtils.PathUtil.IsDescendant(root, absolute)</code> before any IO. Attempts like <code>relativePath=../outside</code> are rejected with HTTP 400.</li>
|
||||
<li><strong>Duplicate.</strong> <code>POST /copy</code> tries <code>{name}-Copy-00</code> through <code>{name}-Copy-19</code> and returns the first free slot; 400 if all 20 are taken.</li>
|
||||
<li><strong>UTF-8 without BOM.</strong> <code>WriteText</code> uses a cached <code>new UTF8Encoding(encoderShouldEmitUTF8Identifier: false)</code> so round-tripped files do not accumulate a 3-byte BOM on every save.</li>
|
||||
<li><strong>Binary gating.</strong> The backend refuses to open binary files as text; the frontend also pre-filters by extension (<code>.stl</code>, <code>.zip</code>, images, DBs, …) so the Edit button only appears when the text path is likely to work.</li>
|
||||
</ul>
|
||||
<h2 id="syntax-highlighting">Syntax Highlighting</h2>
|
||||
<p><code>components/widgets/TextEditor.vue</code> wraps CodeMirror 6 so the editor gets real syntax highlighting for the common project-file formats listed below.</p>
|
||||
<p>Stack:</p>
|
||||
<ul>
|
||||
<li><code>codemirror</code> + <code>@codemirror/state</code> + <code>@codemirror/view</code> (core).</li>
|
||||
<li><code>@codemirror/lang-xml</code> + <code>@codemirror/lang-json</code> + <code>@codemirror/lang-markdown</code> (3 language packs).</li>
|
||||
</ul>
|
||||
<p>Props: <code>modelValue</code> (two-way), <code>language: 'xml' | 'json' | 'markdown' | 'text'</code> (default <code>text</code>), <code>readonly</code>. Language and readonly are swapped via <code>Compartment.reconfigure</code>, so the view never has to tear down on mode change.</p>
|
||||
<p>Extension → language mapping lives in <code>components/widgets/editorLanguage.ts</code> (single source of truth imported by both <code>TextEditor.vue</code> and <code>FileExplorerPage.vue</code>):</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Language</th>
|
||||
<th>Extensions</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>xml</code></td>
|
||||
<td><code>xml</code>, <code>hincproj</code>, <code>CoatingMaterial</code>, <code>CutterMaterial</code>, <code>Holder</code>, <code>WorkpieceMaterial</code>, <code>mp</code>, <code>MillingPara</code>, <code>SpindleCapability</code>, <code>StickMachiningTool</code>, <code>general-mech</code>, <code>mt</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>markdown</code></td>
|
||||
<td><code>md</code>, <code>markdown</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>json</code></td>
|
||||
<td><code>json</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>text</code> (fallback)</td>
|
||||
<td>everything else, including <code>.nc</code> / <code>.ptp</code> / <code>.mpf</code> / <code>.h</code> / <code>.cs</code> / <code>.csv</code></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="source-code-path">Source Code Path</h2>
|
||||
<p>See <a href="../index.html">HiNC App Anatomy</a> for git repository links.</p>
|
||||
<h3 id="wpf-application-source-code-path">WPF Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>Not implemented.</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/pages/FileExplorerPage.vue</code> — routed page at <code>/util/file-explorer</code>.</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/TextEditor.vue</code> — CodeMirror 6 wrapper.</li>
|
||||
<li><code>wwwroot-src/src/components/widgets/editorLanguage.ts</code> — extension → <code>EditorLanguage</code> mapping.</li>
|
||||
<li><code>wwwroot-src/src/api/fileExplorer.ts</code> — typed wrapper over <code>/api/file-explorer/*</code>.</li>
|
||||
<li><code>wwwroot-src/src/router/routes.ts</code> — <code>/util/file-explorer</code> entry (route name <code>util-file-explorer</code>).</li>
|
||||
<li><code>wwwroot-src/src/layouts/AppMenuBar.vue</code> — <code>Util → File Explorer</code> entry.</li>
|
||||
<li><code>Common/FileExplorerController.cs</code> — REST endpoints under <code>/api/file-explorer</code>:</li>
|
||||
</ul>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Method</th>
|
||||
<th>Path</th>
|
||||
<th>Notes</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>GET</td>
|
||||
<td><code>/roots</code></td>
|
||||
<td>List available roots; Project is omitted when no project is loaded. Returns display names only.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GET</td>
|
||||
<td><code>/list?rootName=&relativePath=</code></td>
|
||||
<td>Directories-first, name-ascending listing.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GET</td>
|
||||
<td><code>/read-text?…</code></td>
|
||||
<td>UTF-8 text; when the file is detected as binary returns <code>content=null</code>, <code>isBinary=true</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>POST</td>
|
||||
<td><code>/write-text</code></td>
|
||||
<td>Body <code>{rootName, relativePath, content}</code>; creates parents as needed.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>POST</td>
|
||||
<td><code>/create-file</code></td>
|
||||
<td>Fails if target exists.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>POST</td>
|
||||
<td><code>/create-directory</code></td>
|
||||
<td>Recursive create; no-op if already a directory.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>POST</td>
|
||||
<td><code>/rename</code></td>
|
||||
<td>Body <code>{rootName, relativePath, newRelativePath}</code>; refuses cross-root moves.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>POST</td>
|
||||
<td><code>/copy</code></td>
|
||||
<td><code>{name}-Copy-00..-Copy-19</code>; uses <code>Hi.Common.FileLines.FileUtil.CopyDirectory</code> for directories.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>DELETE</td>
|
||||
<td><code>/delete?…</code></td>
|
||||
<td>Files → delete, directories → recursive; refuses to delete the root itself.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GET</td>
|
||||
<td><code>/download?…</code></td>
|
||||
<td>Streams a file as <code>application/octet-stream</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GET</td>
|
||||
<td><code>/download-zip?…</code></td>
|
||||
<td>Zips a directory in-memory and streams <code>application/zip</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>POST</td>
|
||||
<td><code>/upload?…</code></td>
|
||||
<td>Multipart single-file upload; overwrites target.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>POST</td>
|
||||
<td><code>/extract-zip</code></td>
|
||||
<td>Body <code>{rootName, relativePath}</code>; extracts next to the archive into <code><name>/</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="deferred">Deferred</h2>
|
||||
<ul>
|
||||
<li>Path-embedded route like <code>/FileExplorer/{Root}/{*path}</code> — replaced by explicit query state for easier linking.</li>
|
||||
<li><code><q-tree></code> directory-tree sidebar — <code><q-table></code> + breadcrumb + Up button covers every navigation need.</li>
|
||||
<li>Drag-and-drop upload, multi-file upload, folder upload (<code>webkitdirectory</code>).</li>
|
||||
<li>Syntax highlighting for <code>.nc</code> / <code>.cs</code> / <code>.csv</code>. NC needs a CM6 <code>StreamLanguage</code> G-code parser; C# needs <code>@codemirror/legacy-modes</code> wiring.</li>
|
||||
<li><code>FileExplorerConfig.ExposeAbsolutePath</code> flag in <code>appsettings.json</code>. Default (absolute paths never leave the server) is identical to what the flag's default would be, so adding later doesn't change observable behaviour.</li>
|
||||
</ul>
|
||||
<h2 id="related-pages">Related Pages</h2>
|
||||
<ul>
|
||||
<li><a href="../widget/object-management-menu-button.html">Object Management Menu Button</a> — shares the XML editor dialog pattern and targets the same project / resource folders through a different endpoint family.</li>
|
||||
<li><a href="../mech/mech-builder-page.html">Mechanism Builder Page</a> — future integration target for Mechanism Builder's Load / Save As dialogs.</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,128 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Util Pages | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Util Pages | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="util-pages">Util Pages</h1>
|
||||
|
||||
<p>The <strong>Util</strong> menu hosts utility pages that are not tied to the main machining workflow. They support side-tasks — browsing the server filesystem, building a generic mechanism XML, running ad-hoc conversions — and are reachable through the top-level <code>Util ▾</code> dropdown in <code>AppMenuBar.vue</code>.</p>
|
||||
<h2 id="shipped">Shipped</h2>
|
||||
<ul>
|
||||
<li><a href="file-explorer.html">File Explorer</a> — server-side filesystem browser with named roots (Admin / Project / Resource), in-page text editor with CodeMirror 6 syntax highlighting, zip pack / extract, and rename / copy / delete.</li>
|
||||
<li><a href="../mech/mech-builder-page.html">Mechanism Builder</a> — generic mechanism XML editor. Documented under <code>mech/</code> because its model lives there; reachable from <code>Util → Mechanism Builder</code>.</li>
|
||||
</ul>
|
||||
<h2 id="pending">Pending</h2>
|
||||
<ul>
|
||||
<li>Cutter Editor (standalone) — standalone variant of the Cutter editor; reuses the ToolHouse cutter panel.</li>
|
||||
<li>Milling Parameter Converter — profile-milling-parameters → rake-face parameters.</li>
|
||||
<li>Time Chart — CSV shot-file viewer.</li>
|
||||
<li>Debugger — development-only <code>IDisplayee</code> visualiser keyed by IndexService key.</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,158 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>GUI File Path Assignment | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="GUI File Path Assignment | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="gui-file-path-assignment">GUI File Path Assignment</h1>
|
||||
|
||||
<p>See the remarks of <a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html#Hi_Common_XmlUtils_IMakeXmlSource_MakeXmlSource_System_String_System_String_System_Boolean_">MakeXmlSource(string, string, bool)</a> to know the design pattern of file path treatment.</p>
|
||||
<p>if the assigned file path is descendent of the configuration directory, it is straight forward that set the <code>baseDirectory</code> to the configuration directory and apply relative path to <code>relFile</code>; if not, set <code>baseDirectory</code> to null and set <code>relFile</code> to absolute path.</p>
|
||||
<p>GUI that needs to assign file generally requires a code-behind <code>BaseDirectory</code> property as assistent model. The property is assigned by the parent model from the parent GUI.</p>
|
||||
<p>In most cases, the first <code>BaseDirectory</code> is the project directory if the project has assigned (created or loaded).</p>
|
||||
<h2 id="portability">Portability</h2>
|
||||
<p>To maintain For the portability of project or the other folder-based unit, if the sub-item is loaded by absolute path outside the folder-based unit directory, redirect the saving path to the folder-based unit directory, i.e. the SubItemFile below.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>You have no need to do an additional action to create a duplicate in the folder-based unit directory. Since the file-writing pattern of <a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html#Hi_Common_XmlUtils_IMakeXmlSource_MakeXmlSource_System_String_System_String_System_Boolean_">MakeXmlSource(string, string, bool)</a> create files when user call to save. In other perspective, if user does not call to save, the local duplicate should be created.</p>
|
||||
</div>
|
||||
<p>The design pattern is usually saw in the HiAPI program, a object contains the properties:</p>
|
||||
<ul>
|
||||
<li>object SubItem;</li>
|
||||
<li>string SubItemFile;</li>
|
||||
</ul>
|
||||
<p>Then you should keep the Protability.</p>
|
||||
<h2 id="file-path-of-load-button-and-save-button">File Path of Load Button and Save Button</h2>
|
||||
<p>The genneral convention of the File Path of Load and Save is different by the single-user desktop application and web page application.</p>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>Always preserve an empty filter ( * . * ) for the browser.</p>
|
||||
</div>
|
||||
<h3 id="single-user-desktop-application">Single-User Desktop Application</h3>
|
||||
<p>The default directory of the Save/Load button are generally:</p>
|
||||
<ul>
|
||||
<li>System Default Directory or Project Directory (default, if not explicitly indicated)
|
||||
The initial directory is the project directory.</li>
|
||||
<li>Resource Directory
|
||||
The path always point to <code><application path>/Resource/<classification></code> directory.
|
||||
The button label has to explicitly show ‘Load Resource’.</li>
|
||||
</ul>
|
||||
<p>The kinds of buttons are not exclusive, they can be existed on the same tool bar.</p>
|
||||
<p>If the selected file path is under the project directory, apply the relative path from the project, i.e. baseDirectory is project directory and relFile is the relative path.</p>
|
||||
<h3 id="web-page-application">Web Page Application</h3>
|
||||
<p>The default directory of the Save/Load button are generally:</p>
|
||||
<ul>
|
||||
<li>Admin Directory</li>
|
||||
<li>Project Directory</li>
|
||||
<li>Resource Directory</li>
|
||||
</ul>
|
||||
<p>The Resource Directory and Project Directory are generally under the Admin Directory. And the admin directory is generally set in the appsettings.json file.</p>
|
||||
<h2 id="typical-action-if-exhibitiononly-false">Typical Action if <code>exhibitionOnly</code> false</h2>
|
||||
<p>On <a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a>.<a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html#Hi_Common_XmlUtils_IMakeXmlSource_MakeXmlSource_System_String_System_String_System_Boolean_">MakeXmlSource(string, string, bool)</a> with <code>exhibitionOnly</code> false, the argument (<code>baseDirectory</code> and <code>relFile</code>) should be the same from object's host (if exist) XML output function.</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,145 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Mat4dControl Component | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Mat4dControl Component | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="mat4dcontrol-component">Mat4dControl Component</h1>
|
||||
|
||||
<p>Mat4dControl is a user control for <a class="xref" href="../../../api/Hi.Geom.Mat4d.html">Mat4d</a> editing and display.</p>
|
||||
<h2 id="main-features">Main Features</h2>
|
||||
<ol>
|
||||
<li><p>Dual Input Modes</p>
|
||||
<ul>
|
||||
<li>Grid Mode: Input 4x4 matrix elements in a grid layout (formatted display with 4 significant digits)</li>
|
||||
<li>Text Mode: Input complete matrix in text format (full precision, no information loss)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>Matrix Operations</p>
|
||||
<ul>
|
||||
<li>Identity: Set matrix to identity matrix</li>
|
||||
<li>Transpose: Transpose the matrix</li>
|
||||
<li>Inverse: Compute the inverse matrix</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>Special Value Handling (Web)</p>
|
||||
<ul>
|
||||
<li>Supports Infinity, -Infinity, and NaN values</li>
|
||||
<li>Uses <a href="../numeric-io-utilities.html">Numeric Input/Output Utilities</a> for display and parsing</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<h2 id="source-code-path">Source Code Path</h2>
|
||||
<p>See <a href="../../index.html">this page</a> for git repository.</p>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/widget/mat4d-control.js</li>
|
||||
<li>Widget/Mat4dHub.cs</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,162 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Numeric Input/Output Utilities | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Numeric Input/Output 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="numeric-inputoutput-utilities">Numeric Input/Output Utilities</h1>
|
||||
|
||||
<p>Handle special numeric values (Infinity, -Infinity, NaN) in web forms to prevent JSON serialization issues between JavaScript frontend and C# backend.</p>
|
||||
<h2 id="implementation-requirements">Implementation Requirements</h2>
|
||||
<p>Your <code>numeric-utils.js</code> module should:</p>
|
||||
<ul>
|
||||
<li>Convert special values for display: Infinity → “INF”, -Infinity → “-INF”, NaN → “NaN”</li>
|
||||
<li>Parse display strings back to numeric values</li>
|
||||
<li>Format regular numbers with 4 significant digits (for standard display mode)</li>
|
||||
<li>Provide full precision output without information loss (for text mode editing)</li>
|
||||
<li>Provide Vue mixin for component integration</li>
|
||||
</ul>
|
||||
<h2 id="required-exports">Required Exports</h2>
|
||||
<ul>
|
||||
<li><code>numericToDisplay(value)</code> - Converts numeric to display string (4 significant digits)</li>
|
||||
<li><code>numericToFullPrecision(value)</code> - Converts numeric to full precision string (no information loss, for text mode)</li>
|
||||
<li><code>displayToNumeric(displayValue, defaultValue)</code> - Parses display to numeric</li>
|
||||
<li><code>NumericInputMixin</code> - Vue mixin with formatNumericDisplay, toFullPrecision, and parseNumericDisplay methods</li>
|
||||
</ul>
|
||||
<h2 id="usage-guidelines">Usage Guidelines</h2>
|
||||
<ul>
|
||||
<li>Use <code>numericToDisplay()</code> for standard input fields where formatted display is preferred</li>
|
||||
<li>Use <code>numericToFullPrecision()</code> for text mode inputs (e.g., array-like number editors) where users need to see/edit exact values without precision loss</li>
|
||||
</ul>
|
||||
<h2 id="avoiding-precision-loss">Avoiding Precision Loss</h2>
|
||||
<p>When a component has multiple numeric inputs (e.g., <a class="xref" href="../../api/Hi.Geom.Vec3d.html">Vec3d</a> with X, Y, Z or <a class="xref" href="../../api/Hi.Geom.Mat4d.html">Mat4d</a> with 16 elements), parsing display values back to numeric on unchanged fields will cause precision loss due to the 4-digit formatting.</p>
|
||||
<p><strong>Problem</strong>: If user only edits X, but <code>displayToNumeric()</code> is called on all fields (X, Y, Z), the unchanged Y and Z values lose precision.</p>
|
||||
<p><strong>Solution</strong>: Update only the edited field by:</p>
|
||||
<ol>
|
||||
<li>Each input field should have its own <code>@change</code> handler (e.g., <code>onXChanged</code>, <code>onYChanged</code>, <code>onZChanged</code>)</li>
|
||||
<li>Backend should provide single-element update API (e.g., <code>UpdateAt(key, index, value)</code>)</li>
|
||||
<li>Only parse and send the edited value to backend</li>
|
||||
</ol>
|
||||
<p><strong>Example</strong> (Vec3d):</p>
|
||||
<ul>
|
||||
<li>Frontend: <code>@change="onXChanged"</code> calls <code>/api/Vec3d/UpdateAt?index=0&value=...</code></li>
|
||||
<li>Backend: <code>vec3d.At(index) = value;</code></li>
|
||||
</ul>
|
||||
<p><strong>Example</strong> (Mat4d):</p>
|
||||
<ul>
|
||||
<li>Frontend: <code>@change="onCellChanged(row, col)"</code> calls <code>/api/Mat4d/UpdateAt?index=...&value=...</code></li>
|
||||
<li>Backend: <code>mat4d.m[index] = value;</code></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="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/common/numeric-utils.js</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,218 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Object Management Menu Button | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Object Management Menu Button | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="object-management-menu-button">Object Management Menu Button</h1>
|
||||
|
||||
<p>The menu button represent the target object with getter function and setter function. The target object generally is <a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a>.</p>
|
||||
<p>the target object with getter function and setter function is such like:</p>
|
||||
<pre><code class="lang-csharp">object TargetObject{get=>TargetObjectGetter?.Invoke();set=>TargetObjectSetter?.Invoke(value);}
|
||||
Func<TargetObject> TargetObjectGetter{get;set;}
|
||||
Action<TargetObject> TargetObjectSetter{get;set;}
|
||||
</code></pre>
|
||||
<p>The target object has the following functions:</p>
|
||||
<ul>
|
||||
<li>File Save/Load
|
||||
<ul>
|
||||
<li>See <a href="gui-file-path-assignment.html">GUI File Path Assignment</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Object Copy/Paste</li>
|
||||
<li>Editor Panel Mode Selection
|
||||
<ul>
|
||||
<li>GUI (user-friendly)</li>
|
||||
<li>XML
|
||||
<ul>
|
||||
<li>Get XML by <a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a> with <code>exhibitionOnly</code> true.</li>
|
||||
<li>Set XML by <a class="xref" href="../../api/Hi.Common.XmlUtils.XFactory.html">XFactory</a>.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>If the target object is not <a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a>, then the XML Editor Panel Mode should not appear. The other functions are still buildable.</p>
|
||||
<p>On <a class="xref" href="../../api/Hi.Common.XmlUtils.XFactory.html">XFactory</a> functions, set <code>enableRebase</code> to <code>true</code> (which is the default). The rebase mode resolves relative file paths from the file's own directory, preventing silent inner exceptions.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Object Management Menu Button
|
||||
<ul>
|
||||
<li>Load Button</li>
|
||||
<li>Load Resource Button</li>
|
||||
<li>Save As Button</li>
|
||||
<li>(splitter)</li>
|
||||
<li>Copy Button (with hotkey support if the Object Management Menu Button is focused)</li>
|
||||
<li>Paste Button (with hotkey support if the Object Management Menu Button is focused)</li>
|
||||
<li>(splitter)</li>
|
||||
<li>GUI Ratio Button</li>
|
||||
<li>XML Ratio Button</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<ul>
|
||||
<li>Since the Object Management Menu Button has special meaning, use icon instead of text label.</li>
|
||||
<li>Do not use icon on the other child buttons. The icons gains nothing but hard to keep style to the full application.</li>
|
||||
<li>If the model is selected, show a different style (may be color) on the menu button.</li>
|
||||
<li>The model should contain a ResourceDirectory property.</li>
|
||||
<li>Do not show Load Resource Button if Resource directory not explicitly gave.</li>
|
||||
</ul>
|
||||
</div>
|
||||
<h2 id="copy--paste">Copy & Paste</h2>
|
||||
<ul>
|
||||
<li>Object Copy/Paste (i.e. Select/Set or Duplicated-Set)
|
||||
<ul>
|
||||
<li>Copy (i.e. Select)
|
||||
Set the model to <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_SelectedItem">SelectedItem</a>.</li>
|
||||
<li>Paste
|
||||
Set <a class="xref" href="../../api/Hi.HiNcKits.UserService.html#Hi_HiNcKits_UserService_SelectedItem">SelectedItem</a> to the model.
|
||||
Set by reference is default. Apply Duplicated-Set if explicitly required.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>While a object is copied (selected) here, it can also be paste (drag) to:</p>
|
||||
<ul>
|
||||
<li>Text editor
|
||||
Use <a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a>.<a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html#Hi_Common_XmlUtils_IMakeXmlSource_MakeXmlSource_System_String_System_String_System_Boolean_">MakeXmlSource(string, string, bool)</a> with <code>exhibitionOnly</code> false and the argument (<code>baseDirectory</code> and <code>relFile</code>) from object's host to paste the text, it should be the same text content by the host XML output.</li>
|
||||
<li>File browser
|
||||
Use <a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a>.<a class="xref" href="../../api/Hi.Common.XmlUtils.IMakeXmlSource.html#Hi_Common_XmlUtils_IMakeXmlSource_MakeXmlSource_System_String_System_String_System_Boolean_">MakeXmlSource(string, string, bool)</a> with <code>exhibitionOnly</code> true, <code>baseDirectory</code> destination folder, <code>relFile</code> destination file name (maybe xxx.class-name) to paste the file.</li>
|
||||
</ul>
|
||||
<p>Show message when paste action success or failed. See <a href="../general-rules.html">Handle Message and Exception</a>.</p>
|
||||
<p>If the data type is not matched, show the un-matched message.</p>
|
||||
<h2 id="editor-panel-mode-ratio-button">Editor Panel Mode Ratio Button</h2>
|
||||
<p>The Editor Panel switched by the Editor Panel Mode Ratio Button.</p>
|
||||
<p>The BaseDirectory and RelFile properties should exist. Use the RelFile property if the object's host has the corresponding property like XXXFile.</p>
|
||||
<p>The Apply action should be well-set. Include <a class="xref" href="../../api/Hi.Common.XmlUtils.SetFileDelegate.html">SetFileDelegate</a> from <a class="xref" href="../../api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Gen_">Gen</a> function.
|
||||
The last argument should also be delivered by the host. So there must exist an property to pass the argument.</p>
|
||||
<h3 id="xml-editor-panel-layout">XML Editor Panel Layout</h3>
|
||||
<ul>
|
||||
<li>XML Editor Panel
|
||||
<ul>
|
||||
<li>Cancel Button</li>
|
||||
<li>Apply Button</li>
|
||||
<li>XML TextArea</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<p>Shows error message if the xml-parsing or object creation failed on XML Editor Panel Apply Button applied.</p>
|
||||
<h2 id="wpf-application-source-code-path">WPF Application Source Code Path</h2>
|
||||
<ul>
|
||||
<li>Common/ObjectManagementMenuButton</li>
|
||||
</ul>
|
||||
<p>see <a href="../index.html">this page</a> for git repository.</p>
|
||||
<h2 id="web-page-application-source-code-path">Web Page Application Source Code Path</h2>
|
||||
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
|
||||
<ul>
|
||||
<li><code>wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue</code> — Quasar dropdown + XML editor dialog. Emits <code>update:modelKey</code>, <code>objectLoaded</code>, <code>objectPasted</code>, <code>xmlApplied</code>, <code>error</code>. Supports Ctrl+C / Ctrl+V.</li>
|
||||
<li><code>wwwroot-src/src/api/objectManagement.ts</code> — typed wrapper over <code>/api/ObjectManagement/*</code>.</li>
|
||||
<li><code>Widget/ObjectManagementController.cs</code> — REST endpoints: <code>Load</code>, <code>LoadResource</code>, <code>SaveAs</code>, <code>Copy</code>, <code>Paste</code>, <code>GetXml</code>, <code>ApplyXml</code>, <code>SupportsXml</code>, <code>GetSelectedItem</code>.</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,152 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Polar Resolution 2D Panel | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Polar Resolution 2D 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="polar-resolution-2d-panel">Polar Resolution 2D Panel</h1>
|
||||
|
||||
<p>The model is <a class="xref" href="../../api/Hi.Geom.Resolution.PolarResolution2d.html">PolarResolution2d</a>.</p>
|
||||
<h2 id="layout">Layout</h2>
|
||||
<ul>
|
||||
<li>Polar Resolution 2D Panel
|
||||
<ul>
|
||||
<li>Enable Custom Resolution CheckBox
|
||||
<ul>
|
||||
<li>enabled if host.model is not null.</li>
|
||||
<li>set host.model to null if not enabled.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Linear Resolution (mm) Input Field
|
||||
<ul>
|
||||
<li>enabled if model not null</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>Angle Resolution (deg) Input Field
|
||||
<ul>
|
||||
<li>enabled if model not null</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="feature">Feature</h2>
|
||||
<p>There is a code-behind property to set visibility of Enable CheckBox.</p>
|
||||
<p>If the host.model is null, it may mean the resolution applied the default value.</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>Geom/PolarResolution2dPanel</li>
|
||||
</ul>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/widget/polar-resolution-2d-panel.js</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,142 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Resizable Bar Component | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Resizable Bar Component | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../index.html">
|
||||
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="resizable-bar-component">Resizable Bar Component</h1>
|
||||
|
||||
<p>A Vue component that provides draggable dividers for resizing adjacent panels in web applications.</p>
|
||||
<h2 id="overview">Overview</h2>
|
||||
<p>The ResizableBar component creates a draggable bar that allows users to resize panels by clicking and dragging. It supports both horizontal and vertical orientations.</p>
|
||||
<h2 id="key-features">Key Features</h2>
|
||||
<ul>
|
||||
<li><strong>Directional Support</strong>: Works in both horizontal (for width adjustment) and vertical (for height adjustment) orientations</li>
|
||||
<li><strong>Unit Flexibility</strong>: Supports pixel, percentage, and custom unit systems through converters</li>
|
||||
<li><strong>Visual Feedback</strong>: Changes appearance on hover and during drag operations</li>
|
||||
<li><strong>Constraint System</strong>: Enforces minimum and maximum size limits</li>
|
||||
</ul>
|
||||
<h2 id="usage-pattern">Usage Pattern</h2>
|
||||
<p>The component should be placed between two panels that need to be resizable. The resize events provide size information that parent components use to adjust panel dimensions.</p>
|
||||
<h2 id="unit-modes">Unit Modes</h2>
|
||||
<ol>
|
||||
<li><strong>Pixel Mode</strong> (default): Direct pixel value manipulation</li>
|
||||
<li><strong>Percentage Mode</strong>: Automatic calculation relative to parent container</li>
|
||||
<li><strong>Custom Mode</strong>: User-defined unit converters for specialized requirements</li>
|
||||
</ol>
|
||||
<h2 id="integration-example">Integration Example</h2>
|
||||
<p>See the player-panel.js implementation for a practical example of using ResizableBar to create adjustable layouts between rendering canvas and side panels.</p>
|
||||
<h2 id="web-application-source-code-path">Web Application Source Code Path</h2>
|
||||
<ul>
|
||||
<li>common/resizable-bar</li>
|
||||
<li>common/resizable-bar-example</li>
|
||||
<li>player/player-panel</li>
|
||||
</ul>
|
||||
<p>See this page <a href="../index.html">~/app-anatomy/index.md</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,607 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Vec3dControl Component | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Vec3dControl Component | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../../../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../../../public/main.css">
|
||||
<meta name="docfx:navrel" content="../../../toc.html">
|
||||
<meta name="docfx:tocrel" content="../../toc.html">
|
||||
|
||||
<meta name="docfx:rel" content="../../../">
|
||||
|
||||
|
||||
|
||||
<meta name="loc:inThisArticle" content="In this article">
|
||||
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<meta name="loc:tocFilter" content="Filter by title">
|
||||
<meta name="loc:nextArticle" content="Next">
|
||||
<meta name="loc:prevArticle" content="Previous">
|
||||
<meta name="loc:themeLight" content="Light">
|
||||
<meta name="loc:themeDark" content="Dark">
|
||||
<meta name="loc:themeAuto" content="Auto">
|
||||
<meta name="loc:changeTheme" content="Change theme">
|
||||
<meta name="loc:copy" content="Copy">
|
||||
<meta name="loc:downloadPdf" content="Download PDF">
|
||||
|
||||
<script type="module" src="./../../../public/docfx.min.js"></script>
|
||||
|
||||
<script>
|
||||
const theme = localStorage.getItem('theme') || 'auto'
|
||||
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
||||
</script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
|
||||
<header class="bg-body border-bottom">
|
||||
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
|
||||
<div class="container-xxl flex-nowrap">
|
||||
<a class="navbar-brand" href="../../../index.html">
|
||||
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
|
||||
|
||||
</a>
|
||||
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
|
||||
<i class="bi bi-three-dots"></i>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="navpanel">
|
||||
<div id="navbar">
|
||||
<form class="search" role="search" id="search">
|
||||
<i class="bi bi-search"></i>
|
||||
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
|
||||
<main class="container-xxl">
|
||||
<div class="toc-offcanvas">
|
||||
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
|
||||
<div class="offcanvas-header">
|
||||
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
|
||||
</div>
|
||||
<div class="offcanvas-body">
|
||||
<nav class="toc" id="toc"></nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
<div class="actionbar">
|
||||
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
|
||||
<i class="bi bi-list"></i>
|
||||
</button>
|
||||
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="">
|
||||
<h1 id="vec3dcontrol-component">Vec3dControl Component</h1>
|
||||
|
||||
<p>Vec3dControl is a user control for <a class="xref" href="../../../api/Hi.Geom.Vec3d.html">Vec3d</a> and display.</p>
|
||||
<h2 id="main-features">Main Features</h2>
|
||||
<ol>
|
||||
<li><p>Dual Input Modes</p>
|
||||
<ul>
|
||||
<li>Standard Mode: Input X, Y, Z components separately (formatted display with 4 significant digits)</li>
|
||||
<li>Text Mode: Input complete vector in text format (full precision, no information loss)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>Vector Normalization</p>
|
||||
<ul>
|
||||
<li>Normalization button (optional)</li>
|
||||
<li>Button visibility controlled by <code>ShowNormalizeButton</code> property</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p>Special Value Handling (Web)</p>
|
||||
<ul>
|
||||
<li>Supports Infinity, -Infinity, and NaN values</li>
|
||||
<li>Uses <a href="../numeric-io-utilities.html">Numeric Input/Output Utilities</a> for display and parsing</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ol>
|
||||
<h2 id="refer-sample-code">Refer Sample Code</h2>
|
||||
<pre><code class="lang-csharp" name="SampleCode-xaml"><UserControl x:Class="HiNC_2025_win_desktop.Geom.Vec3dControl"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
mc:Ignorable="d"
|
||||
d:DesignHeight="30" d:DesignWidth="200">
|
||||
<Grid>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="*"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
<ColumnDefinition Width="Auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<!-- Standard Mode Panel -->
|
||||
<StackPanel x:Name="StandardModePanel" Orientation="Horizontal" Grid.ColumnSpan="5">
|
||||
<TextBox x:Name="XTextBox" Width="60" Margin="0,0,2,0" TextChanged="XTextBox_TextChanged" IsReadOnly="{Binding IsReadOnly}"/>
|
||||
<TextBox x:Name="YTextBox" Width="60" Margin="0,0,2,0" TextChanged="YTextBox_TextChanged" IsReadOnly="{Binding IsReadOnly}"/>
|
||||
<TextBox x:Name="ZTextBox" Width="60" Margin="0,0,2,0" TextChanged="ZTextBox_TextChanged" IsReadOnly="{Binding IsReadOnly}"/>
|
||||
<Button Content="{DynamicResource Vec3d_TextMode_Toggle}" Width="20" Click="TextModeToggle_Click" Margin="0,0,2,0" ToolTip="{DynamicResource Vec3d_TextMode_Tooltip}"/>
|
||||
<Button Content="{DynamicResource Vec3d_Normalize}" Width="20" Click="NormalizeButton_Click" Visibility="{Binding ShowNormalizeButton, Converter={StaticResource BooleanToVisibilityConverter}}" ToolTip="{DynamicResource Vec3d_Normalize_Tooltip}"/>
|
||||
</StackPanel>
|
||||
|
||||
<!-- Text Mode Panel -->
|
||||
<StackPanel x:Name="TextModePanel" Orientation="Horizontal" Grid.ColumnSpan="5" Visibility="Collapsed">
|
||||
<TextBox x:Name="VectorTextBox" Width="180" Margin="0,0,2,0" TextChanged="VectorTextBox_TextChanged" IsReadOnly="{Binding IsReadOnly}"
|
||||
ToolTip="{DynamicResource Vec3d_TextMode_Format_Tooltip}"/>
|
||||
<Button Content="{DynamicResource Vec3d_StandardMode_Toggle}" Width="20" Click="StandardModeToggle_Click" Margin="0,0,2,0" ToolTip="{DynamicResource Vec3d_StandardMode_Tooltip}"/>
|
||||
<Button Content="{DynamicResource Vec3d_Normalize}" Width="20" Click="NormalizeButton_Click" Visibility="{Binding ShowNormalizeButton, Converter={StaticResource BooleanToVisibilityConverter}}" ToolTip="{DynamicResource Vec3d_Normalize_Tooltip}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
</code></pre><pre><code class="lang-csharp" name="SampleCode-xaml.cs">using System;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows;
|
||||
using Hi.Geom;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.ComponentModel;
|
||||
using Hi.Common;
|
||||
using Hi.Common.Messages;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace HiNC_2025_win_desktop.Geom
|
||||
{
|
||||
/// <summary>
|
||||
/// Vec3dControl.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class Vec3dControl : UserControl, INotifyPropertyChanged
|
||||
{
|
||||
private bool _isUpdating = false;
|
||||
private Func<Vec3d> _getterFunc;
|
||||
private Func<Task> _updateByContentFunc;
|
||||
private bool _showNormalizeButton = false;
|
||||
private bool _isTextMode = false;
|
||||
private bool _isReadOnly = false;
|
||||
private readonly ILogger<Vec3dControl> _logger = App.ServiceProvider.GetRequiredService<ILogger<Vec3dControl>>();
|
||||
|
||||
private static readonly Regex VectorRegex = new Regex(@"^\s*[\(\[\{]?\s*(-?\d*\.?\d+)\s*,\s*(-?\d*\.?\d+)\s*,\s*(-?\d*\.?\d+)\s*[\)\]\}]?\s*$", RegexOptions.Compiled);
|
||||
private static readonly Regex MatrixRegex = new Regex(@"\{(?:\s*\{?\s*(-?\d*\.?\d+)\s*,\s*(-?\d*\.?\d+)\s*,\s*(-?\d*\.?\d+)\s*,\s*(-?\d*\.?\d+)\s*\}?\s*,){3}\s*\{?\s*(-?\d*\.?\d+)\s*,\s*(-?\d*\.?\d+)\s*,\s*(-?\d*\.?\d+)\s*,\s*(-?\d*\.?\d+)\s*\}?\s*\}", RegexOptions.Compiled);
|
||||
|
||||
public event PropertyChangedEventHandler PropertyChanged;
|
||||
|
||||
public string ControlId { get; set; } = Guid.NewGuid().ToString();
|
||||
|
||||
public Func<Vec3d> GetterFunc
|
||||
{
|
||||
get => _getterFunc;
|
||||
set
|
||||
{
|
||||
_getterFunc = value;
|
||||
UpdateUI();
|
||||
}
|
||||
}
|
||||
|
||||
public Func<Task> UpdateByContentFunc
|
||||
{
|
||||
get => _updateByContentFunc;
|
||||
set => _updateByContentFunc = value;
|
||||
}
|
||||
|
||||
public bool ShowNormalizeButton
|
||||
{
|
||||
get => _showNormalizeButton;
|
||||
set
|
||||
{
|
||||
if (_showNormalizeButton != value)
|
||||
{
|
||||
_showNormalizeButton = value;
|
||||
OnPropertyChanged(nameof(ShowNormalizeButton));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsTextMode
|
||||
{
|
||||
get => _isTextMode;
|
||||
set
|
||||
{
|
||||
if (_isTextMode != value)
|
||||
{
|
||||
_isTextMode = value;
|
||||
UpdateModeVisibility();
|
||||
OnPropertyChanged(nameof(IsTextMode));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsReadOnly
|
||||
{
|
||||
get => _isReadOnly;
|
||||
set
|
||||
{
|
||||
if (_isReadOnly != value)
|
||||
{
|
||||
_isReadOnly = value;
|
||||
OnPropertyChanged(nameof(IsReadOnly));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected void OnPropertyChanged(string propertyName)
|
||||
{
|
||||
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
|
||||
public Vec3dControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
DataContext = this;
|
||||
}
|
||||
|
||||
private void UpdateModeVisibility()
|
||||
{
|
||||
if (IsTextMode)
|
||||
{
|
||||
StandardModePanel.Visibility = Visibility.Collapsed;
|
||||
TextModePanel.Visibility = Visibility.Visible;
|
||||
UpdateVectorTextFromXYZ();
|
||||
}
|
||||
else
|
||||
{
|
||||
StandardModePanel.Visibility = Visibility.Visible;
|
||||
TextModePanel.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateVectorTextFromXYZ()
|
||||
{
|
||||
if (_isUpdating) return;
|
||||
|
||||
if (double.TryParse(XTextBox.Text, out double x) &&
|
||||
double.TryParse(YTextBox.Text, out double y) &&
|
||||
double.TryParse(ZTextBox.Text, out double z))
|
||||
{
|
||||
VectorTextBox.Text = $"{x},{y},{z}";
|
||||
}
|
||||
}
|
||||
|
||||
private void TextModeToggle_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
IsTextMode = true;
|
||||
}
|
||||
|
||||
private void StandardModeToggle_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
IsTextMode = false;
|
||||
}
|
||||
|
||||
private async void NormalizeButton_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
if (_isUpdating || _getterFunc == null || IsReadOnly)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
_isUpdating = true;
|
||||
|
||||
var vec = _getterFunc();
|
||||
if (vec != null)
|
||||
{
|
||||
vec.Normalize();
|
||||
|
||||
XTextBox.Text = vec.X.ToString("F3");
|
||||
YTextBox.Text = vec.Y.ToString("F3");
|
||||
ZTextBox.Text = vec.Z.ToString("F3");
|
||||
|
||||
if (IsTextMode)
|
||||
{
|
||||
VectorTextBox.Text = $"{vec.X:F3},{vec.Y:F3},{vec.Z:F3}";
|
||||
}
|
||||
if(_updateByContentFunc != null)
|
||||
await _updateByContentFunc();
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogWarning(string.Format(Application.Current.FindResource("Vec3d_Update_Error").ToString(), ex.Message));
|
||||
_logger.LogError(ex, "{Message}", ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_isUpdating = false;
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateUI()
|
||||
{
|
||||
if (_isUpdating || _getterFunc == null)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
_isUpdating = true;
|
||||
var vec = _getterFunc();
|
||||
if (vec != null)
|
||||
{
|
||||
XTextBox.Text = vec.X.ToString("F3");
|
||||
YTextBox.Text = vec.Y.ToString("F3");
|
||||
ZTextBox.Text = vec.Z.ToString("F3");
|
||||
|
||||
if (IsTextMode)
|
||||
{
|
||||
VectorTextBox.Text = $"{vec.X},{vec.Y},{vec.Z}";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
XTextBox.Text = "";
|
||||
YTextBox.Text = "";
|
||||
ZTextBox.Text = "";
|
||||
VectorTextBox.Text = "";
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
_isUpdating = false;
|
||||
}
|
||||
}
|
||||
|
||||
private async void XTextBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
await HandleTextChanged();
|
||||
}
|
||||
|
||||
private async void YTextBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
await HandleTextChanged();
|
||||
}
|
||||
|
||||
private async void ZTextBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
await HandleTextChanged();
|
||||
}
|
||||
|
||||
private async void VectorTextBox_TextChanged(object sender, TextChangedEventArgs e)
|
||||
{
|
||||
if (_isUpdating || _getterFunc == null || IsReadOnly)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
string text = VectorTextBox.Text.Trim();
|
||||
|
||||
// 如果文本为空或太短,不做处理
|
||||
if (string.IsNullOrWhiteSpace(text) || text.Length < 3)
|
||||
return;
|
||||
|
||||
_isUpdating = true;
|
||||
|
||||
// 尝试解析为向量格式
|
||||
if (TryParseVector(text, out double x, out double y, out double z))
|
||||
{
|
||||
await UpdateVectorValues(x, y, z);
|
||||
}
|
||||
// 尝试解析为变换矩阵格式(仅提取位移分量)
|
||||
else if (TryParseTransformMatrix(text, out double tx, out double ty, out double tz))
|
||||
{
|
||||
await UpdateVectorValues(tx, ty, tz);
|
||||
}
|
||||
// 尝试作为单值解析每个字段(宽松模式)
|
||||
else if (TryParseLooseVector(text, out double lx, out double ly, out double lz))
|
||||
{
|
||||
await UpdateVectorValues(lx, ly, lz);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogWarning(string.Format(Application.Current.FindResource("Vec3d_Update_Error").ToString(), ex.Message));
|
||||
_logger.LogError(ex, "{Message}", ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_isUpdating = false;
|
||||
}
|
||||
}
|
||||
|
||||
private bool TryParseVector(string text, out double x, out double y, out double z)
|
||||
{
|
||||
x = y = z = 0;
|
||||
|
||||
// 使用正则表达式匹配向量格式
|
||||
Match match = VectorRegex.Match(text);
|
||||
if (match.Success && match.Groups.Count >= 4)
|
||||
{
|
||||
if (double.TryParse(match.Groups[1].Value, out x) &&
|
||||
double.TryParse(match.Groups[2].Value, out y) &&
|
||||
double.TryParse(match.Groups[3].Value, out z))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool TryParseTransformMatrix(string text, out double tx, out double ty, out double tz)
|
||||
{
|
||||
tx = ty = tz = 0;
|
||||
|
||||
// 移除所有换行和多余空格,便于匹配
|
||||
text = Regex.Replace(text, @"\s+", " ");
|
||||
|
||||
// 尝试匹配变换矩阵格式
|
||||
Match match = MatrixRegex.Match(text);
|
||||
if (match.Success && match.Groups.Count >= 8)
|
||||
{
|
||||
// 变换矩阵的第4列通常是位移分量
|
||||
if (double.TryParse(match.Groups[4].Value, out tx) &&
|
||||
double.TryParse(match.Groups[8].Value, out ty) &&
|
||||
double.TryParse(match.Groups[12].Value, out tz))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// 尝试匹配更宽松的变换矩阵表示(例如从界面复制的数据)
|
||||
var numbers = Regex.Matches(text, @"(-?\d*\.?\d+)");
|
||||
if (numbers.Count >= 16)
|
||||
{
|
||||
// 假设这是一个4x4矩阵,提取位移分量(第4、8、12个数字)
|
||||
if (double.TryParse(numbers[3].Value, out tx) &&
|
||||
double.TryParse(numbers[7].Value, out ty) &&
|
||||
double.TryParse(numbers[11].Value, out tz))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool TryParseLooseVector(string text, out double x, out double y, out double z)
|
||||
{
|
||||
x = y = z = 0;
|
||||
|
||||
// 移除所有非数字和小数点以外的字符,然后按空白分割
|
||||
string cleanText = Regex.Replace(text, @"[^\d\.\-\s,;]+", " ");
|
||||
string[] parts = Regex.Split(cleanText, @"[\s,;]+");
|
||||
|
||||
// 尝试从分割后的部分获取三个数字
|
||||
var numbers = new System.Collections.Generic.List<double>();
|
||||
foreach (var part in parts)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(part) && double.TryParse(part, out double value))
|
||||
{
|
||||
numbers.Add(value);
|
||||
if (numbers.Count >= 3) break; // 最多取3个数字
|
||||
}
|
||||
}
|
||||
|
||||
// 如果获取到了三个数字,就认为解析成功
|
||||
if (numbers.Count >= 3)
|
||||
{
|
||||
x = numbers[0];
|
||||
y = numbers[1];
|
||||
z = numbers[2];
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private async Task UpdateVectorValues(double x, double y, double z)
|
||||
{
|
||||
XTextBox.Text = x.ToString("F3");
|
||||
YTextBox.Text = y.ToString("F3");
|
||||
ZTextBox.Text = z.ToString("F3");
|
||||
|
||||
var vec = _getterFunc?.Invoke();
|
||||
if (vec != null)
|
||||
{
|
||||
vec.X = x;
|
||||
vec.Y = y;
|
||||
vec.Z = z;
|
||||
|
||||
if (_updateByContentFunc != null)
|
||||
{
|
||||
await _updateByContentFunc();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task HandleTextChanged()
|
||||
{
|
||||
if (_isUpdating || _getterFunc == null || IsReadOnly)
|
||||
return;
|
||||
|
||||
try
|
||||
{
|
||||
_isUpdating = true;
|
||||
|
||||
// 尝试解析每个文本框的值
|
||||
bool allValid = true;
|
||||
|
||||
allValid &= double.TryParse(XTextBox.Text, out double x);
|
||||
allValid &= double.TryParse(YTextBox.Text, out double y);
|
||||
allValid &= double.TryParse(ZTextBox.Text, out double z);
|
||||
|
||||
if (allValid)
|
||||
{
|
||||
if (IsTextMode)
|
||||
{
|
||||
VectorTextBox.Text = $"{x},{y},{z}";
|
||||
}
|
||||
|
||||
var vec = _getterFunc();
|
||||
if (vec != null)
|
||||
{
|
||||
vec.X = x;
|
||||
vec.Y = y;
|
||||
vec.Z = z;
|
||||
|
||||
if(_updateByContentFunc != null)
|
||||
await _updateByContentFunc();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 如果有无效输入,不进行更新但也不显示错误
|
||||
// 这允许用户在输入过程中有不完整的状态
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// 记录异常但不中断用户操作
|
||||
_logger.LogWarning(string.Format(Application.Current.FindResource("Vec3d_Update_Error").ToString(), ex.Message));
|
||||
_logger.LogError(ex, "{Message}", ex.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_isUpdating = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</code></pre><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>Geom/Vec3dControl</li>
|
||||
</ul>
|
||||
<h3 id="web-service-application-source-code-path">Web Service Application Source Code Path</h3>
|
||||
<ul>
|
||||
<li>wwwroot/widget/vec3d-control.js</li>
|
||||
<li>Widget/Vec3dHub.cs</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>
|
||||
Reference in New Issue
Block a user