deploy fixed MRR drift and webservice CylindroidHolder buckle branch update issue.

This commit is contained in:
iamboss 2026-05-28 19:42:05 +08:00
parent d7836db45f
commit 95b5790622
140 changed files with 8079 additions and 14099 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -11,9 +11,9 @@
"dependencies": {
"AvalonEdit": "6.3.0.90",
"FontAwesome.Sharp": "6.3.0",
"Hi.WpfPlus": "3.1.140",
"HiNc": "3.1.173",
"HiNc-Resource": "3.1.55",
"Hi.WpfPlus": "3.1.142",
"HiNc": "3.1.174",
"HiNc-Resource": "3.1.57",
"Serilog.Extensions.Hosting": "10.0.0",
"Serilog.Sinks.Console": "6.1.1",
"Serilog.Sinks.File": "7.0.0",
@ -1598,114 +1598,36 @@
}
}
},
"Google.Protobuf/3.28.3": {
"runtime": {
"lib/net5.0/Google.Protobuf.dll": {
"assemblyVersion": "3.28.3.0",
"fileVersion": "3.28.3.0"
}
}
},
"Grpc.AspNetCore/2.66.0": {
"Hi.WpfPlus/3.1.142": {
"dependencies": {
"Google.Protobuf": "3.28.3",
"Grpc.AspNetCore.Server.ClientFactory": "2.66.0"
}
},
"Grpc.AspNetCore.Server/2.66.0": {
"dependencies": {
"Grpc.Net.Common": "2.66.0"
},
"runtime": {
"lib/net9.0/Grpc.AspNetCore.Server.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.66.0.0"
}
}
},
"Grpc.AspNetCore.Server.ClientFactory/2.66.0": {
"dependencies": {
"Grpc.AspNetCore.Server": "2.66.0",
"Grpc.Net.ClientFactory": "2.66.0"
},
"runtime": {
"lib/net9.0/Grpc.AspNetCore.Server.ClientFactory.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.66.0.0"
}
}
},
"Grpc.Core.Api/2.66.0": {
"runtime": {
"lib/netstandard2.1/Grpc.Core.Api.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.66.0.0"
}
}
},
"Grpc.Net.Client/2.66.0": {
"dependencies": {
"Grpc.Net.Common": "2.66.0"
},
"runtime": {
"lib/net8.0/Grpc.Net.Client.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.66.0.0"
}
}
},
"Grpc.Net.ClientFactory/2.66.0": {
"dependencies": {
"Grpc.Net.Client": "2.66.0"
},
"runtime": {
"lib/net8.0/Grpc.Net.ClientFactory.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.66.0.0"
}
}
},
"Grpc.Net.Common/2.66.0": {
"dependencies": {
"Grpc.Core.Api": "2.66.0"
},
"runtime": {
"lib/net8.0/Grpc.Net.Common.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.66.0.0"
}
}
},
"Hi.WpfPlus/3.1.140": {
"dependencies": {
"HiDisp": "3.1.146"
"HiDisp": "3.1.148"
},
"runtime": {
"lib/net10.0-windows7.0/Hi.WpfPlus.dll": {
"assemblyVersion": "3.1.140.0",
"fileVersion": "3.1.140.0"
"assemblyVersion": "3.1.142.0",
"fileVersion": "3.1.142.0"
}
}
},
"HiCbtr/3.1.143": {
"HiCbtr/3.1.145": {
"dependencies": {
"HiDisp": "3.1.146"
"HiDisp": "3.1.148"
},
"runtime": {
"lib/net10.0/HiCbtr.dll": {
"assemblyVersion": "3.1.143.0",
"fileVersion": "3.1.143.0"
"assemblyVersion": "3.1.145.0",
"fileVersion": "3.1.145.0"
}
}
},
"HiDisp/3.1.146": {
"HiDisp/3.1.148": {
"dependencies": {
"HiGeom": "3.1.135"
"HiGeom": "3.1.136"
},
"runtime": {
"lib/net10.0/HiDisp.dll": {
"assemblyVersion": "3.1.146.0",
"fileVersion": "3.1.146.0"
"assemblyVersion": "3.1.148.0",
"fileVersion": "3.1.148.0"
}
},
"native": {
@ -1723,18 +1645,15 @@
}
}
},
"HiGeom/3.1.135": {
"HiGeom/3.1.136": {
"dependencies": {
"Google.Protobuf": "3.28.3",
"Grpc.AspNetCore": "2.66.0",
"Grpc.Net.Client": "2.66.0",
"MathNet.Numerics": "5.0.0",
"Microsoft.CodeAnalysis.Scripting.Common": "5.3.0"
},
"runtime": {
"lib/net10.0/HiGeom.dll": {
"assemblyVersion": "3.1.135.0",
"fileVersion": "3.1.135.0"
"assemblyVersion": "3.1.136.0",
"fileVersion": "3.1.136.0"
}
},
"resources": {
@ -1746,27 +1665,27 @@
}
}
},
"HiLicense/3.1.136": {
"HiLicense/3.1.138": {
"dependencies": {
"HiGeom": "3.1.135"
"HiGeom": "3.1.136"
},
"runtime": {
"lib/net10.0/HiLicense.dll": {
"assemblyVersion": "3.1.136.0",
"fileVersion": "3.1.136.0"
"assemblyVersion": "3.1.138.0",
"fileVersion": "3.1.138.0"
}
}
},
"HiMech/3.1.154": {
"HiMech/3.1.156": {
"dependencies": {
"CommandLineParser": "2.9.1",
"HiCbtr": "3.1.143",
"HiCbtr": "3.1.145",
"Microsoft.CodeAnalysis.CSharp.Scripting": "5.3.0"
},
"runtime": {
"lib/net10.0/HiMech.dll": {
"assemblyVersion": "3.1.154.0",
"fileVersion": "3.1.154.0"
"assemblyVersion": "3.1.156.0",
"fileVersion": "3.1.156.0"
}
},
"resources": {
@ -1781,21 +1700,18 @@
}
}
},
"HiNc/3.1.173": {
"HiNc/3.1.174": {
"dependencies": {
"Dapper": "2.1.35",
"Google.Protobuf": "3.28.3",
"Grpc.AspNetCore": "2.66.0",
"Grpc.Net.Client": "2.66.0",
"HiLicense": "3.1.136",
"HiMech": "3.1.154",
"HiUniNc": "3.1.150",
"HiLicense": "3.1.138",
"HiMech": "3.1.156",
"HiUniNc": "3.1.151",
"Microsoft.Data.Sqlite": "9.0.0"
},
"runtime": {
"lib/net10.0/HiNc.dll": {
"assemblyVersion": "3.1.173.0",
"fileVersion": "3.1.173.0"
"assemblyVersion": "3.1.174.0",
"fileVersion": "3.1.174.0"
}
},
"resources": {
@ -1807,22 +1723,22 @@
}
}
},
"HiNc-Resource/3.1.55": {
"HiNc-Resource/3.1.57": {
"runtime": {
"lib/net10.0/HiNc-Resource.dll": {
"assemblyVersion": "3.1.55.0",
"fileVersion": "3.1.55.0"
"assemblyVersion": "3.1.57.0",
"fileVersion": "3.1.57.0"
}
}
},
"HiUniNc/3.1.150": {
"HiUniNc/3.1.151": {
"dependencies": {
"HiMech": "3.1.154"
"HiMech": "3.1.156"
},
"runtime": {
"lib/net10.0/HiUniNc.dll": {
"assemblyVersion": "3.1.150.0",
"fileVersion": "3.1.150.0"
"assemblyVersion": "3.1.151.0",
"fileVersion": "3.1.151.0"
}
}
},
@ -2201,124 +2117,68 @@
"path": "fontawesome.sharp/6.3.0",
"hashPath": "fontawesome.sharp.6.3.0.nupkg.sha512"
},
"Google.Protobuf/3.28.3": {
"Hi.WpfPlus/3.1.142": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OewySX3aQCdKfMJsj2DzBMXQJPI+lm0CBzamU9ViFu3CU9tXYrQWqJ1CZ+/UWtkwOjUeIzbXmoOjRc7B8pbMrA==",
"path": "google.protobuf/3.28.3",
"hashPath": "google.protobuf.3.28.3.nupkg.sha512"
"sha512": "sha512-I1O7HrANDPwLaB+zfRXs9GflyFNxtiJ2zGNKDLHAvF5Mo+lFUtU5rxYCxq/fRZJbcjv2Crrc8mlJ8namoIcHUQ==",
"path": "hi.wpfplus/3.1.142",
"hashPath": "hi.wpfplus.3.1.142.nupkg.sha512"
},
"Grpc.AspNetCore/2.66.0": {
"HiCbtr/3.1.145": {
"type": "package",
"serviceable": true,
"sha512": "sha512-b4V5V/yiCeK94wiQReUyHPB/Xj/fCaDWhlcFnYzSCm3pQtyADAN9t3g7V631PzLjFZQnPn9iIN3M6BHnVx3nfA==",
"path": "grpc.aspnetcore/2.66.0",
"hashPath": "grpc.aspnetcore.2.66.0.nupkg.sha512"
"sha512": "sha512-Ab/TIbJYrnQnuWpu1N27nTf+f5kGEiBAh86o1hVLUT4xVYQDxpnTSJ9m2M3iulDtcWhYWElonGMGbAu4yyr/gQ==",
"path": "hicbtr/3.1.145",
"hashPath": "hicbtr.3.1.145.nupkg.sha512"
},
"Grpc.AspNetCore.Server/2.66.0": {
"HiDisp/3.1.148": {
"type": "package",
"serviceable": true,
"sha512": "sha512-SogFEs8bLvcRtEWMdueOJeMxiaLryvyivWtmBwz/vLtS5xlN4Zrfv+npMbn1PS4iT99AqBY+R+bRxdIFfvfeIA==",
"path": "grpc.aspnetcore.server/2.66.0",
"hashPath": "grpc.aspnetcore.server.2.66.0.nupkg.sha512"
"sha512": "sha512-hQzKxONIuGYUWKT7/tc9Pjye440gdWIYQ5eKoklFVCc6r3IN40UST18T98y92sq158cypuQ57cN2X/4iE7o6zw==",
"path": "hidisp/3.1.148",
"hashPath": "hidisp.3.1.148.nupkg.sha512"
},
"Grpc.AspNetCore.Server.ClientFactory/2.66.0": {
"HiGeom/3.1.136": {
"type": "package",
"serviceable": true,
"sha512": "sha512-glLCZ5K8iBSzzd2eIKjMBYBApygvwJqGJ87FBJrHL4bSrnBTywCUFfLj2EckiPjvvW6SNwLtapwdY4Sj0WwWQg==",
"path": "grpc.aspnetcore.server.clientfactory/2.66.0",
"hashPath": "grpc.aspnetcore.server.clientfactory.2.66.0.nupkg.sha512"
"sha512": "sha512-QisKmDbZ2SoEa4clTi397VB+FlbmuUR+vW5oqdMO5HU3XDTqWZ2y3XUt99K+zSoB7ngtHAXAVkRJQDvOsS9ZaA==",
"path": "higeom/3.1.136",
"hashPath": "higeom.3.1.136.nupkg.sha512"
},
"Grpc.Core.Api/2.66.0": {
"HiLicense/3.1.138": {
"type": "package",
"serviceable": true,
"sha512": "sha512-HsjsQVAHe4hqP4t4rpUnmq+MZvPdyrlPsWF4T5fbMvyP3o/lMV+KVJfDlaNH8+v0aGQTVT3EsDFufbhaWb52cw==",
"path": "grpc.core.api/2.66.0",
"hashPath": "grpc.core.api.2.66.0.nupkg.sha512"
"sha512": "sha512-zsReBAVZ7Pjh9ZxEvZkLzvBAKWLaw2rNb5uIMaudrb/sdJwcFvATeAe/8BGn3rTASjrpXBB9wFFTadtfpf5t8w==",
"path": "hilicense/3.1.138",
"hashPath": "hilicense.3.1.138.nupkg.sha512"
},
"Grpc.Net.Client/2.66.0": {
"HiMech/3.1.156": {
"type": "package",
"serviceable": true,
"sha512": "sha512-GwkSsssXFgN9+M2U+UQWdErf61sn1iqgP+2NRBlDXATcP9vlxda0wySxd/eIL8U522+SnyFNUXlvQ5tAzGk9cA==",
"path": "grpc.net.client/2.66.0",
"hashPath": "grpc.net.client.2.66.0.nupkg.sha512"
"sha512": "sha512-76pYizkB6Tzr9RkHiiu36eUejIEhmwy/37GoFGR4UFJY3zLJVBtlku1BYq4FsRCG/HJOtAzGCxweqix1jkmGbQ==",
"path": "himech/3.1.156",
"hashPath": "himech.3.1.156.nupkg.sha512"
},
"Grpc.Net.ClientFactory/2.66.0": {
"HiNc/3.1.174": {
"type": "package",
"serviceable": true,
"sha512": "sha512-I6HUbtcqb24OiQlbvxpBLruCxQ8wrmJ5tUtU96QK7nqyerrMLeqLDDbhotznPAnZtR8x1bJvck/Xt4fgvVo92Q==",
"path": "grpc.net.clientfactory/2.66.0",
"hashPath": "grpc.net.clientfactory.2.66.0.nupkg.sha512"
"sha512": "sha512-BUs6pZ4aDLArmwSc9JP/cgUf+JuRj4/d8ZSUbccV+t8rDuZ7vtNSWtPPiPKEmPJDIRR2OHp5Jy0odzfpP8KaXA==",
"path": "hinc/3.1.174",
"hashPath": "hinc.3.1.174.nupkg.sha512"
},
"Grpc.Net.Common/2.66.0": {
"HiNc-Resource/3.1.57": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YJpQpIvpo0HKlsG6SHwaieyji08qfv0DdEDIewCAA0egQY08637sHOj1netLGUhzBEsCqlGC3e92TZ2uqhxnvw==",
"path": "grpc.net.common/2.66.0",
"hashPath": "grpc.net.common.2.66.0.nupkg.sha512"
"sha512": "sha512-lYgRxhqeGNycGkhoRRg0TlF6xwXc0D26tDilhoiNkd34/U5Ev4LhnjhKoDSij9xWxi8ZyOX7vvLfdjPK56d26Q==",
"path": "hinc-resource/3.1.57",
"hashPath": "hinc-resource.3.1.57.nupkg.sha512"
},
"Hi.WpfPlus/3.1.140": {
"HiUniNc/3.1.151": {
"type": "package",
"serviceable": true,
"sha512": "sha512-SkgBcnsPESMlOaauLdV0uLnPysvhI2zrIzjQqc1uuegy4r0X5yqmAPVwFdfkNc3YoV17qIOTGir29Ktx45aimg==",
"path": "hi.wpfplus/3.1.140",
"hashPath": "hi.wpfplus.3.1.140.nupkg.sha512"
},
"HiCbtr/3.1.143": {
"type": "package",
"serviceable": true,
"sha512": "sha512-SIpuwSOy1WB6cv25Hs7Zm5/sfhkhv3Im6se80SpUXWa0p4OqSYnUDjU2d3lOQyXgi505v1ba10g9iMXVyZO+CA==",
"path": "hicbtr/3.1.143",
"hashPath": "hicbtr.3.1.143.nupkg.sha512"
},
"HiDisp/3.1.146": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Q9OZZBS7FxLXLXO1Ov5O6hewPjqMsxUKWAGM4ckxupqwJt+4jHYgoOtB3UfK1cWOd9uEP+TaTFOmlY4tTEzZDg==",
"path": "hidisp/3.1.146",
"hashPath": "hidisp.3.1.146.nupkg.sha512"
},
"HiGeom/3.1.135": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DWyxMTuXlK3MiB+XaSBdXS1jfT4XhVsoFXE30LJybBjhjBlbgPxWocruXu8mHcU0yVHzM2fN0wuDipY5KEUQWA==",
"path": "higeom/3.1.135",
"hashPath": "higeom.3.1.135.nupkg.sha512"
},
"HiLicense/3.1.136": {
"type": "package",
"serviceable": true,
"sha512": "sha512-0HH1O8vm/N3je+nxh+qLmswl0P83htSmm2NH8yrazgiEWwZ9+t+7JzBEC9xT9esrjs9zakldesAn9fYZo0l+RA==",
"path": "hilicense/3.1.136",
"hashPath": "hilicense.3.1.136.nupkg.sha512"
},
"HiMech/3.1.154": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7grSGnaxe11EAOkLg+cmRSPO1t7+qS8+NJouqbsfA22WmWPOqIPEYmaiEuRC6lCfn0iBAX+rh9F8OQYjPDDVDA==",
"path": "himech/3.1.154",
"hashPath": "himech.3.1.154.nupkg.sha512"
},
"HiNc/3.1.173": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pGoDJaOdBCKU6DQTEJVnKmvzMSGQ3v6BApHiYzwDMkQdV2y5KlFk3MZIgLRBWM6+nI4UiUFtFdjq8LUi0Yof1A==",
"path": "hinc/3.1.173",
"hashPath": "hinc.3.1.173.nupkg.sha512"
},
"HiNc-Resource/3.1.55": {
"type": "package",
"serviceable": true,
"sha512": "sha512-X16YILf69BaRN3PiJKwKQoiRv58gpMezTz9wuzUsdFkl6N0w9Vwa1A5aAUa6VaALB+1RJ3J5RgRriJIvayHnjQ==",
"path": "hinc-resource/3.1.55",
"hashPath": "hinc-resource.3.1.55.nupkg.sha512"
},
"HiUniNc/3.1.150": {
"type": "package",
"serviceable": true,
"sha512": "sha512-llavC4EZKaS421BsnfX/8vNDq2TZlpsCXVDec5wLcUPN06qQ8b0A6Jd09/fWvi3zwjNkQn4kdSXeKOjDUJuSNg==",
"path": "hiuninc/3.1.150",
"hashPath": "hiuninc.3.1.150.nupkg.sha512"
"sha512": "sha512-8Acx1Tue9MxUpo9wOK9TrjHOhFlulaXTtPzcpH+LrZg3OduJKxd/pM9ZuOprgXrpzaxdn3A84u2CM8yw9DMzIA==",
"path": "hiuninc/3.1.151",
"hashPath": "hiuninc.3.1.151.nupkg.sha512"
},
"MathNet.Numerics/5.0.0": {
"type": "package",

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -309,6 +309,52 @@ Class CsvInputKit
</h2>
<a id="Hi_Common_CsvUtils_CsvInputKit_GetCsvDictionary_" data-uid="Hi.Common.CsvUtils.CsvInputKit.GetCsvDictionary*"></a>
<h3 id="Hi_Common_CsvUtils_CsvInputKit_GetCsvDictionary_System_Collections_Generic_IList_System_String__System_String_" data-uid="Hi.Common.CsvUtils.CsvInputKit.GetCsvDictionary(System.Collections.Generic.IList{System.String},System.String)">
GetCsvDictionary(IList&lt;string&gt;, string)
</h3>
<div class="markdown level1 summary"><p>Splits a CSV row into a title→cell dictionary. Stateless allocation-light
variant of <a class="xref" href="Hi.Common.CsvUtils.CsvInputKit.html#Hi_Common_CsvUtils_CsvInputKit_GetCsvDictionary_System_String_">GetCsvDictionary(string)</a>; use this when the
caller already has the title list and does not need to hold a
<a class="xref" href="Hi.Common.CsvUtils.CsvInputKit.html">CsvInputKit</a> instance.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static Dictionary&lt;string, string&gt; GetCsvDictionary(IList&lt;string&gt; titleList, string row)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>titleList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.ilist-1">IList</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd><p>Column titles, in CSV column order.</p>
</dd>
<dt><code>row</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>CSV data row (not the header line).</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.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd><p>Dictionary keyed by column title; cells past <code class="paramref">titleList</code>
are keyed by <code>column[i]</code>.</p>
</dd>
</dl>
<a id="Hi_Common_CsvUtils_CsvInputKit_GetCsvDictionary_" data-uid="Hi.Common.CsvUtils.CsvInputKit.GetCsvDictionary*"></a>
<h3 id="Hi_Common_CsvUtils_CsvInputKit_GetCsvDictionary_System_String_" data-uid="Hi.Common.CsvUtils.CsvInputKit.GetCsvDictionary(System.String)">

View File

@ -211,7 +211,7 @@ factory's registry must look up the delegate via
</h3>
<div class="markdown level1 summary"><p>Process-wide default factory used by the static <code>Gen&lt;T&gt;</code>
family. Reg-style methods register here when called with
family. <code>Reg</code>-style methods register here when called with
no explicit factory argument.</p>
</div>
<div class="markdown level1 conceptual"></div>

View File

@ -180,7 +180,8 @@ Class DispEngine
<h2 id="Hi_Disp_DispEngine_remarks">Remarks</h2>
<div class="markdown level0 remarks"><p>The <code>DispEngine</code> is the core rendering and interaction engine for HiAPI applications.</p>
<div class="markdown level0 remarks">
<p>The <code>DispEngine</code> is the core rendering and interaction engine for HiAPI applications.</p>
<h2 id="related-documentation">Related Documentation</h2>
<ul>
<li><a href="../fundamentals/rendering/rendering-canvas/index.html">Using RenderingCanvas with DispEngine</a></li>

View File

@ -1,302 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ClStripService.ClStripServiceBase | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ClStripService.ClStripServiceBase | HiAPI-C# 2025 ">
<meta name="description" content="Base class for server-side implementations of ClStripService">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs.ClStripService.ClStripServiceBase">
<h1 id="Hi_Grpcs_ClStripService_ClStripServiceBase" data-uid="Hi.Grpcs.ClStripService.ClStripServiceBase" class="text-break">
Class ClStripService.ClStripServiceBase
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
</div>
<div class="markdown summary"><p>Base class for server-side implementations of ClStripService</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[BindServiceMethod(typeof(ClStripService), &quot;BindService&quot;)]
public abstract class ClStripService.ClStripServiceBase</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">ClStripService.ClStripServiceBase</span></div>
</dd>
</dl>
<dl class="typelist derived">
<dt>Derived</dt>
<dd>
<div><a class="xref" href="Hi.Grpcs.ClStripServiceRunner.html">ClStripServiceRunner</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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="methods">Methods
</h2>
<a id="Hi_Grpcs_ClStripService_ClStripServiceBase_StepRan_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceBase.StepRan*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceBase_StepRan_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_IServerStreamWriter_Hi_Grpcs_DictionaryStep__Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceBase.StepRan(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.IServerStreamWriter{Hi.Grpcs.DictionaryStep},Grpc.Core.ServerCallContext)">
StepRan(Empty, IServerStreamWriter&lt;DictionaryStep&gt;, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>data returned if step ran.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual Task StepRan(Empty request, IServerStreamWriter&lt;DictionaryStep&gt; responseStream, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The request received from the client.</p>
</dd>
<dt><code>responseStream</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/IServerStreamWriter.cs">IServerStreamWriter</a>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</dt>
<dd><p>Used for sending responses back to the client.</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>The context of the server-side call handler being invoked.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task">Task</a></dt>
<dd><p>A task indicating completion of the handler.</p>
</dd>
</dl>
<a id="Hi_Grpcs_ClStripService_ClStripServiceBase_StepSelected_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceBase.StepSelected*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceBase_StepSelected_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_IServerStreamWriter_Hi_Grpcs_DictionaryStep__Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceBase.StepSelected(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.IServerStreamWriter{Hi.Grpcs.DictionaryStep},Grpc.Core.ServerCallContext)">
StepSelected(Empty, IServerStreamWriter&lt;DictionaryStep&gt;, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>data returned if step selected.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual Task StepSelected(Empty request, IServerStreamWriter&lt;DictionaryStep&gt; responseStream, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The request received from the client.</p>
</dd>
<dt><code>responseStream</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/IServerStreamWriter.cs">IServerStreamWriter</a>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</dt>
<dd><p>Used for sending responses back to the client.</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>The context of the server-side call handler being invoked.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task">Task</a></dt>
<dd><p>A task indicating completion of the handler.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -1,560 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ClStripService.ClStripServiceClient | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ClStripService.ClStripServiceClient | HiAPI-C# 2025 ">
<meta name="description" content="Client for ClStripService">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient">
<h1 id="Hi_Grpcs_ClStripService_ClStripServiceClient" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient" class="text-break">
Class ClStripService.ClStripServiceClient
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
</div>
<div class="markdown summary"><p>Client for ClStripService</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class ClStripService.ClStripServiceClient : ClientBase&lt;ClStripService.ClStripServiceClient&gt;</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><a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ClientBase.cs">ClientBase</a></div>
<div><a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ClientBase.cs">ClientBase</a>&lt;<a class="xref" href="Hi.Grpcs.ClStripService.html">ClStripService</a>.<a class="xref" href="Hi.Grpcs.ClStripService.ClStripServiceClient.html">ClStripServiceClient</a>&gt;</div>
<div><span class="xref">ClStripService.ClStripServiceClient</span></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ClientBase.cs">ClientBase&lt;ClStripService.ClStripServiceClient&gt;.WithHost(string)</a>
</div>
<div>
<a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ClientBase.cs">ClientBase.CallInvoker</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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_Grpcs_ClStripService_ClStripServiceClient__ctor_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.#ctor*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceClient__ctor" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.#ctor">
ClStripServiceClient()
</h3>
<div class="markdown level1 summary"><p>Protected parameterless constructor to allow creation of test doubles.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected ClStripServiceClient()</code></pre>
</div>
<a id="Hi_Grpcs_ClStripService_ClStripServiceClient__ctor_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.#ctor*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceClient__ctor_Grpc_Core_CallInvoker_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.#ctor(Grpc.Core.CallInvoker)">
ClStripServiceClient(CallInvoker)
</h3>
<div class="markdown level1 summary"><p>Creates a new client for ClStripService that uses a custom <code>CallInvoker</code>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ClStripServiceClient(CallInvoker callInvoker)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>callInvoker</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/CallInvoker.cs">CallInvoker</a></dt>
<dd><p>The callInvoker to use to make remote calls.</p>
</dd>
</dl>
<a id="Hi_Grpcs_ClStripService_ClStripServiceClient__ctor_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.#ctor*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceClient__ctor_Grpc_Core_ChannelBase_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.#ctor(Grpc.Core.ChannelBase)">
ClStripServiceClient(ChannelBase)
</h3>
<div class="markdown level1 summary"><p>Creates a new client for ClStripService</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ClStripServiceClient(ChannelBase channel)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>channel</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ChannelBase.cs">ChannelBase</a></dt>
<dd><p>The channel to use to make remote calls.</p>
</dd>
</dl>
<a id="Hi_Grpcs_ClStripService_ClStripServiceClient__ctor_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.#ctor*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceClient__ctor_Grpc_Core_ClientBase_ClientBaseConfiguration_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.#ctor(Grpc.Core.ClientBase.ClientBaseConfiguration)">
ClStripServiceClient(ClientBaseConfiguration)
</h3>
<div class="markdown level1 summary"><p>Protected constructor to allow creation of configured clients.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected ClStripServiceClient(ClientBase.ClientBaseConfiguration configuration)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>configuration</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ClientBase.cs">ClientBase</a>.<a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ClientBase.cs">ClientBaseConfiguration</a></dt>
<dd><p>The client configuration.</p>
</dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_Grpcs_ClStripService_ClStripServiceClient_NewInstance_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.NewInstance*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceClient_NewInstance_Grpc_Core_ClientBase_ClientBaseConfiguration_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.NewInstance(Grpc.Core.ClientBase.ClientBaseConfiguration)">
NewInstance(ClientBaseConfiguration)
</h3>
<div class="markdown level1 summary"><p>Creates a new instance of client from given <code>ClientBaseConfiguration</code>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected override ClStripService.ClStripServiceClient NewInstance(ClientBase.ClientBaseConfiguration configuration)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>configuration</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ClientBase.cs">ClientBase</a>.<a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ClientBase.cs">ClientBaseConfiguration</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Grpcs.ClStripService.html">ClStripService</a>.<a class="xref" href="Hi.Grpcs.ClStripService.ClStripServiceClient.html">ClStripServiceClient</a></dt>
<dd></dd>
</dl>
<a id="Hi_Grpcs_ClStripService_ClStripServiceClient_StepRan_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.StepRan*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceClient_StepRan_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_CallOptions_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.StepRan(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.CallOptions)">
StepRan(Empty, CallOptions)
</h3>
<div class="markdown level1 summary"><p>data returned if step ran.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual AsyncServerStreamingCall&lt;DictionaryStep&gt; StepRan(Empty request, CallOptions options)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The request to send to the server.</p>
</dd>
<dt><code>options</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/CallOptions.cs">CallOptions</a></dt>
<dd><p>The options for the call.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/AsyncServerStreamingCall.cs">AsyncServerStreamingCall</a>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</dt>
<dd><p>The call object.</p>
</dd>
</dl>
<a id="Hi_Grpcs_ClStripService_ClStripServiceClient_StepRan_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.StepRan*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceClient_StepRan_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_Metadata_System_Nullable_System_DateTime__System_Threading_CancellationToken_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.StepRan(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.Metadata,System.Nullable{System.DateTime},System.Threading.CancellationToken)">
StepRan(Empty, Metadata, DateTime?, CancellationToken)
</h3>
<div class="markdown level1 summary"><p>data returned if step ran.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual AsyncServerStreamingCall&lt;DictionaryStep&gt; StepRan(Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The request to send to the server.</p>
</dd>
<dt><code>headers</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/Metadata.cs">Metadata</a></dt>
<dd><p>The initial metadata to send with the call. This parameter is optional.</p>
</dd>
<dt><code>deadline</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetime">DateTime</a>?</dt>
<dd><p>An optional deadline for the call. The call will be cancelled if deadline is hit.</p>
</dd>
<dt><code>cancellationToken</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken">CancellationToken</a></dt>
<dd><p>An optional token for canceling the call.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/AsyncServerStreamingCall.cs">AsyncServerStreamingCall</a>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</dt>
<dd><p>The call object.</p>
</dd>
</dl>
<a id="Hi_Grpcs_ClStripService_ClStripServiceClient_StepSelected_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.StepSelected*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceClient_StepSelected_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_CallOptions_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.StepSelected(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.CallOptions)">
StepSelected(Empty, CallOptions)
</h3>
<div class="markdown level1 summary"><p>data returned if step selected.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual AsyncServerStreamingCall&lt;DictionaryStep&gt; StepSelected(Empty request, CallOptions options)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The request to send to the server.</p>
</dd>
<dt><code>options</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/CallOptions.cs">CallOptions</a></dt>
<dd><p>The options for the call.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/AsyncServerStreamingCall.cs">AsyncServerStreamingCall</a>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</dt>
<dd><p>The call object.</p>
</dd>
</dl>
<a id="Hi_Grpcs_ClStripService_ClStripServiceClient_StepSelected_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.StepSelected*"></a>
<h3 id="Hi_Grpcs_ClStripService_ClStripServiceClient_StepSelected_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_Metadata_System_Nullable_System_DateTime__System_Threading_CancellationToken_" data-uid="Hi.Grpcs.ClStripService.ClStripServiceClient.StepSelected(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.Metadata,System.Nullable{System.DateTime},System.Threading.CancellationToken)">
StepSelected(Empty, Metadata, DateTime?, CancellationToken)
</h3>
<div class="markdown level1 summary"><p>data returned if step selected.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual AsyncServerStreamingCall&lt;DictionaryStep&gt; StepSelected(Empty request, Metadata headers = null, DateTime? deadline = null, CancellationToken cancellationToken = default)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The request to send to the server.</p>
</dd>
<dt><code>headers</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/Metadata.cs">Metadata</a></dt>
<dd><p>The initial metadata to send with the call. This parameter is optional.</p>
</dd>
<dt><code>deadline</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.datetime">DateTime</a>?</dt>
<dd><p>An optional deadline for the call. The call will be cancelled if deadline is hit.</p>
</dd>
<dt><code>cancellationToken</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.cancellationtoken">CancellationToken</a></dt>
<dd><p>An optional token for canceling the call.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/AsyncServerStreamingCall.cs">AsyncServerStreamingCall</a>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</dt>
<dd><p>The call object.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -1,212 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ClStripServiceReflection | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ClStripServiceReflection | HiAPI-C# 2025 ">
<meta name="description" content="Holder for reflection information generated from Grpcs/ClStripService.proto">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs.ClStripServiceReflection">
<h1 id="Hi_Grpcs_ClStripServiceReflection" data-uid="Hi.Grpcs.ClStripServiceReflection" class="text-break">
Class ClStripServiceReflection
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
</div>
<div class="markdown summary"><p>Holder for reflection information generated from Grpcs/ClStripService.proto</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class ClStripServiceReflection</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">ClStripServiceReflection</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 class="section" id="properties">Properties
</h2>
<a id="Hi_Grpcs_ClStripServiceReflection_Descriptor_" data-uid="Hi.Grpcs.ClStripServiceReflection.Descriptor*"></a>
<h3 id="Hi_Grpcs_ClStripServiceReflection_Descriptor" data-uid="Hi.Grpcs.ClStripServiceReflection.Descriptor">
Descriptor
</h3>
<div class="markdown level1 summary"><p>File descriptor for Grpcs/ClStripService.proto</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static FileDescriptor Descriptor { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">FileDescriptor</span></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>

View File

@ -1,333 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class ClStripServiceRunner | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ClStripServiceRunner | HiAPI-C# 2025 ">
<meta name="description" content="Service runner for the ClStrip gRPC service.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs.ClStripServiceRunner">
<h1 id="Hi_Grpcs_ClStripServiceRunner" data-uid="Hi.Grpcs.ClStripServiceRunner" class="text-break">
Class ClStripServiceRunner
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
</div>
<div class="markdown summary"><p>Service runner for the ClStrip gRPC service.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class ClStripServiceRunner : ClStripService.ClStripServiceBase</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><a class="xref" href="Hi.Grpcs.ClStripService.html">ClStripService</a>.<a class="xref" href="Hi.Grpcs.ClStripService.ClStripServiceBase.html">ClStripServiceBase</a></div>
<div><span class="xref">ClStripServiceRunner</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>
<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&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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_Grpcs_ClStripServiceRunner__ctor_" data-uid="Hi.Grpcs.ClStripServiceRunner.#ctor*"></a>
<h3 id="Hi_Grpcs_ClStripServiceRunner__ctor_Hi_MachiningProcs_LocalProjectService_" data-uid="Hi.Grpcs.ClStripServiceRunner.#ctor(Hi.MachiningProcs.LocalProjectService)">
ClStripServiceRunner(LocalProjectService)
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance of the <a class="xref" href="Hi.Grpcs.ClStripServiceRunner.html">ClStripServiceRunner</a> class.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public ClStripServiceRunner(LocalProjectService machiningProjectHost)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>machiningProjectHost</code> <a class="xref" href="Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a></dt>
<dd><p>Function to provide access to the current MachiningProject instance</p>
</dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_Grpcs_ClStripServiceRunner_StepRan_" data-uid="Hi.Grpcs.ClStripServiceRunner.StepRan*"></a>
<h3 id="Hi_Grpcs_ClStripServiceRunner_StepRan_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_IServerStreamWriter_Hi_Grpcs_DictionaryStep__Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.ClStripServiceRunner.StepRan(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.IServerStreamWriter{Hi.Grpcs.DictionaryStep},Grpc.Core.ServerCallContext)">
StepRan(Empty, IServerStreamWriter&lt;DictionaryStep&gt;, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>Streams step data as steps are executed.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override Task StepRan(Empty request, IServerStreamWriter&lt;DictionaryStep&gt; responseStream, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>Empty request</p>
</dd>
<dt><code>responseStream</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/IServerStreamWriter.cs">IServerStreamWriter</a>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</dt>
<dd><p>Stream to write step data to</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>Server call context</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task">Task</a></dt>
<dd><p>Task representing the asynchronous operation</p>
</dd>
</dl>
<a id="Hi_Grpcs_ClStripServiceRunner_StepSelected_" data-uid="Hi.Grpcs.ClStripServiceRunner.StepSelected*"></a>
<h3 id="Hi_Grpcs_ClStripServiceRunner_StepSelected_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_IServerStreamWriter_Hi_Grpcs_DictionaryStep__Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.ClStripServiceRunner.StepSelected(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.IServerStreamWriter{Hi.Grpcs.DictionaryStep},Grpc.Core.ServerCallContext)">
StepSelected(Empty, IServerStreamWriter&lt;DictionaryStep&gt;, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>Streams step data when a step is selected in the UI.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override Task StepSelected(Empty request, IServerStreamWriter&lt;DictionaryStep&gt; responseStream, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>Empty request</p>
</dd>
<dt><code>responseStream</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/IServerStreamWriter.cs">IServerStreamWriter</a>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</dt>
<dd><p>Stream to write step data to</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>Server call context</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task">Task</a></dt>
<dd><p>Task representing the asynchronous operation</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -1,710 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class DictionaryStep | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class DictionaryStep | HiAPI-C# 2025 ">
<meta name="description" content="step which data type is dictionary">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs.DictionaryStep">
<h1 id="Hi_Grpcs_DictionaryStep" data-uid="Hi.Grpcs.DictionaryStep" class="text-break">
Class DictionaryStep
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
</div>
<div class="markdown summary"><p>step which data type is dictionary</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public sealed class DictionaryStep : IMessage&lt;DictionaryStep&gt;, IEquatable&lt;DictionaryStep&gt;, IDeepCloneable&lt;DictionaryStep&gt;, IBufferMessage, IMessage</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">DictionaryStep</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><span class="xref">IMessage</span>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</div>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iequatable-1">IEquatable</a>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</div>
<div><span class="xref">IDeepCloneable</span>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</div>
<div><span class="xref">IBufferMessage</span></div>
<div><span class="xref">IMessage</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-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.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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_Grpcs_DictionaryStep__ctor_" data-uid="Hi.Grpcs.DictionaryStep.#ctor*"></a>
<h3 id="Hi_Grpcs_DictionaryStep__ctor" data-uid="Hi.Grpcs.DictionaryStep.#ctor">
DictionaryStep()
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public DictionaryStep()</code></pre>
</div>
<a id="Hi_Grpcs_DictionaryStep__ctor_" data-uid="Hi.Grpcs.DictionaryStep.#ctor*"></a>
<h3 id="Hi_Grpcs_DictionaryStep__ctor_Hi_Grpcs_DictionaryStep_" data-uid="Hi.Grpcs.DictionaryStep.#ctor(Hi.Grpcs.DictionaryStep)">
DictionaryStep(DictionaryStep)
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public DictionaryStep(DictionaryStep other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="fields">Fields
</h2>
<h3 id="Hi_Grpcs_DictionaryStep_DictionaryFieldNumber" data-uid="Hi.Grpcs.DictionaryStep.DictionaryFieldNumber">
DictionaryFieldNumber
</h3>
<div class="markdown level1 summary"><p>Field number for the &ldquo;Dictionary&rdquo; field.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const int DictionaryFieldNumber = 1</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_Grpcs_DictionaryStep_Descriptor_" data-uid="Hi.Grpcs.DictionaryStep.Descriptor*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_Descriptor" data-uid="Hi.Grpcs.DictionaryStep.Descriptor">
Descriptor
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static MessageDescriptor Descriptor { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">MessageDescriptor</span></dt>
<dd></dd>
</dl>
<a id="Hi_Grpcs_DictionaryStep_Dictionary_" data-uid="Hi.Grpcs.DictionaryStep.Dictionary*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_Dictionary" data-uid="Hi.Grpcs.DictionaryStep.Dictionary">
Dictionary
</h3>
<div class="markdown level1 summary"><p>all data in dictionary type.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public MapField&lt;string, string&gt; Dictionary { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">MapField</span>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_Grpcs_DictionaryStep_Parser_" data-uid="Hi.Grpcs.DictionaryStep.Parser*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_Parser" data-uid="Hi.Grpcs.DictionaryStep.Parser">
Parser
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static MessageParser&lt;DictionaryStep&gt; Parser { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">MessageParser</span>&lt;<a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a>&gt;</dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_Grpcs_DictionaryStep_CalculateSize_" data-uid="Hi.Grpcs.DictionaryStep.CalculateSize*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_CalculateSize" data-uid="Hi.Grpcs.DictionaryStep.CalculateSize">
CalculateSize()
</h3>
<div class="markdown level1 summary"><p>Calculates the size of this message in Protocol Buffer wire format, in bytes.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int CalculateSize()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>The number of bytes required to write this message
to a coded output stream.</p>
</dd>
</dl>
<a id="Hi_Grpcs_DictionaryStep_Clone_" data-uid="Hi.Grpcs.DictionaryStep.Clone*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_Clone" data-uid="Hi.Grpcs.DictionaryStep.Clone">
Clone()
</h3>
<div class="markdown level1 summary"><p>Creates a deep clone of this object.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public DictionaryStep Clone()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a></dt>
<dd><p>A deep clone of this object.</p>
</dd>
</dl>
<a id="Hi_Grpcs_DictionaryStep_Equals_" data-uid="Hi.Grpcs.DictionaryStep.Equals*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_Equals_Hi_Grpcs_DictionaryStep_" data-uid="Hi.Grpcs.DictionaryStep.Equals(Hi.Grpcs.DictionaryStep)">
Equals(DictionaryStep)
</h3>
<div class="markdown level1 summary"><p>Indicates whether the current object is equal to another object of the same type.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool Equals(DictionaryStep other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a></dt>
<dd><p>An object to compare with this object.</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><a href="https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool">true</a> if the current object is equal to the <code class="paramref">other</code> parameter; otherwise, <a href="https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool">false</a>.</p>
</dd>
</dl>
<a id="Hi_Grpcs_DictionaryStep_Equals_" data-uid="Hi.Grpcs.DictionaryStep.Equals*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_Equals_System_Object_" data-uid="Hi.Grpcs.DictionaryStep.Equals(System.Object)">
Equals(object)
</h3>
<div class="markdown level1 summary"><p>Determines whether the specified object is equal to the current object.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override bool Equals(object other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</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.boolean">bool</a></dt>
<dd><p><a href="https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool">true</a> if the specified object is equal to the current object; otherwise, <a href="https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/bool">false</a>.</p>
</dd>
</dl>
<a id="Hi_Grpcs_DictionaryStep_GetHashCode_" data-uid="Hi.Grpcs.DictionaryStep.GetHashCode*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_GetHashCode" data-uid="Hi.Grpcs.DictionaryStep.GetHashCode">
GetHashCode()
</h3>
<div class="markdown level1 summary"><p>Serves as the default hash function.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override int GetHashCode()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>A hash code for the current object.</p>
</dd>
</dl>
<a id="Hi_Grpcs_DictionaryStep_MergeFrom_" data-uid="Hi.Grpcs.DictionaryStep.MergeFrom*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_MergeFrom_Google_Protobuf_CodedInputStream_" data-uid="Hi.Grpcs.DictionaryStep.MergeFrom(Google.Protobuf.CodedInputStream)">
MergeFrom(CodedInputStream)
</h3>
<div class="markdown level1 summary"><p>Merges the data from the specified coded input stream with the current message.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void MergeFrom(CodedInputStream input)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>input</code> <span class="xref">CodedInputStream</span></dt>
<dd></dd>
</dl>
<h4 class="section" id="Hi_Grpcs_DictionaryStep_MergeFrom_Google_Protobuf_CodedInputStream__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>See the user guide for precise merge semantics.</p>
</div>
<a id="Hi_Grpcs_DictionaryStep_MergeFrom_" data-uid="Hi.Grpcs.DictionaryStep.MergeFrom*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_MergeFrom_Hi_Grpcs_DictionaryStep_" data-uid="Hi.Grpcs.DictionaryStep.MergeFrom(Hi.Grpcs.DictionaryStep)">
MergeFrom(DictionaryStep)
</h3>
<div class="markdown level1 summary"><p>Merges the given message into this one.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void MergeFrom(DictionaryStep other)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>other</code> <a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a></dt>
<dd></dd>
</dl>
<h4 class="section" id="Hi_Grpcs_DictionaryStep_MergeFrom_Hi_Grpcs_DictionaryStep__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>See the user guide for precise merge semantics.</p>
</div>
<a id="Hi_Grpcs_DictionaryStep_ToString_" data-uid="Hi.Grpcs.DictionaryStep.ToString*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_ToString" data-uid="Hi.Grpcs.DictionaryStep.ToString">
ToString()
</h3>
<div class="markdown level1 summary"><p>Returns a string that represents the current object.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override string ToString()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>A string that represents the current object.</p>
</dd>
</dl>
<a id="Hi_Grpcs_DictionaryStep_WriteTo_" data-uid="Hi.Grpcs.DictionaryStep.WriteTo*"></a>
<h3 id="Hi_Grpcs_DictionaryStep_WriteTo_Google_Protobuf_CodedOutputStream_" data-uid="Hi.Grpcs.DictionaryStep.WriteTo(Google.Protobuf.CodedOutputStream)">
WriteTo(CodedOutputStream)
</h3>
<div class="markdown level1 summary"><p>Writes the data to the given coded output stream.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void WriteTo(CodedOutputStream output)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>output</code> <span class="xref">CodedOutputStream</span></dt>
<dd><p>Coded output stream to write the data to. Must not be null.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -1,380 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class PlayerService.PlayerServiceBase | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class PlayerService.PlayerServiceBase | HiAPI-C# 2025 ">
<meta name="description" content="Base class for server-side implementations of PlayerService">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs.PlayerService.PlayerServiceBase">
<h1 id="Hi_Grpcs_PlayerService_PlayerServiceBase" data-uid="Hi.Grpcs.PlayerService.PlayerServiceBase" class="text-break">
Class PlayerService.PlayerServiceBase
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
</div>
<div class="markdown summary"><p>Base class for server-side implementations of PlayerService</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[BindServiceMethod(typeof(PlayerService), &quot;BindService&quot;)]
public abstract class PlayerService.PlayerServiceBase</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">PlayerService.PlayerServiceBase</span></div>
</dd>
</dl>
<dl class="typelist derived">
<dt>Derived</dt>
<dd>
<div><a class="xref" href="Hi.Grpcs.PlayerServiceRunner.html">PlayerServiceRunner</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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="methods">Methods
</h2>
<a id="Hi_Grpcs_PlayerService_PlayerServiceBase_Pause_" data-uid="Hi.Grpcs.PlayerService.PlayerServiceBase.Pause*"></a>
<h3 id="Hi_Grpcs_PlayerService_PlayerServiceBase_Pause_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.PlayerService.PlayerServiceBase.Pause(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.ServerCallContext)">
Pause(Empty, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>Pause file playing if playing; otherwise do nothing.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual Task&lt;Empty&gt; Pause(Empty request, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The request received from the client.</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>The context of the server-side call handler being invoked.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<span class="xref">Empty</span>&gt;</dt>
<dd><p>The response to send back to the client (wrapped by a task).</p>
</dd>
</dl>
<a id="Hi_Grpcs_PlayerService_PlayerServiceBase_Reset_" data-uid="Hi.Grpcs.PlayerService.PlayerServiceBase.Reset*"></a>
<h3 id="Hi_Grpcs_PlayerService_PlayerServiceBase_Reset_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.PlayerService.PlayerServiceBase.Reset(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.ServerCallContext)">
Reset(Empty, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>Reset file player to the state as before running Start function.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual Task&lt;Empty&gt; Reset(Empty request, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The request received from the client.</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>The context of the server-side call handler being invoked.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<span class="xref">Empty</span>&gt;</dt>
<dd><p>The response to send back to the client (wrapped by a task).</p>
</dd>
</dl>
<a id="Hi_Grpcs_PlayerService_PlayerServiceBase_Resume_" data-uid="Hi.Grpcs.PlayerService.PlayerServiceBase.Resume*"></a>
<h3 id="Hi_Grpcs_PlayerService_PlayerServiceBase_Resume_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.PlayerService.PlayerServiceBase.Resume(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.ServerCallContext)">
Resume(Empty, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>Resume file playing if paused; otherwise do nothing.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual Task&lt;Empty&gt; Resume(Empty request, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The request received from the client.</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>The context of the server-side call handler being invoked.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<span class="xref">Empty</span>&gt;</dt>
<dd><p>The response to send back to the client (wrapped by a task).</p>
</dd>
</dl>
<a id="Hi_Grpcs_PlayerService_PlayerServiceBase_Start_" data-uid="Hi.Grpcs.PlayerService.PlayerServiceBase.Start*"></a>
<h3 id="Hi_Grpcs_PlayerService_PlayerServiceBase_Start_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.PlayerService.PlayerServiceBase.Start(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.ServerCallContext)">
Start(Empty, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>Start file playing.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual Task&lt;Empty&gt; Start(Empty request, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The request received from the client.</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>The context of the server-side call handler being invoked.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<span class="xref">Empty</span>&gt;</dt>
<dd><p>The response to send back to the client (wrapped by a task).</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -1,212 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class PlayerServiceReflection | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class PlayerServiceReflection | HiAPI-C# 2025 ">
<meta name="description" content="Holder for reflection information generated from Grpcs/PlayerService.proto">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs.PlayerServiceReflection">
<h1 id="Hi_Grpcs_PlayerServiceReflection" data-uid="Hi.Grpcs.PlayerServiceReflection" class="text-break">
Class PlayerServiceReflection
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
</div>
<div class="markdown summary"><p>Holder for reflection information generated from Grpcs/PlayerService.proto</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class PlayerServiceReflection</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">PlayerServiceReflection</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 class="section" id="properties">Properties
</h2>
<a id="Hi_Grpcs_PlayerServiceReflection_Descriptor_" data-uid="Hi.Grpcs.PlayerServiceReflection.Descriptor*"></a>
<h3 id="Hi_Grpcs_PlayerServiceReflection_Descriptor" data-uid="Hi.Grpcs.PlayerServiceReflection.Descriptor">
Descriptor
</h3>
<div class="markdown level1 summary"><p>File descriptor for Grpcs/PlayerService.proto</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static FileDescriptor Descriptor { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">FileDescriptor</span></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>

View File

@ -1,177 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace Hi.Grpcs | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace Hi.Grpcs | HiAPI-C# 2025 ">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs">
<h1 id="Hi_Grpcs" data-uid="Hi.Grpcs" class="text-break">Namespace Hi.Grpcs</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.ClStripService.html">ClStripService</a></dt>
<dd><p>milling process service based on dictionary data type.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.ClStripService.ClStripServiceBase.html">ClStripService.ClStripServiceBase</a></dt>
<dd><p>Base class for server-side implementations of ClStripService</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.ClStripService.ClStripServiceClient.html">ClStripService.ClStripServiceClient</a></dt>
<dd><p>Client for ClStripService</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.ClStripServiceReflection.html">ClStripServiceReflection</a></dt>
<dd><p>Holder for reflection information generated from Grpcs/ClStripService.proto</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.ClStripServiceRunner.html">ClStripServiceRunner</a></dt>
<dd><p>Service runner for the ClStrip gRPC service.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.DictionaryStep.html">DictionaryStep</a></dt>
<dd><p>step which data type is dictionary</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.PlayerService.html">PlayerService</a></dt>
<dd><p>numerical file player service.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.PlayerService.PlayerServiceBase.html">PlayerService.PlayerServiceBase</a></dt>
<dd><p>Base class for server-side implementations of PlayerService</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.PlayerService.PlayerServiceClient.html">PlayerService.PlayerServiceClient</a></dt>
<dd><p>Client for PlayerService</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.PlayerServiceReflection.html">PlayerServiceReflection</a></dt>
<dd><p>Holder for reflection information generated from Grpcs/PlayerService.proto</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Grpcs.PlayerServiceRunner.html">PlayerServiceRunner</a></dt>
<dd><p>Service runner for the Player gRPC service.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -155,6 +155,9 @@ Interface IMachiningEquipment
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_AlignWorkpieceProgramZeroToIso_Hi_Machining_MachiningEquipmentUtils_IMachiningEquipment_Hi_Geom_Vec3d_">MachiningEquipmentUtil.AlignWorkpieceProgramZeroToIso(IMachiningEquipment, Vec3d)</a>
</div>
<div>
<a class="xref" href="Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_GetIsoCoordinatePosition_Hi_Machining_MachiningEquipmentUtils_IMachiningEquipment_Hi_Geom_Vec3d_">MachiningEquipmentUtil.GetIsoCoordinatePosition(IMachiningEquipment, Vec3d)</a>
</div>

View File

@ -166,6 +166,9 @@ Class MachiningEquipment
<div>
<a class="xref" href="Hi.Disp.DispUtil.html#Hi_Disp_DispUtil_Display_Hi_Disp_IDisplayee_Hi_Disp_Bind_Hi_Geom_Mat4d_">DispUtil.Display(IDisplayee, Bind, Mat4d)</a>
</div>
<div>
<a class="xref" href="Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_AlignWorkpieceProgramZeroToIso_Hi_Machining_MachiningEquipmentUtils_IMachiningEquipment_Hi_Geom_Vec3d_">MachiningEquipmentUtil.AlignWorkpieceProgramZeroToIso(IMachiningEquipment, Vec3d)</a>
</div>
<div>
<a class="xref" href="Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_GetIsoCoordinatePosition_Hi_Machining_MachiningEquipmentUtils_IMachiningEquipment_Hi_Geom_Vec3d_">MachiningEquipmentUtil.GetIsoCoordinatePosition(IMachiningEquipment, Vec3d)</a>
</div>

View File

@ -153,6 +153,56 @@ Class MachiningEquipmentUtil
</h2>
<a id="Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_AlignWorkpieceProgramZeroToIso_" data-uid="Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.AlignWorkpieceProgramZeroToIso*"></a>
<h3 id="Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_AlignWorkpieceProgramZeroToIso_Hi_Machining_MachiningEquipmentUtils_IMachiningEquipment_Hi_Geom_Vec3d_" data-uid="Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.AlignWorkpieceProgramZeroToIso(Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment,Hi.Geom.Vec3d)">
AlignWorkpieceProgramZeroToIso(IMachiningEquipment, Vec3d)
</h3>
<div class="markdown level1 summary"><p>Places <a class="xref" href="Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_IMachiningEquipment_Fixture">Fixture</a> under the kinematic
chain so that <a class="xref" href="Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_ProgramZeroAnchor">ProgramZeroAnchor</a> coincides with
the world position the spindle reaches when the machine coordinate
equals <code class="paramref">isoOffset</code> (a G54/G55/&hellip; entry).</p>
<p>Other anchors (<a class="xref" href="Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_FixtureBuckle">FixtureBuckle</a>,
<a class="xref" href="Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_ProgramZeroAnchor">ProgramZeroAnchor</a>,
<a class="xref" href="Hi.NcMech.Fixtures.Fixture.html#Hi_NcMech_Fixtures_Fixture_WorkpieceBuckle">WorkpieceBuckle</a>) must already be at their intended
geometric positions (typically via the buckle &ldquo;general rule&rdquo;:
bottom/top centers of geom). Only
<a class="xref" href="Hi.NcMech.Fixtures.Fixture.html#Hi_NcMech_Fixtures_Fixture_GeomToTableTransformer">GeomToTableTransformer</a> is mutated.</p>
<p>Returns the assigned translation, or <code>null</code> when workpiece /
fixture / Xyzabc machine tool is missing.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static Vec3d AlignWorkpieceProgramZeroToIso(this IMachiningEquipment equipment, Vec3d isoOffset)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>equipment</code> <a class="xref" href="Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html">IMachiningEquipment</a></dt>
<dd></dd>
<dt><code>isoOffset</code> <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a></dt>
<dd></dd>
</dl>
<a id="Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_GetIsoCoordinatePosition_" data-uid="Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.GetIsoCoordinatePosition*"></a>
<h3 id="Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_GetIsoCoordinatePosition_Hi_Machining_MachiningEquipmentUtils_IMachiningEquipment_Hi_Geom_Vec3d_" data-uid="Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.GetIsoCoordinatePosition(Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment,Hi.Geom.Vec3d)">

View File

@ -581,6 +581,41 @@ Class MachiningProject
<a id="Hi_MachiningProcs_MachiningProject_SoftNcRunnerFile_" data-uid="Hi.MachiningProcs.MachiningProject.SoftNcRunnerFile*"></a>
<h3 id="Hi_MachiningProcs_MachiningProject_SoftNcRunnerFile" data-uid="Hi.MachiningProcs.MachiningProject.SoftNcRunnerFile">
SoftNcRunnerFile
</h3>
<div class="markdown level1 summary"><p>Gets or sets the project-relative file path of the <a class="xref" href="Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_SoftNcRunner">SoftNcRunner</a>
XML. When non-null, <a class="xref" href="Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_MakeXmlSource_System_String_System_String_System_Boolean_">MakeXmlSource(string, string, bool)</a> writes the runner to this
side file and embeds a file reference in the project XML; when null the
runner is inlined. Mirrors <a class="xref" href="Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_MachiningChainFile">MachiningChainFile</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string SoftNcRunnerFile { 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.string">string</a></dt>
<dd></dd>
</dl>
<a id="Hi_MachiningProcs_MachiningProject_TimeMapping_" data-uid="Hi.MachiningProcs.MachiningProject.TimeMapping*"></a>
<h3 id="Hi_MachiningProcs_MachiningProject_TimeMapping" data-uid="Hi.MachiningProcs.MachiningProject.TimeMapping">

View File

@ -156,9 +156,6 @@ Class MachiningProjectDisplayee
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Disp.DispUtil.html#Hi_Disp_DispUtil_Display_Hi_Disp_IDisplayee_Hi_Disp_Bind_Hi_Geom_Mat4d_">DispUtil.Display(IDisplayee, Bind, Mat4d)</a>
</div>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(TSelf, params object[])</a>
</div>
@ -168,12 +165,6 @@ Class MachiningProjectDisplayee
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Mech.Topo.TopoUtil.html#Hi_Mech_Topo_TopoUtil_Display_Hi_Mech_Topo_IGetAnchor_Hi_Disp_Bind_System_Collections_Generic_Dictionary_Hi_Mech_Topo_Anchor_Hi_Geom_Mat4d__">TopoUtil.Display(IGetAnchor, Bind, Dictionary&lt;Anchor, Mat4d&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Mech.Topo.TopoUtil.html#Hi_Mech_Topo_TopoUtil_ExpandToBox3d_Hi_Mech_Topo_IGetAnchor_Hi_Geom_Box3d_System_Collections_Generic_Dictionary_Hi_Mech_Topo_Anchor_Hi_Geom_Mat4d__">TopoUtil.ExpandToBox3d(IGetAnchor, Box3d, Dictionary&lt;Anchor, Mat4d&gt;)</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>

View File

@ -2292,6 +2292,49 @@ public FeedPerCycleMachiningMotionResolution AdjustedFeedPerCycle(double scale,
<a id="Hi_MachiningProcs_SessionShell_AlignWorkpieceProgramZeroToIso_" data-uid="Hi.MachiningProcs.SessionShell.AlignWorkpieceProgramZeroToIso*"></a>
<h3 id="Hi_MachiningProcs_SessionShell_AlignWorkpieceProgramZeroToIso_System_String_" data-uid="Hi.MachiningProcs.SessionShell.AlignWorkpieceProgramZeroToIso(System.String)">
AlignWorkpieceProgramZeroToIso(string)
</h3>
<div class="markdown level1 summary"><p>Places workpiece + fixture so that <a class="xref" href="Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_ProgramZeroAnchor">ProgramZeroAnchor</a>
coincides with the world position the spindle reaches when the machine
coordinate equals <code class="paramref">isoCoordId</code>'s entry (G54/G55/...).
The buckle anchors must already be set per the general rule (typically by
the project XML): <a class="xref" href="Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_FixtureBuckle">FixtureBuckle</a> at the bottom
center of the workpiece geom, <a class="xref" href="Hi.NcMech.Fixtures.Fixture.html#Hi_NcMech_Fixtures_Fixture_WorkpieceBuckle">WorkpieceBuckle</a> at the
top center of the fixture geom, <a class="xref" href="Hi.NcMech.Workpieces.Workpiece.html#Hi_NcMech_Workpieces_Workpiece_ProgramZeroAnchor">ProgramZeroAnchor</a>
at the workpiece-geom top center (or any chosen tip). Only
<a class="xref" href="Hi.NcMech.Fixtures.Fixture.html#Hi_NcMech_Fixtures_Fixture_GeomToTableTransformer">GeomToTableTransformer</a> is mutated. Delegates topology
math to <a class="xref" href="Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_AlignWorkpieceProgramZeroToIso_Hi_Machining_MachiningEquipmentUtils_IMachiningEquipment_Hi_Geom_Vec3d_">AlignWorkpieceProgramZeroToIso(IMachiningEquipment, Vec3d)</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[JsAce]
public void AlignWorkpieceProgramZeroToIso(string isoCoordId)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>isoCoordId</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>ID into the IsoCoordinateTable, e.g. <code>&ldquo;G54&rdquo;</code>.</p>
</dd>
</dl>
<a id="Hi_MachiningProcs_SessionShell_AppendMessagesToFile_" data-uid="Hi.MachiningProcs.SessionShell.AppendMessagesToFile*"></a>
<h3 id="Hi_MachiningProcs_SessionShell_AppendMessagesToFile_System_String_System_String___" data-uid="Hi.MachiningProcs.SessionShell.AppendMessagesToFile(System.String,System.String[])">

View File

@ -2,11 +2,11 @@
<html>
<head>
<meta charset="utf-8">
<title>Class UniversalNcService.UniversalNcServiceBase | HiAPI-C# 2025 </title>
<title>Interface IStepPropertyAccessHost | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class UniversalNcService.UniversalNcServiceBase | HiAPI-C# 2025 ">
<meta name="title" content="Interface IStepPropertyAccessHost | HiAPI-C# 2025 ">
<meta name="description" content="Base class for server-side implementations of UniversalNcService">
<meta name="description" content="Narrow host contract for accessing the step-variable registry and registering new step variables. Exposed as a dedicated surface so pipelines that only need step-variable wiring (e.g. ) do not have to depend on the broader .">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -84,70 +84,49 @@
<nav id="breadcrumb"></nav>
</div>
<article data-uid="numerical.UniversalNcService.UniversalNcServiceBase">
<article data-uid="Hi.MachiningSteps.IStepPropertyAccessHost">
<h1 id="numerical_UniversalNcService_UniversalNcServiceBase" data-uid="numerical.UniversalNcService.UniversalNcServiceBase" class="text-break">
Class UniversalNcService.UniversalNcServiceBase
<h1 id="Hi_MachiningSteps_IStepPropertyAccessHost" data-uid="Hi.MachiningSteps.IStepPropertyAccessHost" class="text-break">
Interface IStepPropertyAccessHost
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="numerical.html">numerical</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiGeom.dll</dd></dl>
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.MachiningSteps.html">MachiningSteps</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Base class for server-side implementations of UniversalNcService</p>
<div class="markdown summary"><p>Narrow host contract for accessing the step-variable registry and registering
new step variables. Exposed as a dedicated surface so pipelines that only
need step-variable wiring (e.g. <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a>)
do not have to depend on the broader <a class="xref" href="Hi.MachiningSteps.IMachiningService.html">IMachiningService</a>.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[BindServiceMethod(typeof(UniversalNcService), &quot;BindService&quot;)]
public abstract class UniversalNcService.UniversalNcServiceBase</code></pre>
<pre><code class="lang-csharp hljs">public interface IStepPropertyAccessHost</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">UniversalNcService.UniversalNcServiceBase</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>
<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&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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>
@ -160,52 +139,91 @@ public abstract class UniversalNcService.UniversalNcServiceBase</code></pre>
<div>
<a class="xref" href="Hi.Parallels.LockUtil.html#Hi_Parallels_LockUtil_Lock_System_Object_">LockUtil.Lock(object)</a>
</div>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
</div>
</dd></dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_MachiningSteps_IStepPropertyAccessHost_StepPropertyAccessDictionary_" data-uid="Hi.MachiningSteps.IStepPropertyAccessHost.StepPropertyAccessDictionary*"></a>
<h3 id="Hi_MachiningSteps_IStepPropertyAccessHost_StepPropertyAccessDictionary" data-uid="Hi.MachiningSteps.IStepPropertyAccessHost.StepPropertyAccessDictionary">
StepPropertyAccessDictionary
</h3>
<div class="markdown level1 summary"><p>Dictionary of step-property accessors keyed by property name. Used by
CSV title-row processing to decide whether a column already maps to a
reserved step property; new columns are registered via
<a class="xref" href="Hi.MachiningSteps.IStepPropertyAccessHost.html#Hi_MachiningSteps_IStepPropertyAccessHost_RegisterStepVariable_System_String_System_String_System_String_System_String_System_Func_Hi_MachiningSteps_MachiningStep_System_Object__">RegisterStepVariable(string, string, string, string, Func&lt;MachiningStep, object&gt;)</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">ConcurrentDictionary&lt;string, PropertyAccess&lt;MachiningStep&gt;&gt; StepPropertyAccessDictionary { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.concurrent.concurrentdictionary-2">ConcurrentDictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="Hi.MachiningSteps.PropertyAccess-1.html">PropertyAccess</a>&lt;<a class="xref" href="Hi.MachiningSteps.MachiningStep.html">MachiningStep</a>&gt;&gt;</dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="numerical_UniversalNcService_UniversalNcServiceBase_GetNcStepGrpcCsvRowDictionary_" data-uid="numerical.UniversalNcService.UniversalNcServiceBase.GetNcStepGrpcCsvRowDictionary*"></a>
<a id="Hi_MachiningSteps_IStepPropertyAccessHost_RegisterStepVariable_" data-uid="Hi.MachiningSteps.IStepPropertyAccessHost.RegisterStepVariable*"></a>
<h3 id="numerical_UniversalNcService_UniversalNcServiceBase_GetNcStepGrpcCsvRowDictionary_numerical_GrpcNcStep_Grpc_Core_ServerCallContext_" data-uid="numerical.UniversalNcService.UniversalNcServiceBase.GetNcStepGrpcCsvRowDictionary(numerical.GrpcNcStep,Grpc.Core.ServerCallContext)">
GetNcStepGrpcCsvRowDictionary(GrpcNcStep, ServerCallContext)
<h3 id="Hi_MachiningSteps_IStepPropertyAccessHost_RegisterStepVariable_System_String_System_String_System_String_System_String_System_Func_Hi_MachiningSteps_MachiningStep_System_Object__" data-uid="Hi.MachiningSteps.IStepPropertyAccessHost.RegisterStepVariable(System.String,System.String,System.String,System.String,System.Func{Hi.MachiningSteps.MachiningStep,System.Object})">
RegisterStepVariable(string, string, string, string, Func&lt;MachiningStep, object&gt;)
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 summary"><p>Registers a step variable so downstream components (strip charts,
CSV exports, scripting) can read it from <a class="xref" href="Hi.MachiningSteps.MachiningStep.html">MachiningStep</a>.
Idempotent on <code class="paramref">key</code>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual Task&lt;GrpcNcStep&gt; GetNcStepGrpcCsvRowDictionary(GrpcNcStep request, ServerCallContext context)</code></pre>
<pre><code class="lang-csharp hljs">void RegisterStepVariable(string key, string name, string unit, string formatString, Func&lt;MachiningStep, object&gt; variableFunc = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <a class="xref" href="numerical.GrpcNcStep.html">GrpcNcStep</a></dt>
<dd></dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd></dd>
<dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Unique key.</p>
</dd>
<dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Human-readable name; may equal <code class="paramref">key</code>.</p>
</dd>
<dt><code>unit</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Physical unit name (<code>PhysicsUnit</code>); nullable.</p>
</dd>
<dt><code>formatString</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Display format string; nullable.</p>
</dd>
<dt><code>variableFunc</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;<a class="xref" href="Hi.MachiningSteps.MachiningStep.html">MachiningStep</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a>&gt;</dt>
<dd><p>Optional value extractor; nullable when the value comes from the step's flex dictionary.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<a class="xref" href="numerical.GrpcNcStep.html">GrpcNcStep</a>&gt;</dt>
<dd></dd>
</dl>

View File

@ -142,6 +142,14 @@ Interfaces
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningSteps.IMachiningService.html">IMachiningService</a></dt>
<dd><p>Represents a host interface for milling steps that provides access to milling equipment and related resources.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.MachiningSteps.IStepPropertyAccessHost.html">IStepPropertyAccessHost</a></dt>
<dd><p>Narrow host contract for accessing the step-variable registry and registering
new step variables. Exposed as a dedicated surface so pipelines that only
need step-variable wiring (e.g. <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a>)
do not have to depend on the broader <a class="xref" href="Hi.MachiningSteps.IMachiningService.html">IMachiningService</a>.</p>
</dd>
</dl>

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class CodeXyzabcMachineTool | HiAPI-C# 2025 ">
<meta name="description" content="For legacy compatible. Use instead.">
<meta name="description" content="This machine tool class helps very quick test by the code configuration. For general/end-user use, apply instead.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -97,7 +97,8 @@ Class CodeXyzabcMachineTool
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>For legacy compatible. Use <a class="xref" href="Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> instead.</p>
<div class="markdown summary"><p>This machine tool class helps very quick test by the code configuration.
For general/end-user use, apply <a class="xref" href="Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> instead.</p>
</div>
<div class="markdown conceptual"></div>

View File

@ -96,7 +96,8 @@ Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcMech.Xyzabc.CodeXyzabcMachineTool.html">CodeXyzabcMachineTool</a></dt>
<dd><p>For legacy compatible. Use <a class="xref" href="Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> instead.</p>
<dd><p>This machine tool class helps very quick test by the code configuration.
For general/end-user use, apply <a class="xref" href="Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> instead.</p>
</dd>
</dl>
<dl class="jumplist">

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FanucGotoIterationDependency | HiAPI-C# 2025 ">
<meta name="description" content="Watchdog for Fanuc Custom Macro B GOTO loops. Holds a limit (XML-persisted user config — the soft cap above which the upcoming FanucGotoSyntax stops firing and emits a warning) plus a runtime per-target hit counter ( — not serialised, cleared at session start by ). The dependency is syntax-managed: FanucGotoSyntax reads the limit, increments the counter, and decides whether to fire. There is no host Func provider — the dep is placed in rather than because nothing outside the syntax pipeline writes it; is a plain method call the runner invokes, not a host-wired Func. The counter key is (FileName, TargetN) where FileName is the source-level file path of the block containing the GOTO (the relative path form carried on — same form used by IndexedFileLine labels). Source-level keying means multiple inline invocations of the same subprogram pool their counts (they ARE the same source-code GOTO), while two different files with their own N100 stay isolated (they ARE different jumps). Default is 1000 — a runaway-loop guard, not a precise iteration budget. Legitimate macro loops (multi-hole drill matrices, calibration sweeps) sit well below this; truly infinite loops hit the limit fast. Projects with batch-style macros that legitimately need higher counts can raise the value in the project XML.">
<meta name="description" content="Watchdog for Fanuc Custom Macro B GOTO loops. Holds a limit (XML-persisted user config — the soft cap above which the upcoming FanucGotoSyntax stops firing and emits a warning) plus a runtime per-target hit counter ( — not serialised, cleared at session start by the sweep in ). The dependency is syntax-managed: FanucGotoSyntax reads the limit, increments the counter, and decides whether to fire. There is no host Func provider — the dep is placed in rather than because nothing outside the syntax pipeline writes it; is the session-init hook the runner invokes through , not a host-wired Func. The counter key is (FileName, TargetN) where FileName is the source-level file path of the block containing the GOTO (the relative path form carried on — same form used by IndexedFileLine labels). Source-level keying means multiple inline invocations of the same subprogram pool their counts (they ARE the same source-code GOTO), while two different files with their own N100 stay isolated (they ARE different jumps). Default is 1000 — a runaway-loop guard, not a precise iteration budget. Legitimate macro loops (multi-hole drill matrices, calibration sweeps) sit well below this; truly infinite loops hit the limit fast. Projects with batch-style macros that legitimately need higher counts can raise the value in the project XML.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -102,7 +102,8 @@ Class FanucGotoIterationDependency
the soft cap above which the upcoming
<code>FanucGotoSyntax</code> stops firing and emits a warning) plus a
runtime per-target hit counter (<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_CountByTarget">CountByTarget</a> — not
serialised, cleared at session start by
serialised, cleared at session start by the
<a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a> sweep in
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a>).</p>
<p>
The dependency is syntax-managed: <code>FanucGotoSyntax</code> reads the
@ -110,8 +111,9 @@ limit, increments the counter, and decides whether to fire. There is
no host <code>Func</code> provider — the dep is placed in
<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.html">Hi.NcParsers.Dependencys.Fanuc</a> rather than
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.html">Hi.NcParsers.Dependencys.SystemWired</a> because nothing outside the
syntax pipeline writes it; <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reset">Reset()</a> is a plain method call
the runner invokes, not a host-wired Func.
syntax pipeline writes it; <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_OnSessionReset">OnSessionReset()</a> is the
session-init hook the runner invokes through
<a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a>, not a host-wired Func.
</p>
<p>
The counter key is <code>(FileName, TargetN)</code> where <code>FileName</code>
@ -134,7 +136,7 @@ the project XML.
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class FanucGotoIterationDependency : INcDependency, IMakeXmlSource</code></pre>
<pre><code class="lang-csharp hljs">public class FanucGotoIterationDependency : INcDependency, IMakeXmlSource, ISessionResettable</code></pre>
</div>
@ -153,6 +155,7 @@ the project XML.
<dd>
<div><a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
<div><a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a></div>
</dd>
</dl>
@ -327,8 +330,8 @@ hit it fast.</p>
</h3>
<div class="markdown level1 summary"><p>Per-target hit counter keyed by <code>(FileName, TargetN)</code>.
Runtime-only; not serialised. Cleared by <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reset">Reset()</a> on
the session-init edge so a brand-preset runner reused across
Runtime-only; not serialised. Cleared by <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_OnSessionReset">OnSessionReset()</a>
on the session-init edge so a brand-preset runner reused across
sessions does not leak counts.</p>
</div>
<div class="markdown level1 conceptual"></div>
@ -477,6 +480,33 @@ Since the folder can be moving with the configuration file.</p>
<a id="Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_OnSessionReset_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.OnSessionReset*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_OnSessionReset" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.OnSessionReset">
OnSessionReset()
</h3>
<div class="markdown level1 summary"><p>Clears <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_CountByTarget">CountByTarget</a>; leaves <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_MaxIterationsPerTarget">MaxIterationsPerTarget</a> untouched.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void OnSessionReset()</code></pre>
</div>
<a id="Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reg_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reg*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reg(Hi.Common.XmlUtils.XFactory)">
@ -511,33 +541,6 @@ Since the folder can be moving with the configuration file.</p>
<a id="Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reset_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reset*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reset" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.Reset">
Reset()
</h3>
<div class="markdown level1 summary"><p>Clears <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_CountByTarget">CountByTarget</a>; leaves <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_MaxIterationsPerTarget">MaxIterationsPerTarget</a> untouched.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Reset()</code></pre>
</div>
</article>

View File

@ -0,0 +1,559 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class FanucWhileDoIterationDependency | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FanucWhileDoIterationDependency | HiAPI-C# 2025 ">
<meta name="description" content="Watchdog for Fanuc Custom Macro B WHILE/END m bounded loops. Sibling to with the same &amp;ldquo;soft-cap + runtime counter + session-init &amp;rdquo; shape, but kept as a separate dep (rather than sharing the GOTO bucket) so loop and jump iteration limits can be tuned independently and so diagnostic codes do not cross. The counter key is (FileName, LoopId) where FileName is the source-level file path of the WHILE/END pair (the relative path form carried on ). Source-level keying means multiple inline invocations of the same subprogram pool their counts (same source-code loop), while two different files each with their own WHILE DO 1 stay isolated. The consuming syntax () increments the counter at the END m reverse-jump step — not on the WHILE entry — so a loop that exits on first WHILE evaluation (condition false from the outset) consumes zero iterations. Above , the END m block emits a warning and suppresses the redirect; subsequent flow falls through past END. Default is 10000 — higher than the GOTO equivalent (1000) because WHILE/END is the legitimate iteration primitive that NcOpt-generated programs (drill grids, adaptive sweeps) depend on, and 1000 is too tight for those.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency">
<h1 id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency" class="text-break">
Class FanucWhileDoIterationDependency
</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.Dependencys.html">Dependencys</a>.<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.html">Fanuc</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Watchdog for Fanuc Custom Macro B WHILE/END m bounded loops. Sibling
to <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html">FanucGotoIterationDependency</a> with the same
&ldquo;soft-cap + runtime counter + session-init <a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a>&rdquo;
shape, but kept as a separate dep (rather than sharing the GOTO
bucket) so loop and jump iteration limits can be tuned independently
and so diagnostic codes do not cross.</p>
<p>
The counter key is <code>(FileName, LoopId)</code> where <code>FileName</code>
is the source-level file path of the WHILE/END pair (the relative
path form carried on <a class="xref" href="Hi.NcParsers.Sentence.html#Hi_NcParsers_Sentence_FilePath">FilePath</a>). Source-level
keying means multiple inline invocations of the same subprogram
pool their counts (same source-code loop), while two different files
each with their own <code>WHILE DO 1</code> stay isolated.
</p>
<p>
The consuming syntax (<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html">FanucWhileDoSyntax</a>)
increments the counter at the END m reverse-jump step — not on the
WHILE entry — so a loop that exits on first WHILE evaluation
(condition false from the outset) consumes zero iterations. Above
<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId">MaxIterationsPerLoopId</a>, the END m block emits a warning
and suppresses the redirect; subsequent flow falls through past END.
</p>
<p>
Default <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId">MaxIterationsPerLoopId</a> is 10000 — higher than
the GOTO equivalent (1000) because WHILE/END is the legitimate
iteration primitive that NcOpt-generated programs (drill grids,
adaptive sweeps) depend on, and 1000 is too tight for those.
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class FanucWhileDoIterationDependency : INcDependency, IMakeXmlSource, ISessionResettable</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">FanucWhileDoIterationDependency</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
<div><a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency__ctor_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.#ctor*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency__ctor" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.#ctor">
FanucWhileDoIterationDependency()
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance with the default limit and an empty counter.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public FanucWhileDoIterationDependency()</code></pre>
</div>
<a id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency__ctor_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.#ctor*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency__ctor_System_Xml_Linq_XElement_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.#ctor(System.Xml.Linq.XElement)">
FanucWhileDoIterationDependency(XElement)
</h3>
<div class="markdown level1 summary"><p>Loads <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId">MaxIterationsPerLoopId</a> from XML produced by <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MakeXmlSource_System_String_System_String_System_Boolean_">MakeXmlSource(string, string, bool)</a>; absent element falls back to <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_DefaultMaxIterationsPerLoopId">DefaultMaxIterationsPerLoopId</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public FanucWhileDoIterationDependency(XElement src)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>src</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>Root element named <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_XName">XName</a>.</p>
</dd>
</dl>
<h2 class="section" id="fields">Fields
</h2>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_DefaultMaxIterationsPerLoopId" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.DefaultMaxIterationsPerLoopId">
DefaultMaxIterationsPerLoopId
</h3>
<div class="markdown level1 summary"><p>Default for <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId">MaxIterationsPerLoopId</a>. Sized for
legitimate macro iteration (NcOpt drill grids, calibration
sweeps) while still catching runaway loops in a tractable time.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const int DefaultMaxIterationsPerLoopId = 10000</code></pre>
</div>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_CountByLoop_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.CountByLoop*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_CountByLoop" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.CountByLoop">
CountByLoop
</h3>
<div class="markdown level1 summary"><p>Per-loop hit counter keyed by <code>(FileName, LoopId)</code>.
Runtime-only; not serialised. Cleared by <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_OnSessionReset">OnSessionReset()</a>
on the session-init edge so a brand-preset runner reused across
sessions does not leak counts.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Dictionary&lt;(string FileName, int LoopId), int&gt; CountByLoop { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.int32-.filename">FileName</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.int32-.targetn">TargetN</a>), <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.MaxIterationsPerLoopId*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.MaxIterationsPerLoopId">
MaxIterationsPerLoopId
</h3>
<div class="markdown level1 summary"><p>Soft cap on consecutive END m reverse-jumps for any single
<code>(FileName, LoopId)</code> pair. Above this the END m block emits
<code>FanucWhileDo&ndash;IterationLimitExceeded</code> and suppresses the
redirect; flow falls through past END.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int MaxIterationsPerLoopId { 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.int32">int</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_XName_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.XName*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_XName" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name used to register this dependency with <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MakeXmlSource_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.MakeXmlSource*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
<div class="markdown level1 summary"><p>Creates an XML representation of the object.
This method may also generate additional resources such as related files.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The base directory for resolving relative paths</p>
</dd>
<dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The relative file path for the XML source</p>
</dd>
<dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>if true, the extended file creation is suppressed.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>An XML element representing the object's state</p>
</dd>
</dl>
<h4 class="section" id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The <code class="paramref">baseDirectory</code> is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.</p>
</div>
<a id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_OnSessionReset_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.OnSessionReset*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_OnSessionReset" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.OnSessionReset">
OnSessionReset()
</h3>
<div class="markdown level1 summary"><p>Clears <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_CountByLoop">CountByLoop</a>; leaves <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId">MaxIterationsPerLoopId</a> untouched.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void OnSessionReset()</code></pre>
</div>
<a id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_Reg_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.Reg*"></a>
<h3 id="Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Reg(XFactory factory = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>factory</code> <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -101,7 +101,8 @@ Classes
the soft cap above which the upcoming
<code>FanucGotoSyntax</code> stops firing and emits a warning) plus a
runtime per-target hit counter (<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_CountByTarget">CountByTarget</a> — not
serialised, cleared at session start by
serialised, cleared at session start by the
<a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a> sweep in
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a>).</p>
<p>
The dependency is syntax-managed: <code>FanucGotoSyntax</code> reads the
@ -109,8 +110,9 @@ limit, increments the counter, and decides whether to fire. There is
no host <code>Func</code> provider — the dep is placed in
<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.html">Hi.NcParsers.Dependencys.Fanuc</a> rather than
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.html">Hi.NcParsers.Dependencys.SystemWired</a> because nothing outside the
syntax pipeline writes it; <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_Reset">Reset()</a> is a plain method call
the runner invokes, not a host-wired Func.
syntax pipeline writes it; <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucGotoIterationDependency_OnSessionReset">OnSessionReset()</a> is the
session-init hook the runner invokes through
<a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a>, not a host-wired Func.
</p>
<p>
The counter key is <code>(FileName, TargetN)</code> where <code>FileName</code>
@ -174,6 +176,38 @@ long-lived data, only the Fanuc-style id addressing scheme. The
underlying <a class="xref" href="Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html">ToolOffsetTable</a> still lives in
<code>NcDependencyList</code> as the data dependency.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html">FanucWhileDoIterationDependency</a></dt>
<dd><p>Watchdog for Fanuc Custom Macro B WHILE/END m bounded loops. Sibling
to <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html">FanucGotoIterationDependency</a> with the same
&ldquo;soft-cap + runtime counter + session-init <a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a>&rdquo;
shape, but kept as a separate dep (rather than sharing the GOTO
bucket) so loop and jump iteration limits can be tuned independently
and so diagnostic codes do not cross.</p>
<p>
The counter key is <code>(FileName, LoopId)</code> where <code>FileName</code>
is the source-level file path of the WHILE/END pair (the relative
path form carried on <a class="xref" href="Hi.NcParsers.Sentence.html#Hi_NcParsers_Sentence_FilePath">FilePath</a>). Source-level
keying means multiple inline invocations of the same subprogram
pool their counts (same source-code loop), while two different files
each with their own <code>WHILE DO 1</code> stay isolated.
</p>
<p>
The consuming syntax (<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html">FanucWhileDoSyntax</a>)
increments the counter at the END m reverse-jump step — not on the
WHILE entry — so a loop that exits on first WHILE evaluation
(condition false from the outset) consumes zero iterations. Above
<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId">MaxIterationsPerLoopId</a>, the END m block emits a warning
and suppresses the redirect; subsequent flow falls through past END.
</p>
<p>
Default <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId">MaxIterationsPerLoopId</a> is 10000 — higher than
the GOTO equivalent (1000) because WHILE/END is the legitimate
iteration primitive that NcOpt-generated programs (drill grids,
adaptive sweeps) depend on, and 1000 is too tight for those.
</p>
</dd>
</dl>
<dl class="jumplist">

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FileIndexCounterDependency | HiAPI-C# 2025 ">
<meta name="description" content="Per-session monotonically-increasing file index allocator. Holds the counter as a private field; returns the next unused value and increments. rewinds to 0 — the owning calls on the same edge that initializes a fresh , so a controller power-reset clears both the syntax-piece pipeline and this counter in lock-step. Two consumers share one allocator: allocates one index per top-level NC file that streams through the runner. allocates a fresh index for each inlined subprogram invocation, including each L repetition — distinct indices ensure (FileIndex, LineIndex) pairs stay unique across overlapping subprogram line ranges. Holding the counter on this dependency rather than on avoids a duplicate source-of-truth: the dep is the single seam through which syntaxes reach the counter, and there is no third reader that would benefit from session-state visibility.">
<meta name="description" content="Per-session monotonically-increasing file index allocator. Holds the counter as a private field; returns the next unused value and increments. rewinds to 0 — the owning invokes it via the sweep on the same edge that initializes a fresh , so a controller power-reset clears both the syntax-piece pipeline and this counter in lock-step. Two consumers share one allocator: allocates one index per top-level NC file that streams through the runner. allocates a fresh index for each inlined subprogram invocation, including each L repetition — distinct indices ensure (FileIndex, LineIndex) pairs stay unique across overlapping subprogram line ranges. Holding the counter on this dependency rather than on avoids a duplicate source-of-truth: the dep is the single seam through which syntaxes reach the counter, and there is no third reader that would benefit from session-state visibility.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -99,12 +99,12 @@ Class FileIndexCounterDependency
<div class="markdown summary"><p>Per-session monotonically-increasing file index allocator. Holds the
counter as a private field; <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Allocate">Allocate()</a> returns the next
unused value and increments. <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reset">Reset()</a> rewinds to 0 — the
owning <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> calls
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reset">Reset()</a> on the same edge that initializes a fresh
<a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html">NcRunnerSessionState</a>, so a controller
power-reset clears both the syntax-piece pipeline and this counter
in lock-step.</p>
unused value and increments. <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_OnSessionReset">OnSessionReset()</a> rewinds to 0 —
the owning <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> invokes it via
the <a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a> sweep on the same edge that
initializes a fresh <a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html">NcRunnerSessionState</a>,
so a controller power-reset clears both the syntax-piece pipeline and
this counter in lock-step.</p>
<p>
Two consumers share one allocator:
<ul><li><a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> allocates one
@ -123,7 +123,7 @@ from session-state visibility.
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class FileIndexCounterDependency : INcDependency, IMakeXmlSource</code></pre>
<pre><code class="lang-csharp hljs">public class FileIndexCounterDependency : INcDependency, IMakeXmlSource, ISessionResettable</code></pre>
</div>
@ -142,6 +142,7 @@ from session-state visibility.
<dd>
<div><a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
<div><a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a></div>
</dd>
</dl>
@ -281,7 +282,7 @@ from session-state visibility.
</h3>
<div class="markdown level1 summary"><p>Returns the next unused file index and post-increments the
counter. First call after construction or <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reset">Reset()</a>
counter. First call after construction or <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_OnSessionReset">OnSessionReset()</a>
returns 0.</p>
</div>
<div class="markdown level1 conceptual"></div>
@ -351,6 +352,38 @@ the counter implicitly reset to 0.</p>
<a id="Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_OnSessionReset_" data-uid="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.OnSessionReset*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_OnSessionReset" data-uid="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.OnSessionReset">
OnSessionReset()
</h3>
<div class="markdown level1 summary"><p>Rewinds the counter to 0. Called by
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> via the
<a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a> sweep on the same edge that
initializes a fresh session pipeline so a single brand-preset
runner can be reused across sessions without leaking file
indices from the previous session.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void OnSessionReset()</code></pre>
</div>
<a id="Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reg_" data-uid="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reg*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reg(Hi.Common.XmlUtils.XFactory)">
@ -385,37 +418,6 @@ the counter implicitly reset to 0.</p>
<a id="Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reset_" data-uid="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reset*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reset" data-uid="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.Reset">
Reset()
</h3>
<div class="markdown level1 summary"><p>Rewinds the counter to 0. Called by
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> on the same edge that
initializes a fresh session pipeline so a single brand-preset
runner can be reused across sessions without leaking file
indices from the previous session.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Reset()</code></pre>
</div>
</article>

View File

@ -0,0 +1,459 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class MachiningServiceDependency | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class MachiningServiceDependency | HiAPI-C# 2025 ">
<meta name="description" content="Exposes the full surface to NC pipeline components — currently provided for client-authored syntaxes / semantics that need broad host access (machining equipment, session, tool house, time mapping, …). The built-in CSV pipeline does not consume this dependency; it uses the narrower instead.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency">
<h1 id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency" class="text-break">
Class MachiningServiceDependency
</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.Dependencys.html">Dependencys</a>.<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.html">SystemWired</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Exposes the full <a class="xref" href="Hi.MachiningSteps.IMachiningService.html">IMachiningService</a> surface to NC pipeline
components — currently provided for client-authored syntaxes / semantics
that need broad host access (machining equipment, session, tool house,
time mapping, …). The built-in CSV pipeline does not consume this
dependency; it uses the narrower
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html">StepPropertyAccessDictionaryDependency</a> instead.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class MachiningServiceDependency : INcDependency, IMakeXmlSource</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">MachiningServiceDependency</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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_NcParsers_Dependencys_SystemWired_MachiningServiceDependency__ctor_" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.#ctor*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency__ctor" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.#ctor">
MachiningServiceDependency()
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance with no <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html#Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_ServiceProvider">ServiceProvider</a>; the host wires one before queries.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public MachiningServiceDependency()</code></pre>
</div>
<a id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency__ctor_" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.#ctor*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency__ctor_System_Func_Hi_MachiningSteps_IMachiningService__" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.#ctor(System.Func{Hi.MachiningSteps.IMachiningService})">
MachiningServiceDependency(Func&lt;IMachiningService&gt;)
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance with the given <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html#Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_ServiceProvider">ServiceProvider</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public MachiningServiceDependency(Func&lt;IMachiningService&gt; provider)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>provider</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-1">Func</a>&lt;<a class="xref" href="Hi.MachiningSteps.IMachiningService.html">IMachiningService</a>&gt;</dt>
<dd><p>Delegate that resolves the live service at lookup time.</p>
</dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_Service_" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.Service*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_Service" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.Service">
Service
</h3>
<div class="markdown level1 summary"><p>The live machining service, or null when <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html#Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_ServiceProvider">ServiceProvider</a> is unset or returns null.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IMachiningService Service { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.MachiningSteps.IMachiningService.html">IMachiningService</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_ServiceProvider_" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.ServiceProvider*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_ServiceProvider" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.ServiceProvider">
ServiceProvider
</h3>
<div class="markdown level1 summary"><p>Runtime provider for the machining service. Null provider or null
return means the host is not wired; consumers must null-check.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Func&lt;IMachiningService&gt; ServiceProvider { 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.func-1">Func</a>&lt;<a class="xref" href="Hi.MachiningSteps.IMachiningService.html">IMachiningService</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_XName_" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.XName*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_XName" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name used to register this dependency with <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_MakeXmlSource_" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.MakeXmlSource*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
<div class="markdown level1 summary"><p>Runtime-only dependency — the provider is wired per host and not
meaningful to persist; serialization writes only the empty element
so the dependency survives an XML round-trip.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</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.xml.linq.xelement">XElement</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_Reg_" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.Reg*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_MachiningServiceDependency_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Reg(XFactory factory = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>factory</code> <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -0,0 +1,471 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class StepPropertyAccessDictionaryDependency | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class StepPropertyAccessDictionaryDependency | HiAPI-C# 2025 ">
<meta name="description" content="Exposes the host&#39;s step-variable registry to NC pipeline components (today: ) as a narrow surface. The provider is wired by the host (e.g. LocalProjectService) so the dependency does not carry strong references to host types; this lets the runner be created before the host is fully constructed and reused across project loads. A sibling exposes the broader surface to client-authored syntaxes. The two dependencies are independent — production hosts typically wire both providers to the same backing object, but a test fixture can supply just this narrow one.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency">
<h1 id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency" class="text-break">
Class StepPropertyAccessDictionaryDependency
</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.Dependencys.html">Dependencys</a>.<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.html">SystemWired</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Exposes the host's step-variable registry to NC pipeline components
(today: <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a>) as a narrow
<a class="xref" href="Hi.MachiningSteps.IStepPropertyAccessHost.html">IStepPropertyAccessHost</a> surface.</p>
<p>
The provider is wired by the host (e.g. <code>LocalProjectService</code>) so
the dependency does not carry strong references to host types; this lets
the runner be created before the host is fully constructed and reused
across project loads.
</p>
<p>
A sibling <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html">MachiningServiceDependency</a> exposes the broader
<a class="xref" href="Hi.MachiningSteps.IMachiningService.html">IMachiningService</a> surface to client-authored syntaxes. The
two dependencies are independent — production hosts typically wire both
providers to the same backing object, but a test fixture can supply just
this narrow one.
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class StepPropertyAccessDictionaryDependency : INcDependency, IMakeXmlSource</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">StepPropertyAccessDictionaryDependency</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency__ctor_" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.#ctor*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency__ctor" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.#ctor">
StepPropertyAccessDictionaryDependency()
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance with no <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html#Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_HostProvider">HostProvider</a>; the host wires one before queries.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public StepPropertyAccessDictionaryDependency()</code></pre>
</div>
<a id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency__ctor_" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.#ctor*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency__ctor_System_Func_Hi_MachiningSteps_IStepPropertyAccessHost__" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.#ctor(System.Func{Hi.MachiningSteps.IStepPropertyAccessHost})">
StepPropertyAccessDictionaryDependency(Func&lt;IStepPropertyAccessHost&gt;)
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance with the given <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html#Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_HostProvider">HostProvider</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public StepPropertyAccessDictionaryDependency(Func&lt;IStepPropertyAccessHost&gt; provider)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>provider</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-1">Func</a>&lt;<a class="xref" href="Hi.MachiningSteps.IStepPropertyAccessHost.html">IStepPropertyAccessHost</a>&gt;</dt>
<dd><p>Delegate that resolves the live host at lookup time.</p>
</dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_Host_" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.Host*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_Host" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.Host">
Host
</h3>
<div class="markdown level1 summary"><p>The live host, or null when <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html#Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_HostProvider">HostProvider</a> is unset or returns null.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IStepPropertyAccessHost Host { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.MachiningSteps.IStepPropertyAccessHost.html">IStepPropertyAccessHost</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_HostProvider_" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.HostProvider*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_HostProvider" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.HostProvider">
HostProvider
</h3>
<div class="markdown level1 summary"><p>Runtime provider for the host. Null provider or null return means
the host is not wired (e.g. the dependency sits in a runner that
runs in a unit-test fixture without a real project service).
Consumers must null-check before use.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Func&lt;IStepPropertyAccessHost&gt; HostProvider { 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.func-1">Func</a>&lt;<a class="xref" href="Hi.MachiningSteps.IStepPropertyAccessHost.html">IStepPropertyAccessHost</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_XName_" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.XName*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_XName" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name used to register this dependency with <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_MakeXmlSource_" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.MakeXmlSource*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
<div class="markdown level1 summary"><p>Runtime-only dependency — the provider is wired per host and not
meaningful to persist; serialization writes only the empty element
so the dependency survives an XML round-trip.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
<dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</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.xml.linq.xelement">XElement</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_Reg_" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.Reg*"></a>
<h3 id="Hi_NcParsers_Dependencys_SystemWired_StepPropertyAccessDictionaryDependency_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Reg(XFactory factory = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>factory</code> <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -98,12 +98,12 @@ Classes
<dt><a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html">FileIndexCounterDependency</a></dt>
<dd><p>Per-session monotonically-increasing file index allocator. Holds the
counter as a private field; <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Allocate">Allocate()</a> returns the next
unused value and increments. <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reset">Reset()</a> rewinds to 0 — the
owning <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> calls
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Reset">Reset()</a> on the same edge that initializes a fresh
<a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html">NcRunnerSessionState</a>, so a controller
power-reset clears both the syntax-piece pipeline and this counter
in lock-step.</p>
unused value and increments. <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html#Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_OnSessionReset">OnSessionReset()</a> rewinds to 0 —
the owning <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> invokes it via
the <a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a> sweep on the same edge that
initializes a fresh <a class="xref" href="Hi.MachiningProcs.NcRunnerSessionState.html">NcRunnerSessionState</a>,
so a controller power-reset clears both the syntax-piece pipeline and
this counter in lock-step.</p>
<p>
Two consumers share one allocator:
<ul><li><a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> allocates one
@ -118,6 +118,16 @@ source-of-truth: the dep is the single seam through which syntaxes
reach the counter, and there is no third reader that would benefit
from session-state visibility.
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html">MachiningServiceDependency</a></dt>
<dd><p>Exposes the full <a class="xref" href="Hi.MachiningSteps.IMachiningService.html">IMachiningService</a> surface to NC pipeline
components — currently provided for client-authored syntaxes / semantics
that need broad host access (machining equipment, session, tool house,
time mapping, …). The built-in CSV pipeline does not consume this
dependency; it uses the narrower
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html">StepPropertyAccessDictionaryDependency</a> instead.</p>
</dd>
</dl>
<dl class="jumplist">
@ -173,6 +183,26 @@ start of each session run, so this dependency can sit in
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcDependencyList">NcDependencyList</a> without participating in XML
serialization (see <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html#Hi_NcParsers_Dependencys_SystemWired_SegmenterDependency_MakeXmlSource_System_String_System_String_System_Boolean_">MakeXmlSource(string, string, bool)</a>).
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html">StepPropertyAccessDictionaryDependency</a></dt>
<dd><p>Exposes the host's step-variable registry to NC pipeline components
(today: <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a>) as a narrow
<a class="xref" href="Hi.MachiningSteps.IStepPropertyAccessHost.html">IStepPropertyAccessHost</a> surface.</p>
<p>
The provider is wired by the host (e.g. <code>LocalProjectService</code>) so
the dependency does not carry strong references to host types; this lets
the runner be created before the host is fully constructed and reused
across project loads.
</p>
<p>
A sibling <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html">MachiningServiceDependency</a> exposes the broader
<a class="xref" href="Hi.MachiningSteps.IMachiningService.html">IMachiningService</a> surface to client-authored syntaxes. The
two dependencies are independent — production hosts typically wire both
providers to the same backing object, but a test fixture can supply just
this narrow one.
</p>
</dd>
</dl>
<dl class="jumplist">

View File

@ -2,11 +2,11 @@
<html>
<head>
<meta charset="utf-8">
<title>Class ClStripService | HiAPI-C# 2025 </title>
<title>Class FanucConditionReader | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ClStripService | HiAPI-C# 2025 ">
<meta name="title" content="Class FanucConditionReader | HiAPI-C# 2025 ">
<meta name="description" content="milling process service based on dictionary data type.">
<meta name="description" content="Shared polymorphic reader for Fanuc Custom Macro B conditional gate expressions (IF [...] GOTO, IF [...] THEN, WHILE [...] DO m). The condition node is read post-evaluation — &#39;s pass-2 tree walk has already substituted the original expression string with a numeric when evaluation succeeded; this helper maps that node to a tri-state truthy outcome plus a display form for diagnostics. Three states, mapping directly to the ConditionEvaluated: true | false | null stamp shape used by all three consumers (see , , and the WHILE-loop syntax): Truthy = true — node is a finite non-zero numeric; gate fires.Truthy = false — node is a finite numeric equal to zero; gate falls through silently.Truthy = null — node is null, still a string (evaluator failed), or non-finite double (NaN / &#177;∞); gate falls through and the caller emits its own &amp;lt;Syntax&amp;gt;--ConditionNotEvaluated warning. The Display form is the human-readable expression text for diagnostic messages. For resolved numerics it is the value formatted via ; for unresolved strings it is the original expression text. Diagnostics build their own message text — the helper just provides the source string so the caller can compose &quot;IF [&amp;lt;Display&amp;gt;] GOTO ...&quot; etc. Callers typically the original node before passing in here, then again before stamping back, so removing the parsing section and writing the host-level stamp can happen in any order without dangling references.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -84,25 +84,58 @@
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs.ClStripService">
<article data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader">
<h1 id="Hi_Grpcs_ClStripService" data-uid="Hi.Grpcs.ClStripService" class="text-break">
Class ClStripService
<h1 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucConditionReader" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader" class="text-break">
Class FanucConditionReader
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
<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.EvaluationSyntaxs.html">EvaluationSyntaxs</a>.<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.html">Fanuc</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>milling process service based on dictionary data type.</p>
<div class="markdown summary"><p>Shared polymorphic reader for Fanuc Custom Macro B conditional gate
expressions (<code>IF [...] GOTO</code>, <code>IF [...] THEN</code>,
<code>WHILE [...] DO m</code>). The condition node is read post-evaluation —
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>'s pass-2 tree walk has already
substituted the original expression string with a numeric
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> when evaluation succeeded; this helper maps
that node to a tri-state truthy outcome plus a display form for
diagnostics.</p>
<p>
Three states, mapping directly to the
<code>ConditionEvaluated: true | false | null</code> stamp shape used by
all three consumers (see <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a>,
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html">FanucIfThenSyntax</a>, and the WHILE-loop syntax):
</p>
<ul><li><b>Truthy = true</b> — node is a finite non-zero numeric;
gate fires.</li><li><b>Truthy = false</b> — node is a finite numeric equal to
zero; gate falls through silently.</li><li><b>Truthy = null</b> — node is null, still a string
(evaluator failed), or non-finite double (NaN / ±∞); gate falls
through and the caller emits its own
<code>&lt;Syntax&gt;--ConditionNotEvaluated</code> warning.</li></ul>
<p>
The <code>Display</code> form is the human-readable expression text for
diagnostic messages. For resolved numerics it is the value formatted
via <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.globalization.cultureinfo.invariantculture">InvariantCulture</a>; for unresolved
strings it is the original expression text. Diagnostics build their
own message text — the helper just provides the source string so the
caller can compose <code>"IF [&lt;Display&gt;] GOTO ..."</code> etc.
</p>
<p>
Callers typically <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonnode.deepclone">DeepClone()</a> the original node
before passing in here, then again before stamping back, so removing
the parsing section and writing the host-level stamp can happen in
any order without dangling references.
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class ClStripService</code></pre>
<pre><code class="lang-csharp hljs">public static class FanucConditionReader</code></pre>
</div>
@ -112,7 +145,7 @@ Class ClStripService
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">ClStripService</span></div>
<div><span class="xref">FanucConditionReader</span></div>
</dd>
</dl>
@ -149,108 +182,36 @@ Class ClStripService
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_Grpcs_ClStripService_Descriptor_" data-uid="Hi.Grpcs.ClStripService.Descriptor*"></a>
<h3 id="Hi_Grpcs_ClStripService_Descriptor" data-uid="Hi.Grpcs.ClStripService.Descriptor">
Descriptor
</h3>
<div class="markdown level1 summary"><p>Service descriptor</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ServiceDescriptor Descriptor { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">ServiceDescriptor</span></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_Grpcs_ClStripService_BindService_" data-uid="Hi.Grpcs.ClStripService.BindService*"></a>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucConditionReader_ReadCondition_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.ReadCondition*"></a>
<h3 id="Hi_Grpcs_ClStripService_BindService_Grpc_Core_ServiceBinderBase_Hi_Grpcs_ClStripService_ClStripServiceBase_" data-uid="Hi.Grpcs.ClStripService.BindService(Grpc.Core.ServiceBinderBase,Hi.Grpcs.ClStripService.ClStripServiceBase)">
BindService(ServiceBinderBase, ClStripServiceBase)
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucConditionReader_ReadCondition_System_Text_Json_Nodes_JsonNode_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.ReadCondition(System.Text.Json.Nodes.JsonNode)">
ReadCondition(JsonNode)
</h3>
<div class="markdown level1 summary"><p>Register service method with a service binder with or without implementation. Useful when customizing the service binding logic.
Note: this method is part of an experimental API that can change or be removed without any prior notice.</p>
<div class="markdown level1 summary"><p>Maps a post-evaluation condition <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonnode">JsonNode</a> to a
display string + tri-state truthy outcome. See class XmlDoc for
the three states' definitions.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void BindService(ServiceBinderBase serviceBinder, ClStripService.ClStripServiceBase serviceImpl)</code></pre>
<pre><code class="lang-csharp hljs">public static (string Display, bool? Truthy) ReadCondition(JsonNode node)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>serviceBinder</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServiceBinderBase.cs">ServiceBinderBase</a></dt>
<dd><p>Service methods will be bound by calling <code>AddMethod</code> on this object.</p>
</dd>
<dt><code>serviceImpl</code> <a class="xref" href="Hi.Grpcs.ClStripService.html">ClStripService</a>.<a class="xref" href="Hi.Grpcs.ClStripService.ClStripServiceBase.html">ClStripServiceBase</a></dt>
<dd><p>An object implementing the server-side handling logic.</p>
</dd>
</dl>
<a id="Hi_Grpcs_ClStripService_BindService_" data-uid="Hi.Grpcs.ClStripService.BindService*"></a>
<h3 id="Hi_Grpcs_ClStripService_BindService_Hi_Grpcs_ClStripService_ClStripServiceBase_" data-uid="Hi.Grpcs.ClStripService.BindService(Hi.Grpcs.ClStripService.ClStripServiceBase)">
BindService(ClStripServiceBase)
</h3>
<div class="markdown level1 summary"><p>Creates service definition that can be registered with a server</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ServerServiceDefinition BindService(ClStripService.ClStripServiceBase serviceImpl)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>serviceImpl</code> <a class="xref" href="Hi.Grpcs.ClStripService.html">ClStripService</a>.<a class="xref" href="Hi.Grpcs.ClStripService.ClStripServiceBase.html">ClStripServiceBase</a></dt>
<dd><p>An object implementing the server-side handling logic.</p>
</dd>
<dt><code>node</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonnode">JsonNode</a></dt>
<dd></dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerServiceDefinition.cs">ServerServiceDefinition</a></dt>
<dt>(<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.nullable-system.boolean--.display">Display</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>? <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.valuetuple-system.string,system.nullable-system.boolean--.truthy">Truthy</a>)</dt>
<dd></dd>
</dl>

View File

@ -112,10 +112,11 @@ Both unconditional <code>GOTO &lt;n&gt;</code> and conditional
form leans on <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>'s pass-2 tree walk
to substitute <code>Parsing.FanucGoto.Condition</code> with a numeric
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> when the expression
evaluates successfully — <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonnode">ReadCondition(JsonNode)</a> then reads the
node polymorphically. Truthy non-zero fires the redirect; zero falls
through silently; a still-string (unresolved) Condition emits
<code>FanucGoto--ConditionNotEvaluated</code> and falls through.
evaluates successfully — <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucConditionReader_ReadCondition_System_Text_Json_Nodes_JsonNode_">ReadCondition(JsonNode)</a>
then reads the node polymorphically. Truthy non-zero fires the
redirect; zero falls through silently; a still-string (unresolved)
Condition emits <code>FanucGoto--ConditionNotEvaluated</code> and falls
through.
</p>
<p>
Pipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FanucIfThenSyntax | HiAPI-C# 2025 ">
<meta name="description" content="Resolves Fanuc Custom Macro B IF [&amp;lt;cond&amp;gt;] THEN &amp;lt;body&amp;gt; single-block conditionals. Triggered by Parsing.FanucIfThen (written by ); reads the now-resolved node, decides whether to fire, and on fire lifts the parsing-stage PendingAssignments sub-object into the canonical Parsing.Assignments bucket so the brand-specific reader syntaxes downstream route each entry to its store the same way they would handle an unconditional #nnn = &amp;lt;literal&amp;gt; on a normal block. Unlike there is no source splice, no label scan, no iteration watchdog — the spec restricts the body to the current block. The host block is preserved either way (the stamped FanucIfThen section on the host&#39;s top-level JSON keeps the IF-THEN call site visible to cache dumps and diagnostics, with flipped true only on a successful fire). Pipeline placement: in the Evaluation bundle after (so the Condition expression has been substituted in place by pass-2 tree walk, and each PendingAssignments RHS string has been evaluated to a numeric ) and before the reader syntaxes (, , , ) — that ordering lets the lifted entries reach the readers as if they had been written by on a normal block. Three condition outcomes mirror the shape: Truthy non-zero → lift assignments, stamp Applied=true.Truthy zero → fall through silently, Applied=false.Truthy null (evaluator failed, condition still a string or non-finite) → warn FanucIfThen--ConditionNotEvaluated, do not lift, Applied=false. A truthy condition with no PendingAssignments (body did not parse as one or more assignments — e.g. a G-code body, currently unsupported) warns FanucIfThen--UnsupportedBody and falls through.">
<meta name="description" content="Resolves Fanuc Custom Macro B IF [&amp;lt;cond&amp;gt;] THEN &amp;lt;body&amp;gt; single-block conditionals. Triggered by Parsing.FanucIfThen (written by ); reads the now-resolved node, decides whether to fire, and on fire lifts the parsing-stage PendingAssignments sub-object into the canonical Parsing.Assignments bucket so the brand-specific reader syntaxes downstream route each entry to its store the same way they would handle an unconditional #nnn = &amp;lt;literal&amp;gt; on a normal block. Unlike there is no source splice, no label scan, no iteration watchdog — the spec restricts the body to the current block. The host block is preserved either way (the stamped FanucIfThen section on the host&#39;s top-level JSON keeps the IF-THEN call site visible to cache dumps and diagnostics, with flipped true only on a successful fire). Pipeline placement: in the Evaluation bundle after (so the Condition expression has been substituted in place by pass-2 tree walk, and each PendingAssignments RHS string has been evaluated to a numeric ) and before the reader syntaxes (, , , ) — that ordering lets the lifted entries reach the readers as if they had been written by on a normal block. Three condition outcomes mirror the FanucGotoSyntax.ReadCondition shape: Truthy non-zero → lift assignments, stamp Applied=true.Truthy zero → fall through silently, Applied=false.Truthy null (evaluator failed, condition still a string or non-finite) → warn FanucIfThen--ConditionNotEvaluated, do not lift, Applied=false. A truthy condition with no PendingAssignments (body did not parse as one or more assignments — e.g. a G-code body, currently unsupported) warns FanucIfThen--UnsupportedBody and falls through.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -130,7 +130,7 @@ the lifted entries reach the readers as if they had been written by
</p>
<p>
Three condition outcomes mirror the
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonnode">ReadCondition(JsonNode)</a> shape:
<code>FanucGotoSyntax.ReadCondition</code> shape:
<ul><li>Truthy non-zero → lift assignments, stamp Applied=true.</li><li>Truthy zero → fall through silently, Applied=false.</li><li>Truthy null (evaluator failed, condition still a string or
non-finite) → warn <code>FanucIfThen--ConditionNotEvaluated</code>, do not
lift, Applied=false.</li></ul>

View File

@ -0,0 +1,629 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class FanucWhileDoSyntax | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FanucWhileDoSyntax | HiAPI-C# 2025 ">
<meta name="description" content="Resolves Fanuc Custom Macro B WHILE [..] DO m ... END m bounded loops. Two phrases dispatched by : WHILE [..] DO m — entry: reads the resolved condition via , manages the per-LoopId frame in the top-level WhileFrames dict, and either falls through (truthy) or forward-jumps past the matching END m (falsy / unresolved).END m — terminator: unconditionally reverse-jumps to the WHILE block recorded in WhileFrames[LoopId].BeginLineNo so the next iteration re-evaluates the entry condition. Increments the per-loop iteration counter on ; suppresses the redirect above . WhileFrames carrier. The top-level WhileFrames JSON section is a keyed by LoopId-as-string whose values are { BeginLineNo: int }. Frames are pushed when a WHILE block first encounters a truthy condition with no existing frame for that LoopId; popped when the condition becomes falsy or unresolved; otherwise carried forward unchanged by &#39;s tracked-key list. Nested loops with distinct LoopIds coexist in the same dict; same-LoopId nesting (spec-undefined) overwrites and is not given special handling. Pipeline placement. Evaluation bundle, after the variable readers (defensive — WHILE/END blocks per spec do not carry assignments, but the placement is consistent with GOTO). Must run after so the condition string has been substituted to numeric. Forward scan to matching END m uses the predicate overload — probe runs the brand-default on each candidate, predicate matches on Parsing.FanucWhileDo.Term == &quot;END&quot; &amp;amp;&amp;amp; LoopId == target. Reverse scan to WHILE BeginLineNo does not need a label predicate — the BeginLineNo is a known file-line index recorded in the active frame, so the END side re-segments the file from the top and returns the slice starting at the first piece whose .Begin.LineIndex matches.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax">
<h1 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax" class="text-break">
Class FanucWhileDoSyntax
</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.EvaluationSyntaxs.html">EvaluationSyntaxs</a>.<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.html">Fanuc</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Resolves Fanuc Custom Macro B <code>WHILE [..] DO m ... END m</code>
bounded loops. Two phrases dispatched by
<a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_Term">Term</a>:</p>
<ul><li><code>WHILE [..] DO m</code> — entry: reads the resolved condition
via <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html">FanucConditionReader</a>, manages the per-LoopId
frame in the top-level <code>WhileFrames</code> dict, and either falls
through (truthy) or forward-jumps past the matching END m
(falsy / unresolved).</li><li><code>END m</code> — terminator: unconditionally reverse-jumps to
the WHILE block recorded in <code>WhileFrames[LoopId].BeginLineNo</code>
so the next iteration re-evaluates the entry condition. Increments
the per-loop iteration counter on
<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html">FanucWhileDoIterationDependency</a>; suppresses the
redirect above <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId">MaxIterationsPerLoopId</a>.</li></ul>
<p>
<b>WhileFrames carrier.</b> The top-level <code>WhileFrames</code> JSON
section is a <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a> keyed by LoopId-as-string
whose values are <code>{ BeginLineNo: int }</code>. Frames are pushed when
a WHILE block first encounters a truthy condition with no existing
frame for that LoopId; popped when the condition becomes falsy or
unresolved; otherwise carried forward unchanged by
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a>'s
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_Logic">Logic</a> tracked-key
list. Nested loops with distinct LoopIds coexist in the same dict;
same-LoopId nesting (spec-undefined) overwrites and is not given
special handling.
</p>
<p>
<b>Pipeline placement.</b> Evaluation bundle, after the variable
readers (defensive — WHILE/END blocks per spec do not carry
assignments, but the placement is consistent with GOTO). Must run
after <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> so the condition string
has been substituted to numeric.
</p>
<p>
<b>Forward scan to matching END m</b> uses the
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html">LabelScanUtil</a> predicate overload — probe runs the
brand-default <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html">FanucWhileDoParsingSyntax</a> on each
candidate, predicate matches on
<code>Parsing.FanucWhileDo.Term == "END" &amp;&amp; LoopId == target</code>.
</p>
<p>
<b>Reverse scan to WHILE BeginLineNo</b> does not need a label
predicate — the BeginLineNo is a known file-line index recorded in
the active frame, so the END side re-segments the file from the top
and returns the slice starting at the first piece whose
<a class="xref" href="Hi.NcParsers.Sentence.html#Hi_NcParsers_Sentence_CharIndexSegment">CharIndexSegment</a>.<code>Begin.LineIndex</code>
matches.
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class FanucWhileDoSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">FanucWhileDoSyntax</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyntax</a></div>
<div><a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Coloring.ColorUtil.html#Hi_Coloring_ColorUtil_GetGloomyColor_System_Object_System_Double_System_Double_">ColorUtil.GetGloomyColor(object, double, double)</a>
</div>
<div>
<a class="xref" href="Hi.Common.NameUtil.html#Hi_Common_NameUtil_GetSelectionName_System_Object_">NameUtil.GetSelectionName(object)</a>
</div>
<div>
<a class="xref" href="Hi.Common.StringUtil.html#Hi_Common_StringUtil_GetPropertyStringIfToStringNotOverloaded_System_Object_System_Boolean_System_Boolean_">StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool)</a>
</div>
<div>
<a class="xref" href="Hi.Parallels.LockUtil.html#Hi_Parallels_LockUtil_Lock_System_Object_">LockUtil.Lock(object)</a>
</div>
</dd></dl>
<h2 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_remarks">Remarks</h2>
<div class="markdown level0 remarks"><h2 id="worked-example--three-iteration-while--do-m--end-m">Worked Example — Three-iteration <code>WHILE [..] DO m ... END m</code></h2>
<p>Given this Custom Macro B source:</p>
<pre><code class="lang-nc">#100 = 0
WHILE [#100 LT 3] DO 1
#100 = #100 + 1
END 1
X5
</code></pre>
<p>Each block flows through the runtime as below. The <code>WhileFrames</code> lifeline
represents the per-block active-loop state carried block-to-block by the
modal-carry pipeline; the <code>END</code> block consults it to find the WHILE line
to reverse-jump to. The runaway-loop counter ticks on every successful
<code>END</code> reverse-jump and suppresses further jumps above the configured
iteration limit.</p>
<pre><code class="lang-mermaid">sequenceDiagram
participant W as WHILE block
participant B as body
participant E as END block
participant X as X5
participant F as WhileFrames
Note over F: empty
Note over W: iter 1: cond=true (0 LT 3)
W-&gt;&gt;F: push {LoopId 1, BeginLineNo}
W-&gt;&gt;B: fall through
B-&gt;&gt;E:
Note over E: counter 0 to 1 (≤Max)
E--&gt;&gt;W: reverse jump
Note over W: iter 2: cond=true (1 LT 3)
Note over W,F: frame exists, skip push
W-&gt;&gt;B: fall through
B-&gt;&gt;E:
Note over E: counter 1 to 2 (≤Max)
E--&gt;&gt;W: reverse jump
Note over W: iter 3: cond=true (2 LT 3)
W-&gt;&gt;B:
B-&gt;&gt;E:
Note over E: counter 2 to 3 (≤Max)
E--&gt;&gt;W: reverse jump
Note over W: iter 4: cond=false (3 LT 3)
W-&gt;&gt;F: pop LoopId 1
Note over W: forward jump past END
W-&gt;&gt;X:
</code></pre>
<p>After the loop exits, <code>X5</code> executes with <code>#100 = 3</code> in <code>Vars.Volatile</code>.</p>
</div>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax__ctor_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.#ctor*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax__ctor" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.#ctor">
FanucWhileDoSyntax()
</h3>
<div class="markdown level1 summary"><p>Parameterless instance.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public FanucWhileDoSyntax()</code></pre>
</div>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax__ctor_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.#ctor*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax__ctor_System_Xml_Linq_XElement_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.#ctor(System.Xml.Linq.XElement)">
FanucWhileDoSyntax(XElement)
</h3>
<div class="markdown level1 summary"><p>XML ctor (no child elements; reserved for forward compatibility).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public FanucWhileDoSyntax(XElement src)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>src</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="fields">Fields
</h2>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_BeginLineNoKey" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.BeginLineNoKey">
BeginLineNoKey
</h3>
<div class="markdown level1 summary"><p>Schema field inside each WhileFrames entry: the WHILE block's file-line index.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string BeginLineNoKey = &quot;BeginLineNo&quot;</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>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_WhileFramesKey" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.WhileFramesKey">
WhileFramesKey
</h3>
<div class="markdown level1 summary"><p>Top-level JSON key for the active-loop frame dict.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string WhileFramesKey = &quot;WhileFrames&quot;</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="properties">Properties
</h2>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Name_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Name*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Name" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Name">
Name
</h3>
<div class="markdown level1 summary"><p>Syntax kind name (typically the concrete type name).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Name { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_XName_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.XName*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_XName" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name used to register this syntax with <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Build_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Build*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
Build(LazyLinkedListNode&lt;SyntaxPiece&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
<div class="markdown level1 summary"><p>Build syntax arrangement into the
<code class="paramref">syntaxPieceNode</code> in-place.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Build(LazyLinkedListNode&lt;SyntaxPiece&gt; syntaxPieceNode, List&lt;INcDependency&gt; ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>syntaxPieceNode</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedListNode-1.html">LazyLinkedListNode</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>&gt;</dt>
<dd></dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd></dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_MakeXmlSource_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.MakeXmlSource*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
<div class="markdown level1 summary"><p>Creates an XML representation of the object.
This method may also generate additional resources such as related files.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The base directory for resolving relative paths</p>
</dd>
<dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The relative file path for the XML source</p>
</dd>
<dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>if true, the extended file creation is suppressed.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>An XML element representing the object's state</p>
</dd>
</dl>
<h4 class="section" id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The <code class="paramref">baseDirectory</code> is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.</p>
</div>
<a id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Reg_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Reg*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucWhileDoSyntax_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Reg(XFactory factory = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>factory</code> <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -94,6 +94,44 @@
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html">FanucConditionReader</a></dt>
<dd><p>Shared polymorphic reader for Fanuc Custom Macro B conditional gate
expressions (<code>IF [...] GOTO</code>, <code>IF [...] THEN</code>,
<code>WHILE [...] DO m</code>). The condition node is read post-evaluation —
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>'s pass-2 tree walk has already
substituted the original expression string with a numeric
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> when evaluation succeeded; this helper maps
that node to a tri-state truthy outcome plus a display form for
diagnostics.</p>
<p>
Three states, mapping directly to the
<code>ConditionEvaluated: true | false | null</code> stamp shape used by
all three consumers (see <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a>,
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html">FanucIfThenSyntax</a>, and the WHILE-loop syntax):
</p>
<ul><li><b>Truthy = true</b> — node is a finite non-zero numeric;
gate fires.</li><li><b>Truthy = false</b> — node is a finite numeric equal to
zero; gate falls through silently.</li><li><b>Truthy = null</b> — node is null, still a string
(evaluator failed), or non-finite double (NaN / ±∞); gate falls
through and the caller emits its own
<code>&lt;Syntax&gt;--ConditionNotEvaluated</code> warning.</li></ul>
<p>
The <code>Display</code> form is the human-readable expression text for
diagnostic messages. For resolved numerics it is the value formatted
via <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.globalization.cultureinfo.invariantculture">InvariantCulture</a>; for unresolved
strings it is the original expression text. Diagnostics build their
own message text — the helper just provides the source string so the
caller can compose <code>"IF [&lt;Display&gt;] GOTO ..."</code> etc.
</p>
<p>
Callers typically <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonnode.deepclone">DeepClone()</a> the original node
before passing in here, then again before stamping back, so removing
the parsing section and writing the host-level stamp can happen in
any order without dangling references.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a></dt>
<dd><p>Resolves Fanuc Custom Macro B GOTO control flow.
@ -111,10 +149,11 @@ Both unconditional <code>GOTO &lt;n&gt;</code> and conditional
form leans on <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>'s pass-2 tree walk
to substitute <code>Parsing.FanucGoto.Condition</code> with a numeric
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> when the expression
evaluates successfully — <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonnode">ReadCondition(JsonNode)</a> then reads the
node polymorphically. Truthy non-zero fires the redirect; zero falls
through silently; a still-string (unresolved) Condition emits
<code>FanucGoto--ConditionNotEvaluated</code> and falls through.
evaluates successfully — <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html#Hi_NcParsers_EvaluationSyntaxs_Fanuc_FanucConditionReader_ReadCondition_System_Text_Json_Nodes_JsonNode_">ReadCondition(JsonNode)</a>
then reads the node polymorphically. Truthy non-zero fires the
redirect; zero falls through silently; a still-string (unresolved)
Condition emits <code>FanucGoto--ConditionNotEvaluated</code> and falls
through.
</p>
<p>
Pipeline placement: tail of the Fanuc / Mazak / Syntec Evaluation
@ -171,7 +210,7 @@ the lifted entries reach the readers as if they had been written by
</p>
<p>
Three condition outcomes mirror the
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonnode">ReadCondition(JsonNode)</a> shape:
<code>FanucGotoSyntax.ReadCondition</code> shape:
<ul><li>Truthy non-zero → lift assignments, stamp Applied=true.</li><li>Truthy zero → fall through silently, Applied=false.</li><li>Truthy null (evaluator failed, condition still a string or
non-finite) → warn <code>FanucIfThen--ConditionNotEvaluated</code>, do not
lift, Applied=false.</li></ul>
@ -356,6 +395,58 @@ Fanuc-family only — Siemens uses named system variables
(<code>$AC_TIME</code>, <code>$A_DAY</code>, …) and Heidenhain uses
<code>FN18: SYSREAD</code>; neither flows through <code>Parsing.Assignments.#nnn</code>.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html">FanucWhileDoSyntax</a></dt>
<dd><p>Resolves Fanuc Custom Macro B <code>WHILE [..] DO m ... END m</code>
bounded loops. Two phrases dispatched by
<a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_Term">Term</a>:</p>
<ul><li><code>WHILE [..] DO m</code> — entry: reads the resolved condition
via <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html">FanucConditionReader</a>, manages the per-LoopId
frame in the top-level <code>WhileFrames</code> dict, and either falls
through (truthy) or forward-jumps past the matching END m
(falsy / unresolved).</li><li><code>END m</code> — terminator: unconditionally reverse-jumps to
the WHILE block recorded in <code>WhileFrames[LoopId].BeginLineNo</code>
so the next iteration re-evaluates the entry condition. Increments
the per-loop iteration counter on
<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html">FanucWhileDoIterationDependency</a>; suppresses the
redirect above <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html#Hi_NcParsers_Dependencys_Fanuc_FanucWhileDoIterationDependency_MaxIterationsPerLoopId">MaxIterationsPerLoopId</a>.</li></ul>
<p>
<b>WhileFrames carrier.</b> The top-level <code>WhileFrames</code> JSON
section is a <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a> keyed by LoopId-as-string
whose values are <code>{ BeginLineNo: int }</code>. Frames are pushed when
a WHILE block first encounters a truthy condition with no existing
frame for that LoopId; popped when the condition becomes falsy or
unresolved; otherwise carried forward unchanged by
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a>'s
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_Logic">Logic</a> tracked-key
list. Nested loops with distinct LoopIds coexist in the same dict;
same-LoopId nesting (spec-undefined) overwrites and is not given
special handling.
</p>
<p>
<b>Pipeline placement.</b> Evaluation bundle, after the variable
readers (defensive — WHILE/END blocks per spec do not carry
assignments, but the placement is consistent with GOTO). Must run
after <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> so the condition string
has been substituted to numeric.
</p>
<p>
<b>Forward scan to matching END m</b> uses the
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html">LabelScanUtil</a> predicate overload — probe runs the
brand-default <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html">FanucWhileDoParsingSyntax</a> on each
candidate, predicate matches on
<code>Parsing.FanucWhileDo.Term == "END" &amp;&amp; LoopId == target</code>.
</p>
<p>
<b>Reverse scan to WHILE BeginLineNo</b> does not need a label
predicate — the BeginLineNo is a known file-line index recorded in
the active frame, so the END side re-segments the file from the top
and returns the slice starting at the first piece whose
<a class="xref" href="Hi.NcParsers.Sentence.html#Hi_NcParsers_Sentence_CharIndexSegment">CharIndexSegment</a>.<code>Begin.LineIndex</code>
matches.
</p>
</dd>
</dl>
<h3 id="enums">

View File

@ -172,8 +172,82 @@ parenthesised comment stripped).
<a id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_Hi_NcParsers_Segmenters_ISegmenter_System_String_System_String_System_Int32_System_Int32_System_Int32_System_Collections_Generic_List_Hi_NcParsers_Syntaxs_ISituNcSyntax__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel(Hi.NcParsers.Segmenters.ISegmenter,System.String,System.String,System.Int32,System.Int32,System.Int32,System.Collections.Generic.List{Hi.NcParsers.Syntaxs.ISituNcSyntax},Hi.NcParsers.NcDiagnosticProgress)">
SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List&lt;ISituNcSyntax&gt;, NcDiagnosticProgress)
<h3 id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_Hi_NcParsers_Segmenters_ISegmenter_System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__System_String_System_String_System_Int32_System_Int32_System_Collections_Generic_List_Hi_NcParsers_Syntaxs_ISituNcSyntax__System_Func_System_Text_Json_Nodes_JsonObject_System_Boolean__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel(Hi.NcParsers.Segmenters.ISegmenter,System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},System.String,System.String,System.Int32,System.Int32,System.Collections.Generic.List{Hi.NcParsers.Syntaxs.ISituNcSyntax},System.Func{System.Text.Json.Nodes.JsonObject,System.Boolean},Hi.NcParsers.NcDiagnosticProgress)">
SegmentAndSkipUntilLabel(ISegmenter, List&lt;INcDependency&gt;, string, string, int, int, List&lt;ISituNcSyntax&gt;, Func&lt;JsonObject, bool&gt;, NcDiagnosticProgress)
</h3>
<div class="markdown level1 summary"><p>Predicate-driven overload. The caller supplies <code class="paramref">match</code>
as the per-candidate gate (run on the candidate block's
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject">JsonObject</a> after the probe syntaxes have
finished stamping). This unblocks scans whose label representation
differs from <a class="xref" href="Hi.NcParsers.Keywords.IndexNote.html">IndexNote</a>.<a class="xref" href="Hi.NcParsers.Keywords.IndexNote.html#Hi_NcParsers_Keywords_IndexNote_Number">Number</a>
for example <code>END m</code> blocks identified by a custom probe-written
section, where reusing <a class="xref" href="Hi.NcParsers.Keywords.IndexNote.html">IndexNote</a> would collide with
real <code>N{m}</code> head indices in the same file.</p>
<p>
The default <code>targetN</code> overload delegates here with the
<code>IndexNote.Number == targetN</code> predicate baked in; existing
callers (Fanuc unconditional GOTO, M99 P{seq} jump) are unchanged.
</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static List&lt;SyntaxPiece&gt; SegmentAndSkipUntilLabel(ISegmenter segmenter, List&lt;INcDependency&gt; ncDependencyList, string absPath, string labelPath, int fileIndex, int sentenceIndexBegin, List&lt;ISituNcSyntax&gt; probeSyntaxes, Func&lt;JsonObject, bool&gt; match, NcDiagnosticProgress diag)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>segmenter</code> <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">ISegmenter</a></dt>
<dd><p>Segmenter used to slice the file into <a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a> blocks.</p>
</dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd><p>NC dependency list forwarded to <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, List&lt;INcDependency&gt;, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> while re-segmenting the scanned file.</p>
</dd>
<dt><code>absPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Absolute path to read line content from.</p>
</dd>
<dt><code>labelPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Project-relative path to stamp on each line's <a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a> label.</p>
</dd>
<dt><code>fileIndex</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>Fresh file index to stamp on each scanned line, allocated by the caller from <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html">FileIndexCounterDependency</a>.</p>
</dd>
<dt><code>sentenceIndexBegin</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd><p>Starting execution-order index for the produced pieces.</p>
</dd>
<dt><code>probeSyntaxes</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyntax</a>&gt;</dt>
<dd><p>Ordered list of helper syntaxes to run on each candidate block before the predicate check. May be null.</p>
</dd>
<dt><code>match</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.func-2">Func</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;</dt>
<dd><p>Per-candidate predicate; <code>true</code> selects the first match.</p>
</dd>
<dt><code>diag</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd><p>Sink for any diagnostics produced by the probe syntaxes.</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>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_Hi_NcParsers_Segmenters_ISegmenter_System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__System_String_System_String_System_Int32_System_Int32_System_Int32_System_Collections_Generic_List_Hi_NcParsers_Syntaxs_ISituNcSyntax__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.SegmentAndSkipUntilLabel(Hi.NcParsers.Segmenters.ISegmenter,System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},System.String,System.String,System.Int32,System.Int32,System.Int32,System.Collections.Generic.List{Hi.NcParsers.Syntaxs.ISituNcSyntax},Hi.NcParsers.NcDiagnosticProgress)">
SegmentAndSkipUntilLabel(ISegmenter, List&lt;INcDependency&gt;, string, string, int, int, int, List&lt;ISituNcSyntax&gt;, NcDiagnosticProgress)
</h3>
@ -183,7 +257,7 @@ a block whose <a class="xref" href="Hi.NcParsers.Keywords.IndexNote.html#Hi_NcPa
<code class="paramref">probeSyntaxes</code> have stamped it in-place), and
returns the sub-list of pieces from that block to EOF.
Pieces are produced via
<a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> with
<a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, List&lt;INcDependency&gt;, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> with
<code>SentenceIndex</code> stamped starting at
<code class="paramref">sentenceIndexBegin</code>. Returns <code>null</code> when
no match is found; the caller emits its own brand-specific
@ -203,13 +277,16 @@ participating in this scan.
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static List&lt;SyntaxPiece&gt; SegmentAndSkipUntilLabel(ISegmenter segmenter, string absPath, string labelPath, int fileIndex, int sentenceIndexBegin, int targetN, List&lt;ISituNcSyntax&gt; probeSyntaxes, NcDiagnosticProgress diag)</code></pre>
<pre><code class="lang-csharp hljs">public static List&lt;SyntaxPiece&gt; SegmentAndSkipUntilLabel(ISegmenter segmenter, List&lt;INcDependency&gt; ncDependencyList, string absPath, string labelPath, int fileIndex, int sentenceIndexBegin, int targetN, List&lt;ISituNcSyntax&gt; probeSyntaxes, NcDiagnosticProgress diag)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>segmenter</code> <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">ISegmenter</a></dt>
<dd><p>Segmenter used to slice the file into <a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a> blocks.</p>
</dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd><p>NC dependency list forwarded to <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, List&lt;INcDependency&gt;, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> while re-segmenting the scanned file.</p>
</dd>
<dt><code>absPath</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>Absolute path to read line content from.</p>

View File

@ -209,8 +209,8 @@ bodies this is a fresh stamp.</p>
<a id="Hi_NcParsers_EvaluationSyntaxs_MacroInlineUtil_BuildInlinedPieces_" data-uid="Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildInlinedPieces*"></a>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_MacroInlineUtil_BuildInlinedPieces_Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile_System_Int32_System_Collections_Generic_IReadOnlyDictionary_System_String_System_Double__System_Text_Json_Nodes_JsonObject_System_Text_Json_Nodes_JsonObject_Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Hi_NcParsers_Segmenters_ISegmenter_System_Int32_Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildInlinedPieces(Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile,System.Int32,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Double},System.Text.Json.Nodes.JsonObject,System.Text.Json.Nodes.JsonObject,Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency,Hi.NcParsers.Segmenters.ISegmenter,System.Int32,Hi.NcParsers.NcDiagnosticProgress)">
BuildInlinedPieces(ResolvedFile, int, IReadOnlyDictionary&lt;string, double&gt;, JsonObject, JsonObject, FileIndexCounterDependency, ISegmenter, int, NcDiagnosticProgress)
<h3 id="Hi_NcParsers_EvaluationSyntaxs_MacroInlineUtil_BuildInlinedPieces_Hi_NcParsers_EvaluationSyntaxs_MacroFileResolver_ResolvedFile_System_Int32_System_Collections_Generic_IReadOnlyDictionary_System_String_System_Double__System_Text_Json_Nodes_JsonObject_System_Text_Json_Nodes_JsonObject_Hi_NcParsers_Dependencys_SystemWired_FileIndexCounterDependency_Hi_NcParsers_Segmenters_ISegmenter_System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__System_Int32_Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.BuildInlinedPieces(Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile,System.Int32,System.Collections.Generic.IReadOnlyDictionary{System.String,System.Double},System.Text.Json.Nodes.JsonObject,System.Text.Json.Nodes.JsonObject,Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency,Hi.NcParsers.Segmenters.ISegmenter,System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},System.Int32,Hi.NcParsers.NcDiagnosticProgress)">
BuildInlinedPieces(ResolvedFile, int, IReadOnlyDictionary&lt;string, double&gt;, JsonObject, JsonObject, FileIndexCounterDependency, ISegmenter, List&lt;INcDependency&gt;, int, NcDiagnosticProgress)
</h3>
@ -226,7 +226,7 @@ the source layer.</p>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static IEnumerable&lt;SyntaxPiece&gt; BuildInlinedPieces(MacroFileResolver.ResolvedFile resolvedFile, int l, IReadOnlyDictionary&lt;string, double&gt; bindings, JsonObject callRecord, JsonObject pushedCallStack, FileIndexCounterDependency counterDep, ISegmenter segmenter, int sentenceIndexBegin, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
<pre><code class="lang-csharp hljs">public static IEnumerable&lt;SyntaxPiece&gt; BuildInlinedPieces(MacroFileResolver.ResolvedFile resolvedFile, int l, IReadOnlyDictionary&lt;string, double&gt; bindings, JsonObject callRecord, JsonObject pushedCallStack, FileIndexCounterDependency counterDep, ISegmenter segmenter, List&lt;INcDependency&gt; ncDependencyList, int sentenceIndexBegin, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
@ -245,6 +245,8 @@ the source layer.</p>
<dd></dd>
<dt><code>segmenter</code> <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">ISegmenter</a></dt>
<dd></dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd></dd>
<dt><code>sentenceIndexBegin</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
<dd></dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class SubProgramReturnSyntax | HiAPI-C# 2025 ">
<meta name="description" content="Consumes Fanuc-style M99 subprogram-return blocks and pops one frame. Plain M99 relies on the natural pipeline tail — the inlined body&#39;s last block is followed in layers[0] by the caller&#39;s next block, so the &amp;ldquo;return&amp;rdquo; happens implicitly; this syntax only consumes the M99 trigger (so doesn&#39;t warn), stamps a diagnostic section, and writes the popped for downstream blocks to carry. M99 P{seq} additionally redirects control flow to the caller&#39;s N{seq} block via . The caller&#39;s file is resolved from the popped frame&#39;s ; the scan uses the same helper as , with hardcoded Fanuc-default probes ( + with symbol &quot;N&quot;) because the M99 P semantic itself is Fanuc-family-only and Mazak / Syntec follow the same conventions. The iteration is counted against , sharing the same runaway-loop guard as GOTO — keyed on the same (FileName, TargetN) bucket so a tight M98 → M99 P → M98 … loop trips the same threshold. Pipeline placement: same Evaluation bundle slot it always occupied, right after at the head. Needs , , , , on the dep list when M99 P{seq} is to fire; without them the plain-M99 path still works and the P-jump emits a configuration warning. Detection is on the Parsing.M99 sub-object written by (a ) — the keyword &quot;M99&quot; never reaches Parsing.Flags because the parameterized match has already consumed the text by the time runs.">
<meta name="description" content="Consumes Fanuc-style M99 subprogram-return blocks and pops one frame. Plain M99 relies on the natural pipeline tail — the inlined body&#39;s last block is followed in layers[0] by the caller&#39;s next block, so the &amp;ldquo;return&amp;rdquo; happens implicitly; this syntax only consumes the M99 trigger (so doesn&#39;t warn), stamps a diagnostic section, and writes the popped for downstream blocks to carry. M99 P{seq} additionally redirects control flow to the caller&#39;s N{seq} block via . The caller&#39;s file is resolved from the popped frame&#39;s ; the scan uses the same .SegmentAndSkipUntilLabel helper as , with hardcoded Fanuc-default probes ( + with symbol &quot;N&quot;) because the M99 P semantic itself is Fanuc-family-only and Mazak / Syntec follow the same conventions. The iteration is counted against , sharing the same runaway-loop guard as GOTO — keyed on the same (FileName, TargetN) bucket so a tight M98 → M99 P → M98 … loop trips the same threshold. Pipeline placement: same Evaluation bundle slot it always occupied, right after at the head. Needs , , , , on the dep list when M99 P{seq} is to fire; without them the plain-M99 path still works and the P-jump emits a configuration warning. Detection is on the Parsing.M99 sub-object written by (a ) — the keyword &quot;M99&quot; never reaches Parsing.Flags because the parameterized match has already consumed the text by the time runs.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -112,7 +112,7 @@ caller's <code>N{seq}</code> block via
<a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html#Hi_Common_Collections_LazyLinkedList_1_ReplaceSource_System_Collections_Generic_IEnumerable__0__">ReplaceSource(IEnumerable&lt;T&gt;)</a>. The caller's file is
resolved from the popped frame's
<a class="xref" href="Hi.NcParsers.Keywords.CallFrame.html#Hi_NcParsers_Keywords_CallFrame_CallerFilePath">CallerFilePath</a>; the scan uses the same
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html#Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_Hi_NcParsers_Segmenters_ISegmenter_System_String_System_String_System_Int32_System_Int32_System_Int32_System_Collections_Generic_List_Hi_NcParsers_Syntaxs_ISituNcSyntax__Hi_NcParsers_NcDiagnosticProgress_">SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List&lt;ISituNcSyntax&gt;, NcDiagnosticProgress)</a> helper as
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html">LabelScanUtil</a>.<code>SegmentAndSkipUntilLabel</code> helper as
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a>, with hardcoded Fanuc-default
probes (<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html">QuoteCommentSyntax</a> + <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html">HeadIndexSyntax</a>
with symbol <code>"N"</code>) because the M99 P semantic itself is

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class VariableEvaluatorSyntax | HiAPI-C# 2025 ">
<meta name="description" content="Pure expression normalizer for Custom Macro B syntax. Walks the parser-stage residue on a single block and inlines numeric values wherever a Fanuc-style variable reference or bracket expression appears — but does not write to any specific store. Routing &amp;ldquo;where the resolved literal lands&amp;rdquo; stays in the brand-specific reader syntaxes (, &#39;s reader, , …) which run after this syntax on the same block. Two passes per block: Assignments normalize — Parsing.Assignments.#nnn entries whose RHS is non-literal (e.g. &quot;#500+1&quot;, &quot;SQRT[#100]&quot;) are evaluated via the and the RHS string is replaced with the resolved literal (round-trip-safe &quot;R&quot;-format). The entry stays in Parsing.Assignments so downstream reader syntaxes consume it as a pure-literal assignment. Iteration follows source order (Parsing.Assignments insertion order). Parsing tree substitution — every string-typed value reachable from Parsing.&amp;lt;tag&amp;gt; (axis tags, canned-cycle sub-objects) is parsed; on a successful evaluation the string is replaced with a numeric . Failures silently leave the original string and rely on downstream at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins, configured per brand preset via + instances on NcDependencyList): Current block&#39;s own resolved assignments — built-in to ; covers same-block forward references in source order (an earlier #nnn=literal is visible to a later RHS that mentions #nnn).Each in , in list order. Typical contents for a Fanuc-family preset: (#1-#33), (#100-#499), (#5001-#5043).Each on the runner&#39;s NcDependencyList, in registration order (, , ). Each lookup self-gates its id range; the evaluator stays brand- and range-agnostic. Adding a new variable surface is additive: register an on a dependency or push an onto the per-preset list. Same-block forward reference — when an Assignment RHS references a #nnn that is also being assigned later in the same block (i.e. listed in Parsing.Assignments after the RHS being evaluated), the cannot pick up the not-yet-resolved value and falls back to traceback / dependency-table reads — effectively the pre-block value. A VariableEvaluator--SameBlockForwardReference warning is emitted per such RHS so the user is told the source-order semantics were not honoured. Practical impact is near-zero for typical CAM-emitted NC (one assignment per line).">
<meta name="description" content="Pure expression normalizer for Custom Macro B syntax. Walks the parser-stage residue on a single block and inlines numeric values wherever a Fanuc-style variable reference or bracket expression appears — but does not write to any specific store. Routing &amp;ldquo;where the resolved literal lands&amp;rdquo; stays in the brand-specific reader syntaxes (, &#39;s reader, , …) which run after this syntax on the same block. Two passes per block: Assignments normalize — Parsing.Assignments.#nnn entries whose RHS is non-literal (e.g. &quot;#500+1&quot;, &quot;SQRT[#100]&quot;) are evaluated via the and the RHS string is replaced with the resolved literal (round-trip-safe &quot;R&quot;-format). The entry stays in Parsing.Assignments so downstream reader syntaxes consume it as a pure-literal assignment. Iteration follows source order (Parsing.Assignments insertion order). Parsing tree substitution — every string-typed value reachable from Parsing.&amp;lt;tag&amp;gt; (axis tags, canned-cycle sub-objects) is parsed; on a successful evaluation the string is replaced with a numeric . Failures silently leave the original string and rely on downstream at consumer sites to surface VariableExpression--Unevaluated only if the tag is actually read. Lookup chain (first non-null wins, configured per brand preset via + instances on NcDependencyList): Current block&#39;s own resolved assignments — built-in to ; covers same-block forward references in source order (an earlier #nnn=literal is visible to a later RHS that mentions #nnn).Each in , in list order. Typical contents for a Fanuc-family preset: (#1-#33), (#100-#499), (#5001-#5043).Each on the runner&#39;s NcDependencyList, in registration order (, , ). Each lookup self-gates its id range; the evaluator stays brand- and range-agnostic. Adding a new variable surface is additive: register an on a dependency or push an onto the per-preset list. Same-block forward reference — when an Assignment RHS references a #nnn that is also being assigned later in the same block (i.e. listed in Parsing.Assignments after the RHS being evaluated), the cannot pick up the not-yet-resolved value and falls back to traceback / dependency-table reads — effectively the pre-block value. A VariableEvaluator--SameBlockForwardReference warning is emitted per such RHS so the user is told the source-order semantics were not honoured. Practical impact is near-zero for typical CAM-emitted NC (one assignment per line). Formula mirror tree — when either pass actually performs a non-trivial expression evaluation (i.e. the RHS / tag value was not already a pure literal and the evaluator returned a finite value), the original expression string is mirrored to a parallel Formula.&amp;lt;same path&amp;gt; entry at the root of the block JSON. The Parsing.* subtree carries the resolved value (R-format string for Assignments; numeric for tags); the Formula.* subtree preserves the source-text expression for diagnostics, round-trip reconstruction, and downstream inspection. Pure-literal RHS / tag values produce no Formula entry — the Parsing value is already the original text. Evaluation failures (parse error, vacant variable, non-finite result) also produce no Formula entry — the original string is still in Parsing.* untouched, no preservation needed.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -163,6 +163,22 @@ emitted per such RHS so the user is told the source-order semantics
were not honoured. Practical impact is near-zero for typical
CAM-emitted NC (one assignment per line).
</p>
<p>
<b>Formula mirror tree</b> — when either pass actually performs a
non-trivial expression evaluation (i.e. the RHS / tag value was not
already a pure literal and the evaluator returned a finite value),
the original expression string is mirrored to a parallel
<code>Formula.&lt;same path&gt;</code> entry at the root of the block JSON.
The <code>Parsing.*</code> subtree carries the resolved value (R-format
string for Assignments; numeric <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> for tags);
the <code>Formula.*</code> subtree preserves the source-text expression
for diagnostics, round-trip reconstruction, and downstream
inspection. Pure-literal RHS / tag values produce no Formula entry —
the Parsing value is already the original text. Evaluation failures
(parse error, vacant variable, non-finite result) also produce no
Formula entry — the original string is still in <code>Parsing.*</code>
untouched, no preservation needed.
</p>
</div>
<div class="markdown conceptual"></div>
@ -310,6 +326,41 @@ CAM-emitted NC (one assignment per line).
<h2 class="section" id="fields">Fields
</h2>
<h3 id="Hi_NcParsers_EvaluationSyntaxs_VariableEvaluatorSyntax_FormulaKey" data-uid="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.FormulaKey">
FormulaKey
</h3>
<div class="markdown level1 summary"><p>Top-level key under which the Formula mirror tree is written.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public const string FormulaKey = &quot;Formula&quot;</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="properties">Properties
</h2>

View File

@ -273,7 +273,7 @@ caller's <code>N{seq}</code> block via
<a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html#Hi_Common_Collections_LazyLinkedList_1_ReplaceSource_System_Collections_Generic_IEnumerable__0__">ReplaceSource(IEnumerable&lt;T&gt;)</a>. The caller's file is
resolved from the popped frame's
<a class="xref" href="Hi.NcParsers.Keywords.CallFrame.html#Hi_NcParsers_Keywords_CallFrame_CallerFilePath">CallerFilePath</a>; the scan uses the same
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html#Hi_NcParsers_EvaluationSyntaxs_LabelScanUtil_SegmentAndSkipUntilLabel_Hi_NcParsers_Segmenters_ISegmenter_System_String_System_String_System_Int32_System_Int32_System_Int32_System_Collections_Generic_List_Hi_NcParsers_Syntaxs_ISituNcSyntax__Hi_NcParsers_NcDiagnosticProgress_">SegmentAndSkipUntilLabel(ISegmenter, string, string, int, int, int, List&lt;ISituNcSyntax&gt;, NcDiagnosticProgress)</a> helper as
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html">LabelScanUtil</a>.<code>SegmentAndSkipUntilLabel</code> helper as
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a>, with hardcoded Fanuc-default
probes (<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html">QuoteCommentSyntax</a> + <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html">HeadIndexSyntax</a>
with symbol <code>"N"</code>) because the M99 P semantic itself is
@ -373,6 +373,22 @@ emitted per such RHS so the user is told the source-order semantics
were not honoured. Practical impact is near-zero for typical
CAM-emitted NC (one assignment per line).
</p>
<p>
<b>Formula mirror tree</b> — when either pass actually performs a
non-trivial expression evaluation (i.e. the RHS / tag value was not
already a pure literal and the evaluator returned a finite value),
the original expression string is mirrored to a parallel
<code>Formula.&lt;same path&gt;</code> entry at the root of the block JSON.
The <code>Parsing.*</code> subtree carries the resolved value (R-format
string for Assignments; numeric <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> for tags);
the <code>Formula.*</code> subtree preserves the source-text expression
for diagnostics, round-trip reconstruction, and downstream
inspection. Pure-literal RHS / tag values produce no Formula entry —
the Parsing value is already the original text. Evaluation failures
(parse error, vacant variable, non-finite result) also produce no
Formula entry — the original string is still in <code>Parsing.*</code>
untouched, no preservation needed.
</p>
</dd>
</dl>
<dl class="jumplist">

View File

@ -2,11 +2,11 @@
<html>
<head>
<meta charset="utf-8">
<title>Class NumericalService.NumericalServiceBase | HiAPI-C# 2025 </title>
<title>Interface ISessionResettable | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class NumericalService.NumericalServiceBase | HiAPI-C# 2025 ">
<meta name="title" content="Interface ISessionResettable | HiAPI-C# 2025 ">
<meta name="description" content="Base class for server-side implementations of NumericalService">
<meta name="description" content="Marker for objects that hold session-scoped runtime state which must be cleared when initializes a new session pipeline (the state.IsInitialized == false edge). Implementers may live on either chain: or . scans and on the session-init edge and calls on every match. Distinct from : power-reset clears retained-but-volatile state on a controller power cycle (e.g., Fanuc #100-#499), an edge that survives ordinary session boundaries. Session-reset clears state whose lifetime is one pipeline pass (iteration counters, file-index allocators, etc.).">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -84,70 +84,62 @@
<nav id="breadcrumb"></nav>
</div>
<article data-uid="numerical.NumericalService.NumericalServiceBase">
<article data-uid="Hi.NcParsers.ISessionResettable">
<h1 id="numerical_NumericalService_NumericalServiceBase" data-uid="numerical.NumericalService.NumericalServiceBase" class="text-break">
Class NumericalService.NumericalServiceBase
<h1 id="Hi_NcParsers_ISessionResettable" data-uid="Hi.NcParsers.ISessionResettable" class="text-break">
Interface ISessionResettable
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="numerical.html">numerical</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiGeom.dll</dd></dl>
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.NcParsers.html">NcParsers</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Base class for server-side implementations of NumericalService</p>
<div class="markdown summary"><p>Marker for objects that hold session-scoped runtime state which must be
cleared when <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> initializes a new
session pipeline (the <code>state.IsInitialized == false</code> edge).</p>
<p>
Implementers may live on either chain: <a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>
or <a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a>. <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> scans
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcDependencyList">NcDependencyList</a> and
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcSyntaxList">NcSyntaxList</a> on the session-init edge and calls
<a class="xref" href="Hi.NcParsers.ISessionResettable.html#Hi_NcParsers_ISessionResettable_OnSessionReset">OnSessionReset()</a> on every match.
</p>
<p>
Distinct from <a class="xref" href="Hi.NcParsers.Dependencys.IPowerResettable.html">IPowerResettable</a>: power-reset clears
retained-but-volatile state on a controller power cycle (e.g., Fanuc
<code>#100-#499</code>), an edge that survives ordinary session boundaries.
Session-reset clears state whose lifetime is one pipeline pass (iteration
counters, file-index allocators, etc.).
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">[BindServiceMethod(typeof(NumericalService), &quot;BindService&quot;)]
public abstract class NumericalService.NumericalServiceBase</code></pre>
<pre><code class="lang-csharp hljs">public interface ISessionResettable</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">NumericalService.NumericalServiceBase</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>
<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&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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>
@ -160,15 +152,6 @@ public abstract class NumericalService.NumericalServiceBase</code></pre>
<div>
<a class="xref" href="Hi.Parallels.LockUtil.html#Hi_Parallels_LockUtil_Lock_System_Object_">LockUtil.Lock(object)</a>
</div>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
</div>
</dd></dl>
@ -179,33 +162,26 @@ public abstract class NumericalService.NumericalServiceBase</code></pre>
</h2>
<a id="numerical_NumericalService_NumericalServiceBase_GetNcStepGrpcCsvRowDictionary_" data-uid="numerical.NumericalService.NumericalServiceBase.GetNcStepGrpcCsvRowDictionary*"></a>
<a id="Hi_NcParsers_ISessionResettable_OnSessionReset_" data-uid="Hi.NcParsers.ISessionResettable.OnSessionReset*"></a>
<h3 id="numerical_NumericalService_NumericalServiceBase_GetNcStepGrpcCsvRowDictionary_numerical_Empty_Grpc_Core_ServerCallContext_" data-uid="numerical.NumericalService.NumericalServiceBase.GetNcStepGrpcCsvRowDictionary(numerical.Empty,Grpc.Core.ServerCallContext)">
GetNcStepGrpcCsvRowDictionary(Empty, ServerCallContext)
<h3 id="Hi_NcParsers_ISessionResettable_OnSessionReset" data-uid="Hi.NcParsers.ISessionResettable.OnSessionReset">
OnSessionReset()
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 summary"><p>Clears the session-scoped subset owned by this object. Called by
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> on the same edge that
rebuilds the syntax-piece pipeline so a runner reused across
sessions does not leak counters / allocators / accumulators from
the previous session.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public virtual Task&lt;GrpcCsvRowDictionary&gt; GetNcStepGrpcCsvRowDictionary(Empty request, ServerCallContext context)</code></pre>
<pre><code class="lang-csharp hljs">void OnSessionReset()</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <a class="xref" href="numerical.Empty.html">Empty</a></dt>
<dd></dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</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.threading.tasks.task-1">Task</a>&lt;<a class="xref" href="numerical.GrpcCsvRowDictionary.html">GrpcCsvRowDictionary</a>&gt;</dt>
<dd></dd>
</dl>

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FanucGoto | HiAPI-C# 2025 ">
<meta name="description" content="Fanuc Custom Macro B GOTO record. Stamped on the host block by after the control-flow decision has been made; produced earlier by as a parsing-stage sub-section (Parsing.FanucGoto) carrying the raw captured fields. Two source forms map to the same shape: GOTO &amp;lt;n&amp;gt; — unconditional jump. is null.IF [&amp;lt;bool-expr&amp;gt;] GOTO &amp;lt;n&amp;gt; — conditional jump. holds the expression text from inside the brackets. At parsing time is a raw token from the source — it may be a literal (&quot;100&quot;), a variable reference (&quot;#1&quot;), or a bracketed expression (&quot;#[#2+5]&quot;). substitutes a resolved literal back into the same field in the Evaluation bundle; then int.TryParses the final string to produce an int target.">
<meta name="description" content="Fanuc Custom Macro B GOTO record. Stamped on the host block by after the control-flow decision has been made; produced earlier by as a parsing-stage sub-section (Parsing.FanucGoto) carrying the raw captured fields. Two source forms map to the same shape: GOTO &amp;lt;n&amp;gt; — unconditional jump. is null.IF [&amp;lt;bool-expr&amp;gt;] GOTO &amp;lt;n&amp;gt; — conditional jump. holds the expression text from inside the brackets. At parsing time is a raw token from the source — it may be a literal (&quot;100&quot;), a variable reference (&quot;#1&quot;), or a bracketed expression (&quot;#[#2+5]&quot;). substitutes a resolved literal back into the same field in the Evaluation bundle; then int.TryParses the final string to produce an int target. Lifecycle of the condition fields. is written at Parsing time as the raw expression text and substituted in place by pass-2 — the original text is preserved at Formula.FanucGoto.Condition when substitution succeeds. is the host-level stamp written by carrying the tri-state truthy outcome.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -116,6 +116,16 @@ substitutes a resolved literal back into the same field in the
Evaluation bundle; <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a> then
<code>int.TryParse</code>s the final string to produce an int target.
</p>
<p>
<b>Lifecycle of the condition fields.</b>
<ul><li><a class="xref" href="Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_Condition">Condition</a> is written at Parsing time as the raw
expression text and substituted in place by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> pass-2 — the
original text is preserved at <code>Formula.FanucGoto.Condition</code>
when substitution succeeds.</li><li><a class="xref" href="Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_ConditionEvaluated">ConditionEvaluated</a> is the host-level stamp
written by <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a>
carrying the tri-state truthy outcome.</li></ul>
</div>
<div class="markdown conceptual"></div>
@ -204,10 +214,13 @@ Evaluation bundle; <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.Fa
</h3>
<div class="markdown level1 summary"><p>Raw boolean expression text from inside the <code>IF [...]</code>
brackets, or null for the unconditional form. Evaluator boolean
support is pending — until then,
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a> emits a warning
and falls through for any non-null <a class="xref" href="Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_Condition">Condition</a>.</p>
brackets at Parsing time; substituted to a numeric
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> in place by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> when the
expression evaluates successfully. The original text survives at
<code>Formula.FanucGoto.Condition</code>. Null for the unconditional
form. Note: not written on the host-level stamp; the gate
outcome lives at <a class="xref" href="Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_ConditionEvaluated">ConditionEvaluated</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
@ -232,6 +245,46 @@ and falls through for any non-null <a class="xref" href="Hi.NcParsers.Keywords.F
<a id="Hi_NcParsers_Keywords_FanucGoto_ConditionEvaluated_" data-uid="Hi.NcParsers.Keywords.FanucGoto.ConditionEvaluated*"></a>
<h3 id="Hi_NcParsers_Keywords_FanucGoto_ConditionEvaluated" data-uid="Hi.NcParsers.Keywords.FanucGoto.ConditionEvaluated">
ConditionEvaluated
</h3>
<div class="markdown level1 summary"><p>Tri-state outcome of evaluating the IF-form's boolean condition,
stamped on the host block by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a>:</p>
<ul><li><code>true</code> — condition met (gate fires).</li><li><code>false</code> — condition not met (gate falls through silently).</li><li><code>null</code> — evaluator could not produce a finite truth
value (vacant variable, parse error, NaN / ±∞), or the host
block is the unconditional <code>GOTO</code> form.</li></ul>
The original expression text is preserved at
<code>Formula.FanucGoto.Condition</code> by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>.
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool? ConditionEvaluated { 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_NcParsers_Keywords_FanucGoto_Fired_" data-uid="Hi.NcParsers.Keywords.FanucGoto.Fired*"></a>
<h3 id="Hi_NcParsers_Keywords_FanucGoto_Fired" data-uid="Hi.NcParsers.Keywords.FanucGoto.Fired">

View File

@ -283,13 +283,14 @@ parsing syntax via <a class="xref" href="Hi.NcParsers.Syntaxs.NcSyntaxUtil.html"
</h3>
<div class="markdown level1 summary"><p>Raw boolean expression text from inside the <code>IF [...]</code> brackets.
String at parsing time;
<div class="markdown level1 summary"><p>Raw boolean expression text from inside the <code>IF [...]</code> brackets
at Parsing time; substituted to a numeric
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> in place by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>'s pass-2 tree
walk substitutes a numeric literal in place when the expression
evaluates successfully. <code>FanucIfThenSyntax</code> reads the resulting
JSON node polymorphically (number → truthy gate; remaining string →
unevaluated warning).</p>
walk when the expression evaluates successfully. The original text
survives at <code>Formula.FanucIfThen.Condition</code>. Note: not written
on the host-level stamp; the gate outcome lives at
<a class="xref" href="Hi.NcParsers.Keywords.FanucIfThen.html#Hi_NcParsers_Keywords_FanucIfThen_ConditionEvaluated">ConditionEvaluated</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
@ -314,6 +315,45 @@ unevaluated warning).</p>
<a id="Hi_NcParsers_Keywords_FanucIfThen_ConditionEvaluated_" data-uid="Hi.NcParsers.Keywords.FanucIfThen.ConditionEvaluated*"></a>
<h3 id="Hi_NcParsers_Keywords_FanucIfThen_ConditionEvaluated" data-uid="Hi.NcParsers.Keywords.FanucIfThen.ConditionEvaluated">
ConditionEvaluated
</h3>
<div class="markdown level1 summary"><p>Tri-state outcome of evaluating the IF-form's boolean condition,
stamped on the host block by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html">FanucIfThenSyntax</a>:</p>
<ul><li><code>true</code> — condition met (body fires).</li><li><code>false</code> — condition not met (body skipped silently).</li><li><code>null</code> — evaluator could not produce a finite truth
value (vacant variable, parse error, NaN / ±∞).</li></ul>
The original expression text is preserved at
<code>Formula.FanucIfThen.Condition</code> by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>.
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool? ConditionEvaluated { 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>
</article>

View File

@ -0,0 +1,388 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class FanucWhileDo | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FanucWhileDo | HiAPI-C# 2025 ">
<meta name="description" content="Fanuc Custom Macro B WHILE/END bounded-loop record. Stamped on the host block by after the control-flow decision has been made; produced earlier by as a parsing-stage sub-section (Parsing.FanucWhileDo) carrying the raw captured fields. Two phrases map to the same shape, distinguished by : WHILE [&amp;lt;bool-expr&amp;gt;] DO &amp;lt;m&amp;gt; — loop entry. holds the expression text from inside the brackets at parsing time; substituted to a numeric by in place. carries the host-level truthy outcome at stamp time.END &amp;lt;m&amp;gt; — loop terminator. Carries no condition; unconditionally reverse-jumps to the matching WHILE block on every execution (re-evaluation of the entry condition is the WHILE block&#39;s responsibility). is the spec-named &quot;identification number for nesting&quot; (the m in DO m / END m). Nested loops must use distinct LoopIds; matching is by exact value. Same-LoopId nesting is spec-undefined and not given special handling here. Active loop frames are carried block-to-block via the top-level WhileFrames JSON section (a keyed by LoopId-as-string, each entry recording the BeginLineNo of the WHILE block that opened that frame). Carried by as part of its tracked keys (mutated in Evaluation, must reach Logic-stage consumers and downstream blocks unchanged).">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.Keywords.FanucWhileDo">
<h1 id="Hi_NcParsers_Keywords_FanucWhileDo" data-uid="Hi.NcParsers.Keywords.FanucWhileDo" class="text-break">
Class FanucWhileDo
</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>Fanuc Custom Macro B WHILE/END bounded-loop record. Stamped on the
host block by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html">FanucWhileDoSyntax</a> after the
control-flow decision has been made; produced earlier by
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html">FanucWhileDoParsingSyntax</a> as a
parsing-stage sub-section (<code>Parsing.FanucWhileDo</code>) carrying the
raw captured fields.</p>
<p>
Two phrases map to the same shape, distinguished by <a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_Term">Term</a>:
<ul><li><code>WHILE [&lt;bool-expr&gt;] DO &lt;m&gt;</code> — loop entry.
<a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_Condition">Condition</a> holds the expression text from inside the
brackets at parsing time; substituted to a numeric
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> in place.
<a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_ConditionEvaluated">ConditionEvaluated</a> carries the host-level truthy
outcome at stamp time.</li><li><code>END &lt;m&gt;</code> — loop terminator. Carries no condition;
unconditionally reverse-jumps to the matching WHILE block on every
execution (re-evaluation of the entry condition is the WHILE block's
responsibility).</li></ul>
<p>
<a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_LoopId">LoopId</a> is the spec-named "identification number for
nesting" (the <code>m</code> in <code>DO m</code> / <code>END m</code>). Nested loops
must use distinct LoopIds; matching is by exact value. Same-LoopId
nesting is spec-undefined and not given special handling here.
</p>
<p>
Active loop frames are carried block-to-block via the top-level
<code>WhileFrames</code> JSON section (a <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a>
keyed by LoopId-as-string, each entry recording the
<code>BeginLineNo</code> of the WHILE block that opened that frame).
Carried by <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a> as part
of its <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_Logic">Logic</a> tracked
keys (mutated in Evaluation, must reach Logic-stage consumers and
downstream blocks unchanged).
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class FanucWhileDo</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">FanucWhileDo</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>
<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&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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="properties">Properties
</h2>
<a id="Hi_NcParsers_Keywords_FanucWhileDo_Condition_" data-uid="Hi.NcParsers.Keywords.FanucWhileDo.Condition*"></a>
<h3 id="Hi_NcParsers_Keywords_FanucWhileDo_Condition" data-uid="Hi.NcParsers.Keywords.FanucWhileDo.Condition">
Condition
</h3>
<div class="markdown level1 summary"><p>Raw boolean expression text from inside the WHILE's <code>[...]</code>
brackets at Parsing time; substituted to a numeric
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> in place by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> when the
expression evaluates successfully. The original text survives at
<code>Formula.FanucWhileDo.Condition</code>. Null on the END phrase.
Note: not written on the host-level stamp; the gate outcome lives at
<a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_ConditionEvaluated">ConditionEvaluated</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Condition { 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.string">string</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Keywords_FanucWhileDo_ConditionEvaluated_" data-uid="Hi.NcParsers.Keywords.FanucWhileDo.ConditionEvaluated*"></a>
<h3 id="Hi_NcParsers_Keywords_FanucWhileDo_ConditionEvaluated" data-uid="Hi.NcParsers.Keywords.FanucWhileDo.ConditionEvaluated">
ConditionEvaluated
</h3>
<div class="markdown level1 summary"><p>Tri-state outcome of evaluating the WHILE's boolean condition,
stamped on the host block by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html">FanucWhileDoSyntax</a>:</p>
<ul><li><code>true</code> — condition met (body executes; loop continues).</li><li><code>false</code> — condition not met (loop exits; forward-jump
past matching END).</li><li><code>null</code> — evaluator could not produce a finite truth
value (vacant variable, parse error, NaN / ±∞); loop exits
defensively and emits
<code>FanucWhileDo--ConditionNotEvaluated</code>.</li></ul>
Null also on the END phrase (no condition to evaluate). The original
expression text is preserved at <code>Formula.FanucWhileDo.Condition</code>
by <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>.
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool? ConditionEvaluated { 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_NcParsers_Keywords_FanucWhileDo_LoopId_" data-uid="Hi.NcParsers.Keywords.FanucWhileDo.LoopId*"></a>
<h3 id="Hi_NcParsers_Keywords_FanucWhileDo_LoopId" data-uid="Hi.NcParsers.Keywords.FanucWhileDo.LoopId">
LoopId
</h3>
<div class="markdown level1 summary"><p>The <code>m</code> identifier from <code>DO m</code> / <code>END m</code> — the
spec-named &ldquo;identification number for nesting&rdquo;. Nested loops use
distinct LoopIds (13 typical); WHILE and END pair by exact match.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int LoopId { 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.int32">int</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_Keywords_FanucWhileDo_Term_" data-uid="Hi.NcParsers.Keywords.FanucWhileDo.Term*"></a>
<h3 id="Hi_NcParsers_Keywords_FanucWhileDo_Term" data-uid="Hi.NcParsers.Keywords.FanucWhileDo.Term">
Term
</h3>
<div class="markdown level1 summary"><p>Triggering phrase: <code>&ldquo;WHILE...DO&rdquo;</code> for the loop entry form,
<code>&ldquo;END&rdquo;</code> for the loop terminator.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Term { 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.string">string</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>

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Interface IArcMotionDef | HiAPI-C# 2025 ">
<meta name="description" content="Arc motion data written by . Stored under the JSON section alongside properties.">
<meta name="description" content="Arc motion data written by . Stored under the JSON section alongside properties. The arc plane is read from the modal section via rather than cached on the event — same source of truth as .">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -98,8 +98,12 @@ Interface IArcMotionDef
</div>
<div class="markdown summary"><p>Arc motion data written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html">CircularMotionSyntax</a>.
Stored under the <a class="xref" href="Hi.Motion.html">Hi.Motion</a> JSON section alongside
<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> properties.</p>
Stored under the <a class="xref" href="Hi.NcParsers.Keywords.MotionEvent.html">MotionEvent</a> JSON section alongside
<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> properties. The arc plane is read from the
modal <a class="xref" href="Hi.NcParsers.Keywords.PlaneSelect.html">PlaneSelect</a> section via
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html#Hi_NcParsers_LogicSyntaxs_PlaneSelectSyntax_GetPlaneNormalDir_System_Text_Json_Nodes_JsonObject_">GetPlaneNormalDir(JsonObject)</a> rather than
cached on the event — same source of truth as
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html">IsoG68RotationSyntax</a>.</p>
</div>
<div class="markdown conceptual"></div>
@ -142,11 +146,9 @@ Stored under the <a class="xref" href="Hi.Motion.html">Hi.Motion</a> JSON sectio
<h2 id="Hi_NcParsers_Keywords_IArcMotionDef_examples">Examples</h2>
<pre><code class="lang-csharp">"Motion": {
"Mode": "G02",
<pre><code class="lang-csharp">"MotionEvent": {
"Form": "McArc",
"ArcCenter": { "X": 10.0, "Y": 5.0, "Z": 0.0 },
"PlaneNormalDir": 2,
"IsCcw": false,
"AdditionalCircleNum": 0
}</code></pre>
@ -254,38 +256,6 @@ Stored under the <a class="xref" href="Hi.Motion.html">Hi.Motion</a> JSON sectio
<a id="Hi_NcParsers_Keywords_IArcMotionDef_PlaneNormalDir_" data-uid="Hi.NcParsers.Keywords.IArcMotionDef.PlaneNormalDir*"></a>
<h3 id="Hi_NcParsers_Keywords_IArcMotionDef_PlaneNormalDir" data-uid="Hi.NcParsers.Keywords.IArcMotionDef.PlaneNormalDir">
PlaneNormalDir
</h3>
<div class="markdown level1 summary"><p>Perpendicular axis direction (0=X, 1=Y, 2=Z). G17→2, G18→1, G19→0.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">int PlaneNormalDir { 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.int32">int</a></dt>
<dd></dd>
</dl>
</article>

View File

@ -217,6 +217,16 @@ substitutes a resolved literal back into the same field in the
Evaluation bundle; <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a> then
<code>int.TryParse</code>s the final string to produce an int target.
</p>
<p>
<b>Lifecycle of the condition fields.</b>
<ul><li><a class="xref" href="Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_Condition">Condition</a> is written at Parsing time as the raw
expression text and substituted in place by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> pass-2 — the
original text is preserved at <code>Formula.FanucGoto.Condition</code>
when substitution succeeds.</li><li><a class="xref" href="Hi.NcParsers.Keywords.FanucGoto.html#Hi_NcParsers_Keywords_FanucGoto_ConditionEvaluated">ConditionEvaluated</a> is the host-level stamp
written by <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html">FanucGotoSyntax</a>
carrying the tri-state truthy outcome.</li></ul>
</dd>
</dl>
<dl class="jumplist">
@ -298,6 +308,46 @@ G66 modal" via the carried section.
<a class="xref" href="Hi.NcParsers.Keywords.TapeBoundary.html">TapeBoundary</a> line — e.g. <code>O1234</code> or
<code>&lt;O1234&gt;</code>. <a class="xref" href="Hi.NcParsers.Keywords.FanucProgramNumber.html#Hi_NcParsers_Keywords_FanucProgramNumber_Wrapper">Wrapper</a> records the surface form
so a parsed block can be emitted back to the original notation.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html">FanucWhileDo</a></dt>
<dd><p>Fanuc Custom Macro B WHILE/END bounded-loop record. Stamped on the
host block by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html">FanucWhileDoSyntax</a> after the
control-flow decision has been made; produced earlier by
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html">FanucWhileDoParsingSyntax</a> as a
parsing-stage sub-section (<code>Parsing.FanucWhileDo</code>) carrying the
raw captured fields.</p>
<p>
Two phrases map to the same shape, distinguished by <a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_Term">Term</a>:
<ul><li><code>WHILE [&lt;bool-expr&gt;] DO &lt;m&gt;</code> — loop entry.
<a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_Condition">Condition</a> holds the expression text from inside the
brackets at parsing time; substituted to a numeric
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonvalue">JsonValue</a> by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> in place.
<a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_ConditionEvaluated">ConditionEvaluated</a> carries the host-level truthy
outcome at stamp time.</li><li><code>END &lt;m&gt;</code> — loop terminator. Carries no condition;
unconditionally reverse-jumps to the matching WHILE block on every
execution (re-evaluation of the entry condition is the WHILE block's
responsibility).</li></ul>
<p>
<a class="xref" href="Hi.NcParsers.Keywords.FanucWhileDo.html#Hi_NcParsers_Keywords_FanucWhileDo_LoopId">LoopId</a> is the spec-named "identification number for
nesting" (the <code>m</code> in <code>DO m</code> / <code>END m</code>). Nested loops
must use distinct LoopIds; matching is by exact value. Same-LoopId
nesting is spec-undefined and not given special handling here.
</p>
<p>
Active loop frames are carried block-to-block via the top-level
<code>WhileFrames</code> JSON section (a <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a>
keyed by LoopId-as-string, each entry recording the
<code>BeginLineNo</code> of the WHILE block that opened that frame).
Carried by <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a> as part
of its <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html#Hi_NcParsers_PostLogicSyntaxs_ModalCarrySyntax_Logic">Logic</a> tracked
keys (mutated in Evaluation, must reach Logic-stage consumers and
downstream blocks unchanged).
</p>
</dd>
</dl>
<dl class="jumplist">
@ -498,8 +548,12 @@ Interfaces
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IArcMotionDef.html">IArcMotionDef</a></dt>
<dd><p>Arc motion data written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html">CircularMotionSyntax</a>.
Stored under the <a class="xref" href="Hi.Motion.html">Hi.Motion</a> JSON section alongside
<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> properties.</p>
Stored under the <a class="xref" href="Hi.NcParsers.Keywords.MotionEvent.html">MotionEvent</a> JSON section alongside
<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> properties. The arc plane is read from the
modal <a class="xref" href="Hi.NcParsers.Keywords.PlaneSelect.html">PlaneSelect</a> section via
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html#Hi_NcParsers_LogicSyntaxs_PlaneSelectSyntax_GetPlaneNormalDir_System_Text_Json_Nodes_JsonObject_">GetPlaneNormalDir(JsonObject)</a> rather than
cached on the event — same source of truth as
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html">IsoG68RotationSyntax</a>.</p>
</dd>
</dl>
<dl class="jumplist">

View File

@ -194,6 +194,49 @@ syntax runs.
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_BackBoringSyntax_examples">Examples</h2>
<p>G87 G98 — pre-populated <a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a>, no
<code>#Previous:</code> so <code>initZ = 0</code>, F=600 → 10 mm/s, shift Q=1.
Eleven items — the longest canned-cycle item list — split into three
phases: enter shifted (OSS, shifted-init, shifted-bottom, back-to-
center, spindle-CW); cut upward (feed bottom → R); retract shifted
(OSS again, shifted-at-R, shifted-final, back-to-center, spindle-
restart). Note that the feed step goes UP (Z=-10 → Z=2), not down,
which is the defining feature of back boring:
#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "G87": { "X": 50, "Y": 30, "Z": -10, "R": 2, "Q": 1, "F": 600 } },
"CannedCycle": {
"Term": "G87", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2, "Q": 1 }
}
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G87", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2, "Q": 1 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G87",
"Items": [
{ "SpindleOrientation": { "Angle_deg": 0 } },
{ "ProgramXyz": { "X": 51, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 51, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "SpindleControl": { "Direction": "CW" } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "SpindleOrientation": { "Angle_deg": 0 } },
{ "ProgramXyz": { "X": 51, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 51, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "SpindleControl": { "Direction": "CW" } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Enum BareG28Behavior | HiAPI-C# 2025 ">
<meta name="description" content="Writes section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by ) and converts to machine coordinates via . Must be placed after in the syntax chain. Removes the section written by (G28 handles its own motion). Overwrites root and with reference position for subsequent block lookback.">
<meta name="description" content="Configurable handling for a G28 block with no axis specifiers (&amp;ldquo;bare G28&amp;rdquo;) — value of . Real Fanuc-class controllers vary: older 0i-M alarms (PS010), some 30i variants send every configured axis to home. Default to so silent NC bugs surface; opt into per syntax instance.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -98,19 +98,12 @@ Enum BareG28Behavior
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Writes <a class="xref" href="Hi.NcParsers.Keywords.ICompoundMotionDef.html">ICompoundMotionDef</a> section for G28 reference point return.
Reads intermediate XYZ from <code>Parsing.G28</code>
(written by <a class="xref" href="Hi.NcParsers.Syntaxs.GenericSyntaxKit.html#Hi_NcParsers_Syntaxs_GenericSyntaxKit_G28Syntax">G28Syntax</a>)
and converts to machine coordinates via
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzUtil_ResolveProgramXyz_System_Text_Json_Nodes_JsonNode_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__Hi_NcParsers_ISentenceCarrier_Hi_NcParsers_NcDiagnosticProgress_">ResolveProgramXyz(JsonNode, LazyLinkedListNode&lt;SyntaxPiece&gt;, ISentenceCarrier, NcDiagnosticProgress)</a>.</p>
<p>
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> in the syntax chain.
Removes the <a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> section written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> (G28 handles its own motion).
Overwrites root <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a>
and <a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> with reference position
for subsequent block lookback.
</p>
<div class="markdown summary"><p>Configurable handling for a G28 block with no axis specifiers
(&ldquo;bare G28&rdquo;) — value of <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_BareG28">BareG28</a>.
Real Fanuc-class controllers vary: older 0i-M alarms (PS010), some
30i variants send every configured axis to home. Default to
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html#Hi_NcParsers_LogicSyntaxs_BareG28Behavior_Alarm">Alarm</a> so silent NC bugs surface; opt into
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html#Hi_NcParsers_LogicSyntaxs_BareG28Behavior_AllAxesHome">AllAxesHome</a> per syntax instance.</p>
</div>
<div class="markdown conceptual"></div>
@ -172,193 +165,6 @@ the syntax falls back to <a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28
</dd>
</dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_BareG28Behavior_examples">Examples</h2>
<p>All cases hardcode a <code>TestDeps.HomeMc</code> with X/Y home at 0 and Z
home at 100 (typical mill where Z-home is above the table) and leave
the <code>ProgramToMcTransform</code> chain at identity so the final
<code>ProgramXyz</code> equals <code>MachineCoordinateState</code>. The G28
pattern emits a 2-item <code>CompoundMotion</code>: item 0 is the
intermediate point in <code>ProgramXyz</code>, item 1 is the final position
in <code>MachineCoordinateState</code>. Axes not present in the G28 block
keep the previous-block MC value rather than going home.</p>
<p>
<code>G91 G28 X0 Y0 Z0</code> with a <code>#Previous:</code> block carrying
<code>MachineCoordinateState=(50,60,70)</code> — all three axes go home,
so the final MC is the configured home <code>(0,0,100)</code>:
</p>
#Previous:
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70 } }</code></pre>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CompoundMotion": {
"Term": "G28",
"Items": [
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"ProgramXyz": { "X": 0, "Y": 0, "Z": 0 }
},
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "X": 0, "Y": 0, "Z": 100 }
}
]
},
"ProgramXyz": { "X": 0, "Y": 0, "Z": 100 }
}</code></pre>
<code>G91 G28 Z0</code> — only Z goes to its home; X/Y inherit from the
previous block's MC. Item 0's intermediate <code>ProgramXyz</code> takes
X/Y from the inherited program XYZ (= previous MC under identity
transform) and Z from the literal 0 in the G28 block:
#Previous:
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70 } }</code></pre>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "Z": 0 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CompoundMotion": {
"Term": "G28",
"Items": [
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"ProgramXyz": { "X": 50, "Y": 60, "Z": 0 }
},
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "X": 50, "Y": 60, "Z": 100 }
}
]
},
"ProgramXyz": { "X": 50, "Y": 60, "Z": 100 }
}</code></pre>
No <a class="xref" href="Hi.NcParsers.Dependencys.IHomeMcConfig.html">IHomeMcConfig</a> dep on the dependency list — the
syntax early-returns and the G28 sub-section stays in <code>Parsing</code>
for an upstream consumer or downstream syntax to handle:
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }</code></pre>
<p>
Rotary cases below add <code>TestDeps.AxisConfig</code> declaring B as
rotary and extend <code>HomeMc</code> with the conventional B home at 0°.
Each rotary block uses literal B = 45° so item 0's intermediate
(45°), item 1's home (0°), and <code>#Previous:</code> modal B (30°) are
pairwise distinct — a test that swaps any two values for any other
is caught by the assertion. The wrap pass
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a>) is a different syntax, so
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>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
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> downstream — in the full pipeline that
syntax fills root <code>MachineCoordinateState</code>'s XYZ from root
<code>ProgramXyz</code>, but with no XYZ in the block there's nothing to
fill anyway). Root MC.B holds the canonical home for modal
carry-forward; root <code>ProgramXyz</code> is not written:
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "B": 45 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "B": 0 },
"CompoundMotion": {
"Term": "G28",
"Items": [
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "B": 45 }
},
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "B": 0 }
}
]
}
}</code></pre>
<code>G28 X0. B45.</code> mixed XYZ + rotary. Both axis kinds occupy the
same two items: item 0 carries the XYZ intermediate
<code>ProgramXyz</code> alongside the rotary literal in MC; item 1
carries the final XYZ MC alongside the rotary home in MC. Root
<code>MachineCoordinateState</code> here holds only the rotary modal value
(B = 0, the home); the XYZ portion of root MC would be filled by
the downstream <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> in the full pipeline
(out of scope for this per-SUT conformance). Root
<code>MachineCoordinateState</code> appears first because the
rotary-home write happens before <code>CompoundMotion</code> /
<code>ProgramXyz</code> are inserted. <code>#Previous:</code> carries B = 30 so
the prev rotary modal is distinct from both the literal (45) and
the home (0):
#Previous:
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70, "B": 30 } }</code></pre>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "X": 0, "B": 45 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "B": 0 },
"CompoundMotion": {
"Term": "G28",
"Items": [
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"ProgramXyz": { "X": 0, "Y": 60, "Z": 70 },
"MachineCoordinateState": { "B": 45 }
},
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "X": 0, "Y": 60, "Z": 70, "B": 0 }
}
]
},
"ProgramXyz": { "X": 0, "Y": 60, "Z": 70 }
}</code></pre>
<p>
Bare <code>G28</code> — no axis specifiers — exercises the configurable
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_BareG28">BareG28</a> policy. Default <a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html#Hi_NcParsers_LogicSyntaxs_BareG28Behavior_Alarm">Alarm</a>
emits <code>Coord-RefReturn--003</code> and consumes the G28 without
motion (the diagnostic surfaces through the
<a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a> sink, not the block JSON, so the
canonical <code>#AfterBuild</code> is just an empty object):
</p>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": {} } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{}</code></pre>
Bare <code>G28</code> with <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_BareG28">BareG28</a> set to
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html#Hi_NcParsers_LogicSyntaxs_BareG28Behavior_AllAxesHome">AllAxesHome</a>: the syntax synthesises a
literal at the inherited program position for every configured
linear axis and the previous modal angle for every configured
rotary axis (here X/Y/Z taken from the <code>#Previous:</code> MC under
the identity <code>ProgramToMcTransform</code>, B taken from the prev
modal). Item 0's intermediate therefore equals current (no motion
in stage 1) and item 1 sends each axis to its home:
#Previous:
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30, "B": 45 } }</code></pre>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": {} } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "B": 0 },
"CompoundMotion": {
"Term": "G28",
"Items": [
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"ProgramXyz": { "X": 10, "Y": 20, "Z": 30 },
"MachineCoordinateState": { "B": 45 }
},
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "X": 0, "Y": 0, "Z": 100, "B": 0 }
}
]
},
"ProgramXyz": { "X": 0, "Y": 0, "Z": 100 }
}</code></pre>
</article>

View File

@ -195,6 +195,109 @@ Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycle
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_BoringCycleSyntax_examples">Examples</h2>
<p>All cases below pre-populate <a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a> as
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> would have written it. There
is no <code>#Previous:</code>, so <code>GetLastProgramXyz</code> returns
<code>Vec3d.Zero</code><code>initZ = 0</code>. F is supplied inside the cycle
section so <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">ResolveFeedrate(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress)</a>
writes block-level <a class="xref" href="Hi.NcParsers.Keywords.Feedrate.html">Feedrate</a> (G94 default, 600 mm/min
→ 10 mm/s) before items are emitted. All cases use G98 return mode
so <code>finalZ = initZ = 0</code>.</p>
<p>
G85 — feed to bottom, feed retract (smooth bore finish). The retract
item carries the same <code>Feedrate_mmds</code> as the down-stroke. Four
items:
</p>
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "G85": { "X": 50, "Y": 30, "Z": -10, "R": 2, "F": 600 } },
"CannedCycle": {
"Term": "G85", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
}
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G85", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G85",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>
G86 — feed to bottom, spindle stop, rapid retract, spindle restart
CW. First marker to spell out
<code>{ "SpindleControl": { "Direction": ... } }</code> items. The retract
item carries <code>IsRapid: true</code> rather than a feedrate. Six items:
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "G86": { "X": 50, "Y": 30, "Z": -10, "R": 2, "F": 600 } },
"CannedCycle": {
"Term": "G86", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
}
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G86", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G86",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "SpindleControl": { "Direction": "STOP" } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "SpindleControl": { "Direction": "CW" } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>
G89 with P=0.3s dwell — like G85 but inserts a
<code>{ Dwell: { Time: 0.3 } }</code> item at the bottom before the feed
retract. Five items:
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "G89": { "X": 50, "Y": 30, "Z": -10, "R": 2, "F": 600, "P": 0.3 } },
"CannedCycle": {
"Term": "G89", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
}
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G89", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G89",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "Dwell": { "Time": 0.3 } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>
<h2 id="Hi_NcParsers_LogicSyntaxs_BoringCycleSyntax_remarks">Remarks</h2>
<div class="markdown level0 remarks"><p>G86 emits <a class="xref" href="Hi.NcParsers.Keywords.SpindleControl.html">SpindleControl</a> items for spindle stop (before

View File

@ -195,6 +195,65 @@ the individual cycle syntaxes in the chain.
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_CannedCycleResolveSyntax_examples">Examples</h2>
<p>Direct G81 active cycle, no <code>#Previous:</code> (so
<code>lastProgramXyz = Vec3d.Zero</code>) and no
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a> mode (so the absolute-coordinate path
runs, not G91 incremental). The resolved cycle sub-section is left
in <code>Parsing</code> under the cycle code for downstream cycle
syntaxes to consume; the <a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a> section
carries the snapshot used for modal lookback.
<code>ReturnMode</code> defaults to <a class="xref" href="Hi.NcParsers.Keywords.Generic.IsoKeywords.html#Hi_NcParsers_Keywords_Generic_IsoKeywords_G98">G98</a> when
neither the current block nor a previous block declares G98/G99:
#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "Parsing": { "G81": { "X": 50, "Y": 30, "Z": -10, "R": 2 } } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "G81": { "X": 50, "Y": 30, "Z": -10, "R": 2 } },
"CannedCycle": {
"Term": "G81",
"ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
}
}</code></pre>
<p>Modal repeat: the current block carries only an X override and no
cycle code, but <code>#Previous:</code> has an active G81 with stored
params. <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">MergeModalCycleSection(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress)</a>
merges X=60 (override) with Y/Z/R from stored params, removes the
consumed X from <code>Parsing</code> root, and writes the merged section
back to <code>Parsing.G81</code>. <code>ReturnMode</code> inherits &ldquo;G98&rdquo; from
the previous block's <a class="xref" href="Hi.NcParsers.Keywords.ICannedCycleDef.html#Hi_NcParsers_Keywords_ICannedCycleDef_ReturnMode">ReturnMode</a>:
#Previous:</p>
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G81",
"ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>
<p>#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "Parsing": { "X": 60 } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "G81": { "X": 60, "Y": 30, "Z": -10, "R": 2 } },
"CannedCycle": {
"Term": "G81",
"ReturnMode": "G98",
"Params": { "X": 60, "Y": 30, "Z": -10, "R": 2 }
}
}</code></pre>
<p>Explicit G80 cancel: standalone G80 flag with no cycle data. The
G80 flag is consumed and <a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a> = <code>{ Term: G80 }</code>
is written as a hard sentinel that
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">FindPreviousActiveCycle(LazyLinkedListNode&lt;SyntaxPiece&gt;, string[])</a> reads
to terminate modal lookback. No <code>ReturnMode</code> hint here (no
G98/G99 flag on the same block):
#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "Parsing": { "Flags": ["G80"] } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{ "CannedCycle": { "Term": "G80" } }</code></pre>

View File

@ -200,7 +200,9 @@ writes a <a class="xref" href="Hi.NcParsers.Keywords.MotionEvent.html">MotionEve
set (as a prior <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a> would have produced)
and run with no <code>#Previous:</code>, so <code>GetLastProgramXyz</code>
returns <code>Vec3d.Zero</code>. The G17 XY plane is implicit
(no <code>PlaneSelect</code> section means <code>PlaneNormalDir = 2</code>).</p>
(no <code>PlaneSelect</code> section means
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html#Hi_NcParsers_LogicSyntaxs_PlaneSelectSyntax_GetPlaneNormalDir_System_Text_Json_Nodes_JsonObject_">GetPlaneNormalDir(JsonObject)</a> returns 2 — the
XY-plane default — so arc math runs with Z as the perpendicular axis).</p>
<p>
G02 with I/J — quarter arc from <code>(0,0,0)</code> to <code>(10,0,0)</code>
around <code>(5,0,0)</code>; I=5 J=0 are incremental offsets from start
@ -219,7 +221,6 @@ once empty); <code>MotionState</code> + <code>MotionEvent</code> are written:
"MotionEvent": {
"Form": "McArc",
"ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
"PlaneNormalDir": 2,
"IsCcw": false,
"AdditionalCircleNum": 0
}
@ -242,7 +243,6 @@ the same way:
"MotionEvent": {
"Form": "McArc",
"ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
"PlaneNormalDir": 2,
"IsCcw": false,
"AdditionalCircleNum": 0
}
@ -277,14 +277,13 @@ sqrt drift on this branch:
"MotionEvent": {
"Form": "McArc",
"ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
"PlaneNormalDir": 2,
"IsCcw": false,
"AdditionalCircleNum": 0
}
}</code></pre>
R-format non-trivial: G02 90° arc from <code>(0,0,0)</code> to
<code>(10,10,0)</code> with R=10. The center comes from the cross-product
+ sqrt + normalize path inside <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">ResolveCenterFromR(Vec3d, Vec3d, int, bool, double)</a>,
+ sqrt + normalize path inside <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">ResolveCenterFromSignedRadius(Vec3d, Vec3d, int, bool, double)</a>,
but for this particular axis-aligned chord the rounding errors
cancel and the center lands at exactly <code>(10, 0, 0)</code> — i.e.
no ULP drift here, in contrast to e.g.
@ -301,7 +300,6 @@ no ULP drift here, in contrast to e.g.
"MotionEvent": {
"Form": "McArc",
"ArcCenter": { "X": 10, "Y": 0, "Z": 0 },
"PlaneNormalDir": 2,
"IsCcw": false,
"AdditionalCircleNum": 0
}
@ -322,16 +320,15 @@ differentiating output; arc-center math is unchanged:
"MotionEvent": {
"Form": "McArc",
"ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
"PlaneNormalDir": 2,
"IsCcw": true,
"AdditionalCircleNum": 0
}
}</code></pre>
Full circle G02 — start == end (both <code>(0,0,0)</code>), I=5 J=0
places center off-start at <code>(5,0,0)</code>. The
<code>isFullCircle</code> guard (chord length &lt; 1e-6 and
center-to-start &gt; 1e-6) flips <code>AdditionalCircleNum</code> to 1
so a downstream motion semantic knows to draw the closed loop:
places center off-start at <code>(5,0,0)</code>. Plane-restricted
closure (<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">IsClosedOnPlane(Vec3d, Vec3d, int, double)</a>)
flips <code>AdditionalCircleNum</code> to 1 so a downstream motion
semantic knows to draw the closed loop:
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "Flags": ["G02"], "I": 5, "J": 0 },
@ -344,11 +341,54 @@ so a downstream motion semantic knows to draw the closed loop:
"MotionEvent": {
"Form": "McArc",
"ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
"PlaneNormalDir": 2,
"IsCcw": false,
"AdditionalCircleNum": 1
}
}</code></pre>
Fanuc L parameter (helix turn count, 1-based) — <code>L3</code> on a
start==end closed loop means three total turns, so
<code>AdditionalCircleNum = L 1 = 2</code>. Matches legacy
<code>NcProc.cs:442</code>; the L parameter is consumed alongside I/J/K/R:
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "Flags": ["G02"], "I": 5, "J": 0, "L": 3 },
"ProgramXyz": { "X": 0, "Y": 0, "Z": 0 }
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"ProgramXyz": { "X": 0, "Y": 0, "Z": 0 },
"MotionState": { "Term": "G02" },
"MotionEvent": {
"Form": "McArc",
"ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
"IsCcw": false,
"AdditionalCircleNum": 2
}
}</code></pre>
K-as-pitch helix on G17 (XY plane) — when the plane-normal axis
letter (K for G17, J for G18, I for G19) is present on an IJK-format
arc, it is the per-turn axial pitch, not a center offset. Here
<code>K = 3</code> mm/turn over <code>ΔZ = 9</code> mm gives
<code>AdditionalCircleNum = floor(9 / 3) = 3</code>. The center stays
on the begin-plane (Z = 0) — <code>ResolveCenterFromIjk</code> zeros the
plane-normal component before adding to begin. Matches legacy
<code>NcProc.cs:458</code>:
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "Flags": ["G02"], "I": 5, "J": 0, "K": -3 },
"ProgramXyz": { "X": 0, "Y": 0, "Z": -9 }
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"ProgramXyz": { "X": 0, "Y": 0, "Z": -9 },
"MotionState": { "Term": "G02" },
"MotionEvent": {
"Form": "McArc",
"ArcCenter": { "X": 5, "Y": 0, "Z": 0 },
"IsCcw": false,
"AdditionalCircleNum": 3
}
}</code></pre>

View File

@ -191,6 +191,80 @@ Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycle
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_DrillingCycleSyntax_examples">Examples</h2>
<p>All cases below pre-populate <a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a> as
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> would have written it (term,
return mode, snapshot params) and leave the resolved cycle
sub-section in <code>Parsing</code> for this syntax to consume. There is
no <code>#Previous:</code>, so <code>GetLastProgramXyz</code> returns
<code>Vec3d.Zero</code><code>initZ = 0</code>. <code>F</code> is supplied inside the
cycle section so <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">ResolveFeedrate(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress)</a>
writes the block-level <a class="xref" href="Hi.NcParsers.Keywords.Feedrate.html">Feedrate</a> (G94 default, mm/min
→ mm/s) before the items are emitted.</p>
<p>
G81 G98 — rapid to init (z=0), rapid to R, feed to bottom Z=-10 at
F=600 mm/min → 10 mm/s, rapid back to init Z=0. Four items. The
resolved cycle sub-section is removed by
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">CleanupParsing(JsonObject, JsonObject, string)</a>; the empty
<code>Parsing</code> drops off through <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">CleanupParsing(JsonObject)</a>:
</p>
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "G81": { "X": 50, "Y": 30, "Z": -10, "R": 2, "F": 600 } },
"CannedCycle": {
"Term": "G81", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
}
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G81", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G81",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>
G82 with dwell P=0.5s — inserts a <a class="xref" href="Hi.NcParsers.Keywords.Dwell.html">Dwell</a> item between
the feed-to-bottom rapid and the final retract, otherwise identical
to G81. Five items total:
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "G82": { "X": 50, "Y": 30, "Z": -10, "R": 2, "F": 600, "P": 0.5 } },
"CannedCycle": {
"Term": "G82", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
}
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G82", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G82",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "Dwell": { "Time": 0.5 } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>
<h2 id="Hi_NcParsers_LogicSyntaxs_DrillingCycleSyntax_remarks">Remarks</h2>
<div class="markdown level0 remarks"><p>G85 (feed retract) and G86 (spindle-stop retract) have different

