deploy webservice static-file routing for docsite folder URLs, per-instance step-cache db, and constant-height panel title bars.

This commit is contained in:
2026-08-27 14:51:37 +08:00
parent 1fc510af5e
commit 2a98ae7556
1468 changed files with 182837 additions and 18888 deletions
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class SiemensFrameTable | HiAPI-C# 2025 ">
<meta name="description" content="Sinumerik settable work coordinate frames ($P_UIFR[n]). Models G54–G57 (ISO-compatible), G505–G599 (extended Siemens), and G500 (cancel — always zero). On real Sinumerik, $P_UIFR is a frame array containing translation, rotation, scale and mirror per entry. HiNC currently consumes only the translation component, so this table stores per id. $P_UIFR is NOT in the machine data table — therefore this is a separate dependency from (which holds MD-prefixed OEM machine data such as MD30300 axis type, MD34010 reference position, etc.).">
<meta name="description" content="Sinumerik settable work coordinate frames ($P_UIFR[n]). Models G54–G57 (ISO-compatible), G505–G599 (extended Siemens), and G500 (cancel — always zero). On real Sinumerik, $P_UIFR is a frame array containing translation, rotation, scale and mirror per entry. HiNC currently consumes only the translation component, so this table stores per id. $P_UIFR is NOT in the machine data table — therefore this is a separate dependency from (which holds MD-prefixed OEM machine data such as MD30300 axis type, MD34010 reference position, etc.). Deliberately not : settable frames are setting data on the control — a $P_UIFR write from the program survives reset and power-off, so a replayed session must see the values the previous run wrote.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@@ -109,6 +109,12 @@ dependency from <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensMa
MD-prefixed OEM machine data such as MD30300 axis type, MD34010 reference
position, etc.).
</p>
<p>
Deliberately not <a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a>: settable frames
are setting data on the control — a <code>$P_UIFR</code> write from the
program survives reset and power-off, so a replayed session must see
the values the previous run wrote.
</p>
</div>
<div class="markdown conceptual"></div>
@@ -261,6 +267,46 @@ position, etc.).
</h2>
<a id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_AxisOffsets_" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.AxisOffsets*"></a>
<h3 id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_AxisOffsets" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.AxisOffsets">
AxisOffsets
</h3>
<div class="markdown level1 summary"><p>Per-axis translation components beyond X/Y/Z, keyed by G-code id then
uppercase axis letter (e.g. <code>[&ldquo;G54&rdquo;][&ldquo;C&rdquo;] = 12.5</code>). Real
Sinumerik frames carry a translation per machine axis including
rotaries (<code>$P_UIFR[1,C,TR]</code>); X/Y/Z stay in <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_Frames">Frames</a>
so existing consumers (<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_GetCoordinateOffset_System_String_">GetCoordinateOffset(string)</a>) are
unaffected. Absent entries read as 0 — matching Sinumerik where every
allocated frame axis defaults to zero. Rotary components are
recorded/read through the $P_UIFR bridge; the transform chain does
not consume them yet (frame work owns that).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Dictionary&lt;string, Dictionary&lt;string, double&gt;&gt; AxisOffsets { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a>&gt;&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_CoordinateIds_" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.CoordinateIds*"></a>
<h3 id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_CoordinateIds" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.CoordinateIds">
@@ -362,6 +408,53 @@ G500 is treated specially (always zero) and is not stored here.</p>
</h2>
<a id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_GetAxisOffset_" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.GetAxisOffset*"></a>
<h3 id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_GetAxisOffset_System_String_System_String_" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.GetAxisOffset(System.String,System.String)">
GetAxisOffset(string, string)
</h3>
<div class="markdown level1 summary"><p>Reads one axis translation component of a frame
(<code>$P_UIFR[n,axis,TR]</code> read side). X/Y/Z route into
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_Frames">Frames</a>; any other axis letter reads
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_AxisOffsets">AxisOffsets</a> with 0 as the allocated-but-unset default.
<code>G500</code> is always 0. Returns <code>null</code> only when
<code class="paramref">coordId</code> is not an allocated frame — the caller's
lookup chain then falls through (vacant).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public double? GetAxisOffset(string coordId, string axis)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>coordId</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Frame G-code id (e.g. <code>G54</code>, <code>G505</code>).</p>
</dd>
<dt><code>axis</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Uppercase axis letter (e.g. <code>X</code>, <code>C</code>).</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a>?</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_GetCoordinateOffset_" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.GetCoordinateOffset*"></a>
<h3 id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_GetCoordinateOffset_System_String_" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.GetCoordinateOffset(System.String)">
@@ -486,6 +579,51 @@ Since the folder can be moving with the configuration file.</p>
<a id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_SetAxisOffset_" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.SetAxisOffset*"></a>
<h3 id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_SetAxisOffset_System_String_System_String_System_Double_" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.SetAxisOffset(System.String,System.String,System.Double)">
SetAxisOffset(string, string, double)
</h3>
<div class="markdown level1 summary"><p>Writes one axis translation component of a frame
(<code>$P_UIFR[n,axis,TR]=…</code> write side). X/Y/Z replace the
component inside <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_Frames">Frames</a> (a fresh <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a> is
installed — never in-place mutation, so aliased vectors stay
unaffected); other axis letters land in <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_AxisOffsets">AxisOffsets</a>.
<code>G500</code> writes are ignored, mirroring
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_SetCoordinateOffset_System_String_Hi_Geom_Vec3d_">SetCoordinateOffset(string, Vec3d)</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void SetAxisOffset(string coordId, string axis, double value)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>coordId</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Frame G-code id.</p>
</dd>
<dt><code>axis</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Uppercase axis letter.</p>
</dd>
<dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>New translation component value.</p>
</dd>
</dl>
<a id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_SetCoordinateOffset_" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.SetCoordinateOffset*"></a>
<h3 id="Hi_NcParsers_Dependencys_Siemens_SiemensFrameTable_SetCoordinateOffset_System_String_Hi_Geom_Vec3d_" data-uid="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.SetCoordinateOffset(System.String,Hi.Geom.Vec3d)">