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/api/Hi.Numerical.ClsfParsers.html
T

449 lines
32 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>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>