View File

@ -193,6 +193,48 @@ syntax runs.
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_FineBoringSyntax_examples">Examples</h2>
<p>G76 G98 — pre-populated <a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a> (as
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> would have written), no
<code>#Previous:</code> so <code>initZ = 0</code>, F=600 → 10 mm/s, shift Q=1
(lateral +X clearance for retract). First marker to spell out
<code>{ &ldquo;SpindleOrientation&rdquo;: { &ldquo;Angle_deg&rdquo;: 0 } }</code> — the OSS
item produced by
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">CreateSpindleOrientationItem(double)</a>.
Eight items: init, R, feed-down, OSS, shifted-at-bottom (X=51),
shifted-retract (X=51, Z=0), back-to-center (X=50, Z=0),
spindle-restart CW:
#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "G76": { "X": 50, "Y": 30, "Z": -10, "R": 2, "Q": 1, "F": 600 } },
"CannedCycle": {
"Term": "G76", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2, "Q": 1 }
}
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G76", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2, "Q": 1 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G76",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "SpindleOrientation": { "Angle_deg": 0 } },
{ "ProgramXyz": { "X": 51, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 51, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "SpindleControl": { "Direction": "CW" } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>

View File

@ -207,6 +207,97 @@ ToolHeightCompensation entry when RTCP is active) and <b>before</b>
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_G43p4RtcpSyntax_examples">Examples</h2>
<p>Explicit G43.4 H1 activation with no <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html">IMachineKinematics</a>
and no <a class="xref" href="Hi.NcParsers.Dependencys.IToolOffsetConfig.html">IToolOffsetConfig</a> in the dependency list —
exercises the activate path on its identity-matrix corner. The
section is written with <code>Offset_mm = 0</code> (no offset table
<code>rawHeight = 0</code>); the height-mat falls back to the
no-kinematics branch <code>new Mat4d { Trans = UnitZ * 0 }</code> which
collapses to identity; <code>abcChanged</code> is false (no current MC,
no previous block) so the entry is tagged <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_KindStatic">KindStatic</a>.
#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "Parsing": { "G43.4": { "H": "1" } } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"ToolHeightCompensation": { "Offset_mm": 0, "Term": "G43.4", "OffsetId": 1 },
"ProgramToMcTransform": [
{
"Source": "ToolHeightCompensation",
"Kind": "Static",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
}
]
}</code></pre>
<p>G43.4 H1 with <code>ToolOffset(1 → 10 mm)</code>, a real
<a class="xref" href="Hi.Numerical.Xyzabc.XyzabcSolver.html">XyzabcSolver</a> (table-A / head-B
5-axis), and current block already carrying all three rotary axes
in <code>MachineCoordinateState</code> (A=0, B=30, C=0 — as a prior
<code>McAbcSyntax</code> in the chain would have written). The
height-mat goes through
<a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_MakeToolHeightMat_Hi_Numerical_Xyzabc_IMachineKinematics_Hi_Geom_Vec3d_System_Double_">MakeToolHeightMat(IMachineKinematics, Vec3d, double)</a> which probes
<code>kinematics.McToPn(Zero, abc).Normal</code> at <code>abc = (0, π/6, 0)</code>
to get the tool orientation, then scales by 10 mm. With no
previous block, <code>abcChanged</code> is false → entry stays Static.
Note: all three ABC must be present (or fall back to the per-axis
modal lookback path); a partial section with only B set leaves A/C
as NaN and the resulting Mat4d.Trans would serialise as
non-finite numbers.
#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "G43.4": { "H": "1" } },
"MachineCoordinateState": { "A": 0, "B": 30, "C": 0 }
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "A": 0, "B": 30, "C": 0 },
"ToolHeightCompensation": { "Offset_mm": 10, "Term": "G43.4", "OffsetId": 1 },
"ProgramToMcTransform": [
{
"Source": "ToolHeightCompensation",
"Kind": "Static",
"Mat4d": [
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
4.999999999999999, 0, 8.660254037844387, 1
]
}
]
}</code></pre>
<p>Same setup plus a <code>#Previous:</code> block with
<code>MachineCoordinateState.B = 0</code> + XYZ origin —
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">DidAbcChange(LazyLinkedListNode&lt;SyntaxPiece&gt;, IMachineAxisConfig)</a> compares the rotary deltas and finds B
changed across the block, so the entry is tagged
<a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_KindDynamic">KindDynamic</a> (signalling that the
tool orientation varies along the contour):
#Previous:</p>
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "X": 0, "Y": 0, "Z": 0, "A": 0, "B": 0, "C": 0 }
}</code></pre>
<p>#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "G43.4": { "H": "1" } },
"MachineCoordinateState": { "A": 0, "B": 30, "C": 0 }
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "A": 0, "B": 30, "C": 0 },
"ToolHeightCompensation": { "Offset_mm": 10, "Term": "G43.4", "OffsetId": 1 },
"ProgramToMcTransform": [
{
"Source": "ToolHeightCompensation",
"Kind": "Dynamic",
"Mat4d": [
1, 0, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0,
4.999999999999999, 0, 8.660254037844387, 1
]
}
]
}</code></pre>

