This commit is contained in:
2025-07-25 16:27:29 +08:00
parent 38b27cd481
commit b5cad3c171
1114 changed files with 68009 additions and 23981 deletions
@@ -0,0 +1,334 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>About XML IO | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="About XML IO | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="about-xml-io">About XML IO</h1>
<p>The XML IO design pattern in Hi Framework is based on <a class="xref" href="../../../../api/Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a> interface and <a class="xref" href="../../../../api/Hi.Common.XmlUtils.XFactory.html">XFactory</a> class. This pattern provides a standardized way to serialize and deserialize objects to and from XML format.</p>
<p>Don't serialize the runtime member object like <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-1">Func&lt;TResult&gt;</a> or <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.action">Action</a> either cache object. The runtime objects can be optionally sent by the res part on the XFactory Registration or set by the other host or dependent object. If it is set by the other object, then there is nothing can do to it in the XML IO procedure.</p>
<h2 id="core-components">Core Components</h2>
<h3 id="imakexmlsource-interface">IMakeXmlSource Interface</h3>
<p>The <a class="xref" href="../../../../api/Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a> interface defines the contract for objects that can be serialized to XML format. It contains a single method <code>MakeXmlSource</code>.</p>
<h3 id="xfactory-registration">XFactory Registration</h3>
<p>Every class implementing IMakeXmlSource must:</p>
<ol>
<li>Define a static XName property matching the class name</li>
<li>Register itself in the static constructor using XFactory.Regs.Add</li>
<li>Implement XML serialization and deserialization logic</li>
</ol>
<p>For example, see <a class="xref" href="../../../../api/Hi.Milling.Apts.BallApt.html">BallApt</a>:</p>
<pre><code class="lang-csharp" name="XmlRegistration">static BallApt()
{
// Register to the &lt;see cref=&quot;XFactory.Default&quot;/&gt;.
XFactory.Regs.Add(XName, (xml,baseDirectory,relFile, res) =&gt; new BallApt(xml));
}
</code></pre><h2 id="implementation-patterns">Implementation Patterns</h2>
<h3 id="simple-value-objects">Simple Value Objects</h3>
<p>See <a class="xref" href="../../../../api/Hi.Milling.Apts.BallApt.html">BallApt</a> implementation:</p>
<pre><code class="lang-csharp" name="XmlImplementation">/// &lt;summary&gt;
/// Name for XML IO.
/// &lt;/summary&gt;
public static string XName =&gt; nameof(BallApt);
/// &lt;summary&gt;
/// Ctor.
/// &lt;/summary&gt;
/// &lt;param name=&quot;src&quot;&gt;XML&lt;/param&gt;
public BallApt(XElement src)
{
Diameter_mm = double.Parse(src.Element(&quot;D&quot;).Value);
FluteHeight_mm = double.Parse(src.Element(&quot;FluteH&quot;).Value);
}
/// &lt;inheritdoc/&gt;
public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) =&gt; ToXElement();
/// &lt;inheritdoc/&gt;
public XElement ToXElement()
{
return new XElement(XName,
new XElement(&quot;D&quot;, Diameter_mm),
new XElement(&quot;FluteH&quot;, FluteHeight_mm)
);
}
</code></pre><h3 id="complex-data-structures">Complex Data Structures</h3>
<p>See <a class="xref" href="../../../../api/Hi.Milling.SpindleCapability.html">SpindleCapability</a> implementation:</p>
<pre><code class="lang-csharp" name="XmlImplementation">/// &lt;summary&gt;
/// Name for XML IO.
/// &lt;/summary&gt;
public static string XName =&gt; nameof(SpindleCapability);
/// &lt;summary&gt;
/// Initializes a new instance of the &lt;see cref=&quot;SpindleCapability&quot;/&gt; class.
/// &lt;/summary&gt;
/// &lt;param name=&quot;src&quot;&gt;The XML element containing spindle data.&lt;/param&gt;
/// &lt;param name=&quot;baseDirectory&quot;&gt;The base directory for resolving relative paths.&lt;/param&gt;
/// &lt;param name=&quot;res&quot;&gt;Additional resolution parameters.&lt;/param&gt;
public SpindleCapability(XElement src, string baseDirectory, params object[] res)
{
this.SetNameNote(src);
if (src.Element(nameof(EnergyEfficiency)) != null)
EnergyEfficiency = XmlConvert.ToDouble(
src.Element(nameof(EnergyEfficiency)).Value);
src.Element(nameof(WorkingTemperatureUpperBoundary_C))?.SelfInvoke(
e =&gt; WorkingTemperatureUpperBoundary_C = XmlConvert.ToDouble(e.Value));
src.Element(nameof(GearShiftSpindleSpeed_rpm))?.Value?.SelfInvoke(
s =&gt; GearShiftSpindleSpeed_rpm = string.IsNullOrEmpty(s)
? null : XmlConvert.ToDouble(s));
if (src.Element(nameof(DryRunFrictionPowerCoefficient_mWdrpm)) != null)
DryRunFrictionPowerCoefficient_mWdrpm = XmlConvert.ToDouble(
src.Element(nameof(DryRunFrictionPowerCoefficient_mWdrpm)).Value);
if (src.Element(nameof(DryRunWindagePowerCoefficient_pWdrpm3)) != null)
DryRunWindagePowerCoefficient_pWdrpm3 = XmlConvert.ToDouble(
src.Element(nameof(DryRunWindagePowerCoefficient_pWdrpm3)).Value);
if (src.Element(&quot;SpindleSpeedToPowerContours&quot;) != null) //for legacy
WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW =
src.Element(&quot;SpindleSpeedToPowerContours&quot;).Elements(&quot;Contour&quot;)
.ToDictionary(
contourElem =&gt;
{
double r = XmlConvert.ToDouble(contourElem.Attribute(&quot;InsistentRatio&quot;)?.Value);
//600s=10mins
return r ==1?double.PositiveInfinity:(r * 600);
},
contourElem =&gt; contourElem.Elements(&quot;SpindleSpeedToPower&quot;).Select(
elem =&gt; new Vec2d(
XmlConvert.ToDouble(elem.Element(&quot;SpindleSpeed-RPM&quot;).Value) / 60,
XmlConvert.ToDouble(elem.Element(&quot;Power-kW&quot;).Value)))
.ToList());
src.Element(&quot;WorkableDurationToSpindleSpeedPowerContoursDictionary&quot;)
?.SelfInvoke(dicElem =&gt;
{
WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW
= dicElem.Elements(&quot;Contour&quot;)
.ToDictionary(
contourElem =&gt; XmlConvert.ToDouble(
contourElem.Attribute(&quot;WorkableDuration-min&quot;)?.Value),
contourElem =&gt; contourElem.Elements(&quot;SpindleSpeedToPower&quot;).Select(
elem =&gt; new Vec2d(
XmlConvert.ToDouble(elem.Element(&quot;SpindleSpeed-RPM&quot;).Value) / 60,
XmlConvert.ToDouble(elem.Element(&quot;Power-kW&quot;).Value)))
.ToList());
});
if (src.Element(&quot;SpindleSpeedToTorqueContours&quot;) != null) //for legacy
WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm =
src.Element(&quot;SpindleSpeedToTorqueContours&quot;).Elements(&quot;Contour&quot;)
.ToDictionary(
contourElem =&gt;
{
double r = XmlConvert.ToDouble(contourElem.Attribute(&quot;InsistentRatio&quot;)?.Value);
//600s=10mins
return r == 1 ? double.PositiveInfinity : (r * 600);
},
contourElem =&gt; contourElem.Elements(&quot;SpindleSpeedToTorque&quot;).Select(
elem =&gt; new Vec2d(
XmlConvert.ToDouble(elem.Element(&quot;SpindleSpeed-RPM&quot;).Value) / 60,
XmlConvert.ToDouble(elem.Element(&quot;Torque-Nm&quot;).Value)))
.ToList());
src.Element(&quot;WorkableDurationToSpindleSpeedTorqueContoursDictionary&quot;)
?.SelfInvoke(dicElem =&gt;
{
//MessageUtil.WriteLine($&quot;dicElem: {dicElem}&quot;);
WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm =
dicElem.Elements(&quot;Contour&quot;).ToDictionary(
contourElem =&gt; XmlConvert.ToDouble(
contourElem.Attribute(&quot;WorkableDuration-min&quot;)?.Value),
contourElem =&gt; contourElem.Elements(&quot;SpindleSpeedToTorque&quot;).Select(
elem =&gt; new Vec2d(
XmlConvert.ToDouble(elem.Element(&quot;SpindleSpeed-RPM&quot;).Value) / 60,
XmlConvert.ToDouble(elem.Element(&quot;Torque-Nm&quot;).Value)))
.ToList());
//MessageUtil.WriteLine($&quot;keys: {string.Join(',',WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm.Select(e=&gt;e.Key))}&quot;);
});
//for legacy compatible.
if (src.Element(&quot;SpindleSpeedToPower--RPM-to-kW&quot;) != null)
InfInsistentSpindleSpeedToPower_cycleDs_kW =
src.Element(&quot;SpindleSpeedToPower--RPM-to-kW&quot;).Elements()
.Select(elem =&gt; new Vec2d(XmlConvert.ToDouble(elem.Attribute(
&quot;SpindleSpeed-RPM&quot;).Value) / 60,
XmlConvert.ToDouble(elem.Value))).ToList();
//for legacy compatible.
if (src.Element(&quot;SpindleSpeedToTorque--RPM-to-Nm&quot;) != null)
InfInsistentSpindleSpeedToTorque_cycleDs_Nm =
src.Element(&quot;SpindleSpeedToTorque--RPM-to-Nm&quot;).Elements()
.Select(elem =&gt; new Vec2d(XmlConvert.ToDouble(elem.Attribute(
&quot;SpindleSpeed-RPM&quot;).Value) / 60,
XmlConvert.ToDouble(elem.Value))).ToList();
}
/// &lt;inheritdoc/&gt;
public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)
{
return new XElement(XName,
this.GetNameNoteXElementList(),
new XElement(nameof(EnergyEfficiency), EnergyEfficiency),
new XElement(nameof(GearShiftSpindleSpeed_rpm), GearShiftSpindleSpeed_rpm),
new XElement(nameof(DryRunFrictionPowerCoefficient_mWdrpm),
DryRunFrictionPowerCoefficient_mWdrpm),
new XElement(nameof(DryRunWindagePowerCoefficient_pWdrpm3),
DryRunWindagePowerCoefficient_pWdrpm3),
new XElement(&quot;WorkableDurationToSpindleSpeedPowerContoursDictionary&quot;,
WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW.OrderBy(entry =&gt; entry.Key)
.Select(entry =&gt; new XElement(&quot;Contour&quot;,
new XAttribute(&quot;WorkableDuration-min&quot;, entry.Key),
entry.Value.Select(entry
=&gt; new XElement(&quot;SpindleSpeedToPower&quot;,
new XElement(&quot;SpindleSpeed-RPM&quot;, entry.X * 60),
new XElement(&quot;Power-kW&quot;, entry.Y)))))
),
new XElement(&quot;WorkableDurationToSpindleSpeedTorqueContoursDictionary&quot;,
WorkableDurationToSpindleSpeedTorqueContoursDictionary_min_cycleDs_Nm.OrderBy(entry =&gt; entry.Key)
.Select(entry =&gt; new XElement(&quot;Contour&quot;,
new XAttribute(&quot;WorkableDuration-min&quot;, entry.Key),
entry.Value.Select(entry
=&gt; new XElement(&quot;SpindleSpeedToTorque&quot;,
new XElement(&quot;SpindleSpeed-RPM&quot;, entry.X * 60),
new XElement(&quot;Torque-Nm&quot;, entry.Y)))))
)
);
}
</code></pre><h2 id="best-practices">Best Practices</h2>
<ol>
<li><strong>XName</strong>: Always define static XName property matching the class name</li>
<li><strong>Registration</strong>: Register in static constructor using XFactory.Regs.Add</li>
<li><strong>Error Handling</strong>: Use appropriate <a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html">GenMode</a></li>
<li><strong>Legacy Support</strong>: Maintain backward compatibility when needed</li>
<li><strong>Documentation</strong>: Include XML comments for properties and methods</li>
</ol>
<h2 id="generation-modes">Generation Modes</h2>
<p>The <a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html">GenMode</a> enumeration provides:</p>
<ul>
<li><a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html#Hi_Common_XmlUtils_GenMode_None">None</a></li>
<li><a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html#Hi_Common_XmlUtils_GenMode_Catch">Catch</a></li>
<li><a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html#Hi_Common_XmlUtils_GenMode_Rebase">Rebase</a></li>
<li><a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html#Hi_Common_XmlUtils_GenMode_Default">Default</a></li>
</ul>
<h2 id="common-usage-patterns">Common Usage Patterns</h2>
<ol>
<li><strong>Simple Object Generation</strong>:</li>
</ol>
<pre><code class="lang-csharp">var obj = XFactory.Gen&lt;MyType&gt;(xmlElement, baseDir, null, GenMode.Default);
</code></pre>
<ol start="2">
<li><strong>File-Based Generation</strong>:</li>
</ol>
<pre><code class="lang-csharp">var obj = XFactory.GenByFile&lt;MyType&gt;(baseDir, relativeFile, GenMode.Default);
</code></pre>
<ol start="3">
<li><strong>XML Source and File Generation</strong>:</li>
</ol>
<pre><code class="lang-csharp">var xmlSourceAndFile = XFactory.GenXmlSourceAndFile&lt;MyType&gt;(xmlElement, baseDir, null, GenMode.Default);
</code></pre>
<ol start="4">
<li><strong>Hierarchical Object Generation</strong>:</li>
</ol>
<pre><code class="lang-csharp">var childObj = XFactory.GenByChild&lt;IStructureMaterial&gt;(parentElement, baseDir, null, GenMode.Default);
</code></pre>
</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>Geometry Objects | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Geometry Objects | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="geometry-objects">Geometry Objects</h1>
<p><strong><a class="xref" href="../../../../api/Hi.Geom.IGetStl.html">IGetStl</a></strong> is the base interface for all geometry objects in HiAPI, providing unified STL support.</p>
<p>Several common geometry types are available:</p>
<ul>
<li>Basic Geometrys
<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.Stl.html">Stl</a></li>
<li><a class="xref" href="../../../../api/Hi.Geom.StlFile.html">StlFile</a></li>
</ul>
</li>
<li>Management Geometrys
<ul>
<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>
</li>
</ul>
<p>See <a href="../mechanism/transformers/index.html">Transformations</a> for <a class="xref" href="../../../../api/Hi.Geom.TransformationGeom.html">TransformationGeom</a>.</p>
<ul>
<li><a class="xref" href="../../../../api/Hi.Mech.Topo.GeneralTransform.html">GeneralTransform</a></li>
<li><a class="xref" href="../../../../api/Hi.Mech.Topo.StaticRotation.html">StaticRotation</a></li>
<li><a class="xref" href="../../../../api/Hi.Mech.Topo.StaticTranslation.html">StaticTranslation</a></li>
</ul>
<div class="NOTE">
<h5>Note</h5>
<p>All coordinate values use standard units (millimeters, radians)</p>
</div>
<h2 id="example-usage">Example Usage</h2>
<pre><code class="lang-csharp" name="SampleCode">using System;
using System.Collections.Generic;
using Hi.Geom;
using Hi.Mech.Topo;
namespace Sample.Geom
{
/// &lt;summary&gt;
/// Demonstrates the creation and manipulation of geometric objects in HiAPI.
/// Shows how to create and transform various geometry types including boxes, cylindroids, and STL files.
/// &lt;/summary&gt;
/// &lt;remarks&gt;
/// ### Source Code
/// [!code-csharp[SampleCode](~/../Hi.Sample/Geom/DemoBuildGeom.cs)]
/// &lt;/remarks&gt;
public static class DemoBuildGeom
{
/// &lt;summary&gt;
/// Generates a collection of geometric objects for demonstration purposes.
/// Creates various geometry types including boxes, cylindroids, STL files, and transformed geometries.
/// &lt;/summary&gt;
/// &lt;returns&gt;A list of geometries implementing the IGetStl interface&lt;/returns&gt;
public static List&lt;IGetStl&gt; GenGeoms()
{
Box3d box = new Box3d(0, 0, -50, 70, 50, 0);
Cylindroid cylindroid = new Cylindroid([ new PairZr(0,12),new PairZr(20,12),
new PairZr(20,16),new PairZr(30,16)]);
Stl stl = new Stl(&quot;geom.stl&quot;);
StlFile stlFile = new StlFile(&quot;geom.stl&quot;);
TransformationGeom transformationGeom = new TransformationGeom()
{
Transformer = new GeneralTransform(1,
new StaticRotation(new Vec3d(0, 0, 1), MathUtil.ToRad(15), new Vec3d(0, 0, 0)),
new StaticTranslation(new Vec3d(0, 0, 0))),
Geom = stl
};
GeomCombination geomCombination = new GeomCombination(stlFile, transformationGeom);
return new List&lt;IGetStl&gt;([box, cylindroid, stl, stlFile, transformationGeom]);
}
}
}
</code></pre>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,145 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Kinematic Topology | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Kinematic Topology | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../../toc.html">
<meta name="docfx:tocrel" content="../../../toc.html">
<meta name="docfx:rel" content="../../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Usage.HiMech.Topo">
<h1 id="kinematic-topology">Kinematic Topology</h1>
<p>The Kinematic Topology is composed of three elemental classes: <strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.Anchor.html">Anchor</a></strong>, <strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.Branch.html">Branch</a></strong> and <strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.Asmb.html">Asmb</a></strong>.</p>
<h2 id="basic-elements">Basic Elements</h2>
<h3 id="anchors-and-branches">Anchors and Branches</h3>
<p><strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.Anchor.html">Anchor</a></strong> object contains a cartesian coordinate. It can be a mechanical component or a flag.</p>
<p><strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.Branch.html">Branch</a></strong> object is a directional link between two <a class="xref" href="../../../../../api/Hi.Mech.Topo.Anchor.html">Anchor</a> objects. It contains the <strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a></strong> object. The <a class="xref" href="../../../../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a> object contains a coordinate <strong>transformation matrix</strong>. As shown in the following sketch:</p>
<p><img src="chainLink.png" alt="Chain Structure"></p>
<h3 id="assembly-management">Assembly Management</h3>
<p><strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.Asmb.html">Asmb</a></strong> (Assembly) provides organization and management of Anchors. An Assembly can contain both Anchors and other Assemblies. Key features include:</p>
<ul>
<li>Grouping related Anchors together</li>
<li>Managing coordinate transformations</li>
<li>Providing display and indexing functions</li>
<li>Supporting hierarchical structure</li>
</ul>
<h2 id="kinematic-chain-example">Kinematic Chain Example</h2>
<p>The following figure shows a kinematic chain of a non-orthogonal 5-axis machine tool:</p>
<p><img src="vmt.png" alt="VMT Structure"></p>
<p>Each <a class="xref" href="../../../../../api/Hi.Mech.Topo.Anchor.html">Anchor</a> represents a component:</p>
<ul>
<li>Axis components: X, Y, Z, B, C</li>
<li>Base components: O (base1), O* (base2)</li>
<li>Tool components: S (spindle), T (tool body), T* (tool flute)</li>
<li>Workpiece: W</li>
</ul>
<p>The relative transform between two Anchors is calculated by multiplying the transform matrices along the Branch. For example, the transform matrix from W to T is:</p>
<div class="math">
\[
M_{WT} = M_{CW}^{-1} \cdot M_{YC}^{-1} \cdot M_{OY}^{-1} \cdot M_{OO^*} \cdot M_{O^*X} \cdot M_{XZ} \cdot M_{ZB} \cdot M_{BS} \cdot M_{ST}
\]</div>
<p>This matrix can be obtained using <a class="xref" href="../../../../../api/Hi.Mech.Topo.Asmb.html#Hi_Mech_Topo_Asmb_GetMat4d_Hi_Mech_Topo_IGetAnchor_Hi_Mech_Topo_IGetAnchor_">GetMat4d(IGetAnchor, IGetAnchor)</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

