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
@@ -210,6 +210,41 @@ rather than queued; controllers surface this as HTTP 409 Conflict.</p>
<dt><a class="xref" href="Hi.MachiningProcs.ProxyProjectService.html">ProxyProjectService</a></dt>
<dd><p>Delegate (User-based) Project Service.
Apply relative file path from <a class="xref" href="Hi.MachiningProcs.ProxyProjectService.html#Hi_MachiningProcs_ProxyProjectService_AdminDirectory">AdminDirectory</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html">RapidCutMonitor</a></dt>
<dd><p>Reports a rapid traverse that removed stock: the steps of one NC line
that were commanded as rapid traverse (G00,
<a class="xref" href="Hi.MachiningSteps.MachineMotionStep.html#Hi_MachiningSteps_MachineMotionStep_IsRapid">IsRapid</a>) and touched the workpiece fold
into one <code>Play-RapidCut&ndash;Detected</code> validation warning, anchored on
the line's first touching step and carrying the line's total removed
volume and its largest cutting depth. A rapid move through material
breaks the tool or crashes the machine on a real run, yet with the
spindle turning the engine treats it as ordinary cutting: the collision
rule (Hi.Machining.MachiningEquipment.Detect) pairs flute
and workpiece only while the spindle is stopped, so such a line used to
pass with no message at all.</p>
<p>
One instance per <a class="xref" href="Hi.MachiningProcs.MachiningActRunner.html">MachiningActRunner</a>. <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Observe_Hi_MachiningProcs_RapidCutMonitor_Sample__System_Double_System_Boolean_System_IProgress_Hi_MachiningProcs_StepDiagnostic__">Observe(in Sample, double, bool, IProgress&lt;StepDiagnostic&gt;)</a>
runs on the sequential post-physics stage of every built step (one
thread, step order), <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Flush_System_Double_System_IProgress_Hi_MachiningProcs_StepDiagnostic__">Flush(double, IProgress&lt;StepDiagnostic&gt;)</a> closes the last line at the end
of a play and <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Reset">Reset()</a> drops a pending line on a session reset;
both run on the shell thread after
<a class="xref" href="Hi.MachiningProcs.MachiningActRunner.html#Hi_MachiningProcs_MachiningActRunner_WaitAll">WaitAll()</a>, so no lock is needed.
</p>
<p>
Folding: consecutive rapid steps with the same <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.Sample.html#Hi_MachiningProcs_RapidCutMonitor_Sample_LineKey">LineKey</a>
(the NC line number, or the sentence itself where a runner has no line
numbers) form one report; a feed step, a different line or the end of
the play closes it. A line re-entered later (a subprogram loop) reports
again, deliberately. The report is emitted only when the line's total
removed volume reaches
<a class="xref" href="Hi.MachiningProcs.MachiningActRunnerConfig.html#Hi_MachiningProcs_MachiningActRunnerConfig_RapidCutVolumeThreshold_mm3">RapidCutVolumeThreshold_mm3</a>
(default 0: any contact). Steps with the spindle stopped are skipped
while collision detection is on — that rule owns them and raises
<code>Collision--Detected</code> — and counted otherwise.
</p>
</dd>
</dl>
<dl class="jumplist">
@@ -339,6 +374,16 @@ steps writes to <i>different</i> scopes. Each parallel step task therefore holds
instance — never a shared mutable "current step" on <a class="xref" href="Hi.MachiningProcs.StepDiagnosticProgress.html">StepDiagnosticProgress</a>, which would
race.
</p>
</dd>
</dl>
<h3 id="structs">
Structs
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.Sample.html">RapidCutMonitor.Sample</a></dt>
<dd><p>One built step as the monitor sees it — the few facts the fold needs,
detached from <a class="xref" href="Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> so the fold is testable on
synthetic steps.</p>
</dd>
</dl>
<h3 id="interfaces">