View File

@ -194,6 +194,81 @@ Motion is handled by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotio
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_G53p1RotaryPositionSyntax_examples">Examples</h2>
<p>No-kinematics dep-guard early-return: standalone <code>G53.1</code> with
no <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html">IMachineKinematics</a> dep in the list — the syntax
detects the flag, finds no kinematics, and silently consumes the
flag via <code>ConsumeFlag</code>. Empty <code>Parsing</code> is then removed
by <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">CleanupParsing(JsonObject)</a>, so the post-Build block
is empty:
#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "Parsing": { "Flags": ["G53.1"] } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{}</code></pre>
<p>IK happy path — <code>G53.1</code> with active G68.2 tilt on
<code>#Previous:</code>, real <a class="xref" href="Hi.Numerical.Xyzabc.XyzabcSolver.html">XyzabcSolver</a>
(table-A / head-B 5-axis), and a
<code>TestDeps.AxisConfig(A=Rotary, B=Rotary)</code> dep. The syntax
reads the previous block's tilt Mat4d, solves
<code>OrientationToMcAbc(tiltMat.AxialNormal)</code> for the rotary ABC,
converts radians → degrees, writes <code>MachineCoordinateState</code>
with both rotary axes (XYZ inherited from <code>prevMc = Vec3d.Zero</code>
when no previous MC exists), and stamps <code>ProgramXyz</code>:
#Previous:</p>
<pre><code class="lang-csharp">{
"TiltTransform": { "Term": "G68.2", "X": 0, "Y": 0, "Z": 0, "I": 0, "J": 30, "K": 0 },
"ProgramToMcTransform": [
{
"Source": "TiltTransform",
"Kind": "Static",
"Mat4d": [
1, 0, 0, 0,
0, 0.8660254037844388, 0.5, 0,
0, -0.5, 0.8660254037844388, 0,
0, 0, 0, 1
]
}
]
}</code></pre>
<p>#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "Parsing": { "Flags": ["G53.1"] } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "X": 0, "Y": 0, "Z": 0, "A": 29.942194198514308, "B": 0 },
"ProgramXyz": { "X": 0, "Y": 0, "Z": 0 }
}</code></pre>
<p>Explicit ABC override — <code>G53.1 A0 B45</code> on top of the same
G68.2 tilt + kinematics + axis-config set up. The IK still solves,
but the explicit <code>A=0</code> and <code>B=45</code> overrides what IK
returned for those axes; C stays at the IK-solved value (C-axis
is not present in the table-A/head-B layout, so the rotaryAxes
loop only writes A and B):
#Previous:</p>
<pre><code class="lang-csharp">{
"TiltTransform": { "Term": "G68.2", "X": 0, "Y": 0, "Z": 0, "I": 0, "J": 30, "K": 0 },
"ProgramToMcTransform": [
{
"Source": "TiltTransform",
"Kind": "Static",
"Mat4d": [
1, 0, 0, 0,
0, 0.8660254037844388, 0.5, 0,
0, -0.5, 0.8660254037844388, 0,
0, 0, 0, 1
]
}
]
}</code></pre>
<p>#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "Flags": ["G53.1"], "A": 0, "B": 45 }
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "X": 0, "Y": 0, "Z": 0, "A": 0, "B": 45 },
"ProgramXyz": { "X": 0, "Y": 0, "Z": 0 }
}</code></pre>
<h2 id="Hi_NcParsers_LogicSyntaxs_G53p1RotaryPositionSyntax_remarks">Remarks</h2>
<div class="markdown level0 remarks"><p>

