deploy fixed MRR drift and webservice CylindroidHolder buckle branch update issue.

This commit is contained in:
2026-05-28 19:42:05 +08:00
parent d7836db45f
commit 95b5790622
140 changed files with 8079 additions and 14099 deletions
@@ -209,6 +209,88 @@ Silently no-ops when <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematic
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_PivotTransformationSyntax_examples">Examples</h2>
<p>Identity probe — a <code>TestDeps.Kinematics</code> stub that
makes <code>McToPn</code> pass through XYZ and return a fixed <code>UnitZ</code>
normal, so <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_MakePivotTransformMat_Hi_Numerical_Xyzabc_IMachineKinematics_Hi_Geom_Vec3d_">MakePivotTransformMat(IMachineKinematics, Vec3d)</a>'s
four-basis probing returns identity <code>K(0)</code> and <code>K(abc)</code>,
and the product <code>K(0) * K(abc).GetInverse()</code> collapses to
identity. With no current or previous <code>MachineCoordinateState</code>,
endpoint ABC defaults to <code>(0,0,0)</code>; no dynamic entries exist
yet so the entry is tagged <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_KindStatic">KindStatic</a>.
Case for the dep-guard contract only; the real kinematics paths are
covered by the cases below.
#BeforeBuild:</p>
<pre><code class="lang-csharp">{}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"ProgramToMcTransform": [
{
"Source": "PivotTransform",
"Kind": "Static",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
}
]
}</code></pre>
<p>Real <a class="xref" href="Hi.Numerical.Xyzabc.XyzabcSolver.html">XyzabcSolver</a> (table-A / head-B 5-axis layout
<code>[O][Z][A][w];[O][Y][X][B][S][t]</code>) with current block declaring
<code>MachineCoordinateState.A = 45</code> — endpoint ABC =
<code>(π/4, 0, 0)</code> radians. Table-side A rotation moves the tool
position in the workpiece frame, so
<code>MakePivotTransformMat</code>'s four-basis probe returns a
non-identity rigid matrix. The exact Mat4d below was captured from
<code>BuildAndDump</code>'s actual output (per gotcha #2: rad/deg trig
drift, always dump first):
#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "A": 45 } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "A": 45 },
"ProgramToMcTransform": [
{
"Source": "PivotTransform",
"Kind": "Static",
"Mat4d": [
1, 0, 0, 0,
0, 0.7071067811865475, -0.7071067811865475, 0,
0, 0.7071067811865475, 0.7071067811865475, 0,
0, 0, 0, 1
]
}
]
}</code></pre>
<p>Stub <code>TestDeps.Kinematics</code> with a pre-existing Dynamic
chain entry on the current block (as <a class="xref" href="Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html">G43p4RtcpSyntax</a>
would have written when RTCP is dynamic). <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_HasDynamicEntry_System_Text_Json_Nodes_JsonObject_">HasDynamicEntry(JsonObject)</a>
returns true so the PivotTransform entry is tagged
<a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_KindDynamic">KindDynamic</a> even though the math
itself collapses to identity:
#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"ProgramToMcTransform": [
{
"Source": "ToolHeightCompensation",
"Kind": "Dynamic",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
}
]
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"ProgramToMcTransform": [
{
"Source": "ToolHeightCompensation",
"Kind": "Dynamic",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
},
{
"Source": "PivotTransform",
"Kind": "Dynamic",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
}
]
}</code></pre>