Archived
479 lines
40 KiB
HTML
479 lines
40 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Breaking changes | HiAPI-C# 2025 </title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="title" content="Breaking changes | 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 "{query}"">
|
|
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
|
<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="Release-Upgrading-BreakingChanges">
|
|
<h1 id="breaking-changes">Breaking changes</h1>
|
|
|
|
<p>In the order they will bite an upgrading host.</p>
|
|
<h2 id="1-registration-before-anything-else">1. Registration, before anything else</h2>
|
|
<p><code>XFactory.Generators</code> changes from a plain <code>Dictionary</code> to a <code>ConcurrentDictionary</code>, so parallel
|
|
<code>Reg()</code> calls no longer corrupt the registration map. The property is public, so a caller that
|
|
declares its type explicitly stops compiling.</p>
|
|
<p>Carried over from 3.1.172 and still the first thing an upgrading host hits:
|
|
<a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_Reg_">Reg</a> must be called once at startup, <strong>before any
|
|
project XML is deserialized</strong>. Registration no longer happens by accident when a type is first
|
|
touched. See <a class="xref" href="../../technique/api-foundations/xml-io.html">XML IO</a>.</p>
|
|
<h2 id="2-the-message-channel">2. The message channel</h2>
|
|
<p>Message reporting is rebuilt on a unified model. Every notification carries a
|
|
<a class="xref" href="../../api/Hi.Common.Messages.Severity.html">Severity</a>, a <a class="xref" href="../../api/Hi.Common.Messages.Category.html">Category</a> and a filterable id
|
|
(<a class="xref" href="../../api/Hi.Common.Messages.SimpleMessage.html">SimpleMessage</a>), and arrives on one of three <strong>typed sinks</strong>:
|
|
<a class="xref" href="../../api/Hi.MachiningProcs.ShellProgress.html">ShellProgress</a> for session-lifecycle messages,
|
|
<a class="xref" href="../../api/Hi.MachiningProcs.StepDiagnosticProgress.html">StepDiagnosticProgress</a> for step-anchored diagnostics, and
|
|
<a class="xref" href="../../api/Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a> for NC-parsing diagnostics.</p>
|
|
<p><code>MixedProgress0</code>, <code>MultiTagMessage</code> and <code>MultiTagMessageUtil</code> are removed. Every message parameter
|
|
across the API — the <a class="xref" href="../../api/Hi.Common.XmlUtils.XFactory.html">XFactory</a> deserialization chain included — is retyped
|
|
from <code>IProgress<object></code> to <code>IProgress<IMessage></code>. <code>Category.General</code> is deleted,
|
|
<a class="xref" href="../../api/Hi.Common.Messages.MessageUtil.html">MessageUtil</a> becomes id-first <code>{Category}{Severity}</code>, and
|
|
<code>NcDiagnostic.Text</code> renames to <a class="xref" href="../../api/Hi.NcParsers.NcDiagnostic.html#Hi_NcParsers_NcDiagnostic_Notification">Notification</a>. See
|
|
<a class="xref" href="../../technique/api-foundations/message-management.html">Message Management</a>.</p>
|
|
<h2 id="3-the-session-surface">3. The session surface</h2>
|
|
<p><code>LocalProjectService.SessionShell</code> is created by <code>BeginSession()</code> and nulled at <code>EndSession()</code> — it
|
|
is <strong>null outside a session</strong> and no longer lazily created. <a class="xref" href="../../api/Hi.MachiningProcs.ShellProgress.html">ShellProgress</a>
|
|
is recreated per session, so hold no long-lived reference to either: subscribe once through
|
|
<a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_OnShellMessageAdded">OnShellMessageAdded</a> /
|
|
<a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_OnShellMessageCleared">OnShellMessageCleared</a>, or buffer one call's messages
|
|
with <a class="xref" href="../../api/Hi.Common.Messages.MessageCollector.html">MessageCollector</a>.</p>
|
|
<p><a class="xref" href="../../api/Hi.MachiningProcs.MachiningSession.html">MachiningSession</a> takes an injected <a class="xref" href="../../api/Hi.MachiningSteps.IMachiningService.html">IMachiningService</a>
|
|
host in its constructor, and <code>IMachiningService</code> replaces <code>PlayerCancellationToken</code> / <code>PausePlayer</code>
|
|
with a single <a class="xref" href="../../api/Hi.Common.PacePlayer.html">PacePlayer</a> property.</p>
|
|
<h2 id="4-the-play-verbs">4. The play verbs</h2>
|
|
<p><code>Nc</code> becomes the umbrella term for any playable control program, and <code>BrandNc</code> names the
|
|
famous-brand controller-code group as a sibling of <code>Cl</code> and <code>Csv</code>.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Was</th>
|
|
<th>Is now</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>PlayNcFile(file)</code> — brand G-code only</td>
|
|
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_PlayNcFile_">PlayNcFile</a><code>(file, NcKind kind = NcKind.Auto)</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>RunNcFile(file)</code></td>
|
|
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_RunNcFile_">RunNcFile</a><code>(file, NcKind kind = NcKind.Auto)</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>the narrow brand-only file verbs</td>
|
|
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_PlayBrandNcFile_">PlayBrandNcFile</a> / <a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_RunBrandNcFile_">RunBrandNcFile</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>IControlRunner</code></td>
|
|
<td><code>Hi.Numerical.INcRunner</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>RunControlLines</code></td>
|
|
<td><a class="xref" href="../../api/Hi.MachiningProcs.MachiningSession.html#Hi_MachiningProcs_MachiningSession_RunNcLines_">RunNcLines</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>ControlKind</code></td>
|
|
<td><a class="xref" href="../../api/Hi.MachiningProcs.NcKind.html">NcKind</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>IsRunningControlLines</code> / <code>BeginControlRunner</code></td>
|
|
<td><code>IsRunningNcLines</code> / <code>BeginNcRunner</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td>the interim <code>PlayControlFile</code> / <code>RunControlFile</code> mirrors</td>
|
|
<td>removed</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The same rename applies on <code>LocalProjectService</code>, <code>SessionShellController</code> and <code>MachiningSession</code>.
|
|
Only <code>.cl</code> / <code>.cls</code> / <code>.clsf</code> / <code>.csv</code> arguments change meaning —
|
|
<a class="xref" href="../../api/Hi.MachiningProcs.NcKindUtil.html#Hi_MachiningProcs_NcKindUtil_DetectByPath_">DetectByPath</a> treats those as closed extension sets and
|
|
everything else falls back to brand G-code, so an exotic brand extension can never be misrouted.</p>
|
|
<h2 id="5-renames-with-no-shim">5. Renames with no shim</h2>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Was</th>
|
|
<th>Is now</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><code>WorkpieceService.GetRuntimeGeom</code> / <code>ReadRuntimeGeom</code> / <code>WriteRuntimeGeom</code> / <code>SetRuntimeGeom</code> / <code>ResetRuntimeGeom</code> / <code>IsRuntimeGeomInit</code> / <code>ScanRuntimeGeomInfDefect</code></td>
|
|
<td><a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html#Hi_NcMech_Workpieces_WorkpieceService_GetOrBuildMeshedGeom_">GetOrBuildMeshedGeom</a> / <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html#Hi_NcMech_Workpieces_WorkpieceService_ReadMeshedGeom_">ReadMeshedGeom</a> / <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html#Hi_NcMech_Workpieces_WorkpieceService_WriteMeshedGeom_">WriteMeshedGeom</a> / <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html#Hi_NcMech_Workpieces_WorkpieceService_SetMeshedGeom_">SetMeshedGeom</a> / <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html#Hi_NcMech_Workpieces_WorkpieceService_ResetMeshedGeom_">ResetMeshedGeom</a> / <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html#Hi_NcMech_Workpieces_WorkpieceService_IsMeshedGeomInit">IsMeshedGeomInit</a> / <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html#Hi_NcMech_Workpieces_WorkpieceService_ScanMeshedGeomInfDefect_">ScanMeshedGeomInfDefect</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>MachiningEquipmentCollisionIndex.WorkpieceRuntimeGeomGetter</code></td>
|
|
<td><a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentCollisionIndex_WorkpieceMeshedGeomGetter">WorkpieceMeshedGeomGetter</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>IContourTray</code> / <code>UniformContourTray</code> / <code>FreeContourTray</code></td>
|
|
<td><a class="xref" href="../../api/Hi.Milling.FluteContours.IFluting.html">IFluting</a> / <a class="xref" href="../../api/Hi.Milling.FluteContours.UniformFluting.html">UniformFluting</a> / <a class="xref" href="../../api/Hi.Milling.FluteContours.FreeFluting.html">FreeFluting</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>MillingCutter.FluteContourTray</code></td>
|
|
<td><a class="xref" href="../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_Fluting">Fluting</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>Hi.Common.ResourceUtil</code> (the HiNc one)</td>
|
|
<td><a class="xref" href="../../api/Hi.Common.ResourceLayout.html">ResourceLayout</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>NativeTopoStld</code> / <code>NativeTopoStlfr</code> / <code>NativeCarveTopoStl3wfr</code></td>
|
|
<td><a class="xref" href="../../api/Hi.Geom.Topo.NativeTopoStl3d.html">NativeTopoStl3d</a> / <a class="xref" href="../../api/Hi.Geom.Topo.NativeTopoStl3wfr.html">NativeTopoStl3wfr</a> / <a class="xref" href="../../api/Hi.Geom.Topo.CarveStl.html">CarveStl</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>Solid.NativeSmoothTopoStl</code> / <code>Sweptable.NativeTopoStl</code></td>
|
|
<td><a class="xref" href="../../api/Hi.NcMech.Solids.Solid.html#Hi_NcMech_Solids_Solid_SmoothTopoStl3d">SmoothTopoStl3d</a> / <a class="xref" href="../../api/Hi.Machining.Sweptable.html#Hi_Machining_Sweptable_NativeTopoStl3d">NativeTopoStl3d</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>ITimeGetter</code> and its <code>Time</code> member</td>
|
|
<td><code>Hi.Physics.ITimecoded</code> and <code>Timecode</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>ClStrip.DrawingRefreshing</code></td>
|
|
<td><code>ClStrip.DrawingRefreshed</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>CbtrPickable.CleanLinked*</code></td>
|
|
<td><code>CbtrPickable.CleanAttached*</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>SoftNcRunner.NcDependencyList</code></td>
|
|
<td><a class="xref" href="../../api/Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_PipelineNcDependencyList">PipelineNcDependencyList</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>StateActRunner.Feedrate_mmds</code> / <code>Feedrate_mmdmin</code>, <code>ActFeedrate.Feedrate_mmds</code> / <code>Feedrate_mmdmin</code> (and <code>ActRapid</code>), <code>MachineMotionStep.Feedrate_mmds</code>, the <code>MachineMotionStep</code> constructor's <code>feedrate_mmds</code> parameter</td>
|
|
<td><a class="xref" href="../../api/Hi.Numerical.Acts.StateActRunner.html#Hi_Numerical_Acts_StateActRunner_CommandedClFeedrate_mmds">CommandedClFeedrate_mmds</a> / <a class="xref" href="../../api/Hi.Numerical.Acts.StateActRunner.html#Hi_Numerical_Acts_StateActRunner_CommandedClFeedrate_mmdmin">CommandedClFeedrate_mmdmin</a>, <a class="xref" href="../../api/Hi.Numerical.Acts.ActFeedrate.html#Hi_Numerical_Acts_ActFeedrate_CommandedClFeedrate_mmds">CommandedClFeedrate_mmds</a> / <a class="xref" href="../../api/Hi.Numerical.Acts.ActFeedrate.html#Hi_Numerical_Acts_ActFeedrate_CommandedClFeedrate_mmdmin">CommandedClFeedrate_mmdmin</a>, <a class="xref" href="../../api/Hi.MachiningSteps.MachineMotionStep.html#Hi_MachiningSteps_MachineMotionStep_CommandedClFeedrate_mmds">CommandedClFeedrate_mmds</a>, <code>commandedClFeedrate_mmds</code></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>GetMillingEquipment</code></td>
|
|
<td><a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_IGetMachiningEquipment_GetMachiningEquipment_">GetMachiningEquipment</a></td>
|
|
</tr>
|
|
<tr>
|
|
<td><code>CodeXyzabcMachineTool</code> / <code>CodeXyzabcMachineToolUri</code></td>
|
|
<td><a class="xref" href="../../api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> (the old XML names still load)</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>Four notes on that table.</p>
|
|
<p>The <code>SessionShell</code> <strong>script</strong> names for meshed geometry keep hidden <code>[Obsolete]</code> aliases so existing
|
|
player scripts still run; the service-level members do not. <code>WorkpieceService.ResetRuntimeGeom</code> also
|
|
drops its <code>ClStrip</code> parameter.</p>
|
|
<p><code>ClStrip.DrawingRefreshed</code> was renamed because both invocations always fired <em>after</em> the work — the
|
|
<code>-ing</code> name told subscribers the opposite of when they are called. A subscriber that misses the
|
|
rename silently detaches.</p>
|
|
<p>Project and cutter files written before the fluting rename keep loading: each <code>Reg()</code> registers the
|
|
<code>ContourTray</code>-era XName beside the older aliases, and the cutter element reader tries <code>Fluting</code>, then
|
|
<code>FluteContourTray</code>, then <code>FluteContourTrackTray</code>. A cutter that nevertheless fails to resolve its
|
|
fluting machines as a plain bounding shape rather than failing loudly, so verify the load rather than
|
|
assuming it.</p>
|
|
<p>The feedrate members were renamed because the value is the controller's <strong>commanded feedrate of
|
|
the CL point</strong> – the F word after G94/G95/G93 conversion, or for a rapid the CL path over the act
|
|
duration – and not the equipped tool's tip feedrate; under RTCP with a tool-length offset that does
|
|
not describe the equipped tool the two differ. The step now also carries
|
|
<a class="xref" href="../../api/Hi.MachiningSteps.MachineMotionStep.html#Hi_MachiningSteps_MachineMotionStep_ActualTipFeedrate_mmds">ActualTipFeedrate_mmds</a> (client key
|
|
<a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_ActualTipFeedrate_mmdmin">ActualTipFeedrate_mmdmin</a>), which the physics reads. The client key
|
|
<a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_Feedrate_mmdmin">Feedrate_mmdmin</a> keeps its historical name.</p>
|
|
<p><code>SoftNcRunner.PipelineNcDependencyList</code> is the raw list; machine-config consumers read the resolved
|
|
view through <a class="xref" href="../../api/Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_GetEffectiveNcDependencyList_">GetEffectiveNcDependencyList</a>. Legacy
|
|
<code><NcDependencyList></code> XML still loads and migrates.</p>
|
|
<h2 id="6-removals">6. Removals</h2>
|
|
<ul>
|
|
<li><strong>CSV</strong> — <code>CsvRunner0</code>, <code>LocalProjectService.EnableSoftCsvRunner</code>, and the earlier <code>RawCsvRunner</code>
|
|
and <code>CsvRowSemantic</code>. CSV playback has one path, <a class="xref" href="../../api/Hi.Numerical.CsvParsers.GeneralCsvRunner.html">GeneralCsvRunner</a>,
|
|
and <a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_CsvRunner">CsvRunner</a> returns the CSV suit's
|
|
<a class="xref" href="../../api/Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> directly.</li>
|
|
<li><strong>Carriers</strong> — <code>IndexedSentence</code> (wrap a bare <code>Sentence</code> in your own
|
|
<a class="xref" href="../../api/Hi.NcParsers.ISentenceCarrier.html">ISentenceCarrier</a> if you passed one as a <code>sourceCommand</code>),
|
|
<code>SimpleSessionCommand</code>, HiCbtr's <code>[Obsolete] LsStl</code>. The packed <code>MixedIndex</code> file-line key is
|
|
replaced by typed <a class="xref" href="../../api/Hi.Common.FileLines.FileLineIndex.html">FileLineIndex</a> comparison, so file and line positions
|
|
compare by type rather than through a packed integer.</li>
|
|
<li><strong>GUI-layer composition</strong> — <code>MachiningProjectDisplayee</code>, <code>IsoCoordinateEntryDisplayee</code>,
|
|
<code>HeidenhainCoordinateEntryDisplayee</code>, <code>UserConfig</code>, <code>UserService</code>, <code>PlayerDivConfig</code>. Construct
|
|
<a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a> with the <code>ILogger</code>-only constructor and copy the
|
|
displayees from any app project — <code>Hi.Sample.Wpf/Disp/</code> ships them. They compose only public API
|
|
(<a class="xref" href="../../api/Hi.Disp.IDisplayee.html">IDisplayee</a> over <code>LocalProjectService</code>), so tailoring them is the point.</li>
|
|
<li><strong>Managed physics kernel types</strong> — the class <code>FluteZData</code>, <code>MillingForceUtil.RuntimePack</code> /
|
|
<code>LayerPack</code> / <code>AnglePack</code>, the <code>LayerMillingEngagement</code> constructor that built an engagement from a
|
|
z-to-dz list (the default and <code>BinaryReader</code> constructors stay), and
|
|
<code>MillingPhysicsBrief.YieldStressMinHeight_mm</code>.</li>
|
|
<li><strong>Culture declaration</strong> — <code>CultureUtil.SupportedCultureNames</code> and
|
|
<code>CultureUtil.SetCurrentCulture(string)</code>, deleted outright with no <code>[Obsolete]</code> shim. What remains is
|
|
<a class="xref" href="../../api/Hi.Common.CultureUtil.html#Hi_Common_CultureUtil_English">English</a> and <a class="xref" href="../../api/Hi.Common.CultureUtil.html#Hi_Common_CultureUtil_SetCurrentCultureEn_">SetCurrentCultureEn</a>. A host
|
|
that enumerated supported cultures must enumerate its own manual or resource folders instead.</li>
|
|
<li><strong>Dead P/Invoke declarations</strong> — eight <code>gl*</code> methods on HiDisp's public <code>GL</code> class (<code>glFenceSync</code>,
|
|
<code>glGetDoublev</code>, <code>glGetDoublei_v</code>, <code>glGetDoubleIndexedvEXT</code>, <code>glIglooInterfaceSGIX</code>,
|
|
<code>glPNTrianglesfATI</code>, <code>glPNTrianglesiATI</code>, and the already-commented <code>glDebugMessageCallbackAMD</code>).
|
|
They had no backing export and threw <code>EntryPointNotFoundException</code> when called.</li>
|
|
<li><strong><code>NcFileListCommand</code></strong> — a list of NC files is just a List of Program File commands, so
|
|
the dedicated type is gone. Loading a project that contains one converts it in place: each <code><File></code>
|
|
entry becomes a single-file <a class="xref" href="../../api/Hi.SessionCommands.NcFileCommand.html">NcFileCommand</a> (kind <code>Auto</code>, the same
|
|
per-file extension dispatch) inside a <a class="xref" href="../../api/Hi.SessionCommands.ListCommand.html">ListCommand</a>, and re-saving
|
|
persists the converted form.</li>
|
|
<li><strong>Post-Execution meshed-geometry output</strong> — <code>PostExecutionCommand</code> loses <code>EnableWriteMeshedGeom</code>
|
|
and <code>MeshedGeomFileTemplate</code> (and their pre-rename <code>…RuntimeGeom…</code> spellings) together with the
|
|
<code>enable-write-meshed-geom</code> and <code>meshed-geom-file-path</code> routes. A geometry snapshot can be taken at
|
|
any time-spot, unlike the run-derived outputs that command manages, so the carriers are now the
|
|
placeable <a class="xref" href="../../api/Hi.SessionCommands.RecordMeshedGeomCommand.html">RecordMeshedGeomCommand</a> and
|
|
<a class="xref" href="../../api/Hi.SessionCommands.ExportMeshedGeomToStlCommand.html">ExportMeshedGeomToStlCommand</a>. Loading an old project with the pair
|
|
enabled emits <code>PostExecution--MeshedGeomOutputRetired</code>, and re-saving drops the elements.</li>
|
|
<li><strong>Cutter tessellation resolution</strong> — mesh resolution is runtime data, not authored cutter data, so
|
|
the seam that let a live object be “the resolution” is gone: <code>MillingCutter</code> no longer implements
|
|
<code>IPolarResolution2d</code> and loses <code>LinearResolution_mm</code> / <code>AngleResolution_rad</code> /
|
|
<code>AngleResolution_deg</code> and <code>UpperBeamPolarResolution2dSource</code>; the <code>Func</code>-based
|
|
<code>IPolarResolution2dSourceProperty</code> interface is deleted together with the
|
|
<code>PolarResolution2dSource</code> properties on <code>Solid</code>, <code>AptProfile</code> and <code>CustomSpinningProfile</code>. A
|
|
<a class="xref" href="../../api/Hi.NcMech.Solids.Solid.html">Solid</a> now holds the immutable resolution it was built with — pass it to
|
|
the <code>Solid(IGetStl, PolarResolution2d)</code> constructor — and changing resolution means building a
|
|
new solid: play paths go through <a class="xref" href="../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_SetShaperStlResolution_">SetShaperStlResolution</a>
|
|
and <a class="xref" href="../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_SetStrutStlResolution_">SetStrutStlResolution</a> (the runner calls both for
|
|
you, so the strut/upper-beam mesh follows the runtime value during a play too), holders re-mesh
|
|
when you assign their <code>PolarResolution2d</code> property, and a fresh cutter's shaper solid is born
|
|
with <a class="xref" href="../../api/Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_DefaultShaperStlResolution">DefaultShaperStlResolution</a> while the strut solid is
|
|
born on the geometry's own default. Cutter files keep loading
|
|
whether or not they carry the old <code><LinearResolution_mm></code> / <code><AngleResolution_deg></code> elements;
|
|
the values in them were only ever the residue of the last play and are ignored, and 3.2 no
|
|
longer writes them — a 3.1 install needs a support-line build carrying the guarded cutter
|
|
reader (HiMech 3.1.157.2 / HiNc 3.1.175.5, shipped 2026-08-29) to open a 3.2-saved cutter
|
|
file.</li>
|
|
<li><strong>Parameterless profile meshing</strong> — <code>IShaperProfile</code> no longer extends <code>IGetStl</code>, and the
|
|
<code>GetStl()</code> convenience methods on <code>AptProfile</code>, <code>ConstRatioProfile</code>, <code>FluteDependentRatioProfile</code>
|
|
and <code>CustomSpinningProfile</code> are gone. Profile mesh access is resolution-explicit: pass your value
|
|
through <code>GenStl(resolution)</code>, or state the profile's own default with <code>GenStl(null)</code>. Geometry
|
|
types that serialize as an STL source (<code>Cylindroid</code>, <code>GeomCombination</code>, <code>TransformationGeom</code>,
|
|
<code>ExtendedCylinder</code>) keep <code>GetStl()</code> as their <code>IGetStl</code> contract; it is documented as, and
|
|
equivalent to, <code>GenStl(null)</code>.</li>
|
|
<li><strong>Bounds queries never mesh</strong> — expanding a bounding box is a rough, quick operation (view
|
|
fitting), so it no longer triggers STL generation anywhere. <code>TransformationGeom.ExpandToBox3d</code>
|
|
transforms the geometry's own box corner-wise — a conservative superset of the transformed
|
|
geometry's true bounds — instead of meshing, and <code>GeomCombination</code> now implements
|
|
<code>IExpandToBox3d</code> by folding its sources' boxes. A geometry without <code>IExpandToBox3d</code> support
|
|
contributes nothing to a bounds query; generate the mesh yourself if you need its true extent.
|
|
<code>MillingCutter</code>'s cutter-height bookkeeping likewise reads the profile's ZR contour and the
|
|
upper beam's box instead of meshing both on every cache clear.</li>
|
|
<li><strong>The web application's Legacy-Controller page</strong> — <code>HiNC-2025-webservice</code> removes the page the
|
|
Page menu's third group opened, at <code>/controller/<tab></code>, on 2026-09-11 (the 3.2 line). It edited
|
|
<a class="xref" href="../../api/Hi.Numerical.HardNcEnv.html">HardNcEnv</a> — the project's <a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_NcEnv">NcEnv</a>,
|
|
the HardNc controller model that is deprecating now that
|
|
<a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_EnableSoftNcRunner">EnableSoftNcRunner</a> defaults to <code>true</code>. Controller
|
|
settings are edited on the General Setup page's Controller branch
|
|
(<code>/general-setup?tree=equipment/controller</code>), the SoftNc runner's own face — see
|
|
<a href="../../manual/setup/controller.html">Controller</a>. Of the settings only that page could edit, three were
|
|
HardNcEnv's alone and retire with it: <code>EnableShortestRotary</code> (the runner honours the program's own
|
|
M126 / M127 modal codes), <code>MaxRotarySpeedABC</code> (the runner's rotary ceiling is the rotary rate on
|
|
the branch's Rapid Feedrates leaf) and <code>HeidenhainMasterAxisChar</code> (a HardNc parser setting with no
|
|
SoftNc counterpart). The fourth, <strong>Align P0</strong> — moving the part so that program zero lands on a
|
|
work-coordinate row — is <strong>not offered on the runner path</strong>: the Work Coordinates leaf carries only
|
|
<strong>P0</strong> and <strong>M0</strong>, which write the row from the machine position; the part is placed by hand
|
|
instead — see <a href="../../manual/setup/program-zero-alignment.html">Program Zero Alignment</a>. Old links keep
|
|
working: <code>/controller</code> and anything below it redirects to the Controller branch. Nothing on the
|
|
C# side moves — <code>MachiningProject.NcEnv</code> still loads and the <code>/api/Controller/*</code> endpoints stay
|
|
mounted, so a host that drives HardNcEnv through the API or a script is unaffected.</li>
|
|
</ul>
|
|
<h2 id="7-signature-and-shape-changes">7. Signature and shape changes</h2>
|
|
<ul>
|
|
<li><a class="xref" href="../../api/Hi.Machining.MachiningToolHouse.html">MachiningToolHouse</a> derives from <code>Dictionary<int, IMachiningTool></code>:
|
|
<a class="xref" href="../../api/Hi.Machining.MachiningToolHouse.html#Hi_Machining_MachiningToolHouse_SetToolId_">SetToolId</a> takes an <code>int</code> and
|
|
<a class="xref" href="../../api/Hi.Machining.MachiningToolHouse.html#Hi_Machining_MachiningToolHouse_CreateStickMillingTool_">CreateStickMillingTool</a> returns
|
|
<code>KeyValuePair<int, MillingTool></code>. Any <code>(int)entry.Key</code> cast stops compiling. Siemens <code>T="name"</code>
|
|
string tool calls are unaffected — they still resolve to an <code>int</code> at the semantic layer.</li>
|
|
<li><a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_ActualTimecode">ActualTimecode</a> and
|
|
<a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_ActualDateTime">ActualDateTime</a> become get-only views onto the new optional
|
|
<a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_ActualTime">ActualTime</a> (<a class="xref" href="../../api/Hi.MachiningSteps.StepActualTime.html">StepActualTime</a>) — their
|
|
setters are gone. <code>AccumulatedTime</code> is superseded by
|
|
<a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_EndTimecode">EndTimecode</a>, kept as an <code>[Obsolete]</code> alias; step CSVs write
|
|
the new header and still read the old.</li>
|
|
<li><a class="xref" href="../../api/Hi.SessionCommands.PreSettingCommand.html">PreSettingCommand</a> becomes a legacy bundle. A saved bundle expands on load
|
|
into <a class="xref" href="../../api/Hi.SessionCommands.MachiningResolutionCommand.html">MachiningResolutionCommand</a>,
|
|
<a class="xref" href="../../api/Hi.SessionCommands.MachiningMotionResolutionCommand.html">MachiningMotionResolutionCommand</a>,
|
|
<a class="xref" href="../../api/Hi.SessionCommands.CollisionDetectionCommand.html">CollisionDetectionCommand</a>,
|
|
<a class="xref" href="../../api/Hi.SessionCommands.PauseOnFailureCommand.html">PauseOnFailureCommand</a> and <a class="xref" href="../../api/Hi.SessionCommands.PhysicsCommand.html">PhysicsCommand</a> (plus a
|
|
Read-mode <code>RecordMeshedGeomCommand</code>), and is never written back. Anything that located the bundle
|
|
element in a saved <code>.hincproj</code> must look for the split commands.</li>
|
|
<li><code>ToPresentDto</code> wire keys change with the obfuscation fix: geometry DTOs use <code>Type</code> / <code>Min</code> / <code>Max</code> /
|
|
<code>PairZrs</code> / <code>Z</code> / <code>R</code> / <code>SourceFile</code> / <code>FileIndex</code> / <code>LineIndex</code> (<code>Vec3d</code> keeps lowercase <code>x</code> / <code>y</code> /
|
|
<code>z</code>), transformer DTOs use <code>Trans</code>, <code>Angle_deg</code>, <code>CosTheta</code> / <code>SinTheta</code>, <code>Axis</code>, <code>Pivot</code>, <code>Scale</code>,
|
|
<code>Rotation</code>, <code>Translation</code>, <code>Step</code>, <code>Stack</code>, <code>Matrix</code>. A front-end reading those payloads must be
|
|
updated in lockstep.</li>
|
|
<li><a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_defaultFontFile">defaultFontFile</a> changes value from <code>"Font/WCL06.ttf"</code> to <code>"(embedded)"</code>.
|
|
It is a public <code>const</code>, so an assembly compiled against 3.1.175 already carries the old literal and
|
|
keeps passing it — <code>Init</code> still accepts it — but a rebuild changes what it passes, and no font file
|
|
is extracted to the working directory any more.</li>
|
|
<li>The equipment splits into two faces. <a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.SetupEquipment.html">SetupEquipment</a> is
|
|
the authored one — the only face a project file persists, reached as
|
|
<a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_SetupEquipment">SetupEquipment</a>.
|
|
<a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html">MachiningEquipment</a> is the runtime face the runner,
|
|
physics, collision and execution display read; it is rebuilt from the authored face at project
|
|
assignment and at session boundaries, so a value written onto it is discarded rather than saved.
|
|
See <a href="../../technique/api-foundations/getting-started.html">Getting started</a>.</li>
|
|
<li><code>BackgroundTemperature_C</code> / <code>_K</code> on both equipment faces rename to
|
|
<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>): 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, so nothing stops compiling. A <code>.hincproj</code> now writes
|
|
<code><AmbientTemperature_C></code>; the reader still accepts the legacy element and the 2019 wrapper.</li>
|
|
</ul>
|
|
<h2 id="8-defaults-and-gates-that-changed">8. Defaults and gates that changed</h2>
|
|
<ul>
|
|
<li><a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_EnableSoftNcRunner">EnableSoftNcRunner</a> defaults to <code>true</code>. The SoftNc
|
|
pipeline is the NC engine; <a class="xref" href="../../api/Hi.Numerical.FilePlayers.HardNcRunner.html">HardNcRunner</a> is the opt-out fallback for
|
|
the shrinking set of features still bound to it.</li>
|
|
<li><a class="xref" href="../../api/Hi.MillingForces.MillingForceUtil.html#Hi_MillingForces_MillingForceUtil_EnableNativeMillingPhysics">EnableNativeMillingPhysics</a> defaults to <code>true</code>, and in a
|
|
<strong>shipping build</strong> setting it to <code>false</code> throws <code>InvalidOperationException</code> at the setter — the
|
|
managed reference implementation lives only in a non-shipping assembly. Code that flipped it off for
|
|
an A/B comparison now fails at configuration time.</li>
|
|
<li><a class="xref" href="../../api/Hi.MillingForces.MillingPhysicsBrief.html#Hi_MillingForces_MillingPhysicsBrief_YieldingStressRatio">YieldingStressRatio</a> and
|
|
<a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_YieldingStressRatio">YieldingStressRatio</a> report <strong><code>NaN</code></strong> instead of <code>0</code> when no
|
|
beam section qualifies. A caller treating <code>0</code> as “no yielding constraint” — as both feed solvers did
|
|
— must add a <code>NaN</code> branch or it will pass <code>NaN</code> into downstream queries.</li>
|
|
<li><strong>New licence feature <code>NcComposition</code> (id 22).</strong> Registering any non-built-in processing unit into a
|
|
<a class="xref" href="../../api/Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> pipeline, or executing an NC-embedded C# script, requires it.
|
|
Degradation is silent and functional: external units are skipped for the session with one
|
|
<code>Composition--NotLicensed</code> naming them, an external segmenter falls back to <code>SingleLineSegmenter</code>,
|
|
and scripts are skipped with <code>Script--NotLicensed</code>. An unlicensed installation therefore produces a
|
|
<em>different simulation</em>, not an error. Calling the public API from your own application or session
|
|
script needs no extra licence; composing the interpretation pipeline does. See
|
|
<a class="xref" href="../../technique/nc-dialects/nc-parsing.html">NC Parsing Engine</a>.</li>
|
|
<li><strong><a class="xref" href="../../api/Hi.MachiningProcs.MachiningActRunnerConfig.html#Hi_MachiningProcs_MachiningActRunnerConfig_RadiusOffsetBasis">RadiusOffsetBasis</a></strong> decides what a tool-house
|
|
refresh writes into the D column:
|
|
<a class="xref" href="../../api/Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis.html#Hi_NcParsers_Dependencys_Generic_RadiusOffsetBasis_CutterRadius">CutterRadius</a> (default — geometry plus wear,
|
|
the only behaviour before the basis existed) or
|
|
<a class="xref" href="../../api/Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis.html#Hi_NcParsers_Dependencys_Generic_RadiusOffsetBasis_ZeroBased">ZeroBased</a> (wear only, for a tool-centre
|
|
CAM path). An older project refreshes exactly as before until the basis is changed. See
|
|
<a href="../../anatomy/general-setup/controller/program-data/tool-offsets.html#the-radius-basis">Tool Offsets</a>.</li>
|
|
<li>The four <code>SnapshotSyntax</code> entries in the Fanuc preset default to <code>IsEnabled = false</code>, so projects
|
|
stop serializing enabled debug snapshots. A project saved by an earlier build keeps what it
|
|
serialized until its pipeline list is refreshed from the current preset.</li>
|
|
<li><strong>Server side</strong>: HiNcServer pins request localization to <a class="xref" href="../../api/Hi.Common.CultureUtil.html#Hi_Common_CultureUtil_English">English</a>, so an
|
|
<code>Accept-Language: zh-Hant</code> request falls back to <code>en</code>. HiNcRcl removes the
|
|
<code>HiNC:DisplayEngine:FontFile</code> configuration key, which never had any effect — delete it from
|
|
<code>appsettings</code>. <a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_FontFile">FontFile</a> remains for a custom font.</li>
|
|
<li><strong>Localization</strong>: HiMech's <code>MachiningStep.zh-Hant</code> / <code>.zh-Hans</code> resx are deleted. Step presentation
|
|
strings now come from the HiNc-Resource present catalog (<code>catalog.en.json</code>, <code>catalog.zh-Hant.json</code>,
|
|
<code>catalog.zh-Hans.json</code>) that a host overlays; a host that ships neither loses the localized step
|
|
labels it used to get for free.</li>
|
|
<li><strong>Packaging is x64-only</strong>: HiDisp drops the <code>win-x86</code> runtime identifier and its Sentinel payload,
|
|
HiNc-Resource drops the x86 platform.</li>
|
|
<li><strong>The shipped machine-tool packages are renamed.</strong> They now carry the <code>.default</code> marker and neutral
|
|
names: <code>MachineTool/Table-B1.default</code> and <code>MachineTool/CT-350.default</code>. The table-type package was
|
|
renamed outright — its <code>.mt</code>, its <code>.general-mech</code> and its STL headers travel with it — and the
|
|
duplicated nested STL set inside the CT-350 package is deleted. A project, script or <code>.mt</code> that
|
|
refers to a shipped machine-tool package by its earlier path must be repointed at the name above.</li>
|
|
<li><strong>The shipped mechanism file takes the canonical extension.</strong> <code>MachineTool/Table-B1.default/Table-B1.general-mech</code>
|
|
is now <code>Table-B1.GeneralMechanism</code> — the spelling <code>GeneralMechanism.XName</code> gives and every Save As
|
|
has written since the type-name extensions arrived — and the package's <code>Table-B1.mt</code> is repointed at
|
|
it. <code>.general-mech</code> stays readable everywhere: the loader dispatches on the XML root element and
|
|
never reads the extension, so a hand-authored file keeps its name and loads as before. Only something
|
|
that refers to the shipped mechanism by its old file name must be repointed. The rename ships from
|
|
HiNc-Resource 3.2.21; 3.2.20 still carries <code>.general-mech</code>, and an admin folder already seeded by it
|
|
is re-mirrored — old name deleted, new name copied, <code>Table-B1.mt</code> refreshed — on the first start with
|
|
the newer package.</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>
|