View File

@ -193,6 +193,51 @@ Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycle
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_HighSpeedPeckCycleSyntax_examples">Examples</h2>
<p>G73 G98 two-stroke chip-break — pre-populated <a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a>
(as <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> would have written), no
<code>#Previous:</code> so <code>initZ = 0</code>, F=600 in the cycle section
translated to 10 mm/s. Geometry: R=2, Z=-18, Q=10 →
<code>totalFeedLength = 20</code><code>strokeCount = 2</code>, no remainder.
<a class="xref" href="Hi.NcParsers.Dependencys.Generic.FallbackConfig.html">FallbackConfig</a> default
<code>PeckRetractionDistance_mm = 5</code> sets the partial retract amount
<code>d</code>. Per stroke, the chip-break rapid retracts to
<code>strokeZ + d</code> (a small jump, in contrast to
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html">PeckDrillingCycleSyntax</a> which rapids fully back to R).
G98 final rapid is always emitted (no <code>finalZ != rPoint</code> guard
here, unlike the G83 path). Seven items: init, R, feed-stroke1
(z=-8), rapid-to-strokeZ+d (z=-3), feed-stroke2 (z=-18),
rapid-to-strokeZ+d (z=-13), final-init (z=0):
#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"Parsing": { "G73": { "X": 50, "Y": 30, "Z": -18, "R": 2, "Q": 10, "F": 600 } },
"CannedCycle": {
"Term": "G73", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -18, "R": 2, "Q": 10 }
}
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G73", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -18, "R": 2, "Q": 10 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G73",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -8 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -3 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -18 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -13 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>

