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.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html
T
2026-09-09 18:06:21 +08:00

674 lines
30 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>Class MachineCoordSelectSyntax | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class MachineCoordSelectSyntax | HiAPI-C# 2025 ">
<meta name="description" content="Handles machine coordinate selection — non-modal, one-shot. The axis values (X/Y/Z) in the block are interpreted as machine coordinates, bypassing all work offsets, local coordinates, tool height compensation, and coordinate rotations. If G91 (incremental) is active, the code is ignored per ISO standard. A per-word incremental stamp on the block (block-root entry — Siemens SUPA Y=IC(-10), klartext L IY-10 M91) is a distance in the machine frame: the word is added to the previous machine position of that axis. Defaults to ISO G53. Brands with additional one-shot machine-coordinate codes widen — the Siemens preset adds G153 and SUPA (both suppress every active frame for one block; in this pipeline all of those reduce to &quot;bypass the composed &quot;, which the ProgramXyz back-derivation below already models). The matched code is stamped verbatim into for bidirectional source recovery. Rotary words on the same block (e.g. SUPA G0 B0, G53 A0 C0) are consumed by ahead of this syntax — machine and program rotary coincide while no rotary offsets are modeled — and the block is still a machine-coordinate positioning: the linear axes hold their machine position when no X/Y/Z word is given, and the motion is always . A machine-coordinate block never takes the RTCP tool-center-point linkage: on a real controller G53 applies no compensation, so a rotary swing commanded through it turns the axis in place instead of dragging X/Y/Z to pin the tool tip (the tip&#39;s post-swing program coordinate is what the back-derivation reports). Must be placed before and in the syntax chain. When a supported code is active, this syntax consumes X/Y/Z from and writes directly, preventing from processing them as program coordinates — and, ahead of the resolve, reading a per-word incremental word raw instead of re-based into the program frame.">
<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.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax">
<h1 id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax" class="text-break">
Class MachineCoordSelectSyntax
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.NcParsers.html">NcParsers</a>.<a class="xref" href="Hi.NcParsers.LogicSyntaxs.html">LogicSyntaxs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Handles machine coordinate selection — non-modal, one-shot.
The axis values (X/Y/Z) in the block are interpreted as machine
coordinates, bypassing all work offsets, local coordinates,
tool height compensation, and coordinate rotations.
If G91 (incremental) is active, the code is ignored per ISO standard.
A per-word incremental stamp on the block (block-root
<a class="xref" href="Hi.NcParsers.Keywords.PositioningOverride.html">PositioningOverride</a> entry <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Incremental">Incremental</a>
— Siemens <code>SUPA Y=IC(-10)</code>, klartext <code>L IY-10 M91</code>) is a
distance in the <b>machine</b> frame: the word is added to the
previous machine position of that axis.</p>
<p>
Defaults to ISO <code>G53</code>. Brands with additional one-shot
machine-coordinate codes widen <a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html#Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_SupportedCodes">SupportedCodes</a> — the
Siemens preset adds <code>G153</code> and <code>SUPA</code> (both suppress every
active frame for one block; in this pipeline all of those reduce to
"bypass the composed <a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a>",
which the ProgramXyz back-derivation below already models). The
matched code is stamped verbatim into
<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html#Hi_NcParsers_Keywords_IMotionEventDef_Term">Term</a> for bidirectional source recovery.
Rotary words on the same block (e.g. <code>SUPA G0 B0</code>,
<code>G53 A0 C0</code>) are consumed by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> ahead of
this syntax — machine and program rotary coincide while no rotary
offsets are modeled — and the block is still a machine-coordinate
positioning: the linear axes <b>hold their machine position</b>
when no X/Y/Z word is given, and the motion is always
<a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_McLinear">McLinear</a>. A machine-coordinate block never
takes the RTCP tool-center-point linkage: on a real controller G53
applies no compensation, so a rotary swing commanded through it
turns the axis in place instead of dragging X/Y/Z to pin the tool
tip (the tip's post-swing program coordinate is what the
back-derivation reports).
</p>
<p>
Must be placed <b>before</b> <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a>
and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a> in the syntax chain. When a
supported code is active, this syntax consumes X/Y/Z from
<a class="xref" href="Hi.NcParsers.Keywords.IParsingDef.html#Hi_NcParsers_Keywords_IParsingDef_Parsing">Parsing</a> and writes
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a> directly,
preventing <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a> from processing them as
program coordinates — and, ahead of the resolve, reading a per-word
incremental word raw instead of re-based into the program frame.
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class MachineCoordSelectSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">MachineCoordSelectSyntax</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyntax</a></div>
<div><a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(TSelf, params object[])</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__1___0_System_Action___0__">InvokeUtil.SelfInvoke&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Coloring.ColorUtil.html#Hi_Coloring_ColorUtil_GetGloomyColor_System_Object_System_Double_System_Double_">ColorUtil.GetGloomyColor(object, double, double)</a>
</div>
<div>
<a class="xref" href="Hi.Common.NameUtil.html#Hi_Common_NameUtil_GetSelectionName_System_Object_">NameUtil.GetSelectionName(object)</a>
</div>
<div>
<a class="xref" href="Hi.Common.StringUtil.html#Hi_Common_StringUtil_GetPropertyStringIfToStringNotOverloaded_System_Object_System_Boolean_System_Boolean_">StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool)</a>
</div>
<div>
<a class="xref" href="Hi.Parallels.LockUtil.html#Hi_Parallels_LockUtil_Lock_System_Object_">LockUtil.Lock(object)</a>
</div>
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_examples">Examples</h2>
<p>G53 with full XYZ on a first block (no <code>#Previous:</code>) —
<code>FindPreviousMc</code> falls back to <code>Vec3d.Zero</code>, transform
defaults to identity, so <code>ProgramXyz</code> equals
<code>MachineCoordinateState</code>. A non-modal <code>MotionEvent</code> is
stamped with <code>Term: &ldquo;G53&rdquo;</code> for bidirectional source recovery
(per the precedence rule on <a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html#Hi_NcParsers_Keywords_IMotionEventDef_Term">Term</a>);
<code>IsRapid</code> inherits from the modal
<a class="xref" href="Hi.NcParsers.Keywords.MotionState.html">MotionState</a>.<a class="xref" href="Hi.NcParsers.Keywords.IMotionStateDef.html#Hi_NcParsers_Keywords_IMotionStateDef_Term">Term</a>
(G00 → true, G01/G02/G03 → false, none → true as the conservative
&ldquo;safe rapid&rdquo; default common in practice):
#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "Parsing": { "Flags": ["G53"], "X": 10, "Y": 20, "Z": 30 } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30 },
"ProgramXyz": { "X": 10, "Y": 20, "Z": 30 },
"MotionEvent": { "Form": "McLinear", "IsRapid": true, "Term": "G53" }
}</code></pre>
<p>G53 with only Z specified — <code>FindPreviousMc</code> picks up X/Y from
the previous block's <code>MachineCoordinateState</code>; Z is overwritten;
<code>MotionEvent</code> stamped as above:
#Previous:</p>
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 100, "Y": 50, "Z": -200 } }</code></pre>
<p>#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "Parsing": { "Flags": ["G53"], "Z": 0 } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "X": 100, "Y": 50, "Z": 0 },
"ProgramXyz": { "X": 100, "Y": 50, "Z": 0 },
"MotionEvent": { "Form": "McLinear", "IsRapid": true, "Term": "G53" }
}</code></pre>
<p>G91 active on the same block — G53 incompatible with G91 incremental
positioning per ISO standard. Syntax emits validation error
<code>Coord-MachCoord&ndash;006</code>, consumes the G53 flag and any X/Y/Z,
and writes no machine state. <code>Positioning</code> section preserved:
#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "Flags": ["G53"], "X": 10 },
"Positioning": { "Term": "G91" }
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{ "Positioning": { "Term": "G91" } }</code></pre>
<p>Standalone G53 with no X/Y/Z — G53 by itself has no destination
to interpret as machine coordinates, so the syntax emits validation
error <code>Coord-MachCoord&ndash;007</code> and consumes the flag without
writing machine state:
#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "Parsing": { "Flags": ["G53"] } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{}</code></pre>
<p>Siemens SUPA retract (SUT configured with
<code>SupportedCodes = [&ldquo;G53&rdquo;, &ldquo;G153&rdquo;, &ldquo;SUPA&rdquo;]</code>) — corpus shape
<code>N5 SUPA G0 Z1150 D0</code>: the matched code is stamped verbatim as
<code>Term</code>, missing X/Y fill from the previous machine position,
the motion-mode flag is claimed into the modal <code>MotionState</code>
(LinearMotionSyntax skips this block, so nobody else would), and the
<code>D</code> word stays in <code>Parsing</code> for its own consumer:
#Previous:</p>
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 500, "Y": 1000, "Z": -30 } }</code></pre>
<p>#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "Parsing": { "Flags": ["SUPA", "G00"], "Z": 1150, "D": 0 } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "D": 0 },
"MachineCoordinateState": { "X": 500, "Y": 1000, "Z": 1150 },
"ProgramXyz": { "X": 500, "Y": 1000, "Z": 1150 },
"MotionState": { "Term": "G00" },
"MotionEvent": { "Form": "McLinear", "IsRapid": true, "Term": "SUPA" }
}</code></pre>
<p>Per-word incremental word on the machine-coordinate block (klartext
<code>L IY-10 M91</code>, Siemens <code>SUPA Y=IC(-10)</code>) — a distance in the
MACHINE frame: added to the previous machine position, never re-based
through the program frame. This is why the syntax sits ahead of
<code>IncrementalResolveSyntax</code> in every brand list; the override
section stays on the block (one-shot, nobody consumes it):
#Previous:</p>
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 100, "Y": 50, "Z": -200 } }</code></pre>
<p>#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "Flags": ["G53"], "Y": -10 },
"PositioningOverride": { "Y": "Incremental" }
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"PositioningOverride": { "Y": "Incremental" },
"MachineCoordinateState": { "X": 100, "Y": 40, "Z": -200 },
"ProgramXyz": { "X": 100, "Y": 40, "Z": -200 },
"MotionEvent": { "Form": "McLinear", "IsRapid": true, "Term": "G53" }
}</code></pre>
<p>Rotary-only machine-coordinate block under RTCP (<code>G0 G53 A0.</code>
while <code>G43.4</code> is active) — <code>McAbcSyntax</code> has already
consumed the rotary word into <code>MachineCoordinateState</code>, and
<code>G43p4RtcpSyntax</code> has tagged the chain <code>Dynamic</code> because
the tool orientation changes across the block. The linear axes hold
the previous machine position (G53 applies no compensation, so the
swing turns the axis in place instead of pinning the tool tip) and
the motion is stamped <code>McLinear</code>; <code>ProgramXyz</code> is the tip's
program coordinate after the swing — the 10 mm tool-height entry is
inverted, MC Z 0 → program Z −10:
#Previous:</p>
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": -1, "Y": -1, "Z": 0, "A": 90 } }</code></pre>
<p>#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "Flags": ["G53", "G00"] },
"MachineCoordinateState": { "A": 0 },
"ProgramToMcTransform": [
{
"Source": "ToolHeightCompensation",
"Kind": "Dynamic",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,10,1]
}
]
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "A": 0, "X": -1, "Y": -1, "Z": 0 },
"ProgramToMcTransform": [
{
"Source": "ToolHeightCompensation",
"Kind": "Dynamic",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,10,1]
}
],
"ProgramXyz": { "X": -1, "Y": -1, "Z": -10 },
"MotionState": { "Term": "G00" },
"MotionEvent": { "Form": "McLinear", "IsRapid": true, "Term": "G53" }
}</code></pre>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax__ctor_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.#ctor*"></a>
<h3 id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax__ctor" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.#ctor">
MachineCoordSelectSyntax()
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance with default settings.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public MachineCoordSelectSyntax()</code></pre>
</div>
<a id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax__ctor_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.#ctor*"></a>
<h3 id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax__ctor_System_Xml_Linq_XElement_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.#ctor(System.Xml.Linq.XElement)">
MachineCoordSelectSyntax(XElement)
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance by deserializing from the given XML element.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public MachineCoordSelectSyntax(XElement src)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>src</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>Source XML element.</p>
</dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_Name_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Name*"></a>
<h3 id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_Name" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Name">
Name
</h3>
<div class="markdown level1 summary"><p>Syntax kind name (typically the concrete type name).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Name { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_SupportedCodes_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.SupportedCodes*"></a>
<h3 id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_SupportedCodes" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.SupportedCodes">
SupportedCodes
</h3>
<div class="markdown level1 summary"><p>One-shot machine-coordinate codes this syntax consumes; defaults to
ISO G53. The Siemens preset widens the list to G53 + G153 + SUPA.
The first list entry present in <code>Parsing.Flags</code> is stamped as
<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html#Hi_NcParsers_Keywords_IMotionEventDef_Term">Term</a>; every listed code present on the
block is consumed so none re-triggers the unconsumed-parsing warning.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;string&gt; SupportedCodes { get; set; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_XName_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.XName*"></a>
<h3 id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_XName" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name used to register this syntax with <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_Build_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Build*"></a>
<h3 id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
Build(LazyLinkedListNode&lt;SyntaxPiece&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
<div class="markdown level1 summary"><p>Build syntax arrangement into the
<code class="paramref">syntaxPieceNode</code> in-place.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Build(LazyLinkedListNode&lt;SyntaxPiece&gt; syntaxPieceNode, List&lt;INcDependency&gt; ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>syntaxPieceNode</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedListNode-1.html">LazyLinkedListNode</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>&gt;</dt>
<dd></dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd></dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_MakeXmlSource_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.MakeXmlSource*"></a>
<h3 id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
<div class="markdown level1 summary"><p>Creates an XML representation of the object.
This method may also generate additional resources such as related files.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The base directory for resolving relative paths</p>
</dd>
<dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The relative file path for the XML source</p>
</dd>
<dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>if true, the extended file creation is suppressed.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>An XML element representing the object's state</p>
</dd>
</dl>
<h4 class="section" id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The <code class="paramref">baseDirectory</code> is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.</p>
</div>
<a id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_Reg_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Reg*"></a>
<h3 id="Hi_NcParsers_LogicSyntaxs_MachineCoordSelectSyntax_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Reg(XFactory factory = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>factory</code> <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a></dt>
<dd></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>