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/release-note/index.html
T
2026-09-16 00:00:49 +08:00

640 lines
58 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Release Note | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Release Note | 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="">
<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="">
<h1 id="release-note">Release Note</h1>
<h2 id="hinc-packages-version-3226">HiNc Packages Version 3.2.26</h2>
<p>Rotary-axis correctness on SoftNc, cutting forces that no longer depend on how the geometry kernel
tiled the contact surface, and a process that survives a host without OpenGL. The 3.1.175 → 3.2 line
jump is the 3.2.7 entry below; the long form is still
<a href="upgrading-to-3.2/index.html">Upgrading from 3.1.175 to 3.2</a>.</p>
<div class="IMPORTANT">
<h5>Important</h5>
<p><strong>Adoption status.</strong> Verification is still in progress across most areas.</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, serviced as
<code>3.1.175.&lt;patch&gt;</code>. The Blazor front end tracks the 3.2 packages, so it is not a way
to stay on the 3.1 behaviour.</p>
<p>The 3.2.24 hold on SoftNc canned cycles that index a rotary axis is <strong>lifted</strong> — see the
first entry below.</p>
</div>
<ul>
<li><strong>SoftNc canned cycles take rotary axis words.</strong> A G81–G89 repeat block carrying an A / B / C
word indexes the table and drills again — the standard bolt-circle shape — where 3.2.24 either
skipped the hole or drilled it at the previous angle: a rotary-only repeat fires the cycle, a
mixed block pre-positions XYZ and the table in one simultaneous move before the strokes, and
under <code>G68.2</code> without RTCP the feature frame stays pinned in machine space so the hole stays put
while the workpiece turns. Under <code>G91</code> only the words the block itself spoke are increments, so
an X-pitch repeat no longer doubles Y. Hole bottoms match the HardNc replay of a customer's
bolt-circle program to 0.000 mm on all twelve C-indexed blocks, and setting
<a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_EnableSoftNcRunner">EnableSoftNcRunner</a> <code>false</code> is no longer needed for
such programs. See
<a href="upgrading-to-3.2/brand-nc-language-coverage.html#fanuc-and-iso-common">Brand NC language coverage</a>
and <a href="../technique/nc-dialects/controller-iso.html#canned-cycles">ISO core</a></li>
<li><strong>A rotary word under modal <code>G91</code> is an increment on SoftNc.</strong> <code>G91 … C20.</code> followed by <code>C20.</code>
leaves the table at 40, not 20; a per-word directive (<code>C=AC(90)</code>, <code>ACP</code> / <code>ACN</code>, <code>IC()</code>) still
wins over the modal state, and a spoken <code>G91 B270.</code> stays a +270° traverse instead of folding to
−90°. A <code>G91 G28</code> rotary intermediate anchors on the previous modal angle (<code>G91 G28 C10.</code> from
C90 passes through 100, then returns home) instead of on zero. HardNc keeps its documented
absolute reading of a rotary word under <code>G91</code> and warns. The programmed deltas are recorded on
the block in <a class="xref" href="../api/Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a>, beside the
<a class="xref" href="../api/Hi.NcParsers.Keywords.RotaryWords.html">RotaryWords</a> the block spoke. See
<a href="upgrading-to-3.2/results-that-change-on-upgrade.html">Results that change on upgrade</a></li>
<li><strong>Rotary IK no longer reports failure from a pole seed.</strong> Every solve attempt now runs its
coarse stage and its polish, so a small tilt with a large azimuth that used to run out of
iterations a few milliradians short — and was then refused by <code>G53.1</code>, leaving the table at
A = C = 0 with the tilt still active and the whole path rotated off the part — solves to
1e-8 rad. On a Fanuc IJK grid from the pole seed, 54 / 69 failures per A/C chain become 0; on a
CL program 44 dropped endpoints of 536 become 0. The happy path is unchanged bit for bit; only a
failed attempt pays one extra polish</li>
<li><strong>Rotary travel picks the reachable IK branch.</strong> When the nearest solution lies outside an axis'
configured travel, the axial solve searches the other branches (sign, half-turn and supplement
combinations) and keeps the admissible one nearest the entry; <code>G53.1</code>, <code>G68.2</code>, <code>CYCLE800</code>,
<code>PLANE SPATIAL</code> and the <code>LN</code> vector syntax pass the travel through the new admissibility overloads
of <a class="xref" href="../api/Hi.Numerical.Xyzabc.IMachineKinematics.html">IMachineKinematics</a> and
<a class="xref" href="../api/Hi.NcParsers.Dependencys.StrokeLimitUtil.html#Hi_NcParsers_Dependencys_StrokeLimitUtil_RotaryAdmissibility_">RotaryAdmissibility</a>. The travel itself now
reaches SoftNc from every project: a stroke limit declared only in the legacy machine-limits
boxes is copied into the controller parameter table on load for the axes carrying no end there
(explicit rows win), where 3.2.24 checked such a project against nothing. Both stroke checks
apply <a class="xref" href="../api/Hi.NcParsers.Dependencys.StrokeLimitUtil.html#Hi_NcParsers_Dependencys_StrokeLimitUtil_Tolerance">Tolerance</a>, so an axis parked exactly on its
limit is not reported. See
<a href="../anatomy/general-setup/controller/machine/per-axis-tables.html">Per-axis tables</a></li>
<li><strong>A rapid traverse that removes stock is reported.</strong> <code>Play-RapidCut--Detected</code> folds the G00
steps of one NC line that touched the workpiece into one validation warning, anchored on the
line's first cutting step and carrying the line's removed volume (geometry only), its
touching-step count and its largest cutting depth. The line total is gated by the project-level
<a class="xref" href="../api/Hi.MachiningProcs.MachiningActRunnerConfig.html#Hi_MachiningProcs_MachiningActRunnerConfig_RapidCutVolumeThreshold_mm3">RapidCutVolumeThreshold_mm3</a> (default 0: any
contact reports); a step with the spindle stopped is left to collision detection while that is
on. <a class="xref" href="../api/Hi.MachiningSteps.MachineMotionStep.html#Hi_MachiningSteps_MachineMotionStep_IsRapid">IsRapid</a> marks the step. See
<a href="upgrading-to-3.2/new-diagnostics.html">New diagnostics</a></li>
<li><strong>Cutter–workpiece engagement no longer depends on how the contact surface was tiled.</strong> The scan
that turns a step's contact contours into the engaged angle ranges of
<a class="xref" href="../api/Hi.Milling.Engagements.LayerMillingEngagement.html">LayerMillingEngagement</a> dropped its dense-step bounding-box shortcut
and its winding dependence; a cylinder wall and a flat floor sector reproduce their analytic arcs
to 1e-9 rad at four tessellations, and the managed and native paths stay bit-identical.
<strong>Re-running an existing program moves the forces</strong> on most engaged steps — floors that used to
register as empty and side ranges fragmented by phantom 1° gaps move the most — and coefficient
sets trained before this build embed the old engagement. See
<a href="upgrading-to-3.2/results-that-change-on-upgrade.html">Results that change on upgrade</a></li>
<li><strong>The cube tree folds a re-cut flat region again.</strong> A comparison in the simplification gate had
been inverted since 2023, so a floor roughened by one pass and re-cut flat by a later one stayed
at its finest level for the life of the tree. On a 1000-move CL replay the node count drops 17%
and the peak working set 8%; the meshed-geometry writer and the fly-piece remover now tolerate a
fold landing under them mid-cut instead of crashing. See
<a href="upgrading-to-3.2/geometry-rendering-and-stability.html">Geometry, rendering and native stability</a></li>
<li><strong>A host with no usable OpenGL no longer aborts the process.</strong> Where the native display
initialiser used to kill the process at startup — every service on a machine whose graphics
driver and kernel module disagree — it now reports, and NC play, physics and training run
without 3D. <a class="xref" href="../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_IsGlAvailable">IsGlAvailable</a> carries the verdict and HiNc logs it once at
startup; a host must not obtain a <a class="xref" href="../api/Hi.Disp.DispEngine.html">DispEngine</a> while it is <code>false</code>. See
<a href="../product/system-requirements.html">System requirements</a></li>
<li><strong>Packaging.</strong> The Linux licence-key native library in the HiDisp package ships stripped: the
protected file no longer carries debug information</li>
</ul>
<p><strong>Committed after the 3.2.26 pack — these ship in the next package build:</strong></p>
<ul>
<li><strong><code>BackgroundTemperature</code> renames to <code>AmbientTemperature</code>.</strong>
<a class="xref" href="../api/Hi.Machining.MachiningEquipmentUtils.SetupEquipment.html#Hi_Machining_MachiningEquipmentUtils_SetupEquipment_AmbientTemperature_C">AmbientTemperature_C</a> /
<a class="xref" href="../api/Hi.Machining.MachiningEquipmentUtils.SetupEquipment.html#Hi_Machining_MachiningEquipmentUtils_SetupEquipment_AmbientTemperature_K">AmbientTemperature_K</a> (and the same
pair on <a class="xref" href="../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html">MachiningEquipment</a>) name the shop-floor
temperature the workpiece, cutter, chips and spindle start at and the spindle cools toward; the
old names remain as <code>[Obsolete]</code> delegates. A <code>.hincproj</code> now writes <code>&lt;AmbientTemperature_C&gt;</code> and
still reads the legacy element and the 2019 wrapper, so no project needs editing. See
<a href="../manual/setup/coolant.html">Coolant</a> and
<a href="upgrading-to-3.2/breaking-changes.html#7-signature-and-shape-changes">Breaking changes</a></li>
<li><strong>Every NC-pipeline rewind raises one event.</strong> Suit rewiring, <code>PowerReset</code> and
<a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ResetRuntime_">ResetRuntime</a> share one seam that drops the runner session
state and the NC diagnostics and raises
<a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_OnNcPipelineReset">OnNcPipelineReset</a> before the next file's pieces
arrive, so a consumer keyed by file / sentence index drops its stale index in step instead of
merging the next file into the previous file's numbers. See
<a href="upgrading-to-3.2/session-project-and-commands.html">Session, project and commands</a></li>
</ul>
<h2 id="hinc-packages-version-3224">HiNc Packages Version 3.2.24</h2>
<p>Correctness and coverage that landed after 3.2.7. The 3.1.175 → 3.2 line jump is the
3.2.7 entry below; the long form is still
<a href="upgrading-to-3.2/index.html">Upgrading from 3.1.175 to 3.2</a>.</p>
<div class="IMPORTANT">
<h5>Important</h5>
<p><strong>Adoption status.</strong> Verification is still in progress across most areas.</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, serviced as
<code>3.1.175.&lt;patch&gt;</code>. The Blazor front end tracks the 3.2 packages, so it is not a way
to stay on the 3.1 behaviour.</p>
<p><strong>Do not put SoftNc canned-cycle indexing with rotary words into production.</strong> SoftNc is
the default engine, and its G81–G89 family does not take A / B / C words on a repeat
block: a rotary-only repeat does not fire the cycle, a mixed block drops the rotary
word, and under G68.2 the hole follows the table. Programs that index a rotary axis that
way should run with
<a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_EnableSoftNcRunner">EnableSoftNcRunner</a> set <code>false</code> — the
HardNc fallback indexes those blocks the way a control does. See
<a href="upgrading-to-3.2/brand-nc-language-coverage.html#fanuc-and-iso-common">Brand NC language coverage</a>.</p>
</div>
<ul>
<li><strong>Whole-program throughput against the last 3.1 set is 2.5×–18.8×</strong> in steps per
second (paired on one 32-logical-processor Linux workstation; the ratio grows with
program length and mesh fineness). The six-core ceiling that used to cap the 3.1
pipeline is about 6% of that gap. Figures and conditions:
<a href="upgrading-to-3.2/performance-and-footprint.html">Performance and footprint</a></li>
<li><strong><code>M02</code> / <code>M30</code> / <code>END PGM</code> is a reset edge on SoftNc.</strong> Tool-length compensation
(including TCP), tilt, cutter-radius compensation and canned cycles cancel on the <em>next</em>
block; the end-of-program block itself still runs under the modal state it executed with.
HardNc still carries <code>G43.4</code> across <code>M02</code>. See
<a href="upgrading-to-3.2/results-that-change-on-upgrade.html">Results that change on upgrade</a></li>
<li><strong>An omitted H is no longer a silent zero</strong> — it takes the equipped tool's offset row
first, then warns <code>Comp-ToolHeight--NoToolForOmittedH</code> / <code>--NoToolForOmittedHRtcp</code>. A
vacant table row warns <code>Comp-ToolHeight--RowMissing</code></li>
<li><strong>Cutter-radius compensation runs in the selected G17 / G18 / G19 plane.</strong> An
interference path that used to swap sides silently now reports
<code>RadiusComp--Interference</code></li>
<li><strong>Siemens <code>ROTS</code> / <code>AROTS</code> are simulated</strong> into the tilt chain in Sinumerik RPY order.
<code>SCALE</code> / <code>MIRROR</code> / <code>CROTS</code> remain recognized, not simulated</li>
<li><strong>Heidenhain <code>LN</code> vector blocks</strong> resolve into rotary axes through
<a class="xref" href="../api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainLnOrientationSyntax.html">HeidenhainLnOrientationSyntax</a></li>
<li><strong>Fanuc <code>G54.1 Pn</code> (also written <code>G54 Pn</code>) and <code>G59.1</code>–<code>G59.9</code></strong> resolve additional work
offsets. A selected row nobody has entered reports <code>Coord-WorkOffset--AdditionalZero</code></li>
<li><strong>Runner feedrate members rename to <code>CommandedClFeedrate_mmds</code>.</strong> Physics follows the
equipped tool's tip via
<a class="xref" href="../api/Hi.MachiningSteps.MachineMotionStep.html#Hi_MachiningSteps_MachineMotionStep_ActualTipFeedrate_mmds">ActualTipFeedrate_mmds</a>. A project-level
<a class="xref" href="../api/Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis.html">RadiusOffsetBasis</a> decides what a tool-house
refresh writes into the D column — see
<a href="../anatomy/general-setup/controller/program-data/tool-offsets.html#the-radius-basis">Tool Offsets</a></li>
<li><strong><code>GetMillingEquipment</code> → <code>GetMachiningEquipment</code>.</strong> <code>CodeXyzabcMachineTool</code> is absorbed
into <a class="xref" href="../api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> (the old XML name still loads). The
equipment splits into authored
<a class="xref" href="../api/Hi.Machining.MachiningEquipmentUtils.SetupEquipment.html">SetupEquipment</a> and runtime
<a class="xref" href="../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html">MachiningEquipment</a></li>
<li><strong>Close joins the <a class="xref" href="../api/Hi.MachiningProcs.ProjectFileBusyException.html">ProjectFileBusyException</a> gate.</strong>
<a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_LoadProject_">LoadProject</a> and
<a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_ReloadProject_">ReloadProject</a> take a message sink for
load-time diagnostics</li>
<li><strong><a class="xref" href="../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_OmitLeadingZero">OmitLeadingZero</a></strong> is an output style the project can pin
(<code>.5</code> vs <code>0.5</code>)</li>
</ul>
<h2 id="hinc-packages-version-327">HiNc Packages Version 3.2.7</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
coverage that made possible. A Siemens or Heidenhain program that 3.1.175 could not interpret past
its first computed coordinate or subprogram call now replays end to end.</p>
<p><strong>Control-language coverage.</strong> The figure is <strong>how far our own verification has reached</strong> on that
dialect — it is not the share of the language that is implemented, and it is not a guarantee for a
program we have not seen:</p>
<table>
<thead>
<tr>
<th>Control language</th>
<th>Verification reached</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cutter location (NX CLSF / APT source)</td>
<td>~90%</td>
</tr>
<tr>
<td>Fanuc</td>
<td>~80%</td>
</tr>
<tr>
<td>Siemens SINUMERIK</td>
<td>~60%</td>
</tr>
<tr>
<td>Heidenhain (klartext and DIN/ISO)</td>
<td>~40%</td>
</tr>
</tbody>
</table>
<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="../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/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/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. The WPF desktop client is
retired with this line: it was a demo of the same packages rather than a product surface, it takes
no feature work, and it is no longer documented here. 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 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 3.2.7 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-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/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>
<ul>
<li><strong>Registration:</strong> <code>XFactory.Generators</code> becomes a <code>ConcurrentDictionary</code> (a caller declaring the
old type breaks at compile time), and <code>LocalProjectService.Reg()</code> must still be called once at
startup before any project XML is deserialized</li>
<li><strong>Messages:</strong> <code>MixedProgress0</code>, <code>MultiTagMessage</code> and <code>MultiTagMessageUtil</code> are removed; every
message parameter is retyped from <code>IProgress&lt;object&gt;</code> to <code>IProgress&lt;IMessage&gt;</code>; <code>Category.General</code>
is deleted and <code>NcDiagnostic.Text</code> renames to <code>Notification</code></li>
<li><strong>Session lifetime:</strong> <code>LocalProjectService.SessionShell</code> is null outside a session and
<code>ShellProgress</code> is recreated per session — hold no long-lived reference; <code>MachiningSession</code> takes
an injected <code>IMachiningService</code>, and <code>IMachiningService</code> replaces
<code>PlayerCancellationToken</code> / <code>PausePlayer</code> with one <code>PacePlayer</code></li>
<li><strong>Play verbs:</strong> <code>PlayNcFile</code> / <code>RunNcFile</code> gain an <code>NcKind kind = NcKind.Auto</code> parameter and
dispatch by extension; the old narrow verbs become <code>PlayBrandNcFile</code> / <code>RunBrandNcFile</code>. The
&ldquo;Control&rdquo; vocabulary retires with them (<code>IControlRunner</code> → <code>INcRunner</code>, <code>RunControlLines</code> →
<code>RunNcLines</code>, <code>ControlKind</code> → <code>NcKind</code>)</li>
<li><strong>Hard renames, no shim:</strong> runtime geom → <strong>meshed geom</strong> across <code>WorkpieceService</code>;
<code>IContourTray</code> / <code>UniformContourTray</code> / <code>FreeContourTray</code> → <strong><code>IFluting</code> / <code>UniformFluting</code> /
<code>FreeFluting</code></strong> and <code>MillingCutter.FluteContourTray</code> → <code>Fluting</code>; HiNc's <code>Hi.Common.ResourceUtil</code>
→ <code>ResourceLayout</code> (it was shadowing HiGeom's same-named type); the native topo-STL wrappers move
to <code>Hi.Geom.Topo</code>; <code>ITimeGetter</code> → <code>ITimecoded</code>; <code>ClStrip.DrawingRefreshing</code> →
<code>DrawingRefreshed</code>; <code>SoftNcRunner.NcDependencyList</code> → <code>PipelineNcDependencyList</code></li>
<li><strong>Removals:</strong> <code>CsvRunner0</code> and <code>EnableSoftCsvRunner</code>, <code>RawCsvRunner</code>, <code>IndexedSentence</code>,
<code>SimpleSessionCommand</code>, <code>LsStl</code>; the GUI-layer types <code>MachiningProjectDisplayee</code>,
<code>IsoCoordinateEntryDisplayee</code>, <code>HeidenhainCoordinateEntryDisplayee</code>, <code>UserConfig</code>, <code>UserService</code>
and <code>PlayerDivConfig</code>; the managed physics kernel types <code>FluteZData</code>,
<code>MillingForceUtil.RuntimePack</code> / <code>LayerPack</code> / <code>AnglePack</code> and
<code>MillingPhysicsBrief.YieldStressMinHeight_mm</code>; <code>CultureUtil.SupportedCultureNames</code> and
<code>SetCurrentCulture(string)</code>; eight <code>gl*</code> P/Invoke declarations that had no backing export; and
<code>PostExecutionCommand</code>'s meshed-geometry output pair (use <code>RecordMeshedGeomCommand</code> /
<code>ExportMeshedGeomToStlCommand</code> instead)</li>
<li><strong>Shapes:</strong> <code>MachiningToolHouse</code> derives from <code>Dictionary&lt;int, IMachiningTool&gt;</code>;
<code>MachiningStep.ActualTimecode</code> / <code>ActualDateTime</code> become get-only views onto the new
<code>ActualTime</code>; <code>PreSettingCommand</code> becomes a legacy bundle that expands on load into five
single-setting commands and is never written back; <code>ToPresentDto</code> wire keys change</li>
<li><strong>Defaults:</strong> <code>EnableSoftNcRunner</code> is <code>true</code> — SoftNc is the NC engine and <code>HardNcRunner</code> is the
opt-out fallback; <code>EnableNativeMillingPhysics</code> is <code>true</code> and a shipping build throws if you set
it <code>false</code>; <code>YieldingStressRatio</code> reports <strong><code>NaN</code></strong> instead of <code>0</code> when it cannot be evaluated, so
a caller reading <code>0</code> as &ldquo;no constraint&rdquo; must add a <code>NaN</code> branch</li>
<li><strong>New licence feature <code>NcComposition</code> (id 22)</strong> gates registering a non-built-in unit into a
<code>SoftNcRunner</code> pipeline and executing an NC-embedded C# script. Degradation is silent and
functional — the unit is skipped with one <code>Composition--NotLicensed</code> — so an unlicensed
installation produces a <em>different simulation</em>, not an error</li>
<li><strong>Packaging:</strong> x64 only; the shipped machine-tool packages are renamed and now carry the <code>.default</code>
marker (<code>MachineTool/Table-B1.default</code>, <code>MachineTool/CT-350.default</code>), so a project that refers to
one by its earlier path must be repointed; HiNcServer pins request localization to English and
HiNcRcl drops the inert <code>HiNC:DisplayEngine:FontFile</code> key</li>
</ul>
<p>Some results change without any code change — the pivot-transform anchor, a G68 rotation that was a
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/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
subset: modal vocabulary and <code>T=&quot;name&quot;</code> tool calls, an expression evaluator over R-parameters and
<code>$</code>-system variables, programmable frames and <code>$P_UIFR</code>, <code>TRAORI</code> RTCP and <code>CYCLE800</code> swivel,
subprogram and <code>MCALL</code> cycle calls, full control flow with iteration watchdogs, the
<code>AC()</code> / <code>IC()</code> / <code>DC()</code> per-word coordinate functions and the coded-position family</li>
<li><strong>Heidenhain plays both dialects on one preset</strong> — klartext motion, datums, tool calls, arcs and
cycles; Q-parameter evaluation with FN 9–12 conditional jumps; the <code>PLANE</code> / <code>FUNCTION TCPM</code> /
<code>M128</code> tilt and RTCP stack; subprogram and <code>CALL PGM</code> calls; post-processed spellings written
without separators; and the DIN/ISO dialect with its absolute <code>I</code> / <code>J</code> / <code>K</code> arc centres</li>
<li><strong>Fanuc Custom Macro B and polar interpolation</strong> — <code>#var</code> expressions, <code>IF</code> / <code>GOTO</code> / <code>WHILE</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 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
does not touch round-trip byte-identically. Output follows the source's decimal digits and is
written back in the source file's encoding, so a GBK or Big5 program keeps its comments</li>
<li><strong>Cutter-location files drive a real machine chain</strong>, not only a <code>ClMillingDevice</code>, and a played CL
program converts to Fanuc NC through <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ConvertClToNcFiles_">ConvertClToNcFiles</a></li>
<li><strong>Milling physics moved into the native kernel</strong> — engagement, force and the sequential thermal
chain — with the tool's scalar physics frozen once per session into
<a class="xref" href="../api/Hi.Milling.MillingTools.MillingToolPhysicsPack.html">MillingToolPhysicsPack</a>, which also makes force waveforms
reproducible between two plays of the same program</li>
<li><strong>Session commands declare themselves</strong> through
<a class="xref" href="../api/Hi.SessionCommands.CommandCatalogAttribute.html">CommandCatalogAttribute</a> and
<a class="xref" href="../api/Hi.SessionCommands.CommandFieldAttribute.html">CommandFieldAttribute</a>, so a generic editor renders them without a
hand-written form; the HTTP surface answers a no-session or no-project call with 409 and an
<a class="xref" href="../api/Hi.MachiningProcs.ApiActionResult.html">ApiActionResult</a> envelope carrying the call's notifications</li>
<li><strong>Diagnostics carry a template and its arguments</strong>, so a front end can re-render a notification in
its own language, and repeats fold into one per-run summary instead of one message per block</li>
<li><strong>Shipped resources carry a <code>.default</code> marker</strong> distinguishing system territory from user files,
and HiNc-Resource ships the five brand controller presets and three coolant presets so those load
browsers start populated</li>
<li><strong>A parser configuration is a file, and it is shareable.</strong> <a class="xref" href="../api/Hi.NcParsers.NcRunnerSuit.html">NcRunnerSuit</a> bundles
a runner with its per-case data as one loadable unit, and per-case data now travels as proxy
placeholders that resolve against the owning project — so one controller configuration is no longer
welded to the job it was first built for</li>
<li><strong>A long program no longer degrades as it plays.</strong> A dead equality guard made the session append an
NC-optimization option entry for every played act instead of only at change points, and reading the
last one walked the whole map — together, quadratic. On a 2.35-million-line Siemens program the
per-100,000-line rate now stays flat instead of climbing from 73 s to about 11 minutes. It applied
to every runner, including sessions doing no optimization at all</li>
<li><strong>Performance and footprint, measured</strong> — physics in the native kernel takes a paired play from
59.3 s / 16.1 GB allocated to 40.6 s / 3.4 GB; building the topology of a large STL is linear
instead of quadratic in triangle count (18.7× at 300k triangles, and it was 99.6% of the load);
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/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
fixed; large geometry now builds its display topology off-thread instead of freezing the UI</li>
</ul>
<h2 id="hinc-packages-version-31175">HiNc Packages Version 3.1.175</h2>
<ul>
<li><a class="xref" href="../api/Hi.NcMech.Workpieces.WorkpieceService.html">WorkpieceService</a> file IO now takes <strong>relative</strong> paths and resolves them against a base-directory <code>Func&lt;string&gt;</code> injected by <a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> — the runtime-geometry write/read no longer requires the caller to pre-combine an absolute path. <code>WorkpieceService.ReadRuntimeGeom</code> (now <code>ReadMeshedGeom</code>) now returns whether the source file existed (the not-found notice moves to the calling shell)</li>
<li>Rename runtime-geometry mesh-export methods to the <code>Export*</code> convention (STL/OBJ/PLY are foreign interchange formats, not native writes): <code>WriteRuntimeGeomToStl/Obj/Ply</code> → <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ExportRuntimeGeomToStl_">ExportRuntimeGeomToStl</a> / <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ExportRuntimeGeomToObj_">ExportRuntimeGeomToObj</a> / <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ExportRuntimeGeomToPly_">ExportRuntimeGeomToPly</a>; the session command <code>WriteRuntimeGeomToStlCommand</code> → <code>ExportRuntimeGeomToStlCommand</code> (now <a class="xref" href="../api/Hi.SessionCommands.ExportMeshedGeomToStlCommand.html">ExportMeshedGeomToStlCommand</a>) keeps the old <code>&lt;WriteRuntimeGeomToStlCommand&gt;</code> element name as a back-compat alias so existing projects still load</li>
</ul>
<h2 id="hinc-packages-version-31173">HiNc Packages Version 3.1.173</h2>
<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 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, 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>
<li><strong>Rename <code>RuntimeApi</code> → <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html">SessionShell</a></strong> (the runtime entry point exposed to scripting); <code>IShellCommand</code> → <code>ISessionCommand</code> and <code>RuntimeController</code> → <code>SessionShellController</code>; the <code>Hi.ShellCommands</code> namespace moves to <code>Hi.SessionCommands</code>, and every command implementer's <code>Run()</code> parameter renames <code>scriptApi</code> → <code>sessionShell</code></li>
<li>Tri-state milling-physics contract: <a class="xref" href="../api/Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> physics getters converge on a tri-state result, non-null <a class="xref" href="../api/Hi.MillingForces.MillingPhysicsBrief.html">MillingPhysicsBrief</a> on no-cut steps under <code>EnablePhysics</code>; silently skip thermal physics on null FluteMaterial / WorkpieceMaterial; lazy first-equip warning; align relief-face null-sentinel across NoCut + producer (in NcOpt and forces)</li>
<li>Rename <code>IMachiningStepHost</code> → <a class="xref" href="../api/Hi.MachiningSteps.IMachiningService.html">IMachiningService</a> (drops the <code>ICsScriptApi</code> seam)</li>
<li>Fixes: rotary IK round-trip anchored to pre-FK interpolated angle; <code>ForceAccelShot.ReadRows</code> skips blank lines</li>
</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 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 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>
<li>Update ISO coordinate rendering for 3+2 axis machines: coordinate position now uses <code>IsoCoordinateEntryDisplayee</code> with full machining chain anchor instead of table-buckle-only anchor</li>
<li>Rename <code>SessionMessageHost</code> → <code>SessionProgress</code> on both <a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_ShellProgress">ShellProgress</a> and <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ShellProgress">ShellProgress</a> (<code>SessionShell.SessionMessageHost</code> is kept as <code>[Obsolete]</code>)</li>
<li>Remove obsolete <code>HiLog</code> logging utility and <code>DynamicMachiningProjectDisplayee0</code></li>
</ul>
<h2 id="hinc-packages-version-31160">HiNc Packages Version 3.1.160</h2>
<ul>
<li>Fix NC optimization R-format arc interpolation with negative R values (follow-up to v158 R-format arc fix)</li>
<li>Fix cubetree construction defect when a triangle edge passes through a wire corner</li>
<li>Mech Builder: geometry (STL) file picker for anchored transformation now offers <strong>Project</strong> directory in addition to <strong>Resource</strong> directory.</li>
<li>Rename XML IO utilities: <code>XmlSourceAndFile&lt;T&gt;</code> → <a class="xref" href="../api/Hi.Common.XmlUtils.FileRefSource-1.html">FileRefSource&lt;T&gt;</a>, <code>CombineAsSubDirectory</code> → <a class="xref" href="../api/Hi.Common.PathUtils.PathUtil.html#Hi_Common_PathUtils_PathUtil_GetResourceDirectory_">GetResourceDirectory</a>, <code>MakeXmlSourceWithRebaseFile</code> → <a class="xref" href="../api/Hi.Common.XmlUtils.XmlUtil.html#Hi_Common_XmlUtils_XmlUtil_MakeXmlSourceToFileRef_">MakeXmlSourceToFileRef</a></li>
</ul>
<h2 id="hinc-packages-version-31158">HiNc Packages Version 3.1.158</h2>
<ul>
<li>Fix G53.1 tool height compensation behavior: replace <code>NcEnv.SetToolHeightCompensationOnFeatureNormal</code> configuration with automatic detection via NC flag state</li>
<li>Make <a class="xref" href="../api/Hi.Numerical.HardNcEnv.html#Hi_Numerical_HardNcEnv_EnableIntegerShrinkOnPositionCommand">EnableIntegerShrinkOnPositionCommand</a> configurable via project settings (previously hard-coded by CNC brand, now defaults to <code>false</code> with XML IO support)</li>
<li>Fix NC optimization splitting R-format arcs (G02/G03 with R parameter) by converting to IJK format, since R sign meaning does not apply correctly to individual fragments</li>
<li>Fix step.csv reading crash on null or malformed values</li>
<li>Fix XML IO sub-base directory not applied in some project file operations</li>
<li>Improve CSV actual time parsing to support <code>DateTime</code> format in addition to <code>TimeSpan</code> (see <a class="xref" href="../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a>)</li>
<li>Fix CSV title parsing to trim surrounding quotes</li>
</ul>
<h2 id="hinc-packages-version-31156">HiNc Packages Version 3.1.156</h2>
<ul>
<li>Fix G68 coordinate rotation transformation for non-origin rotation centers</li>
<li>Fix NC optimization arc/circle offset when splitting arc fragments across multiple lines</li>
<li>Fix optimization rotation code jumping at ±180° cycle boundary by applying cyclic angle comparison</li>
<li>Fix RTCP on unmatched tool offset</li>
<li>Fix blocking issue when time-mapping file not found</li>
<li>Fix <a class="xref" href="../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_FlagsText">FlagsText</a> always null after NC parser refactoring</li>
</ul>
<h2 id="hinc-packages-version-31150">HiNc Packages Version 3.1.150</h2>
<ul>
<li>Add cubetree geometry defect scanning (<a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ScanRuntimeGeomInfDefect_">ScanRuntimeGeomInfDefect</a>) and clearing (<a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ClearDefectDisplayee_">ClearDefectDisplayee</a>) for detecting and visualizing geometry anomalies in workpieces (see <a class="xref" href="../workflows/geometry-validation.html">Workflow: Geometry Validation</a>)</li>
<li>Upgrade internal fraction representation to float128 precision for improved cubetree geometry accuracy and numerical stability</li>
<li>Refactor messaging system from <code>IMessageHost</code> to standard <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress&lt;T&gt;</a> pattern; <a class="xref" href="../api/Hi.MachiningProcs.ShellProgress.html">ShellProgress</a> (formerly <code>SessionMessageHost</code>) now implements <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress&lt;T&gt;</a>, and all messaging methods renamed from <code>Add*</code> to <code>Report*</code> (e.g., <code>AddProgress</code> → <code>MultiTagMessageUtil.ReportProgress</code>)</li>
<li>Fix cubetree initialization crash</li>
<li>Improve postprocess precision by applying sin–cos parameterization instead of direct angle-based formulation for rotary axis numerical solving in <a class="xref" href="../api/Hi.Numerical.Xyzabc.XyzabcSolver.html">XyzabcSolver</a></li>
<li>Add asynchronous anchor solid preparation on project load for improved startup performance</li>
</ul>
<h2 id="hinc-packages-version-31144">HiNc Packages Version 3.1.144</h2>
<ul>
<li>Enhance Siemens Sinumerik support:
<ul>
<li>Siemens CYCLE800 coordinate transform and reset</li>
<li>Siemens MCALL CYCLE81() drilling cycle parsing</li>
<li>Siemens TRAORI/TRAFOOF/SUPA flag parsing</li>
</ul>
</li>
<li>Fix Siemens TRAFOOF plain rotation coordinate transform issue</li>
<li>Fix Siemens coordinate transform for successive file running</li>
<li>Fix relief face collision floating-point precision issue</li>
<li>Replace MongoDB with SQLite for local step data storage (significant package size reduction)</li>
<li>Add machining and motion resolution dynamic adjustment functions</li>
</ul>
<h2 id="hinc-packages-version-31106">HiNc Packages Version 3.1.106</h2>
<ul>
<li>Rename mapping API for clearer naming:
<ul>
<li><code>ReadCsvByTimeInterpolation</code> → <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_MapSingleByCsvFile_">MapSingleByCsvFile</a> (one-to-one mapping)</li>
<li><code>MapByActualTime</code> → <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_MapSeriesByCsvFile_">MapSeriesByCsvFile</a> (one-to-many mapping)</li>
</ul>
</li>
<li>Rename CSV column prefix <code>Spindle</code> to <code>Holder</code> for sensor data mapping</li>
<li>Unify CSV column tags to <a class="xref" href="../api/Hi.Mapping.MappingUtil.html">MappingUtil</a> for consistent data mapping</li>
<li>Fix <a class="xref" href="../api/Hi.CutterLocations.ClStrips.ClStrip.html#Hi_CutterLocations_ClStrips_ClStrip_ChartRange">ChartRange</a> manipulation to be time-based instead of step-based for more accurate time chart display</li>
<li>Tune thread priority for machining parallel processing to improve UI responsiveness during simulation</li>
<li>Various code cleanup and improvements</li>
</ul>
<h2 id="hinc-packages-version-31102">HiNc Packages Version 3.1.102</h2>
<ul>
<li>Separate resource files (Resource, wwwroot, Doc) to HiNc-Resource nuget package for smaller package size</li>
<li>Add <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ScaledFeedPerCycle_">ScaledFeedPerCycle</a> function for scaled feed-per-cycle machining motion resolution</li>
<li>Upgrade target framework to .NET 10.0</li>
<li>Various code cleanup and improvements</li>
</ul>
<h2 id="hinc-packages-version-31100">HiNc Packages Version 3.1.100</h2>
<ul>
<li>Refactor project architecture: split runtime functions from <a class="xref" href="../api/Hi.MachiningProcs.MachiningProject.html">MachiningProject</a> to <a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> for better separation of concerns</li>
<li>Improve <a class="xref" href="../api/Hi.MillingForces.Training.MillingTraining.html">MillingTraining</a> module with separate lead and result parameter templates for more accurate cutting parameter training</li>
<li>Separate C++ library for code protection</li>
<li>Add UTF-8 file path support for runtime geometry IO operations</li>
<li>Improve <code>CsvRunner0</code> with enhanced time mapping pattern</li>
<li>Various architecture improvements and bug fixes</li>
</ul>
<h2 id="hinc-packages-version-3191">HiNc Packages Version 3.1.91</h2>
<ul>
<li>Add <a class="xref" href="../api/Hi.NcOpt.NcOptimizationEmbeddedLogMode.html">NcOptimizationEmbeddedLogMode</a> to control embedded log detail level (None/SimpleLog/FullLog) (see <a href="../workflows/nc-optimization.html#embedded-log-comments">Embedded Log Comments</a>).</li>
<li>Fix bug of <code>NcOptProc</code> duplicated feedrate assignment</li>
</ul>
<h2 id="hinc-packages-version-3190">HiNc Packages Version 3.1.90</h2>
<ul>
<li>Rename optimization log API <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_EnableIndividualStepAdjustmentLog_">EnableIndividualStepAdjustmentLog</a></li>
<li>Fix crash from workpiece displaying with specific mechanical topology setting</li>
<li>Improve <code>.flatproc.log</code> output to maintain step order during parallel computation</li>
<li>Various stability improvements and bug fixes</li>
</ul>
<h2 id="hinc-packages-version-3186">HiNc Packages Version 3.1.86</h2>
<ul>
<li>Re-build <code>NcOptProc</code> with stricter optimization logics</li>
<li>Add optimization logging features (see <a href="../workflows/nc-optimization.html#optimization-logs">Optimization Logs</a>):
<ul>
<li><code>.flatproc.log</code> file output for optimization process analysis</li>
<li>Embedded log comments in optimized NC file marking source lines with <code>(src)</code> suffix</li>
</ul>
</li>
<li>Fix cutting depth and width accuracy by bounding-box method with workpiece surface</li>
<li>Fix collision check error during concurrent changing collidable object</li>
<li>Various stability improvements and bug fixes</li>
</ul>
<h2 id="hinc-packages-version-3184">HiNc Packages Version 3.1.84</h2>
<ul>
<li>Optimize memory usage by shrinking map-size of clStripPos</li>
<li>Fix design pattern of cutting parameter training module (<a class="xref" href="../api/Hi.MillingForces.Training.MillingTraining.html">MillingTraining</a>)</li>
<li>Add <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_LoadCuttingParaByFile_">LoadCuttingParaByFile</a> function to load cutting parameters from file</li>
<li>Improve <code>CsvRunner0</code> actual time parsing: automatically calculate step duration from actual time when duration is not provided</li>
<li>Enhance message handling in <a class="xref" href="../api/Hi.MachiningProcs.SessionShell.html">SessionShell</a> by unifying <a class="xref" href="../api/Hi.MachiningProcs.ShellProgress.html">ShellProgress</a> usage</li>
<li>Improve optimization performance with better task scheduling</li>
<li>Various performance improvements and bug fixes</li>
</ul>
<h2 id="hinc-packages-version-3175">HiNc Packages Version 3.1.75</h2>
<ul>
<li>Add actual time tracking functionality (<a class="xref" href="../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_ActualTimecode_">ActualTimecode</a>)</li>
<li>Various stability improvements and bug fixes</li>
</ul>
<h2 id="hinc-packages-version-3174">HiNc Packages Version 3.1.74</h2>
<ul>
<li>Rename class <code>MillingCutterOptLimit</code> to <a class="xref" href="../api/Hi.NcOpt.MillingCutterOptOption.html">MillingCutterOptOption</a></li>
<li>Add physics simulation function for relief face collision detection (<a class="xref" href="../api/Hi.MillingForces.MillingPhysicsBrief.html#Hi_MillingForces_MillingPhysicsBrief_ReliefFaceCollidingSpeed_mmds">ReliefFaceCollidingSpeed_mmds</a>, <a class="xref" href="../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_IsReliefFaceCollided">IsReliefFaceCollided</a>) and optimization (<a class="xref" href="../api/Hi.NcOpt.MillingCutterOptOption.html#Hi_NcOpt_MillingCutterOptOption_EnableLimitByReliefAngle">EnableLimitByReliefAngle</a>)</li>
<li>Add <code>UpdateNcOptOption</code> function to step processing</li>
<li>Fix step ordering bug from concurrent processing</li>
<li>Fix ClStrip shrinking to zero issue</li>
</ul>
</article>
<div class="contribution d-print-none">
</div>
<div class="next-article d-print-none border-top" id="nextArticle"></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>