View File

@ -187,6 +187,116 @@ Heidenhain equivalent: PLANE SPATIAL (separate syntax).
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_IsoG68p2TiltSyntax_examples">Examples</h2>
<p>G69 cancel via <a class="xref" href="Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html#Hi_NcParsers_LogicSyntaxs_TiltTransformUtil_TryHandleG69_System_Text_Json_Nodes_JsonObject_System_Text_Json_Nodes_JsonObject_">TryHandleG69(JsonObject, JsonObject)</a> — the
kinematics-free short-circuit path that writes the identity tilt.</p>
<p>
Standalone <code>G69</code> — the flag is consumed,
<a class="xref" href="Hi.NcParsers.Keywords.TiltTransform.html">TiltTransform</a> is written with <code>Term: "G69"</code>,
and an identity Mat4d entry is added to
<a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a> so any
previously composed tilt rotation is reset:
</p>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "Flags": ["G69"] } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"TiltTransform": { "Term": "G69" },
"ProgramToMcTransform": [
{
"Source": "TiltTransform",
"Kind": "Static",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
}
]
}</code></pre>
G68.2 with IJK = (0, 30, 0) and no kinematics dep — exercises the
pure ZXZ Fanuc euler math
(<code>Rz(K=0) * Rx(J=30°) * Rz(I=0) * Translate(0)</code> = Rx(30°))
without any IK refinement. The <a class="xref" href="Hi.NcParsers.Keywords.TiltTransform.html">TiltTransform</a> section
retains the G68.2 ctor params for debug; the chain entry's Mat4d
is the rotation matrix:
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G68.2": { "X": 0, "Y": 0, "Z": 0, "I": 0, "J": 30, "K": 0 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"TiltTransform": { "Term": "G68.2", "X": 0, "Y": 0, "Z": 0, "I": 0, "J": 30, "K": 0 },
"ProgramToMcTransform": [
{
"Source": "TiltTransform",
"Kind": "Static",
"Mat4d": [
1, 0, 0, 0,
0, 0.8660254037844387, 0.49999999999999994, 0,
0, -0.49999999999999994, 0.8660254037844387, 0,
0, 0, 0, 1
]
}
]
}</code></pre>
Same G68.2 IJK with a real
<a class="xref" href="Hi.Numerical.Xyzabc.XyzabcSolver.html">XyzabcSolver</a> (table-A / head-B
5-axis layout) — <code>hasPostAbc</code> is false but the kinematics
solves <code>OrientationToMcAbc(tiltByIjk)</code> successfully, so the
refinement path
<code>ijkAbcOrientation * orientationDelta * Translate(origin)</code>
runs. The resulting Mat4d preserves the IJK orientation but
aligns it with the kinematic ABC solution:
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G68.2": { "X": 0, "Y": 0, "Z": 0, "I": 0, "J": 30, "K": 0 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"TiltTransform": { "Term": "G68.2", "X": 0, "Y": 0, "Z": 0, "I": 0, "J": 30, "K": 0 },
"ProgramToMcTransform": [
{
"Source": "TiltTransform",
"Kind": "Static",
"Mat4d": [
1, 0, 0, 0,
0, 0.8660254037844388, 0.5, 0,
0, -0.5, 0.8660254037844388, 0,
0, 0, 0, 1
]
}
]
}</code></pre>
G68.2 IJK with explicit post-processor rotary hints A=0, B=30 —
<code>hasPostAbc</code> is true, kinematics first solves
<code>tiltByIjk → ijkMcAbc</code>, then overrides A/B with the explicit
values to form <code>postMcAbc</code>; the final Mat4d combines
<code>postAbcOrient * orientationDeltaIjkToPost * Translate(origin)</code>.
The <a class="xref" href="Hi.NcParsers.Keywords.TiltTransform.html">TiltTransform</a> section gains the consumed
<code>A</code> and <code>B</code> entries:
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": {
"G68.2": { "X": 0, "Y": 0, "Z": 0, "I": 0, "J": 30, "K": 0 },
"A": 0,
"B": 30
}
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"TiltTransform": {
"Term": "G68.2",
"X": 0, "Y": 0, "Z": 0,
"I": 0, "J": 30, "K": 0,
"A": 0, "B": 30
},
"ProgramToMcTransform": [
{
"Source": "TiltTransform",
"Kind": "Static",
"Mat4d": [
0.8660254037844387, 0.0002477343364339079, -0.4999999386276948, 0,
0, 0.9999998772553897, 0.0004954686728678159, 0,
0.49999999999999994, -0.00042908845748289027, 0.8660252974844881, 0,
0, 0, 0, 1
]
}
]
}</code></pre>
<h2 id="Hi_NcParsers_LogicSyntaxs_IsoG68p2TiltSyntax_remarks">Remarks</h2>
<div class="markdown level0 remarks"><p>G68.2 optionally uses <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematics.html">IMachineKinematics</a> dependency for IK refinement.

