deploy webservice static-file routing for docsite folder URLs, per-instance step-cache db, and constant-height panel title bars.

This commit is contained in:
2026-08-27 14:51:37 +08:00
parent 1fc510af5e
commit 2a98ae7556
1468 changed files with 182837 additions and 18888 deletions
@@ -0,0 +1,448 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace Hi.Numerical.ClsfParsers | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace Hi.Numerical.ClsfParsers | HiAPI-C# 2025 ">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Numerical.ClsfParsers">
<h1 id="Hi_Numerical_ClsfParsers" data-uid="Hi.Numerical.ClsfParsers" class="text-break">Namespace Hi.Numerical.ClsfParsers</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClArcMcMotionSemantic.html">ClArcMcMotionSemantic</a></dt>
<dd><p>MC-machine counterpart of the <a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_ClArc">ClArc</a> branch of
<a class="xref" href="Hi.Numerical.ClsfParsers.ClMotionSemantic.html">ClMotionSemantic</a>: builds the workpiece-frame
<a class="xref" href="Hi.CutterLocations.ClPath.ClCircleArc.html">ClCircleArc</a> from <a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_ClArcEvent">ClArcEvent</a>,
transforms it into the kinematic Pn frame (the workpiece→Pn transform
wired on <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html#Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_ProgramZeroToPnProvider">ProgramZeroToPnProvider</a>),
and emits <a class="xref" href="Hi.Numerical.Acts.ActClArcMcXyzabcContour.html">ActClArcMcXyzabcContour</a> — a true CL-space arc
with per-step inverse kinematics. Endpoint machine coordinates come from
<a class="xref" href="Hi.NcParsers.Keywords.MachineCoordinateState.html">MachineCoordinateState</a> (this block, solved by
<a class="xref" href="Hi.Numerical.ClsfParsers.ClToMcTransformSyntax.html">ClToMcTransformSyntax</a> + <code>McXyzSyntax</code>) and the
previous block's modal state.
Feedrate/rapid timing mirrors <a class="xref" href="Hi.Numerical.ClsfParsers.ClMotionSemantic.html">ClMotionSemantic</a>; like the
RTCP linear semantic, a feed move without a usable feedrate drops the
motion (with a validation warning) instead of emitting zero duration.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClMotionSemantic.html">ClMotionSemantic</a></dt>
<dd><p>Resolves the pure-CL motion forms into cutter-location acts that drive a
<code>ClMillingDevice</code> chain directly — no machine coordinates involved:
<a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_ClTeleport">ClTeleport</a> → <a class="xref" href="Hi.Numerical.Acts.ActClTeleport.html">ActClTeleport</a>,
<a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_ClLinear">ClLinear</a> → <a class="xref" href="Hi.Numerical.Acts.ActClLinear.html">ActClLinear</a>,
<a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_ClArc">ClArc</a> → <a class="xref" href="Hi.Numerical.Acts.ActClArc.html">ActClArc</a>. Feed moves also
emit <a class="xref" href="Hi.Numerical.Acts.ActFeedrate.html">ActFeedrate</a> (from the modal <code>Feedrate</code> section);
rapid moves emit <a class="xref" href="Hi.Numerical.Acts.ActRapid.html">ActRapid</a> at
<a class="xref" href="Hi.Numerical.ClsfParsers.ClsfRunnerConfig.html#Hi_Numerical_ClsfParsers_ClsfRunnerConfig_RapidFeedrate_mmdmin">RapidFeedrate_mmdmin</a>. Durations are
path-length / effective feedrate.</p>
<p>
Contrast with <a class="xref" href="Hi.NcParsers.Semantics.ClLinearMcMotionSemantic.html">ClLinearMcMotionSemantic</a>, which handles the
RTCP form <a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_ClLinear">ClLinear</a> of the <b>NC</b> pipeline by
deriving CL from machine coordinates — this semantic is its CL-source
counterpart and reads endpoints from
<a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_CutterLocationState">CutterLocationState</a> instead.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClMotionValveSemantic.html">ClMotionValveSemantic</a></dt>
<dd><p>Valve that routes each block to exactly one motion-semantic family, so
the leaves keep a single duty and never need cross-guards:</p>
<ul><li>Block carries a <code>MachineCoordinateState</code> section (written by
<a class="xref" href="Hi.Numerical.ClsfParsers.ClToMcTransformSyntax.html">ClToMcTransformSyntax</a> + <code>McXyzSyntax</code> when the chain
is an MC machine) →
<a class="xref" href="Hi.Numerical.ClsfParsers.ClMotionValveSemantic.html#Hi_Numerical_ClsfParsers_ClMotionValveSemantic_McSemanticList">McSemanticList</a> (default:
<a class="xref" href="Hi.NcParsers.Semantics.McLinearMotionSemantic.html">McLinearMotionSemantic</a> for downgraded constant-posture
moves, <a class="xref" href="Hi.NcParsers.Semantics.ClLinearMcMotionSemantic.html">ClLinearMcMotionSemantic</a> for RTCP-style
orientation-changing lines, <a class="xref" href="Hi.Numerical.ClsfParsers.ClArcMcMotionSemantic.html">ClArcMcMotionSemantic</a>,
<a class="xref" href="Hi.Numerical.ClsfParsers.ClTeleportMcMotionSemantic.html">ClTeleportMcMotionSemantic</a>).</li><li>Otherwise (pure-CL <code>ClMillingDevice</code> project) →
<a class="xref" href="Hi.Numerical.ClsfParsers.ClMotionValveSemantic.html#Hi_Numerical_ClsfParsers_ClMotionValveSemantic_ClSemanticList">ClSemanticList</a> (default <a class="xref" href="Hi.Numerical.ClsfParsers.ClMotionSemantic.html">ClMotionSemantic</a>).</li></ul>
The semantic-side counterpart of <a class="xref" href="Hi.NcParsers.Syntaxs.BundleSyntax.html">BundleSyntax</a> composition:
children are serialized nested under group elements and reconstructed via
<a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>.
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClTeleportMcMotionSemantic.html">ClTeleportMcMotionSemantic</a></dt>
<dd><p>MC-machine counterpart of the <a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_ClTeleport">ClTeleport</a> branch
of <a class="xref" href="Hi.Numerical.ClsfParsers.ClMotionSemantic.html">ClMotionSemantic</a>: emits an instant
<a class="xref" href="Hi.Numerical.Acts.ActMcXyzabcTeleport.html">ActMcXyzabcTeleport</a> from the block's
<a class="xref" href="Hi.NcParsers.Keywords.MachineCoordinateState.html">MachineCoordinateState</a> endpoint solved by
<a class="xref" href="Hi.Numerical.ClsfParsers.ClToMcTransformSyntax.html">ClToMcTransformSyntax</a> + <code>McXyzSyntax</code>. Mirrors the
pure-CL teleport semantics —
no machining step, no time accumulation.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClToMcTransformSyntax.html">ClToMcTransformSyntax</a></dt>
<dd><p>Endpoint inverse kinematics for driving an MC machine from CLSF input,
expressed in the NC pipeline's transform vocabulary: when the pipeline's
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html">NcKinematicsDependency</a> resolves to a live solver (the
machining chain is an <code>IXyzabcChain</code>), each pure-CL motion block
gets</p>
<ul><li>a <a class="xref" href="Hi.NcParsers.Keywords.ToolHeightCompensation.html">ToolHeightCompensation</a> section (the active tool's
attacher→tip length) plus its chain entry — a translation along the
workpiece-frame tool axis, mirroring the RTCP entry of
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html">G43p4RtcpSyntax</a>;</li><li>a <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_PivotTransformSource">PivotTransformSource</a> chain entry
— <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_MakePivotTransformMat_Hi_Numerical_Xyzabc_IMachineKinematics_Hi_Geom_Vec3d_Hi_Geom_Mat4d_">MakePivotTransformMat(IMachineKinematics, Vec3d, Mat4d)</a>
anchored to the workpiece frame, absorbing the fixture topology
(workpiece→Pn, wired on
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html#Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_ProgramZeroToPnProvider">ProgramZeroToPnProvider</a>) together
with the Pn→MC kinematics at the solved endpoint rotary state;</li><li>the solved rotary axes in raw degrees on
<a class="xref" href="Hi.NcParsers.Keywords.MachineCoordinateState.html">MachineCoordinateState</a> (wrapped afterwards by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a>) — machine XYZ is <b>not</b> written
here; the shared <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> composes it from
<code>ProgramXyz × chain</code> exactly like the NC pipeline.</li></ul>
Without a solver (pure-CL <code>ClMillingDevice</code> project) this syntax is
inert and the pipeline stays pure CL.
<p>
Entry <code>Kind</code> follows the block's posture: when the solved rotary
endpoint cyclically equals the previous block's modal state the entries
are <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_KindStatic">KindStatic</a> (contour-valid), else
<a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_KindDynamic">KindDynamic</a> (endpoint snapshot; path
interpolation stays in CL space with per-step IK in
<a class="xref" href="Hi.Numerical.Acts.ActClLinearMcXyzabcContour.html">ActClLinearMcXyzabcContour</a> /
<a class="xref" href="Hi.Numerical.Acts.ActClArcMcXyzabcContour.html">ActClArcMcXyzabcContour</a>). A
<a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_ClLinear">ClLinear</a> block whose finished chain has no
Dynamic entry downgrades to <a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_McLinear">McLinear</a> — the same
<a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_HasDynamicEntry_System_Text_Json_Nodes_JsonObject_">HasDynamicEntry(JsonObject)</a> dispatch the NC
pipeline uses, where MC-linear and CL-linear tip paths coincide and
per-step IK is unnecessary.
</p>
<p>
When the endpoint cannot be solved (e.g. a tilted normal on a 3-axis
machine) the block's <code>MotionEvent</code> (and arc payload) is removed
together with its <code>ProgramXyz</code> and transform chain — so
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> composes nothing and the modal MC lookback
skips the unreachable block — and a validation error anchors to the CLSF
line; the machine holds position over the bad block.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html">ClsfKeys</a></dt>
<dd><p>JSON section names and keys specific to the NX-CL (CLSF) pipeline.
General sections shared with the NC/CSV pipelines
(<code>MotionEvent</code>, <code>Feedrate</code>, <code>SpindleSpeed</code>, <code>Coolant</code>,
<code>ToolChange</code>) keep their contracts from
<a class="xref" href="Hi.NcParsers.Keywords.html">Hi.NcParsers.Keywords</a> /
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html">ToolChangeSyntax</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClsfRecordCleanupSyntax.html">ClsfRecordCleanupSyntax</a></dt>
<dd><p>Inspection-stage tail of the CLSF record chain. A record that survived
every <code>RecordTo*</code> syntax is dispatched here:</p>
<ul><li>words in <a class="xref" href="Hi.Numerical.ClsfParsers.ClsfRunnerConfig.html#Hi_Numerical_ClsfParsers_ClsfRunnerConfig_ExcludedWords">ExcludedWords</a> — intentional
skips (<code>PAINT</code>, <code>TOOL PATH</code>, …), consumed silently;</li><li><code>UNITS</code> — <code>MM</code> is the pipeline's native unit (silent);
anything else keeps running but warns that coordinates are not
converted;</li><li><code>SET_WORKPIECE</code> — reported as ignored (the workpiece is
project-level configuration, not runner input);</li><li>anything else — <code>ClsfRecord--Unconsumed</code> validation
warning.</li></ul>
Must run after every other <code>RecordTo*</code> syntax.
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClsfRecordSyntax.html">ClsfRecordSyntax</a></dt>
<dd><p>Per-record CLSF parsing syntax. Normalizes the block text (strips
<code>$$</code> comments, joins <code>$</code> continuation lines), splits it into the
record word and its comma-separated parameters, and stamps them into
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject">JsonObject</a> under <a class="xref" href="Hi.Numerical.ClsfParsers.ClsfRecordSyntax.html#Hi_Numerical_ClsfParsers_ClsfRecordSyntax_ClsfRecordKey">ClsfRecordKey</a> for
the downstream <code>RecordTo*</code> syntaxes to consume. Numeric parameters
are pre-typed to <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a>.</p>
<p>
The word is everything before the first <code>/</code> with whitespace runs
collapsed — multi-word heads (<code>TOOL PATH</code>) and hyphenated records
without parameters (<code>END-OF-PATH</code>) are single words, fixing the
legacy parser's first-token-only dispatch.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClsfRunnerConfig.html">ClsfRunnerConfig</a></dt>
<dd><p>Configuration dependency for the NX-CL (CLSF) runner: the rapid traverse
rate (a CLSF has no machine axes, so <code>RAPID</code> timing needs an assumed
rate), the tool-creation policy, and the intentionally skipped record
words. Also serves as the pipeline's <a class="xref" href="Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html">IRapidFeedrateConfig</a> so
the machine-coordinate motion semantics reused from the NC pipeline
(<code>McLinearMotionSemantic</code>, <code>ClLinearMcMotionSemantic</code>) time
rapids from the same assumed rates — axis-uniform: every linear axis gets
<a class="xref" href="Hi.Numerical.ClsfParsers.ClsfRunnerConfig.html#Hi_Numerical_ClsfParsers_ClsfRunnerConfig_RapidFeedrate_mmdmin">RapidFeedrate_mmdmin</a>, every rotary axis
<a class="xref" href="Hi.Numerical.ClsfParsers.ClsfRunnerConfig.html#Hi_Numerical_ClsfParsers_ClsfRunnerConfig_RotaryRapidFeedrate_degdmin">RotaryRapidFeedrate_degdmin</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClsfSegmenter.html">ClsfSegmenter</a></dt>
<dd><p>Segments an NX CLSF (cutter location source file) stream for the
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> pipeline. A record normally occupies one
physical line; a line whose text (after stripping the <code>$$</code> comment)
ends with a single <code>$</code> continues on the next line, so continued
lines are joined into one multi-line <a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a> for
<a class="xref" href="Hi.Numerical.ClsfParsers.ClsfRecordSyntax.html">ClsfRecordSyntax</a> to parse.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.ClsfToolBuildSemantic.html">ClsfToolBuildSemantic</a></dt>
<dd><p>Materializes a milling tool from the modal
<a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_ClsfToolData">ClsfToolData</a> geometry (CLSF <code>TLDATA/MILL</code>)
into the <a class="xref" href="Hi.Machining.MachiningToolHouse.html">MachiningToolHouse</a> when a <code>ToolChange</code> section
requests a tool id the house does not hold — CLSF files carry their own
tool definitions, so a project does not need to pre-configure every tool.
With <a class="xref" href="Hi.Numerical.ClsfParsers.ClsfRunnerConfig.html#Hi_Numerical_ClsfParsers_ClsfRunnerConfig_PreferToolHouse">PreferToolHouse</a> (default) an existing
entry always wins. Emits no acts; must run before
<a class="xref" href="Hi.NcParsers.Semantics.ToolChangeSemantic.html">ToolChangeSemantic</a> so the tool exists when the
tooling act is executed.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.MsysCoordinateOffsetSyntax.html">MsysCoordinateOffsetSyntax</a></dt>
<dd><p>Expresses the modal CLSF <code>MSYS</code> frame in the NC pipeline's transform
vocabulary on machine-coordinate motion blocks: the rotation part becomes
a <a class="xref" href="Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html#Hi_NcParsers_LogicSyntaxs_TiltTransformUtil_TransformSource">TransformSource</a> entry (the G68.2
tilted-work-plane analogue) and the translation part becomes a
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html#Hi_NcParsers_LogicSyntaxs_CoordinateOffsetUtil_TransformSource">TransformSource</a> entry plus
<a class="xref" href="Hi.NcParsers.Keywords.CoordinateOffset.html">CoordinateOffset</a> section (the G54 work-offset analogue,
CoordinateId <a class="xref" href="Hi.Numerical.ClsfParsers.MsysCoordinateOffsetSyntax.html#Hi_Numerical_ClsfParsers_MsysCoordinateOffsetSyntax_MsysCoordinateId">MsysCoordinateId</a>) in
<a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a>. It also restores
the commanded <a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> — the MSYS-local
GOTO point — from the workpiece-frame
<a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_CutterLocationState">CutterLocationState</a> endpoint, so the shared
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> composes machine XYZ exactly like the NC
pipeline: <code>ProgramXyz × composed chain → MachineCoordinateState</code>.</p>
<p>
Entry order carries the math: the MSYS matrix maps local points as
<code>p·R + t</code> (row-vector convention), so the rotation entry precedes
the translation entry. Both are
<a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_KindStatic">KindStatic</a> — an MSYS is a fixed frame
for every point of the blocks it governs. The rotation entry is omitted
for a pure-translation MSYS (and for the absent-MSYS identity), keeping
the common dump exactly G54-shaped.
</p>
<p>
Inert without a wired kinematics solver (pure-CL <code>ClMillingDevice</code>
project) and on non-motion blocks: the pure-CL pipeline keeps its own CL
vocabulary and must never receive <code>ProgramXyz</code> or a transform chain
— <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> would otherwise fabricate a
<a class="xref" href="Hi.NcParsers.Keywords.MachineCoordinateState.html">MachineCoordinateState</a> and misroute the block to the
machine-coordinate semantics. <a class="xref" href="Hi.Numerical.ClsfParsers.ClToMcTransformSyntax.html">ClToMcTransformSyntax</a>
continues the chain with the tool-height and kinematic-pivot entries.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.NxClRunner.html">NxClRunner</a></dt>
<dd><p>Factory for a <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> that reads NX CLSF (cutter
location source file) input. On a <code>ClMillingDevice</code> chain it
resolves into <b>pure-CL</b> acts
(<code>ActClTeleport</code>/<code>ActClLinear</code>/<code>ActClArc</code>); on an MC
machine (<code>IXyzabcChain</code>, detected through the wired
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html">NcKinematicsDependency</a>) each motion block is expressed in
the NC pipeline's transform vocabulary —
<a class="xref" href="Hi.Numerical.ClsfParsers.MsysCoordinateOffsetSyntax.html">MsysCoordinateOffsetSyntax</a> writes the MSYS work-offset
entries plus <code>ProgramXyz</code>, <a class="xref" href="Hi.Numerical.ClsfParsers.ClToMcTransformSyntax.html">ClToMcTransformSyntax</a>
inverse-solves the endpoint rotary state and writes the tool-height /
kinematic-pivot entries, the shared <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> composes
<code>MachineCoordinateState</code> from <code>ProgramXyz × chain</code> — and
<a class="xref" href="Hi.Numerical.ClsfParsers.ClMotionValveSemantic.html">ClMotionValveSemantic</a> routes the block to the
machine-coordinate semantics instead. The record chain maps each CLSF
record into the same standardized JSON sections the NC/CSV pipelines
use (<code>Feedrate</code>, <code>SpindleSpeed</code>, <code>Coolant</code>,
<code>ToolChange</code>, <code>MotionEvent</code>), so the general semantics are
reused unchanged; only the motion and tool-creation semantics are
CLSF-specific.</p>
<p>
The modal carry runs <b>first</b> in the record bundle (unlike the NC
pipeline's carry-at-the-end): each piece receives the previous block's
modal sections (<code>Msys</code>, <code>CutterLocationState</code>, tool data,
feedrate, …) before its own record is resolved, so a GOTO reads its
begin point and MSYS from its own piece and then overwrites the state
with the new endpoint.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.RecordToClMotionSyntax.html">RecordToClMotionSyntax</a></dt>
<dd><p>Translates the CLSF motion records into the pure-CL motion contract:</p>
<ul><li><code>RAPID</code> → one-shot <a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_ClRapidEvent">ClRapidEvent</a> (armed
until the next GOTO; a passed motion or <code>FEDRAT</code> cancels it).</li><li><code>CIRCLE</code>/<code>MOVARC</code> → one-shot
<a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_ClCircleEvent">ClCircleEvent</a> in workpiece coordinates, with the
NX axis-direction negation applied.</li><li><code>GOTO</code> → the modal <a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_CutterLocationState">CutterLocationState</a>
endpoint (MSYS applied) plus a one-shot <code>MotionEvent</code> whose
<code>Form</code> is <a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_ClTeleport">ClTeleport</a> (first motion, FROM,
or first motion after a tool change),
<a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_ClArc">ClArc</a> (an armed circle record), or
<a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_ClLinear">ClLinear</a>; an arc GOTO also receives the
consumed circle geometry as <a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_ClArcEvent">ClArcEvent</a>.</li></ul>
Requires the pipeline's modal carry to run <b>before</b> this syntax on
each node, so the previous endpoint / MSYS are already present on the
current piece when the GOTO is resolved.
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.RecordToCoolantSyntax.html">RecordToCoolantSyntax</a></dt>
<dd><p>Translates a <code>COOLNT</code> record into the standardized
<a class="xref" href="Hi.NcParsers.Keywords.ICoolantDef.html">ICoolantDef</a> section consumed by the general
<a class="xref" href="Hi.NcParsers.Semantics.CoolantSemantic.html">CoolantSemantic</a>:
<code>ON</code>/<code>FLOOD</code> → <a class="xref" href="Hi.NcParsers.Keywords.Coolant.html#Hi_NcParsers_Keywords_Coolant_Flood">Flood</a>,
<code>MIST</code> → <a class="xref" href="Hi.NcParsers.Keywords.Coolant.html#Hi_NcParsers_Keywords_Coolant_Mist">Mist</a>, <code>OFF</code> →
<a class="xref" href="Hi.NcParsers.Keywords.Coolant.html#Hi_NcParsers_Keywords_Coolant_Off">Off</a>; other CLSF coolant modes fall back to flood
with a configuration warning.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.RecordToFeedrateSyntax.html">RecordToFeedrateSyntax</a></dt>
<dd><p>Translates a <code>FEDRAT</code> record into the standardized modal
<code>Feedrate</code> section (always <code>G94</code> — mm/min) plus the one-shot
<a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_FeedrateEvent">FeedrateEvent</a> marker that cancels a pending
<a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_ClRapidEvent">ClRapidEvent</a>. Accepted dialects:
<code>FEDRAT/MMPM,1400</code>, <code>FEDRAT/1400,MMPM</code>, <code>FEDRAT/1400</code>
(MMPM assumed), and <code>IPM</code> (converted to mm/min).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.RecordToMsysSyntax.html">RecordToMsysSyntax</a></dt>
<dd><p>Translates an <code>MSYS</code> record into the modal <a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_Msys">Msys</a>
section. The record's nine fields are a translation vector plus the first
two rows of a rotation matrix whose third row is their cross product; the
section stores the resulting 16-element row-major <a class="xref" href="Hi.Geom.Mat4d.html">Mat4d</a>
mapping tool-path coordinates to workpiece (absolute) coordinates.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.RecordToSpindleSyntax.html">RecordToSpindleSyntax</a></dt>
<dd><p>Translates a <code>SPINDL</code> record into the standardized
<a class="xref" href="Hi.NcParsers.Keywords.ISpindleSpeedDef.html">ISpindleSpeedDef</a> section consumed by the general
<a class="xref" href="Hi.NcParsers.Semantics.SpindleSpeedSemantic.html">SpindleSpeedSemantic</a>. Parameter order
is tolerated (<code>SPINDL/8000,RPM,CLW</code> or <code>SPINDL/RPM,8000,CLW</code>):
the first numeric field is the rpm, a field containing <code>CCLW</code> selects
counter-clockwise, and <code>SPINDL/OFF</code> maps to
<a class="xref" href="Hi.Numerical.SpindleDirection.html#Hi_Numerical_SpindleDirection_STOP">STOP</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.ClsfParsers.RecordToToolingSyntax.html">RecordToToolingSyntax</a></dt>
<dd><p>Translates the CLSF tooling records:</p>
<ul><li><code>TLDATA/MILL,…</code> → the modal <a class="xref" href="Hi.Numerical.ClsfParsers.ClsfKeys.html#Hi_Numerical_ClsfParsers_ClsfKeys_ClsfToolData">ClsfToolData</a>
geometry section (kept for <a class="xref" href="Hi.Numerical.ClsfParsers.ClsfToolBuildSemantic.html">ClsfToolBuildSemantic</a>); non-MILL
tool types are reported and skipped.</li><li><code>LOAD/TOOL,n[,XOFF,x][,YOFF,y][,ZOFF,z]</code> → the standardized
<code>ToolChange</code> section (<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html#Hi_NcParsers_LogicSyntaxs_ToolChangeSyntax_SectionName">SectionName</a>)
consumed by the general
<a class="xref" href="Hi.NcParsers.Semantics.ToolChangeSemantic.html">ToolChangeSemantic</a>;
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html#Hi_NcParsers_LogicSyntaxs_ToolChangeSyntax_IsChangeKey">IsChangeKey</a> is set when the tool id
differs from the previously loaded tool. Offsets are recorded
informationally (no consumer yet).</li></ul>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>