This commit is contained in:
2026-09-09 17:35:23 +08:00
parent 2a98ae7556
commit 161af68fe3
1271 changed files with 58251 additions and 98639 deletions
@@ -87,7 +87,7 @@
<article data-uid="">
<h1 id="release-note">Release Note</h1>
<h2 id="hinc-packages-version-326">HiNc Packages Version 3.2.6</h2>
<h2 id="hinc-packages-32">HiNc Packages 3.2</h2>
<h3 id="at-a-glance">At a glance</h3>
<p>3.2 is largely one piece of work: the NC interpreter that reads a controller program is now composed
from configurable parts rather than written into one class, and most of this release is the brand
@@ -125,38 +125,42 @@ program we have not seen:</p>
<p>Syntec and Mazak run on the Fanuc-family vocabulary; their brand-specific syntax has not been worked
through and they are not covered by the figures above. The per-construct picture — including what is
recognized and deliberately <em>not</em> simulated — is in the
<a href="../fundamentals/nc-parsing/index.html#brand-support">brand support matrix</a>.</p>
<a href="../technique/nc-dialects/nc-parsing.html#brand-support">brand support matrix</a>.</p>
<p><strong>Failures say what went wrong.</strong> The class of defect this release spent most effort on is the
silent one: a Siemens tool offset with no table row that resolved to zero and machined a whole
program one tool length low, a G68 rotation that did nothing while reporting itself active, a tilted
plane the machine could not reach. Each of those is now a named, searchable diagnostic rather than a
plausible-looking wrong result — see the <a href="upgrading-to-3.2.html#new-diagnostics-you-may-now-see">diagnostic id
plausible-looking wrong result — see the <a href="upgrading-to-3.2/new-diagnostics.html">diagnostic id
table</a>.</p>
<p><strong>Simulation is faster and holds a bigger program.</strong> Physics moved into the native kernel (a paired
play: 59.3 s / 16.1 GB allocated → 40.6 s / 3.4 GB), building the topology of a large STL is linear
rather than quadratic in triangle count, and a long program no longer degrades as it plays. Figures
and their conditions are under
<a href="upgrading-to-3.2.html#performance-and-footprint">Performance and footprint</a>.</p>
<p><strong>The application product moves to the web API.</strong> From 3.2 the shipped application is the web
service, and its source is the same <code>HiNC-2025-webservice</code> sample we publish — what you read there is
what the product runs. The Blazor front end is not on this line.</p>
<a href="upgrading-to-3.2/performance-and-footprint.html">Performance and footprint</a>.</p>
<p><strong>The application product moves to the web API.</strong> The web service is the application the product
line is built on, and its source is the same <a href="../technique/api-foundations/packages-and-samples.html#hiapi-sample-code"><code>HiNC-2025-webservice</code></a>
sample we publish — what you read there is what the product runs. A Windows desktop client ships
alongside it on the same packages, and no new feature work targets it. The Blazor front end builds
against the same 3.2 packages but is not published as a product.</p>
<div class="IMPORTANT">
<h5>Important</h5>
<p><strong>Adoption status.</strong> This drop is published for review. Verification is still in progress across
most areas, and the coverage figures above are the honest state of it.</p>
<p><strong>Do not put 3.2 NC optimization into production.</strong> It is not finished on this line. Work that
depends on optimization should stay on the 3.1 line, which is serviced as <code>3.1.175.&lt;patch&gt;</code>. The
Blazor front end likewise remains on 3.1.</p>
Blazor front end tracks the 3.2 packages, so it is not a way to stay on the 3.1 behaviour.</p>
</div>
<h3 id="what-changed">What changed</h3>
<p><strong>This one entry covers everything since 3.1.175.</strong> The 3.1 line is closed at the 3.1.175 package
set and is serviced only as <code>3.1.175.&lt;patch&gt;</code>; <code>master</code> moved all ten packages onto the <strong>3.2</strong> line
on 2026-07-26 and restarted their build counters. So a 3.2 build number starts low — <code>3.2.6</code> is
newer than <code>3.1.204</code>, the two counters are not comparable, and the gap between them is expected
rather than a missing upload. The versions in between were never published as a release set, which
is why they are merged here rather than listed separately.</p>
on 2026-08-24 and restarted their build counters. So a 3.2 build number starts low, the two
counters are not comparable, and the gap between the last 3.1 number a feed served and the first
3.2 one is expected rather than a missing upload. The versions in between were never published as a
release set, which is why they are merged here rather than listed separately. Each package's build
counter advances on its own, so no single number is common to all ten; a set is named by its HiNc
package version — see <a href="upgrading-to-3.2/the-package-line.html">The package line</a>.</p>
<p>Everything below therefore lands at once on a caller moving a 3.1.175 reference to 3.2.
<strong>See <a href="upgrading-to-3.2.html">Upgrading from 3.1.175 to 3.2</a> for the full detail</strong> — the summary here
<strong>See <a href="upgrading-to-3.2/index.html">Upgrading from 3.1.175 to 3.2</a> for the full detail</strong> — the summary here
is the shape of the upgrade, not the whole of it.</p>
<h3 id="breaking-changes">Breaking changes</h3>
<p>In the order they will bite. Full table with replacements on the upgrade page.</p>
@@ -211,7 +215,7 @@ HiNcRcl drops the inert <code>HiNC:DisplayEngine:FontFile</code> key</li>
silent no-op, blank lines resetting G90/G91, Heidenhain absolute arc centres, five-axis IK about
1000× tighter, and MC-linear moves stepping by euclidean tip travel. They are listed with their
symptoms under
<a href="upgrading-to-3.2.html#results-that-change-on-upgrade">Results that change on upgrade</a>.</p>
<a href="upgrading-to-3.2/results-that-change-on-upgrade.html">Results that change on upgrade</a>.</p>
<h3 id="new-in-this-release">New in this release</h3>
<ul>
<li><strong>Siemens SINUMERIK programs replay end to end</strong> — real <code>.mpf</code> / <code>.spf</code> files rather than an ISO
@@ -227,7 +231,7 @@ without separators; and the DIN/ISO dialect with its absolute <code>I</code> / <
<code>M98</code> / <code>M99</code> subprograms and <code>G65</code> / <code>G66</code> macro calls; <code>G12.1</code> / <code>G13.1</code> polar coordinate
interpolation with <code>G41</code> / <code>G42</code> compensation on the hypothetical plane</li>
<li><strong><a class="xref" href="../api/Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> is the default NC pipeline.</strong> See
<a href="../fundamentals/nc-parsing/index.html">NC Parsing Engine</a> for its architecture and the per-brand
<a class="xref" href="../technique/nc-dialects/nc-parsing.html">NC Parsing Engine</a> for its architecture and the per-brand
support matrix</li>
<li><strong>NC optimization runs on that pipeline</strong> — <em>not finished on this line, see Adoption status above</em>
— regenerating text as anchored token edits over the verbatim source block, so lines the optimizer
@@ -264,7 +268,7 @@ instead of quadratic in triangle count (18.7× at 300k triangles, and it was 99.
re-triangulating after a cut is about 2.2× faster; and a long program no longer exhausts client
memory (session retention on a 25,000-block play: 406 MB → 142 MB). Every figure with its
conditions — including the two things that cost more on purpose — is under
<a href="upgrading-to-3.2.html#performance-and-footprint">Performance and footprint</a></li>
<a href="upgrading-to-3.2/performance-and-footprint.html">Performance and footprint</a></li>
<li><strong>Stability and data integrity</strong> — the native crashes from disposing a display or geometry object
still in use, the intermittent &ldquo;No cut / No data for step&rdquo; on freshly-simulated steps, the
project-file race between a Load and a Save, and non-reproducible milling-force waveforms are all
@@ -279,11 +283,11 @@ fixed; large geometry now builds its display topology off-thread instead of free
<ul>
<li>Improve <a class="xref" href="../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_Mrr_mm3ds">Mrr_mm3ds</a> precision: the material-removal-rate now sums each cut contour's signed area-vector (fan triangulation, skipping non-finite triangles) projected on the feed direction, replacing the per-contour bounding-box area that over-estimated the cut cross-section</li>
<li>Add <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_AlignWorkpieceProgramZeroToIso_">AlignWorkpieceProgramZeroToIso</a> script command: resolves a G54/G55/… entry from the project ISO coordinate table and places workpiece + fixture so the program zero coincides with that machine coordinate (topology math delegated to the new <a class="xref" href="../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_AlignWorkpieceProgramZeroToIso_">AlignWorkpieceProgramZeroToIso</a> extension)</li>
<li>Drop gRPC plumbing from the HiNc package: remove <code>Hi.Grpcs.*</code> ClStrip/Player service runners and protos, <code>MachiningProjectGrpcServer</code>, <code>MonitoringPlayer</code>, and <code>UniversalNcMonitorClient</code>; fold <code>CsvRunnerConfig</code> back into <code>CsvRunner0</code> (gRPC services now ship in HiNcRcl / UJoinRcl)</li>
<li>Drop gRPC plumbing from the HiNc package: remove <code>Hi.Grpcs.*</code> ClStrip/Player service runners and protos, <code>MachiningProjectGrpcServer</code>, <code>MonitoringPlayer</code>, and <code>UniversalNcMonitorClient</code>; fold <code>CsvRunnerConfig</code> back into <code>CsvRunner0</code> (gRPC services now ship in HiNcRcl and a downstream RCL package)</li>
</ul>
<h2 id="hinc-packages-version-31172">HiNc Packages Version 3.1.172</h2>
<ul>
<li>Replace implicit XFactory registration (private <code>static &lt;ClassName&gt;()</code> constructors + <code>_ = X.XName</code> wake-up touches) with explicit <code>public static void Reg(XFactory factory = null)</code> methods across ~270 classes. <a class="xref" href="../api/Hi.Common.XmlUtils.XFactory.html">XFactory</a> becomes an instance class with a process-wide <code>Default</code> singleton; <code>Generators</code> is renamed from <code>Regs</code> and now an instance property; the delegate type is renamed <code>XGeneratorDelegate</code> from <code>GenByXElementDelegate</code>. Composite types chain <code>X.Reg(factory)</code> on dependents in place of the old wake-up touches; multi-name (legacy alias) registrations keep the current XName first and group aliases under a <code>//legacy aliases</code> comment. Entry points (web service, win-desktop, test fixtures) <strong>must call <a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_Reg_">Reg</a> once at startup before any project XML is deserialized</strong> — registration no longer happens by accident when the type is first touched. See <a href="../fundamentals/common/xml-io.html">XML IO</a>.</li>
<li>Replace implicit XFactory registration (private <code>static &lt;ClassName&gt;()</code> constructors + <code>_ = X.XName</code> wake-up touches) with explicit <code>public static void Reg(XFactory factory = null)</code> methods across ~270 classes. <a class="xref" href="../api/Hi.Common.XmlUtils.XFactory.html">XFactory</a> becomes an instance class with a process-wide <code>Default</code> singleton; <code>Generators</code> is renamed from <code>Regs</code> and now an instance property; the delegate type is renamed <code>XGeneratorDelegate</code> from <code>GenByXElementDelegate</code>. Composite types chain <code>X.Reg(factory)</code> on dependents in place of the old wake-up touches; multi-name (legacy alias) registrations keep the current XName first and group aliases under a <code>//legacy aliases</code> comment. Entry points (web service, win-desktop, test fixtures) <strong>must call <a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_Reg_">Reg</a> once at startup before any project XML is deserialized</strong> — registration no longer happens by accident when the type is first touched. See <a class="xref" href="../technique/api-foundations/xml-io.html">XML IO</a>.</li>
</ul>
<h2 id="hinc-packages-version-31171">HiNc Packages Version 3.1.171</h2>
<ul>
@@ -294,15 +298,15 @@ fixed; large geometry now builds its display topology off-thread instead of free
</ul>
<h2 id="hinc-packages-version-31167">HiNc Packages Version 3.1.167</h2>
<ul>
<li>Introduce <a class="xref" href="../api/Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> as a pluggable NC parser/runner replacing the legacy <code>HardNcRunner</code>, opt-in at the time via <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_EnableSoftNcRunner">EnableSoftNcRunner</a>. It became the default pipeline in 3.2 — see <a href="../fundamentals/nc-parsing/index.html">NC Parsing Engine</a></li>
<li>Introduce <a class="xref" href="../api/Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> as a pluggable NC parser/runner replacing the legacy <code>HardNcRunner</code>, opt-in at the time via <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_EnableSoftNcRunner">EnableSoftNcRunner</a>. It became the default pipeline in 3.2 — see <a class="xref" href="../technique/nc-dialects/nc-parsing.html">NC Parsing Engine</a></li>
<li>Extend coolant model to <a class="xref" href="../api/Hi.Numerical.CoolantMode.html">CoolantMode</a> Flood/Mist/Off and refactor <a class="xref" href="../api/Hi.Physics.CoolantHeatCondition.html">CoolantHeatCondition</a> / <code>MillingTemperatureUtil</code> for multi-mode coolant</li>
<li>Bind session events to <a class="xref" href="../api/Hi.MachiningProcs.MachiningSession.html">MachiningSession</a> lifetime: <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_SessionStepBuilt">SessionStepBuilt</a>, <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_SessionStepSelected">SessionStepSelected</a>, <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_SessionSyntaxPieceRan">SessionSyntaxPieceRan</a>, <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_SessionSourcedActEntry">SessionSourcedActEntry</a> (legacy aliases kept as <code>[Obsolete]</code>); add <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_RegisterWriteSyntaxPieces_">RegisterWriteSyntaxPieces</a> / <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_RegisterWriteSyntaxPiecesWithActs_">RegisterWriteSyntaxPiecesWithActs</a> for syntax-piece debug tracing</li>
<li>Add <a class="xref" href="../api/Hi.Common.XmlUtils.ProjectApiVersion.html">ProjectApiVersion</a> carrier through <a class="xref" href="../api/Hi.Common.XmlUtils.XFactory.html">XFactory</a> deserialization for project-XML version negotiation; resolve <a class="xref" href="../api/Hi.NcMech.Workpieces.Workpiece.html">Workpiece</a> through a lazy <code>Func</code> getter in <a class="xref" href="../api/Hi.NcMech.Workpieces.WorkpieceService.html">WorkpieceService</a></li>
</ul>
<h2 id="hinc-packages-version-31162">HiNc Packages Version 3.1.162</h2>
<ul>
<li>Refactor message management into three independent categories: <strong>Diagnostic</strong> (<code>IProgress&lt;object&gt;</code>), <strong>UI Notification</strong> (<code>MessageBoardUtil</code>), <strong>App Log</strong> (<code>ILogger</code>); remove <code>MessageUtil</code> class entirely and remove <code>ExceptionUtil.ShowException</code> / <code>ExceptionUtil.OnShown</code> (see <a href="../fundamentals/common/message-management.html">Message Management</a>)</li>
<li>Thread <code>IProgress&lt;object&gt;</code> through <a class="xref" href="../api/Hi.Common.XmlUtils.XFactory.html">XFactory</a> deserialization chain and <a class="xref" href="../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> loading; remove <code>GenMode</code> enum entirely (see <a href="../fundamentals/common/xml-io.html">XML IO</a>)</li>
<li>Refactor message management into three independent categories: <strong>Diagnostic</strong> (<code>IProgress&lt;object&gt;</code>), <strong>UI Notification</strong> (<code>MessageBoardUtil</code>), <strong>App Log</strong> (<code>ILogger</code>); remove <code>MessageUtil</code> class entirely and remove <code>ExceptionUtil.ShowException</code> / <code>ExceptionUtil.OnShown</code> (see <a class="xref" href="../technique/api-foundations/message-management.html">Message Management</a>)</li>
<li>Thread <code>IProgress&lt;object&gt;</code> through <a class="xref" href="../api/Hi.Common.XmlUtils.XFactory.html">XFactory</a> deserialization chain and <a class="xref" href="../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> loading; remove <code>GenMode</code> enum entirely (see <a class="xref" href="../technique/api-foundations/xml-io.html">XML IO</a>)</li>
<li>Add <a class="xref" href="../api/Hi.Common.Messages.ActionProgress-1.html">ActionProgress&lt;T&gt;</a>.<a class="xref" href="../api/Hi.Common.Messages.ActionProgress-1.html#Hi_Common_Messages_ActionProgress_1_FromLogger_">FromLogger</a> to bridge <code>IProgress&lt;object&gt;</code> APIs to <code>ILogger</code></li>
<li>Rename <code>ShowIfCatched</code> → <a class="xref" href="../api/Hi.Common.Messages.ExceptionUtil.html#Hi_Common_Messages_ExceptionUtil_CatchExceptions_">CatchExceptions</a> with explicit <code>Action&lt;Exception&gt;</code> handler; remove <code>RoutineBlocker0</code></li>
<li>Extract <a class="xref" href="../api/Hi.NcMech.Workpieces.WorkpieceService.html">WorkpieceService</a> from <a class="xref" href="../api/Hi.NcMech.Workpieces.Workpiece.html">Workpiece</a> for runtime geometry operations</li>