View File

@ -197,6 +197,80 @@ Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycle
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_PeckDrillingCycleSyntax_examples">Examples</h2>
<p>Both cases below pre-populate <a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a> as
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> would have written it. There
is no <code>#Previous:</code>, so <code>GetLastProgramXyz</code> returns
<code>Vec3d.Zero</code><code>initZ = 0</code>. A
<a class="xref" href="Hi.NcParsers.Dependencys.Generic.FallbackConfig.html">FallbackConfig</a> dep with the
default <code>PeckRetractionDistance_mm = 5</code> is injected via
<code>BuildAndDump(..., deps:)</code>. Cycle parameters are chosen so
<code>totalFeedLength = R bottomZ = 10</code> and <code>Q = 10</code>
exactly one stroke, no remainder; the items list stays minimal.</p>
<p>
G83 G98 — rapid to init (z=0), rapid to R=2, feed to bottom Z=-8 at
F=600 mm/min → 10 mm/s, rapid back to R=2, then a final rapid to
init Z=0 (G98). Five items:
</p>
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "G83": { "X": 50, "Y": 30, "Z": -8, "R": 2, "Q": 10, "F": 600 } },
"CannedCycle": {
"Term": "G83", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -8, "R": 2, "Q": 10 }
}
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G83", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -8, "R": 2, "Q": 10 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G83",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -8 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>
G83 G99 — same cycle but the return mode is R-point. Since the
retract-to-R rapid already lands at <code>z = R</code>, the
<code>finalZ != rPoint</code> guard skips the extra final-rapid item.
Four items, and the block's <code>ProgramXyz</code> lookback anchor lands
at R-point:
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "G83": { "X": 50, "Y": 30, "Z": -8, "R": 2, "Q": 10, "F": 600 } },
"CannedCycle": {
"Term": "G83", "ReturnMode": "G99",
"Params": { "X": 50, "Y": 30, "Z": -8, "R": 2, "Q": 10 }
}
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G83", "ReturnMode": "G99",
"Params": { "X": 50, "Y": 30, "Z": -8, "R": 2, "Q": 10 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G83",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -8 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }
}</code></pre>
<h2 id="Hi_NcParsers_LogicSyntaxs_PeckDrillingCycleSyntax_remarks">Remarks</h2>
<div class="markdown level0 remarks"><p>G73 (high-speed peck) retracts only a small distance instead of fully

View File

@ -209,6 +209,88 @@ Silently no-ops when <a class="xref" href="Hi.Numerical.Xyzabc.IMachineKinematic
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_PivotTransformationSyntax_examples">Examples</h2>
<p>Identity probe — a <code>TestDeps.Kinematics</code> stub that
makes <code>McToPn</code> pass through XYZ and return a fixed <code>UnitZ</code>
normal, so <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_MakePivotTransformMat_Hi_Numerical_Xyzabc_IMachineKinematics_Hi_Geom_Vec3d_">MakePivotTransformMat(IMachineKinematics, Vec3d)</a>'s
four-basis probing returns identity <code>K(0)</code> and <code>K(abc)</code>,
and the product <code>K(0) * K(abc).GetInverse()</code> collapses to
identity. With no current or previous <code>MachineCoordinateState</code>,
endpoint ABC defaults to <code>(0,0,0)</code>; no dynamic entries exist
yet so the entry is tagged <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_KindStatic">KindStatic</a>.
Case for the dep-guard contract only; the real kinematics paths are
covered by the cases below.
#BeforeBuild:</p>
<pre><code class="lang-csharp">{}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"ProgramToMcTransform": [
{
"Source": "PivotTransform",
"Kind": "Static",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
}
]
}</code></pre>
<p>Real <a class="xref" href="Hi.Numerical.Xyzabc.XyzabcSolver.html">XyzabcSolver</a> (table-A / head-B 5-axis layout
<code>[O][Z][A][w];[O][Y][X][B][S][t]</code>) with current block declaring
<code>MachineCoordinateState.A = 45</code> — endpoint ABC =
<code>(π/4, 0, 0)</code> radians. Table-side A rotation moves the tool
position in the workpiece frame, so
<code>MakePivotTransformMat</code>'s four-basis probe returns a
non-identity rigid matrix. The exact Mat4d below was captured from
<code>BuildAndDump</code>'s actual output (per gotcha #2: rad/deg trig
drift, always dump first):
#BeforeBuild:</p>
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "A": 45 } }</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "A": 45 },
"ProgramToMcTransform": [
{
"Source": "PivotTransform",
"Kind": "Static",
"Mat4d": [
1, 0, 0, 0,
0, 0.7071067811865475, -0.7071067811865475, 0,
0, 0.7071067811865475, 0.7071067811865475, 0,
0, 0, 0, 1
]
}
]
}</code></pre>
<p>Stub <code>TestDeps.Kinematics</code> with a pre-existing Dynamic
chain entry on the current block (as <a class="xref" href="Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html">G43p4RtcpSyntax</a>
would have written when RTCP is dynamic). <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_HasDynamicEntry_System_Text_Json_Nodes_JsonObject_">HasDynamicEntry(JsonObject)</a>
returns true so the PivotTransform entry is tagged
<a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_KindDynamic">KindDynamic</a> even though the math
itself collapses to identity:
#BeforeBuild:</p>
<pre><code class="lang-csharp">{
"ProgramToMcTransform": [
{
"Source": "ToolHeightCompensation",
"Kind": "Dynamic",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
}
]
}</code></pre>
<p>#AfterBuild:</p>
<pre><code class="lang-csharp">{
"ProgramToMcTransform": [
{
"Source": "ToolHeightCompensation",
"Kind": "Dynamic",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
},
{
"Source": "PivotTransform",
"Kind": "Dynamic",
"Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
}
]
}</code></pre>

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class ReferenceReturnSyntax | HiAPI-C# 2025 ">
<meta name="description" content="G28 reference point return syntax. Behaviour is documented in detail on the example attached to ; this class is the implementation that the property configures.">
<meta name="description" content="Writes section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by ) and converts to machine coordinates via . Must be placed after in the syntax chain. Removes the section written by (G28 handles its own motion). Overwrites root and with reference position for subsequent block lookback.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -97,10 +97,19 @@ Class ReferenceReturnSyntax
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>G28 reference point return syntax. Behaviour is documented in detail
on the example attached to <a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html">BareG28Behavior</a>; this class
is the <a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyntax</a> implementation that the
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_BareG28">BareG28</a> property configures.</p>
<div class="markdown summary"><p>Writes <a class="xref" href="Hi.NcParsers.Keywords.ICompoundMotionDef.html">ICompoundMotionDef</a> section for G28 reference point return.
Reads intermediate XYZ from <code>Parsing.G28</code>
(written by <a class="xref" href="Hi.NcParsers.Syntaxs.GenericSyntaxKit.html#Hi_NcParsers_Syntaxs_GenericSyntaxKit_G28Syntax">G28Syntax</a>)
and converts to machine coordinates via
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzUtil_ResolveProgramXyz_System_Text_Json_Nodes_JsonNode_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__Hi_NcParsers_ISentenceCarrier_Hi_NcParsers_NcDiagnosticProgress_">ResolveProgramXyz(JsonNode, LazyLinkedListNode&lt;SyntaxPiece&gt;, ISentenceCarrier, NcDiagnosticProgress)</a>.</p>
<p>
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> in the syntax chain.
Removes the <a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> section written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> (G28 handles its own motion).
Overwrites root <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a>
and <a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> with reference position
for subsequent block lookback.
</p>
</div>
<div class="markdown conceptual"></div>
@ -182,6 +191,193 @@ is the <a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyn
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_examples">Examples</h2>
<p>All cases hardcode a <code>TestDeps.HomeMc</code> with X/Y home at 0 and Z
home at 100 (typical mill where Z-home is above the table) and leave
the <code>ProgramToMcTransform</code> chain at identity so the final
<code>ProgramXyz</code> equals <code>MachineCoordinateState</code>. The G28
pattern emits a 2-item <code>CompoundMotion</code>: item 0 is the
intermediate point in <code>ProgramXyz</code>, item 1 is the final position
in <code>MachineCoordinateState</code>. Axes not present in the G28 block
keep the previous-block MC value rather than going home.</p>
<p>
<code>G91 G28 X0 Y0 Z0</code> with a <code>#Previous:</code> block carrying
<code>MachineCoordinateState=(50,60,70)</code> — all three axes go home,
so the final MC is the configured home <code>(0,0,100)</code>:
</p>
#Previous:
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70 } }</code></pre>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CompoundMotion": {
"Term": "G28",
"Items": [
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"ProgramXyz": { "X": 0, "Y": 0, "Z": 0 }
},
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "X": 0, "Y": 0, "Z": 100 }
}
]
},
"ProgramXyz": { "X": 0, "Y": 0, "Z": 100 }
}</code></pre>
<code>G91 G28 Z0</code> — only Z goes to its home; X/Y inherit from the
previous block's MC. Item 0's intermediate <code>ProgramXyz</code> takes
X/Y from the inherited program XYZ (= previous MC under identity
transform) and Z from the literal 0 in the G28 block:
#Previous:
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70 } }</code></pre>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "Z": 0 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CompoundMotion": {
"Term": "G28",
"Items": [
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"ProgramXyz": { "X": 50, "Y": 60, "Z": 0 }
},
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "X": 50, "Y": 60, "Z": 100 }
}
]
},
"ProgramXyz": { "X": 50, "Y": 60, "Z": 100 }
}</code></pre>
No <a class="xref" href="Hi.NcParsers.Dependencys.IHomeMcConfig.html">IHomeMcConfig</a> dep on the dependency list — the
syntax early-returns and the G28 sub-section stays in <code>Parsing</code>
for an upstream consumer or downstream syntax to handle:
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "X": 0, "Y": 0, "Z": 0 } } }</code></pre>
<p>
Rotary cases below add <code>TestDeps.AxisConfig</code> declaring B as
rotary and extend <code>HomeMc</code> with the conventional B home at 0°.
Each rotary block uses literal B = 45° so item 0's intermediate
(45°), item 1's home (0°), and <code>#Previous:</code> modal B (30°) are
pairwise distinct — a test that swaps any two values for any other
is caught by the assertion. The wrap pass
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html">McAbcCyclicPathSyntax</a>) is a different syntax, so
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>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
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> downstream — in the full pipeline that
syntax fills root <code>MachineCoordinateState</code>'s XYZ from root
<code>ProgramXyz</code>, but with no XYZ in the block there's nothing to
fill anyway). Root MC.B holds the canonical home for modal
carry-forward; root <code>ProgramXyz</code> is not written:
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "B": 45 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "B": 0 },
"CompoundMotion": {
"Term": "G28",
"Items": [
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "B": 45 }
},
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "B": 0 }
}
]
}
}</code></pre>
<code>G28 X0. B45.</code> mixed XYZ + rotary. Both axis kinds occupy the
same two items: item 0 carries the XYZ intermediate
<code>ProgramXyz</code> alongside the rotary literal in MC; item 1
carries the final XYZ MC alongside the rotary home in MC. Root
<code>MachineCoordinateState</code> here holds only the rotary modal value
(B = 0, the home); the XYZ portion of root MC would be filled by
the downstream <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a> in the full pipeline
(out of scope for this per-SUT conformance). Root
<code>MachineCoordinateState</code> appears first because the
rotary-home write happens before <code>CompoundMotion</code> /
<code>ProgramXyz</code> are inserted. <code>#Previous:</code> carries B = 30 so
the prev rotary modal is distinct from both the literal (45) and
the home (0):
#Previous:
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 50, "Y": 60, "Z": 70, "B": 30 } }</code></pre>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": { "X": 0, "B": 45 } } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "B": 0 },
"CompoundMotion": {
"Term": "G28",
"Items": [
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"ProgramXyz": { "X": 0, "Y": 60, "Z": 70 },
"MachineCoordinateState": { "B": 45 }
},
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "X": 0, "Y": 60, "Z": 70, "B": 0 }
}
]
},
"ProgramXyz": { "X": 0, "Y": 60, "Z": 70 }
}</code></pre>
<p>
Bare <code>G28</code> — no axis specifiers — exercises the configurable
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_BareG28">BareG28</a> policy. Default <a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html#Hi_NcParsers_LogicSyntaxs_BareG28Behavior_Alarm">Alarm</a>
emits <code>Coord-RefReturn--003</code> and consumes the G28 without
motion (the diagnostic surfaces through the
<a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a> sink, not the block JSON, so the
canonical <code>#AfterBuild</code> is just an empty object):
</p>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": {} } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{}</code></pre>
Bare <code>G28</code> with <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_BareG28">BareG28</a> set to
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html#Hi_NcParsers_LogicSyntaxs_BareG28Behavior_AllAxesHome">AllAxesHome</a>: the syntax synthesises a
literal at the inherited program position for every configured
linear axis and the previous modal angle for every configured
rotary axis (here X/Y/Z taken from the <code>#Previous:</code> MC under
the identity <code>ProgramToMcTransform</code>, B taken from the prev
modal). Item 0's intermediate therefore equals current (no motion
in stage 1) and item 1 sends each axis to its home:
#Previous:
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": 10, "Y": 20, "Z": 30, "B": 45 } }</code></pre>
#BeforeBuild:
<pre><code class="lang-csharp">{ "Parsing": { "G28": {} } }</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"MachineCoordinateState": { "B": 0 },
"CompoundMotion": {
"Term": "G28",
"Items": [
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"ProgramXyz": { "X": 10, "Y": 20, "Z": 30 },
"MachineCoordinateState": { "B": 45 }
},
{
"MotionEvent": { "Form": "McLinear", "IsRapid": true },
"MachineCoordinateState": { "X": 0, "Y": 0, "Z": 100, "B": 0 }
}
]
},
"ProgramXyz": { "X": 0, "Y": 0, "Z": 100 }
}</code></pre>

View File

@ -195,6 +195,78 @@ Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycle
</dd></dl>
<h2 id="Hi_NcParsers_LogicSyntaxs_TappingCycleSyntax_examples">Examples</h2>
<p>Both cases G98 — pre-populated <a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a>, no
<code>#Previous:</code> so <code>initZ = 0</code>, F=600 → 10 mm/s. Six items
each: init, R, feed-down, spindle reverse, feed retract, spindle
restore. The retract is a feed (not a rapid) because the tap is
physically threaded into the workpiece and a rapid would strip the
threads.</p>
<p>
G84 right-hand — forward CW (M03), reverse CCW (M04) at the bottom
to back out, then restore CW after retract:
</p>
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "G84": { "X": 50, "Y": 30, "Z": -10, "R": 2, "F": 600 } },
"CannedCycle": {
"Term": "G84", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
}
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G84", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G84",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "SpindleControl": { "Direction": "CCW" } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "SpindleControl": { "Direction": "CW" } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>
G74 left-hand — same shape but the two spindle items are flipped:
forward CCW (M04), reverse CW (M03) at the bottom, restore CCW
after retract. Tests that the syntax dispatches on
<code>cycleCode == G84</code> to pick the right pair:
#BeforeBuild:
<pre><code class="lang-csharp">{
"Parsing": { "G74": { "X": 50, "Y": 30, "Z": -10, "R": 2, "F": 600 } },
"CannedCycle": {
"Term": "G74", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
}
}</code></pre>
#AfterBuild:
<pre><code class="lang-csharp">{
"CannedCycle": {
"Term": "G74", "ReturnMode": "G98",
"Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
},
"Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
"CompoundMotion": {
"Term": "G74",
"Items": [
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 2 }, "MotionEvent": { "Form": "McLinear", "IsRapid": true } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": -10 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "SpindleControl": { "Direction": "CW" } },
{ "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }, "MotionEvent": { "Form": "McLinear", "Feedrate_mmds": 10 } },
{ "SpindleControl": { "Direction": "CCW" } }
]
},
"ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
}</code></pre>

