Archived
692 lines
31 KiB
HTML
692 lines
31 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Class McAbcCyclicPathSyntax | HiAPI-C# 2025 </title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="title" content="Class McAbcCyclicPathSyntax | HiAPI-C# 2025 ">
|
|
|
|
<meta name="description" content="Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses to determine which axes within need cyclic resolution. Falls back to hardcoded A/B/C if no is available. Must be placed after in . Two stages, mirroring : Root MachineCoordinateState — anchored at the previous block's modal rotary state..[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i &gt; 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion segments rather than a single root-MC stamp. Per-word directional override: a block-root entry (stamped by ) valued (Siemens ACP()) or (ACN()) swaps that axis's window for this block only: [anchor, anchor+360°) / (anchor-360°, anchor] instead of the default ±180° — the approach direction is forced even when it is the longer way around. A target congruent with the anchor (within an ULP-scale epsilon) keeps the anchor value verbatim — no move, never a spurious full turn, and no deg→rad→deg drift. (DC()) is the default window and needs no special path here. The override is read from the current block only (it is one-shot, never carried — deliberately unlike the modal RotaryWrap gate's one-step previous fallback) and applies to the root MC stage, not to items in general (G28/G74/G75 expansions capture their words in sub-objects the stamping syntax never sees, so an override can only ever describe a root word) — with one exception: an item whose value for an axis equals the root's pre-pass value verbatim carries that same root word (the canned-cycle pre-positioning item that stamps from the root MC) and inherits the root's directive for that axis, so the default window cannot fold the forced swing the root resolved into the short way. Directional/shortest entries keyed by an axis outside the modular set are reported as Coord-McAbc--003 — the promise cannot be honored there and silence would mis-read the program's intent; an entry with no anchor to resolve against (first rotary value in the stream) is reported as Coord-McAbc--004 and adopted unwrapped, matching the default path. Per-word incremental override: an entry (Siemens IC(), klartext IC+270) is a signed traverse by definition — already wrote anchor + delta — so this pass keeps that value verbatim for the axis instead of folding it into the ±180° window (a +270° chain dimension must not become a -90° swing). Incremental entries on non-modular axes need no warning: the literal value is what the axis would do anyway.">
|
|
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
|
<link rel="stylesheet" href="../public/docfx.min.css">
|
|
<link rel="stylesheet" href="../public/main.css">
|
|
<meta name="docfx:navrel" content="../toc.html">
|
|
<meta name="docfx:tocrel" content="toc.html">
|
|
|
|
<meta name="docfx:rel" content="../">
|
|
|
|
|
|
|
|
<meta name="loc:inThisArticle" content="In this article">
|
|
<meta name="loc:searchResultsCount" content="{count} results for "{query}"">
|
|
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
|
<meta name="loc:tocFilter" content="Filter by title">
|
|
<meta name="loc:nextArticle" content="Next">
|
|
<meta name="loc:prevArticle" content="Previous">
|
|
<meta name="loc:themeLight" content="Light">
|
|
<meta name="loc:themeDark" content="Dark">
|
|
<meta name="loc:themeAuto" content="Auto">
|
|
<meta name="loc:changeTheme" content="Change theme">
|
|
<meta name="loc:copy" content="Copy">
|
|
<meta name="loc:downloadPdf" content="Download PDF">
|
|
|
|
<script type="module" src="./../public/docfx.min.js"></script>
|
|
|
|
<script>
|
|
const theme = localStorage.getItem('theme') || 'auto'
|
|
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
|
|
</script>
|
|
|
|
</head>
|
|
|
|
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="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.McAbcCyclicPathSyntax">
|
|
|
|
|
|
|
|
<h1 id="Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax" class="text-break">
|
|
Class McAbcCyclicPathSyntax
|
|
</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>Resolve modular rotary axes to the shortest cyclic path relative to the previous node.
|
|
Uses <a class="xref" href="Hi.NcParsers.Dependencys.IMachineAxisConfig.html#Hi_NcParsers_Dependencys_IMachineAxisConfig_IsModularRotary_System_String_">IsModularRotary(string)</a> to determine which axes
|
|
within <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a> need cyclic resolution.
|
|
Falls back to hardcoded A/B/C if no <a class="xref" href="Hi.NcParsers.Dependencys.IMachineAxisConfig.html">IMachineAxisConfig</a> is available.
|
|
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a> in <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcSyntaxList">NcSyntaxList</a>.</p>
|
|
<p>
|
|
Two stages, mirroring <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a>:
|
|
<ol><li>Root <code>MachineCoordinateState</code> — anchored at the previous
|
|
block's modal rotary state.</li><li><a class="xref" href="Hi.NcParsers.Keywords.CompoundMotion.html">CompoundMotion</a>.<a class="xref" href="Hi.NcParsers.Keywords.CompoundMotion.html#Hi_NcParsers_Keywords_CompoundMotion_ItemsKey">ItemsKey</a>[*]
|
|
— sequential walk through items, anchoring item 0 at the previous
|
|
block's modal state and item <code>i > 0</code> at item <code>i-1</code>'s
|
|
post-cycle value (per-axis chain). Items without a rotary
|
|
<code>MachineCoordinateState</code> are skipped.</li></ol>
|
|
The items pass enables rotary motion (e.g. G28 ABC intermediate /
|
|
home stages) to surface as motion <a class="xref" href="Hi.Numerical.Acts.IAct.html">IAct</a>
|
|
segments rather than a single root-MC stamp.
|
|
|
|
<p>
|
|
Per-word directional override: a block-root
|
|
<a class="xref" href="Hi.NcParsers.Keywords.PositioningOverride.html">PositioningOverride</a> entry (stamped by
|
|
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensAcIcSyntax.html">SiemensAcIcSyntax</a>) valued
|
|
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_PositiveOnly">PositiveOnly</a> (Siemens <code>ACP()</code>) or
|
|
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_NegativeOnly">NegativeOnly</a> (<code>ACN()</code>) swaps that
|
|
axis's window for this block only: [anchor, anchor+360°) /
|
|
(anchor-360°, anchor] instead of the default ±180° — the approach
|
|
direction is forced even when it is the longer way around. A target
|
|
congruent with the anchor (within an ULP-scale epsilon) keeps the
|
|
anchor value verbatim — no move, never a spurious full turn, and no
|
|
deg→rad→deg drift. <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Shortest">Shortest</a> (<code>DC()</code>)
|
|
is the default window and needs no special path here. The override
|
|
is read from the current block only (it is one-shot, never carried —
|
|
deliberately unlike the modal <code>RotaryWrap</code> gate's one-step
|
|
previous fallback) and applies to the root MC stage, not to
|
|
<a class="xref" href="Hi.NcParsers.Keywords.CompoundMotion.html">CompoundMotion</a> items in general (G28/G74/G75 expansions
|
|
capture their words in sub-objects the stamping syntax never sees, so
|
|
an override can only ever describe a root word) — with one exception:
|
|
an item whose value for an axis equals the root's pre-pass value
|
|
verbatim carries that same root word (the canned-cycle
|
|
pre-positioning item that
|
|
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d)</a> stamps
|
|
from the root MC) and inherits the root's directive for that axis, so
|
|
the default window cannot fold the forced swing the root resolved
|
|
into the short way. Directional/shortest
|
|
entries keyed by an axis outside the modular set are reported as
|
|
<code>Coord-McAbc--003</code> — the promise cannot be honored there and
|
|
silence would mis-read the program's intent; an entry with no anchor
|
|
to resolve against (first rotary value in the stream) is reported as
|
|
<code>Coord-McAbc--004</code> and adopted unwrapped, matching the default
|
|
path.
|
|
</p>
|
|
<p>
|
|
Per-word incremental override: an <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Incremental">Incremental</a>
|
|
entry (Siemens <code>IC()</code>, klartext <code>IC+270</code>) is a signed
|
|
traverse by definition — <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> already wrote
|
|
anchor + delta — so this pass keeps that value verbatim for the
|
|
axis instead of folding it into the ±180° window (a +270° chain
|
|
dimension must not become a -90° swing). Incremental entries on
|
|
non-modular axes need no warning: the literal value is what the
|
|
axis would do anyway.
|
|
</p>
|
|
</div>
|
|
<div class="markdown conceptual"></div>
|
|
|
|
<div class="codewrapper">
|
|
<pre><code class="lang-csharp hljs">public class McAbcCyclicPathSyntax : 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">McAbcCyclicPathSyntax</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<TSelf>(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<TSrc>(TSrc, Action<TSrc>)</a>
|
|
</div>
|
|
<div>
|
|
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke<TSrc, TDst>(TSrc, Func<TSrc, TDst>)</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_McAbcCyclicPathSyntax_examples">Examples</h2>
|
|
<p>Cases below run with no <a class="xref" href="Hi.NcParsers.Dependencys.IMachineAxisConfig.html">IMachineAxisConfig</a> on the dep
|
|
list, so the syntax uses the A/B/C fallback (a configuration
|
|
warning is emitted but does not affect the JSON). The syntax is
|
|
the tail-pass rotary-wrap centraliser — upstream rotary writers
|
|
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a>, G28, G53.1, ...) store raw degrees and
|
|
let this pass resolve to the shortest cyclic path.</p>
|
|
<p>
|
|
Current B is within ±180° of the previous B — no wrap needed; the
|
|
value is rewritten in place but equals the input:
|
|
</p>
|
|
#Previous:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 0 } }</code></pre>
|
|
#BeforeBuild:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 10 } }</code></pre>
|
|
#AfterBuild:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 10 } }</code></pre>
|
|
Current B is 270° but previous B is 0° — the shortest path is the
|
|
other way around, so the value is rewritten as -90° (mathematically
|
|
equivalent, geometrically the same orientation, but signalling the
|
|
shorter rotation to a downstream motion consumer). 270/0 round-trips
|
|
through <code>ToRad</code>→<code>Cycle</code>→<code>ToDeg</code> with no rounding
|
|
noise (1.5π → -0.5π → -90 exactly); other angle pairs (e.g.
|
|
350° → -10°) emit a trailing ULP-scale drift instead:
|
|
#Previous:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 0 } }</code></pre>
|
|
#BeforeBuild:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 270 } }</code></pre>
|
|
#AfterBuild:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": -90 } }</code></pre>
|
|
First block of the stream (no <code>#Previous:</code>) — no anchor to
|
|
resolve against, so the syntax early-returns and the raw value is
|
|
preserved verbatim:
|
|
#BeforeBuild:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 350 } }</code></pre>
|
|
#AfterBuild:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 350 } }</code></pre>
|
|
<p>
|
|
<code>CompoundMotion.Items</code> walk — two items chain: item 0 cycles
|
|
against the previous block's modal B = 0° (270° → -90°), and item 1
|
|
cycles against item 0's post-cycle -90° (170° → -190°, since the
|
|
shorter path from -90° to 170° wraps backward through -180°). If
|
|
item 1 had used the previous-block anchor instead of the chained
|
|
anchor, 170° would have stayed at 170° (already in the ±180° window
|
|
around 0°), so the test discriminates between chain and no-chain:
|
|
</p>
|
|
#Previous:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 0 } }</code></pre>
|
|
#BeforeBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"CompoundMotion": {
|
|
"Items": [
|
|
{ "MachineCoordinateState": { "B": 270 } },
|
|
{ "MachineCoordinateState": { "B": 170 } }
|
|
]
|
|
}
|
|
}</code></pre>
|
|
#AfterBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"CompoundMotion": {
|
|
"Items": [
|
|
{ "MachineCoordinateState": { "B": -90 } },
|
|
{ "MachineCoordinateState": { "B": -190 } }
|
|
]
|
|
}
|
|
}</code></pre>
|
|
<p>
|
|
<code>ACP</code> (PositiveOnly) forces the positive swing even though the
|
|
shortest path from 0° to 270° is -90° (compare the default case
|
|
above — same numbers, opposite outcome). The override section stays
|
|
on the block (nothing consumes it away):
|
|
</p>
|
|
#Previous:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 0 } }</code></pre>
|
|
#BeforeBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"MachineCoordinateState": { "B": 270 },
|
|
"PositioningOverride": { "B": "PositiveOnly" }
|
|
}</code></pre>
|
|
#AfterBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"MachineCoordinateState": { "B": 270 },
|
|
"PositioningOverride": { "B": "PositiveOnly" }
|
|
}</code></pre>
|
|
<code>ACN</code> (NegativeOnly) mirror — target 90° from anchor 0° swings
|
|
-270° instead of the shortest +90°:
|
|
#Previous:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 0 } }</code></pre>
|
|
#BeforeBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"MachineCoordinateState": { "B": 90 },
|
|
"PositioningOverride": { "B": "NegativeOnly" }
|
|
}</code></pre>
|
|
#AfterBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"MachineCoordinateState": { "B": -270 },
|
|
"PositioningOverride": { "B": "NegativeOnly" }
|
|
}</code></pre>
|
|
Congruent target under a directional override — the raw anchor sits
|
|
at 370° (e.g. after an earlier ACP long-way swing) and the ACN
|
|
target 10° is the same physical position: no move, the anchor value
|
|
is kept verbatim (the epsilon snap; without it, radian ULP noise
|
|
would decide between "no move" and a spurious full -360° turn):
|
|
#Previous:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 370 } }</code></pre>
|
|
#BeforeBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"MachineCoordinateState": { "B": 10 },
|
|
"PositioningOverride": { "B": "NegativeOnly" }
|
|
}</code></pre>
|
|
#AfterBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"MachineCoordinateState": { "B": 370 },
|
|
"PositioningOverride": { "B": "NegativeOnly" }
|
|
}</code></pre>
|
|
Incremental word (<code>B=IC(270)</code> / klartext <code>L IB+270</code>): the
|
|
rotary writer accumulated anchor 0° + 270° = 270°, and the pass keeps
|
|
the traverse literal — the same 270° that the default window above
|
|
rewrote to -90° stays +270°:
|
|
#Previous:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 0 } }</code></pre>
|
|
#BeforeBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"MachineCoordinateState": { "B": 270 },
|
|
"PositioningOverride": { "B": "Incremental" }
|
|
}</code></pre>
|
|
#AfterBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"MachineCoordinateState": { "B": 270 },
|
|
"PositioningOverride": { "B": "Incremental" }
|
|
}</code></pre>
|
|
A <code>CompoundMotion</code> item carrying the root word verbatim — the
|
|
canned-cycle pre-positioning item that
|
|
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d)</a> stamps from
|
|
the root MC of a <code>B=ACP(270)</code> block — inherits the root's
|
|
<code>PositiveOnly</code> directive: both stay +270 instead of the item
|
|
folding to -90 as the plain items-walk case above would (same
|
|
numbers, opposite outcome). The second item is not a copy (170 ≠ 270)
|
|
and resolves under the default window against the chained anchor
|
|
270°, where 170 is already the short way:
|
|
#Previous:
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 0 } }</code></pre>
|
|
#BeforeBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"MachineCoordinateState": { "B": 270 },
|
|
"PositioningOverride": { "B": "PositiveOnly" },
|
|
"CompoundMotion": {
|
|
"Items": [
|
|
{ "MachineCoordinateState": { "B": 270 } },
|
|
{ "MachineCoordinateState": { "B": 170 } }
|
|
]
|
|
}
|
|
}</code></pre>
|
|
#AfterBuild:
|
|
<pre><code class="lang-csharp">{
|
|
"MachineCoordinateState": { "B": 270 },
|
|
"PositioningOverride": { "B": "PositiveOnly" },
|
|
"CompoundMotion": {
|
|
"Items": [
|
|
{ "MachineCoordinateState": { "B": 270 } },
|
|
{ "MachineCoordinateState": { "B": 170 } }
|
|
]
|
|
}
|
|
}</code></pre>
|
|
|
|
|
|
|
|
|
|
<h2 class="section" id="constructors">Constructors
|
|
</h2>
|
|
|
|
|
|
<a id="Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax__ctor_" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.#ctor*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax__ctor" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.#ctor">
|
|
McAbcCyclicPathSyntax()
|
|
|
|
</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 McAbcCyclicPathSyntax()</code></pre>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a id="Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax__ctor_" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.#ctor*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax__ctor_System_Xml_Linq_XElement_" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.#ctor(System.Xml.Linq.XElement)">
|
|
McAbcCyclicPathSyntax(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 McAbcCyclicPathSyntax(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_McAbcCyclicPathSyntax_Name_" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.Name*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax_Name" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.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_McAbcCyclicPathSyntax_XName_" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.XName*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax_XName" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.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_McAbcCyclicPathSyntax_Build_" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.Build*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax_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.McAbcCyclicPathSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
|
|
Build(LazyLinkedListNode<SyntaxPiece>, List<INcDependency>, 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<SyntaxPiece> syntaxPieceNode, List<INcDependency> 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><<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>></dt>
|
|
<dd></dd>
|
|
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a><<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>></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_McAbcCyclicPathSyntax_MakeXmlSource_" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.MakeXmlSource*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.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_McAbcCyclicPathSyntax_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_McAbcCyclicPathSyntax_Reg_" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.Reg*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_McAbcCyclicPathSyntax_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.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>
|