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-12 18:16:27 +08:00

472 lines
43 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-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
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 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-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>