deploy.
This commit is contained in:
@@ -732,6 +732,51 @@ All native-backed members become no-ops afterwards
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Disp_DispEngine_IsGlAvailable_" data-uid="Hi.Disp.DispEngine.IsGlAvailable*"></a>
|
||||
|
||||
<h3 id="Hi_Disp_DispEngine_IsGlAvailable" data-uid="Hi.Disp.DispEngine.IsGlAvailable">
|
||||
IsGlAvailable
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Whether this process has a usable OpenGL context, i.e. whether 3D
|
||||
rendering is available at all.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public static bool IsGlAvailable { 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.boolean">bool</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section" id="Hi_Disp_DispEngine_IsGlAvailable_remarks">Remarks</h4>
|
||||
<div class="markdown level1 remarks"><p>False on a host with no usable GL — a driver whose kernel module and
|
||||
userspace disagree, a container started without <code>/dev/dri</code>, a VM
|
||||
with no 3D pass-through. The process still runs: NC play, physics,
|
||||
training and every non-rendering API are unaffected, because none of
|
||||
them touch the display engine. What is not available is the engine
|
||||
itself, so callers must not construct or ask for a <a class="xref" href="Hi.Disp.DispEngine.html">DispEngine</a>
|
||||
while this is false rather than guarding individual draw calls.
|
||||
Meaningful only after <a class="xref" href="Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_Init_System_String_">Init(string)</a> has run; it is false
|
||||
before that for the same reason it is false on a broken host, so read
|
||||
it only from code that runs after application start-up.</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Disp_DispEngine_IsOnDispThread_" data-uid="Hi.Disp.DispEngine.IsOnDispThread*"></a>
|
||||
|
||||
<h3 id="Hi_Disp_DispEngine_IsOnDispThread" data-uid="Hi.Disp.DispEngine.IsOnDispThread">
|
||||
|
||||
@@ -565,6 +565,41 @@ This is for internal use only.</p>
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_MachiningActRunner_RapidCutMonitor_" data-uid="Hi.MachiningProcs.MachiningActRunner.RapidCutMonitor*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_MachiningActRunner_RapidCutMonitor" data-uid="Hi.MachiningProcs.MachiningActRunner.RapidCutMonitor">
|
||||
RapidCutMonitor
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Folds rapid-traverse steps that removed stock into one
|
||||
<code>Play-RapidCut–Detected</code> warning per NC line. Fed on the
|
||||
sequential post-physics stage, flushed by the session at the end of a
|
||||
play, reset with the state.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public RapidCutMonitor RapidCutMonitor { get; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html">RapidCutMonitor</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_MachiningActRunner_ShellThreadStepIndex_" data-uid="Hi.MachiningProcs.MachiningActRunner.ShellThreadStepIndex*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_MachiningActRunner_ShellThreadStepIndex" data-uid="Hi.MachiningProcs.MachiningActRunner.ShellThreadStepIndex">
|
||||
|
||||
@@ -631,6 +631,47 @@ Default <a class="xref" href="Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_MachiningActRunnerConfig_RapidCutVolumeThreshold_mm3_" data-uid="Hi.MachiningProcs.MachiningActRunnerConfig.RapidCutVolumeThreshold_mm3*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_MachiningActRunnerConfig_RapidCutVolumeThreshold_mm3" data-uid="Hi.MachiningProcs.MachiningActRunnerConfig.RapidCutVolumeThreshold_mm3">
|
||||
RapidCutVolumeThreshold_mm3
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Removed-stock volume, in mm³, below which a rapid traverse that touched
|
||||
the workpiece is not reported. The steps of one NC line that were
|
||||
commanded as rapid traverse (G00) and touched the stock fold into one
|
||||
<code>Play-RapidCut–Detected</code> warning carrying the line's total removed
|
||||
volume and its largest cutting depth (<a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html">RapidCutMonitor</a>);
|
||||
the warning is emitted only when that total reaches this threshold.
|
||||
Default 0: any contact reports. Steps with the spindle stopped are left
|
||||
to collision detection while <a class="xref" href="Hi.MachiningProcs.MachiningActRunnerConfig.html#Hi_MachiningProcs_MachiningActRunnerConfig_EnableCollisionDetection">EnableCollisionDetection</a> is
|
||||
on. Project-level on purpose: the same project must report the same
|
||||
lines on every machine.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public double RapidCutVolumeThreshold_mm3 { get; set; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_MachiningActRunnerConfig_XName_" data-uid="Hi.MachiningProcs.MachiningActRunnerConfig.XName*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_MachiningActRunnerConfig_XName" data-uid="Hi.MachiningProcs.MachiningActRunnerConfig.XName">
|
||||
|
||||
@@ -0,0 +1,557 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Struct RapidCutMonitor.Sample | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Struct RapidCutMonitor.Sample | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="One built step as the monitor sees it — the few facts the fold needs, detached from so the fold is testable on synthetic steps.">
|
||||
<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.MachiningProcs.RapidCutMonitor.Sample">
|
||||
|
||||
|
||||
|
||||
<h1 id="Hi_MachiningProcs_RapidCutMonitor_Sample" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample" class="text-break">
|
||||
Struct RapidCutMonitor.Sample
|
||||
</h1>
|
||||
|
||||
<div class="facts text-secondary">
|
||||
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.MachiningProcs.html">MachiningProcs</a></dd></dl>
|
||||
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
|
||||
</div>
|
||||
|
||||
<div class="markdown summary"><p>One built step as the monitor sees it — the few facts the fold needs,
|
||||
detached from <a class="xref" href="Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> so the fold is testable on
|
||||
synthetic steps.</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public readonly record struct RapidCutMonitor.Sample : IEquatable<RapidCutMonitor.Sample></code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<dl class="typelist implements">
|
||||
<dt>Implements</dt>
|
||||
<dd>
|
||||
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a><<a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html">RapidCutMonitor</a>.<a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.Sample.html">Sample</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.valuetype.equals">ValueType.Equals(object)</a>
|
||||
</div>
|
||||
<div>
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetype.gethashcode">ValueType.GetHashCode()</a>
|
||||
</div>
|
||||
<div>
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetype.tostring">ValueType.ToString()</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.gettype">object.GetType()</a>
|
||||
</div>
|
||||
<div>
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="typelist extensionMethods">
|
||||
<dt>Extension Methods</dt>
|
||||
<dd>
|
||||
<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.Common.MaskUtil.html#Hi_Common_MaskUtil_GetMaskedValue__1___0___0_System_Boolean_">MaskUtil.GetMaskedValue<T>(T, T, bool)</a>
|
||||
</div>
|
||||
<div>
|
||||
<a class="xref" href="Hi.Common.MaskUtil.html#Hi_Common_MaskUtil_SetMask__1___0____0_System_Boolean_">MaskUtil.SetMask<T>(ref T, T, bool)</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 class="section" id="constructors">Constructors
|
||||
</h2>
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Sample__ctor_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.#ctor*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Sample__ctor_System_Int32_System_Nullable_System_Int32__System_Object_Hi_NcParsers_ISentenceCarrier_System_Boolean_System_Boolean_System_Boolean_System_Double_System_Double_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.#ctor(System.Int32,System.Nullable{System.Int32},System.Object,Hi.NcParsers.ISentenceCarrier,System.Boolean,System.Boolean,System.Boolean,System.Double,System.Double)">
|
||||
Sample(int, int?, object, ISentenceCarrier, bool, bool, bool, double, double)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>One built step as the monitor sees it — the few facts the fold needs,
|
||||
detached from <a class="xref" href="Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> so the fold is testable on
|
||||
synthetic steps.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public Sample(int StepIndex, int? LineNo, object LineKey, ISentenceCarrier Carrier, bool IsRapid, bool IsTouched, bool IsSpindleStopped, double RemovedVolume_mm3, double CuttingDepth_mm)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>StepIndex</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
|
||||
<dd><p>Execution-order index of the step.</p>
|
||||
</dd>
|
||||
<dt><code>LineNo</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a>?</dt>
|
||||
<dd><p>NC line number, or null where the runner carries none (CSV / CL replay).</p>
|
||||
</dd>
|
||||
<dt><code>LineKey</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
|
||||
<dd><p>Fold key: the line number when known, else the sentence, else the step index.</p>
|
||||
</dd>
|
||||
<dt><code>Carrier</code> <a class="xref" href="Hi.NcParsers.ISentenceCarrier.html">ISentenceCarrier</a></dt>
|
||||
<dd><p>NC-source carrier of the step; anchors the report. May be null.</p>
|
||||
</dd>
|
||||
<dt><code>IsRapid</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd><p>Whether the step was commanded as rapid traverse.</p>
|
||||
</dd>
|
||||
<dt><code>IsTouched</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd><p>Whether the step touched the workpiece.</p>
|
||||
</dd>
|
||||
<dt><code>IsSpindleStopped</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd><p>Whether the spindle was stopped on this step.</p>
|
||||
</dd>
|
||||
<dt><code>RemovedVolume_mm3</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
|
||||
<dd><p>Stock removed by this step in mm³ (0 when untouched or unknown).</p>
|
||||
</dd>
|
||||
<dt><code>CuttingDepth_mm</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
|
||||
<dd><p>Axial cutting depth of this step in mm (0 when untouched).</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h2 class="section" id="properties">Properties
|
||||
</h2>
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Sample_Carrier_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.Carrier*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Sample_Carrier" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.Carrier">
|
||||
Carrier
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>NC-source carrier of the step; anchors the report. May be null.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public ISentenceCarrier Carrier { get; init; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="Hi.NcParsers.ISentenceCarrier.html">ISentenceCarrier</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Sample_CuttingDepth_mm_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.CuttingDepth_mm*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Sample_CuttingDepth_mm" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.CuttingDepth_mm">
|
||||
CuttingDepth_mm
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Axial cutting depth of this step in mm (0 when untouched).</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public double CuttingDepth_mm { get; init; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Sample_IsRapid_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.IsRapid*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Sample_IsRapid" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.IsRapid">
|
||||
IsRapid
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Whether the step was commanded as rapid traverse.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public bool IsRapid { get; init; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Sample_IsSpindleStopped_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.IsSpindleStopped*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Sample_IsSpindleStopped" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.IsSpindleStopped">
|
||||
IsSpindleStopped
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Whether the spindle was stopped on this step.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public bool IsSpindleStopped { get; init; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Sample_IsTouched_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.IsTouched*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Sample_IsTouched" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.IsTouched">
|
||||
IsTouched
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Whether the step touched the workpiece.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public bool IsTouched { get; init; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Sample_LineKey_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.LineKey*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Sample_LineKey" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.LineKey">
|
||||
LineKey
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Fold key: the line number when known, else the sentence, else the step index.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public object LineKey { get; init; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Sample_LineNo_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.LineNo*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Sample_LineNo" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.LineNo">
|
||||
LineNo
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>NC line number, or null where the runner carries none (CSV / CL replay).</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public int? LineNo { get; init; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a>?</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Sample_RemovedVolume_mm3_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.RemovedVolume_mm3*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Sample_RemovedVolume_mm3" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.RemovedVolume_mm3">
|
||||
RemovedVolume_mm3
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Stock removed by this step in mm³ (0 when untouched or unknown).</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public double RemovedVolume_mm3 { get; init; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Sample_StepIndex_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.StepIndex*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Sample_StepIndex" data-uid="Hi.MachiningProcs.RapidCutMonitor.Sample.StepIndex">
|
||||
StepIndex
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Execution-order index of the step.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public int StepIndex { get; init; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</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>
|
||||
@@ -0,0 +1,420 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Class RapidCutMonitor | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class RapidCutMonitor | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="Reports a rapid traverse that removed stock: the steps of one NC line that were commanded as rapid traverse (G00, ) and touched the workpiece fold into one Play-RapidCut&ndash;Detected validation warning, anchored on the line's first touching step and carrying the line's total removed volume and its largest cutting depth. A rapid move through material breaks the tool or crashes the machine on a real run, yet with the spindle turning the engine treats it as ordinary cutting: the collision rule (Hi.Machining.MachiningEquipment.Detect) pairs flute and workpiece only while the spindle is stopped, so such a line used to pass with no message at all. One instance per . runs on the sequential post-physics stage of every built step (one thread, step order), closes the last line at the end of a play and drops a pending line on a session reset; both run on the shell thread after , so no lock is needed. Folding: consecutive rapid steps with the same (the NC line number, or the sentence itself where a runner has no line numbers) form one report; a feed step, a different line or the end of the play closes it. A line re-entered later (a subprogram loop) reports again, deliberately. The report is emitted only when the line's total removed volume reaches (default 0: any contact). Steps with the spindle stopped are skipped while collision detection is on — that rule owns them and raises Collision--Detected — and counted otherwise.">
|
||||
<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.MachiningProcs.RapidCutMonitor">
|
||||
|
||||
|
||||
|
||||
<h1 id="Hi_MachiningProcs_RapidCutMonitor" data-uid="Hi.MachiningProcs.RapidCutMonitor" class="text-break">
|
||||
Class RapidCutMonitor
|
||||
</h1>
|
||||
|
||||
<div class="facts text-secondary">
|
||||
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.MachiningProcs.html">MachiningProcs</a></dd></dl>
|
||||
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
|
||||
</div>
|
||||
|
||||
<div class="markdown summary"><p>Reports a rapid traverse that removed stock: the steps of one NC line
|
||||
that were commanded as rapid traverse (G00,
|
||||
<a class="xref" href="Hi.MachiningSteps.MachineMotionStep.html#Hi_MachiningSteps_MachineMotionStep_IsRapid">IsRapid</a>) and touched the workpiece fold
|
||||
into one <code>Play-RapidCut–Detected</code> validation warning, anchored on
|
||||
the line's first touching step and carrying the line's total removed
|
||||
volume and its largest cutting depth. A rapid move through material
|
||||
breaks the tool or crashes the machine on a real run, yet with the
|
||||
spindle turning the engine treats it as ordinary cutting: the collision
|
||||
rule (Hi.Machining.MachiningEquipment.Detect) pairs flute
|
||||
and workpiece only while the spindle is stopped, so such a line used to
|
||||
pass with no message at all.</p>
|
||||
<p>
|
||||
One instance per <a class="xref" href="Hi.MachiningProcs.MachiningActRunner.html">MachiningActRunner</a>. <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Observe_Hi_MachiningProcs_RapidCutMonitor_Sample__System_Double_System_Boolean_System_IProgress_Hi_MachiningProcs_StepDiagnostic__">Observe(in Sample, double, bool, IProgress<StepDiagnostic>)</a>
|
||||
runs on the sequential post-physics stage of every built step (one
|
||||
thread, step order), <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Flush_System_Double_System_IProgress_Hi_MachiningProcs_StepDiagnostic__">Flush(double, IProgress<StepDiagnostic>)</a> closes the last line at the end
|
||||
of a play and <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Reset">Reset()</a> drops a pending line on a session reset;
|
||||
both run on the shell thread after
|
||||
<a class="xref" href="Hi.MachiningProcs.MachiningActRunner.html#Hi_MachiningProcs_MachiningActRunner_WaitAll">WaitAll()</a>, so no lock is needed.
|
||||
</p>
|
||||
<p>
|
||||
Folding: consecutive rapid steps with the same <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.Sample.html#Hi_MachiningProcs_RapidCutMonitor_Sample_LineKey">LineKey</a>
|
||||
(the NC line number, or the sentence itself where a runner has no line
|
||||
numbers) form one report; a feed step, a different line or the end of
|
||||
the play closes it. A line re-entered later (a subprogram loop) reports
|
||||
again, deliberately. The report is emitted only when the line's total
|
||||
removed volume reaches
|
||||
<a class="xref" href="Hi.MachiningProcs.MachiningActRunnerConfig.html#Hi_MachiningProcs_MachiningActRunnerConfig_RapidCutVolumeThreshold_mm3">RapidCutVolumeThreshold_mm3</a>
|
||||
(default 0: any contact). Steps with the spindle stopped are skipped
|
||||
while collision detection is on — that rule owns them and raises
|
||||
<code>Collision--Detected</code> — and counted otherwise.
|
||||
</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public sealed class RapidCutMonitor</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">RapidCutMonitor</span></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.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 class="section" id="fields">Fields
|
||||
</h2>
|
||||
|
||||
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_MessageId" data-uid="Hi.MachiningProcs.RapidCutMonitor.MessageId">
|
||||
MessageId
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Id of the warning this monitor emits.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public const string MessageId = "Play-RapidCut--Detected"</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Field 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_MachiningProcs_RapidCutMonitor_Flush_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Flush*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Flush_System_Double_System_IProgress_Hi_MachiningProcs_StepDiagnostic__" data-uid="Hi.MachiningProcs.RapidCutMonitor.Flush(System.Double,System.IProgress{Hi.MachiningProcs.StepDiagnostic})">
|
||||
Flush(double, IProgress<StepDiagnostic>)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Closes the pending rapid line: reports it when its total removed volume
|
||||
reaches <code class="paramref">volumeThreshold_mm3</code>, then forgets it. Called
|
||||
by <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Observe_Hi_MachiningProcs_RapidCutMonitor_Sample__System_Double_System_Boolean_System_IProgress_Hi_MachiningProcs_StepDiagnostic__">Observe(in Sample, double, bool, IProgress<StepDiagnostic>)</a> at a line boundary and by the session at the
|
||||
end of a play, for the last line.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public void Flush(double volumeThreshold_mm3, IProgress<StepDiagnostic> sink)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>volumeThreshold_mm3</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
|
||||
<dd><p>Line-total removed volume below which the line is not reported.</p>
|
||||
</dd>
|
||||
<dt><code>sink</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a><<a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html">StepDiagnostic</a>></dt>
|
||||
<dd><p>Step-anchored sink for the report; no-op if null.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Observe_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Observe*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Observe_Hi_MachiningProcs_RapidCutMonitor_Sample__System_Double_System_Boolean_System_IProgress_Hi_MachiningProcs_StepDiagnostic__" data-uid="Hi.MachiningProcs.RapidCutMonitor.Observe(Hi.MachiningProcs.RapidCutMonitor.Sample@,System.Double,System.Boolean,System.IProgress{Hi.MachiningProcs.StepDiagnostic})">
|
||||
Observe(in Sample, double, bool, IProgress<StepDiagnostic>)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Feeds one built step, in step order. A feed step or a step of another
|
||||
line closes the pending rapid line (see <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Flush_System_Double_System_IProgress_Hi_MachiningProcs_StepDiagnostic__">Flush(double, IProgress<StepDiagnostic>)</a>); a rapid
|
||||
step that touched the stock opens or extends it.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public void Observe(in RapidCutMonitor.Sample sample, double volumeThreshold_mm3, bool collisionDetectionEnabled, IProgress<StepDiagnostic> sink)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>sample</code> <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html">RapidCutMonitor</a>.<a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.Sample.html">Sample</a></dt>
|
||||
<dd><p>The step, see <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_SampleOf_Hi_MachiningSteps_MachiningStep_">SampleOf(MachiningStep)</a>.</p>
|
||||
</dd>
|
||||
<dt><code>volumeThreshold_mm3</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
|
||||
<dd><p>Line-total removed volume below which the line is not reported.</p>
|
||||
</dd>
|
||||
<dt><code>collisionDetectionEnabled</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd><p>When true, steps with the spindle stopped are left to collision detection.</p>
|
||||
</dd>
|
||||
<dt><code>sink</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a><<a class="xref" href="Hi.MachiningProcs.StepDiagnostic.html">StepDiagnostic</a>></dt>
|
||||
<dd><p>Step-anchored sink for the report; no-op if null.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_Reset_" data-uid="Hi.MachiningProcs.RapidCutMonitor.Reset*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_Reset" data-uid="Hi.MachiningProcs.RapidCutMonitor.Reset">
|
||||
Reset()
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Forgets a pending line without reporting it (session reset).</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public void Reset()</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningProcs_RapidCutMonitor_SampleOf_" data-uid="Hi.MachiningProcs.RapidCutMonitor.SampleOf*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningProcs_RapidCutMonitor_SampleOf_Hi_MachiningSteps_MachiningStep_" data-uid="Hi.MachiningProcs.RapidCutMonitor.SampleOf(Hi.MachiningSteps.MachiningStep)">
|
||||
SampleOf(MachiningStep)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Builds the monitor's view of a built step. The removed volume is the
|
||||
step's material removal rate (<a class="xref" href="Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_Mrr_mm3ds">Mrr_mm3ds</a>,
|
||||
the swept engagement cross-section times the tip feedrate) over the
|
||||
step duration — a geometry-only quantity, so the report needs no
|
||||
physics; a NaN rate (undefined tip feedrate) counts as 0 but the
|
||||
contact still counts.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public static RapidCutMonitor.Sample SampleOf(MachiningStep step)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>step</code> <a class="xref" href="Hi.MachiningSteps.MachiningStep.html">MachiningStep</a></dt>
|
||||
<dd><p>A built step.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html">RapidCutMonitor</a>.<a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.Sample.html">Sample</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>
|
||||
@@ -210,6 +210,41 @@ rather than queued; controllers surface this as HTTP 409 Conflict.</p>
|
||||
<dt><a class="xref" href="Hi.MachiningProcs.ProxyProjectService.html">ProxyProjectService</a></dt>
|
||||
<dd><p>Delegate (User-based) Project Service.
|
||||
Apply relative file path from <a class="xref" href="Hi.MachiningProcs.ProxyProjectService.html#Hi_MachiningProcs_ProxyProjectService_AdminDirectory">AdminDirectory</a>.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="jumplist">
|
||||
<dt><a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html">RapidCutMonitor</a></dt>
|
||||
<dd><p>Reports a rapid traverse that removed stock: the steps of one NC line
|
||||
that were commanded as rapid traverse (G00,
|
||||
<a class="xref" href="Hi.MachiningSteps.MachineMotionStep.html#Hi_MachiningSteps_MachineMotionStep_IsRapid">IsRapid</a>) and touched the workpiece fold
|
||||
into one <code>Play-RapidCut–Detected</code> validation warning, anchored on
|
||||
the line's first touching step and carrying the line's total removed
|
||||
volume and its largest cutting depth. A rapid move through material
|
||||
breaks the tool or crashes the machine on a real run, yet with the
|
||||
spindle turning the engine treats it as ordinary cutting: the collision
|
||||
rule (Hi.Machining.MachiningEquipment.Detect) pairs flute
|
||||
and workpiece only while the spindle is stopped, so such a line used to
|
||||
pass with no message at all.</p>
|
||||
<p>
|
||||
One instance per <a class="xref" href="Hi.MachiningProcs.MachiningActRunner.html">MachiningActRunner</a>. <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Observe_Hi_MachiningProcs_RapidCutMonitor_Sample__System_Double_System_Boolean_System_IProgress_Hi_MachiningProcs_StepDiagnostic__">Observe(in Sample, double, bool, IProgress<StepDiagnostic>)</a>
|
||||
runs on the sequential post-physics stage of every built step (one
|
||||
thread, step order), <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Flush_System_Double_System_IProgress_Hi_MachiningProcs_StepDiagnostic__">Flush(double, IProgress<StepDiagnostic>)</a> closes the last line at the end
|
||||
of a play and <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html#Hi_MachiningProcs_RapidCutMonitor_Reset">Reset()</a> drops a pending line on a session reset;
|
||||
both run on the shell thread after
|
||||
<a class="xref" href="Hi.MachiningProcs.MachiningActRunner.html#Hi_MachiningProcs_MachiningActRunner_WaitAll">WaitAll()</a>, so no lock is needed.
|
||||
</p>
|
||||
<p>
|
||||
Folding: consecutive rapid steps with the same <a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.Sample.html#Hi_MachiningProcs_RapidCutMonitor_Sample_LineKey">LineKey</a>
|
||||
(the NC line number, or the sentence itself where a runner has no line
|
||||
numbers) form one report; a feed step, a different line or the end of
|
||||
the play closes it. A line re-entered later (a subprogram loop) reports
|
||||
again, deliberately. The report is emitted only when the line's total
|
||||
removed volume reaches
|
||||
<a class="xref" href="Hi.MachiningProcs.MachiningActRunnerConfig.html#Hi_MachiningProcs_MachiningActRunnerConfig_RapidCutVolumeThreshold_mm3">RapidCutVolumeThreshold_mm3</a>
|
||||
(default 0: any contact). Steps with the spindle stopped are skipped
|
||||
while collision detection is on — that rule owns them and raises
|
||||
<code>Collision--Detected</code> — and counted otherwise.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="jumplist">
|
||||
@@ -339,6 +374,16 @@ steps writes to <i>different</i> scopes. Each parallel step task therefore holds
|
||||
instance — never a shared mutable "current step" on <a class="xref" href="Hi.MachiningProcs.StepDiagnosticProgress.html">StepDiagnosticProgress</a>, which would
|
||||
race.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3 id="structs">
|
||||
Structs
|
||||
</h3>
|
||||
<dl class="jumplist">
|
||||
<dt><a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.Sample.html">RapidCutMonitor.Sample</a></dt>
|
||||
<dd><p>One built step as the monitor sees it — the few facts the fold needs,
|
||||
detached from <a class="xref" href="Hi.MachiningSteps.MachiningStep.html">MachiningStep</a> so the fold is testable on
|
||||
synthetic steps.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<h3 id="interfaces">
|
||||
|
||||
@@ -919,6 +919,44 @@ per revolution.</p>
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningSteps_MachineMotionStep_IsRapid_" data-uid="Hi.MachiningSteps.MachineMotionStep.IsRapid*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningSteps_MachineMotionStep_IsRapid" data-uid="Hi.MachiningSteps.MachineMotionStep.IsRapid">
|
||||
IsRapid
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Whether the controller commanded this step as a rapid traverse (G00,
|
||||
<a class="xref" href="Hi.Numerical.Acts.ActRapid.html">ActRapid</a>): <a class="xref" href="Hi.MachiningSteps.MachineMotionStep.html#Hi_MachiningSteps_MachineMotionStep_CommandedClFeedrate_mmds">CommandedClFeedrate_mmds</a>
|
||||
is then the rapid rate, not a programmed feed. Assigned by the step
|
||||
builder from <a class="xref" href="Hi.Numerical.Acts.StateActRunner.html#Hi_Numerical_Acts_StateActRunner_IsRapid">IsRapid</a>;
|
||||
false for feed motion and for steps built outside an act runner. A
|
||||
rapid step that removes stock is what
|
||||
<a class="xref" href="Hi.MachiningProcs.RapidCutMonitor.html">RapidCutMonitor</a> reports.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public bool IsRapid { get; set; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_MachiningSteps_MachineMotionStep_McValues_" data-uid="Hi.MachiningSteps.MachineMotionStep.McValues*"></a>
|
||||
|
||||
<h3 id="Hi_MachiningSteps_MachineMotionStep_McValues" data-uid="Hi.MachiningSteps.MachineMotionStep.McValues">
|
||||
|
||||
@@ -191,6 +191,44 @@ begin reports that gap once through these helpers.</p>
|
||||
|
||||
|
||||
|
||||
|
||||
<h3 id="Hi_NcParsers_Dependencys_StrokeLimitUtil_Tolerance" data-uid="Hi.NcParsers.Dependencys.StrokeLimitUtil.Tolerance">
|
||||
Tolerance
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Slack, in mm or degrees, past which a position counts as over a
|
||||
stroke limit. A machine coordinate that arrives through a work
|
||||
offset, a tilt and a kinematic solve carries rounding noise of the
|
||||
order of 1e-12; a program that parks an axis exactly on its limit
|
||||
(CHEM20180926: <code>G28 Z0</code> on a machine whose Z travel ends at 0)
|
||||
used to be reported as “0.0000 > 0.0000” on every such block and
|
||||
step. A tenth of a micrometre / microdegree is far below any
|
||||
control's resolution and above any arithmetic noise.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public const double Tolerance = 0.0001</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Field Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h2 class="section" id="methods">Methods
|
||||
</h2>
|
||||
|
||||
@@ -292,6 +330,101 @@ continuously legitimately has none and cannot be given one.</p>
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_Dependencys_StrokeLimitUtil_IsWithinRotaryTravel_" data-uid="Hi.NcParsers.Dependencys.StrokeLimitUtil.IsWithinRotaryTravel*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_Dependencys_StrokeLimitUtil_IsWithinRotaryTravel_System_Double_System_Nullable_System_Double__System_Nullable_System_Double__" data-uid="Hi.NcParsers.Dependencys.StrokeLimitUtil.IsWithinRotaryTravel(System.Double,System.Nullable{System.Double},System.Nullable{System.Double})">
|
||||
IsWithinRotaryTravel(double, double?, double?)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Whether a rotary angle (degrees) lies within a travel given by its
|
||||
two ends, either of which may be absent. A span of a full turn or
|
||||
more admits every angle; otherwise the angle is wrapped into the
|
||||
turn starting at the negative end before the test.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public static bool IsWithinRotaryTravel(double angle_deg, double? negative_deg, double? positive_deg)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>angle_deg</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a></dt>
|
||||
<dd><p>The angle to test.</p>
|
||||
</dd>
|
||||
<dt><code>negative_deg</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a>?</dt>
|
||||
<dd><p>The negative end, or null when unbounded.</p>
|
||||
</dd>
|
||||
<dt><code>positive_deg</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a>?</dt>
|
||||
<dd><p>The positive end, or null when unbounded.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_Dependencys_StrokeLimitUtil_RotaryAdmissibility_" data-uid="Hi.NcParsers.Dependencys.StrokeLimitUtil.RotaryAdmissibility*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_Dependencys_StrokeLimitUtil_RotaryAdmissibility_System_Collections_Generic_IEnumerable_Hi_NcParsers_Dependencys_INcDependency__" data-uid="Hi.NcParsers.Dependencys.StrokeLimitUtil.RotaryAdmissibility(System.Collections.Generic.IEnumerable{Hi.NcParsers.Dependencys.INcDependency})">
|
||||
RotaryAdmissibility(IEnumerable<INcDependency>)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>The rotary-travel admissibility test for an inverse-kinematics solve
|
||||
(<a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Vec3d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__">OrientationToMcAbc(Vec3d, Func<Vec3d, bool>, out Vec3d)</a>):
|
||||
accepts a machine ABC (radians) whose configured A/B/C limits on the
|
||||
list's <a class="xref" href="Hi.NcParsers.Dependencys.IStrokeLimitConfig.html">IStrokeLimitConfig</a> (degrees) are all met, so a
|
||||
tilt solve prefers the branch the machine can reach. Null — admit
|
||||
everything — when the list carries no stroke config or no rotary
|
||||
limit at all. An axis whose two limits span a full turn or more is
|
||||
always admissible; a narrower span is tested on the angle wrapped
|
||||
into the turn that starts at the negative limit (the solver reports
|
||||
atan2 angles, the limits are wherever the builder put them); a NaN
|
||||
component (an axis the chain does not have) is not tested.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public static Func<Vec3d, bool> RotaryAdmissibility(IEnumerable<INcDependency> dependencyList)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>dependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1">IEnumerable</a><<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>></dt>
|
||||
<dd><p>The runner's effective dependency list.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a><<a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
+112
@@ -658,6 +658,59 @@ the solution only fit the orientation part of the <code class="paramref">tiltMat
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_OrientationToMcAbc_" data-uid="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.OrientationToMcAbc*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_OrientationToMcAbc_Hi_Geom_Mat4d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__" data-uid="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.OrientationToMcAbc(Hi.Geom.Mat4d,System.Func{Hi.Geom.Vec3d,System.Boolean},Hi.Geom.Vec3d@)">
|
||||
OrientationToMcAbc(Mat4d, Func<Vec3d, bool>, out Vec3d)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p><a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Mat4d_Hi_Geom_Vec3d__">OrientationToMcAbc(Mat4d, out Vec3d)</a> restricted to the
|
||||
rotary positions <code class="paramref">isMcAbcAdmissible</code> accepts (the
|
||||
machine's rotary travel, typically). A full orientation fixes the
|
||||
rotary positions up to axis periodicity, so a solution the predicate
|
||||
refuses is a posture this machine cannot take: the conversion then
|
||||
fails (false) and leaves the solver state as it was, so that the
|
||||
caller can fall back to <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Vec3d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__">OrientationToMcAbc(Vec3d, Func<Vec3d, bool>, out Vec3d)</a>,
|
||||
where the free rotation about the tool axis opens the other branch.
|
||||
A null predicate admits everything.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public bool OrientationToMcAbc(Mat4d tiltMat, Func<Vec3d, bool> isMcAbcAdmissible, out Vec3d mcAbc_rad)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>tiltMat</code> <a class="xref" href="Hi.Geom.Mat4d.html">Mat4d</a></dt>
|
||||
<dd><p>The tilt matrix to convert.</p>
|
||||
</dd>
|
||||
<dt><code>isMcAbcAdmissible</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a><<a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>></dt>
|
||||
<dd><p>Accepts a machine ABC (radians) or refuses it; null admits everything.</p>
|
||||
</dd>
|
||||
<dt><code>mcAbc_rad</code> <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
|
||||
<dd><p>Output machine ABC coordinates in radians.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd><p>Whether an admissible conversion was found.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_OrientationToMcAbc_" data-uid="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.OrientationToMcAbc*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_OrientationToMcAbc_Hi_Geom_Vec3d_Hi_Geom_Vec3d__" data-uid="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.OrientationToMcAbc(Hi.Geom.Vec3d,Hi.Geom.Vec3d@)">
|
||||
@@ -708,6 +761,65 @@ likely to converge for tilt configurations such as <code>G68.2 I180 J90 K0</code
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_OrientationToMcAbc_" data-uid="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.OrientationToMcAbc*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_OrientationToMcAbc_Hi_Geom_Vec3d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__" data-uid="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.OrientationToMcAbc(Hi.Geom.Vec3d,System.Func{Hi.Geom.Vec3d,System.Boolean},Hi.Geom.Vec3d@)">
|
||||
OrientationToMcAbc(Vec3d, Func<Vec3d, bool>, out Vec3d)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p><a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Vec3d_Hi_Geom_Vec3d__">OrientationToMcAbc(Vec3d, out Vec3d)</a> preferring the
|
||||
solution branch <code class="paramref">isMcAbcAdmissible</code> accepts. The
|
||||
axial-only problem has two branches on a two-rotary-axis machine
|
||||
(on a table-table A/C: (A, C) and (−A, C+180°)); the plain overload
|
||||
returns the branch nearest the solver's seed, which from the rotary
|
||||
pole (A0 C0) is the one the tilt's azimuth happens to favour — half
|
||||
the time the branch a cradle table with an asymmetric tilt travel
|
||||
cannot reach (CHEM20180926 N100: <code>G68.2 I210 J-90</code> + <code>G53.1</code>
|
||||
solved to A=+90° on a −120°…+30° A axis). When the nearest branch is
|
||||
refused, an implementation with a real solver searches the other
|
||||
branches and returns the admissible one nearest the seed; when none
|
||||
is admissible it returns the refused solution and true, and the
|
||||
stroke-limit check downstream reports it. A null predicate makes this
|
||||
the plain overload. The default implementation is the plain solve —
|
||||
the predicate is advisory for an implementation without a solver.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public bool OrientationToMcAbc(Vec3d toolAxialNormal, Func<Vec3d, bool> isMcAbcAdmissible, out Vec3d mcAbc_rad)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>toolAxialNormal</code> <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
|
||||
<dd><p>Target tool axial direction in table coordinates.</p>
|
||||
</dd>
|
||||
<dt><code>isMcAbcAdmissible</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a><<a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>></dt>
|
||||
<dd><p>Accepts a machine ABC (radians) or refuses it; null admits everything.</p>
|
||||
</dd>
|
||||
<dt><code>mcAbc_rad</code> <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
|
||||
<dd><p>Output machine ABC coordinates in radians.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd><p>Whether the conversion was successful (admissible or not).</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_PnToMc_" data-uid="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.PnToMc*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_Dependencys_SystemWired_NcKinematicsDependency_PnToMc_Hi_Geom_DVec3d_Hi_Geom_DVec3d__" data-uid="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.PnToMc(Hi.Geom.DVec3d,Hi.Geom.DVec3d@)">
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Interface IPositioningDef | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental). Written by , consumed by , canned cycle syntaxes, and . Property names are used as JSON keys via nameof. is the brand-specific G-code (Fanuc/ISO G90/G91); is the conventional, brand-neutral name ( / ).">
|
||||
<meta name="description" content="Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental). Written by , consumed by (linear words), (rotary words: G91 accumulates anchor + delta) and (the wrap pass keeps the axes the record lists literal), canned cycle syntaxes, and . A per-word entry beats this modal state for its word. The section stays G91 after the consumers have rewritten the block's words to absolutes (the next block's lookback needs it); the words that were converted are listed in the one-shot record. Property names are used as JSON keys via nameof. is the brand-specific G-code (Fanuc/ISO G90/G91); is the conventional, brand-neutral name ( / ).">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -99,9 +99,19 @@ Interface IPositioningDef
|
||||
|
||||
<div class="markdown summary"><p>Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental).
|
||||
Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html">PositioningSyntax</a>, consumed by
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a>, canned cycle
|
||||
syntaxes, and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a>.
|
||||
Property names are used as JSON keys via <code>nameof</code>.</p>
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> (linear words),
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> (rotary words: G91
|
||||
accumulates anchor + delta) and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> (the wrap pass
|
||||
keeps the axes the <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record lists
|
||||
literal), canned cycle syntaxes, and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a>. A per-word
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.PositioningOverride.html">PositioningOverride</a> entry beats this modal state for
|
||||
its word. The section stays <code>G91</code> after the consumers have
|
||||
rewritten the block's words to absolutes (the next block's lookback
|
||||
needs it); the words that were converted are listed in the one-shot
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record. Property names are used as
|
||||
JSON keys via <code>nameof</code>.</p>
|
||||
<p>
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html#Hi_NcParsers_Keywords_IPositioningDef_Term">Term</a> is the brand-specific G-code (Fanuc/ISO G90/G91);
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html#Hi_NcParsers_Keywords_IPositioningDef_Mode">Mode</a> is the conventional, brand-neutral name
|
||||
|
||||
@@ -0,0 +1,226 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Class IncrementalWords | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class IncrementalWords | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="One-shot block-root record of the axis words this block programmed as increments — under modal G91, or through a per-word entry (Siemens IC(), klartext IX+/IC+) — valued with the programmed delta and shaped like the Parsing tree the word came from: a root word is a root key ({ &ldquo;X&rdquo;: 10 }, { &ldquo;C&rdquo;: 20 }), a word inside a nested record sits under that record's key ({ &ldquo;G28&rdquo;: { &ldquo;X&rdquo;: 0, &ldquo;C&rdquo;: 10 } }, { &ldquo;CC&rdquo;: { &ldquo;X&rdquo;: 0, &ldquo;Y&rdquo;: 11 } }). Why it exists: the resolve is in place. rewrites the word inside Parsing to its absolute value and writes the accumulated angle into MachineCoordinateState, while the modal section must keep saying G91 for the next block's lookback. From that point on { "Positioning": G91, "Parsing": { "G28": { "X": 100 } } } is byte-identical to a program that wrote G90 G28 X100., and once the consumer has taken the word out of Parsing the programmed text is gone from the JSON altogether. This section is the trace that the word was an increment, and of what it was. Written by (the words at its working paths — root, G28, the klartext CC record) and (root rotary words). Read by as an idempotency guard — a word already listed at its path is never converted twice, whatever the syntax list looks like (a project file whose serialized list carries two instances, a re-run over a frozen piece) — and by , where a listed rotary axis is a signed traverse that passes the shortest-path wrap literally, whichever spelling made it incremental. Not listed in any key set — it never carries to later blocks. Not recorded: coded-position words (Siemens CIC() counts indexing positions, not an angle — its trace is the rewritten entry), and the words the two consumers ahead of the shared resolve take for themselves ('s cycle words, 's machine-frame words): both consume the word into their own section, so no absolute-looking copy is left in Parsing to be mistaken for a programmed absolute.">
|
||||
<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.Keywords.IncrementalWords">
|
||||
|
||||
|
||||
|
||||
<h1 id="Hi_NcParsers_Keywords_IncrementalWords" data-uid="Hi.NcParsers.Keywords.IncrementalWords" class="text-break">
|
||||
Class IncrementalWords
|
||||
</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.Keywords.html">Keywords</a></dd></dl>
|
||||
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
|
||||
</div>
|
||||
|
||||
<div class="markdown summary"><p>One-shot block-root record of the axis words this block programmed as
|
||||
<b>increments</b> — under modal <code>G91</code>, or through a per-word
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Incremental">Incremental</a> entry (Siemens <code>IC()</code>,
|
||||
klartext <code>IX+</code>/<code>IC+</code>) — valued with the programmed delta
|
||||
and shaped like the <code>Parsing</code> tree the word came from: a root
|
||||
word is a root key (<code>{ “X”: 10 }</code>, <code>{ “C”: 20 }</code>), a word
|
||||
inside a nested record sits under that record's key
|
||||
(<code>{ “G28”: { “X”: 0, “C”: 10 } }</code>,
|
||||
<code>{ “CC”: { “X”: 0, “Y”: 11 } }</code>).</p>
|
||||
<p>
|
||||
Why it exists: the resolve is in place.
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> rewrites the word
|
||||
inside <code>Parsing</code> to its absolute value and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> writes the accumulated angle
|
||||
into <code>MachineCoordinateState</code>, while the modal
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a> section must keep saying <code>G91</code> for the
|
||||
next block's lookback. From that point on
|
||||
<code>{ "Positioning": G91, "Parsing": { "G28": { "X": 100 } } }</code> is
|
||||
byte-identical to a program that wrote <code>G90 G28 X100.</code>, and once
|
||||
the consumer has taken the word out of <code>Parsing</code> the programmed
|
||||
text is gone from the JSON altogether. This section is the trace that
|
||||
the word was an increment, and of what it was.
|
||||
</p>
|
||||
<p>
|
||||
Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> (the
|
||||
words at its working paths — root, <code>G28</code>, the klartext
|
||||
<code>CC</code> record) and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> (root
|
||||
rotary words). Read by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a>
|
||||
as an idempotency guard — a word already listed at its path is never
|
||||
converted twice, whatever the syntax list looks like (a project file
|
||||
whose serialized list carries two instances, a re-run over a frozen
|
||||
piece) — and by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a>,
|
||||
where a listed rotary axis is a signed traverse that passes the
|
||||
shortest-path wrap literally, whichever spelling made it incremental.
|
||||
Not listed in any <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a> key
|
||||
set — it never carries to later blocks.
|
||||
</p>
|
||||
<p>
|
||||
Not recorded: coded-position words (Siemens <code>CIC()</code> counts
|
||||
indexing positions, not an angle — its trace is the rewritten
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.PositioningOverride.html">PositioningOverride</a> entry), and the words the two
|
||||
consumers ahead of the shared resolve take for themselves
|
||||
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCannedCycleSyntax.html">HeidenhainCannedCycleSyntax</a>'s
|
||||
cycle words, <a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a>'s
|
||||
machine-frame words): both consume the word into their own section, so
|
||||
no absolute-looking copy is left in <code>Parsing</code> to be mistaken for
|
||||
a programmed absolute.
|
||||
</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public static class IncrementalWords</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">IncrementalWords</span></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>
|
||||
|
||||
|
||||
|
||||
<h2 id="Hi_NcParsers_Keywords_IncrementalWords_examples">Examples</h2>
|
||||
<pre><code class="lang-csharp">"IncrementalWords": { "X": 10, "G28": { "C": 10 } }</code></pre>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</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>
|
||||
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class PositioningOverride | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="Per-word positioning override — a non-modal block-root section keyed by word name (axis words and the I/J/K interpolation parameters) whose values are / / / / , plus the coded-position (indexing axis) family / / / / . Overrides the modal G90/G91 state (and, for I/J/K, the default incremental center reading) for the listed words on this block only. Written by when a word carries one of the Siemens per-word coordinate function wrappers AC() / IC() / DC() / ACP() / ACN() or their coded-position counterparts CAC() / CIC() / CDC() / CACP() / CACN(), and by the Heidenhain L / C / CC / CYCL CALL POS parsers (through ) for the klartext I-prefixed incremental words IX+20 / IC+90 — always there, keyed by the plain axis letter. Not written for the CYCL DEF 7 datum-shift words: those are increments of the active shift, not of the tool position, and stay inside the cycle's own record. Consumed by (linear axes) and (rotary axes) — both treat every non-Incremental value as an absolute write, and both resolve a coded entry's indexing position number through and rewrite the entry to its plain counterpart in place — by (the directional window for / and the non-modular-axis boundary warning; it never sees a coded value), and by (absolute I/J/K center components) — and, ahead of the shared resolve, by two consumers that take the raw word before it can see it: (CYCL CALL POS words and the M99/M89 root words, resolved against the last programmed position on the spot) and (a distance in the machine frame); words without an entry keep the default behavior unchanged. The section is not listed in any ModalCarry key set — it never carries to later blocks.">
|
||||
<meta name="description" content="Per-word positioning override — a non-modal block-root section keyed by word name (axis words and the I/J/K interpolation parameters) whose values are / / / / , plus the coded-position (indexing axis) family / / / / . Overrides the modal G90/G91 state (and, for I/J/K, the default incremental center reading) for the listed words on this block only. Written by when a word carries one of the Siemens per-word coordinate function wrappers AC() / IC() / DC() / ACP() / ACN() or their coded-position counterparts CAC() / CIC() / CDC() / CACP() / CACN(), and by the Heidenhain L / C / CC / CYCL CALL POS parsers (through ) for the klartext I-prefixed incremental words IX+20 / IC+90 — always there, keyed by the plain axis letter. Not written for the CYCL DEF 7 datum-shift words: those are increments of the active shift, not of the tool position, and stay inside the cycle's own record. Consumed by (linear axes) and (rotary axes) — both treat every non-Incremental value as an absolute write, both follow the modal state for a word that has no entry, and both resolve a coded entry's indexing position number through and rewrite the entry to its plain counterpart in place — by (the directional window for / and the non-modular-axis boundary warning; it never sees a coded value, and it does not read an entry — the literal pass-through follows the record the rotary writer leaves), and by (absolute I/J/K center components) — and, ahead of the shared resolve, by two consumers that take the raw word before it can see it: (CYCL CALL POS words and the M99/M89 root words, resolved against the last programmed position on the spot) and (a distance in the machine frame); words without an entry keep the default behavior unchanged. The section is not listed in any ModalCarry key set — it never carries to later blocks. It describes the programmed spelling; what the write stage actually converted, with the programmed delta, is the record.">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -129,14 +129,19 @@ the tool position, and stay inside the cycle's own record.
|
||||
Consumed by
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> (linear axes) and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> (rotary axes) — both treat
|
||||
every non-Incremental value as an absolute write, and both resolve a
|
||||
every non-Incremental value as an absolute write, both follow the
|
||||
modal <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a> state for a word that has no entry,
|
||||
and both resolve a
|
||||
coded entry's indexing position number through
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CodedPositionUtil.html">CodedPositionUtil</a> and rewrite the entry to
|
||||
its plain counterpart in place — by
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> (the directional
|
||||
window for <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> and the non-modular-axis
|
||||
boundary warning; it never sees a coded value), and by
|
||||
boundary warning; it never sees a coded value, and it does not read
|
||||
an <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Incremental">Incremental</a> entry — the literal
|
||||
pass-through follows the <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record the
|
||||
rotary writer leaves), and by
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCircularMotionSyntax.html">SiemensCircularMotionSyntax</a>
|
||||
(absolute I/J/K center components) — and, ahead of the shared
|
||||
resolve, by two consumers that take the raw word before it can see
|
||||
@@ -146,7 +151,9 @@ the last programmed position on the spot) and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a> (a distance in
|
||||
the machine frame); words without an entry keep the default behavior
|
||||
unchanged. The section is not listed in any ModalCarry key set — it
|
||||
never carries to later blocks.
|
||||
never carries to later blocks. It describes the <i>programmed</i>
|
||||
spelling; what the write stage actually converted, with the
|
||||
programmed delta, is the <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record.
|
||||
</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class RotaryWords | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="One-shot block-root record of the rotary axis words the block itself commanded — keyed by axis name (A/B/C), valued with the word as programmed: degrees for a plain word, the signed delta for a per-word incremental word (Siemens IC(), klartext IC+), the indexing position number for a coded-position word (CAC()/CIC()/…). The resolved absolute angle lives in ; this section only says which rotary axes this block spoke. Written by when it consumes A/B/C from Parsing into MachineCoordinateState — and only for axes the declares rotary. After the PostLogic carry MachineCoordinateState is a modal record (key presence never means "commanded"), so consumers that must know whether this block carried a rotary word read this section instead: (a rotary-only block under an active canned cycle is a modal repeat — Fanuc's any-axis-word rule, HardNc parity: the table indexes, then the cycle drills again) and (the cycle's pre-positioning item carries the block's MC A/B/C so the physical rotary state matches the root record instead of lagging one block behind). Not listed in any key set — it never carries to later blocks.">
|
||||
<meta name="description" content="One-shot block-root record of the rotary axis words the block itself commanded — keyed by axis name (A/B/C), valued with the word as programmed: degrees for a plain word, the signed delta for a per-word incremental word (Siemens IC(), klartext IC+), the indexing position number for a coded-position word (CAC()/CIC()/…). The resolved absolute angle lives in ; this section only says which rotary axes this block spoke. Written by when it consumes A/B/C from Parsing into MachineCoordinateState — and only for axes the declares rotary. After the PostLogic carry MachineCoordinateState is a modal record (key presence never means "commanded"), so consumers that must know whether this block carried a rotary word read this section instead: (a rotary-only block under an active canned cycle is a modal repeat — Fanuc's any-axis-word rule, HardNc parity: the table indexes, then the cycle drills again) and (the cycle's pre-positioning item carries the block's MC A/B/C so the physical rotary state matches the root record instead of lagging one block behind) and (the tilted-feature-frame re-anchor on a rotary-word block). Not listed in any key set — it never carries to later blocks. This section says which rotary words the block spoke, not how: an absolute C40. and an incremental C40. both record 40. Which of them were increments — and so which MC angles are accumulations rather than programmed absolutes — is the sibling record, the one reads for its literal pass-through.">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -120,10 +120,20 @@ drills again) and
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d)</a>
|
||||
(the cycle's pre-positioning item carries the block's MC A/B/C so the
|
||||
physical rotary state matches the root record instead of lagging one
|
||||
block behind). Not listed in any
|
||||
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a> key set — it never
|
||||
block behind) and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html">PivotTransformUtil</a> (the
|
||||
tilted-feature-frame re-anchor on a rotary-word block). Not listed in
|
||||
any <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a> key set — it never
|
||||
carries to later blocks.
|
||||
</p>
|
||||
<p>
|
||||
This section says <i>which</i> rotary words the block spoke, not how:
|
||||
an absolute <code>C40.</code> and an incremental <code>C40.</code> both record 40.
|
||||
Which of them were increments — and so which MC angles are
|
||||
accumulations rather than programmed absolutes — is the sibling
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record, the one
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> reads for its
|
||||
literal pass-through.
|
||||
</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
|
||||
|
||||
@@ -358,6 +358,58 @@ downstream blocks unchanged).
|
||||
<dl class="jumplist">
|
||||
<dt><a class="xref" href="Hi.NcParsers.Keywords.Feedrate.html">Feedrate</a></dt>
|
||||
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IFeedrateDef.html">IFeedrateDef</a>.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="jumplist">
|
||||
<dt><a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a></dt>
|
||||
<dd><p>One-shot block-root record of the axis words this block programmed as
|
||||
<b>increments</b> — under modal <code>G91</code>, or through a per-word
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Incremental">Incremental</a> entry (Siemens <code>IC()</code>,
|
||||
klartext <code>IX+</code>/<code>IC+</code>) — valued with the programmed delta
|
||||
and shaped like the <code>Parsing</code> tree the word came from: a root
|
||||
word is a root key (<code>{ “X”: 10 }</code>, <code>{ “C”: 20 }</code>), a word
|
||||
inside a nested record sits under that record's key
|
||||
(<code>{ “G28”: { “X”: 0, “C”: 10 } }</code>,
|
||||
<code>{ “CC”: { “X”: 0, “Y”: 11 } }</code>).</p>
|
||||
<p>
|
||||
Why it exists: the resolve is in place.
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> rewrites the word
|
||||
inside <code>Parsing</code> to its absolute value and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> writes the accumulated angle
|
||||
into <code>MachineCoordinateState</code>, while the modal
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a> section must keep saying <code>G91</code> for the
|
||||
next block's lookback. From that point on
|
||||
<code>{ "Positioning": G91, "Parsing": { "G28": { "X": 100 } } }</code> is
|
||||
byte-identical to a program that wrote <code>G90 G28 X100.</code>, and once
|
||||
the consumer has taken the word out of <code>Parsing</code> the programmed
|
||||
text is gone from the JSON altogether. This section is the trace that
|
||||
the word was an increment, and of what it was.
|
||||
</p>
|
||||
<p>
|
||||
Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> (the
|
||||
words at its working paths — root, <code>G28</code>, the klartext
|
||||
<code>CC</code> record) and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> (root
|
||||
rotary words). Read by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a>
|
||||
as an idempotency guard — a word already listed at its path is never
|
||||
converted twice, whatever the syntax list looks like (a project file
|
||||
whose serialized list carries two instances, a re-run over a frozen
|
||||
piece) — and by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a>,
|
||||
where a listed rotary axis is a signed traverse that passes the
|
||||
shortest-path wrap literally, whichever spelling made it incremental.
|
||||
Not listed in any <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a> key
|
||||
set — it never carries to later blocks.
|
||||
</p>
|
||||
<p>
|
||||
Not recorded: coded-position words (Siemens <code>CIC()</code> counts
|
||||
indexing positions, not an angle — its trace is the rewritten
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.PositioningOverride.html">PositioningOverride</a> entry), and the words the two
|
||||
consumers ahead of the shared resolve take for themselves
|
||||
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCannedCycleSyntax.html">HeidenhainCannedCycleSyntax</a>'s
|
||||
cycle words, <a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a>'s
|
||||
machine-frame words): both consume the word into their own section, so
|
||||
no absolute-looking copy is left in <code>Parsing</code> to be mistaken for
|
||||
a programmed absolute.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="jumplist">
|
||||
@@ -484,14 +536,19 @@ the tool position, and stay inside the cycle's own record.
|
||||
Consumed by
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> (linear axes) and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> (rotary axes) — both treat
|
||||
every non-Incremental value as an absolute write, and both resolve a
|
||||
every non-Incremental value as an absolute write, both follow the
|
||||
modal <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a> state for a word that has no entry,
|
||||
and both resolve a
|
||||
coded entry's indexing position number through
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CodedPositionUtil.html">CodedPositionUtil</a> and rewrite the entry to
|
||||
its plain counterpart in place — by
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> (the directional
|
||||
window for <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> and the non-modular-axis
|
||||
boundary warning; it never sees a coded value), and by
|
||||
boundary warning; it never sees a coded value, and it does not read
|
||||
an <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Incremental">Incremental</a> entry — the literal
|
||||
pass-through follows the <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record the
|
||||
rotary writer leaves), and by
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCircularMotionSyntax.html">SiemensCircularMotionSyntax</a>
|
||||
(absolute I/J/K center components) — and, ahead of the shared
|
||||
resolve, by two consumers that take the raw word before it can see
|
||||
@@ -501,7 +558,9 @@ the last programmed position on the spot) and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a> (a distance in
|
||||
the machine frame); words without an entry keep the default behavior
|
||||
unchanged. The section is not listed in any ModalCarry key set — it
|
||||
never carries to later blocks.
|
||||
never carries to later blocks. It describes the <i>programmed</i>
|
||||
spelling; what the write stage actually converted, with the
|
||||
programmed delta, is the <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -545,10 +604,20 @@ drills again) and
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d)</a>
|
||||
(the cycle's pre-positioning item carries the block's MC A/B/C so the
|
||||
physical rotary state matches the root record instead of lagging one
|
||||
block behind). Not listed in any
|
||||
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a> key set — it never
|
||||
block behind) and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html">PivotTransformUtil</a> (the
|
||||
tilted-feature-frame re-anchor on a rotary-word block). Not listed in
|
||||
any <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a> key set — it never
|
||||
carries to later blocks.
|
||||
</p>
|
||||
<p>
|
||||
This section says <i>which</i> rotary words the block spoke, not how:
|
||||
an absolute <code>C40.</code> and an incremental <code>C40.</code> both record 40.
|
||||
Which of them were increments — and so which MC angles are
|
||||
accumulations rather than programmed absolutes — is the sibling
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record, the one
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> reads for its
|
||||
literal pass-through.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="jumplist">
|
||||
@@ -911,9 +980,19 @@ the math is <code>InitRxcz + ProgramPolarRxcz</code>, mirroring HardNc
|
||||
<dt><a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html">IPositioningDef</a></dt>
|
||||
<dd><p>Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental).
|
||||
Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html">PositioningSyntax</a>, consumed by
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a>, canned cycle
|
||||
syntaxes, and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a>.
|
||||
Property names are used as JSON keys via <code>nameof</code>.</p>
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> (linear words),
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> (rotary words: G91
|
||||
accumulates anchor + delta) and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> (the wrap pass
|
||||
keeps the axes the <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record lists
|
||||
literal), canned cycle syntaxes, and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a>. A per-word
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.PositioningOverride.html">PositioningOverride</a> entry beats this modal state for
|
||||
its word. The section stays <code>G91</code> after the consumers have
|
||||
rewritten the block's words to absolutes (the next block's lookback
|
||||
needs it); the words that were converted are listed in the one-shot
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record. Property names are used as
|
||||
JSON keys via <code>nameof</code>.</p>
|
||||
<p>
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html#Hi_NcParsers_Keywords_IPositioningDef_Term">Term</a> is the brand-specific G-code (Fanuc/ISO G90/G91);
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html#Hi_NcParsers_Keywords_IPositioningDef_Mode">Mode</a> is the conventional, brand-neutral name
|
||||
|
||||
+82
-10
@@ -6,7 +6,7 @@
|
||||
<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.">
|
||||
<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. Rotary words (A/B/C) at the Parsing root never reach this syntax — consumes them upstream and follows the modal G91 itself. Inside a nested record they do (G91 G28 C10. — the Parsing.G28 intermediate), and a rotary axis has no program→MC transform, so its anchor is the previous modal angle () rather than a component of the program XYZ: the intermediate lands at current + 10°, the way HardNc's ParseG28 reads it against the previous MC. A never-set rotary axis anchors at 0. The rewrite is in place, and the modal section keeps saying G91 (the next block's lookback needs it), so a converted word is indistinguishable from a programmed absolute. Every word this syntax converts is therefore also recorded, as programmed, in the one-shot block-root section, shaped like the Parsing tree it came from ({ "X": 10, "G28": { "C": 10 } }). The record doubles as the idempotency guard: a word already listed at its path is left alone, so a second pass over the same block — a project file whose serialized list carries two instances, a re-run over a frozen piece — cannot add the anchor twice. Coded-position words are not recorded (they are not increments of a coordinate; their trace is the rewritten override entry).">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -160,6 +160,33 @@ 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>
|
||||
<p>
|
||||
Rotary words (A/B/C) at the <code>Parsing</code> root never reach this
|
||||
syntax — <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> consumes them upstream and follows
|
||||
the modal G91 itself. Inside a nested record they do
|
||||
(<code>G91 G28 C10.</code> — the <code>Parsing.G28</code> intermediate), and a
|
||||
rotary axis has no program→MC transform, so its anchor is the
|
||||
previous modal angle
|
||||
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html#Hi_NcParsers_LogicSyntaxs_RotaryAxisUtil_FindPreviousMcAxisDeg_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_String_">FindPreviousMcAxisDeg(LazyLinkedListNode<SyntaxPiece>, string)</a>) rather than a
|
||||
component of the program XYZ: the intermediate lands at
|
||||
current + 10°, the way HardNc's <code>ParseG28</code> reads it against
|
||||
the previous MC. A never-set rotary axis anchors at 0.
|
||||
</p>
|
||||
<p>
|
||||
The rewrite is in place, and the modal <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a>
|
||||
section keeps saying <code>G91</code> (the next block's lookback needs it),
|
||||
so a converted word is indistinguishable from a programmed absolute.
|
||||
Every word this syntax converts is therefore also recorded, as
|
||||
programmed, in the one-shot block-root <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a>
|
||||
section, shaped like the <code>Parsing</code> tree it came from
|
||||
(<code>{ "X": 10, "G28": { "C": 10 } }</code>). The record doubles as the
|
||||
idempotency guard: a word already listed at its path is left alone,
|
||||
so a second pass over the same block — a project file whose
|
||||
serialized list carries two instances, a re-run over a frozen piece
|
||||
— cannot add the anchor twice. Coded-position words are not recorded
|
||||
(they are not increments of a coordinate; their trace is the
|
||||
rewritten override entry).
|
||||
</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
|
||||
@@ -259,7 +286,8 @@ incremental deltas:
|
||||
<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>:
|
||||
to <code>lastAbs + incremental</code>; the programmed deltas go to
|
||||
<code>IncrementalWords</code>:
|
||||
#Previous:</p>
|
||||
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300 } }</code></pre>
|
||||
<p>#BeforeBuild:</p>
|
||||
@@ -270,13 +298,15 @@ to <code>lastAbs + incremental</code>:
|
||||
<p>#AfterBuild:</p>
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"Parsing": { "X": 110, "Y": 220, "Z": 330 }
|
||||
"Parsing": { "X": 110, "Y": 220, "Z": 330 },
|
||||
"IncrementalWords": { "X": 10, "Y": 20, "Z": 30 }
|
||||
}</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>:
|
||||
and resolves them against the same <code>lastProgramXyz</code>. The record
|
||||
mirrors the nesting — the words sit under <code>G28</code>:
|
||||
#Previous:</p>
|
||||
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300 } }</code></pre>
|
||||
<p>#BeforeBuild:</p>
|
||||
@@ -287,7 +317,8 @@ and resolves them against the same <code>lastProgramXyz</code>:
|
||||
<p>#AfterBuild:</p>
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"Parsing": { "G28": { "X": 105, "Y": 210, "Z": 315 } }
|
||||
"Parsing": { "G28": { "X": 105, "Y": 210, "Z": 315 } },
|
||||
"IncrementalWords": { "G28": { "X": 5, "Y": 10, "Z": 15 } }
|
||||
}</code></pre>
|
||||
<p>G90 (absolute) with a per-word <code>PositioningOverride</code> — the
|
||||
Siemens <code>X=IC(10)</code> shape after
|
||||
@@ -305,11 +336,12 @@ against the last program position; Y follows the modal G90 and stays:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G90", "Mode": "Absolute" },
|
||||
"PositioningOverride": { "X": "Incremental" },
|
||||
"Parsing": { "X": 110, "Y": 20 }
|
||||
"Parsing": { "X": 110, "Y": 20 },
|
||||
"IncrementalWords": { "X": 10 }
|
||||
}</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:
|
||||
skipped (already absolute, e.g. from <code>X=AC(25)</code>) and stays out
|
||||
of the record, 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>
|
||||
@@ -322,7 +354,8 @@ converts under the modal G91:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"PositioningOverride": { "X": "Absolute" },
|
||||
"Parsing": { "X": 25, "Y": 220 }
|
||||
"Parsing": { "X": 25, "Y": 220 },
|
||||
"IncrementalWords": { "Y": 20 }
|
||||
}</code></pre>
|
||||
<p>Coded-position absolute on a linear indexing axis (the Siemens
|
||||
<code>X=CAC(2)</code> workholder shape after the unwrap + evaluation
|
||||
@@ -360,7 +393,46 @@ root carries no axis word on a CC block and is untouched:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G90", "Mode": "Absolute" },
|
||||
"PositioningOverride": { "X": "Incremental", "Y": "Incremental" },
|
||||
"Parsing": { "CC": { "X": 10, "Y": 31 } }
|
||||
"Parsing": { "CC": { "X": 10, "Y": 31 } },
|
||||
"IncrementalWords": { "CC": { "X": 0, "Y": 11 } }
|
||||
}</code></pre>
|
||||
<p>G91 + <code>Parsing.G28</code> carrying a rotary word (<code>G91 G28 X0 C10.</code>
|
||||
on the A/B/C fallback axis list): the rotary anchor is the previous
|
||||
modal angle in <code>#Previous:</code> <code>MachineCoordinateState.C</code>, so
|
||||
the intermediate C is 30 + 10 = 40 — while X still resolves against
|
||||
the last program position (100 + 0). A root rotary word would never
|
||||
be here: <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> consumes it first:
|
||||
#Previous:</p>
|
||||
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 100, "Y": 200, "Z": 300, "C": 30 } }</code></pre>
|
||||
<p>#BeforeBuild:</p>
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"Parsing": { "G28": { "X": 0, "C": 10 } }
|
||||
}</code></pre>
|
||||
<p>#AfterBuild:</p>
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"Parsing": { "G28": { "X": 100, "C": 40 } },
|
||||
"IncrementalWords": { "G28": { "X": 0, "C": 10 } }
|
||||
}</code></pre>
|
||||
<p>A second pass over an already-resolved block — the <code>#BeforeBuild:</code>
|
||||
is the previous case's <code>#AfterBuild:</code> for a root word: the
|
||||
record lists X, so the syntax leaves the (now absolute) 110 alone
|
||||
instead of adding the anchor again. The guard is what makes the
|
||||
in-place rewrite safe against a list that runs the resolve twice:
|
||||
#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": 110 },
|
||||
"IncrementalWords": { "X": 10 }
|
||||
}</code></pre>
|
||||
<p>#AfterBuild:</p>
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"Parsing": { "X": 110 },
|
||||
"IncrementalWords": { "X": 10 }
|
||||
}</code></pre>
|
||||
|
||||
|
||||
|
||||
+43
-14
@@ -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, 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.">
|
||||
<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. Incremental words: a rotary word programmed as an increment — per-word (Siemens IC(), klartext IC+270) or a bare word under modal G91 — is a signed traverse by definition. already wrote anchor + delta into the MC and listed the axis in the one-shot record; this pass reads that record — and only that record — and keeps the listed axes verbatim instead of folding them into the ±180° window (a +270° chain dimension must not become a -90° swing). A listed non-modular axis needs nothing: the literal value is what the axis would do anyway. A rotary value the block carries without a word (lookback fill, or an absolute target another writer put there — G53.1, the Heidenhain PLANE syntax) is not listed and keeps the default window even under G91.">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -148,14 +148,19 @@ to resolve against (first rotary value in the stream) is reported as
|
||||
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.
|
||||
Incremental words: a rotary word programmed as an increment —
|
||||
per-word (Siemens <code>IC()</code>, klartext <code>IC+270</code>) or a bare
|
||||
word under modal <code>G91</code> — is a signed traverse by definition.
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> already wrote anchor + delta into the MC
|
||||
and listed the axis in the one-shot <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a>
|
||||
record; this pass reads that record — and only that record — and
|
||||
keeps the listed axes verbatim instead of folding them into the ±180°
|
||||
window (a +270° chain dimension must not become a -90° swing). A
|
||||
listed non-modular axis needs nothing: the literal value is what the
|
||||
axis would do anyway. A rotary value the block carries without a
|
||||
word (lookback fill, or an absolute target another writer put there
|
||||
— <code>G53.1</code>, the Heidenhain <code>PLANE</code> syntax) is not listed
|
||||
and keeps the default window even under G91.
|
||||
</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
@@ -354,20 +359,24 @@ would decide between "no move" and a spurious full -360° turn):
|
||||
"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°:
|
||||
rotary writer accumulated anchor 0° + 270° = 270° and listed B in
|
||||
<code>IncrementalWords</code>, and the pass keeps the traverse literal —
|
||||
the same 270° that the default window above rewrote to -90° stays
|
||||
+270°. The per-word entry is still on the block (nothing consumes
|
||||
it) but is not what this pass reads:
|
||||
#Previous:
|
||||
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 0 } }</code></pre>
|
||||
#BeforeBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"MachineCoordinateState": { "B": 270 },
|
||||
"PositioningOverride": { "B": "Incremental" }
|
||||
"PositioningOverride": { "B": "Incremental" },
|
||||
"IncrementalWords": { "B": 270 }
|
||||
}</code></pre>
|
||||
#AfterBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"MachineCoordinateState": { "B": 270 },
|
||||
"PositioningOverride": { "B": "Incremental" }
|
||||
"PositioningOverride": { "B": "Incremental" },
|
||||
"IncrementalWords": { "B": 270 }
|
||||
}</code></pre>
|
||||
A <code>CompoundMotion</code> item carrying the root word verbatim — the
|
||||
canned-cycle pre-positioning item that
|
||||
@@ -402,6 +411,26 @@ and resolves under the default window against the chained anchor
|
||||
]
|
||||
}
|
||||
}</code></pre>
|
||||
A bare rotary word under modal G91 (Fanuc <code>G91 … B270.</code>) has no
|
||||
per-word entry at all — the rotary writer accumulated 0° + 270° and
|
||||
listed B in <code>IncrementalWords</code>, and that listing alone keeps the
|
||||
+270° traverse literal. C is on the block without a word (the value
|
||||
an absolute writer such as <code>G53.1</code> would leave), so it is not
|
||||
listed and still resolves under the default window: 270° from anchor
|
||||
0° folds to −90°. Neither <code>Positioning</code> nor <code>RotaryWords</code>
|
||||
is consulted, so the case carries neither:
|
||||
#Previous:
|
||||
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 0, "C": 0 } }</code></pre>
|
||||
#BeforeBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"IncrementalWords": { "B": 270 },
|
||||
"MachineCoordinateState": { "B": 270, "C": 270 }
|
||||
}</code></pre>
|
||||
#AfterBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"IncrementalWords": { "B": 270 },
|
||||
"MachineCoordinateState": { "B": 270, "C": -90 }
|
||||
}</code></pre>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class McAbcSyntax | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="Writes rotary axis values (A/B/C) into from and modal lookback. Only active when declares rotary axes. Works for both 3+2-axis (no ) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. — placed after — copies X/Y/Z from the previous block's to finish the section. Splitting the XYZ fill out lets this syntax run before (and before ) without accidentally filling X/Y/Z from prev and thereby short-circuiting . Missing rotary axes are filled from previous lookback, unless the current section already has the value (e.g., from ). Values are stored in degrees (matching ). Per-word override: a block-root section (written by for the Siemens AC()/IC() coordinate functions, and by the Heidenhain L / C parsers for the klartext IA+/IB+/IC+ words) marks a rotary word : the parsed value is then added to the previous modal value of that axis (previous MachineCoordinateState lookback, falling back to a value already present in the current section, then 0) instead of being written as an absolute angle. The accumulated raw degrees stay monotonic across iterations: the tail-pass keeps an Incremental-stamped axis literal (a chain dimension is a signed traverse, never re-shortened), so even a +270° step survives as net rotation. An entry (from AC()) matches the default write and needs no special path — and so, deliberately, do the rotary-family entries (DC()) / (ACP()) / (ACN()): this syntax writes the raw absolute target and the shortest/directional swing is resolved by the tail-pass, which owns the wrap math. Brands that never write the section keep the exact legacy behavior. Coded-position overrides (Siemens CAC()/CIC()/CDC()/CACP()/CACN()) carry an indexing position number instead of an angle: the number is resolved through via and the override entry is rewritten to the plain vocabulary ( / / / — a cyclic CIC keeps its programmed direction through the directional values) before the tail-pass runs, so the tail-pass never sees a coded value. A failed resolve (invalid number, missing table) reports an error and holds the axis at its previous value. Every rotary word the block actually carried is also recorded, as programmed, in the one-shot block-root section ({ "C": 40 }) — the resolved angle goes into MachineCoordinateState, which after the modal carry can no longer tell "commanded" from "carried". Downstream consumers that need that distinction ( repeating an active canned cycle on a rotary-only block, riding the block's ABC on the cycle's pre-positioning item) read the record; the section is never modal-carried. Must be placed before so syntaxes that need the current-block ABC to compute transforms (e.g. ) can see it; and before and .">
|
||||
<meta name="description" content="Writes rotary axis values (A/B/C) into from and modal lookback. Only active when declares rotary axes. Works for both 3+2-axis (no ) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. — placed after — copies X/Y/Z from the previous block's to finish the section. Splitting the XYZ fill out lets this syntax run before (and before ) without accidentally filling X/Y/Z from prev and thereby short-circuiting . Missing rotary axes are filled from previous lookback, unless the current section already has the value (e.g., from ). Values are stored in degrees (matching ). Per-word override: a block-root section (written by for the Siemens AC()/IC() coordinate functions, and by the Heidenhain L / C parsers for the klartext IA+/IB+/IC+ words) marks a rotary word : the parsed value is then added to the previous modal value of that axis (previous MachineCoordinateState lookback, falling back to a value already present in the current section, then 0) instead of being written as an absolute angle. The accumulated raw degrees stay monotonic across iterations: the tail-pass keeps an Incremental-stamped axis literal (a chain dimension is a signed traverse, never re-shortened), so even a +270° step survives as net rotation. An entry (from AC()) matches the default write and needs no special path — and so, deliberately, do the rotary-family entries (DC()) / (ACP()) / (ACN()): this syntax writes the raw absolute target and the shortest/directional swing is resolved by the tail-pass, which owns the wrap math. Brands that never write the section keep the exact legacy behavior. Modal G91: a rotary word with no per-word entry follows the block's state (written ahead of this syntax by on every brand list) the way the linear words follow it in — under G91 it takes the same anchor + delta path as the override, so G91 … C20. repeated turns the table 20° further each block (Fanuc / Siemens / Heidenhain DIN-ISO all read an incremental rotary word as a signed traverse; the tail-pass keeps it literal for the axes the record lists). A per-word entry of any value beats the modal state for its word (G91 C=AC(90) is absolute). Rotary values another writer put on the block without a word — , the Heidenhain PLANE syntax — are absolute targets and are not touched. HardNc differs here by design of its own: HardNcLine.BuildOrdinaryMcAbc writes the word as an absolute angle under G91 and warns ("G91 is not effect for commands ABC"), so the two engines diverge on G91 rotary words — the parity fixtures assert the SoftNc leg only. Coded-position overrides (Siemens CAC()/CIC()/CDC()/CACP()/CACN()) carry an indexing position number instead of an angle: the number is resolved through via and the override entry is rewritten to the plain vocabulary ( / / / — a cyclic CIC keeps its programmed direction through the directional values) before the tail-pass runs, so the tail-pass never sees a coded value. A failed resolve (invalid number, missing table) reports an error and holds the axis at its previous value. Every rotary word the block actually carried is also recorded, as programmed, in the one-shot block-root section ({ "C": 40 }) — the resolved angle goes into MachineCoordinateState, which after the modal carry can no longer tell "commanded" from "carried". Downstream consumers that need that distinction ( repeating an active canned cycle on a rotary-only block, riding the block's ABC on the cycle's pre-positioning item) read the record; the section is never modal-carried. Its sibling records, with the programmed delta, the rotary words this syntax accumulated as increments (per-word IC()/IC+ or a bare word under modal G91): the MC value is an absolute angle from then on and the modal still says G91, so without the record an accumulated word would read like a programmed absolute. adds the block's linear increments to the same record later in the list, and reads it to pass the listed axes through the shortest-path wrap literally. Must be placed before so syntaxes that need the current-block ABC to compute transforms (e.g. ) can see it; and before and .">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -152,6 +152,28 @@ math. Brands that never write the section keep the exact legacy
|
||||
behavior.
|
||||
</p>
|
||||
<p>
|
||||
Modal G91: a rotary word with <b>no</b> per-word entry follows the
|
||||
block's <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a> state (written ahead of this
|
||||
syntax by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html">PositioningSyntax</a> on every brand list) the
|
||||
way the linear words follow it in
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> — under <code>G91</code> it takes
|
||||
the same anchor + delta path as the <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Incremental">Incremental</a>
|
||||
override, so <code>G91 … C20.</code> repeated turns the table 20° further
|
||||
each block (Fanuc / Siemens / Heidenhain DIN-ISO all read an
|
||||
incremental rotary word as a signed traverse; the
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> tail-pass keeps it literal for
|
||||
the axes the <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record lists). A per-word entry of any
|
||||
value beats the modal state for its word (<code>G91 C=AC(90)</code> is
|
||||
absolute). Rotary values another writer put on the block without a
|
||||
word — <a class="xref" href="Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html">G53p1RotaryPositionSyntax</a>, the Heidenhain
|
||||
<code>PLANE</code> syntax — are absolute targets and are not touched.
|
||||
HardNc differs here by design of its own: <code>HardNcLine.BuildOrdinaryMcAbc</code>
|
||||
writes the word as an absolute angle under G91 and warns
|
||||
(<i>"G91 is not effect for commands ABC"</i>), so the two engines
|
||||
diverge on G91 rotary words — the parity fixtures assert the
|
||||
SoftNc leg only.
|
||||
</p>
|
||||
<p>
|
||||
Coded-position overrides (Siemens
|
||||
<code>CAC()</code>/<code>CIC()</code>/<code>CDC()</code>/<code>CACP()</code>/<code>CACN()</code>)
|
||||
carry an indexing position <b>number</b> instead of an angle: the
|
||||
@@ -177,7 +199,17 @@ that distinction (<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleRes
|
||||
active canned cycle on a rotary-only block,
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d)</a> riding the
|
||||
block's ABC on the cycle's pre-positioning item) read the record; the
|
||||
section is never modal-carried.
|
||||
section is never modal-carried. Its sibling
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> records, with the programmed delta,
|
||||
the rotary words this syntax accumulated as increments (per-word
|
||||
<code>IC()</code>/<code>IC+</code> or a bare word under modal G91): the MC
|
||||
value is an absolute angle from then on and the modal
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a> still says G91, so without the record an
|
||||
accumulated word would read like a programmed absolute.
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> adds the block's linear
|
||||
increments to the same record later in the list, and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> reads it to pass the listed axes
|
||||
through the shortest-path wrap literally.
|
||||
</p>
|
||||
<p>
|
||||
Must be placed <b>before</b> <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> so syntaxes
|
||||
@@ -294,7 +326,8 @@ spoke are recorded as programmed in the one-shot
|
||||
}</code></pre>
|
||||
Only <code>Parsing.B</code> on the current block; <code>#Previous:</code>
|
||||
carries a full MC including C=0. The missing C is filled from the
|
||||
per-axis backward lookback (<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">FindPreviousMcAxis(LazyLinkedListNode<SyntaxPiece>, string)</a>) — and
|
||||
per-axis backward lookback
|
||||
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html#Hi_NcParsers_LogicSyntaxs_RotaryAxisUtil_FindPreviousMcAxisDeg_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_String_">FindPreviousMcAxisDeg(LazyLinkedListNode<SyntaxPiece>, string)</a>) — and
|
||||
stays out of <code>RotaryWords</code>, which lists commanded words only:
|
||||
#Previous:
|
||||
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 0, "C": 0 } }</code></pre>
|
||||
@@ -309,7 +342,8 @@ Per-word incremental override (the Siemens <code>C=IC(...)</code> shape
|
||||
after the unwrap + evaluation stages) — the parsed 21.5 is added onto
|
||||
the previous modal C instead of overwriting it; B has no override
|
||||
entry and fills from lookback as usual. <code>RotaryWords</code> keeps the
|
||||
programmed delta, not the accumulated angle:
|
||||
programmed delta, not the accumulated angle, and the accumulated
|
||||
word is listed in <code>IncrementalWords</code>:
|
||||
#Previous:
|
||||
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 10, "C": 40 } }</code></pre>
|
||||
#BeforeBuild:
|
||||
@@ -321,7 +355,8 @@ programmed delta, not the accumulated angle:
|
||||
<pre><code class="lang-csharp">{
|
||||
"PositioningOverride": { "C": "Incremental" },
|
||||
"MachineCoordinateState": { "B": 10, "C": 61.5 },
|
||||
"RotaryWords": { "C": 21.5 }
|
||||
"RotaryWords": { "C": 21.5 },
|
||||
"IncrementalWords": { "C": 21.5 }
|
||||
}</code></pre>
|
||||
Coded-position absolute (the Siemens <code>C=CAC(3)</code> shape after the
|
||||
unwrap + evaluation stages). The case injects a
|
||||
@@ -358,6 +393,48 @@ so the swing keeps the programmed direction:
|
||||
"MachineCoordinateState": { "C": 90 },
|
||||
"RotaryWords": { "C": 2 }
|
||||
}</code></pre>
|
||||
Modal G91 with no per-word entry (the Fanuc <code>G91 … C20.</code>
|
||||
canned-cycle repeat block): the rotary word is a signed traverse
|
||||
like the linear words, so it accumulates onto the previous modal C
|
||||
exactly as the Incremental override above (20 + 20 = 40); B has no
|
||||
word and fills from lookback. <code>RotaryWords</code> keeps the programmed
|
||||
delta and <code>IncrementalWords</code> lists the word — the modal section
|
||||
still says G91, and this record is what tells the accumulated 40
|
||||
apart from a programmed <code>C40.</code>:
|
||||
#Previous:
|
||||
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 10, "C": 20 } }</code></pre>
|
||||
#BeforeBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"Parsing": { "C": 20 }
|
||||
}</code></pre>
|
||||
#AfterBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"MachineCoordinateState": { "B": 10, "C": 40 },
|
||||
"RotaryWords": { "C": 20 },
|
||||
"IncrementalWords": { "C": 20 }
|
||||
}</code></pre>
|
||||
Modal G91 with a per-word <code>Absolute</code> entry (the Siemens
|
||||
<code>G91 … C=AC(90)</code> shape): the entry beats the modal state for
|
||||
its word, so C is written as the absolute 90 — the same rule
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> applies to <code>X=AC(25)</code>
|
||||
under G91:
|
||||
#Previous:
|
||||
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "B": 10, "C": 20 } }</code></pre>
|
||||
#BeforeBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"PositioningOverride": { "C": "Absolute" },
|
||||
"Parsing": { "C": 90 }
|
||||
}</code></pre>
|
||||
#AfterBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"PositioningOverride": { "C": "Absolute" },
|
||||
"MachineCoordinateState": { "B": 10, "C": 90 },
|
||||
"RotaryWords": { "C": 90 }
|
||||
}</code></pre>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -270,7 +270,10 @@ these per-SUT conformance assertions show only the raw literal /
|
||||
canonical-home values written by this syntax, before any cyclic
|
||||
normalization runs.
|
||||
</p>
|
||||
<code>G91 G28 B45.</code> — pure rotary G28. Emits a 2-item
|
||||
<code>G28 B45.</code> — pure rotary G28 (the record arrives absolute: under
|
||||
G91 <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a>, which runs ahead of this
|
||||
syntax, has already added the word onto the previous modal angle).
|
||||
Emits a 2-item
|
||||
<code>CompoundMotion</code> whose items carry only ABC keys in MC; no XYZ
|
||||
<code>ProgramXyz</code> and no XYZ MC because the block doesn't reference
|
||||
X/Y/Z (and the conformance harness doesn't run
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class RotaryAxisUtil | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="Shared utilities for rotary axis (A/B/C) resolution. Used by , , , and other syntaxes that read or write rotary axis values.">
|
||||
<meta name="description" content="Shared utilities for rotary axis (A/B/C) resolution. Used by , , , and other syntaxes that read or write rotary axis values.">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -100,6 +100,7 @@ Class RotaryAxisUtil
|
||||
<div class="markdown summary"><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>,
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a>
|
||||
and other syntaxes that read or write rotary axis values.</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
@@ -209,6 +210,60 @@ syntaxes do not re-process it.
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_LogicSyntaxs_RotaryAxisUtil_FindPreviousMcAxisDeg_" data-uid="Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.FindPreviousMcAxisDeg*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_LogicSyntaxs_RotaryAxisUtil_FindPreviousMcAxisDeg_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_String_" data-uid="Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.FindPreviousMcAxisDeg(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.String)">
|
||||
FindPreviousMcAxisDeg(LazyLinkedListNode<SyntaxPiece>, string)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Walks backward through previous <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a> nodes to
|
||||
find the most recent <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a>
|
||||
that carries a numeric value for the given <code class="paramref">axis</code>
|
||||
— the axis's modal angle in degrees as the machine-state section
|
||||
stores it (after the <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> wrap of
|
||||
that block), the anchor an incremental rotary word adds onto.
|
||||
Returns null when no predecessor carries the axis.</p>
|
||||
<p>
|
||||
Per-axis (rather than whole-section) because intermediate blocks
|
||||
— e.g. <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html">CircularMotionSyntax</a> blocks whose MC was
|
||||
written by <a class="xref" href="Hi.NcParsers.SoftNcUtil.html#Hi_NcParsers_SoftNcUtil_SetVec3d_System_Text_Json_Nodes_JsonObject_System_String_Hi_Geom_Vec3d_">SetVec3d(JsonObject, string, Vec3d)</a> with XYZ only — can
|
||||
lack rotary fields; whole-section lookback would stop at such a
|
||||
block and mistakenly conclude the rotary value is unknown. Silent
|
||||
on a non-numeric value (the throwing machine-state reader — a
|
||||
non-numeric MC is a HiAPIs codegen bug, not a program error).
|
||||
</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public static double? FindPreviousMcAxisDeg(LazyLinkedListNode<SyntaxPiece> node, string axis)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>node</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>axis</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a>?</dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_LogicSyntaxs_RotaryAxisUtil_GetRotaryAxes_" data-uid="Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.GetRotaryAxes*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_LogicSyntaxs_RotaryAxisUtil_GetRotaryAxes_Hi_NcParsers_Dependencys_IMachineAxisConfig_" data-uid="Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.GetRotaryAxes(Hi.NcParsers.Dependencys.IMachineAxisConfig)">
|
||||
|
||||
@@ -507,6 +507,33 @@ 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>
|
||||
<p>
|
||||
Rotary words (A/B/C) at the <code>Parsing</code> root never reach this
|
||||
syntax — <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> consumes them upstream and follows
|
||||
the modal G91 itself. Inside a nested record they do
|
||||
(<code>G91 G28 C10.</code> — the <code>Parsing.G28</code> intermediate), and a
|
||||
rotary axis has no program→MC transform, so its anchor is the
|
||||
previous modal angle
|
||||
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html#Hi_NcParsers_LogicSyntaxs_RotaryAxisUtil_FindPreviousMcAxisDeg_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_String_">FindPreviousMcAxisDeg(LazyLinkedListNode<SyntaxPiece>, string)</a>) rather than a
|
||||
component of the program XYZ: the intermediate lands at
|
||||
current + 10°, the way HardNc's <code>ParseG28</code> reads it against
|
||||
the previous MC. A never-set rotary axis anchors at 0.
|
||||
</p>
|
||||
<p>
|
||||
The rewrite is in place, and the modal <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a>
|
||||
section keeps saying <code>G91</code> (the next block's lookback needs it),
|
||||
so a converted word is indistinguishable from a programmed absolute.
|
||||
Every word this syntax converts is therefore also recorded, as
|
||||
programmed, in the one-shot block-root <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a>
|
||||
section, shaped like the <code>Parsing</code> tree it came from
|
||||
(<code>{ "X": 10, "G28": { "C": 10 } }</code>). The record doubles as the
|
||||
idempotency guard: a word already listed at its path is left alone,
|
||||
so a second pass over the same block — a project file whose
|
||||
serialized list carries two instances, a re-run over a frozen piece
|
||||
— cannot add the anchor twice. Coded-position words are not recorded
|
||||
(they are not increments of a coordinate; their trace is the
|
||||
rewritten override entry).
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="jumplist">
|
||||
@@ -743,14 +770,19 @@ to resolve against (first rotary value in the stream) is reported as
|
||||
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.
|
||||
Incremental words: a rotary word programmed as an increment —
|
||||
per-word (Siemens <code>IC()</code>, klartext <code>IC+270</code>) or a bare
|
||||
word under modal <code>G91</code> — is a signed traverse by definition.
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> already wrote anchor + delta into the MC
|
||||
and listed the axis in the one-shot <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a>
|
||||
record; this pass reads that record — and only that record — and
|
||||
keeps the listed axes verbatim instead of folding them into the ±180°
|
||||
window (a +270° chain dimension must not become a -90° swing). A
|
||||
listed non-modular axis needs nothing: the literal value is what the
|
||||
axis would do anyway. A rotary value the block carries without a
|
||||
word (lookback fill, or an absolute target another writer put there
|
||||
— <code>G53.1</code>, the Heidenhain <code>PLANE</code> syntax) is not listed
|
||||
and keeps the default window even under G91.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -811,6 +843,28 @@ math. Brands that never write the section keep the exact legacy
|
||||
behavior.
|
||||
</p>
|
||||
<p>
|
||||
Modal G91: a rotary word with <b>no</b> per-word entry follows the
|
||||
block's <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a> state (written ahead of this
|
||||
syntax by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html">PositioningSyntax</a> on every brand list) the
|
||||
way the linear words follow it in
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> — under <code>G91</code> it takes
|
||||
the same anchor + delta path as the <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Incremental">Incremental</a>
|
||||
override, so <code>G91 … C20.</code> repeated turns the table 20° further
|
||||
each block (Fanuc / Siemens / Heidenhain DIN-ISO all read an
|
||||
incremental rotary word as a signed traverse; the
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> tail-pass keeps it literal for
|
||||
the axes the <a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> record lists). A per-word entry of any
|
||||
value beats the modal state for its word (<code>G91 C=AC(90)</code> is
|
||||
absolute). Rotary values another writer put on the block without a
|
||||
word — <a class="xref" href="Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html">G53p1RotaryPositionSyntax</a>, the Heidenhain
|
||||
<code>PLANE</code> syntax — are absolute targets and are not touched.
|
||||
HardNc differs here by design of its own: <code>HardNcLine.BuildOrdinaryMcAbc</code>
|
||||
writes the word as an absolute angle under G91 and warns
|
||||
(<i>"G91 is not effect for commands ABC"</i>), so the two engines
|
||||
diverge on G91 rotary words — the parity fixtures assert the
|
||||
SoftNc leg only.
|
||||
</p>
|
||||
<p>
|
||||
Coded-position overrides (Siemens
|
||||
<code>CAC()</code>/<code>CIC()</code>/<code>CDC()</code>/<code>CACP()</code>/<code>CACN()</code>)
|
||||
carry an indexing position <b>number</b> instead of an angle: the
|
||||
@@ -836,7 +890,17 @@ that distinction (<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleRes
|
||||
active canned cycle on a rotary-only block,
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d)</a> riding the
|
||||
block's ABC on the cycle's pre-positioning item) read the record; the
|
||||
section is never modal-carried.
|
||||
section is never modal-carried. Its sibling
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IncrementalWords.html">IncrementalWords</a> records, with the programmed delta,
|
||||
the rotary words this syntax accumulated as increments (per-word
|
||||
<code>IC()</code>/<code>IC+</code> or a bare word under modal G91): the MC
|
||||
value is an absolute angle from then on and the modal
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a> still says G91, so without the record an
|
||||
accumulated word would read like a programmed absolute.
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> adds the block's linear
|
||||
increments to the same record later in the list, and
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a> reads it to pass the listed axes
|
||||
through the shortest-path wrap literally.
|
||||
</p>
|
||||
<p>
|
||||
Must be placed <b>before</b> <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> so syntaxes
|
||||
@@ -1364,6 +1428,7 @@ for subsequent block lookback.
|
||||
<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>,
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a>
|
||||
and other syntaxes that read or write rotary axis values.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@@ -1082,6 +1082,58 @@ runner. No-op when <code class="paramref">targetDeps</code> has no matching tabl
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_SoftNcRunner_PopulateLegacyStrokeLimitsWhereUnset_" data-uid="Hi.NcParsers.SoftNcRunner.PopulateLegacyStrokeLimitsWhereUnset*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_SoftNcRunner_PopulateLegacyStrokeLimitsWhereUnset_System_Xml_Linq_XElement_System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__" data-uid="Hi.NcParsers.SoftNcRunner.PopulateLegacyStrokeLimitsWhereUnset(System.Xml.Linq.XElement,System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency})">
|
||||
PopulateLegacyStrokeLimitsWhereUnset(XElement, List<INcDependency>)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Fills the stroke limits a proxy-era project never wrote onto its
|
||||
parameter table from the legacy <code>HardNcEnv</code> boxes
|
||||
(<code>StrokeLimitXyz_mm</code> / <code>StrokeLimitAbc_deg</code>), one axis at a
|
||||
time and only where the table carries neither end. The boxes are what
|
||||
the machine-limits editor and the <code>stroke-limit-*</code> endpoints
|
||||
wrote until 2026-09-14, while every SoftNc reader — the per-block
|
||||
<a class="xref" href="Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html">StrokeLimitCheckSemantic</a>, the per-step check
|
||||
and the tilt solves' travel preference — reads the table: a project
|
||||
rebuilt through that API (CHEM20180926) declared its travel and had
|
||||
no check at all. Non-finite ends are skipped (unbounded). Explicit
|
||||
table rows always win. No-op without a table or a legacy element.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public static List<string> PopulateLegacyStrokeLimitsWhereUnset(XElement ncEnvXml, List<INcDependency> targetDeps)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>ncEnvXml</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
|
||||
<dd><p>The inner XML element of the legacy <code>HardNcEnv</code>.</p>
|
||||
</dd>
|
||||
<dt><code>targetDeps</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><p>The proxy-resolved dependency list holding the parameter table.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</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.string">string</a>></dt>
|
||||
<dd><p>The axes that were filled, in X…C order; empty when nothing changed.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_SoftNcRunner_Reg_" data-uid="Hi.NcParsers.SoftNcRunner.Reg*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_SoftNcRunner_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.SoftNcRunner.Reg(Hi.Common.XmlUtils.XFactory)">
|
||||
|
||||
@@ -452,6 +452,42 @@ The value includes last action duration.</p>
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Numerical_Acts_StateActRunner_IsRapid_" data-uid="Hi.Numerical.Acts.StateActRunner.IsRapid*"></a>
|
||||
|
||||
<h3 id="Hi_Numerical_Acts_StateActRunner_IsRapid" data-uid="Hi.Numerical.Acts.StateActRunner.IsRapid">
|
||||
IsRapid
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Whether the last processed feedrate act was a rapid traverse
|
||||
(<a class="xref" href="Hi.Numerical.Acts.ActRapid.html">ActRapid</a>): the motion acts that follow it, up to the
|
||||
next <a class="xref" href="Hi.Numerical.Acts.ActFeedrate.html">ActFeedrate</a>, are G00 moves at
|
||||
<a class="xref" href="Hi.Numerical.Acts.StateActRunner.html#Hi_Numerical_Acts_StateActRunner_CommandedClFeedrate_mmds">CommandedClFeedrate_mmds</a>. False before the first
|
||||
feedrate act and after <a class="xref" href="Hi.Numerical.Acts.StateActRunner.html#Hi_Numerical_Acts_StateActRunner_ResetState">ResetState()</a>.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public bool IsRapid { 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.boolean">bool</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Numerical_Acts_StateActRunner_SpindleAngle_deg_" data-uid="Hi.Numerical.Acts.StateActRunner.SpindleAngle_deg*"></a>
|
||||
|
||||
<h3 id="Hi_Numerical_Acts_StateActRunner_SpindleAngle_deg" data-uid="Hi.Numerical.Acts.StateActRunner.SpindleAngle_deg">
|
||||
|
||||
@@ -309,6 +309,59 @@ the solution only fit the orientation part of the <code class="paramref">tiltMat
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_" data-uid="Hi.Numerical.Xyzabc.IMachineKinematics.OrientationToMcAbc*"></a>
|
||||
|
||||
<h3 id="Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Mat4d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__" data-uid="Hi.Numerical.Xyzabc.IMachineKinematics.OrientationToMcAbc(Hi.Geom.Mat4d,System.Func{Hi.Geom.Vec3d,System.Boolean},Hi.Geom.Vec3d@)">
|
||||
OrientationToMcAbc(Mat4d, Func<Vec3d, bool>, out Vec3d)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p><a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Mat4d_Hi_Geom_Vec3d__">OrientationToMcAbc(Mat4d, out Vec3d)</a> restricted to the
|
||||
rotary positions <code class="paramref">isMcAbcAdmissible</code> accepts (the
|
||||
machine's rotary travel, typically). A full orientation fixes the
|
||||
rotary positions up to axis periodicity, so a solution the predicate
|
||||
refuses is a posture this machine cannot take: the conversion then
|
||||
fails (false) and leaves the solver state as it was, so that the
|
||||
caller can fall back to <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Vec3d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__">OrientationToMcAbc(Vec3d, Func<Vec3d, bool>, out Vec3d)</a>,
|
||||
where the free rotation about the tool axis opens the other branch.
|
||||
A null predicate admits everything.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">bool OrientationToMcAbc(Mat4d tiltMat, Func<Vec3d, bool> isMcAbcAdmissible, out Vec3d mcAbc_rad)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>tiltMat</code> <a class="xref" href="Hi.Geom.Mat4d.html">Mat4d</a></dt>
|
||||
<dd><p>The tilt matrix to convert.</p>
|
||||
</dd>
|
||||
<dt><code>isMcAbcAdmissible</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a><<a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>></dt>
|
||||
<dd><p>Accepts a machine ABC (radians) or refuses it; null admits everything.</p>
|
||||
</dd>
|
||||
<dt><code>mcAbc_rad</code> <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
|
||||
<dd><p>Output machine ABC coordinates in radians.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd><p>Whether an admissible conversion was found.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_" data-uid="Hi.Numerical.Xyzabc.IMachineKinematics.OrientationToMcAbc*"></a>
|
||||
|
||||
<h3 id="Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Vec3d_Hi_Geom_Vec3d__" data-uid="Hi.Numerical.Xyzabc.IMachineKinematics.OrientationToMcAbc(Hi.Geom.Vec3d,Hi.Geom.Vec3d@)">
|
||||
@@ -359,6 +412,65 @@ likely to converge for tilt configurations such as <code>G68.2 I180 J90 K0</code
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_" data-uid="Hi.Numerical.Xyzabc.IMachineKinematics.OrientationToMcAbc*"></a>
|
||||
|
||||
<h3 id="Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Vec3d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__" data-uid="Hi.Numerical.Xyzabc.IMachineKinematics.OrientationToMcAbc(Hi.Geom.Vec3d,System.Func{Hi.Geom.Vec3d,System.Boolean},Hi.Geom.Vec3d@)">
|
||||
OrientationToMcAbc(Vec3d, Func<Vec3d, bool>, out Vec3d)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p><a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Vec3d_Hi_Geom_Vec3d__">OrientationToMcAbc(Vec3d, out Vec3d)</a> preferring the
|
||||
solution branch <code class="paramref">isMcAbcAdmissible</code> accepts. The
|
||||
axial-only problem has two branches on a two-rotary-axis machine
|
||||
(on a table-table A/C: (A, C) and (−A, C+180°)); the plain overload
|
||||
returns the branch nearest the solver's seed, which from the rotary
|
||||
pole (A0 C0) is the one the tilt's azimuth happens to favour — half
|
||||
the time the branch a cradle table with an asymmetric tilt travel
|
||||
cannot reach (CHEM20180926 N100: <code>G68.2 I210 J-90</code> + <code>G53.1</code>
|
||||
solved to A=+90° on a −120°…+30° A axis). When the nearest branch is
|
||||
refused, an implementation with a real solver searches the other
|
||||
branches and returns the admissible one nearest the seed; when none
|
||||
is admissible it returns the refused solution and true, and the
|
||||
stroke-limit check downstream reports it. A null predicate makes this
|
||||
the plain overload. The default implementation is the plain solve —
|
||||
the predicate is advisory for an implementation without a solver.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">bool OrientationToMcAbc(Vec3d toolAxialNormal, Func<Vec3d, bool> isMcAbcAdmissible, out Vec3d mcAbc_rad)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>toolAxialNormal</code> <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
|
||||
<dd><p>Target tool axial direction in table coordinates.</p>
|
||||
</dd>
|
||||
<dt><code>isMcAbcAdmissible</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a><<a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>></dt>
|
||||
<dd><p>Accepts a machine ABC (radians) or refuses it; null admits everything.</p>
|
||||
</dd>
|
||||
<dt><code>mcAbc_rad</code> <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
|
||||
<dd><p>Output machine ABC coordinates in radians.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd><p>Whether the conversion was successful (admissible or not).</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Numerical_Xyzabc_IMachineKinematics_PnToMc_" data-uid="Hi.Numerical.Xyzabc.IMachineKinematics.PnToMc*"></a>
|
||||
|
||||
<h3 id="Hi_Numerical_Xyzabc_IMachineKinematics_PnToMc_Hi_Geom_DVec3d_Hi_Geom_DVec3d__" data-uid="Hi.Numerical.Xyzabc.IMachineKinematics.PnToMc(Hi.Geom.DVec3d,Hi.Geom.DVec3d@)">
|
||||
|
||||
@@ -478,6 +478,59 @@ the solution only fit the orientation part of the <code class="paramref">tiltMat
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Numerical_Xyzabc_XyzabcSolver_OrientationToMcAbc_" data-uid="Hi.Numerical.Xyzabc.XyzabcSolver.OrientationToMcAbc*"></a>
|
||||
|
||||
<h3 id="Hi_Numerical_Xyzabc_XyzabcSolver_OrientationToMcAbc_Hi_Geom_Mat4d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__" data-uid="Hi.Numerical.Xyzabc.XyzabcSolver.OrientationToMcAbc(Hi.Geom.Mat4d,System.Func{Hi.Geom.Vec3d,System.Boolean},Hi.Geom.Vec3d@)">
|
||||
OrientationToMcAbc(Mat4d, Func<Vec3d, bool>, out Vec3d)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p><a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Mat4d_Hi_Geom_Vec3d__">OrientationToMcAbc(Mat4d, out Vec3d)</a> restricted to the
|
||||
rotary positions <code class="paramref">isMcAbcAdmissible</code> accepts (the
|
||||
machine's rotary travel, typically). A full orientation fixes the
|
||||
rotary positions up to axis periodicity, so a solution the predicate
|
||||
refuses is a posture this machine cannot take: the conversion then
|
||||
fails (false) and leaves the solver state as it was, so that the
|
||||
caller can fall back to <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Vec3d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__">OrientationToMcAbc(Vec3d, Func<Vec3d, bool>, out Vec3d)</a>,
|
||||
where the free rotation about the tool axis opens the other branch.
|
||||
A null predicate admits everything.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public bool OrientationToMcAbc(Mat4d tiltMat, Func<Vec3d, bool> isMcAbcAdmissible, out Vec3d mcAbc_rad)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>tiltMat</code> <a class="xref" href="Hi.Geom.Mat4d.html">Mat4d</a></dt>
|
||||
<dd><p>The tilt matrix to convert.</p>
|
||||
</dd>
|
||||
<dt><code>isMcAbcAdmissible</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a><<a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>></dt>
|
||||
<dd><p>Accepts a machine ABC (radians) or refuses it; null admits everything.</p>
|
||||
</dd>
|
||||
<dt><code>mcAbc_rad</code> <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
|
||||
<dd><p>Output machine ABC coordinates in radians.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd><p>Whether an admissible conversion was found.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Numerical_Xyzabc_XyzabcSolver_OrientationToMcAbc_" data-uid="Hi.Numerical.Xyzabc.XyzabcSolver.OrientationToMcAbc*"></a>
|
||||
|
||||
<h3 id="Hi_Numerical_Xyzabc_XyzabcSolver_OrientationToMcAbc_Hi_Geom_Vec3d_Hi_Geom_Vec3d__" data-uid="Hi.Numerical.Xyzabc.XyzabcSolver.OrientationToMcAbc(Hi.Geom.Vec3d,Hi.Geom.Vec3d@)">
|
||||
@@ -528,6 +581,65 @@ likely to converge for tilt configurations such as <code>G68.2 I180 J90 K0</code
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Numerical_Xyzabc_XyzabcSolver_OrientationToMcAbc_" data-uid="Hi.Numerical.Xyzabc.XyzabcSolver.OrientationToMcAbc*"></a>
|
||||
|
||||
<h3 id="Hi_Numerical_Xyzabc_XyzabcSolver_OrientationToMcAbc_Hi_Geom_Vec3d_System_Func_Hi_Geom_Vec3d_System_Boolean__Hi_Geom_Vec3d__" data-uid="Hi.Numerical.Xyzabc.XyzabcSolver.OrientationToMcAbc(Hi.Geom.Vec3d,System.Func{Hi.Geom.Vec3d,System.Boolean},Hi.Geom.Vec3d@)">
|
||||
OrientationToMcAbc(Vec3d, Func<Vec3d, bool>, out Vec3d)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p><a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html#Hi_Numerical_Xyzabc_IMachineKinematics_OrientationToMcAbc_Hi_Geom_Vec3d_Hi_Geom_Vec3d__">OrientationToMcAbc(Vec3d, out Vec3d)</a> preferring the
|
||||
solution branch <code class="paramref">isMcAbcAdmissible</code> accepts. The
|
||||
axial-only problem has two branches on a two-rotary-axis machine
|
||||
(on a table-table A/C: (A, C) and (−A, C+180°)); the plain overload
|
||||
returns the branch nearest the solver's seed, which from the rotary
|
||||
pole (A0 C0) is the one the tilt's azimuth happens to favour — half
|
||||
the time the branch a cradle table with an asymmetric tilt travel
|
||||
cannot reach (CHEM20180926 N100: <code>G68.2 I210 J-90</code> + <code>G53.1</code>
|
||||
solved to A=+90° on a −120°…+30° A axis). When the nearest branch is
|
||||
refused, an implementation with a real solver searches the other
|
||||
branches and returns the admissible one nearest the seed; when none
|
||||
is admissible it returns the refused solution and true, and the
|
||||
stroke-limit check downstream reports it. A null predicate makes this
|
||||
the plain overload. The default implementation is the plain solve —
|
||||
the predicate is advisory for an implementation without a solver.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public bool OrientationToMcAbc(Vec3d toolAxialNormal, Func<Vec3d, bool> isMcAbcAdmissible, out Vec3d mcAbc_rad)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>toolAxialNormal</code> <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
|
||||
<dd><p>Target tool axial direction in table coordinates.</p>
|
||||
</dd>
|
||||
<dt><code>isMcAbcAdmissible</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a><<a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>></dt>
|
||||
<dd><p>Accepts a machine ABC (radians) or refuses it; null admits everything.</p>
|
||||
</dd>
|
||||
<dt><code>mcAbc_rad</code> <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
|
||||
<dd><p>Output machine ABC coordinates in radians.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd><p>Whether the conversion was successful (admissible or not).</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Numerical_Xyzabc_XyzabcSolver_PnToMc_" data-uid="Hi.Numerical.Xyzabc.XyzabcSolver.PnToMc*"></a>
|
||||
|
||||
<h3 id="Hi_Numerical_Xyzabc_XyzabcSolver_PnToMc_Hi_Geom_DVec3d_Hi_Geom_DVec3d__" data-uid="Hi.Numerical.Xyzabc.XyzabcSolver.PnToMc(Hi.Geom.DVec3d,Hi.Geom.DVec3d@)">
|
||||
|
||||
@@ -1425,6 +1425,12 @@
|
||||
<li>
|
||||
<a href="Hi.MachiningProcs.ProxyProjectService.html" name="" title="ProxyProjectService">ProxyProjectService</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="Hi.MachiningProcs.RapidCutMonitor.html" name="" title="RapidCutMonitor">RapidCutMonitor</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="Hi.MachiningProcs.RapidCutMonitor.Sample.html" name="" title="RapidCutMonitor.Sample">RapidCutMonitor.Sample</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="Hi.MachiningProcs.RenderingFlag.html" name="" title="RenderingFlag">RenderingFlag</a>
|
||||
</li>
|
||||
@@ -3142,6 +3148,9 @@
|
||||
<li>
|
||||
<a href="Hi.NcParsers.Keywords.IUnparsedTextDef.html" name="" title="IUnparsedTextDef">IUnparsedTextDef</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="Hi.NcParsers.Keywords.IncrementalWords.html" name="" title="IncrementalWords">IncrementalWords</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="Hi.NcParsers.Keywords.IndexNote.html" name="" title="IndexNote">IndexNote</a>
|
||||
</li>
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user