@@ -0,0 +1,139 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HiAPI Mechanics Overview | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="HiAPI Mechanics Overview | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="HiMech.Overview">
<h1 id="mechanism-topology">Mechanism Topology</h1>
<p>HiAPI Mechanism Topology provides basic functionality for assembling mechanical structures and simulating their motions. It allows you to build kinematic models of milling machines and similar mechanical structures through a topology-based approach.</p>
<h2 id="core-concepts">Core Concepts</h2>
<h3 id="kinematic-topology">Kinematic Topology</h3>
<p>Kinematic Topology is the core concept of this module, which describes the motion relationships between mechanical components. With Kinematic Topology, you can:</p>
<ul>
<li>Define mechanical structures and motion relationships</li>
<li>Calculate forward and inverse kinematics</li>
<li>Display component positions and orientations</li>
<li>Conduct collision detection</li>
</ul>
<h3 id="main-modules">Main Modules</h3>
<ul>
<li><a href="Topo/index.html">Topology</a> - Kinematic topology structure, including assembly management and chain definition</li>
<li><a href="transformers/index.html">Transformers</a> - Coordinate transformation and motion transformation</li>
<li><a href="render-topology/index.html">Render Topology</a> - Rendering with topology structure and anchored display</li>
</ul>
<h2 id="api-references">API References</h2>
<ul>
<li><a class="xref" href="../../../../api/Hi.Mech.Topo.html">Hi.Mech.Topo</a> - Core topology functionality</li>
<li><a class="xref" href="../../../../api/Hi.Mech.Topo.Asmb.html">Asmb</a> - Assembly-related functionality</li>
<li><a class="xref" href="../../../../api/Hi.Mech.Topo.Branch.html">Branch</a> - Chain-related functionality</li>
</ul>
<h2 id="examples">Examples</h2>
<p>Please refer to the examples in each sub-section to learn how to use these features to build your applications.</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,207 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Render Topology | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Render Topology | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../../toc.html">
<meta name="docfx:tocrel" content="../../../toc.html">
<meta name="docfx:rel" content="../../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="render-topology">Render Topology</h1>
<p>Read <a href="../Topo/index.html">Kinematic Topology</a> <a href="../../rendering/index.html">Rendering</a> for the prerequisite.</p>
<p>A <a class="xref" href="../../../../../api/Hi.Mech.Topo.Asmb.html">Asmb</a> is a group to render its descendent <a class="xref" href="../../../../../api/Hi.Mech.Topo.Anchor.html">Anchor</a>s.</p>
<p>Several ways to render with the topology:</p>
<ul>
<li>Render by Anchoring Matrix Map</li>
<li>Render by Anchored Displayee</li>
</ul>
<h2 id="render-by-anchoring-matrix-map">Render by Anchoring Matrix Map</h2>
<h2 id="render-by-anchored-displayee">Render by Anchored Displayee</h2>
<p>Inherit <a class="xref" href="../../../../../api/Hi.Mech.Topo.IAnchoredDisplayee.html">IAnchoredDisplayee</a> or apply <a class="xref" href="../../../../../api/Hi.Mech.Topo.AnchoredDisplayee.html">AnchoredDisplayee</a> to <a class="xref" href="../../../../../api/Hi.Mech.Topo.Asmb.html">Asmb</a>.Display().</p>
<p>Inherit <a class="xref" href="../../../../../api/Hi.Mech.Topo.ITopoDisplayee.html">ITopoDisplayee</a> to manage the object with <a class="xref" href="../../../../../api/Hi.Mech.Topo.Asmb.html">Asmb</a> and plural anchors .</p>
<p>The base logic is also by the anchoring matrix. Here is some class and function wrapping the logic.</p>
<p>The sample code shows the topology rendering for a <a class="xref" href="../../../../../api/Hi.Milling.MillingTools.MillingTool.html">MillingTool</a> editing helper:</p>
<pre><code class="lang-csharp" name="MillingToolEditorDisplayee">using Hi.Common;
using Hi.Common.Messages;
using Hi.Disp;
using Hi.Disp.Flag;
using Hi.Geom;
using Hi.Mech.Topo;
using Hi.Milling.Cutters;
using Hi.NcMech.Holders;
using System;
using System.Collections.Generic;
namespace Hi.Milling.MillingTools
{
public class MillingToolEditorDisplayee : ITopoDisplayee, IClearCache
{
public Func&lt;MillingTool&gt; MillingToolGetter { get; set; }
public MillingTool MillingTool =&gt; MillingToolGetter?.Invoke();
public bool ShowCutter { get; set; } = true;
public bool ShowHolder { get; set; } = true;
public MillingCutterEditorDisplayee MillingCutterEditorDisplayee { get; }
= new MillingCutterEditorDisplayee();
public HolderEditorDisplayee HolderEditorDisplayee { get; }
= new HolderEditorDisplayee();
/// &lt;inheritdoc/&gt;
public List&lt;IAnchoredDisplayee&gt; GetAnchoredDisplayeeList()
{
var dst = new List&lt;IAnchoredDisplayee&gt;();
var millingTool = MillingTool;
if (millingTool == null)
return dst;
if (ShowCutter)
{
var cutter = millingTool.Cutter;
if (cutter is MillingCutter millingCutter)
{
//MessageKit.AddMessage($&quot;MillingTool.Cutter: {MillingTool?.Cutter?.GetHashCode()}&quot;);
MillingCutterEditorDisplayee.MillingCutterSourceFunc
= () =&gt; MillingTool?.Cutter as MillingCutter;
dst.Add(MillingCutterEditorDisplayee);
}
else if(cutter!=null)
dst.Add(cutter);
}
if (ShowHolder)
{
HolderEditorDisplayee.Holder = millingTool.Holder;
dst.Add(HolderEditorDisplayee);
}
return dst;
}
/// &lt;inheritdoc/&gt;
public void Display(Bind bind)
{
bind.PushCoveringPixelMode();
DimensionBar.Display(bind, &quot;mm&quot;);
bind.ModelMatStack.Pop();
TopoDisplayeeUtil.Display(this, bind);
}
/// &lt;inheritdoc/&gt;
public void ExpandToBox3d(Box3d dst)
{
TopoDisplayeeUtil.ExpandToBox3d(this, dst);
}
/// &lt;inheritdoc/&gt;
public Asmb GetAsmb() =&gt; MillingTool?.Asmb;
/// &lt;inheritdoc/&gt;
public Anchor GetAnchor() =&gt; MillingTool?.GetAnchor();
/// &lt;inheritdoc/&gt;
public void ClearCache()
{
MillingCutterEditorDisplayee?.ClearCache();
}
}
}
</code></pre>
</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,199 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Handle Transform Matrix by ITransformer | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Handle Transform Matrix by ITransformer | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../../toc.html">
<meta name="docfx:tocrel" content="../../../toc.html">
<meta name="docfx:rel" content="../../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="HiMech.Tutor.transformers">
<h1 id="handle-transform-matrix-by-itransformer">Handle Transform Matrix by ITransformer</h1>
<p><strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a></strong> contains a transform matrix and a inverse transform matrix. The matrix is 4x4 column-major matrix, which describe the orientation or movement between 3D coordinates.</p>
<p>Several common used interface and class are implemented from <a class="xref" href="../../../../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a>. The inheritance is shown:</p>
<ul>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.IStaticTransformer.html">IStaticTransformer</a>
<ul>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.NoTransform.html">NoTransform</a></li>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.StaticTranslation.html">StaticTranslation</a></li>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.StaticRotation.html">StaticRotation</a></li>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.StaticFreeform.html">StaticFreeform</a></li>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.GeneralTransform.html">GeneralTransform</a></li>
</ul>
</li>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.IDynamicTransformer.html">IDynamicTransformer</a>
<ul>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.IDynamicRegular.html">IDynamicRegular</a>
<ul>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.DynamicTranslation.html">DynamicTranslation</a></li>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.DynamicRotation.html">DynamicRotation</a></li>
</ul>
</li>
<li><a class="xref" href="../../../../../api/Hi.Mech.Topo.DynamicFreeform.html">DynamicFreeform</a></li>
</ul>
</li>
</ul>
<p><strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.IStaticTransformer.html">IStaticTransformer</a></strong> is transformer with constant matrix. <strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.NoTransform.html">NoTransform</a></strong>, <strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.StaticTranslation.html">StaticTranslation</a></strong> and <strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.StaticRotation.html">StaticRotation</a></strong> contains transform matrix of identity, translate and rotate respectively. <strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.StaticFreeform.html">StaticFreeform</a></strong> contains a arbitrary constant transform matrix.</p>
<p>The transform matrix of <a class="xref" href="../../../../../api/Hi.Mech.Topo.StaticTranslation.html">StaticTranslation</a> is:</p>
<div class="math">
\[
M_{StaticTranslate}=
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\\\
0 &amp; 1 &amp; 0 &amp; 0 \\\\
0 &amp; 0 &amp; 1 &amp; 0 \\\\
Trans.x &amp; Trans.y &amp; Trans.z &amp; 1
\end{bmatrix}
\]</div>
<p>The transform matrix of <a class="xref" href="../../../../../api/Hi.Mech.Topo.StaticRotation.html">StaticRotation</a> and <a class="xref" href="../../../../../api/Hi.Mech.Topo.DynamicRotation.html">DynamicRotation</a> is:</p>
<div class="math">
\[
M_{Rotate}=
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\\\
0 &amp; 1 &amp; 0 &amp; 0 \\\\
0 &amp; 0 &amp; 1 &amp; 0 \\\\
-Pivot.x &amp; -Pivot.y &amp; -Pivot.z &amp; 1
\end{bmatrix}
\cdot
\\\\
\begin{bmatrix}
Rot_{00}(axis,rad) &amp; Rot_{01}(axis,rad) &amp; Rot_{02}(axis,rad) &amp; 0 \\\\
Rot_{10}(axis,rad) &amp; Rot_{11}(axis,rad) &amp; Rot_{12}(axis,rad) &amp; 0 \\\\
Rot_{20}(axis,rad) &amp; Rot_{21}(axis,rad) &amp; Rot_{22}(axis,rad) &amp; 0 \\\\
0 &amp; 0 &amp; 0 &amp; 1
\end{bmatrix}
\cdot
\\\\
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\\\
0 &amp; 1 &amp; 0 &amp; 0 \\\\
0 &amp; 0 &amp; 1 &amp; 0 \\\\
Pivot.x &amp; Pivot.y &amp; Pivot.z &amp; 1
\end{bmatrix}
\]</div>
<p>Where <a class="xref" href="../../../../../api/Hi.Mech.Topo.DynamicRotation.html#Hi_Mech_Topo_DynamicRotation_Pivot">Pivot</a> is the position of the rotation axis.</p>
<div class="TIP">
<h5>Tip</h5>
<p>Pivot is a point. However, rotation axis is a line. It means that it causes the same matrix no matter how the pivot is moving along the axis.</p>
</div>
<p><strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.IDynamicTransformer.html">IDynamicTransformer</a></strong> is transformer with inconstant transform matrix. <strong><a class="xref" href="../../../../../api/Hi.Mech.Topo.IDynamicRegular.html">IDynamicRegular</a></strong> has a property <a class="xref" href="../../../../../api/Hi.Mech.Topo.IDynamicRegular.html#Hi_Mech_Topo_IDynamicRegular_Step">Step</a>, implied that the transform matrix is one parameter driven. <a class="xref" href="../../../../../api/Hi.Mech.Topo.TransformerUtil.html#Hi_Mech_Topo_TransformerUtil_GetSteps_Hi_Mech_Topo_IDynamicRegular___">GetSteps(IDynamicRegular[])</a> and <a class="xref" href="../../../../../api/Hi.Mech.Topo.TransformerUtil.html#Hi_Mech_Topo_TransformerUtil_SetSteps_Hi_Mech_Topo_IDynamicRegular___System_Double___">SetSteps(IDynamicRegular[], double[])</a> provide easy handle of an array of <a class="xref" href="../../../../../api/Hi.Mech.Topo.IDynamicRegular.html">IDynamicRegular</a> objects.</p>
<p>The transform matrix of <a class="xref" href="../../../../../api/Hi.Mech.Topo.DynamicTranslation.html">DynamicTranslation</a> is:</p>
<div class="math">
\[
M_{DynamicTranslate}=
\begin{bmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\\\
0 &amp; 1 &amp; 0 &amp; 0 \\\\
0 &amp; 0 &amp; 1 &amp; 0 \\\\
Trans.x \cdot Step &amp; Trans.y \cdot Step &amp; Trans.z \cdot Step &amp; 1
\end{bmatrix}
\]</div>
<div class="NOTE">
<h5>Note</h5>
<p>In convention, <a class="xref" href="../../../../../api/Hi.Mech.Topo.StaticTranslation.html#Hi_Mech_Topo_StaticTranslation_Trans">Trans</a> should be normalized.</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

@@ -0,0 +1,300 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Using Hi.Disp.Drawing | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Using Hi.Disp.Drawing | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../../toc.html">
<meta name="docfx:tocrel" content="../../../toc.html">
<meta name="docfx:rel" content="../../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="using-hidispdrawing">Using Hi.Disp.Drawing</h1>
<p>The <a class="xref" href="../../../../../api/Hi.Disp.Drawing.html">Drawing</a> class is the most fundamental and efficient rendering unit that allows you to draw points, lines, and surfaces within the <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a>.</p>
<h2 id="understanding-drawing-structure">Understanding Drawing Structure</h2>
<p>Looking at the constructor <a class="xref" href="../../../../../api/Hi.Disp.Drawing.html#Hi_Disp_Drawing__ctor_System_Double___Hi_Disp_Stamp_System_Int32_">Drawing(double[], Stamp, int)</a> helps explain its structure:</p>
<ul>
<li>The <code>double[]</code> array contains batch data for rendering, composed of one or more data groups of consistent length</li>
<li>Each data group's length is determined by the <a class="xref" href="../../../../../api/Hi.Disp.Stamp.html">Stamp</a> parameter</li>
<li>Each data group describes a single vertex</li>
</ul>
<h2 id="data-components">Data Components</h2>
<p>A data group can contain up to four types of information:</p>
<table>
<thead>
<tr>
<th>Information</th>
<th>Abbreviation</th>
<th>Description</th>
<th>Size</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Vertex</strong></td>
<td>V</td>
<td>The position of the point (x, y, z)</td>
<td>3 doubles</td>
</tr>
<tr>
<td><strong>Normal</strong></td>
<td>N</td>
<td>The normal vector affecting light reflection (Nx, Ny, Nz)</td>
<td>3 doubles</td>
</tr>
<tr>
<td><strong>Color</strong></td>
<td>C</td>
<td>RGB color values ranging from 0 to 1</td>
<td>3 doubles</td>
</tr>
<tr>
<td><strong>Pick ID</strong></td>
<td>P</td>
<td>A single double value converted from an integer for selection operations</td>
<td>1 double</td>
</tr>
</tbody>
</table>
<p>The <a class="xref" href="../../../../../api/Hi.Disp.Stamp.html">Stamp</a> enumeration combines these abbreviations to create these possible stamps: <code>{V, NV, CV, CNV, PV, PNV, PCV, PCNV}</code>.</p>
<h3 id="important-notes">Important Notes:</h3>
<ul>
<li>The <strong>Vertex</strong> (V) is mandatory, which is why V appears in every Stamp option</li>
<li><strong>Normal</strong> vectors (N) are typically used for 3D graphics to create a sense of depth through lighting</li>
<li><strong>Color</strong> (C) uses three double values (R, G, B) in the range of 0 to 1</li>
<li><strong>Pick ID</strong> (P) is used for graphical selection operations</li>
</ul>
<h2 id="data-structure-example">Data Structure Example</h2>
<ul>
<li>If <a class="xref" href="../../../../../api/Hi.Disp.Stamp.html">Stamp</a> is <code>V</code>, each data group consists of 3 double values (x, y, z)</li>
<li>If <a class="xref" href="../../../../../api/Hi.Disp.Stamp.html">Stamp</a> is <code>PCV</code>, each data group consists of 1(P) + 3(C) + 3(V) = 7 double values</li>
</ul>
<h2 id="rendering-mode">Rendering Mode</h2>
<p>The <code>glmode</code> parameter is an OpenGL constant that specifies the drawing mode. You can search for &ldquo;OpenGL Primitives&rdquo; online to see illustrations of these modes.</p>
<h2 id="example-usage">Example Usage</h2>
<pre><code class="lang-csharp">// Creating a simple line strip with three vertices
double[] vertices = new double[] {
0, 0, 0, // First point at origin
1, 0, 0, // Second point along X-axis
0, 0, 1 // Third point along Z-axis
};
// Create drawing object using the vertices
var drawing = new Drawing(vertices, Stamp.V, (int)OpenGL.GL_LINE_STRIP);
</code></pre>
<p>This example creates three vertices with only position information (V), so each vertex has just xyz coordinates. The drawing mode is set to LineStrip.</p>
<p><img src="easydraw_lines.png" alt="Line Strip Drawing Example"></p>
<h2 id="performance-considerations">Performance Considerations</h2>
<div class="NOTE">
<h5>Note</h5>
<p>After a <a class="xref" href="../../../../../api/Hi.Disp.Drawing.html">Drawing</a> object is created, its source data is stored in GPU memory. Regardless of the amount of data, the CPU processing load when calling <a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html#Hi_Disp_IDisplayee_Display_Hi_Disp_Bind_">Display(Bind)</a> remains consistent. This means displaying 100 points with one <a class="xref" href="../../../../../api/Hi.Disp.Drawing.html">Drawing</a> object is approximately 100 times faster than using 100 separate Drawing objects to display 100 individual points.</p>
</div>
<h2 id="composing-multiple-idisplayee-objects">Composing Multiple IDisplayee Objects</h2>
<p>A common pattern is to combine multiple <a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a> objects, including <a class="xref" href="../../../../../api/Hi.Disp.Drawing.html">Drawing</a> objects:</p>
<pre><code class="lang-csharp">public class MyCompositeDisplayee : IDisplayee
{
private readonly List&lt;IDisplayee&gt; _displayees = new List&lt;IDisplayee&gt;();
public MyCompositeDisplayee()
{
// Create a grid drawing
_displayees.Add(CreateGridDrawing());
// Create an axes drawing
_displayees.Add(CreateAxesDrawing());
// Add other custom drawings
_displayees.Add(CreateCustomDrawing());
}
private Drawing CreateGridDrawing()
{
// Code to create a grid
double[] gridVertices = new double[/* grid data */];
return new Drawing(gridVertices, Stamp.CV, (int)OpenGL.GL_LINES);
}
private Drawing CreateAxesDrawing()
{
// Create colored axes
double[] axesData = new double[] {
// Red X-axis (with color)
1, 0, 0, 0, 0, 0, // Red color, origin
1, 0, 0, 1, 0, 0, // Red color, x-axis end
// Green Y-axis (with color)
0, 1, 0, 0, 0, 0, // Green color, origin
0, 1, 0, 0, 1, 0, // Green color, y-axis end
// Blue Z-axis (with color)
0, 0, 1, 0, 0, 0, // Blue color, origin
0, 0, 1, 0, 0, 1 // Blue color, z-axis end
};
return new Drawing(axesData, Stamp.CV, (int)OpenGL.GL_LINES);
}
public void Display(Bind bind)
{
// Render all contained displayees
foreach (var displayee in _displayees)
{
displayee.Display(bind);
}
}
public void ExpandToBox3d(Box3d box)
{
// Update bounding box based on all displayees
foreach (var displayee in _displayees)
{
displayee.ExpandToBox3d(box);
}
}
}
</code></pre>
<h2 id="creating-common-shapes">Creating Common Shapes</h2>
<p>Here are some examples of creating common shapes using the <a class="xref" href="../../../../../api/Hi.Disp.Drawing.html">Drawing</a> class:</p>
<h3 id="creating-points">Creating Points</h3>
<pre><code class="lang-csharp">// Create an array of points
double[] pointData = new double[] {
0, 0, 0, // Point 1
1, 1, 1, // Point 2
2, 0, 0, // Point 3
0, 2, 0 // Point 4
};
// Create a Drawing for points
var pointDrawing = new Drawing(pointData, Stamp.V, (int)OpenGL.GL_POINTS);
</code></pre>
<h3 id="creating-lines">Creating Lines</h3>
<pre><code class="lang-csharp">// Create line segments (pairs of vertices)
double[] lineData = new double[] {
0, 0, 0, 1, 1, 0, // Line 1: (0,0,0) to (1,1,0)
2, 0, 0, 2, 2, 0 // Line 2: (2,0,0) to (2,2,0)
};
// Create a Drawing for lines
var lineDrawing = new Drawing(lineData, Stamp.V, (int)OpenGL.GL_LINES);
</code></pre>
<h3 id="creating-triangles">Creating Triangles</h3>
<pre><code class="lang-csharp">// Create triangles (triplets of vertices)
double[] triangleData = new double[] {
// Triangle 1
0, 0, 0, // Vertex 1
1, 0, 0, // Vertex 2
0, 1, 0 // Vertex 3
};
// Create a Drawing for triangles
var triangleDrawing = new Drawing(triangleData, Stamp.V, (int)OpenGL.GL_TRIANGLES);
</code></pre>
<h2 id="see-also">See Also</h2>
<ul>
<li><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a></li>
<li><a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a></li>
<li><a class="xref" href="../../../../../api/Hi.Disp.DispList.html">DispList</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,171 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Rendering with HiAPI | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Rendering with HiAPI | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="rendering-with-hiapi">Rendering with HiAPI</h1>
<p>This section covers the rendering capabilities of HiAPI, focusing on how to create and display visual content in your applications.</p>
<h2 id="overview">Overview</h2>
<p>HiAPI provides a powerful rendering system built around the <a class="xref" href="../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> and <a class="xref" href="../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a> interface. This system enables you to:</p>
<ul>
<li>Create and render 3D and 2D graphics</li>
<li>Implement interactive user interfaces</li>
<li>Achieve high-performance rendering across multiple platforms</li>
<li>Handle touch, mouse, and keyboard input uniformly</li>
</ul>
<h2 id="key-components">Key Components</h2>
<p>The HiAPI rendering system consists of several key components:</p>
<ul>
<li><strong>DispEngine</strong>: The core rendering engine that processes displayees and handles user interaction</li>
<li><strong>IDisplayee</strong>: The interface for renderable objects</li>
<li><strong>Drawing</strong>: A fundamental rendering unit for creating basic geometric elements</li>
<li><strong>RenderingCanvas</strong>: UI controls for different frameworks that host the DispEngine</li>
</ul>
<h2 id="sections">Sections</h2>
<table>
<thead>
<tr>
<th>Topic</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="rendering-canvas/index.html">Using RenderingCanvas with DispEngine</a></td>
<td>Learn how to use the RenderingCanvas component in your applications</td>
</tr>
<tr>
<td><a href="rendering-canvas/custom-implementation.html">Building Your Own Rendering Canvas</a></td>
<td>Understand how to implement custom rendering components</td>
</tr>
<tr>
<td><a href="drawing/index.html">Drawing</a></td>
<td>Learn how to use the Drawing class to create basic geometric elements</td>
</tr>
</tbody>
</table>
<h2 id="basic-rendering-workflow">Basic Rendering Workflow</h2>
<p>The typical workflow for rendering with HiAPI follows these steps:</p>
<ol>
<li><strong>Create Displayees</strong>: Implement <a class="xref" href="../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a> or use existing implementations like <a class="xref" href="../../../../api/Hi.Disp.Drawing.html">Drawing</a></li>
<li><strong>Configure DispEngine</strong>: Create and initialize a <a class="xref" href="../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> with your displayees</li>
<li><strong>UI Integration</strong>: Use RenderingCanvas components to display the rendered content in your UI</li>
<li><strong>Handle Input</strong>: Process user interactions through the DispEngine's input handling methods</li>
</ol>
<p>This pattern works consistently across all supported UI frameworks, allowing you to develop cross-platform applications with a unified codebase.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a class="xref" href="../../../../api/Hi.Disp.DispEngine.html">DispEngine</a></li>
<li><a class="xref" href="../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a></li>
<li><a class="xref" href="../../../../api/Hi.Disp.Drawing.html">Drawing</a></li>
<li><a class="xref" href="../../../../api/Hi.Disp.DispList.html">DispList</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,835 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Building Your Own Rendering Canvas | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Building Your Own Rendering Canvas | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../../toc.html">
<meta name="docfx:tocrel" content="../../../toc.html">
<meta name="docfx:rel" content="../../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="building-your-own-rendering-canvas">Building Your Own Rendering Canvas</h1>
<p>This guide provides detailed implementation information for creating your own <code>RenderingCanvas</code> using the <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a>. By understanding these implementation details, you can customize the rendering component for specific application needs or create implementations for other UI frameworks.</p>
<div class="NOTE">
<h5>Note</h5>
<p><strong>For Windows Applications</strong>: If you are developing for Windows systems, it is recommended to directly use the existing <code>RenderingCanvas</code> implementations in the <code>Hi.WinForm</code> or <code>Hi.Wpf</code> packages, rather than creating your own. These implementations are fully tested, optimized, and maintained.
<strong>For Webapi Applications</strong>: Using <code>Hi.Webapi</code>.</p>
<p>The implementation details provided in this document are primarily for educational purposes or for developers who need to port RenderingCanvas to other platforms/frameworks.</p>
</div>
<h2 id="basic-dispengine-usage">Basic DispEngine Usage</h2>
<p>The <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> is designed to display objects that implement the <a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a> interface. This is the fundamental purpose of DispEngine - to render displayable objects. Assign <a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a> to <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>.</p>
<h2 id="core-implementation-pattern">Core Implementation Pattern</h2>
<p>When implementing a custom <code>RenderingCanvas</code> for a UI platform, follow these key steps:</p>
<ol>
<li><strong>Initialize UI Component</strong> - Set up the UI control properties and event handling</li>
<li><strong>Configure DispEngine</strong> - Create and properly initialize the <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> instance</li>
<li><strong>Set Up Rendering Pipeline</strong> - Implement buffer swapping mechanism for visualization</li>
<li><strong>Handle User Input</strong> - Map platform-specific input events to DispEngine methods</li>
<li><strong>Manage Component Lifecycle</strong> - Ensure proper resource management and cleanup</li>
</ol>
<p>Let's examine the actual implementations in WinForm and WPF frameworks to understand these patterns in practice.</p>
<h2 id="winform-implementation-details">WinForm Implementation Details</h2>
<p>The WinForm implementation in <code>Hi.WinForm</code> combines Windows Forms controls with the <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> rendering system.</p>
<h3 id="core-properties-and-fields">Core Properties and Fields</h3>
<p>Here are the essential properties and fields defined in the WinForm implementation:</p>
<pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;summary&gt;
/// &lt;see cref=&quot;DispEngine&quot;/&gt;.
/// &lt;/summary&gt;
public DispEngine DispEngine { get; }
// Constants and structures for WM_TOUCH
private const int WM_TOUCH = 0x0240;
private const int TOUCHEVENTF_MOVE = 0x0001;
private const int TOUCHEVENTF_DOWN = 0x0002;
private const int TOUCHEVENTF_UP = 0x0004;
[StructLayout(LayoutKind.Sequential)]
private struct TOUCHINPUT
{
public int x;
public int y;
public IntPtr hSource;
public int dwID;
public int dwFlags;
public int dwMask;
public int dwTime;
public IntPtr dwExtraInfo;
public int cxContact;
public int cyContact;
}
[DllImport(&quot;user32.dll&quot;)]
private static extern bool RegisterTouchWindow(IntPtr hWnd, uint ulFlags);
[DllImport(&quot;user32.dll&quot;)]
private static extern bool GetTouchInputInfo(IntPtr hTouchInput, int cInputs, [In, Out] TOUCHINPUT[] pInputs, int cbSize);
[DllImport(&quot;user32.dll&quot;)]
private static extern void CloseTouchInputHandle(IntPtr lParam);
</code></pre><h3 id="initialization">Initialization</h3>
<p>The initialization code sets up event handlers and creates the DispEngine:</p>
<pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;summary&gt;
/// Ctor.
/// &lt;/summary&gt;
/// &lt;param name=&quot;displayees&quot;&gt;displayees&lt;/param&gt;
public unsafe RenderingCanvas(params IDisplayee[] displayees)
{
// Configure the control's visual styles
SetStyle(ControlStyles.Selectable, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, false);
SetStyle(ControlStyles.ContainerControl, false);
SetStyle(ControlStyles.ResizeRedraw, false);
DoubleBuffered = true;
InitializeComponent();
Dock = DockStyle.Fill;
// Connect event handlers for user input and window events
this.Resize += RenderingCanvas_Resize;
this.VisibleChanged += RenderingCanvas_VisibleChanged;
this.MouseMove += RenderingCanvas_MouseMove;
this.MouseDown += RenderingCanvas_MouseDown;
this.MouseUp += RenderingCanvas_MouseUp;
this.MouseWheel += RenderingCanvas_MouseWheel;
this.KeyDown += RenderingCanvas_KeyDown;
this.KeyUp += RenderingCanvas_KeyUp;
// Add focus event handler
this.GotFocus += RenderingCanvas_GotFocus;
this.HandleCreated += OnHandleCreated;
// Enable touch input and click events for the control
this.SetStyle(ControlStyles.StandardClick, true);
this.SetStyle(ControlStyles.StandardDoubleClick, true);
this.TabStop = true;
// Initialize the DispEngine with provided displayees
DispEngine = new DispEngine(displayees);
DispEngine.BackgroundColor = new Vec3d(0.1, 0.1, 0.5);
DispEngine.BackgroundOpacity = 0.1;
DispEngine.SetViewToHomeView();
DispEngine.ImageRequestAfterBufferSwapped += DispEngine_ImageRequestAfterBufferSwapped;
// Set initial size and start the rendering engine
this.Size = new System.Drawing.Size(500, 300);
DispEngine.Start(this.ClientSize.Width, this.ClientSize.Height);
}
</code></pre><h3 id="rendering-pipeline">Rendering Pipeline</h3>
<p>The rendering pipeline processes images from DispEngine and displays them:</p>
<pre><code class="lang-csharp" name="RenderingCanvas">private unsafe void DispEngine_ImageRequestAfterBufferSwapped(byte* bgra_unsignedbyte_pixels, int w, int h)
{
// Create a bitmap from the raw pixel data provided by DispEngine
Bitmap bitmap;
bitmap = new Bitmap(new Bitmap(w, h, w * 4,
PixelFormat.Format32bppArgb, new IntPtr(bgra_unsignedbyte_pixels)));
// Update the background image and dispose the previous one
Image pre = this.BackgroundImage;
this.BackgroundImage = bitmap;
pre?.Dispose();
}
</code></pre><h3 id="input-handling">Input Handling</h3>
<h4 id="windows-message-handling-for-touch">Windows Message Handling for Touch</h4>
<p>WinForm implementation intercepts Windows touch messages and forwards them to DispEngine:</p>
<pre><code class="lang-csharp" name="RenderingCanvas">protected override void WndProc(ref Message m)
{
if (m.Msg == WM_TOUCH)
{
HandleTouchInput(m.WParam, m.LParam);
return;
}
base.WndProc(ref m);
}
private void OnHandleCreated(object sender, EventArgs e)
{
// Register window to receive touch messages
RegisterTouchWindow(this.Handle, 0);
}
private void HandleTouchInput(IntPtr wParam, IntPtr lParam)
{
int inputCount = wParam.ToInt32();
TOUCHINPUT[] inputs = new TOUCHINPUT[inputCount];
if (!GetTouchInputInfo(lParam, inputCount, inputs, Marshal.SizeOf(typeof(TOUCHINPUT))))
return;
try
{
for (int i = 0; i &lt; inputCount; i++)
{
TOUCHINPUT ti = inputs[i];
int touchId = ti.dwID;
// Convert touch coordinates to client coordinates
Point touchPoint = PointToClient(new Point(ti.x / 100, ti.y / 100));
if ((ti.dwFlags &amp; TOUCHEVENTF_DOWN) != 0)
{
// Touch down event
DispEngine.TouchDown(touchId, touchPoint.X, touchPoint.Y);
this.Focus();
}
else if ((ti.dwFlags &amp; TOUCHEVENTF_MOVE) != 0)
{
// Touch move event
DispEngine.TouchMove(touchId, touchPoint.X, touchPoint.Y);
}
else if ((ti.dwFlags &amp; TOUCHEVENTF_UP) != 0)
{
// Touch up event
DispEngine.TouchUp(touchId);
}
}
}
finally
{
CloseTouchInputHandle(lParam);
}
}
</code></pre>
<p>The key aspect is mapping Windows touch events to DispEngine's touch API:</p>
<pre><code class="lang-csharp">// Inside HandleTouchInput method
if ((ti.dwFlags &amp; TOUCHEVENTF_DOWN) != 0)
{
// Touch down event - delegate to DispEngine
DispEngine.TouchDown(touchId, touchPoint.X, touchPoint.Y);
this.Focus();
}
else if ((ti.dwFlags &amp; TOUCHEVENTF_MOVE) != 0)
{
// Touch move event - delegate to DispEngine
DispEngine.TouchMove(touchId, touchPoint.X, touchPoint.Y);
}
else if ((ti.dwFlags &amp; TOUCHEVENTF_UP) != 0)
{
// Touch up event - delegate to DispEngine
DispEngine.TouchUp(touchId);
}
</code></pre>
<h4 id="mouse-events">Mouse Events</h4>
<pre><code class="lang-csharp" name="RenderingCanvas">private void RenderingCanvas_MouseMove(object sender, MouseEventArgs e)
{
// Update mouse position and handle drag transforms
DispEngine.MouseMove(e.Location.X, e.Location.Y);
DispEngine.MouseDragTransform(e.Location.X, e.Location.Y,
new mouse_button_table__transform_view_by_mouse_drag_t()
{
LEFT_BUTTON = (long)MouseButtons.Left,
RIGHT_BUTTON = (long)MouseButtons.Right
});
}
private void RenderingCanvas_MouseDown(object sender, MouseEventArgs e)
{
// Handle mouse button press
DispEngine.MouseButtonDown((long)e.Button);
this.Focus();
}
private void RenderingCanvas_MouseUp(object sender, MouseEventArgs e)
{
// Handle mouse button release
DispEngine.MouseButtonUp((long)e.Button);
}
private void RenderingCanvas_MouseWheel(object sender, MouseEventArgs e)
{
// Handle mouse wheel for zoom operations
DispEngine.MouseWheel(0, e.Delta / 120);
DispEngine.MouseWheelTransform(0, e.Delta / 120);
}
</code></pre><h4 id="keyboard-events">Keyboard Events</h4>
<pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;inheritdoc/&gt;
protected override bool IsInputKey(Keys keyData)
{
//since in default, arrow does not trigger key event(keyDown and keyUp).
return true;
}
private void RenderingCanvas_KeyDown(object sender, KeyEventArgs e)
{
Focus();
DispEngine.KeyDown((long)e.KeyData);
// Map specific keys for view transformation
long key = (long)e.KeyData;
if (key == (long)Keys.LShiftKey || key == (long)Keys.RShiftKey || key == (long)Keys.ShiftKey)
key = (long)Keys.Shift;
DispEngine.KeyDownTransform(key, new key_table__transform_view_by_key_pressing_t()
{
HOME = (long)Keys.Home,
PAGE_UP = (long)Keys.PageUp,
PAGE_DOWN = (long)Keys.PageDown,
F1 = (long)Keys.F1,
F2 = (long)Keys.F2,
F3 = (long)Keys.F3,
F4 = (long)Keys.F4,
SHIFT = (long)Keys.Shift,
ARROW_LEFT = (long)Keys.Left,
ARROW_RIGHT = (long)Keys.Right,
ARROW_DOWN = (long)Keys.Down,
ARROW_UP = (long)Keys.Up
});
}
private void RenderingCanvas_KeyUp(object sender, KeyEventArgs e)
{
DispEngine.KeyUp((long)e.KeyData);
}
</code></pre><h3 id="lifecycle-management">Lifecycle Management</h3>
<p>Window event handling ensures proper state management:</p>
<pre><code class="lang-csharp" name="RenderingCanvas">private void RenderingCanvas_Resize(object sender, EventArgs e)
{
// Notify DispEngine of size changes
DispEngine.Resize(this.ClientSize.Width, this.ClientSize.Height);
}
private void RenderingCanvas_VisibleChanged(object sender, EventArgs e)
{
// Update visibility state in DispEngine
DispEngine.IsVisible = this.Visible;
}
</code></pre><h3 id="resource-cleanup">Resource Cleanup</h3>
<pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;summary&gt;
/// Clean up any resources being used.
/// &lt;/summary&gt;
/// &lt;param name=&quot;disposing&quot;&gt;true if managed resources should be disposed; otherwise, false.&lt;/param&gt;
protected override void Dispose(bool disposing)
{
if (disposing &amp;&amp; (components != null))
{
// Dispose the DispEngine to free resources
DispEngine.Dispose();
components.Dispose();
}
base.Dispose(disposing);
}
</code></pre><h2 id="wpf-implementation-details">WPF Implementation Details</h2>
<p>The WPF implementation uses WPF-specific controls and mechanisms but follows the same core pattern.</p>
<h3 id="core-properties">Core Properties</h3>
<pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;summary&gt;
/// The DispEngine instance that handles rendering and user interactions
/// &lt;/summary&gt;
public DispEngine DispEngine { get; } = new DispEngine();
/// &lt;summary&gt;
/// Internal container for rendering content
/// &lt;/summary&gt;
private UserControl DisplayerPane { get; }
/// &lt;summary&gt;
/// Dictionary to store touch point information
/// &lt;/summary&gt;
private Dictionary&lt;int, Point&gt; TouchingPointsMap { get; } = new Dictionary&lt;int, Point&gt;();
/// &lt;summary&gt;
/// Dictionary to store previous positions of touch points
/// &lt;/summary&gt;
private Dictionary&lt;int, Point&gt; PreviousTouchingPointsMap { get; } = new Dictionary&lt;int, Point&gt;();
</code></pre><h3 id="initialization-1">Initialization</h3>
<pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;summary&gt;
/// Initializes a new instance of the RenderingCanvas
/// &lt;/summary&gt;
public RenderingCanvas()
{
DispEngine.BackgroundColor = new Vec3d(0.1, 0.1, 0.5);
DispEngine.BackgroundOpacity = 0.1;
// Configure the main control properties
HorizontalAlignment = HorizontalAlignment.Stretch;
VerticalAlignment = VerticalAlignment.Stretch;
Focusable = true;
KeyboardNavigation.SetDirectionalNavigation(this, KeyboardNavigationMode.Cycle);
DataContextChanged += CanvasDataContextChanged;
// Create and configure the display pane
DisplayerPane = new UserControl();
DisplayerPane.HorizontalAlignment = HorizontalAlignment.Stretch;
DisplayerPane.VerticalAlignment = VerticalAlignment.Stretch;
DisplayerPane.Focusable = true;
DisplayerPane.IsTabStop = true;
// Connect event handlers for user input and window events
DisplayerPane.SizeChanged += RenderingCanvas_SizeChanged;
DisplayerPane.MouseMove += RenderingCanvas_MouseMove;
DisplayerPane.MouseDown += RenderingCanvas_MouseDown;
DisplayerPane.MouseUp += RenderingCanvas_MouseUp;
DisplayerPane.MouseWheel += RenderingCanvas_MouseWheel;
DisplayerPane.KeyDown += RenderingCanvas_KeyDown;
DisplayerPane.KeyUp += RenderingCanvas_KeyUp;
DisplayerPane.Loaded += RenderingCanvas_Loaded;
DisplayerPane.Unloaded += RenderingCanvas_Unloaded;
DisplayerPane.IsVisibleChanged += DisplayerPane_IsVisibleChanged;
// Add touch event handlers
DisplayerPane.TouchDown += RenderingCanvas_TouchDown;
DisplayerPane.TouchMove += RenderingCanvas_TouchMove;
DisplayerPane.TouchUp += RenderingCanvas_TouchUp;
// Enable touch support
this.IsManipulationEnabled = true;
// Initialize power management
InitializePowerManagement();
// Add the display pane to this control's content
Content = DisplayerPane;
}
</code></pre><h3 id="rendering-pipeline-1">Rendering Pipeline</h3>
<pre><code class="lang-csharp" name="RenderingCanvas">private byte[] PreImageBgra { get; set; }
/// &lt;summary&gt;
/// Handles the buffer swapped event from DispEngine
/// &lt;/summary&gt;
private unsafe void RenderingCanvas_BufferSwapped(byte* data, int w, int h)
{
if (data == null)
return;
//since the treatment is different from Razor version,
//the image checking mechanism cannot be set in DispEngine.
Span&lt;byte&gt; bgra = new Span&lt;byte&gt;(data, w * h * 4);
if (PreImageBgra != null &amp;&amp; bgra.SequenceEqual(PreImageBgra))
return;
PreImageBgra = bgra.ToArray();
// Copy pixel data from DispEngine
int n = w * h * 4;
byte[] arr = new byte[n];
for (int i = 0; i &lt; n; i++)
arr[i] = data[i];
// Update UI on the UI thread
DisplayerPane.Dispatcher.InvokeAsync(() =&gt;
{
BitmapSource bitmap = BitmapSource.Create(w, h, 1, 1, PixelFormats.Bgra32, null, arr, w * 4);
DisplayerPane.Background = new ImageBrush(bitmap);
});
}
/// &lt;summary&gt;
/// Handles the size changed event
/// &lt;/summary&gt;
private void RenderingCanvas_SizeChanged(object sender, SizeChangedEventArgs e)
{
// Notify DispEngine of size changes
DispEngine.Resize((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height);
}
/// &lt;summary&gt;
/// Handles visibility changes
/// &lt;/summary&gt;
private unsafe void DisplayerPane_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
// Update visibility state in DispEngine
DispEngine.IsVisible = IsVisible;
}
</code></pre><h3 id="mouse-and-keyboard-handling">Mouse and Keyboard Handling</h3>
<pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;summary&gt;
/// Helper method to get mouse button mask
/// &lt;/summary&gt;
internal static HiMouseButtonMask GetMouseButtonMask(MouseDevice device)
{
HiMouseButtonMask mouseButtonMask = 0;
mouseButtonMask.SetLeftPressed(device.LeftButton == MouseButtonState.Pressed);
mouseButtonMask.SetMiddlePressed(device.MiddleButton == MouseButtonState.Pressed);
mouseButtonMask.SetRightPressed(device.RightButton == MouseButtonState.Pressed);
mouseButtonMask.SetXButton1Pressed(device.XButton1 == MouseButtonState.Pressed);
mouseButtonMask.SetXButton2Pressed(device.XButton2 == MouseButtonState.Pressed);
return mouseButtonMask;
}
/// &lt;summary&gt;
/// Handles the mouse wheel event
/// &lt;/summary&gt;
private void RenderingCanvas_MouseWheel(object sender, MouseWheelEventArgs e)
{
// Handle mouse wheel for zoom operations
DispEngine.MouseWheel(0, e.Delta / 120);
DispEngine.MouseWheelTransform(0, e.Delta / 120);
}
/// &lt;summary&gt;
/// Handles the mouse up event
/// &lt;/summary&gt;
private void RenderingCanvas_MouseUp(object sender, MouseButtonEventArgs e)
{
// Handle mouse button release
DispEngine.MouseButtonUp((long)e.ChangedButton);
(sender as UIElement)?.ReleaseMouseCapture();
}
/// &lt;summary&gt;
/// Handles the mouse down event
/// &lt;/summary&gt;
private void RenderingCanvas_MouseDown(object sender, MouseButtonEventArgs e)
{
// Handle mouse button press
DispEngine.MouseButtonDown((long)e.ChangedButton);
DisplayerPane.Focus();
(sender as UIElement)?.CaptureMouse();
}
/// &lt;summary&gt;
/// Handles the mouse move event
/// &lt;/summary&gt;
private void RenderingCanvas_MouseMove(object sender, MouseEventArgs e)
{
// Update mouse position and handle drag transforms
Point p = e.GetPosition(DisplayerPane);
DispEngine.MouseMove((int)p.X, (int)p.Y);
DispEngine.MouseDragTransform((int)p.X, (int)p.Y,
new mouse_button_table__transform_view_by_mouse_drag_t()
{
LEFT_BUTTON = (long)MouseButton.Left,
RIGHT_BUTTON = (long)MouseButton.Right
});
}
</code></pre><pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;summary&gt;
/// Handles the key up event
/// &lt;/summary&gt;
private void RenderingCanvas_KeyUp(object sender, KeyEventArgs e)
{
DispEngine.KeyUp((long)e.Key);
}
/// &lt;summary&gt;
/// Handles the key down event
/// &lt;/summary&gt;
private void RenderingCanvas_KeyDown(object sender, KeyEventArgs e)
{
DispEngine.KeyDown((long)e.Key);
// Map specific keys for view transformation
long key = (long)e.Key;
if (key == (long)Key.RightShift)
key = (long)Key.LeftShift;
DispEngine.KeyDownTransform(key, new key_table__transform_view_by_key_pressing_t()
{
HOME = (long)Key.Home,
PAGE_UP = (long)Key.PageUp,
PAGE_DOWN = (long)Key.PageDown,
F1 = (long)Key.F1,
F2 = (long)Key.F2,
F3 = (long)Key.F3,
F4 = (long)Key.F4,
SHIFT = (long)Key.LeftShift,
ARROW_LEFT = (long)Key.Left,
ARROW_RIGHT = (long)Key.Right,
ARROW_DOWN = (long)Key.Down,
ARROW_UP = (long)Key.Up
});
}
</code></pre><h3 id="lifecycle-management-1">Lifecycle Management</h3>
<pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;summary&gt;
/// Handles window state changes (maximize, minimize, etc.)
/// &lt;/summary&gt;
private unsafe void RenderingCanvas_StateChanged(object sender, EventArgs e)
{
switch ((sender as Window).WindowState)
{
case WindowState.Maximized:
DispEngine.IsVisible = true;
break;
case WindowState.Minimized:
DispEngine.IsVisible = false;
break;
case WindowState.Normal:
DispEngine.IsVisible = true;
break;
}
}
/// &lt;summary&gt;
/// Handles data context changes
/// &lt;/summary&gt;
private unsafe void CanvasDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
DispEngine pre = e.OldValue as DispEngine;
DispEngine cur = e.NewValue as DispEngine;
//child's binding event is triggered after IsVisible event and Load event.
if (pre != null) //this section will never occur if the datacontext not set twice.
{
pre.Terminate();
pre.ImageRequestAfterBufferSwapped -= RenderingCanvas_BufferSwapped;
}
if (cur != null)
{
cur.ImageRequestAfterBufferSwapped += RenderingCanvas_BufferSwapped;
cur.Start((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height);
cur.IsVisible = IsVisible;
}
}
/// &lt;summary&gt;
/// Reference to the current window containing this control
/// &lt;/summary&gt;
private Window currentWindow;
/// &lt;summary&gt;
/// Gets or sets the current window, connecting or disconnecting state change events
/// &lt;/summary&gt;
Window CurrentWindow
{
get =&gt; currentWindow; set
{
if (currentWindow != null)
currentWindow.StateChanged -= RenderingCanvas_StateChanged;
currentWindow = value;
if (currentWindow != null)
currentWindow.StateChanged += RenderingCanvas_StateChanged;
}
}
/// &lt;summary&gt;
/// Handles the loaded event
/// &lt;/summary&gt;
private unsafe void RenderingCanvas_Loaded(object sender, RoutedEventArgs e)
{
// Get the window containing this control
CurrentWindow = Window.GetWindow(this);
// Set up DispEngine rendering
DispEngine.ImageRequestAfterBufferSwapped -= RenderingCanvas_BufferSwapped;
DispEngine.ImageRequestAfterBufferSwapped += RenderingCanvas_BufferSwapped;
DispEngine.Start((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height);
DispEngine.IsVisible = IsVisible;
}
/// &lt;summary&gt;
/// Handles the unloaded event
/// &lt;/summary&gt;
private unsafe void RenderingCanvas_Unloaded(object sender, RoutedEventArgs e)
{
DispEngine.IsVisible = IsVisible;
DispEngine.ImageRequestAfterBufferSwapped -= RenderingCanvas_BufferSwapped;
CurrentWindow = null;
}
</code></pre><h3 id="resource-cleanup-1">Resource Cleanup</h3>
<pre><code class="lang-csharp" name="RenderingCanvas">/// &lt;summary&gt;
/// Flag to track disposed state
/// &lt;/summary&gt;
private bool disposedValue;
/// &lt;summary&gt;
/// Disposes managed resources
/// &lt;/summary&gt;
protected virtual void Dispose(bool disposing)
{
if (!disposedValue)
{
if (disposing)
{
// Unsubscribe from power events
SystemEvents.PowerModeChanged -= SystemEvents_PowerModeChanged;
// Dispose the DispEngine to free resources
DispEngine.Dispose();
}
disposedValue = true;
}
}
/// &lt;summary&gt;
/// Public dispose method to free resources
/// &lt;/summary&gt;
public void Dispose()
{
// Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method
Dispose(disposing: true);
GC.SuppressFinalize(this);
}
</code></pre><h2 id="core-dispengine-integration-patterns">Core DispEngine Integration Patterns</h2>
<h3 id="1-initialization-sequence">1. Initialization Sequence</h3>
<pre><code class="lang-csharp">// Create DispEngine (optionally with displayees)
var engine = new DispEngine(displayees);
// Set up image buffer callback
engine.ImageRequestAfterBufferSwapped += OnBufferSwapped;
// Initialize with canvas size
engine.Start(width, height);
// Set initial view (optional)
engine.SetViewToHomeView();
</code></pre>
<h3 id="2-render-loop">2. Render Loop</h3>
<p>The rendering process follows this pattern:</p>
<ol>
<li><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> processes <a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a> objects</li>
<li>Buffer is swapped and callback is triggered</li>
<li>UI framework renders the buffer to screen</li>
<li>User input triggers view updates</li>
<li>Process repeats</li>
</ol>
<h3 id="3-complete-user-input-mapping">3. Complete User Input Mapping</h3>
<p>All user interactions must be mapped to <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> methods:</p>
<table>
<thead>
<tr>
<th>User Action</th>
<th>DispEngine Method</th>
</tr>
</thead>
<tbody>
<tr>
<td>Mouse move</td>
<td><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_MouseMove_System_Int32_System_Int32_">MouseMove(int, int)</a></td>
</tr>
<tr>
<td>Mouse drag</td>
<td><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_MouseDragTransform_System_Int32_System_Int32_Hi_Native_mouse_button_table__transform_view_by_mouse_drag_t_">MouseDragTransform(int, int, mouse_button_table__transform_view_by_mouse_drag_t)</a></td>
</tr>
<tr>
<td>Mouse button</td>
<td><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_MouseButtonDown_System_Int64_">MouseButtonDown(long)</a> / <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_MouseButtonUp_System_Int64_">MouseButtonUp(long)</a></td>
</tr>
<tr>
<td>Mouse wheel</td>
<td><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_MouseWheel_System_Int32_System_Int32_">MouseWheel(int, int)</a> and <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_MouseWheelTransform_System_Int32_System_Int32_System_Double_">MouseWheelTransform(int, int, double)</a></td>
</tr>
<tr>
<td>Key press</td>
<td><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_KeyDown_System_Int64_">KeyDown(long)</a> / <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_KeyUp_System_Int64_">KeyUp(long)</a> and <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_KeyDownTransform_System_Int64_Hi_Native_key_table__transform_view_by_key_pressing_t_">KeyDownTransform(long, key_table__transform_view_by_key_pressing_t)</a></td>
</tr>
<tr>
<td>Touch events</td>
<td><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_TouchDown_System_Int32_System_Int32_System_Int32_">TouchDown(int, int, int)</a> / <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_TouchMove_System_Int32_System_Int32_System_Int32_">TouchMove(int, int, int)</a> / <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_TouchUp_System_Int32_">TouchUp(int)</a></td>
</tr>
</tbody>
</table>
<h3 id="4-proper-resource-cleanup">4. Proper Resource Cleanup</h3>
<p>Resource management is critical for proper operation:</p>
<pre><code class="lang-csharp">// In dispose method
DispEngine.ImageRequestAfterBufferSwapped -= OnBufferSwapped;
DispEngine.Terminate();
DispEngine.Dispose();
</code></pre>
<h2 id="advanced-implementation-considerations">Advanced Implementation Considerations</h2>
<p>When creating custom implementations, consider these aspects:</p>
<h3 id="view-manipulation">View Manipulation</h3>
<p>Use <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SketchView">SketchView</a> to directly access or modify the view matrix:</p>
<pre><code class="lang-csharp">// Get current view matrix
Mat4d currentView = engine.SketchView;
// Apply custom rotation
Mat4d rotation = Mat4d.RotateX(Math.PI/4);
engine.SketchView = currentView * rotation;
</code></pre>
<h2 id="see-also">See Also</h2>
<ul>
<li><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a></li>
<li><a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a></li>
<li><a class="xref" href="../../../../../api/Hi.Geom.Vec2d.html">Vec2d</a></li>
<li><a class="xref" href="../../../../../api/Hi.Geom.Mat4d.html">Mat4d</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,268 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Using RenderingCanvas with DispEngine | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Using RenderingCanvas with DispEngine | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../../toc.html">
<meta name="docfx:tocrel" content="../../../toc.html">
<meta name="docfx:rel" content="../../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="using-renderingcanvas-with-dispengine">Using RenderingCanvas with DispEngine</h1>
<p>The <code>RenderingCanvas</code> is the primary UI component for displaying and interacting with 3D content across different platforms. This section explains how to use it with the <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> to create cross-platform applications.</p>
<h2 id="overview">Overview</h2>
<p>The <code>RenderingCanvas</code> class is available in frameworks:</p>
<ul>
<li><code>Hi.WinForm</code> for Windows Forms applications</li>
<li><code>Hi.Wpf</code> for WPF applications</li>
<li><code>Hi.Webapi</code> for Webapi applications</li>
</ul>
<p>All implementations share a common architecture centered around the <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> class, enabling consistent rendering and interaction across platforms.</p>
<h2 id="core-concept-dispengine-and-idisplayee">Core Concept: DispEngine and IDisplayee</h2>
<p>At the heart of the rendering system is the relationship between <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> and <a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a>:</p>
<ul>
<li><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a>: The rendering engine that manages the OpenGL context and handles user interaction</li>
<li><a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a>: The interface that defines objects that can be rendered by the DispEngine</li>
</ul>
<p>This relationship is fundamental - <strong>the purpose of <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> is to render <a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a> objects</strong>.</p>
<pre><code class="lang-mermaid">graph TD
A[IDisplayee Objects] --&gt;|Rendered by| B
B[DispEngine] &lt;--&gt; C[RenderingCanvas UI Component]
</code></pre>
<h3 id="working-with-idisplayee">Working with IDisplayee</h3>
<p>Objects implementing <a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a> define what gets rendered. Typically, you'll use <a class="xref" href="../../../../../api/Hi.Disp.Drawing.html">Drawing</a> objects or compose multiple IDisplayee objects together:</p>
<pre><code class="lang-csharp">// Create a composite displayee
public class MyCompositeDisplayee : IDisplayee
{
private List&lt;IDisplayee&gt; _displayees = new List&lt;IDisplayee&gt;();
public MyCompositeDisplayee()
{
// Add various displayees
_displayees.Add(new AxesDisplayee());
_displayees.Add(new ModelDisplayee());
}
public void Display(Bind bind)
{
// Render all contained displayees
foreach (var displayee in _displayees)
{
displayee.Display(bind);
}
}
public void ExpandToBox3d(Box3d box)
{
// Update bounding box based on all displayees
foreach (var displayee in _displayees)
{
displayee.ExpandToBox3d(box);
}
}
}
</code></pre>
<p>For more detailed information on creating displayees with <a class="xref" href="../../../../../api/Hi.Disp.Drawing.html">Drawing</a>, see the <a href="../drawing/index.html">Drawing</a> section.</p>
<h2 id="basic-usage">Basic Usage</h2>
<h3 id="apply-hiwinform">Apply Hi.WinForm</h3>
<pre><code class="lang-csharp">// Create a new instance with displayee objects
using Hi.WinForm.Disp;
// Create displayee object
var displayee = new MyCompositeDisplayee();
// Initialize canvas with the displayee
var canvas = new RenderingCanvas(displayee);
// Access the DispEngine for direct manipulation
DispEngine engine = canvas.DispEngine;
// Add to a form
myForm.Controls.Add(canvas);
</code></pre>
<h3 id="apply-hiwpf">Apply Hi.WPF</h3>
<pre><code class="lang-csharp">// Create a new instance
using Hi.Wpf.Disp;
// Create displayee object
var displayee = new MyCompositeDisplayee();
// Initialize the canvas
var canvas = new RenderingCanvas();
// Set displayee objects through the DispEngine
canvas.DispEngine.Displayee = displayee;
// Add to a container
myGrid.Children.Add(canvas);
</code></pre>
<h2 id="apply-hiwebapi">Apply Hi.Webapi</h2>
<p>See <a href="webapi-rendering-canvas.html">Using Rendering Canvas By Hi.Webapi</a>.</p>
<h2 id="switching-displayees-at-runtime">Switching Displayees at Runtime</h2>
<p>You can dynamically change what's being displayed:</p>
<pre><code class="lang-csharp">// Switch to a different displayee
renderingCanvas.DispEngine.Displayee = alternativeDisplayee;
// Or update a DispList
var displayList = new DispList();
if (showModel) displayList.Add(modelDisplayee);
if (showGrid) displayList.Add(gridDisplayee);
renderingCanvas.DispEngine.Displayee = displayList;
</code></pre>
<h2 id="key-features-of-dispengine">Key Features of DispEngine</h2>
<p>The <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> provides cross-platform support for:</p>
<ul>
<li>Handles buffer swapping and image generation</li>
<li>Mouse/pointer events</li>
<li>Keyboard navigation</li>
<li>Touch gestures</li>
<li>Zoom, pan, and rotate operations</li>
<li>Resize and Visibility changed.</li>
<li>Camera positioning and orientation</li>
<li>Standard views (front, top, isometric, etc.)</li>
<li>Renders <a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a> implementations</li>
</ul>
<h2 id="touch-and-gesture-support">Touch and Gesture Support</h2>
<p>The <a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a> centralizes touch handling across all platforms with a unified API that supports:</p>
<ul>
<li>Single-finger pan</li>
<li>Two-finger rotate and scale</li>
<li>Multi-finger specialized operations</li>
</ul>
<p>The touch API is designed to be simple for UI implementations to use. Platform-specific UI components only need to capture touch events and forward them to the DispEngine.</p>
<h2 id="common-operations">Common Operations</h2>
<pre><code class="lang-csharp">// Accessing DispEngine (works on all platforms)
var engine = renderingCanvas.DispEngine;
// Set to standard views
engine.SetViewToHomeView();
engine.SetViewToFrontView();
// Manual camera manipulation
engine.Translate(dx, dy);
engine.Rotate(deltaX, deltaY);
// Resize handling
engine.Resize(width, height);
</code></pre>
<h2 id="implementation-details">Implementation Details</h2>
<p>For detailed implementation information, including:</p>
<ul>
<li>Full source code examples</li>
<li>Implementation details for each platform</li>
<li>Advanced touch handling</li>
<li>Custom implementation guidance</li>
</ul>
<p>See the <a href="custom-implementation.html">Building Your Own RenderingCanvas</a> guide.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a class="xref" href="../../../../../api/Hi.Disp.DispEngine.html">DispEngine</a></li>
<li><a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a></li>
<li><a class="xref" href="../../../../../api/Hi.Disp.DispList.html">DispList</a></li>
<li><a class="xref" href="../../../../../api/Hi.Disp.Drawing.html">Drawing</a></li>
<li><a href="custom-implementation.html">Building Your Own RenderingCanvas</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,164 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Using Rendering Canvas By Hi.Webapi | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Using Rendering Canvas By Hi.Webapi | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../../toc.html">
<meta name="docfx:tocrel" content="../../../toc.html">
<meta name="docfx:rel" content="../../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="using-rendering-canvas-by-hiwebapi">Using Rendering Canvas By Hi.Webapi</h1>
<p>Hi.Webapi git repo:</p>
<p>The Rendering Canvas implementation is located on the Hi.Webapi project (See<a href="../../../index.html">HiAPI Overview</a> to get git repository):</p>
<ul>
<li>wwwroot/disp/rendering-canvas.js
<ul>
<li>Pure js implementation.</li>
</ul>
</li>
<li>wwwroot/disp/rendering-canvas-vue.js
<ul>
<li>vue implementation.</li>
</ul>
</li>
<li>wwwroot/disp/rendering-canvas.css</li>
</ul>
<h2 id="usage-demonstration-by-hisamplewebapi-project">Usage Demonstration by Hi.Sample.Webapi Project</h2>
<p>The usage is illustrated by the sample code in Hi.Sample.Webapi project (See<a href="../../../index.html">HiAPI Overview</a> to get git repository).</p>
<p>The project applies Hi.Webapi nuget package (See<a href="../../../index.html">HiAPI Overview</a> to get git repository).</p>
<p>Following pathes are based on the Hi.Sample.Webapi project.</p>
<ul>
<li>A sample GUI to controll the rendering view
<ul>
<li>wwwroot/disp/rendering-canvas-view-dropdown.js</li>
</ul>
</li>
<li>Set Rendering Content (<a class="xref" href="../../../../../api/Hi.Disp.IDisplayee.html">IDisplayee</a>) to the Rendering Canvas
<ul>
<li>Controllers/RenderingController.cs</li>
</ul>
</li>
</ul>
<h2 id="component-usage">Component Usage</h2>
<ul>
<li>wwwroot/demo.html
<ul>
<li>apply rendering-canvas.js from Hi.Webapi package.</li>
</ul>
</li>
<li>wwwroot/demo-vue.html
<ul>
<li>apply rendering-canvas-vue.js from Hi.Webapi package.</li>
</ul>
</li>
<li>wwwroot/demo-plain-inline.html
<ul>
<li>Hard code implementation without re-using js file.</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,310 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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.NcEnv.html">NcEnv</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.NcEnv.html">NcEnv</a>.<a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_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.NcEnv.html#Hi_Numerical_NcEnv_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.NcEnv.html#Hi_Numerical_NcEnv_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.NcEnv.html#Hi_Numerical_NcEnv_RapidFeedrate_mmdmin">RapidFeedrate_mmdmin</a> Settings</li>
<li><a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_ToolingTime">ToolingTime</a> Settings</li>
<li>Linear Axis Limits Table
<ul>
<li><a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_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.NcEnv.html#Hi_Numerical_NcEnv_StrokeLimitAbc_rad">StrokeLimitAbc_rad</a> Min and Max for A, B, C</li>
<li><a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_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.NcEnv.html#Hi_Numerical_NcEnv_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.NcEnv.html#Hi_Numerical_NcEnv_SetToolHeightCompensationOnFeatureNormal">SetToolHeightCompensationOnFeatureNormal</a> Setting</li>
<li><a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_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.NcEnv.html#Hi_Numerical_NcEnv_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>
<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.NcEnv.html#Hi_Numerical_NcEnv_HeidenhainDatumPresetTable">HeidenhainDatumPresetTable</a></li>
<li>Configuring datum shifts in <a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_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.NcEnv.html#Hi_Numerical_NcEnv_RapidFeedrate_mmdmin">RapidFeedrate_mmdmin</a> (mm/min)</li>
<li><a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_ToolingTime">ToolingTime</a> (seconds)</li>
<li>Stroke limits (minimum and maximum) for linear axes (<a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_StrokeLimitXyz_mm">StrokeLimitXyz_mm</a>)</li>
<li>Stroke limits and maximum speeds for rotary axes (<a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_StrokeLimitAbc_rad">StrokeLimitAbc_rad</a> and <a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_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.NcEnv.html#Hi_Numerical_NcEnv_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.NcEnv.html#Hi_Numerical_NcEnv_SetToolHeightCompensationOnFeatureNormal">SetToolHeightCompensationOnFeatureNormal</a> setting</li>
<li><a class="xref" href="../../../../api/Hi.Numerical.NcEnv.html#Hi_Numerical_NcEnv_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/ControllerExtendedRenderingCanvasToolBar</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/controller/controller-panel.js</li>
<li>wwwroot/controller/controller-extended-toolbar.js</li>
<li>Controller/Controller/ControllerController.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,159 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../index.html">
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="general-rules">General Rules</h1>
<div class="TIP">
<h5>Tip</h5>
<p>You MUST read the cited hyperlink before you do the job. ASK if you think the hyperlink is not work.</p>
</div>
<h2 id="handle-message-and-exception">Handle Message and Exception</h2>
<p>If message is well-managed, apply <a class="xref" href="../../../api/Hi.Common.Messages.MessageKit.html">MessageKit</a> to show the message; if the message is <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception">Exception</a>, apply <a class="xref" href="../../../api/Hi.Common.ExceptionUtil.html">ExceptionUtil</a>.<a class="xref" href="../../../api/Hi.Common.ExceptionUtil.html#Hi_Common_ExceptionUtil_ShowException_System_Exception_System_Object_">ShowException(Exception, object)</a> to show the exception for detail treatment. The messages are shown in <a href="message-section-on-main-panel.html">Message Section on Main Panel</a>.</p>
<p>For examples of message and exception handling patterns:</p>
<ol>
<li>Normal message handling:</li>
</ol>
<pre><code class="lang-csharp" name="Normal Messages">MessageKit.AddMessage(&quot;Operation completed successfully.&quot;);
MessageKit.AddWarning(&quot;Please check your input.&quot;);
</code></pre>
<ol start="2">
<li>Exception handling in synchronous code:</li>
</ol>
<pre><code class="lang-csharp" name="Sync Exception">try
{
// Your code here
throw new NotImplementedException(&quot;Demo exception&quot;);
}
catch (Exception ex)
{
ExceptionUtil.ShowException(ex, null);
}
</code></pre>
<ol start="3">
<li>Exception handling in asynchronous code:</li>
</ol>
<pre><code class="lang-csharp" name="Async Exception">await Task.Run(() =&gt;
{
// Your async operation here
throw new NotImplementedException(&quot;Demo async exception&quot;);
}).ShowIfCatched(null);
</code></pre>
<p>The examples are in project Hi.Sample. See <a href="index.html">this page</a> for git repository.</p>
<h2 id="loose-manner">Loose Manner</h2>
<p>Run Skippable Rapid Calling Synchronous Action in Loose Manner.</p>
<p>Some synchronous action may be calling rapidly but only the last call has to be effective (or it is endurable to loss some previous action call). Define a <a class="xref" href="../../../api/Hi.Common.LooseRunner.html">LooseRunner</a> and apply <a class="xref" href="../../../api/Hi.Common.LooseRunner.html">LooseRunner</a>.<a class="xref" href="../../../api/Hi.Common.LooseRunner.html#Hi_Common_LooseRunner_TryRun_System_Action_System_Threading_CancellationToken__">TryRun(Action&lt;CancellationToken&gt;)</a> to run the action.</p>
<p>Dispose the <a class="xref" href="../../../api/Hi.Common.LooseRunner.html">LooseRunner</a> on owner disposing to ensure the tryrun action is well-managed.</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="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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/geom/box3d-control.js</li>
<li>Controller/Geom/GeomController.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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/geom/cylindroid-control.js</li>
<li>Controller/Geom/GeomController.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,135 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/geom/extended-cylinder-panel.js</li>
<li>Controller/Geom/GeomController.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,155 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/geom/geom-combination-control.js</li>
<li>Controller/Geom/GeomController.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>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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/geom/geom-manage-control.js</li>
<li>Controller/Geom/GeomController.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,145 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="geometry-panels">Geometry Panels</h1>
<p>Geometry Panels are GUIs of <a href="../../basic/geom/basic-geometry.html">Geometry Objects</a>.</p>
<p>Use <a href="geom-manage-control.html">Geometry Management Control</a> to get, set and manage the geometry.</p>
<h2 id="basic-geometry-control">Basic Geometry Control</h2>
<ul>
<li><a href="box3d-control.html">Box3dControl</a> - A control for editing a 3D box defined by its minimum and maximum coordinates.</li>
<li><a href="cylindroid-control.html">CylindroidControl</a> - A control for editing a cylindroid defined by a series of radius values along the Z-axis.</li>
<li><a href="stlfile-control.html">StlFileControl</a> - A control for loading and manipulating STL files.</li>
</ul>
<h2 id="management-geometry-control">Management Geometry Control</h2>
<ul>
<li><a href="transformation-geom-control.html">TransformationGeomControl</a> - A control for applying transformations to geometric objects.</li>
<li><a href="geom-combination-control.html">GeomCombinationControl</a> - A control for combining multiple geometric objects.</li>
</ul>
<h2 id="special-geometry-control">Special Geometry Control</h2>
<ul>
<li><a href="runtime-geom-panel.html">Runtime Geometry Panel</a>
The model is not <a class="xref" href="../../../../api/Hi.Geom.IStlSource.html">IStlSource</a>. However, It should have the same design pattern with <a href="stlfile-control.html">StlFileControl</a>.</li>
<li><a href="extended-cylinder-panel.html">Extended Cylinder Panel</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/</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/geom/</li>
<li>Controller/Geom/GeomController.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,139 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/geom/runtime-geom-panel.js</li>
<li>Controller/Geom/GeomController.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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/geom/stlfile-control.js</li>
<li>Controller/Geom/GeomController.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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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="../../basic/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-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/geom/transformation-geom-control.js</li>
<li>Controller/Geom/GeomController.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,171 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Sketch to Build HiNC GUI | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Sketch to Build HiNC 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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../index.html">
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="sketch-to-build-hinc-gui">Sketch to Build HiNC GUI</h1>
<p>Apply <a href="general-rules.html">General Rules</a> to build the HiNC GUI.</p>
<h2 id="wpf-application-source-code">WPF Application Source Code</h2>
<p>The source code of HiNC-2025-win-desktop project is at the git repository:</p>
<p><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></p>
<h2 id="web-page-application-source-code">Web Page Application Source Code</h2>
<p>The source code of HiNC-2025-webapi project is at the git repository:</p>
<p><a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/HiNC-2025-webapi.git">https://superhightech-gitea.webredirect.org/HiNC-Deploy/HiNC-2025-webapi.git</a></p>
<h2 id="step-by-step-program-construction-check-list">Step by Step Program Construction Check List</h2>
<div class="TIP">
<h5>Tip</h5>
<p>If you are using AI agent to build the application:</p>
<ul>
<li>Ask AI to do only one job at one time to ensure the quality.</li>
</ul>
</div>
<ol>
<li>Create and config a application project.
<ol>
<li>Set the project platform to x64.</li>
<li>Create a application project.</li>
<li>Add <code>HiNc</code> packages to the project. See <a href="../getting-started/index.html">Getting Started</a> to config the packages.</li>
</ol>
<div class="NOTE">
<h5>Note</h5>
<p>Add <code>Hi.Wpf</code> packages to the project if the building WPF project.</p>
</div>
</li>
<li>Create Main Window, set the layout according to <a href="main-panel.html#main-panel-layout">Main Panel Layout</a>.</li>
<li>Build <code>Message Section</code> according to <a href="message-section-on-main-panel.html">Message Section on Main Panel</a>.</li>
<li>Initialize HiAPI at application entry point according to <a href="initialize-hiapi.html">Initialize HiAPI</a>.</li>
<li>Set behavior of <code>Navigation Menu</code>/<code>Project</code> according to <a href="main-panel.html#behavior-of-navigation-menuproject">Behavior of Navigation Menu/Project</a>.</li>
<li>Create <a href="renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a> for later usage.</li>
<li>Create by <code>Player Panel</code> the <a href="player/index.html#step-by-step-program-construction-check-list">Player Panel Step by Step Program Construction Check List</a>.</li>
<li>Build behavior of <a href="preference/graphic-cache-dropdown.html">Graphic-Cache Dropdown</a>.</li>
<li>Build basic GUI widget component:
<ul>
<li><a href="widget/vec3d/index.html">Vec3dControl</a></li>
</ul>
</li>
<li>Build <a href="mech/topo/transformers.html">Transformers</a></li>
<li>Build <a href="geom/index.html">Geometry Panels</a>.</li>
<li>Build <a href="mech/fixture-page.html">Fixture Page</a>.</li>
<li>Build <a href="mech/workpiece-page.html">Workpiece Page</a>.</li>
<li>Build <a href="controller/index.html">Controller Page</a>.</li>
<li>Build <a href="mech/tool-house-page.html">ToolHouse Page</a>.</li>
<li>Add application icon, splash screen and etc..</li>
<li>(The content is consturcting..)</li>
</ol>
<div class="TIP">
<h5>Tip</h5>
<ul>
<li>Complete the check list step by step.</li>
<li>Compile to ensure the code work on each step completed.</li>
<li>You MUST read the cited hyperlink before you do the job. ASK if you think the hyperlink is not work.</li>
</ul>
</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,120 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Initialize HiAPI at Application Entry Point | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Initialize HiAPI at Application Entry Point | HiAPI-C# 2025 ">
<link rel="icon" href="../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../public/main.css">
<meta name="docfx:navrel" content="../../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../index.html">
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="initialize-hiapi-at-application-entry-point">Initialize HiAPI at Application Entry Point</h1>
<p>At the application entry point, you need to initialize HiAPI and set the exiting event.</p>
<ul>
<li>&lt;xref:Hi.HiNcKits.LocalApp.AppBegin()&gt;</li>
<li>&lt;xref:Hi.HiNcKits.LocalApp.AppEnd()&gt;</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,208 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../index.html">
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="main-panel">Main Panel</h1>
<ul>
<li>Key Model
<ul>
<li>WPF Single-User Desktop Application: Self-hosted <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></li>
<li>Web Page Application: Singleton Service inherits from <a class="xref" href="../../../api/Hi.MachiningProcs.IPathedMachiningProjectHost.html">IPathedMachiningProjectHost</a></li>
</ul>
</li>
<li>Other Model: <a class="xref" href="../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</a>
<ul>
<li>If the application is single-user application, the model binds to <a class="xref" href="../../../api/Hi.HiNcKits.LocalApp.html">LocalApp</a>.<a class="xref" href="../../../api/Hi.HiNcKits.LocalApp.html#Hi_HiNcKits_LocalApp_UserEnv">UserEnv</a>.</li>
</ul>
</li>
</ul>
<h2 id="main-panel-layout"><code>Main Panel</code> Layout</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.MachiningProject.html#Hi_MachiningProcs_MachiningProject_MachiningEquipment">MachiningEquipment</a>.&lt;Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.MachiningChain&gt;.</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>
</ul>
</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="behavior-of-navigation-menuproject">Behavior of <code>Navigation Menu</code>/<code>Project</code></h2>
<p><code>Project Path Text Field</code> Shows the Project Path if the project is assinged.</p>
<div class="TIP">
<h5>Tip</h5>
<p><code>Project Path Text Field</code> should not be button style. It should be a pure text field that can be selected and copied.</p>
</div>
<p>The <code>Project</code> Menu Managing <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.</p>
<p>To <code>New</code> (create), <code>Save</code> and <code>Save As</code> the <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>, See <a class="xref" href="../../sample/Sample.Machining.DemoBuildGeomOnlyMachiningProject.html">DemoBuildGeomOnlyMachiningProject</a> for the example.</p>
<p>To <code>Load</code> <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>, See <a class="xref" href="../../sample/Sample.Machining.DemoUseMachiningProject.html">DemoUseMachiningProject</a> for the example.</p>
<p>Show message for the actions result (successed or has exception) by <a class="xref" href="../../../api/Hi.Common.Messages.MessageKit.html">MessageKit</a>.</p>
<div class="TIP">
<h5>Tip</h5>
<p>Recommmand using static function of <a class="xref" href="../../../api/Hi.Common.Messages.MessageKit.html">MessageKit</a> to do the job.
Read document of <a class="xref" href="../../../api/Hi.Common.Messages.MessageKit.html">MessageKit</a> to ensure the proper usage.</p>
</div>
<p>On project loaded (<code>Navigation Menu</code>/<code>Project</code>/<code>Load MenuItem</code>)
, set the Player.Panel.RenderingCanvas.DispEngine to <a class="xref" href="../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToIsometricView">SetViewToIsometricView()</a>.</p>
<div class="TIP">
<h5>Tip</h5>
<p>Using async to comfort the process</p>
</div>
<h2 id="wpf-application-specification">WPF Application Specification</h2>
<p>Limit the GUI that only single Page/Window existed in the application for the sub window from the Main Panel, include Mission, Workpiece and Fixture.</p>
<p>Don't create the Player MenuItem if the target application is WPF Application. Since the Main panel is the Player Panel and the panel is fixed to the main panel.</p>
<h2 id="web-page-application-specification">Web-Page Application Specification</h2>
<p>Apply Player Panel as the default panel.</p>
<h2 id="application-specification-and-source-code-path">Application Specification and 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</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>Controllers/PreferenceController.cs</li>
<li>wwwroot/main.js</li>
<li>wwwroot/index.html</li>
</ul>
<h3 id="web-page-application-specification-1">Web Page Application Specification</h3>
<p>The page and URL are bi-directional.</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,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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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="../../../../user-guide/zh-Hant/milling-tool/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 &ldquo;G4&rdquo;</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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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 &lsquo;Cutter Mass&rsquo; if the Cutter is Solid End Integral Mode; Show the label &lsquo;Shank Mass&rsquo; if the Cutter is Insert End Integral Mode.</li>
<li>Value format &ldquo;G4&rdquo;</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 &ldquo;G4&rdquo;</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.MachiningProject.html">MachiningProject</a>.<a class="xref" href="../../../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_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 &quot;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>}&quot;.
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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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 &ldquo;G4&rdquo;</li>
</ul>
</li>
<li>Insert Thickness Input field (mm)
<ul>
<li>Format &ldquo;G4&rdquo;</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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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 &ldquo;G4&rdquo;</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>&ldquo;Resource/StructureMaterial&rdquo;</li>
<li>&ldquo;Resource/CutterMaterial&rdquo;</li>
<li>&ldquo;Resource/CoatingMaterial&rdquo;</li>
</ul>
<h3 id="flute-contours-tab">Flute-Contours Tab</h3>
<p>Visible if <a class="xref" href="../../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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: &lsquo;Dependent on flute num xxx&rsquo;, the &lsquo;xxx&rsquo; 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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_EnablePhysics">EnablePhysics</a> is true.</p>
<p>This part manages <a class="xref" href="../../../../../api/Hi.NcOpt.MillingCutterOptLimit.html">MillingCutterOptLimit</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.MachiningProject.html">MachiningProject</a>.<a class="xref" href="../../../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_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,196 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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.MachiningProject.html">MachiningProject</a>.<a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_MachiningEquipment">MachiningEquipment</a>.<a class="xref" href="../../../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.UserConfig.html">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>
<ul>
<li>Add a resizable splition bar between Manage Panel and Viewer Panel.</li>
</ul>
</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>
<ul>
<li>wwwroot/mech/fixture-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,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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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.NcEnv.html">NcEnv</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 &ldquo;Machine Tool&rdquo;</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,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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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.UserEnv.html">UserEnv</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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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,244 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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.UserEnv.html">UserEnv</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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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>
<ul>
<li>wwwroot/mech/tool-house-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,155 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="transformers-gui">Transformers GUI</h1>
<p>Each <a href="../../../basic/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>
<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>Mech/Topo/TransformerSelectDiv</li>
<li>Mech/Topo/StaticTranslationDiv</li>
<li>Mech/Topo/DynamicTranslationDiv</li>
<li>Mech/Topo/DynamicRotationDiv</li>
<li>Mech/Topo/GeneralTransformDiv</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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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.MachiningProject.html">MachiningProject</a>.<a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.UserConfig.html">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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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>&ldquo;Resource/WorkpieceMaterial&rdquo;</li>
<li>&ldquo;Resource/CuttingParameter&rdquo;</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,173 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Message Section on Main Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Message Section on 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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../index.html">
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="message-section-on-main-panel">Message Section on Main Panel</h1>
<h2 id="initialize--with-message-section">Initialize <a class="xref" href="../../../api/Hi.Common.Messages.MessageKit.html">MessageKit</a>.<a class="xref" href="../../../api/Hi.Common.Messages.MessageKit.html#Hi_Common_Messages_MessageKit_Default">Default</a> with Message Section</h2>
<p>To show and save the message on <code>Brief Message Text Field</code>, add event to <a class="xref" href="../../../api/Hi.Common.Messages.MessageKit.html#Hi_Common_Messages_MessageKit_Default">Default</a>.<a class="xref" href="../../../api/Hi.Common.Messages.MessageKit.html#Hi_Common_Messages_MessageKit_OnAdding">OnAdding</a>.</p>
<p>The event contains:</p>
<ul>
<li>update the text content of <code>Brief Message Text Field</code></li>
<li>Append the message to log file (create if not existed) <code>$&quot;logs/log-{DateTime.Now:yyyy-MM-dd}.txt&quot;</code></li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<ul>
<li>Handle the situation that logs over one day.</li>
<li>Check if passing argument of <a class="xref" href="../../../api/Hi.Common.Messages.MessageKit.html#Hi_Common_Messages_MessageKit_OnAdding">OnAdding</a> is <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception">Exception</a>. If the it is Exception, update text content by <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception">Exception</a>.<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.exception.message">Message</a> but log to file with the full Exception information.</li>
<li>Consider <a class="xref" href="../../../api/Hi.Common.Messages.MessageFlag.html">MessageFlag</a> to set the behavior of Message Section. For example, apply alert style if passing argument is exception. The <a class="xref" href="../../../api/Hi.Common.Messages.MessageFlag.html#Hi_Common_Messages_MessageFlag_Info">Info</a> (and the other flags that the priority lower than it) should only record in the logs but not shows in the Message Section.</li>
</ul>
</div>
<h2 id="wpf-application-layout">WPF Application Layout</h2>
<ul>
<li>Message Section Bottom Bar
<ul>
<li>Brief Message Text Field</li>
<li>Show Log Button</li>
</ul>
</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>The text field should be selectable to let user easy to copy the message.</p>
</div>
<h2 id="web-page-application-layout">Web Page Application Layout</h2>
<ul>
<li>Message Section Stacking Toast
<ul>
<li>Brief Message Text Field</li>
</ul>
</li>
</ul>
<p>Enable toast Auto-Hide only if the message level is low.</p>
<div class="NOTE">
<h5>Note</h5>
<p>The convention of web page is not like WPF panel. Use Boostrap or Bootstrap-like toast. They are much appropriate than the fixed bottom bar on WPF.</p>
</div>
<h3 id="log-page-layout">Log Page Layout</h3>
<ul>
<li>Head Line
<ul>
<li>Log Label</li>
<li>Show Log Button</li>
<li>Download Log Button</li>
</ul>
</li>
<li>Log TextArea</li>
</ul>
<h2 id="behavior-of-show-log-button">Behavior of Show Log Button</h2>
<p>Call an editor (or reader, bootstrap modal like poping block) to show the current log.</p>
<div class="TIP">
<h5>Tip</h5>
<p>Handle the situation that the current log file does not exist. It may occurs if no message has added.</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,242 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>List Command Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="List Command Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="list-command-panel">List Command Panel</h1>
<p>The key model is <a class="xref" href="../../../../api/Hi.ShellCommands.ListCommand.html">ListCommand</a>.</p>
<ul>
<li>Assistant Model
<ul>
<li><a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></li>
<li><a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</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>
</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>
</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 &lt;xref:Hi.ShellCommands.ITitleCommand.GetCommandTitle()&gt; if the command is inherited from <a class="xref" href="../../../../api/Hi.ShellCommands.ITitleCommand.html">ITitleCommand</a>; otherwise, show the class name.</li>
</ul>
</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>Apply style changed if the entry is selected.</p>
</div>
<ul>
<li>If there is only one <a class="xref" href="../../../../api/Hi.ShellCommands.PreSettingCommand.html">PreSettingCommand</a> in the list and at the begining, Keep it at begining when items adding, shows a &ldquo;pin at begining&rdquo; label with a pin icon.</li>
<li>If there is only one <a class="xref" href="../../../../api/Hi.ShellCommands.PostExecutionCommand.html">PostExecutionCommand</a> in the list and at the end, Keep it at end when items adding, shows a &ldquo;pin at end&rdquo; label a pin icon.</li>
</ul>
</li>
</ul>
</li>
<li>Support file drag from the external application (such as file explorer), files drag into the Command Entrys List Panel is equivalent to create <a class="xref" href="../../../../api/Hi.ShellCommands.NcFileCommand.html">NcFileCommand</a>s (with the <a class="xref" href="../../../../api/Hi.ShellCommands.EnablingWrapper.html">EnablingWrapper</a>) and set the file into the NC File Command.</li>
</ul>
</li>
<li>Vertical Splition Bar
<ul>
<li>The bar can be drag to tune the width.</li>
</ul>
</li>
<li>Selected Command Content Panel
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.EnablingWrapper.html#Hi_ShellCommands_EnablingWrapper_Command">Command</a>.</li>
<li>The panel is based on command type</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>The width of the entry block should expand to fulfill the content block.</p>
</div>
</li>
</ul>
</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>Use Disabled Style for command panels if the Enable checkbox is not checked.</p>
</div>
<div class="NOTE">
<h5>Note</h5>
<p>Each command entry can be individually enabled or disabled without removing it from the list.</p>
</div>
<h2 id="features">Features</h2>
<p>Update the Title Label if the Command is updated by the Command Content Panel.</p>
<h2 id="wpf-application-source-code-path">WPF Application Source Code Path</h2>
<ul>
<li>Mission/ListCommandPanel</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,172 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>NcFileCommand Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="NcFileCommand Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="ncfilecommand-panel">NcFileCommand Panel</h1>
<p>The key model is <a class="xref" href="../../../../api/Hi.ShellCommands.NcFileCommand.html">NcFileCommand</a>.</p>
<ul>
<li>Other Model: string BaseDirectory.</li>
</ul>
<h2 id="layout">Layout</h2>
<ul>
<li>NcFileCommand Panel
<ul>
<li>Head Line
<ul>
<li>NC File Setting
<ul>
<li>The model is &lt;xref:Hi.ShellCommands.ClassicNcFileCommand.NcFile&gt;.</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="wpf-application-source-code-path">WPF Application Source Code Path</h2>
<ul>
<li>Mission/NcFileCommandPanel</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,237 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>NC Optimization Option Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="NC Optimization Option Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="nc-optimization-option-panel">NC Optimization Option Panel</h1>
<p>Key model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html">NcOptOption</a>.</p>
<h2 id="layout">Layout</h2>
<ul>
<li><p>General Optimization Section</p>
<ul>
<li>Enable Optimization CheckBox
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableOpt">EnableOpt</a>.</li>
</ul>
</li>
<li>Enable Feedrate Optimization CheckBox
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableOptFeedrate">EnableOptFeedrate</a>.</li>
</ul>
</li>
<li>Enable Depth Splitting CheckBox
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableDepthSplition">EnableDepthSplition</a>.</li>
</ul>
</li>
<li>Enable Interpolation CheckBox
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_EnableInterpolation">EnableInterpolation</a>.</li>
</ul>
</li>
</ul>
</li>
<li><p>Distance Settings Section</p>
<ul>
<li>Extended Pre-Distance Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_ExtendedPreDistance_mm">ExtendedPreDistance_mm</a>.</li>
</ul>
</li>
<li>Extended Post-Distance Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_ExtendedPostDistance_mm">ExtendedPostDistance_mm</a>.</li>
</ul>
</li>
</ul>
</li>
<li><p>Feedrate Limits Section</p>
<ul>
<li>Minimum Feedrate Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MinFeedrate_mmdmin">MinFeedrate_mmdmin</a>.</li>
</ul>
</li>
<li>Maximum Feedrate Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MaxFeedrate_mmdmin">MaxFeedrate_mmdmin</a>.</li>
</ul>
</li>
<li>Rapid Feed Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_RapidFeed_mmdmin">RapidFeed_mmdmin</a>.</li>
</ul>
</li>
</ul>
</li>
<li><p>Motion Dynamics Section</p>
<ul>
<li>Maximum Acceleration Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MaxAcceleration_mmds2">MaxAcceleration_mmds2</a>.</li>
</ul>
</li>
<li>Maximum Jerk Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MaxJerk_mmds3">MaxJerk_mmds3</a>.</li>
</ul>
</li>
</ul>
</li>
<li><p>Force and Safety Section</p>
<ul>
<li>Preferred Force Floating Number Field (with Unit)
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_PreferedForce_N">PreferedForce_N</a>.</li>
</ul>
</li>
<li>Spindle Torque Safety Factor Floating Number Field
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_SpindleTorqueSafetyFactor">SpindleTorqueSafetyFactor</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_SpindlePowerSafetyFactor">SpindlePowerSafetyFactor</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="wpf-application-source-code-path">WPF Application Source Code Path</h2>
<ul>
<li>NcOpt/NcOptOptionPanel</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,207 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PostExecutionCommand Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="PostExecutionCommand Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="postexecutioncommand-panel">PostExecutionCommand Panel</h1>
<ul>
<li>Key Model
<ul>
<li><a class="xref" href="../../../../api/Hi.ShellCommands.PostExecutionCommand.html">PostExecutionCommand</a></li>
</ul>
</li>
<li>Assistant Model
<ul>
<li><a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></li>
<li><a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</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 &lt;xref:Hi.ShellCommands.ClassicSessionCommand.EnableWriteStepFiles&gt;.</li>
</ul>
</li>
<li>Step File Template Label</li>
<li>Step File Template Text Field
<ul>
<li>The model is &lt;xref:Hi.ShellCommands.ClassicSessionCommand.StepFileTemplate&gt;.</li>
<li>Default value: &ldquo;Output/[NcName].step.csv&rdquo;</li>
</ul>
</li>
<li>Apply one line layout to the label and the text field.</li>
</ul>
</li>
<li>Output Shot Files Section
Visible if <a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_EnablePhysics">EnablePhysics</a> is true.
<ul>
<li>Enable Write Shot Files CheckBox
<ul>
<li>The model is &lt;xref:Hi.ShellCommands.ClassicSessionCommand.EnableWriteShotFiles&gt;.</li>
</ul>
</li>
<li>Shot File Template Text Field
<ul>
<li>The model is &lt;xref:Hi.ShellCommands.ClassicSessionCommand.ShotFileTemplate&gt;.</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 &lt;xref:Hi.ShellCommands.ClassicSessionCommand.ShotFileTimeResolution_ms&gt;.</li>
<li>Default value: 1</li>
</ul>
</li>
</ul>
</li>
<li>Optimization Files Section
Visible if <a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_EnablePhysics">EnablePhysics</a> is true.
<ul>
<li>Enable Optimize To Files CheckBox
<ul>
<li>The model is &lt;xref:Hi.ShellCommands.ClassicSessionCommand.EnableOptimizeToFiles&gt;.</li>
</ul>
</li>
<li>Optimization File Template Text Field
<ul>
<li>The model is &lt;xref:Hi.ShellCommands.ClassicSessionCommand.OptimizationFileTemplate&gt;.</li>
<li>Default value: &ldquo;Output/Opt-[NcName]&rdquo;</li>
</ul>
</li>
</ul>
</li>
<li>Geometry Difference Section
<ul>
<li>Enable Geom Diff CheckBox
<ul>
<li>The model is &lt;xref:Hi.ShellCommands.ClassicSessionCommand.EnableGeomDiff&gt;.</li>
</ul>
</li>
<li>Geom Diff Detect Radius Number Field (with Unit)
<ul>
<li>One Line layout</li>
<li>The model is &lt;xref:Hi.ShellCommands.ClassicSessionCommand.GeomDiffDetectRadius_mm&gt;.</li>
<li>Default value: 1</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="wpf-application-source-code-path">WPF Application Source Code Path</h2>
<ul>
<li>Mission/PostExecutionCommandPanel</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,205 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>PreSettingCommand Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="PreSettingCommand Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="presettingcommand-panel">PreSettingCommand Panel</h1>
<ul>
<li>Key Model
<ul>
<li><a class="xref" href="../../../../api/Hi.ShellCommands.PreSettingCommand.html">PreSettingCommand</a></li>
</ul>
</li>
<li>Assistant Model
<ul>
<li><a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></li>
<li><a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</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="wpf-application-source-code-path">WPF Application Source Code Path</h2>
<ul>
<li>Mission/PreSettingCommandPanel</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,246 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Classic Session Command Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Classic Session Command Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="classic-session-command-panel">Classic Session Command Panel</h1>
<p>The key model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html">SimpleSessionCommand</a>.</p>
<h2 id="layout">Layout</h2>
<ul>
<li>Head Line
<ul>
<li><a href="../widget/object-management-menu-button.html">Object Management Menu Button</a>
<ul>
<li>file extension is ShellCommand</li>
<li>The pointed Editor Panel is Session Management Panel</li>
</ul>
</li>
</ul>
</li>
<li>Title Label</li>
<li>Session Management Panel
<ul>
<li>NC/Command List Tab
<ul>
<li>Shell Commands ListBox
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_NcCommandList">NcCommandList</a>.</li>
<li>Support add, remove, reorder commands.</li>
<li>The items are multi-selectable.</li>
<li>Support file drag from the external application (such as file explorer), files drag into the Shell Commands List is equivalent to create <a class="xref" href="../../../../api/Hi.ShellCommands.NcFileCommand.html">NcFileCommand</a>s.</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>don't use file filter to the drag behavior</p>
</div>
<ul>
<li>On each Classic NC File Command:
<ul>
<li>Only one line for each entry.</li>
<li>Batch Selection CheckBox with &lsquo;Select&rsquo; Text Label</li>
<li><a href="ClassicNcFileCommand-panel.md">Classic NC File Command Panel</a>.</li>
</ul>
</li>
<li>The horizontal auto scroll bar is required.</li>
</ul>
</li>
</ul>
</li>
<li>Output Tab
<ul>
<li>Output Shot Files Tab
<ul>
<li>Enable Write Shot Files CheckBox
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_EnableWriteShotFiles">EnableWriteShotFiles</a>.</li>
</ul>
</li>
<li>Shot File Template Text Field
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_ShotFileTemplate">ShotFileTemplate</a>.</li>
<li>Default value: <code>Output/[NcName].shot.csv</code></li>
</ul>
</li>
<li>Shot File Time Resolution (ms) Number Field
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_ShotFileTimeResolution_ms">ShotFileTimeResolution_ms</a>.</li>
<li>Default value: 1</li>
</ul>
</li>
</ul>
</li>
<li>Output Step Files Tab
<ul>
<li>Enable Write Step Files CheckBox
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_EnableWriteStepFiles">EnableWriteStepFiles</a>.</li>
</ul>
</li>
<li>Step File Template Label</li>
<li>Step File Template Text Field
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_StepFileTemplate">StepFileTemplate</a>.</li>
<li>Default value: &ldquo;Output/[NcName].step.csv&rdquo;</li>
</ul>
</li>
<li>Apply one line layout to the label and the text field.</li>
</ul>
</li>
<li>Optimization Files Tab
<ul>
<li>Enable Optimize To Files CheckBox
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_EnableOptimizeToFiles">EnableOptimizeToFiles</a>.</li>
</ul>
</li>
<li>Optimization File Template Text Field
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_OptimizationFileTemplate">OptimizationFileTemplate</a>.</li>
<li>Default value: &ldquo;Output/Opt-[NcName]&rdquo;</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Geometry Difference Tab
<ul>
<li>Enable Geom Diff CheckBox
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_EnableGeomDiff">EnableGeomDiff</a>.</li>
</ul>
</li>
<li>Geom Diff Detect Radius (mm) Number Field
<ul>
<li>One Line layout</li>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.SimpleSessionCommand.html#Hi_ShellCommands_SimpleSessionCommand_GeomDiffDetectRadius_mm">GeomDiffDetectRadius_mm</a>.</li>
<li>Default value: 1</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="TIP">
<h5>Tip</h5>
<p>Use Disabled Style if the section key checkbox is not checked.</p>
</div>
<div class="TIP">
<h5>Tip</h5>
<p>The file templates support placeholder <code>[NcName]</code> which will be replaced with actual NC program name.</p>
</div>
<h2 id="wpf-application-source-code-path">WPF Application Source Code Path</h2>
<ul>
<li>Mission/SimpleSessionCommandPanel</li>
</ul>
<p>see <a href="../index.html">this page</a> for git repository.</p>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>
@@ -0,0 +1,174 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mission Page | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Mission Page | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="mission-page">Mission Page</h1>
<ul>
<li>Key model: <a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_PlayerCommand">PlayerCommand</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.HiNcKits.UserEnv.html">UserEnv</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="step-by-step-building-guide">Step by Step Building Guide</h2>
<ol>
<li>create the Mission Page window and Mission Page panel.</li>
<li>build the options panel and set into the Mission Page panel.
<ol>
<li>Build List Command Panel.</li>
<li>Build Script Command Panel.</li>
</ol>
</li>
</ol>
<h2 id="wpf-application-source-code-path">WPF Application Source Code Path</h2>
<ul>
<li>Mission/MissionWindow</li>
<li>Mission/MissionPanel</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,135 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Script Command Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Script Command Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="script-command-panel">Script Command Panel</h1>
<p>The key model is <a class="xref" href="../../../../api/Hi.ShellCommands.ScriptCommand.html">ScriptCommand</a>.</p>
<h2 id="layout">Layout</h2>
<ul>
<li>Head Line
<ul>
<li>Script Title Label</li>
<li>Script Title Text Field</li>
</ul>
</li>
<li>C# Rich Text Editor Area
<ul>
<li>The model is <a class="xref" href="../../../../api/Hi.ShellCommands.ScriptCommand.html#Hi_ShellCommands_ScriptCommand_ScriptText">ScriptText</a>.</li>
</ul>
</li>
</ul>
<h2 id="wpf-application-source-code-path">WPF Application Source Code Path</h2>
<ul>
<li>Mission/ScriptCommandPanel</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,167 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="player-panel">Player Panel</h1>
<p>The model of the player panel is <a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> and <a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</a>.</p>
<h2 id="step-by-step-program-construction-check-list">Step by Step Program Construction Check List</h2>
<ol>
<li>Create the <code>Player Panel</code> Layout and set <code>Player Panel</code>/<code>RenderingCanvas</code>.</li>
<li>Set behavior of RenderingCanvas.</li>
<li>Create <a href="player-tool-bar.html">Player Tool Bar</a>.</li>
<li>Create layout of <a href="player-extended-renderingcanvas-tool-bar.html">Player extended RenderingCanvas Tool Bar</a>.</li>
<li>Complete Behavior of <code>Navigation Menu</code>/<code>Player</code> on the <a href="../main-panel.html">Main Panel</a>.</li>
<li>Build behavior of <code>Player extended RenderingCanvas Tool Bar</code>
<ol>
<li>Set behavior of <a href="player-extended-renderingcanvas-tool-bar.html#behavior-of-cl-strip-buttons-and-fit-view-button">Behavior of CL Strip Buttons and Fit View Button</a>.</li>
<li>Set behavior of <a href="player-extended-renderingcanvas-tool-bar.html#behavior-of-project-rendering-items-dropdown">Behavior of Project Rendering Items DropDown</a>.</li>
<li>Set notification to <code>Player extended RenderingCanvas Tool Bar</code> if project changed by <a href="../main-panel.html">Main Panel</a>.</li>
</ol>
</li>
<li>Set Player Panel as default panel on <code>Page Panel</code> when open the main window. The related toolbar has to be set, too.</li>
<li>Build <a href="../session-message-panel/index.html">Session Message Panel</a>.</li>
<li>Build <a href="../preference/step-present-preference-page.html">Step Present Preference Page</a></li>
<li>Build <a href="selected-step-info-panel.html">Selected-Step Info Panel</a></li>
</ol>
<h2 id="belonged-tool-bars">Belonged 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-of-player-panel">Layout of <code>Player Panel</code></h2>
<ul>
<li>Central <a href="../../basic/rendering/rendering-canvas/index.html">RenderingCanvas</a></li>
<li>vertical splition bar (draggable to resize the width of the two div)</li>
<li>Side Panel
<ul>
<li>Upper <a href="selected-step-info-panel.html">Selected-Step Info Panel</a></li>
<li>horizontal splition bar (draggable to resize the height of the two panel)</li>
<li>Lower <a href="../session-message-panel/index.html">Session Message Panel</a></li>
</ul>
</li>
</ul>
<h2 id="behavior-of-player-panelrenderingcanvas">Behavior of <code>Player Panel</code>/<code>RenderingCanvas</code></h2>
<p>On initializing, create <a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a> and set it to RenderingCanvas.DispEngine.Displayee. The <a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProjectDisplayee.html">MachiningProjectDisplayee</a> constructor argument is from the model <a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> from <code>Player Panel</code>.</p>
<p>Dispose RenderingCanvas on <code>Player Panel</code> disposing.</p>
<h2 id="source-code-path-and-specification">Source Code Path and Specification</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/PlayerPanel</li>
</ul>
<h3 id="webapi-application-source-code-path">Webapi Application Source Code Path</h3>
<ul>
<li>wwwroot/player/player-panel.js</li>
<li>Controller/Player/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,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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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 &ldquo;Show Machine&rdquo;, &ldquo;Show Workpiece&rdquo;, 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.NcEnv.html#Hi_Numerical_NcEnv_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-extended-toolbar.js</li>
<li>Controller/Player/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,387 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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>Add and remove the event to the <a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_PacePlayer">PacePlayer</a> on <code>Player Tool Bar</code> initialization and finalization. The events update the <code>Status Text Field</code>.</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 &gt; default color with green seasoned</li>
<li>Run One Step Button &gt; 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>Controller/Player/PlayerController.cs</li>
</ul>
<h3 id="razor-page-source-code">Razor Page Source Code</h3>
<pre><code class="lang-csharp" name="SampleCode-razor">@using Hi.Common.PathUtils;
@using Hi.HiNcKits;
@using Hi.MachiningProcs
@using Hi.MillingProcs;
@using Hi.Numerical.FilePlayers;
@inject HiNcHost hiNcHost
@{
MachiningProject machiningProject = hiNcHost.MachiningProject;
bool disabledByMachiningProject = machiningProject == null;
}
&lt;div class=&quot;btn-group&quot; role=&quot;group&quot;&gt;
&lt;div class=&quot; btn-group&quot;
data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#player-@Tid&quot;&gt;
&lt;button class=&quot;btn btn-outline-info text-nowrap &quot;
disabled=&quot;@disabledByMachiningProject&quot;
data-bs-toggle=&quot;button&quot;&gt;
&lt;span class=&quot;me-1&quot;&gt;@Loc[&quot;Player&quot;]&lt;/span&gt;
&lt;div class=&quot;d-inline-block&quot; style=&quot;width: 4rem&quot;&gt;
@{
if (machiningProject == null) { }
else if (machiningProject.PacePlayer.IsRunning)
{
&lt;span class=&quot;badge text-bg-warning&quot;&gt;@Loc[&quot;Running&quot;]&lt;/span&gt;
}
else if (machiningProject.PacePlayer.IsLocked)
{
&lt;span class=&quot;badge text-bg-secondary&quot;&gt;@Loc[&quot;Pause&quot;]&lt;/span&gt;
}
else if (machiningProject.PacePlayer.IsFinished)
{
&lt;span class=&quot;badge text-bg-success&quot;&gt;@Loc[&quot;Finish&quot;]&lt;/span&gt;
}
else
{
&lt;span class=&quot;badge text-bg-primary&quot;&gt;@Loc[&quot;Unlocked&quot;]&lt;/span&gt;
}
}
&lt;/div&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;div id=&quot;player-@Tid&quot; class=&quot;btn-group collapse collapse-horizontal show&quot; role=&quot;group&quot;&gt;
@if (machiningProject == null) { }
else if (!machiningProject.PacePlayer.IsLocked)
{
&lt;button class=&quot;btn btn-primary text-nowrap&quot; title=&quot;@Loc[&quot;Start&quot;] (S)&quot;
accesskey=&quot;s&quot;
disabled=&quot;@(disabledByMachiningProject||machiningProject.PacePlayer.IsFinished)&quot;
@onclick=&quot;StartOrContinue&quot;&gt;
&lt;span class=&quot;oi oi-media-play me-1&quot;&gt;&lt;/span&gt;
&lt;/button&gt;
}
else
{
&lt;button class=&quot;btn btn-primary text-nowrap&quot; title=&quot;@Loc[&quot;Continue&quot;] (S)&quot;
accesskey=&quot;s&quot;
@onclick=&quot;StartOrContinue&quot;
disabled=&quot;@(disabledByMachiningProject||machiningProject.PacePlayer.IsFinished||machiningProject.PacePlayer.IsRunning)&quot;&gt;
&lt;span class=&quot;oi oi-media-play me-1&quot;&gt;&lt;/span&gt;
&lt;/button&gt;
}
&lt;button class=&quot;btn btn-primary text-nowrap&quot; title=&quot;@Loc[&quot;Pause&quot;] (P)&quot;
accesskey=&quot;p&quot;
@onclick=&quot;Pause&quot;
disabled=&quot;@(disabledByMachiningProject||!machiningProject.PacePlayer.IsRunning)&quot;&gt;
&lt;span class=&quot;oi oi-media-pause me-1&quot;&gt;&lt;/span&gt;
&lt;/button&gt;
&lt;button class=&quot;btn btn-primary text-nowrap&quot; title=&quot;@Loc[&quot;Run One Line&quot;] (L)&quot;
accesskey=&quot;l&quot;
@onclick=&quot;RunToLineEnd&quot;
disabled=&quot;@(disabledByMachiningProject||machiningProject.PacePlayer.IsFinished)&quot;&gt;
&lt;span class=&quot;oi oi-media-step-forward me-1&quot;&gt;&lt;/span&gt;
&lt;/button&gt;
&lt;button class=&quot;btn btn-primary text-nowrap&quot; title=&quot;@Loc[&quot;Run One Step&quot;] (K)&quot;
accesskey=&quot;k&quot;
@onclick=&quot;RunToNextPace&quot;
disabled=&quot;@(disabledByMachiningProject||machiningProject.PacePlayer.IsFinished)&quot;&gt;
&lt;CommonRcl.Shared.CombinedIcon&gt;
&lt;IconA&gt;
&lt;span class=&quot;oi oi-media-step-forward me-1&quot;&gt;&lt;/span&gt;
&lt;/IconA&gt;
&lt;IconB&gt;
&lt;span class=&quot;badge rounded-pill bg-primary-subtle text-primary-emphasis&quot;&gt;
step
&lt;/span&gt;
&lt;/IconB&gt;
&lt;/CommonRcl.Shared.CombinedIcon&gt;
&lt;/button&gt;
&lt;button class=&quot;btn btn-primary text-nowrap&quot; title=&quot;@Loc[&quot;Break&quot;]&quot;
@onclick=&quot;@Break&quot;
disabled=&quot;@(disabledByMachiningProject||!(machiningProject.PacePlayer.IsLocked||machiningProject.PacePlayer.IsFinished))&quot;&gt;
&lt;span class=&quot;oi oi-media-stop me-1&quot;&gt;&lt;/span&gt;
&lt;/button&gt;
&lt;button class=&quot;btn btn-primary text-nowrap&quot; title=&quot;@Loc[&quot;Reset&quot;]&quot;
disabled=&quot;@disabledByMachiningProject&quot;
@onclick=&quot;Reset&quot;&gt;
&lt;span class=&quot;bi bi-backspace&quot;&gt;&lt;/span&gt;
&lt;/button&gt;
&lt;/div&gt;
&lt;/div&gt;
</code></pre><pre><code class="lang-csharp" name="SampleCode-razor.cs">using Hi.Common;
using Hi.MachiningProcs;
using Hi.Parallels;
using Microsoft.AspNetCore.Components;
namespace HiNcRcl.Areas.Player
{
public partial class PlayerButtonGroup : IAsyncDisposable
{
[Parameter]
public string Tid { set; get; } = System.Guid.NewGuid().ToString();
StringLocalizer Loc { get; } = new StringLocalizer(typeof(PlayerDiv));
SemaphoreSlim DisposeSemaphore { get; } = new SemaphoreSlim(1);
MachiningProject MachiningProject =&gt; hiNcHost.MachiningProject;
bool disposedValue = false;
/// &lt;inheritdoc/&gt;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
base.OnAfterRender(firstRender);
if (firstRender)
{
using var _ = await DisposeSemaphore.EmbraceAsync();
if (disposedValue) return;
var machiningProject = MachiningProject;
if (machiningProject != null)
{
machiningProject.PacePlayer.IsLockedChangedEvent
+= EnumerablePlayer_IsLockedEventHandler;
machiningProject.PacePlayer.IsRunningChangedEvent
+= EnumerablePlayer_IsLockedEventHandler;
machiningProject.PacePlayer.IsFinishedChangedEvent
+= EnumerablePlayer_IsLockedEventHandler;
}
}
}
/// &lt;inheritdoc/&gt;
public async ValueTask DisposeAsync()
{
using var _ = await DisposeSemaphore.EmbraceAsync();
var machiningProject = MachiningProject;
if (machiningProject != null)
{
machiningProject.PacePlayer.IsLockedChangedEvent
-= EnumerablePlayer_IsLockedEventHandler;
machiningProject.PacePlayer.IsRunningChangedEvent
-= EnumerablePlayer_IsLockedEventHandler;
machiningProject.PacePlayer.IsFinishedChangedEvent
-= EnumerablePlayer_IsLockedEventHandler;
}
disposedValue = true;
await ValueTask.CompletedTask;
}
private void EnumerablePlayer_IsLockedEventHandler(bool obj)
{
InvokeAsync(StateHasChanged).ConfigureAwait(false);
}
public void StartOrContinue()
{
if (!MachiningProject.PacePlayer.IsLocked)
{
MachiningProject.PacePlayer.Start();
}
else if (!MachiningProject.PacePlayer.IsRunning
&amp;&amp; !MachiningProject.PacePlayer.IsFinished)
{
MachiningProject.PacePlayer.Resume();
}
}
public void Pause()
{
MachiningProject?.PacePlayer.Pause();
}
public void RunToLineEnd()
{
MachiningProject?.NcRunner.RunToLineEnd();
}
public void RunToNextPace()
{
MachiningProject?.PacePlayer.RunToNextPace();
}
public void Break()
{
MachiningProject?.PacePlayer.Terminate();
}
public async Task Reset()
{
await Task.Run(() =&gt; {
MachiningProject?.PacePlayer.Reset();
}).ShowIfCatched(this);
}
}
}
</code></pre>
</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,146 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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.UserEnv.html">UserEnv</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.MachiningProject.html#Hi_MachiningProcs_MachiningProject_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.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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(
UserEnv userEnv, MachiningStep machiningStep)
{
foreach (var entry in userEnv.DisplayedStepPresentAccessList)
{
var present = entry.Value.Present;
var valueText = string.Format(&quot;{0:&quot; + present.DataFormatString + &quot;}&quot;, entry.Value.GetValueFunc.Invoke(machiningStep));
Console.WriteLine($&quot;{present.ShortName}: {valueText} {present.TailUnitString} ({present.Name} [{entry.Key}])&quot;);
}
}
</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>Play/SelectedStepInfoPanel</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/selected-step-info-panel.js (Vue component)</li>
<li>wwwroot/selected-step-info-panel.css (Styles)</li>
<li>Controllers/PlayerController.cs (REST API)</li>
<li>Hubs/PlayerHub.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,141 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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.UserEnv.html">UserEnv</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">UserConfig</a>.<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>
<ul>
<li>wwwroot/preference/preference-menu.js</li>
<li>Controller/Preference/PreferenceController.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,151 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="preference-menu-dropdown">Preference Menu Dropdown</h1>
<p>The model of the UI is <a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</a>.
<a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</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.UserEnv.html#Hi_HiNcKits_UserEnv_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="single-user-application">Single User Application</h2>
<p>In single user application, access global <a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</a> and <a class="xref" href="../../../../api/Hi.HiNcKits.UserConfig.html">UserConfig</a> by the <a class="xref" href="../../../../api/Hi.HiNcKits.LocalApp.html">LocalApp</a>.</p>
<p>Apply <a class="xref" href="../../../../api/Hi.HiNcKits.LocalApp.html">LocalApp</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.LocalApp.html#Hi_HiNcKits_LocalApp_SaveUserConfig">SaveUserConfig()</a> or <a class="xref" href="../../../../api/Hi.HiNcKits.LocalApp.html">LocalApp</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.LocalApp.html#Hi_HiNcKits_LocalApp_LooseSaveUserConfig">LooseSaveUserConfig()</a> (save config in <a href="../general-rules.html">Loose Manner</a>) if config 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>MainWindow (include preference menu)</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/preference/preference-menu.js</li>
<li>Controller/Preference/PreferenceController.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,143 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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.UserEnv.html">UserEnv</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>
<ul>
<li>wwwroot/preference/preference-menu.js</li>
<li>Controller/Preference/PreferenceController.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,489 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="step-present-preference-page">Step Present Preference Page</h1>
<p>The model <a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</a> is from its parent component. The <a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html">UserEnv</a>.<a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_UserConfig">UserConfig</a> is rapidly used.</p>
<p>The model of Candidate Keys Panel is <a class="xref" href="../../../../api/Hi.HiNcKits.UserEnv.html#Hi_HiNcKits_UserEnv_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.UserEnv.html#Hi_HiNcKits_UserEnv_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>Refer the code to design Categories:</p>
<pre><code class="lang-csharp" name="SampleCode-StepDiv">@using Hi.Common
@using Hi.Geom
@using Hi.Mech.Topo
@{
string pCalss = &quot;d-flex flex-wrap gap-2&quot;;
string cardTextClass = $&quot;card-text {pCalss}&quot;;
}
&lt;div class=&quot;card&quot; style=&quot;overflow-y: hidden; height:100%; &quot;&gt;
&lt;div style=&quot;overflow-y: scroll; &quot;&gt;
&lt;div style=&quot;height: auto&quot;&gt;
&lt;div class=&quot;card-header py-0&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#fileLineFlagTime-@Tid&quot;&gt;@Loc[&quot;File&quot;] / @Loc[&quot;Command&quot;] / @Loc[&quot;Flag&quot;] / @Loc[&quot;Time&quot;] / @Loc[&quot;System&quot;]&lt;/div&gt;
&lt;div class=&quot;collapse show &quot; id=&quot;fileLineFlagTime-@Tid&quot;&gt;
&lt;div class=&quot;card-body &quot;&gt;
&lt;div class=&quot;@cardTextClass&quot;&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;File No.&quot;] : @Loc[&quot;Line No.&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;F.L.No.&quot;]&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.FileNo : @MillingStep?.LineNo&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;File&quot;]&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.FilePath&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Accumulated Time&quot;]&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.AccumulatedTime.ToString(&quot;G&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Line Text&quot;]&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.LineText&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Flags&quot;]&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.FlagsText&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Step Index&quot;]&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.StepIndex&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;card-header py-0&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#toolFeedrateSpindleSpeed-@Tid&quot;&gt;@Loc[&quot;Tool&quot;] / @Loc[&quot;Feedrate&quot;] / @Loc[&quot;Spindle Speed&quot;]&lt;/div&gt;
&lt;div class=&quot;collapse show &quot; id=&quot;toolFeedrateSpindleSpeed-@Tid&quot;&gt;
&lt;div class=&quot;card-body &quot;&gt;
&lt;div class=&quot;@cardTextClass&quot;&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Tool ID&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;T&quot;]&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.ToolId&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;S&quot;] (rpm)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.SpindleSpeed_rpm.ToString(&quot;G5&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;F&quot;] (mm/min)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.Feedrate_mmdmin.ToString(&quot;G5&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Feed per Tooth&quot;] (mm)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.FeedPerTooth_mm.ToString(&quot;G5&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Feed per Cycle&quot;] (mm)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.FeedPerCycle_mm.ToString(&quot;G5&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Tooth Arc Duration&quot;] (s)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.ToothArcDuration_s.ToString(&quot;G4&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Spindle Cycle Period&quot;] (s)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.SpindleCyclePeriod_s.ToString(&quot;G4&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Cutting Speed&quot;] (mm/s)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.CuttingSpeed_mmds?.ToString(&quot;G4&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;card-header py-0&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#coordinateAndMove-@Tid&quot;&gt;@Loc[&quot;Coordinate&quot;] / @Loc[&quot;Move&quot;]&lt;/div&gt;
&lt;div class=&quot;collapse show &quot; id=&quot;coordinateAndMove-@Tid&quot;&gt;
&lt;div class=&quot;card-body &quot;&gt;
&lt;div class=&quot;@cardTextClass&quot;&gt;
&lt;p class=&quot;@pCalss&quot;&gt;
@{
var mcCodes = HostMachiningProject?.MachiningEquipment?.GetMachiningChain()?.McCodes;
if (mcCodes != null)
{
var mcTransformers = HostMachiningProject
?.MachiningEquipment?.GetMachiningChain()?.McTransformers;
for (int i = 0; i &lt; mcCodes.Length; i++)
{
if (mcTransformers[i] == null)
continue;
if (mcTransformers[i] is DynamicRotation)
{
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Machine Coordinate&quot;] @mcCodes[i] (deg)&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;MC.@mcCodes[i] (deg)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;
@MillingStep?.GetMcValue(i)?.SelfInvoke(v =&gt; MathUtil.ToDeg(v)).ToString(&quot;F5&quot;)
&lt;/span&gt;
&lt;/div&gt;
}
else
{
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Machine Coordinate&quot;] @mcCodes[i] (mm)&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;MC.@mcCodes[i] (mm)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;
@MillingStep?.GetMcValue(i)?.ToString(&quot;F5&quot;)
&lt;/span&gt;
&lt;/div&gt;
}
}
}
}
&lt;/p&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Cutter Location Point&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;CL.XYZ (mm)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.Cl?.Point?.ToString(&quot;F5&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Cutter Location Normal&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;CL.IJK&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.Cl?.Normal?.ToString(&quot;F5&quot;))&lt;/span&gt;
&lt;/div&gt;
@{
var moveDirection = MillingStep?.MoveOnProgramCoordinate.GetNormalized();
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Move Direction&quot;] (@Loc[&quot;Workpiece Coordinate&quot;])&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Move Direction&quot;] [W]&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(moveDirection?.ToString(&quot;F4&quot;))&lt;/span&gt;
&lt;/div&gt;
}
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;card-header py-0&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#gcgr-@Tid&quot;&gt;@Loc[&quot;Cutting Geometry&quot;] / @Loc[&quot;Chip&quot;] / @Loc[&quot;Bias&quot;] / @Loc[&quot;Roughness&quot;]&lt;/div&gt;
&lt;div class=&quot;collapse show &quot; id=&quot;gcgr-@Tid&quot;&gt;
&lt;div class=&quot;card-body &quot;&gt;
&lt;div class=&quot;@cardTextClass&quot;&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Is Touched&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Is Touched&quot;]&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@Loc[(MillingStep?.IsTouched)?.ToString()]&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Cutting Width&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;ae (mm)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.CuttingWidth_mm.ToString(&quot;G3&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Cutting Depth&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;ap (mm)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.CuttingDepth_mm.ToString(&quot;G3&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Material Removal Rate&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;MRR (mm&lt;sup&gt;3&lt;/sup&gt;/s)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.Mrr_mm3ds.ToString(&quot;G3&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Chip Thickness&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Chip Thickness&quot;] (um)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.ChipThickness_um?.ToString(&quot;G3&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Chip Volume&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Chip Volume&quot;] (mm&lt;sup&gt;3&lt;/sup&gt;)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.ChipVolume_mm3?.ToString(&quot;G3&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Chip Mass&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Chip Mass&quot;] (mg)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.ChipMass_mg?.ToString(&quot;G3&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Program Side Cusp&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Program Side Cusp&quot;] (um)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.ProgramSideCusp_um.ToString(&quot;G4&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Re-Cut Depth&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Re-Cut Depth&quot;] (um)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.ReCutDepth_um.ToString(&quot;G4&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Delta Tip Deflection&quot;] (@Loc[&quot;Tool Running Coordinate&quot;])&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Delta Tip Deflection&quot;] [TR] (um)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.DeltaTipDeflectionOnToolRunningCoordinate_um?.ToString(&quot;G3&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Max Tip Deflection&quot;] (@Loc[&quot;Tool Running Coordinate&quot;])&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Max Tip Deflection&quot;] [TR] (um)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(MillingStep?.MaxTipDeflectionOnToolRunningCoordinate_um?.ToString(&quot;G3&quot;))&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;card-header py-0&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#phe-@Tid&quot;&gt;
@Loc[&quot;Mechanics&quot;] / @Loc[&quot;Power&quot;] / @Loc[&quot;Energy&quot;]
&lt;/div&gt;
&lt;div class=&quot;collapse show &quot; id=&quot;phe-@Tid&quot;&gt;
&lt;div class=&quot;card-body &quot;&gt;
&lt;div class=&quot;@cardTextClass&quot;&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Max Force&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Max Force&quot;] (N)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.MaxAbsForce_N?.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Max Force&quot;] (@Loc[&quot;Tool Running Coordinate&quot;])&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Max Force&quot;] [TR] (N)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.MaxForceOnToolRunningCoordinate_N?.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Average Moment about Sensor&quot;] (@Loc[&quot;Spindle Rotation Coordinate&quot;])&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Avg Moment about Sensor&quot;] [SR] (Nm)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.AvgMomentAboutSensor_Nm?.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Average Absolute Moment about Sensor&quot;] (@Loc[&quot;Spindle Rotation Coordinate&quot;])&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Avg Abs Moment about Sensor&quot;] [SR] (Nm)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.AvgAbsMomentAboutSensorVec3d_Nm?.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Thermal Stress&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Thermal Stress&quot;] (MPa)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.ThermalStress_MPa?.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Workpiece Plastic Depth&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Workpiece Plastic Depth&quot;] (um)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.WorkpiecePlasticDepth_um.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Spindle Input Power&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Spindle Input Power&quot;] (W)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.SpindleInputPower_W.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Spindle Output Power&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Spindle Output Power&quot;] (W)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.SpindleOutputPower_W.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Accumulated Spindle Energy Consumption From Spindle Input Power&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Accumulated Spindle Energy Consumption&quot;] (kWh)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.AccumulatedSpindleEnergyConsumption_kWh.ToString(&quot;G6&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;card-header py-0&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#tw-@Tid&quot;&gt;@Loc[&quot;Temperature&quot;] / @Loc[&quot;Wear&quot;]&lt;/div&gt;
&lt;div class=&quot;collapse show &quot; id=&quot;tw-@Tid&quot;&gt;
&lt;div class=&quot;card-body &quot;&gt;
&lt;div class=&quot;@cardTextClass&quot;&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Chip Temperature&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Chip Temperature&quot;] (&lt;sup&gt;o&lt;/sup&gt;C)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.ChipTemperature_C?.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Cutter Dermis Temperature&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Cutter Dermis Temperature&quot;] (&lt;sup&gt;o&lt;/sup&gt;C)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.CutterDermisTemperature_C?.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Cutter Body Temperature&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Cutter Body Temperature&quot;] (&lt;sup&gt;o&lt;/sup&gt;C)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.CutterBodyTemperature_C?.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Workpiece Dermis Temperature&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Workpiece Dermis Temperature&quot;] (&lt;sup&gt;o&lt;/sup&gt;C)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.WorkpieceDermisTemperature_C?.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Instant Crater Wear&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Instant Crater Wear&quot;] (um)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.InstantCraterWear_um?.ToString(&quot;G3&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Accumulated Crater Wear&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Accumulated Crater Wear&quot;] (um)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.AccumulatedCraterWear_um.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Accumulated Flank Wear Depth&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@Loc[&quot;Accumulated Flank Wear Depth&quot;] (um)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.AccumulatedFlankWearDepth_um.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;div class=&quot;w-auto&quot; title=&quot;@Loc[&quot;Accumulated Flank Wear Width&quot;]&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;VB (um)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@MillingStep?.AccumulatedFlankWearWidth_um.ToString(&quot;G4&quot;)&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;card-header py-0&quot; data-bs-toggle=&quot;collapse&quot; data-bs-target=&quot;#custom-@Tid&quot;&gt;@Loc[&quot;Custom&quot;]&lt;/div&gt;
&lt;div class=&quot;collapse show &quot; id=&quot;custom-@Tid&quot;&gt;
&lt;div class=&quot;card-body &quot;&gt;
&lt;div class=&quot;@cardTextClass&quot;&gt;
@{
var flexDictionary=MillingStep?.FlexDictionary;
if (flexDictionary != null)
{
foreach(var entry in flexDictionary)
{
if(HostMachiningProject?.StepPropertyAccessDictionary.TryGetValue(
entry.Key, out var stepPropertyAccess)==true)
{
&lt;div class=&quot;w-auto&quot; title=&quot;@(stepPropertyAccess.PresentAttribute?.Name)&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@(stepPropertyAccess.PresentAttribute?.ShortName)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(stepPropertyAccess.GetValueText(MillingStep))&lt;/span&gt;
&lt;/div&gt;
}
else
{
&lt;div class=&quot;w-auto&quot; title=&quot;@(entry.Key) (@Loc[&quot;Not Registered&quot;])&quot;&gt;
&lt;span class=&quot;form-label&quot;&gt;@(entry.Key)&lt;/span&gt;
&lt;span class=&quot;form-control readonly w-auto&quot;&gt;@(entry.Value)&lt;/span&gt;
&lt;/div&gt;
}
}
}
}
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p>Refer 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(
UserEnv userEnv, MachiningStep machiningStep)
{
foreach (var entry in userEnv.DisplayedStepPresentAccessList)
{
var present = entry.Value.Present;
var valueText = string.Format(&quot;{0:&quot; + present.DataFormatString + &quot;}&quot;, entry.Value.GetValueFunc.Invoke(machiningStep));
Console.WriteLine($&quot;{present.ShortName}: {valueText} {present.TailUnitString} ({present.Name} [{entry.Key}])&quot;);
}
}
</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>
<ul>
<li>wwwroot/preference/step-present-preference.js</li>
<li>Controller/Preference/PreferenceController.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,152 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../index.html">
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="renderingcanvas-tool-bar">RenderingCanvas Tool Bar</h1>
<p>The model of the RenderingCanvas Tool Bar is <a class="xref" href="../../../api/Hi.Disp.DispEngine.html">DispEngine</a>.</p>
<h2 id="layout-and-behavior">Layout and Behavior</h2>
<ul>
<li><code>View Buttons SubMenu</code>
<ul>
<li>Front View Button
Call DispEngine.<a class="xref" href="../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToFrontView">SetViewToFrontView()</a>.</li>
<li>Back View Button
Call DispEngine.<a class="xref" href="../../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToFrontView">SetViewToFrontView()</a> and turn back the view by the code:<pre><code class="lang-csharp" name="SampleCode">DispEngine.SetViewToFrontView();
DispEngine.TurnBackView();
</code></pre></li>
<li>Right View Button
...(refer the instruction above)</li>
<li>Left View Button
...</li>
<li>Top View Button
...</li>
<li>Bottom View Button
...</li>
<li>Isometric View Button
...</li>
</ul>
</li>
<li>(other RenderingCanvas tool bar item may be appended here)</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>Disp/RenderingCanvasToolBar</li>
</ul>
<h3 id="webapi-application-source-code-path">Webapi Application Source Code Path</h3>
<ul>
<li>wwwroot/disp/rendering-canvas-tool-bar.js</li>
<li>wwwroot/disp/rendering-canvas-tool-bar.css</li>
</ul>
<p>To build it, you can refer <a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.Sample.Webapi/raw/branch/master/wwwroot/disp/rendering-canvas-view-dropdown.js">Hi.Sample.Webapi/wwwroot/disp/rendering-canvas-view-dropdown.js</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,200 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="session-message-panel">Session Message Panel</h1>
<p>The model is <a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.<a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_SessionMessageHost">SessionMessageHost</a>.</p>
<p><a class="xref" href="../../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> is assigned from the <a href="../player/index.html">Player Panel</a>.</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.SessionMessageHost.html">SessionMessageHost</a>.<a class="xref" href="../../../../api/Hi.MachiningProcs.SessionMessageHost.html#Hi_MachiningProcs_SessionMessageHost_MessageCollection">MessageCollection</a>.</p>
<p>Only take last 1000 filtered elements in the <a class="xref" href="../../../../api/Hi.MachiningProcs.SessionMessageHost.html#Hi_MachiningProcs_SessionMessageHost_MessageCollection">MessageCollection</a> by <a class="xref" href="../../../../api/Hi.MachiningProcs.SessionMessageHost.html#Hi_MachiningProcs_SessionMessageHost_GetFliteredList_Hi_MachiningProcs_SessionMessageHost_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(MachiningProject project)
{
SessionMessageHost sessionMessageHost = project.SessionMessageHost;
SessionMessageHost.FilterFlag filterFlags =
SessionMessageHost.FilterFlag.NC |
SessionMessageHost.FilterFlag.Progress |
SessionMessageHost.FilterFlag.Error;
string filterText = null;
var filteredSessionMessageList = sessionMessageHost
.GetFliteredList(filterFlags, filterText);
foreach (var sessionMessage in filteredSessionMessageList)
{
//M.I.: Message Index.
Console.Write($&quot;M.I.: {sessionMessage.Index}; Role: {sessionMessage.MessageRoleText}&quot;);
// For SessionMessageHost.FilterFlag.NC
var nc = sessionMessage.DirectInstantSourceCommand;
if (nc != null)
Console.Write($&quot;Message/NC: {nc.Line}; File: {nc.FilePath}; LineNo: {nc.GetLineNo()}; &quot;);
// For SessionMessageHost.FilterFlag.Progress or Error.
var multiTagMessage = sessionMessage.MultiTagMessage;
if (multiTagMessage != null)
Console.WriteLine($&quot;Message/NC: {multiTagMessage.Message}&quot;);
var exception = sessionMessage.Exception;
if (exception != null)
Console.WriteLine($&quot;Message/NC: {exception.Message}&quot;);
}
File.WriteAllLines(&quot;output-session-messages.txt&quot;,
filteredSessionMessageList.Select(m =&gt;
$&quot;Msg[{m.Index}][{m.MessageRoleText}]: {m}&quot;));
}
</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.SessionMessageHost.html#Hi_MachiningProcs_SessionMessageHost_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.SessionMessageHost.html#Hi_MachiningProcs_SessionMessageHost_MessageCollection">MessageCollection</a> by <a class="xref" href="../../../../api/Hi.MachiningProcs.SessionMessageHost.html#Hi_MachiningProcs_SessionMessageHost_GetFliteredList_Hi_MachiningProcs_SessionMessageHost_FilterFlag_System_String_">GetFliteredList(FilterFlag, string)</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>Play/SessionMessagePanel</li>
</ul>
<h3 id="web-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/player-panel.js (include in Player Panel)</li>
<li>Controller/Player/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,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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../index.html">
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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 (MachiningProject.MachiningEquipment.MachiningChain)</p>
<p><code>Load</code> button load the machine tool to MachiningProject.MachiningEquipment.MachiningChain and MachiningProject.MachiningEquipment.MachiningChainFile by XFactory.Default.GenByFile.</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,400 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mission Panel | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Mission Panel | HiAPI-C# 2025 ">
<link rel="icon" href="../../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../../public/main.css">
<meta name="docfx:navrel" content="../../../../toc.html">
<meta name="docfx:tocrel" content="../../toc.html">
<meta name="docfx:rel" content="../../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="mission-panel">Mission Panel</h1>
<p>The <code>Mission Panel</code> manages NC program loading, editing, and preparation for simulation in the geometry-only HiNC application.</p>
<h2 id="panel-layout">Panel Layout</h2>
<ul>
<li><p>Left side: <code>NC Program Management Panel</code></p>
<ul>
<li><code>Program Files Section</code>
<ul>
<li><code>Load NC File</code> button</li>
<li><code>New NC File</code> button</li>
<li>List view of loaded NC programs</li>
<li><code>Remove</code> button (to remove selected program)</li>
</ul>
</li>
<li><code>Program Properties Section</code>
<ul>
<li>File name and path display</li>
<li>Program description input field</li>
<li>Program size and line count display</li>
</ul>
</li>
<li><code>Program Association Section</code>
<ul>
<li>Tool mapping controls:
<ul>
<li>Dropdown to select T-code</li>
<li>Dropdown to select corresponding tool from Tool House</li>
<li><code>Apply Mapping</code> button</li>
</ul>
</li>
<li>Work offset mapping controls:
<ul>
<li>Dropdown to select work offset code (G54, G55, etc.)</li>
<li>X, Y, Z offset value inputs</li>
<li><code>Apply Offset</code> button</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Right side: <code>NC Program Editor/Viewer</code></p>
<ul>
<li>Syntax-highlighted G-code editor</li>
<li>Line numbers</li>
<li><code>Save</code> button</li>
<li><code>Validate</code> button</li>
<li>Validation results display area</li>
<li><code>Show Toolpath Preview</code> toggle button</li>
</ul>
</li>
<li><p>Bottom: <code>Toolpath Preview Panel</code> (shown when preview is toggled on)</p>
<ul>
<li>3D view of the toolpath</li>
<li>Color-coded display based on operation type or feed rate</li>
<li>Basic camera controls</li>
</ul>
</li>
</ul>
<h2 id="behavior">Behavior</h2>
<h3 id="loading-nc-program-files">Loading NC Program Files</h3>
<p>When the user clicks the <code>Load NC File</code> button:</p>
<ol>
<li>Open a file selection dialog showing NC files (*.nc, *.cnc, *.ngc, etc.)</li>
<li>After selection, validate the file format</li>
<li>Add the file to the list of NC programs</li>
<li>Display the file in the editor/viewer</li>
<li>Update program properties display</li>
</ol>
<pre><code class="lang-csharp">// Example code
public void LoadNCFile(string filePath)
{
if (File.Exists(filePath))
{
// Read and validate NC file
string programContent = File.ReadAllText(filePath);
// Create a new program object
NCProgram program = new NCProgram
{
FilePath = filePath,
FileName = Path.GetFileName(filePath),
Content = programContent,
LineCount = programContent.Split('\n').Length,
FileSize = new FileInfo(filePath).Length
};
// Add to the project's mission
machiningProject.MachiningMission.Programs.Add(program);
// Update the NC program list view
UpdateProgramListView();
// Select the newly added program
SelectProgram(program);
// Display the program in the editor
LoadProgramIntoEditor(program);
}
}
</code></pre>
<h3 id="creating-a-new-nc-program">Creating a New NC Program</h3>
<p>When the user clicks the <code>New NC File</code> button:</p>
<ol>
<li>Create a new empty NC program object</li>
<li>Add it to the list of programs</li>
<li>Load it into the editor with minimal template content</li>
<li>Allow the user to start editing</li>
</ol>
<pre><code class="lang-csharp">public void CreateNewNCProgram()
{
// Create a basic template for a new NC program
string templateContent = &quot;%\nO0001\n(NEW PROGRAM)\n\nG90 G40 G17\nG21 (MM)\n\n(PROGRAM BODY)\n\nM30\n%&quot;;
// Create a new program object
NCProgram program = new NCProgram
{
FileName = &quot;NewProgram.nc&quot;,
Content = templateContent,
LineCount = templateContent.Split('\n').Length,
IsNew = true
};
// Add to the project's mission
machiningProject.MachiningMission.Programs.Add(program);
// Update the NC program list view
UpdateProgramListView();
// Select the newly added program
SelectProgram(program);
// Display the program in the editor
LoadProgramIntoEditor(program);
}
</code></pre>
<h3 id="tool-mapping">Tool Mapping</h3>
<p>When the user sets up a tool mapping and clicks <code>Apply Mapping</code>:</p>
<ol>
<li>Extract the T-code from the selected dropdown</li>
<li>Get the corresponding tool from the Tool House based on the selection</li>
<li>Add or update the mapping in the mission's tool map</li>
<li>Update the display to show the active mapping</li>
</ol>
<pre><code class="lang-csharp">public void ApplyToolMapping(string tCodeStr, int toolHousePosition)
{
if (int.TryParse(tCodeStr.Substring(1), out int tCode))
{
// Get the tool from the tool house
var tool = machiningProject.MachiningToolHouse[toolHousePosition];
if (tool != null)
{
// Update or add the mapping
machiningProject.MachiningMission.ToolMap[tCode] = toolHousePosition;
// Update the display
UpdateToolMappingDisplay();
}
}
}
</code></pre>
<h3 id="work-offset-mapping">Work Offset Mapping</h3>
<p>When the user sets up a work offset and clicks <code>Apply Offset</code>:</p>
<ol>
<li>Extract the offset code (G54, G55, etc.)</li>
<li>Create a vector from the X, Y, Z input values</li>
<li>Add or update the offset in the mission's work offset map</li>
<li>Update the display to show the active offset</li>
</ol>
<pre><code class="lang-csharp">public void ApplyWorkOffset(string offsetCode, double x, double y, double z)
{
// Create the offset vector
Vec3d offset = new Vec3d(x, y, z);
// Update or add the mapping
machiningProject.MachiningMission.WorkOffsetMap[offsetCode] = offset;
// Update the display
UpdateWorkOffsetDisplay();
}
</code></pre>
<h3 id="validating-nc-program">Validating NC Program</h3>
<p>When the user clicks the <code>Validate</code> button:</p>
<ol>
<li>Parse the current program content in the editor</li>
<li>Check for syntax errors</li>
<li>Verify tool references against the tool map</li>
<li>Check for unsupported G/M codes</li>
<li>Display validation results in the results area</li>
</ol>
<pre><code class="lang-csharp">public void ValidateProgram()
{
// Get the current content from the editor
string programContent = GetEditorContent();
// Create a validator
NCProgramValidator validator = new NCProgramValidator(machiningProject);
// Perform validation
ValidationResult result = validator.Validate(programContent);
// Display results
ClearValidationResultsDisplay();
if (result.IsValid)
{
DisplayValidationSuccess(&quot;Program validation successful.&quot;);
}
else
{
foreach (var error in result.Errors)
{
DisplayValidationError(error);
}
}
}
</code></pre>
<h3 id="displaying-toolpath-preview">Displaying Toolpath Preview</h3>
<p>When the user toggles the <code>Show Toolpath Preview</code>:</p>
<ol>
<li>If toggled on:
a. Parse the NC program
b. Generate a toolpath using the geometry-only simulation engine
c. Render the toolpath in the preview panel
d. Show the preview panel</li>
<li>If toggled off:
a. Hide the preview panel</li>
</ol>
<pre><code class="lang-csharp">public void ToggleToolpathPreview(bool showPreview)
{
if (showPreview)
{
// Get the current program
NCProgram program = GetSelectedProgram();
// Generate toolpath (simplified for geometry-only)
Toolpath toolpath = ToolpathGenerator.GenerateFromNCProgram(
program.Content,
machiningProject.MachiningMission.ToolMap,
machiningProject.MachiningMission.WorkOffsetMap,
machiningProject.MachiningEquipment);
// Render the toolpath
RenderToolpathPreview(toolpath);
// Show the preview panel
toolpathPreviewPanel.Visibility = Visibility.Visible;
}
else
{
// Hide the preview panel
toolpathPreviewPanel.Visibility = Visibility.Collapsed;
}
}
</code></pre>
<h3 id="data-structure">Data Structure</h3>
<p>The panel operates primarily on the <code>MachiningMission</code> of the <code>MachiningProject</code>:</p>
<pre><code class="lang-csharp">public class MachiningMission
{
public List&lt;NCProgram&gt; Programs { get; set; } = new List&lt;NCProgram&gt;();
public Dictionary&lt;int, int&gt; ToolMap { get; set; } = new Dictionary&lt;int, int&gt;();
public Dictionary&lt;string, Vec3d&gt; WorkOffsetMap { get; set; } = new Dictionary&lt;string, Vec3d&gt;();
// Other mission-related properties
}
public class NCProgram
{
public string FilePath { get; set; }
public string FileName { get; set; }
public string Content { get; set; }
public long FileSize { get; set; }
public int LineCount { get; set; }
public bool IsNew { get; set; }
public string Description { get; set; }
// Other program-related properties
}
</code></pre>
<h2 id="integration-with-main-application">Integration with Main Application</h2>
<p>The <code>Mission Panel</code> is activated when the user selects the <code>Mission</code> item in the <code>Navigation Menu</code>. It accesses and modifies the <code>MachiningMission</code> component of the current <code>MachiningProject</code> instance.</p>
<p>When changes are made in this panel, the following notifications should be sent:</p>
<ol>
<li><code>ProgramListChanged</code> - When programs are added or removed</li>
<li><code>ProgramContentChanged</code> - When program content is edited</li>
<li><code>ToolMapChanged</code> - When tool mappings are updated</li>
<li><code>WorkOffsetMapChanged</code> - When work offsets are updated</li>
</ol>
<p>These notifications allow other components (particularly the Player panel) to update their behavior accordingly when preparing for or executing the simulation.</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,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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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>&lt;application path&gt;/Resource/&lt;classification&gt;</code> directory.
The button label has to explicitly show &lsquo;Load Resource&rsquo;.</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,211 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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=&gt;TargetObjectGetter?.Invoke();set=&gt;TargetObjectSetter?.Invoke(value);}
Func&lt;TargetObject&gt; TargetObjectGetter{get;set;}
Action&lt;TargetObject&gt; 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>Don't use <a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html">GenMode</a>.<a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html#Hi_Common_XmlUtils_GenMode_Default">Default</a> on <a class="xref" href="../../../../api/Hi.Common.XmlUtils.XFactory.html">XFactory</a> functions. Use <a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html">GenMode</a>.<a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html#Hi_Common_XmlUtils_GenMode_Rebase">Rebase</a>. Since <a class="xref" href="../../../../api/Hi.Common.XmlUtils.GenMode.html">GenMode</a>.Default pass the inner exception silently.</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 &amp; Paste</h2>
<ul>
<li>Object Copy/Paste (i.e. Select/Set or Duplicated-Set)
<ul>
<li>Copy (i.e. Select)
Set the model to UserEnv.SelectedItem.</li>
<li>Paste
Set UserEnv.SelectedItem 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">XFactory</a>.<a class="xref" href="../../../../api/Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Gen__1_System_Xml_Linq_XElement_System_String_Hi_Common_XmlUtils_SetFileDelegate_Hi_Common_XmlUtils_GenMode_System_Object___">Gen&lt;T&gt;(XElement, string, SetFileDelegate, GenMode, params object[])</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>
</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,153 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../index.html">
<img id="logo" class="svg" src="../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/widget/polar-resolution-2d-panel.js</li>
<li>Controller/Widget/WidgetController.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,601 @@
<!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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../../../index.html">
<img id="logo" class="svg" src="../../../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="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</li>
<li>Text Mode: Input complete vector in text format</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>
</ol>
<h2 id="refer-sample-code">Refer Sample Code</h2>
<pre><code class="lang-csharp" name="SampleCode-xaml">&lt;UserControl x:Class=&quot;HiNC_2025_win_desktop.Geom.Vec3dControl&quot;
xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;
xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
mc:Ignorable=&quot;d&quot;
d:DesignHeight=&quot;30&quot; d:DesignWidth=&quot;200&quot;&gt;
&lt;Grid&gt;
&lt;Grid.ColumnDefinitions&gt;
&lt;ColumnDefinition Width=&quot;*&quot;/&gt;
&lt;ColumnDefinition Width=&quot;*&quot;/&gt;
&lt;ColumnDefinition Width=&quot;*&quot;/&gt;
&lt;ColumnDefinition Width=&quot;Auto&quot;/&gt;
&lt;ColumnDefinition Width=&quot;Auto&quot;/&gt;
&lt;/Grid.ColumnDefinitions&gt;
&lt;!-- Standard Mode Panel --&gt;
&lt;StackPanel x:Name=&quot;StandardModePanel&quot; Orientation=&quot;Horizontal&quot; Grid.ColumnSpan=&quot;5&quot;&gt;
&lt;TextBox x:Name=&quot;XTextBox&quot; Width=&quot;60&quot; Margin=&quot;0,0,2,0&quot; TextChanged=&quot;XTextBox_TextChanged&quot; IsReadOnly=&quot;{Binding IsReadOnly}&quot;/&gt;
&lt;TextBox x:Name=&quot;YTextBox&quot; Width=&quot;60&quot; Margin=&quot;0,0,2,0&quot; TextChanged=&quot;YTextBox_TextChanged&quot; IsReadOnly=&quot;{Binding IsReadOnly}&quot;/&gt;
&lt;TextBox x:Name=&quot;ZTextBox&quot; Width=&quot;60&quot; Margin=&quot;0,0,2,0&quot; TextChanged=&quot;ZTextBox_TextChanged&quot; IsReadOnly=&quot;{Binding IsReadOnly}&quot;/&gt;
&lt;Button Content=&quot;{DynamicResource Vec3d_TextMode_Toggle}&quot; Width=&quot;20&quot; Click=&quot;TextModeToggle_Click&quot; Margin=&quot;0,0,2,0&quot; ToolTip=&quot;{DynamicResource Vec3d_TextMode_Tooltip}&quot;/&gt;
&lt;Button Content=&quot;{DynamicResource Vec3d_Normalize}&quot; Width=&quot;20&quot; Click=&quot;NormalizeButton_Click&quot; Visibility=&quot;{Binding ShowNormalizeButton, Converter={StaticResource BooleanToVisibilityConverter}}&quot; ToolTip=&quot;{DynamicResource Vec3d_Normalize_Tooltip}&quot;/&gt;
&lt;/StackPanel&gt;
&lt;!-- Text Mode Panel --&gt;
&lt;StackPanel x:Name=&quot;TextModePanel&quot; Orientation=&quot;Horizontal&quot; Grid.ColumnSpan=&quot;5&quot; Visibility=&quot;Collapsed&quot;&gt;
&lt;TextBox x:Name=&quot;VectorTextBox&quot; Width=&quot;180&quot; Margin=&quot;0,0,2,0&quot; TextChanged=&quot;VectorTextBox_TextChanged&quot; IsReadOnly=&quot;{Binding IsReadOnly}&quot;
ToolTip=&quot;{DynamicResource Vec3d_TextMode_Format_Tooltip}&quot;/&gt;
&lt;Button Content=&quot;{DynamicResource Vec3d_StandardMode_Toggle}&quot; Width=&quot;20&quot; Click=&quot;StandardModeToggle_Click&quot; Margin=&quot;0,0,2,0&quot; ToolTip=&quot;{DynamicResource Vec3d_StandardMode_Tooltip}&quot;/&gt;
&lt;Button Content=&quot;{DynamicResource Vec3d_Normalize}&quot; Width=&quot;20&quot; Click=&quot;NormalizeButton_Click&quot; Visibility=&quot;{Binding ShowNormalizeButton, Converter={StaticResource BooleanToVisibilityConverter}}&quot; ToolTip=&quot;{DynamicResource Vec3d_Normalize_Tooltip}&quot;/&gt;
&lt;/StackPanel&gt;
&lt;/Grid&gt;
&lt;/UserControl&gt;
</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;
namespace HiNC_2025_win_desktop.Geom
{
/// &lt;summary&gt;
/// Vec3dControl.xaml 的交互逻辑
/// &lt;/summary&gt;
public partial class Vec3dControl : UserControl, INotifyPropertyChanged
{
private bool _isUpdating = false;
private Func&lt;Vec3d&gt; _getterFunc;
private Func&lt;Task&gt; _updateByContentFunc;
private bool _showNormalizeButton = false;
private bool _isTextMode = false;
private bool _isReadOnly = false;
// 用于匹配各种格式的正则表达式
private static readonly Regex VectorRegex = new Regex(@&quot;^\s*[\(\[\{]?\s*(-?\d*\.?\d+)\s*,\s*(-?\d*\.?\d+)\s*,\s*(-?\d*\.?\d+)\s*[\)\]\}]?\s*$&quot;, RegexOptions.Compiled);
// 用于匹配变换矩阵格式的正则表达式(包括带有花括号的嵌套格式)
private static readonly Regex MatrixRegex = new Regex(@&quot;\{(?:\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*\}&quot;, RegexOptions.Compiled);
public event PropertyChangedEventHandler PropertyChanged;
public string ControlId { get; set; } = Guid.NewGuid().ToString();
public Func&lt;Vec3d&gt; GetterFunc
{
get =&gt; _getterFunc;
set
{
_getterFunc = value;
UpdateUI();
}
}
public Func&lt;Task&gt; UpdateByContentFunc
{
get =&gt; _updateByContentFunc;
set =&gt; _updateByContentFunc = value;
}
public bool ShowNormalizeButton
{
get =&gt; _showNormalizeButton;
set
{
if (_showNormalizeButton != value)
{
_showNormalizeButton = value;
OnPropertyChanged(nameof(ShowNormalizeButton));
}
}
}
public bool IsTextMode
{
get =&gt; _isTextMode;
set
{
if (_isTextMode != value)
{
_isTextMode = value;
UpdateModeVisibility();
OnPropertyChanged(nameof(IsTextMode));
}
}
}
public bool IsReadOnly
{
get =&gt; _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) &amp;&amp;
double.TryParse(YTextBox.Text, out double y) &amp;&amp;
double.TryParse(ZTextBox.Text, out double z))
{
VectorTextBox.Text = $&quot;{x},{y},{z}&quot;;
}
}
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(&quot;F3&quot;);
YTextBox.Text = vec.Y.ToString(&quot;F3&quot;);
ZTextBox.Text = vec.Z.ToString(&quot;F3&quot;);
if (IsTextMode)
{
VectorTextBox.Text = $&quot;{vec.X:F3},{vec.Y:F3},{vec.Z:F3}&quot;;
}
if(_updateByContentFunc != null)
await _updateByContentFunc();
}
}
catch (Exception ex)
{
MessageKit.AddError(string.Format(Application.Current.FindResource(&quot;Vec3d_Update_Error&quot;).ToString(), ex.Message));
ex.ShowException(this);
}
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(&quot;F3&quot;);
YTextBox.Text = vec.Y.ToString(&quot;F3&quot;);
ZTextBox.Text = vec.Z.ToString(&quot;F3&quot;);
if (IsTextMode)
{
VectorTextBox.Text = $&quot;{vec.X},{vec.Y},{vec.Z}&quot;;
}
}
else
{
XTextBox.Text = &quot;&quot;;
YTextBox.Text = &quot;&quot;;
ZTextBox.Text = &quot;&quot;;
VectorTextBox.Text = &quot;&quot;;
}
}
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 &lt; 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)
{
MessageKit.AddError(string.Format(Application.Current.FindResource(&quot;Vec3d_Update_Error&quot;).ToString(), ex.Message));
ex.ShowException(this);
}
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 &amp;&amp; match.Groups.Count &gt;= 4)
{
if (double.TryParse(match.Groups[1].Value, out x) &amp;&amp;
double.TryParse(match.Groups[2].Value, out y) &amp;&amp;
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, @&quot;\s+&quot;, &quot; &quot;);
// 尝试匹配变换矩阵格式
Match match = MatrixRegex.Match(text);
if (match.Success &amp;&amp; match.Groups.Count &gt;= 8)
{
// 变换矩阵的第4列通常是位移分量
if (double.TryParse(match.Groups[4].Value, out tx) &amp;&amp;
double.TryParse(match.Groups[8].Value, out ty) &amp;&amp;
double.TryParse(match.Groups[12].Value, out tz))
{
return true;
}
}
// 尝试匹配更宽松的变换矩阵表示(例如从界面复制的数据)
var numbers = Regex.Matches(text, @&quot;(-?\d*\.?\d+)&quot;);
if (numbers.Count &gt;= 16)
{
// 假设这是一个4x4矩阵,提取位移分量(第4、8、12个数字)
if (double.TryParse(numbers[3].Value, out tx) &amp;&amp;
double.TryParse(numbers[7].Value, out ty) &amp;&amp;
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, @&quot;[^\d\.\-\s,;]+&quot;, &quot; &quot;);
string[] parts = Regex.Split(cleanText, @&quot;[\s,;]+&quot;);
// 尝试从分割后的部分获取三个数字
var numbers = new System.Collections.Generic.List&lt;double&gt;();
foreach (var part in parts)
{
if (!string.IsNullOrWhiteSpace(part) &amp;&amp; double.TryParse(part, out double value))
{
numbers.Add(value);
if (numbers.Count &gt;= 3) break; // 最多取3个数字
}
}
// 如果获取到了三个数字,就认为解析成功
if (numbers.Count &gt;= 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(&quot;F3&quot;);
YTextBox.Text = y.ToString(&quot;F3&quot;);
ZTextBox.Text = z.ToString(&quot;F3&quot;);
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 &amp;= double.TryParse(XTextBox.Text, out double x);
allValid &amp;= double.TryParse(YTextBox.Text, out double y);
allValid &amp;= double.TryParse(ZTextBox.Text, out double z);
if (allValid)
{
if (IsTextMode)
{
VectorTextBox.Text = $&quot;{x},{y},{z}&quot;;
}
var vec = _getterFunc();
if (vec != null)
{
vec.X = x;
vec.Y = y;
vec.Z = z;
if(_updateByContentFunc != null)
await _updateByContentFunc();
}
}
else
{
// 如果有无效输入,不进行更新但也不显示错误
// 这允许用户在输入过程中有不完整的状态
}
}
catch (Exception ex)
{
// 记录异常但不中断用户操作
MessageKit.AddError(string.Format(Application.Current.FindResource(&quot;Vec3d_Update_Error&quot;).ToString(), ex.Message));
ex.ShowException(this);
}
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-page-application-source-code-path">Web Page Application Source Code Path</h3>
<ul>
<li>wwwroot/widget/vec3d-control.js</li>
<li>Controller/Widget/WidgetController.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,195 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>General HiNC Workflow | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="General HiNC Workflow | HiAPI-C# 2025 ">
<link rel="icon" href="../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../public/main.css">
<meta name="docfx:navrel" content="../../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../index.html">
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="general-hinc-workflow">General HiNC Workflow</h1>
<p>The following diagram illustrates the overall HiNC workflow:</p>
<pre><code class="lang-mermaid">graph TD
A[&quot;Create MachiningProject&quot;] --&gt; B[&quot;Setting Environment&quot;]
B --&gt; C[&quot;Setting Project Tasks&quot;]
C --&gt; D[&quot;Run Tasks&quot;]
D --&gt; E[&quot;View Analysis Results&quot;]
</code></pre>
<p>For a complete implementation example, see: <a class="xref" href="../../sample/Sample.Machining.DemoBuildMachiningProject.html">DemoBuildMachiningProject</a></p>
<h2 id="1-create-">1. Create <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></h2>
<p>Creating a machining project is the first step in the HiNC workflow, accomplished by initializing a <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> object.</p>
<h2 id="2-setting-environment-in-">2. Setting Environment In <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></h2>
<ul>
<li>Set <a class="xref" href="../../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html">MachiningEquipment</a>:
<ul>
<li>Usually one-time settings:
<ul>
<li><a class="xref" href="../../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_MachiningChain">MachiningChain</a> - Configure the complete machine tool including geometry, kinematic chain, and coordinate transformations</li>
<li><a class="xref" href="../../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_SpindleCapability">SpindleCapability</a> - Configure <a class="xref" href="../../../api/Hi.Milling.SpindleCapability.html">SpindleCapability</a></li>
<li><a class="xref" href="../../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_CoolantHeatCondition">CoolantHeatCondition</a> - Configure coolant heat conditions</li>
<li>BackgroundTemperature - Configure environment background temperature</li>
</ul>
</li>
<li>Variable settings:
<ul>
<li><a class="xref" href="../../../api/Hi.NcMech.Fixtures.Fixture.html">Fixture</a> - Configure fixture</li>
<li><a class="xref" href="../../../api/Hi.NcMech.Workpieces.Workpiece.html">Workpiece</a> - Configure workpiece</li>
</ul>
</li>
</ul>
</li>
<li>Set <a class="xref" href="../../../api/Hi.Machining.MachiningToolHouse.html">MachiningToolHouse</a> - Configure tool house</li>
<li>Set <a class="xref" href="../../../api/Hi.Numerical.NcEnv.html">NcEnv</a> (Controller) - Configure NC system environment parameters</li>
</ul>
<h2 id="3-setting-project-tasks">3. Setting Project Tasks</h2>
<p>Set sequential tasks using <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_PlayerCommand">PlayerCommand</a>:</p>
<ul>
<li>Set NC Files - Set the file path and customize simulation and optimization settings for each NC file</li>
<li>Configure NC optimization - Configure NC code optimization parameters</li>
<li>Set &lt;xref:Hi.ShellCommandUtils.GeomDiffCommand&gt; - Configure geometry comparison functionality to compare target workpiece shape with simulated shape</li>
<li>Set <a class="xref" href="../../../api/Hi.MillingForces.Training.MillingTraining.html">MillingTraining</a> - Configure milling parameter training to calibrate simulation parameters based on actual machining data</li>
<li>Other task configurations&hellip;</li>
</ul>
<p>The PlayerCommand is typically a &lt;xref:Hi.ShellCommandUtils.ListCommand&gt; that contains a sequence of command entries to be executed during the simulation.</p>
<h2 id="4-run-the-tasks-simulation-and-optimization">4. Run the Tasks (Simulation and Optimization)</h2>
<p>Run <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_PlayerCommand">PlayerCommand</a> through <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_PacePlayer">PacePlayer</a>.</p>
<p>At this stage, the simulation process is similar to video playback, which can be:</p>
<ul>
<li>Started</li>
<li>Stopped</li>
<li>Paused</li>
<li>Run one line</li>
<li>Run one step</li>
<li>Reset</li>
</ul>
<p>The <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_PacePlayer">PacePlayer</a> controls the execution pace of the simulation, allowing you to observe the machining process in detail or run it at full speed.</p>
<h3 id="view-the-analysis-during-process-or-result">View the Analysis During Process or Result</h3>
<p><a class="xref" href="../../../api/Hi.MachiningProcs.SessionMessageHost.html">SessionMessageHost</a> contains a sequence of simulation messages and step data, which can be used to monitor and analyze the simulation process and results.</p>
<h1 id="ui-pattern">UI Pattern</h1>
<p>The user interface navigation bar matches the workflow. Top-level navigation items include:</p>
<ul>
<li><a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>
<ul>
<li>New</li>
<li>Save</li>
<li>Load</li>
</ul>
</li>
<li>Environment
<ul>
<li>...</li>
</ul>
</li>
<li>Task
<ul>
<li>...</li>
</ul>
</li>
<li>Sim (Simulation)</li>
</ul>
<p>This UI structure makes it intuitive to follow the HiNC workflow from project creation to simulation execution.</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,193 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Getting Started with HiAPI | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Getting Started with HiAPI | HiAPI-C# 2025 ">
<link rel="icon" href="../../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../../public/docfx.min.css">
<link rel="stylesheet" href="../../../public/main.css">
<meta name="docfx:navrel" content="../../../toc.html">
<meta name="docfx:tocrel" content="../toc.html">
<meta name="docfx:rel" content="../../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../../index.html">
<img id="logo" class="svg" src="../../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="getting-started-with-hiapi">Getting Started with HiAPI</h1>
<p>This guide will help you get started with HiAPI development.</p>
<h2 id="installation">Installation</h2>
<ol>
<li><p>Create a dotnet project.</p>
</li>
<li><p>Setting the nuget server and account.</p>
<p>The HiAPI installation is typical Nuget Package installation. You can apply global or local nuget setting.</p>
<p>Here apply the local solution for startup. Create a file and name it to <code>nuget.config</code> in the same folder of your dotnet project file. the content of the file is as the following:</p>
<pre><code class="lang-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;configuration&gt;
&lt;packageSources&gt;
&lt;add key=&quot;HiAPI&quot; value=&quot;https://superhightech-gitea.webredirect.org/api/packages/HiAPI/nuget/index.json&quot; /&gt;
&lt;add key=&quot;nuget.org&quot; value=&quot;https://api.nuget.org/v3/index.json&quot; protocolVersion=&quot;3&quot; /&gt;
&lt;/packageSources&gt;
&lt;packageSourceCredentials&gt;
&lt;HiAPI&gt;
&lt;add key=&quot;Username&quot; value=&quot;xxxxxx&quot; /&gt;
&lt;add key=&quot;ClearTextPassword&quot; value=&quot;xxxxxx&quot; /&gt;
&lt;/HiAPI&gt;
&lt;/packageSourceCredentials&gt;
&lt;/configuration&gt;
</code></pre>
</li>
<li><p>In the dotnet project file, add the package reference.</p>
<pre><code class="lang-xml">&lt;ItemGroup&gt;
&lt;PackageReference Include=&quot;HiNc&quot; Version=&quot;3.1.*&quot; /&gt;
&lt;!--optional--&gt;
&lt;PackageReference Include=&quot;Hi.Wpf&quot; Version=&quot;*&quot; /&gt;
&lt;/ItemGroup&gt;
</code></pre>
</li>
<li><p>In the program file, setting the HiNC application initialization and finalization.</p>
<pre><code class="lang-csharp" name="SampleCode">using Hi.Disp;
using Hi.HiNcKits;
using Hi.Licenses;
using Hi.MongoUtils;
using System;
namespace Sample
{
/// &lt;summary&gt;
/// A sample class demonstrating initialization and usage of the HiAPI framework.
/// Shows the basic setup of display engine, MongoDB server, licensing, and other core functionality.
/// &lt;/summary&gt;
/// &lt;remarks&gt;
/// This example serves as an entry point for those getting started with HiAPI.
/// It demonstrates proper initialization and teardown of key components.
/// ### Source Code
/// [!code-csharp[SampleCode](~/../Hi.Sample/HelloHiAPI.cs)]
/// &lt;/remarks&gt;
public static class HelloHiAPI
{
static int Main(string[] args)
{
Console.WriteLine(&quot;HiAPI starting.&quot;);
LocalApp.AppBegin();
Console.WriteLine(&quot;Hello World! HiAPI.&quot;);
LocalApp.AppEnd();
Console.WriteLine(&quot;HiAPI exited.&quot;);
return 0;
}
}
}
</code></pre></li>
</ol>
<h2 id="sample-code-to-start-a-">Sample Code to Start a <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></h2>
<p>See the following sample code to start a HiAPI application.</p>
<ul>
<li><a class="xref" href="../../sample/Sample.Machining.DemoBuildMachiningProject.html">DemoBuildMachiningProject</a>
Build a <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a>.</li>
<li><a class="xref" href="../../sample/Sample.Machining.DemoUseMachiningProject.html">DemoUseMachiningProject</a>
Load a <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> and run NC simulation.</li>
<li><a class="xref" href="../../sample/Sample.Machining.DemoRenderingMachiningProcessAndStripPosSelection.html">DemoRenderingMachiningProcessAndStripPosSelection</a>
Apply <a class="xref" href="../../../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> to 3D canvas with user-interaction in windows platform.</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,193 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HiAPI Overview | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="HiAPI Overview | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="hiapi-overview">HiAPI Overview</h1>
<p>HiAPI is a C# software development kit for machining simulation. It provides libraries for NC motion simulation, collision detection, geometry removal simulation, milling force simulation, optimization, and more.</p>
<h2 id="nuget-packages">Nuget Packages</h2>
<p>The HiAPI is applied by the form of Nuget Packages. You have to apply <code>HiNc</code> nuget package and its dependencies. They include all the functionality of the HiNC software, but do not include the GUI components.</p>
<p>The packages can be downloaded and installed from the HiAPI NuGet Server. The server URL is:</p>
<p><a href="%5Bhttps://superhightech-gitea.webredirect.org/api/packages/HiAPI/nuget/index.json">https://superhightech-gitea.webredirect.org/api/packages/HiAPI/nuget/index.json</a></p>
<div class="NOTE">
<h5>Note</h5>
<ul>
<li>Authentication is required to access the server (username and password)</li>
<li>Direct browser access to the URL will not show meaningful content. Since the server is designed for Visual Studio NuGet package management. For more information about NuGet, visit <a href="https://www.nuget.org/">NuGet.org</a></li>
</ul>
</div>
<h3 id="package-dependencies">Package Dependencies</h3>
<p>The <code>HiNc</code> package has the following dependency chain:</p>
<pre><code class="lang-mermaid">graph LR
HiGeom --&gt; HiDisp
HiDisp --&gt; HiCbtr
HiCbtr --&gt; HiMech
HiMech --&gt; HiUniNc
HiUniNc --&gt; HiNc
HiDisp --&gt; Hi.WinForm
HiDisp --&gt; Hi.Wpf
HiDisp --&gt; Hi.Webapi
style HiNc fill:#d3d,stroke:#333,stroke-width:2px
</code></pre>
<h3 id="ui-framework-support">UI Framework Support</h3>
<p>If you need to develop Windows desktop applications:</p>
<ul>
<li>For Windows Forms applications, use the <code>Hi.WinForm</code> package.</li>
<li>For WPF applications, use the <code>Hi.Wpf</code> package.</li>
<li>For Webapi applications, use <code>Hi.Webapi</code> package.</li>
</ul>
<div class="NOTE">
<h5>Note</h5>
<p>See <a href="basic/rendering/rendering-canvas/custom-implementation.html">Building Your Own Rendering Canvas</a> to build the rendering canvas cross-platform.</p>
</div>
<h2 id="rendering-canvas-source-code-repositories">Rendering Canvas Source Code Repositories</h2>
<ul>
<li>Hi.WinForm
<ul>
<li><a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.WinForm.git">https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.WinForm.git</a></li>
</ul>
</li>
<li>Hi.Wpf
<ul>
<li><a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.Wpf.git">https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.WinForm.git</a></li>
</ul>
</li>
<li>Hi.Webapi
<ul>
<li><a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.Webapi.git">https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.Webapi.git</a></li>
</ul>
</li>
</ul>
<h2 id="hiapi-sample-code">HiAPI Sample Code</h2>
<p>See <a href="../sample/Sample.Machining.html">Sample Code</a> or download the repositories to get more samples. The following sample repository demonstrate various aspects of using HiAPI for machining simulation:</p>
<ul>
<li>Hi.Sample
<ul>
<li><a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.Sample.git">https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.Sample.git</a></li>
<li>The repository generally contains the sample codes without using rendering canvas.</li>
</ul>
</li>
<li>Hi.Sample.Wpf
<ul>
<li><a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.Sample.Wpf.git">https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.Sample.Wpf.git</a></li>
<li>The repository generally contains the sample code that requires rendering canvas.</li>
</ul>
</li>
<li>Hi.Sample.Webapi
<ul>
<li><a href="https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.Sample.Webapi.git">https://superhightech-gitea.webredirect.org/HiNC-Deploy/Hi.Sample.Webapi.git</a></li>
<li>The repository shows how to use Hi.Webapi nuget package.</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,137 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>System Requirements | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="System Requirements | HiAPI-C# 2025 ">
<link rel="icon" href="../../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../../public/docfx.min.css">
<link rel="stylesheet" href="../../public/main.css">
<meta name="docfx:navrel" content="../../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../../index.html">
<img id="logo" class="svg" src="../../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="">
<h1 id="system-requirements">System Requirements</h1>
<ul>
<li><strong>Operating System</strong>:
<ul>
<li>Windows 10 or later</li>
<li>Ubuntu 22.04 LTS</li>
</ul>
</li>
<li><strong>CPU Architecture</strong>: x64 (ARM not yet supported)</li>
<li><strong>Runtime</strong>: .NET 9.0 or later</li>
<li><strong>Memory (RAM)</strong>:
<ul>
<li>Minimum: 8GB RAM (suitable for low-resolution models)</li>
<li>Recommended: 128GB RAM or higher (for large and detailed models)</li>
</ul>
</li>
<li><strong>Graphics</strong>:
<ul>
<li>OpenGL 4.4 compatible graphics card or integrated graphics</li>
<li>Most computers manufactured within the last 15 years meet this requirement</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,186 @@
<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="system-requirements.html" name="" title="System Requirements">System Requirements</a>
</li>
<li>
<a href="getting-started/index.html" name="" title="Getting Started">Getting Started</a>
</li>
<li>
<span class="expand-stub"></span>
<a href="build-hinc/index.html" name="" title="Sketch to Build HiNC GUI">Sketch to Build HiNC GUI</a>
<ul class="nav level2">
<li>
<a href="build-hinc/general-rules.html" name="" title="General Rules">General Rules</a>
</li>
<li>
<a href="build-hinc/initialize-hiapi.html" name="" title="Initialize HiAPI">Initialize HiAPI</a>
</li>
<li>
<a href="build-hinc/main-panel.html" name="" title="Main Panel">Main Panel</a>
</li>
<li>
<a href="build-hinc/message-section-on-main-panel.html" name="" title="Bottom Message Bar">Bottom Message Bar</a>
</li>
<li>
<a href="build-hinc/renderingcanvas-tool-bar.html" name="" title="RenderingCanvas Tool Bar">RenderingCanvas Tool Bar</a>
</li>
<li>
<span class="expand-stub"></span>
<a href="build-hinc/player/index.html" name="" title="Player Panel">Player Panel</a>
<ul class="nav level3">
<li>
<a href="build-hinc/player/player-tool-bar.html" name="" title="Player Tool Bar">Player Tool Bar</a>
</li>
<li>
<a href="build-hinc/player/player-extended-renderingcanvas-tool-bar.html" name="" title="Player Extended RenderingCanvas Tool Bar">Player Extended RenderingCanvas Tool Bar</a>
</li>
<li>
<a href="build-hinc/player/selected-step-info-panel.html" name="" title="Selected-Step Info Panel">Selected-Step Info Panel</a>
</li>
</ul>
</li>
<li>
<a href="build-hinc/session-message-panel/index.html" name="" title="Session Message Panel">Session Message Panel</a>
</li>
<li>
<span class="expand-stub"></span>
<a href="build-hinc/index.html" name="" title="Preference">Preference</a>
<ul class="nav level3">
<li>
<a href="build-hinc/preference/index.html" name="" title="Preference Menu">Preference Menu</a>
</li>
<li>
<a href="build-hinc/preference/graphic-cache-dropdown.html" name="" title="Graphic-Cache Dropdown">Graphic-Cache Dropdown</a>
</li>
<li>
<a href="build-hinc/preference/language-selection-submenu.html" name="" title="Language Selection">Language Selection</a>
</li>
<li>
<a href="build-hinc/preference/step-present-preference-page.html" name="" title="Step Present Preference">Step Present Preference</a>
</li>
</ul>
</li>
<li>
<a href="build-hinc/widget/vec3d/index.html" name="" title="Vec3d Control">Vec3d Control</a>
</li>
<li>
<span class="expand-stub"></span>
<a href="build-hinc/geom/index.html" name="" title="Geometry Panels">Geometry Panels</a>
<ul class="nav level3">
<li>
<a href="build-hinc/geom/box3d-control.html" name="" title="Box3d Control">Box3d Control</a>
</li>
<li>
<a href="build-hinc/geom/cylindroid-control.html" name="" title="Cylindroid Control">Cylindroid Control</a>
</li>
<li>
<a href="build-hinc/geom/geom-combination-control.html" name="" title="Geometry Combination Control">Geometry Combination Control</a>
</li>
<li>
<a href="build-hinc/geom/geom-manage-control.html" name="" title="Geometry Management Panel">Geometry Management Panel</a>
</li>
<li>
<a href="build-hinc/geom/runtime-geom-panel.html" name="" title="Runtime Geometry Panel">Runtime Geometry Panel</a>
</li>
<li>
<a href="build-hinc/geom/stlfile-control.html" name="" title="STL File Control">STL File Control</a>
</li>
<li>
<a href="build-hinc/geom/transformation-geom-control.html" name="" title="Transformation Geometry Control">Transformation Geometry Control</a>
</li>
</ul>
</li>
<li>
<span class="expand-stub"></span>
<a href="build-hinc/index.html" name="" title="Mechanism">Mechanism</a>
<ul class="nav level3">
<li>
<a href="build-hinc/mech/topo/transformers.html" name="" title="Transformers">Transformers</a>
</li>
<li>
<a href="build-hinc/mech/fixture-page.html" name="" title="Fixture Page">Fixture Page</a>
</li>
<li>
<a href="build-hinc/mech/workpiece-page.html" name="" title="Workpiece Page">Workpiece Page</a>
</li>
</ul>
</li>
<li>
<a href="build-hinc/controller/index.html" name="" title="Controller Page">Controller Page</a>
</li>
</ul>
</li>
<li>
<span class="expand-stub"></span>
<a>Logic</a>
<ul class="nav level2">
<li>
<a href="basic/geom/basic-geometry.html" name="" title="Basic Geometry">Basic Geometry</a>
</li>
<li>
<span class="expand-stub"></span>
<a href="basic/rendering/index.html" name="" title="Rendering">Rendering</a>
<ul class="nav level3">
<li>
<a href="basic/rendering/rendering-canvas/index.html" name="" title="Using RenderingCanvas with DispEngine">Using RenderingCanvas with DispEngine</a>
</li>
<li>
<a href="basic/rendering/rendering-canvas/custom-implementation.html" name="" title="Building Your Own Rendering Canvas">Building Your Own Rendering Canvas</a>
</li>
<li>
<a href="basic/rendering/drawing/index.html" name="" title="Drawing">Drawing</a>
</li>
</ul>
</li>
<li>
<span class="expand-stub"></span>
<a>Mechanism Topology</a>
<ul class="nav level3">
<li>
<a href="basic/mechanism/index.html" name="" title="Overview">Overview</a>
</li>
<li>
<a href="basic/mechanism/Topo/index.html" name="" title="Topology Structure">Topology Structure</a>
</li>
<li>
<a href="basic/mechanism/transformers/index.html" name="" title="Transformers">Transformers</a>
</li>
<li>
<a href="basic/mechanism/render-topology/index.html" name="" title="Render Topology">Render Topology</a>
</li>
</ul>
</li>
<li>
<a href="basic/common/xml-io.html" name="" title="XML IO">XML IO</a>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
File diff suppressed because one or more lines are too long