fix SoftNcRunner GM code normalization.

This commit is contained in:
2026-05-06 13:21:19 +08:00
parent 0fe9497552
commit 2f57932000
1238 changed files with 69405 additions and 22511 deletions
@@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Interface ITransformationDef | HiAPI-C# 2025 ">
<meta name="description" content="Chain of named ProgramXyz → MachineCoordinate transformation entries. Stored as a of entries, each with &amp;ldquo;Source&amp;rdquo; and &amp;ldquo;Mat4d&amp;rdquo; keys. Each contributing adds or replaces its own entry by source name. composes all entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n].">
<meta name="description" content="Chain of named ProgramXyz → MachineCoordinate transformation entries. Stored as a of entries, each with &amp;ldquo;Source&amp;rdquo;, &amp;ldquo;Kind&amp;rdquo;, and &amp;ldquo;Mat4d&amp;rdquo; keys. Each contributing adds or replaces its own entry by source name. composes entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. Kind contour-validity classification. Each entry is either: &quot;Static&quot; — the Mat4d is valid for any point along the contour. Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable blocks are all Static.&quot;Dynamic&quot; — the Mat4d is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composition still yields a correct endpoint MC, but the matrix is not contour-valid: intermediate CL-point positions cannot be derived by applying it to an interpolated ProgramXyz. The semantic layer () handles per-step IK separately. Use to detect the presence of any Dynamic entry on this block.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@@ -98,10 +98,26 @@ Interface ITransformationDef
</div>
<div class="markdown summary"><p>Chain of named ProgramXyz → MachineCoordinate transformation entries.
Stored as a <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonarray">JsonArray</a> of entries, each with &ldquo;Source&rdquo; and &ldquo;Mat4d&rdquo; keys.
Each contributing <a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a> adds or replaces its own entry by source name.
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a> composes all entries in order:
<code>McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]</code>.</p>
Stored as a <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonarray">JsonArray</a> of entries, each with
<code>&ldquo;Source&rdquo;</code>, <code>&ldquo;Kind&rdquo;</code>, and <code>&ldquo;Mat4d&rdquo;</code> keys.
Each contributing <a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a> adds or replaces its own
entry by source name.
<a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_GetComposedTransform_System_Text_Json_Nodes_JsonObject_">GetComposedTransform(JsonObject)</a>
composes entries in order: <code>McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]</code>.</p>
<p>
<b><code>Kind</code> contour-validity classification.</b> Each entry is either:
<ul><li><code>"Static"</code> — the Mat4d is valid for any point along the contour.
Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable
blocks are all Static.</li><li><code>"Dynamic"</code> — the Mat4d is a <i>block-endpoint snapshot</i> of a
rotary-state-dependent transform (RTCP rotary-dynamic). Composition still
yields a correct endpoint MC, but the matrix is not contour-valid:
intermediate CL-point positions cannot be derived by applying it to an
interpolated ProgramXyz. The semantic layer
(<a class="xref" href="Hi.NcParsers.Semantics.ClLinearMotionSemantic.html">ClLinearMotionSemantic</a>) handles per-step IK
separately.</li></ul>
Use <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_HasDynamicEntry_System_Text_Json_Nodes_JsonObject_">HasDynamicEntry(JsonObject)</a> to detect
the presence of any Dynamic entry on this block.
</div>
<div class="markdown conceptual"></div>
@@ -145,9 +161,10 @@ Each contributing <a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INc
<h2 id="Hi_NcParsers_Keywords_ITransformationDef_examples">Examples</h2>
<pre><code class="lang-csharp">"ProgramToMcTransform": [
{"Source": "TiltTransform", "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]},
{"Source": "ToolHeightCompensation", "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1]},
{"Source": "CoordinateOffset", "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1]}
{"Source": "TiltTransform", "Kind": "Static", "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]},
{"Source": "ToolHeightCompensation", "Kind": "Static", "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,99.98,1]},
{"Source": "CoordinateOffset", "Kind": "Static", "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 10,20,-100,1]},
{"Source": "PivotTransform", "Kind": "Dynamic", "Mat4d": [cosC,sinC,0,0, -sinC,cosC,0,0, 0,0,1,0, px,py,pz,1]}
]</code></pre>