Archived
732 lines
34 KiB
HTML
732 lines
34 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Class IncrementalResolveSyntax | HiAPI-C# 2025 </title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="title" content="Class IncrementalResolveSyntax | HiAPI-C# 2025 ">
|
|
|
|
<meta name="description" content="Resolves G91 incremental axis values to absolute in-place within and its sub-sections. Reads written by . Per-word override: a block-root section (written by for the Siemens per-word coordinate functions, and by the Heidenhain L / C / CC / CYCL CALL POS parsers for the klartext I-prefixed words — see ; the CYCL CALL POS words never reach this syntax, resolves them on the spot ahead of it) beats the modal term for the listed axes on this block only: an entry converts that word even under G90, an entry skips it even under G91 — as does, deliberately, every other non-Incremental value (the rotary-family / / entries are absolute targets; their swing resolution lives in , not here). A coded-position entry ( / — Siemens CAC()/CIC() on a linear indexing axis) carries an indexing position number instead of a coordinate: the number is resolved through via , the word is rewritten to the resolved absolute coordinate, and the entry to ; a failed resolve reports an error and holds the last program position. Axes without an entry follow the modal term unchanged, so brands that never write the section (Fanuc/...) keep the exact legacy behavior. specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [["Parsing"], ["Parsing", "G28"]]; the Heidenhain bundle instead walks ["Parsing", "CC"] for the klartext circle-center record (). All matching paths are converted against the same last program position — a nested record's words are distances from where the tool stands, exactly like the root's. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by inside each cycle syntax class, which runs before this syntax. Uses to determine which tags are motion axes. Traces backward nodes for last known to resolve incremental values. After this syntax, all axis values in the working paths are absolute — can consume them without incremental logic.">
|
|
<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.IncrementalResolveSyntax">
|
|
|
|
|
|
|
|
<h1 id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax" class="text-break">
|
|
Class IncrementalResolveSyntax
|
|
</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>Resolves G91 incremental axis values to absolute in-place
|
|
within <a class="xref" href="Hi.NcParsers.Keywords.IParsingDef.html#Hi_NcParsers_Keywords_IParsingDef_Parsing">Parsing</a> and its sub-sections.
|
|
Reads <a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html#Hi_NcParsers_Keywords_IPositioningDef_Term">Term</a> written
|
|
by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html">PositioningSyntax</a>.</p>
|
|
<p>
|
|
Per-word override: a block-root
|
|
<a class="xref" href="Hi.NcParsers.Keywords.PositioningOverride.html">PositioningOverride</a> section (written by
|
|
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensAcIcSyntax.html">SiemensAcIcSyntax</a> for the
|
|
Siemens per-word coordinate functions, and by the Heidenhain L / C /
|
|
CC / CYCL CALL POS parsers for the klartext I-prefixed words — see
|
|
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainIncrementalAxisWordUtil.html">HeidenhainIncrementalAxisWordUtil</a>;
|
|
the CYCL CALL POS words never reach this syntax,
|
|
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCannedCycleSyntax.html">HeidenhainCannedCycleSyntax</a> resolves them on
|
|
the spot ahead of it)
|
|
beats the modal
|
|
term for the listed axes on this block only: an
|
|
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Incremental">Incremental</a> entry converts that word even
|
|
under G90, an <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Absolute">Absolute</a> entry skips it even
|
|
under G91 — as does, deliberately, every other non-Incremental value
|
|
(the rotary-family <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Shortest">Shortest</a> /
|
|
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_PositiveOnly">PositiveOnly</a> /
|
|
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_NegativeOnly">NegativeOnly</a> entries are absolute targets;
|
|
their swing resolution lives in <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a>,
|
|
not here). A coded-position entry
|
|
(<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_CodedAbsolute">CodedAbsolute</a> /
|
|
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_CodedIncremental">CodedIncremental</a> — Siemens
|
|
<code>CAC()</code>/<code>CIC()</code> on a linear indexing axis) carries an
|
|
indexing position <b>number</b> instead of a coordinate: the number
|
|
is resolved through <a class="xref" href="Hi.NcParsers.Dependencys.IIndexingPositionConfig.html">IIndexingPositionConfig</a>
|
|
via <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CodedPositionUtil.html#Hi_NcParsers_LogicSyntaxs_CodedPositionUtil_TryResolveCodedTarget_Hi_NcParsers_Dependencys_IIndexingPositionConfig_System_String_System_String_System_Double_System_Double_Hi_NcParsers_ISentenceCarrier_Hi_NcParsers_NcDiagnosticProgress_System_Double__System_String__">TryResolveCodedTarget(IIndexingPositionConfig, string, string, double, double, ISentenceCarrier, NcDiagnosticProgress, out double, out string)</a>, the word
|
|
is rewritten to the resolved absolute coordinate, and the entry to
|
|
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Absolute">Absolute</a>; a failed resolve reports an error
|
|
and holds the last program position. Axes without an entry follow the
|
|
modal term unchanged, so brands that never write the section
|
|
(Fanuc/...) keep the exact legacy behavior.
|
|
</p>
|
|
<p>
|
|
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_WorkingPathList">WorkingPathList</a> specifies which JSON paths
|
|
contain axis values that need incremental-to-absolute conversion.
|
|
Default: <code>[["Parsing"], ["Parsing", "G28"]]</code>; the Heidenhain
|
|
bundle instead walks <code>["Parsing", "CC"]</code> for the klartext
|
|
circle-center record
|
|
(<a class="xref" href="Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html#Hi_NcParsers_Syntaxs_HeidenhainSyntaxUtil_CcAwareIncrementalResolveSyntax">CcAwareIncrementalResolveSyntax</a>).
|
|
All matching paths are converted against the same last program
|
|
position — a nested record's words are distances from where the
|
|
tool stands, exactly like the root's.
|
|
</p>
|
|
<p>
|
|
Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally
|
|
excluded — their Z/R incremental semantics differ from normal axes
|
|
(R is relative to init level, Z is relative to R-point).
|
|
Resolution is handled by
|
|
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double)</a>
|
|
inside each cycle syntax class, which runs before this syntax.
|
|
</p>
|
|
<p>
|
|
Uses <a class="xref" href="Hi.NcParsers.Dependencys.IMachineAxisConfig.html#Hi_NcParsers_Dependencys_IMachineAxisConfig_AxisNames">AxisNames</a> to determine
|
|
which tags are motion axes. Traces backward nodes for last known
|
|
<a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> to resolve incremental values.
|
|
After this syntax, all axis values in the working paths are absolute —
|
|
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a> can consume them without
|
|
incremental logic.
|
|
</p>
|
|
</div>
|
|
<div class="markdown conceptual"></div>
|
|
|
|
<div class="codewrapper">
|
|
<pre><code class="lang-csharp hljs">public class IncrementalResolveSyntax : 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">IncrementalResolveSyntax</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_IncrementalResolveSyntax_examples">Examples</h2>
|
|
<p>G90 (absolute) on the block — the syntax early-returns without
|
|
touching <code>Parsing.X/Y/Z</code>, even though the values look like
|
|
incremental deltas:
|
|
#BeforeBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G90", "Mode": "Absolute" },
|
|
"Parsing": { "X": 10, "Y": 20, "Z": 30 }
|
|
}</code></pre>
|
|
<p>#AfterBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G90", "Mode": "Absolute" },
|
|
"Parsing": { "X": 10, "Y": 20, "Z": 30 }
|
|
}</code></pre>
|
|
<p>G91 (incremental) with a <code>#Previous:</code> block carrying
|
|
<code>MachineCoordinateState=(100,200,300)</code>. Under the identity
|
|
<code>ProgramToMcTransform</code> chain, <code>GetLastProgramXyz</code> recovers
|
|
program XYZ equal to MC, so each axis in <code>Parsing</code> is rewritten
|
|
to <code>lastAbs + incremental</code>:
|
|
#Previous:</p>
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300 } }</code></pre>
|
|
<p>#BeforeBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
|
"Parsing": { "X": 10, "Y": 20, "Z": 30 }
|
|
}</code></pre>
|
|
<p>#AfterBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
|
"Parsing": { "X": 110, "Y": 220, "Z": 330 }
|
|
}</code></pre>
|
|
<p>G91 + <code>Parsing.G28</code> sub-section — exercises the second entry
|
|
of the default <code>WorkingPathList</code>; the root <code>Parsing</code> has
|
|
no X/Y/Z so the first path no-ops, but the
|
|
<code>[“Parsing”,“G28”]</code> path picks up the G28 intermediate axes
|
|
and resolves them against the same <code>lastProgramXyz</code>:
|
|
#Previous:</p>
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300 } }</code></pre>
|
|
<p>#BeforeBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
|
"Parsing": { "G28": { "X": 5, "Y": 10, "Z": 15 } }
|
|
}</code></pre>
|
|
<p>#AfterBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
|
"Parsing": { "G28": { "X": 105, "Y": 210, "Z": 315 } }
|
|
}</code></pre>
|
|
<p>G90 (absolute) with a per-word <code>PositioningOverride</code> — the
|
|
Siemens <code>X=IC(10)</code> shape after
|
|
<code>SiemensAcIcSyntax</code> unwrapped it. Only the overridden X converts
|
|
against the last program position; Y follows the modal G90 and stays:
|
|
#Previous:</p>
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300 } }</code></pre>
|
|
<p>#BeforeBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G90", "Mode": "Absolute" },
|
|
"PositioningOverride": { "X": "Incremental" },
|
|
"Parsing": { "X": 10, "Y": 20 }
|
|
}</code></pre>
|
|
<p>#AfterBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G90", "Mode": "Absolute" },
|
|
"PositioningOverride": { "X": "Incremental" },
|
|
"Parsing": { "X": 110, "Y": 20 }
|
|
}</code></pre>
|
|
<p>G91 (incremental) with an <code>Absolute</code> override on X — X is
|
|
skipped (already absolute, e.g. from <code>X=AC(25)</code>), Y still
|
|
converts under the modal G91:
|
|
#Previous:</p>
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300 } }</code></pre>
|
|
<p>#BeforeBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
|
"PositioningOverride": { "X": "Absolute" },
|
|
"Parsing": { "X": 25, "Y": 20 }
|
|
}</code></pre>
|
|
<p>#AfterBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
|
"PositioningOverride": { "X": "Absolute" },
|
|
"Parsing": { "X": 25, "Y": 220 }
|
|
}</code></pre>
|
|
<p>Coded-position absolute on a linear indexing axis (the Siemens
|
|
<code>X=CAC(2)</code> workholder shape after the unwrap + evaluation
|
|
stages). The case injects a <code>SiemensMachineDataTable</code> declaring
|
|
X linear and assigned to indexing table 1 =
|
|
<code>[-200, -100, 0, 100]</code>: position number 2 resolves to -100 mm
|
|
and the entry is rewritten to <code>Absolute</code>:
|
|
#BeforeBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G90", "Mode": "Absolute" },
|
|
"PositioningOverride": { "X": "CodedAbsolute" },
|
|
"Parsing": { "X": 2 }
|
|
}</code></pre>
|
|
<p>#AfterBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G90", "Mode": "Absolute" },
|
|
"PositioningOverride": { "X": "Absolute" },
|
|
"Parsing": { "X": -100 }
|
|
}</code></pre>
|
|
<p>The Heidenhain instance
|
|
(<a class="xref" href="Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html#Hi_NcParsers_Syntaxs_HeidenhainSyntaxUtil_CcAwareIncrementalResolveSyntax">CcAwareIncrementalResolveSyntax</a>)
|
|
on a klartext <code>CC IX+0 IY+11</code> block after the CC parser: the
|
|
nested record resolves against the last programmed position (the
|
|
tool stands at (10, 20)), so the center lands at (10, 31); the Parsing
|
|
root carries no axis word on a CC block and is untouched:
|
|
#Previous:</p>
|
|
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 0 } }</code></pre>
|
|
<p>#BeforeBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G90", "Mode": "Absolute" },
|
|
"PositioningOverride": { "X": "Incremental", "Y": "Incremental" },
|
|
"Parsing": { "CC": { "X": 0, "Y": 11 } }
|
|
}</code></pre>
|
|
<p>#AfterBuild:</p>
|
|
<pre><code class="lang-csharp">{
|
|
"Positioning": { "Term": "G90", "Mode": "Absolute" },
|
|
"PositioningOverride": { "X": "Incremental", "Y": "Incremental" },
|
|
"Parsing": { "CC": { "X": 10, "Y": 31 } }
|
|
}</code></pre>
|
|
|
|
|
|
|
|
|
|
<h2 class="section" id="constructors">Constructors
|
|
</h2>
|
|
|
|
|
|
<a id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax__ctor_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.#ctor*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax__ctor_System_Collections_Generic_List_System_Collections_Generic_List_System_String___" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.#ctor(System.Collections.Generic.List{System.Collections.Generic.List{System.String}})">
|
|
IncrementalResolveSyntax(List<List<string>>)
|
|
|
|
</h3>
|
|
|
|
<div class="markdown level1 summary"><p>Initializes a new instance with the given working path list.</p>
|
|
</div>
|
|
<div class="markdown level1 conceptual"></div>
|
|
|
|
<div class="codewrapper">
|
|
<pre><code class="lang-csharp hljs">public IncrementalResolveSyntax(List<List<string>> workingPathList)</code></pre>
|
|
</div>
|
|
|
|
<h4 class="section">Parameters</h4>
|
|
<dl class="parameters">
|
|
<dt><code>workingPathList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a><<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a><<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>>></dt>
|
|
<dd><p>JSON paths to scan for incremental axis values; see <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_WorkingPathList">WorkingPathList</a>.</p>
|
|
</dd>
|
|
</dl>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax__ctor_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.#ctor*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax__ctor_System_Xml_Linq_XElement_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.#ctor(System.Xml.Linq.XElement)">
|
|
IncrementalResolveSyntax(XElement)
|
|
|
|
</h3>
|
|
|
|
<div class="markdown level1 summary"><p>Initializes a new instance by deserializing the working path list from the
|
|
given XML element. Falls back to <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_Default">Default</a>.<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_WorkingPathList">WorkingPathList</a>
|
|
when the element has no <code>Path</code> children.</p>
|
|
</div>
|
|
<div class="markdown level1 conceptual"></div>
|
|
|
|
<div class="codewrapper">
|
|
<pre><code class="lang-csharp hljs">public IncrementalResolveSyntax(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_IncrementalResolveSyntax_Default_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Default*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_Default" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Default">
|
|
Default
|
|
|
|
</h3>
|
|
|
|
<div class="markdown level1 summary"><p>Default instance with working paths covering the <code>Parsing</code> root
|
|
and the <code>Parsing.G28</code> intermediate XYZ subsection.</p>
|
|
</div>
|
|
<div class="markdown level1 conceptual"></div>
|
|
|
|
<div class="codewrapper">
|
|
<pre><code class="lang-csharp hljs">public static IncrementalResolveSyntax Default { get; }</code></pre>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<h4 class="section">Property Value</h4>
|
|
<dl class="parameters">
|
|
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a></dt>
|
|
<dd></dd>
|
|
</dl>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_Name_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Name*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_Name" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.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_IncrementalResolveSyntax_WorkingPathList_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.WorkingPathList*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_WorkingPathList" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.WorkingPathList">
|
|
WorkingPathList
|
|
|
|
</h3>
|
|
|
|
<div class="markdown level1 summary"><p>JSON paths where this syntax searches for axis values (X/Y/Z)
|
|
to convert from incremental to absolute when G91 is active.
|
|
Each path is a list of segments navigating nested JSON objects.
|
|
All matching paths are converted.</p>
|
|
</div>
|
|
<div class="markdown level1 conceptual"></div>
|
|
|
|
<div class="codewrapper">
|
|
<pre><code class="lang-csharp hljs">public List<List<string>> WorkingPathList { 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.collections.generic.list-1">List</a><<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a><<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>>></dt>
|
|
<dd></dd>
|
|
</dl>
|
|
|
|
|
|
|
|
<h4 class="section" id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_WorkingPathList_examples">Examples</h4>
|
|
<pre><code class="lang-csharp">[["Parsing"]] → Parsing root (normal XYZ)
|
|
[["Parsing", "G28"]] → Parsing.G28 (G28 intermediate XYZ)</code></pre>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<a id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_XName_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.XName*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_XName" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.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_IncrementalResolveSyntax_Build_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Build*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_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.IncrementalResolveSyntax.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_IncrementalResolveSyntax_MakeXmlSource_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.MakeXmlSource*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.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_IncrementalResolveSyntax_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_IncrementalResolveSyntax_Reg_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.Reg*"></a>
|
|
|
|
<h3 id="Hi_NcParsers_LogicSyntaxs_IncrementalResolveSyntax_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.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>
|