Archived
deploy.
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<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 only, not to items (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). 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.">
|
||||
<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">
|
||||
@@ -129,10 +129,17 @@ deg→rad→deg drift. <a class="xref" href="Hi.NcParsers.Keywords.Positioning.h
|
||||
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 only, not to
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.CompoundMotion.html">CompoundMotion</a> items (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). Directional/shortest
|
||||
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
|
||||
@@ -362,6 +369,39 @@ rewrote to -90° stays +270°:
|
||||
"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>
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user