This repository has been archived on 2026-10-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
HiNC-2025-win-desktop-Deploy/App/wwwroot/HiAPI-docsite/api/Hi.MachiningProcs.html
T
2026-09-16 00:00:49 +08:00

462 lines
29 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace Hi.MachiningProcs | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace Hi.MachiningProcs | HiAPI-C# 2025 ">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.MachiningProcs">
<h1 id="Hi_MachiningProcs" data-uid="Hi.MachiningProcs" class="text-break">Namespace Hi.MachiningProcs</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.AllowNoActiveSessionAttribute.html">AllowNoActiveSessionAttribute</a></dt>
<dd><p>Marks a session-scoped controller action as callable without an active session, exempting it
from <a class="xref" href="Hi.MachiningProcs.RequireActiveSessionAttribute.html">RequireActiveSessionAttribute</a>. Use on the session lifecycle entry points
(BeginSession / EndSession), which by definition run when no session exists yet.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.AllowNoLoadedProjectAttribute.html">AllowNoLoadedProjectAttribute</a></dt>
<dd><p>Marks a project-level controller action as callable without a loaded project, exempting it
from <a class="xref" href="Hi.MachiningProcs.RequireLoadedProjectAttribute.html">RequireLoadedProjectAttribute</a>. Use on the endpoints that create or load a
project (which by definition run when no project is open yet).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.ApiActionResult.html">ApiActionResult</a></dt>
<dd><p>The shared outcome envelope for a web-API action: whether it succeeded and the messages
it reported, in order. Returned by the project-level surface
(<a class="xref" href="Hi.MachiningProcs.LocalProjectServiceController.html">LocalProjectServiceController</a>) and, on the no-active-session boundary, by
the session-scoped surface (<a class="xref" href="Hi.MachiningProcs.SessionShellController.html">SessionShellController</a> via
<a class="xref" href="Hi.MachiningProcs.RequireActiveSessionAttribute.html">RequireActiveSessionAttribute</a>). A REST / AI caller therefore reads the
progress / success / error notifications <i>inline in the HTTP response</i> instead of
only out-of-band via the SignalR sinks, and can branch on <a class="xref" href="Hi.MachiningProcs.ApiActionResult.html#Hi_MachiningProcs_ApiActionResult_Success">Success</a> without
parsing severities.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a></dt>
<dd><p>Root(Local) project service.
Apply absolute file path.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.LocalProjectServiceController.html">LocalProjectServiceController</a></dt>
<dd><p>HTTP controller exposing the <b>project-level</b> (session-independent) operations of
<span class="xref">Hi.MachiningProcs.LocalProjectServiceController.LocalProjectService</span> — the lean API-user surface, parallel to
<a class="xref" href="Hi.MachiningProcs.SessionShellController.html">SessionShellController</a> (which mirrors the session-scoped
<a class="xref" href="Hi.MachiningProcs.SessionShell.html">SessionShell</a>). A controller mirrors exactly one body; project-level
settings belong here, not bolted onto the session controller.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.MachiningActRunner.html">MachiningActRunner</a></dt>
<dd><p>Represents a runner for machining actions that manages milling steps, tool paths, and collision detection.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.MachiningActRunnerConfig.html">MachiningActRunnerConfig</a></dt>
<dd><p>Represents the configuration for a milling act runner.
Provides settings for physics simulation, evaluation, and temperature control.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.MachiningParallelProc.html">MachiningParallelProc</a></dt>
<dd><p>Represents a parallel processing system for milling operations that manages various tasks
such as sweeping, subtraction, force calculation, and physics simulation.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html">MachiningParallelProc.StepTaskBundle</a></dt>
<dd><p>Represents a bundle of tasks related to a milling step.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html">MachiningParallelProc.SubstractionResult</a></dt>
<dd><p>Represents the result of a subtraction operation.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.MachiningProject.html">MachiningProject</a></dt>
<dd><p>Represents a milling project that manages the execution, simulation, and analysis of NC programs.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.MachiningSession.html">MachiningSession</a></dt>
<dd><p>Represents a machining session that manages the execution and optimization of machining operations.
Provides functionality for controlling the machining process, handling optimization options,
and managing session state. Implements <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.idisposable">IDisposable</a> to clean up
<a class="xref" href="Hi.MachiningProcs.MachiningSession.html#Hi_MachiningProcs_MachiningSession_SessionWriters">SessionWriters</a> on session end.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.MessageDto.html">MessageDto</a></dt>
<dd><p>One reported <a class="xref" href="Hi.Common.Messages.IMessage.html">IMessage</a>, flattened for JSON transport.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.MillingUtil.html">MillingUtil</a></dt>
<dd><p>Provides utility methods for milling calculations and operations.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.NcKindUtil.html">NcKindUtil</a></dt>
<dd><p><a class="xref" href="Hi.MachiningProcs.NcKind.html">NcKind</a> helpers.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html">NcRunnerSessionState</a></dt>
<dd><p>NC pipeline state held on a <a class="xref" href="Hi.MachiningProcs.MachiningSession.html">MachiningSession</a> and shared across multiple
<a class="xref" href="Hi.Numerical.INcRunner.html#Hi_Numerical_INcRunner_RunNcLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_StepDiagnosticProgress_Hi_NcParsers_NcDiagnosticProgress_System_Threading_CancellationToken_">RunNcLines(string, IEnumerable&lt;string&gt;, MachiningSession, StepDiagnosticProgress, NcDiagnosticProgress, CancellationToken)</a> calls within that session. The per-layer
<a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html#Hi_MachiningProcs_NcRunnerSessionState_SyntaxPieceLayers">SyntaxPieceLayers</a> are extended via <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html#Hi_Common_Collections_LazyLinkedList_1_AppendSource_System_Collections_Generic_IEnumerable__0__">AppendSource(IEnumerable&lt;T&gt;)</a>
for each subsequent file so that <code>Previous</code>/<code>Next</code> connectivity (and thus
<code>ModalCarrySyntax</code> deep-clone) crosses file boundaries.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.ProjectFileBusyException.html">ProjectFileBusyException</a></dt>
<dd><p>Thrown when a project-file operation (New / Load / Save / SaveAs / Reload) is
requested while another one is already in progress. The newcomer is cancelled
rather than queued; controllers surface this as HTTP 409 Conflict.</p>
</dd>
</dl>
<dl class="jumplist">
<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 (<a class="xref" href="Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_Detect_System_Boolean_">Detect(bool)</a>) 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">
<dt><a class="xref" href="Hi.MachiningProcs.RequireActiveSessionAttribute.html">RequireActiveSessionAttribute</a></dt>
<dd><p>Action filter for the <b>session-scoped</b> web-API surface: before a guarded action runs,
verifies a machining session is active (<a class="xref" href="Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_SessionShell">SessionShell</a> is
non-null). When none is active it short-circuits with HTTP 409 and an
<a class="xref" href="Hi.MachiningProcs.ApiActionResult.html#Hi_MachiningProcs_ApiActionResult_NoActiveSession">NoActiveSession()</a> envelope, so a REST / AI caller gets a helpful
&ldquo;call BeginSession() first&rdquo; notice instead of a null-reference 500. Apply at the controller
level; exempt the session lifecycle entry points (BeginSession / EndSession) with
<a class="xref" href="Hi.MachiningProcs.AllowNoActiveSessionAttribute.html">AllowNoActiveSessionAttribute</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.RequireLoadedProjectAttribute.html">RequireLoadedProjectAttribute</a></dt>
<dd><p>Action filter for the <b>project-level</b> web-API surface: before a guarded action runs,
verifies a project is loaded (<a class="xref" href="Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_MachiningProject">MachiningProject</a> is
non-null). When none is loaded it short-circuits with HTTP 409 and an
<a class="xref" href="Hi.MachiningProcs.ApiActionResult.html#Hi_MachiningProcs_ApiActionResult_NoProjectLoaded">NoProjectLoaded()</a> envelope, so a REST / AI caller gets a helpful
&ldquo;create or load a project first&rdquo; notice instead of a null-reference 500 (the project-level
members — <code>MachiningActRunner.Config</code>, workpiece, runners — are null until a project is
open). Apply at the controller level; exempt the endpoints that create or load a project
with <a class="xref" href="Hi.MachiningProcs.AllowNoLoadedProjectAttribute.html">AllowNoLoadedProjectAttribute</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.SessionShell.html">SessionShell</a></dt>
<dd><p>End-user-facing facade for a machining session: aggregates session lifecycle,
NC playback, optimization, geometry I/O, and scripting infrastructure into a
single delegation surface. Used as the C# script globals object and as the
concrete target of <a class="xref" href="Hi.SessionCommands.ISessionCommand.html">ISessionCommand</a> implementations.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.SessionShellController.html">SessionShellController</a></dt>
<dd><p>HTTP controller exposing <a class="xref" href="Hi.MachiningProcs.SessionShell.html">SessionShell</a> over the web API.
Each action delegates to the underlying <a class="xref" href="Hi.MachiningProcs.SessionShell.html">SessionShell</a> instance owned by <span class="xref">Hi.MachiningProcs.SessionShellController.LocalProjectService</span>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.SetupController.html">SetupController</a></dt>
<dd><p>Controller for setup operations of machining projects.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.ShellProgress.html">ShellProgress</a></dt>
<dd><p>Append-only, thread-safe sink for <b>session-level routine / lifecycle</b> messages on the
<a class="xref" href="Hi.Common.Messages.IMessage.html">IMessage</a> channel — one of the partitioned message homes.</p>
<p>
This is partitioned by message <b>kind</b>, orthogonal to the other sinks: plain
<a class="xref" href="Hi.Common.Messages.SimpleMessage.html">SimpleMessage</a> notices that belong to the session as a whole (cache reset, file
load / save progress, session start/done) live here; messages tied to a particular machining
step live in <a class="xref" href="Hi.MachiningProcs.StepDiagnosticProgress.html">StepDiagnosticProgress</a>; NC-pipeline diagnostics live in
<code>NcDiagnosticProgress</code>.
</p>
<p>
Append-only: session-routine messages are emitted sequentially, so report order already is
execution order — there is no per-step anchor and no stable-index bookkeeping.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.SpindleSpeedCache.html">SpindleSpeedCache</a></dt>
<dd><p>Represents cached spindle speed information.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html">StepDiagnostic</a></dt>
<dd><p>An <a class="xref" href="Hi.Common.Messages.IMessage.html">IMessage</a> produced while constructing a <a class="xref" href="Hi.MachiningSteps.MachiningStep.html">MachiningStep</a>,
anchored to the step's execution-order <a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html#Hi_MachiningProcs_StepDiagnostic_StepIndex">StepIndex</a> and (when available) its NC-source
<a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html#Hi_MachiningProcs_StepDiagnostic_SentenceCarrier">SentenceCarrier</a>.</p>
<p>
Decorator over an inner <a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html#Hi_MachiningProcs_StepDiagnostic_Message">Message</a> — the five <a class="xref" href="Hi.Common.Messages.IMessage.html">IMessage</a> members delegate
to it — so a plain <a class="xref" href="Hi.Common.Messages.SimpleMessage.html">SimpleMessage</a> emitted during step processing can be upgraded to a
step-anchored diagnostic without the producer needing to know the step context.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.StepDiagnosticAnchorUtil.html">StepDiagnosticAnchorUtil</a></dt>
<dd><p>Bridges a step-anchored <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress&lt;T&gt;</a> sink (e.g.
<a class="xref" href="Hi.MachiningProcs.StepDiagnosticProgress.html">StepDiagnosticProgress</a>) back to the generic <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress&lt;T&gt;</a> surface, so
out-of-step-pipeline producers can keep using the id-first <a class="xref" href="Hi.Common.Messages.MessageUtil.html">MessageUtil</a> shorthands
(<code>ValidationError</code>, <code>ConfigurationWarning</code>, …) and still land a
<a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html">StepDiagnostic</a> on the sink.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.StepDiagnosticProgress.html">StepDiagnosticProgress</a></dt>
<dd><p>Append-only, thread-safe sink for <b>step-anchored</b> diagnostics on the <a class="xref" href="Hi.Common.Messages.IMessage.html">IMessage</a>
channel.</p>
<p>
This sink stores <b>only <a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html">StepDiagnostic</a></b>: every message is anchored to a motion step.
Per-step batches arrive via <a class="xref" href="Hi.MachiningProcs.StepScopedProgress.html#Hi_MachiningProcs_StepScopedProgress_FlushTo_System_IProgress_Hi_MachiningProcs_StepDiagnostic__">FlushTo(IProgress&lt;StepDiagnostic&gt;)</a>; out-of-pipeline emits
(e.g. stroke-limit / tooling diagnostics) anchor themselves with
<a class="xref" href="Hi.MachiningProcs.StepDiagnosticAnchorUtil.html#Hi_MachiningProcs_StepDiagnosticAnchorUtil_AnchoredToStep_System_IProgress_Hi_MachiningProcs_StepDiagnostic__System_Int32_Hi_NcParsers_ISentenceCarrier_">AnchoredToStep(IProgress&lt;StepDiagnostic&gt;, int, ISentenceCarrier)</a> before reporting. Data that already has
another owner is <b>not</b> duplicated here — NC diagnostics live in <code>NcDiagnosticProgress</code>,
plain session-level notices live in <a class="xref" href="Hi.MachiningProcs.ShellProgress.html">ShellProgress</a>, cutter positions live in the
CL strip.
</p>
<p>
Because every <a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html">StepDiagnostic</a> carries its own <a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html#Hi_MachiningProcs_StepDiagnostic_StepIndex">StepIndex</a>
anchor, ordering is recovered downstream by sorting on that anchor. Producers therefore only ever
<a class="xref" href="Hi.MachiningProcs.StepDiagnosticProgress.html#Hi_MachiningProcs_StepDiagnosticProgress_Report_Hi_MachiningProcs_StepDiagnostic_">Report(StepDiagnostic)</a> (append) — even from parallel step-processing tasks — and never insert at a
computed position.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.StepScopedProgress.html">StepScopedProgress</a></dt>
<dd><p>A per-step <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress&lt;T&gt;</a> of <a class="xref" href="Hi.Common.Messages.IMessage.html">IMessage</a> that <b>accumulates</b> the
messages emitted while one step is built, upgrading any plain message to a
<a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html">StepDiagnostic</a> anchored to this step's <a class="xref" href="Hi.MachiningProcs.StepScopedProgress.html#Hi_MachiningProcs_StepScopedProgress_StepIndex">StepIndex</a> /
<a class="xref" href="Hi.MachiningProcs.StepScopedProgress.html#Hi_MachiningProcs_StepScopedProgress_SentenceCarrier">SentenceCarrier</a>. An already step-anchored <a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html">StepDiagnostic</a> is kept
unchanged. (NC diagnostics are not seen here — they live in their own
<a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a>, not on this channel.)</p>
<p>
It does not forward to a downstream sink as messages arrive; instead it collects them into
<a class="xref" href="Hi.MachiningProcs.StepScopedProgress.html#Hi_MachiningProcs_StepScopedProgress_MessageList">MessageList</a> and is drained once via <a class="xref" href="Hi.MachiningProcs.StepScopedProgress.html#Hi_MachiningProcs_StepScopedProgress_FlushTo_System_IProgress_Hi_MachiningProcs_StepDiagnostic__">FlushTo(IProgress&lt;StepDiagnostic&gt;)</a> at the step's
<b>sequential</b> post-physics stage. Because that stage runs strictly in step order, the
per-step batches land in execution order with no position-scanning insert.
</p>
<p>
No locking: a single step's construction is a data-dependency chain (substraction → physics →
post-physics), so only one task writes <a class="xref" href="Hi.MachiningProcs.StepScopedProgress.html#Hi_MachiningProcs_StepScopedProgress_MessageList">MessageList</a> at a time; parallelism across
steps writes to <i>different</i> scopes. Each parallel step task therefore holds its own
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">
Interfaces
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.IMachiningProjectGetter.html">IMachiningProjectGetter</a></dt>
<dd><p>Interface for objects that can provide a MachiningProject instance.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.IProjectService.html">IProjectService</a></dt>
<dd><p>Interface for services that manage machining projects.</p>
</dd>
</dl>
<h3 id="enums">
Enums
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.NcKind.html">NcKind</a></dt>
<dd><p>Kind of an NC program file — selects which of the session's runners plays
it (<a class="xref" href="Hi.MachiningSteps.IMachiningService.html#Hi_MachiningSteps_IMachiningService_ActiveNcRunner">ActiveNcRunner</a> /
<a class="xref" href="Hi.MachiningSteps.IMachiningService.html#Hi_MachiningSteps_IMachiningService_ClRunner">ClRunner</a> /
<a class="xref" href="Hi.MachiningSteps.IMachiningService.html#Hi_MachiningSteps_IMachiningService_CsvRunner">CsvRunner</a>).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.RenderingFlag.html">RenderingFlag</a></dt>
<dd><p>Flags that control which elements are rendered in the visualization.</p>
</dd>
</dl>
<h3 id="delegates">
Delegates
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.ConfigStepFunc.html">ConfigStepFunc</a></dt>
<dd><p>Delegate for configuring a milling step with additional arguments.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html">LocalProjectService.MachiningProjectChangedDelegate</a></dt>
<dd><p>Delegate for machining project changed events.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html">MachiningActRunner.MachiningStepBuiltDelegate</a></dt>
<dd><p>Delegate for configuring a step with previous and current step information.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>