View File

@ -798,10 +798,19 @@ MC vs predecessor lookback, picks strategy from
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html">ReferenceReturnSyntax</a></dt>
<dd><p>G28 reference point return syntax. Behaviour is documented in detail
on the example attached to <a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html">BareG28Behavior</a>; this class
is the <a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyntax</a> implementation that the
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_BareG28">BareG28</a> property configures.</p>
<dd><p>Writes <a class="xref" href="Hi.NcParsers.Keywords.ICompoundMotionDef.html">ICompoundMotionDef</a> section for G28 reference point return.
Reads intermediate XYZ from <code>Parsing.G28</code>
(written by <a class="xref" href="Hi.NcParsers.Syntaxs.GenericSyntaxKit.html#Hi_NcParsers_Syntaxs_GenericSyntaxKit_G28Syntax">G28Syntax</a>)
and converts to machine coordinates via
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzUtil_ResolveProgramXyz_System_Text_Json_Nodes_JsonNode_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__Hi_NcParsers_ISentenceCarrier_Hi_NcParsers_NcDiagnosticProgress_">ResolveProgramXyz(JsonNode, LazyLinkedListNode&lt;SyntaxPiece&gt;, ISentenceCarrier, NcDiagnosticProgress)</a>.</p>
<p>
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> in the syntax chain.
Removes the <a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> section written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> (G28 handles its own motion).
Overwrites root <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a>
and <a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> with reference position
for subsequent block lookback.
</p>
</dd>
</dl>
<dl class="jumplist">
@ -895,19 +904,12 @@ Enums
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html">BareG28Behavior</a></dt>
<dd><p>Writes <a class="xref" href="Hi.NcParsers.Keywords.ICompoundMotionDef.html">ICompoundMotionDef</a> section for G28 reference point return.
Reads intermediate XYZ from <code>Parsing.G28</code>
(written by <a class="xref" href="Hi.NcParsers.Syntaxs.GenericSyntaxKit.html#Hi_NcParsers_Syntaxs_GenericSyntaxKit_G28Syntax">G28Syntax</a>)
and converts to machine coordinates via
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzUtil_ResolveProgramXyz_System_Text_Json_Nodes_JsonNode_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__Hi_NcParsers_ISentenceCarrier_Hi_NcParsers_NcDiagnosticProgress_">ResolveProgramXyz(JsonNode, LazyLinkedListNode&lt;SyntaxPiece&gt;, ISentenceCarrier, NcDiagnosticProgress)</a>.</p>
<p>
Must be placed after <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> in the syntax chain.
Removes the <a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> section written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> (G28 handles its own motion).
Overwrites root <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a>
and <a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html#Hi_NcParsers_Keywords_IProgramXyzDef_ProgramXyz">ProgramXyz</a> with reference position
for subsequent block lookback.
</p>
<dd><p>Configurable handling for a G28 block with no axis specifiers
(&ldquo;bare G28&rdquo;) — value of <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html#Hi_NcParsers_LogicSyntaxs_ReferenceReturnSyntax_BareG28">BareG28</a>.
Real Fanuc-class controllers vary: older 0i-M alarms (PS010), some
30i variants send every configured axis to home. Default to
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html#Hi_NcParsers_LogicSyntaxs_BareG28Behavior_Alarm">Alarm</a> so silent NC bugs surface; opt into
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html#Hi_NcParsers_LogicSyntaxs_BareG28Behavior_AllAxesHome">AllAxesHome</a> per syntax instance.</p>
</dd>
</dl>

View File

