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
@@ -154,6 +154,116 @@ Class MillingTraining
<h3 id="Hi_MillingForces_Training_MillingTraining_DesignMatrixSvdRelativeTol" data-uid="Hi.MillingForces.Training.MillingTraining.DesignMatrixSvdRelativeTol">
DesignMatrixSvdRelativeTol
</h3>
<div class="markdown level1 summary"><p>Relative singular-value cutoff (σ_i/σ_max on σ(M)) for the truncated
pseudo-inverse of the lead-para fit when
<a class="xref" href="Hi.MillingForces.Training.MillingTraining.html#Hi_MillingForces_Training_MillingTraining_EnableDesignMatrixSolver">EnableDesignMatrixSolver</a> is on. Replaces the legacy
absolute gap (1e-7) applied to σ(MᵀM) = σ(M)², whose effective cut
depends on the data scale.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static double DesignMatrixSvdRelativeTol</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>
<h3 id="Hi_MillingForces_Training_MillingTraining_EnableCwePhasePairing" data-uid="Hi.MillingForces.Training.MillingTraining.EnableCwePhasePairing">
EnableCwePhasePairing
</h3>
<div class="markdown level1 summary"><p>When enabled, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.concurrent.concurrentdictionary-2">GatherAndBuild(ICuttingPara, ConcurrentDictionary&lt;int, List&lt;ITimeShot&gt;&gt;, ClStrip, SampleFlag, bool, double, IProgress&lt;IMessage&gt;, CancellationToken, out double, out int)</a> determines each step's
rotation phase by the CWE block-pairing detector
(<span class="xref">Hi.MillingForces.Training.MillingPhasePairing</span>) instead of the self-bootstrapped
averaged-basis lead parameter, and replaces the averaged-basis outlier
pre-filter by a residual-based pass. Applies to one-flute and
symmetric two-flute cutters in light radial side cuts (contact arc
smaller than the flute pitch); when its preconditions do not hold the
training falls back to the legacy lead path with a warning.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool EnableCwePhasePairing</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h3 id="Hi_MillingForces_Training_MillingTraining_EnableDesignMatrixSolver" data-uid="Hi.MillingForces.Training.MillingTraining.EnableDesignMatrixSolver">
EnableDesignMatrixSolver
</h3>
<div class="markdown level1 summary"><p>When enabled, the least-squares fits are solved directly on the N-by-p
design matrix M (thin QR, plus SVD of its R factor for the lead-para
truncated pseudo-inverse) instead of forming the normal-equation matrix
MᵀM first. Forming MᵀM squares the condition number
(κ(MᵀM) = κ(M)²), which halves the usable precision and blurs the rank
structure; the direct path keeps σ(M) intact at the same p-by-p solve
size. Experimental flag for the QR-vs-MᵀM solver comparison.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static bool EnableDesignMatrixSolver</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd></dd>
</dl>
<h3 id="Hi_MillingForces_Training_MillingTraining_EnableMzLeverWeighting" data-uid="Hi.MillingForces.Training.MillingTraining.EnableMzLeverWeighting">
EnableMzLeverWeighting
@@ -220,6 +330,89 @@ Don't apply this option.</p>
<h3 id="Hi_MillingForces_Training_MillingTraining_MissingEngagementAbortRatio" data-uid="Hi.MillingForces.Training.MillingTraining.MissingEngagementAbortRatio">
MissingEngagementAbortRatio
</h3>
<div class="markdown level1 summary"><p>Abort threshold on the fraction of touched, force-bearing steps whose
milling-step engagement could not be used during sample gathering —
either the luggage row was unreadable, or the row was present but the
engagement was never built (physics inactive at simulation time). At
or below the threshold the misses are reported as a summary warning
and training continues on the remaining steps; above it the training
aborts with a <code>ConfigurationError</code> instead of silently building a
model from a fraction of the play (one such degraded sweep cell once
produced outlier coefficients that were nearly read as a resolution
effect). Set to <code>1</code> to never abort.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static double MissingEngagementAbortRatio</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>
<h3 id="Hi_MillingForces_Training_MillingTraining_ReTrainAnchorOutputScale" data-uid="Hi.MillingForces.Training.MillingTraining.ReTrainAnchorOutputScale">
ReTrainAnchorOutputScale
</h3>
<div class="markdown level1 summary"><p>Weight scale of the virtual anchor samples that pull a
<a class="xref" href="Hi.MillingForces.Training.MillingTraining.html#Hi_MillingForces_Training_MillingTraining_GatherAndGetUpdate_System_Collections_Concurrent_ConcurrentDictionary_System_Int32_System_Collections_Generic_List_Hi_Mapping_ITimeShot___Hi_CutterLocations_ClStrips_ClStrip_Hi_MillingForces_Fittings_ICuttingPara_Hi_MillingForces_Fittings_SampleFlag_System_Double_System_IProgress_Hi_Common_Messages_IMessage__System_Threading_CancellationToken_">GatherAndGetUpdate(ConcurrentDictionary&lt;int, List&lt;ITimeShot&gt;&gt;, ClStrip, ICuttingPara, SampleFlag, double, IProgress&lt;IMessage&gt;, CancellationToken)</a> (ReTrain) result back toward its seed
parameter. The anchors are generated at
<code>scale * Σoutput / ElementNum</code> per coefficient, so their curvature
grows as N² against the data's N — at large sample counts they dominate
and the result reproduces the seed.</p>
<p>
Set to <code>0</code> to make ReTrain purely data-driven: the seed then only
supplies the phase alignment and the outlier scoring, which turns
ReTrain into an <b>external-lead identifiability instrument</b> ("with a
known-good lead but no prior, what do the data actually say?"). The
default 0.1 keeps the historical seed-anchored ridge behaviour.
</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static double ReTrainAnchorOutputScale</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="properties">Properties
</h2>
@@ -390,8 +583,8 @@ Don't apply this option.</p>
<a id="Hi_MillingForces_Training_MillingTraining_Convert_" data-uid="Hi.MillingForces.Training.MillingTraining.Convert*"></a>
<h3 id="Hi_MillingForces_Training_MillingTraining_Convert_Hi_MillingForces_Fittings_ICuttingPara_Hi_MillingForces_Fittings_ICuttingPara_Hi_Milling_Apts_GeneralApt_System_Double_System_Double_System_IProgress_System_Object__System_Threading_CancellationToken_" data-uid="Hi.MillingForces.Training.MillingTraining.Convert(Hi.MillingForces.Fittings.ICuttingPara,Hi.MillingForces.Fittings.ICuttingPara,Hi.Milling.Apts.GeneralApt,System.Double,System.Double,System.IProgress{System.Object},System.Threading.CancellationToken)">
Convert(ICuttingPara, ICuttingPara, GeneralApt, double, double, IProgress&lt;object&gt;, CancellationToken)
<h3 id="Hi_MillingForces_Training_MillingTraining_Convert_Hi_MillingForces_Fittings_ICuttingPara_Hi_MillingForces_Fittings_ICuttingPara_Hi_Milling_Apts_GeneralApt_System_Double_System_Double_System_IProgress_Hi_Common_Messages_IMessage__System_Threading_CancellationToken_" data-uid="Hi.MillingForces.Training.MillingTraining.Convert(Hi.MillingForces.Fittings.ICuttingPara,Hi.MillingForces.Fittings.ICuttingPara,Hi.Milling.Apts.GeneralApt,System.Double,System.Double,System.IProgress{Hi.Common.Messages.IMessage},System.Threading.CancellationToken)">
Convert(ICuttingPara, ICuttingPara, GeneralApt, double, double, IProgress&lt;IMessage&gt;, CancellationToken)
</h3>
@@ -400,7 +593,7 @@ Don't apply this option.</p>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ICuttingPara Convert(ICuttingPara src, ICuttingPara resultParaTemplate, GeneralApt apt, double helixAngle_rad, double radialRakeAngle_rad, IProgress&lt;object&gt; messageHost, CancellationToken cancellationToken)</code></pre>
<pre><code class="lang-csharp hljs">public static ICuttingPara Convert(ICuttingPara src, ICuttingPara resultParaTemplate, GeneralApt apt, double helixAngle_rad, double radialRakeAngle_rad, IProgress&lt;IMessage&gt; messageProgress, CancellationToken cancellationToken)</code></pre>
</div>
<h4 class="section">Parameters</h4>
@@ -420,7 +613,7 @@ Don't apply this option.</p>
<dt><code>radialRakeAngle_rad</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>Radial rake angle in radians</p>
</dd>
<dt><code>messageHost</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a>&gt;</dt>
<dt><code>messageProgress</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="Hi.Common.Messages.IMessage.html">IMessage</a>&gt;</dt>
<dd><p>Message host for logging</p>
</dd>
<dt><code>cancellationToken</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken">CancellationToken</a></dt>
@@ -447,8 +640,8 @@ Don't apply this option.</p>
<a id="Hi_MillingForces_Training_MillingTraining_Convert_" data-uid="Hi.MillingForces.Training.MillingTraining.Convert*"></a>
<h3 id="Hi_MillingForces_Training_MillingTraining_Convert_Hi_MillingForces_ProfileMillingParas_LocalProfileMillingPara_System_Double_System_Double_System_IProgress_System_Object__System_Threading_CancellationToken_" data-uid="Hi.MillingForces.Training.MillingTraining.Convert(Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara,System.Double,System.Double,System.IProgress{System.Object},System.Threading.CancellationToken)">
Convert(LocalProfileMillingPara, double, double, IProgress&lt;object&gt;, CancellationToken)
<h3 id="Hi_MillingForces_Training_MillingTraining_Convert_Hi_MillingForces_ProfileMillingParas_LocalProfileMillingPara_System_Double_System_Double_System_IProgress_Hi_Common_Messages_IMessage__System_Threading_CancellationToken_" data-uid="Hi.MillingForces.Training.MillingTraining.Convert(Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara,System.Double,System.Double,System.IProgress{Hi.Common.Messages.IMessage},System.Threading.CancellationToken)">
Convert(LocalProfileMillingPara, double, double, IProgress&lt;IMessage&gt;, CancellationToken)
</h3>
@@ -457,7 +650,7 @@ Don't apply this option.</p>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static RakeFaceCuttingPara2d Convert(LocalProfileMillingPara src, double helixAngle_rad, double radialRakeAngle_rad, IProgress&lt;object&gt; messageHost, CancellationToken cancellationToken)</code></pre>
<pre><code class="lang-csharp hljs">public static RakeFaceCuttingPara2d Convert(LocalProfileMillingPara src, double helixAngle_rad, double radialRakeAngle_rad, IProgress&lt;IMessage&gt; messageProgress, CancellationToken cancellationToken)</code></pre>
</div>
<h4 class="section">Parameters</h4>
@@ -471,7 +664,7 @@ Don't apply this option.</p>
<dt><code>radialRakeAngle_rad</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>Radial rake angle in radians</p>
</dd>
<dt><code>messageHost</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a>&gt;</dt>
<dt><code>messageProgress</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="Hi.Common.Messages.IMessage.html">IMessage</a>&gt;</dt>
<dd><p>Message host for logging</p>
</dd>
<dt><code>cancellationToken</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken">CancellationToken</a></dt>
@@ -498,8 +691,8 @@ Don't apply this option.</p>
<a id="Hi_MillingForces_Training_MillingTraining_GatherAndGetUpdate_" data-uid="Hi.MillingForces.Training.MillingTraining.GatherAndGetUpdate*"></a>
<h3 id="Hi_MillingForces_Training_MillingTraining_GatherAndGetUpdate_System_Collections_Concurrent_ConcurrentDictionary_System_Int32_System_Collections_Generic_List_Hi_Mapping_ITimeShot___Hi_CutterLocations_ClStrips_ClStrip_Hi_MillingForces_Fittings_ICuttingPara_Hi_MillingForces_Fittings_SampleFlag_System_Double_System_IProgress_System_Object__System_Threading_CancellationToken_" data-uid="Hi.MillingForces.Training.MillingTraining.GatherAndGetUpdate(System.Collections.Concurrent.ConcurrentDictionary{System.Int32,System.Collections.Generic.List{Hi.Mapping.ITimeShot}},Hi.CutterLocations.ClStrips.ClStrip,Hi.MillingForces.Fittings.ICuttingPara,Hi.MillingForces.Fittings.SampleFlag,System.Double,System.IProgress{System.Object},System.Threading.CancellationToken)">
GatherAndGetUpdate(ConcurrentDictionary&lt;int, List&lt;ITimeShot&gt;&gt;, ClStrip, ICuttingPara, SampleFlag, double, IProgress&lt;object&gt;, CancellationToken)
<h3 id="Hi_MillingForces_Training_MillingTraining_GatherAndGetUpdate_System_Collections_Concurrent_ConcurrentDictionary_System_Int32_System_Collections_Generic_List_Hi_Mapping_ITimeShot___Hi_CutterLocations_ClStrips_ClStrip_Hi_MillingForces_Fittings_ICuttingPara_Hi_MillingForces_Fittings_SampleFlag_System_Double_System_IProgress_Hi_Common_Messages_IMessage__System_Threading_CancellationToken_" data-uid="Hi.MillingForces.Training.MillingTraining.GatherAndGetUpdate(System.Collections.Concurrent.ConcurrentDictionary{System.Int32,System.Collections.Generic.List{Hi.Mapping.ITimeShot}},Hi.CutterLocations.ClStrips.ClStrip,Hi.MillingForces.Fittings.ICuttingPara,Hi.MillingForces.Fittings.SampleFlag,System.Double,System.IProgress{Hi.Common.Messages.IMessage},System.Threading.CancellationToken)">
GatherAndGetUpdate(ConcurrentDictionary&lt;int, List&lt;ITimeShot&gt;&gt;, ClStrip, ICuttingPara, SampleFlag, double, IProgress&lt;IMessage&gt;, CancellationToken)
</h3>
@@ -508,7 +701,7 @@ Don't apply this option.</p>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ICuttingPara GatherAndGetUpdate(ConcurrentDictionary&lt;int, List&lt;ITimeShot&gt;&gt; stepToTimeShotListDictionary, ClStrip clStrip, ICuttingPara anchorPara, SampleFlag sampleFlags, double outlierRatio, IProgress&lt;object&gt; messageHost, CancellationToken cancellationToken)</code></pre>
<pre><code class="lang-csharp hljs">public static ICuttingPara GatherAndGetUpdate(ConcurrentDictionary&lt;int, List&lt;ITimeShot&gt;&gt; stepToTimeShotListDictionary, ClStrip clStrip, ICuttingPara anchorPara, SampleFlag sampleFlags, double outlierRatio, IProgress&lt;IMessage&gt; messageProgress, CancellationToken cancellationToken)</code></pre>
</div>
<h4 class="section">Parameters</h4>
@@ -528,7 +721,7 @@ Don't apply this option.</p>
<dt><code>outlierRatio</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
<dd><p>Ratio of outliers to exclude</p>
</dd>
<dt><code>messageHost</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a>&gt;</dt>
<dt><code>messageProgress</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a>&lt;<a class="xref" href="Hi.Common.Messages.IMessage.html">IMessage</a>&gt;</dt>
<dd><p>Message host for logging</p>
</dd>
<dt><code>cancellationToken</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken">CancellationToken</a></dt>