616 lines
38 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace Hi.NcParsers.LogicSyntaxs | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace Hi.NcParsers.LogicSyntaxs | HiAPI-C# 2025 ">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.LogicSyntaxs">
<h1 id="Hi_NcParsers_LogicSyntaxs" data-uid="Hi.NcParsers.LogicSyntaxs" class="text-break">Namespace Hi.NcParsers.LogicSyntaxs</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html">BackBoringSyntax</a></dt>
<dd><p>G87 back boring cycle. Supports modal repetition.
Cuts upward from Z to R — used to bore the back side of a workpiece.</p>
<p>
Cycle sequence:
<ol><li>Oriented spindle stop (OSS) at current position</li><li>Rapid (shifted) to init position, then down to bottom Z
— tool enters pre-drilled hole without contacting bore wall</li><li>Shift back to hole center at bottom</li><li>Spindle start (CW)</li><li>Feed upward from Z to R-point (back boring cut)</li><li>Oriented spindle stop at R</li><li>Tool shift, rapid retract (shifted) to final Z</li><li>Shift back to center, spindle restart</li></ol>
<p>
Q specifies the lateral shift distance (mm).
Shift direction defaults to +X (OSS angle 0°).
</p>
<p>
Reads absolute coordinates from the cycle section, which is
resolved by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> before this
syntax runs.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html">BoringCycleSyntax</a></dt>
<dd><p>G85/G86/G89 boring cycles.</p>
<p>
Cycle sequence:
<ol><li>Rapid to init position (target XY, previous Z)</li><li>Rapid from init to R-point</li><li>Feed from R-point to bottom Z</li><li>[G86 only] Spindle stop at bottom</li><li>[G89 only] Dwell P seconds at bottom</li><li>Retract: G85/G89 → feed retract, G86 → rapid retract</li><li>[G86 only] Spindle restart (CW) after retract</li></ol>
<p>
G85: feed to Z, feed retract — smooth bore finish.
G86: feed to Z, spindle stop (implicit), rapid retract.
G89: feed to Z, dwell P, feed retract — like G85 with bottom dwell.
</p>
<p>
Reads absolute coordinates from the cycle section, which is
resolved by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> (modal repetition,
G91 conversion, missing-axis fallback) before this syntax runs.
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> and before
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> in the syntax chain.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a></dt>
<dd><p>Resolves canned cycle parameters for the current block:
modal repetition detection, G91 incremental-to-absolute conversion,
and missing-axis fallback from last known position.</p>
<p>
After this syntax, the cycle sub-section in <code>Parsing</code>
(e.g., <code>Parsing.G83</code>) contains fully resolved absolute
coordinates — downstream cycle syntaxes
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html">DrillingCycleSyntax</a>, <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html">PeckDrillingCycleSyntax</a>)
can read them directly without incremental or modal logic.
</p>
<p>
For modal repetition (no cycle G-code in the current block),
merges stored parameters from the previous block's
<a class="xref" href="Hi.NcParsers.Keywords.CompoundMotion.html">CompoundMotion</a>.<span class="xref">Hi.NcParsers.LogicSyntaxs.CannedCycleSyntaxUtil.ResolvedParamsKey</span>
with current-block overrides from <code>Parsing</code> root, removes
consumed keys from <code>Parsing</code> root, and writes the merged
section to <code>Parsing</code> under the cycle code key.
</p>
<p>
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PositioningModeSyntax.html">PositioningModeSyntax</a> and before
the individual cycle syntaxes in the chain.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html">CircularMotionSyntax</a></dt>
<dd><p>Writes <a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_McArc">McArc</a> motion for circular commands
(ISO G02/G03).
Detects motion mode from <a class="xref" href="Hi.NcParsers.Keywords.IFlagsDef.html#Hi_NcParsers_Keywords_IFlagsDef_Flags">Flags</a>, reads
I/J/K center offsets or R radius from <a class="xref" href="Hi.NcParsers.Keywords.IParsingDef.html#Hi_NcParsers_Keywords_IParsingDef_Parsing">Parsing</a>,
computes arc center in program coordinates, and writes
<a class="xref" href="Hi.NcParsers.Keywords.IMotionDef.html">IMotionDef</a> + <a class="xref" href="Hi.NcParsers.Keywords.IArcMotionDef.html">IArcMotionDef</a> data.</p>
<p>
G02/G03 mode is modal (Group 01) — persists via backward lookback.
Arc parameters (I/J/K/R) are per-block and must be present
in every arc block.
</p>
<p>
Must be placed before <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> in the
syntax chain. Both share the Group 01 <a class="xref" href="Hi.Motion.html">Hi.Motion</a> slot;
whichever writes first claims it.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html">CoordinateOffsetUtil</a></dt>
<dd><p>Shared utilities for all coordinate offset syntaxes
(ISO, Siemens, Heidenhain). Handles section IO,
backward lookback, and <a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a> composition.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html">DrillingCycleSyntax</a></dt>
<dd><p>G81/G82 drilling cycle (rapid retract). Supports modal repetition.
G82 covers G81 — the only difference is an optional dwell (P) at the bottom.</p>
<p>
Cycle sequence:
<ol><li>Rapid to init position (target XY, previous Z)</li><li>Rapid from init to R-point</li><li>Feed from R-point to bottom Z</li><li>[G82 only] Dwell P seconds at bottom</li><li>Rapid from bottom to final (G98 → init Z, G99 → R)</li></ol>
<p>
Reads absolute coordinates from the cycle section, which is
resolved by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> (modal repetition,
G91 conversion, missing-axis fallback) before this syntax runs.
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> and before
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> in the syntax chain.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html">FeedrateSyntax</a></dt>
<dd><p>Consumes F (feedrate) from <a class="xref" href="Hi.NcParsers.Keywords.IParsingDef.html#Hi_NcParsers_Keywords_IParsingDef_Parsing">Parsing</a> and
G94/G95 mode from <a class="xref" href="Hi.NcParsers.Keywords.IFlagsDef.html#Hi_NcParsers_Keywords_IFlagsDef_Flags">Flags</a>.
Both are modal — persist across blocks via backward node lookback.
Writes resolved state to a <a class="xref" href="Hi.NcParsers.Keywords.IFeedrateDef.html">IFeedrateDef</a> section.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html">FineBoringSyntax</a></dt>
<dd><p>G76 fine boring cycle. Supports modal repetition.</p>
<p>
Cycle sequence:
<ol><li>Rapid to init position (target XY, previous Z)</li><li>Rapid from init to R-point</li><li>Feed from R-point to bottom Z</li><li>Oriented spindle stop (OSS)</li><li>Tool shift by Q in +X direction (clear bore wall)</li><li>Rapid retract (shifted) to final Z</li><li>Tool shift back to center</li><li>Spindle restart (CW)</li></ol>
<p>
Q specifies the lateral shift distance (mm) to avoid dragging
the tool across the finished bore surface during retract.
Shift direction defaults to +X (OSS angle 0°).
</p>
<p>
Reads absolute coordinates from the cycle section, which is
resolved by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> before this
syntax runs.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html">G53p1RotaryPositionSyntax</a></dt>
<dd><p>G53.1 — non-modal, one-shot rotary axis positioning.
Positions the rotary axes (A/B/C) to align the physical tool axis
with the active tilted work plane defined by G68.2.
XYZ position is unchanged; only rotary axes move via rapid traverse.</p>
<p>
Requires <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html">IsoG68p2TiltSyntax</a> (or equivalent) to have
written the tilt transform. Uses <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html">IMachineKinematics</a>
to solve for the target A/B/C via inverse kinematics.
</p>
<p>
Must be placed <b>after</b> <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html">IsoG68p2TiltSyntax</a>
(needs tilt data) and <b>before</b> <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a>
in the syntax chain. Writes A/B/C into
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a>.
Motion is handled by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> via modal G00/G01.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html">HighSpeedPeckCycleSyntax</a></dt>
<dd><p>G73 high-speed peck drilling cycle (chip breaking). Supports modal repetition.
Drills in increments of depth Q, partially retracting by
<a class="xref" href="Hi.NcParsers.Dependencys.ICannedCycleConfig.html#Hi_NcParsers_Dependencys_ICannedCycleConfig_PeckRetractionDistance_mm">PeckRetractionDistance_mm</a> between strokes
(instead of fully back to R like <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html">PeckDrillingCycleSyntax</a>).</p>
<p>
Cycle sequence:
<ol><li>Rapid to init position (target XY, previous Z)</li><li>Rapid from init to R-point</li><li>For each stroke: feed Q deeper, rapid retract by d</li><li>If remainder exists: feed to bottom Z, rapid retract by d</li><li>Rapid to final (G98 → init Z, G99 → R)</li></ol>
<p>
Reads absolute coordinates from the cycle section, which is
resolved by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> (modal repetition,
G91 conversion, missing-axis fallback) before this syntax runs.
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> and before
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> in the syntax chain.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a></dt>
<dd><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.IPositioningModeDef.html#Hi_NcParsers_Keywords_IPositioningModeDef_PositioningMode">PositioningMode</a> written
by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PositioningModeSyntax.html">PositioningModeSyntax</a>.</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>.
All matching paths are converted.
</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>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html">IsoCoordinateOffsetSyntax</a></dt>
<dd><p>ISO/Fanuc/Mazak/Okuma/Syntec: resolves G54G59.9 work coordinate offset.
Reads G54/G55/.../G59.9 from <a class="xref" href="Hi.NcParsers.Keywords.IFlagsDef.html#Hi_NcParsers_Keywords_IFlagsDef_Flags">Flags</a>,
looks up offset Vec3d from <a class="xref" href="Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html">IsoCoordinateTable</a> dependency,
composes into <a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a>.
Modal — active coordinate persists via backward lookback.
Default coordinate ID is set by <a class="xref" href="Hi.NcParsers.Initializers.StaticInitializer.html">StaticInitializer</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html">IsoG68RotationSyntax</a></dt>
<dd><p>ISO/Fanuc: resolves G68 (2D coordinate rotation) and G69 (cancel).
Computes a rotation <a class="xref" href="Hi.Geom.Mat4d.html">Mat4d</a> around the active plane normal
and composes it into <a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a>.</p>
<p>
No <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html">IMachineKinematics</a> dependency needed —
G68 is pure geometric rotation.
</p>
<p>
Managed commands: G68, G69 (idempotent with <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html">IsoG68p2TiltSyntax</a>).
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html">IsoG68p2TiltSyntax</a></dt>
<dd><p>ISO/Fanuc: resolves G68.2 (tilted work plane) and G69 (cancel).
Computes a tilt <a class="xref" href="Hi.Geom.Mat4d.html">Mat4d</a> from I/J/K euler angles
(Fanuc ZXZ convention) and composes it into
<a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a>.</p>
<p>
Managed commands: G68.2, G69 (idempotent with <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html">IsoG68RotationSyntax</a>).
Siemens equivalent: CYCLE800 (separate syntax).
Heidenhain equivalent: PLANE SPATIAL (separate syntax).
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html">IsoLocalCoordinateOffsetSyntax</a></dt>
<dd><p>ISO G52: Local coordinate system offset (additive to G54-series).</p>
<p>
<code>G52 X10 Y20 Z5</code> → sets local offset.
<code>G52 X0 Y0 Z0</code> → cancels (resets to zero).
M30 (program end) → also cancels.
</p>
Reads <code>Parsing.G52</code> (from <a class="xref" href="Hi.NcParsers.Syntaxs.GenericSyntaxKit.html#Hi_NcParsers_Syntaxs_GenericSyntaxKit_G52Syntax">G52Syntax</a>),
writes <a class="xref" href="Hi.NcParsers.Keywords.LocalCoordinateOffset.html">LocalCoordinateOffset</a> section,
and adds a <code>"LocalCoordinateOffset"</code> entry to the transformation chain.
Modal — persists via backward lookback until changed or cancelled.
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a></dt>
<dd><p>Writes <a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_McLinear">McLinear</a> motion for linear commands
(ISO G00/G01, Heidenhain L/LN).
Detects motion mode from <a class="xref" href="Hi.NcParsers.Keywords.IFlagsDef.html#Hi_NcParsers_Keywords_IFlagsDef_Flags">Flags</a>, writes
<a class="xref" href="Hi.NcParsers.Keywords.IMotionDef.html">IMotionDef</a> section when
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a> exists.</p>
<p>
<a class="xref" href="Hi.NcParsers.Semantics.McLinearMotionSemantic.html">McLinearMotionSemantic</a> discriminates between
XYZ-only and XYZABC motion by checking whether rotary axis values
are present in <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a>.
</p>
Modal — persists across blocks via backward node lookback.
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> in the syntax chain.
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a></dt>
<dd><p>Handles G53 (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, G53 is ignored per ISO standard.</p>
<p>
Must be placed <b>before</b> <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a> in the
syntax chain. When G53 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.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a> directly,
preventing <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a> from processing them
as program coordinates.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a></dt>
<dd><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.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</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>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a></dt>
<dd><p>Writes rotary axis values (A/B/C) into
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a> from
<a class="xref" href="Hi.NcParsers.Keywords.IParsingDef.html#Hi_NcParsers_Keywords_IParsingDef_Parsing">Parsing</a>.</p>
<p>
Only active when <a class="xref" href="Hi.NcParsers.Dependencys.IMachineAxisConfig.html">IMachineAxisConfig</a> declares rotary axes.
Works for both 3+2-axis (no <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html">IMachineKinematics</a>)
and simultaneous 5-axis configurations.
</p>
<p>
When <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a> does not exist
(e.g., rotary-only blocks like <code>G00 A30.</code> with no X/Y/Z),
the section is created with XYZ filled from lookback.
</p>
<p>
Missing rotary axes are filled from previous
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a> lookback,
unless the current section already has the value
(e.g., from <a class="xref" href="Hi.NcParsers.Initializers.HomeMcInitializer.html">HomeMcInitializer</a>).
Values are stored in degrees (matching <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a>).
</p>
<p>
Must be placed <b>after</b> <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a>
and <b>before</b> <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a>
and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> in the syntax chain.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a></dt>
<dd><p>Derives <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a> from
<a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> by applying the composed
<a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a>.</p>
<p>
Processes two stages:
<ol><li>Root <code>ProgramXyz</code> → root <code>MachineCoordinate</code></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>[*]
— derives <code>MachineCoordinate</code> from <code>ProgramXyz</code> for items
that have <code>ProgramXyz</code> but no <code>MachineCoordinate</code></li></ol>
Must be placed after syntaxes that write <code>ProgramXyz</code>
(e.g., <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html">ReferenceReturnSyntax</a>)
and before syntaxes that read <code>MachineCoordinate</code>
(e.g., <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a>).
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html">PeckDrillingCycleSyntax</a></dt>
<dd><p>G83 peck drilling cycle. Supports modal repetition.
Drills in increments of depth Q, fully retracting to R between strokes.</p>
<p>
Cycle sequence (per stroke):
<ol><li>Rapid to init position (target XY, previous Z)</li><li>Rapid from init to R-point</li><li>For each stroke: rapid to clearance above previous depth,
feed Q deeper, rapid back to R</li><li>If remainder exists: feed to bottom Z, rapid to R</li><li>Rapid from R/bottom to final (G98 → init Z, G99 → R)</li></ol>
<p>
Retraction distance is read from <a class="xref" href="Hi.NcParsers.Dependencys.ICannedCycleConfig.html">ICannedCycleConfig</a>
(Fanuc #4002 / Syntec Pr4002, or Generic.FallbackConfig
fallback).
</p>
<p>
Reads absolute coordinates from the cycle section, which is
resolved by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> (modal repetition,
G91 conversion, missing-axis fallback) before this syntax runs.
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> and before
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> in the syntax chain.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.PositioningModeSyntax.html">PositioningModeSyntax</a></dt>
<dd><p>Detects G90/G91 positioning mode from <a class="xref" href="Hi.NcParsers.Keywords.IFlagsDef.html#Hi_NcParsers_Keywords_IFlagsDef_Flags">Flags</a>
(or by modal lookback) and writes
<a class="xref" href="Hi.NcParsers.Keywords.IPositioningModeDef.html#Hi_NcParsers_Keywords_IPositioningModeDef_PositioningMode">PositioningMode</a> to the block JSON.</p>
<p>
Fanuc/ISO: reads G90/G91 from <a class="xref" href="Hi.NcParsers.Keywords.IFlagsDef.html#Hi_NcParsers_Keywords_IFlagsDef_Flags">Flags</a> (global modal).
Heidenhain: would need a separate implementation reading I-prefix per axis.
Siemens: would extend with AC()/IC() per-axis override.
</p>
<p>
Does NOT convert incremental values — that is handled by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> which can be placed later
in the syntax chain, after canned cycle syntaxes have consumed
their parameters with cycle-specific G91 semantics.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a></dt>
<dd><p>Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags.
Writes <a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> sub-object to
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>.<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject">JsonObject</a>.
Must be placed after <a class="xref" href="Hi.NcParsers.Syntaxs.BundleSyntax.html">BundleSyntax</a> since it uses
cross-node lookback for last position.</p>
<p>
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> (placed after this in the chain) reads
<a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> and writes
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a>.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html">ProgramXyzUtil</a></dt>
<dd><p>Shared utilities for <a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> and
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a> lookback and resolution.
Used by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a>, <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html">ReferenceReturnSyntax</a>,
and semantic resolvers that need position lookback.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html">ReferenceReturnSyntax</a></dt>
<dd><p>Writes <a class="xref" href="Hi.NcParsers.Keywords.ICompoundMotionDef.html">ICompoundMotionDef</a> section for G28 reference point return.
Reads intermediate XYZ from <code>Parsing.G28</code>
(written by <a class="xref" href="Hi.NcParsers.Syntaxs.GenericSyntaxKit.html#Hi_NcParsers_Syntaxs_GenericSyntaxKit_G28Syntax">G28Syntax</a>)
and converts to machine coordinates via
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzUtil_ResolveProgramXyz_System_Text_Json_Nodes_JsonNode_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__Hi_Geom_Mat4d_">ResolveProgramXyz(JsonNode, LazyLinkedListNode&lt;SyntaxPiece&gt;, Mat4d)</a>.</p>
<p>
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> in the syntax chain.
Removes the <a class="xref" href="Hi.NcParsers.Keywords.IMotionDef.html">IMotionDef</a> section written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> (G28 handles its own motion).
Overwrites root <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateDef_MachineCoordinate">MachineCoordinate</a>
and <a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> with reference position
for subsequent block lookback.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html">RotaryAxisUtil</a></dt>
<dd><p>Shared utilities for rotary axis (A/B/C) resolution.
Used by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html">G53p1RotaryPositionSyntax</a>,
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a>, <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html">IsoG68p2TiltSyntax</a>,
and other syntaxes that read or write rotary axis values.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html">SpindleSpeedSyntax</a></dt>
<dd><p>Consumes S (spindle speed) and M03/M04/M05 (spindle direction)
from <a class="xref" href="Hi.NcParsers.Keywords.IParsingDef.html#Hi_NcParsers_Keywords_IParsingDef_Parsing">Parsing</a>.
Both are modal — persist across blocks via backward node lookback.
Writes resolved state to a <a class="xref" href="Hi.NcParsers.Keywords.ISpindleSpeedDef.html">ISpindleSpeedDef</a> section.
Direction is converted from ISO M-codes to the conventional
<a class="xref" href="Hi.Numerical.SpindleDirection.html">SpindleDirection</a> enum at this layer.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html">TappingCycleSyntax</a></dt>
<dd><p>G84 (right-hand) / G74 (left-hand) tapping cycles.
Supports modal repetition.</p>
<p>
Cycle sequence:
<ol><li>Rapid to init position (target XY, previous Z)</li><li>Rapid from init to R-point</li><li>Feed from R-point to bottom Z</li><li>Spindle reverse at bottom</li><li>Feed retract to final Z (G98 → init Z, G99 → R)</li><li>Spindle restore to forward direction</li></ol>
<p>
G84: forward = CW (M03), reverse = CCW (M04).
G74: forward = CCW (M04), reverse = CW (M03).
</p>
<p>
Reads absolute coordinates from the cycle section, which is
resolved by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> (modal repetition,
G91 conversion, missing-axis fallback) before this syntax runs.
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> and before
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> in the syntax chain.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html">TiltTransformUtil</a></dt>
<dd><p>Shared utilities for all tilt transform syntaxes
(ISO, Siemens, Heidenhain). Handles section IO,
backward lookback, and <a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a> composition.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html">ToolHeightOffsetSyntax</a></dt>
<dd><p>Resolves tool height offset ID to the effective offset value (mm)
and composes the offset as a translation into the accumulated
<a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a> matrix.</p>
<p>
Reads parsed G43/G43.4/G44/G49 flags and H numbers from upstream parsing syntaxes,
looks up the offset value from <a class="xref" href="Hi.NcParsers.Dependencys.IToolOffsetConfig.html">IToolOffsetConfig</a> dependency,
writes the resolved state to a <a class="xref" href="Hi.NcParsers.Keywords.IToolHeightCompensationDef.html">IToolHeightCompensationDef</a>
section for debuggability, and composes
<code>ProgramToMcTransform.Trans += toolOrientation * height_mm</code>.
</p>
<p>
The tool orientation direction is read from a "ToolOrientation" key in JSON
(written by a prior syntax, e.g., ToolOrientationSyntax). If absent, falls back
to the current <a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a>'s
<a class="xref" href="Hi.Geom.Mat4d.html#Hi_Geom_Mat4d_AxialNormal">AxialNormal</a> (rotated Z). If no transformation exists yet,
defaults to <a class="xref" href="Hi.Geom.Vec3d.html#Hi_Geom_Vec3d_UnitZ">UnitZ</a>.
</p>
</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>