@ -0,0 +1,513 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class FanucWhileDoParsingSyntax | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class FanucWhileDoParsingSyntax | HiAPI-C# 2025 ">
<meta name="description" content="Parses the two Fanuc Custom Macro B WHILE/END phrases out of into a Parsing.FanucWhileDo sub-object: WHILE [&amp;lt;bool-expr&amp;gt;] DO &amp;lt;m&amp;gt; — loop entry, writes { Term: &quot;WHILE...DO&quot;, LoopId, Condition }.END &amp;lt;m&amp;gt; — loop terminator, writes { Term: &quot;END&quot;, LoopId }. Pipeline placement. This syntax must run before in the Parsing bundle — same lesson as : although the WHILE / END phrases per Fanuc spec do not coexist with assignments on the same block, the defensive ordering prevents a body fragment from being half-eaten as a stand-alone assignment if a non-spec NC file appears. LoopId is captured as an int directly (Fanuc spec restricts the m identifier to small literal integers 13 typical, no expression form). The WHILE&#39;s Condition is captured as a string and substituted in place by &#39;s pass-2 tree walk; then reads it via the shared .">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax">
<h1 id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax" class="text-break">
Class FanucWhileDoParsingSyntax
</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.ParsingSyntaxs.html">ParsingSyntaxs</a>.<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Fanuc.html">Fanuc</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Parses the two Fanuc Custom Macro B WHILE/END phrases out of
<a class="xref" href="Hi.NcParsers.Keywords.IUnparsedTextDef.html#Hi_NcParsers_Keywords_IUnparsedTextDef_UnparsedText">UnparsedText</a> into a
<code>Parsing.FanucWhileDo</code> sub-object:</p>
<ul><li><code>WHILE [&lt;bool-expr&gt;] DO &lt;m&gt;</code> — loop entry,
writes <code>{ Term: "WHILE...DO", LoopId, Condition }</code>.</li><li><code>END &lt;m&gt;</code> — loop terminator, writes
<code>{ Term: "END", LoopId }</code>.</li></ul>
<p>
<b>Pipeline placement.</b> This syntax must run before
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html">TagAssignmentSyntax</a> in the Parsing bundle — same lesson
as <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html">FanucIfThenParsingSyntax</a>: although the WHILE / END
phrases per Fanuc spec do not coexist with assignments on the same
block, the defensive ordering prevents a body fragment from being
half-eaten as a stand-alone assignment if a non-spec NC file appears.
</p>
<p>
<code>LoopId</code> is captured as an int directly (Fanuc spec
restricts the <code>m</code> identifier to small literal integers 13
typical, no expression form). The <code>WHILE</code>'s Condition is captured
as a string and substituted in place by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>'s pass-2 tree
walk; <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html">FanucWhileDoSyntax</a> then
reads it via the shared
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html">FanucConditionReader</a>.
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class FanucWhileDoParsingSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">FanucWhileDoParsingSyntax</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyntax</a></div>
<div><a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Coloring.ColorUtil.html#Hi_Coloring_ColorUtil_GetGloomyColor_System_Object_System_Double_System_Double_">ColorUtil.GetGloomyColor(object, double, double)</a>
</div>
<div>
<a class="xref" href="Hi.Common.NameUtil.html#Hi_Common_NameUtil_GetSelectionName_System_Object_">NameUtil.GetSelectionName(object)</a>
</div>
<div>
<a class="xref" href="Hi.Common.StringUtil.html#Hi_Common_StringUtil_GetPropertyStringIfToStringNotOverloaded_System_Object_System_Boolean_System_Boolean_">StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool)</a>
</div>
<div>
<a class="xref" href="Hi.Parallels.LockUtil.html#Hi_Parallels_LockUtil_Lock_System_Object_">LockUtil.Lock(object)</a>
</div>
</dd></dl>
<h2 id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_examples">Examples</h2>
<p>#Input: <code>WHILE [#100 LT 3] DO 1</code>
#Output:</p>
<pre><code class="lang-csharp">{
"Parsing": {
"FanucWhileDo": {
"Term": "WHILE...DO",
"LoopId": 1,
"Condition": "#100 LT 3"
}
}
}</code></pre>
<p>#Input: <code>END 1</code>
#Output:</p>
<pre><code class="lang-csharp">{
"Parsing": {
"FanucWhileDo": {
"Term": "END",
"LoopId": 1
}
}
}</code></pre>
<h2 class="section" id="constructors">Constructors
</h2>
<a id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax__ctor_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.#ctor*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax__ctor" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.#ctor">
FanucWhileDoParsingSyntax()
</h3>
<div class="markdown level1 summary"><p>Parameterless instance for bundle composition (no XML state).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public FanucWhileDoParsingSyntax()</code></pre>
</div>
<a id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax__ctor_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.#ctor*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax__ctor_System_Xml_Linq_XElement_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.#ctor(System.Xml.Linq.XElement)">
FanucWhileDoParsingSyntax(XElement)
</h3>
<div class="markdown level1 summary"><p>XML ctor (no child elements; reserved for forward compatibility).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public FanucWhileDoParsingSyntax(XElement src)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>src</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>Root element named <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html#Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_XName">XName</a>.</p>
</dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_Name_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.Name*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_Name" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.Name">
Name
</h3>
<div class="markdown level1 summary"><p>Syntax kind name (typically the concrete type name).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string Name { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_XName_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.XName*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_XName" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name used to register this syntax with <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_Build_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.Build*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
Build(LazyLinkedListNode&lt;SyntaxPiece&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
<div class="markdown level1 summary"><p>Build syntax arrangement into the
<code class="paramref">syntaxPieceNode</code> in-place.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Build(LazyLinkedListNode&lt;SyntaxPiece&gt; syntaxPieceNode, List&lt;INcDependency&gt; ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>syntaxPieceNode</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedListNode-1.html">LazyLinkedListNode</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>&gt;</dt>
<dd></dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd></dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd></dd>
</dl>
<a id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_MakeXmlSource_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.MakeXmlSource*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
<div class="markdown level1 summary"><p>Creates an XML representation of the object.
This method may also generate additional resources such as related files.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The base directory for resolving relative paths</p>
</dd>
<dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The relative file path for the XML source</p>
</dd>
<dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>if true, the extended file creation is suppressed.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>An XML element representing the object's state</p>
</dd>
</dl>
<h4 class="section" id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The <code class="paramref">baseDirectory</code> is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.</p>
</div>
<a id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_Reg_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.Reg*"></a>
<h3 id="Hi_NcParsers_ParsingSyntaxs_Fanuc_FanucWhileDoParsingSyntax_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Reg(XFactory factory = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>factory</code> <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a></dt>
<dd></dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

View File

@ -180,6 +180,34 @@ line, and records it under <a class="xref" href="Hi.NcParsers.Keywords.FanucProg
block JSON. The wrapping form (bare vs angle-bracketed) is preserved
in <a class="xref" href="Hi.NcParsers.Keywords.FanucProgramNumber.html#Hi_NcParsers_Keywords_FanucProgramNumber_Wrapper">Wrapper</a> so the block can be emitted
back to its original notation.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html">FanucWhileDoParsingSyntax</a></dt>
<dd><p>Parses the two Fanuc Custom Macro B WHILE/END phrases out of
<a class="xref" href="Hi.NcParsers.Keywords.IUnparsedTextDef.html#Hi_NcParsers_Keywords_IUnparsedTextDef_UnparsedText">UnparsedText</a> into a
<code>Parsing.FanucWhileDo</code> sub-object:</p>
<ul><li><code>WHILE [&lt;bool-expr&gt;] DO &lt;m&gt;</code> — loop entry,
writes <code>{ Term: "WHILE...DO", LoopId, Condition }</code>.</li><li><code>END &lt;m&gt;</code> — loop terminator, writes
<code>{ Term: "END", LoopId }</code>.</li></ul>
<p>
<b>Pipeline placement.</b> This syntax must run before
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html">TagAssignmentSyntax</a> in the Parsing bundle — same lesson
as <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html">FanucIfThenParsingSyntax</a>: although the WHILE / END
phrases per Fanuc spec do not coexist with assignments on the same
block, the defensive ordering prevents a body fragment from being
half-eaten as a stand-alone assignment if a non-spec NC file appears.
</p>
<p>
<code>LoopId</code> is captured as an int directly (Fanuc spec
restricts the <code>m</code> identifier to small literal integers 13
typical, no expression form). The <code>WHILE</code>'s Condition is captured
as a string and substituted in place by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a>'s pass-2 tree
walk; <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html">FanucWhileDoSyntax</a> then
reads it via the shared
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html">FanucConditionReader</a>.
</p>
</dd>
</dl>

View File

@ -287,8 +287,8 @@ Also support single line NC block.</p>
<a id="Hi_NcParsers_Segmenters_HeidenhainSegmenter_GetSentences_" data-uid="Hi.NcParsers.Segmenters.HeidenhainSegmenter.GetSentences*"></a>
<h3 id="Hi_NcParsers_Segmenters_HeidenhainSegmenter_GetSentences_Hi_Common_Collections_LazyLinkedList_Hi_Common_FileLines_IndexedFileLine__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.Segmenters.HeidenhainSegmenter.GetSentences(Hi.Common.Collections.LazyLinkedList{Hi.Common.FileLines.IndexedFileLine},Hi.NcParsers.NcDiagnosticProgress)">
GetSentences(LazyLinkedList&lt;IndexedFileLine&gt;, NcDiagnosticProgress)
<h3 id="Hi_NcParsers_Segmenters_HeidenhainSegmenter_GetSentences_Hi_Common_Collections_LazyLinkedList_Hi_Common_FileLines_IndexedFileLine__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.Segmenters.HeidenhainSegmenter.GetSentences(Hi.Common.Collections.LazyLinkedList{Hi.Common.FileLines.IndexedFileLine},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
GetSentences(LazyLinkedList&lt;IndexedFileLine&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
@ -297,13 +297,19 @@ Also support single line NC block.</p>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IEnumerable&lt;Sentence&gt; GetSentences(LazyLinkedList&lt;IndexedFileLine&gt; indexedFileLines, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
<pre><code class="lang-csharp hljs">public IEnumerable&lt;Sentence&gt; GetSentences(LazyLinkedList&lt;IndexedFileLine&gt; indexedFileLines, List&lt;INcDependency&gt; ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>indexedFileLines</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html">LazyLinkedList</a>&lt;<a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a>&gt;</dt>
<dd><p>The lazy linked list of indexed file lines.</p>
</dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd><p>Dependency list of the owning runner; segmenters that consume
header rows (e.g. <a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html">CsvSegmenter</a>) read host-wired
dependencies from here. May be null in lightweight test fixtures — implementations
that need a dependency must null-check.</p>
</dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd><p>Diagnostic progress reporter.</p>

View File

@ -191,8 +191,8 @@ Interface ISegmenter
<a id="Hi_NcParsers_Segmenters_ISegmenter_GetSentences_" data-uid="Hi.NcParsers.Segmenters.ISegmenter.GetSentences*"></a>
<h3 id="Hi_NcParsers_Segmenters_ISegmenter_GetSentences_Hi_Common_Collections_LazyLinkedList_Hi_Common_FileLines_IndexedFileLine__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.Segmenters.ISegmenter.GetSentences(Hi.Common.Collections.LazyLinkedList{Hi.Common.FileLines.IndexedFileLine},Hi.NcParsers.NcDiagnosticProgress)">
GetSentences(LazyLinkedList&lt;IndexedFileLine&gt;, NcDiagnosticProgress)
<h3 id="Hi_NcParsers_Segmenters_ISegmenter_GetSentences_Hi_Common_Collections_LazyLinkedList_Hi_Common_FileLines_IndexedFileLine__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.Segmenters.ISegmenter.GetSentences(Hi.Common.Collections.LazyLinkedList{Hi.Common.FileLines.IndexedFileLine},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
GetSentences(LazyLinkedList&lt;IndexedFileLine&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
@ -201,13 +201,19 @@ Interface ISegmenter
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">IEnumerable&lt;Sentence&gt; GetSentences(LazyLinkedList&lt;IndexedFileLine&gt; indexedFileLines, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
<pre><code class="lang-csharp hljs">IEnumerable&lt;Sentence&gt; GetSentences(LazyLinkedList&lt;IndexedFileLine&gt; indexedFileLines, List&lt;INcDependency&gt; ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>indexedFileLines</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html">LazyLinkedList</a>&lt;<a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a>&gt;</dt>
<dd><p>The lazy linked list of indexed file lines.</p>
</dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd><p>Dependency list of the owning runner; segmenters that consume
header rows (e.g. <a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html">CsvSegmenter</a>) read host-wired
dependencies from here. May be null in lightweight test fixtures — implementations
that need a dependency must null-check.</p>
</dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd><p>Diagnostic progress reporter.</p>

View File

@ -388,8 +388,8 @@ Lines without the delimiter produce a single <a class="xref" href="Hi.NcParsers.
<a id="Hi_NcParsers_Segmenters_InlineDelimiterSegmenter_GetSentences_" data-uid="Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.GetSentences*"></a>
<h3 id="Hi_NcParsers_Segmenters_InlineDelimiterSegmenter_GetSentences_Hi_Common_Collections_LazyLinkedList_Hi_Common_FileLines_IndexedFileLine__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.GetSentences(Hi.Common.Collections.LazyLinkedList{Hi.Common.FileLines.IndexedFileLine},Hi.NcParsers.NcDiagnosticProgress)">
GetSentences(LazyLinkedList&lt;IndexedFileLine&gt;, NcDiagnosticProgress)
<h3 id="Hi_NcParsers_Segmenters_InlineDelimiterSegmenter_GetSentences_Hi_Common_Collections_LazyLinkedList_Hi_Common_FileLines_IndexedFileLine__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.GetSentences(Hi.Common.Collections.LazyLinkedList{Hi.Common.FileLines.IndexedFileLine},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
GetSentences(LazyLinkedList&lt;IndexedFileLine&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
@ -398,13 +398,19 @@ Lines without the delimiter produce a single <a class="xref" href="Hi.NcParsers.
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IEnumerable&lt;Sentence&gt; GetSentences(LazyLinkedList&lt;IndexedFileLine&gt; indexedFileLines, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
<pre><code class="lang-csharp hljs">public IEnumerable&lt;Sentence&gt; GetSentences(LazyLinkedList&lt;IndexedFileLine&gt; indexedFileLines, List&lt;INcDependency&gt; ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>indexedFileLines</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html">LazyLinkedList</a>&lt;<a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a>&gt;</dt>
<dd><p>The lazy linked list of indexed file lines.</p>
</dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd><p>Dependency list of the owning runner; segmenters that consume
header rows (e.g. <a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html">CsvSegmenter</a>) read host-wired
dependencies from here. May be null in lightweight test fixtures — implementations
that need a dependency must null-check.</p>
</dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd><p>Diagnostic progress reporter.</p>

View File

@ -255,8 +255,8 @@ Class SingleLineSegmenter
<a id="Hi_NcParsers_Segmenters_SingleLineSegmenter_GetSentences_" data-uid="Hi.NcParsers.Segmenters.SingleLineSegmenter.GetSentences*"></a>
<h3 id="Hi_NcParsers_Segmenters_SingleLineSegmenter_GetSentences_Hi_Common_Collections_LazyLinkedList_Hi_Common_FileLines_IndexedFileLine__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.Segmenters.SingleLineSegmenter.GetSentences(Hi.Common.Collections.LazyLinkedList{Hi.Common.FileLines.IndexedFileLine},Hi.NcParsers.NcDiagnosticProgress)">
GetSentences(LazyLinkedList&lt;IndexedFileLine&gt;, NcDiagnosticProgress)
<h3 id="Hi_NcParsers_Segmenters_SingleLineSegmenter_GetSentences_Hi_Common_Collections_LazyLinkedList_Hi_Common_FileLines_IndexedFileLine__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.NcParsers.Segmenters.SingleLineSegmenter.GetSentences(Hi.Common.Collections.LazyLinkedList{Hi.Common.FileLines.IndexedFileLine},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
GetSentences(LazyLinkedList&lt;IndexedFileLine&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
@ -265,13 +265,19 @@ Class SingleLineSegmenter
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IEnumerable&lt;Sentence&gt; GetSentences(LazyLinkedList&lt;IndexedFileLine&gt; indexedFileLines, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
<pre><code class="lang-csharp hljs">public IEnumerable&lt;Sentence&gt; GetSentences(LazyLinkedList&lt;IndexedFileLine&gt; indexedFileLines, List&lt;INcDependency&gt; ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>indexedFileLines</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html">LazyLinkedList</a>&lt;<a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a>&gt;</dt>
<dd><p>The lazy linked list of indexed file lines.</p>
</dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd><p>Dependency list of the owning runner; segmenters that consume
header rows (e.g. <a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html">CsvSegmenter</a>) read host-wired
dependencies from here. May be null in lightweight test fixtures — implementations
that need a dependency must null-check.</p>
</dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd><p>Diagnostic progress reporter.</p>

View File

@ -310,7 +310,7 @@ to store typed values at parse time.
</h3>
<div class="markdown level1 summary"><p>0-based ordinal in NC execution order. Stamped at piece construction
time by <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> from the destination
time by <a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">GetSyntaxPieces(ISegmenter, List&lt;INcDependency&gt;, IEnumerable&lt;IndexedFileLine&gt;, int, NcDiagnosticProgress, CancellationToken)</a> from the destination
<code>layers[0]</code>'s running count, so subprogram pieces inlined by
<code>SubProgramCallSyntax</code> get sequential indices that interleave
correctly between host blocks. Useful as a cross-process alignment

View File

@ -167,6 +167,27 @@ MachiningStep, etc.) when source order
(<a class="xref" href="Hi.Common.FileLines.FileLineUtil.html#Hi_Common_FileLines_FileLineUtil_MixedIndex_Hi_Common_FileLines_IFileLineIndex_">MixedIndex(IFileLineIndex)</a>)
is not enough because SubProgram inline reorders blocks relative to
(FileIndex, LineIndex).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a></dt>
<dd><p>Marker for objects that hold session-scoped runtime state which must be
cleared when <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a> initializes a new
session pipeline (the <code>state.IsInitialized == false</code> edge).</p>
<p>
Implementers may live on either chain: <a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>
or <a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a>. <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> scans
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcDependencyList">NcDependencyList</a> and
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcSyntaxList">NcSyntaxList</a> on the session-init edge and calls
<a class="xref" href="Hi.NcParsers.ISessionResettable.html#Hi_NcParsers_ISessionResettable_OnSessionReset">OnSessionReset()</a> on every match.
</p>
<p>
Distinct from <a class="xref" href="Hi.NcParsers.Dependencys.IPowerResettable.html">IPowerResettable</a>: power-reset clears
retained-but-volatile state on a controller power cycle (e.g., Fanuc
<code>#100-#499</code>), an edge that survives ordinary session boundaries.
Session-reset clears state whose lifetime is one pipeline pass (iteration
counters, file-index allocators, etc.).
</p>
</dd>
</dl>
<h3 id="enums">

View File

@ -0,0 +1,423 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Class CsvRowSemantic | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class CsvRowSemantic | HiAPI-C# 2025 ">
<meta name="description" content="Final-stage semantic that turns each row JSON stamped by into the same sequence the legacy CsvRunner produced: optional (begin), , , , , , / , , and optional (end). Stateless — the previous machine coordinate is recovered by walking back through the chain and reading the typed cells already stamped, so no carry-state lives on the semantic instance or in extra JSON sections. The previous actual time is recovered the same way; that cell stays as a string (the source format may be TimeSpan or DateTime) and is re-parsed on demand — at most once per row.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic">
<h1 id="Hi_Numerical_CsvParsers_CsvRowSemantic" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic" class="text-break">
Class CsvRowSemantic
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Numerical.html">Numerical</a>.<a class="xref" href="Hi.Numerical.CsvParsers.html">CsvParsers</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Final-stage semantic that turns each row JSON stamped by
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a> into the same <a class="xref" href="Hi.Numerical.Acts.IAct.html">IAct</a> sequence the
legacy <code>CsvRunner</code> produced: optional <a class="xref" href="Hi.Numerical.Acts.ActLineCsScript.html">ActLineCsScript</a>
(begin), <a class="xref" href="Hi.Numerical.Acts.ActActualTime.html">ActActualTime</a>, <a class="xref" href="Hi.Numerical.Acts.ActToolingTeleport.html">ActToolingTeleport</a>,
<a class="xref" href="Hi.Numerical.Acts.ActFeedrate.html">ActFeedrate</a>, <a class="xref" href="Hi.Numerical.Acts.ActSpindleDirection.html">ActSpindleDirection</a>,
<a class="xref" href="Hi.Numerical.Acts.ActSpindleSpeed.html">ActSpindleSpeed</a>, <a class="xref" href="Hi.Numerical.Acts.ActMcXyzabcStep.html">ActMcXyzabcStep</a> /
<a class="xref" href="Hi.Numerical.Acts.ActMcXyzabcLinearContour.html">ActMcXyzabcLinearContour</a>, <a class="xref" href="Hi.Numerical.Acts.ActData.html">ActData</a>, and
optional <a class="xref" href="Hi.Numerical.Acts.ActLineCsScript.html">ActLineCsScript</a> (end).</p>
<p>
Stateless — the previous machine coordinate is recovered by walking back
through the <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a> chain and reading the typed
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a> cells <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a> already stamped, so
no carry-state lives on the semantic instance or in extra JSON sections.
The previous actual time is recovered the same way; that cell stays as a
string (the source format may be TimeSpan or DateTime) and is re-parsed
on demand — at most once per row.
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class CsvRowSemantic : INcSemantic, IMakeXmlSource</code></pre>
</div>
<dl class="typelist inheritance">
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">CsvRowSemantic</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Semantics.INcSemantic.html">INcSemantic</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
<dt>Inherited Members</dt>
<dd>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
</div>
<div>
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
</div>
</dd></dl>
<dl class="typelist extensionMethods">
<dt>Extension Methods</dt>
<dd>
<div>
<a class="xref" href="Hi.Common.DuplicateUtil.html#Hi_Common_DuplicateUtil_TryDuplicate__1___0_System_Object___">DuplicateUtil.TryDuplicate&lt;TSelf&gt;(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&lt;TSrc&gt;(TSrc, Action&lt;TSrc&gt;)</a>
</div>
<div>
<a class="xref" href="Hi.Common.InvokeUtil.html#Hi_Common_InvokeUtil_SelfInvoke__2___0_System_Func___0___1__">InvokeUtil.SelfInvoke&lt;TSrc, TDst&gt;(TSrc, Func&lt;TSrc, TDst&gt;)</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="properties">Properties
</h2>
<a id="Hi_Numerical_CsvParsers_CsvRowSemantic_DisplayName_" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic.DisplayName*"></a>
<h3 id="Hi_Numerical_CsvParsers_CsvRowSemantic_DisplayName" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic.DisplayName">
DisplayName
</h3>
<div class="markdown level1 summary"><p>The process name shown on UI.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public string DisplayName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="Hi_Numerical_CsvParsers_CsvRowSemantic_XName_" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic.XName*"></a>
<h3 id="Hi_Numerical_CsvParsers_CsvRowSemantic_XName" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name for <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Generators">Generators</a> registration.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_Numerical_CsvParsers_CsvRowSemantic_MakeXmlSource_" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic.MakeXmlSource*"></a>
<h3 id="Hi_Numerical_CsvParsers_CsvRowSemantic_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
<div class="markdown level1 summary"><p>Creates an XML representation of the object.
This method may also generate additional resources such as related files.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>baseDirectory</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The base directory for resolving relative paths</p>
</dd>
<dt><code>relFile</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd><p>The relative file path for the XML source</p>
</dd>
<dt><code>exhibitionOnly</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dd><p>if true, the extended file creation is suppressed.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>An XML element representing the object's state</p>
</dd>
</dl>
<h4 class="section" id="Hi_Numerical_CsvParsers_CsvRowSemantic_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The <code class="paramref">baseDirectory</code> is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.</p>
</div>
<a id="Hi_Numerical_CsvParsers_CsvRowSemantic_Reg_" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic.Reg*"></a>
<h3 id="Hi_Numerical_CsvParsers_CsvRowSemantic_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Reg(XFactory factory = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>factory</code> <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a></dt>
<dd></dd>
</dl>
<a id="Hi_Numerical_CsvParsers_CsvRowSemantic_Resolve_" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic.Resolve*"></a>
<h3 id="Hi_Numerical_CsvParsers_CsvRowSemantic_Resolve_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.Numerical.CsvParsers.CsvRowSemantic.Resolve(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
Resolve(LazyLinkedListNode&lt;SyntaxPiece&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
<div class="markdown level1 summary"><p>Resolve the <code class="paramref">syntaxPieceNode</code> into a sequence of <a class="xref" href="Hi.Numerical.Acts.IAct.html">IAct</a>.
May also mutate <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>.<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject">JsonObject</a> for downstream semantics.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IEnumerable&lt;IAct&gt; Resolve(LazyLinkedListNode&lt;SyntaxPiece&gt; syntaxPieceNode, List&lt;INcDependency&gt; dependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>syntaxPieceNode</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedListNode-1.html">LazyLinkedListNode</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>&gt;</dt>
<dd></dd>
<dt><code>dependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd></dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</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.collections.generic.ienumerable-1">IEnumerable</a>&lt;<a class="xref" href="Hi.Numerical.Acts.IAct.html">IAct</a>&gt;</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>

View File

@ -2,11 +2,11 @@
<html>
<head>
<meta charset="utf-8">
<title>Class MachiningProjectGrpcServer | HiAPI-C# 2025 </title>
<title>Class CsvRowSyntax | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class MachiningProjectGrpcServer | HiAPI-C# 2025 ">
<meta name="title" content="Class CsvRowSyntax | HiAPI-C# 2025 ">
<meta name="description" content="Server for exposing machining project functionality via gRPC.">
<meta name="description" content="Per-row CSV parsing syntax for the soft NC runner. Reads the active via , splits the row text using , and stamps the resulting column→value map into under the property for to consume. Numeric cells are pre-typed to (or ) at this stage so downstream readers — including &#39;s backwards walk for the previous machine coordinate — touch native JSON numbers instead of re-parsing strings on every visit. Columns kept as strings: the script / time / spindle-direction tags whose semantic interpretation is non-numeric, plus any column whose key appears in (the caller-supplied parsing function expects the raw cell text).">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -84,25 +84,41 @@
<nav id="breadcrumb"></nav>
</div>
<article data-uid="HiNc.Grpcs.MachiningProjectGrpcServer">
<article data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax">
<h1 id="HiNc_Grpcs_MachiningProjectGrpcServer" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer" class="text-break">
Class MachiningProjectGrpcServer
<h1 id="Hi_Numerical_CsvParsers_CsvRowSyntax" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax" class="text-break">
Class CsvRowSyntax
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="HiNc.html">HiNc</a>.<a class="xref" href="HiNc.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Numerical.html">Numerical</a>.<a class="xref" href="Hi.Numerical.CsvParsers.html">CsvParsers</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Server for exposing machining project functionality via gRPC.</p>
<div class="markdown summary"><p>Per-row CSV parsing syntax for the soft NC runner. Reads the active
<a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html#Hi_Numerical_CsvParsers_CsvSegmenter_TitleList">TitleList</a> via
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html">SegmenterDependency</a>, splits the row text using
<a class="xref" href="Hi.Common.CsvUtils.CsvInputKit.html#Hi_Common_CsvUtils_CsvInputKit_GetCsvDictionary_System_Collections_Generic_IList_System_String__System_String_">GetCsvDictionary(IList&lt;string&gt;, string)</a>, and
stamps the resulting column→value map into
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject">JsonObject</a> under the <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html#Hi_Numerical_CsvParsers_CsvRowSyntax_CsvRowKey">CsvRowKey</a>
property for <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSemantic.html">CsvRowSemantic</a> to consume.</p>
<p>
Numeric cells are pre-typed to <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a> (or <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>)
at this stage so downstream readers — including
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSemantic.html">CsvRowSemantic</a>'s backwards walk for the previous machine
coordinate — touch native JSON numbers instead of re-parsing strings on
every visit. Columns kept as strings: the script / time / spindle-direction
tags whose semantic interpretation is non-numeric, plus any column whose
key appears in <a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_ParsingDictionary">ParsingDictionary</a> (the
caller-supplied parsing function expects the raw cell text).
</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class MachiningProjectGrpcServer : IDisposable, IMakeXmlSource</code></pre>
<pre><code class="lang-csharp hljs">public class CsvRowSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource</code></pre>
</div>
@ -112,14 +128,15 @@ Class MachiningProjectGrpcServer
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">MachiningProjectGrpcServer</span></div>
<div><span class="xref">CsvRowSyntax</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.idisposable">IDisposable</a></div>
<div><a class="xref" href="Hi.NcParsers.Syntaxs.ISituNcSyntax.html">ISituNcSyntax</a></div>
<div><a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
@ -181,28 +198,30 @@ Class MachiningProjectGrpcServer
<h2 class="section" id="constructors">Constructors
<h2 class="section" id="fields">Fields
</h2>
<a id="HiNc_Grpcs_MachiningProjectGrpcServer__ctor_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.#ctor*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer__ctor_Hi_MachiningProcs_LocalProjectService_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.#ctor(Hi.MachiningProcs.LocalProjectService)">
MachiningProjectGrpcServer(LocalProjectService)
<h3 id="Hi_Numerical_CsvParsers_CsvRowSyntax_CsvRowKey" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.CsvRowKey">
CsvRowKey
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance of the <a class="xref" href="HiNc.Grpcs.MachiningProjectGrpcServer.html">MachiningProjectGrpcServer</a> class.</p>
<div class="markdown level1 summary"><p>JSON property name under which the parsed row dictionary is stored.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public MachiningProjectGrpcServer(LocalProjectService localProjectService)</code></pre>
<pre><code class="lang-csharp hljs">public const string CsvRowKey = &quot;CsvRow&quot;</code></pre>
</div>
<h4 class="section">Parameters</h4>
<h4 class="section">Field Value</h4>
<dl class="parameters">
<dt><code>localProjectService</code> <a class="xref" href="Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a></dt>
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
@ -214,62 +233,23 @@ Class MachiningProjectGrpcServer
<a id="HiNc_Grpcs_MachiningProjectGrpcServer__ctor_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.#ctor*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer__ctor_System_Xml_Linq_XElement_Hi_MachiningProcs_LocalProjectService_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.#ctor(System.Xml.Linq.XElement,Hi.MachiningProcs.LocalProjectService)">
MachiningProjectGrpcServer(XElement, LocalProjectService)
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance of the <a class="xref" href="HiNc.Grpcs.MachiningProjectGrpcServer.html">MachiningProjectGrpcServer</a> class from XML.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public MachiningProjectGrpcServer(XElement src, LocalProjectService localProjectService)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>src</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p>XML source element</p>
</dd>
<dt><code>localProjectService</code> <a class="xref" href="Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a></dt>
<dd><p>The local project service.</p>
</dd>
</dl>
<h2 class="section" id="properties">Properties
</h2>
<a id="HiNc_Grpcs_MachiningProjectGrpcServer_IsServiceRunning_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.IsServiceRunning*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRowSyntax_Name_" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.Name*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer_IsServiceRunning" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.IsServiceRunning">
IsServiceRunning
<h3 id="Hi_Numerical_CsvParsers_CsvRowSyntax_Name" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.Name">
Name
</h3>
<div class="markdown level1 summary"><p>Gets whether the service is currently running.</p>
<div class="markdown level1 summary"><p>Syntax kind name (typically the concrete type name).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public bool IsServiceRunning { get; }</code></pre>
<pre><code class="lang-csharp hljs">public string Name { get; }</code></pre>
</div>
@ -278,7 +258,7 @@ Class MachiningProjectGrpcServer
<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>
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
@ -289,78 +269,14 @@ Class MachiningProjectGrpcServer
<a id="HiNc_Grpcs_MachiningProjectGrpcServer_ServicePort_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.ServicePort*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRowSyntax_XName_" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.XName*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer_ServicePort" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.ServicePort">
ServicePort
</h3>
<div class="markdown level1 summary"><p>Gets or sets the port used by the gRPC service.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public int ServicePort { 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.int32">int</a></dt>
<dd></dd>
</dl>
<a id="HiNc_Grpcs_MachiningProjectGrpcServer_WebApplication_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.WebApplication*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer_WebApplication" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.WebApplication">
WebApplication
</h3>
<div class="markdown level1 summary"><p>Gets the web application instance for the gRPC server.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public WebApplication WebApplication { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.builder.webapplication">WebApplication</a></dt>
<dd></dd>
</dl>
<a id="HiNc_Grpcs_MachiningProjectGrpcServer_XName_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.XName*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer_XName" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.XName">
<h3 id="Hi_Numerical_CsvParsers_CsvRowSyntax_XName" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.XName">
XName
</h3>
<div class="markdown level1 summary"><p>Name for XML IO.</p>
<div class="markdown level1 summary"><p>XML element name for <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Generators">Generators</a> registration.</p>
</div>
<div class="markdown level1 conceptual"></div>
@ -389,50 +305,29 @@ Class MachiningProjectGrpcServer
</h2>
<a id="HiNc_Grpcs_MachiningProjectGrpcServer_Dispose_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.Dispose*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRowSyntax_Build_" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.Build*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer_Dispose" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.Dispose">
Dispose()
<h3 id="Hi_Numerical_CsvParsers_CsvRowSyntax_Build_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.Build(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
Build(LazyLinkedListNode&lt;SyntaxPiece&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
<div class="markdown level1 summary"><p>Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.</p>
<div class="markdown level1 summary"><p>Build syntax arrangement into the
<code class="paramref">syntaxPieceNode</code> in-place.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public void Dispose()</code></pre>
</div>
<a id="HiNc_Grpcs_MachiningProjectGrpcServer_Dispose_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.Dispose*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer_Dispose_System_Boolean_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.Dispose(System.Boolean)">
Dispose(bool)
</h3>
<div class="markdown level1 summary"></div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">protected virtual void Dispose(bool disposing)</code></pre>
<pre><code class="lang-csharp hljs">public void Build(LazyLinkedListNode&lt;SyntaxPiece&gt; syntaxPieceNode, List&lt;INcDependency&gt; ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>disposing</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
<dt><code>syntaxPieceNode</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedListNode-1.html">LazyLinkedListNode</a>&lt;<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a>&gt;</dt>
<dd></dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd></dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd></dd>
</dl>
@ -447,9 +342,9 @@ Class MachiningProjectGrpcServer
<a id="HiNc_Grpcs_MachiningProjectGrpcServer_MakeXmlSource_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.MakeXmlSource*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRowSyntax_MakeXmlSource_" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.MakeXmlSource*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.MakeXmlSource(System.String,System.String,System.Boolean)">
<h3 id="Hi_Numerical_CsvParsers_CsvRowSyntax_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
@ -489,7 +384,7 @@ This method may also generate additional resources such as related files.</p>
<h4 class="section" id="HiNc_Grpcs_MachiningProjectGrpcServer_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<h4 class="section" id="Hi_Numerical_CsvParsers_CsvRowSyntax_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The <code class="paramref">baseDirectory</code> is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.</p>
@ -498,16 +393,16 @@ Since the folder can be moving with the configuration file.</p>
<a id="HiNc_Grpcs_MachiningProjectGrpcServer_Reg_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.Reg*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRowSyntax_Reg_" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.Reg*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.Reg(Hi.Common.XmlUtils.XFactory)">
<h3 id="Hi_Numerical_CsvParsers_CsvRowSyntax_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.Numerical.CsvParsers.CsvRowSyntax.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer (and its legacy alias) with the
given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a> (or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when
<code class="paramref">factory</code> is <code>null</code>). Idempotent.</p>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
@ -532,72 +427,6 @@ given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a> (or <
<a id="HiNc_Grpcs_MachiningProjectGrpcServer_StartAsync_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.StartAsync*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer_StartAsync" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.StartAsync">
StartAsync()
</h3>
<div class="markdown level1 summary"><p>Starts the gRPC server asynchronously.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task StartAsync()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task">Task</a></dt>
<dd><p>A task representing the asynchronous operation</p>
</dd>
</dl>
<a id="HiNc_Grpcs_MachiningProjectGrpcServer_StopAsync_" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.StopAsync*"></a>
<h3 id="HiNc_Grpcs_MachiningProjectGrpcServer_StopAsync" data-uid="HiNc.Grpcs.MachiningProjectGrpcServer.StopAsync">
StopAsync()
</h3>
<div class="markdown level1 summary"><p>Stops the gRPC server asynchronously.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public Task StopAsync()</code></pre>
</div>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task">Task</a></dt>
<dd><p>A task representing the asynchronous operation</p>
</dd>
</dl>
</article>

View File

@ -6,7 +6,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class CsvRunnerConfig | HiAPI-C# 2025 ">
<meta name="description" content="Configuration class for CSV Runner.">
<meta name="description" content="Configuration class for CSV Runner. Lives in when wired with ; consumed by and for tag-name lookup and custom-field parsing.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -84,25 +84,28 @@
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig">
<article data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig">
<h1 id="Hi_Numerical_FilePlayers_CsvRunnerConfig" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig" class="text-break">
<h1 id="Hi_Numerical_CsvParsers_CsvRunnerConfig" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig" class="text-break">
Class CsvRunnerConfig
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Numerical.html">Numerical</a>.<a class="xref" href="Hi.Numerical.FilePlayers.html">FilePlayers</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Numerical.html">Numerical</a>.<a class="xref" href="Hi.Numerical.CsvParsers.html">CsvParsers</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Configuration class for CSV Runner.</p>
<div class="markdown summary"><p>Configuration class for CSV Runner. Lives in
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcDependencyList">NcDependencyList</a> when wired with
<a class="xref" href="Hi.Numerical.CsvParsers.CsvSoftRunner.html">CsvSoftRunner</a>; consumed by <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a> and
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSemantic.html">CsvRowSemantic</a> for tag-name lookup and custom-field parsing.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class CsvRunnerConfig : IMakeXmlSource</code></pre>
<pre><code class="lang-csharp hljs">public class CsvRunnerConfig : INcDependency, IMakeXmlSource</code></pre>
</div>
@ -119,6 +122,7 @@ Class CsvRunnerConfig
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IMakeXmlSource.html">IMakeXmlSource</a></div>
</dd>
</dl>
@ -184,9 +188,9 @@ Class CsvRunnerConfig
</h2>
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig__ctor_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.#ctor*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig__ctor_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.#ctor*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig__ctor" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.#ctor">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig__ctor" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.#ctor">
CsvRunnerConfig()
</h3>
@ -211,9 +215,9 @@ Class CsvRunnerConfig
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig__ctor_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.#ctor*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig__ctor_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.#ctor*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig__ctor_System_Xml_Linq_XElement_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.#ctor(System.Xml.Linq.XElement)">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig__ctor_System_Xml_Linq_XElement_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.#ctor(System.Xml.Linq.XElement)">
CsvRunnerConfig(XElement)
</h3>
@ -248,9 +252,9 @@ Class CsvRunnerConfig
</h2>
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_ActualTimeTag_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.ActualTimeTag*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_ActualTimeTag_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.ActualTimeTag*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_ActualTimeTag" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.ActualTimeTag">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_ActualTimeTag" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.ActualTimeTag">
ActualTimeTag
</h3>
@ -280,9 +284,9 @@ Class CsvRunnerConfig
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_CutterLocationPrefix_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.CutterLocationPrefix*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_CutterLocationPrefix_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.CutterLocationPrefix*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_CutterLocationPrefix" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.CutterLocationPrefix">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_CutterLocationPrefix" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.CutterLocationPrefix">
CutterLocationPrefix
</h3>
@ -312,9 +316,9 @@ Class CsvRunnerConfig
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_DurationTag_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.DurationTag*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_DurationTag_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.DurationTag*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_DurationTag" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.DurationTag">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_DurationTag" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.DurationTag">
DurationTag
</h3>
@ -344,9 +348,9 @@ Class CsvRunnerConfig
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_FeedrateTag_mmdmin_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.FeedrateTag_mmdmin*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_FeedrateTag_mmdmin_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.FeedrateTag_mmdmin*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_FeedrateTag_mmdmin" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.FeedrateTag_mmdmin">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_FeedrateTag_mmdmin" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.FeedrateTag_mmdmin">
FeedrateTag_mmdmin
</h3>
@ -376,9 +380,9 @@ Class CsvRunnerConfig
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_LineBeginCsScriptTag_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.LineBeginCsScriptTag*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_LineBeginCsScriptTag_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.LineBeginCsScriptTag*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_LineBeginCsScriptTag" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.LineBeginCsScriptTag">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_LineBeginCsScriptTag" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.LineBeginCsScriptTag">
LineBeginCsScriptTag
</h3>
@ -408,9 +412,9 @@ Class CsvRunnerConfig
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_LineEndCsScriptTag_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.LineEndCsScriptTag*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_LineEndCsScriptTag_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.LineEndCsScriptTag*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_LineEndCsScriptTag" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.LineEndCsScriptTag">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_LineEndCsScriptTag" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.LineEndCsScriptTag">
LineEndCsScriptTag
</h3>
@ -440,9 +444,9 @@ Class CsvRunnerConfig
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_MachineCoordinatePrefix_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.MachineCoordinatePrefix*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_MachineCoordinatePrefix_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.MachineCoordinatePrefix*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_MachineCoordinatePrefix" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.MachineCoordinatePrefix">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_MachineCoordinatePrefix" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.MachineCoordinatePrefix">
MachineCoordinatePrefix
</h3>
@ -472,9 +476,9 @@ Class CsvRunnerConfig
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_ParsingDictionary_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.ParsingDictionary*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_ParsingDictionary_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.ParsingDictionary*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_ParsingDictionary" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.ParsingDictionary">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_ParsingDictionary" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.ParsingDictionary">
ParsingDictionary
</h3>
@ -505,9 +509,9 @@ Note: This dictionary cannot be serialized to XML as it contains functions.</p>
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_SpindleDirectionTag_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.SpindleDirectionTag*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_SpindleDirectionTag_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.SpindleDirectionTag*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_SpindleDirectionTag" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.SpindleDirectionTag">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_SpindleDirectionTag" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.SpindleDirectionTag">
SpindleDirectionTag
</h3>
@ -537,9 +541,9 @@ Note: This dictionary cannot be serialized to XML as it contains functions.</p>
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_SpindleSpeedTag_rpm_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.SpindleSpeedTag_rpm*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_SpindleSpeedTag_rpm_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.SpindleSpeedTag_rpm*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_SpindleSpeedTag_rpm" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.SpindleSpeedTag_rpm">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_SpindleSpeedTag_rpm" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.SpindleSpeedTag_rpm">
SpindleSpeedTag_rpm
</h3>
@ -569,9 +573,9 @@ Note: This dictionary cannot be serialized to XML as it contains functions.</p>
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_ToolIdTag_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.ToolIdTag*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_ToolIdTag_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.ToolIdTag*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_ToolIdTag" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.ToolIdTag">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_ToolIdTag" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.ToolIdTag">
ToolIdTag
</h3>
@ -601,9 +605,9 @@ Note: This dictionary cannot be serialized to XML as it contains functions.</p>
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_XName_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.XName*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_XName_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.XName*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_XName" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.XName">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_XName" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.XName">
XName
</h3>
@ -637,9 +641,9 @@ Note: This dictionary cannot be serialized to XML as it contains functions.</p>
</h2>
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_MakeXmlSource_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.MakeXmlSource*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_MakeXmlSource_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.MakeXmlSource*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.MakeXmlSource(System.String,System.String,System.Boolean)">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_MakeXmlSource_System_String_System_String_System_Boolean_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.MakeXmlSource(System.String,System.String,System.Boolean)">
MakeXmlSource(string, string, bool)
</h3>
@ -679,7 +683,7 @@ This method may also generate additional resources such as related files.</p>
<h4 class="section" id="Hi_Numerical_FilePlayers_CsvRunnerConfig_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<h4 class="section" id="Hi_Numerical_CsvParsers_CsvRunnerConfig_MakeXmlSource_System_String_System_String_System_Boolean__remarks">Remarks</h4>
<div class="markdown level1 remarks"><p>For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied.
The <code class="paramref">baseDirectory</code> is typically the folder at the nearest configuration file folder.
Since the folder can be moving with the configuration file.</p>
@ -688,9 +692,9 @@ Since the folder can be moving with the configuration file.</p>
<a id="Hi_Numerical_FilePlayers_CsvRunnerConfig_Reg_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.Reg*"></a>
<a id="Hi_Numerical_CsvParsers_CsvRunnerConfig_Reg_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.Reg*"></a>
<h3 id="Hi_Numerical_FilePlayers_CsvRunnerConfig_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.Numerical.FilePlayers.CsvRunnerConfig.Reg(Hi.Common.XmlUtils.XFactory)">
<h3 id="Hi_Numerical_CsvParsers_CsvRunnerConfig_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.Numerical.CsvParsers.CsvRunnerConfig.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>

View File

@ -2,11 +2,11 @@
<html>
<head>
<meta charset="utf-8">
<title>Class PlayerServiceRunner | HiAPI-C# 2025 </title>
<title>Class CsvSegmenter | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class PlayerServiceRunner | HiAPI-C# 2025 ">
<meta name="title" content="Class CsvSegmenter | HiAPI-C# 2025 ">
<meta name="description" content="Service runner for the Player gRPC service.">
<meta name="description" content="Segments a CSV stream for the pipeline. Consumes the first as the title row (populating and registering any new columns as step variables via ), then yields each subsequent line as a one-line for to parse.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -84,25 +84,31 @@
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs.PlayerServiceRunner">
<article data-uid="Hi.Numerical.CsvParsers.CsvSegmenter">
<h1 id="Hi_Grpcs_PlayerServiceRunner" data-uid="Hi.Grpcs.PlayerServiceRunner" class="text-break">
Class PlayerServiceRunner
<h1 id="Hi_Numerical_CsvParsers_CsvSegmenter" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter" class="text-break">
Class CsvSegmenter
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Numerical.html">Numerical</a>.<a class="xref" href="Hi.Numerical.CsvParsers.html">CsvParsers</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>Service runner for the Player gRPC service.</p>
<div class="markdown summary"><p>Segments a CSV stream for the <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a>
pipeline. Consumes the first <a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a> as the title
row (populating <a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html#Hi_Numerical_CsvParsers_CsvSegmenter_TitleList">TitleList</a> and registering any new columns
as step variables via
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html">StepPropertyAccessDictionaryDependency</a>), then yields each
subsequent line as a one-line <a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a> for
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a> to parse.</p>
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public class PlayerServiceRunner : PlayerService.PlayerServiceBase</code></pre>
<pre><code class="lang-csharp hljs">public class CsvSegmenter : ISegmenter, IToXElement</code></pre>
</div>
@ -112,11 +118,17 @@ Class PlayerServiceRunner
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><a class="xref" href="Hi.Grpcs.PlayerService.html">PlayerService</a>.<a class="xref" href="Hi.Grpcs.PlayerService.PlayerServiceBase.html">PlayerServiceBase</a></div>
<div><span class="xref">PlayerServiceRunner</span></div>
<div><span class="xref">CsvSegmenter</span></div>
</dd>
</dl>
<dl class="typelist implements">
<dt>Implements</dt>
<dd>
<div><a class="xref" href="Hi.NcParsers.Segmenters.ISegmenter.html">ISegmenter</a></div>
<div><a class="xref" href="Hi.Common.XmlUtils.IToXElement.html">IToXElement</a></div>
</dd>
</dl>
<dl class="typelist inheritedMembers">
@ -175,28 +187,181 @@ Class PlayerServiceRunner
<h2 class="section" id="constructors">Constructors
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_Grpcs_PlayerServiceRunner__ctor_" data-uid="Hi.Grpcs.PlayerServiceRunner.#ctor*"></a>
<a id="Hi_Numerical_CsvParsers_CsvSegmenter_Name_" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.Name*"></a>
<h3 id="Hi_Grpcs_PlayerServiceRunner__ctor_Hi_MachiningProcs_LocalProjectService_" data-uid="Hi.Grpcs.PlayerServiceRunner.#ctor(Hi.MachiningProcs.LocalProjectService)">
PlayerServiceRunner(LocalProjectService)
<h3 id="Hi_Numerical_CsvParsers_CsvSegmenter_Name" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.Name">
Name
</h3>
<div class="markdown level1 summary"><p>Initializes a new instance of the <a class="xref" href="Hi.Grpcs.PlayerServiceRunner.html">PlayerServiceRunner</a> class.</p>
<div class="markdown level1 summary"><p>Display name of this segmenter.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public PlayerServiceRunner(LocalProjectService localProjectService)</code></pre>
<pre><code class="lang-csharp hljs">public string Name { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<a id="Hi_Numerical_CsvParsers_CsvSegmenter_TitleList_" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.TitleList*"></a>
<h3 id="Hi_Numerical_CsvParsers_CsvSegmenter_TitleList" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.TitleList">
TitleList
</h3>
<div class="markdown level1 summary"><p>Column titles parsed from the first row of the most recent
<a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html#Hi_Numerical_CsvParsers_CsvSegmenter_GetSentences_Hi_Common_Collections_LazyLinkedList_Hi_Common_FileLines_IndexedFileLine__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_">GetSentences(LazyLinkedList&lt;IndexedFileLine&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)</a> invocation. Quote- and whitespace-trimmed to
match the convention established in the legacy CsvRunner. Reset on each
new call so per-file headers stay accurate across multi-file sessions.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public List&lt;string&gt; TitleList { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
<dd></dd>
</dl>
<a id="Hi_Numerical_CsvParsers_CsvSegmenter_XName_" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.XName*"></a>
<h3 id="Hi_Numerical_CsvParsers_CsvSegmenter_XName" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.XName">
XName
</h3>
<div class="markdown level1 summary"><p>XML element name for <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Generators">Generators</a> registration.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static string XName { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_Numerical_CsvParsers_CsvSegmenter_GetSentences_" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.GetSentences*"></a>
<h3 id="Hi_Numerical_CsvParsers_CsvSegmenter_GetSentences_Hi_Common_Collections_LazyLinkedList_Hi_Common_FileLines_IndexedFileLine__System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__Hi_NcParsers_NcDiagnosticProgress_" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.GetSentences(Hi.Common.Collections.LazyLinkedList{Hi.Common.FileLines.IndexedFileLine},System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency},Hi.NcParsers.NcDiagnosticProgress)">
GetSentences(LazyLinkedList&lt;IndexedFileLine&gt;, List&lt;INcDependency&gt;, NcDiagnosticProgress)
</h3>
<div class="markdown level1 summary"><p>Segments the indexed file lines into <a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a>s.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public IEnumerable&lt;Sentence&gt; GetSentences(LazyLinkedList&lt;IndexedFileLine&gt; indexedFileLines, List&lt;INcDependency&gt; ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>localProjectService</code> <a class="xref" href="Hi.MachiningProcs.LocalProjectService.html">LocalProjectService</a></dt>
<dt><code>indexedFileLines</code> <a class="xref" href="Hi.Common.Collections.LazyLinkedList-1.html">LazyLinkedList</a>&lt;<a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a>&gt;</dt>
<dd><p>The lazy linked list of indexed file lines.</p>
</dd>
<dt><code>ncDependencyList</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a>&gt;</dt>
<dd><p>Dependency list of the owning runner; segmenters that consume
header rows (e.g. <a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html">CsvSegmenter</a>) read host-wired
dependencies from here. May be null in lightweight test fixtures — implementations
that need a dependency must null-check.</p>
</dd>
<dt><code>ncDiagnosticProgress</code> <a class="xref" href="Hi.NcParsers.NcDiagnosticProgress.html">NcDiagnosticProgress</a></dt>
<dd><p>Diagnostic progress reporter.</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.ienumerable-1">IEnumerable</a>&lt;<a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a>&gt;</dt>
<dd><p>A sequence of <a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a>s.</p>
</dd>
</dl>
<a id="Hi_Numerical_CsvParsers_CsvSegmenter_Reg_" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.Reg*"></a>
<h3 id="Hi_Numerical_CsvParsers_CsvSegmenter_Reg_Hi_Common_XmlUtils_XFactory_" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.Reg(Hi.Common.XmlUtils.XFactory)">
Reg(XFactory)
</h3>
<div class="markdown level1 summary"><p>Registers this type's deserializer with the given <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a>
(or <a class="xref" href="Hi.Common.XmlUtils.XFactory.html#Hi_Common_XmlUtils_XFactory_Default">Default</a> when <code class="paramref">factory</code> is
<code>null</code>). Idempotent.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void Reg(XFactory factory = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>factory</code> <a class="xref" href="Hi.Common.XmlUtils.XFactory.html">XFactory</a></dt>
<dd></dd>
</dl>
@ -211,165 +376,26 @@ Class PlayerServiceRunner
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_Numerical_CsvParsers_CsvSegmenter_ToXElement_" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.ToXElement*"></a>
<a id="Hi_Grpcs_PlayerServiceRunner_Pause_" data-uid="Hi.Grpcs.PlayerServiceRunner.Pause*"></a>
<h3 id="Hi_Grpcs_PlayerServiceRunner_Pause_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.PlayerServiceRunner.Pause(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.ServerCallContext)">
Pause(Empty, ServerCallContext)
<h3 id="Hi_Numerical_CsvParsers_CsvSegmenter_ToXElement" data-uid="Hi.Numerical.CsvParsers.CsvSegmenter.ToXElement">
ToXElement()
</h3>
<div class="markdown level1 summary"><p>Pauses the player.</p>
<div class="markdown level1 summary"><p>Get the <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a> to represent the object.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override Task&lt;Empty&gt; Pause(Empty request, ServerCallContext context)</code></pre>
<pre><code class="lang-csharp hljs">public XElement ToXElement()</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The empty request.</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>The server call context.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<span class="xref">Empty</span>&gt;</dt>
<dd><p>Empty response.</p>
</dd>
</dl>
<a id="Hi_Grpcs_PlayerServiceRunner_Reset_" data-uid="Hi.Grpcs.PlayerServiceRunner.Reset*"></a>
<h3 id="Hi_Grpcs_PlayerServiceRunner_Reset_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.PlayerServiceRunner.Reset(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.ServerCallContext)">
Reset(Empty, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>Resets the player.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override Task&lt;Empty&gt; Reset(Empty request, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The empty request.</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>The server call context.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<span class="xref">Empty</span>&gt;</dt>
<dd><p>Empty response.</p>
</dd>
</dl>
<a id="Hi_Grpcs_PlayerServiceRunner_Resume_" data-uid="Hi.Grpcs.PlayerServiceRunner.Resume*"></a>
<h3 id="Hi_Grpcs_PlayerServiceRunner_Resume_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.PlayerServiceRunner.Resume(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.ServerCallContext)">
Resume(Empty, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>Resumes the player.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override Task&lt;Empty&gt; Resume(Empty request, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The empty request.</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>The server call context.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<span class="xref">Empty</span>&gt;</dt>
<dd><p>Empty response.</p>
</dd>
</dl>
<a id="Hi_Grpcs_PlayerServiceRunner_Start_" data-uid="Hi.Grpcs.PlayerServiceRunner.Start*"></a>
<h3 id="Hi_Grpcs_PlayerServiceRunner_Start_Google_Protobuf_WellKnownTypes_Empty_Grpc_Core_ServerCallContext_" data-uid="Hi.Grpcs.PlayerServiceRunner.Start(Google.Protobuf.WellKnownTypes.Empty,Grpc.Core.ServerCallContext)">
Start(Empty, ServerCallContext)
</h3>
<div class="markdown level1 summary"><p>Starts the player.</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public override Task&lt;Empty&gt; Start(Empty request, ServerCallContext context)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>request</code> <span class="xref">Empty</span></dt>
<dd><p>The empty request.</p>
</dd>
<dt><code>context</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerCallContext.cs">ServerCallContext</a></dt>
<dd><p>The server call context.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<span class="xref">Empty</span>&gt;</dt>
<dd><p>Empty response.</p>
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a></dt>
<dd><p><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.xml.linq.xelement">XElement</a> to represent the object.</p>
</dd>
</dl>

View File

@ -2,11 +2,11 @@
<html>
<head>
<meta charset="utf-8">
<title>Class PlayerService | HiAPI-C# 2025 </title>
<title>Class CsvSoftRunner | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Class PlayerService | HiAPI-C# 2025 ">
<meta name="title" content="Class CsvSoftRunner | HiAPI-C# 2025 ">
<meta name="description" content="numerical file player service.">
<meta name="description" content="Factory for a wired to replay CSV files (deprecates the legacy CsvRunner). The returned runner has a single-syntax pipeline: → → . Default : — tag names + custom field parsers. — provider left null; host wires it the same way it does for brand presets (see BuildCoordinateConverter). — wired by the host so CSV title columns auto-register as step variables., , — runtime plumbing required by . is intentionally not included by default; clients that build custom syntaxes around can append it themselves.">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
@ -84,25 +84,39 @@
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Grpcs.PlayerService">
<article data-uid="Hi.Numerical.CsvParsers.CsvSoftRunner">
<h1 id="Hi_Grpcs_PlayerService" data-uid="Hi.Grpcs.PlayerService" class="text-break">
Class PlayerService
<h1 id="Hi_Numerical_CsvParsers_CsvSoftRunner" data-uid="Hi.Numerical.CsvParsers.CsvSoftRunner" class="text-break">
Class CsvSoftRunner
</h1>
<div class="facts text-secondary">
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Grpcs.html">Grpcs</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiNc.dll</dd></dl>
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.Numerical.html">Numerical</a>.<a class="xref" href="Hi.Numerical.CsvParsers.html">CsvParsers</a></dd></dl>
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
</div>
<div class="markdown summary"><p>numerical file player service.</p>
<div class="markdown summary"><p>Factory for a <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> wired to replay CSV files
(deprecates the legacy <code>CsvRunner</code>). The returned runner has a
single-syntax pipeline: <a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html">CsvSegmenter</a>
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a><a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSemantic.html">CsvRowSemantic</a>.</p>
<p>
Default <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcDependencyList">NcDependencyList</a>:
<ul><li><a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html">CsvRunnerConfig</a> — tag names + custom field parsers.</li><li><a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html">NcKinematicsDependency</a> — provider left null; host wires
it the same way it does for brand presets (see <code>BuildCoordinateConverter</code>).</li><li><a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html">StepPropertyAccessDictionaryDependency</a> — wired by the
host so CSV title columns auto-register as step variables.</li><li><a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html">FileIndexCounterDependency</a>, <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html">SegmenterDependency</a>,
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html">SyntaxPieceLayerDependency</a> — runtime plumbing required by
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a>.</li></ul>
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html">MachiningServiceDependency</a> is intentionally not included by
default; clients that build custom syntaxes around <a class="xref" href="Hi.Numerical.CsvParsers.CsvSoftRunner.html">CsvSoftRunner</a>
can append it themselves.
</div>
<div class="markdown conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static class PlayerService</code></pre>
<pre><code class="lang-csharp hljs">public static class CsvSoftRunner</code></pre>
</div>
@ -112,7 +126,7 @@ Class PlayerService
<dt>Inheritance</dt>
<dd>
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
<div><span class="xref">PlayerService</span></div>
<div><span class="xref">CsvSoftRunner</span></div>
</dd>
</dl>
@ -149,108 +163,39 @@ Class PlayerService
<h2 class="section" id="properties">Properties
</h2>
<a id="Hi_Grpcs_PlayerService_Descriptor_" data-uid="Hi.Grpcs.PlayerService.Descriptor*"></a>
<h3 id="Hi_Grpcs_PlayerService_Descriptor" data-uid="Hi.Grpcs.PlayerService.Descriptor">
Descriptor
</h3>
<div class="markdown level1 summary"><p>Service descriptor</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ServiceDescriptor Descriptor { get; }</code></pre>
</div>
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><span class="xref">ServiceDescriptor</span></dt>
<dd></dd>
</dl>
<h2 class="section" id="methods">Methods
</h2>
<a id="Hi_Grpcs_PlayerService_BindService_" data-uid="Hi.Grpcs.PlayerService.BindService*"></a>
<a id="Hi_Numerical_CsvParsers_CsvSoftRunner_Create_" data-uid="Hi.Numerical.CsvParsers.CsvSoftRunner.Create*"></a>
<h3 id="Hi_Grpcs_PlayerService_BindService_Grpc_Core_ServiceBinderBase_Hi_Grpcs_PlayerService_PlayerServiceBase_" data-uid="Hi.Grpcs.PlayerService.BindService(Grpc.Core.ServiceBinderBase,Hi.Grpcs.PlayerService.PlayerServiceBase)">
BindService(ServiceBinderBase, PlayerServiceBase)
<h3 id="Hi_Numerical_CsvParsers_CsvSoftRunner_Create_Hi_Numerical_CsvParsers_CsvRunnerConfig_" data-uid="Hi.Numerical.CsvParsers.CsvSoftRunner.Create(Hi.Numerical.CsvParsers.CsvRunnerConfig)">
Create(CsvRunnerConfig)
</h3>
<div class="markdown level1 summary"><p>Register service method with a service binder with or without implementation. Useful when customizing the service binding logic.
Note: this method is part of an experimental API that can change or be removed without any prior notice.</p>
<div class="markdown level1 summary"><p>Builds a fresh <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> pre-configured to consume CSV
input. Call once per machining session so the runner's per-session
state starts clean (mirrors the legacy <code>CsvRunner</code>'s reset on
project change).</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static void BindService(ServiceBinderBase serviceBinder, PlayerService.PlayerServiceBase serviceImpl)</code></pre>
<pre><code class="lang-csharp hljs">public static SoftNcRunner Create(CsvRunnerConfig config = null)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>serviceBinder</code> <a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServiceBinderBase.cs">ServiceBinderBase</a></dt>
<dd><p>Service methods will be bound by calling <code>AddMethod</code> on this object.</p>
</dd>
<dt><code>serviceImpl</code> <a class="xref" href="Hi.Grpcs.PlayerService.html">PlayerService</a>.<a class="xref" href="Hi.Grpcs.PlayerService.PlayerServiceBase.html">PlayerServiceBase</a></dt>
<dd><p>An object implementing the server-side handling logic.</p>
</dd>
</dl>
<a id="Hi_Grpcs_PlayerService_BindService_" data-uid="Hi.Grpcs.PlayerService.BindService*"></a>
<h3 id="Hi_Grpcs_PlayerService_BindService_Hi_Grpcs_PlayerService_PlayerServiceBase_" data-uid="Hi.Grpcs.PlayerService.BindService(Hi.Grpcs.PlayerService.PlayerServiceBase)">
BindService(PlayerServiceBase)
</h3>
<div class="markdown level1 summary"><p>Creates service definition that can be registered with a server</p>
</div>
<div class="markdown level1 conceptual"></div>
<div class="codewrapper">
<pre><code class="lang-csharp hljs">public static ServerServiceDefinition BindService(PlayerService.PlayerServiceBase serviceImpl)</code></pre>
</div>
<h4 class="section">Parameters</h4>
<dl class="parameters">
<dt><code>serviceImpl</code> <a class="xref" href="Hi.Grpcs.PlayerService.html">PlayerService</a>.<a class="xref" href="Hi.Grpcs.PlayerService.PlayerServiceBase.html">PlayerServiceBase</a></dt>
<dd><p>An object implementing the server-side handling logic.</p>
<dt><code>config</code> <a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html">CsvRunnerConfig</a></dt>
<dd><p>Optional CSV column-tag configuration; a default
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html">CsvRunnerConfig</a> is created when null.</p>
</dd>
</dl>
<h4 class="section">Returns</h4>
<dl class="parameters">
<dt><a class="xref" href="https://github.com/grpc/grpc-dotnet/blob/64e87a676b6aba16945f70aed3bb1c1dbbbbbad0/src/Grpc.Core.Api/ServerServiceDefinition.cs">ServerServiceDefinition</a></dt>
<dt><a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a></dt>
<dd></dd>
</dl>

View File

@ -0,0 +1,202 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace Hi.Numerical.CsvParsers | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace Hi.Numerical.CsvParsers | HiAPI-C# 2025 ">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.Numerical.CsvParsers">
<h1 id="Hi_Numerical_CsvParsers" data-uid="Hi.Numerical.CsvParsers" class="text-break">Namespace Hi.Numerical.CsvParsers</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSemantic.html">CsvRowSemantic</a></dt>
<dd><p>Final-stage semantic that turns each row JSON stamped by
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a> into the same <a class="xref" href="Hi.Numerical.Acts.IAct.html">IAct</a> sequence the
legacy <code>CsvRunner</code> produced: optional <a class="xref" href="Hi.Numerical.Acts.ActLineCsScript.html">ActLineCsScript</a>
(begin), <a class="xref" href="Hi.Numerical.Acts.ActActualTime.html">ActActualTime</a>, <a class="xref" href="Hi.Numerical.Acts.ActToolingTeleport.html">ActToolingTeleport</a>,
<a class="xref" href="Hi.Numerical.Acts.ActFeedrate.html">ActFeedrate</a>, <a class="xref" href="Hi.Numerical.Acts.ActSpindleDirection.html">ActSpindleDirection</a>,
<a class="xref" href="Hi.Numerical.Acts.ActSpindleSpeed.html">ActSpindleSpeed</a>, <a class="xref" href="Hi.Numerical.Acts.ActMcXyzabcStep.html">ActMcXyzabcStep</a> /
<a class="xref" href="Hi.Numerical.Acts.ActMcXyzabcLinearContour.html">ActMcXyzabcLinearContour</a>, <a class="xref" href="Hi.Numerical.Acts.ActData.html">ActData</a>, and
optional <a class="xref" href="Hi.Numerical.Acts.ActLineCsScript.html">ActLineCsScript</a> (end).</p>
<p>
Stateless — the previous machine coordinate is recovered by walking back
through the <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">SyntaxPiece</a> chain and reading the typed
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a> cells <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a> already stamped, so
no carry-state lives on the semantic instance or in extra JSON sections.
The previous actual time is recovered the same way; that cell stays as a
string (the source format may be TimeSpan or DateTime) and is re-parsed
on demand — at most once per row.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a></dt>
<dd><p>Per-row CSV parsing syntax for the soft NC runner. Reads the active
<a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html#Hi_Numerical_CsvParsers_CsvSegmenter_TitleList">TitleList</a> via
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html">SegmenterDependency</a>, splits the row text using
<a class="xref" href="Hi.Common.CsvUtils.CsvInputKit.html#Hi_Common_CsvUtils_CsvInputKit_GetCsvDictionary_System_Collections_Generic_IList_System_String__System_String_">GetCsvDictionary(IList&lt;string&gt;, string)</a>, and
stamps the resulting column→value map into
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject">JsonObject</a> under the <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html#Hi_Numerical_CsvParsers_CsvRowSyntax_CsvRowKey">CsvRowKey</a>
property for <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSemantic.html">CsvRowSemantic</a> to consume.</p>
<p>
Numeric cells are pre-typed to <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a> (or <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>)
at this stage so downstream readers — including
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSemantic.html">CsvRowSemantic</a>'s backwards walk for the previous machine
coordinate — touch native JSON numbers instead of re-parsing strings on
every visit. Columns kept as strings: the script / time / spindle-direction
tags whose semantic interpretation is non-numeric, plus any column whose
key appears in <a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_ParsingDictionary">ParsingDictionary</a> (the
caller-supplied parsing function expects the raw cell text).
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html">CsvRunnerConfig</a></dt>
<dd><p>Configuration class for CSV Runner. Lives in
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcDependencyList">NcDependencyList</a> when wired with
<a class="xref" href="Hi.Numerical.CsvParsers.CsvSoftRunner.html">CsvSoftRunner</a>; consumed by <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a> and
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSemantic.html">CsvRowSemantic</a> for tag-name lookup and custom-field parsing.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html">CsvSegmenter</a></dt>
<dd><p>Segments a CSV stream for the <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a>
pipeline. Consumes the first <a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a> as the title
row (populating <a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html#Hi_Numerical_CsvParsers_CsvSegmenter_TitleList">TitleList</a> and registering any new columns
as step variables via
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html">StepPropertyAccessDictionaryDependency</a>), then yields each
subsequent line as a one-line <a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a> for
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a> to parse.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvSoftRunner.html">CsvSoftRunner</a></dt>
<dd><p>Factory for a <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> wired to replay CSV files
(deprecates the legacy <code>CsvRunner</code>). The returned runner has a
single-syntax pipeline: <a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html">CsvSegmenter</a>
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a><a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSemantic.html">CsvRowSemantic</a>.</p>
<p>
Default <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcDependencyList">NcDependencyList</a>:
<ul><li><a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html">CsvRunnerConfig</a> — tag names + custom field parsers.</li><li><a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html">NcKinematicsDependency</a> — provider left null; host wires
it the same way it does for brand presets (see <code>BuildCoordinateConverter</code>).</li><li><a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html">StepPropertyAccessDictionaryDependency</a> — wired by the
host so CSV title columns auto-register as step variables.</li><li><a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html">FileIndexCounterDependency</a>, <a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html">SegmenterDependency</a>,
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html">SyntaxPieceLayerDependency</a> — runtime plumbing required by
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_RunControlLines_System_String_System_Collections_Generic_IEnumerable_System_String__Hi_MachiningProcs_MachiningSession_Hi_MachiningProcs_SessionProgress_System_Threading_CancellationToken_">RunControlLines(string, IEnumerable&lt;string&gt;, MachiningSession, SessionProgress, CancellationToken)</a>.</li></ul>
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html">MachiningServiceDependency</a> is intentionally not included by
default; clients that build custom syntaxes around <a class="xref" href="Hi.Numerical.CsvParsers.CsvSoftRunner.html">CsvSoftRunner</a>
can append it themselves.
</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>

View File

@ -242,7 +242,7 @@ Class CsvRunner
<h4 class="section">Property Value</h4>
<dl class="parameters">
<dt><a class="xref" href="Hi.Numerical.FilePlayers.CsvRunnerConfig.html">CsvRunnerConfig</a></dt>
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html">CsvRunnerConfig</a></dt>
<dd></dd>
</dl>

View File

@ -244,7 +244,8 @@ Class HardNcRunner
<dd><p>The enumerable collection of NC code lines</p>
</dd>
<dt><code>machiningSession</code> <a class="xref" href="Hi.MachiningProcs.MachiningSession.html">MachiningSession</a></dt>
<dd></dd>
<dd><p>The machining session that owns runtime state for this run.</p>
</dd>
<dt><code>sessionProgress</code> <a class="xref" href="Hi.MachiningProcs.SessionProgress.html">SessionProgress</a></dt>
<dd><p>The session message host for logging.</p>
</dd>

View File

@ -97,11 +97,6 @@ Classes
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.FilePlayers.CsvRunner.html">CsvRunner</a></dt>
<dd><p>Provides functionality for running and processing csv lines.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.FilePlayers.CsvRunnerConfig.html">CsvRunnerConfig</a></dt>
<dd><p>Configuration class for CSV Runner.</p>
</dd>
</dl>
<dl class="jumplist">

View File

@ -1,127 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace HiNc.Grpcs | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace HiNc.Grpcs | HiAPI-C# 2025 ">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="HiNc.Grpcs">
<h1 id="HiNc_Grpcs" data-uid="HiNc.Grpcs" class="text-break">Namespace HiNc.Grpcs</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="HiNc.Grpcs.MachiningProjectGrpcServer.html">MachiningProjectGrpcServer</a></dt>
<dd><p>Server for exposing machining project functionality via gRPC.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More