This commit is contained in:
2026-09-15 01:12:50 +08:00
parent 2db889ad89
commit 1a75503105
99 changed files with 4168 additions and 726 deletions
@@ -191,6 +191,44 @@ begin reports that gap once through these helpers.</p>
<h3 id="Hi_NcParsers_Dependencys_StrokeLimitUtil_Tolerance" data-uid="Hi.NcParsers.Dependencys.StrokeLimitUtil.Tolerance">
Tolerance
</h3>
<div class="markdown level1 summary"><p>Slack, in mm or degrees, past which a position counts as over a
stroke limit. A machine coordinate that arrives through a work
offset, a tilt and a kinematic solve carries rounding noise of the
order of 1e-12; a program that parks an axis exactly on its limit
(CHEM20180926: <code>G28 Z0</code> on a machine whose Z travel ends at 0)
used to be reported as &ldquo;0.0000 &gt; 0.0000&rdquo; on every such block and
step. A tenth of a micrometre / microdegree is far below any
control's resolution and above any arithmetic noise.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const double Tolerance = 0.0001</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
@@ -292,6 +330,101 @@ continuously legitimately has none and cannot be given one.</p>
<a id="Hi_NcParsers_Dependencys_StrokeLimitUtil_IsWithinRotaryTravel_" data-uid="Hi.NcParsers.Dependencys.StrokeLimitUtil.IsWithinRotaryTravel*"></a>
<h3 id="Hi_NcParsers_Dependencys_StrokeLimitUtil_IsWithinRotaryTravel_System_Double_System_Nullable_System_Double__System_Nullable_System_Double__" data-uid="Hi.NcParsers.Dependencys.StrokeLimitUtil.IsWithinRotaryTravel(System.Double,System.Nullable{System.Double},System.Nullable{System.Double})">
IsWithinRotaryTravel(double, double?, double?)
</h3>
<div class="markdown level1 summary"><p>Whether a rotary angle (degrees) lies within a travel given by its
two ends, either of which may be absent. A span of a full turn or
more admits every angle; otherwise the angle is wrapped into the
turn starting at the negative end before the test.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool IsWithinRotaryTravel(double angle_deg, double? negative_deg, double? positive_deg)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>angle_deg</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>The angle to test.</p>
</dd>
<dt><code>negative_deg</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a>?</dt>
<dd><p>The negative end, or null when unbounded.</p>
</dd>
<dt><code>positive_deg</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a>?</dt>
<dd><p>The positive end, or null when unbounded.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_StrokeLimitUtil_RotaryAdmissibility_" data-uid="Hi.NcParsers.Dependencys.StrokeLimitUtil.RotaryAdmissibility*"></a>
<h3 id="Hi_NcParsers_Dependencys_StrokeLimitUtil_RotaryAdmissibility_System_Collections_Generic_IEnumerable_Hi_NcParsers_Dependencys_INcDependency__" data-uid="Hi.NcParsers.Dependencys.StrokeLimitUtil.RotaryAdmissibility(System.Collections.Generic.IEnumerable{Hi.NcParsers.Dependencys.INcDependency})">
RotaryAdmissibility(IEnumerable&lt;INcDependency&gt;)
</h3>
<div class="markdown level1 summary"><p>The rotary-travel admissibility test for an inverse-kinematics solve
(<a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Vec3d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__">OrientationToMcAbc(Vec3d, Func&lt;Vec3d, bool&gt;, out Vec3d)</a>):
accepts a machine ABC (radians) whose configured A/B/C limits on the
list's <a class="xref" href="Hi.NcParsers.Dependencys.IStrokeLimitConfig.html">IStrokeLimitConfig</a> (degrees) are all met, so a
tilt solve prefers the branch the machine can reach. Null — admit
everything — when the list carries no stroke config or no rotary
limit at all. An axis whose two limits span a full turn or more is
always admissible; a narrower span is tested on the angle wrapped
into the turn that starts at the negative limit (the solver reports
atan2 angles, the limits are wherever the builder put them); a NaN
component (an axis the chain does not have) is not tested.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static Func&lt;Vec3d, bool&gt; RotaryAdmissibility(IEnumerable&lt;INcDependency&gt; dependencyList)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>dependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1">IEnumerable</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd><p>The runner's effective dependency list.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;<a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;</dt>
<dd></dd>
</dl>
</article>