diff --git a/App/EngineMessages/engine-messages.json b/App/EngineMessages/engine-messages.json index 5e7eb33c..9cf55204 100644 --- a/App/EngineMessages/engine-messages.json +++ b/App/EngineMessages/engine-messages.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, - "engineVersion": "3.2.27.0", - "filesParsed": 1276, + "engineVersion": "3.2.28.0", + "filesParsed": 1280, "siteCount": 365, "sites": [ { diff --git a/App/Hi.WpfPlus.dll b/App/Hi.WpfPlus.dll index 9722ece3..78cf3a9d 100644 Binary files a/App/Hi.WpfPlus.dll and b/App/Hi.WpfPlus.dll differ diff --git a/App/HiCbtr.dll b/App/HiCbtr.dll index 722fac2c..f3a7acfe 100644 Binary files a/App/HiCbtr.dll and b/App/HiCbtr.dll differ diff --git a/App/HiDisp.dll b/App/HiDisp.dll index 6145343d..89092b55 100644 Binary files a/App/HiDisp.dll and b/App/HiDisp.dll differ diff --git a/App/HiGeom.dll b/App/HiGeom.dll index 45e288c7..10169cf2 100644 Binary files a/App/HiGeom.dll and b/App/HiGeom.dll differ diff --git a/App/HiLicense.dll b/App/HiLicense.dll index e4a01594..4d9ced6a 100644 Binary files a/App/HiLicense.dll and b/App/HiLicense.dll differ diff --git a/App/HiMech.dll b/App/HiMech.dll index f48e418b..ba711f45 100644 Binary files a/App/HiMech.dll and b/App/HiMech.dll differ diff --git a/App/HiNC-2025-win-desktop.deps.json b/App/HiNC-2025-win-desktop.deps.json index 93fa7ce3..6f526cf8 100644 --- a/App/HiNC-2025-win-desktop.deps.json +++ b/App/HiNC-2025-win-desktop.deps.json @@ -11,9 +11,9 @@ "dependencies": { "AvalonEdit": "6.3.0.90", "FontAwesome.Sharp": "6.3.0", - "Hi.WpfPlus": "3.2.23", - "HiNc": "3.2.24", - "HiNc-Resource": "3.2.21", + "Hi.WpfPlus": "3.2.24", + "HiNc": "3.2.25", + "HiNc-Resource": "3.2.22", "Serilog.Extensions.Hosting": "10.0.0", "Serilog.Sinks.Console": "6.1.1", "Serilog.Sinks.File": "7.0.0", @@ -1598,36 +1598,36 @@ } } }, - "Hi.WpfPlus/3.2.23": { + "Hi.WpfPlus/3.2.24": { "dependencies": { - "HiDisp": "3.2.30" + "HiDisp": "3.2.31" }, "runtime": { "lib/net10.0-windows7.0/Hi.WpfPlus.dll": { - "assemblyVersion": "3.2.23.0", - "fileVersion": "3.2.23.0" + "assemblyVersion": "3.2.24.0", + "fileVersion": "3.2.24.0" } } }, - "HiCbtr/3.2.26": { + "HiCbtr/3.2.27": { "dependencies": { - "HiDisp": "3.2.30" + "HiDisp": "3.2.31" }, "runtime": { "lib/net10.0/HiCbtr.dll": { - "assemblyVersion": "3.2.26.0", - "fileVersion": "3.2.26.0" + "assemblyVersion": "3.2.27.0", + "fileVersion": "3.2.27.0" } } }, - "HiDisp/3.2.30": { + "HiDisp/3.2.31": { "dependencies": { - "HiGeom": "3.2.23" + "HiGeom": "3.2.24" }, "runtime": { "lib/net10.0/HiDisp.dll": { - "assemblyVersion": "3.2.30.0", - "fileVersion": "3.2.30.0" + "assemblyVersion": "3.2.31.0", + "fileVersion": "3.2.31.0" } }, "native": { @@ -1645,15 +1645,15 @@ } } }, - "HiGeom/3.2.23": { + "HiGeom/3.2.24": { "dependencies": { "MathNet.Numerics": "5.0.0", "Microsoft.CodeAnalysis.Scripting.Common": "5.9.0" }, "runtime": { "lib/net10.0/HiGeom.dll": { - "assemblyVersion": "3.2.23.0", - "fileVersion": "3.2.23.0" + "assemblyVersion": "3.2.24.0", + "fileVersion": "3.2.24.0" } }, "resources": { @@ -1665,27 +1665,27 @@ } } }, - "HiLicense/3.2.23": { + "HiLicense/3.2.24": { "dependencies": { - "HiGeom": "3.2.23" + "HiGeom": "3.2.24" }, "runtime": { "lib/net10.0/HiLicense.dll": { - "assemblyVersion": "3.2.23.0", - "fileVersion": "3.2.23.0" + "assemblyVersion": "3.2.24.0", + "fileVersion": "3.2.24.0" } } }, - "HiMech/3.2.27": { + "HiMech/3.2.28": { "dependencies": { "CommandLineParser": "2.9.1", - "HiCbtr": "3.2.26", + "HiCbtr": "3.2.27", "Microsoft.CodeAnalysis.CSharp.Scripting": "5.9.0" }, "runtime": { "lib/net10.0/HiMech.dll": { - "assemblyVersion": "3.2.27.0", - "fileVersion": "3.2.27.0" + "assemblyVersion": "3.2.28.0", + "fileVersion": "3.2.28.0" } }, "resources": { @@ -1694,19 +1694,19 @@ } } }, - "HiNc/3.2.24": { + "HiNc/3.2.25": { "dependencies": { "Dapper": "2.1.79", - "HiLicense": "3.2.23", - "HiMech": "3.2.27", - "HiUniNc": "3.2.25", + "HiLicense": "3.2.24", + "HiMech": "3.2.28", + "HiUniNc": "3.2.26", "Microsoft.Data.Sqlite": "10.0.9", "SQLitePCLRaw.bundle_e_sqlite3": "3.0.3" }, "runtime": { "lib/net10.0/HiNc.dll": { - "assemblyVersion": "3.2.24.0", - "fileVersion": "3.2.24.0" + "assemblyVersion": "3.2.25.0", + "fileVersion": "3.2.25.0" } }, "resources": { @@ -1718,22 +1718,22 @@ } } }, - "HiNc-Resource/3.2.21": { + "HiNc-Resource/3.2.22": { "runtime": { "lib/net10.0/HiNc-Resource.dll": { - "assemblyVersion": "3.2.21.0", - "fileVersion": "3.2.21.0" + "assemblyVersion": "3.2.22.0", + "fileVersion": "3.2.22.0" } } }, - "HiUniNc/3.2.25": { + "HiUniNc/3.2.26": { "dependencies": { - "HiMech": "3.2.27" + "HiMech": "3.2.28" }, "runtime": { "lib/net10.0/HiUniNc.dll": { - "assemblyVersion": "3.2.25.0", - "fileVersion": "3.2.25.0" + "assemblyVersion": "3.2.26.0", + "fileVersion": "3.2.26.0" } } }, @@ -2117,68 +2117,68 @@ "path": "fontawesome.sharp/6.3.0", "hashPath": "fontawesome.sharp.6.3.0.nupkg.sha512" }, - "Hi.WpfPlus/3.2.23": { + "Hi.WpfPlus/3.2.24": { "type": "package", "serviceable": true, - "sha512": "sha512-KfbvR4lk3hML/AqbSefK9r+54WmJJnsvhjr6agmsrJlV5zNVW5UxEMonMD6ndjX4NnKFPtrusdS5yJmRZSa0eQ==", - "path": "hi.wpfplus/3.2.23", - "hashPath": "hi.wpfplus.3.2.23.nupkg.sha512" + "sha512": "sha512-wJGdZWt5bhN4i+1gHxAwijt5ugzZJa1yAiMRpiquS4Y9eaauJPZyTRb9mYFfqH7ketV1z6YI07XiXMKDWFXSxA==", + "path": "hi.wpfplus/3.2.24", + "hashPath": "hi.wpfplus.3.2.24.nupkg.sha512" }, - "HiCbtr/3.2.26": { + "HiCbtr/3.2.27": { "type": "package", "serviceable": true, - "sha512": "sha512-9dLKdrw91K620JeyhKmnsOWiWdPm5WAMuLZu3ezf5JDyEaUUh2sH0eiHu7ia2O856Uo5N/+4gOE+1M4wnFGP/A==", - "path": "hicbtr/3.2.26", - "hashPath": "hicbtr.3.2.26.nupkg.sha512" + "sha512": "sha512-R670R7hWJvDYWcHVfTb77cN+rrNI/aPcFeNf/I9RI5bn6vw5IBXYaPcHYEVFGIGI8Cc1cO72Asx8vLQZNix6yQ==", + "path": "hicbtr/3.2.27", + "hashPath": "hicbtr.3.2.27.nupkg.sha512" }, - "HiDisp/3.2.30": { + "HiDisp/3.2.31": { "type": "package", "serviceable": true, - "sha512": "sha512-4lgDHCrYRpmDg64ltfk7wOfGkYGTkoq0/UHXinZyEwqVGkUBSnUs9LMh0qnQMzv4qZpEoYYrPQrBgasiqSiPSg==", - "path": "hidisp/3.2.30", - "hashPath": "hidisp.3.2.30.nupkg.sha512" + "sha512": "sha512-0MDxstmt9aatV8psR5t2dKmOjNsfgp5k1hnC/2i/f/U/nVfCYB3XawOSrF7p7PkUTUg5s6g4LD4RQLqNa6JglA==", + "path": "hidisp/3.2.31", + "hashPath": "hidisp.3.2.31.nupkg.sha512" }, - "HiGeom/3.2.23": { + "HiGeom/3.2.24": { "type": "package", "serviceable": true, - "sha512": "sha512-8NbqCnYokemejxzu+/meFJ1y0J7lOloshIzX0lDvHeHhmG1p3CxnXFEMf960+zSB3HVit7KG/X/MnCJ1br0K9A==", - "path": "higeom/3.2.23", - "hashPath": "higeom.3.2.23.nupkg.sha512" + "sha512": "sha512-XgK3iHUfYJlqeGrc2ZYhAOXcFP5Izuhwm34J3cCID/iN6gYUsHR075TM4yyaoABvde+wkiRGp1/vb5FUavZ4MQ==", + "path": "higeom/3.2.24", + "hashPath": "higeom.3.2.24.nupkg.sha512" }, - "HiLicense/3.2.23": { + "HiLicense/3.2.24": { "type": "package", "serviceable": true, - "sha512": "sha512-uRXpo0b1vLnbGLPRJ/XSOoI7JXljfVAZmrqAvGOvhg4QsZxqj80lbwWhScnbLY9fhjF+LMRXBokUaThyKs+1zA==", - "path": "hilicense/3.2.23", - "hashPath": "hilicense.3.2.23.nupkg.sha512" + "sha512": "sha512-eYWwIRdk3Nz+tjbdgi5EgoWe1+g57A8RcMktZXQjuxFN8ja5flz6jmy0v4PiK/8oKbKA7HdloU0eCK3vB2FlPA==", + "path": "hilicense/3.2.24", + "hashPath": "hilicense.3.2.24.nupkg.sha512" }, - "HiMech/3.2.27": { + "HiMech/3.2.28": { "type": "package", "serviceable": true, - "sha512": "sha512-t/Uzmb4uNrnXw2SYi66Op7uTzqoKUjPWMSwOl2xotE7PcKHV4dWJI7vTEasSyhQszC867wOmawdYKCy3bdLP1g==", - "path": "himech/3.2.27", - "hashPath": "himech.3.2.27.nupkg.sha512" + "sha512": "sha512-SxUofgDRrDdf44g3pKnWSs6LAQZJK7lDfFu9zKPBsnSx9LNwCzh9xN0d3nTCCj9SI0qVCKd1jcuugKlS7ERaRg==", + "path": "himech/3.2.28", + "hashPath": "himech.3.2.28.nupkg.sha512" }, - "HiNc/3.2.24": { + "HiNc/3.2.25": { "type": "package", "serviceable": true, - "sha512": "sha512-jviTXkgP61dfAN3jGJMb20RpkKdurz0xRjRJnXYElc+tQBwKnKtxIIRueHxkdnJeAXya4SG27UEyGPwd/s25IQ==", - "path": "hinc/3.2.24", - "hashPath": "hinc.3.2.24.nupkg.sha512" + "sha512": "sha512-TNDUQ35MFEjIP+SkbkR6WyCsOU4EjoyWFJBmBMAAvjCmOuk2zqAkWF/Z77pcfnRXnfAnfKnbgjkEV0K0l4BW1Q==", + "path": "hinc/3.2.25", + "hashPath": "hinc.3.2.25.nupkg.sha512" }, - "HiNc-Resource/3.2.21": { + "HiNc-Resource/3.2.22": { "type": "package", "serviceable": true, - "sha512": "sha512-LSF8i+B6vYvUlNk+Tfk/s9UAKjPM5n/f9NYtE1GpsjoTzl+bDF0ugclG0jBBhyOvtse45U8YaFZQwQAgUmHzWA==", - "path": "hinc-resource/3.2.21", - "hashPath": "hinc-resource.3.2.21.nupkg.sha512" + "sha512": "sha512-HEWpSyOgRmmT1iXvv3Pzg8uMFoaYW0jmfQjqNrubEUigPJ8FwbAg6Yz1XaN7J5U59EP+jOWt65IN4SaXSNqGJA==", + "path": "hinc-resource/3.2.22", + "hashPath": "hinc-resource.3.2.22.nupkg.sha512" }, - "HiUniNc/3.2.25": { + "HiUniNc/3.2.26": { "type": "package", "serviceable": true, - "sha512": "sha512-L+rvtClSGfDlAGcHAOurrxtIki/YHvRHHz2ZEU3AipcWxqmVg8np0LiP44C7Kq79hDkQ3Cwt0KB0dQ2eSelHBA==", - "path": "hiuninc/3.2.25", - "hashPath": "hiuninc.3.2.25.nupkg.sha512" + "sha512": "sha512-dm4RYwFHbAZhkpAxNUNrrraq6gNndM6PWiBO0MBGnUi3nRWeL2GOFiV6k3LAWAIrVY6Ud6dQWwiWMl+q0X/4kw==", + "path": "hiuninc/3.2.26", + "hashPath": "hiuninc.3.2.26.nupkg.sha512" }, "MathNet.Numerics/5.0.0": { "type": "package", diff --git a/App/HiNC-2025-win-desktop.dll b/App/HiNC-2025-win-desktop.dll index 4557016d..86236842 100644 Binary files a/App/HiNC-2025-win-desktop.dll and b/App/HiNC-2025-win-desktop.dll differ diff --git a/App/HiNC-2025-win-desktop.pdb b/App/HiNC-2025-win-desktop.pdb index 8eebf277..7805867e 100644 Binary files a/App/HiNC-2025-win-desktop.pdb and b/App/HiNC-2025-win-desktop.pdb differ diff --git a/App/HiNc-Resource.dll b/App/HiNc-Resource.dll index 24441a7c..8a46fc87 100644 Binary files a/App/HiNc-Resource.dll and b/App/HiNc-Resource.dll differ diff --git a/App/HiNc.dll b/App/HiNc.dll index d5b08659..a693e465 100644 Binary files a/App/HiNc.dll and b/App/HiNc.dll differ diff --git a/App/HiUniNc.dll b/App/HiUniNc.dll index 393657b0..59ffb141 100644 Binary files a/App/HiUniNc.dll and b/App/HiUniNc.dll differ diff --git a/App/StepPresentCatalog/catalog.en.json b/App/StepPresentCatalog/catalog.en.json index a2467dc6..fd3f1d05 100644 --- a/App/StepPresentCatalog/catalog.en.json +++ b/App/StepPresentCatalog/catalog.en.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "engineVersion": "3.2.27.0", + "engineVersion": "3.2.28.0", "recordCount": 98, "records": [ { diff --git a/App/core.dll b/App/core.dll index 20cf8dbe..465816dc 100644 Binary files a/App/core.dll and b/App/core.dll differ diff --git a/App/en/HiGeom.resources.dll b/App/en/HiGeom.resources.dll index c35c74ff..88573f3a 100644 Binary files a/App/en/HiGeom.resources.dll and b/App/en/HiGeom.resources.dll differ diff --git a/App/en/HiMech.resources.dll b/App/en/HiMech.resources.dll index bd8330ed..68d58aec 100644 Binary files a/App/en/HiMech.resources.dll and b/App/en/HiMech.resources.dll differ diff --git a/App/hi-key.dll b/App/hi-key.dll index 253248b5..c04a946f 100644 Binary files a/App/hi-key.dll and b/App/hi-key.dll differ diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.ImageRequestedDelegate.html b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.FrameReadyDelegate.html similarity index 86% rename from App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.ImageRequestedDelegate.html rename to App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.FrameReadyDelegate.html index 5220c9fd..b7f166f9 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.ImageRequestedDelegate.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.FrameReadyDelegate.html @@ -2,9 +2,9 @@ - Delegate DispEngine.ImageRequestedDelegate | HiAPI-C# 2025 + Delegate DispEngine.FrameReadyDelegate | HiAPI-C# 2025 - + @@ -84,12 +84,12 @@ -
+
-

-Delegate DispEngine.ImageRequestedDelegate +

+Delegate DispEngine.FrameReadyDelegate

@@ -97,25 +97,29 @@ Delegate DispEngine.ImageRequestedDelegate
Assembly
HiDisp.dll
-

For ImageRequestAfterBufferSwapped.

+
-
public delegate void DispEngine.ImageRequestedDelegate(byte* bgra_unsignedbyte_pixels, int w, int h)
+
public delegate void DispEngine.FrameReadyDelegate(byte* bgra_unsignedbyte_pixels, int w, int h, FramePins pins)

Parameters

bgra_unsignedbyte_pixels byte*
-

BGRA convention pixels in unsigned bytes. -The size is wh4.

+

BGRA convention pixels in unsigned bytes, top row first. +The size is wh4. Valid only during the callback.

w int

width

h int

height

+
+
pins FramePins
+

The pin table of the same frame (see PinDrawing); never null. +PixelsChanged tells whether the pixels differ from the previous frame.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.html b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.html index a4f6d6f7..4006d08b 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.DispEngine.html @@ -1808,6 +1808,35 @@ which mouse buttons perform which transformations:

+ + +

+ MouseLeave() + +

+ +

The cursor left the canvas, e.g. onto an element laid over it. The next pick pass sends +Hi.Disp.PickEvent Mouse_Exited to the hovered pickable, if any; the cursor position and +the drag state are untouched, so a drag that returns to the canvas continues normally.

+
+
+ +
+
public void MouseLeave()
+
+ + + + + + + + + + + + +

@@ -2623,17 +2652,18 @@ The function unlock the opengl context for - ImageRequestAfterBufferSwapped +

+ FrameReady

-

-
DispEngine.ImageRequestedDelegate
+
DispEngine.FrameReadyDelegate
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.FramePins.html b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.FramePins.html new file mode 100644 index 00000000..27e51ae4 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.FramePins.html @@ -0,0 +1,523 @@ + + + + + Class FramePins | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class FramePins +

+ +
+
Namespace
Hi.Disp
+
Assembly
HiDisp.dll
+
+ +

The pin table of one rendered frame, handed to FrameReady together with the pixels. +Records are sorted by name and every displayed pin is listed, visible or not; filter with Visible.

+
+
+ +
+
public sealed class FramePins
+
+ + + + +
+
Inheritance
+
+ +
FramePins
+
+
+ + + +
+
Inherited Members
+
+ + + + + + +
+ +
+
Extension Methods
+
+ + + + + + + +
+ + + + + +

Properties +

+ + + + +

+ ByName + +

+ +

Records keyed by name (names are unique within a frame).

+
+
+ +
+
public IReadOnlyDictionary<string, PinRecord> ByName { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyDictionary<string, PinRecord>
+
+
+ + + + + + + + + + +

+ Empty + +

+ +

The table of a frame that carried no pins. PixelsChanged is true.

+
+
+ +
+
public static FramePins Empty { get; }
+
+ + + + + +

Property Value

+
+
FramePins
+
+
+ + + + + + + + + + +

+ FrameSerial + +

+ +

Increments once per transported frame of the engine.

+
+
+ +
+
public long FrameSerial { get; }
+
+ + + + + +

Property Value

+
+
long
+
+
+ + + + + + + + + + +

+ Height + +

+ +

Frame height in pixels.

+
+
+ +
+
public int Height { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ Pins + +

+ +

All records of the frame, sorted by name.

+
+
+ +
+
public IReadOnlyList<PinRecord> Pins { get; }
+
+ + + + + +

Property Value

+
+
IReadOnlyList<PinRecord>
+
+
+ + + + + + + + + + +

+ PinsChanged + +

+ +

The pin table differs from the previously transported frame.

+
+
+ +
+
public bool PinsChanged { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ PixelsChanged + +

+ +

The pixels differ from the previously transported frame.

+
+
+ +
+
public bool PixelsChanged { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ ProjDepth + +

+ +

Projection depth D of the engine: one pixel unit of z is 1/D of window depth.

+
+
+ +
+
public double ProjDepth { get; }
+
+ + + + + +

Property Value

+
+
double
+
+
+ + + + + + + + + + +

+ Visible + +

+ +

The records whose anchor is on the canvas and not occluded.

+
+
+ +
+
public IEnumerable<PinRecord> Visible { get; }
+
+ + + + + +

Property Value

+
+
IEnumerable<PinRecord>
+
+
+ + + + + + + + + + +

+ Width + +

+ +

Frame width in pixels.

+
+
+ +
+
public int Width { get; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.PinDrawing.html b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.PinDrawing.html new file mode 100644 index 00000000..7724d607 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.PinDrawing.html @@ -0,0 +1,519 @@ + + + + + Class PinDrawing | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class PinDrawing +

+ +
+
Namespace
Hi.Disp
+
Assembly
HiDisp.dll
+
+ +

A named, scale-less anchor. Displaying it draws nothing; the engine reports where the anchor +landed in each frame, its depth and whether scene geometry hides it, through +FrameReady as a PinRecord of the same name. +Use it to place external UI (an HTML element, say) over a 3D point of the canvas.

+
+
+ +
+
public sealed class PinDrawing : IDisplayee, IExpandToBox3d, IDisposable
+
+ + + + +
+
Inheritance
+
+ +
PinDrawing
+
+
+ +
+
Implements
+
+ + + +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ +
+
Extension Methods
+
+ + + + + + + + +
+ + + +

Remarks

+

The wrapper owns no GL object and has no thread affinity: it may be created, displayed and +disposed from any thread. Names must be unique within a frame (prefix them by owner); +they are UTF-8 and truncated to 63 bytes. Pins displayed while a picking id is set on the +Bind carry that id in their record.

+
+ + +

Constructors +

+ + + + +

+ PinDrawing(string) + +

+ +

Constructor.

+
+
+ +
+
public PinDrawing(string name)
+
+ +

Parameters

+
+
name string
+

pin name; unique within a frame

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ IsAlwaysOnTop + +

+ +

Display the anchor as never occluded by geometry: the record is on-canvas or not, no depth probe. +Set it for a pin paired with an always-on-top StringDrawing at the same point, +otherwise the label's own rectangle hides the pin.

+
+
+ +
+
public bool IsAlwaysOnTop { get; set; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The pin name as given to the constructor (the record carries at most 63 UTF-8 bytes of it).

+
+
+ +
+
public string Name { get; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ ProbeBiasPx + +

+ +

Occlusion bias in pixel units of depth: geometry closer to the viewer than the anchor by +less than this does not count as hiding it, so an anchor placed on a surface stays visible. +The engine also applies a floor of a few depth-buffer LSB.

+
+
+ +
+
public double ProbeBiasPx { get; set; }
+
+ + + + + +

Property Value

+
+
double
+
+
+ + + + + + + + +

Methods +

+ + + + +

+ Display(Bind) + +

+ +

Display function called in DispEngine rendering loop.

+
+
+ +
+
public void Display(Bind bind)
+
+ +

Parameters

+
+
bind Bind
+

Bind with DispEngine. See Bind.

+
+
+ + + + + + + + + + + + + + +

+ Display(Bind, Vec3d) + +

+ +

Display the anchor at p under the current model matrix.

+
+
+ +
+
public void Display(Bind bind, Vec3d p)
+
+ +

Parameters

+
+
bind Bind
+

bind

+
+
p Vec3d
+

anchor position

+
+
+ + + + + + + + + + + + + + +

+ Dispose() + +

+ +

Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.

+
+
+ +
+
public void Dispose()
+
+ + + + + + + + + + + + + + + +

+ ExpandToBox3d(Box3d) + +

+ +

Expands the destination box. +This function is usually used to compute the bounding box of elements.

+
+
+ +
+
public void ExpandToBox3d(Box3d dst)
+
+ +

Parameters

+
+
dst Box3d
+

Destination box

+
+
+ + + + + + + + + + + + + + +

+ ~PinDrawing() + +

+ +
+
+ +
+
protected ~PinDrawing()
+
+ + + + + + + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.PinFlags.html b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.PinFlags.html new file mode 100644 index 00000000..38e04e49 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.PinFlags.html @@ -0,0 +1,200 @@ + + + + + Enum PinFlags | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + + +

+Enum PinFlags +

+ +
+
Namespace
Hi.Disp
+
Assembly
HiDisp.dll
+
+ +

Flag bits of a PinRecord.

+
+
+ +
+
[Flags]
+public enum PinFlags
+
+ + + + + + + + +
+
Extension Methods
+
+ + + + + + + + +
+ +

Fields +

+
+
AlwaysOnTop = 1
+ +

The pin was displayed always-on-top: never occluded by geometry, so no depth probe.

+
+
DuplicateNameDropped = 16
+ +

Another pin of the same name was dropped this frame; this one survived.

+
+
None = 0
+ +

No flag.

+
+
Occluded = 4
+ +

Scene geometry is nearer than the anchor at its pixel (beyond the probe bias).

+
+
OcclusionTested = 8
+ +

The depth probe ran for this pin.

+
+
OnCanvas = 2
+ +

The anchor lies inside the canvas and inside the depth range.

+
+
+ + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.PinRecord.html b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.PinRecord.html new file mode 100644 index 00000000..d1361a46 --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.PinRecord.html @@ -0,0 +1,578 @@ + + + + + Struct PinRecord | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Struct PinRecord +

+ +
+
Namespace
Hi.Disp
+
Assembly
HiDisp.dll
+
+ +

One named anchor of a rendered frame: where it landed on the canvas, how deep, and whether it is visible. +Positions are canvas pixels with a top-left origin, y down; they may lie outside the canvas.

+
+
+ +
+
public readonly record struct PinRecord : IEquatable<PinRecord>
+
+ + + + + +
+
Implements
+
+ +
+
+ + +
+
Inherited Members
+
+ + + + + + +
+ +
+
Extension Methods
+
+ + + + + + + + +
+ + + + + +

Constructors +

+ + + + +

+ PinRecord(string, double, double, double, int, PinFlags) + +

+ +

One named anchor of a rendered frame: where it landed on the canvas, how deep, and whether it is visible. +Positions are canvas pixels with a top-left origin, y down; they may lie outside the canvas.

+
+
+ +
+
public PinRecord(string Name, double X, double Y, double Depth, int PickID, PinFlags Flags)
+
+ +

Parameters

+
+
Name string
+

The pin name given to PinDrawing.

+
+
X double
+

Anchor x in canvas pixels.

+
+
Y double
+

Anchor y in canvas pixels, y down.

+
+
Depth double
+

GL window depth clamped to [0, 1]; 0 is nearest. Comparable within one engine only.

+
+
PickID int
+

The picking id current when the pin was displayed.

+
+
Flags PinFlags
+

Flag bits.

+
+
+ + + + + + + + + + + + +

Properties +

+ + + + +

+ AlwaysOnTop + +

+ +

The pin was displayed always-on-top.

+
+
+ +
+
public bool AlwaysOnTop { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Depth + +

+ +

GL window depth clamped to [0, 1]; 0 is nearest. Comparable within one engine only.

+
+
+ +
+
public double Depth { get; init; }
+
+ + + + + +

Property Value

+
+
double
+
+
+ + + + + + + + + + +

+ Flags + +

+ +

Flag bits.

+
+
+ +
+
public PinFlags Flags { get; init; }
+
+ + + + + +

Property Value

+
+
PinFlags
+
+
+ + + + + + + + + + +

+ IsVisible + +

+ +

On the canvas and not occluded.

+
+
+ +
+
public bool IsVisible { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ Name + +

+ +

The pin name given to PinDrawing.

+
+
+ +
+
public string Name { get; init; }
+
+ + + + + +

Property Value

+
+
string
+
+
+ + + + + + + + + + +

+ Occluded + +

+ +

Scene geometry hides the anchor.

+
+
+ +
+
public bool Occluded { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ OnCanvas + +

+ +

The anchor lies inside the canvas.

+
+
+ +
+
public bool OnCanvas { get; }
+
+ + + + + +

Property Value

+
+
bool
+
+
+ + + + + + + + + + +

+ PickID + +

+ +

The picking id current when the pin was displayed.

+
+
+ +
+
public int PickID { get; init; }
+
+ + + + + +

Property Value

+
+
int
+
+
+ + + + + + + + + + +

+ X + +

+ +

Anchor x in canvas pixels.

+
+
+ +
+
public double X { get; init; }
+
+ + + + + +

Property Value

+
+
double
+
+
+ + + + + + + + + + +

+ Y + +

+ +

Anchor y in canvas pixels, y down.

+
+
+ +
+
public double Y { get; init; }
+
+ + + + + +

Property Value

+
+
double
+
+
+ + + + + + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.html b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.html index d3af8f33..a312954f 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.Disp.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.Disp.html @@ -140,6 +140,12 @@ A bind_t object is generated by rendering in the every beginning of each renderi
Drawing

The most efficient elemental 3D rendering unit.

+
+
+
+
FramePins
+

The pin table of one rendered frame, handed to FrameReady together with the pixels. +Records are sorted by name and every displayed pin is listed, visible or not; filter with Visible.

@@ -166,6 +172,14 @@ A bind_t object is generated by rendering in the every beginning of each renderi
Pickable

Picking event handler for rendering. Note that it has to be disposed manually or the object occurs memory leak.

+
+
+
+
PinDrawing
+

A named, scale-less anchor. Displaying it draws nothing; the engine reports where the anchor +landed in each frame, its depth and whether scene geometry hides it, through +FrameReady as a PinRecord of the same name. +Use it to place external UI (an HTML element, say) over a 3D point of the canvas.

@@ -213,6 +227,15 @@ Multi-line text is supported: ‘\n’ starts a new line.

WrappedDisplayee

A wrapper class for IDisplayee that allows customizing display and bounding box behavior.

+
+
+

+Structs +

+
+
PinRecord
+

One named anchor of a rendered frame: where it landed on the canvas, how deep, and whether it is visible. +Positions are canvas pixels with a top-left origin, y down; they may lie outside the canvas.

@@ -244,6 +267,11 @@ Enums
MvpBoxRelation

Relation between mvpBox and an AABB

+
+
+
+
PinFlags
+

Flag bits of a PinRecord.

@@ -260,8 +288,8 @@ Delegates
-
DispEngine.ImageRequestedDelegate
-

For ImageRequestAfterBufferSwapped.

+
DispEngine.FrameReadyDelegate
+

For FrameReady.

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ICompoundMotionDef.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ICompoundMotionDef.html index 18ab464a..a3c1aee1 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ICompoundMotionDef.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.ICompoundMotionDef.html @@ -6,7 +6,7 @@ - + @@ -103,7 +103,11 @@ Contains a Hi.NcParsers.Semantics.CompoundMotionSemanticUtil.

Item types (discriminated by key presence):

diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html index d6570474..032e5a61 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html @@ -6,7 +6,7 @@ - + @@ -117,7 +117,9 @@ as NaN sentinels.

After the PostLogic carry the section is a MODAL record: key presence means "state known", never "this block commanded the axis". Consumers -needing "commanded" must read the block's Parsing words or compare +needing "commanded" must read the block's Parsing words, the one-shot +RotaryWords record (the rotary words this block itself +spoke, written by McAbcSyntax), or compare values against the previous block (see LinearMotionUtil.HasRotaryMotion). The only presence-as-commanded carve-out is CompoundMotion.Items[*] item-level sections, which diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.RotaryWords.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.RotaryWords.html new file mode 100644 index 00000000..92af9ecc --- /dev/null +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.RotaryWords.html @@ -0,0 +1,205 @@ + + + + + Class RotaryWords | HiAPI-C# 2025 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+ +
+ +
+
+
+
+
Table of Contents
+ +
+
+ +
+
+
+ +
+
+ + + +
+ +
+ + + +

+Class RotaryWords +

+ +
+
Namespace
Hi.NcParsers.Keywords
+
Assembly
HiMech.dll
+
+ +

One-shot block-root record of the rotary axis words the block itself +commanded — keyed by axis name (A/B/C), valued +with the word as programmed: degrees for a plain word, the signed +delta for a per-word incremental word (Siemens IC(), klartext +IC+), the indexing position number for a coded-position word +(CAC()/CIC()/…). The resolved absolute angle lives in +MachineCoordinateState; this +section only says which rotary axes this block spoke.

+

+Written by McAbcSyntax when it consumes +A/B/C from Parsing into MachineCoordinateState — and +only for axes the IMachineAxisConfig declares +rotary. After the PostLogic carry MachineCoordinateState is a +modal record (key presence never means "commanded"), so consumers that +must know whether this block carried a rotary word read this +section instead: +CannedCycleResolveSyntax (a rotary-only +block under an active canned cycle is a modal repeat — Fanuc's +any-axis-word rule, HardNc parity: the table indexes, then the cycle +drills again) and +WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) +(the cycle's pre-positioning item carries the block's MC A/B/C so the +physical rotary state matches the root record instead of lagging one +block behind). Not listed in any +ModalCarrySyntax key set — it never +carries to later blocks. +

+
+
+ +
+
public static class RotaryWords
+
+ + + + +
+
Inheritance
+
+ +
RotaryWords
+
+
+ + + +
+
Inherited Members
+
+ + + + + + + +
+ + + +

Examples

+
"RotaryWords": { "C": 40 }
+ + + + + +
+ +
+
+ + +
+ +
+ +
+
+ +
+ + + + diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html index 6e09846c..cf97c1e0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Keywords.html @@ -518,6 +518,37 @@ never carries to later blocks.
RadiusCompensation

Section key holder + concrete implementation for IRadiusCompensationDef.

+
+
+
+
RotaryWords
+

One-shot block-root record of the rotary axis words the block itself +commanded — keyed by axis name (A/B/C), valued +with the word as programmed: degrees for a plain word, the signed +delta for a per-word incremental word (Siemens IC(), klartext +IC+), the indexing position number for a coded-position word +(CAC()/CIC()/…). The resolved absolute angle lives in +MachineCoordinateState; this +section only says which rotary axes this block spoke.

+

+Written by McAbcSyntax when it consumes +A/B/C from Parsing into MachineCoordinateState — and +only for axes the IMachineAxisConfig declares +rotary. After the PostLogic carry MachineCoordinateState is a +modal record (key presence never means "commanded"), so consumers that +must know whether this block carried a rotary word read this +section instead: +CannedCycleResolveSyntax (a rotary-only +block under an active canned cycle is a modal repeat — Fanuc's +any-axis-word rule, HardNc parity: the table indexes, then the cycle +drills again) and +WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) +(the cycle's pre-positioning item carries the block's MC A/B/C so the +physical rotary state matches the root record instead of lagging one +block behind). Not listed in any +ModalCarrySyntax key set — it never +carries to later blocks. +

@@ -650,7 +681,11 @@ Contains a Hi.NcParsers.Semantics.CompoundMotionSemanticUtil.

Item types (discriminated by key presence):

@@ -763,7 +798,9 @@ as NaN sentinels.

After the PostLogic carry the section is a MODAL record: key presence means "state known", never "this block commanded the axis". Consumers -needing "commanded" must read the block's Parsing words or compare +needing "commanded" must read the block's Parsing words, the one-shot +RotaryWords record (the rotary words this block itself +spoke, written by McAbcSyntax), or compare values against the previous block (see LinearMotionUtil.HasRotaryMotion). The only presence-as-commanded carve-out is CompoundMotion.Items[*] item-level sections, which diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html index b2e4179a..a61986b6 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html @@ -6,7 +6,7 @@ - + @@ -111,6 +111,16 @@ consumes the G80 flag and writes CannedCycle = { Term: "G80" }, acting as a hard sentinel for Hi.NcParsers.LogicSyntaxs.CannedCycleSyntaxUtil modal lookback.

  • No Group-09 activity: leaves the block untouched.
  • +A rotary-only block (C40.) reaches this syntax without a +Parsing node — McAbcSyntax consumed the word into +MachineCoordinateState and dropped the emptied node — but its +one-shot RotaryWords record marks it as a block that +spoke an axis word, so under an active cycle it is a modal repeat like +any X/Y block (Fanuc's any-axis-word rule; HardNc indexes the table and +drills again). The cycle's pre-positioning item then carries the +block's ABC (WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d)). +

    +

    Must be placed after PositioningSyntax and before the individual cycle syntaxes in the chain.

    @@ -218,7 +228,7 @@ neither the current block nor a previous block declares G98/G99: }

    Modal repeat: the current block carries only an X override and no cycle code, but #Previous: has an active G81 with stored -params. MergeModalCycleSection(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress) +params. MergeModalCycleSection(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress, out HashSet<string>) merges X=60 (override) with Y/Z/R from stored params, removes the consumed X from Parsing root, and writes the merged section back to Parsing.G81. ReturnMode inherits “G98” from @@ -278,6 +288,100 @@ default applies after reset: "Parsing": { "X": 60 }, "CannedCycle": { "Term": "G80" } } +

    Rotary-only modal repeat: the block carries no Parsing at all +(McAbcSyntax consumed C40. into +MachineCoordinateState and dropped the emptied node) but its +one-shot RotaryWords record says it spoke an axis word, +so the active G81 from #Previous: repeats with every stored +parameter (no override to merge). The Parsing node is +re-created to host the resolved cycle sub-section for the downstream +cycle syntax: +#Previous:

    +
    {
    +  "CannedCycle": {
    +    "Term": "G81",
    +    "ReturnMode": "G98",
    +    "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
    +  },
    +  "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
    +}
    +

    #BeforeBuild:

    +
    {
    +  "MachineCoordinateState": { "C": 40 },
    +  "RotaryWords": { "C": 40 }
    +}
    +

    #AfterBuild:

    +
    {
    +  "MachineCoordinateState": { "C": 40 },
    +  "RotaryWords": { "C": 40 },
    +  "Parsing": { "G81": { "X": 50, "Y": 30, "Z": -10, "R": 2 } },
    +  "CannedCycle": {
    +    "Term": "G81",
    +    "ReturnMode": "G98",
    +    "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
    +  }
    +}
    +

    Modal repeat under G91 (X10. pitch): only the block's own X +word is an increment (50 + 10 = 60, from the previous block's +machine position read back through this block's identity chain); +the stored Y / Z / R are the previous cycle's absolute +results and are reused verbatim instead of being added onto the +anchors again (which would have moved Y to 60 and lifted Z to +R + Z): +#Previous:

    +
    {
    +  "CannedCycle": {
    +    "Term": "G81",
    +    "ReturnMode": "G98",
    +    "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
    +  },
    +  "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 },
    +  "MachineCoordinateState": { "X": 50, "Y": 30, "Z": 0 }
    +}
    +

    #BeforeBuild:

    +
    {
    +  "Positioning": { "Term": "G91", "Mode": "Incremental" },
    +  "Parsing": { "X": 10 }
    +}
    +

    #AfterBuild:

    +
    {
    +  "Positioning": { "Term": "G91", "Mode": "Incremental" },
    +  "Parsing": { "G81": { "X": 60, "Y": 30, "Z": -10, "R": 2 } },
    +  "CannedCycle": {
    +    "Term": "G81",
    +    "ReturnMode": "G98",
    +    "Params": { "X": 60, "Y": 30, "Z": -10, "R": 2 }
    +  }
    +}
    +

    A block whose Group-09 state a brand syntax already authored (the +shape SiemensModalCycleSyntax writes for a bare MCALL +cancel or an MCALL CYCLE8x(…) arm) is left alone even though +#Previous: still carries an active G81 and the block spoke a +rotary word: the authoring syntax owns the block, nothing repeats, +and the sentinel survives for the blocks after it. (The Siemens +parser only accepts MCALL alone on its block, so today this is +the contract's guard rather than a reachable program line.) +#Previous:

    +
    {
    +  "CannedCycle": {
    +    "Term": "G81",
    +    "ReturnMode": "G98",
    +    "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
    +  },
    +  "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 }
    +}
    +

    #BeforeBuild:

    +
    {
    +  "MachineCoordinateState": { "C": 40 },
    +  "RotaryWords": { "C": 40 },
    +  "CannedCycle": { "Term": "G80" }
    +}
    +

    #AfterBuild:

    +
    {
    +  "MachineCoordinateState": { "C": 40 },
    +  "RotaryWords": { "C": 40 },
    +  "CannedCycle": { "Term": "G80" }
    +}
    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html index 0c7203d4..c9cde436 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html @@ -264,6 +264,44 @@ to G81. Five items total: }, "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 } } +G81 on a block that spoke a rotary word — the one-shot +RotaryWords record from McAbcSyntax, whose +root MachineCoordinateState already holds the resolved C and +the lookback-filled A. WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) +copies both onto the first (pre-positioning) item so the rapid to the +initial level indexes the table at the same time; the remaining items +stay XYZ-only exactly as in the first case. Root MC and the record +are left untouched: +#BeforeBuild: +
    {
    +  "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 }
    +  },
    +  "MachineCoordinateState": { "A": 0, "C": 40 },
    +  "RotaryWords": { "C": 40 }
    +}
    +#AfterBuild: +
    {
    +  "CannedCycle": {
    +    "Term": "G81", "ReturnMode": "G98",
    +    "Params": { "X": 50, "Y": 30, "Z": -10, "R": 2 }
    +  },
    +  "MachineCoordinateState": { "A": 0, "C": 40 },
    +  "RotaryWords": { "C": 40 },
    +  "Feedrate": { "FeedrateValue": 600, "Term": "G94", "Unit": "mm/min" },
    +  "CompoundMotion": {
    +    "Term": "G81",
    +    "Items": [
    +      { "ProgramXyz": { "X": 50, "Y": 30, "Z": 0 },   "MotionEvent": { "Form": "McLinear", "IsRapid": true }, "MachineCoordinateState": { "A": 0, "C": 40 } },
    +      { "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 }
    +}

    Remarks

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html index 8001e9c9..0df31034 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html @@ -149,7 +149,7 @@ Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by -ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) +ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double, HashSet<string>) inside each cycle syntax class, which runs before this syntax.

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html index 2c868581..93a0d661 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html @@ -6,7 +6,7 @@ - + @@ -129,10 +129,17 @@ deg→rad→deg drift. CompoundMotion items (G28/G74/G75 expansions capture -their words in sub-objects the stamping syntax never sees, so an -override can only ever describe a root word). Directional/shortest +previous fallback) and applies to the root MC stage, not to +CompoundMotion items in general (G28/G74/G75 expansions +capture their words in sub-objects the stamping syntax never sees, so +an override can only ever describe a root word) — with one exception: +an item whose value for an axis equals the root's pre-pass value +verbatim carries that same root word (the canned-cycle +pre-positioning item that +WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) stamps +from the root MC) and inherits the root's directive for that axis, so +the default window cannot fold the forced swing the root resolved +into the short way. Directional/shortest entries keyed by an axis outside the modular set are reported as Coord-McAbc--003 — the promise cannot be honored there and silence would mis-read the program's intent; an entry with no anchor @@ -362,6 +369,39 @@ rewrote to -90° stays +270°: "MachineCoordinateState": { "B": 270 }, "PositioningOverride": { "B": "Incremental" } } +A CompoundMotion item carrying the root word verbatim — the +canned-cycle pre-positioning item that +WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) stamps from +the root MC of a B=ACP(270) block — inherits the root's +PositiveOnly directive: both stay +270 instead of the item +folding to -90 as the plain items-walk case above would (same +numbers, opposite outcome). The second item is not a copy (170 ≠ 270) +and resolves under the default window against the chained anchor +270°, where 170 is already the short way: +#Previous: +

    { "MachineCoordinateState": { "B": 0 } }
    +#BeforeBuild: +
    {
    +  "MachineCoordinateState": { "B": 270 },
    +  "PositioningOverride": { "B": "PositiveOnly" },
    +  "CompoundMotion": {
    +    "Items": [
    +      { "MachineCoordinateState": { "B": 270 } },
    +      { "MachineCoordinateState": { "B": 170 } }
    +    ]
    +  }
    +}
    +#AfterBuild: +
    {
    +  "MachineCoordinateState": { "B": 270 },
    +  "PositioningOverride": { "B": "PositiveOnly" },
    +  "CompoundMotion": {
    +    "Items": [
    +      { "MachineCoordinateState": { "B": 270 } },
    +      { "MachineCoordinateState": { "B": 170 } }
    +    ]
    +  }
    +}
    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html index 0c9e84f0..94458a14 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html @@ -6,7 +6,7 @@ - + @@ -168,6 +168,18 @@ resolve (invalid number, missing table) reports an error and holds the axis at its previous value.

    +Every rotary word the block actually carried is also recorded, as +programmed, in the one-shot block-root RotaryWords +section ({ "C": 40 }) — the resolved angle goes into +MachineCoordinateState, which after the modal carry can no +longer tell "commanded" from "carried". Downstream consumers that need +that distinction (CannedCycleResolveSyntax repeating an +active canned cycle on a rotary-only block, +WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) riding the +block's ABC on the cycle's pre-positioning item) read the record; the +section is never modal-carried. +

    +

    Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before @@ -270,24 +282,34 @@ no-op (the syntax only fires when rotary axes are declared): AxisConfig declares B+C rotary; Parsing.B/C are consumed into a freshly created MachineCoordinateState section (X/Y/Z are deliberately left out so McXyzSyntax can -still derive XYZ later — see class summary): +still derive XYZ later — see class summary). The words the block +spoke are recorded as programmed in the one-shot +RotaryWords section: #BeforeBuild:

    { "Parsing": { "B": 45, "C": 90 } }
    #AfterBuild: -
    { "MachineCoordinateState": { "B": 45, "C": 90 } }
    +
    {
    +  "MachineCoordinateState": { "B": 45, "C": 90 },
    +  "RotaryWords": { "B": 45, "C": 90 }
    +}
    Only Parsing.B on the current block; #Previous: carries a full MC including C=0. The missing C is filled from the -per-axis backward lookback (FindPreviousMcAxis(LazyLinkedListNode<SyntaxPiece>, string)): +per-axis backward lookback (FindPreviousMcAxis(LazyLinkedListNode<SyntaxPiece>, string)) — and +stays out of RotaryWords, which lists commanded words only: #Previous:
    { "MachineCoordinateState": { "B": 0, "C": 0 } }
    #BeforeBuild:
    { "Parsing": { "B": 30 } }
    #AfterBuild: -
    { "MachineCoordinateState": { "B": 30, "C": 0 } }
    +
    {
    +  "MachineCoordinateState": { "B": 30, "C": 0 },
    +  "RotaryWords": { "B": 30 }
    +}
    Per-word incremental override (the Siemens C=IC(...) shape after the unwrap + evaluation stages) — the parsed 21.5 is added onto the previous modal C instead of overwriting it; B has no override -entry and fills from lookback as usual: +entry and fills from lookback as usual. RotaryWords keeps the +programmed delta, not the accumulated angle: #Previous:
    { "MachineCoordinateState": { "B": 10, "C": 40 } }
    #BeforeBuild: @@ -298,14 +320,16 @@ entry and fills from lookback as usual: #AfterBuild:
    {
       "PositioningOverride": { "C": "Incremental" },
    -  "MachineCoordinateState": { "B": 10, "C": 61.5 }
    +  "MachineCoordinateState": { "B": 10, "C": 61.5 },
    +  "RotaryWords": { "C": 21.5 }
     }
    Coded-position absolute (the Siemens C=CAC(3) shape after the unwrap + evaluation stages). The case injects a SiemensMachineDataTable declaring C rotary and assigned to indexing table 1 = [0, 90, 180, 270]: position number 3 resolves to 180° and the override entry is rewritten to -Absolute for the tail-pass: +Absolute for the tail-pass (RotaryWords keeps the +position number the program spoke): #BeforeBuild:
    {
       "PositioningOverride": { "C": "CodedAbsolute" },
    @@ -314,7 +338,8 @@ resolves to 180° and the override entry is rewritten to
     #AfterBuild:
     
    {
       "PositioningOverride": { "C": "Absolute" },
    -  "MachineCoordinateState": { "C": 180 }
    +  "MachineCoordinateState": { "C": 180 },
    +  "RotaryWords": { "C": 3 }
     }
    Coded-position incremental with the same table — from 270° (position 4), advancing 2 positions wraps the 4-position cycle to position 2 @@ -330,7 +355,8 @@ so the swing keeps the programmed direction: #AfterBuild:
    {
       "PositioningOverride": { "C": "PositiveOnly" },
    -  "MachineCoordinateState": { "C": 90 }
    +  "MachineCoordinateState": { "C": 90 },
    +  "RotaryWords": { "C": 2 }
     }
    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html index b4e9f970..2bbb49d0 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html @@ -204,6 +204,69 @@ stays Static.

    + + +

    + PinTiltInMachineSpaceAcrossRotaryWords(LazyLinkedListNode<SyntaxPiece>, JsonObject, List<INcDependency>) + +

    + +

    Pins the tilted-plane feature frame in machine space across a +rotary word: on a block that spoke A/B/C (one-shot +RotaryWords record) under an active tilt, rewrites the +block's TransformSource entry so that +Tilt(cur)·Pivot(cur) == Tilt(prev)·Pivot(prev) — the feature +point the program addresses stays where it was in machine space and +the table turns underneath it. This is the Fanuc TWP behaviour HardNc +reproduces through NcArgG68p2.PostMcAbc_rad (the delta between +the line's rotary word and the IJK solution re-anchors the feature +frame; the comment there cites CHEM20180926 N10, whose +G81 … C20./C40./… drill a bolt circle on the periphery +while the tip never leaves its machine position). Without it the +carried tilt stays attached to the table and every C-indexed hole +lands on the same spot of the part.

    +

    +Silently no-ops when the block spoke no rotary word, when +IMachineKinematics is absent, or when the previous +block carries no PivotTransformSource +entry (the tilt was not yet active there — nothing to pin). Must run +before ComposePivotEntry(LazyLinkedListNode<SyntaxPiece>, JsonObject, List<INcDependency>) on the same block so the +pivot it composes is the one the rewritten tilt was solved against. +Brand gates decide whether their tilt vocabulary wants this +(PivotTransformationSyntax applies it to G68.2 without +RTCP: under G43.4 the tool centre point is tracked in the +workpiece-fixed feature frame while the rotaries move — the tilted +CL→NC writeback replays on that contract — so a rotary word there is +contouring, not indexing, and the carried tilt stays on the table). +

    +
    +
    + +
    +
    public static void PinTiltInMachineSpaceAcrossRotaryWords(LazyLinkedListNode<SyntaxPiece> syntaxPieceNode, JsonObject json, List<INcDependency> ncDependencyList)
    +
    + +

    Parameters

    +
    +
    syntaxPieceNode LazyLinkedListNode<SyntaxPiece>
    +
    +
    json JsonObject
    +
    +
    ncDependencyList List<INcDependency>
    +
    +
    + + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html index 91e5e202..5c6e55aa 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html @@ -358,6 +358,87 @@ the chain so the new entry stays Static: ], "MachineCoordinateState": { "A": 45 } }

    +

    +Active G68.2 across a rotary word — the feature frame stays pinned +in machine space (PinTiltInMachineSpaceAcrossRotaryWords(LazyLinkedListNode<SyntaxPiece>, JsonObject, List<INcDependency>)). +#Previous: had the tilt Rx(30°) composed with the pivot at +table-A = 0 (identity on this chain); the current block spoke +A45. (one-shot RotaryWords, root MC A = 45) and +arrived with the carried Rx(30°) tilt. The tilt entry is rewritten to +Tilt·Pivot(prev)·Pivot(cur)⁻¹ = Rx(30°)·Rx(45°) = Rx(75°) — +so that composed with the new pivot Rx(−45°) the chain still maps the +feature frame exactly where the previous block had it — and the +pivot entry is written for A = 45 as in the case above. No tool +height entry is present, so nothing else is re-aimed: +

    +#Previous: +
    {
    +  "TiltTransform": { "Term": "G68.2" },
    +  "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
    +      ]
    +    },
    +    {
    +      "Source": "PivotTransform",
    +      "Kind": "Static",
    +      "Mat4d": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1]
    +    }
    +  ],
    +  "MachineCoordinateState": { "X": 0, "Y": 0, "Z": 0, "A": 0, "B": 0 }
    +}
    +#BeforeBuild: +
    {
    +  "TiltTransform": { "Term": "G68.2" },
    +  "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
    +      ]
    +    }
    +  ],
    +  "MachineCoordinateState": { "A": 45, "B": 0 },
    +  "RotaryWords": { "A": 45 }
    +}
    +#AfterBuild: +
    {
    +  "TiltTransform": { "Term": "G68.2" },
    +  "ProgramToMcTransform": [
    +    {
    +      "Source": "TiltTransform",
    +      "Kind": "Static",
    +      "Mat4d": [
    +        1, 0, 0, 0,
    +        0, 0.25881904510252085, 0.9659258262890683, 0,
    +        0, -0.9659258262890683, 0.25881904510252085, 0,
    +        0, 0, 0, 1
    +      ]
    +    },
    +    {
    +      "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
    +      ]
    +    }
    +  ],
    +  "MachineCoordinateState": { "A": 45, "B": 0 },
    +  "RotaryWords": { "A": 45 }
    +}
    diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html index 182c509f..fe8c0a58 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html @@ -151,6 +151,16 @@ consumes the G80 flag and writes CannedCycle = { Term: "G80" }, acting as a hard sentinel for Hi.NcParsers.LogicSyntaxs.CannedCycleSyntaxUtil modal lookback.
  • No Group-09 activity: leaves the block untouched.
  • +A rotary-only block (C40.) reaches this syntax without a +Parsing node — McAbcSyntax consumed the word into +MachineCoordinateState and dropped the emptied node — but its +one-shot RotaryWords record marks it as a block that +spoke an axis word, so under an active cycle it is a modal repeat like +any X/Y block (Fanuc's any-axis-word rule; HardNc indexes the table and +drills again). The cycle's pre-positioning item then carries the +block's ABC (WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d)). +

    +

    Must be placed after PositioningSyntax and before the individual cycle syntaxes in the chain.

    @@ -486,7 +496,7 @@ Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by -ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) +ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double, HashSet<string>) inside each cycle syntax class, which runs before this syntax.

    @@ -714,10 +724,17 @@ deg→rad→deg drift. CompoundMotion items (G28/G74/G75 expansions capture -their words in sub-objects the stamping syntax never sees, so an -override can only ever describe a root word). Directional/shortest +previous fallback) and applies to the root MC stage, not to +CompoundMotion items in general (G28/G74/G75 expansions +capture their words in sub-objects the stamping syntax never sees, so +an override can only ever describe a root word) — with one exception: +an item whose value for an axis equals the root's pre-pass value +verbatim carries that same root word (the canned-cycle +pre-positioning item that +WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) stamps +from the root MC) and inherits the root's directive for that axis, so +the default window cannot fold the forced swing the root resolved +into the short way. Directional/shortest entries keyed by an axis outside the modular set are reported as Coord-McAbc--003 — the promise cannot be honored there and silence would mis-read the program's intent; an entry with no anchor @@ -810,6 +827,18 @@ resolve (invalid number, missing table) reports an error and holds the axis at its previous value.

    +Every rotary word the block actually carried is also recorded, as +programmed, in the one-shot block-root RotaryWords +section ({ "C": 40 }) — the resolved angle goes into +MachineCoordinateState, which after the modal carry can no +longer tell "commanded" from "carried". Downstream consumers that need +that distinction (CannedCycleResolveSyntax repeating an +active canned cycle on a rotary-only block, +WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) riding the +block's ABC on the cycle's pre-positioning item) read the record; the +section is never modal-carried. +

    +

    Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.TransformationUtil.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.TransformationUtil.html index 3de7659c..84c78759 100644 --- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.TransformationUtil.html +++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Syntaxs.TransformationUtil.html @@ -650,6 +650,47 @@ sibling section. Throws if any entry lacks + +

    + HasTransformEntry(JsonObject, string) + +

    + +

    True when the chain carries an entry with the given source name +(GetTransformBySource(JsonObject, string) cannot tell “absent” from +“identity”).

    +
    +
    + +
    +
    public static bool HasTransformEntry(JsonObject json, string source)
    +
    + +

    Parameters

    +
    +
    json JsonObject
    +
    +
    source string
    +
    +
    + +

    Returns

    +
    +
    bool
    +
    +
    + + + + + + + + + + +

    diff --git a/App/wwwroot/HiAPI-docsite/api/toc.html b/App/wwwroot/HiAPI-docsite/api/toc.html index 1574ff99..3f245f32 100644 --- a/App/wwwroot/HiAPI-docsite/api/toc.html +++ b/App/wwwroot/HiAPI-docsite/api/toc.html @@ -786,7 +786,7 @@ DispEngine
  • - DispEngine.ImageRequestedDelegate + DispEngine.FrameReadyDelegate
  • DispEngineConfig @@ -803,6 +803,9 @@
  • Drawing
  • +
  • + FramePins +
  • FuncDisplayee
  • @@ -833,6 +836,15 @@
  • Pickable
  • +
  • + PinDrawing +
  • +
  • + PinFlags +
  • +
  • + PinRecord +
  • PopModelMat
  • @@ -3172,6 +3184,9 @@
  • RadiusCompensation
  • +
  • + RotaryWords +
  • SpindleControl
  • diff --git a/App/wwwroot/HiAPI-docsite/api/toc.json b/App/wwwroot/HiAPI-docsite/api/toc.json index 12ec9e88..6e7f5b10 100644 --- a/App/wwwroot/HiAPI-docsite/api/toc.json +++ b/App/wwwroot/HiAPI-docsite/api/toc.json @@ -1,2 +1,2 @@ -{"items":[{"name":"Hi.Cbtr","href":"Hi.Cbtr.html","topicHref":"Hi.Cbtr.html","topicUid":"Hi.Cbtr","type":"Namespace","items":[{"name":"CachedTris","href":"Hi.Cbtr.CachedTris.html","topicHref":"Hi.Cbtr.CachedTris.html","topicUid":"Hi.Cbtr.CachedTris","type":"Class"},{"name":"CachedTris.SweepingMode","href":"Hi.Cbtr.CachedTris.SweepingMode.html","topicHref":"Hi.Cbtr.CachedTris.SweepingMode.html","topicUid":"Hi.Cbtr.CachedTris.SweepingMode","type":"Enum"},{"name":"CbtrPickable","href":"Hi.Cbtr.CbtrPickable.html","topicHref":"Hi.Cbtr.CbtrPickable.html","topicUid":"Hi.Cbtr.CbtrPickable","type":"Class"},{"name":"ConstructionDefectDisplayee","href":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicHref":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicUid":"Hi.Cbtr.ConstructionDefectDisplayee","type":"Class"},{"name":"CubeTree","href":"Hi.Cbtr.CubeTree.html","topicHref":"Hi.Cbtr.CubeTree.html","topicUid":"Hi.Cbtr.CubeTree","type":"Class"},{"name":"CubeTree.DefectNodeInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo","type":"Class"},{"name":"CubeTree.DefectNodeInfo.TriWireInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo","type":"Class"},{"name":"CubeTree.DefectTriWireInfoInterop","href":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicHref":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicUid":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop","type":"Struct"},{"name":"CubeTree.InfNodeInfo","href":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.InfNodeInfo","type":"Class"},{"name":"CubeTree.TriWireRelationInterop","href":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicHref":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicUid":"Hi.Cbtr.CubeTree.TriWireRelationInterop","type":"Struct"},{"name":"CubeTree.diff_response_func_t","href":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicHref":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicUid":"Hi.Cbtr.CubeTree.diff_response_func_t","type":"Delegate"},{"name":"CubeTreeExportExtensions","href":"Hi.Cbtr.CubeTreeExportExtensions.html","topicHref":"Hi.Cbtr.CubeTreeExportExtensions.html","topicUid":"Hi.Cbtr.CubeTreeExportExtensions","type":"Class"},{"name":"CubeTreeFile","href":"Hi.Cbtr.CubeTreeFile.html","topicHref":"Hi.Cbtr.CubeTreeFile.html","topicUid":"Hi.Cbtr.CubeTreeFile","type":"Class"},{"name":"DiffAttachment","href":"Hi.Cbtr.DiffAttachment.html","topicHref":"Hi.Cbtr.DiffAttachment.html","topicUid":"Hi.Cbtr.DiffAttachment","type":"Class"},{"name":"GeomBoolCache","href":"Hi.Cbtr.GeomBoolCache.html","topicHref":"Hi.Cbtr.GeomBoolCache.html","topicUid":"Hi.Cbtr.GeomBoolCache","type":"Class"},{"name":"GeomBoolCacheEnum","href":"Hi.Cbtr.GeomBoolCacheEnum.html","topicHref":"Hi.Cbtr.GeomBoolCacheEnum.html","topicUid":"Hi.Cbtr.GeomBoolCacheEnum","type":"Enum"},{"name":"IGetInitStickConvex","href":"Hi.Cbtr.IGetInitStickConvex.html","topicHref":"Hi.Cbtr.IGetInitStickConvex.html","topicUid":"Hi.Cbtr.IGetInitStickConvex","type":"Interface"},{"name":"InfDefectDisplayee","href":"Hi.Cbtr.InfDefectDisplayee.html","topicHref":"Hi.Cbtr.InfDefectDisplayee.html","topicUid":"Hi.Cbtr.InfDefectDisplayee","type":"Class"},{"name":"InitStickConvex","href":"Hi.Cbtr.InitStickConvex.html","topicHref":"Hi.Cbtr.InitStickConvex.html","topicUid":"Hi.Cbtr.InitStickConvex","type":"Class"},{"name":"Substraction","href":"Hi.Cbtr.Substraction.html","topicHref":"Hi.Cbtr.Substraction.html","topicUid":"Hi.Cbtr.Substraction","type":"Class"},{"name":"UnhighlightablePickable","href":"Hi.Cbtr.UnhighlightablePickable.html","topicHref":"Hi.Cbtr.UnhighlightablePickable.html","topicUid":"Hi.Cbtr.UnhighlightablePickable","type":"Class"},{"name":"UnmanagedAddition","href":"Hi.Cbtr.UnmanagedAddition.html","topicHref":"Hi.Cbtr.UnmanagedAddition.html","topicUid":"Hi.Cbtr.UnmanagedAddition","type":"Class"},{"name":"UnmanagedSubstraction","href":"Hi.Cbtr.UnmanagedSubstraction.html","topicHref":"Hi.Cbtr.UnmanagedSubstraction.html","topicUid":"Hi.Cbtr.UnmanagedSubstraction","type":"Class"},{"name":"WireCube","href":"Hi.Cbtr.WireCube.html","topicHref":"Hi.Cbtr.WireCube.html","topicUid":"Hi.Cbtr.WireCube","type":"Class"},{"name":"node_diff_t","href":"Hi.Cbtr.node_diff_t.html","topicHref":"Hi.Cbtr.node_diff_t.html","topicUid":"Hi.Cbtr.node_diff_t","type":"Struct"}]},{"name":"Hi.Collision","href":"Hi.Collision.html","topicHref":"Hi.Collision.html","topicUid":"Hi.Collision","type":"Namespace","items":[{"name":"AnchoredCollidableLeaf","href":"Hi.Collision.AnchoredCollidableLeaf.html","topicHref":"Hi.Collision.AnchoredCollidableLeaf.html","topicUid":"Hi.Collision.AnchoredCollidableLeaf","type":"Class"},{"name":"AnchoredCollidablePair","href":"Hi.Collision.AnchoredCollidablePair.html","topicHref":"Hi.Collision.AnchoredCollidablePair.html","topicUid":"Hi.Collision.AnchoredCollidablePair","type":"Class"},{"name":"CollidableStl","href":"Hi.Collision.CollidableStl.html","topicHref":"Hi.Collision.CollidableStl.html","topicUid":"Hi.Collision.CollidableStl","type":"Class"},{"name":"CollisionFlag","href":"Hi.Collision.CollisionFlag.html","topicHref":"Hi.Collision.CollisionFlag.html","topicUid":"Hi.Collision.CollisionFlag","type":"Enum"},{"name":"CollisionIndexPair","href":"Hi.Collision.CollisionIndexPair.html","topicHref":"Hi.Collision.CollisionIndexPair.html","topicUid":"Hi.Collision.CollisionIndexPair","type":"Class"},{"name":"CollisionUtil","href":"Hi.Collision.CollisionUtil.html","topicHref":"Hi.Collision.CollisionUtil.html","topicUid":"Hi.Collision.CollisionUtil","type":"Class"},{"name":"FuncAnchoredCollidable","href":"Hi.Collision.FuncAnchoredCollidable.html","topicHref":"Hi.Collision.FuncAnchoredCollidable.html","topicUid":"Hi.Collision.FuncAnchoredCollidable","type":"Class"},{"name":"IAnchoredCollidableBased","href":"Hi.Collision.IAnchoredCollidableBased.html","topicHref":"Hi.Collision.IAnchoredCollidableBased.html","topicUid":"Hi.Collision.IAnchoredCollidableBased","type":"Interface"},{"name":"IAnchoredCollidableLeaf","href":"Hi.Collision.IAnchoredCollidableLeaf.html","topicHref":"Hi.Collision.IAnchoredCollidableLeaf.html","topicUid":"Hi.Collision.IAnchoredCollidableLeaf","type":"Interface"},{"name":"IAnchoredCollidableNode","href":"Hi.Collision.IAnchoredCollidableNode.html","topicHref":"Hi.Collision.IAnchoredCollidableNode.html","topicUid":"Hi.Collision.IAnchoredCollidableNode","type":"Interface"},{"name":"IAnchoredCollidableStem","href":"Hi.Collision.IAnchoredCollidableStem.html","topicHref":"Hi.Collision.IAnchoredCollidableStem.html","topicUid":"Hi.Collision.IAnchoredCollidableStem","type":"Interface"},{"name":"ICollidable","href":"Hi.Collision.ICollidable.html","topicHref":"Hi.Collision.ICollidable.html","topicUid":"Hi.Collision.ICollidable","type":"Interface"},{"name":"ICollidee","href":"Hi.Collision.ICollidee.html","topicHref":"Hi.Collision.ICollidee.html","topicUid":"Hi.Collision.ICollidee","type":"Interface"},{"name":"ICollisionArena","href":"Hi.Collision.ICollisionArena.html","topicHref":"Hi.Collision.ICollisionArena.html","topicUid":"Hi.Collision.ICollisionArena","type":"Interface"},{"name":"ICollisionIndex","href":"Hi.Collision.ICollisionIndex.html","topicHref":"Hi.Collision.ICollisionIndex.html","topicUid":"Hi.Collision.ICollisionIndex","type":"Interface"},{"name":"IGetAnchoredCollidablePairs","href":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicHref":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicUid":"Hi.Collision.IGetAnchoredCollidablePairs","type":"Interface"},{"name":"IGetCollidable","href":"Hi.Collision.IGetCollidable.html","topicHref":"Hi.Collision.IGetCollidable.html","topicUid":"Hi.Collision.IGetCollidable","type":"Interface"},{"name":"IGetCollisionIndexPairs","href":"Hi.Collision.IGetCollisionIndexPairs.html","topicHref":"Hi.Collision.IGetCollisionIndexPairs.html","topicUid":"Hi.Collision.IGetCollisionIndexPairs","type":"Interface"},{"name":"IGetDefaultCollidablePairs","href":"Hi.Collision.IGetDefaultCollidablePairs.html","topicHref":"Hi.Collision.IGetDefaultCollidablePairs.html","topicUid":"Hi.Collision.IGetDefaultCollidablePairs","type":"Interface"},{"name":"IGetTriTree","href":"Hi.Collision.IGetTriTree.html","topicHref":"Hi.Collision.IGetTriTree.html","topicUid":"Hi.Collision.IGetTriTree","type":"Interface"},{"name":"MechCollisionResult","href":"Hi.Collision.MechCollisionResult.html","topicHref":"Hi.Collision.MechCollisionResult.html","topicUid":"Hi.Collision.MechCollisionResult","type":"Class"},{"name":"MechCollisionUtil","href":"Hi.Collision.MechCollisionUtil.html","topicHref":"Hi.Collision.MechCollisionUtil.html","topicUid":"Hi.Collision.MechCollisionUtil","type":"Class"},{"name":"TriTree","href":"Hi.Collision.TriTree.html","topicHref":"Hi.Collision.TriTree.html","topicUid":"Hi.Collision.TriTree","type":"Class"}]},{"name":"Hi.Collisions","href":"Hi.Collisions.html","topicHref":"Hi.Collisions.html","topicUid":"Hi.Collisions","type":"Namespace","items":[{"name":"AnchoredCollidabled","href":"Hi.Collisions.AnchoredCollidabled.html","topicHref":"Hi.Collisions.AnchoredCollidabled.html","topicUid":"Hi.Collisions.AnchoredCollidabled","type":"Class"},{"name":"IAnchoredCollidabled","href":"Hi.Collisions.IAnchoredCollidabled.html","topicHref":"Hi.Collisions.IAnchoredCollidabled.html","topicUid":"Hi.Collisions.IAnchoredCollidabled","type":"Interface"}]},{"name":"Hi.Coloring","href":"Hi.Coloring.html","topicHref":"Hi.Coloring.html","topicUid":"Hi.Coloring","type":"Namespace","items":[{"name":"ColorUtil","href":"Hi.Coloring.ColorUtil.html","topicHref":"Hi.Coloring.ColorUtil.html","topicUid":"Hi.Coloring.ColorUtil","type":"Class"},{"name":"DictionaryColorGuide","href":"Hi.Coloring.DictionaryColorGuide.html","topicHref":"Hi.Coloring.DictionaryColorGuide.html","topicUid":"Hi.Coloring.DictionaryColorGuide","type":"Class"},{"name":"DiscreteQuantityColorGuide","href":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicHref":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicUid":"Hi.Coloring.DiscreteQuantityColorGuide","type":"Class"},{"name":"FilteredColorGuide","href":"Hi.Coloring.FilteredColorGuide.html","topicHref":"Hi.Coloring.FilteredColorGuide.html","topicUid":"Hi.Coloring.FilteredColorGuide","type":"Class"},{"name":"FuncRangeColorGuide","href":"Hi.Coloring.FuncRangeColorGuide.html","topicHref":"Hi.Coloring.FuncRangeColorGuide.html","topicUid":"Hi.Coloring.FuncRangeColorGuide","type":"Class"},{"name":"IColorGuide","href":"Hi.Coloring.IColorGuide.html","topicHref":"Hi.Coloring.IColorGuide.html","topicUid":"Hi.Coloring.IColorGuide","type":"Interface"},{"name":"IColorGuideProperty","href":"Hi.Coloring.IColorGuideProperty.html","topicHref":"Hi.Coloring.IColorGuideProperty.html","topicUid":"Hi.Coloring.IColorGuideProperty","type":"Interface"},{"name":"IGetColorGuide","href":"Hi.Coloring.IGetColorGuide.html","topicHref":"Hi.Coloring.IGetColorGuide.html","topicUid":"Hi.Coloring.IGetColorGuide","type":"Interface"},{"name":"IGetRangeColorRule","href":"Hi.Coloring.IGetRangeColorRule.html","topicHref":"Hi.Coloring.IGetRangeColorRule.html","topicUid":"Hi.Coloring.IGetRangeColorRule","type":"Interface"},{"name":"IGetRgb","href":"Hi.Coloring.IGetRgb.html","topicHref":"Hi.Coloring.IGetRgb.html","topicUid":"Hi.Coloring.IGetRgb","type":"Interface"},{"name":"IGetRgbWithPriority","href":"Hi.Coloring.IGetRgbWithPriority.html","topicHref":"Hi.Coloring.IGetRgbWithPriority.html","topicUid":"Hi.Coloring.IGetRgbWithPriority","type":"Interface"},{"name":"PlainColorGuide","href":"Hi.Coloring.PlainColorGuide.html","topicHref":"Hi.Coloring.PlainColorGuide.html","topicUid":"Hi.Coloring.PlainColorGuide","type":"Class"},{"name":"QuantityColorGuide","href":"Hi.Coloring.QuantityColorGuide.html","topicHref":"Hi.Coloring.QuantityColorGuide.html","topicUid":"Hi.Coloring.QuantityColorGuide","type":"Class"},{"name":"RangeColorRule","href":"Hi.Coloring.RangeColorRule.html","topicHref":"Hi.Coloring.RangeColorRule.html","topicUid":"Hi.Coloring.RangeColorRule","type":"Class"},{"name":"RatioRgbFuncEnum","href":"Hi.Coloring.RatioRgbFuncEnum.html","topicHref":"Hi.Coloring.RatioRgbFuncEnum.html","topicUid":"Hi.Coloring.RatioRgbFuncEnum","type":"Enum"},{"name":"RgbSeed","href":"Hi.Coloring.RgbSeed.html","topicHref":"Hi.Coloring.RgbSeed.html","topicUid":"Hi.Coloring.RgbSeed","type":"Class"}]},{"name":"Hi.Common","href":"Hi.Common.html","topicHref":"Hi.Common.html","topicUid":"Hi.Common","type":"Namespace","items":[{"name":"BinIoUtil","href":"Hi.Common.BinIoUtil.html","topicHref":"Hi.Common.BinIoUtil.html","topicUid":"Hi.Common.BinIoUtil","type":"Class"},{"name":"BitUtil","href":"Hi.Common.BitUtil.html","topicHref":"Hi.Common.BitUtil.html","topicUid":"Hi.Common.BitUtil","type":"Class"},{"name":"BlockingTimer","href":"Hi.Common.BlockingTimer.html","topicHref":"Hi.Common.BlockingTimer.html","topicUid":"Hi.Common.BlockingTimer","type":"Class"},{"name":"BytesUtil","href":"Hi.Common.BytesUtil.html","topicHref":"Hi.Common.BytesUtil.html","topicUid":"Hi.Common.BytesUtil","type":"Class"},{"name":"ConcurrentTimeCounter","href":"Hi.Common.ConcurrentTimeCounter.html","topicHref":"Hi.Common.ConcurrentTimeCounter.html","topicUid":"Hi.Common.ConcurrentTimeCounter","type":"Class"},{"name":"ConsoleUtil","href":"Hi.Common.ConsoleUtil.html","topicHref":"Hi.Common.ConsoleUtil.html","topicUid":"Hi.Common.ConsoleUtil","type":"Class"},{"name":"CppLogUtil","href":"Hi.Common.CppLogUtil.html","topicHref":"Hi.Common.CppLogUtil.html","topicUid":"Hi.Common.CppLogUtil","type":"Class"},{"name":"CppLogUtil.LogDelegate","href":"Hi.Common.CppLogUtil.LogDelegate.html","topicHref":"Hi.Common.CppLogUtil.LogDelegate.html","topicUid":"Hi.Common.CppLogUtil.LogDelegate","type":"Delegate"},{"name":"CultureTextAttribute","href":"Hi.Common.CultureTextAttribute.html","topicHref":"Hi.Common.CultureTextAttribute.html","topicUid":"Hi.Common.CultureTextAttribute","type":"Class"},{"name":"CultureUtil","href":"Hi.Common.CultureUtil.html","topicHref":"Hi.Common.CultureUtil.html","topicUid":"Hi.Common.CultureUtil","type":"Class"},{"name":"DuplicateUtil","href":"Hi.Common.DuplicateUtil.html","topicHref":"Hi.Common.DuplicateUtil.html","topicUid":"Hi.Common.DuplicateUtil","type":"Class"},{"name":"EnumUtil","href":"Hi.Common.EnumUtil.html","topicHref":"Hi.Common.EnumUtil.html","topicUid":"Hi.Common.EnumUtil","type":"Class"},{"name":"EnumerablePlayer","href":"Hi.Common.EnumerablePlayer.html","topicHref":"Hi.Common.EnumerablePlayer.html","topicUid":"Hi.Common.EnumerablePlayer","type":"Class"},{"name":"IAbstractNote","href":"Hi.Common.IAbstractNote.html","topicHref":"Hi.Common.IAbstractNote.html","topicUid":"Hi.Common.IAbstractNote","type":"Interface"},{"name":"IBinaryIo","href":"Hi.Common.IBinaryIo.html","topicHref":"Hi.Common.IBinaryIo.html","topicUid":"Hi.Common.IBinaryIo","type":"Interface"},{"name":"IClearCache","href":"Hi.Common.IClearCache.html","topicHref":"Hi.Common.IClearCache.html","topicUid":"Hi.Common.IClearCache","type":"Interface"},{"name":"ICommandTextSource","href":"Hi.Common.ICommandTextSource.html","topicHref":"Hi.Common.ICommandTextSource.html","topicUid":"Hi.Common.ICommandTextSource","type":"Interface"},{"name":"IDuplicate","href":"Hi.Common.IDuplicate.html","topicHref":"Hi.Common.IDuplicate.html","topicUid":"Hi.Common.IDuplicate","type":"Interface"},{"name":"IGetQuantityByKey","href":"Hi.Common.IGetQuantityByKey.html","topicHref":"Hi.Common.IGetQuantityByKey.html","topicUid":"Hi.Common.IGetQuantityByKey","type":"Interface"},{"name":"IGetSelectionName","href":"Hi.Common.IGetSelectionName.html","topicHref":"Hi.Common.IGetSelectionName.html","topicUid":"Hi.Common.IGetSelectionName","type":"Interface"},{"name":"INameNote","href":"Hi.Common.INameNote.html","topicHref":"Hi.Common.INameNote.html","topicUid":"Hi.Common.INameNote","type":"Interface"},{"name":"IPreferredFileName","href":"Hi.Common.IPreferredFileName.html","topicHref":"Hi.Common.IPreferredFileName.html","topicUid":"Hi.Common.IPreferredFileName","type":"Interface"},{"name":"IProgressFraction","href":"Hi.Common.IProgressFraction.html","topicHref":"Hi.Common.IProgressFraction.html","topicUid":"Hi.Common.IProgressFraction","type":"Interface"},{"name":"ISourceFile","href":"Hi.Common.ISourceFile.html","topicHref":"Hi.Common.ISourceFile.html","topicUid":"Hi.Common.ISourceFile","type":"Interface"},{"name":"IToPresentDto","href":"Hi.Common.IToPresentDto.html","topicHref":"Hi.Common.IToPresentDto.html","topicUid":"Hi.Common.IToPresentDto","type":"Interface"},{"name":"IUpdateByContent","href":"Hi.Common.IUpdateByContent.html","topicHref":"Hi.Common.IUpdateByContent.html","topicUid":"Hi.Common.IUpdateByContent","type":"Interface"},{"name":"IUriGetter","href":"Hi.Common.IUriGetter.html","topicHref":"Hi.Common.IUriGetter.html","topicUid":"Hi.Common.IUriGetter","type":"Interface"},{"name":"IWriteBin","href":"Hi.Common.IWriteBin.html","topicHref":"Hi.Common.IWriteBin.html","topicUid":"Hi.Common.IWriteBin","type":"Interface"},{"name":"IndexSegment","href":"Hi.Common.IndexSegment.html","topicHref":"Hi.Common.IndexSegment.html","topicUid":"Hi.Common.IndexSegment","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter`1","type":"Class"},{"name":"InternalException","href":"Hi.Common.InternalException.html","topicHref":"Hi.Common.InternalException.html","topicUid":"Hi.Common.InternalException","type":"Class"},{"name":"InvokeUtil","href":"Hi.Common.InvokeUtil.html","topicHref":"Hi.Common.InvokeUtil.html","topicUid":"Hi.Common.InvokeUtil","type":"Class"},{"name":"JsonUtil","href":"Hi.Common.JsonUtil.html","topicHref":"Hi.Common.JsonUtil.html","topicUid":"Hi.Common.JsonUtil","type":"Class"},{"name":"LooseRunner","href":"Hi.Common.LooseRunner.html","topicHref":"Hi.Common.LooseRunner.html","topicUid":"Hi.Common.LooseRunner","type":"Class"},{"name":"LooseRunner.MergedCancellationTokenRun","href":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicHref":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicUid":"Hi.Common.LooseRunner.MergedCancellationTokenRun","type":"Delegate"},{"name":"ManualUtil","href":"Hi.Common.ManualUtil.html","topicHref":"Hi.Common.ManualUtil.html","topicUid":"Hi.Common.ManualUtil","type":"Class"},{"name":"MaskUtil","href":"Hi.Common.MaskUtil.html","topicHref":"Hi.Common.MaskUtil.html","topicUid":"Hi.Common.MaskUtil","type":"Class"},{"name":"NameUtil","href":"Hi.Common.NameUtil.html","topicHref":"Hi.Common.NameUtil.html","topicUid":"Hi.Common.NameUtil","type":"Class"},{"name":"PacePlayee","href":"Hi.Common.PacePlayee.html","topicHref":"Hi.Common.PacePlayee.html","topicUid":"Hi.Common.PacePlayee","type":"Class"},{"name":"PacePlayer","href":"Hi.Common.PacePlayer.html","topicHref":"Hi.Common.PacePlayer.html","topicUid":"Hi.Common.PacePlayer","type":"Class"},{"name":"Pair","href":"Hi.Common.Pair-2.html","topicHref":"Hi.Common.Pair-2.html","topicUid":"Hi.Common.Pair`2","type":"Class"},{"name":"ProgressFraction","href":"Hi.Common.ProgressFraction.html","topicHref":"Hi.Common.ProgressFraction.html","topicUid":"Hi.Common.ProgressFraction","type":"Class"},{"name":"Range","href":"Hi.Common.Range-1.html","topicHref":"Hi.Common.Range-1.html","topicUid":"Hi.Common.Range`1","type":"Class"},{"name":"ResourceDefaultMarker","href":"Hi.Common.ResourceDefaultMarker.html","topicHref":"Hi.Common.ResourceDefaultMarker.html","topicUid":"Hi.Common.ResourceDefaultMarker","type":"Class"},{"name":"ResourceLayout","href":"Hi.Common.ResourceLayout.html","topicHref":"Hi.Common.ResourceLayout.html","topicUid":"Hi.Common.ResourceLayout","type":"Class"},{"name":"ResourceUtil","href":"Hi.Common.ResourceUtil.html","topicHref":"Hi.Common.ResourceUtil.html","topicUid":"Hi.Common.ResourceUtil","type":"Class"},{"name":"RoutineBlocker","href":"Hi.Common.RoutineBlocker.html","topicHref":"Hi.Common.RoutineBlocker.html","topicUid":"Hi.Common.RoutineBlocker","type":"Class"},{"name":"SearchResult","href":"Hi.Common.SearchResult.html","topicHref":"Hi.Common.SearchResult.html","topicUid":"Hi.Common.SearchResult","type":"Enum"},{"name":"SeqPairUtil","href":"Hi.Common.SeqPairUtil.html","topicHref":"Hi.Common.SeqPairUtil.html","topicUid":"Hi.Common.SeqPairUtil","type":"Class"},{"name":"SeqPair","href":"Hi.Common.SeqPair-1.html","topicHref":"Hi.Common.SeqPair-1.html","topicUid":"Hi.Common.SeqPair`1","type":"Class"},{"name":"ServerFileExplorerConfig","href":"Hi.Common.ServerFileExplorerConfig.html","topicHref":"Hi.Common.ServerFileExplorerConfig.html","topicUid":"Hi.Common.ServerFileExplorerConfig","type":"Class"},{"name":"StringLocalizer","href":"Hi.Common.StringLocalizer.html","topicHref":"Hi.Common.StringLocalizer.html","topicUid":"Hi.Common.StringLocalizer","type":"Class"},{"name":"StringUtil","href":"Hi.Common.StringUtil.html","topicHref":"Hi.Common.StringUtil.html","topicUid":"Hi.Common.StringUtil","type":"Class"},{"name":"TaskUtil","href":"Hi.Common.TaskUtil.html","topicHref":"Hi.Common.TaskUtil.html","topicUid":"Hi.Common.TaskUtil","type":"Class"},{"name":"TimeCounter","href":"Hi.Common.TimeCounter.html","topicHref":"Hi.Common.TimeCounter.html","topicUid":"Hi.Common.TimeCounter","type":"Class"}]},{"name":"Hi.Common.Collections","href":"Hi.Common.Collections.html","topicHref":"Hi.Common.Collections.html","topicUid":"Hi.Common.Collections","type":"Namespace","items":[{"name":"DictionaryUtil","href":"Hi.Common.Collections.DictionaryUtil.html","topicHref":"Hi.Common.Collections.DictionaryUtil.html","topicUid":"Hi.Common.Collections.DictionaryUtil","type":"Class"},{"name":"EnumerableUtil","href":"Hi.Common.Collections.EnumerableUtil.html","topicHref":"Hi.Common.Collections.EnumerableUtil.html","topicUid":"Hi.Common.Collections.EnumerableUtil","type":"Class"},{"name":"FixedSizeConcurrentLinkedListUtil","href":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicHref":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicUid":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil","type":"Class"},{"name":"LazyLinkedListNode","href":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicHref":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicUid":"Hi.Common.Collections.LazyLinkedListNode`1","type":"Class"},{"name":"LazyLinkedList","href":"Hi.Common.Collections.LazyLinkedList-1.html","topicHref":"Hi.Common.Collections.LazyLinkedList-1.html","topicUid":"Hi.Common.Collections.LazyLinkedList`1","type":"Class"},{"name":"LinkedListUtil","href":"Hi.Common.Collections.LinkedListUtil.html","topicHref":"Hi.Common.Collections.LinkedListUtil.html","topicUid":"Hi.Common.Collections.LinkedListUtil","type":"Class"},{"name":"ListIndexBasedEnumerable","href":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedEnumerable`1","type":"Class"},{"name":"ListIndexBasedIEnumerator","href":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedIEnumerator`1","type":"Class"},{"name":"ListUtil","href":"Hi.Common.Collections.ListUtil.html","topicHref":"Hi.Common.Collections.ListUtil.html","topicUid":"Hi.Common.Collections.ListUtil","type":"Class"},{"name":"ListUtil.OuterPolationMode","href":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicHref":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicUid":"Hi.Common.Collections.ListUtil.OuterPolationMode","type":"Enum"},{"name":"SearchTargetMode","href":"Hi.Common.Collections.SearchTargetMode.html","topicHref":"Hi.Common.Collections.SearchTargetMode.html","topicUid":"Hi.Common.Collections.SearchTargetMode","type":"Enum"},{"name":"SeekDirection","href":"Hi.Common.Collections.SeekDirection.html","topicHref":"Hi.Common.Collections.SeekDirection.html","topicUid":"Hi.Common.Collections.SeekDirection","type":"Enum"},{"name":"SortedListUtil","href":"Hi.Common.Collections.SortedListUtil.html","topicHref":"Hi.Common.Collections.SortedListUtil.html","topicUid":"Hi.Common.Collections.SortedListUtil","type":"Class"},{"name":"SubList","href":"Hi.Common.Collections.SubList-1.html","topicHref":"Hi.Common.Collections.SubList-1.html","topicUid":"Hi.Common.Collections.SubList`1","type":"Class"},{"name":"SynList","href":"Hi.Common.Collections.SynList-1.html","topicHref":"Hi.Common.Collections.SynList-1.html","topicUid":"Hi.Common.Collections.SynList`1","type":"Class"}]},{"name":"Hi.Common.CsvUtils","href":"Hi.Common.CsvUtils.html","topicHref":"Hi.Common.CsvUtils.html","topicUid":"Hi.Common.CsvUtils","type":"Namespace","items":[{"name":"CsvInputKit","href":"Hi.Common.CsvUtils.CsvInputKit.html","topicHref":"Hi.Common.CsvUtils.CsvInputKit.html","topicUid":"Hi.Common.CsvUtils.CsvInputKit","type":"Class"},{"name":"CsvOutputKit","href":"Hi.Common.CsvUtils.CsvOutputKit.html","topicHref":"Hi.Common.CsvUtils.CsvOutputKit.html","topicUid":"Hi.Common.CsvUtils.CsvOutputKit","type":"Class"},{"name":"CsvUtil","href":"Hi.Common.CsvUtils.CsvUtil.html","topicHref":"Hi.Common.CsvUtils.CsvUtil.html","topicUid":"Hi.Common.CsvUtils.CsvUtil","type":"Class"},{"name":"ICsvRowIo","href":"Hi.Common.CsvUtils.ICsvRowIo.html","topicHref":"Hi.Common.CsvUtils.ICsvRowIo.html","topicUid":"Hi.Common.CsvUtils.ICsvRowIo","type":"Interface"},{"name":"IGetCsvDictionary","href":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicHref":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicUid":"Hi.Common.CsvUtils.IGetCsvDictionary","type":"Interface"}]},{"name":"Hi.Common.FileLines","href":"Hi.Common.FileLines.html","topicHref":"Hi.Common.FileLines.html","topicUid":"Hi.Common.FileLines","type":"Namespace","items":[{"name":"FileBeginEventArgs","href":"Hi.Common.FileLines.FileBeginEventArgs.html","topicHref":"Hi.Common.FileLines.FileBeginEventArgs.html","topicUid":"Hi.Common.FileLines.FileBeginEventArgs","type":"Class"},{"name":"FileEndEventArgs","href":"Hi.Common.FileLines.FileEndEventArgs.html","topicHref":"Hi.Common.FileLines.FileEndEventArgs.html","topicUid":"Hi.Common.FileLines.FileEndEventArgs","type":"Class"},{"name":"FileLineCharIndex","href":"Hi.Common.FileLines.FileLineCharIndex.html","topicHref":"Hi.Common.FileLines.FileLineCharIndex.html","topicUid":"Hi.Common.FileLines.FileLineCharIndex","type":"Class"},{"name":"FileLineCharIndexSegment","href":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicHref":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicUid":"Hi.Common.FileLines.FileLineCharIndexSegment","type":"Class"},{"name":"FileLineIndex","href":"Hi.Common.FileLines.FileLineIndex.html","topicHref":"Hi.Common.FileLines.FileLineIndex.html","topicUid":"Hi.Common.FileLines.FileLineIndex","type":"Class"},{"name":"FileLineUtil","href":"Hi.Common.FileLines.FileLineUtil.html","topicHref":"Hi.Common.FileLines.FileLineUtil.html","topicUid":"Hi.Common.FileLines.FileLineUtil","type":"Class"},{"name":"FileUtil","href":"Hi.Common.FileLines.FileUtil.html","topicHref":"Hi.Common.FileLines.FileUtil.html","topicUid":"Hi.Common.FileLines.FileUtil","type":"Class"},{"name":"IFileChangedEventSupport","href":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicHref":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicUid":"Hi.Common.FileLines.IFileChangedEventSupport","type":"Interface"},{"name":"IFileLine","href":"Hi.Common.FileLines.IFileLine.html","topicHref":"Hi.Common.FileLines.IFileLine.html","topicUid":"Hi.Common.FileLines.IFileLine","type":"Interface"},{"name":"IFileLineCharIndex","href":"Hi.Common.FileLines.IFileLineCharIndex.html","topicHref":"Hi.Common.FileLines.IFileLineCharIndex.html","topicUid":"Hi.Common.FileLines.IFileLineCharIndex","type":"Interface"},{"name":"IFileLineIndex","href":"Hi.Common.FileLines.IFileLineIndex.html","topicHref":"Hi.Common.FileLines.IFileLineIndex.html","topicUid":"Hi.Common.FileLines.IFileLineIndex","type":"Interface"},{"name":"IGetFileLineIndex","href":"Hi.Common.FileLines.IGetFileLineIndex.html","topicHref":"Hi.Common.FileLines.IGetFileLineIndex.html","topicUid":"Hi.Common.FileLines.IGetFileLineIndex","type":"Interface"},{"name":"IGetIndexedFileLine","href":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IGetIndexedFileLine","type":"Interface"},{"name":"IIndexedFileLine","href":"Hi.Common.FileLines.IIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IIndexedFileLine","type":"Interface"},{"name":"ILineChangedEventSupport","href":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicHref":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicUid":"Hi.Common.FileLines.ILineChangedEventSupport","type":"Interface"},{"name":"IndexedFile","href":"Hi.Common.FileLines.IndexedFile.html","topicHref":"Hi.Common.FileLines.IndexedFile.html","topicUid":"Hi.Common.FileLines.IndexedFile","type":"Class"},{"name":"IndexedFileLine","href":"Hi.Common.FileLines.IndexedFileLine.html","topicHref":"Hi.Common.FileLines.IndexedFileLine.html","topicUid":"Hi.Common.FileLines.IndexedFileLine","type":"Class"},{"name":"IndexedFileLineChar","href":"Hi.Common.FileLines.IndexedFileLineChar.html","topicHref":"Hi.Common.FileLines.IndexedFileLineChar.html","topicUid":"Hi.Common.FileLines.IndexedFileLineChar","type":"Class"},{"name":"LineBeginEventArgs","href":"Hi.Common.FileLines.LineBeginEventArgs.html","topicHref":"Hi.Common.FileLines.LineBeginEventArgs.html","topicUid":"Hi.Common.FileLines.LineBeginEventArgs","type":"Class"},{"name":"LineEndEventArgs","href":"Hi.Common.FileLines.LineEndEventArgs.html","topicHref":"Hi.Common.FileLines.LineEndEventArgs.html","topicUid":"Hi.Common.FileLines.LineEndEventArgs","type":"Class"}]},{"name":"Hi.Common.Messages","href":"Hi.Common.Messages.html","topicHref":"Hi.Common.Messages.html","topicUid":"Hi.Common.Messages","type":"Namespace","items":[{"name":"ActionProgress","href":"Hi.Common.Messages.ActionProgress-1.html","topicHref":"Hi.Common.Messages.ActionProgress-1.html","topicUid":"Hi.Common.Messages.ActionProgress`1","type":"Class"},{"name":"BootstrapTheme","href":"Hi.Common.Messages.BootstrapTheme.html","topicHref":"Hi.Common.Messages.BootstrapTheme.html","topicUid":"Hi.Common.Messages.BootstrapTheme","type":"Enum"},{"name":"Category","href":"Hi.Common.Messages.Category.html","topicHref":"Hi.Common.Messages.Category.html","topicUid":"Hi.Common.Messages.Category","type":"Enum"},{"name":"DebugUtil","href":"Hi.Common.Messages.DebugUtil.html","topicHref":"Hi.Common.Messages.DebugUtil.html","topicUid":"Hi.Common.Messages.DebugUtil","type":"Class"},{"name":"ExceptionUtil","href":"Hi.Common.Messages.ExceptionUtil.html","topicHref":"Hi.Common.Messages.ExceptionUtil.html","topicUid":"Hi.Common.Messages.ExceptionUtil","type":"Class"},{"name":"IMessage","href":"Hi.Common.Messages.IMessage.html","topicHref":"Hi.Common.Messages.IMessage.html","topicUid":"Hi.Common.Messages.IMessage","type":"Interface"},{"name":"IProgressMessage","href":"Hi.Common.Messages.IProgressMessage.html","topicHref":"Hi.Common.Messages.IProgressMessage.html","topicUid":"Hi.Common.Messages.IProgressMessage","type":"Interface"},{"name":"MessageBoardUtil","href":"Hi.Common.Messages.MessageBoardUtil.html","topicHref":"Hi.Common.Messages.MessageBoardUtil.html","topicUid":"Hi.Common.Messages.MessageBoardUtil","type":"Class"},{"name":"MessageCollector","href":"Hi.Common.Messages.MessageCollector.html","topicHref":"Hi.Common.Messages.MessageCollector.html","topicUid":"Hi.Common.Messages.MessageCollector","type":"Class"},{"name":"MessageFlag","href":"Hi.Common.Messages.MessageFlag.html","topicHref":"Hi.Common.Messages.MessageFlag.html","topicUid":"Hi.Common.Messages.MessageFlag","type":"Enum"},{"name":"MessageUtil","href":"Hi.Common.Messages.MessageUtil.html","topicHref":"Hi.Common.Messages.MessageUtil.html","topicUid":"Hi.Common.Messages.MessageUtil","type":"Class"},{"name":"Severity","href":"Hi.Common.Messages.Severity.html","topicHref":"Hi.Common.Messages.Severity.html","topicUid":"Hi.Common.Messages.Severity","type":"Enum"},{"name":"ShowMessageBoardDelegate","href":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicHref":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicUid":"Hi.Common.Messages.ShowMessageBoardDelegate","type":"Delegate"},{"name":"SimpleMessage","href":"Hi.Common.Messages.SimpleMessage.html","topicHref":"Hi.Common.Messages.SimpleMessage.html","topicUid":"Hi.Common.Messages.SimpleMessage","type":"Class"}]},{"name":"Hi.Common.MinMaxUtils","href":"Hi.Common.MinMaxUtils.html","topicHref":"Hi.Common.MinMaxUtils.html","topicUid":"Hi.Common.MinMaxUtils","type":"Namespace","items":[{"name":"IndexedMinMaxPos","href":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicHref":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicUid":"Hi.Common.MinMaxUtils.IndexedMinMaxPos`2","type":"Class"},{"name":"MinMaxUtil","href":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicHref":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicUid":"Hi.Common.MinMaxUtils.MinMaxUtil","type":"Class"}]},{"name":"Hi.Common.NativeProgresses","href":"Hi.Common.NativeProgresses.html","topicHref":"Hi.Common.NativeProgresses.html","topicUid":"Hi.Common.NativeProgresses","type":"Namespace","items":[{"name":"NativeProgressFraction","href":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicHref":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicUid":"Hi.Common.NativeProgresses.NativeProgressFraction","type":"Class"},{"name":"progress_monitor_t","href":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicHref":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicUid":"Hi.Common.NativeProgresses.progress_monitor_t","type":"Struct"},{"name":"report_progress_func_t","href":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicHref":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicUid":"Hi.Common.NativeProgresses.report_progress_func_t","type":"Delegate"}]},{"name":"Hi.Common.ParallelBulkUtils","href":"Hi.Common.ParallelBulkUtils.html","topicHref":"Hi.Common.ParallelBulkUtils.html","topicUid":"Hi.Common.ParallelBulkUtils","type":"Namespace","items":[{"name":"ParallelBulkReader","href":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkReader`1","type":"Class"},{"name":"ParallelBulkWriter","href":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter`1","type":"Class"},{"name":"ReadBulkDelegate","href":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate`1","type":"Delegate"},{"name":"SequentialBulkReader","href":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.SequentialBulkReader`1","type":"Class"}]},{"name":"Hi.Common.PathUtils","href":"Hi.Common.PathUtils.html","topicHref":"Hi.Common.PathUtils.html","topicUid":"Hi.Common.PathUtils","type":"Namespace","items":[{"name":"ExtendedNamedPath","href":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicHref":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicUid":"Hi.Common.PathUtils.ExtendedNamedPath","type":"Class"},{"name":"HttpUtil","href":"Hi.Common.PathUtils.HttpUtil.html","topicHref":"Hi.Common.PathUtils.HttpUtil.html","topicUid":"Hi.Common.PathUtils.HttpUtil","type":"Class"},{"name":"Lang","href":"Hi.Common.PathUtils.Lang.html","topicHref":"Hi.Common.PathUtils.Lang.html","topicUid":"Hi.Common.PathUtils.Lang","type":"Class"},{"name":"NamedPath","href":"Hi.Common.PathUtils.NamedPath.html","topicHref":"Hi.Common.PathUtils.NamedPath.html","topicUid":"Hi.Common.PathUtils.NamedPath","type":"Class"},{"name":"PathUtil","href":"Hi.Common.PathUtils.PathUtil.html","topicHref":"Hi.Common.PathUtils.PathUtil.html","topicUid":"Hi.Common.PathUtils.PathUtil","type":"Class"}]},{"name":"Hi.Common.QueueCacheUtils","href":"Hi.Common.QueueCacheUtils.html","topicHref":"Hi.Common.QueueCacheUtils.html","topicUid":"Hi.Common.QueueCacheUtils","type":"Namespace","items":[{"name":"QueueCacherHost","href":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacherHost`1","type":"Class"},{"name":"QueueCacher","href":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacher`1","type":"Class"}]},{"name":"Hi.Common.XmlUtils","href":"Hi.Common.XmlUtils.html","topicHref":"Hi.Common.XmlUtils.html","topicUid":"Hi.Common.XmlUtils","type":"Namespace","items":[{"name":"FileRefSource","href":"Hi.Common.XmlUtils.FileRefSource-1.html","topicHref":"Hi.Common.XmlUtils.FileRefSource-1.html","topicUid":"Hi.Common.XmlUtils.FileRefSource`1","type":"Class"},{"name":"IMakeXmlSource","href":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicHref":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicUid":"Hi.Common.XmlUtils.IMakeXmlSource","type":"Interface"},{"name":"IToXElement","href":"Hi.Common.XmlUtils.IToXElement.html","topicHref":"Hi.Common.XmlUtils.IToXElement.html","topicUid":"Hi.Common.XmlUtils.IToXElement","type":"Interface"},{"name":"ProjectApiVersion","href":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicHref":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicUid":"Hi.Common.XmlUtils.ProjectApiVersion","type":"Class"},{"name":"SetFileDelegate","href":"Hi.Common.XmlUtils.SetFileDelegate.html","topicHref":"Hi.Common.XmlUtils.SetFileDelegate.html","topicUid":"Hi.Common.XmlUtils.SetFileDelegate","type":"Delegate"},{"name":"XFactory","href":"Hi.Common.XmlUtils.XFactory.html","topicHref":"Hi.Common.XmlUtils.XFactory.html","topicUid":"Hi.Common.XmlUtils.XFactory","type":"Class"},{"name":"XFactory.XGeneratorDelegate","href":"Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.XGeneratorDelegate","type":"Delegate"},{"name":"XFactory.XmlExceptionDelegate","href":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate","type":"Delegate"},{"name":"XmlUtil","href":"Hi.Common.XmlUtils.XmlUtil.html","topicHref":"Hi.Common.XmlUtils.XmlUtil.html","topicUid":"Hi.Common.XmlUtils.XmlUtil","type":"Class"}]},{"name":"Hi.CutterLocations","href":"Hi.CutterLocations.html","topicHref":"Hi.CutterLocations.html","topicUid":"Hi.CutterLocations","type":"Namespace","items":[{"name":"IGetProgramCl","href":"Hi.CutterLocations.IGetProgramCl.html","topicHref":"Hi.CutterLocations.IGetProgramCl.html","topicUid":"Hi.CutterLocations.IGetProgramCl","type":"Interface"},{"name":"SimpleCl","href":"Hi.CutterLocations.SimpleCl.html","topicHref":"Hi.CutterLocations.SimpleCl.html","topicUid":"Hi.CutterLocations.SimpleCl","type":"Class"}]},{"name":"Hi.CutterLocations.ClPath","href":"Hi.CutterLocations.ClPath.html","topicHref":"Hi.CutterLocations.ClPath.html","topicUid":"Hi.CutterLocations.ClPath","type":"Namespace","items":[{"name":"ClCircleArc","href":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicHref":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicUid":"Hi.CutterLocations.ClPath.ClCircleArc","type":"Class"},{"name":"ClLinear","href":"Hi.CutterLocations.ClPath.ClLinear.html","topicHref":"Hi.CutterLocations.ClPath.ClLinear.html","topicUid":"Hi.CutterLocations.ClPath.ClLinear","type":"Class"},{"name":"IClPath","href":"Hi.CutterLocations.ClPath.IClPath.html","topicHref":"Hi.CutterLocations.ClPath.IClPath.html","topicUid":"Hi.CutterLocations.ClPath.IClPath","type":"Interface"}]},{"name":"Hi.CutterLocations.ClStrips","href":"Hi.CutterLocations.ClStrips.html","topicHref":"Hi.CutterLocations.ClStrips.html","topicUid":"Hi.CutterLocations.ClStrips","type":"Namespace","items":[{"name":"ClStrip","href":"Hi.CutterLocations.ClStrips.ClStrip.html","topicHref":"Hi.CutterLocations.ClStrips.ClStrip.html","topicUid":"Hi.CutterLocations.ClStrips.ClStrip","type":"Class"},{"name":"ClStripPos","href":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicHref":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicUid":"Hi.CutterLocations.ClStrips.ClStripPos","type":"Class"},{"name":"RgbFunc","href":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicHref":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicUid":"Hi.CutterLocations.ClStrips.RgbFunc","type":"Delegate"}]},{"name":"Hi.Disp","href":"Hi.Disp.html","topicHref":"Hi.Disp.html","topicUid":"Hi.Disp","type":"Namespace","items":[{"name":"Bind","href":"Hi.Disp.Bind.html","topicHref":"Hi.Disp.Bind.html","topicUid":"Hi.Disp.Bind","type":"Class"},{"name":"Box3dDispUtil","href":"Hi.Disp.Box3dDispUtil.html","topicHref":"Hi.Disp.Box3dDispUtil.html","topicUid":"Hi.Disp.Box3dDispUtil","type":"Class"},{"name":"Box3dDispUtil.BoxableExpandToBox3dDel","href":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicHref":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicUid":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel","type":"Delegate"},{"name":"DelegateFuncDisplayee","href":"Hi.Disp.DelegateFuncDisplayee.html","topicHref":"Hi.Disp.DelegateFuncDisplayee.html","topicUid":"Hi.Disp.DelegateFuncDisplayee","type":"Class"},{"name":"DispEngine","href":"Hi.Disp.DispEngine.html","topicHref":"Hi.Disp.DispEngine.html","topicUid":"Hi.Disp.DispEngine","type":"Class"},{"name":"DispEngine.ImageRequestedDelegate","href":"Hi.Disp.DispEngine.ImageRequestedDelegate.html","topicHref":"Hi.Disp.DispEngine.ImageRequestedDelegate.html","topicUid":"Hi.Disp.DispEngine.ImageRequestedDelegate","type":"Delegate"},{"name":"DispEngineConfig","href":"Hi.Disp.DispEngineConfig.html","topicHref":"Hi.Disp.DispEngineConfig.html","topicUid":"Hi.Disp.DispEngineConfig","type":"Class"},{"name":"DispFrameUtil","href":"Hi.Disp.DispFrameUtil.html","topicHref":"Hi.Disp.DispFrameUtil.html","topicUid":"Hi.Disp.DispFrameUtil","type":"Class"},{"name":"DispList","href":"Hi.Disp.DispList.html","topicHref":"Hi.Disp.DispList.html","topicUid":"Hi.Disp.DispList","type":"Class"},{"name":"DispUtil","href":"Hi.Disp.DispUtil.html","topicHref":"Hi.Disp.DispUtil.html","topicUid":"Hi.Disp.DispUtil","type":"Class"},{"name":"Drawing","href":"Hi.Disp.Drawing.html","topicHref":"Hi.Disp.Drawing.html","topicUid":"Hi.Disp.Drawing","type":"Class"},{"name":"FuncDisplayee","href":"Hi.Disp.FuncDisplayee.html","topicHref":"Hi.Disp.FuncDisplayee.html","topicUid":"Hi.Disp.FuncDisplayee","type":"Class"},{"name":"GL","href":"Hi.Disp.GL.html","topicHref":"Hi.Disp.GL.html","topicUid":"Hi.Disp.GL","type":"Class"},{"name":"IDisplayee","href":"Hi.Disp.IDisplayee.html","topicHref":"Hi.Disp.IDisplayee.html","topicUid":"Hi.Disp.IDisplayee","type":"Interface"},{"name":"IGetDispEngine","href":"Hi.Disp.IGetDispEngine.html","topicHref":"Hi.Disp.IGetDispEngine.html","topicUid":"Hi.Disp.IGetDispEngine","type":"Interface"},{"name":"IGetPickable","href":"Hi.Disp.IGetPickable.html","topicHref":"Hi.Disp.IGetPickable.html","topicUid":"Hi.Disp.IGetPickable","type":"Interface"},{"name":"IGlContextDirver","href":"Hi.Disp.IGlContextDirver.html","topicHref":"Hi.Disp.IGlContextDirver.html","topicUid":"Hi.Disp.IGlContextDirver","type":"Interface"},{"name":"MatStack","href":"Hi.Disp.MatStack.html","topicHref":"Hi.Disp.MatStack.html","topicUid":"Hi.Disp.MatStack","type":"Class"},{"name":"MatStack.ItemDisposable","href":"Hi.Disp.MatStack.ItemDisposable.html","topicHref":"Hi.Disp.MatStack.ItemDisposable.html","topicUid":"Hi.Disp.MatStack.ItemDisposable","type":"Class"},{"name":"MvpBoxRelation","href":"Hi.Disp.MvpBoxRelation.html","topicHref":"Hi.Disp.MvpBoxRelation.html","topicUid":"Hi.Disp.MvpBoxRelation","type":"Enum"},{"name":"Pickable","href":"Hi.Disp.Pickable.html","topicHref":"Hi.Disp.Pickable.html","topicUid":"Hi.Disp.Pickable","type":"Class"},{"name":"PopModelMat","href":"Hi.Disp.PopModelMat.html","topicHref":"Hi.Disp.PopModelMat.html","topicUid":"Hi.Disp.PopModelMat","type":"Class"},{"name":"PushModelMat","href":"Hi.Disp.PushModelMat.html","topicHref":"Hi.Disp.PushModelMat.html","topicUid":"Hi.Disp.PushModelMat","type":"Class"},{"name":"Segment3dDispUtil","href":"Hi.Disp.Segment3dDispUtil.html","topicHref":"Hi.Disp.Segment3dDispUtil.html","topicUid":"Hi.Disp.Segment3dDispUtil","type":"Class"},{"name":"ShowEventPickable","href":"Hi.Disp.ShowEventPickable.html","topicHref":"Hi.Disp.ShowEventPickable.html","topicUid":"Hi.Disp.ShowEventPickable","type":"Class"},{"name":"Stamp","href":"Hi.Disp.Stamp.html","topicHref":"Hi.Disp.Stamp.html","topicUid":"Hi.Disp.Stamp","type":"Enum"},{"name":"StringDrawing","href":"Hi.Disp.StringDrawing.html","topicHref":"Hi.Disp.StringDrawing.html","topicUid":"Hi.Disp.StringDrawing","type":"Class"},{"name":"Tri3dDispUtil","href":"Hi.Disp.Tri3dDispUtil.html","topicHref":"Hi.Disp.Tri3dDispUtil.html","topicUid":"Hi.Disp.Tri3dDispUtil","type":"Class"},{"name":"Vec3dDispUtil","href":"Hi.Disp.Vec3dDispUtil.html","topicHref":"Hi.Disp.Vec3dDispUtil.html","topicUid":"Hi.Disp.Vec3dDispUtil","type":"Class"},{"name":"WrappedDisplayee","href":"Hi.Disp.WrappedDisplayee.html","topicHref":"Hi.Disp.WrappedDisplayee.html","topicUid":"Hi.Disp.WrappedDisplayee","type":"Class"}]},{"name":"Hi.Disp.Flag","href":"Hi.Disp.Flag.html","topicHref":"Hi.Disp.Flag.html","topicUid":"Hi.Disp.Flag","type":"Namespace","items":[{"name":"ColorScaleBar","href":"Hi.Disp.Flag.ColorScaleBar.html","topicHref":"Hi.Disp.Flag.ColorScaleBar.html","topicUid":"Hi.Disp.Flag.ColorScaleBar","type":"Class"},{"name":"CoordinateDrawing","href":"Hi.Disp.Flag.CoordinateDrawing.html","topicHref":"Hi.Disp.Flag.CoordinateDrawing.html","topicUid":"Hi.Disp.Flag.CoordinateDrawing","type":"Class"},{"name":"CubicalFlagDrawing","href":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicHref":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicUid":"Hi.Disp.Flag.CubicalFlagDrawing","type":"Class"},{"name":"DimensionBar","href":"Hi.Disp.Flag.DimensionBar.html","topicHref":"Hi.Disp.Flag.DimensionBar.html","topicUid":"Hi.Disp.Flag.DimensionBar","type":"Class"},{"name":"DispCoverUtil","href":"Hi.Disp.Flag.DispCoverUtil.html","topicHref":"Hi.Disp.Flag.DispCoverUtil.html","topicUid":"Hi.Disp.Flag.DispCoverUtil","type":"Class"}]},{"name":"Hi.Disp.Treat","href":"Hi.Disp.Treat.html","topicHref":"Hi.Disp.Treat.html","topicUid":"Hi.Disp.Treat","type":"Namespace","items":[{"name":"LineWidthSwap","href":"Hi.Disp.Treat.LineWidthSwap.html","topicHref":"Hi.Disp.Treat.LineWidthSwap.html","topicUid":"Hi.Disp.Treat.LineWidthSwap","type":"Class"},{"name":"LineWidthTreat","href":"Hi.Disp.Treat.LineWidthTreat.html","topicHref":"Hi.Disp.Treat.LineWidthTreat.html","topicUid":"Hi.Disp.Treat.LineWidthTreat","type":"Class"},{"name":"PointSizeSwap","href":"Hi.Disp.Treat.PointSizeSwap.html","topicHref":"Hi.Disp.Treat.PointSizeSwap.html","topicUid":"Hi.Disp.Treat.PointSizeSwap","type":"Class"},{"name":"PointSizeTreat","href":"Hi.Disp.Treat.PointSizeTreat.html","topicHref":"Hi.Disp.Treat.PointSizeTreat.html","topicUid":"Hi.Disp.Treat.PointSizeTreat","type":"Class"},{"name":"RgbSwap","href":"Hi.Disp.Treat.RgbSwap.html","topicHref":"Hi.Disp.Treat.RgbSwap.html","topicUid":"Hi.Disp.Treat.RgbSwap","type":"Class"},{"name":"RgbTreat","href":"Hi.Disp.Treat.RgbTreat.html","topicHref":"Hi.Disp.Treat.RgbTreat.html","topicUid":"Hi.Disp.Treat.RgbTreat","type":"Class"},{"name":"RgbWrapper","href":"Hi.Disp.Treat.RgbWrapper.html","topicHref":"Hi.Disp.Treat.RgbWrapper.html","topicUid":"Hi.Disp.Treat.RgbWrapper","type":"Class"},{"name":"TransformationWrapper","href":"Hi.Disp.Treat.TransformationWrapper.html","topicHref":"Hi.Disp.Treat.TransformationWrapper.html","topicUid":"Hi.Disp.Treat.TransformationWrapper","type":"Class"}]},{"name":"Hi.Fanuc","href":"Hi.Fanuc.html","topicHref":"Hi.Fanuc.html","topicUid":"Hi.Fanuc","type":"Namespace","items":[{"name":"FanucVarTable","href":"Hi.Fanuc.FanucVarTable.html","topicHref":"Hi.Fanuc.FanucVarTable.html","topicUid":"Hi.Fanuc.FanucVarTable","type":"Class"},{"name":"FanucVarValue","href":"Hi.Fanuc.FanucVarValue.html","topicHref":"Hi.Fanuc.FanucVarValue.html","topicUid":"Hi.Fanuc.FanucVarValue","type":"Struct"}]},{"name":"Hi.Geom","href":"Hi.Geom.html","topicHref":"Hi.Geom.html","topicUid":"Hi.Geom","type":"Namespace","items":[{"name":"ArrayUtil","href":"Hi.Geom.ArrayUtil.html","topicHref":"Hi.Geom.ArrayUtil.html","topicUid":"Hi.Geom.ArrayUtil","type":"Class"},{"name":"AxisAngle4d","href":"Hi.Geom.AxisAngle4d.html","topicHref":"Hi.Geom.AxisAngle4d.html","topicUid":"Hi.Geom.AxisAngle4d","type":"Class"},{"name":"Box2d","href":"Hi.Geom.Box2d.html","topicHref":"Hi.Geom.Box2d.html","topicUid":"Hi.Geom.Box2d","type":"Class"},{"name":"Box2d.NoInit","href":"Hi.Geom.Box2d.NoInit.html","topicHref":"Hi.Geom.Box2d.NoInit.html","topicUid":"Hi.Geom.Box2d.NoInit","type":"Class"},{"name":"Box3d","href":"Hi.Geom.Box3d.html","topicHref":"Hi.Geom.Box3d.html","topicUid":"Hi.Geom.Box3d","type":"Class"},{"name":"Box3d.NoInit","href":"Hi.Geom.Box3d.NoInit.html","topicHref":"Hi.Geom.Box3d.NoInit.html","topicUid":"Hi.Geom.Box3d.NoInit","type":"Class"},{"name":"Cylindroid","href":"Hi.Geom.Cylindroid.html","topicHref":"Hi.Geom.Cylindroid.html","topicUid":"Hi.Geom.Cylindroid","type":"Class"},{"name":"DVec3d","href":"Hi.Geom.DVec3d.html","topicHref":"Hi.Geom.DVec3d.html","topicUid":"Hi.Geom.DVec3d","type":"Class"},{"name":"Dir","href":"Hi.Geom.Dir.html","topicHref":"Hi.Geom.Dir.html","topicUid":"Hi.Geom.Dir","type":"Enum"},{"name":"ExtendedCylinder","href":"Hi.Geom.ExtendedCylinder.html","topicHref":"Hi.Geom.ExtendedCylinder.html","topicUid":"Hi.Geom.ExtendedCylinder","type":"Class"},{"name":"Flat3d","href":"Hi.Geom.Flat3d.html","topicHref":"Hi.Geom.Flat3d.html","topicUid":"Hi.Geom.Flat3d","type":"Class"},{"name":"FractionStatus","href":"Hi.Geom.FractionStatus.html","topicHref":"Hi.Geom.FractionStatus.html","topicUid":"Hi.Geom.FractionStatus","type":"Enum"},{"name":"Fraction","href":"Hi.Geom.Fraction-1.html","topicHref":"Hi.Geom.Fraction-1.html","topicUid":"Hi.Geom.Fraction`1","type":"Struct"},{"name":"GenStlFuncHost","href":"Hi.Geom.GenStlFuncHost.html","topicHref":"Hi.Geom.GenStlFuncHost.html","topicUid":"Hi.Geom.GenStlFuncHost","type":"Class"},{"name":"GeomCombination","href":"Hi.Geom.GeomCombination.html","topicHref":"Hi.Geom.GeomCombination.html","topicUid":"Hi.Geom.GeomCombination","type":"Class"},{"name":"GeomUtil","href":"Hi.Geom.GeomUtil.html","topicHref":"Hi.Geom.GeomUtil.html","topicUid":"Hi.Geom.GeomUtil","type":"Class"},{"name":"IExpandToBox2d","href":"Hi.Geom.IExpandToBox2d.html","topicHref":"Hi.Geom.IExpandToBox2d.html","topicUid":"Hi.Geom.IExpandToBox2d","type":"Interface"},{"name":"IExpandToBox3d","href":"Hi.Geom.IExpandToBox3d.html","topicHref":"Hi.Geom.IExpandToBox3d.html","topicUid":"Hi.Geom.IExpandToBox3d","type":"Interface"},{"name":"IFlat3d","href":"Hi.Geom.IFlat3d.html","topicHref":"Hi.Geom.IFlat3d.html","topicUid":"Hi.Geom.IFlat3d","type":"Interface"},{"name":"IGenStl","href":"Hi.Geom.IGenStl.html","topicHref":"Hi.Geom.IGenStl.html","topicUid":"Hi.Geom.IGenStl","type":"Interface"},{"name":"IGeomProperty","href":"Hi.Geom.IGeomProperty.html","topicHref":"Hi.Geom.IGeomProperty.html","topicUid":"Hi.Geom.IGeomProperty","type":"Interface"},{"name":"IGetStl","href":"Hi.Geom.IGetStl.html","topicHref":"Hi.Geom.IGetStl.html","topicUid":"Hi.Geom.IGetStl","type":"Interface"},{"name":"IGetZrContour","href":"Hi.Geom.IGetZrContour.html","topicHref":"Hi.Geom.IGetZrContour.html","topicUid":"Hi.Geom.IGetZrContour","type":"Interface"},{"name":"IGetZrList","href":"Hi.Geom.IGetZrList.html","topicHref":"Hi.Geom.IGetZrList.html","topicUid":"Hi.Geom.IGetZrList","type":"Interface"},{"name":"IStlSource","href":"Hi.Geom.IStlSource.html","topicHref":"Hi.Geom.IStlSource.html","topicUid":"Hi.Geom.IStlSource","type":"Interface"},{"name":"ITri3d","href":"Hi.Geom.ITri3d.html","topicHref":"Hi.Geom.ITri3d.html","topicUid":"Hi.Geom.ITri3d","type":"Interface"},{"name":"IVec","href":"Hi.Geom.IVec-1.html","topicHref":"Hi.Geom.IVec-1.html","topicUid":"Hi.Geom.IVec`1","type":"Interface"},{"name":"IZrListSourceProperty","href":"Hi.Geom.IZrListSourceProperty.html","topicHref":"Hi.Geom.IZrListSourceProperty.html","topicUid":"Hi.Geom.IZrListSourceProperty","type":"Interface"},{"name":"Mat4d","href":"Hi.Geom.Mat4d.html","topicHref":"Hi.Geom.Mat4d.html","topicUid":"Hi.Geom.Mat4d","type":"Class"},{"name":"Mat4d.IndexFlag","href":"Hi.Geom.Mat4d.IndexFlag.html","topicHref":"Hi.Geom.Mat4d.IndexFlag.html","topicUid":"Hi.Geom.Mat4d.IndexFlag","type":"Enum"},{"name":"MathNetUtil","href":"Hi.Geom.MathNetUtil.html","topicHref":"Hi.Geom.MathNetUtil.html","topicUid":"Hi.Geom.MathNetUtil","type":"Class"},{"name":"MathUtil","href":"Hi.Geom.MathUtil.html","topicHref":"Hi.Geom.MathUtil.html","topicUid":"Hi.Geom.MathUtil","type":"Class"},{"name":"NativeFraction","href":"Hi.Geom.NativeFraction.html","topicHref":"Hi.Geom.NativeFraction.html","topicUid":"Hi.Geom.NativeFraction","type":"Class"},{"name":"NativeStl","href":"Hi.Geom.NativeStl.html","topicHref":"Hi.Geom.NativeStl.html","topicUid":"Hi.Geom.NativeStl","type":"Class"},{"name":"ObjUtil","href":"Hi.Geom.ObjUtil.html","topicHref":"Hi.Geom.ObjUtil.html","topicUid":"Hi.Geom.ObjUtil","type":"Class"},{"name":"PairZr","href":"Hi.Geom.PairZr.html","topicHref":"Hi.Geom.PairZr.html","topicUid":"Hi.Geom.PairZr","type":"Class"},{"name":"PairZrUtil","href":"Hi.Geom.PairZrUtil.html","topicHref":"Hi.Geom.PairZrUtil.html","topicUid":"Hi.Geom.PairZrUtil","type":"Class"},{"name":"PlyUtil","href":"Hi.Geom.PlyUtil.html","topicHref":"Hi.Geom.PlyUtil.html","topicUid":"Hi.Geom.PlyUtil","type":"Class"},{"name":"Polar3d","href":"Hi.Geom.Polar3d.html","topicHref":"Hi.Geom.Polar3d.html","topicUid":"Hi.Geom.Polar3d","type":"Class"},{"name":"Segment3d","href":"Hi.Geom.Segment3d.html","topicHref":"Hi.Geom.Segment3d.html","topicUid":"Hi.Geom.Segment3d","type":"Class"},{"name":"Stl","href":"Hi.Geom.Stl.html","topicHref":"Hi.Geom.Stl.html","topicUid":"Hi.Geom.Stl","type":"Class"},{"name":"Stl.StlType","href":"Hi.Geom.Stl.StlType.html","topicHref":"Hi.Geom.Stl.StlType.html","topicUid":"Hi.Geom.Stl.StlType","type":"Enum"},{"name":"StlFile","href":"Hi.Geom.StlFile.html","topicHref":"Hi.Geom.StlFile.html","topicUid":"Hi.Geom.StlFile","type":"Class"},{"name":"StlFuncHost","href":"Hi.Geom.StlFuncHost.html","topicHref":"Hi.Geom.StlFuncHost.html","topicUid":"Hi.Geom.StlFuncHost","type":"Class"},{"name":"StlUtil","href":"Hi.Geom.StlUtil.html","topicHref":"Hi.Geom.StlUtil.html","topicUid":"Hi.Geom.StlUtil","type":"Class"},{"name":"TransformationGeom","href":"Hi.Geom.TransformationGeom.html","topicHref":"Hi.Geom.TransformationGeom.html","topicUid":"Hi.Geom.TransformationGeom","type":"Class"},{"name":"Tri3d","href":"Hi.Geom.Tri3d.html","topicHref":"Hi.Geom.Tri3d.html","topicUid":"Hi.Geom.Tri3d","type":"Class"},{"name":"Tri3dUtil","href":"Hi.Geom.Tri3dUtil.html","topicHref":"Hi.Geom.Tri3dUtil.html","topicUid":"Hi.Geom.Tri3dUtil","type":"Class"},{"name":"Vec2d","href":"Hi.Geom.Vec2d.html","topicHref":"Hi.Geom.Vec2d.html","topicUid":"Hi.Geom.Vec2d","type":"Class"},{"name":"Vec2i","href":"Hi.Geom.Vec2i.html","topicHref":"Hi.Geom.Vec2i.html","topicUid":"Hi.Geom.Vec2i","type":"Class"},{"name":"Vec3d","href":"Hi.Geom.Vec3d.html","topicHref":"Hi.Geom.Vec3d.html","topicUid":"Hi.Geom.Vec3d","type":"Class"}]},{"name":"Hi.Geom.Resolution","href":"Hi.Geom.Resolution.html","topicHref":"Hi.Geom.Resolution.html","topicUid":"Hi.Geom.Resolution","type":"Namespace","items":[{"name":"IPolarResolution2d","href":"Hi.Geom.Resolution.IPolarResolution2d.html","topicHref":"Hi.Geom.Resolution.IPolarResolution2d.html","topicUid":"Hi.Geom.Resolution.IPolarResolution2d","type":"Interface"},{"name":"PolarResolution2d","href":"Hi.Geom.Resolution.PolarResolution2d.html","topicHref":"Hi.Geom.Resolution.PolarResolution2d.html","topicUid":"Hi.Geom.Resolution.PolarResolution2d","type":"Class"}]},{"name":"Hi.Geom.Solvers","href":"Hi.Geom.Solvers.html","topicHref":"Hi.Geom.Solvers.html","topicUid":"Hi.Geom.Solvers","type":"Namespace","items":[{"name":"BinarySolverUtil","href":"Hi.Geom.Solvers.BinarySolverUtil.html","topicHref":"Hi.Geom.Solvers.BinarySolverUtil.html","topicUid":"Hi.Geom.Solvers.BinarySolverUtil","type":"Class"},{"name":"BinarySolvingEntry","href":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicHref":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicUid":"Hi.Geom.Solvers.BinarySolvingEntry","type":"Class"},{"name":"DeepSolvingStatus","href":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicHref":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicUid":"Hi.Geom.Solvers.DeepSolvingStatus","type":"Class"},{"name":"NumericalSolver","href":"Hi.Geom.Solvers.NumericalSolver.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.html","topicUid":"Hi.Geom.Solvers.NumericalSolver","type":"Class"},{"name":"NumericalSolver.GetRepondsDelegate","href":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate","type":"Delegate"},{"name":"NumericalSolver.SetParasDelegate","href":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate","type":"Delegate"},{"name":"SolverUtil","href":"Hi.Geom.Solvers.SolverUtil.html","topicHref":"Hi.Geom.Solvers.SolverUtil.html","topicUid":"Hi.Geom.Solvers.SolverUtil","type":"Class"},{"name":"SolvingResult","href":"Hi.Geom.Solvers.SolvingResult.html","topicHref":"Hi.Geom.Solvers.SolvingResult.html","topicUid":"Hi.Geom.Solvers.SolvingResult","type":"Class"},{"name":"SolvingStatus","href":"Hi.Geom.Solvers.SolvingStatus.html","topicHref":"Hi.Geom.Solvers.SolvingStatus.html","topicUid":"Hi.Geom.Solvers.SolvingStatus","type":"Enum"},{"name":"SolvingTerm","href":"Hi.Geom.Solvers.SolvingTerm.html","topicHref":"Hi.Geom.Solvers.SolvingTerm.html","topicUid":"Hi.Geom.Solvers.SolvingTerm","type":"Enum"}]},{"name":"Hi.Geom.Topo","href":"Hi.Geom.Topo.html","topicHref":"Hi.Geom.Topo.html","topicUid":"Hi.Geom.Topo","type":"Namespace","items":[{"name":"CarveBooleanKind","href":"Hi.Geom.Topo.CarveBooleanKind.html","topicHref":"Hi.Geom.Topo.CarveBooleanKind.html","topicUid":"Hi.Geom.Topo.CarveBooleanKind","type":"Enum"},{"name":"CarveBooleanResult","href":"Hi.Geom.Topo.CarveBooleanResult.html","topicHref":"Hi.Geom.Topo.CarveBooleanResult.html","topicUid":"Hi.Geom.Topo.CarveBooleanResult","type":"Class"},{"name":"CarveStl","href":"Hi.Geom.Topo.CarveStl.html","topicHref":"Hi.Geom.Topo.CarveStl.html","topicUid":"Hi.Geom.Topo.CarveStl","type":"Class"},{"name":"NativeTopoStl3d","href":"Hi.Geom.Topo.NativeTopoStl3d.html","topicHref":"Hi.Geom.Topo.NativeTopoStl3d.html","topicUid":"Hi.Geom.Topo.NativeTopoStl3d","type":"Class"},{"name":"NativeTopoStl3wfr","href":"Hi.Geom.Topo.NativeTopoStl3wfr.html","topicHref":"Hi.Geom.Topo.NativeTopoStl3wfr.html","topicUid":"Hi.Geom.Topo.NativeTopoStl3wfr","type":"Class"},{"name":"TopoLine3Hfr","href":"Hi.Geom.Topo.TopoLine3Hfr.html","topicHref":"Hi.Geom.Topo.TopoLine3Hfr.html","topicUid":"Hi.Geom.Topo.TopoLine3Hfr","type":"Class"},{"name":"TopoLine3StockHfr","href":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoLine3StockHfr","type":"Class"},{"name":"TopoPoint3Hfr","href":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3Hfr","type":"Class"},{"name":"TopoPoint3StockHfr","href":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3StockHfr","type":"Class"},{"name":"TopoStl3Hfr","href":"Hi.Geom.Topo.TopoStl3Hfr.html","topicHref":"Hi.Geom.Topo.TopoStl3Hfr.html","topicUid":"Hi.Geom.Topo.TopoStl3Hfr","type":"Class"},{"name":"TopoStl3HfrFlatDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee","type":"Class"},{"name":"TopoStl3HfrSmoothDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee","type":"Class"},{"name":"TopoTri3Hfr","href":"Hi.Geom.Topo.TopoTri3Hfr.html","topicHref":"Hi.Geom.Topo.TopoTri3Hfr.html","topicUid":"Hi.Geom.Topo.TopoTri3Hfr","type":"Class"},{"name":"TopoTri3StockHfr","href":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoTri3StockHfr","type":"Class"},{"name":"Vec3Hfr","href":"Hi.Geom.Topo.Vec3Hfr.html","topicHref":"Hi.Geom.Topo.Vec3Hfr.html","topicUid":"Hi.Geom.Topo.Vec3Hfr","type":"Struct"}]},{"name":"Hi.Geom.UnitUtils","href":"Hi.Geom.UnitUtils.html","topicHref":"Hi.Geom.UnitUtils.html","topicUid":"Hi.Geom.UnitUtils","type":"Namespace","items":[{"name":"PhysicsUnit","href":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicHref":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicUid":"Hi.Geom.UnitUtils.PhysicsUnit","type":"Enum"},{"name":"StringValueAttribute","href":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicHref":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicUid":"Hi.Geom.UnitUtils.StringValueAttribute","type":"Class"},{"name":"UnitConvertUtil","href":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicHref":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicUid":"Hi.Geom.UnitUtils.UnitConvertUtil","type":"Class"}]},{"name":"Hi.HiNcKits","href":"Hi.HiNcKits.html","topicHref":"Hi.HiNcKits.html","topicUid":"Hi.HiNcKits","type":"Namespace","items":[{"name":"BasePathEnum","href":"Hi.HiNcKits.BasePathEnum.html","topicHref":"Hi.HiNcKits.BasePathEnum.html","topicUid":"Hi.HiNcKits.BasePathEnum","type":"Enum"},{"name":"HiNcHost","href":"Hi.HiNcKits.HiNcHost.html","topicHref":"Hi.HiNcKits.HiNcHost.html","topicUid":"Hi.HiNcKits.HiNcHost","type":"Class"},{"name":"LocalApp","href":"Hi.HiNcKits.LocalApp.html","topicHref":"Hi.HiNcKits.LocalApp.html","topicUid":"Hi.HiNcKits.LocalApp","type":"Class"},{"name":"LocalAppConfig","href":"Hi.HiNcKits.LocalAppConfig.html","topicHref":"Hi.HiNcKits.LocalAppConfig.html","topicUid":"Hi.HiNcKits.LocalAppConfig","type":"Class"},{"name":"ProxyConfig","href":"Hi.HiNcKits.ProxyConfig.html","topicHref":"Hi.HiNcKits.ProxyConfig.html","topicUid":"Hi.HiNcKits.ProxyConfig","type":"Class"},{"name":"ResourceSeeder","href":"Hi.HiNcKits.ResourceSeeder.html","topicHref":"Hi.HiNcKits.ResourceSeeder.html","topicUid":"Hi.HiNcKits.ResourceSeeder","type":"Class"}]},{"name":"Hi.Licenses","href":"Hi.Licenses.html","topicHref":"Hi.Licenses.html","topicUid":"Hi.Licenses","type":"Namespace","items":[{"name":"AuthFeature","href":"Hi.Licenses.AuthFeature.html","topicHref":"Hi.Licenses.AuthFeature.html","topicUid":"Hi.Licenses.AuthFeature","type":"Enum"},{"name":"AuthorizationFailedEventArgs","href":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicHref":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicUid":"Hi.Licenses.AuthorizationFailedEventArgs","type":"Class"},{"name":"BlockType","href":"Hi.Licenses.BlockType.html","topicHref":"Hi.Licenses.BlockType.html","topicUid":"Hi.Licenses.BlockType","type":"Enum"},{"name":"License","href":"Hi.Licenses.License.html","topicHref":"Hi.Licenses.License.html","topicUid":"Hi.Licenses.License","type":"Class"},{"name":"LicenseType","href":"Hi.Licenses.LicenseType.html","topicHref":"Hi.Licenses.LicenseType.html","topicUid":"Hi.Licenses.LicenseType","type":"Enum"}]},{"name":"Hi.Machining","href":"Hi.Machining.html","topicHref":"Hi.Machining.html","topicUid":"Hi.Machining","type":"Namespace","items":[{"name":"FreeformRemover","href":"Hi.Machining.FreeformRemover.html","topicHref":"Hi.Machining.FreeformRemover.html","topicUid":"Hi.Machining.FreeformRemover","type":"Class"},{"name":"ICutter","href":"Hi.Machining.ICutter.html","topicHref":"Hi.Machining.ICutter.html","topicUid":"Hi.Machining.ICutter","type":"Interface"},{"name":"ICutterAnchorable","href":"Hi.Machining.ICutterAnchorable.html","topicHref":"Hi.Machining.ICutterAnchorable.html","topicUid":"Hi.Machining.ICutterAnchorable","type":"Interface"},{"name":"IGetSweptable","href":"Hi.Machining.IGetSweptable.html","topicHref":"Hi.Machining.IGetSweptable.html","topicUid":"Hi.Machining.IGetSweptable","type":"Interface"},{"name":"IMachiningTool","href":"Hi.Machining.IMachiningTool.html","topicHref":"Hi.Machining.IMachiningTool.html","topicUid":"Hi.Machining.IMachiningTool","type":"Interface"},{"name":"IVolumeRemover","href":"Hi.Machining.IVolumeRemover.html","topicHref":"Hi.Machining.IVolumeRemover.html","topicUid":"Hi.Machining.IVolumeRemover","type":"Interface"},{"name":"MachiningToolHouse","href":"Hi.Machining.MachiningToolHouse.html","topicHref":"Hi.Machining.MachiningToolHouse.html","topicUid":"Hi.Machining.MachiningToolHouse","type":"Class"},{"name":"MachiningVolumeRemovalProc","href":"Hi.Machining.MachiningVolumeRemovalProc.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc","type":"Class"},{"name":"MachiningVolumeRemovalProc.StepMotionSnapshot","href":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot","type":"Class"},{"name":"MatInterpolationKit","href":"Hi.Machining.MatInterpolationKit.html","topicHref":"Hi.Machining.MatInterpolationKit.html","topicUid":"Hi.Machining.MatInterpolationKit","type":"Class"},{"name":"MatRelation","href":"Hi.Machining.MatRelation.html","topicHref":"Hi.Machining.MatRelation.html","topicUid":"Hi.Machining.MatRelation","type":"Enum"},{"name":"MatRelationUtil","href":"Hi.Machining.MatRelationUtil.html","topicHref":"Hi.Machining.MatRelationUtil.html","topicUid":"Hi.Machining.MatRelationUtil","type":"Class"},{"name":"Sweptable","href":"Hi.Machining.Sweptable.html","topicHref":"Hi.Machining.Sweptable.html","topicUid":"Hi.Machining.Sweptable","type":"Class"},{"name":"SweptableUtil","href":"Hi.Machining.SweptableUtil.html","topicHref":"Hi.Machining.SweptableUtil.html","topicUid":"Hi.Machining.SweptableUtil","type":"Class"},{"name":"ToolNotFoundException","href":"Hi.Machining.ToolNotFoundException.html","topicHref":"Hi.Machining.ToolNotFoundException.html","topicUid":"Hi.Machining.ToolNotFoundException","type":"Class"}]},{"name":"Hi.Machining.MachiningEquipmentUtils","href":"Hi.Machining.MachiningEquipmentUtils.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.html","topicUid":"Hi.Machining.MachiningEquipmentUtils","type":"Namespace","items":[{"name":"CollidableComponentEnum","href":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum","type":"Enum"},{"name":"IGetMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment","type":"Interface"},{"name":"IMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment","type":"Interface"},{"name":"MachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment","type":"Class"},{"name":"MachiningEquipmentCollisionIndex","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex","type":"Class"},{"name":"MachiningEquipmentCollisionIndexPairsSource","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource","type":"Class"},{"name":"MachiningEquipmentUtil","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil","type":"Class"},{"name":"SetupEquipment","href":"Hi.Machining.MachiningEquipmentUtils.SetupEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.SetupEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.SetupEquipment","type":"Class"}]},{"name":"Hi.MachiningProcs","href":"Hi.MachiningProcs.html","topicHref":"Hi.MachiningProcs.html","topicUid":"Hi.MachiningProcs","type":"Namespace","items":[{"name":"AllowNoActiveSessionAttribute","href":"Hi.MachiningProcs.AllowNoActiveSessionAttribute.html","topicHref":"Hi.MachiningProcs.AllowNoActiveSessionAttribute.html","topicUid":"Hi.MachiningProcs.AllowNoActiveSessionAttribute","type":"Class"},{"name":"AllowNoLoadedProjectAttribute","href":"Hi.MachiningProcs.AllowNoLoadedProjectAttribute.html","topicHref":"Hi.MachiningProcs.AllowNoLoadedProjectAttribute.html","topicUid":"Hi.MachiningProcs.AllowNoLoadedProjectAttribute","type":"Class"},{"name":"ApiActionResult","href":"Hi.MachiningProcs.ApiActionResult.html","topicHref":"Hi.MachiningProcs.ApiActionResult.html","topicUid":"Hi.MachiningProcs.ApiActionResult","type":"Class"},{"name":"ConfigStepFunc","href":"Hi.MachiningProcs.ConfigStepFunc.html","topicHref":"Hi.MachiningProcs.ConfigStepFunc.html","topicUid":"Hi.MachiningProcs.ConfigStepFunc","type":"Delegate"},{"name":"IMachiningProjectGetter","href":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicHref":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicUid":"Hi.MachiningProcs.IMachiningProjectGetter","type":"Interface"},{"name":"IProjectService","href":"Hi.MachiningProcs.IProjectService.html","topicHref":"Hi.MachiningProcs.IProjectService.html","topicUid":"Hi.MachiningProcs.IProjectService","type":"Interface"},{"name":"LocalProjectService","href":"Hi.MachiningProcs.LocalProjectService.html","topicHref":"Hi.MachiningProcs.LocalProjectService.html","topicUid":"Hi.MachiningProcs.LocalProjectService","type":"Class"},{"name":"LocalProjectService.MachiningProjectChangedDelegate","href":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicHref":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicUid":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate","type":"Delegate"},{"name":"LocalProjectServiceController","href":"Hi.MachiningProcs.LocalProjectServiceController.html","topicHref":"Hi.MachiningProcs.LocalProjectServiceController.html","topicUid":"Hi.MachiningProcs.LocalProjectServiceController","type":"Class"},{"name":"MachiningActRunner","href":"Hi.MachiningProcs.MachiningActRunner.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.html","topicUid":"Hi.MachiningProcs.MachiningActRunner","type":"Class"},{"name":"MachiningActRunner.MachiningStepBuiltDelegate","href":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicUid":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate","type":"Delegate"},{"name":"MachiningActRunnerConfig","href":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicHref":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicUid":"Hi.MachiningProcs.MachiningActRunnerConfig","type":"Class"},{"name":"MachiningParallelProc","href":"Hi.MachiningProcs.MachiningParallelProc.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc","type":"Class"},{"name":"MachiningParallelProc.StepTaskBundle","href":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle","type":"Class"},{"name":"MachiningParallelProc.SubstractionResult","href":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult","type":"Class"},{"name":"MachiningProject","href":"Hi.MachiningProcs.MachiningProject.html","topicHref":"Hi.MachiningProcs.MachiningProject.html","topicUid":"Hi.MachiningProcs.MachiningProject","type":"Class"},{"name":"MachiningSession","href":"Hi.MachiningProcs.MachiningSession.html","topicHref":"Hi.MachiningProcs.MachiningSession.html","topicUid":"Hi.MachiningProcs.MachiningSession","type":"Class"},{"name":"MessageDto","href":"Hi.MachiningProcs.MessageDto.html","topicHref":"Hi.MachiningProcs.MessageDto.html","topicUid":"Hi.MachiningProcs.MessageDto","type":"Class"},{"name":"MillingUtil","href":"Hi.MachiningProcs.MillingUtil.html","topicHref":"Hi.MachiningProcs.MillingUtil.html","topicUid":"Hi.MachiningProcs.MillingUtil","type":"Class"},{"name":"NcKind","href":"Hi.MachiningProcs.NcKind.html","topicHref":"Hi.MachiningProcs.NcKind.html","topicUid":"Hi.MachiningProcs.NcKind","type":"Enum"},{"name":"NcKindUtil","href":"Hi.MachiningProcs.NcKindUtil.html","topicHref":"Hi.MachiningProcs.NcKindUtil.html","topicUid":"Hi.MachiningProcs.NcKindUtil","type":"Class"},{"name":"NcRunnerSessionState","href":"Hi.MachiningProcs.NcRunnerSessionState.html","topicHref":"Hi.MachiningProcs.NcRunnerSessionState.html","topicUid":"Hi.MachiningProcs.NcRunnerSessionState","type":"Class"},{"name":"ProjectFileBusyException","href":"Hi.MachiningProcs.ProjectFileBusyException.html","topicHref":"Hi.MachiningProcs.ProjectFileBusyException.html","topicUid":"Hi.MachiningProcs.ProjectFileBusyException","type":"Class"},{"name":"ProxyProjectService","href":"Hi.MachiningProcs.ProxyProjectService.html","topicHref":"Hi.MachiningProcs.ProxyProjectService.html","topicUid":"Hi.MachiningProcs.ProxyProjectService","type":"Class"},{"name":"RenderingFlag","href":"Hi.MachiningProcs.RenderingFlag.html","topicHref":"Hi.MachiningProcs.RenderingFlag.html","topicUid":"Hi.MachiningProcs.RenderingFlag","type":"Enum"},{"name":"RequireActiveSessionAttribute","href":"Hi.MachiningProcs.RequireActiveSessionAttribute.html","topicHref":"Hi.MachiningProcs.RequireActiveSessionAttribute.html","topicUid":"Hi.MachiningProcs.RequireActiveSessionAttribute","type":"Class"},{"name":"RequireLoadedProjectAttribute","href":"Hi.MachiningProcs.RequireLoadedProjectAttribute.html","topicHref":"Hi.MachiningProcs.RequireLoadedProjectAttribute.html","topicUid":"Hi.MachiningProcs.RequireLoadedProjectAttribute","type":"Class"},{"name":"SessionShell","href":"Hi.MachiningProcs.SessionShell.html","topicHref":"Hi.MachiningProcs.SessionShell.html","topicUid":"Hi.MachiningProcs.SessionShell","type":"Class"},{"name":"SessionShellController","href":"Hi.MachiningProcs.SessionShellController.html","topicHref":"Hi.MachiningProcs.SessionShellController.html","topicUid":"Hi.MachiningProcs.SessionShellController","type":"Class"},{"name":"SetupController","href":"Hi.MachiningProcs.SetupController.html","topicHref":"Hi.MachiningProcs.SetupController.html","topicUid":"Hi.MachiningProcs.SetupController","type":"Class"},{"name":"ShellProgress","href":"Hi.MachiningProcs.ShellProgress.html","topicHref":"Hi.MachiningProcs.ShellProgress.html","topicUid":"Hi.MachiningProcs.ShellProgress","type":"Class"},{"name":"SpindleSpeedCache","href":"Hi.MachiningProcs.SpindleSpeedCache.html","topicHref":"Hi.MachiningProcs.SpindleSpeedCache.html","topicUid":"Hi.MachiningProcs.SpindleSpeedCache","type":"Class"},{"name":"StepDiagnostic","href":"Hi.MachiningProcs.StepDiagnostic.html","topicHref":"Hi.MachiningProcs.StepDiagnostic.html","topicUid":"Hi.MachiningProcs.StepDiagnostic","type":"Class"},{"name":"StepDiagnosticAnchorUtil","href":"Hi.MachiningProcs.StepDiagnosticAnchorUtil.html","topicHref":"Hi.MachiningProcs.StepDiagnosticAnchorUtil.html","topicUid":"Hi.MachiningProcs.StepDiagnosticAnchorUtil","type":"Class"},{"name":"StepDiagnosticProgress","href":"Hi.MachiningProcs.StepDiagnosticProgress.html","topicHref":"Hi.MachiningProcs.StepDiagnosticProgress.html","topicUid":"Hi.MachiningProcs.StepDiagnosticProgress","type":"Class"},{"name":"StepScopedProgress","href":"Hi.MachiningProcs.StepScopedProgress.html","topicHref":"Hi.MachiningProcs.StepScopedProgress.html","topicUid":"Hi.MachiningProcs.StepScopedProgress","type":"Class"}]},{"name":"Hi.MachiningSteps","href":"Hi.MachiningSteps.html","topicHref":"Hi.MachiningSteps.html","topicUid":"Hi.MachiningSteps","type":"Namespace","items":[{"name":"IFlagText","href":"Hi.MachiningSteps.IFlagText.html","topicHref":"Hi.MachiningSteps.IFlagText.html","topicUid":"Hi.MachiningSteps.IFlagText","type":"Interface"},{"name":"IMachiningService","href":"Hi.MachiningSteps.IMachiningService.html","topicHref":"Hi.MachiningSteps.IMachiningService.html","topicUid":"Hi.MachiningSteps.IMachiningService","type":"Interface"},{"name":"IMotionStepIndex","href":"Hi.MachiningSteps.IMotionStepIndex.html","topicHref":"Hi.MachiningSteps.IMotionStepIndex.html","topicUid":"Hi.MachiningSteps.IMotionStepIndex","type":"Interface"},{"name":"IStepPropertyAccessHost","href":"Hi.MachiningSteps.IStepPropertyAccessHost.html","topicHref":"Hi.MachiningSteps.IStepPropertyAccessHost.html","topicUid":"Hi.MachiningSteps.IStepPropertyAccessHost","type":"Interface"},{"name":"MachineMotionStep","href":"Hi.MachiningSteps.MachineMotionStep.html","topicHref":"Hi.MachiningSteps.MachineMotionStep.html","topicUid":"Hi.MachiningSteps.MachineMotionStep","type":"Class"},{"name":"MachiningStep","href":"Hi.MachiningSteps.MachiningStep.html","topicHref":"Hi.MachiningSteps.MachiningStep.html","topicUid":"Hi.MachiningSteps.MachiningStep","type":"Class"},{"name":"MachiningStep.CollidedKeyPair","href":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicHref":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicUid":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair","type":"Class"},{"name":"MachiningStepUtil","href":"Hi.MachiningSteps.MachiningStepUtil.html","topicHref":"Hi.MachiningSteps.MachiningStepUtil.html","topicUid":"Hi.MachiningSteps.MachiningStepUtil","type":"Class"},{"name":"PresentAccess","href":"Hi.MachiningSteps.PresentAccess.html","topicHref":"Hi.MachiningSteps.PresentAccess.html","topicUid":"Hi.MachiningSteps.PresentAccess","type":"Class"},{"name":"PresentAttribute","href":"Hi.MachiningSteps.PresentAttribute.html","topicHref":"Hi.MachiningSteps.PresentAttribute.html","topicUid":"Hi.MachiningSteps.PresentAttribute","type":"Class"},{"name":"PropertyAccess","href":"Hi.MachiningSteps.PropertyAccess-1.html","topicHref":"Hi.MachiningSteps.PropertyAccess-1.html","topicUid":"Hi.MachiningSteps.PropertyAccess`1","type":"Class"},{"name":"StepActualTime","href":"Hi.MachiningSteps.StepActualTime.html","topicHref":"Hi.MachiningSteps.StepActualTime.html","topicUid":"Hi.MachiningSteps.StepActualTime","type":"Class"},{"name":"StepPresentCatalog","href":"Hi.MachiningSteps.StepPresentCatalog.html","topicHref":"Hi.MachiningSteps.StepPresentCatalog.html","topicUid":"Hi.MachiningSteps.StepPresentCatalog","type":"Class"}]},{"name":"Hi.Mapping","href":"Hi.Mapping.html","topicHref":"Hi.Mapping.html","topicUid":"Hi.Mapping","type":"Namespace","items":[{"name":"CsvNcStep","href":"Hi.Mapping.CsvNcStep.html","topicHref":"Hi.Mapping.CsvNcStep.html","topicUid":"Hi.Mapping.CsvNcStep","type":"Class"},{"name":"FileToTimeShotMapping","href":"Hi.Mapping.FileToTimeShotMapping.html","topicHref":"Hi.Mapping.FileToTimeShotMapping.html","topicUid":"Hi.Mapping.FileToTimeShotMapping","type":"Class"},{"name":"IAccelerationShot","href":"Hi.Mapping.IAccelerationShot.html","topicHref":"Hi.Mapping.IAccelerationShot.html","topicUid":"Hi.Mapping.IAccelerationShot","type":"Interface"},{"name":"IForceShot","href":"Hi.Mapping.IForceShot.html","topicHref":"Hi.Mapping.IForceShot.html","topicUid":"Hi.Mapping.IForceShot","type":"Interface"},{"name":"IMomentShot","href":"Hi.Mapping.IMomentShot.html","topicHref":"Hi.Mapping.IMomentShot.html","topicUid":"Hi.Mapping.IMomentShot","type":"Interface"},{"name":"ITimeShot","href":"Hi.Mapping.ITimeShot.html","topicHref":"Hi.Mapping.ITimeShot.html","topicUid":"Hi.Mapping.ITimeShot","type":"Interface"},{"name":"MappingUtil","href":"Hi.Mapping.MappingUtil.html","topicHref":"Hi.Mapping.MappingUtil.html","topicUid":"Hi.Mapping.MappingUtil","type":"Class"},{"name":"StepTimeShotUtil","href":"Hi.Mapping.StepTimeShotUtil.html","topicHref":"Hi.Mapping.StepTimeShotUtil.html","topicUid":"Hi.Mapping.StepTimeShotUtil","type":"Class"},{"name":"StepTimeShotUtil.CycleSamplingMode","href":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicHref":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicUid":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode","type":"Enum"},{"name":"StepTimeShotUtil.GetTimeShotByFileDelegate","href":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicHref":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicUid":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate","type":"Delegate"},{"name":"TimeMapping","href":"Hi.Mapping.TimeMapping.html","topicHref":"Hi.Mapping.TimeMapping.html","topicUid":"Hi.Mapping.TimeMapping","type":"Class"}]},{"name":"Hi.Mappings","href":"Hi.Mappings.html","topicHref":"Hi.Mappings.html","topicUid":"Hi.Mappings","type":"Namespace","items":[{"name":"FileDateTimeSection","href":"Hi.Mappings.FileDateTimeSection.html","topicHref":"Hi.Mappings.FileDateTimeSection.html","topicUid":"Hi.Mappings.FileDateTimeSection","type":"Class"},{"name":"FileTimecodeDateTimeSection","href":"Hi.Mappings.FileTimecodeDateTimeSection.html","topicHref":"Hi.Mappings.FileTimecodeDateTimeSection.html","topicUid":"Hi.Mappings.FileTimecodeDateTimeSection","type":"Class"},{"name":"FileTimecodeSection","href":"Hi.Mappings.FileTimecodeSection.html","topicHref":"Hi.Mappings.FileTimecodeSection.html","topicUid":"Hi.Mappings.FileTimecodeSection","type":"Class"},{"name":"IFileTimeSection","href":"Hi.Mappings.IFileTimeSection.html","topicHref":"Hi.Mappings.IFileTimeSection.html","topicUid":"Hi.Mappings.IFileTimeSection","type":"Interface"}]},{"name":"Hi.Mech","href":"Hi.Mech.html","topicHref":"Hi.Mech.html","topicUid":"Hi.Mech","type":"Namespace","items":[{"name":"GeneralMechanism","href":"Hi.Mech.GeneralMechanism.html","topicHref":"Hi.Mech.GeneralMechanism.html","topicUid":"Hi.Mech.GeneralMechanism","type":"Class"},{"name":"IGetAnchorToSolidDictionary","href":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicHref":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicUid":"Hi.Mech.IGetAnchorToSolidDictionary","type":"Interface"},{"name":"IGetMachiningChain","href":"Hi.Mech.IGetMachiningChain.html","topicHref":"Hi.Mech.IGetMachiningChain.html","topicUid":"Hi.Mech.IGetMachiningChain","type":"Interface"},{"name":"IMachiningChain","href":"Hi.Mech.IMachiningChain.html","topicHref":"Hi.Mech.IMachiningChain.html","topicUid":"Hi.Mech.IMachiningChain","type":"Interface"},{"name":"IMachiningChainSource","href":"Hi.Mech.IMachiningChainSource.html","topicHref":"Hi.Mech.IMachiningChainSource.html","topicUid":"Hi.Mech.IMachiningChainSource","type":"Interface"},{"name":"MachiningChainUtil","href":"Hi.Mech.MachiningChainUtil.html","topicHref":"Hi.Mech.MachiningChainUtil.html","topicUid":"Hi.Mech.MachiningChainUtil","type":"Class"}]},{"name":"Hi.Mech.Topo","href":"Hi.Mech.Topo.html","topicHref":"Hi.Mech.Topo.html","topicUid":"Hi.Mech.Topo","type":"Namespace","items":[{"name":"Anchor","href":"Hi.Mech.Topo.Anchor.html","topicHref":"Hi.Mech.Topo.Anchor.html","topicUid":"Hi.Mech.Topo.Anchor","type":"Class"},{"name":"AnchorFuncSource","href":"Hi.Mech.Topo.AnchorFuncSource.html","topicHref":"Hi.Mech.Topo.AnchorFuncSource.html","topicUid":"Hi.Mech.Topo.AnchorFuncSource","type":"Class"},{"name":"AnchoredBoxable","href":"Hi.Mech.Topo.AnchoredBoxable.html","topicHref":"Hi.Mech.Topo.AnchoredBoxable.html","topicUid":"Hi.Mech.Topo.AnchoredBoxable","type":"Class"},{"name":"AnchoredDisplayee","href":"Hi.Mech.Topo.AnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.AnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.AnchoredDisplayee","type":"Class"},{"name":"Asmb","href":"Hi.Mech.Topo.Asmb.html","topicHref":"Hi.Mech.Topo.Asmb.html","topicUid":"Hi.Mech.Topo.Asmb","type":"Class"},{"name":"AsmbDraw","href":"Hi.Mech.Topo.AsmbDraw.html","topicHref":"Hi.Mech.Topo.AsmbDraw.html","topicUid":"Hi.Mech.Topo.AsmbDraw","type":"Class"},{"name":"Branch","href":"Hi.Mech.Topo.Branch.html","topicHref":"Hi.Mech.Topo.Branch.html","topicUid":"Hi.Mech.Topo.Branch","type":"Class"},{"name":"DirectionBranchEntry","href":"Hi.Mech.Topo.DirectionBranchEntry.html","topicHref":"Hi.Mech.Topo.DirectionBranchEntry.html","topicUid":"Hi.Mech.Topo.DirectionBranchEntry","type":"Class"},{"name":"DirectionBranchPackUtil","href":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicHref":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicUid":"Hi.Mech.Topo.DirectionBranchPackUtil","type":"Class"},{"name":"DynamicFreeform","href":"Hi.Mech.Topo.DynamicFreeform.html","topicHref":"Hi.Mech.Topo.DynamicFreeform.html","topicUid":"Hi.Mech.Topo.DynamicFreeform","type":"Class"},{"name":"DynamicRotation","href":"Hi.Mech.Topo.DynamicRotation.html","topicHref":"Hi.Mech.Topo.DynamicRotation.html","topicUid":"Hi.Mech.Topo.DynamicRotation","type":"Class"},{"name":"DynamicTranslation","href":"Hi.Mech.Topo.DynamicTranslation.html","topicHref":"Hi.Mech.Topo.DynamicTranslation.html","topicUid":"Hi.Mech.Topo.DynamicTranslation","type":"Class"},{"name":"GeneralTransform","href":"Hi.Mech.Topo.GeneralTransform.html","topicHref":"Hi.Mech.Topo.GeneralTransform.html","topicUid":"Hi.Mech.Topo.GeneralTransform","type":"Class"},{"name":"IAnchoredDisplayee","href":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.IAnchoredDisplayee","type":"Interface"},{"name":"IDynamicRegular","href":"Hi.Mech.Topo.IDynamicRegular.html","topicHref":"Hi.Mech.Topo.IDynamicRegular.html","topicUid":"Hi.Mech.Topo.IDynamicRegular","type":"Interface"},{"name":"IDynamicRotation","href":"Hi.Mech.Topo.IDynamicRotation.html","topicHref":"Hi.Mech.Topo.IDynamicRotation.html","topicUid":"Hi.Mech.Topo.IDynamicRotation","type":"Interface"},{"name":"IDynamicTransformer","href":"Hi.Mech.Topo.IDynamicTransformer.html","topicHref":"Hi.Mech.Topo.IDynamicTransformer.html","topicUid":"Hi.Mech.Topo.IDynamicTransformer","type":"Interface"},{"name":"IGetAnchor","href":"Hi.Mech.Topo.IGetAnchor.html","topicHref":"Hi.Mech.Topo.IGetAnchor.html","topicUid":"Hi.Mech.Topo.IGetAnchor","type":"Interface"},{"name":"IGetAnchoredDisplayeeList","href":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicHref":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicUid":"Hi.Mech.Topo.IGetAnchoredDisplayeeList","type":"Interface"},{"name":"IGetAsmb","href":"Hi.Mech.Topo.IGetAsmb.html","topicHref":"Hi.Mech.Topo.IGetAsmb.html","topicUid":"Hi.Mech.Topo.IGetAsmb","type":"Interface"},{"name":"IGetFletchBuckle","href":"Hi.Mech.Topo.IGetFletchBuckle.html","topicHref":"Hi.Mech.Topo.IGetFletchBuckle.html","topicUid":"Hi.Mech.Topo.IGetFletchBuckle","type":"Interface"},{"name":"IGetInverseTransformer","href":"Hi.Mech.Topo.IGetInverseTransformer.html","topicHref":"Hi.Mech.Topo.IGetInverseTransformer.html","topicUid":"Hi.Mech.Topo.IGetInverseTransformer","type":"Interface"},{"name":"IGetTopoIndex","href":"Hi.Mech.Topo.IGetTopoIndex.html","topicHref":"Hi.Mech.Topo.IGetTopoIndex.html","topicUid":"Hi.Mech.Topo.IGetTopoIndex","type":"Interface"},{"name":"IStaticTransformer","href":"Hi.Mech.Topo.IStaticTransformer.html","topicHref":"Hi.Mech.Topo.IStaticTransformer.html","topicUid":"Hi.Mech.Topo.IStaticTransformer","type":"Interface"},{"name":"ITopo","href":"Hi.Mech.Topo.ITopo.html","topicHref":"Hi.Mech.Topo.ITopo.html","topicUid":"Hi.Mech.Topo.ITopo","type":"Interface"},{"name":"ITopoDisplayee","href":"Hi.Mech.Topo.ITopoDisplayee.html","topicHref":"Hi.Mech.Topo.ITopoDisplayee.html","topicUid":"Hi.Mech.Topo.ITopoDisplayee","type":"Interface"},{"name":"ITransformer","href":"Hi.Mech.Topo.ITransformer.html","topicHref":"Hi.Mech.Topo.ITransformer.html","topicUid":"Hi.Mech.Topo.ITransformer","type":"Interface"},{"name":"ITransformerProperty","href":"Hi.Mech.Topo.ITransformerProperty.html","topicHref":"Hi.Mech.Topo.ITransformerProperty.html","topicUid":"Hi.Mech.Topo.ITransformerProperty","type":"Interface"},{"name":"NoTransform","href":"Hi.Mech.Topo.NoTransform.html","topicHref":"Hi.Mech.Topo.NoTransform.html","topicUid":"Hi.Mech.Topo.NoTransform","type":"Class"},{"name":"StackTransformer","href":"Hi.Mech.Topo.StackTransformer.html","topicHref":"Hi.Mech.Topo.StackTransformer.html","topicUid":"Hi.Mech.Topo.StackTransformer","type":"Class"},{"name":"StaticFreeform","href":"Hi.Mech.Topo.StaticFreeform.html","topicHref":"Hi.Mech.Topo.StaticFreeform.html","topicUid":"Hi.Mech.Topo.StaticFreeform","type":"Class"},{"name":"StaticRotation","href":"Hi.Mech.Topo.StaticRotation.html","topicHref":"Hi.Mech.Topo.StaticRotation.html","topicUid":"Hi.Mech.Topo.StaticRotation","type":"Class"},{"name":"StaticTranslation","href":"Hi.Mech.Topo.StaticTranslation.html","topicHref":"Hi.Mech.Topo.StaticTranslation.html","topicUid":"Hi.Mech.Topo.StaticTranslation","type":"Class"},{"name":"TopoDisplayee","href":"Hi.Mech.Topo.TopoDisplayee.html","topicHref":"Hi.Mech.Topo.TopoDisplayee.html","topicUid":"Hi.Mech.Topo.TopoDisplayee","type":"Class"},{"name":"TopoDisplayeeUtil","href":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicHref":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicUid":"Hi.Mech.Topo.TopoDisplayeeUtil","type":"Class"},{"name":"TopoReflection","href":"Hi.Mech.Topo.TopoReflection.html","topicHref":"Hi.Mech.Topo.TopoReflection.html","topicUid":"Hi.Mech.Topo.TopoReflection","type":"Class"},{"name":"TopoUtil","href":"Hi.Mech.Topo.TopoUtil.html","topicHref":"Hi.Mech.Topo.TopoUtil.html","topicUid":"Hi.Mech.Topo.TopoUtil","type":"Class"},{"name":"TransformerUtil","href":"Hi.Mech.Topo.TransformerUtil.html","topicHref":"Hi.Mech.Topo.TransformerUtil.html","topicUid":"Hi.Mech.Topo.TransformerUtil","type":"Class"}]},{"name":"Hi.Milling","href":"Hi.Milling.html","topicHref":"Hi.Milling.html","topicUid":"Hi.Milling","type":"Namespace","items":[{"name":"IGetDiameter","href":"Hi.Milling.IGetDiameter.html","topicHref":"Hi.Milling.IGetDiameter.html","topicUid":"Hi.Milling.IGetDiameter","type":"Interface"},{"name":"IGetFluteHeight","href":"Hi.Milling.IGetFluteHeight.html","topicHref":"Hi.Milling.IGetFluteHeight.html","topicUid":"Hi.Milling.IGetFluteHeight","type":"Interface"},{"name":"IGetMillingGeomBrief","href":"Hi.Milling.IGetMillingGeomBrief.html","topicHref":"Hi.Milling.IGetMillingGeomBrief.html","topicUid":"Hi.Milling.IGetMillingGeomBrief","type":"Interface"},{"name":"IGetRadialReliefAngle","href":"Hi.Milling.IGetRadialReliefAngle.html","topicHref":"Hi.Milling.IGetRadialReliefAngle.html","topicUid":"Hi.Milling.IGetRadialReliefAngle","type":"Interface"},{"name":"IMillingGeomBriefAccessor","href":"Hi.Milling.IMillingGeomBriefAccessor.html","topicHref":"Hi.Milling.IMillingGeomBriefAccessor.html","topicUid":"Hi.Milling.IMillingGeomBriefAccessor","type":"Interface"},{"name":"MillingGeomBrief","href":"Hi.Milling.MillingGeomBrief.html","topicHref":"Hi.Milling.MillingGeomBrief.html","topicUid":"Hi.Milling.MillingGeomBrief","type":"Class"},{"name":"MillingRemovalUtil","href":"Hi.Milling.MillingRemovalUtil.html","topicHref":"Hi.Milling.MillingRemovalUtil.html","topicUid":"Hi.Milling.MillingRemovalUtil","type":"Class"},{"name":"SpindleCapability","href":"Hi.Milling.SpindleCapability.html","topicHref":"Hi.Milling.SpindleCapability.html","topicUid":"Hi.Milling.SpindleCapability","type":"Class"}]},{"name":"Hi.Milling.Apts","href":"Hi.Milling.Apts.html","topicHref":"Hi.Milling.Apts.html","topicUid":"Hi.Milling.Apts","type":"Namespace","items":[{"name":"AptDerivative","href":"Hi.Milling.Apts.AptDerivative.html","topicHref":"Hi.Milling.Apts.AptDerivative.html","topicUid":"Hi.Milling.Apts.AptDerivative","type":"Class"},{"name":"BallApt","href":"Hi.Milling.Apts.BallApt.html","topicHref":"Hi.Milling.Apts.BallApt.html","topicUid":"Hi.Milling.Apts.BallApt","type":"Class"},{"name":"BullNoseApt","href":"Hi.Milling.Apts.BullNoseApt.html","topicHref":"Hi.Milling.Apts.BullNoseApt.html","topicUid":"Hi.Milling.Apts.BullNoseApt","type":"Class"},{"name":"ColumnApt","href":"Hi.Milling.Apts.ColumnApt.html","topicHref":"Hi.Milling.Apts.ColumnApt.html","topicUid":"Hi.Milling.Apts.ColumnApt","type":"Class"},{"name":"ConeApt","href":"Hi.Milling.Apts.ConeApt.html","topicHref":"Hi.Milling.Apts.ConeApt.html","topicUid":"Hi.Milling.Apts.ConeApt","type":"Class"},{"name":"ExactColumnApt","href":"Hi.Milling.Apts.ExactColumnApt.html","topicHref":"Hi.Milling.Apts.ExactColumnApt.html","topicUid":"Hi.Milling.Apts.ExactColumnApt","type":"Class"},{"name":"GeneralApt","href":"Hi.Milling.Apts.GeneralApt.html","topicHref":"Hi.Milling.Apts.GeneralApt.html","topicUid":"Hi.Milling.Apts.GeneralApt","type":"Class"},{"name":"IAptAlpha","href":"Hi.Milling.Apts.IAptAlpha.html","topicHref":"Hi.Milling.Apts.IAptAlpha.html","topicUid":"Hi.Milling.Apts.IAptAlpha","type":"Interface"},{"name":"IAptBased","href":"Hi.Milling.Apts.IAptBased.html","topicHref":"Hi.Milling.Apts.IAptBased.html","topicUid":"Hi.Milling.Apts.IAptBased","type":"Interface"},{"name":"IAptBeta","href":"Hi.Milling.Apts.IAptBeta.html","topicHref":"Hi.Milling.Apts.IAptBeta.html","topicUid":"Hi.Milling.Apts.IAptBeta","type":"Interface"},{"name":"IAptRc","href":"Hi.Milling.Apts.IAptRc.html","topicHref":"Hi.Milling.Apts.IAptRc.html","topicUid":"Hi.Milling.Apts.IAptRc","type":"Interface"},{"name":"IAptRr","href":"Hi.Milling.Apts.IAptRr.html","topicHref":"Hi.Milling.Apts.IAptRr.html","topicUid":"Hi.Milling.Apts.IAptRr","type":"Interface"},{"name":"IAptRz","href":"Hi.Milling.Apts.IAptRz.html","topicHref":"Hi.Milling.Apts.IAptRz.html","topicUid":"Hi.Milling.Apts.IAptRz","type":"Interface"},{"name":"IGetApt","href":"Hi.Milling.Apts.IGetApt.html","topicHref":"Hi.Milling.Apts.IGetApt.html","topicUid":"Hi.Milling.Apts.IGetApt","type":"Interface"},{"name":"IGetGeneralApt","href":"Hi.Milling.Apts.IGetGeneralApt.html","topicHref":"Hi.Milling.Apts.IGetGeneralApt.html","topicUid":"Hi.Milling.Apts.IGetGeneralApt","type":"Interface"},{"name":"TaperApt","href":"Hi.Milling.Apts.TaperApt.html","topicHref":"Hi.Milling.Apts.TaperApt.html","topicUid":"Hi.Milling.Apts.TaperApt","type":"Class"},{"name":"apt_t","href":"Hi.Milling.Apts.apt_t.html","topicHref":"Hi.Milling.Apts.apt_t.html","topicUid":"Hi.Milling.Apts.apt_t","type":"Struct"}]},{"name":"Hi.Milling.Cutters","href":"Hi.Milling.Cutters.html","topicHref":"Hi.Milling.Cutters.html","topicUid":"Hi.Milling.Cutters","type":"Namespace","items":[{"name":"AptProfile","href":"Hi.Milling.Cutters.AptProfile.html","topicHref":"Hi.Milling.Cutters.AptProfile.html","topicUid":"Hi.Milling.Cutters.AptProfile","type":"Class"},{"name":"ConstRatioProfile","href":"Hi.Milling.Cutters.ConstRatioProfile.html","topicHref":"Hi.Milling.Cutters.ConstRatioProfile.html","topicUid":"Hi.Milling.Cutters.ConstRatioProfile","type":"Class"},{"name":"CustomSpinningProfile","href":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicHref":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicUid":"Hi.Milling.Cutters.CustomSpinningProfile","type":"Class"},{"name":"CutterUtil","href":"Hi.Milling.Cutters.CutterUtil.html","topicHref":"Hi.Milling.Cutters.CutterUtil.html","topicUid":"Hi.Milling.Cutters.CutterUtil","type":"Class"},{"name":"FluteContourDisplayee","href":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicHref":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicUid":"Hi.Milling.Cutters.FluteContourDisplayee","type":"Class"},{"name":"FluteDependentRatioProfile","href":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicHref":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicUid":"Hi.Milling.Cutters.FluteDependentRatioProfile","type":"Class"},{"name":"IShaperProfile","href":"Hi.Milling.Cutters.IShaperProfile.html","topicHref":"Hi.Milling.Cutters.IShaperProfile.html","topicUid":"Hi.Milling.Cutters.IShaperProfile","type":"Interface"},{"name":"MillingCutter","href":"Hi.Milling.Cutters.MillingCutter.html","topicHref":"Hi.Milling.Cutters.MillingCutter.html","topicUid":"Hi.Milling.Cutters.MillingCutter","type":"Class"},{"name":"MillingCutter.IntegralModeEnum","href":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum","type":"Enum"},{"name":"MillingCutter.MassAssignmentMode","href":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicHref":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicUid":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode","type":"Enum"},{"name":"MillingCutterEditorDisplayee","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee","type":"Class"},{"name":"MillingCutterEditorDisplayee.ShapeModeEnum","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum","type":"Enum"}]},{"name":"Hi.Milling.Engagements","href":"Hi.Milling.Engagements.html","topicHref":"Hi.Milling.Engagements.html","topicUid":"Hi.Milling.Engagements","type":"Namespace","items":[{"name":"BitwiseMillingEngagement","href":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicHref":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicUid":"Hi.Milling.Engagements.BitwiseMillingEngagement","type":"Class"},{"name":"EngagementLayer","href":"Hi.Milling.Engagements.EngagementLayer.html","topicHref":"Hi.Milling.Engagements.EngagementLayer.html","topicUid":"Hi.Milling.Engagements.EngagementLayer","type":"Class"},{"name":"EngagementSlice","href":"Hi.Milling.Engagements.EngagementSlice.html","topicHref":"Hi.Milling.Engagements.EngagementSlice.html","topicUid":"Hi.Milling.Engagements.EngagementSlice","type":"Class"},{"name":"IBitwiseMillingEngagementSupport","href":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicHref":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicUid":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport","type":"Interface"},{"name":"IGetLayerMillingEngagement","href":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.IGetLayerMillingEngagement","type":"Interface"},{"name":"LayerMillingEngagement","href":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.LayerMillingEngagement","type":"Class"},{"name":"MillingEngagementUtil","href":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicHref":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicUid":"Hi.Milling.Engagements.MillingEngagementUtil","type":"Class"}]},{"name":"Hi.Milling.FluteContours","href":"Hi.Milling.FluteContours.html","topicHref":"Hi.Milling.FluteContours.html","topicUid":"Hi.Milling.FluteContours","type":"Namespace","items":[{"name":"ConstHelixSideContour","href":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicHref":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicUid":"Hi.Milling.FluteContours.ConstHelixSideContour","type":"Class"},{"name":"FluteContour","href":"Hi.Milling.FluteContours.FluteContour.html","topicHref":"Hi.Milling.FluteContours.FluteContour.html","topicUid":"Hi.Milling.FluteContours.FluteContour","type":"Class"},{"name":"FluteContourUtil","href":"Hi.Milling.FluteContours.FluteContourUtil.html","topicHref":"Hi.Milling.FluteContours.FluteContourUtil.html","topicUid":"Hi.Milling.FluteContours.FluteContourUtil","type":"Class"},{"name":"FreeFluting","href":"Hi.Milling.FluteContours.FreeFluting.html","topicHref":"Hi.Milling.FluteContours.FreeFluting.html","topicUid":"Hi.Milling.FluteContours.FreeFluting","type":"Class"},{"name":"FreeformBottomContour","href":"Hi.Milling.FluteContours.FreeformBottomContour.html","topicHref":"Hi.Milling.FluteContours.FreeformBottomContour.html","topicUid":"Hi.Milling.FluteContours.FreeformBottomContour","type":"Class"},{"name":"FreeformSideContour","href":"Hi.Milling.FluteContours.FreeformSideContour.html","topicHref":"Hi.Milling.FluteContours.FreeformSideContour.html","topicUid":"Hi.Milling.FluteContours.FreeformSideContour","type":"Class"},{"name":"IBottomContour","href":"Hi.Milling.FluteContours.IBottomContour.html","topicHref":"Hi.Milling.FluteContours.IBottomContour.html","topicUid":"Hi.Milling.FluteContours.IBottomContour","type":"Interface"},{"name":"IFluteNumSourceProperty","href":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicHref":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicUid":"Hi.Milling.FluteContours.IFluteNumSourceProperty","type":"Interface"},{"name":"IFluting","href":"Hi.Milling.FluteContours.IFluting.html","topicHref":"Hi.Milling.FluteContours.IFluting.html","topicUid":"Hi.Milling.FluteContours.IFluting","type":"Interface"},{"name":"IGetFluteNum","href":"Hi.Milling.FluteContours.IGetFluteNum.html","topicHref":"Hi.Milling.FluteContours.IGetFluteNum.html","topicUid":"Hi.Milling.FluteContours.IGetFluteNum","type":"Interface"},{"name":"ISideContour","href":"Hi.Milling.FluteContours.ISideContour.html","topicHref":"Hi.Milling.FluteContours.ISideContour.html","topicUid":"Hi.Milling.FluteContours.ISideContour","type":"Interface"},{"name":"IWorkingContour","href":"Hi.Milling.FluteContours.IWorkingContour.html","topicHref":"Hi.Milling.FluteContours.IWorkingContour.html","topicUid":"Hi.Milling.FluteContours.IWorkingContour","type":"Interface"},{"name":"ShiftedWorkingContour","href":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicHref":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicUid":"Hi.Milling.FluteContours.ShiftedWorkingContour","type":"Class"},{"name":"SideContourDisplayee","href":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicHref":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicUid":"Hi.Milling.FluteContours.SideContourDisplayee","type":"Class"},{"name":"SlideBottomContour","href":"Hi.Milling.FluteContours.SlideBottomContour.html","topicHref":"Hi.Milling.FluteContours.SlideBottomContour.html","topicUid":"Hi.Milling.FluteContours.SlideBottomContour","type":"Class"},{"name":"SpanContourPos4d","href":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicHref":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicUid":"Hi.Milling.FluteContours.SpanContourPos4d","type":"Class"},{"name":"UniformFluting","href":"Hi.Milling.FluteContours.UniformFluting.html","topicHref":"Hi.Milling.FluteContours.UniformFluting.html","topicUid":"Hi.Milling.FluteContours.UniformFluting","type":"Class"}]},{"name":"Hi.Milling.MillingTools","href":"Hi.Milling.MillingTools.html","topicHref":"Hi.Milling.MillingTools.html","topicUid":"Hi.Milling.MillingTools","type":"Namespace","items":[{"name":"MillingTool","href":"Hi.Milling.MillingTools.MillingTool.html","topicHref":"Hi.Milling.MillingTools.MillingTool.html","topicUid":"Hi.Milling.MillingTools.MillingTool","type":"Class"},{"name":"MillingToolAnchorReference","href":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicHref":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicUid":"Hi.Milling.MillingTools.MillingToolAnchorReference","type":"Enum"},{"name":"MillingToolEditorDisplayee","href":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicHref":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicUid":"Hi.Milling.MillingTools.MillingToolEditorDisplayee","type":"Class"},{"name":"MillingToolPhysicsPack","href":"Hi.Milling.MillingTools.MillingToolPhysicsPack.html","topicHref":"Hi.Milling.MillingTools.MillingToolPhysicsPack.html","topicUid":"Hi.Milling.MillingTools.MillingToolPhysicsPack","type":"Class"},{"name":"MillingToolUtil","href":"Hi.Milling.MillingTools.MillingToolUtil.html","topicHref":"Hi.Milling.MillingTools.MillingToolUtil.html","topicUid":"Hi.Milling.MillingTools.MillingToolUtil","type":"Class"}]},{"name":"Hi.MillingForces","href":"Hi.MillingForces.html","topicHref":"Hi.MillingForces.html","topicUid":"Hi.MillingForces","type":"Namespace","items":[{"name":"IGetMillingForce","href":"Hi.MillingForces.IGetMillingForce.html","topicHref":"Hi.MillingForces.IGetMillingForce.html","topicUid":"Hi.MillingForces.IGetMillingForce","type":"Interface"},{"name":"IMillingForceAccessor","href":"Hi.MillingForces.IMillingForceAccessor.html","topicHref":"Hi.MillingForces.IMillingForceAccessor.html","topicUid":"Hi.MillingForces.IMillingForceAccessor","type":"Interface"},{"name":"MillingForce","href":"Hi.MillingForces.MillingForce.html","topicHref":"Hi.MillingForces.MillingForce.html","topicUid":"Hi.MillingForces.MillingForce","type":"Class"},{"name":"MillingForceLicense","href":"Hi.MillingForces.MillingForceLicense.html","topicHref":"Hi.MillingForces.MillingForceLicense.html","topicUid":"Hi.MillingForces.MillingForceLicense","type":"Class"},{"name":"MillingForceLuggage","href":"Hi.MillingForces.MillingForceLuggage.html","topicHref":"Hi.MillingForces.MillingForceLuggage.html","topicUid":"Hi.MillingForces.MillingForceLuggage","type":"Class"},{"name":"MillingForceUtil","href":"Hi.MillingForces.MillingForceUtil.html","topicHref":"Hi.MillingForces.MillingForceUtil.html","topicUid":"Hi.MillingForces.MillingForceUtil","type":"Class"},{"name":"MillingPhysicsBrief","href":"Hi.MillingForces.MillingPhysicsBrief.html","topicHref":"Hi.MillingForces.MillingPhysicsBrief.html","topicUid":"Hi.MillingForces.MillingPhysicsBrief","type":"Class"},{"name":"PhysicsUtil","href":"Hi.MillingForces.PhysicsUtil.html","topicHref":"Hi.MillingForces.PhysicsUtil.html","topicUid":"Hi.MillingForces.PhysicsUtil","type":"Class"},{"name":"ToolObservationReference","href":"Hi.MillingForces.ToolObservationReference.html","topicHref":"Hi.MillingForces.ToolObservationReference.html","topicUid":"Hi.MillingForces.ToolObservationReference","type":"Enum"}]},{"name":"Hi.MillingForces.Fittings","href":"Hi.MillingForces.Fittings.html","topicHref":"Hi.MillingForces.Fittings.html","topicUid":"Hi.MillingForces.Fittings","type":"Namespace","items":[{"name":"CuttingParaUtil","href":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicHref":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicUid":"Hi.MillingForces.Fittings.CuttingParaUtil","type":"Class"},{"name":"ICuttingPara","href":"Hi.MillingForces.Fittings.ICuttingPara.html","topicHref":"Hi.MillingForces.Fittings.ICuttingPara.html","topicUid":"Hi.MillingForces.Fittings.ICuttingPara","type":"Interface"},{"name":"IGetCuttingPara","href":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicHref":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicUid":"Hi.MillingForces.Fittings.IGetCuttingPara","type":"Interface"},{"name":"SampleCategory","href":"Hi.MillingForces.Fittings.SampleCategory.html","topicHref":"Hi.MillingForces.Fittings.SampleCategory.html","topicUid":"Hi.MillingForces.Fittings.SampleCategory","type":"Class"},{"name":"SampleFlag","href":"Hi.MillingForces.Fittings.SampleFlag.html","topicHref":"Hi.MillingForces.Fittings.SampleFlag.html","topicUid":"Hi.MillingForces.Fittings.SampleFlag","type":"Enum"},{"name":"SampleFlagUtil","href":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicHref":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicUid":"Hi.MillingForces.Fittings.SampleFlagUtil","type":"Class"},{"name":"SampleInstance","href":"Hi.MillingForces.Fittings.SampleInstance.html","topicHref":"Hi.MillingForces.Fittings.SampleInstance.html","topicUid":"Hi.MillingForces.Fittings.SampleInstance","type":"Class"},{"name":"TimeForce","href":"Hi.MillingForces.Fittings.TimeForce.html","topicHref":"Hi.MillingForces.Fittings.TimeForce.html","topicUid":"Hi.MillingForces.Fittings.TimeForce","type":"Class"},{"name":"TimeForceFrequencyDomain","href":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicHref":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicUid":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain","type":"Class"},{"name":"TimeForceSeries","href":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeForceSeries","type":"Class"},{"name":"TimeForceUtil","href":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicHref":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicUid":"Hi.MillingForces.Fittings.TimeForceUtil","type":"Class"},{"name":"TimeVsForceSeries","href":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsForceSeries","type":"Class"},{"name":"TimeVsTorqueSeries","href":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsTorqueSeries","type":"Class"},{"name":"TrainingSample","href":"Hi.MillingForces.Fittings.TrainingSample.html","topicHref":"Hi.MillingForces.Fittings.TrainingSample.html","topicUid":"Hi.MillingForces.Fittings.TrainingSample","type":"Class"}]},{"name":"Hi.MillingForces.ProfileMillingParas","href":"Hi.MillingForces.ProfileMillingParas.html","topicHref":"Hi.MillingForces.ProfileMillingParas.html","topicUid":"Hi.MillingForces.ProfileMillingParas","type":"Namespace","items":[{"name":"IGetLocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara","type":"Interface"},{"name":"LocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara","type":"Class"},{"name":"ProfileMillingParaMap","href":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicHref":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicUid":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap","type":"Class"},{"name":"RtaMillingParaKey","href":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicHref":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicUid":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey","type":"Enum"}]},{"name":"Hi.MillingForces.RakeFaceCuttingParas","href":"Hi.MillingForces.RakeFaceCuttingParas.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas","type":"Namespace","items":[{"name":"IRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara","type":"Interface"},{"name":"MillingPhysicsUtil","href":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil","type":"Class"},{"name":"MultiFormRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara","type":"Class"},{"name":"RakeFaceCuttingPara2d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d","type":"Class"},{"name":"RakeFaceCuttingPara3d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d","type":"Class"},{"name":"RakeFaceCuttingParaMap","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap","type":"Class"}]},{"name":"Hi.MillingForces.Training","href":"Hi.MillingForces.Training.html","topicHref":"Hi.MillingForces.Training.html","topicUid":"Hi.MillingForces.Training","type":"Namespace","items":[{"name":"MillingParaTrainResult","href":"Hi.MillingForces.Training.MillingParaTrainResult.html","topicHref":"Hi.MillingForces.Training.MillingParaTrainResult.html","topicUid":"Hi.MillingForces.Training.MillingParaTrainResult","type":"Class"},{"name":"MillingTraining","href":"Hi.MillingForces.Training.MillingTraining.html","topicHref":"Hi.MillingForces.Training.MillingTraining.html","topicUid":"Hi.MillingForces.Training.MillingTraining","type":"Class"}]},{"name":"Hi.MillingProcs","href":"Hi.MillingProcs.html","topicHref":"Hi.MillingProcs.html","topicUid":"Hi.MillingProcs","type":"Namespace","items":[{"name":"MillingGuide","href":"Hi.MillingProcs.MillingGuide.html","topicHref":"Hi.MillingProcs.MillingGuide.html","topicUid":"Hi.MillingProcs.MillingGuide","type":"Class"}]},{"name":"Hi.MillingStepUtils","href":"Hi.MillingStepUtils.html","topicHref":"Hi.MillingStepUtils.html","topicUid":"Hi.MillingStepUtils","type":"Namespace","items":[{"name":"ClStripChartConfig","href":"Hi.MillingStepUtils.ClStripChartConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartConfig","type":"Class"},{"name":"ClStripChartItemConfig","href":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartItemConfig","type":"Class"},{"name":"ForceCycleFlag","href":"Hi.MillingStepUtils.ForceCycleFlag.html","topicHref":"Hi.MillingStepUtils.ForceCycleFlag.html","topicUid":"Hi.MillingStepUtils.ForceCycleFlag","type":"Enum"},{"name":"ForceCycleLineDivConfig","href":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.ForceCycleLineDivConfig","type":"Class"},{"name":"LineChartVRangeMode","href":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicHref":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicUid":"Hi.MillingStepUtils.LineChartVRangeMode","type":"Enum"},{"name":"SpindleMomentCycleLineDivConfig","href":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig","type":"Class"},{"name":"TimeChartYConfig","href":"Hi.MillingStepUtils.TimeChartYConfig.html","topicHref":"Hi.MillingStepUtils.TimeChartYConfig.html","topicUid":"Hi.MillingStepUtils.TimeChartYConfig","type":"Class"}]},{"name":"Hi.MillingSteps","href":"Hi.MillingSteps.html","topicHref":"Hi.MillingSteps.html","topicUid":"Hi.MillingSteps","type":"Namespace","items":[{"name":"MillingInstance","href":"Hi.MillingSteps.MillingInstance.html","topicHref":"Hi.MillingSteps.MillingInstance.html","topicUid":"Hi.MillingSteps.MillingInstance","type":"Class"},{"name":"MillingStepLuggage","href":"Hi.MillingSteps.MillingStepLuggage.html","topicHref":"Hi.MillingSteps.MillingStepLuggage.html","topicUid":"Hi.MillingSteps.MillingStepLuggage","type":"Class"}]},{"name":"Hi.Motion","href":"Hi.Motion.html","topicHref":"Hi.Motion.html","topicUid":"Hi.Motion","type":"Namespace","items":[{"name":"MotionUtil","href":"Hi.Motion.MotionUtil.html","topicHref":"Hi.Motion.MotionUtil.html","topicUid":"Hi.Motion.MotionUtil","type":"Class"}]},{"name":"Hi.Motion.MatValves","href":"Hi.Motion.MatValves.html","topicHref":"Hi.Motion.MatValves.html","topicUid":"Hi.Motion.MatValves","type":"Namespace","items":[{"name":"ClMachiningValve","href":"Hi.Motion.MatValves.ClMachiningValve.html","topicHref":"Hi.Motion.MatValves.ClMachiningValve.html","topicUid":"Hi.Motion.MatValves.ClMachiningValve","type":"Class"},{"name":"IMotionValve","href":"Hi.Motion.MatValves.IMotionValve.html","topicHref":"Hi.Motion.MatValves.IMotionValve.html","topicUid":"Hi.Motion.MatValves.IMotionValve","type":"Interface"},{"name":"MacroMotionValve","href":"Hi.Motion.MatValves.MacroMotionValve.html","topicHref":"Hi.Motion.MatValves.MacroMotionValve.html","topicUid":"Hi.Motion.MatValves.MacroMotionValve","type":"Class"},{"name":"StepMotionValve","href":"Hi.Motion.MatValves.StepMotionValve.html","topicHref":"Hi.Motion.MatValves.StepMotionValve.html","topicUid":"Hi.Motion.MatValves.StepMotionValve","type":"Class"}]},{"name":"Hi.Native","href":"Hi.Native.html","topicHref":"Hi.Native.html","topicUid":"Hi.Native","type":"Namespace","items":[{"name":"StopSource","href":"Hi.Native.StopSource.html","topicHref":"Hi.Native.StopSource.html","topicUid":"Hi.Native.StopSource","type":"Class"},{"name":"StopToken","href":"Hi.Native.StopToken.html","topicHref":"Hi.Native.StopToken.html","topicUid":"Hi.Native.StopToken","type":"Class"},{"name":"StopTokenKit","href":"Hi.Native.StopTokenKit.html","topicHref":"Hi.Native.StopTokenKit.html","topicUid":"Hi.Native.StopTokenKit","type":"Class"},{"name":"StopTokenUtil","href":"Hi.Native.StopTokenUtil.html","topicHref":"Hi.Native.StopTokenUtil.html","topicUid":"Hi.Native.StopTokenUtil","type":"Class"},{"name":"bind_t","href":"Hi.Native.bind_t.html","topicHref":"Hi.Native.bind_t.html","topicUid":"Hi.Native.bind_t","type":"Struct"},{"name":"box2d","href":"Hi.Native.box2d.html","topicHref":"Hi.Native.box2d.html","topicUid":"Hi.Native.box2d","type":"Struct"},{"name":"box3d","href":"Hi.Native.box3d.html","topicHref":"Hi.Native.box3d.html","topicUid":"Hi.Native.box3d","type":"Struct"},{"name":"expand_to_box3d_func_t","href":"Hi.Native.expand_to_box3d_func_t.html","topicHref":"Hi.Native.expand_to_box3d_func_t.html","topicUid":"Hi.Native.expand_to_box3d_func_t","type":"Delegate"},{"name":"key_event_t","href":"Hi.Native.key_event_t.html","topicHref":"Hi.Native.key_event_t.html","topicUid":"Hi.Native.key_event_t","type":"Struct"},{"name":"key_table__transform_view_by_key_pressing_t","href":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicHref":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicUid":"Hi.Native.key_table__transform_view_by_key_pressing_t","type":"Struct"},{"name":"mat4d","href":"Hi.Native.mat4d.html","topicHref":"Hi.Native.mat4d.html","topicUid":"Hi.Native.mat4d","type":"Struct"},{"name":"mat_stack_t","href":"Hi.Native.mat_stack_t.html","topicHref":"Hi.Native.mat_stack_t.html","topicUid":"Hi.Native.mat_stack_t","type":"Struct"},{"name":"mouse_button_event_t","href":"Hi.Native.mouse_button_event_t.html","topicHref":"Hi.Native.mouse_button_event_t.html","topicUid":"Hi.Native.mouse_button_event_t","type":"Struct"},{"name":"mouse_button_table__transform_view_by_mouse_drag_t","href":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicHref":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicUid":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t","type":"Struct"},{"name":"mouse_move_event_t","href":"Hi.Native.mouse_move_event_t.html","topicHref":"Hi.Native.mouse_move_event_t.html","topicUid":"Hi.Native.mouse_move_event_t","type":"Struct"},{"name":"mouse_wheel_event_t","href":"Hi.Native.mouse_wheel_event_t.html","topicHref":"Hi.Native.mouse_wheel_event_t.html","topicUid":"Hi.Native.mouse_wheel_event_t","type":"Struct"},{"name":"panel_state_t","href":"Hi.Native.panel_state_t.html","topicHref":"Hi.Native.panel_state_t.html","topicUid":"Hi.Native.panel_state_t","type":"Struct"},{"name":"picking_event_t","href":"Hi.Native.picking_event_t.html","topicHref":"Hi.Native.picking_event_t.html","topicUid":"Hi.Native.picking_event_t","type":"Struct"},{"name":"picking_mark_t","href":"Hi.Native.picking_mark_t.html","topicHref":"Hi.Native.picking_mark_t.html","topicUid":"Hi.Native.picking_mark_t","type":"Struct"},{"name":"tri3d","href":"Hi.Native.tri3d.html","topicHref":"Hi.Native.tri3d.html","topicUid":"Hi.Native.tri3d","type":"Struct"},{"name":"ui_event_type","href":"Hi.Native.ui_event_type.html","topicHref":"Hi.Native.ui_event_type.html","topicUid":"Hi.Native.ui_event_type","type":"Enum"},{"name":"vec2d","href":"Hi.Native.vec2d.html","topicHref":"Hi.Native.vec2d.html","topicUid":"Hi.Native.vec2d","type":"Struct"},{"name":"vec3d","href":"Hi.Native.vec3d.html","topicHref":"Hi.Native.vec3d.html","topicUid":"Hi.Native.vec3d","type":"Struct"},{"name":"vec3f","href":"Hi.Native.vec3f.html","topicHref":"Hi.Native.vec3f.html","topicUid":"Hi.Native.vec3f","type":"Struct"}]},{"name":"Hi.NcMech","href":"Hi.NcMech.html","topicHref":"Hi.NcMech.html","topicUid":"Hi.NcMech","type":"Namespace","items":[{"name":"ICollisionIndexPairsSource","href":"Hi.NcMech.ICollisionIndexPairsSource.html","topicHref":"Hi.NcMech.ICollisionIndexPairsSource.html","topicUid":"Hi.NcMech.ICollisionIndexPairsSource","type":"Interface"}]},{"name":"Hi.NcMech.Fixtures","href":"Hi.NcMech.Fixtures.html","topicHref":"Hi.NcMech.Fixtures.html","topicUid":"Hi.NcMech.Fixtures","type":"Namespace","items":[{"name":"Fixture","href":"Hi.NcMech.Fixtures.Fixture.html","topicHref":"Hi.NcMech.Fixtures.Fixture.html","topicUid":"Hi.NcMech.Fixtures.Fixture","type":"Class"},{"name":"FixtureEditorDisplayee","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayee","type":"Class"},{"name":"FixtureEditorDisplayeeConfig","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig","type":"Class"}]},{"name":"Hi.NcMech.Holders","href":"Hi.NcMech.Holders.html","topicHref":"Hi.NcMech.Holders.html","topicUid":"Hi.NcMech.Holders","type":"Namespace","items":[{"name":"CylindroidHolder","href":"Hi.NcMech.Holders.CylindroidHolder.html","topicHref":"Hi.NcMech.Holders.CylindroidHolder.html","topicUid":"Hi.NcMech.Holders.CylindroidHolder","type":"Class"},{"name":"FreeformHolder","href":"Hi.NcMech.Holders.FreeformHolder.html","topicHref":"Hi.NcMech.Holders.FreeformHolder.html","topicUid":"Hi.NcMech.Holders.FreeformHolder","type":"Class"},{"name":"HolderEditorDisplayee","href":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicHref":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicUid":"Hi.NcMech.Holders.HolderEditorDisplayee","type":"Class"},{"name":"IHolder","href":"Hi.NcMech.Holders.IHolder.html","topicHref":"Hi.NcMech.Holders.IHolder.html","topicUid":"Hi.NcMech.Holders.IHolder","type":"Interface"}]},{"name":"Hi.NcMech.Solids","href":"Hi.NcMech.Solids.html","topicHref":"Hi.NcMech.Solids.html","topicUid":"Hi.NcMech.Solids","type":"Namespace","items":[{"name":"CollisionRedScope","href":"Hi.NcMech.Solids.CollisionRedScope.html","topicHref":"Hi.NcMech.Solids.CollisionRedScope.html","topicUid":"Hi.NcMech.Solids.CollisionRedScope","type":"Class"},{"name":"CollisionRedScope.Scope","href":"Hi.NcMech.Solids.CollisionRedScope.Scope.html","topicHref":"Hi.NcMech.Solids.CollisionRedScope.Scope.html","topicUid":"Hi.NcMech.Solids.CollisionRedScope.Scope","type":"Struct"},{"name":"IGetSolid","href":"Hi.NcMech.Solids.IGetSolid.html","topicHref":"Hi.NcMech.Solids.IGetSolid.html","topicUid":"Hi.NcMech.Solids.IGetSolid","type":"Interface"},{"name":"Solid","href":"Hi.NcMech.Solids.Solid.html","topicHref":"Hi.NcMech.Solids.Solid.html","topicUid":"Hi.NcMech.Solids.Solid","type":"Class"},{"name":"Solid.RenderingModeEnum","href":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicHref":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicUid":"Hi.NcMech.Solids.Solid.RenderingModeEnum","type":"Enum"},{"name":"SolidFuncSource","href":"Hi.NcMech.Solids.SolidFuncSource.html","topicHref":"Hi.NcMech.Solids.SolidFuncSource.html","topicUid":"Hi.NcMech.Solids.SolidFuncSource","type":"Class"}]},{"name":"Hi.NcMech.Topo","href":"Hi.NcMech.Topo.html","topicHref":"Hi.NcMech.Topo.html","topicUid":"Hi.NcMech.Topo","type":"Namespace","items":[{"name":"INcStroke","href":"Hi.NcMech.Topo.INcStroke.html","topicHref":"Hi.NcMech.Topo.INcStroke.html","topicUid":"Hi.NcMech.Topo.INcStroke","type":"Interface"},{"name":"INcTransformer","href":"Hi.NcMech.Topo.INcTransformer.html","topicHref":"Hi.NcMech.Topo.INcTransformer.html","topicUid":"Hi.NcMech.Topo.INcTransformer","type":"Interface"},{"name":"ITopoBrick","href":"Hi.NcMech.Topo.ITopoBrick.html","topicHref":"Hi.NcMech.Topo.ITopoBrick.html","topicUid":"Hi.NcMech.Topo.ITopoBrick","type":"Interface"},{"name":"NcRotation","href":"Hi.NcMech.Topo.NcRotation.html","topicHref":"Hi.NcMech.Topo.NcRotation.html","topicUid":"Hi.NcMech.Topo.NcRotation","type":"Class"},{"name":"NcTranslation","href":"Hi.NcMech.Topo.NcTranslation.html","topicHref":"Hi.NcMech.Topo.NcTranslation.html","topicUid":"Hi.NcMech.Topo.NcTranslation","type":"Class"},{"name":"StlSourceTopoBrick","href":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicHref":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicUid":"Hi.NcMech.Topo.StlSourceTopoBrick","type":"Class"}]},{"name":"Hi.NcMech.Workpieces","href":"Hi.NcMech.Workpieces.html","topicHref":"Hi.NcMech.Workpieces.html","topicUid":"Hi.NcMech.Workpieces","type":"Namespace","items":[{"name":"Workpiece","href":"Hi.NcMech.Workpieces.Workpiece.html","topicHref":"Hi.NcMech.Workpieces.Workpiece.html","topicUid":"Hi.NcMech.Workpieces.Workpiece","type":"Class"},{"name":"WorkpieceEditorDisplayee","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee","type":"Class"},{"name":"WorkpieceEditorDisplayeeConfig","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig","type":"Class"},{"name":"WorkpieceService","href":"Hi.NcMech.Workpieces.WorkpieceService.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceService.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceService","type":"Class"}]},{"name":"Hi.NcMech.Xyzabc","href":"Hi.NcMech.Xyzabc.html","topicHref":"Hi.NcMech.Xyzabc.html","topicUid":"Hi.NcMech.Xyzabc","type":"Namespace","items":[{"name":"GeneralXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool","type":"Class"},{"name":"IXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.IXyzabcMachineTool","type":"Interface"}]},{"name":"Hi.NcOpt","href":"Hi.NcOpt.html","topicHref":"Hi.NcOpt.html","topicUid":"Hi.NcOpt","type":"Namespace","items":[{"name":"CuttingVelocityOptLimit","href":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.CuttingVelocityOptLimit","type":"Class"},{"name":"FixedFeedPerCycleOptLimit","href":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerCycleOptLimit","type":"Class"},{"name":"FixedFeedPerToothOptLimit","href":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerToothOptLimit","type":"Class"},{"name":"ICutterOptLimitHost","href":"Hi.NcOpt.ICutterOptLimitHost.html","topicHref":"Hi.NcOpt.ICutterOptLimitHost.html","topicUid":"Hi.NcOpt.ICutterOptLimitHost","type":"Interface"},{"name":"ICutterOptOption","href":"Hi.NcOpt.ICutterOptOption.html","topicHref":"Hi.NcOpt.ICutterOptOption.html","topicUid":"Hi.NcOpt.ICutterOptOption","type":"Interface"},{"name":"ICuttingVelocityOptLimit","href":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.ICuttingVelocityOptLimit","type":"Interface"},{"name":"IFeedPerToothOptLimit","href":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.IFeedPerToothOptLimit","type":"Interface"},{"name":"MillingCutterOptOption","href":"Hi.NcOpt.MillingCutterOptOption.html","topicHref":"Hi.NcOpt.MillingCutterOptOption.html","topicUid":"Hi.NcOpt.MillingCutterOptOption","type":"Class"},{"name":"NcOptOption","href":"Hi.NcOpt.NcOptOption.html","topicHref":"Hi.NcOpt.NcOptOption.html","topicUid":"Hi.NcOpt.NcOptOption","type":"Class"},{"name":"NcOptimizationEmbeddedLogMode","href":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicHref":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicUid":"Hi.NcOpt.NcOptimizationEmbeddedLogMode","type":"Enum"},{"name":"ShapeBasedCutterOptLimit","href":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicHref":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicUid":"Hi.NcOpt.ShapeBasedCutterOptLimit","type":"Class"}]},{"name":"Hi.NcParsers","href":"Hi.NcParsers.html","topicHref":"Hi.NcParsers.html","topicUid":"Hi.NcParsers","type":"Namespace","items":[{"name":"ControllerPresetWriter","href":"Hi.NcParsers.ControllerPresetWriter.html","topicHref":"Hi.NcParsers.ControllerPresetWriter.html","topicUid":"Hi.NcParsers.ControllerPresetWriter","type":"Class"},{"name":"IGetSentence","href":"Hi.NcParsers.IGetSentence.html","topicHref":"Hi.NcParsers.IGetSentence.html","topicUid":"Hi.NcParsers.IGetSentence","type":"Interface"},{"name":"ISentenceCarrier","href":"Hi.NcParsers.ISentenceCarrier.html","topicHref":"Hi.NcParsers.ISentenceCarrier.html","topicUid":"Hi.NcParsers.ISentenceCarrier","type":"Interface"},{"name":"ISentenceIndexed","href":"Hi.NcParsers.ISentenceIndexed.html","topicHref":"Hi.NcParsers.ISentenceIndexed.html","topicUid":"Hi.NcParsers.ISentenceIndexed","type":"Interface"},{"name":"ISessionResettable","href":"Hi.NcParsers.ISessionResettable.html","topicHref":"Hi.NcParsers.ISessionResettable.html","topicUid":"Hi.NcParsers.ISessionResettable","type":"Interface"},{"name":"NcCompositionGate","href":"Hi.NcParsers.NcCompositionGate.html","topicHref":"Hi.NcParsers.NcCompositionGate.html","topicUid":"Hi.NcParsers.NcCompositionGate","type":"Class"},{"name":"NcDiagnostic","href":"Hi.NcParsers.NcDiagnostic.html","topicHref":"Hi.NcParsers.NcDiagnostic.html","topicUid":"Hi.NcParsers.NcDiagnostic","type":"Class"},{"name":"NcDiagnosticProgress","href":"Hi.NcParsers.NcDiagnosticProgress.html","topicHref":"Hi.NcParsers.NcDiagnosticProgress.html","topicUid":"Hi.NcParsers.NcDiagnosticProgress","type":"Class"},{"name":"NcRunnerSuit","href":"Hi.NcParsers.NcRunnerSuit.html","topicHref":"Hi.NcParsers.NcRunnerSuit.html","topicUid":"Hi.NcParsers.NcRunnerSuit","type":"Class"},{"name":"RadiusCompInterference","href":"Hi.NcParsers.RadiusCompInterference.html","topicHref":"Hi.NcParsers.RadiusCompInterference.html","topicUid":"Hi.NcParsers.RadiusCompInterference","type":"Class"},{"name":"RadiusCompPlaneChange","href":"Hi.NcParsers.RadiusCompPlaneChange.html","topicHref":"Hi.NcParsers.RadiusCompPlaneChange.html","topicUid":"Hi.NcParsers.RadiusCompPlaneChange","type":"Class"},{"name":"Sentence","href":"Hi.NcParsers.Sentence.html","topicHref":"Hi.NcParsers.Sentence.html","topicUid":"Hi.NcParsers.Sentence","type":"Class"},{"name":"SoftNcRunner","href":"Hi.NcParsers.SoftNcRunner.html","topicHref":"Hi.NcParsers.SoftNcRunner.html","topicUid":"Hi.NcParsers.SoftNcRunner","type":"Class"},{"name":"SoftNcUtil","href":"Hi.NcParsers.SoftNcUtil.html","topicHref":"Hi.NcParsers.SoftNcUtil.html","topicUid":"Hi.NcParsers.SoftNcUtil","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys","href":"Hi.NcParsers.Dependencys.html","topicHref":"Hi.NcParsers.Dependencys.html","topicUid":"Hi.NcParsers.Dependencys","type":"Namespace","items":[{"name":"AxisType","href":"Hi.NcParsers.Dependencys.AxisType.html","topicHref":"Hi.NcParsers.Dependencys.AxisType.html","topicUid":"Hi.NcParsers.Dependencys.AxisType","type":"Enum"},{"name":"CncBrandDependency","href":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicHref":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicUid":"Hi.NcParsers.Dependencys.CncBrandDependency","type":"Class"},{"name":"ControllerParameterTableBase","href":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicHref":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicUid":"Hi.NcParsers.Dependencys.ControllerParameterTableBase","type":"Class"},{"name":"HeidenhainDatumTable","href":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicHref":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicUid":"Hi.NcParsers.Dependencys.HeidenhainDatumTable","type":"Class"},{"name":"HeidenhainDatumTableProxy","href":"Hi.NcParsers.Dependencys.HeidenhainDatumTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.HeidenhainDatumTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.HeidenhainDatumTableProxy","type":"Class"},{"name":"IBlockSkipConfig","href":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.IBlockSkipConfig","type":"Interface"},{"name":"ICannedCycleConfig","href":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicHref":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicUid":"Hi.NcParsers.Dependencys.ICannedCycleConfig","type":"Interface"},{"name":"IHomeMcConfig","href":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IHomeMcConfig","type":"Interface"},{"name":"IIndexingPositionConfig","href":"Hi.NcParsers.Dependencys.IIndexingPositionConfig.html","topicHref":"Hi.NcParsers.Dependencys.IIndexingPositionConfig.html","topicUid":"Hi.NcParsers.Dependencys.IIndexingPositionConfig","type":"Interface"},{"name":"IIsoCoordinateConfig","href":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig","type":"Interface"},{"name":"IMCodeDeclarationConfig","href":"Hi.NcParsers.Dependencys.IMCodeDeclarationConfig.html","topicHref":"Hi.NcParsers.Dependencys.IMCodeDeclarationConfig.html","topicUid":"Hi.NcParsers.Dependencys.IMCodeDeclarationConfig","type":"Interface"},{"name":"IMachineAxisConfig","href":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicHref":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicUid":"Hi.NcParsers.Dependencys.IMachineAxisConfig","type":"Interface"},{"name":"INcDependency","href":"Hi.NcParsers.Dependencys.INcDependency.html","topicHref":"Hi.NcParsers.Dependencys.INcDependency.html","topicUid":"Hi.NcParsers.Dependencys.INcDependency","type":"Interface"},{"name":"INcDependencyListHost","href":"Hi.NcParsers.Dependencys.INcDependencyListHost.html","topicHref":"Hi.NcParsers.Dependencys.INcDependencyListHost.html","topicUid":"Hi.NcParsers.Dependencys.INcDependencyListHost","type":"Interface"},{"name":"INcDependencyProxy","href":"Hi.NcParsers.Dependencys.INcDependencyProxy.html","topicHref":"Hi.NcParsers.Dependencys.INcDependencyProxy.html","topicUid":"Hi.NcParsers.Dependencys.INcDependencyProxy","type":"Interface"},{"name":"IPowerResettable","href":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicHref":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicUid":"Hi.NcParsers.Dependencys.IPowerResettable","type":"Interface"},{"name":"IRapidFeedrateConfig","href":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig","type":"Interface"},{"name":"ISpindleControlConfig","href":"Hi.NcParsers.Dependencys.ISpindleControlConfig.html","topicHref":"Hi.NcParsers.Dependencys.ISpindleControlConfig.html","topicUid":"Hi.NcParsers.Dependencys.ISpindleControlConfig","type":"Interface"},{"name":"IStrokeLimitConfig","href":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicHref":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicUid":"Hi.NcParsers.Dependencys.IStrokeLimitConfig","type":"Interface"},{"name":"IToolChangeTriggerConfig","href":"Hi.NcParsers.Dependencys.IToolChangeTriggerConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolChangeTriggerConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolChangeTriggerConfig","type":"Interface"},{"name":"IToolOffsetConfig","href":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolOffsetConfig","type":"Interface"},{"name":"IToolingMcConfig","href":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolingMcConfig","type":"Interface"},{"name":"IsoCoordinateAddressMap","href":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicHref":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicUid":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap","type":"Class"},{"name":"MCodeEffects","href":"Hi.NcParsers.Dependencys.MCodeEffects.html","topicHref":"Hi.NcParsers.Dependencys.MCodeEffects.html","topicUid":"Hi.NcParsers.Dependencys.MCodeEffects","type":"Class"},{"name":"StrokeLimitUtil","href":"Hi.NcParsers.Dependencys.StrokeLimitUtil.html","topicHref":"Hi.NcParsers.Dependencys.StrokeLimitUtil.html","topicUid":"Hi.NcParsers.Dependencys.StrokeLimitUtil","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Fanuc","href":"Hi.NcParsers.Dependencys.Fanuc.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc","type":"Namespace","items":[{"name":"CutterCompensationType","href":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType","type":"Enum"},{"name":"FanucGotoIterationDependency","href":"Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency","type":"Class"},{"name":"FanucParameterTable","href":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable","type":"Class"},{"name":"FanucParameterTableProxy","href":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTableProxy","type":"Class"},{"name":"FanucPositionVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup","type":"Class"},{"name":"FanucToolOffsetVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup","type":"Class"},{"name":"FanucWhileDoIterationDependency","href":"Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency","type":"Class"},{"name":"RetainedCommonVariableTable","href":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable","type":"Class"},{"name":"RetainedCommonVariableTableProxy","href":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTableProxy","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Generic","href":"Hi.NcParsers.Dependencys.Generic.html","topicHref":"Hi.NcParsers.Dependencys.Generic.html","topicUid":"Hi.NcParsers.Dependencys.Generic","type":"Namespace","items":[{"name":"FallbackConfig","href":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.FallbackConfig","type":"Class"},{"name":"GenericBlockSkipConfig","href":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig","type":"Class"},{"name":"IsoCoordinateTable","href":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable","type":"Class"},{"name":"IsoCoordinateTableProxy","href":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTableProxy","type":"Class"},{"name":"MachineAxisConfig","href":"Hi.NcParsers.Dependencys.Generic.MachineAxisConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.MachineAxisConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.MachineAxisConfig","type":"Class"},{"name":"RadiusOffsetBasis","href":"Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis.html","topicHref":"Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis.html","topicUid":"Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis","type":"Enum"},{"name":"SubProgramFolderConfig","href":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig","type":"Class"},{"name":"ToolOffsetRow","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow","type":"Class"},{"name":"ToolOffsetTable","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable","type":"Class"},{"name":"ToolOffsetTableProxy","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTableProxy","type":"Class"},{"name":"ToolingMcConfig","href":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Heidenhain","href":"Hi.NcParsers.Dependencys.Heidenhain.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainGotoIterationDependency","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainGotoIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainGotoIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainGotoIterationDependency","type":"Class"},{"name":"HeidenhainParameterTable","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable","type":"Class"},{"name":"HeidenhainParameterTableProxy","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTableProxy","type":"Class"},{"name":"HeidenhainQParameterTable","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTable","type":"Class"},{"name":"HeidenhainQParameterTableProxy","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTableProxy","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Siemens","href":"Hi.NcParsers.Dependencys.Siemens.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.html","topicUid":"Hi.NcParsers.Dependencys.Siemens","type":"Namespace","items":[{"name":"ISiemensToolOffsetConfig","href":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig","type":"Interface"},{"name":"SiemensFrameTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable","type":"Class"},{"name":"SiemensFrameTableProxy","href":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTableProxy","type":"Class"},{"name":"SiemensGotoIterationDependency","href":"Hi.NcParsers.Dependencys.Siemens.SiemensGotoIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensGotoIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensGotoIterationDependency","type":"Class"},{"name":"SiemensLoopIterationDependency","href":"Hi.NcParsers.Dependencys.Siemens.SiemensLoopIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensLoopIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensLoopIterationDependency","type":"Class"},{"name":"SiemensMachineDataTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable","type":"Class"},{"name":"SiemensMachineDataTableProxy","href":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTableProxy","type":"Class"},{"name":"SiemensRParameterTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTable","type":"Class"},{"name":"SiemensRParameterTableProxy","href":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTableProxy","type":"Class"},{"name":"SiemensToolEdgeOffset","href":"Hi.NcParsers.Dependencys.Siemens.SiemensToolEdgeOffset.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensToolEdgeOffset.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensToolEdgeOffset","type":"Class"},{"name":"SiemensToolOffsetTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTable","type":"Class"},{"name":"SiemensToolOffsetTableProxy","href":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTableProxy","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Syntec","href":"Hi.NcParsers.Dependencys.Syntec.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.html","topicUid":"Hi.NcParsers.Dependencys.Syntec","type":"Namespace","items":[{"name":"SyntecParameterTable","href":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable","type":"Class"},{"name":"SyntecParameterTableProxy","href":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTableProxy","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.SystemWired","href":"Hi.NcParsers.Dependencys.SystemWired.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired","type":"Namespace","items":[{"name":"FileIndexCounterDependency","href":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency","type":"Class"},{"name":"MachiningServiceDependency","href":"Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency","type":"Class"},{"name":"MappingAnchorDependency","href":"Hi.NcParsers.Dependencys.SystemWired.MappingAnchorDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.MappingAnchorDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.MappingAnchorDependency","type":"Class"},{"name":"NcKinematicsDependency","href":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency","type":"Class"},{"name":"NcLineSourceDependency","href":"Hi.NcParsers.Dependencys.SystemWired.NcLineSourceDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.NcLineSourceDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.NcLineSourceDependency","type":"Class"},{"name":"ProjectFolderDependency","href":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency","type":"Class"},{"name":"SegmenterDependency","href":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency","type":"Class"},{"name":"SentenceIndexCounterDependency","href":"Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency","type":"Class"},{"name":"StepPropertyAccessDictionaryDependency","href":"Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency","type":"Class"},{"name":"SyntaxPieceLayerDependency","href":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency","type":"Class"},{"name":"ToolHouseDependency","href":"Hi.NcParsers.Dependencys.SystemWired.ToolHouseDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.ToolHouseDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.ToolHouseDependency","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs","href":"Hi.NcParsers.EvaluationSyntaxs.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs","type":"Namespace","items":[{"name":"CallStackUtil","href":"Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.CallStackUtil","type":"Class"},{"name":"LabelScanDirection","href":"Hi.NcParsers.EvaluationSyntaxs.LabelScanDirection.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.LabelScanDirection.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.LabelScanDirection","type":"Enum"},{"name":"LabelScanUtil","href":"Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil","type":"Class"},{"name":"MacroFileResolver","href":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver","type":"Class"},{"name":"MacroFileResolver.ResolvedFile","href":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile","type":"Struct"},{"name":"MacroInlineUtil","href":"Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil","type":"Class"},{"name":"RetainedCommonVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax","type":"Class"},{"name":"SubProgramCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax","type":"Class"},{"name":"SubProgramReturnSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax","type":"Class"},{"name":"VariableEvaluatorSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax","type":"Class"},{"name":"VolatileVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Evaluation","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation","type":"Namespace","items":[{"name":"EvalResult","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult","type":"Struct"},{"name":"IRuntimeVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup","type":"Interface"},{"name":"IVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup","type":"Interface"},{"name":"LocalVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup","type":"Class"},{"name":"NcBinaryExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr","type":"Class"},{"name":"NcBinaryOp","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp","type":"Enum"},{"name":"NcExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr","type":"Class"},{"name":"NcExpressionDialect","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialect.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialect.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialect","type":"Enum"},{"name":"NcExpressionDialectUtil","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialectUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialectUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialectUtil","type":"Class"},{"name":"NcExpressionEvaluator","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator","type":"Class"},{"name":"NcExpressionParser","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser","type":"Class"},{"name":"NcFunctionExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr","type":"Class"},{"name":"NcIndirectVariableExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr","type":"Class"},{"name":"NcLiteralExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr","type":"Class"},{"name":"NcUnaryExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr","type":"Class"},{"name":"NcUnaryOp","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp","type":"Enum"},{"name":"NcVariableExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr","type":"Class"},{"name":"VolatileVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Fanuc","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc","type":"Namespace","items":[{"name":"FanucConditionReader","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader","type":"Class"},{"name":"FanucGotoSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax","type":"Class"},{"name":"FanucIfThenSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax","type":"Class"},{"name":"FanucLocalVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax","type":"Class"},{"name":"FanucMacroArgumentMap","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap","type":"Class"},{"name":"FanucMacroCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax","type":"Class"},{"name":"FanucModalMacroSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax","type":"Class"},{"name":"FanucModalMacroSyntax.SyntaxPhase","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase","type":"Enum"},{"name":"FanucSystemControlVariableSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax","type":"Class"},{"name":"FanucWhileDoSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainExpressionParser","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainExpressionParser.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainExpressionParser.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainExpressionParser","type":"Class"},{"name":"HeidenhainGotoSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainGotoSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainGotoSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainGotoSyntax","type":"Class"},{"name":"HeidenhainQParameterReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainQParameterReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainQParameterReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainQParameterReadingSyntax","type":"Class"},{"name":"HeidenhainSubProgramCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramCallSyntax","type":"Class"},{"name":"HeidenhainSubProgramReturnSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramReturnSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramReturnSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramReturnSyntax","type":"Class"},{"name":"HeidenhainVolatileQLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainVolatileQLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainVolatileQLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainVolatileQLookup","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Siemens","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens","type":"Namespace","items":[{"name":"SiemensAcIcSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensAcIcSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensAcIcSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensAcIcSyntax","type":"Class"},{"name":"SiemensExpressionParser","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensExpressionParser.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensExpressionParser.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensExpressionParser","type":"Class"},{"name":"SiemensGotoSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensGotoSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensGotoSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensGotoSyntax","type":"Class"},{"name":"SiemensIfSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensIfSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensIfSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensIfSyntax","type":"Class"},{"name":"SiemensInlineContextUtil","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensInlineContextUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensInlineContextUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensInlineContextUtil","type":"Class"},{"name":"SiemensLoopSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensLoopSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensLoopSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensLoopSyntax","type":"Class"},{"name":"SiemensNamedVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableLookup","type":"Class"},{"name":"SiemensNamedVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableReadingSyntax","type":"Class"},{"name":"SiemensRParameterReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRParameterReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRParameterReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRParameterReadingSyntax","type":"Class"},{"name":"SiemensRepeatSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRepeatSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRepeatSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRepeatSyntax","type":"Class"},{"name":"SiemensSubProgramCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramCallSyntax","type":"Class"},{"name":"SiemensSubProgramReturnSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramReturnSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramReturnSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramReturnSyntax","type":"Class"},{"name":"SiemensSystemVariableSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSystemVariableSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSystemVariableSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSystemVariableSyntax","type":"Class"},{"name":"SiemensUifrVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrVariableLookup","type":"Class"},{"name":"SiemensUifrWritingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrWritingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrWritingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrWritingSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Initializers","href":"Hi.NcParsers.Initializers.html","topicHref":"Hi.NcParsers.Initializers.html","topicUid":"Hi.NcParsers.Initializers","type":"Namespace","items":[{"name":"HomeMcInitializer","href":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicHref":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicUid":"Hi.NcParsers.Initializers.HomeMcInitializer","type":"Class"},{"name":"INcInitializer","href":"Hi.NcParsers.Initializers.INcInitializer.html","topicHref":"Hi.NcParsers.Initializers.INcInitializer.html","topicUid":"Hi.NcParsers.Initializers.INcInitializer","type":"Interface"},{"name":"StaticInitializer","href":"Hi.NcParsers.Initializers.StaticInitializer.html","topicHref":"Hi.NcParsers.Initializers.StaticInitializer.html","topicUid":"Hi.NcParsers.Initializers.StaticInitializer","type":"Class"}]},{"name":"Hi.NcParsers.InspectionSyntaxs","href":"Hi.NcParsers.InspectionSyntaxs.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.html","topicUid":"Hi.NcParsers.InspectionSyntaxs","type":"Namespace","items":[{"name":"CleanupSyntax","href":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax","type":"Class"},{"name":"ProgramXyzBackfillSyntax","href":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax","type":"Class"},{"name":"SnapshotSyntax","href":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax","type":"Class"},{"name":"UnconsumedCheckSyntax","href":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Keywords","href":"Hi.NcParsers.Keywords.html","topicHref":"Hi.NcParsers.Keywords.html","topicUid":"Hi.NcParsers.Keywords","type":"Namespace","items":[{"name":"BlockSkip","href":"Hi.NcParsers.Keywords.BlockSkip.html","topicHref":"Hi.NcParsers.Keywords.BlockSkip.html","topicUid":"Hi.NcParsers.Keywords.BlockSkip","type":"Class"},{"name":"CallFrame","href":"Hi.NcParsers.Keywords.CallFrame.html","topicHref":"Hi.NcParsers.Keywords.CallFrame.html","topicUid":"Hi.NcParsers.Keywords.CallFrame","type":"Class"},{"name":"CallStack","href":"Hi.NcParsers.Keywords.CallStack.html","topicHref":"Hi.NcParsers.Keywords.CallStack.html","topicUid":"Hi.NcParsers.Keywords.CallStack","type":"Class"},{"name":"CannedCycle","href":"Hi.NcParsers.Keywords.CannedCycle.html","topicHref":"Hi.NcParsers.Keywords.CannedCycle.html","topicUid":"Hi.NcParsers.Keywords.CannedCycle","type":"Class"},{"name":"Comment","href":"Hi.NcParsers.Keywords.Comment.html","topicHref":"Hi.NcParsers.Keywords.Comment.html","topicUid":"Hi.NcParsers.Keywords.Comment","type":"Class"},{"name":"CompoundMotion","href":"Hi.NcParsers.Keywords.CompoundMotion.html","topicHref":"Hi.NcParsers.Keywords.CompoundMotion.html","topicUid":"Hi.NcParsers.Keywords.CompoundMotion","type":"Class"},{"name":"Coolant","href":"Hi.NcParsers.Keywords.Coolant.html","topicHref":"Hi.NcParsers.Keywords.Coolant.html","topicUid":"Hi.NcParsers.Keywords.Coolant","type":"Class"},{"name":"CoordinateOffset","href":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.CoordinateOffset","type":"Class"},{"name":"CsScript","href":"Hi.NcParsers.Keywords.CsScript.html","topicHref":"Hi.NcParsers.Keywords.CsScript.html","topicUid":"Hi.NcParsers.Keywords.CsScript","type":"Class"},{"name":"Dwell","href":"Hi.NcParsers.Keywords.Dwell.html","topicHref":"Hi.NcParsers.Keywords.Dwell.html","topicUid":"Hi.NcParsers.Keywords.Dwell","type":"Class"},{"name":"FanucGoto","href":"Hi.NcParsers.Keywords.FanucGoto.html","topicHref":"Hi.NcParsers.Keywords.FanucGoto.html","topicUid":"Hi.NcParsers.Keywords.FanucGoto","type":"Class"},{"name":"FanucHpcc","href":"Hi.NcParsers.Keywords.FanucHpcc.html","topicHref":"Hi.NcParsers.Keywords.FanucHpcc.html","topicUid":"Hi.NcParsers.Keywords.FanucHpcc","type":"Class"},{"name":"FanucIfThen","href":"Hi.NcParsers.Keywords.FanucIfThen.html","topicHref":"Hi.NcParsers.Keywords.FanucIfThen.html","topicUid":"Hi.NcParsers.Keywords.FanucIfThen","type":"Class"},{"name":"FanucMacroCall","href":"Hi.NcParsers.Keywords.FanucMacroCall.html","topicHref":"Hi.NcParsers.Keywords.FanucMacroCall.html","topicUid":"Hi.NcParsers.Keywords.FanucMacroCall","type":"Class"},{"name":"FanucModalMacro","href":"Hi.NcParsers.Keywords.FanucModalMacro.html","topicHref":"Hi.NcParsers.Keywords.FanucModalMacro.html","topicUid":"Hi.NcParsers.Keywords.FanucModalMacro","type":"Class"},{"name":"FanucPathSmoothing","href":"Hi.NcParsers.Keywords.FanucPathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.FanucPathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.FanucPathSmoothing","type":"Class"},{"name":"FanucProgramNumber","href":"Hi.NcParsers.Keywords.FanucProgramNumber.html","topicHref":"Hi.NcParsers.Keywords.FanucProgramNumber.html","topicUid":"Hi.NcParsers.Keywords.FanucProgramNumber","type":"Class"},{"name":"FanucWhileDo","href":"Hi.NcParsers.Keywords.FanucWhileDo.html","topicHref":"Hi.NcParsers.Keywords.FanucWhileDo.html","topicUid":"Hi.NcParsers.Keywords.FanucWhileDo","type":"Class"},{"name":"Feedrate","href":"Hi.NcParsers.Keywords.Feedrate.html","topicHref":"Hi.NcParsers.Keywords.Feedrate.html","topicUid":"Hi.NcParsers.Keywords.Feedrate","type":"Class"},{"name":"IArcMotionDef","href":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicHref":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicUid":"Hi.NcParsers.Keywords.IArcMotionDef","type":"Interface"},{"name":"ICannedCycleDef","href":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicHref":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicUid":"Hi.NcParsers.Keywords.ICannedCycleDef","type":"Interface"},{"name":"ICompoundMotionDef","href":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicHref":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicUid":"Hi.NcParsers.Keywords.ICompoundMotionDef","type":"Interface"},{"name":"ICoolantDef","href":"Hi.NcParsers.Keywords.ICoolantDef.html","topicHref":"Hi.NcParsers.Keywords.ICoolantDef.html","topicUid":"Hi.NcParsers.Keywords.ICoolantDef","type":"Interface"},{"name":"IDwellDef","href":"Hi.NcParsers.Keywords.IDwellDef.html","topicHref":"Hi.NcParsers.Keywords.IDwellDef.html","topicUid":"Hi.NcParsers.Keywords.IDwellDef","type":"Interface"},{"name":"IFanucHpccDef","href":"Hi.NcParsers.Keywords.IFanucHpccDef.html","topicHref":"Hi.NcParsers.Keywords.IFanucHpccDef.html","topicUid":"Hi.NcParsers.Keywords.IFanucHpccDef","type":"Interface"},{"name":"IFanucPathSmoothingDef","href":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef","type":"Interface"},{"name":"IFeedrateDef","href":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicHref":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicUid":"Hi.NcParsers.Keywords.IFeedrateDef","type":"Interface"},{"name":"IFlagsDef","href":"Hi.NcParsers.Keywords.IFlagsDef.html","topicHref":"Hi.NcParsers.Keywords.IFlagsDef.html","topicUid":"Hi.NcParsers.Keywords.IFlagsDef","type":"Interface"},{"name":"IMachineCoordinateStateDef","href":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef","type":"Interface"},{"name":"IMotionEventDef","href":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionEventDef","type":"Interface"},{"name":"IMotionStateDef","href":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionStateDef","type":"Interface"},{"name":"IParsingDef","href":"Hi.NcParsers.Keywords.IParsingDef.html","topicHref":"Hi.NcParsers.Keywords.IParsingDef.html","topicUid":"Hi.NcParsers.Keywords.IParsingDef","type":"Interface"},{"name":"IPathSmoothingDef","href":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IPathSmoothingDef","type":"Interface"},{"name":"IPlaneSelectDef","href":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicHref":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicUid":"Hi.NcParsers.Keywords.IPlaneSelectDef","type":"Interface"},{"name":"IPolarInterpolationDef","href":"Hi.NcParsers.Keywords.IPolarInterpolationDef.html","topicHref":"Hi.NcParsers.Keywords.IPolarInterpolationDef.html","topicUid":"Hi.NcParsers.Keywords.IPolarInterpolationDef","type":"Interface"},{"name":"IPositioningDef","href":"Hi.NcParsers.Keywords.IPositioningDef.html","topicHref":"Hi.NcParsers.Keywords.IPositioningDef.html","topicUid":"Hi.NcParsers.Keywords.IPositioningDef","type":"Interface"},{"name":"IProgramEndDef","href":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramEndDef","type":"Interface"},{"name":"IProgramStopDef","href":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramStopDef","type":"Interface"},{"name":"IProgramXyzDef","href":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramXyzDef","type":"Interface"},{"name":"IRadiusCompensationDef","href":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IRadiusCompensationDef","type":"Interface"},{"name":"ISpindleControlDef","href":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleControlDef","type":"Interface"},{"name":"ISpindleOrientationDef","href":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleOrientationDef","type":"Interface"},{"name":"ISpindleSpeedDef","href":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleSpeedDef","type":"Interface"},{"name":"ITiltTransformDef","href":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicHref":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicUid":"Hi.NcParsers.Keywords.ITiltTransformDef","type":"Interface"},{"name":"IToolHeightCompensationDef","href":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IToolHeightCompensationDef","type":"Interface"},{"name":"ITransformationDef","href":"Hi.NcParsers.Keywords.ITransformationDef.html","topicHref":"Hi.NcParsers.Keywords.ITransformationDef.html","topicUid":"Hi.NcParsers.Keywords.ITransformationDef","type":"Interface"},{"name":"IUnitDef","href":"Hi.NcParsers.Keywords.IUnitDef.html","topicHref":"Hi.NcParsers.Keywords.IUnitDef.html","topicUid":"Hi.NcParsers.Keywords.IUnitDef","type":"Interface"},{"name":"IUnparsedTextDef","href":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicHref":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicUid":"Hi.NcParsers.Keywords.IUnparsedTextDef","type":"Interface"},{"name":"IndexNote","href":"Hi.NcParsers.Keywords.IndexNote.html","topicHref":"Hi.NcParsers.Keywords.IndexNote.html","topicUid":"Hi.NcParsers.Keywords.IndexNote","type":"Class"},{"name":"IsoLocalCoordinateOffset","href":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset","type":"Class"},{"name":"MachineCoordinateState","href":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicHref":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicUid":"Hi.NcParsers.Keywords.MachineCoordinateState","type":"Class"},{"name":"MacroFrame","href":"Hi.NcParsers.Keywords.MacroFrame.html","topicHref":"Hi.NcParsers.Keywords.MacroFrame.html","topicUid":"Hi.NcParsers.Keywords.MacroFrame","type":"Class"},{"name":"MotionEvent","href":"Hi.NcParsers.Keywords.MotionEvent.html","topicHref":"Hi.NcParsers.Keywords.MotionEvent.html","topicUid":"Hi.NcParsers.Keywords.MotionEvent","type":"Class"},{"name":"MotionState","href":"Hi.NcParsers.Keywords.MotionState.html","topicHref":"Hi.NcParsers.Keywords.MotionState.html","topicUid":"Hi.NcParsers.Keywords.MotionState","type":"Class"},{"name":"PathSmoothing","href":"Hi.NcParsers.Keywords.PathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.PathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.PathSmoothing","type":"Class"},{"name":"PlaneSelect","href":"Hi.NcParsers.Keywords.PlaneSelect.html","topicHref":"Hi.NcParsers.Keywords.PlaneSelect.html","topicUid":"Hi.NcParsers.Keywords.PlaneSelect","type":"Class"},{"name":"PolarInterpolation","href":"Hi.NcParsers.Keywords.PolarInterpolation.html","topicHref":"Hi.NcParsers.Keywords.PolarInterpolation.html","topicUid":"Hi.NcParsers.Keywords.PolarInterpolation","type":"Class"},{"name":"Positioning","href":"Hi.NcParsers.Keywords.Positioning.html","topicHref":"Hi.NcParsers.Keywords.Positioning.html","topicUid":"Hi.NcParsers.Keywords.Positioning","type":"Class"},{"name":"PositioningOverride","href":"Hi.NcParsers.Keywords.PositioningOverride.html","topicHref":"Hi.NcParsers.Keywords.PositioningOverride.html","topicUid":"Hi.NcParsers.Keywords.PositioningOverride","type":"Class"},{"name":"ProgramEnd","href":"Hi.NcParsers.Keywords.ProgramEnd.html","topicHref":"Hi.NcParsers.Keywords.ProgramEnd.html","topicUid":"Hi.NcParsers.Keywords.ProgramEnd","type":"Class"},{"name":"ProgramStop","href":"Hi.NcParsers.Keywords.ProgramStop.html","topicHref":"Hi.NcParsers.Keywords.ProgramStop.html","topicUid":"Hi.NcParsers.Keywords.ProgramStop","type":"Class"},{"name":"RadiusCompensation","href":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicHref":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicUid":"Hi.NcParsers.Keywords.RadiusCompensation","type":"Class"},{"name":"SpindleControl","href":"Hi.NcParsers.Keywords.SpindleControl.html","topicHref":"Hi.NcParsers.Keywords.SpindleControl.html","topicUid":"Hi.NcParsers.Keywords.SpindleControl","type":"Class"},{"name":"SpindleOrientation","href":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicHref":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicUid":"Hi.NcParsers.Keywords.SpindleOrientation","type":"Class"},{"name":"SpindleSpeed","href":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicHref":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicUid":"Hi.NcParsers.Keywords.SpindleSpeed","type":"Class"},{"name":"SubProgramCall","href":"Hi.NcParsers.Keywords.SubProgramCall.html","topicHref":"Hi.NcParsers.Keywords.SubProgramCall.html","topicUid":"Hi.NcParsers.Keywords.SubProgramCall","type":"Class"},{"name":"SubProgramReturn","href":"Hi.NcParsers.Keywords.SubProgramReturn.html","topicHref":"Hi.NcParsers.Keywords.SubProgramReturn.html","topicUid":"Hi.NcParsers.Keywords.SubProgramReturn","type":"Class"},{"name":"TapeBoundary","href":"Hi.NcParsers.Keywords.TapeBoundary.html","topicHref":"Hi.NcParsers.Keywords.TapeBoundary.html","topicUid":"Hi.NcParsers.Keywords.TapeBoundary","type":"Class"},{"name":"TiltTransform","href":"Hi.NcParsers.Keywords.TiltTransform.html","topicHref":"Hi.NcParsers.Keywords.TiltTransform.html","topicUid":"Hi.NcParsers.Keywords.TiltTransform","type":"Class"},{"name":"ToolHeightCompensation","href":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicHref":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicUid":"Hi.NcParsers.Keywords.ToolHeightCompensation","type":"Class"},{"name":"Unit","href":"Hi.NcParsers.Keywords.Unit.html","topicHref":"Hi.NcParsers.Keywords.Unit.html","topicUid":"Hi.NcParsers.Keywords.Unit","type":"Class"},{"name":"Vars","href":"Hi.NcParsers.Keywords.Vars.html","topicHref":"Hi.NcParsers.Keywords.Vars.html","topicUid":"Hi.NcParsers.Keywords.Vars","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Fanuc","href":"Hi.NcParsers.Keywords.Fanuc.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.html","topicUid":"Hi.NcParsers.Keywords.Fanuc","type":"Namespace","items":[{"name":"FanucKeywords","href":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicUid":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Generic","href":"Hi.NcParsers.Keywords.Generic.html","topicHref":"Hi.NcParsers.Keywords.Generic.html","topicUid":"Hi.NcParsers.Keywords.Generic","type":"Namespace","items":[{"name":"ArcCenterSource","href":"Hi.NcParsers.Keywords.Generic.ArcCenterSource.html","topicHref":"Hi.NcParsers.Keywords.Generic.ArcCenterSource.html","topicUid":"Hi.NcParsers.Keywords.Generic.ArcCenterSource","type":"Class"},{"name":"IsoKeywords","href":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicHref":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicUid":"Hi.NcParsers.Keywords.Generic.IsoKeywords","type":"Class"},{"name":"MotionForm","href":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicHref":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicUid":"Hi.NcParsers.Keywords.Generic.MotionForm","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Heidenhain","href":"Hi.NcParsers.Keywords.Heidenhain.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainCall","href":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCall.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCall.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCall","type":"Class"},{"name":"HeidenhainCyclCall","href":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCall.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCall.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCall","type":"Class"},{"name":"HeidenhainCyclCallPos","href":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCallPos.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCallPos.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCallPos","type":"Class"},{"name":"HeidenhainGoto","href":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainGoto.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainGoto.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainGoto","type":"Class"},{"name":"HeidenhainLbl","href":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainLbl.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainLbl.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainLbl","type":"Class"},{"name":"ICyclDef","href":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef","type":"Interface"},{"name":"MachiningCycleDef","href":"Hi.NcParsers.Keywords.Heidenhain.MachiningCycleDef.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.MachiningCycleDef.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.MachiningCycleDef","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Siemens","href":"Hi.NcParsers.Keywords.Siemens.html","topicHref":"Hi.NcParsers.Keywords.Siemens.html","topicUid":"Hi.NcParsers.Keywords.Siemens","type":"Namespace","items":[{"name":"ISiemensPathSmoothingDef","href":"Hi.NcParsers.Keywords.Siemens.ISiemensPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.Siemens.ISiemensPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.Siemens.ISiemensPathSmoothingDef","type":"Interface"},{"name":"Msg","href":"Hi.NcParsers.Keywords.Siemens.Msg.html","topicHref":"Hi.NcParsers.Keywords.Siemens.Msg.html","topicUid":"Hi.NcParsers.Keywords.Siemens.Msg","type":"Class"},{"name":"SiemensCall","href":"Hi.NcParsers.Keywords.Siemens.SiemensCall.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensCall.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensCall","type":"Class"},{"name":"SiemensFor","href":"Hi.NcParsers.Keywords.Siemens.SiemensFor.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensFor.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensFor","type":"Class"},{"name":"SiemensGoto","href":"Hi.NcParsers.Keywords.Siemens.SiemensGoto.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensGoto.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensGoto","type":"Class"},{"name":"SiemensIf","href":"Hi.NcParsers.Keywords.Siemens.SiemensIf.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensIf.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensIf","type":"Class"},{"name":"SiemensKeywords","href":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords","type":"Class"},{"name":"SiemensLabel","href":"Hi.NcParsers.Keywords.Siemens.SiemensLabel.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensLabel.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensLabel","type":"Class"},{"name":"SiemensLoop","href":"Hi.NcParsers.Keywords.Siemens.SiemensLoop.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensLoop.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensLoop","type":"Class"},{"name":"SiemensLoopFrame","href":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrame.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrame.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrame","type":"Class"},{"name":"SiemensLoopFrames","href":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrames.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrames.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrames","type":"Class"},{"name":"SiemensPathSmoothing","href":"Hi.NcParsers.Keywords.Siemens.SiemensPathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensPathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensPathSmoothing","type":"Class"},{"name":"SiemensProc","href":"Hi.NcParsers.Keywords.Siemens.SiemensProc.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensProc.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensProc","type":"Class"},{"name":"SiemensRepeat","href":"Hi.NcParsers.Keywords.Siemens.SiemensRepeat.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensRepeat.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensRepeat","type":"Class"},{"name":"SiemensRepeatUntil","href":"Hi.NcParsers.Keywords.Siemens.SiemensRepeatUntil.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensRepeatUntil.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensRepeatUntil","type":"Class"},{"name":"SiemensWhile","href":"Hi.NcParsers.Keywords.Siemens.SiemensWhile.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensWhile.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensWhile","type":"Class"},{"name":"Stopre","href":"Hi.NcParsers.Keywords.Siemens.Stopre.html","topicHref":"Hi.NcParsers.Keywords.Siemens.Stopre.html","topicUid":"Hi.NcParsers.Keywords.Siemens.Stopre","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs","href":"Hi.NcParsers.LogicSyntaxs.html","topicHref":"Hi.NcParsers.LogicSyntaxs.html","topicUid":"Hi.NcParsers.LogicSyntaxs","type":"Namespace","items":[{"name":"BackBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax","type":"Class"},{"name":"BareG28Behavior","href":"Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BareG28Behavior","type":"Enum"},{"name":"BoringCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax","type":"Class"},{"name":"CannedCycleResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax","type":"Class"},{"name":"CircularMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax","type":"Class"},{"name":"CodedPositionUtil","href":"Hi.NcParsers.LogicSyntaxs.CodedPositionUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CodedPositionUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CodedPositionUtil","type":"Class"},{"name":"CoolantSyntax","href":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax","type":"Class"},{"name":"CoordinateOffsetUtil","href":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil","type":"Class"},{"name":"DrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax","type":"Class"},{"name":"DwellSyntax","href":"Hi.NcParsers.LogicSyntaxs.DwellSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.DwellSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.DwellSyntax","type":"Class"},{"name":"FanucPathSmoothingSyntax","href":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax","type":"Class"},{"name":"FeedrateSyntax","href":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax","type":"Class"},{"name":"FineBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax","type":"Class"},{"name":"G43p4RtcpSyntax","href":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax","type":"Class"},{"name":"G53p1RotaryPositionSyntax","href":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax","type":"Class"},{"name":"HighSpeedPeckCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax","type":"Class"},{"name":"IncrementalResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax","type":"Class"},{"name":"IsoCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax","type":"Class"},{"name":"IsoG68RotationSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax","type":"Class"},{"name":"IsoG68p2TiltSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax","type":"Class"},{"name":"IsoLocalCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax","type":"Class"},{"name":"LinearMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax","type":"Class"},{"name":"MCodeExpansionSyntax","href":"Hi.NcParsers.LogicSyntaxs.MCodeExpansionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.MCodeExpansionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.MCodeExpansionSyntax","type":"Class"},{"name":"MachineCoordSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax","type":"Class"},{"name":"McAbcCyclicPathSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax","type":"Class"},{"name":"McAbcSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax","type":"Class"},{"name":"McAbcXyzFallbackSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax","type":"Class"},{"name":"McXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax","type":"Class"},{"name":"OrientationVectorResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.OrientationVectorResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.OrientationVectorResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.OrientationVectorResolveSyntax","type":"Class"},{"name":"PeckDrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax","type":"Class"},{"name":"PivotTransformUtil","href":"Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PivotTransformUtil","type":"Class"},{"name":"PivotTransformationSyntax","href":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax","type":"Class"},{"name":"PlaneSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax","type":"Class"},{"name":"PolarGCodeCheckSyntax","href":"Hi.NcParsers.LogicSyntaxs.PolarGCodeCheckSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PolarGCodeCheckSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PolarGCodeCheckSyntax","type":"Class"},{"name":"PolarInterpolationSyntax","href":"Hi.NcParsers.LogicSyntaxs.PolarInterpolationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PolarInterpolationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PolarInterpolationSyntax","type":"Class"},{"name":"PositioningSyntax","href":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax","type":"Class"},{"name":"ProgramEndCleanSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax","type":"Class"},{"name":"ProgramEndSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax","type":"Class"},{"name":"ProgramRxczSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramRxczSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramRxczSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramRxczSyntax","type":"Class"},{"name":"ProgramStopSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax","type":"Class"},{"name":"ProgramXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax","type":"Class"},{"name":"ProgramXyzUtil","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil","type":"Class"},{"name":"ReferenceReturnSyntax","href":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax","type":"Class"},{"name":"RotaryAxisUtil","href":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil","type":"Class"},{"name":"SpindleSpeedSyntax","href":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax","type":"Class"},{"name":"TappingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax","type":"Class"},{"name":"TiltTransformUtil","href":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil","type":"Class"},{"name":"ToolChangeMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolChangeMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolChangeMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolChangeMotionSyntax","type":"Class"},{"name":"ToolChangeSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax","type":"Class"},{"name":"ToolHeightOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax","type":"Class"},{"name":"UnitModeSyntax","href":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Heidenhain","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainCannedCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCannedCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCannedCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCannedCycleSyntax","type":"Class"},{"name":"HeidenhainCircleCenterSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircleCenterSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircleCenterSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircleCenterSyntax","type":"Class"},{"name":"HeidenhainCircularMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircularMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircularMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircularMotionSyntax","type":"Class"},{"name":"HeidenhainCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax","type":"Class"},{"name":"HeidenhainCyclePrePositionSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCyclePrePositionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCyclePrePositionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCyclePrePositionSyntax","type":"Class"},{"name":"HeidenhainCycleRetractSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCycleRetractSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCycleRetractSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCycleRetractSyntax","type":"Class"},{"name":"HeidenhainLnOrientationSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainLnOrientationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainLnOrientationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainLnOrientationSyntax","type":"Class"},{"name":"HeidenhainMFunctionSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMFunctionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMFunctionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMFunctionSyntax","type":"Class"},{"name":"HeidenhainMirrorTransformSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMirrorTransformSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMirrorTransformSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMirrorTransformSyntax","type":"Class"},{"name":"HeidenhainMotionModeSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMotionModeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMotionModeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMotionModeSyntax","type":"Class"},{"name":"HeidenhainPathSmoothingSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPathSmoothingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPathSmoothingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPathSmoothingSyntax","type":"Class"},{"name":"HeidenhainPivotTransformationSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPivotTransformationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPivotTransformationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPivotTransformationSyntax","type":"Class"},{"name":"HeidenhainPlaneTiltSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPlaneTiltSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPlaneTiltSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPlaneTiltSyntax","type":"Class"},{"name":"HeidenhainProgramHeaderSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainProgramHeaderSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainProgramHeaderSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainProgramHeaderSyntax","type":"Class"},{"name":"HeidenhainRadiusCompSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRadiusCompSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRadiusCompSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRadiusCompSyntax","type":"Class"},{"name":"HeidenhainRtcpSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax","type":"Class"},{"name":"HeidenhainStockDeclarationSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainStockDeclarationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainStockDeclarationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainStockDeclarationSyntax","type":"Class"},{"name":"HeidenhainToolChangeSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolChangeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolChangeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolChangeSyntax","type":"Class"},{"name":"HeidenhainToolOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolOffsetSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Siemens","href":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens","type":"Namespace","items":[{"name":"SiemensCircularMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCircularMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCircularMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCircularMotionSyntax","type":"Class"},{"name":"SiemensCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax","type":"Class"},{"name":"SiemensCutCompModeSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCutCompModeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCutCompModeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCutCompModeSyntax","type":"Class"},{"name":"SiemensCycle800TiltSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCycle800TiltSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCycle800TiltSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCycle800TiltSyntax","type":"Class"},{"name":"SiemensFixedPointReturnSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensFixedPointReturnSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensFixedPointReturnSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensFixedPointReturnSyntax","type":"Class"},{"name":"SiemensModalCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensModalCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensModalCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensModalCycleSyntax","type":"Class"},{"name":"SiemensPathSmoothingSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPathSmoothingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPathSmoothingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPathSmoothingSyntax","type":"Class"},{"name":"SiemensPivotTransformationSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPivotTransformationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPivotTransformationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPivotTransformationSyntax","type":"Class"},{"name":"SiemensProgrammableFrameSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensProgrammableFrameSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensProgrammableFrameSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensProgrammableFrameSyntax","type":"Class"},{"name":"SiemensStopreSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensStopreSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensStopreSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensStopreSyntax","type":"Class"},{"name":"SiemensToolOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensToolOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensToolOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensToolOffsetSyntax","type":"Class"},{"name":"SiemensTraoriSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensTraoriSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensTraoriSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensTraoriSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs","type":"Namespace","items":[{"name":"BlockSkipSyntax","href":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax","type":"Class"},{"name":"CsScriptSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax","type":"Class"},{"name":"FlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax","type":"Class"},{"name":"FloatTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax","type":"Class"},{"name":"HeadIndexSyntax","href":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax","type":"Class"},{"name":"IntegerTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax","type":"Class"},{"name":"NamedVarAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax","type":"Class"},{"name":"NumberedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax","type":"Class"},{"name":"ParameterizedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax","type":"Class"},{"name":"ShrinkIfNoDecimalPointSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax","type":"Class"},{"name":"TagAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax","type":"Class"},{"name":"TagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax","type":"Class"},{"name":"TapeBoundarySyntax","href":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","type":"Namespace","items":[{"name":"QuoteCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax","type":"Class"},{"name":"TailCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Fanuc","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc","type":"Namespace","items":[{"name":"FanucGotoParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax","type":"Class"},{"name":"FanucIfThenParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax","type":"Class"},{"name":"FanucProgramNumberSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax","type":"Class"},{"name":"FanucWhileDoParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainBlkFormSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax","type":"Class"},{"name":"HeidenhainCSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCSyntax","type":"Class"},{"name":"HeidenhainCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax","type":"Class"},{"name":"HeidenhainCcSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCcSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCcSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCcSyntax","type":"Class"},{"name":"HeidenhainCyclCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclCallSyntax","type":"Class"},{"name":"HeidenhainCyclDefSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax","type":"Class"},{"name":"HeidenhainFnAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax","type":"Class"},{"name":"HeidenhainFnFeatureSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnFeatureSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnFeatureSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnFeatureSyntax","type":"Class"},{"name":"HeidenhainGotoParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainGotoParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainGotoParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainGotoParsingSyntax","type":"Class"},{"name":"HeidenhainIncrementalAxisWordUtil","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainIncrementalAxisWordUtil.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainIncrementalAxisWordUtil.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainIncrementalAxisWordUtil","type":"Class"},{"name":"HeidenhainLSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax","type":"Class"},{"name":"HeidenhainLblSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax","type":"Class"},{"name":"HeidenhainLnSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLnSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLnSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLnSyntax","type":"Class"},{"name":"HeidenhainM128Syntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM128Syntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM128Syntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM128Syntax","type":"Class"},{"name":"HeidenhainM140Syntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM140Syntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM140Syntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM140Syntax","type":"Class"},{"name":"HeidenhainMirrorImageSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainMirrorImageSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainMirrorImageSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainMirrorImageSyntax","type":"Class"},{"name":"HeidenhainPlaneSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax","type":"Class"},{"name":"HeidenhainProgramSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax","type":"Class"},{"name":"HeidenhainTcpmSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTcpmSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTcpmSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTcpmSyntax","type":"Class"},{"name":"HeidenhainTildeTrimSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTildeTrimSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTildeTrimSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTildeTrimSyntax","type":"Class"},{"name":"HeidenhainToolCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","type":"Namespace","items":[{"name":"HeidenhainDatumSettingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax","type":"Class"},{"name":"HeidenhainDatumShiftSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax","type":"Class"},{"name":"HeidenhainMachiningCycleSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMachiningCycleSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMachiningCycleSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMachiningCycleSyntax","type":"Class"},{"name":"HeidenhainMirrorCyclSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMirrorCyclSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMirrorCyclSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMirrorCyclSyntax","type":"Class"},{"name":"HeidenhainToleranceCyclSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainToleranceCyclSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainToleranceCyclSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainToleranceCyclSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Siemens","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens","type":"Namespace","items":[{"name":"SiemensCallStatementSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCallStatementSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCallStatementSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCallStatementSyntax","type":"Class"},{"name":"SiemensCycleCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax","type":"Class"},{"name":"SiemensDefStatementSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensDefStatementSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensDefStatementSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensDefStatementSyntax","type":"Class"},{"name":"SiemensFrameStatementSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensFrameStatementSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensFrameStatementSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensFrameStatementSyntax","type":"Class"},{"name":"SiemensGotoParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensGotoParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensGotoParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensGotoParsingSyntax","type":"Class"},{"name":"SiemensIfParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensIfParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensIfParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensIfParsingSyntax","type":"Class"},{"name":"SiemensLabelSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLabelSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLabelSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLabelSyntax","type":"Class"},{"name":"SiemensLoopParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLoopParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLoopParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLoopParsingSyntax","type":"Class"},{"name":"SiemensMcallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMcallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMcallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMcallSyntax","type":"Class"},{"name":"SiemensMsgSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMsgSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMsgSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMsgSyntax","type":"Class"},{"name":"SiemensProcSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensProcSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensProcSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensProcSyntax","type":"Class"},{"name":"SiemensQuotedStatementSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensQuotedStatementSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensQuotedStatementSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensQuotedStatementSyntax","type":"Class"},{"name":"SiemensRepeatParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensRepeatParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensRepeatParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensRepeatParsingSyntax","type":"Class"},{"name":"SiemensToolCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensToolCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensToolCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensToolCallSyntax","type":"Class"}]},{"name":"Hi.NcParsers.PostLogicSyntaxs","href":"Hi.NcParsers.PostLogicSyntaxs.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs","type":"Namespace","items":[{"name":"ModalCarrySyntax","href":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax","type":"Class"},{"name":"RadiusCompensationSyntax","href":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Segmenters","href":"Hi.NcParsers.Segmenters.html","topicHref":"Hi.NcParsers.Segmenters.html","topicUid":"Hi.NcParsers.Segmenters","type":"Namespace","items":[{"name":"HeidenhainSegmenter","href":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.HeidenhainSegmenter","type":"Class"},{"name":"ISegmenter","href":"Hi.NcParsers.Segmenters.ISegmenter.html","topicHref":"Hi.NcParsers.Segmenters.ISegmenter.html","topicUid":"Hi.NcParsers.Segmenters.ISegmenter","type":"Interface"},{"name":"InlineDelimiterSegmenter","href":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter","type":"Class"},{"name":"SingleLineSegmenter","href":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.SingleLineSegmenter","type":"Class"}]},{"name":"Hi.NcParsers.Semantics","href":"Hi.NcParsers.Semantics.html","topicHref":"Hi.NcParsers.Semantics.html","topicUid":"Hi.NcParsers.Semantics","type":"Namespace","items":[{"name":"ClLinearMcMotionSemantic","href":"Hi.NcParsers.Semantics.ClLinearMcMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.ClLinearMcMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.ClLinearMcMotionSemantic","type":"Class"},{"name":"CompoundMotionSemantic","href":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.CompoundMotionSemantic","type":"Class"},{"name":"CoolantSemantic","href":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicHref":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicUid":"Hi.NcParsers.Semantics.CoolantSemantic","type":"Class"},{"name":"CsScriptBeginSemantic","href":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptBeginSemantic","type":"Class"},{"name":"CsScriptEndSemantic","href":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptEndSemantic","type":"Class"},{"name":"CsScriptSemantic","href":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptSemantic","type":"Class"},{"name":"INcSemantic","href":"Hi.NcParsers.Semantics.INcSemantic.html","topicHref":"Hi.NcParsers.Semantics.INcSemantic.html","topicUid":"Hi.NcParsers.Semantics.INcSemantic","type":"Interface"},{"name":"MachineCoordinateStepSemantic","href":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicHref":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicUid":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic","type":"Class"},{"name":"McArcMotionSemantic","href":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McArcMotionSemantic","type":"Class"},{"name":"McLinearMotionSemantic","href":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McLinearMotionSemantic","type":"Class"},{"name":"McPolarArcMotionSemantic","href":"Hi.NcParsers.Semantics.McPolarArcMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McPolarArcMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McPolarArcMotionSemantic","type":"Class"},{"name":"McPolarLinearMotionSemantic","href":"Hi.NcParsers.Semantics.McPolarLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McPolarLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McPolarLinearMotionSemantic","type":"Class"},{"name":"SpindleSpeedSemantic","href":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicHref":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicUid":"Hi.NcParsers.Semantics.SpindleSpeedSemantic","type":"Class"},{"name":"StrokeLimitCheckSemantic","href":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicHref":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicUid":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic","type":"Class"},{"name":"ToolChangeSemantic","href":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicHref":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicUid":"Hi.NcParsers.Semantics.ToolChangeSemantic","type":"Class"},{"name":"ToolingTeleportSemantic","href":"Hi.NcParsers.Semantics.ToolingTeleportSemantic.html","topicHref":"Hi.NcParsers.Semantics.ToolingTeleportSemantic.html","topicUid":"Hi.NcParsers.Semantics.ToolingTeleportSemantic","type":"Class"}]},{"name":"Hi.NcParsers.Syntaxs","href":"Hi.NcParsers.Syntaxs.html","topicHref":"Hi.NcParsers.Syntaxs.html","topicUid":"Hi.NcParsers.Syntaxs","type":"Namespace","items":[{"name":"BundleSyntax","href":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.BundleSyntax","type":"Class"},{"name":"ExpressionPrefixParser","href":"Hi.NcParsers.Syntaxs.ExpressionPrefixParser.html","topicHref":"Hi.NcParsers.Syntaxs.ExpressionPrefixParser.html","topicUid":"Hi.NcParsers.Syntaxs.ExpressionPrefixParser","type":"Delegate"},{"name":"FanucSyntaxUtil","href":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil","type":"Class"},{"name":"GenericSyntaxKit","href":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicHref":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicUid":"Hi.NcParsers.Syntaxs.GenericSyntaxKit","type":"Class"},{"name":"HeidenhainSyntaxUtil","href":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil","type":"Class"},{"name":"IExpandingNcSyntax","href":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax","type":"Interface"},{"name":"INcSyntax","href":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.INcSyntax","type":"Interface"},{"name":"ISituNcSyntax","href":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.ISituNcSyntax","type":"Interface"},{"name":"MazakSyntaxUtil","href":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil","type":"Class"},{"name":"NcSyntaxUtil","href":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.NcSyntaxUtil","type":"Class"},{"name":"SiemensSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil","type":"Class"},{"name":"SyntaxPiece","href":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxPiece","type":"Class"},{"name":"SyntaxStageKeys","href":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxStageKeys","type":"Class"},{"name":"SyntecSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil","type":"Class"},{"name":"TagValue","href":"Hi.NcParsers.Syntaxs.TagValue.html","topicHref":"Hi.NcParsers.Syntaxs.TagValue.html","topicUid":"Hi.NcParsers.Syntaxs.TagValue","type":"Class"},{"name":"TransformationUtil","href":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicHref":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicUid":"Hi.NcParsers.Syntaxs.TransformationUtil","type":"Class"}]},{"name":"Hi.Numerical","href":"Hi.Numerical.html","topicHref":"Hi.Numerical.html","topicUid":"Hi.Numerical","type":"Namespace","items":[{"name":"CncBrand","href":"Hi.Numerical.CncBrand.html","topicHref":"Hi.Numerical.CncBrand.html","topicUid":"Hi.Numerical.CncBrand","type":"Enum"},{"name":"CommentMark","href":"Hi.Numerical.CommentMark.html","topicHref":"Hi.Numerical.CommentMark.html","topicUid":"Hi.Numerical.CommentMark","type":"Enum"},{"name":"CoolantMode","href":"Hi.Numerical.CoolantMode.html","topicHref":"Hi.Numerical.CoolantMode.html","topicUid":"Hi.Numerical.CoolantMode","type":"Enum"},{"name":"CoordinateInterpolationMode","href":"Hi.Numerical.CoordinateInterpolationMode.html","topicHref":"Hi.Numerical.CoordinateInterpolationMode.html","topicUid":"Hi.Numerical.CoordinateInterpolationMode","type":"Enum"},{"name":"FlexDictionaryUtil","href":"Hi.Numerical.FlexDictionaryUtil.html","topicHref":"Hi.Numerical.FlexDictionaryUtil.html","topicUid":"Hi.Numerical.FlexDictionaryUtil","type":"Class"},{"name":"HardNcComment","href":"Hi.Numerical.HardNcComment.html","topicHref":"Hi.Numerical.HardNcComment.html","topicUid":"Hi.Numerical.HardNcComment","type":"Class"},{"name":"HardNcEnv","href":"Hi.Numerical.HardNcEnv.html","topicHref":"Hi.Numerical.HardNcEnv.html","topicUid":"Hi.Numerical.HardNcEnv","type":"Class"},{"name":"HardNcLine","href":"Hi.Numerical.HardNcLine.html","topicHref":"Hi.Numerical.HardNcLine.html","topicUid":"Hi.Numerical.HardNcLine","type":"Class"},{"name":"HardNcUtil","href":"Hi.Numerical.HardNcUtil.html","topicHref":"Hi.Numerical.HardNcUtil.html","topicUid":"Hi.Numerical.HardNcUtil","type":"Class"},{"name":"IFlexDictionaryHost","href":"Hi.Numerical.IFlexDictionaryHost-1.html","topicHref":"Hi.Numerical.IFlexDictionaryHost-1.html","topicUid":"Hi.Numerical.IFlexDictionaryHost`1","type":"Interface"},{"name":"IGetFeedrate","href":"Hi.Numerical.IGetFeedrate.html","topicHref":"Hi.Numerical.IGetFeedrate.html","topicUid":"Hi.Numerical.IGetFeedrate","type":"Interface"},{"name":"IGetSpindleSpeed","href":"Hi.Numerical.IGetSpindleSpeed.html","topicHref":"Hi.Numerical.IGetSpindleSpeed.html","topicUid":"Hi.Numerical.IGetSpindleSpeed","type":"Interface"},{"name":"INcRunner","href":"Hi.Numerical.INcRunner.html","topicHref":"Hi.Numerical.INcRunner.html","topicUid":"Hi.Numerical.INcRunner","type":"Interface"},{"name":"ISetFeedrate","href":"Hi.Numerical.ISetFeedrate.html","topicHref":"Hi.Numerical.ISetFeedrate.html","topicUid":"Hi.Numerical.ISetFeedrate","type":"Interface"},{"name":"ISetSpindleSpeed","href":"Hi.Numerical.ISetSpindleSpeed.html","topicHref":"Hi.Numerical.ISetSpindleSpeed.html","topicUid":"Hi.Numerical.ISetSpindleSpeed","type":"Interface"},{"name":"MechNcUtil","href":"Hi.Numerical.MechNcUtil.html","topicHref":"Hi.Numerical.MechNcUtil.html","topicUid":"Hi.Numerical.MechNcUtil","type":"Class"},{"name":"MillingToolOffsetTable","href":"Hi.Numerical.MillingToolOffsetTable.html","topicHref":"Hi.Numerical.MillingToolOffsetTable.html","topicUid":"Hi.Numerical.MillingToolOffsetTable","type":"Class"},{"name":"MillingToolOffsetTableRow","href":"Hi.Numerical.MillingToolOffsetTableRow.html","topicHref":"Hi.Numerical.MillingToolOffsetTableRow.html","topicUid":"Hi.Numerical.MillingToolOffsetTableRow","type":"Class"},{"name":"NcFlag","href":"Hi.Numerical.NcFlag.html","topicHref":"Hi.Numerical.NcFlag.html","topicUid":"Hi.Numerical.NcFlag","type":"Enum"},{"name":"NcFlagUtil","href":"Hi.Numerical.NcFlagUtil.html","topicHref":"Hi.Numerical.NcFlagUtil.html","topicUid":"Hi.Numerical.NcFlagUtil","type":"Class"},{"name":"NcGroup00","href":"Hi.Numerical.NcGroup00.html","topicHref":"Hi.Numerical.NcGroup00.html","topicUid":"Hi.Numerical.NcGroup00","type":"Enum"},{"name":"NcGroup01","href":"Hi.Numerical.NcGroup01.html","topicHref":"Hi.Numerical.NcGroup01.html","topicUid":"Hi.Numerical.NcGroup01","type":"Enum"},{"name":"NcGroup02","href":"Hi.Numerical.NcGroup02.html","topicHref":"Hi.Numerical.NcGroup02.html","topicUid":"Hi.Numerical.NcGroup02","type":"Enum"},{"name":"NcGroup03","href":"Hi.Numerical.NcGroup03.html","topicHref":"Hi.Numerical.NcGroup03.html","topicUid":"Hi.Numerical.NcGroup03","type":"Enum"},{"name":"NcGroup05","href":"Hi.Numerical.NcGroup05.html","topicHref":"Hi.Numerical.NcGroup05.html","topicUid":"Hi.Numerical.NcGroup05","type":"Enum"},{"name":"NcGroup06","href":"Hi.Numerical.NcGroup06.html","topicHref":"Hi.Numerical.NcGroup06.html","topicUid":"Hi.Numerical.NcGroup06","type":"Enum"},{"name":"NcGroup07","href":"Hi.Numerical.NcGroup07.html","topicHref":"Hi.Numerical.NcGroup07.html","topicUid":"Hi.Numerical.NcGroup07","type":"Enum"},{"name":"NcGroup08","href":"Hi.Numerical.NcGroup08.html","topicHref":"Hi.Numerical.NcGroup08.html","topicUid":"Hi.Numerical.NcGroup08","type":"Enum"},{"name":"NcGroup09","href":"Hi.Numerical.NcGroup09.html","topicHref":"Hi.Numerical.NcGroup09.html","topicUid":"Hi.Numerical.NcGroup09","type":"Enum"},{"name":"NcGroup10","href":"Hi.Numerical.NcGroup10.html","topicHref":"Hi.Numerical.NcGroup10.html","topicUid":"Hi.Numerical.NcGroup10","type":"Enum"},{"name":"NcGroup13","href":"Hi.Numerical.NcGroup13.html","topicHref":"Hi.Numerical.NcGroup13.html","topicUid":"Hi.Numerical.NcGroup13","type":"Enum"},{"name":"NcGroup14","href":"Hi.Numerical.NcGroup14.html","topicHref":"Hi.Numerical.NcGroup14.html","topicUid":"Hi.Numerical.NcGroup14","type":"Enum"},{"name":"NcGroup15","href":"Hi.Numerical.NcGroup15.html","topicHref":"Hi.Numerical.NcGroup15.html","topicUid":"Hi.Numerical.NcGroup15","type":"Enum"},{"name":"NcGroup16","href":"Hi.Numerical.NcGroup16.html","topicHref":"Hi.Numerical.NcGroup16.html","topicUid":"Hi.Numerical.NcGroup16","type":"Enum"},{"name":"NcGroup21","href":"Hi.Numerical.NcGroup21.html","topicHref":"Hi.Numerical.NcGroup21.html","topicUid":"Hi.Numerical.NcGroup21","type":"Enum"},{"name":"NcGroupAttribute","href":"Hi.Numerical.NcGroupAttribute.html","topicHref":"Hi.Numerical.NcGroupAttribute.html","topicUid":"Hi.Numerical.NcGroupAttribute","type":"Class"},{"name":"NcGroupHeidenhainM107M108","href":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicHref":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicUid":"Hi.Numerical.NcGroupHeidenhainM107M108","type":"Enum"},{"name":"NcGroupHeidenhainPlane","href":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicHref":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicUid":"Hi.Numerical.NcGroupHeidenhainPlane","type":"Enum"},{"name":"NcGroupHeidenhainShortestRotaryPath","href":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicHref":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicUid":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath","type":"Enum"},{"name":"NcGroupSpindleRotation","href":"Hi.Numerical.NcGroupSpindleRotation.html","topicHref":"Hi.Numerical.NcGroupSpindleRotation.html","topicUid":"Hi.Numerical.NcGroupSpindleRotation","type":"Enum"},{"name":"NcLifeCycleAttribute","href":"Hi.Numerical.NcLifeCycleAttribute.html","topicHref":"Hi.Numerical.NcLifeCycleAttribute.html","topicUid":"Hi.Numerical.NcLifeCycleAttribute","type":"Class"},{"name":"NcLifeCycleMode","href":"Hi.Numerical.NcLifeCycleMode.html","topicHref":"Hi.Numerical.NcLifeCycleMode.html","topicUid":"Hi.Numerical.NcLifeCycleMode","type":"Enum"},{"name":"NcNameAttribute","href":"Hi.Numerical.NcNameAttribute.html","topicHref":"Hi.Numerical.NcNameAttribute.html","topicUid":"Hi.Numerical.NcNameAttribute","type":"Class"},{"name":"NcNoteCache","href":"Hi.Numerical.NcNoteCache.html","topicHref":"Hi.Numerical.NcNoteCache.html","topicUid":"Hi.Numerical.NcNoteCache","type":"Class"},{"name":"NcProc","href":"Hi.Numerical.NcProc.html","topicHref":"Hi.Numerical.NcProc.html","topicUid":"Hi.Numerical.NcProc","type":"Class"},{"name":"NcWarningSceneEnum","href":"Hi.Numerical.NcWarningSceneEnum.html","topicHref":"Hi.Numerical.NcWarningSceneEnum.html","topicUid":"Hi.Numerical.NcWarningSceneEnum","type":"Enum"},{"name":"NumericUtil","href":"Hi.Numerical.NumericUtil.html","topicHref":"Hi.Numerical.NumericUtil.html","topicUid":"Hi.Numerical.NumericUtil","type":"Class"},{"name":"PolarEntry","href":"Hi.Numerical.PolarEntry.html","topicHref":"Hi.Numerical.PolarEntry.html","topicUid":"Hi.Numerical.PolarEntry","type":"Class"},{"name":"RadiusCompensationBuf","href":"Hi.Numerical.RadiusCompensationBuf.html","topicHref":"Hi.Numerical.RadiusCompensationBuf.html","topicUid":"Hi.Numerical.RadiusCompensationBuf","type":"Class"},{"name":"SourcedActEntry","href":"Hi.Numerical.SourcedActEntry.html","topicHref":"Hi.Numerical.SourcedActEntry.html","topicUid":"Hi.Numerical.SourcedActEntry","type":"Class"},{"name":"SpindleDirection","href":"Hi.Numerical.SpindleDirection.html","topicHref":"Hi.Numerical.SpindleDirection.html","topicUid":"Hi.Numerical.SpindleDirection","type":"Enum"},{"name":"SubStringKit","href":"Hi.Numerical.SubStringKit.html","topicHref":"Hi.Numerical.SubStringKit.html","topicUid":"Hi.Numerical.SubStringKit","type":"Class"},{"name":"SubStringKit.ActivationMode","href":"Hi.Numerical.SubStringKit.ActivationMode.html","topicHref":"Hi.Numerical.SubStringKit.ActivationMode.html","topicUid":"Hi.Numerical.SubStringKit.ActivationMode","type":"Enum"},{"name":"ToolConfigNotFoundException","href":"Hi.Numerical.ToolConfigNotFoundException.html","topicHref":"Hi.Numerical.ToolConfigNotFoundException.html","topicUid":"Hi.Numerical.ToolConfigNotFoundException","type":"Class"}]},{"name":"Hi.Numerical.Acts","href":"Hi.Numerical.Acts.html","topicHref":"Hi.Numerical.Acts.html","topicUid":"Hi.Numerical.Acts","type":"Namespace","items":[{"name":"ActActualDateTime","href":"Hi.Numerical.Acts.ActActualDateTime.html","topicHref":"Hi.Numerical.Acts.ActActualDateTime.html","topicUid":"Hi.Numerical.Acts.ActActualDateTime","type":"Class"},{"name":"ActActualTimecode","href":"Hi.Numerical.Acts.ActActualTimecode.html","topicHref":"Hi.Numerical.Acts.ActActualTimecode.html","topicUid":"Hi.Numerical.Acts.ActActualTimecode","type":"Class"},{"name":"ActClArc","href":"Hi.Numerical.Acts.ActClArc.html","topicHref":"Hi.Numerical.Acts.ActClArc.html","topicUid":"Hi.Numerical.Acts.ActClArc","type":"Class"},{"name":"ActClArcMcXyzabcContour","href":"Hi.Numerical.Acts.ActClArcMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.ActClArcMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.ActClArcMcXyzabcContour","type":"Class"},{"name":"ActClLinear","href":"Hi.Numerical.Acts.ActClLinear.html","topicHref":"Hi.Numerical.Acts.ActClLinear.html","topicUid":"Hi.Numerical.Acts.ActClLinear","type":"Class"},{"name":"ActClLinearMcXyzabcContour","href":"Hi.Numerical.Acts.ActClLinearMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.ActClLinearMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.ActClLinearMcXyzabcContour","type":"Class"},{"name":"ActClStep","href":"Hi.Numerical.Acts.ActClStep.html","topicHref":"Hi.Numerical.Acts.ActClStep.html","topicUid":"Hi.Numerical.Acts.ActClStep","type":"Class"},{"name":"ActClTeleport","href":"Hi.Numerical.Acts.ActClTeleport.html","topicHref":"Hi.Numerical.Acts.ActClTeleport.html","topicUid":"Hi.Numerical.Acts.ActClTeleport","type":"Class"},{"name":"ActCooling","href":"Hi.Numerical.Acts.ActCooling.html","topicHref":"Hi.Numerical.Acts.ActCooling.html","topicUid":"Hi.Numerical.Acts.ActCooling","type":"Class"},{"name":"ActData","href":"Hi.Numerical.Acts.ActData.html","topicHref":"Hi.Numerical.Acts.ActData.html","topicUid":"Hi.Numerical.Acts.ActData","type":"Class"},{"name":"ActDelay","href":"Hi.Numerical.Acts.ActDelay.html","topicHref":"Hi.Numerical.Acts.ActDelay.html","topicUid":"Hi.Numerical.Acts.ActDelay","type":"Class"},{"name":"ActFeedrate","href":"Hi.Numerical.Acts.ActFeedrate.html","topicHref":"Hi.Numerical.Acts.ActFeedrate.html","topicUid":"Hi.Numerical.Acts.ActFeedrate","type":"Class"},{"name":"ActHiddenStateChanged","href":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicHref":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicUid":"Hi.Numerical.Acts.ActHiddenStateChanged","type":"Class"},{"name":"ActIntentionalSkip","href":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicHref":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicUid":"Hi.Numerical.Acts.ActIntentionalSkip","type":"Class"},{"name":"ActLineBegin","href":"Hi.Numerical.Acts.ActLineBegin.html","topicHref":"Hi.Numerical.Acts.ActLineBegin.html","topicUid":"Hi.Numerical.Acts.ActLineBegin","type":"Class"},{"name":"ActLineCsScript","href":"Hi.Numerical.Acts.ActLineCsScript.html","topicHref":"Hi.Numerical.Acts.ActLineCsScript.html","topicUid":"Hi.Numerical.Acts.ActLineCsScript","type":"Class"},{"name":"ActLineEnd","href":"Hi.Numerical.Acts.ActLineEnd.html","topicHref":"Hi.Numerical.Acts.ActLineEnd.html","topicUid":"Hi.Numerical.Acts.ActLineEnd","type":"Class"},{"name":"ActMcPolarLinearContour","href":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcPolarLinearContour","type":"Class"},{"name":"ActMcPolarSpiralContour","href":"Hi.Numerical.Acts.ActMcPolarSpiralContour.html","topicHref":"Hi.Numerical.Acts.ActMcPolarSpiralContour.html","topicUid":"Hi.Numerical.Acts.ActMcPolarSpiralContour","type":"Class"},{"name":"ActMcXyzLinearContour","href":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzLinearContour","type":"Class"},{"name":"ActMcXyzSpiralContour","href":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzSpiralContour","type":"Class"},{"name":"ActMcXyzStep","href":"Hi.Numerical.Acts.ActMcXyzStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzStep","type":"Class"},{"name":"ActMcXyzabcLinearContour","href":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcLinearContour","type":"Class"},{"name":"ActMcXyzabcStep","href":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcStep","type":"Class"},{"name":"ActMcXyzabcTeleport","href":"Hi.Numerical.Acts.ActMcXyzabcTeleport.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcTeleport.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcTeleport","type":"Class"},{"name":"ActRapid","href":"Hi.Numerical.Acts.ActRapid.html","topicHref":"Hi.Numerical.Acts.ActRapid.html","topicUid":"Hi.Numerical.Acts.ActRapid","type":"Class"},{"name":"ActSpindleDirection","href":"Hi.Numerical.Acts.ActSpindleDirection.html","topicHref":"Hi.Numerical.Acts.ActSpindleDirection.html","topicUid":"Hi.Numerical.Acts.ActSpindleDirection","type":"Class"},{"name":"ActSpindleOrientation","href":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicHref":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicUid":"Hi.Numerical.Acts.ActSpindleOrientation","type":"Class"},{"name":"ActSpindleSpeed","href":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicHref":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicUid":"Hi.Numerical.Acts.ActSpindleSpeed","type":"Class"},{"name":"ActToolingStep","href":"Hi.Numerical.Acts.ActToolingStep.html","topicHref":"Hi.Numerical.Acts.ActToolingStep.html","topicUid":"Hi.Numerical.Acts.ActToolingStep","type":"Class"},{"name":"ActToolingTeleport","href":"Hi.Numerical.Acts.ActToolingTeleport.html","topicHref":"Hi.Numerical.Acts.ActToolingTeleport.html","topicUid":"Hi.Numerical.Acts.ActToolingTeleport","type":"Class"},{"name":"ActUnknownSkip","href":"Hi.Numerical.Acts.ActUnknownSkip.html","topicHref":"Hi.Numerical.Acts.ActUnknownSkip.html","topicUid":"Hi.Numerical.Acts.ActUnknownSkip","type":"Class"},{"name":"ActUtil","href":"Hi.Numerical.Acts.ActUtil.html","topicHref":"Hi.Numerical.Acts.ActUtil.html","topicUid":"Hi.Numerical.Acts.ActUtil","type":"Class"},{"name":"ArcRadialClosure","href":"Hi.Numerical.Acts.ArcRadialClosure.html","topicHref":"Hi.Numerical.Acts.ArcRadialClosure.html","topicUid":"Hi.Numerical.Acts.ArcRadialClosure","type":"Class"},{"name":"IAct","href":"Hi.Numerical.Acts.IAct.html","topicHref":"Hi.Numerical.Acts.IAct.html","topicUid":"Hi.Numerical.Acts.IAct","type":"Interface"},{"name":"IActClMove","href":"Hi.Numerical.Acts.IActClMove.html","topicHref":"Hi.Numerical.Acts.IActClMove.html","topicUid":"Hi.Numerical.Acts.IActClMove","type":"Interface"},{"name":"IActDuration","href":"Hi.Numerical.Acts.IActDuration.html","topicHref":"Hi.Numerical.Acts.IActDuration.html","topicUid":"Hi.Numerical.Acts.IActDuration","type":"Interface"},{"name":"IActMachineStep","href":"Hi.Numerical.Acts.IActMachineStep.html","topicHref":"Hi.Numerical.Acts.IActMachineStep.html","topicUid":"Hi.Numerical.Acts.IActMachineStep","type":"Interface"},{"name":"IActMcXyzContour","href":"Hi.Numerical.Acts.IActMcXyzContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzContour","type":"Interface"},{"name":"IActMcXyzabcContour","href":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzabcContour","type":"Interface"},{"name":"IActSkip","href":"Hi.Numerical.Acts.IActSkip.html","topicHref":"Hi.Numerical.Acts.IActSkip.html","topicUid":"Hi.Numerical.Acts.IActSkip","type":"Interface"},{"name":"IActTooling","href":"Hi.Numerical.Acts.IActTooling.html","topicHref":"Hi.Numerical.Acts.IActTooling.html","topicUid":"Hi.Numerical.Acts.IActTooling","type":"Interface"},{"name":"IWorkTimeAttrib","href":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicHref":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicUid":"Hi.Numerical.Acts.IWorkTimeAttrib","type":"Interface"},{"name":"IWorkTimeGetter","href":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeGetter","type":"Interface"},{"name":"IWorkTimeSetter","href":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeSetter","type":"Interface"},{"name":"StateActRunner","href":"Hi.Numerical.Acts.StateActRunner.html","topicHref":"Hi.Numerical.Acts.StateActRunner.html","topicUid":"Hi.Numerical.Acts.StateActRunner","type":"Class"}]},{"name":"Hi.Numerical.Args","href":"Hi.Numerical.Args.html","topicHref":"Hi.Numerical.Args.html","topicUid":"Hi.Numerical.Args","type":"Namespace","items":[{"name":"OrthogonalPlaneFlag","href":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicHref":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicUid":"Hi.Numerical.Args.OrthogonalPlaneFlag","type":"Enum"},{"name":"PolarModeDirEnum","href":"Hi.Numerical.Args.PolarModeDirEnum.html","topicHref":"Hi.Numerical.Args.PolarModeDirEnum.html","topicUid":"Hi.Numerical.Args.PolarModeDirEnum","type":"Enum"},{"name":"PolarPairDef","href":"Hi.Numerical.Args.PolarPairDef.html","topicHref":"Hi.Numerical.Args.PolarPairDef.html","topicUid":"Hi.Numerical.Args.PolarPairDef","type":"Class"}]},{"name":"Hi.Numerical.ClsfParsers","href":"Hi.Numerical.ClsfParsers.html","topicHref":"Hi.Numerical.ClsfParsers.html","topicUid":"Hi.Numerical.ClsfParsers","type":"Namespace","items":[{"name":"ClArcMcMotionSemantic","href":"Hi.Numerical.ClsfParsers.ClArcMcMotionSemantic.html","topicHref":"Hi.Numerical.ClsfParsers.ClArcMcMotionSemantic.html","topicUid":"Hi.Numerical.ClsfParsers.ClArcMcMotionSemantic","type":"Class"},{"name":"ClMotionSemantic","href":"Hi.Numerical.ClsfParsers.ClMotionSemantic.html","topicHref":"Hi.Numerical.ClsfParsers.ClMotionSemantic.html","topicUid":"Hi.Numerical.ClsfParsers.ClMotionSemantic","type":"Class"},{"name":"ClMotionValveSemantic","href":"Hi.Numerical.ClsfParsers.ClMotionValveSemantic.html","topicHref":"Hi.Numerical.ClsfParsers.ClMotionValveSemantic.html","topicUid":"Hi.Numerical.ClsfParsers.ClMotionValveSemantic","type":"Class"},{"name":"ClTeleportMcMotionSemantic","href":"Hi.Numerical.ClsfParsers.ClTeleportMcMotionSemantic.html","topicHref":"Hi.Numerical.ClsfParsers.ClTeleportMcMotionSemantic.html","topicUid":"Hi.Numerical.ClsfParsers.ClTeleportMcMotionSemantic","type":"Class"},{"name":"ClToMcTransformSyntax","href":"Hi.Numerical.ClsfParsers.ClToMcTransformSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.ClToMcTransformSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.ClToMcTransformSyntax","type":"Class"},{"name":"ClsfKeys","href":"Hi.Numerical.ClsfParsers.ClsfKeys.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfKeys.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfKeys","type":"Class"},{"name":"ClsfRecordCleanupSyntax","href":"Hi.Numerical.ClsfParsers.ClsfRecordCleanupSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfRecordCleanupSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfRecordCleanupSyntax","type":"Class"},{"name":"ClsfRecordSyntax","href":"Hi.Numerical.ClsfParsers.ClsfRecordSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfRecordSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfRecordSyntax","type":"Class"},{"name":"ClsfRunnerConfig","href":"Hi.Numerical.ClsfParsers.ClsfRunnerConfig.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfRunnerConfig.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfRunnerConfig","type":"Class"},{"name":"ClsfSegmenter","href":"Hi.Numerical.ClsfParsers.ClsfSegmenter.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfSegmenter.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfSegmenter","type":"Class"},{"name":"ClsfToolBuildSemantic","href":"Hi.Numerical.ClsfParsers.ClsfToolBuildSemantic.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfToolBuildSemantic.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfToolBuildSemantic","type":"Class"},{"name":"MsysCoordinateOffsetSyntax","href":"Hi.Numerical.ClsfParsers.MsysCoordinateOffsetSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.MsysCoordinateOffsetSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.MsysCoordinateOffsetSyntax","type":"Class"},{"name":"NxClRunner","href":"Hi.Numerical.ClsfParsers.NxClRunner.html","topicHref":"Hi.Numerical.ClsfParsers.NxClRunner.html","topicUid":"Hi.Numerical.ClsfParsers.NxClRunner","type":"Class"},{"name":"RecordToClMotionSyntax","href":"Hi.Numerical.ClsfParsers.RecordToClMotionSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToClMotionSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToClMotionSyntax","type":"Class"},{"name":"RecordToCoolantSyntax","href":"Hi.Numerical.ClsfParsers.RecordToCoolantSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToCoolantSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToCoolantSyntax","type":"Class"},{"name":"RecordToFeedrateSyntax","href":"Hi.Numerical.ClsfParsers.RecordToFeedrateSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToFeedrateSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToFeedrateSyntax","type":"Class"},{"name":"RecordToMsysSyntax","href":"Hi.Numerical.ClsfParsers.RecordToMsysSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToMsysSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToMsysSyntax","type":"Class"},{"name":"RecordToSpindleSyntax","href":"Hi.Numerical.ClsfParsers.RecordToSpindleSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToSpindleSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToSpindleSyntax","type":"Class"},{"name":"RecordToToolingSyntax","href":"Hi.Numerical.ClsfParsers.RecordToToolingSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToToolingSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToToolingSyntax","type":"Class"}]},{"name":"Hi.Numerical.CsvParsers","href":"Hi.Numerical.CsvParsers.html","topicHref":"Hi.Numerical.CsvParsers.html","topicUid":"Hi.Numerical.CsvParsers","type":"Namespace","items":[{"name":"CsvActDataSemantic","href":"Hi.Numerical.CsvParsers.CsvActDataSemantic.html","topicHref":"Hi.Numerical.CsvParsers.CsvActDataSemantic.html","topicUid":"Hi.Numerical.CsvParsers.CsvActDataSemantic","type":"Class"},{"name":"CsvActualTimeSemantic","href":"Hi.Numerical.CsvParsers.CsvActualTimeSemantic.html","topicHref":"Hi.Numerical.CsvParsers.CsvActualTimeSemantic.html","topicUid":"Hi.Numerical.CsvParsers.CsvActualTimeSemantic","type":"Class"},{"name":"CsvMotionSemantic","href":"Hi.Numerical.CsvParsers.CsvMotionSemantic.html","topicHref":"Hi.Numerical.CsvParsers.CsvMotionSemantic.html","topicUid":"Hi.Numerical.CsvParsers.CsvMotionSemantic","type":"Class"},{"name":"CsvRowSyntax","href":"Hi.Numerical.CsvParsers.CsvRowSyntax.html","topicHref":"Hi.Numerical.CsvParsers.CsvRowSyntax.html","topicUid":"Hi.Numerical.CsvParsers.CsvRowSyntax","type":"Class"},{"name":"CsvRunnerConfig","href":"Hi.Numerical.CsvParsers.CsvRunnerConfig.html","topicHref":"Hi.Numerical.CsvParsers.CsvRunnerConfig.html","topicUid":"Hi.Numerical.CsvParsers.CsvRunnerConfig","type":"Class"},{"name":"CsvSegmenter","href":"Hi.Numerical.CsvParsers.CsvSegmenter.html","topicHref":"Hi.Numerical.CsvParsers.CsvSegmenter.html","topicUid":"Hi.Numerical.CsvParsers.CsvSegmenter","type":"Class"},{"name":"GeneralCsvRunner","href":"Hi.Numerical.CsvParsers.GeneralCsvRunner.html","topicHref":"Hi.Numerical.CsvParsers.GeneralCsvRunner.html","topicUid":"Hi.Numerical.CsvParsers.GeneralCsvRunner","type":"Class"},{"name":"RowToCoolantSyntax","href":"Hi.Numerical.CsvParsers.RowToCoolantSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToCoolantSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToCoolantSyntax","type":"Class"},{"name":"RowToCsScriptSyntax","href":"Hi.Numerical.CsvParsers.RowToCsScriptSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToCsScriptSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToCsScriptSyntax","type":"Class"},{"name":"RowToFeedrateSyntax","href":"Hi.Numerical.CsvParsers.RowToFeedrateSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToFeedrateSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToFeedrateSyntax","type":"Class"},{"name":"RowToMachineCoordinateSyntax","href":"Hi.Numerical.CsvParsers.RowToMachineCoordinateSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToMachineCoordinateSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToMachineCoordinateSyntax","type":"Class"},{"name":"RowToMotionEventSyntax","href":"Hi.Numerical.CsvParsers.RowToMotionEventSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToMotionEventSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToMotionEventSyntax","type":"Class"},{"name":"RowToSpindleSyntax","href":"Hi.Numerical.CsvParsers.RowToSpindleSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToSpindleSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToSpindleSyntax","type":"Class"},{"name":"RowToTimingSyntax","href":"Hi.Numerical.CsvParsers.RowToTimingSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToTimingSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToTimingSyntax","type":"Class"},{"name":"RowToToolingSyntax","href":"Hi.Numerical.CsvParsers.RowToToolingSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToToolingSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToToolingSyntax","type":"Class"}]},{"name":"Hi.Numerical.FilePlayers","href":"Hi.Numerical.FilePlayers.html","topicHref":"Hi.Numerical.FilePlayers.html","topicUid":"Hi.Numerical.FilePlayers","type":"Namespace","items":[{"name":"HardNcRunner","href":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicHref":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicUid":"Hi.Numerical.FilePlayers.HardNcRunner","type":"Class"}]},{"name":"Hi.Numerical.MachiningMotionResolutionUtils","href":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils","type":"Namespace","items":[{"name":"FeedPerCycleMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution","type":"Class"},{"name":"FeedPerToothMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution","type":"Class"},{"name":"FixedMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution","type":"Class"},{"name":"IMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution","type":"Interface"}]},{"name":"Hi.Numerical.NcArgs","href":"Hi.Numerical.NcArgs.html","topicHref":"Hi.Numerical.NcArgs.html","topicUid":"Hi.Numerical.NcArgs","type":"Namespace","items":[{"name":"ArcNcArg","href":"Hi.Numerical.NcArgs.ArcNcArg.html","topicHref":"Hi.Numerical.NcArgs.ArcNcArg.html","topicUid":"Hi.Numerical.NcArgs.ArcNcArg","type":"Class"},{"name":"G28Arg","href":"Hi.Numerical.NcArgs.G28Arg.html","topicHref":"Hi.Numerical.NcArgs.G28Arg.html","topicUid":"Hi.Numerical.NcArgs.G28Arg","type":"Class"},{"name":"Group07NcArg","href":"Hi.Numerical.NcArgs.Group07NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group07NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group07NcArg","type":"Class"},{"name":"Group09NcArg","href":"Hi.Numerical.NcArgs.Group09NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group09NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group09NcArg","type":"Class"},{"name":"HeidenhainCycleDef7Arg","href":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg","type":"Class"},{"name":"HeidenhainPlaneSpatialArg","href":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg","type":"Class"},{"name":"IHeidenhainBlockCacheArg","href":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg","type":"Interface"},{"name":"IHeidenhainPlaneArg","href":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg","type":"Interface"},{"name":"ITiltPlaneNcArg","href":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicHref":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicUid":"Hi.Numerical.NcArgs.ITiltPlaneNcArg","type":"Interface"},{"name":"NcArgCycle800","href":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicHref":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicUid":"Hi.Numerical.NcArgs.NcArgCycle800","type":"Class"},{"name":"NcArgG68","href":"Hi.Numerical.NcArgs.NcArgG68.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68","type":"Class"},{"name":"NcArgG68p2","href":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68p2","type":"Class"},{"name":"NcArgSiemensFrame","href":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicHref":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicUid":"Hi.Numerical.NcArgs.NcArgSiemensFrame","type":"Class"},{"name":"PausingNcArg","href":"Hi.Numerical.NcArgs.PausingNcArg.html","topicHref":"Hi.Numerical.NcArgs.PausingNcArg.html","topicUid":"Hi.Numerical.NcArgs.PausingNcArg","type":"Class"}]},{"name":"Hi.Numerical.StepSelectionUtils","href":"Hi.Numerical.StepSelectionUtils.html","topicHref":"Hi.Numerical.StepSelectionUtils.html","topicUid":"Hi.Numerical.StepSelectionUtils","type":"Namespace","items":[{"name":"AnchorMode","href":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicHref":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicUid":"Hi.Numerical.StepSelectionUtils.AnchorMode","type":"Enum"},{"name":"BoundSelector","href":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelector","type":"Class"},{"name":"BoundSelectorHost","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost","type":"Class"},{"name":"BoundSelectorPair","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair","type":"Class"},{"name":"BoundSelectorPair.BoundLocale","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale","type":"Enum"},{"name":"BoundSelectorStepSectionBundle","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle","type":"Class"},{"name":"BoundSelectorUtil","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil","type":"Class"},{"name":"DistanceShift","href":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.DistanceShift","type":"Class"},{"name":"IStepShift","href":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.IStepShift","type":"Interface"},{"name":"TimeShift","href":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.TimeShift","type":"Class"}]},{"name":"Hi.Numerical.Xyzabc","href":"Hi.Numerical.Xyzabc.html","topicHref":"Hi.Numerical.Xyzabc.html","topicUid":"Hi.Numerical.Xyzabc","type":"Namespace","items":[{"name":"Abc","href":"Hi.Numerical.Xyzabc.Abc.html","topicHref":"Hi.Numerical.Xyzabc.Abc.html","topicUid":"Hi.Numerical.Xyzabc.Abc","type":"Struct"},{"name":"CodeXyzabcChain","href":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.CodeXyzabcChain","type":"Class"},{"name":"GeneralXyzabcChain","href":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.GeneralXyzabcChain","type":"Class"},{"name":"IGetMcXyzabc","href":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.IGetMcXyzabc","type":"Interface"},{"name":"IGetXyzabcChain","href":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IGetXyzabcChain","type":"Interface"},{"name":"IMachineKinematics","href":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicHref":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicUid":"Hi.Numerical.Xyzabc.IMachineKinematics","type":"Interface"},{"name":"ISetMcXyzabc","href":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.ISetMcXyzabc","type":"Interface"},{"name":"IXyzabcChain","href":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IXyzabcChain","type":"Interface"},{"name":"ReflectedXyzabcChain","href":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain","type":"Class"},{"name":"XyzabcSolver","href":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcSolver","type":"Class"},{"name":"XyzabcUtil","href":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcUtil","type":"Class"}]},{"name":"Hi.PanelModels","href":"Hi.PanelModels.html","topicHref":"Hi.PanelModels.html","topicUid":"Hi.PanelModels","type":"Namespace","items":[{"name":"HiKey","href":"Hi.PanelModels.HiKey.html","topicHref":"Hi.PanelModels.HiKey.html","topicUid":"Hi.PanelModels.HiKey","type":"Enum"},{"name":"HiKeyEvent","href":"Hi.PanelModels.HiKeyEvent.html","topicHref":"Hi.PanelModels.HiKeyEvent.html","topicUid":"Hi.PanelModels.HiKeyEvent","type":"Class"},{"name":"HiModifierKeys","href":"Hi.PanelModels.HiModifierKeys.html","topicHref":"Hi.PanelModels.HiModifierKeys.html","topicUid":"Hi.PanelModels.HiModifierKeys","type":"Enum"},{"name":"HiMouseButton","href":"Hi.PanelModels.HiMouseButton.html","topicHref":"Hi.PanelModels.HiMouseButton.html","topicUid":"Hi.PanelModels.HiMouseButton","type":"Enum"},{"name":"HiMouseButtonEvent","href":"Hi.PanelModels.HiMouseButtonEvent.html","topicHref":"Hi.PanelModels.HiMouseButtonEvent.html","topicUid":"Hi.PanelModels.HiMouseButtonEvent","type":"Class"},{"name":"HiMouseButtonMask","href":"Hi.PanelModels.HiMouseButtonMask.html","topicHref":"Hi.PanelModels.HiMouseButtonMask.html","topicUid":"Hi.PanelModels.HiMouseButtonMask","type":"Enum"},{"name":"HiMouseButtonMaskUtil","href":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicHref":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicUid":"Hi.PanelModels.HiMouseButtonMaskUtil","type":"Class"},{"name":"HiMouseMoveEvent","href":"Hi.PanelModels.HiMouseMoveEvent.html","topicHref":"Hi.PanelModels.HiMouseMoveEvent.html","topicUid":"Hi.PanelModels.HiMouseMoveEvent","type":"Class"},{"name":"HiMouseWheelEvent","href":"Hi.PanelModels.HiMouseWheelEvent.html","topicHref":"Hi.PanelModels.HiMouseWheelEvent.html","topicUid":"Hi.PanelModels.HiMouseWheelEvent","type":"Class"},{"name":"PanelModel","href":"Hi.PanelModels.PanelModel.html","topicHref":"Hi.PanelModels.PanelModel.html","topicUid":"Hi.PanelModels.PanelModel","type":"Class"}]},{"name":"Hi.Parallels","href":"Hi.Parallels.html","topicHref":"Hi.Parallels.html","topicUid":"Hi.Parallels","type":"Namespace","items":[{"name":"CurrentThreadTaskScheduler","href":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicHref":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicUid":"Hi.Parallels.CurrentThreadTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskScheduler","href":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicHref":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicUid":"Hi.Parallels.DistributedQueueTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskStarter","href":"Hi.Parallels.DistributedQueueTaskStarter.html","topicHref":"Hi.Parallels.DistributedQueueTaskStarter.html","topicUid":"Hi.Parallels.DistributedQueueTaskStarter","type":"Class"},{"name":"LockUtil","href":"Hi.Parallels.LockUtil.html","topicHref":"Hi.Parallels.LockUtil.html","topicUid":"Hi.Parallels.LockUtil","type":"Class"},{"name":"PriorityTaskScheduler","href":"Hi.Parallels.PriorityTaskScheduler.html","topicHref":"Hi.Parallels.PriorityTaskScheduler.html","topicUid":"Hi.Parallels.PriorityTaskScheduler","type":"Class"},{"name":"QueueTaskScheduler","href":"Hi.Parallels.QueueTaskScheduler.html","topicHref":"Hi.Parallels.QueueTaskScheduler.html","topicUid":"Hi.Parallels.QueueTaskScheduler","type":"Class"},{"name":"ReaderWriterLockUtil","href":"Hi.Parallels.ReaderWriterLockUtil.html","topicHref":"Hi.Parallels.ReaderWriterLockUtil.html","topicUid":"Hi.Parallels.ReaderWriterLockUtil","type":"Class"},{"name":"SemaphoreUtil","href":"Hi.Parallels.SemaphoreUtil.html","topicHref":"Hi.Parallels.SemaphoreUtil.html","topicUid":"Hi.Parallels.SemaphoreUtil","type":"Class"},{"name":"ThreadSafeSet","href":"Hi.Parallels.ThreadSafeSet-1.html","topicHref":"Hi.Parallels.ThreadSafeSet-1.html","topicUid":"Hi.Parallels.ThreadSafeSet`1","type":"Class"}]},{"name":"Hi.Physics","href":"Hi.Physics.html","topicHref":"Hi.Physics.html","topicUid":"Hi.Physics","type":"Namespace","items":[{"name":"AmpPhase","href":"Hi.Physics.AmpPhase.html","topicHref":"Hi.Physics.AmpPhase.html","topicUid":"Hi.Physics.AmpPhase","type":"Class"},{"name":"CoatingMaterial","href":"Hi.Physics.CoatingMaterial.html","topicHref":"Hi.Physics.CoatingMaterial.html","topicUid":"Hi.Physics.CoatingMaterial","type":"Class"},{"name":"CoolantHeatCondition","href":"Hi.Physics.CoolantHeatCondition.html","topicHref":"Hi.Physics.CoolantHeatCondition.html","topicUid":"Hi.Physics.CoolantHeatCondition","type":"Class"},{"name":"CutterMaterial","href":"Hi.Physics.CutterMaterial.html","topicHref":"Hi.Physics.CutterMaterial.html","topicUid":"Hi.Physics.CutterMaterial","type":"Class"},{"name":"IGetThermalLayerList","href":"Hi.Physics.IGetThermalLayerList.html","topicHref":"Hi.Physics.IGetThermalLayerList.html","topicUid":"Hi.Physics.IGetThermalLayerList","type":"Interface"},{"name":"IStructureMaterial","href":"Hi.Physics.IStructureMaterial.html","topicHref":"Hi.Physics.IStructureMaterial.html","topicUid":"Hi.Physics.IStructureMaterial","type":"Interface"},{"name":"ISuccessivePhysicsBriefAccessor","href":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicHref":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicUid":"Hi.Physics.ISuccessivePhysicsBriefAccessor","type":"Interface"},{"name":"ISurfaceMaterial","href":"Hi.Physics.ISurfaceMaterial.html","topicHref":"Hi.Physics.ISurfaceMaterial.html","topicUid":"Hi.Physics.ISurfaceMaterial","type":"Interface"},{"name":"ITimecoded","href":"Hi.Physics.ITimecoded.html","topicHref":"Hi.Physics.ITimecoded.html","topicUid":"Hi.Physics.ITimecoded","type":"Interface"},{"name":"MillingTemperatureUtil","href":"Hi.Physics.MillingTemperatureUtil.html","topicHref":"Hi.Physics.MillingTemperatureUtil.html","topicUid":"Hi.Physics.MillingTemperatureUtil","type":"Class"},{"name":"SeqPhysicsBrief","href":"Hi.Physics.SeqPhysicsBrief.html","topicHref":"Hi.Physics.SeqPhysicsBrief.html","topicUid":"Hi.Physics.SeqPhysicsBrief","type":"Class"},{"name":"StructureMaterial","href":"Hi.Physics.StructureMaterial.html","topicHref":"Hi.Physics.StructureMaterial.html","topicUid":"Hi.Physics.StructureMaterial","type":"Class"},{"name":"TemperatureUtil","href":"Hi.Physics.TemperatureUtil.html","topicHref":"Hi.Physics.TemperatureUtil.html","topicUid":"Hi.Physics.TemperatureUtil","type":"Class"},{"name":"TemperatureVsHardness","href":"Hi.Physics.TemperatureVsHardness.html","topicHref":"Hi.Physics.TemperatureVsHardness.html","topicUid":"Hi.Physics.TemperatureVsHardness","type":"Class"},{"name":"ThermalLayer1D","href":"Hi.Physics.ThermalLayer1D.html","topicHref":"Hi.Physics.ThermalLayer1D.html","topicUid":"Hi.Physics.ThermalLayer1D","type":"Class"},{"name":"TimeSeriesUtil","href":"Hi.Physics.TimeSeriesUtil.html","topicHref":"Hi.Physics.TimeSeriesUtil.html","topicUid":"Hi.Physics.TimeSeriesUtil","type":"Class"},{"name":"TimeValue","href":"Hi.Physics.TimeValue.html","topicHref":"Hi.Physics.TimeValue.html","topicUid":"Hi.Physics.TimeValue","type":"Class"},{"name":"WorkpieceMaterial","href":"Hi.Physics.WorkpieceMaterial.html","topicHref":"Hi.Physics.WorkpieceMaterial.html","topicUid":"Hi.Physics.WorkpieceMaterial","type":"Class"}]},{"name":"Hi.SessionCommands","href":"Hi.SessionCommands.html","topicHref":"Hi.SessionCommands.html","topicUid":"Hi.SessionCommands","type":"Namespace","items":[{"name":"CollisionDetectionCommand","href":"Hi.SessionCommands.CollisionDetectionCommand.html","topicHref":"Hi.SessionCommands.CollisionDetectionCommand.html","topicUid":"Hi.SessionCommands.CollisionDetectionCommand","type":"Class"},{"name":"CommandCatalogAttribute","href":"Hi.SessionCommands.CommandCatalogAttribute.html","topicHref":"Hi.SessionCommands.CommandCatalogAttribute.html","topicUid":"Hi.SessionCommands.CommandCatalogAttribute","type":"Class"},{"name":"CommandCategory","href":"Hi.SessionCommands.CommandCategory.html","topicHref":"Hi.SessionCommands.CommandCategory.html","topicUid":"Hi.SessionCommands.CommandCategory","type":"Enum"},{"name":"CommandFieldAttribute","href":"Hi.SessionCommands.CommandFieldAttribute.html","topicHref":"Hi.SessionCommands.CommandFieldAttribute.html","topicUid":"Hi.SessionCommands.CommandFieldAttribute","type":"Class"},{"name":"EnablingWrapper","href":"Hi.SessionCommands.EnablingWrapper.html","topicHref":"Hi.SessionCommands.EnablingWrapper.html","topicUid":"Hi.SessionCommands.EnablingWrapper","type":"Class"},{"name":"ExportMeshedGeomToStlCommand","href":"Hi.SessionCommands.ExportMeshedGeomToStlCommand.html","topicHref":"Hi.SessionCommands.ExportMeshedGeomToStlCommand.html","topicUid":"Hi.SessionCommands.ExportMeshedGeomToStlCommand","type":"Class"},{"name":"GeomDiffCommand","href":"Hi.SessionCommands.GeomDiffCommand.html","topicHref":"Hi.SessionCommands.GeomDiffCommand.html","topicUid":"Hi.SessionCommands.GeomDiffCommand","type":"Class"},{"name":"ISessionCommand","href":"Hi.SessionCommands.ISessionCommand.html","topicHref":"Hi.SessionCommands.ISessionCommand.html","topicUid":"Hi.SessionCommands.ISessionCommand","type":"Interface"},{"name":"ITitleCommand","href":"Hi.SessionCommands.ITitleCommand.html","topicHref":"Hi.SessionCommands.ITitleCommand.html","topicUid":"Hi.SessionCommands.ITitleCommand","type":"Interface"},{"name":"Lang","href":"Hi.SessionCommands.Lang.html","topicHref":"Hi.SessionCommands.Lang.html","topicUid":"Hi.SessionCommands.Lang","type":"Class"},{"name":"ListCommand","href":"Hi.SessionCommands.ListCommand.html","topicHref":"Hi.SessionCommands.ListCommand.html","topicUid":"Hi.SessionCommands.ListCommand","type":"Class"},{"name":"MachiningMotionResolutionCommand","href":"Hi.SessionCommands.MachiningMotionResolutionCommand.html","topicHref":"Hi.SessionCommands.MachiningMotionResolutionCommand.html","topicUid":"Hi.SessionCommands.MachiningMotionResolutionCommand","type":"Class"},{"name":"MachiningResolutionCommand","href":"Hi.SessionCommands.MachiningResolutionCommand.html","topicHref":"Hi.SessionCommands.MachiningResolutionCommand.html","topicUid":"Hi.SessionCommands.MachiningResolutionCommand","type":"Class"},{"name":"NcCodeCommand","href":"Hi.SessionCommands.NcCodeCommand.html","topicHref":"Hi.SessionCommands.NcCodeCommand.html","topicUid":"Hi.SessionCommands.NcCodeCommand","type":"Class"},{"name":"NcFileCommand","href":"Hi.SessionCommands.NcFileCommand.html","topicHref":"Hi.SessionCommands.NcFileCommand.html","topicUid":"Hi.SessionCommands.NcFileCommand","type":"Class"},{"name":"NcOptOptionCommand","href":"Hi.SessionCommands.NcOptOptionCommand.html","topicHref":"Hi.SessionCommands.NcOptOptionCommand.html","topicUid":"Hi.SessionCommands.NcOptOptionCommand","type":"Class"},{"name":"OptimizeToFilesCommand","href":"Hi.SessionCommands.OptimizeToFilesCommand.html","topicHref":"Hi.SessionCommands.OptimizeToFilesCommand.html","topicUid":"Hi.SessionCommands.OptimizeToFilesCommand","type":"Class"},{"name":"PauseOnFailureCommand","href":"Hi.SessionCommands.PauseOnFailureCommand.html","topicHref":"Hi.SessionCommands.PauseOnFailureCommand.html","topicUid":"Hi.SessionCommands.PauseOnFailureCommand","type":"Class"},{"name":"PhysicsCommand","href":"Hi.SessionCommands.PhysicsCommand.html","topicHref":"Hi.SessionCommands.PhysicsCommand.html","topicUid":"Hi.SessionCommands.PhysicsCommand","type":"Class"},{"name":"PostExecutionCommand","href":"Hi.SessionCommands.PostExecutionCommand.html","topicHref":"Hi.SessionCommands.PostExecutionCommand.html","topicUid":"Hi.SessionCommands.PostExecutionCommand","type":"Class"},{"name":"PreSettingCommand","href":"Hi.SessionCommands.PreSettingCommand.html","topicHref":"Hi.SessionCommands.PreSettingCommand.html","topicUid":"Hi.SessionCommands.PreSettingCommand","type":"Class"},{"name":"RecordMeshedGeomActionEnum","href":"Hi.SessionCommands.RecordMeshedGeomActionEnum.html","topicHref":"Hi.SessionCommands.RecordMeshedGeomActionEnum.html","topicUid":"Hi.SessionCommands.RecordMeshedGeomActionEnum","type":"Enum"},{"name":"RecordMeshedGeomCommand","href":"Hi.SessionCommands.RecordMeshedGeomCommand.html","topicHref":"Hi.SessionCommands.RecordMeshedGeomCommand.html","topicUid":"Hi.SessionCommands.RecordMeshedGeomCommand","type":"Class"},{"name":"ScriptCommand","href":"Hi.SessionCommands.ScriptCommand.html","topicHref":"Hi.SessionCommands.ScriptCommand.html","topicUid":"Hi.SessionCommands.ScriptCommand","type":"Class"},{"name":"WriteShotFilesCommand","href":"Hi.SessionCommands.WriteShotFilesCommand.html","topicHref":"Hi.SessionCommands.WriteShotFilesCommand.html","topicUid":"Hi.SessionCommands.WriteShotFilesCommand","type":"Class"},{"name":"WriteStepFilesCommand","href":"Hi.SessionCommands.WriteStepFilesCommand.html","topicHref":"Hi.SessionCommands.WriteStepFilesCommand.html","topicUid":"Hi.SessionCommands.WriteStepFilesCommand","type":"Class"}]},{"name":"Hi.SessionShellUtils","href":"Hi.SessionShellUtils.html","topicHref":"Hi.SessionShellUtils.html","topicUid":"Hi.SessionShellUtils","type":"Namespace","items":[{"name":"ISessionShell","href":"Hi.SessionShellUtils.ISessionShell.html","topicHref":"Hi.SessionShellUtils.ISessionShell.html","topicUid":"Hi.SessionShellUtils.ISessionShell","type":"Interface"},{"name":"JsAceAttribute","href":"Hi.SessionShellUtils.JsAceAttribute.html","topicHref":"Hi.SessionShellUtils.JsAceAttribute.html","topicUid":"Hi.SessionShellUtils.JsAceAttribute","type":"Class"}]},{"name":"Hi.SqliteUtils","href":"Hi.SqliteUtils.html","topicHref":"Hi.SqliteUtils.html","topicUid":"Hi.SqliteUtils","type":"Namespace","items":[{"name":"SqliteIdentityRole","href":"Hi.SqliteUtils.SqliteIdentityRole.html","topicHref":"Hi.SqliteUtils.SqliteIdentityRole.html","topicUid":"Hi.SqliteUtils.SqliteIdentityRole","type":"Class"},{"name":"SqliteIdentityStorage","href":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage","type":"Class"},{"name":"SqliteIdentityStorage.RoleRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow","type":"Class"},{"name":"SqliteIdentityStorage.UserRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow","type":"Class"},{"name":"SqliteIdentityUser","href":"Hi.SqliteUtils.SqliteIdentityUser.html","topicHref":"Hi.SqliteUtils.SqliteIdentityUser.html","topicUid":"Hi.SqliteUtils.SqliteIdentityUser","type":"Class"},{"name":"SqliteRoleStore","href":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicHref":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicUid":"Hi.SqliteUtils.SqliteRoleStore`1","type":"Class"},{"name":"SqliteStepStorage","href":"Hi.SqliteUtils.SqliteStepStorage.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage","type":"Class"},{"name":"SqliteStepStorage.MillingStepLuggageRow","href":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow","type":"Class"},{"name":"SqliteUserStore","href":"Hi.SqliteUtils.SqliteUserStore-1.html","topicHref":"Hi.SqliteUtils.SqliteUserStore-1.html","topicUid":"Hi.SqliteUtils.SqliteUserStore`1","type":"Class"}]},{"name":"Hi.Test","href":"Hi.Test.html","topicHref":"Hi.Test.html","topicUid":"Hi.Test","type":"Namespace","items":[{"name":"TestCollision","href":"Hi.Test.TestCollision.html","topicHref":"Hi.Test.TestCollision.html","topicUid":"Hi.Test.TestCollision","type":"Class"}]},{"name":"Hi.UiExtensions","href":"Hi.UiExtensions.html","topicHref":"Hi.UiExtensions.html","topicUid":"Hi.UiExtensions","type":"Namespace","items":[{"name":"ChartBoundary","href":"Hi.UiExtensions.ChartBoundary.html","topicHref":"Hi.UiExtensions.ChartBoundary.html","topicUid":"Hi.UiExtensions.ChartBoundary","type":"Class"},{"name":"ChartBoundaryEnum","href":"Hi.UiExtensions.ChartBoundaryEnum.html","topicHref":"Hi.UiExtensions.ChartBoundaryEnum.html","topicUid":"Hi.UiExtensions.ChartBoundaryEnum","type":"Enum"},{"name":"NativeVisibility","href":"Hi.UiExtensions.NativeVisibility.html","topicHref":"Hi.UiExtensions.NativeVisibility.html","topicUid":"Hi.UiExtensions.NativeVisibility","type":"Enum"},{"name":"UiUtil","href":"Hi.UiExtensions.UiUtil.html","topicHref":"Hi.UiExtensions.UiUtil.html","topicUid":"Hi.UiExtensions.UiUtil","type":"Class"},{"name":"UiUtil.InvokeFunc","href":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicHref":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicUid":"Hi.UiExtensions.UiUtil.InvokeFunc","type":"Delegate"}]},{"name":"Hi.Vibrations","href":"Hi.Vibrations.html","topicHref":"Hi.Vibrations.html","topicUid":"Hi.Vibrations","type":"Namespace","items":[{"name":"AngularVelocityUtil","href":"Hi.Vibrations.AngularVelocityUtil.html","topicHref":"Hi.Vibrations.AngularVelocityUtil.html","topicUid":"Hi.Vibrations.AngularVelocityUtil","type":"Class"},{"name":"ForceAccelAmpPhase","href":"Hi.Vibrations.ForceAccelAmpPhase.html","topicHref":"Hi.Vibrations.ForceAccelAmpPhase.html","topicUid":"Hi.Vibrations.ForceAccelAmpPhase","type":"Class"},{"name":"ForceAccelFourierSeries","href":"Hi.Vibrations.ForceAccelFourierSeries.html","topicHref":"Hi.Vibrations.ForceAccelFourierSeries.html","topicUid":"Hi.Vibrations.ForceAccelFourierSeries","type":"Class"},{"name":"ForceAccelShot","href":"Hi.Vibrations.ForceAccelShot.html","topicHref":"Hi.Vibrations.ForceAccelShot.html","topicUid":"Hi.Vibrations.ForceAccelShot","type":"Class"},{"name":"ForceAccelUtil","href":"Hi.Vibrations.ForceAccelUtil.html","topicHref":"Hi.Vibrations.ForceAccelUtil.html","topicUid":"Hi.Vibrations.ForceAccelUtil","type":"Class"},{"name":"IAngularVelocityOwner","href":"Hi.Vibrations.IAngularVelocityOwner.html","topicHref":"Hi.Vibrations.IAngularVelocityOwner.html","topicUid":"Hi.Vibrations.IAngularVelocityOwner","type":"Interface"},{"name":"VibrationUtil","href":"Hi.Vibrations.VibrationUtil.html","topicHref":"Hi.Vibrations.VibrationUtil.html","topicUid":"Hi.Vibrations.VibrationUtil","type":"Class"},{"name":"WAmpPhase","href":"Hi.Vibrations.WAmpPhase.html","topicHref":"Hi.Vibrations.WAmpPhase.html","topicUid":"Hi.Vibrations.WAmpPhase","type":"Class"},{"name":"WAmpPhaseXyzTransformation","href":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicHref":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicUid":"Hi.Vibrations.WAmpPhaseXyzTransformation","type":"Class"}]},{"name":"Hi.WinForm.Disp","href":"Hi.WinForm.Disp.html","topicHref":"Hi.WinForm.Disp.html","topicUid":"Hi.WinForm.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WinForm.Disp.RenderingCanvas.html","topicHref":"Hi.WinForm.Disp.RenderingCanvas.html","topicUid":"Hi.WinForm.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingForm","href":"Hi.WinForm.Disp.RenderingForm.html","topicHref":"Hi.WinForm.Disp.RenderingForm.html","topicUid":"Hi.WinForm.Disp.RenderingForm","type":"Class"}]},{"name":"Hi.WpfPlus.Disp","href":"Hi.WpfPlus.Disp.html","topicHref":"Hi.WpfPlus.Disp.html","topicUid":"Hi.WpfPlus.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicHref":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicUid":"Hi.WpfPlus.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingWindow","href":"Hi.WpfPlus.Disp.RenderingWindow.html","topicHref":"Hi.WpfPlus.Disp.RenderingWindow.html","topicUid":"Hi.WpfPlus.Disp.RenderingWindow","type":"Class"},{"name":"WpfDispUtil","href":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicHref":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicUid":"Hi.WpfPlus.Disp.WpfDispUtil","type":"Class"}]},{"name":"HiMachining.Milling","href":"HiMachining.Milling.html","topicHref":"HiMachining.Milling.html","topicUid":"HiMachining.Milling","type":"Namespace","items":[{"name":"ClMillingDevice","href":"HiMachining.Milling.ClMillingDevice.html","topicHref":"HiMachining.Milling.ClMillingDevice.html","topicUid":"HiMachining.Milling.ClMillingDevice","type":"Class"}]}],"memberLayout":"SamePage"} +{"items":[{"name":"Hi.Cbtr","href":"Hi.Cbtr.html","topicHref":"Hi.Cbtr.html","topicUid":"Hi.Cbtr","type":"Namespace","items":[{"name":"CachedTris","href":"Hi.Cbtr.CachedTris.html","topicHref":"Hi.Cbtr.CachedTris.html","topicUid":"Hi.Cbtr.CachedTris","type":"Class"},{"name":"CachedTris.SweepingMode","href":"Hi.Cbtr.CachedTris.SweepingMode.html","topicHref":"Hi.Cbtr.CachedTris.SweepingMode.html","topicUid":"Hi.Cbtr.CachedTris.SweepingMode","type":"Enum"},{"name":"CbtrPickable","href":"Hi.Cbtr.CbtrPickable.html","topicHref":"Hi.Cbtr.CbtrPickable.html","topicUid":"Hi.Cbtr.CbtrPickable","type":"Class"},{"name":"ConstructionDefectDisplayee","href":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicHref":"Hi.Cbtr.ConstructionDefectDisplayee.html","topicUid":"Hi.Cbtr.ConstructionDefectDisplayee","type":"Class"},{"name":"CubeTree","href":"Hi.Cbtr.CubeTree.html","topicHref":"Hi.Cbtr.CubeTree.html","topicUid":"Hi.Cbtr.CubeTree","type":"Class"},{"name":"CubeTree.DefectNodeInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo","type":"Class"},{"name":"CubeTree.DefectNodeInfo.TriWireInfo","href":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicHref":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo.html","topicUid":"Hi.Cbtr.CubeTree.DefectNodeInfo.TriWireInfo","type":"Class"},{"name":"CubeTree.DefectTriWireInfoInterop","href":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicHref":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop.html","topicUid":"Hi.Cbtr.CubeTree.DefectTriWireInfoInterop","type":"Struct"},{"name":"CubeTree.InfNodeInfo","href":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicHref":"Hi.Cbtr.CubeTree.InfNodeInfo.html","topicUid":"Hi.Cbtr.CubeTree.InfNodeInfo","type":"Class"},{"name":"CubeTree.TriWireRelationInterop","href":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicHref":"Hi.Cbtr.CubeTree.TriWireRelationInterop.html","topicUid":"Hi.Cbtr.CubeTree.TriWireRelationInterop","type":"Struct"},{"name":"CubeTree.diff_response_func_t","href":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicHref":"Hi.Cbtr.CubeTree.diff_response_func_t.html","topicUid":"Hi.Cbtr.CubeTree.diff_response_func_t","type":"Delegate"},{"name":"CubeTreeExportExtensions","href":"Hi.Cbtr.CubeTreeExportExtensions.html","topicHref":"Hi.Cbtr.CubeTreeExportExtensions.html","topicUid":"Hi.Cbtr.CubeTreeExportExtensions","type":"Class"},{"name":"CubeTreeFile","href":"Hi.Cbtr.CubeTreeFile.html","topicHref":"Hi.Cbtr.CubeTreeFile.html","topicUid":"Hi.Cbtr.CubeTreeFile","type":"Class"},{"name":"DiffAttachment","href":"Hi.Cbtr.DiffAttachment.html","topicHref":"Hi.Cbtr.DiffAttachment.html","topicUid":"Hi.Cbtr.DiffAttachment","type":"Class"},{"name":"GeomBoolCache","href":"Hi.Cbtr.GeomBoolCache.html","topicHref":"Hi.Cbtr.GeomBoolCache.html","topicUid":"Hi.Cbtr.GeomBoolCache","type":"Class"},{"name":"GeomBoolCacheEnum","href":"Hi.Cbtr.GeomBoolCacheEnum.html","topicHref":"Hi.Cbtr.GeomBoolCacheEnum.html","topicUid":"Hi.Cbtr.GeomBoolCacheEnum","type":"Enum"},{"name":"IGetInitStickConvex","href":"Hi.Cbtr.IGetInitStickConvex.html","topicHref":"Hi.Cbtr.IGetInitStickConvex.html","topicUid":"Hi.Cbtr.IGetInitStickConvex","type":"Interface"},{"name":"InfDefectDisplayee","href":"Hi.Cbtr.InfDefectDisplayee.html","topicHref":"Hi.Cbtr.InfDefectDisplayee.html","topicUid":"Hi.Cbtr.InfDefectDisplayee","type":"Class"},{"name":"InitStickConvex","href":"Hi.Cbtr.InitStickConvex.html","topicHref":"Hi.Cbtr.InitStickConvex.html","topicUid":"Hi.Cbtr.InitStickConvex","type":"Class"},{"name":"Substraction","href":"Hi.Cbtr.Substraction.html","topicHref":"Hi.Cbtr.Substraction.html","topicUid":"Hi.Cbtr.Substraction","type":"Class"},{"name":"UnhighlightablePickable","href":"Hi.Cbtr.UnhighlightablePickable.html","topicHref":"Hi.Cbtr.UnhighlightablePickable.html","topicUid":"Hi.Cbtr.UnhighlightablePickable","type":"Class"},{"name":"UnmanagedAddition","href":"Hi.Cbtr.UnmanagedAddition.html","topicHref":"Hi.Cbtr.UnmanagedAddition.html","topicUid":"Hi.Cbtr.UnmanagedAddition","type":"Class"},{"name":"UnmanagedSubstraction","href":"Hi.Cbtr.UnmanagedSubstraction.html","topicHref":"Hi.Cbtr.UnmanagedSubstraction.html","topicUid":"Hi.Cbtr.UnmanagedSubstraction","type":"Class"},{"name":"WireCube","href":"Hi.Cbtr.WireCube.html","topicHref":"Hi.Cbtr.WireCube.html","topicUid":"Hi.Cbtr.WireCube","type":"Class"},{"name":"node_diff_t","href":"Hi.Cbtr.node_diff_t.html","topicHref":"Hi.Cbtr.node_diff_t.html","topicUid":"Hi.Cbtr.node_diff_t","type":"Struct"}]},{"name":"Hi.Collision","href":"Hi.Collision.html","topicHref":"Hi.Collision.html","topicUid":"Hi.Collision","type":"Namespace","items":[{"name":"AnchoredCollidableLeaf","href":"Hi.Collision.AnchoredCollidableLeaf.html","topicHref":"Hi.Collision.AnchoredCollidableLeaf.html","topicUid":"Hi.Collision.AnchoredCollidableLeaf","type":"Class"},{"name":"AnchoredCollidablePair","href":"Hi.Collision.AnchoredCollidablePair.html","topicHref":"Hi.Collision.AnchoredCollidablePair.html","topicUid":"Hi.Collision.AnchoredCollidablePair","type":"Class"},{"name":"CollidableStl","href":"Hi.Collision.CollidableStl.html","topicHref":"Hi.Collision.CollidableStl.html","topicUid":"Hi.Collision.CollidableStl","type":"Class"},{"name":"CollisionFlag","href":"Hi.Collision.CollisionFlag.html","topicHref":"Hi.Collision.CollisionFlag.html","topicUid":"Hi.Collision.CollisionFlag","type":"Enum"},{"name":"CollisionIndexPair","href":"Hi.Collision.CollisionIndexPair.html","topicHref":"Hi.Collision.CollisionIndexPair.html","topicUid":"Hi.Collision.CollisionIndexPair","type":"Class"},{"name":"CollisionUtil","href":"Hi.Collision.CollisionUtil.html","topicHref":"Hi.Collision.CollisionUtil.html","topicUid":"Hi.Collision.CollisionUtil","type":"Class"},{"name":"FuncAnchoredCollidable","href":"Hi.Collision.FuncAnchoredCollidable.html","topicHref":"Hi.Collision.FuncAnchoredCollidable.html","topicUid":"Hi.Collision.FuncAnchoredCollidable","type":"Class"},{"name":"IAnchoredCollidableBased","href":"Hi.Collision.IAnchoredCollidableBased.html","topicHref":"Hi.Collision.IAnchoredCollidableBased.html","topicUid":"Hi.Collision.IAnchoredCollidableBased","type":"Interface"},{"name":"IAnchoredCollidableLeaf","href":"Hi.Collision.IAnchoredCollidableLeaf.html","topicHref":"Hi.Collision.IAnchoredCollidableLeaf.html","topicUid":"Hi.Collision.IAnchoredCollidableLeaf","type":"Interface"},{"name":"IAnchoredCollidableNode","href":"Hi.Collision.IAnchoredCollidableNode.html","topicHref":"Hi.Collision.IAnchoredCollidableNode.html","topicUid":"Hi.Collision.IAnchoredCollidableNode","type":"Interface"},{"name":"IAnchoredCollidableStem","href":"Hi.Collision.IAnchoredCollidableStem.html","topicHref":"Hi.Collision.IAnchoredCollidableStem.html","topicUid":"Hi.Collision.IAnchoredCollidableStem","type":"Interface"},{"name":"ICollidable","href":"Hi.Collision.ICollidable.html","topicHref":"Hi.Collision.ICollidable.html","topicUid":"Hi.Collision.ICollidable","type":"Interface"},{"name":"ICollidee","href":"Hi.Collision.ICollidee.html","topicHref":"Hi.Collision.ICollidee.html","topicUid":"Hi.Collision.ICollidee","type":"Interface"},{"name":"ICollisionArena","href":"Hi.Collision.ICollisionArena.html","topicHref":"Hi.Collision.ICollisionArena.html","topicUid":"Hi.Collision.ICollisionArena","type":"Interface"},{"name":"ICollisionIndex","href":"Hi.Collision.ICollisionIndex.html","topicHref":"Hi.Collision.ICollisionIndex.html","topicUid":"Hi.Collision.ICollisionIndex","type":"Interface"},{"name":"IGetAnchoredCollidablePairs","href":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicHref":"Hi.Collision.IGetAnchoredCollidablePairs.html","topicUid":"Hi.Collision.IGetAnchoredCollidablePairs","type":"Interface"},{"name":"IGetCollidable","href":"Hi.Collision.IGetCollidable.html","topicHref":"Hi.Collision.IGetCollidable.html","topicUid":"Hi.Collision.IGetCollidable","type":"Interface"},{"name":"IGetCollisionIndexPairs","href":"Hi.Collision.IGetCollisionIndexPairs.html","topicHref":"Hi.Collision.IGetCollisionIndexPairs.html","topicUid":"Hi.Collision.IGetCollisionIndexPairs","type":"Interface"},{"name":"IGetDefaultCollidablePairs","href":"Hi.Collision.IGetDefaultCollidablePairs.html","topicHref":"Hi.Collision.IGetDefaultCollidablePairs.html","topicUid":"Hi.Collision.IGetDefaultCollidablePairs","type":"Interface"},{"name":"IGetTriTree","href":"Hi.Collision.IGetTriTree.html","topicHref":"Hi.Collision.IGetTriTree.html","topicUid":"Hi.Collision.IGetTriTree","type":"Interface"},{"name":"MechCollisionResult","href":"Hi.Collision.MechCollisionResult.html","topicHref":"Hi.Collision.MechCollisionResult.html","topicUid":"Hi.Collision.MechCollisionResult","type":"Class"},{"name":"MechCollisionUtil","href":"Hi.Collision.MechCollisionUtil.html","topicHref":"Hi.Collision.MechCollisionUtil.html","topicUid":"Hi.Collision.MechCollisionUtil","type":"Class"},{"name":"TriTree","href":"Hi.Collision.TriTree.html","topicHref":"Hi.Collision.TriTree.html","topicUid":"Hi.Collision.TriTree","type":"Class"}]},{"name":"Hi.Collisions","href":"Hi.Collisions.html","topicHref":"Hi.Collisions.html","topicUid":"Hi.Collisions","type":"Namespace","items":[{"name":"AnchoredCollidabled","href":"Hi.Collisions.AnchoredCollidabled.html","topicHref":"Hi.Collisions.AnchoredCollidabled.html","topicUid":"Hi.Collisions.AnchoredCollidabled","type":"Class"},{"name":"IAnchoredCollidabled","href":"Hi.Collisions.IAnchoredCollidabled.html","topicHref":"Hi.Collisions.IAnchoredCollidabled.html","topicUid":"Hi.Collisions.IAnchoredCollidabled","type":"Interface"}]},{"name":"Hi.Coloring","href":"Hi.Coloring.html","topicHref":"Hi.Coloring.html","topicUid":"Hi.Coloring","type":"Namespace","items":[{"name":"ColorUtil","href":"Hi.Coloring.ColorUtil.html","topicHref":"Hi.Coloring.ColorUtil.html","topicUid":"Hi.Coloring.ColorUtil","type":"Class"},{"name":"DictionaryColorGuide","href":"Hi.Coloring.DictionaryColorGuide.html","topicHref":"Hi.Coloring.DictionaryColorGuide.html","topicUid":"Hi.Coloring.DictionaryColorGuide","type":"Class"},{"name":"DiscreteQuantityColorGuide","href":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicHref":"Hi.Coloring.DiscreteQuantityColorGuide.html","topicUid":"Hi.Coloring.DiscreteQuantityColorGuide","type":"Class"},{"name":"FilteredColorGuide","href":"Hi.Coloring.FilteredColorGuide.html","topicHref":"Hi.Coloring.FilteredColorGuide.html","topicUid":"Hi.Coloring.FilteredColorGuide","type":"Class"},{"name":"FuncRangeColorGuide","href":"Hi.Coloring.FuncRangeColorGuide.html","topicHref":"Hi.Coloring.FuncRangeColorGuide.html","topicUid":"Hi.Coloring.FuncRangeColorGuide","type":"Class"},{"name":"IColorGuide","href":"Hi.Coloring.IColorGuide.html","topicHref":"Hi.Coloring.IColorGuide.html","topicUid":"Hi.Coloring.IColorGuide","type":"Interface"},{"name":"IColorGuideProperty","href":"Hi.Coloring.IColorGuideProperty.html","topicHref":"Hi.Coloring.IColorGuideProperty.html","topicUid":"Hi.Coloring.IColorGuideProperty","type":"Interface"},{"name":"IGetColorGuide","href":"Hi.Coloring.IGetColorGuide.html","topicHref":"Hi.Coloring.IGetColorGuide.html","topicUid":"Hi.Coloring.IGetColorGuide","type":"Interface"},{"name":"IGetRangeColorRule","href":"Hi.Coloring.IGetRangeColorRule.html","topicHref":"Hi.Coloring.IGetRangeColorRule.html","topicUid":"Hi.Coloring.IGetRangeColorRule","type":"Interface"},{"name":"IGetRgb","href":"Hi.Coloring.IGetRgb.html","topicHref":"Hi.Coloring.IGetRgb.html","topicUid":"Hi.Coloring.IGetRgb","type":"Interface"},{"name":"IGetRgbWithPriority","href":"Hi.Coloring.IGetRgbWithPriority.html","topicHref":"Hi.Coloring.IGetRgbWithPriority.html","topicUid":"Hi.Coloring.IGetRgbWithPriority","type":"Interface"},{"name":"PlainColorGuide","href":"Hi.Coloring.PlainColorGuide.html","topicHref":"Hi.Coloring.PlainColorGuide.html","topicUid":"Hi.Coloring.PlainColorGuide","type":"Class"},{"name":"QuantityColorGuide","href":"Hi.Coloring.QuantityColorGuide.html","topicHref":"Hi.Coloring.QuantityColorGuide.html","topicUid":"Hi.Coloring.QuantityColorGuide","type":"Class"},{"name":"RangeColorRule","href":"Hi.Coloring.RangeColorRule.html","topicHref":"Hi.Coloring.RangeColorRule.html","topicUid":"Hi.Coloring.RangeColorRule","type":"Class"},{"name":"RatioRgbFuncEnum","href":"Hi.Coloring.RatioRgbFuncEnum.html","topicHref":"Hi.Coloring.RatioRgbFuncEnum.html","topicUid":"Hi.Coloring.RatioRgbFuncEnum","type":"Enum"},{"name":"RgbSeed","href":"Hi.Coloring.RgbSeed.html","topicHref":"Hi.Coloring.RgbSeed.html","topicUid":"Hi.Coloring.RgbSeed","type":"Class"}]},{"name":"Hi.Common","href":"Hi.Common.html","topicHref":"Hi.Common.html","topicUid":"Hi.Common","type":"Namespace","items":[{"name":"BinIoUtil","href":"Hi.Common.BinIoUtil.html","topicHref":"Hi.Common.BinIoUtil.html","topicUid":"Hi.Common.BinIoUtil","type":"Class"},{"name":"BitUtil","href":"Hi.Common.BitUtil.html","topicHref":"Hi.Common.BitUtil.html","topicUid":"Hi.Common.BitUtil","type":"Class"},{"name":"BlockingTimer","href":"Hi.Common.BlockingTimer.html","topicHref":"Hi.Common.BlockingTimer.html","topicUid":"Hi.Common.BlockingTimer","type":"Class"},{"name":"BytesUtil","href":"Hi.Common.BytesUtil.html","topicHref":"Hi.Common.BytesUtil.html","topicUid":"Hi.Common.BytesUtil","type":"Class"},{"name":"ConcurrentTimeCounter","href":"Hi.Common.ConcurrentTimeCounter.html","topicHref":"Hi.Common.ConcurrentTimeCounter.html","topicUid":"Hi.Common.ConcurrentTimeCounter","type":"Class"},{"name":"ConsoleUtil","href":"Hi.Common.ConsoleUtil.html","topicHref":"Hi.Common.ConsoleUtil.html","topicUid":"Hi.Common.ConsoleUtil","type":"Class"},{"name":"CppLogUtil","href":"Hi.Common.CppLogUtil.html","topicHref":"Hi.Common.CppLogUtil.html","topicUid":"Hi.Common.CppLogUtil","type":"Class"},{"name":"CppLogUtil.LogDelegate","href":"Hi.Common.CppLogUtil.LogDelegate.html","topicHref":"Hi.Common.CppLogUtil.LogDelegate.html","topicUid":"Hi.Common.CppLogUtil.LogDelegate","type":"Delegate"},{"name":"CultureTextAttribute","href":"Hi.Common.CultureTextAttribute.html","topicHref":"Hi.Common.CultureTextAttribute.html","topicUid":"Hi.Common.CultureTextAttribute","type":"Class"},{"name":"CultureUtil","href":"Hi.Common.CultureUtil.html","topicHref":"Hi.Common.CultureUtil.html","topicUid":"Hi.Common.CultureUtil","type":"Class"},{"name":"DuplicateUtil","href":"Hi.Common.DuplicateUtil.html","topicHref":"Hi.Common.DuplicateUtil.html","topicUid":"Hi.Common.DuplicateUtil","type":"Class"},{"name":"EnumUtil","href":"Hi.Common.EnumUtil.html","topicHref":"Hi.Common.EnumUtil.html","topicUid":"Hi.Common.EnumUtil","type":"Class"},{"name":"EnumerablePlayer","href":"Hi.Common.EnumerablePlayer.html","topicHref":"Hi.Common.EnumerablePlayer.html","topicUid":"Hi.Common.EnumerablePlayer","type":"Class"},{"name":"IAbstractNote","href":"Hi.Common.IAbstractNote.html","topicHref":"Hi.Common.IAbstractNote.html","topicUid":"Hi.Common.IAbstractNote","type":"Interface"},{"name":"IBinaryIo","href":"Hi.Common.IBinaryIo.html","topicHref":"Hi.Common.IBinaryIo.html","topicUid":"Hi.Common.IBinaryIo","type":"Interface"},{"name":"IClearCache","href":"Hi.Common.IClearCache.html","topicHref":"Hi.Common.IClearCache.html","topicUid":"Hi.Common.IClearCache","type":"Interface"},{"name":"ICommandTextSource","href":"Hi.Common.ICommandTextSource.html","topicHref":"Hi.Common.ICommandTextSource.html","topicUid":"Hi.Common.ICommandTextSource","type":"Interface"},{"name":"IDuplicate","href":"Hi.Common.IDuplicate.html","topicHref":"Hi.Common.IDuplicate.html","topicUid":"Hi.Common.IDuplicate","type":"Interface"},{"name":"IGetQuantityByKey","href":"Hi.Common.IGetQuantityByKey.html","topicHref":"Hi.Common.IGetQuantityByKey.html","topicUid":"Hi.Common.IGetQuantityByKey","type":"Interface"},{"name":"IGetSelectionName","href":"Hi.Common.IGetSelectionName.html","topicHref":"Hi.Common.IGetSelectionName.html","topicUid":"Hi.Common.IGetSelectionName","type":"Interface"},{"name":"INameNote","href":"Hi.Common.INameNote.html","topicHref":"Hi.Common.INameNote.html","topicUid":"Hi.Common.INameNote","type":"Interface"},{"name":"IPreferredFileName","href":"Hi.Common.IPreferredFileName.html","topicHref":"Hi.Common.IPreferredFileName.html","topicUid":"Hi.Common.IPreferredFileName","type":"Interface"},{"name":"IProgressFraction","href":"Hi.Common.IProgressFraction.html","topicHref":"Hi.Common.IProgressFraction.html","topicUid":"Hi.Common.IProgressFraction","type":"Interface"},{"name":"ISourceFile","href":"Hi.Common.ISourceFile.html","topicHref":"Hi.Common.ISourceFile.html","topicUid":"Hi.Common.ISourceFile","type":"Interface"},{"name":"IToPresentDto","href":"Hi.Common.IToPresentDto.html","topicHref":"Hi.Common.IToPresentDto.html","topicUid":"Hi.Common.IToPresentDto","type":"Interface"},{"name":"IUpdateByContent","href":"Hi.Common.IUpdateByContent.html","topicHref":"Hi.Common.IUpdateByContent.html","topicUid":"Hi.Common.IUpdateByContent","type":"Interface"},{"name":"IUriGetter","href":"Hi.Common.IUriGetter.html","topicHref":"Hi.Common.IUriGetter.html","topicUid":"Hi.Common.IUriGetter","type":"Interface"},{"name":"IWriteBin","href":"Hi.Common.IWriteBin.html","topicHref":"Hi.Common.IWriteBin.html","topicUid":"Hi.Common.IWriteBin","type":"Interface"},{"name":"IndexSegment","href":"Hi.Common.IndexSegment.html","topicHref":"Hi.Common.IndexSegment.html","topicUid":"Hi.Common.IndexSegment","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter","type":"Class"},{"name":"IntegerKeyDictionaryConverter","href":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicHref":"Hi.Common.IntegerKeyDictionaryConverter-1.html","topicUid":"Hi.Common.IntegerKeyDictionaryConverter`1","type":"Class"},{"name":"InternalException","href":"Hi.Common.InternalException.html","topicHref":"Hi.Common.InternalException.html","topicUid":"Hi.Common.InternalException","type":"Class"},{"name":"InvokeUtil","href":"Hi.Common.InvokeUtil.html","topicHref":"Hi.Common.InvokeUtil.html","topicUid":"Hi.Common.InvokeUtil","type":"Class"},{"name":"JsonUtil","href":"Hi.Common.JsonUtil.html","topicHref":"Hi.Common.JsonUtil.html","topicUid":"Hi.Common.JsonUtil","type":"Class"},{"name":"LooseRunner","href":"Hi.Common.LooseRunner.html","topicHref":"Hi.Common.LooseRunner.html","topicUid":"Hi.Common.LooseRunner","type":"Class"},{"name":"LooseRunner.MergedCancellationTokenRun","href":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicHref":"Hi.Common.LooseRunner.MergedCancellationTokenRun.html","topicUid":"Hi.Common.LooseRunner.MergedCancellationTokenRun","type":"Delegate"},{"name":"ManualUtil","href":"Hi.Common.ManualUtil.html","topicHref":"Hi.Common.ManualUtil.html","topicUid":"Hi.Common.ManualUtil","type":"Class"},{"name":"MaskUtil","href":"Hi.Common.MaskUtil.html","topicHref":"Hi.Common.MaskUtil.html","topicUid":"Hi.Common.MaskUtil","type":"Class"},{"name":"NameUtil","href":"Hi.Common.NameUtil.html","topicHref":"Hi.Common.NameUtil.html","topicUid":"Hi.Common.NameUtil","type":"Class"},{"name":"PacePlayee","href":"Hi.Common.PacePlayee.html","topicHref":"Hi.Common.PacePlayee.html","topicUid":"Hi.Common.PacePlayee","type":"Class"},{"name":"PacePlayer","href":"Hi.Common.PacePlayer.html","topicHref":"Hi.Common.PacePlayer.html","topicUid":"Hi.Common.PacePlayer","type":"Class"},{"name":"Pair","href":"Hi.Common.Pair-2.html","topicHref":"Hi.Common.Pair-2.html","topicUid":"Hi.Common.Pair`2","type":"Class"},{"name":"ProgressFraction","href":"Hi.Common.ProgressFraction.html","topicHref":"Hi.Common.ProgressFraction.html","topicUid":"Hi.Common.ProgressFraction","type":"Class"},{"name":"Range","href":"Hi.Common.Range-1.html","topicHref":"Hi.Common.Range-1.html","topicUid":"Hi.Common.Range`1","type":"Class"},{"name":"ResourceDefaultMarker","href":"Hi.Common.ResourceDefaultMarker.html","topicHref":"Hi.Common.ResourceDefaultMarker.html","topicUid":"Hi.Common.ResourceDefaultMarker","type":"Class"},{"name":"ResourceLayout","href":"Hi.Common.ResourceLayout.html","topicHref":"Hi.Common.ResourceLayout.html","topicUid":"Hi.Common.ResourceLayout","type":"Class"},{"name":"ResourceUtil","href":"Hi.Common.ResourceUtil.html","topicHref":"Hi.Common.ResourceUtil.html","topicUid":"Hi.Common.ResourceUtil","type":"Class"},{"name":"RoutineBlocker","href":"Hi.Common.RoutineBlocker.html","topicHref":"Hi.Common.RoutineBlocker.html","topicUid":"Hi.Common.RoutineBlocker","type":"Class"},{"name":"SearchResult","href":"Hi.Common.SearchResult.html","topicHref":"Hi.Common.SearchResult.html","topicUid":"Hi.Common.SearchResult","type":"Enum"},{"name":"SeqPairUtil","href":"Hi.Common.SeqPairUtil.html","topicHref":"Hi.Common.SeqPairUtil.html","topicUid":"Hi.Common.SeqPairUtil","type":"Class"},{"name":"SeqPair","href":"Hi.Common.SeqPair-1.html","topicHref":"Hi.Common.SeqPair-1.html","topicUid":"Hi.Common.SeqPair`1","type":"Class"},{"name":"ServerFileExplorerConfig","href":"Hi.Common.ServerFileExplorerConfig.html","topicHref":"Hi.Common.ServerFileExplorerConfig.html","topicUid":"Hi.Common.ServerFileExplorerConfig","type":"Class"},{"name":"StringLocalizer","href":"Hi.Common.StringLocalizer.html","topicHref":"Hi.Common.StringLocalizer.html","topicUid":"Hi.Common.StringLocalizer","type":"Class"},{"name":"StringUtil","href":"Hi.Common.StringUtil.html","topicHref":"Hi.Common.StringUtil.html","topicUid":"Hi.Common.StringUtil","type":"Class"},{"name":"TaskUtil","href":"Hi.Common.TaskUtil.html","topicHref":"Hi.Common.TaskUtil.html","topicUid":"Hi.Common.TaskUtil","type":"Class"},{"name":"TimeCounter","href":"Hi.Common.TimeCounter.html","topicHref":"Hi.Common.TimeCounter.html","topicUid":"Hi.Common.TimeCounter","type":"Class"}]},{"name":"Hi.Common.Collections","href":"Hi.Common.Collections.html","topicHref":"Hi.Common.Collections.html","topicUid":"Hi.Common.Collections","type":"Namespace","items":[{"name":"DictionaryUtil","href":"Hi.Common.Collections.DictionaryUtil.html","topicHref":"Hi.Common.Collections.DictionaryUtil.html","topicUid":"Hi.Common.Collections.DictionaryUtil","type":"Class"},{"name":"EnumerableUtil","href":"Hi.Common.Collections.EnumerableUtil.html","topicHref":"Hi.Common.Collections.EnumerableUtil.html","topicUid":"Hi.Common.Collections.EnumerableUtil","type":"Class"},{"name":"FixedSizeConcurrentLinkedListUtil","href":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicHref":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil.html","topicUid":"Hi.Common.Collections.FixedSizeConcurrentLinkedListUtil","type":"Class"},{"name":"LazyLinkedListNode","href":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicHref":"Hi.Common.Collections.LazyLinkedListNode-1.html","topicUid":"Hi.Common.Collections.LazyLinkedListNode`1","type":"Class"},{"name":"LazyLinkedList","href":"Hi.Common.Collections.LazyLinkedList-1.html","topicHref":"Hi.Common.Collections.LazyLinkedList-1.html","topicUid":"Hi.Common.Collections.LazyLinkedList`1","type":"Class"},{"name":"LinkedListUtil","href":"Hi.Common.Collections.LinkedListUtil.html","topicHref":"Hi.Common.Collections.LinkedListUtil.html","topicUid":"Hi.Common.Collections.LinkedListUtil","type":"Class"},{"name":"ListIndexBasedEnumerable","href":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedEnumerable-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedEnumerable`1","type":"Class"},{"name":"ListIndexBasedIEnumerator","href":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicHref":"Hi.Common.Collections.ListIndexBasedIEnumerator-1.html","topicUid":"Hi.Common.Collections.ListIndexBasedIEnumerator`1","type":"Class"},{"name":"ListUtil","href":"Hi.Common.Collections.ListUtil.html","topicHref":"Hi.Common.Collections.ListUtil.html","topicUid":"Hi.Common.Collections.ListUtil","type":"Class"},{"name":"ListUtil.OuterPolationMode","href":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicHref":"Hi.Common.Collections.ListUtil.OuterPolationMode.html","topicUid":"Hi.Common.Collections.ListUtil.OuterPolationMode","type":"Enum"},{"name":"SearchTargetMode","href":"Hi.Common.Collections.SearchTargetMode.html","topicHref":"Hi.Common.Collections.SearchTargetMode.html","topicUid":"Hi.Common.Collections.SearchTargetMode","type":"Enum"},{"name":"SeekDirection","href":"Hi.Common.Collections.SeekDirection.html","topicHref":"Hi.Common.Collections.SeekDirection.html","topicUid":"Hi.Common.Collections.SeekDirection","type":"Enum"},{"name":"SortedListUtil","href":"Hi.Common.Collections.SortedListUtil.html","topicHref":"Hi.Common.Collections.SortedListUtil.html","topicUid":"Hi.Common.Collections.SortedListUtil","type":"Class"},{"name":"SubList","href":"Hi.Common.Collections.SubList-1.html","topicHref":"Hi.Common.Collections.SubList-1.html","topicUid":"Hi.Common.Collections.SubList`1","type":"Class"},{"name":"SynList","href":"Hi.Common.Collections.SynList-1.html","topicHref":"Hi.Common.Collections.SynList-1.html","topicUid":"Hi.Common.Collections.SynList`1","type":"Class"}]},{"name":"Hi.Common.CsvUtils","href":"Hi.Common.CsvUtils.html","topicHref":"Hi.Common.CsvUtils.html","topicUid":"Hi.Common.CsvUtils","type":"Namespace","items":[{"name":"CsvInputKit","href":"Hi.Common.CsvUtils.CsvInputKit.html","topicHref":"Hi.Common.CsvUtils.CsvInputKit.html","topicUid":"Hi.Common.CsvUtils.CsvInputKit","type":"Class"},{"name":"CsvOutputKit","href":"Hi.Common.CsvUtils.CsvOutputKit.html","topicHref":"Hi.Common.CsvUtils.CsvOutputKit.html","topicUid":"Hi.Common.CsvUtils.CsvOutputKit","type":"Class"},{"name":"CsvUtil","href":"Hi.Common.CsvUtils.CsvUtil.html","topicHref":"Hi.Common.CsvUtils.CsvUtil.html","topicUid":"Hi.Common.CsvUtils.CsvUtil","type":"Class"},{"name":"ICsvRowIo","href":"Hi.Common.CsvUtils.ICsvRowIo.html","topicHref":"Hi.Common.CsvUtils.ICsvRowIo.html","topicUid":"Hi.Common.CsvUtils.ICsvRowIo","type":"Interface"},{"name":"IGetCsvDictionary","href":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicHref":"Hi.Common.CsvUtils.IGetCsvDictionary.html","topicUid":"Hi.Common.CsvUtils.IGetCsvDictionary","type":"Interface"}]},{"name":"Hi.Common.FileLines","href":"Hi.Common.FileLines.html","topicHref":"Hi.Common.FileLines.html","topicUid":"Hi.Common.FileLines","type":"Namespace","items":[{"name":"FileBeginEventArgs","href":"Hi.Common.FileLines.FileBeginEventArgs.html","topicHref":"Hi.Common.FileLines.FileBeginEventArgs.html","topicUid":"Hi.Common.FileLines.FileBeginEventArgs","type":"Class"},{"name":"FileEndEventArgs","href":"Hi.Common.FileLines.FileEndEventArgs.html","topicHref":"Hi.Common.FileLines.FileEndEventArgs.html","topicUid":"Hi.Common.FileLines.FileEndEventArgs","type":"Class"},{"name":"FileLineCharIndex","href":"Hi.Common.FileLines.FileLineCharIndex.html","topicHref":"Hi.Common.FileLines.FileLineCharIndex.html","topicUid":"Hi.Common.FileLines.FileLineCharIndex","type":"Class"},{"name":"FileLineCharIndexSegment","href":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicHref":"Hi.Common.FileLines.FileLineCharIndexSegment.html","topicUid":"Hi.Common.FileLines.FileLineCharIndexSegment","type":"Class"},{"name":"FileLineIndex","href":"Hi.Common.FileLines.FileLineIndex.html","topicHref":"Hi.Common.FileLines.FileLineIndex.html","topicUid":"Hi.Common.FileLines.FileLineIndex","type":"Class"},{"name":"FileLineUtil","href":"Hi.Common.FileLines.FileLineUtil.html","topicHref":"Hi.Common.FileLines.FileLineUtil.html","topicUid":"Hi.Common.FileLines.FileLineUtil","type":"Class"},{"name":"FileUtil","href":"Hi.Common.FileLines.FileUtil.html","topicHref":"Hi.Common.FileLines.FileUtil.html","topicUid":"Hi.Common.FileLines.FileUtil","type":"Class"},{"name":"IFileChangedEventSupport","href":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicHref":"Hi.Common.FileLines.IFileChangedEventSupport.html","topicUid":"Hi.Common.FileLines.IFileChangedEventSupport","type":"Interface"},{"name":"IFileLine","href":"Hi.Common.FileLines.IFileLine.html","topicHref":"Hi.Common.FileLines.IFileLine.html","topicUid":"Hi.Common.FileLines.IFileLine","type":"Interface"},{"name":"IFileLineCharIndex","href":"Hi.Common.FileLines.IFileLineCharIndex.html","topicHref":"Hi.Common.FileLines.IFileLineCharIndex.html","topicUid":"Hi.Common.FileLines.IFileLineCharIndex","type":"Interface"},{"name":"IFileLineIndex","href":"Hi.Common.FileLines.IFileLineIndex.html","topicHref":"Hi.Common.FileLines.IFileLineIndex.html","topicUid":"Hi.Common.FileLines.IFileLineIndex","type":"Interface"},{"name":"IGetFileLineIndex","href":"Hi.Common.FileLines.IGetFileLineIndex.html","topicHref":"Hi.Common.FileLines.IGetFileLineIndex.html","topicUid":"Hi.Common.FileLines.IGetFileLineIndex","type":"Interface"},{"name":"IGetIndexedFileLine","href":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IGetIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IGetIndexedFileLine","type":"Interface"},{"name":"IIndexedFileLine","href":"Hi.Common.FileLines.IIndexedFileLine.html","topicHref":"Hi.Common.FileLines.IIndexedFileLine.html","topicUid":"Hi.Common.FileLines.IIndexedFileLine","type":"Interface"},{"name":"ILineChangedEventSupport","href":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicHref":"Hi.Common.FileLines.ILineChangedEventSupport.html","topicUid":"Hi.Common.FileLines.ILineChangedEventSupport","type":"Interface"},{"name":"IndexedFile","href":"Hi.Common.FileLines.IndexedFile.html","topicHref":"Hi.Common.FileLines.IndexedFile.html","topicUid":"Hi.Common.FileLines.IndexedFile","type":"Class"},{"name":"IndexedFileLine","href":"Hi.Common.FileLines.IndexedFileLine.html","topicHref":"Hi.Common.FileLines.IndexedFileLine.html","topicUid":"Hi.Common.FileLines.IndexedFileLine","type":"Class"},{"name":"IndexedFileLineChar","href":"Hi.Common.FileLines.IndexedFileLineChar.html","topicHref":"Hi.Common.FileLines.IndexedFileLineChar.html","topicUid":"Hi.Common.FileLines.IndexedFileLineChar","type":"Class"},{"name":"LineBeginEventArgs","href":"Hi.Common.FileLines.LineBeginEventArgs.html","topicHref":"Hi.Common.FileLines.LineBeginEventArgs.html","topicUid":"Hi.Common.FileLines.LineBeginEventArgs","type":"Class"},{"name":"LineEndEventArgs","href":"Hi.Common.FileLines.LineEndEventArgs.html","topicHref":"Hi.Common.FileLines.LineEndEventArgs.html","topicUid":"Hi.Common.FileLines.LineEndEventArgs","type":"Class"}]},{"name":"Hi.Common.Messages","href":"Hi.Common.Messages.html","topicHref":"Hi.Common.Messages.html","topicUid":"Hi.Common.Messages","type":"Namespace","items":[{"name":"ActionProgress","href":"Hi.Common.Messages.ActionProgress-1.html","topicHref":"Hi.Common.Messages.ActionProgress-1.html","topicUid":"Hi.Common.Messages.ActionProgress`1","type":"Class"},{"name":"BootstrapTheme","href":"Hi.Common.Messages.BootstrapTheme.html","topicHref":"Hi.Common.Messages.BootstrapTheme.html","topicUid":"Hi.Common.Messages.BootstrapTheme","type":"Enum"},{"name":"Category","href":"Hi.Common.Messages.Category.html","topicHref":"Hi.Common.Messages.Category.html","topicUid":"Hi.Common.Messages.Category","type":"Enum"},{"name":"DebugUtil","href":"Hi.Common.Messages.DebugUtil.html","topicHref":"Hi.Common.Messages.DebugUtil.html","topicUid":"Hi.Common.Messages.DebugUtil","type":"Class"},{"name":"ExceptionUtil","href":"Hi.Common.Messages.ExceptionUtil.html","topicHref":"Hi.Common.Messages.ExceptionUtil.html","topicUid":"Hi.Common.Messages.ExceptionUtil","type":"Class"},{"name":"IMessage","href":"Hi.Common.Messages.IMessage.html","topicHref":"Hi.Common.Messages.IMessage.html","topicUid":"Hi.Common.Messages.IMessage","type":"Interface"},{"name":"IProgressMessage","href":"Hi.Common.Messages.IProgressMessage.html","topicHref":"Hi.Common.Messages.IProgressMessage.html","topicUid":"Hi.Common.Messages.IProgressMessage","type":"Interface"},{"name":"MessageBoardUtil","href":"Hi.Common.Messages.MessageBoardUtil.html","topicHref":"Hi.Common.Messages.MessageBoardUtil.html","topicUid":"Hi.Common.Messages.MessageBoardUtil","type":"Class"},{"name":"MessageCollector","href":"Hi.Common.Messages.MessageCollector.html","topicHref":"Hi.Common.Messages.MessageCollector.html","topicUid":"Hi.Common.Messages.MessageCollector","type":"Class"},{"name":"MessageFlag","href":"Hi.Common.Messages.MessageFlag.html","topicHref":"Hi.Common.Messages.MessageFlag.html","topicUid":"Hi.Common.Messages.MessageFlag","type":"Enum"},{"name":"MessageUtil","href":"Hi.Common.Messages.MessageUtil.html","topicHref":"Hi.Common.Messages.MessageUtil.html","topicUid":"Hi.Common.Messages.MessageUtil","type":"Class"},{"name":"Severity","href":"Hi.Common.Messages.Severity.html","topicHref":"Hi.Common.Messages.Severity.html","topicUid":"Hi.Common.Messages.Severity","type":"Enum"},{"name":"ShowMessageBoardDelegate","href":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicHref":"Hi.Common.Messages.ShowMessageBoardDelegate.html","topicUid":"Hi.Common.Messages.ShowMessageBoardDelegate","type":"Delegate"},{"name":"SimpleMessage","href":"Hi.Common.Messages.SimpleMessage.html","topicHref":"Hi.Common.Messages.SimpleMessage.html","topicUid":"Hi.Common.Messages.SimpleMessage","type":"Class"}]},{"name":"Hi.Common.MinMaxUtils","href":"Hi.Common.MinMaxUtils.html","topicHref":"Hi.Common.MinMaxUtils.html","topicUid":"Hi.Common.MinMaxUtils","type":"Namespace","items":[{"name":"IndexedMinMaxPos","href":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicHref":"Hi.Common.MinMaxUtils.IndexedMinMaxPos-2.html","topicUid":"Hi.Common.MinMaxUtils.IndexedMinMaxPos`2","type":"Class"},{"name":"MinMaxUtil","href":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicHref":"Hi.Common.MinMaxUtils.MinMaxUtil.html","topicUid":"Hi.Common.MinMaxUtils.MinMaxUtil","type":"Class"}]},{"name":"Hi.Common.NativeProgresses","href":"Hi.Common.NativeProgresses.html","topicHref":"Hi.Common.NativeProgresses.html","topicUid":"Hi.Common.NativeProgresses","type":"Namespace","items":[{"name":"NativeProgressFraction","href":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicHref":"Hi.Common.NativeProgresses.NativeProgressFraction.html","topicUid":"Hi.Common.NativeProgresses.NativeProgressFraction","type":"Class"},{"name":"progress_monitor_t","href":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicHref":"Hi.Common.NativeProgresses.progress_monitor_t.html","topicUid":"Hi.Common.NativeProgresses.progress_monitor_t","type":"Struct"},{"name":"report_progress_func_t","href":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicHref":"Hi.Common.NativeProgresses.report_progress_func_t.html","topicUid":"Hi.Common.NativeProgresses.report_progress_func_t","type":"Delegate"}]},{"name":"Hi.Common.ParallelBulkUtils","href":"Hi.Common.ParallelBulkUtils.html","topicHref":"Hi.Common.ParallelBulkUtils.html","topicUid":"Hi.Common.ParallelBulkUtils","type":"Namespace","items":[{"name":"ParallelBulkReader","href":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkReader`1","type":"Class"},{"name":"ParallelBulkWriter","href":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ParallelBulkWriter`1","type":"Class"},{"name":"ReadBulkDelegate","href":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicHref":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate-1.html","topicUid":"Hi.Common.ParallelBulkUtils.ReadBulkDelegate`1","type":"Delegate"},{"name":"SequentialBulkReader","href":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicHref":"Hi.Common.ParallelBulkUtils.SequentialBulkReader-1.html","topicUid":"Hi.Common.ParallelBulkUtils.SequentialBulkReader`1","type":"Class"}]},{"name":"Hi.Common.PathUtils","href":"Hi.Common.PathUtils.html","topicHref":"Hi.Common.PathUtils.html","topicUid":"Hi.Common.PathUtils","type":"Namespace","items":[{"name":"ExtendedNamedPath","href":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicHref":"Hi.Common.PathUtils.ExtendedNamedPath.html","topicUid":"Hi.Common.PathUtils.ExtendedNamedPath","type":"Class"},{"name":"HttpUtil","href":"Hi.Common.PathUtils.HttpUtil.html","topicHref":"Hi.Common.PathUtils.HttpUtil.html","topicUid":"Hi.Common.PathUtils.HttpUtil","type":"Class"},{"name":"Lang","href":"Hi.Common.PathUtils.Lang.html","topicHref":"Hi.Common.PathUtils.Lang.html","topicUid":"Hi.Common.PathUtils.Lang","type":"Class"},{"name":"NamedPath","href":"Hi.Common.PathUtils.NamedPath.html","topicHref":"Hi.Common.PathUtils.NamedPath.html","topicUid":"Hi.Common.PathUtils.NamedPath","type":"Class"},{"name":"PathUtil","href":"Hi.Common.PathUtils.PathUtil.html","topicHref":"Hi.Common.PathUtils.PathUtil.html","topicUid":"Hi.Common.PathUtils.PathUtil","type":"Class"}]},{"name":"Hi.Common.QueueCacheUtils","href":"Hi.Common.QueueCacheUtils.html","topicHref":"Hi.Common.QueueCacheUtils.html","topicUid":"Hi.Common.QueueCacheUtils","type":"Namespace","items":[{"name":"QueueCacherHost","href":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacherHost-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacherHost`1","type":"Class"},{"name":"QueueCacher","href":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicHref":"Hi.Common.QueueCacheUtils.QueueCacher-1.html","topicUid":"Hi.Common.QueueCacheUtils.QueueCacher`1","type":"Class"}]},{"name":"Hi.Common.XmlUtils","href":"Hi.Common.XmlUtils.html","topicHref":"Hi.Common.XmlUtils.html","topicUid":"Hi.Common.XmlUtils","type":"Namespace","items":[{"name":"FileRefSource","href":"Hi.Common.XmlUtils.FileRefSource-1.html","topicHref":"Hi.Common.XmlUtils.FileRefSource-1.html","topicUid":"Hi.Common.XmlUtils.FileRefSource`1","type":"Class"},{"name":"IMakeXmlSource","href":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicHref":"Hi.Common.XmlUtils.IMakeXmlSource.html","topicUid":"Hi.Common.XmlUtils.IMakeXmlSource","type":"Interface"},{"name":"IToXElement","href":"Hi.Common.XmlUtils.IToXElement.html","topicHref":"Hi.Common.XmlUtils.IToXElement.html","topicUid":"Hi.Common.XmlUtils.IToXElement","type":"Interface"},{"name":"ProjectApiVersion","href":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicHref":"Hi.Common.XmlUtils.ProjectApiVersion.html","topicUid":"Hi.Common.XmlUtils.ProjectApiVersion","type":"Class"},{"name":"SetFileDelegate","href":"Hi.Common.XmlUtils.SetFileDelegate.html","topicHref":"Hi.Common.XmlUtils.SetFileDelegate.html","topicUid":"Hi.Common.XmlUtils.SetFileDelegate","type":"Delegate"},{"name":"XFactory","href":"Hi.Common.XmlUtils.XFactory.html","topicHref":"Hi.Common.XmlUtils.XFactory.html","topicUid":"Hi.Common.XmlUtils.XFactory","type":"Class"},{"name":"XFactory.XGeneratorDelegate","href":"Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.XGeneratorDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.XGeneratorDelegate","type":"Delegate"},{"name":"XFactory.XmlExceptionDelegate","href":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicHref":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate.html","topicUid":"Hi.Common.XmlUtils.XFactory.XmlExceptionDelegate","type":"Delegate"},{"name":"XmlUtil","href":"Hi.Common.XmlUtils.XmlUtil.html","topicHref":"Hi.Common.XmlUtils.XmlUtil.html","topicUid":"Hi.Common.XmlUtils.XmlUtil","type":"Class"}]},{"name":"Hi.CutterLocations","href":"Hi.CutterLocations.html","topicHref":"Hi.CutterLocations.html","topicUid":"Hi.CutterLocations","type":"Namespace","items":[{"name":"IGetProgramCl","href":"Hi.CutterLocations.IGetProgramCl.html","topicHref":"Hi.CutterLocations.IGetProgramCl.html","topicUid":"Hi.CutterLocations.IGetProgramCl","type":"Interface"},{"name":"SimpleCl","href":"Hi.CutterLocations.SimpleCl.html","topicHref":"Hi.CutterLocations.SimpleCl.html","topicUid":"Hi.CutterLocations.SimpleCl","type":"Class"}]},{"name":"Hi.CutterLocations.ClPath","href":"Hi.CutterLocations.ClPath.html","topicHref":"Hi.CutterLocations.ClPath.html","topicUid":"Hi.CutterLocations.ClPath","type":"Namespace","items":[{"name":"ClCircleArc","href":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicHref":"Hi.CutterLocations.ClPath.ClCircleArc.html","topicUid":"Hi.CutterLocations.ClPath.ClCircleArc","type":"Class"},{"name":"ClLinear","href":"Hi.CutterLocations.ClPath.ClLinear.html","topicHref":"Hi.CutterLocations.ClPath.ClLinear.html","topicUid":"Hi.CutterLocations.ClPath.ClLinear","type":"Class"},{"name":"IClPath","href":"Hi.CutterLocations.ClPath.IClPath.html","topicHref":"Hi.CutterLocations.ClPath.IClPath.html","topicUid":"Hi.CutterLocations.ClPath.IClPath","type":"Interface"}]},{"name":"Hi.CutterLocations.ClStrips","href":"Hi.CutterLocations.ClStrips.html","topicHref":"Hi.CutterLocations.ClStrips.html","topicUid":"Hi.CutterLocations.ClStrips","type":"Namespace","items":[{"name":"ClStrip","href":"Hi.CutterLocations.ClStrips.ClStrip.html","topicHref":"Hi.CutterLocations.ClStrips.ClStrip.html","topicUid":"Hi.CutterLocations.ClStrips.ClStrip","type":"Class"},{"name":"ClStripPos","href":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicHref":"Hi.CutterLocations.ClStrips.ClStripPos.html","topicUid":"Hi.CutterLocations.ClStrips.ClStripPos","type":"Class"},{"name":"RgbFunc","href":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicHref":"Hi.CutterLocations.ClStrips.RgbFunc.html","topicUid":"Hi.CutterLocations.ClStrips.RgbFunc","type":"Delegate"}]},{"name":"Hi.Disp","href":"Hi.Disp.html","topicHref":"Hi.Disp.html","topicUid":"Hi.Disp","type":"Namespace","items":[{"name":"Bind","href":"Hi.Disp.Bind.html","topicHref":"Hi.Disp.Bind.html","topicUid":"Hi.Disp.Bind","type":"Class"},{"name":"Box3dDispUtil","href":"Hi.Disp.Box3dDispUtil.html","topicHref":"Hi.Disp.Box3dDispUtil.html","topicUid":"Hi.Disp.Box3dDispUtil","type":"Class"},{"name":"Box3dDispUtil.BoxableExpandToBox3dDel","href":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicHref":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel.html","topicUid":"Hi.Disp.Box3dDispUtil.BoxableExpandToBox3dDel","type":"Delegate"},{"name":"DelegateFuncDisplayee","href":"Hi.Disp.DelegateFuncDisplayee.html","topicHref":"Hi.Disp.DelegateFuncDisplayee.html","topicUid":"Hi.Disp.DelegateFuncDisplayee","type":"Class"},{"name":"DispEngine","href":"Hi.Disp.DispEngine.html","topicHref":"Hi.Disp.DispEngine.html","topicUid":"Hi.Disp.DispEngine","type":"Class"},{"name":"DispEngine.FrameReadyDelegate","href":"Hi.Disp.DispEngine.FrameReadyDelegate.html","topicHref":"Hi.Disp.DispEngine.FrameReadyDelegate.html","topicUid":"Hi.Disp.DispEngine.FrameReadyDelegate","type":"Delegate"},{"name":"DispEngineConfig","href":"Hi.Disp.DispEngineConfig.html","topicHref":"Hi.Disp.DispEngineConfig.html","topicUid":"Hi.Disp.DispEngineConfig","type":"Class"},{"name":"DispFrameUtil","href":"Hi.Disp.DispFrameUtil.html","topicHref":"Hi.Disp.DispFrameUtil.html","topicUid":"Hi.Disp.DispFrameUtil","type":"Class"},{"name":"DispList","href":"Hi.Disp.DispList.html","topicHref":"Hi.Disp.DispList.html","topicUid":"Hi.Disp.DispList","type":"Class"},{"name":"DispUtil","href":"Hi.Disp.DispUtil.html","topicHref":"Hi.Disp.DispUtil.html","topicUid":"Hi.Disp.DispUtil","type":"Class"},{"name":"Drawing","href":"Hi.Disp.Drawing.html","topicHref":"Hi.Disp.Drawing.html","topicUid":"Hi.Disp.Drawing","type":"Class"},{"name":"FramePins","href":"Hi.Disp.FramePins.html","topicHref":"Hi.Disp.FramePins.html","topicUid":"Hi.Disp.FramePins","type":"Class"},{"name":"FuncDisplayee","href":"Hi.Disp.FuncDisplayee.html","topicHref":"Hi.Disp.FuncDisplayee.html","topicUid":"Hi.Disp.FuncDisplayee","type":"Class"},{"name":"GL","href":"Hi.Disp.GL.html","topicHref":"Hi.Disp.GL.html","topicUid":"Hi.Disp.GL","type":"Class"},{"name":"IDisplayee","href":"Hi.Disp.IDisplayee.html","topicHref":"Hi.Disp.IDisplayee.html","topicUid":"Hi.Disp.IDisplayee","type":"Interface"},{"name":"IGetDispEngine","href":"Hi.Disp.IGetDispEngine.html","topicHref":"Hi.Disp.IGetDispEngine.html","topicUid":"Hi.Disp.IGetDispEngine","type":"Interface"},{"name":"IGetPickable","href":"Hi.Disp.IGetPickable.html","topicHref":"Hi.Disp.IGetPickable.html","topicUid":"Hi.Disp.IGetPickable","type":"Interface"},{"name":"IGlContextDirver","href":"Hi.Disp.IGlContextDirver.html","topicHref":"Hi.Disp.IGlContextDirver.html","topicUid":"Hi.Disp.IGlContextDirver","type":"Interface"},{"name":"MatStack","href":"Hi.Disp.MatStack.html","topicHref":"Hi.Disp.MatStack.html","topicUid":"Hi.Disp.MatStack","type":"Class"},{"name":"MatStack.ItemDisposable","href":"Hi.Disp.MatStack.ItemDisposable.html","topicHref":"Hi.Disp.MatStack.ItemDisposable.html","topicUid":"Hi.Disp.MatStack.ItemDisposable","type":"Class"},{"name":"MvpBoxRelation","href":"Hi.Disp.MvpBoxRelation.html","topicHref":"Hi.Disp.MvpBoxRelation.html","topicUid":"Hi.Disp.MvpBoxRelation","type":"Enum"},{"name":"Pickable","href":"Hi.Disp.Pickable.html","topicHref":"Hi.Disp.Pickable.html","topicUid":"Hi.Disp.Pickable","type":"Class"},{"name":"PinDrawing","href":"Hi.Disp.PinDrawing.html","topicHref":"Hi.Disp.PinDrawing.html","topicUid":"Hi.Disp.PinDrawing","type":"Class"},{"name":"PinFlags","href":"Hi.Disp.PinFlags.html","topicHref":"Hi.Disp.PinFlags.html","topicUid":"Hi.Disp.PinFlags","type":"Enum"},{"name":"PinRecord","href":"Hi.Disp.PinRecord.html","topicHref":"Hi.Disp.PinRecord.html","topicUid":"Hi.Disp.PinRecord","type":"Struct"},{"name":"PopModelMat","href":"Hi.Disp.PopModelMat.html","topicHref":"Hi.Disp.PopModelMat.html","topicUid":"Hi.Disp.PopModelMat","type":"Class"},{"name":"PushModelMat","href":"Hi.Disp.PushModelMat.html","topicHref":"Hi.Disp.PushModelMat.html","topicUid":"Hi.Disp.PushModelMat","type":"Class"},{"name":"Segment3dDispUtil","href":"Hi.Disp.Segment3dDispUtil.html","topicHref":"Hi.Disp.Segment3dDispUtil.html","topicUid":"Hi.Disp.Segment3dDispUtil","type":"Class"},{"name":"ShowEventPickable","href":"Hi.Disp.ShowEventPickable.html","topicHref":"Hi.Disp.ShowEventPickable.html","topicUid":"Hi.Disp.ShowEventPickable","type":"Class"},{"name":"Stamp","href":"Hi.Disp.Stamp.html","topicHref":"Hi.Disp.Stamp.html","topicUid":"Hi.Disp.Stamp","type":"Enum"},{"name":"StringDrawing","href":"Hi.Disp.StringDrawing.html","topicHref":"Hi.Disp.StringDrawing.html","topicUid":"Hi.Disp.StringDrawing","type":"Class"},{"name":"Tri3dDispUtil","href":"Hi.Disp.Tri3dDispUtil.html","topicHref":"Hi.Disp.Tri3dDispUtil.html","topicUid":"Hi.Disp.Tri3dDispUtil","type":"Class"},{"name":"Vec3dDispUtil","href":"Hi.Disp.Vec3dDispUtil.html","topicHref":"Hi.Disp.Vec3dDispUtil.html","topicUid":"Hi.Disp.Vec3dDispUtil","type":"Class"},{"name":"WrappedDisplayee","href":"Hi.Disp.WrappedDisplayee.html","topicHref":"Hi.Disp.WrappedDisplayee.html","topicUid":"Hi.Disp.WrappedDisplayee","type":"Class"}]},{"name":"Hi.Disp.Flag","href":"Hi.Disp.Flag.html","topicHref":"Hi.Disp.Flag.html","topicUid":"Hi.Disp.Flag","type":"Namespace","items":[{"name":"ColorScaleBar","href":"Hi.Disp.Flag.ColorScaleBar.html","topicHref":"Hi.Disp.Flag.ColorScaleBar.html","topicUid":"Hi.Disp.Flag.ColorScaleBar","type":"Class"},{"name":"CoordinateDrawing","href":"Hi.Disp.Flag.CoordinateDrawing.html","topicHref":"Hi.Disp.Flag.CoordinateDrawing.html","topicUid":"Hi.Disp.Flag.CoordinateDrawing","type":"Class"},{"name":"CubicalFlagDrawing","href":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicHref":"Hi.Disp.Flag.CubicalFlagDrawing.html","topicUid":"Hi.Disp.Flag.CubicalFlagDrawing","type":"Class"},{"name":"DimensionBar","href":"Hi.Disp.Flag.DimensionBar.html","topicHref":"Hi.Disp.Flag.DimensionBar.html","topicUid":"Hi.Disp.Flag.DimensionBar","type":"Class"},{"name":"DispCoverUtil","href":"Hi.Disp.Flag.DispCoverUtil.html","topicHref":"Hi.Disp.Flag.DispCoverUtil.html","topicUid":"Hi.Disp.Flag.DispCoverUtil","type":"Class"}]},{"name":"Hi.Disp.Treat","href":"Hi.Disp.Treat.html","topicHref":"Hi.Disp.Treat.html","topicUid":"Hi.Disp.Treat","type":"Namespace","items":[{"name":"LineWidthSwap","href":"Hi.Disp.Treat.LineWidthSwap.html","topicHref":"Hi.Disp.Treat.LineWidthSwap.html","topicUid":"Hi.Disp.Treat.LineWidthSwap","type":"Class"},{"name":"LineWidthTreat","href":"Hi.Disp.Treat.LineWidthTreat.html","topicHref":"Hi.Disp.Treat.LineWidthTreat.html","topicUid":"Hi.Disp.Treat.LineWidthTreat","type":"Class"},{"name":"PointSizeSwap","href":"Hi.Disp.Treat.PointSizeSwap.html","topicHref":"Hi.Disp.Treat.PointSizeSwap.html","topicUid":"Hi.Disp.Treat.PointSizeSwap","type":"Class"},{"name":"PointSizeTreat","href":"Hi.Disp.Treat.PointSizeTreat.html","topicHref":"Hi.Disp.Treat.PointSizeTreat.html","topicUid":"Hi.Disp.Treat.PointSizeTreat","type":"Class"},{"name":"RgbSwap","href":"Hi.Disp.Treat.RgbSwap.html","topicHref":"Hi.Disp.Treat.RgbSwap.html","topicUid":"Hi.Disp.Treat.RgbSwap","type":"Class"},{"name":"RgbTreat","href":"Hi.Disp.Treat.RgbTreat.html","topicHref":"Hi.Disp.Treat.RgbTreat.html","topicUid":"Hi.Disp.Treat.RgbTreat","type":"Class"},{"name":"RgbWrapper","href":"Hi.Disp.Treat.RgbWrapper.html","topicHref":"Hi.Disp.Treat.RgbWrapper.html","topicUid":"Hi.Disp.Treat.RgbWrapper","type":"Class"},{"name":"TransformationWrapper","href":"Hi.Disp.Treat.TransformationWrapper.html","topicHref":"Hi.Disp.Treat.TransformationWrapper.html","topicUid":"Hi.Disp.Treat.TransformationWrapper","type":"Class"}]},{"name":"Hi.Fanuc","href":"Hi.Fanuc.html","topicHref":"Hi.Fanuc.html","topicUid":"Hi.Fanuc","type":"Namespace","items":[{"name":"FanucVarTable","href":"Hi.Fanuc.FanucVarTable.html","topicHref":"Hi.Fanuc.FanucVarTable.html","topicUid":"Hi.Fanuc.FanucVarTable","type":"Class"},{"name":"FanucVarValue","href":"Hi.Fanuc.FanucVarValue.html","topicHref":"Hi.Fanuc.FanucVarValue.html","topicUid":"Hi.Fanuc.FanucVarValue","type":"Struct"}]},{"name":"Hi.Geom","href":"Hi.Geom.html","topicHref":"Hi.Geom.html","topicUid":"Hi.Geom","type":"Namespace","items":[{"name":"ArrayUtil","href":"Hi.Geom.ArrayUtil.html","topicHref":"Hi.Geom.ArrayUtil.html","topicUid":"Hi.Geom.ArrayUtil","type":"Class"},{"name":"AxisAngle4d","href":"Hi.Geom.AxisAngle4d.html","topicHref":"Hi.Geom.AxisAngle4d.html","topicUid":"Hi.Geom.AxisAngle4d","type":"Class"},{"name":"Box2d","href":"Hi.Geom.Box2d.html","topicHref":"Hi.Geom.Box2d.html","topicUid":"Hi.Geom.Box2d","type":"Class"},{"name":"Box2d.NoInit","href":"Hi.Geom.Box2d.NoInit.html","topicHref":"Hi.Geom.Box2d.NoInit.html","topicUid":"Hi.Geom.Box2d.NoInit","type":"Class"},{"name":"Box3d","href":"Hi.Geom.Box3d.html","topicHref":"Hi.Geom.Box3d.html","topicUid":"Hi.Geom.Box3d","type":"Class"},{"name":"Box3d.NoInit","href":"Hi.Geom.Box3d.NoInit.html","topicHref":"Hi.Geom.Box3d.NoInit.html","topicUid":"Hi.Geom.Box3d.NoInit","type":"Class"},{"name":"Cylindroid","href":"Hi.Geom.Cylindroid.html","topicHref":"Hi.Geom.Cylindroid.html","topicUid":"Hi.Geom.Cylindroid","type":"Class"},{"name":"DVec3d","href":"Hi.Geom.DVec3d.html","topicHref":"Hi.Geom.DVec3d.html","topicUid":"Hi.Geom.DVec3d","type":"Class"},{"name":"Dir","href":"Hi.Geom.Dir.html","topicHref":"Hi.Geom.Dir.html","topicUid":"Hi.Geom.Dir","type":"Enum"},{"name":"ExtendedCylinder","href":"Hi.Geom.ExtendedCylinder.html","topicHref":"Hi.Geom.ExtendedCylinder.html","topicUid":"Hi.Geom.ExtendedCylinder","type":"Class"},{"name":"Flat3d","href":"Hi.Geom.Flat3d.html","topicHref":"Hi.Geom.Flat3d.html","topicUid":"Hi.Geom.Flat3d","type":"Class"},{"name":"FractionStatus","href":"Hi.Geom.FractionStatus.html","topicHref":"Hi.Geom.FractionStatus.html","topicUid":"Hi.Geom.FractionStatus","type":"Enum"},{"name":"Fraction","href":"Hi.Geom.Fraction-1.html","topicHref":"Hi.Geom.Fraction-1.html","topicUid":"Hi.Geom.Fraction`1","type":"Struct"},{"name":"GenStlFuncHost","href":"Hi.Geom.GenStlFuncHost.html","topicHref":"Hi.Geom.GenStlFuncHost.html","topicUid":"Hi.Geom.GenStlFuncHost","type":"Class"},{"name":"GeomCombination","href":"Hi.Geom.GeomCombination.html","topicHref":"Hi.Geom.GeomCombination.html","topicUid":"Hi.Geom.GeomCombination","type":"Class"},{"name":"GeomUtil","href":"Hi.Geom.GeomUtil.html","topicHref":"Hi.Geom.GeomUtil.html","topicUid":"Hi.Geom.GeomUtil","type":"Class"},{"name":"IExpandToBox2d","href":"Hi.Geom.IExpandToBox2d.html","topicHref":"Hi.Geom.IExpandToBox2d.html","topicUid":"Hi.Geom.IExpandToBox2d","type":"Interface"},{"name":"IExpandToBox3d","href":"Hi.Geom.IExpandToBox3d.html","topicHref":"Hi.Geom.IExpandToBox3d.html","topicUid":"Hi.Geom.IExpandToBox3d","type":"Interface"},{"name":"IFlat3d","href":"Hi.Geom.IFlat3d.html","topicHref":"Hi.Geom.IFlat3d.html","topicUid":"Hi.Geom.IFlat3d","type":"Interface"},{"name":"IGenStl","href":"Hi.Geom.IGenStl.html","topicHref":"Hi.Geom.IGenStl.html","topicUid":"Hi.Geom.IGenStl","type":"Interface"},{"name":"IGeomProperty","href":"Hi.Geom.IGeomProperty.html","topicHref":"Hi.Geom.IGeomProperty.html","topicUid":"Hi.Geom.IGeomProperty","type":"Interface"},{"name":"IGetStl","href":"Hi.Geom.IGetStl.html","topicHref":"Hi.Geom.IGetStl.html","topicUid":"Hi.Geom.IGetStl","type":"Interface"},{"name":"IGetZrContour","href":"Hi.Geom.IGetZrContour.html","topicHref":"Hi.Geom.IGetZrContour.html","topicUid":"Hi.Geom.IGetZrContour","type":"Interface"},{"name":"IGetZrList","href":"Hi.Geom.IGetZrList.html","topicHref":"Hi.Geom.IGetZrList.html","topicUid":"Hi.Geom.IGetZrList","type":"Interface"},{"name":"IStlSource","href":"Hi.Geom.IStlSource.html","topicHref":"Hi.Geom.IStlSource.html","topicUid":"Hi.Geom.IStlSource","type":"Interface"},{"name":"ITri3d","href":"Hi.Geom.ITri3d.html","topicHref":"Hi.Geom.ITri3d.html","topicUid":"Hi.Geom.ITri3d","type":"Interface"},{"name":"IVec","href":"Hi.Geom.IVec-1.html","topicHref":"Hi.Geom.IVec-1.html","topicUid":"Hi.Geom.IVec`1","type":"Interface"},{"name":"IZrListSourceProperty","href":"Hi.Geom.IZrListSourceProperty.html","topicHref":"Hi.Geom.IZrListSourceProperty.html","topicUid":"Hi.Geom.IZrListSourceProperty","type":"Interface"},{"name":"Mat4d","href":"Hi.Geom.Mat4d.html","topicHref":"Hi.Geom.Mat4d.html","topicUid":"Hi.Geom.Mat4d","type":"Class"},{"name":"Mat4d.IndexFlag","href":"Hi.Geom.Mat4d.IndexFlag.html","topicHref":"Hi.Geom.Mat4d.IndexFlag.html","topicUid":"Hi.Geom.Mat4d.IndexFlag","type":"Enum"},{"name":"MathNetUtil","href":"Hi.Geom.MathNetUtil.html","topicHref":"Hi.Geom.MathNetUtil.html","topicUid":"Hi.Geom.MathNetUtil","type":"Class"},{"name":"MathUtil","href":"Hi.Geom.MathUtil.html","topicHref":"Hi.Geom.MathUtil.html","topicUid":"Hi.Geom.MathUtil","type":"Class"},{"name":"NativeFraction","href":"Hi.Geom.NativeFraction.html","topicHref":"Hi.Geom.NativeFraction.html","topicUid":"Hi.Geom.NativeFraction","type":"Class"},{"name":"NativeStl","href":"Hi.Geom.NativeStl.html","topicHref":"Hi.Geom.NativeStl.html","topicUid":"Hi.Geom.NativeStl","type":"Class"},{"name":"ObjUtil","href":"Hi.Geom.ObjUtil.html","topicHref":"Hi.Geom.ObjUtil.html","topicUid":"Hi.Geom.ObjUtil","type":"Class"},{"name":"PairZr","href":"Hi.Geom.PairZr.html","topicHref":"Hi.Geom.PairZr.html","topicUid":"Hi.Geom.PairZr","type":"Class"},{"name":"PairZrUtil","href":"Hi.Geom.PairZrUtil.html","topicHref":"Hi.Geom.PairZrUtil.html","topicUid":"Hi.Geom.PairZrUtil","type":"Class"},{"name":"PlyUtil","href":"Hi.Geom.PlyUtil.html","topicHref":"Hi.Geom.PlyUtil.html","topicUid":"Hi.Geom.PlyUtil","type":"Class"},{"name":"Polar3d","href":"Hi.Geom.Polar3d.html","topicHref":"Hi.Geom.Polar3d.html","topicUid":"Hi.Geom.Polar3d","type":"Class"},{"name":"Segment3d","href":"Hi.Geom.Segment3d.html","topicHref":"Hi.Geom.Segment3d.html","topicUid":"Hi.Geom.Segment3d","type":"Class"},{"name":"Stl","href":"Hi.Geom.Stl.html","topicHref":"Hi.Geom.Stl.html","topicUid":"Hi.Geom.Stl","type":"Class"},{"name":"Stl.StlType","href":"Hi.Geom.Stl.StlType.html","topicHref":"Hi.Geom.Stl.StlType.html","topicUid":"Hi.Geom.Stl.StlType","type":"Enum"},{"name":"StlFile","href":"Hi.Geom.StlFile.html","topicHref":"Hi.Geom.StlFile.html","topicUid":"Hi.Geom.StlFile","type":"Class"},{"name":"StlFuncHost","href":"Hi.Geom.StlFuncHost.html","topicHref":"Hi.Geom.StlFuncHost.html","topicUid":"Hi.Geom.StlFuncHost","type":"Class"},{"name":"StlUtil","href":"Hi.Geom.StlUtil.html","topicHref":"Hi.Geom.StlUtil.html","topicUid":"Hi.Geom.StlUtil","type":"Class"},{"name":"TransformationGeom","href":"Hi.Geom.TransformationGeom.html","topicHref":"Hi.Geom.TransformationGeom.html","topicUid":"Hi.Geom.TransformationGeom","type":"Class"},{"name":"Tri3d","href":"Hi.Geom.Tri3d.html","topicHref":"Hi.Geom.Tri3d.html","topicUid":"Hi.Geom.Tri3d","type":"Class"},{"name":"Tri3dUtil","href":"Hi.Geom.Tri3dUtil.html","topicHref":"Hi.Geom.Tri3dUtil.html","topicUid":"Hi.Geom.Tri3dUtil","type":"Class"},{"name":"Vec2d","href":"Hi.Geom.Vec2d.html","topicHref":"Hi.Geom.Vec2d.html","topicUid":"Hi.Geom.Vec2d","type":"Class"},{"name":"Vec2i","href":"Hi.Geom.Vec2i.html","topicHref":"Hi.Geom.Vec2i.html","topicUid":"Hi.Geom.Vec2i","type":"Class"},{"name":"Vec3d","href":"Hi.Geom.Vec3d.html","topicHref":"Hi.Geom.Vec3d.html","topicUid":"Hi.Geom.Vec3d","type":"Class"}]},{"name":"Hi.Geom.Resolution","href":"Hi.Geom.Resolution.html","topicHref":"Hi.Geom.Resolution.html","topicUid":"Hi.Geom.Resolution","type":"Namespace","items":[{"name":"IPolarResolution2d","href":"Hi.Geom.Resolution.IPolarResolution2d.html","topicHref":"Hi.Geom.Resolution.IPolarResolution2d.html","topicUid":"Hi.Geom.Resolution.IPolarResolution2d","type":"Interface"},{"name":"PolarResolution2d","href":"Hi.Geom.Resolution.PolarResolution2d.html","topicHref":"Hi.Geom.Resolution.PolarResolution2d.html","topicUid":"Hi.Geom.Resolution.PolarResolution2d","type":"Class"}]},{"name":"Hi.Geom.Solvers","href":"Hi.Geom.Solvers.html","topicHref":"Hi.Geom.Solvers.html","topicUid":"Hi.Geom.Solvers","type":"Namespace","items":[{"name":"BinarySolverUtil","href":"Hi.Geom.Solvers.BinarySolverUtil.html","topicHref":"Hi.Geom.Solvers.BinarySolverUtil.html","topicUid":"Hi.Geom.Solvers.BinarySolverUtil","type":"Class"},{"name":"BinarySolvingEntry","href":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicHref":"Hi.Geom.Solvers.BinarySolvingEntry.html","topicUid":"Hi.Geom.Solvers.BinarySolvingEntry","type":"Class"},{"name":"DeepSolvingStatus","href":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicHref":"Hi.Geom.Solvers.DeepSolvingStatus.html","topicUid":"Hi.Geom.Solvers.DeepSolvingStatus","type":"Class"},{"name":"NumericalSolver","href":"Hi.Geom.Solvers.NumericalSolver.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.html","topicUid":"Hi.Geom.Solvers.NumericalSolver","type":"Class"},{"name":"NumericalSolver.GetRepondsDelegate","href":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.GetRepondsDelegate","type":"Delegate"},{"name":"NumericalSolver.SetParasDelegate","href":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicHref":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate.html","topicUid":"Hi.Geom.Solvers.NumericalSolver.SetParasDelegate","type":"Delegate"},{"name":"SolverUtil","href":"Hi.Geom.Solvers.SolverUtil.html","topicHref":"Hi.Geom.Solvers.SolverUtil.html","topicUid":"Hi.Geom.Solvers.SolverUtil","type":"Class"},{"name":"SolvingResult","href":"Hi.Geom.Solvers.SolvingResult.html","topicHref":"Hi.Geom.Solvers.SolvingResult.html","topicUid":"Hi.Geom.Solvers.SolvingResult","type":"Class"},{"name":"SolvingStatus","href":"Hi.Geom.Solvers.SolvingStatus.html","topicHref":"Hi.Geom.Solvers.SolvingStatus.html","topicUid":"Hi.Geom.Solvers.SolvingStatus","type":"Enum"},{"name":"SolvingTerm","href":"Hi.Geom.Solvers.SolvingTerm.html","topicHref":"Hi.Geom.Solvers.SolvingTerm.html","topicUid":"Hi.Geom.Solvers.SolvingTerm","type":"Enum"}]},{"name":"Hi.Geom.Topo","href":"Hi.Geom.Topo.html","topicHref":"Hi.Geom.Topo.html","topicUid":"Hi.Geom.Topo","type":"Namespace","items":[{"name":"CarveBooleanKind","href":"Hi.Geom.Topo.CarveBooleanKind.html","topicHref":"Hi.Geom.Topo.CarveBooleanKind.html","topicUid":"Hi.Geom.Topo.CarveBooleanKind","type":"Enum"},{"name":"CarveBooleanResult","href":"Hi.Geom.Topo.CarveBooleanResult.html","topicHref":"Hi.Geom.Topo.CarveBooleanResult.html","topicUid":"Hi.Geom.Topo.CarveBooleanResult","type":"Class"},{"name":"CarveStl","href":"Hi.Geom.Topo.CarveStl.html","topicHref":"Hi.Geom.Topo.CarveStl.html","topicUid":"Hi.Geom.Topo.CarveStl","type":"Class"},{"name":"NativeTopoStl3d","href":"Hi.Geom.Topo.NativeTopoStl3d.html","topicHref":"Hi.Geom.Topo.NativeTopoStl3d.html","topicUid":"Hi.Geom.Topo.NativeTopoStl3d","type":"Class"},{"name":"NativeTopoStl3wfr","href":"Hi.Geom.Topo.NativeTopoStl3wfr.html","topicHref":"Hi.Geom.Topo.NativeTopoStl3wfr.html","topicUid":"Hi.Geom.Topo.NativeTopoStl3wfr","type":"Class"},{"name":"TopoLine3Hfr","href":"Hi.Geom.Topo.TopoLine3Hfr.html","topicHref":"Hi.Geom.Topo.TopoLine3Hfr.html","topicUid":"Hi.Geom.Topo.TopoLine3Hfr","type":"Class"},{"name":"TopoLine3StockHfr","href":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoLine3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoLine3StockHfr","type":"Class"},{"name":"TopoPoint3Hfr","href":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3Hfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3Hfr","type":"Class"},{"name":"TopoPoint3StockHfr","href":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoPoint3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoPoint3StockHfr","type":"Class"},{"name":"TopoStl3Hfr","href":"Hi.Geom.Topo.TopoStl3Hfr.html","topicHref":"Hi.Geom.Topo.TopoStl3Hfr.html","topicUid":"Hi.Geom.Topo.TopoStl3Hfr","type":"Class"},{"name":"TopoStl3HfrFlatDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrFlatDisplayee","type":"Class"},{"name":"TopoStl3HfrSmoothDisplayee","href":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicHref":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee.html","topicUid":"Hi.Geom.Topo.TopoStl3HfrSmoothDisplayee","type":"Class"},{"name":"TopoTri3Hfr","href":"Hi.Geom.Topo.TopoTri3Hfr.html","topicHref":"Hi.Geom.Topo.TopoTri3Hfr.html","topicUid":"Hi.Geom.Topo.TopoTri3Hfr","type":"Class"},{"name":"TopoTri3StockHfr","href":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicHref":"Hi.Geom.Topo.TopoTri3StockHfr.html","topicUid":"Hi.Geom.Topo.TopoTri3StockHfr","type":"Class"},{"name":"Vec3Hfr","href":"Hi.Geom.Topo.Vec3Hfr.html","topicHref":"Hi.Geom.Topo.Vec3Hfr.html","topicUid":"Hi.Geom.Topo.Vec3Hfr","type":"Struct"}]},{"name":"Hi.Geom.UnitUtils","href":"Hi.Geom.UnitUtils.html","topicHref":"Hi.Geom.UnitUtils.html","topicUid":"Hi.Geom.UnitUtils","type":"Namespace","items":[{"name":"PhysicsUnit","href":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicHref":"Hi.Geom.UnitUtils.PhysicsUnit.html","topicUid":"Hi.Geom.UnitUtils.PhysicsUnit","type":"Enum"},{"name":"StringValueAttribute","href":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicHref":"Hi.Geom.UnitUtils.StringValueAttribute.html","topicUid":"Hi.Geom.UnitUtils.StringValueAttribute","type":"Class"},{"name":"UnitConvertUtil","href":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicHref":"Hi.Geom.UnitUtils.UnitConvertUtil.html","topicUid":"Hi.Geom.UnitUtils.UnitConvertUtil","type":"Class"}]},{"name":"Hi.HiNcKits","href":"Hi.HiNcKits.html","topicHref":"Hi.HiNcKits.html","topicUid":"Hi.HiNcKits","type":"Namespace","items":[{"name":"BasePathEnum","href":"Hi.HiNcKits.BasePathEnum.html","topicHref":"Hi.HiNcKits.BasePathEnum.html","topicUid":"Hi.HiNcKits.BasePathEnum","type":"Enum"},{"name":"HiNcHost","href":"Hi.HiNcKits.HiNcHost.html","topicHref":"Hi.HiNcKits.HiNcHost.html","topicUid":"Hi.HiNcKits.HiNcHost","type":"Class"},{"name":"LocalApp","href":"Hi.HiNcKits.LocalApp.html","topicHref":"Hi.HiNcKits.LocalApp.html","topicUid":"Hi.HiNcKits.LocalApp","type":"Class"},{"name":"LocalAppConfig","href":"Hi.HiNcKits.LocalAppConfig.html","topicHref":"Hi.HiNcKits.LocalAppConfig.html","topicUid":"Hi.HiNcKits.LocalAppConfig","type":"Class"},{"name":"ProxyConfig","href":"Hi.HiNcKits.ProxyConfig.html","topicHref":"Hi.HiNcKits.ProxyConfig.html","topicUid":"Hi.HiNcKits.ProxyConfig","type":"Class"},{"name":"ResourceSeeder","href":"Hi.HiNcKits.ResourceSeeder.html","topicHref":"Hi.HiNcKits.ResourceSeeder.html","topicUid":"Hi.HiNcKits.ResourceSeeder","type":"Class"}]},{"name":"Hi.Licenses","href":"Hi.Licenses.html","topicHref":"Hi.Licenses.html","topicUid":"Hi.Licenses","type":"Namespace","items":[{"name":"AuthFeature","href":"Hi.Licenses.AuthFeature.html","topicHref":"Hi.Licenses.AuthFeature.html","topicUid":"Hi.Licenses.AuthFeature","type":"Enum"},{"name":"AuthorizationFailedEventArgs","href":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicHref":"Hi.Licenses.AuthorizationFailedEventArgs.html","topicUid":"Hi.Licenses.AuthorizationFailedEventArgs","type":"Class"},{"name":"BlockType","href":"Hi.Licenses.BlockType.html","topicHref":"Hi.Licenses.BlockType.html","topicUid":"Hi.Licenses.BlockType","type":"Enum"},{"name":"License","href":"Hi.Licenses.License.html","topicHref":"Hi.Licenses.License.html","topicUid":"Hi.Licenses.License","type":"Class"},{"name":"LicenseType","href":"Hi.Licenses.LicenseType.html","topicHref":"Hi.Licenses.LicenseType.html","topicUid":"Hi.Licenses.LicenseType","type":"Enum"}]},{"name":"Hi.Machining","href":"Hi.Machining.html","topicHref":"Hi.Machining.html","topicUid":"Hi.Machining","type":"Namespace","items":[{"name":"FreeformRemover","href":"Hi.Machining.FreeformRemover.html","topicHref":"Hi.Machining.FreeformRemover.html","topicUid":"Hi.Machining.FreeformRemover","type":"Class"},{"name":"ICutter","href":"Hi.Machining.ICutter.html","topicHref":"Hi.Machining.ICutter.html","topicUid":"Hi.Machining.ICutter","type":"Interface"},{"name":"ICutterAnchorable","href":"Hi.Machining.ICutterAnchorable.html","topicHref":"Hi.Machining.ICutterAnchorable.html","topicUid":"Hi.Machining.ICutterAnchorable","type":"Interface"},{"name":"IGetSweptable","href":"Hi.Machining.IGetSweptable.html","topicHref":"Hi.Machining.IGetSweptable.html","topicUid":"Hi.Machining.IGetSweptable","type":"Interface"},{"name":"IMachiningTool","href":"Hi.Machining.IMachiningTool.html","topicHref":"Hi.Machining.IMachiningTool.html","topicUid":"Hi.Machining.IMachiningTool","type":"Interface"},{"name":"IVolumeRemover","href":"Hi.Machining.IVolumeRemover.html","topicHref":"Hi.Machining.IVolumeRemover.html","topicUid":"Hi.Machining.IVolumeRemover","type":"Interface"},{"name":"MachiningToolHouse","href":"Hi.Machining.MachiningToolHouse.html","topicHref":"Hi.Machining.MachiningToolHouse.html","topicUid":"Hi.Machining.MachiningToolHouse","type":"Class"},{"name":"MachiningVolumeRemovalProc","href":"Hi.Machining.MachiningVolumeRemovalProc.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc","type":"Class"},{"name":"MachiningVolumeRemovalProc.StepMotionSnapshot","href":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicHref":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot.html","topicUid":"Hi.Machining.MachiningVolumeRemovalProc.StepMotionSnapshot","type":"Class"},{"name":"MatInterpolationKit","href":"Hi.Machining.MatInterpolationKit.html","topicHref":"Hi.Machining.MatInterpolationKit.html","topicUid":"Hi.Machining.MatInterpolationKit","type":"Class"},{"name":"MatRelation","href":"Hi.Machining.MatRelation.html","topicHref":"Hi.Machining.MatRelation.html","topicUid":"Hi.Machining.MatRelation","type":"Enum"},{"name":"MatRelationUtil","href":"Hi.Machining.MatRelationUtil.html","topicHref":"Hi.Machining.MatRelationUtil.html","topicUid":"Hi.Machining.MatRelationUtil","type":"Class"},{"name":"Sweptable","href":"Hi.Machining.Sweptable.html","topicHref":"Hi.Machining.Sweptable.html","topicUid":"Hi.Machining.Sweptable","type":"Class"},{"name":"SweptableUtil","href":"Hi.Machining.SweptableUtil.html","topicHref":"Hi.Machining.SweptableUtil.html","topicUid":"Hi.Machining.SweptableUtil","type":"Class"},{"name":"ToolNotFoundException","href":"Hi.Machining.ToolNotFoundException.html","topicHref":"Hi.Machining.ToolNotFoundException.html","topicUid":"Hi.Machining.ToolNotFoundException","type":"Class"}]},{"name":"Hi.Machining.MachiningEquipmentUtils","href":"Hi.Machining.MachiningEquipmentUtils.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.html","topicUid":"Hi.Machining.MachiningEquipmentUtils","type":"Namespace","items":[{"name":"CollidableComponentEnum","href":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.CollidableComponentEnum","type":"Enum"},{"name":"IGetMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment","type":"Interface"},{"name":"IMachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.IMachiningEquipment","type":"Interface"},{"name":"MachiningEquipment","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipment","type":"Class"},{"name":"MachiningEquipmentCollisionIndex","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndex","type":"Class"},{"name":"MachiningEquipmentCollisionIndexPairsSource","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentCollisionIndexPairsSource","type":"Class"},{"name":"MachiningEquipmentUtil","href":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil","type":"Class"},{"name":"SetupEquipment","href":"Hi.Machining.MachiningEquipmentUtils.SetupEquipment.html","topicHref":"Hi.Machining.MachiningEquipmentUtils.SetupEquipment.html","topicUid":"Hi.Machining.MachiningEquipmentUtils.SetupEquipment","type":"Class"}]},{"name":"Hi.MachiningProcs","href":"Hi.MachiningProcs.html","topicHref":"Hi.MachiningProcs.html","topicUid":"Hi.MachiningProcs","type":"Namespace","items":[{"name":"AllowNoActiveSessionAttribute","href":"Hi.MachiningProcs.AllowNoActiveSessionAttribute.html","topicHref":"Hi.MachiningProcs.AllowNoActiveSessionAttribute.html","topicUid":"Hi.MachiningProcs.AllowNoActiveSessionAttribute","type":"Class"},{"name":"AllowNoLoadedProjectAttribute","href":"Hi.MachiningProcs.AllowNoLoadedProjectAttribute.html","topicHref":"Hi.MachiningProcs.AllowNoLoadedProjectAttribute.html","topicUid":"Hi.MachiningProcs.AllowNoLoadedProjectAttribute","type":"Class"},{"name":"ApiActionResult","href":"Hi.MachiningProcs.ApiActionResult.html","topicHref":"Hi.MachiningProcs.ApiActionResult.html","topicUid":"Hi.MachiningProcs.ApiActionResult","type":"Class"},{"name":"ConfigStepFunc","href":"Hi.MachiningProcs.ConfigStepFunc.html","topicHref":"Hi.MachiningProcs.ConfigStepFunc.html","topicUid":"Hi.MachiningProcs.ConfigStepFunc","type":"Delegate"},{"name":"IMachiningProjectGetter","href":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicHref":"Hi.MachiningProcs.IMachiningProjectGetter.html","topicUid":"Hi.MachiningProcs.IMachiningProjectGetter","type":"Interface"},{"name":"IProjectService","href":"Hi.MachiningProcs.IProjectService.html","topicHref":"Hi.MachiningProcs.IProjectService.html","topicUid":"Hi.MachiningProcs.IProjectService","type":"Interface"},{"name":"LocalProjectService","href":"Hi.MachiningProcs.LocalProjectService.html","topicHref":"Hi.MachiningProcs.LocalProjectService.html","topicUid":"Hi.MachiningProcs.LocalProjectService","type":"Class"},{"name":"LocalProjectService.MachiningProjectChangedDelegate","href":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicHref":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate.html","topicUid":"Hi.MachiningProcs.LocalProjectService.MachiningProjectChangedDelegate","type":"Delegate"},{"name":"LocalProjectServiceController","href":"Hi.MachiningProcs.LocalProjectServiceController.html","topicHref":"Hi.MachiningProcs.LocalProjectServiceController.html","topicUid":"Hi.MachiningProcs.LocalProjectServiceController","type":"Class"},{"name":"MachiningActRunner","href":"Hi.MachiningProcs.MachiningActRunner.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.html","topicUid":"Hi.MachiningProcs.MachiningActRunner","type":"Class"},{"name":"MachiningActRunner.MachiningStepBuiltDelegate","href":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicHref":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate.html","topicUid":"Hi.MachiningProcs.MachiningActRunner.MachiningStepBuiltDelegate","type":"Delegate"},{"name":"MachiningActRunnerConfig","href":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicHref":"Hi.MachiningProcs.MachiningActRunnerConfig.html","topicUid":"Hi.MachiningProcs.MachiningActRunnerConfig","type":"Class"},{"name":"MachiningParallelProc","href":"Hi.MachiningProcs.MachiningParallelProc.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc","type":"Class"},{"name":"MachiningParallelProc.StepTaskBundle","href":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.StepTaskBundle","type":"Class"},{"name":"MachiningParallelProc.SubstractionResult","href":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicHref":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult.html","topicUid":"Hi.MachiningProcs.MachiningParallelProc.SubstractionResult","type":"Class"},{"name":"MachiningProject","href":"Hi.MachiningProcs.MachiningProject.html","topicHref":"Hi.MachiningProcs.MachiningProject.html","topicUid":"Hi.MachiningProcs.MachiningProject","type":"Class"},{"name":"MachiningSession","href":"Hi.MachiningProcs.MachiningSession.html","topicHref":"Hi.MachiningProcs.MachiningSession.html","topicUid":"Hi.MachiningProcs.MachiningSession","type":"Class"},{"name":"MessageDto","href":"Hi.MachiningProcs.MessageDto.html","topicHref":"Hi.MachiningProcs.MessageDto.html","topicUid":"Hi.MachiningProcs.MessageDto","type":"Class"},{"name":"MillingUtil","href":"Hi.MachiningProcs.MillingUtil.html","topicHref":"Hi.MachiningProcs.MillingUtil.html","topicUid":"Hi.MachiningProcs.MillingUtil","type":"Class"},{"name":"NcKind","href":"Hi.MachiningProcs.NcKind.html","topicHref":"Hi.MachiningProcs.NcKind.html","topicUid":"Hi.MachiningProcs.NcKind","type":"Enum"},{"name":"NcKindUtil","href":"Hi.MachiningProcs.NcKindUtil.html","topicHref":"Hi.MachiningProcs.NcKindUtil.html","topicUid":"Hi.MachiningProcs.NcKindUtil","type":"Class"},{"name":"NcRunnerSessionState","href":"Hi.MachiningProcs.NcRunnerSessionState.html","topicHref":"Hi.MachiningProcs.NcRunnerSessionState.html","topicUid":"Hi.MachiningProcs.NcRunnerSessionState","type":"Class"},{"name":"ProjectFileBusyException","href":"Hi.MachiningProcs.ProjectFileBusyException.html","topicHref":"Hi.MachiningProcs.ProjectFileBusyException.html","topicUid":"Hi.MachiningProcs.ProjectFileBusyException","type":"Class"},{"name":"ProxyProjectService","href":"Hi.MachiningProcs.ProxyProjectService.html","topicHref":"Hi.MachiningProcs.ProxyProjectService.html","topicUid":"Hi.MachiningProcs.ProxyProjectService","type":"Class"},{"name":"RenderingFlag","href":"Hi.MachiningProcs.RenderingFlag.html","topicHref":"Hi.MachiningProcs.RenderingFlag.html","topicUid":"Hi.MachiningProcs.RenderingFlag","type":"Enum"},{"name":"RequireActiveSessionAttribute","href":"Hi.MachiningProcs.RequireActiveSessionAttribute.html","topicHref":"Hi.MachiningProcs.RequireActiveSessionAttribute.html","topicUid":"Hi.MachiningProcs.RequireActiveSessionAttribute","type":"Class"},{"name":"RequireLoadedProjectAttribute","href":"Hi.MachiningProcs.RequireLoadedProjectAttribute.html","topicHref":"Hi.MachiningProcs.RequireLoadedProjectAttribute.html","topicUid":"Hi.MachiningProcs.RequireLoadedProjectAttribute","type":"Class"},{"name":"SessionShell","href":"Hi.MachiningProcs.SessionShell.html","topicHref":"Hi.MachiningProcs.SessionShell.html","topicUid":"Hi.MachiningProcs.SessionShell","type":"Class"},{"name":"SessionShellController","href":"Hi.MachiningProcs.SessionShellController.html","topicHref":"Hi.MachiningProcs.SessionShellController.html","topicUid":"Hi.MachiningProcs.SessionShellController","type":"Class"},{"name":"SetupController","href":"Hi.MachiningProcs.SetupController.html","topicHref":"Hi.MachiningProcs.SetupController.html","topicUid":"Hi.MachiningProcs.SetupController","type":"Class"},{"name":"ShellProgress","href":"Hi.MachiningProcs.ShellProgress.html","topicHref":"Hi.MachiningProcs.ShellProgress.html","topicUid":"Hi.MachiningProcs.ShellProgress","type":"Class"},{"name":"SpindleSpeedCache","href":"Hi.MachiningProcs.SpindleSpeedCache.html","topicHref":"Hi.MachiningProcs.SpindleSpeedCache.html","topicUid":"Hi.MachiningProcs.SpindleSpeedCache","type":"Class"},{"name":"StepDiagnostic","href":"Hi.MachiningProcs.StepDiagnostic.html","topicHref":"Hi.MachiningProcs.StepDiagnostic.html","topicUid":"Hi.MachiningProcs.StepDiagnostic","type":"Class"},{"name":"StepDiagnosticAnchorUtil","href":"Hi.MachiningProcs.StepDiagnosticAnchorUtil.html","topicHref":"Hi.MachiningProcs.StepDiagnosticAnchorUtil.html","topicUid":"Hi.MachiningProcs.StepDiagnosticAnchorUtil","type":"Class"},{"name":"StepDiagnosticProgress","href":"Hi.MachiningProcs.StepDiagnosticProgress.html","topicHref":"Hi.MachiningProcs.StepDiagnosticProgress.html","topicUid":"Hi.MachiningProcs.StepDiagnosticProgress","type":"Class"},{"name":"StepScopedProgress","href":"Hi.MachiningProcs.StepScopedProgress.html","topicHref":"Hi.MachiningProcs.StepScopedProgress.html","topicUid":"Hi.MachiningProcs.StepScopedProgress","type":"Class"}]},{"name":"Hi.MachiningSteps","href":"Hi.MachiningSteps.html","topicHref":"Hi.MachiningSteps.html","topicUid":"Hi.MachiningSteps","type":"Namespace","items":[{"name":"IFlagText","href":"Hi.MachiningSteps.IFlagText.html","topicHref":"Hi.MachiningSteps.IFlagText.html","topicUid":"Hi.MachiningSteps.IFlagText","type":"Interface"},{"name":"IMachiningService","href":"Hi.MachiningSteps.IMachiningService.html","topicHref":"Hi.MachiningSteps.IMachiningService.html","topicUid":"Hi.MachiningSteps.IMachiningService","type":"Interface"},{"name":"IMotionStepIndex","href":"Hi.MachiningSteps.IMotionStepIndex.html","topicHref":"Hi.MachiningSteps.IMotionStepIndex.html","topicUid":"Hi.MachiningSteps.IMotionStepIndex","type":"Interface"},{"name":"IStepPropertyAccessHost","href":"Hi.MachiningSteps.IStepPropertyAccessHost.html","topicHref":"Hi.MachiningSteps.IStepPropertyAccessHost.html","topicUid":"Hi.MachiningSteps.IStepPropertyAccessHost","type":"Interface"},{"name":"MachineMotionStep","href":"Hi.MachiningSteps.MachineMotionStep.html","topicHref":"Hi.MachiningSteps.MachineMotionStep.html","topicUid":"Hi.MachiningSteps.MachineMotionStep","type":"Class"},{"name":"MachiningStep","href":"Hi.MachiningSteps.MachiningStep.html","topicHref":"Hi.MachiningSteps.MachiningStep.html","topicUid":"Hi.MachiningSteps.MachiningStep","type":"Class"},{"name":"MachiningStep.CollidedKeyPair","href":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicHref":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair.html","topicUid":"Hi.MachiningSteps.MachiningStep.CollidedKeyPair","type":"Class"},{"name":"MachiningStepUtil","href":"Hi.MachiningSteps.MachiningStepUtil.html","topicHref":"Hi.MachiningSteps.MachiningStepUtil.html","topicUid":"Hi.MachiningSteps.MachiningStepUtil","type":"Class"},{"name":"PresentAccess","href":"Hi.MachiningSteps.PresentAccess.html","topicHref":"Hi.MachiningSteps.PresentAccess.html","topicUid":"Hi.MachiningSteps.PresentAccess","type":"Class"},{"name":"PresentAttribute","href":"Hi.MachiningSteps.PresentAttribute.html","topicHref":"Hi.MachiningSteps.PresentAttribute.html","topicUid":"Hi.MachiningSteps.PresentAttribute","type":"Class"},{"name":"PropertyAccess","href":"Hi.MachiningSteps.PropertyAccess-1.html","topicHref":"Hi.MachiningSteps.PropertyAccess-1.html","topicUid":"Hi.MachiningSteps.PropertyAccess`1","type":"Class"},{"name":"StepActualTime","href":"Hi.MachiningSteps.StepActualTime.html","topicHref":"Hi.MachiningSteps.StepActualTime.html","topicUid":"Hi.MachiningSteps.StepActualTime","type":"Class"},{"name":"StepPresentCatalog","href":"Hi.MachiningSteps.StepPresentCatalog.html","topicHref":"Hi.MachiningSteps.StepPresentCatalog.html","topicUid":"Hi.MachiningSteps.StepPresentCatalog","type":"Class"}]},{"name":"Hi.Mapping","href":"Hi.Mapping.html","topicHref":"Hi.Mapping.html","topicUid":"Hi.Mapping","type":"Namespace","items":[{"name":"CsvNcStep","href":"Hi.Mapping.CsvNcStep.html","topicHref":"Hi.Mapping.CsvNcStep.html","topicUid":"Hi.Mapping.CsvNcStep","type":"Class"},{"name":"FileToTimeShotMapping","href":"Hi.Mapping.FileToTimeShotMapping.html","topicHref":"Hi.Mapping.FileToTimeShotMapping.html","topicUid":"Hi.Mapping.FileToTimeShotMapping","type":"Class"},{"name":"IAccelerationShot","href":"Hi.Mapping.IAccelerationShot.html","topicHref":"Hi.Mapping.IAccelerationShot.html","topicUid":"Hi.Mapping.IAccelerationShot","type":"Interface"},{"name":"IForceShot","href":"Hi.Mapping.IForceShot.html","topicHref":"Hi.Mapping.IForceShot.html","topicUid":"Hi.Mapping.IForceShot","type":"Interface"},{"name":"IMomentShot","href":"Hi.Mapping.IMomentShot.html","topicHref":"Hi.Mapping.IMomentShot.html","topicUid":"Hi.Mapping.IMomentShot","type":"Interface"},{"name":"ITimeShot","href":"Hi.Mapping.ITimeShot.html","topicHref":"Hi.Mapping.ITimeShot.html","topicUid":"Hi.Mapping.ITimeShot","type":"Interface"},{"name":"MappingUtil","href":"Hi.Mapping.MappingUtil.html","topicHref":"Hi.Mapping.MappingUtil.html","topicUid":"Hi.Mapping.MappingUtil","type":"Class"},{"name":"StepTimeShotUtil","href":"Hi.Mapping.StepTimeShotUtil.html","topicHref":"Hi.Mapping.StepTimeShotUtil.html","topicUid":"Hi.Mapping.StepTimeShotUtil","type":"Class"},{"name":"StepTimeShotUtil.CycleSamplingMode","href":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicHref":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode.html","topicUid":"Hi.Mapping.StepTimeShotUtil.CycleSamplingMode","type":"Enum"},{"name":"StepTimeShotUtil.GetTimeShotByFileDelegate","href":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicHref":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate.html","topicUid":"Hi.Mapping.StepTimeShotUtil.GetTimeShotByFileDelegate","type":"Delegate"},{"name":"TimeMapping","href":"Hi.Mapping.TimeMapping.html","topicHref":"Hi.Mapping.TimeMapping.html","topicUid":"Hi.Mapping.TimeMapping","type":"Class"}]},{"name":"Hi.Mappings","href":"Hi.Mappings.html","topicHref":"Hi.Mappings.html","topicUid":"Hi.Mappings","type":"Namespace","items":[{"name":"FileDateTimeSection","href":"Hi.Mappings.FileDateTimeSection.html","topicHref":"Hi.Mappings.FileDateTimeSection.html","topicUid":"Hi.Mappings.FileDateTimeSection","type":"Class"},{"name":"FileTimecodeDateTimeSection","href":"Hi.Mappings.FileTimecodeDateTimeSection.html","topicHref":"Hi.Mappings.FileTimecodeDateTimeSection.html","topicUid":"Hi.Mappings.FileTimecodeDateTimeSection","type":"Class"},{"name":"FileTimecodeSection","href":"Hi.Mappings.FileTimecodeSection.html","topicHref":"Hi.Mappings.FileTimecodeSection.html","topicUid":"Hi.Mappings.FileTimecodeSection","type":"Class"},{"name":"IFileTimeSection","href":"Hi.Mappings.IFileTimeSection.html","topicHref":"Hi.Mappings.IFileTimeSection.html","topicUid":"Hi.Mappings.IFileTimeSection","type":"Interface"}]},{"name":"Hi.Mech","href":"Hi.Mech.html","topicHref":"Hi.Mech.html","topicUid":"Hi.Mech","type":"Namespace","items":[{"name":"GeneralMechanism","href":"Hi.Mech.GeneralMechanism.html","topicHref":"Hi.Mech.GeneralMechanism.html","topicUid":"Hi.Mech.GeneralMechanism","type":"Class"},{"name":"IGetAnchorToSolidDictionary","href":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicHref":"Hi.Mech.IGetAnchorToSolidDictionary.html","topicUid":"Hi.Mech.IGetAnchorToSolidDictionary","type":"Interface"},{"name":"IGetMachiningChain","href":"Hi.Mech.IGetMachiningChain.html","topicHref":"Hi.Mech.IGetMachiningChain.html","topicUid":"Hi.Mech.IGetMachiningChain","type":"Interface"},{"name":"IMachiningChain","href":"Hi.Mech.IMachiningChain.html","topicHref":"Hi.Mech.IMachiningChain.html","topicUid":"Hi.Mech.IMachiningChain","type":"Interface"},{"name":"IMachiningChainSource","href":"Hi.Mech.IMachiningChainSource.html","topicHref":"Hi.Mech.IMachiningChainSource.html","topicUid":"Hi.Mech.IMachiningChainSource","type":"Interface"},{"name":"MachiningChainUtil","href":"Hi.Mech.MachiningChainUtil.html","topicHref":"Hi.Mech.MachiningChainUtil.html","topicUid":"Hi.Mech.MachiningChainUtil","type":"Class"}]},{"name":"Hi.Mech.Topo","href":"Hi.Mech.Topo.html","topicHref":"Hi.Mech.Topo.html","topicUid":"Hi.Mech.Topo","type":"Namespace","items":[{"name":"Anchor","href":"Hi.Mech.Topo.Anchor.html","topicHref":"Hi.Mech.Topo.Anchor.html","topicUid":"Hi.Mech.Topo.Anchor","type":"Class"},{"name":"AnchorFuncSource","href":"Hi.Mech.Topo.AnchorFuncSource.html","topicHref":"Hi.Mech.Topo.AnchorFuncSource.html","topicUid":"Hi.Mech.Topo.AnchorFuncSource","type":"Class"},{"name":"AnchoredBoxable","href":"Hi.Mech.Topo.AnchoredBoxable.html","topicHref":"Hi.Mech.Topo.AnchoredBoxable.html","topicUid":"Hi.Mech.Topo.AnchoredBoxable","type":"Class"},{"name":"AnchoredDisplayee","href":"Hi.Mech.Topo.AnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.AnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.AnchoredDisplayee","type":"Class"},{"name":"Asmb","href":"Hi.Mech.Topo.Asmb.html","topicHref":"Hi.Mech.Topo.Asmb.html","topicUid":"Hi.Mech.Topo.Asmb","type":"Class"},{"name":"AsmbDraw","href":"Hi.Mech.Topo.AsmbDraw.html","topicHref":"Hi.Mech.Topo.AsmbDraw.html","topicUid":"Hi.Mech.Topo.AsmbDraw","type":"Class"},{"name":"Branch","href":"Hi.Mech.Topo.Branch.html","topicHref":"Hi.Mech.Topo.Branch.html","topicUid":"Hi.Mech.Topo.Branch","type":"Class"},{"name":"DirectionBranchEntry","href":"Hi.Mech.Topo.DirectionBranchEntry.html","topicHref":"Hi.Mech.Topo.DirectionBranchEntry.html","topicUid":"Hi.Mech.Topo.DirectionBranchEntry","type":"Class"},{"name":"DirectionBranchPackUtil","href":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicHref":"Hi.Mech.Topo.DirectionBranchPackUtil.html","topicUid":"Hi.Mech.Topo.DirectionBranchPackUtil","type":"Class"},{"name":"DynamicFreeform","href":"Hi.Mech.Topo.DynamicFreeform.html","topicHref":"Hi.Mech.Topo.DynamicFreeform.html","topicUid":"Hi.Mech.Topo.DynamicFreeform","type":"Class"},{"name":"DynamicRotation","href":"Hi.Mech.Topo.DynamicRotation.html","topicHref":"Hi.Mech.Topo.DynamicRotation.html","topicUid":"Hi.Mech.Topo.DynamicRotation","type":"Class"},{"name":"DynamicTranslation","href":"Hi.Mech.Topo.DynamicTranslation.html","topicHref":"Hi.Mech.Topo.DynamicTranslation.html","topicUid":"Hi.Mech.Topo.DynamicTranslation","type":"Class"},{"name":"GeneralTransform","href":"Hi.Mech.Topo.GeneralTransform.html","topicHref":"Hi.Mech.Topo.GeneralTransform.html","topicUid":"Hi.Mech.Topo.GeneralTransform","type":"Class"},{"name":"IAnchoredDisplayee","href":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicHref":"Hi.Mech.Topo.IAnchoredDisplayee.html","topicUid":"Hi.Mech.Topo.IAnchoredDisplayee","type":"Interface"},{"name":"IDynamicRegular","href":"Hi.Mech.Topo.IDynamicRegular.html","topicHref":"Hi.Mech.Topo.IDynamicRegular.html","topicUid":"Hi.Mech.Topo.IDynamicRegular","type":"Interface"},{"name":"IDynamicRotation","href":"Hi.Mech.Topo.IDynamicRotation.html","topicHref":"Hi.Mech.Topo.IDynamicRotation.html","topicUid":"Hi.Mech.Topo.IDynamicRotation","type":"Interface"},{"name":"IDynamicTransformer","href":"Hi.Mech.Topo.IDynamicTransformer.html","topicHref":"Hi.Mech.Topo.IDynamicTransformer.html","topicUid":"Hi.Mech.Topo.IDynamicTransformer","type":"Interface"},{"name":"IGetAnchor","href":"Hi.Mech.Topo.IGetAnchor.html","topicHref":"Hi.Mech.Topo.IGetAnchor.html","topicUid":"Hi.Mech.Topo.IGetAnchor","type":"Interface"},{"name":"IGetAnchoredDisplayeeList","href":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicHref":"Hi.Mech.Topo.IGetAnchoredDisplayeeList.html","topicUid":"Hi.Mech.Topo.IGetAnchoredDisplayeeList","type":"Interface"},{"name":"IGetAsmb","href":"Hi.Mech.Topo.IGetAsmb.html","topicHref":"Hi.Mech.Topo.IGetAsmb.html","topicUid":"Hi.Mech.Topo.IGetAsmb","type":"Interface"},{"name":"IGetFletchBuckle","href":"Hi.Mech.Topo.IGetFletchBuckle.html","topicHref":"Hi.Mech.Topo.IGetFletchBuckle.html","topicUid":"Hi.Mech.Topo.IGetFletchBuckle","type":"Interface"},{"name":"IGetInverseTransformer","href":"Hi.Mech.Topo.IGetInverseTransformer.html","topicHref":"Hi.Mech.Topo.IGetInverseTransformer.html","topicUid":"Hi.Mech.Topo.IGetInverseTransformer","type":"Interface"},{"name":"IGetTopoIndex","href":"Hi.Mech.Topo.IGetTopoIndex.html","topicHref":"Hi.Mech.Topo.IGetTopoIndex.html","topicUid":"Hi.Mech.Topo.IGetTopoIndex","type":"Interface"},{"name":"IStaticTransformer","href":"Hi.Mech.Topo.IStaticTransformer.html","topicHref":"Hi.Mech.Topo.IStaticTransformer.html","topicUid":"Hi.Mech.Topo.IStaticTransformer","type":"Interface"},{"name":"ITopo","href":"Hi.Mech.Topo.ITopo.html","topicHref":"Hi.Mech.Topo.ITopo.html","topicUid":"Hi.Mech.Topo.ITopo","type":"Interface"},{"name":"ITopoDisplayee","href":"Hi.Mech.Topo.ITopoDisplayee.html","topicHref":"Hi.Mech.Topo.ITopoDisplayee.html","topicUid":"Hi.Mech.Topo.ITopoDisplayee","type":"Interface"},{"name":"ITransformer","href":"Hi.Mech.Topo.ITransformer.html","topicHref":"Hi.Mech.Topo.ITransformer.html","topicUid":"Hi.Mech.Topo.ITransformer","type":"Interface"},{"name":"ITransformerProperty","href":"Hi.Mech.Topo.ITransformerProperty.html","topicHref":"Hi.Mech.Topo.ITransformerProperty.html","topicUid":"Hi.Mech.Topo.ITransformerProperty","type":"Interface"},{"name":"NoTransform","href":"Hi.Mech.Topo.NoTransform.html","topicHref":"Hi.Mech.Topo.NoTransform.html","topicUid":"Hi.Mech.Topo.NoTransform","type":"Class"},{"name":"StackTransformer","href":"Hi.Mech.Topo.StackTransformer.html","topicHref":"Hi.Mech.Topo.StackTransformer.html","topicUid":"Hi.Mech.Topo.StackTransformer","type":"Class"},{"name":"StaticFreeform","href":"Hi.Mech.Topo.StaticFreeform.html","topicHref":"Hi.Mech.Topo.StaticFreeform.html","topicUid":"Hi.Mech.Topo.StaticFreeform","type":"Class"},{"name":"StaticRotation","href":"Hi.Mech.Topo.StaticRotation.html","topicHref":"Hi.Mech.Topo.StaticRotation.html","topicUid":"Hi.Mech.Topo.StaticRotation","type":"Class"},{"name":"StaticTranslation","href":"Hi.Mech.Topo.StaticTranslation.html","topicHref":"Hi.Mech.Topo.StaticTranslation.html","topicUid":"Hi.Mech.Topo.StaticTranslation","type":"Class"},{"name":"TopoDisplayee","href":"Hi.Mech.Topo.TopoDisplayee.html","topicHref":"Hi.Mech.Topo.TopoDisplayee.html","topicUid":"Hi.Mech.Topo.TopoDisplayee","type":"Class"},{"name":"TopoDisplayeeUtil","href":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicHref":"Hi.Mech.Topo.TopoDisplayeeUtil.html","topicUid":"Hi.Mech.Topo.TopoDisplayeeUtil","type":"Class"},{"name":"TopoReflection","href":"Hi.Mech.Topo.TopoReflection.html","topicHref":"Hi.Mech.Topo.TopoReflection.html","topicUid":"Hi.Mech.Topo.TopoReflection","type":"Class"},{"name":"TopoUtil","href":"Hi.Mech.Topo.TopoUtil.html","topicHref":"Hi.Mech.Topo.TopoUtil.html","topicUid":"Hi.Mech.Topo.TopoUtil","type":"Class"},{"name":"TransformerUtil","href":"Hi.Mech.Topo.TransformerUtil.html","topicHref":"Hi.Mech.Topo.TransformerUtil.html","topicUid":"Hi.Mech.Topo.TransformerUtil","type":"Class"}]},{"name":"Hi.Milling","href":"Hi.Milling.html","topicHref":"Hi.Milling.html","topicUid":"Hi.Milling","type":"Namespace","items":[{"name":"IGetDiameter","href":"Hi.Milling.IGetDiameter.html","topicHref":"Hi.Milling.IGetDiameter.html","topicUid":"Hi.Milling.IGetDiameter","type":"Interface"},{"name":"IGetFluteHeight","href":"Hi.Milling.IGetFluteHeight.html","topicHref":"Hi.Milling.IGetFluteHeight.html","topicUid":"Hi.Milling.IGetFluteHeight","type":"Interface"},{"name":"IGetMillingGeomBrief","href":"Hi.Milling.IGetMillingGeomBrief.html","topicHref":"Hi.Milling.IGetMillingGeomBrief.html","topicUid":"Hi.Milling.IGetMillingGeomBrief","type":"Interface"},{"name":"IGetRadialReliefAngle","href":"Hi.Milling.IGetRadialReliefAngle.html","topicHref":"Hi.Milling.IGetRadialReliefAngle.html","topicUid":"Hi.Milling.IGetRadialReliefAngle","type":"Interface"},{"name":"IMillingGeomBriefAccessor","href":"Hi.Milling.IMillingGeomBriefAccessor.html","topicHref":"Hi.Milling.IMillingGeomBriefAccessor.html","topicUid":"Hi.Milling.IMillingGeomBriefAccessor","type":"Interface"},{"name":"MillingGeomBrief","href":"Hi.Milling.MillingGeomBrief.html","topicHref":"Hi.Milling.MillingGeomBrief.html","topicUid":"Hi.Milling.MillingGeomBrief","type":"Class"},{"name":"MillingRemovalUtil","href":"Hi.Milling.MillingRemovalUtil.html","topicHref":"Hi.Milling.MillingRemovalUtil.html","topicUid":"Hi.Milling.MillingRemovalUtil","type":"Class"},{"name":"SpindleCapability","href":"Hi.Milling.SpindleCapability.html","topicHref":"Hi.Milling.SpindleCapability.html","topicUid":"Hi.Milling.SpindleCapability","type":"Class"}]},{"name":"Hi.Milling.Apts","href":"Hi.Milling.Apts.html","topicHref":"Hi.Milling.Apts.html","topicUid":"Hi.Milling.Apts","type":"Namespace","items":[{"name":"AptDerivative","href":"Hi.Milling.Apts.AptDerivative.html","topicHref":"Hi.Milling.Apts.AptDerivative.html","topicUid":"Hi.Milling.Apts.AptDerivative","type":"Class"},{"name":"BallApt","href":"Hi.Milling.Apts.BallApt.html","topicHref":"Hi.Milling.Apts.BallApt.html","topicUid":"Hi.Milling.Apts.BallApt","type":"Class"},{"name":"BullNoseApt","href":"Hi.Milling.Apts.BullNoseApt.html","topicHref":"Hi.Milling.Apts.BullNoseApt.html","topicUid":"Hi.Milling.Apts.BullNoseApt","type":"Class"},{"name":"ColumnApt","href":"Hi.Milling.Apts.ColumnApt.html","topicHref":"Hi.Milling.Apts.ColumnApt.html","topicUid":"Hi.Milling.Apts.ColumnApt","type":"Class"},{"name":"ConeApt","href":"Hi.Milling.Apts.ConeApt.html","topicHref":"Hi.Milling.Apts.ConeApt.html","topicUid":"Hi.Milling.Apts.ConeApt","type":"Class"},{"name":"ExactColumnApt","href":"Hi.Milling.Apts.ExactColumnApt.html","topicHref":"Hi.Milling.Apts.ExactColumnApt.html","topicUid":"Hi.Milling.Apts.ExactColumnApt","type":"Class"},{"name":"GeneralApt","href":"Hi.Milling.Apts.GeneralApt.html","topicHref":"Hi.Milling.Apts.GeneralApt.html","topicUid":"Hi.Milling.Apts.GeneralApt","type":"Class"},{"name":"IAptAlpha","href":"Hi.Milling.Apts.IAptAlpha.html","topicHref":"Hi.Milling.Apts.IAptAlpha.html","topicUid":"Hi.Milling.Apts.IAptAlpha","type":"Interface"},{"name":"IAptBased","href":"Hi.Milling.Apts.IAptBased.html","topicHref":"Hi.Milling.Apts.IAptBased.html","topicUid":"Hi.Milling.Apts.IAptBased","type":"Interface"},{"name":"IAptBeta","href":"Hi.Milling.Apts.IAptBeta.html","topicHref":"Hi.Milling.Apts.IAptBeta.html","topicUid":"Hi.Milling.Apts.IAptBeta","type":"Interface"},{"name":"IAptRc","href":"Hi.Milling.Apts.IAptRc.html","topicHref":"Hi.Milling.Apts.IAptRc.html","topicUid":"Hi.Milling.Apts.IAptRc","type":"Interface"},{"name":"IAptRr","href":"Hi.Milling.Apts.IAptRr.html","topicHref":"Hi.Milling.Apts.IAptRr.html","topicUid":"Hi.Milling.Apts.IAptRr","type":"Interface"},{"name":"IAptRz","href":"Hi.Milling.Apts.IAptRz.html","topicHref":"Hi.Milling.Apts.IAptRz.html","topicUid":"Hi.Milling.Apts.IAptRz","type":"Interface"},{"name":"IGetApt","href":"Hi.Milling.Apts.IGetApt.html","topicHref":"Hi.Milling.Apts.IGetApt.html","topicUid":"Hi.Milling.Apts.IGetApt","type":"Interface"},{"name":"IGetGeneralApt","href":"Hi.Milling.Apts.IGetGeneralApt.html","topicHref":"Hi.Milling.Apts.IGetGeneralApt.html","topicUid":"Hi.Milling.Apts.IGetGeneralApt","type":"Interface"},{"name":"TaperApt","href":"Hi.Milling.Apts.TaperApt.html","topicHref":"Hi.Milling.Apts.TaperApt.html","topicUid":"Hi.Milling.Apts.TaperApt","type":"Class"},{"name":"apt_t","href":"Hi.Milling.Apts.apt_t.html","topicHref":"Hi.Milling.Apts.apt_t.html","topicUid":"Hi.Milling.Apts.apt_t","type":"Struct"}]},{"name":"Hi.Milling.Cutters","href":"Hi.Milling.Cutters.html","topicHref":"Hi.Milling.Cutters.html","topicUid":"Hi.Milling.Cutters","type":"Namespace","items":[{"name":"AptProfile","href":"Hi.Milling.Cutters.AptProfile.html","topicHref":"Hi.Milling.Cutters.AptProfile.html","topicUid":"Hi.Milling.Cutters.AptProfile","type":"Class"},{"name":"ConstRatioProfile","href":"Hi.Milling.Cutters.ConstRatioProfile.html","topicHref":"Hi.Milling.Cutters.ConstRatioProfile.html","topicUid":"Hi.Milling.Cutters.ConstRatioProfile","type":"Class"},{"name":"CustomSpinningProfile","href":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicHref":"Hi.Milling.Cutters.CustomSpinningProfile.html","topicUid":"Hi.Milling.Cutters.CustomSpinningProfile","type":"Class"},{"name":"CutterUtil","href":"Hi.Milling.Cutters.CutterUtil.html","topicHref":"Hi.Milling.Cutters.CutterUtil.html","topicUid":"Hi.Milling.Cutters.CutterUtil","type":"Class"},{"name":"FluteContourDisplayee","href":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicHref":"Hi.Milling.Cutters.FluteContourDisplayee.html","topicUid":"Hi.Milling.Cutters.FluteContourDisplayee","type":"Class"},{"name":"FluteDependentRatioProfile","href":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicHref":"Hi.Milling.Cutters.FluteDependentRatioProfile.html","topicUid":"Hi.Milling.Cutters.FluteDependentRatioProfile","type":"Class"},{"name":"IShaperProfile","href":"Hi.Milling.Cutters.IShaperProfile.html","topicHref":"Hi.Milling.Cutters.IShaperProfile.html","topicUid":"Hi.Milling.Cutters.IShaperProfile","type":"Interface"},{"name":"MillingCutter","href":"Hi.Milling.Cutters.MillingCutter.html","topicHref":"Hi.Milling.Cutters.MillingCutter.html","topicUid":"Hi.Milling.Cutters.MillingCutter","type":"Class"},{"name":"MillingCutter.IntegralModeEnum","href":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutter.IntegralModeEnum","type":"Enum"},{"name":"MillingCutter.MassAssignmentMode","href":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicHref":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode.html","topicUid":"Hi.Milling.Cutters.MillingCutter.MassAssignmentMode","type":"Enum"},{"name":"MillingCutterEditorDisplayee","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee","type":"Class"},{"name":"MillingCutterEditorDisplayee.ShapeModeEnum","href":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicHref":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum.html","topicUid":"Hi.Milling.Cutters.MillingCutterEditorDisplayee.ShapeModeEnum","type":"Enum"}]},{"name":"Hi.Milling.Engagements","href":"Hi.Milling.Engagements.html","topicHref":"Hi.Milling.Engagements.html","topicUid":"Hi.Milling.Engagements","type":"Namespace","items":[{"name":"BitwiseMillingEngagement","href":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicHref":"Hi.Milling.Engagements.BitwiseMillingEngagement.html","topicUid":"Hi.Milling.Engagements.BitwiseMillingEngagement","type":"Class"},{"name":"EngagementLayer","href":"Hi.Milling.Engagements.EngagementLayer.html","topicHref":"Hi.Milling.Engagements.EngagementLayer.html","topicUid":"Hi.Milling.Engagements.EngagementLayer","type":"Class"},{"name":"EngagementSlice","href":"Hi.Milling.Engagements.EngagementSlice.html","topicHref":"Hi.Milling.Engagements.EngagementSlice.html","topicUid":"Hi.Milling.Engagements.EngagementSlice","type":"Class"},{"name":"IBitwiseMillingEngagementSupport","href":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicHref":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport.html","topicUid":"Hi.Milling.Engagements.IBitwiseMillingEngagementSupport","type":"Interface"},{"name":"IGetLayerMillingEngagement","href":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.IGetLayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.IGetLayerMillingEngagement","type":"Interface"},{"name":"LayerMillingEngagement","href":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicHref":"Hi.Milling.Engagements.LayerMillingEngagement.html","topicUid":"Hi.Milling.Engagements.LayerMillingEngagement","type":"Class"},{"name":"MillingEngagementUtil","href":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicHref":"Hi.Milling.Engagements.MillingEngagementUtil.html","topicUid":"Hi.Milling.Engagements.MillingEngagementUtil","type":"Class"}]},{"name":"Hi.Milling.FluteContours","href":"Hi.Milling.FluteContours.html","topicHref":"Hi.Milling.FluteContours.html","topicUid":"Hi.Milling.FluteContours","type":"Namespace","items":[{"name":"ConstHelixSideContour","href":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicHref":"Hi.Milling.FluteContours.ConstHelixSideContour.html","topicUid":"Hi.Milling.FluteContours.ConstHelixSideContour","type":"Class"},{"name":"FluteContour","href":"Hi.Milling.FluteContours.FluteContour.html","topicHref":"Hi.Milling.FluteContours.FluteContour.html","topicUid":"Hi.Milling.FluteContours.FluteContour","type":"Class"},{"name":"FluteContourUtil","href":"Hi.Milling.FluteContours.FluteContourUtil.html","topicHref":"Hi.Milling.FluteContours.FluteContourUtil.html","topicUid":"Hi.Milling.FluteContours.FluteContourUtil","type":"Class"},{"name":"FreeFluting","href":"Hi.Milling.FluteContours.FreeFluting.html","topicHref":"Hi.Milling.FluteContours.FreeFluting.html","topicUid":"Hi.Milling.FluteContours.FreeFluting","type":"Class"},{"name":"FreeformBottomContour","href":"Hi.Milling.FluteContours.FreeformBottomContour.html","topicHref":"Hi.Milling.FluteContours.FreeformBottomContour.html","topicUid":"Hi.Milling.FluteContours.FreeformBottomContour","type":"Class"},{"name":"FreeformSideContour","href":"Hi.Milling.FluteContours.FreeformSideContour.html","topicHref":"Hi.Milling.FluteContours.FreeformSideContour.html","topicUid":"Hi.Milling.FluteContours.FreeformSideContour","type":"Class"},{"name":"IBottomContour","href":"Hi.Milling.FluteContours.IBottomContour.html","topicHref":"Hi.Milling.FluteContours.IBottomContour.html","topicUid":"Hi.Milling.FluteContours.IBottomContour","type":"Interface"},{"name":"IFluteNumSourceProperty","href":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicHref":"Hi.Milling.FluteContours.IFluteNumSourceProperty.html","topicUid":"Hi.Milling.FluteContours.IFluteNumSourceProperty","type":"Interface"},{"name":"IFluting","href":"Hi.Milling.FluteContours.IFluting.html","topicHref":"Hi.Milling.FluteContours.IFluting.html","topicUid":"Hi.Milling.FluteContours.IFluting","type":"Interface"},{"name":"IGetFluteNum","href":"Hi.Milling.FluteContours.IGetFluteNum.html","topicHref":"Hi.Milling.FluteContours.IGetFluteNum.html","topicUid":"Hi.Milling.FluteContours.IGetFluteNum","type":"Interface"},{"name":"ISideContour","href":"Hi.Milling.FluteContours.ISideContour.html","topicHref":"Hi.Milling.FluteContours.ISideContour.html","topicUid":"Hi.Milling.FluteContours.ISideContour","type":"Interface"},{"name":"IWorkingContour","href":"Hi.Milling.FluteContours.IWorkingContour.html","topicHref":"Hi.Milling.FluteContours.IWorkingContour.html","topicUid":"Hi.Milling.FluteContours.IWorkingContour","type":"Interface"},{"name":"ShiftedWorkingContour","href":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicHref":"Hi.Milling.FluteContours.ShiftedWorkingContour.html","topicUid":"Hi.Milling.FluteContours.ShiftedWorkingContour","type":"Class"},{"name":"SideContourDisplayee","href":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicHref":"Hi.Milling.FluteContours.SideContourDisplayee.html","topicUid":"Hi.Milling.FluteContours.SideContourDisplayee","type":"Class"},{"name":"SlideBottomContour","href":"Hi.Milling.FluteContours.SlideBottomContour.html","topicHref":"Hi.Milling.FluteContours.SlideBottomContour.html","topicUid":"Hi.Milling.FluteContours.SlideBottomContour","type":"Class"},{"name":"SpanContourPos4d","href":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicHref":"Hi.Milling.FluteContours.SpanContourPos4d.html","topicUid":"Hi.Milling.FluteContours.SpanContourPos4d","type":"Class"},{"name":"UniformFluting","href":"Hi.Milling.FluteContours.UniformFluting.html","topicHref":"Hi.Milling.FluteContours.UniformFluting.html","topicUid":"Hi.Milling.FluteContours.UniformFluting","type":"Class"}]},{"name":"Hi.Milling.MillingTools","href":"Hi.Milling.MillingTools.html","topicHref":"Hi.Milling.MillingTools.html","topicUid":"Hi.Milling.MillingTools","type":"Namespace","items":[{"name":"MillingTool","href":"Hi.Milling.MillingTools.MillingTool.html","topicHref":"Hi.Milling.MillingTools.MillingTool.html","topicUid":"Hi.Milling.MillingTools.MillingTool","type":"Class"},{"name":"MillingToolAnchorReference","href":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicHref":"Hi.Milling.MillingTools.MillingToolAnchorReference.html","topicUid":"Hi.Milling.MillingTools.MillingToolAnchorReference","type":"Enum"},{"name":"MillingToolEditorDisplayee","href":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicHref":"Hi.Milling.MillingTools.MillingToolEditorDisplayee.html","topicUid":"Hi.Milling.MillingTools.MillingToolEditorDisplayee","type":"Class"},{"name":"MillingToolPhysicsPack","href":"Hi.Milling.MillingTools.MillingToolPhysicsPack.html","topicHref":"Hi.Milling.MillingTools.MillingToolPhysicsPack.html","topicUid":"Hi.Milling.MillingTools.MillingToolPhysicsPack","type":"Class"},{"name":"MillingToolUtil","href":"Hi.Milling.MillingTools.MillingToolUtil.html","topicHref":"Hi.Milling.MillingTools.MillingToolUtil.html","topicUid":"Hi.Milling.MillingTools.MillingToolUtil","type":"Class"}]},{"name":"Hi.MillingForces","href":"Hi.MillingForces.html","topicHref":"Hi.MillingForces.html","topicUid":"Hi.MillingForces","type":"Namespace","items":[{"name":"IGetMillingForce","href":"Hi.MillingForces.IGetMillingForce.html","topicHref":"Hi.MillingForces.IGetMillingForce.html","topicUid":"Hi.MillingForces.IGetMillingForce","type":"Interface"},{"name":"IMillingForceAccessor","href":"Hi.MillingForces.IMillingForceAccessor.html","topicHref":"Hi.MillingForces.IMillingForceAccessor.html","topicUid":"Hi.MillingForces.IMillingForceAccessor","type":"Interface"},{"name":"MillingForce","href":"Hi.MillingForces.MillingForce.html","topicHref":"Hi.MillingForces.MillingForce.html","topicUid":"Hi.MillingForces.MillingForce","type":"Class"},{"name":"MillingForceLicense","href":"Hi.MillingForces.MillingForceLicense.html","topicHref":"Hi.MillingForces.MillingForceLicense.html","topicUid":"Hi.MillingForces.MillingForceLicense","type":"Class"},{"name":"MillingForceLuggage","href":"Hi.MillingForces.MillingForceLuggage.html","topicHref":"Hi.MillingForces.MillingForceLuggage.html","topicUid":"Hi.MillingForces.MillingForceLuggage","type":"Class"},{"name":"MillingForceUtil","href":"Hi.MillingForces.MillingForceUtil.html","topicHref":"Hi.MillingForces.MillingForceUtil.html","topicUid":"Hi.MillingForces.MillingForceUtil","type":"Class"},{"name":"MillingPhysicsBrief","href":"Hi.MillingForces.MillingPhysicsBrief.html","topicHref":"Hi.MillingForces.MillingPhysicsBrief.html","topicUid":"Hi.MillingForces.MillingPhysicsBrief","type":"Class"},{"name":"PhysicsUtil","href":"Hi.MillingForces.PhysicsUtil.html","topicHref":"Hi.MillingForces.PhysicsUtil.html","topicUid":"Hi.MillingForces.PhysicsUtil","type":"Class"},{"name":"ToolObservationReference","href":"Hi.MillingForces.ToolObservationReference.html","topicHref":"Hi.MillingForces.ToolObservationReference.html","topicUid":"Hi.MillingForces.ToolObservationReference","type":"Enum"}]},{"name":"Hi.MillingForces.Fittings","href":"Hi.MillingForces.Fittings.html","topicHref":"Hi.MillingForces.Fittings.html","topicUid":"Hi.MillingForces.Fittings","type":"Namespace","items":[{"name":"CuttingParaUtil","href":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicHref":"Hi.MillingForces.Fittings.CuttingParaUtil.html","topicUid":"Hi.MillingForces.Fittings.CuttingParaUtil","type":"Class"},{"name":"ICuttingPara","href":"Hi.MillingForces.Fittings.ICuttingPara.html","topicHref":"Hi.MillingForces.Fittings.ICuttingPara.html","topicUid":"Hi.MillingForces.Fittings.ICuttingPara","type":"Interface"},{"name":"IGetCuttingPara","href":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicHref":"Hi.MillingForces.Fittings.IGetCuttingPara.html","topicUid":"Hi.MillingForces.Fittings.IGetCuttingPara","type":"Interface"},{"name":"SampleCategory","href":"Hi.MillingForces.Fittings.SampleCategory.html","topicHref":"Hi.MillingForces.Fittings.SampleCategory.html","topicUid":"Hi.MillingForces.Fittings.SampleCategory","type":"Class"},{"name":"SampleFlag","href":"Hi.MillingForces.Fittings.SampleFlag.html","topicHref":"Hi.MillingForces.Fittings.SampleFlag.html","topicUid":"Hi.MillingForces.Fittings.SampleFlag","type":"Enum"},{"name":"SampleFlagUtil","href":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicHref":"Hi.MillingForces.Fittings.SampleFlagUtil.html","topicUid":"Hi.MillingForces.Fittings.SampleFlagUtil","type":"Class"},{"name":"SampleInstance","href":"Hi.MillingForces.Fittings.SampleInstance.html","topicHref":"Hi.MillingForces.Fittings.SampleInstance.html","topicUid":"Hi.MillingForces.Fittings.SampleInstance","type":"Class"},{"name":"TimeForce","href":"Hi.MillingForces.Fittings.TimeForce.html","topicHref":"Hi.MillingForces.Fittings.TimeForce.html","topicUid":"Hi.MillingForces.Fittings.TimeForce","type":"Class"},{"name":"TimeForceFrequencyDomain","href":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicHref":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain.html","topicUid":"Hi.MillingForces.Fittings.TimeForceFrequencyDomain","type":"Class"},{"name":"TimeForceSeries","href":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeForceSeries","type":"Class"},{"name":"TimeForceUtil","href":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicHref":"Hi.MillingForces.Fittings.TimeForceUtil.html","topicUid":"Hi.MillingForces.Fittings.TimeForceUtil","type":"Class"},{"name":"TimeVsForceSeries","href":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsForceSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsForceSeries","type":"Class"},{"name":"TimeVsTorqueSeries","href":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicHref":"Hi.MillingForces.Fittings.TimeVsTorqueSeries.html","topicUid":"Hi.MillingForces.Fittings.TimeVsTorqueSeries","type":"Class"},{"name":"TrainingSample","href":"Hi.MillingForces.Fittings.TrainingSample.html","topicHref":"Hi.MillingForces.Fittings.TrainingSample.html","topicUid":"Hi.MillingForces.Fittings.TrainingSample","type":"Class"}]},{"name":"Hi.MillingForces.ProfileMillingParas","href":"Hi.MillingForces.ProfileMillingParas.html","topicHref":"Hi.MillingForces.ProfileMillingParas.html","topicUid":"Hi.MillingForces.ProfileMillingParas","type":"Namespace","items":[{"name":"IGetLocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.IGetLocalProfileMillingPara","type":"Interface"},{"name":"LocalProfileMillingPara","href":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicHref":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara.html","topicUid":"Hi.MillingForces.ProfileMillingParas.LocalProfileMillingPara","type":"Class"},{"name":"ProfileMillingParaMap","href":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicHref":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap.html","topicUid":"Hi.MillingForces.ProfileMillingParas.ProfileMillingParaMap","type":"Class"},{"name":"RtaMillingParaKey","href":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicHref":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey.html","topicUid":"Hi.MillingForces.ProfileMillingParas.RtaMillingParaKey","type":"Enum"}]},{"name":"Hi.MillingForces.RakeFaceCuttingParas","href":"Hi.MillingForces.RakeFaceCuttingParas.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas","type":"Namespace","items":[{"name":"IRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.IRakeFaceCuttingPara","type":"Interface"},{"name":"MillingPhysicsUtil","href":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MillingPhysicsUtil","type":"Class"},{"name":"MultiFormRakeFaceCuttingPara","href":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.MultiFormRakeFaceCuttingPara","type":"Class"},{"name":"RakeFaceCuttingPara2d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara2d","type":"Class"},{"name":"RakeFaceCuttingPara3d","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingPara3d","type":"Class"},{"name":"RakeFaceCuttingParaMap","href":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicHref":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap.html","topicUid":"Hi.MillingForces.RakeFaceCuttingParas.RakeFaceCuttingParaMap","type":"Class"}]},{"name":"Hi.MillingForces.Training","href":"Hi.MillingForces.Training.html","topicHref":"Hi.MillingForces.Training.html","topicUid":"Hi.MillingForces.Training","type":"Namespace","items":[{"name":"MillingParaTrainResult","href":"Hi.MillingForces.Training.MillingParaTrainResult.html","topicHref":"Hi.MillingForces.Training.MillingParaTrainResult.html","topicUid":"Hi.MillingForces.Training.MillingParaTrainResult","type":"Class"},{"name":"MillingTraining","href":"Hi.MillingForces.Training.MillingTraining.html","topicHref":"Hi.MillingForces.Training.MillingTraining.html","topicUid":"Hi.MillingForces.Training.MillingTraining","type":"Class"}]},{"name":"Hi.MillingProcs","href":"Hi.MillingProcs.html","topicHref":"Hi.MillingProcs.html","topicUid":"Hi.MillingProcs","type":"Namespace","items":[{"name":"MillingGuide","href":"Hi.MillingProcs.MillingGuide.html","topicHref":"Hi.MillingProcs.MillingGuide.html","topicUid":"Hi.MillingProcs.MillingGuide","type":"Class"}]},{"name":"Hi.MillingStepUtils","href":"Hi.MillingStepUtils.html","topicHref":"Hi.MillingStepUtils.html","topicUid":"Hi.MillingStepUtils","type":"Namespace","items":[{"name":"ClStripChartConfig","href":"Hi.MillingStepUtils.ClStripChartConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartConfig","type":"Class"},{"name":"ClStripChartItemConfig","href":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicHref":"Hi.MillingStepUtils.ClStripChartItemConfig.html","topicUid":"Hi.MillingStepUtils.ClStripChartItemConfig","type":"Class"},{"name":"ForceCycleFlag","href":"Hi.MillingStepUtils.ForceCycleFlag.html","topicHref":"Hi.MillingStepUtils.ForceCycleFlag.html","topicUid":"Hi.MillingStepUtils.ForceCycleFlag","type":"Enum"},{"name":"ForceCycleLineDivConfig","href":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.ForceCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.ForceCycleLineDivConfig","type":"Class"},{"name":"LineChartVRangeMode","href":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicHref":"Hi.MillingStepUtils.LineChartVRangeMode.html","topicUid":"Hi.MillingStepUtils.LineChartVRangeMode","type":"Enum"},{"name":"SpindleMomentCycleLineDivConfig","href":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicHref":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig.html","topicUid":"Hi.MillingStepUtils.SpindleMomentCycleLineDivConfig","type":"Class"},{"name":"TimeChartYConfig","href":"Hi.MillingStepUtils.TimeChartYConfig.html","topicHref":"Hi.MillingStepUtils.TimeChartYConfig.html","topicUid":"Hi.MillingStepUtils.TimeChartYConfig","type":"Class"}]},{"name":"Hi.MillingSteps","href":"Hi.MillingSteps.html","topicHref":"Hi.MillingSteps.html","topicUid":"Hi.MillingSteps","type":"Namespace","items":[{"name":"MillingInstance","href":"Hi.MillingSteps.MillingInstance.html","topicHref":"Hi.MillingSteps.MillingInstance.html","topicUid":"Hi.MillingSteps.MillingInstance","type":"Class"},{"name":"MillingStepLuggage","href":"Hi.MillingSteps.MillingStepLuggage.html","topicHref":"Hi.MillingSteps.MillingStepLuggage.html","topicUid":"Hi.MillingSteps.MillingStepLuggage","type":"Class"}]},{"name":"Hi.Motion","href":"Hi.Motion.html","topicHref":"Hi.Motion.html","topicUid":"Hi.Motion","type":"Namespace","items":[{"name":"MotionUtil","href":"Hi.Motion.MotionUtil.html","topicHref":"Hi.Motion.MotionUtil.html","topicUid":"Hi.Motion.MotionUtil","type":"Class"}]},{"name":"Hi.Motion.MatValves","href":"Hi.Motion.MatValves.html","topicHref":"Hi.Motion.MatValves.html","topicUid":"Hi.Motion.MatValves","type":"Namespace","items":[{"name":"ClMachiningValve","href":"Hi.Motion.MatValves.ClMachiningValve.html","topicHref":"Hi.Motion.MatValves.ClMachiningValve.html","topicUid":"Hi.Motion.MatValves.ClMachiningValve","type":"Class"},{"name":"IMotionValve","href":"Hi.Motion.MatValves.IMotionValve.html","topicHref":"Hi.Motion.MatValves.IMotionValve.html","topicUid":"Hi.Motion.MatValves.IMotionValve","type":"Interface"},{"name":"MacroMotionValve","href":"Hi.Motion.MatValves.MacroMotionValve.html","topicHref":"Hi.Motion.MatValves.MacroMotionValve.html","topicUid":"Hi.Motion.MatValves.MacroMotionValve","type":"Class"},{"name":"StepMotionValve","href":"Hi.Motion.MatValves.StepMotionValve.html","topicHref":"Hi.Motion.MatValves.StepMotionValve.html","topicUid":"Hi.Motion.MatValves.StepMotionValve","type":"Class"}]},{"name":"Hi.Native","href":"Hi.Native.html","topicHref":"Hi.Native.html","topicUid":"Hi.Native","type":"Namespace","items":[{"name":"StopSource","href":"Hi.Native.StopSource.html","topicHref":"Hi.Native.StopSource.html","topicUid":"Hi.Native.StopSource","type":"Class"},{"name":"StopToken","href":"Hi.Native.StopToken.html","topicHref":"Hi.Native.StopToken.html","topicUid":"Hi.Native.StopToken","type":"Class"},{"name":"StopTokenKit","href":"Hi.Native.StopTokenKit.html","topicHref":"Hi.Native.StopTokenKit.html","topicUid":"Hi.Native.StopTokenKit","type":"Class"},{"name":"StopTokenUtil","href":"Hi.Native.StopTokenUtil.html","topicHref":"Hi.Native.StopTokenUtil.html","topicUid":"Hi.Native.StopTokenUtil","type":"Class"},{"name":"bind_t","href":"Hi.Native.bind_t.html","topicHref":"Hi.Native.bind_t.html","topicUid":"Hi.Native.bind_t","type":"Struct"},{"name":"box2d","href":"Hi.Native.box2d.html","topicHref":"Hi.Native.box2d.html","topicUid":"Hi.Native.box2d","type":"Struct"},{"name":"box3d","href":"Hi.Native.box3d.html","topicHref":"Hi.Native.box3d.html","topicUid":"Hi.Native.box3d","type":"Struct"},{"name":"expand_to_box3d_func_t","href":"Hi.Native.expand_to_box3d_func_t.html","topicHref":"Hi.Native.expand_to_box3d_func_t.html","topicUid":"Hi.Native.expand_to_box3d_func_t","type":"Delegate"},{"name":"key_event_t","href":"Hi.Native.key_event_t.html","topicHref":"Hi.Native.key_event_t.html","topicUid":"Hi.Native.key_event_t","type":"Struct"},{"name":"key_table__transform_view_by_key_pressing_t","href":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicHref":"Hi.Native.key_table__transform_view_by_key_pressing_t.html","topicUid":"Hi.Native.key_table__transform_view_by_key_pressing_t","type":"Struct"},{"name":"mat4d","href":"Hi.Native.mat4d.html","topicHref":"Hi.Native.mat4d.html","topicUid":"Hi.Native.mat4d","type":"Struct"},{"name":"mat_stack_t","href":"Hi.Native.mat_stack_t.html","topicHref":"Hi.Native.mat_stack_t.html","topicUid":"Hi.Native.mat_stack_t","type":"Struct"},{"name":"mouse_button_event_t","href":"Hi.Native.mouse_button_event_t.html","topicHref":"Hi.Native.mouse_button_event_t.html","topicUid":"Hi.Native.mouse_button_event_t","type":"Struct"},{"name":"mouse_button_table__transform_view_by_mouse_drag_t","href":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicHref":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t.html","topicUid":"Hi.Native.mouse_button_table__transform_view_by_mouse_drag_t","type":"Struct"},{"name":"mouse_move_event_t","href":"Hi.Native.mouse_move_event_t.html","topicHref":"Hi.Native.mouse_move_event_t.html","topicUid":"Hi.Native.mouse_move_event_t","type":"Struct"},{"name":"mouse_wheel_event_t","href":"Hi.Native.mouse_wheel_event_t.html","topicHref":"Hi.Native.mouse_wheel_event_t.html","topicUid":"Hi.Native.mouse_wheel_event_t","type":"Struct"},{"name":"panel_state_t","href":"Hi.Native.panel_state_t.html","topicHref":"Hi.Native.panel_state_t.html","topicUid":"Hi.Native.panel_state_t","type":"Struct"},{"name":"picking_event_t","href":"Hi.Native.picking_event_t.html","topicHref":"Hi.Native.picking_event_t.html","topicUid":"Hi.Native.picking_event_t","type":"Struct"},{"name":"picking_mark_t","href":"Hi.Native.picking_mark_t.html","topicHref":"Hi.Native.picking_mark_t.html","topicUid":"Hi.Native.picking_mark_t","type":"Struct"},{"name":"tri3d","href":"Hi.Native.tri3d.html","topicHref":"Hi.Native.tri3d.html","topicUid":"Hi.Native.tri3d","type":"Struct"},{"name":"ui_event_type","href":"Hi.Native.ui_event_type.html","topicHref":"Hi.Native.ui_event_type.html","topicUid":"Hi.Native.ui_event_type","type":"Enum"},{"name":"vec2d","href":"Hi.Native.vec2d.html","topicHref":"Hi.Native.vec2d.html","topicUid":"Hi.Native.vec2d","type":"Struct"},{"name":"vec3d","href":"Hi.Native.vec3d.html","topicHref":"Hi.Native.vec3d.html","topicUid":"Hi.Native.vec3d","type":"Struct"},{"name":"vec3f","href":"Hi.Native.vec3f.html","topicHref":"Hi.Native.vec3f.html","topicUid":"Hi.Native.vec3f","type":"Struct"}]},{"name":"Hi.NcMech","href":"Hi.NcMech.html","topicHref":"Hi.NcMech.html","topicUid":"Hi.NcMech","type":"Namespace","items":[{"name":"ICollisionIndexPairsSource","href":"Hi.NcMech.ICollisionIndexPairsSource.html","topicHref":"Hi.NcMech.ICollisionIndexPairsSource.html","topicUid":"Hi.NcMech.ICollisionIndexPairsSource","type":"Interface"}]},{"name":"Hi.NcMech.Fixtures","href":"Hi.NcMech.Fixtures.html","topicHref":"Hi.NcMech.Fixtures.html","topicUid":"Hi.NcMech.Fixtures","type":"Namespace","items":[{"name":"Fixture","href":"Hi.NcMech.Fixtures.Fixture.html","topicHref":"Hi.NcMech.Fixtures.Fixture.html","topicUid":"Hi.NcMech.Fixtures.Fixture","type":"Class"},{"name":"FixtureEditorDisplayee","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayee.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayee","type":"Class"},{"name":"FixtureEditorDisplayeeConfig","href":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Fixtures.FixtureEditorDisplayeeConfig","type":"Class"}]},{"name":"Hi.NcMech.Holders","href":"Hi.NcMech.Holders.html","topicHref":"Hi.NcMech.Holders.html","topicUid":"Hi.NcMech.Holders","type":"Namespace","items":[{"name":"CylindroidHolder","href":"Hi.NcMech.Holders.CylindroidHolder.html","topicHref":"Hi.NcMech.Holders.CylindroidHolder.html","topicUid":"Hi.NcMech.Holders.CylindroidHolder","type":"Class"},{"name":"FreeformHolder","href":"Hi.NcMech.Holders.FreeformHolder.html","topicHref":"Hi.NcMech.Holders.FreeformHolder.html","topicUid":"Hi.NcMech.Holders.FreeformHolder","type":"Class"},{"name":"HolderEditorDisplayee","href":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicHref":"Hi.NcMech.Holders.HolderEditorDisplayee.html","topicUid":"Hi.NcMech.Holders.HolderEditorDisplayee","type":"Class"},{"name":"IHolder","href":"Hi.NcMech.Holders.IHolder.html","topicHref":"Hi.NcMech.Holders.IHolder.html","topicUid":"Hi.NcMech.Holders.IHolder","type":"Interface"}]},{"name":"Hi.NcMech.Solids","href":"Hi.NcMech.Solids.html","topicHref":"Hi.NcMech.Solids.html","topicUid":"Hi.NcMech.Solids","type":"Namespace","items":[{"name":"CollisionRedScope","href":"Hi.NcMech.Solids.CollisionRedScope.html","topicHref":"Hi.NcMech.Solids.CollisionRedScope.html","topicUid":"Hi.NcMech.Solids.CollisionRedScope","type":"Class"},{"name":"CollisionRedScope.Scope","href":"Hi.NcMech.Solids.CollisionRedScope.Scope.html","topicHref":"Hi.NcMech.Solids.CollisionRedScope.Scope.html","topicUid":"Hi.NcMech.Solids.CollisionRedScope.Scope","type":"Struct"},{"name":"IGetSolid","href":"Hi.NcMech.Solids.IGetSolid.html","topicHref":"Hi.NcMech.Solids.IGetSolid.html","topicUid":"Hi.NcMech.Solids.IGetSolid","type":"Interface"},{"name":"Solid","href":"Hi.NcMech.Solids.Solid.html","topicHref":"Hi.NcMech.Solids.Solid.html","topicUid":"Hi.NcMech.Solids.Solid","type":"Class"},{"name":"Solid.RenderingModeEnum","href":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicHref":"Hi.NcMech.Solids.Solid.RenderingModeEnum.html","topicUid":"Hi.NcMech.Solids.Solid.RenderingModeEnum","type":"Enum"},{"name":"SolidFuncSource","href":"Hi.NcMech.Solids.SolidFuncSource.html","topicHref":"Hi.NcMech.Solids.SolidFuncSource.html","topicUid":"Hi.NcMech.Solids.SolidFuncSource","type":"Class"}]},{"name":"Hi.NcMech.Topo","href":"Hi.NcMech.Topo.html","topicHref":"Hi.NcMech.Topo.html","topicUid":"Hi.NcMech.Topo","type":"Namespace","items":[{"name":"INcStroke","href":"Hi.NcMech.Topo.INcStroke.html","topicHref":"Hi.NcMech.Topo.INcStroke.html","topicUid":"Hi.NcMech.Topo.INcStroke","type":"Interface"},{"name":"INcTransformer","href":"Hi.NcMech.Topo.INcTransformer.html","topicHref":"Hi.NcMech.Topo.INcTransformer.html","topicUid":"Hi.NcMech.Topo.INcTransformer","type":"Interface"},{"name":"ITopoBrick","href":"Hi.NcMech.Topo.ITopoBrick.html","topicHref":"Hi.NcMech.Topo.ITopoBrick.html","topicUid":"Hi.NcMech.Topo.ITopoBrick","type":"Interface"},{"name":"NcRotation","href":"Hi.NcMech.Topo.NcRotation.html","topicHref":"Hi.NcMech.Topo.NcRotation.html","topicUid":"Hi.NcMech.Topo.NcRotation","type":"Class"},{"name":"NcTranslation","href":"Hi.NcMech.Topo.NcTranslation.html","topicHref":"Hi.NcMech.Topo.NcTranslation.html","topicUid":"Hi.NcMech.Topo.NcTranslation","type":"Class"},{"name":"StlSourceTopoBrick","href":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicHref":"Hi.NcMech.Topo.StlSourceTopoBrick.html","topicUid":"Hi.NcMech.Topo.StlSourceTopoBrick","type":"Class"}]},{"name":"Hi.NcMech.Workpieces","href":"Hi.NcMech.Workpieces.html","topicHref":"Hi.NcMech.Workpieces.html","topicUid":"Hi.NcMech.Workpieces","type":"Namespace","items":[{"name":"Workpiece","href":"Hi.NcMech.Workpieces.Workpiece.html","topicHref":"Hi.NcMech.Workpieces.Workpiece.html","topicUid":"Hi.NcMech.Workpieces.Workpiece","type":"Class"},{"name":"WorkpieceEditorDisplayee","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayee","type":"Class"},{"name":"WorkpieceEditorDisplayeeConfig","href":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig","type":"Class"},{"name":"WorkpieceService","href":"Hi.NcMech.Workpieces.WorkpieceService.html","topicHref":"Hi.NcMech.Workpieces.WorkpieceService.html","topicUid":"Hi.NcMech.Workpieces.WorkpieceService","type":"Class"}]},{"name":"Hi.NcMech.Xyzabc","href":"Hi.NcMech.Xyzabc.html","topicHref":"Hi.NcMech.Xyzabc.html","topicUid":"Hi.NcMech.Xyzabc","type":"Namespace","items":[{"name":"GeneralXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool","type":"Class"},{"name":"IXyzabcMachineTool","href":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicHref":"Hi.NcMech.Xyzabc.IXyzabcMachineTool.html","topicUid":"Hi.NcMech.Xyzabc.IXyzabcMachineTool","type":"Interface"}]},{"name":"Hi.NcOpt","href":"Hi.NcOpt.html","topicHref":"Hi.NcOpt.html","topicUid":"Hi.NcOpt","type":"Namespace","items":[{"name":"CuttingVelocityOptLimit","href":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.CuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.CuttingVelocityOptLimit","type":"Class"},{"name":"FixedFeedPerCycleOptLimit","href":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerCycleOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerCycleOptLimit","type":"Class"},{"name":"FixedFeedPerToothOptLimit","href":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.FixedFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.FixedFeedPerToothOptLimit","type":"Class"},{"name":"ICutterOptLimitHost","href":"Hi.NcOpt.ICutterOptLimitHost.html","topicHref":"Hi.NcOpt.ICutterOptLimitHost.html","topicUid":"Hi.NcOpt.ICutterOptLimitHost","type":"Interface"},{"name":"ICutterOptOption","href":"Hi.NcOpt.ICutterOptOption.html","topicHref":"Hi.NcOpt.ICutterOptOption.html","topicUid":"Hi.NcOpt.ICutterOptOption","type":"Interface"},{"name":"ICuttingVelocityOptLimit","href":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicHref":"Hi.NcOpt.ICuttingVelocityOptLimit.html","topicUid":"Hi.NcOpt.ICuttingVelocityOptLimit","type":"Interface"},{"name":"IFeedPerToothOptLimit","href":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicHref":"Hi.NcOpt.IFeedPerToothOptLimit.html","topicUid":"Hi.NcOpt.IFeedPerToothOptLimit","type":"Interface"},{"name":"MillingCutterOptOption","href":"Hi.NcOpt.MillingCutterOptOption.html","topicHref":"Hi.NcOpt.MillingCutterOptOption.html","topicUid":"Hi.NcOpt.MillingCutterOptOption","type":"Class"},{"name":"NcOptOption","href":"Hi.NcOpt.NcOptOption.html","topicHref":"Hi.NcOpt.NcOptOption.html","topicUid":"Hi.NcOpt.NcOptOption","type":"Class"},{"name":"NcOptimizationEmbeddedLogMode","href":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicHref":"Hi.NcOpt.NcOptimizationEmbeddedLogMode.html","topicUid":"Hi.NcOpt.NcOptimizationEmbeddedLogMode","type":"Enum"},{"name":"ShapeBasedCutterOptLimit","href":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicHref":"Hi.NcOpt.ShapeBasedCutterOptLimit.html","topicUid":"Hi.NcOpt.ShapeBasedCutterOptLimit","type":"Class"}]},{"name":"Hi.NcParsers","href":"Hi.NcParsers.html","topicHref":"Hi.NcParsers.html","topicUid":"Hi.NcParsers","type":"Namespace","items":[{"name":"ControllerPresetWriter","href":"Hi.NcParsers.ControllerPresetWriter.html","topicHref":"Hi.NcParsers.ControllerPresetWriter.html","topicUid":"Hi.NcParsers.ControllerPresetWriter","type":"Class"},{"name":"IGetSentence","href":"Hi.NcParsers.IGetSentence.html","topicHref":"Hi.NcParsers.IGetSentence.html","topicUid":"Hi.NcParsers.IGetSentence","type":"Interface"},{"name":"ISentenceCarrier","href":"Hi.NcParsers.ISentenceCarrier.html","topicHref":"Hi.NcParsers.ISentenceCarrier.html","topicUid":"Hi.NcParsers.ISentenceCarrier","type":"Interface"},{"name":"ISentenceIndexed","href":"Hi.NcParsers.ISentenceIndexed.html","topicHref":"Hi.NcParsers.ISentenceIndexed.html","topicUid":"Hi.NcParsers.ISentenceIndexed","type":"Interface"},{"name":"ISessionResettable","href":"Hi.NcParsers.ISessionResettable.html","topicHref":"Hi.NcParsers.ISessionResettable.html","topicUid":"Hi.NcParsers.ISessionResettable","type":"Interface"},{"name":"NcCompositionGate","href":"Hi.NcParsers.NcCompositionGate.html","topicHref":"Hi.NcParsers.NcCompositionGate.html","topicUid":"Hi.NcParsers.NcCompositionGate","type":"Class"},{"name":"NcDiagnostic","href":"Hi.NcParsers.NcDiagnostic.html","topicHref":"Hi.NcParsers.NcDiagnostic.html","topicUid":"Hi.NcParsers.NcDiagnostic","type":"Class"},{"name":"NcDiagnosticProgress","href":"Hi.NcParsers.NcDiagnosticProgress.html","topicHref":"Hi.NcParsers.NcDiagnosticProgress.html","topicUid":"Hi.NcParsers.NcDiagnosticProgress","type":"Class"},{"name":"NcRunnerSuit","href":"Hi.NcParsers.NcRunnerSuit.html","topicHref":"Hi.NcParsers.NcRunnerSuit.html","topicUid":"Hi.NcParsers.NcRunnerSuit","type":"Class"},{"name":"RadiusCompInterference","href":"Hi.NcParsers.RadiusCompInterference.html","topicHref":"Hi.NcParsers.RadiusCompInterference.html","topicUid":"Hi.NcParsers.RadiusCompInterference","type":"Class"},{"name":"RadiusCompPlaneChange","href":"Hi.NcParsers.RadiusCompPlaneChange.html","topicHref":"Hi.NcParsers.RadiusCompPlaneChange.html","topicUid":"Hi.NcParsers.RadiusCompPlaneChange","type":"Class"},{"name":"Sentence","href":"Hi.NcParsers.Sentence.html","topicHref":"Hi.NcParsers.Sentence.html","topicUid":"Hi.NcParsers.Sentence","type":"Class"},{"name":"SoftNcRunner","href":"Hi.NcParsers.SoftNcRunner.html","topicHref":"Hi.NcParsers.SoftNcRunner.html","topicUid":"Hi.NcParsers.SoftNcRunner","type":"Class"},{"name":"SoftNcUtil","href":"Hi.NcParsers.SoftNcUtil.html","topicHref":"Hi.NcParsers.SoftNcUtil.html","topicUid":"Hi.NcParsers.SoftNcUtil","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys","href":"Hi.NcParsers.Dependencys.html","topicHref":"Hi.NcParsers.Dependencys.html","topicUid":"Hi.NcParsers.Dependencys","type":"Namespace","items":[{"name":"AxisType","href":"Hi.NcParsers.Dependencys.AxisType.html","topicHref":"Hi.NcParsers.Dependencys.AxisType.html","topicUid":"Hi.NcParsers.Dependencys.AxisType","type":"Enum"},{"name":"CncBrandDependency","href":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicHref":"Hi.NcParsers.Dependencys.CncBrandDependency.html","topicUid":"Hi.NcParsers.Dependencys.CncBrandDependency","type":"Class"},{"name":"ControllerParameterTableBase","href":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicHref":"Hi.NcParsers.Dependencys.ControllerParameterTableBase.html","topicUid":"Hi.NcParsers.Dependencys.ControllerParameterTableBase","type":"Class"},{"name":"HeidenhainDatumTable","href":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicHref":"Hi.NcParsers.Dependencys.HeidenhainDatumTable.html","topicUid":"Hi.NcParsers.Dependencys.HeidenhainDatumTable","type":"Class"},{"name":"HeidenhainDatumTableProxy","href":"Hi.NcParsers.Dependencys.HeidenhainDatumTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.HeidenhainDatumTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.HeidenhainDatumTableProxy","type":"Class"},{"name":"IBlockSkipConfig","href":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.IBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.IBlockSkipConfig","type":"Interface"},{"name":"ICannedCycleConfig","href":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicHref":"Hi.NcParsers.Dependencys.ICannedCycleConfig.html","topicUid":"Hi.NcParsers.Dependencys.ICannedCycleConfig","type":"Interface"},{"name":"IHomeMcConfig","href":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IHomeMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IHomeMcConfig","type":"Interface"},{"name":"IIndexingPositionConfig","href":"Hi.NcParsers.Dependencys.IIndexingPositionConfig.html","topicHref":"Hi.NcParsers.Dependencys.IIndexingPositionConfig.html","topicUid":"Hi.NcParsers.Dependencys.IIndexingPositionConfig","type":"Interface"},{"name":"IIsoCoordinateConfig","href":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IIsoCoordinateConfig","type":"Interface"},{"name":"IMCodeDeclarationConfig","href":"Hi.NcParsers.Dependencys.IMCodeDeclarationConfig.html","topicHref":"Hi.NcParsers.Dependencys.IMCodeDeclarationConfig.html","topicUid":"Hi.NcParsers.Dependencys.IMCodeDeclarationConfig","type":"Interface"},{"name":"IMachineAxisConfig","href":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicHref":"Hi.NcParsers.Dependencys.IMachineAxisConfig.html","topicUid":"Hi.NcParsers.Dependencys.IMachineAxisConfig","type":"Interface"},{"name":"INcDependency","href":"Hi.NcParsers.Dependencys.INcDependency.html","topicHref":"Hi.NcParsers.Dependencys.INcDependency.html","topicUid":"Hi.NcParsers.Dependencys.INcDependency","type":"Interface"},{"name":"INcDependencyListHost","href":"Hi.NcParsers.Dependencys.INcDependencyListHost.html","topicHref":"Hi.NcParsers.Dependencys.INcDependencyListHost.html","topicUid":"Hi.NcParsers.Dependencys.INcDependencyListHost","type":"Interface"},{"name":"INcDependencyProxy","href":"Hi.NcParsers.Dependencys.INcDependencyProxy.html","topicHref":"Hi.NcParsers.Dependencys.INcDependencyProxy.html","topicUid":"Hi.NcParsers.Dependencys.INcDependencyProxy","type":"Interface"},{"name":"IPowerResettable","href":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicHref":"Hi.NcParsers.Dependencys.IPowerResettable.html","topicUid":"Hi.NcParsers.Dependencys.IPowerResettable","type":"Interface"},{"name":"IRapidFeedrateConfig","href":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicHref":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html","topicUid":"Hi.NcParsers.Dependencys.IRapidFeedrateConfig","type":"Interface"},{"name":"ISpindleControlConfig","href":"Hi.NcParsers.Dependencys.ISpindleControlConfig.html","topicHref":"Hi.NcParsers.Dependencys.ISpindleControlConfig.html","topicUid":"Hi.NcParsers.Dependencys.ISpindleControlConfig","type":"Interface"},{"name":"IStrokeLimitConfig","href":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicHref":"Hi.NcParsers.Dependencys.IStrokeLimitConfig.html","topicUid":"Hi.NcParsers.Dependencys.IStrokeLimitConfig","type":"Interface"},{"name":"IToolChangeTriggerConfig","href":"Hi.NcParsers.Dependencys.IToolChangeTriggerConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolChangeTriggerConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolChangeTriggerConfig","type":"Interface"},{"name":"IToolOffsetConfig","href":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolOffsetConfig","type":"Interface"},{"name":"IToolingMcConfig","href":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.IToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.IToolingMcConfig","type":"Interface"},{"name":"IsoCoordinateAddressMap","href":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicHref":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html","topicUid":"Hi.NcParsers.Dependencys.IsoCoordinateAddressMap","type":"Class"},{"name":"MCodeEffects","href":"Hi.NcParsers.Dependencys.MCodeEffects.html","topicHref":"Hi.NcParsers.Dependencys.MCodeEffects.html","topicUid":"Hi.NcParsers.Dependencys.MCodeEffects","type":"Class"},{"name":"StrokeLimitUtil","href":"Hi.NcParsers.Dependencys.StrokeLimitUtil.html","topicHref":"Hi.NcParsers.Dependencys.StrokeLimitUtil.html","topicUid":"Hi.NcParsers.Dependencys.StrokeLimitUtil","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Fanuc","href":"Hi.NcParsers.Dependencys.Fanuc.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc","type":"Namespace","items":[{"name":"CutterCompensationType","href":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.CutterCompensationType","type":"Enum"},{"name":"FanucGotoIterationDependency","href":"Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency","type":"Class"},{"name":"FanucParameterTable","href":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable","type":"Class"},{"name":"FanucParameterTableProxy","href":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucParameterTableProxy","type":"Class"},{"name":"FanucPositionVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucPositionVariableLookup","type":"Class"},{"name":"FanucToolOffsetVariableLookup","href":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucToolOffsetVariableLookup","type":"Class"},{"name":"FanucWhileDoIterationDependency","href":"Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency","type":"Class"},{"name":"RetainedCommonVariableTable","href":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable","type":"Class"},{"name":"RetainedCommonVariableTableProxy","href":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTableProxy","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Generic","href":"Hi.NcParsers.Dependencys.Generic.html","topicHref":"Hi.NcParsers.Dependencys.Generic.html","topicUid":"Hi.NcParsers.Dependencys.Generic","type":"Namespace","items":[{"name":"FallbackConfig","href":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.FallbackConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.FallbackConfig","type":"Class"},{"name":"GenericBlockSkipConfig","href":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.GenericBlockSkipConfig","type":"Class"},{"name":"IsoCoordinateTable","href":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable","type":"Class"},{"name":"IsoCoordinateTableProxy","href":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Generic.IsoCoordinateTableProxy","type":"Class"},{"name":"MachineAxisConfig","href":"Hi.NcParsers.Dependencys.Generic.MachineAxisConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.MachineAxisConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.MachineAxisConfig","type":"Class"},{"name":"RadiusOffsetBasis","href":"Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis.html","topicHref":"Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis.html","topicUid":"Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis","type":"Enum"},{"name":"SubProgramFolderConfig","href":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig","type":"Class"},{"name":"ToolOffsetRow","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetRow","type":"Class"},{"name":"ToolOffsetTable","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTable","type":"Class"},{"name":"ToolOffsetTableProxy","href":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolOffsetTableProxy","type":"Class"},{"name":"ToolingMcConfig","href":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicHref":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig.html","topicUid":"Hi.NcParsers.Dependencys.Generic.ToolingMcConfig","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Heidenhain","href":"Hi.NcParsers.Dependencys.Heidenhain.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainGotoIterationDependency","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainGotoIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainGotoIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainGotoIterationDependency","type":"Class"},{"name":"HeidenhainParameterTable","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable","type":"Class"},{"name":"HeidenhainParameterTableProxy","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTableProxy","type":"Class"},{"name":"HeidenhainQParameterTable","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTable","type":"Class"},{"name":"HeidenhainQParameterTableProxy","href":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTableProxy","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Siemens","href":"Hi.NcParsers.Dependencys.Siemens.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.html","topicUid":"Hi.NcParsers.Dependencys.Siemens","type":"Namespace","items":[{"name":"ISiemensToolOffsetConfig","href":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig","type":"Interface"},{"name":"SiemensFrameTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable","type":"Class"},{"name":"SiemensFrameTableProxy","href":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensFrameTableProxy","type":"Class"},{"name":"SiemensGotoIterationDependency","href":"Hi.NcParsers.Dependencys.Siemens.SiemensGotoIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensGotoIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensGotoIterationDependency","type":"Class"},{"name":"SiemensLoopIterationDependency","href":"Hi.NcParsers.Dependencys.Siemens.SiemensLoopIterationDependency.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensLoopIterationDependency.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensLoopIterationDependency","type":"Class"},{"name":"SiemensMachineDataTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable","type":"Class"},{"name":"SiemensMachineDataTableProxy","href":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTableProxy","type":"Class"},{"name":"SiemensRParameterTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTable","type":"Class"},{"name":"SiemensRParameterTableProxy","href":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTableProxy","type":"Class"},{"name":"SiemensToolEdgeOffset","href":"Hi.NcParsers.Dependencys.Siemens.SiemensToolEdgeOffset.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensToolEdgeOffset.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensToolEdgeOffset","type":"Class"},{"name":"SiemensToolOffsetTable","href":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTable.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTable.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTable","type":"Class"},{"name":"SiemensToolOffsetTableProxy","href":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTableProxy","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.Syntec","href":"Hi.NcParsers.Dependencys.Syntec.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.html","topicUid":"Hi.NcParsers.Dependencys.Syntec","type":"Namespace","items":[{"name":"SyntecParameterTable","href":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html","topicUid":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable","type":"Class"},{"name":"SyntecParameterTableProxy","href":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTableProxy.html","topicHref":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTableProxy.html","topicUid":"Hi.NcParsers.Dependencys.Syntec.SyntecParameterTableProxy","type":"Class"}]},{"name":"Hi.NcParsers.Dependencys.SystemWired","href":"Hi.NcParsers.Dependencys.SystemWired.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired","type":"Namespace","items":[{"name":"FileIndexCounterDependency","href":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.FileIndexCounterDependency","type":"Class"},{"name":"MachiningServiceDependency","href":"Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.MachiningServiceDependency","type":"Class"},{"name":"MappingAnchorDependency","href":"Hi.NcParsers.Dependencys.SystemWired.MappingAnchorDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.MappingAnchorDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.MappingAnchorDependency","type":"Class"},{"name":"NcKinematicsDependency","href":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.NcKinematicsDependency","type":"Class"},{"name":"NcLineSourceDependency","href":"Hi.NcParsers.Dependencys.SystemWired.NcLineSourceDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.NcLineSourceDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.NcLineSourceDependency","type":"Class"},{"name":"ProjectFolderDependency","href":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.ProjectFolderDependency","type":"Class"},{"name":"SegmenterDependency","href":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency","type":"Class"},{"name":"SentenceIndexCounterDependency","href":"Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.SentenceIndexCounterDependency","type":"Class"},{"name":"StepPropertyAccessDictionaryDependency","href":"Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency","type":"Class"},{"name":"SyntaxPieceLayerDependency","href":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.SyntaxPieceLayerDependency","type":"Class"},{"name":"ToolHouseDependency","href":"Hi.NcParsers.Dependencys.SystemWired.ToolHouseDependency.html","topicHref":"Hi.NcParsers.Dependencys.SystemWired.ToolHouseDependency.html","topicUid":"Hi.NcParsers.Dependencys.SystemWired.ToolHouseDependency","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs","href":"Hi.NcParsers.EvaluationSyntaxs.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs","type":"Namespace","items":[{"name":"CallStackUtil","href":"Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.CallStackUtil","type":"Class"},{"name":"LabelScanDirection","href":"Hi.NcParsers.EvaluationSyntaxs.LabelScanDirection.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.LabelScanDirection.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.LabelScanDirection","type":"Enum"},{"name":"LabelScanUtil","href":"Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil","type":"Class"},{"name":"MacroFileResolver","href":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver","type":"Class"},{"name":"MacroFileResolver.ResolvedFile","href":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.MacroFileResolver.ResolvedFile","type":"Struct"},{"name":"MacroInlineUtil","href":"Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.MacroInlineUtil","type":"Class"},{"name":"RetainedCommonVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.RetainedCommonVariableReadingSyntax","type":"Class"},{"name":"SubProgramCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax","type":"Class"},{"name":"SubProgramReturnSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax","type":"Class"},{"name":"VariableEvaluatorSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax","type":"Class"},{"name":"VolatileVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.VolatileVariableReadingSyntax","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Evaluation","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation","type":"Namespace","items":[{"name":"EvalResult","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.EvalResult","type":"Struct"},{"name":"IRuntimeVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IRuntimeVariableLookup","type":"Interface"},{"name":"IVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup","type":"Interface"},{"name":"LocalVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.LocalVariableLookup","type":"Class"},{"name":"NcBinaryExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryExpr","type":"Class"},{"name":"NcBinaryOp","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcBinaryOp","type":"Enum"},{"name":"NcExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpr","type":"Class"},{"name":"NcExpressionDialect","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialect.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialect.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialect","type":"Enum"},{"name":"NcExpressionDialectUtil","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialectUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialectUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionDialectUtil","type":"Class"},{"name":"NcExpressionEvaluator","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionEvaluator","type":"Class"},{"name":"NcExpressionParser","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcExpressionParser","type":"Class"},{"name":"NcFunctionExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcFunctionExpr","type":"Class"},{"name":"NcIndirectVariableExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcIndirectVariableExpr","type":"Class"},{"name":"NcLiteralExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcLiteralExpr","type":"Class"},{"name":"NcUnaryExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryExpr","type":"Class"},{"name":"NcUnaryOp","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcUnaryOp","type":"Enum"},{"name":"NcVariableExpr","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.NcVariableExpr","type":"Class"},{"name":"VolatileVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Evaluation.VolatileVariableLookup","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Fanuc","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc","type":"Namespace","items":[{"name":"FanucConditionReader","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucConditionReader","type":"Class"},{"name":"FanucGotoSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucGotoSyntax","type":"Class"},{"name":"FanucIfThenSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucIfThenSyntax","type":"Class"},{"name":"FanucLocalVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucLocalVariableReadingSyntax","type":"Class"},{"name":"FanucMacroArgumentMap","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroArgumentMap","type":"Class"},{"name":"FanucMacroCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucMacroCallSyntax","type":"Class"},{"name":"FanucModalMacroSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax","type":"Class"},{"name":"FanucModalMacroSyntax.SyntaxPhase","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucModalMacroSyntax.SyntaxPhase","type":"Enum"},{"name":"FanucSystemControlVariableSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucSystemControlVariableSyntax","type":"Class"},{"name":"FanucWhileDoSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Fanuc.FanucWhileDoSyntax","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainExpressionParser","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainExpressionParser.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainExpressionParser.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainExpressionParser","type":"Class"},{"name":"HeidenhainGotoSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainGotoSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainGotoSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainGotoSyntax","type":"Class"},{"name":"HeidenhainQParameterReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainQParameterReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainQParameterReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainQParameterReadingSyntax","type":"Class"},{"name":"HeidenhainSubProgramCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramCallSyntax","type":"Class"},{"name":"HeidenhainSubProgramReturnSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramReturnSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramReturnSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainSubProgramReturnSyntax","type":"Class"},{"name":"HeidenhainVolatileQLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainVolatileQLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainVolatileQLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainVolatileQLookup","type":"Class"}]},{"name":"Hi.NcParsers.EvaluationSyntaxs.Siemens","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens","type":"Namespace","items":[{"name":"SiemensAcIcSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensAcIcSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensAcIcSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensAcIcSyntax","type":"Class"},{"name":"SiemensExpressionParser","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensExpressionParser.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensExpressionParser.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensExpressionParser","type":"Class"},{"name":"SiemensGotoSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensGotoSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensGotoSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensGotoSyntax","type":"Class"},{"name":"SiemensIfSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensIfSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensIfSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensIfSyntax","type":"Class"},{"name":"SiemensInlineContextUtil","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensInlineContextUtil.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensInlineContextUtil.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensInlineContextUtil","type":"Class"},{"name":"SiemensLoopSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensLoopSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensLoopSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensLoopSyntax","type":"Class"},{"name":"SiemensNamedVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableLookup","type":"Class"},{"name":"SiemensNamedVariableReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensNamedVariableReadingSyntax","type":"Class"},{"name":"SiemensRParameterReadingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRParameterReadingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRParameterReadingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRParameterReadingSyntax","type":"Class"},{"name":"SiemensRepeatSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRepeatSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRepeatSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRepeatSyntax","type":"Class"},{"name":"SiemensSubProgramCallSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramCallSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramCallSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramCallSyntax","type":"Class"},{"name":"SiemensSubProgramReturnSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramReturnSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramReturnSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSubProgramReturnSyntax","type":"Class"},{"name":"SiemensSystemVariableSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSystemVariableSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSystemVariableSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensSystemVariableSyntax","type":"Class"},{"name":"SiemensUifrVariableLookup","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrVariableLookup.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrVariableLookup.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrVariableLookup","type":"Class"},{"name":"SiemensUifrWritingSyntax","href":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrWritingSyntax.html","topicHref":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrWritingSyntax.html","topicUid":"Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensUifrWritingSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Initializers","href":"Hi.NcParsers.Initializers.html","topicHref":"Hi.NcParsers.Initializers.html","topicUid":"Hi.NcParsers.Initializers","type":"Namespace","items":[{"name":"HomeMcInitializer","href":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicHref":"Hi.NcParsers.Initializers.HomeMcInitializer.html","topicUid":"Hi.NcParsers.Initializers.HomeMcInitializer","type":"Class"},{"name":"INcInitializer","href":"Hi.NcParsers.Initializers.INcInitializer.html","topicHref":"Hi.NcParsers.Initializers.INcInitializer.html","topicUid":"Hi.NcParsers.Initializers.INcInitializer","type":"Interface"},{"name":"StaticInitializer","href":"Hi.NcParsers.Initializers.StaticInitializer.html","topicHref":"Hi.NcParsers.Initializers.StaticInitializer.html","topicUid":"Hi.NcParsers.Initializers.StaticInitializer","type":"Class"}]},{"name":"Hi.NcParsers.InspectionSyntaxs","href":"Hi.NcParsers.InspectionSyntaxs.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.html","topicUid":"Hi.NcParsers.InspectionSyntaxs","type":"Namespace","items":[{"name":"CleanupSyntax","href":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.CleanupSyntax","type":"Class"},{"name":"ProgramXyzBackfillSyntax","href":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.ProgramXyzBackfillSyntax","type":"Class"},{"name":"SnapshotSyntax","href":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.SnapshotSyntax","type":"Class"},{"name":"UnconsumedCheckSyntax","href":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicHref":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax.html","topicUid":"Hi.NcParsers.InspectionSyntaxs.UnconsumedCheckSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Keywords","href":"Hi.NcParsers.Keywords.html","topicHref":"Hi.NcParsers.Keywords.html","topicUid":"Hi.NcParsers.Keywords","type":"Namespace","items":[{"name":"BlockSkip","href":"Hi.NcParsers.Keywords.BlockSkip.html","topicHref":"Hi.NcParsers.Keywords.BlockSkip.html","topicUid":"Hi.NcParsers.Keywords.BlockSkip","type":"Class"},{"name":"CallFrame","href":"Hi.NcParsers.Keywords.CallFrame.html","topicHref":"Hi.NcParsers.Keywords.CallFrame.html","topicUid":"Hi.NcParsers.Keywords.CallFrame","type":"Class"},{"name":"CallStack","href":"Hi.NcParsers.Keywords.CallStack.html","topicHref":"Hi.NcParsers.Keywords.CallStack.html","topicUid":"Hi.NcParsers.Keywords.CallStack","type":"Class"},{"name":"CannedCycle","href":"Hi.NcParsers.Keywords.CannedCycle.html","topicHref":"Hi.NcParsers.Keywords.CannedCycle.html","topicUid":"Hi.NcParsers.Keywords.CannedCycle","type":"Class"},{"name":"Comment","href":"Hi.NcParsers.Keywords.Comment.html","topicHref":"Hi.NcParsers.Keywords.Comment.html","topicUid":"Hi.NcParsers.Keywords.Comment","type":"Class"},{"name":"CompoundMotion","href":"Hi.NcParsers.Keywords.CompoundMotion.html","topicHref":"Hi.NcParsers.Keywords.CompoundMotion.html","topicUid":"Hi.NcParsers.Keywords.CompoundMotion","type":"Class"},{"name":"Coolant","href":"Hi.NcParsers.Keywords.Coolant.html","topicHref":"Hi.NcParsers.Keywords.Coolant.html","topicUid":"Hi.NcParsers.Keywords.Coolant","type":"Class"},{"name":"CoordinateOffset","href":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.CoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.CoordinateOffset","type":"Class"},{"name":"CsScript","href":"Hi.NcParsers.Keywords.CsScript.html","topicHref":"Hi.NcParsers.Keywords.CsScript.html","topicUid":"Hi.NcParsers.Keywords.CsScript","type":"Class"},{"name":"Dwell","href":"Hi.NcParsers.Keywords.Dwell.html","topicHref":"Hi.NcParsers.Keywords.Dwell.html","topicUid":"Hi.NcParsers.Keywords.Dwell","type":"Class"},{"name":"FanucGoto","href":"Hi.NcParsers.Keywords.FanucGoto.html","topicHref":"Hi.NcParsers.Keywords.FanucGoto.html","topicUid":"Hi.NcParsers.Keywords.FanucGoto","type":"Class"},{"name":"FanucHpcc","href":"Hi.NcParsers.Keywords.FanucHpcc.html","topicHref":"Hi.NcParsers.Keywords.FanucHpcc.html","topicUid":"Hi.NcParsers.Keywords.FanucHpcc","type":"Class"},{"name":"FanucIfThen","href":"Hi.NcParsers.Keywords.FanucIfThen.html","topicHref":"Hi.NcParsers.Keywords.FanucIfThen.html","topicUid":"Hi.NcParsers.Keywords.FanucIfThen","type":"Class"},{"name":"FanucMacroCall","href":"Hi.NcParsers.Keywords.FanucMacroCall.html","topicHref":"Hi.NcParsers.Keywords.FanucMacroCall.html","topicUid":"Hi.NcParsers.Keywords.FanucMacroCall","type":"Class"},{"name":"FanucModalMacro","href":"Hi.NcParsers.Keywords.FanucModalMacro.html","topicHref":"Hi.NcParsers.Keywords.FanucModalMacro.html","topicUid":"Hi.NcParsers.Keywords.FanucModalMacro","type":"Class"},{"name":"FanucPathSmoothing","href":"Hi.NcParsers.Keywords.FanucPathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.FanucPathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.FanucPathSmoothing","type":"Class"},{"name":"FanucProgramNumber","href":"Hi.NcParsers.Keywords.FanucProgramNumber.html","topicHref":"Hi.NcParsers.Keywords.FanucProgramNumber.html","topicUid":"Hi.NcParsers.Keywords.FanucProgramNumber","type":"Class"},{"name":"FanucWhileDo","href":"Hi.NcParsers.Keywords.FanucWhileDo.html","topicHref":"Hi.NcParsers.Keywords.FanucWhileDo.html","topicUid":"Hi.NcParsers.Keywords.FanucWhileDo","type":"Class"},{"name":"Feedrate","href":"Hi.NcParsers.Keywords.Feedrate.html","topicHref":"Hi.NcParsers.Keywords.Feedrate.html","topicUid":"Hi.NcParsers.Keywords.Feedrate","type":"Class"},{"name":"IArcMotionDef","href":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicHref":"Hi.NcParsers.Keywords.IArcMotionDef.html","topicUid":"Hi.NcParsers.Keywords.IArcMotionDef","type":"Interface"},{"name":"ICannedCycleDef","href":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicHref":"Hi.NcParsers.Keywords.ICannedCycleDef.html","topicUid":"Hi.NcParsers.Keywords.ICannedCycleDef","type":"Interface"},{"name":"ICompoundMotionDef","href":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicHref":"Hi.NcParsers.Keywords.ICompoundMotionDef.html","topicUid":"Hi.NcParsers.Keywords.ICompoundMotionDef","type":"Interface"},{"name":"ICoolantDef","href":"Hi.NcParsers.Keywords.ICoolantDef.html","topicHref":"Hi.NcParsers.Keywords.ICoolantDef.html","topicUid":"Hi.NcParsers.Keywords.ICoolantDef","type":"Interface"},{"name":"IDwellDef","href":"Hi.NcParsers.Keywords.IDwellDef.html","topicHref":"Hi.NcParsers.Keywords.IDwellDef.html","topicUid":"Hi.NcParsers.Keywords.IDwellDef","type":"Interface"},{"name":"IFanucHpccDef","href":"Hi.NcParsers.Keywords.IFanucHpccDef.html","topicHref":"Hi.NcParsers.Keywords.IFanucHpccDef.html","topicUid":"Hi.NcParsers.Keywords.IFanucHpccDef","type":"Interface"},{"name":"IFanucPathSmoothingDef","href":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IFanucPathSmoothingDef","type":"Interface"},{"name":"IFeedrateDef","href":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicHref":"Hi.NcParsers.Keywords.IFeedrateDef.html","topicUid":"Hi.NcParsers.Keywords.IFeedrateDef","type":"Interface"},{"name":"IFlagsDef","href":"Hi.NcParsers.Keywords.IFlagsDef.html","topicHref":"Hi.NcParsers.Keywords.IFlagsDef.html","topicUid":"Hi.NcParsers.Keywords.IFlagsDef","type":"Interface"},{"name":"IMachineCoordinateStateDef","href":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMachineCoordinateStateDef","type":"Interface"},{"name":"IMotionEventDef","href":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionEventDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionEventDef","type":"Interface"},{"name":"IMotionStateDef","href":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicHref":"Hi.NcParsers.Keywords.IMotionStateDef.html","topicUid":"Hi.NcParsers.Keywords.IMotionStateDef","type":"Interface"},{"name":"IParsingDef","href":"Hi.NcParsers.Keywords.IParsingDef.html","topicHref":"Hi.NcParsers.Keywords.IParsingDef.html","topicUid":"Hi.NcParsers.Keywords.IParsingDef","type":"Interface"},{"name":"IPathSmoothingDef","href":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.IPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.IPathSmoothingDef","type":"Interface"},{"name":"IPlaneSelectDef","href":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicHref":"Hi.NcParsers.Keywords.IPlaneSelectDef.html","topicUid":"Hi.NcParsers.Keywords.IPlaneSelectDef","type":"Interface"},{"name":"IPolarInterpolationDef","href":"Hi.NcParsers.Keywords.IPolarInterpolationDef.html","topicHref":"Hi.NcParsers.Keywords.IPolarInterpolationDef.html","topicUid":"Hi.NcParsers.Keywords.IPolarInterpolationDef","type":"Interface"},{"name":"IPositioningDef","href":"Hi.NcParsers.Keywords.IPositioningDef.html","topicHref":"Hi.NcParsers.Keywords.IPositioningDef.html","topicUid":"Hi.NcParsers.Keywords.IPositioningDef","type":"Interface"},{"name":"IProgramEndDef","href":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramEndDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramEndDef","type":"Interface"},{"name":"IProgramStopDef","href":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramStopDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramStopDef","type":"Interface"},{"name":"IProgramXyzDef","href":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicHref":"Hi.NcParsers.Keywords.IProgramXyzDef.html","topicUid":"Hi.NcParsers.Keywords.IProgramXyzDef","type":"Interface"},{"name":"IRadiusCompensationDef","href":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IRadiusCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IRadiusCompensationDef","type":"Interface"},{"name":"ISpindleControlDef","href":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleControlDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleControlDef","type":"Interface"},{"name":"ISpindleOrientationDef","href":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleOrientationDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleOrientationDef","type":"Interface"},{"name":"ISpindleSpeedDef","href":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicHref":"Hi.NcParsers.Keywords.ISpindleSpeedDef.html","topicUid":"Hi.NcParsers.Keywords.ISpindleSpeedDef","type":"Interface"},{"name":"ITiltTransformDef","href":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicHref":"Hi.NcParsers.Keywords.ITiltTransformDef.html","topicUid":"Hi.NcParsers.Keywords.ITiltTransformDef","type":"Interface"},{"name":"IToolHeightCompensationDef","href":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicHref":"Hi.NcParsers.Keywords.IToolHeightCompensationDef.html","topicUid":"Hi.NcParsers.Keywords.IToolHeightCompensationDef","type":"Interface"},{"name":"ITransformationDef","href":"Hi.NcParsers.Keywords.ITransformationDef.html","topicHref":"Hi.NcParsers.Keywords.ITransformationDef.html","topicUid":"Hi.NcParsers.Keywords.ITransformationDef","type":"Interface"},{"name":"IUnitDef","href":"Hi.NcParsers.Keywords.IUnitDef.html","topicHref":"Hi.NcParsers.Keywords.IUnitDef.html","topicUid":"Hi.NcParsers.Keywords.IUnitDef","type":"Interface"},{"name":"IUnparsedTextDef","href":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicHref":"Hi.NcParsers.Keywords.IUnparsedTextDef.html","topicUid":"Hi.NcParsers.Keywords.IUnparsedTextDef","type":"Interface"},{"name":"IndexNote","href":"Hi.NcParsers.Keywords.IndexNote.html","topicHref":"Hi.NcParsers.Keywords.IndexNote.html","topicUid":"Hi.NcParsers.Keywords.IndexNote","type":"Class"},{"name":"IsoLocalCoordinateOffset","href":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicHref":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html","topicUid":"Hi.NcParsers.Keywords.IsoLocalCoordinateOffset","type":"Class"},{"name":"MachineCoordinateState","href":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicHref":"Hi.NcParsers.Keywords.MachineCoordinateState.html","topicUid":"Hi.NcParsers.Keywords.MachineCoordinateState","type":"Class"},{"name":"MacroFrame","href":"Hi.NcParsers.Keywords.MacroFrame.html","topicHref":"Hi.NcParsers.Keywords.MacroFrame.html","topicUid":"Hi.NcParsers.Keywords.MacroFrame","type":"Class"},{"name":"MotionEvent","href":"Hi.NcParsers.Keywords.MotionEvent.html","topicHref":"Hi.NcParsers.Keywords.MotionEvent.html","topicUid":"Hi.NcParsers.Keywords.MotionEvent","type":"Class"},{"name":"MotionState","href":"Hi.NcParsers.Keywords.MotionState.html","topicHref":"Hi.NcParsers.Keywords.MotionState.html","topicUid":"Hi.NcParsers.Keywords.MotionState","type":"Class"},{"name":"PathSmoothing","href":"Hi.NcParsers.Keywords.PathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.PathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.PathSmoothing","type":"Class"},{"name":"PlaneSelect","href":"Hi.NcParsers.Keywords.PlaneSelect.html","topicHref":"Hi.NcParsers.Keywords.PlaneSelect.html","topicUid":"Hi.NcParsers.Keywords.PlaneSelect","type":"Class"},{"name":"PolarInterpolation","href":"Hi.NcParsers.Keywords.PolarInterpolation.html","topicHref":"Hi.NcParsers.Keywords.PolarInterpolation.html","topicUid":"Hi.NcParsers.Keywords.PolarInterpolation","type":"Class"},{"name":"Positioning","href":"Hi.NcParsers.Keywords.Positioning.html","topicHref":"Hi.NcParsers.Keywords.Positioning.html","topicUid":"Hi.NcParsers.Keywords.Positioning","type":"Class"},{"name":"PositioningOverride","href":"Hi.NcParsers.Keywords.PositioningOverride.html","topicHref":"Hi.NcParsers.Keywords.PositioningOverride.html","topicUid":"Hi.NcParsers.Keywords.PositioningOverride","type":"Class"},{"name":"ProgramEnd","href":"Hi.NcParsers.Keywords.ProgramEnd.html","topicHref":"Hi.NcParsers.Keywords.ProgramEnd.html","topicUid":"Hi.NcParsers.Keywords.ProgramEnd","type":"Class"},{"name":"ProgramStop","href":"Hi.NcParsers.Keywords.ProgramStop.html","topicHref":"Hi.NcParsers.Keywords.ProgramStop.html","topicUid":"Hi.NcParsers.Keywords.ProgramStop","type":"Class"},{"name":"RadiusCompensation","href":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicHref":"Hi.NcParsers.Keywords.RadiusCompensation.html","topicUid":"Hi.NcParsers.Keywords.RadiusCompensation","type":"Class"},{"name":"RotaryWords","href":"Hi.NcParsers.Keywords.RotaryWords.html","topicHref":"Hi.NcParsers.Keywords.RotaryWords.html","topicUid":"Hi.NcParsers.Keywords.RotaryWords","type":"Class"},{"name":"SpindleControl","href":"Hi.NcParsers.Keywords.SpindleControl.html","topicHref":"Hi.NcParsers.Keywords.SpindleControl.html","topicUid":"Hi.NcParsers.Keywords.SpindleControl","type":"Class"},{"name":"SpindleOrientation","href":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicHref":"Hi.NcParsers.Keywords.SpindleOrientation.html","topicUid":"Hi.NcParsers.Keywords.SpindleOrientation","type":"Class"},{"name":"SpindleSpeed","href":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicHref":"Hi.NcParsers.Keywords.SpindleSpeed.html","topicUid":"Hi.NcParsers.Keywords.SpindleSpeed","type":"Class"},{"name":"SubProgramCall","href":"Hi.NcParsers.Keywords.SubProgramCall.html","topicHref":"Hi.NcParsers.Keywords.SubProgramCall.html","topicUid":"Hi.NcParsers.Keywords.SubProgramCall","type":"Class"},{"name":"SubProgramReturn","href":"Hi.NcParsers.Keywords.SubProgramReturn.html","topicHref":"Hi.NcParsers.Keywords.SubProgramReturn.html","topicUid":"Hi.NcParsers.Keywords.SubProgramReturn","type":"Class"},{"name":"TapeBoundary","href":"Hi.NcParsers.Keywords.TapeBoundary.html","topicHref":"Hi.NcParsers.Keywords.TapeBoundary.html","topicUid":"Hi.NcParsers.Keywords.TapeBoundary","type":"Class"},{"name":"TiltTransform","href":"Hi.NcParsers.Keywords.TiltTransform.html","topicHref":"Hi.NcParsers.Keywords.TiltTransform.html","topicUid":"Hi.NcParsers.Keywords.TiltTransform","type":"Class"},{"name":"ToolHeightCompensation","href":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicHref":"Hi.NcParsers.Keywords.ToolHeightCompensation.html","topicUid":"Hi.NcParsers.Keywords.ToolHeightCompensation","type":"Class"},{"name":"Unit","href":"Hi.NcParsers.Keywords.Unit.html","topicHref":"Hi.NcParsers.Keywords.Unit.html","topicUid":"Hi.NcParsers.Keywords.Unit","type":"Class"},{"name":"Vars","href":"Hi.NcParsers.Keywords.Vars.html","topicHref":"Hi.NcParsers.Keywords.Vars.html","topicUid":"Hi.NcParsers.Keywords.Vars","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Fanuc","href":"Hi.NcParsers.Keywords.Fanuc.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.html","topicUid":"Hi.NcParsers.Keywords.Fanuc","type":"Namespace","items":[{"name":"FanucKeywords","href":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicHref":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords.html","topicUid":"Hi.NcParsers.Keywords.Fanuc.FanucKeywords","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Generic","href":"Hi.NcParsers.Keywords.Generic.html","topicHref":"Hi.NcParsers.Keywords.Generic.html","topicUid":"Hi.NcParsers.Keywords.Generic","type":"Namespace","items":[{"name":"ArcCenterSource","href":"Hi.NcParsers.Keywords.Generic.ArcCenterSource.html","topicHref":"Hi.NcParsers.Keywords.Generic.ArcCenterSource.html","topicUid":"Hi.NcParsers.Keywords.Generic.ArcCenterSource","type":"Class"},{"name":"IsoKeywords","href":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicHref":"Hi.NcParsers.Keywords.Generic.IsoKeywords.html","topicUid":"Hi.NcParsers.Keywords.Generic.IsoKeywords","type":"Class"},{"name":"MotionForm","href":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicHref":"Hi.NcParsers.Keywords.Generic.MotionForm.html","topicUid":"Hi.NcParsers.Keywords.Generic.MotionForm","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Heidenhain","href":"Hi.NcParsers.Keywords.Heidenhain.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainCall","href":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCall.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCall.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCall","type":"Class"},{"name":"HeidenhainCyclCall","href":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCall.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCall.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCall","type":"Class"},{"name":"HeidenhainCyclCallPos","href":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCallPos.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCallPos.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainCyclCallPos","type":"Class"},{"name":"HeidenhainGoto","href":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainGoto.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainGoto.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainGoto","type":"Class"},{"name":"HeidenhainLbl","href":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainLbl.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainLbl.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.HeidenhainLbl","type":"Class"},{"name":"ICyclDef","href":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.ICyclDef","type":"Interface"},{"name":"MachiningCycleDef","href":"Hi.NcParsers.Keywords.Heidenhain.MachiningCycleDef.html","topicHref":"Hi.NcParsers.Keywords.Heidenhain.MachiningCycleDef.html","topicUid":"Hi.NcParsers.Keywords.Heidenhain.MachiningCycleDef","type":"Class"}]},{"name":"Hi.NcParsers.Keywords.Siemens","href":"Hi.NcParsers.Keywords.Siemens.html","topicHref":"Hi.NcParsers.Keywords.Siemens.html","topicUid":"Hi.NcParsers.Keywords.Siemens","type":"Namespace","items":[{"name":"ISiemensPathSmoothingDef","href":"Hi.NcParsers.Keywords.Siemens.ISiemensPathSmoothingDef.html","topicHref":"Hi.NcParsers.Keywords.Siemens.ISiemensPathSmoothingDef.html","topicUid":"Hi.NcParsers.Keywords.Siemens.ISiemensPathSmoothingDef","type":"Interface"},{"name":"Msg","href":"Hi.NcParsers.Keywords.Siemens.Msg.html","topicHref":"Hi.NcParsers.Keywords.Siemens.Msg.html","topicUid":"Hi.NcParsers.Keywords.Siemens.Msg","type":"Class"},{"name":"SiemensCall","href":"Hi.NcParsers.Keywords.Siemens.SiemensCall.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensCall.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensCall","type":"Class"},{"name":"SiemensFor","href":"Hi.NcParsers.Keywords.Siemens.SiemensFor.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensFor.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensFor","type":"Class"},{"name":"SiemensGoto","href":"Hi.NcParsers.Keywords.Siemens.SiemensGoto.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensGoto.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensGoto","type":"Class"},{"name":"SiemensIf","href":"Hi.NcParsers.Keywords.Siemens.SiemensIf.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensIf.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensIf","type":"Class"},{"name":"SiemensKeywords","href":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensKeywords","type":"Class"},{"name":"SiemensLabel","href":"Hi.NcParsers.Keywords.Siemens.SiemensLabel.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensLabel.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensLabel","type":"Class"},{"name":"SiemensLoop","href":"Hi.NcParsers.Keywords.Siemens.SiemensLoop.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensLoop.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensLoop","type":"Class"},{"name":"SiemensLoopFrame","href":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrame.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrame.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrame","type":"Class"},{"name":"SiemensLoopFrames","href":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrames.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrames.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensLoopFrames","type":"Class"},{"name":"SiemensPathSmoothing","href":"Hi.NcParsers.Keywords.Siemens.SiemensPathSmoothing.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensPathSmoothing.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensPathSmoothing","type":"Class"},{"name":"SiemensProc","href":"Hi.NcParsers.Keywords.Siemens.SiemensProc.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensProc.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensProc","type":"Class"},{"name":"SiemensRepeat","href":"Hi.NcParsers.Keywords.Siemens.SiemensRepeat.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensRepeat.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensRepeat","type":"Class"},{"name":"SiemensRepeatUntil","href":"Hi.NcParsers.Keywords.Siemens.SiemensRepeatUntil.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensRepeatUntil.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensRepeatUntil","type":"Class"},{"name":"SiemensWhile","href":"Hi.NcParsers.Keywords.Siemens.SiemensWhile.html","topicHref":"Hi.NcParsers.Keywords.Siemens.SiemensWhile.html","topicUid":"Hi.NcParsers.Keywords.Siemens.SiemensWhile","type":"Class"},{"name":"Stopre","href":"Hi.NcParsers.Keywords.Siemens.Stopre.html","topicHref":"Hi.NcParsers.Keywords.Siemens.Stopre.html","topicUid":"Hi.NcParsers.Keywords.Siemens.Stopre","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs","href":"Hi.NcParsers.LogicSyntaxs.html","topicHref":"Hi.NcParsers.LogicSyntaxs.html","topicUid":"Hi.NcParsers.LogicSyntaxs","type":"Namespace","items":[{"name":"BackBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BackBoringSyntax","type":"Class"},{"name":"BareG28Behavior","href":"Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BareG28Behavior.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BareG28Behavior","type":"Enum"},{"name":"BoringCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.BoringCycleSyntax","type":"Class"},{"name":"CannedCycleResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax","type":"Class"},{"name":"CircularMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax","type":"Class"},{"name":"CodedPositionUtil","href":"Hi.NcParsers.LogicSyntaxs.CodedPositionUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CodedPositionUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CodedPositionUtil","type":"Class"},{"name":"CoolantSyntax","href":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoolantSyntax","type":"Class"},{"name":"CoordinateOffsetUtil","href":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.CoordinateOffsetUtil","type":"Class"},{"name":"DrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax","type":"Class"},{"name":"DwellSyntax","href":"Hi.NcParsers.LogicSyntaxs.DwellSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.DwellSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.DwellSyntax","type":"Class"},{"name":"FanucPathSmoothingSyntax","href":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax","type":"Class"},{"name":"FeedrateSyntax","href":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FeedrateSyntax","type":"Class"},{"name":"FineBoringSyntax","href":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.FineBoringSyntax","type":"Class"},{"name":"G43p4RtcpSyntax","href":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax","type":"Class"},{"name":"G53p1RotaryPositionSyntax","href":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax","type":"Class"},{"name":"HighSpeedPeckCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.HighSpeedPeckCycleSyntax","type":"Class"},{"name":"IncrementalResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax","type":"Class"},{"name":"IsoCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax","type":"Class"},{"name":"IsoG68RotationSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68RotationSyntax","type":"Class"},{"name":"IsoG68p2TiltSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax","type":"Class"},{"name":"IsoLocalCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax","type":"Class"},{"name":"LinearMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax","type":"Class"},{"name":"MCodeExpansionSyntax","href":"Hi.NcParsers.LogicSyntaxs.MCodeExpansionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.MCodeExpansionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.MCodeExpansionSyntax","type":"Class"},{"name":"MachineCoordSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax","type":"Class"},{"name":"McAbcCyclicPathSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax","type":"Class"},{"name":"McAbcSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcSyntax","type":"Class"},{"name":"McAbcXyzFallbackSyntax","href":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax","type":"Class"},{"name":"McXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.McXyzSyntax","type":"Class"},{"name":"OrientationVectorResolveSyntax","href":"Hi.NcParsers.LogicSyntaxs.OrientationVectorResolveSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.OrientationVectorResolveSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.OrientationVectorResolveSyntax","type":"Class"},{"name":"PeckDrillingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax","type":"Class"},{"name":"PivotTransformUtil","href":"Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PivotTransformUtil","type":"Class"},{"name":"PivotTransformationSyntax","href":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax","type":"Class"},{"name":"PlaneSelectSyntax","href":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax","type":"Class"},{"name":"PolarGCodeCheckSyntax","href":"Hi.NcParsers.LogicSyntaxs.PolarGCodeCheckSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PolarGCodeCheckSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PolarGCodeCheckSyntax","type":"Class"},{"name":"PolarInterpolationSyntax","href":"Hi.NcParsers.LogicSyntaxs.PolarInterpolationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PolarInterpolationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PolarInterpolationSyntax","type":"Class"},{"name":"PositioningSyntax","href":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.PositioningSyntax","type":"Class"},{"name":"ProgramEndCleanSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndCleanSyntax","type":"Class"},{"name":"ProgramEndSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax","type":"Class"},{"name":"ProgramRxczSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramRxczSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramRxczSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramRxczSyntax","type":"Class"},{"name":"ProgramStopSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax","type":"Class"},{"name":"ProgramXyzSyntax","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax","type":"Class"},{"name":"ProgramXyzUtil","href":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil","type":"Class"},{"name":"ReferenceReturnSyntax","href":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax","type":"Class"},{"name":"RotaryAxisUtil","href":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.RotaryAxisUtil","type":"Class"},{"name":"SpindleSpeedSyntax","href":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax","type":"Class"},{"name":"TappingCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TappingCycleSyntax","type":"Class"},{"name":"TiltTransformUtil","href":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicHref":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html","topicUid":"Hi.NcParsers.LogicSyntaxs.TiltTransformUtil","type":"Class"},{"name":"ToolChangeMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolChangeMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolChangeMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolChangeMotionSyntax","type":"Class"},{"name":"ToolChangeSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax","type":"Class"},{"name":"ToolHeightOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax","type":"Class"},{"name":"UnitModeSyntax","href":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.UnitModeSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Heidenhain","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainCannedCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCannedCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCannedCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCannedCycleSyntax","type":"Class"},{"name":"HeidenhainCircleCenterSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircleCenterSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircleCenterSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircleCenterSyntax","type":"Class"},{"name":"HeidenhainCircularMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircularMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircularMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircularMotionSyntax","type":"Class"},{"name":"HeidenhainCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCoordinateOffsetSyntax","type":"Class"},{"name":"HeidenhainCyclePrePositionSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCyclePrePositionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCyclePrePositionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCyclePrePositionSyntax","type":"Class"},{"name":"HeidenhainCycleRetractSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCycleRetractSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCycleRetractSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCycleRetractSyntax","type":"Class"},{"name":"HeidenhainLnOrientationSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainLnOrientationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainLnOrientationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainLnOrientationSyntax","type":"Class"},{"name":"HeidenhainMFunctionSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMFunctionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMFunctionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMFunctionSyntax","type":"Class"},{"name":"HeidenhainMirrorTransformSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMirrorTransformSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMirrorTransformSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMirrorTransformSyntax","type":"Class"},{"name":"HeidenhainMotionModeSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMotionModeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMotionModeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainMotionModeSyntax","type":"Class"},{"name":"HeidenhainPathSmoothingSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPathSmoothingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPathSmoothingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPathSmoothingSyntax","type":"Class"},{"name":"HeidenhainPivotTransformationSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPivotTransformationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPivotTransformationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPivotTransformationSyntax","type":"Class"},{"name":"HeidenhainPlaneTiltSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPlaneTiltSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPlaneTiltSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainPlaneTiltSyntax","type":"Class"},{"name":"HeidenhainProgramHeaderSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainProgramHeaderSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainProgramHeaderSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainProgramHeaderSyntax","type":"Class"},{"name":"HeidenhainRadiusCompSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRadiusCompSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRadiusCompSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRadiusCompSyntax","type":"Class"},{"name":"HeidenhainRtcpSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax","type":"Class"},{"name":"HeidenhainStockDeclarationSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainStockDeclarationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainStockDeclarationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainStockDeclarationSyntax","type":"Class"},{"name":"HeidenhainToolChangeSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolChangeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolChangeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolChangeSyntax","type":"Class"},{"name":"HeidenhainToolOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainToolOffsetSyntax","type":"Class"}]},{"name":"Hi.NcParsers.LogicSyntaxs.Siemens","href":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens","type":"Namespace","items":[{"name":"SiemensCircularMotionSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCircularMotionSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCircularMotionSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCircularMotionSyntax","type":"Class"},{"name":"SiemensCoordinateOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCoordinateOffsetSyntax","type":"Class"},{"name":"SiemensCutCompModeSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCutCompModeSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCutCompModeSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCutCompModeSyntax","type":"Class"},{"name":"SiemensCycle800TiltSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCycle800TiltSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCycle800TiltSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCycle800TiltSyntax","type":"Class"},{"name":"SiemensFixedPointReturnSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensFixedPointReturnSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensFixedPointReturnSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensFixedPointReturnSyntax","type":"Class"},{"name":"SiemensModalCycleSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensModalCycleSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensModalCycleSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensModalCycleSyntax","type":"Class"},{"name":"SiemensPathSmoothingSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPathSmoothingSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPathSmoothingSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPathSmoothingSyntax","type":"Class"},{"name":"SiemensPivotTransformationSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPivotTransformationSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPivotTransformationSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensPivotTransformationSyntax","type":"Class"},{"name":"SiemensProgrammableFrameSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensProgrammableFrameSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensProgrammableFrameSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensProgrammableFrameSyntax","type":"Class"},{"name":"SiemensStopreSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensStopreSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensStopreSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensStopreSyntax","type":"Class"},{"name":"SiemensToolOffsetSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensToolOffsetSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensToolOffsetSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensToolOffsetSyntax","type":"Class"},{"name":"SiemensTraoriSyntax","href":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensTraoriSyntax.html","topicHref":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensTraoriSyntax.html","topicUid":"Hi.NcParsers.LogicSyntaxs.Siemens.SiemensTraoriSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs","type":"Namespace","items":[{"name":"BlockSkipSyntax","href":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax","type":"Class"},{"name":"CsScriptSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CsScriptSyntax","type":"Class"},{"name":"FlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FlagSyntax","type":"Class"},{"name":"FloatTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.FloatTagValueSyntax","type":"Class"},{"name":"HeadIndexSyntax","href":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.HeadIndexSyntax","type":"Class"},{"name":"IntegerTagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.IntegerTagValueSyntax","type":"Class"},{"name":"NamedVarAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NamedVarAssignmentSyntax","type":"Class"},{"name":"NumberedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.NumberedFlagSyntax","type":"Class"},{"name":"ParameterizedFlagSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ParameterizedFlagSyntax","type":"Class"},{"name":"ShrinkIfNoDecimalPointSyntax","href":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.ShrinkIfNoDecimalPointSyntax","type":"Class"},{"name":"TagAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax","type":"Class"},{"name":"TagValueSyntax","href":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TagValueSyntax","type":"Class"},{"name":"TapeBoundarySyntax","href":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.TapeBoundarySyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs","type":"Namespace","items":[{"name":"QuoteCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.QuoteCommentSyntax","type":"Class"},{"name":"TailCommentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.CommentSyntaxs.TailCommentSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Fanuc","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc","type":"Namespace","items":[{"name":"FanucGotoParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucGotoParsingSyntax","type":"Class"},{"name":"FanucIfThenParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucIfThenParsingSyntax","type":"Class"},{"name":"FanucProgramNumberSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucProgramNumberSyntax","type":"Class"},{"name":"FanucWhileDoParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Fanuc.FanucWhileDoParsingSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain","type":"Namespace","items":[{"name":"HeidenhainBlkFormSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainBlkFormSyntax","type":"Class"},{"name":"HeidenhainCSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCSyntax","type":"Class"},{"name":"HeidenhainCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCallSyntax","type":"Class"},{"name":"HeidenhainCcSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCcSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCcSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCcSyntax","type":"Class"},{"name":"HeidenhainCyclCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclCallSyntax","type":"Class"},{"name":"HeidenhainCyclDefSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCyclDefSyntax","type":"Class"},{"name":"HeidenhainFnAssignmentSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax","type":"Class"},{"name":"HeidenhainFnFeatureSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnFeatureSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnFeatureSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnFeatureSyntax","type":"Class"},{"name":"HeidenhainGotoParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainGotoParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainGotoParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainGotoParsingSyntax","type":"Class"},{"name":"HeidenhainIncrementalAxisWordUtil","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainIncrementalAxisWordUtil.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainIncrementalAxisWordUtil.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainIncrementalAxisWordUtil","type":"Class"},{"name":"HeidenhainLSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLSyntax","type":"Class"},{"name":"HeidenhainLblSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLblSyntax","type":"Class"},{"name":"HeidenhainLnSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLnSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLnSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLnSyntax","type":"Class"},{"name":"HeidenhainM128Syntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM128Syntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM128Syntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM128Syntax","type":"Class"},{"name":"HeidenhainM140Syntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM140Syntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM140Syntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainM140Syntax","type":"Class"},{"name":"HeidenhainMirrorImageSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainMirrorImageSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainMirrorImageSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainMirrorImageSyntax","type":"Class"},{"name":"HeidenhainPlaneSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainPlaneSyntax","type":"Class"},{"name":"HeidenhainProgramSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainProgramSyntax","type":"Class"},{"name":"HeidenhainTcpmSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTcpmSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTcpmSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTcpmSyntax","type":"Class"},{"name":"HeidenhainTildeTrimSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTildeTrimSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTildeTrimSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainTildeTrimSyntax","type":"Class"},{"name":"HeidenhainToolCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainToolCallSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs","type":"Namespace","items":[{"name":"HeidenhainDatumSettingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumSettingSyntax","type":"Class"},{"name":"HeidenhainDatumShiftSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainDatumShiftSyntax","type":"Class"},{"name":"HeidenhainMachiningCycleSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMachiningCycleSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMachiningCycleSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMachiningCycleSyntax","type":"Class"},{"name":"HeidenhainMirrorCyclSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMirrorCyclSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMirrorCyclSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainMirrorCyclSyntax","type":"Class"},{"name":"HeidenhainToleranceCyclSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainToleranceCyclSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainToleranceCyclSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Heidenhain.CyclDefSyntaxs.HeidenhainToleranceCyclSyntax","type":"Class"}]},{"name":"Hi.NcParsers.ParsingSyntaxs.Siemens","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens","type":"Namespace","items":[{"name":"SiemensCallStatementSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCallStatementSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCallStatementSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCallStatementSyntax","type":"Class"},{"name":"SiemensCycleCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensCycleCallSyntax","type":"Class"},{"name":"SiemensDefStatementSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensDefStatementSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensDefStatementSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensDefStatementSyntax","type":"Class"},{"name":"SiemensFrameStatementSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensFrameStatementSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensFrameStatementSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensFrameStatementSyntax","type":"Class"},{"name":"SiemensGotoParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensGotoParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensGotoParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensGotoParsingSyntax","type":"Class"},{"name":"SiemensIfParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensIfParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensIfParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensIfParsingSyntax","type":"Class"},{"name":"SiemensLabelSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLabelSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLabelSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLabelSyntax","type":"Class"},{"name":"SiemensLoopParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLoopParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLoopParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensLoopParsingSyntax","type":"Class"},{"name":"SiemensMcallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMcallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMcallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMcallSyntax","type":"Class"},{"name":"SiemensMsgSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMsgSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMsgSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensMsgSyntax","type":"Class"},{"name":"SiemensProcSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensProcSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensProcSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensProcSyntax","type":"Class"},{"name":"SiemensQuotedStatementSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensQuotedStatementSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensQuotedStatementSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensQuotedStatementSyntax","type":"Class"},{"name":"SiemensRepeatParsingSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensRepeatParsingSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensRepeatParsingSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensRepeatParsingSyntax","type":"Class"},{"name":"SiemensToolCallSyntax","href":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensToolCallSyntax.html","topicHref":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensToolCallSyntax.html","topicUid":"Hi.NcParsers.ParsingSyntaxs.Siemens.SiemensToolCallSyntax","type":"Class"}]},{"name":"Hi.NcParsers.PostLogicSyntaxs","href":"Hi.NcParsers.PostLogicSyntaxs.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs","type":"Namespace","items":[{"name":"ModalCarrySyntax","href":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax","type":"Class"},{"name":"RadiusCompensationSyntax","href":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicHref":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html","topicUid":"Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax","type":"Class"}]},{"name":"Hi.NcParsers.Segmenters","href":"Hi.NcParsers.Segmenters.html","topicHref":"Hi.NcParsers.Segmenters.html","topicUid":"Hi.NcParsers.Segmenters","type":"Namespace","items":[{"name":"HeidenhainSegmenter","href":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.HeidenhainSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.HeidenhainSegmenter","type":"Class"},{"name":"ISegmenter","href":"Hi.NcParsers.Segmenters.ISegmenter.html","topicHref":"Hi.NcParsers.Segmenters.ISegmenter.html","topicUid":"Hi.NcParsers.Segmenters.ISegmenter","type":"Interface"},{"name":"InlineDelimiterSegmenter","href":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.InlineDelimiterSegmenter","type":"Class"},{"name":"SingleLineSegmenter","href":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicHref":"Hi.NcParsers.Segmenters.SingleLineSegmenter.html","topicUid":"Hi.NcParsers.Segmenters.SingleLineSegmenter","type":"Class"}]},{"name":"Hi.NcParsers.Semantics","href":"Hi.NcParsers.Semantics.html","topicHref":"Hi.NcParsers.Semantics.html","topicUid":"Hi.NcParsers.Semantics","type":"Namespace","items":[{"name":"ClLinearMcMotionSemantic","href":"Hi.NcParsers.Semantics.ClLinearMcMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.ClLinearMcMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.ClLinearMcMotionSemantic","type":"Class"},{"name":"CompoundMotionSemantic","href":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.CompoundMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.CompoundMotionSemantic","type":"Class"},{"name":"CoolantSemantic","href":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicHref":"Hi.NcParsers.Semantics.CoolantSemantic.html","topicUid":"Hi.NcParsers.Semantics.CoolantSemantic","type":"Class"},{"name":"CsScriptBeginSemantic","href":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptBeginSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptBeginSemantic","type":"Class"},{"name":"CsScriptEndSemantic","href":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptEndSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptEndSemantic","type":"Class"},{"name":"CsScriptSemantic","href":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicHref":"Hi.NcParsers.Semantics.CsScriptSemantic.html","topicUid":"Hi.NcParsers.Semantics.CsScriptSemantic","type":"Class"},{"name":"INcSemantic","href":"Hi.NcParsers.Semantics.INcSemantic.html","topicHref":"Hi.NcParsers.Semantics.INcSemantic.html","topicUid":"Hi.NcParsers.Semantics.INcSemantic","type":"Interface"},{"name":"MachineCoordinateStepSemantic","href":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicHref":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic.html","topicUid":"Hi.NcParsers.Semantics.MachineCoordinateStepSemantic","type":"Class"},{"name":"McArcMotionSemantic","href":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McArcMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McArcMotionSemantic","type":"Class"},{"name":"McLinearMotionSemantic","href":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McLinearMotionSemantic","type":"Class"},{"name":"McPolarArcMotionSemantic","href":"Hi.NcParsers.Semantics.McPolarArcMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McPolarArcMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McPolarArcMotionSemantic","type":"Class"},{"name":"McPolarLinearMotionSemantic","href":"Hi.NcParsers.Semantics.McPolarLinearMotionSemantic.html","topicHref":"Hi.NcParsers.Semantics.McPolarLinearMotionSemantic.html","topicUid":"Hi.NcParsers.Semantics.McPolarLinearMotionSemantic","type":"Class"},{"name":"SpindleSpeedSemantic","href":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicHref":"Hi.NcParsers.Semantics.SpindleSpeedSemantic.html","topicUid":"Hi.NcParsers.Semantics.SpindleSpeedSemantic","type":"Class"},{"name":"StrokeLimitCheckSemantic","href":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicHref":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic.html","topicUid":"Hi.NcParsers.Semantics.StrokeLimitCheckSemantic","type":"Class"},{"name":"ToolChangeSemantic","href":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicHref":"Hi.NcParsers.Semantics.ToolChangeSemantic.html","topicUid":"Hi.NcParsers.Semantics.ToolChangeSemantic","type":"Class"},{"name":"ToolingTeleportSemantic","href":"Hi.NcParsers.Semantics.ToolingTeleportSemantic.html","topicHref":"Hi.NcParsers.Semantics.ToolingTeleportSemantic.html","topicUid":"Hi.NcParsers.Semantics.ToolingTeleportSemantic","type":"Class"}]},{"name":"Hi.NcParsers.Syntaxs","href":"Hi.NcParsers.Syntaxs.html","topicHref":"Hi.NcParsers.Syntaxs.html","topicUid":"Hi.NcParsers.Syntaxs","type":"Namespace","items":[{"name":"BundleSyntax","href":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.BundleSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.BundleSyntax","type":"Class"},{"name":"ExpressionPrefixParser","href":"Hi.NcParsers.Syntaxs.ExpressionPrefixParser.html","topicHref":"Hi.NcParsers.Syntaxs.ExpressionPrefixParser.html","topicUid":"Hi.NcParsers.Syntaxs.ExpressionPrefixParser","type":"Delegate"},{"name":"FanucSyntaxUtil","href":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.FanucSyntaxUtil","type":"Class"},{"name":"GenericSyntaxKit","href":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicHref":"Hi.NcParsers.Syntaxs.GenericSyntaxKit.html","topicUid":"Hi.NcParsers.Syntaxs.GenericSyntaxKit","type":"Class"},{"name":"HeidenhainSyntaxUtil","href":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.HeidenhainSyntaxUtil","type":"Class"},{"name":"IExpandingNcSyntax","href":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.IExpandingNcSyntax","type":"Interface"},{"name":"INcSyntax","href":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.INcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.INcSyntax","type":"Interface"},{"name":"ISituNcSyntax","href":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicHref":"Hi.NcParsers.Syntaxs.ISituNcSyntax.html","topicUid":"Hi.NcParsers.Syntaxs.ISituNcSyntax","type":"Interface"},{"name":"MazakSyntaxUtil","href":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.MazakSyntaxUtil","type":"Class"},{"name":"NcSyntaxUtil","href":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.NcSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.NcSyntaxUtil","type":"Class"},{"name":"SiemensSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SiemensSyntaxUtil","type":"Class"},{"name":"SyntaxPiece","href":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxPiece.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxPiece","type":"Class"},{"name":"SyntaxStageKeys","href":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicHref":"Hi.NcParsers.Syntaxs.SyntaxStageKeys.html","topicUid":"Hi.NcParsers.Syntaxs.SyntaxStageKeys","type":"Class"},{"name":"SyntecSyntaxUtil","href":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicHref":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil.html","topicUid":"Hi.NcParsers.Syntaxs.SyntecSyntaxUtil","type":"Class"},{"name":"TagValue","href":"Hi.NcParsers.Syntaxs.TagValue.html","topicHref":"Hi.NcParsers.Syntaxs.TagValue.html","topicUid":"Hi.NcParsers.Syntaxs.TagValue","type":"Class"},{"name":"TransformationUtil","href":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicHref":"Hi.NcParsers.Syntaxs.TransformationUtil.html","topicUid":"Hi.NcParsers.Syntaxs.TransformationUtil","type":"Class"}]},{"name":"Hi.Numerical","href":"Hi.Numerical.html","topicHref":"Hi.Numerical.html","topicUid":"Hi.Numerical","type":"Namespace","items":[{"name":"CncBrand","href":"Hi.Numerical.CncBrand.html","topicHref":"Hi.Numerical.CncBrand.html","topicUid":"Hi.Numerical.CncBrand","type":"Enum"},{"name":"CommentMark","href":"Hi.Numerical.CommentMark.html","topicHref":"Hi.Numerical.CommentMark.html","topicUid":"Hi.Numerical.CommentMark","type":"Enum"},{"name":"CoolantMode","href":"Hi.Numerical.CoolantMode.html","topicHref":"Hi.Numerical.CoolantMode.html","topicUid":"Hi.Numerical.CoolantMode","type":"Enum"},{"name":"CoordinateInterpolationMode","href":"Hi.Numerical.CoordinateInterpolationMode.html","topicHref":"Hi.Numerical.CoordinateInterpolationMode.html","topicUid":"Hi.Numerical.CoordinateInterpolationMode","type":"Enum"},{"name":"FlexDictionaryUtil","href":"Hi.Numerical.FlexDictionaryUtil.html","topicHref":"Hi.Numerical.FlexDictionaryUtil.html","topicUid":"Hi.Numerical.FlexDictionaryUtil","type":"Class"},{"name":"HardNcComment","href":"Hi.Numerical.HardNcComment.html","topicHref":"Hi.Numerical.HardNcComment.html","topicUid":"Hi.Numerical.HardNcComment","type":"Class"},{"name":"HardNcEnv","href":"Hi.Numerical.HardNcEnv.html","topicHref":"Hi.Numerical.HardNcEnv.html","topicUid":"Hi.Numerical.HardNcEnv","type":"Class"},{"name":"HardNcLine","href":"Hi.Numerical.HardNcLine.html","topicHref":"Hi.Numerical.HardNcLine.html","topicUid":"Hi.Numerical.HardNcLine","type":"Class"},{"name":"HardNcUtil","href":"Hi.Numerical.HardNcUtil.html","topicHref":"Hi.Numerical.HardNcUtil.html","topicUid":"Hi.Numerical.HardNcUtil","type":"Class"},{"name":"IFlexDictionaryHost","href":"Hi.Numerical.IFlexDictionaryHost-1.html","topicHref":"Hi.Numerical.IFlexDictionaryHost-1.html","topicUid":"Hi.Numerical.IFlexDictionaryHost`1","type":"Interface"},{"name":"IGetFeedrate","href":"Hi.Numerical.IGetFeedrate.html","topicHref":"Hi.Numerical.IGetFeedrate.html","topicUid":"Hi.Numerical.IGetFeedrate","type":"Interface"},{"name":"IGetSpindleSpeed","href":"Hi.Numerical.IGetSpindleSpeed.html","topicHref":"Hi.Numerical.IGetSpindleSpeed.html","topicUid":"Hi.Numerical.IGetSpindleSpeed","type":"Interface"},{"name":"INcRunner","href":"Hi.Numerical.INcRunner.html","topicHref":"Hi.Numerical.INcRunner.html","topicUid":"Hi.Numerical.INcRunner","type":"Interface"},{"name":"ISetFeedrate","href":"Hi.Numerical.ISetFeedrate.html","topicHref":"Hi.Numerical.ISetFeedrate.html","topicUid":"Hi.Numerical.ISetFeedrate","type":"Interface"},{"name":"ISetSpindleSpeed","href":"Hi.Numerical.ISetSpindleSpeed.html","topicHref":"Hi.Numerical.ISetSpindleSpeed.html","topicUid":"Hi.Numerical.ISetSpindleSpeed","type":"Interface"},{"name":"MechNcUtil","href":"Hi.Numerical.MechNcUtil.html","topicHref":"Hi.Numerical.MechNcUtil.html","topicUid":"Hi.Numerical.MechNcUtil","type":"Class"},{"name":"MillingToolOffsetTable","href":"Hi.Numerical.MillingToolOffsetTable.html","topicHref":"Hi.Numerical.MillingToolOffsetTable.html","topicUid":"Hi.Numerical.MillingToolOffsetTable","type":"Class"},{"name":"MillingToolOffsetTableRow","href":"Hi.Numerical.MillingToolOffsetTableRow.html","topicHref":"Hi.Numerical.MillingToolOffsetTableRow.html","topicUid":"Hi.Numerical.MillingToolOffsetTableRow","type":"Class"},{"name":"NcFlag","href":"Hi.Numerical.NcFlag.html","topicHref":"Hi.Numerical.NcFlag.html","topicUid":"Hi.Numerical.NcFlag","type":"Enum"},{"name":"NcFlagUtil","href":"Hi.Numerical.NcFlagUtil.html","topicHref":"Hi.Numerical.NcFlagUtil.html","topicUid":"Hi.Numerical.NcFlagUtil","type":"Class"},{"name":"NcGroup00","href":"Hi.Numerical.NcGroup00.html","topicHref":"Hi.Numerical.NcGroup00.html","topicUid":"Hi.Numerical.NcGroup00","type":"Enum"},{"name":"NcGroup01","href":"Hi.Numerical.NcGroup01.html","topicHref":"Hi.Numerical.NcGroup01.html","topicUid":"Hi.Numerical.NcGroup01","type":"Enum"},{"name":"NcGroup02","href":"Hi.Numerical.NcGroup02.html","topicHref":"Hi.Numerical.NcGroup02.html","topicUid":"Hi.Numerical.NcGroup02","type":"Enum"},{"name":"NcGroup03","href":"Hi.Numerical.NcGroup03.html","topicHref":"Hi.Numerical.NcGroup03.html","topicUid":"Hi.Numerical.NcGroup03","type":"Enum"},{"name":"NcGroup05","href":"Hi.Numerical.NcGroup05.html","topicHref":"Hi.Numerical.NcGroup05.html","topicUid":"Hi.Numerical.NcGroup05","type":"Enum"},{"name":"NcGroup06","href":"Hi.Numerical.NcGroup06.html","topicHref":"Hi.Numerical.NcGroup06.html","topicUid":"Hi.Numerical.NcGroup06","type":"Enum"},{"name":"NcGroup07","href":"Hi.Numerical.NcGroup07.html","topicHref":"Hi.Numerical.NcGroup07.html","topicUid":"Hi.Numerical.NcGroup07","type":"Enum"},{"name":"NcGroup08","href":"Hi.Numerical.NcGroup08.html","topicHref":"Hi.Numerical.NcGroup08.html","topicUid":"Hi.Numerical.NcGroup08","type":"Enum"},{"name":"NcGroup09","href":"Hi.Numerical.NcGroup09.html","topicHref":"Hi.Numerical.NcGroup09.html","topicUid":"Hi.Numerical.NcGroup09","type":"Enum"},{"name":"NcGroup10","href":"Hi.Numerical.NcGroup10.html","topicHref":"Hi.Numerical.NcGroup10.html","topicUid":"Hi.Numerical.NcGroup10","type":"Enum"},{"name":"NcGroup13","href":"Hi.Numerical.NcGroup13.html","topicHref":"Hi.Numerical.NcGroup13.html","topicUid":"Hi.Numerical.NcGroup13","type":"Enum"},{"name":"NcGroup14","href":"Hi.Numerical.NcGroup14.html","topicHref":"Hi.Numerical.NcGroup14.html","topicUid":"Hi.Numerical.NcGroup14","type":"Enum"},{"name":"NcGroup15","href":"Hi.Numerical.NcGroup15.html","topicHref":"Hi.Numerical.NcGroup15.html","topicUid":"Hi.Numerical.NcGroup15","type":"Enum"},{"name":"NcGroup16","href":"Hi.Numerical.NcGroup16.html","topicHref":"Hi.Numerical.NcGroup16.html","topicUid":"Hi.Numerical.NcGroup16","type":"Enum"},{"name":"NcGroup21","href":"Hi.Numerical.NcGroup21.html","topicHref":"Hi.Numerical.NcGroup21.html","topicUid":"Hi.Numerical.NcGroup21","type":"Enum"},{"name":"NcGroupAttribute","href":"Hi.Numerical.NcGroupAttribute.html","topicHref":"Hi.Numerical.NcGroupAttribute.html","topicUid":"Hi.Numerical.NcGroupAttribute","type":"Class"},{"name":"NcGroupHeidenhainM107M108","href":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicHref":"Hi.Numerical.NcGroupHeidenhainM107M108.html","topicUid":"Hi.Numerical.NcGroupHeidenhainM107M108","type":"Enum"},{"name":"NcGroupHeidenhainPlane","href":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicHref":"Hi.Numerical.NcGroupHeidenhainPlane.html","topicUid":"Hi.Numerical.NcGroupHeidenhainPlane","type":"Enum"},{"name":"NcGroupHeidenhainShortestRotaryPath","href":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicHref":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath.html","topicUid":"Hi.Numerical.NcGroupHeidenhainShortestRotaryPath","type":"Enum"},{"name":"NcGroupSpindleRotation","href":"Hi.Numerical.NcGroupSpindleRotation.html","topicHref":"Hi.Numerical.NcGroupSpindleRotation.html","topicUid":"Hi.Numerical.NcGroupSpindleRotation","type":"Enum"},{"name":"NcLifeCycleAttribute","href":"Hi.Numerical.NcLifeCycleAttribute.html","topicHref":"Hi.Numerical.NcLifeCycleAttribute.html","topicUid":"Hi.Numerical.NcLifeCycleAttribute","type":"Class"},{"name":"NcLifeCycleMode","href":"Hi.Numerical.NcLifeCycleMode.html","topicHref":"Hi.Numerical.NcLifeCycleMode.html","topicUid":"Hi.Numerical.NcLifeCycleMode","type":"Enum"},{"name":"NcNameAttribute","href":"Hi.Numerical.NcNameAttribute.html","topicHref":"Hi.Numerical.NcNameAttribute.html","topicUid":"Hi.Numerical.NcNameAttribute","type":"Class"},{"name":"NcNoteCache","href":"Hi.Numerical.NcNoteCache.html","topicHref":"Hi.Numerical.NcNoteCache.html","topicUid":"Hi.Numerical.NcNoteCache","type":"Class"},{"name":"NcProc","href":"Hi.Numerical.NcProc.html","topicHref":"Hi.Numerical.NcProc.html","topicUid":"Hi.Numerical.NcProc","type":"Class"},{"name":"NcWarningSceneEnum","href":"Hi.Numerical.NcWarningSceneEnum.html","topicHref":"Hi.Numerical.NcWarningSceneEnum.html","topicUid":"Hi.Numerical.NcWarningSceneEnum","type":"Enum"},{"name":"NumericUtil","href":"Hi.Numerical.NumericUtil.html","topicHref":"Hi.Numerical.NumericUtil.html","topicUid":"Hi.Numerical.NumericUtil","type":"Class"},{"name":"PolarEntry","href":"Hi.Numerical.PolarEntry.html","topicHref":"Hi.Numerical.PolarEntry.html","topicUid":"Hi.Numerical.PolarEntry","type":"Class"},{"name":"RadiusCompensationBuf","href":"Hi.Numerical.RadiusCompensationBuf.html","topicHref":"Hi.Numerical.RadiusCompensationBuf.html","topicUid":"Hi.Numerical.RadiusCompensationBuf","type":"Class"},{"name":"SourcedActEntry","href":"Hi.Numerical.SourcedActEntry.html","topicHref":"Hi.Numerical.SourcedActEntry.html","topicUid":"Hi.Numerical.SourcedActEntry","type":"Class"},{"name":"SpindleDirection","href":"Hi.Numerical.SpindleDirection.html","topicHref":"Hi.Numerical.SpindleDirection.html","topicUid":"Hi.Numerical.SpindleDirection","type":"Enum"},{"name":"SubStringKit","href":"Hi.Numerical.SubStringKit.html","topicHref":"Hi.Numerical.SubStringKit.html","topicUid":"Hi.Numerical.SubStringKit","type":"Class"},{"name":"SubStringKit.ActivationMode","href":"Hi.Numerical.SubStringKit.ActivationMode.html","topicHref":"Hi.Numerical.SubStringKit.ActivationMode.html","topicUid":"Hi.Numerical.SubStringKit.ActivationMode","type":"Enum"},{"name":"ToolConfigNotFoundException","href":"Hi.Numerical.ToolConfigNotFoundException.html","topicHref":"Hi.Numerical.ToolConfigNotFoundException.html","topicUid":"Hi.Numerical.ToolConfigNotFoundException","type":"Class"}]},{"name":"Hi.Numerical.Acts","href":"Hi.Numerical.Acts.html","topicHref":"Hi.Numerical.Acts.html","topicUid":"Hi.Numerical.Acts","type":"Namespace","items":[{"name":"ActActualDateTime","href":"Hi.Numerical.Acts.ActActualDateTime.html","topicHref":"Hi.Numerical.Acts.ActActualDateTime.html","topicUid":"Hi.Numerical.Acts.ActActualDateTime","type":"Class"},{"name":"ActActualTimecode","href":"Hi.Numerical.Acts.ActActualTimecode.html","topicHref":"Hi.Numerical.Acts.ActActualTimecode.html","topicUid":"Hi.Numerical.Acts.ActActualTimecode","type":"Class"},{"name":"ActClArc","href":"Hi.Numerical.Acts.ActClArc.html","topicHref":"Hi.Numerical.Acts.ActClArc.html","topicUid":"Hi.Numerical.Acts.ActClArc","type":"Class"},{"name":"ActClArcMcXyzabcContour","href":"Hi.Numerical.Acts.ActClArcMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.ActClArcMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.ActClArcMcXyzabcContour","type":"Class"},{"name":"ActClLinear","href":"Hi.Numerical.Acts.ActClLinear.html","topicHref":"Hi.Numerical.Acts.ActClLinear.html","topicUid":"Hi.Numerical.Acts.ActClLinear","type":"Class"},{"name":"ActClLinearMcXyzabcContour","href":"Hi.Numerical.Acts.ActClLinearMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.ActClLinearMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.ActClLinearMcXyzabcContour","type":"Class"},{"name":"ActClStep","href":"Hi.Numerical.Acts.ActClStep.html","topicHref":"Hi.Numerical.Acts.ActClStep.html","topicUid":"Hi.Numerical.Acts.ActClStep","type":"Class"},{"name":"ActClTeleport","href":"Hi.Numerical.Acts.ActClTeleport.html","topicHref":"Hi.Numerical.Acts.ActClTeleport.html","topicUid":"Hi.Numerical.Acts.ActClTeleport","type":"Class"},{"name":"ActCooling","href":"Hi.Numerical.Acts.ActCooling.html","topicHref":"Hi.Numerical.Acts.ActCooling.html","topicUid":"Hi.Numerical.Acts.ActCooling","type":"Class"},{"name":"ActData","href":"Hi.Numerical.Acts.ActData.html","topicHref":"Hi.Numerical.Acts.ActData.html","topicUid":"Hi.Numerical.Acts.ActData","type":"Class"},{"name":"ActDelay","href":"Hi.Numerical.Acts.ActDelay.html","topicHref":"Hi.Numerical.Acts.ActDelay.html","topicUid":"Hi.Numerical.Acts.ActDelay","type":"Class"},{"name":"ActFeedrate","href":"Hi.Numerical.Acts.ActFeedrate.html","topicHref":"Hi.Numerical.Acts.ActFeedrate.html","topicUid":"Hi.Numerical.Acts.ActFeedrate","type":"Class"},{"name":"ActHiddenStateChanged","href":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicHref":"Hi.Numerical.Acts.ActHiddenStateChanged.html","topicUid":"Hi.Numerical.Acts.ActHiddenStateChanged","type":"Class"},{"name":"ActIntentionalSkip","href":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicHref":"Hi.Numerical.Acts.ActIntentionalSkip.html","topicUid":"Hi.Numerical.Acts.ActIntentionalSkip","type":"Class"},{"name":"ActLineBegin","href":"Hi.Numerical.Acts.ActLineBegin.html","topicHref":"Hi.Numerical.Acts.ActLineBegin.html","topicUid":"Hi.Numerical.Acts.ActLineBegin","type":"Class"},{"name":"ActLineCsScript","href":"Hi.Numerical.Acts.ActLineCsScript.html","topicHref":"Hi.Numerical.Acts.ActLineCsScript.html","topicUid":"Hi.Numerical.Acts.ActLineCsScript","type":"Class"},{"name":"ActLineEnd","href":"Hi.Numerical.Acts.ActLineEnd.html","topicHref":"Hi.Numerical.Acts.ActLineEnd.html","topicUid":"Hi.Numerical.Acts.ActLineEnd","type":"Class"},{"name":"ActMcPolarLinearContour","href":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcPolarLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcPolarLinearContour","type":"Class"},{"name":"ActMcPolarSpiralContour","href":"Hi.Numerical.Acts.ActMcPolarSpiralContour.html","topicHref":"Hi.Numerical.Acts.ActMcPolarSpiralContour.html","topicUid":"Hi.Numerical.Acts.ActMcPolarSpiralContour","type":"Class"},{"name":"ActMcXyzLinearContour","href":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzLinearContour","type":"Class"},{"name":"ActMcXyzSpiralContour","href":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzSpiralContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzSpiralContour","type":"Class"},{"name":"ActMcXyzStep","href":"Hi.Numerical.Acts.ActMcXyzStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzStep","type":"Class"},{"name":"ActMcXyzabcLinearContour","href":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcLinearContour.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcLinearContour","type":"Class"},{"name":"ActMcXyzabcStep","href":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcStep.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcStep","type":"Class"},{"name":"ActMcXyzabcTeleport","href":"Hi.Numerical.Acts.ActMcXyzabcTeleport.html","topicHref":"Hi.Numerical.Acts.ActMcXyzabcTeleport.html","topicUid":"Hi.Numerical.Acts.ActMcXyzabcTeleport","type":"Class"},{"name":"ActRapid","href":"Hi.Numerical.Acts.ActRapid.html","topicHref":"Hi.Numerical.Acts.ActRapid.html","topicUid":"Hi.Numerical.Acts.ActRapid","type":"Class"},{"name":"ActSpindleDirection","href":"Hi.Numerical.Acts.ActSpindleDirection.html","topicHref":"Hi.Numerical.Acts.ActSpindleDirection.html","topicUid":"Hi.Numerical.Acts.ActSpindleDirection","type":"Class"},{"name":"ActSpindleOrientation","href":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicHref":"Hi.Numerical.Acts.ActSpindleOrientation.html","topicUid":"Hi.Numerical.Acts.ActSpindleOrientation","type":"Class"},{"name":"ActSpindleSpeed","href":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicHref":"Hi.Numerical.Acts.ActSpindleSpeed.html","topicUid":"Hi.Numerical.Acts.ActSpindleSpeed","type":"Class"},{"name":"ActToolingStep","href":"Hi.Numerical.Acts.ActToolingStep.html","topicHref":"Hi.Numerical.Acts.ActToolingStep.html","topicUid":"Hi.Numerical.Acts.ActToolingStep","type":"Class"},{"name":"ActToolingTeleport","href":"Hi.Numerical.Acts.ActToolingTeleport.html","topicHref":"Hi.Numerical.Acts.ActToolingTeleport.html","topicUid":"Hi.Numerical.Acts.ActToolingTeleport","type":"Class"},{"name":"ActUnknownSkip","href":"Hi.Numerical.Acts.ActUnknownSkip.html","topicHref":"Hi.Numerical.Acts.ActUnknownSkip.html","topicUid":"Hi.Numerical.Acts.ActUnknownSkip","type":"Class"},{"name":"ActUtil","href":"Hi.Numerical.Acts.ActUtil.html","topicHref":"Hi.Numerical.Acts.ActUtil.html","topicUid":"Hi.Numerical.Acts.ActUtil","type":"Class"},{"name":"ArcRadialClosure","href":"Hi.Numerical.Acts.ArcRadialClosure.html","topicHref":"Hi.Numerical.Acts.ArcRadialClosure.html","topicUid":"Hi.Numerical.Acts.ArcRadialClosure","type":"Class"},{"name":"IAct","href":"Hi.Numerical.Acts.IAct.html","topicHref":"Hi.Numerical.Acts.IAct.html","topicUid":"Hi.Numerical.Acts.IAct","type":"Interface"},{"name":"IActClMove","href":"Hi.Numerical.Acts.IActClMove.html","topicHref":"Hi.Numerical.Acts.IActClMove.html","topicUid":"Hi.Numerical.Acts.IActClMove","type":"Interface"},{"name":"IActDuration","href":"Hi.Numerical.Acts.IActDuration.html","topicHref":"Hi.Numerical.Acts.IActDuration.html","topicUid":"Hi.Numerical.Acts.IActDuration","type":"Interface"},{"name":"IActMachineStep","href":"Hi.Numerical.Acts.IActMachineStep.html","topicHref":"Hi.Numerical.Acts.IActMachineStep.html","topicUid":"Hi.Numerical.Acts.IActMachineStep","type":"Interface"},{"name":"IActMcXyzContour","href":"Hi.Numerical.Acts.IActMcXyzContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzContour","type":"Interface"},{"name":"IActMcXyzabcContour","href":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicHref":"Hi.Numerical.Acts.IActMcXyzabcContour.html","topicUid":"Hi.Numerical.Acts.IActMcXyzabcContour","type":"Interface"},{"name":"IActSkip","href":"Hi.Numerical.Acts.IActSkip.html","topicHref":"Hi.Numerical.Acts.IActSkip.html","topicUid":"Hi.Numerical.Acts.IActSkip","type":"Interface"},{"name":"IActTooling","href":"Hi.Numerical.Acts.IActTooling.html","topicHref":"Hi.Numerical.Acts.IActTooling.html","topicUid":"Hi.Numerical.Acts.IActTooling","type":"Interface"},{"name":"IWorkTimeAttrib","href":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicHref":"Hi.Numerical.Acts.IWorkTimeAttrib.html","topicUid":"Hi.Numerical.Acts.IWorkTimeAttrib","type":"Interface"},{"name":"IWorkTimeGetter","href":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeGetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeGetter","type":"Interface"},{"name":"IWorkTimeSetter","href":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicHref":"Hi.Numerical.Acts.IWorkTimeSetter.html","topicUid":"Hi.Numerical.Acts.IWorkTimeSetter","type":"Interface"},{"name":"StateActRunner","href":"Hi.Numerical.Acts.StateActRunner.html","topicHref":"Hi.Numerical.Acts.StateActRunner.html","topicUid":"Hi.Numerical.Acts.StateActRunner","type":"Class"}]},{"name":"Hi.Numerical.Args","href":"Hi.Numerical.Args.html","topicHref":"Hi.Numerical.Args.html","topicUid":"Hi.Numerical.Args","type":"Namespace","items":[{"name":"OrthogonalPlaneFlag","href":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicHref":"Hi.Numerical.Args.OrthogonalPlaneFlag.html","topicUid":"Hi.Numerical.Args.OrthogonalPlaneFlag","type":"Enum"},{"name":"PolarModeDirEnum","href":"Hi.Numerical.Args.PolarModeDirEnum.html","topicHref":"Hi.Numerical.Args.PolarModeDirEnum.html","topicUid":"Hi.Numerical.Args.PolarModeDirEnum","type":"Enum"},{"name":"PolarPairDef","href":"Hi.Numerical.Args.PolarPairDef.html","topicHref":"Hi.Numerical.Args.PolarPairDef.html","topicUid":"Hi.Numerical.Args.PolarPairDef","type":"Class"}]},{"name":"Hi.Numerical.ClsfParsers","href":"Hi.Numerical.ClsfParsers.html","topicHref":"Hi.Numerical.ClsfParsers.html","topicUid":"Hi.Numerical.ClsfParsers","type":"Namespace","items":[{"name":"ClArcMcMotionSemantic","href":"Hi.Numerical.ClsfParsers.ClArcMcMotionSemantic.html","topicHref":"Hi.Numerical.ClsfParsers.ClArcMcMotionSemantic.html","topicUid":"Hi.Numerical.ClsfParsers.ClArcMcMotionSemantic","type":"Class"},{"name":"ClMotionSemantic","href":"Hi.Numerical.ClsfParsers.ClMotionSemantic.html","topicHref":"Hi.Numerical.ClsfParsers.ClMotionSemantic.html","topicUid":"Hi.Numerical.ClsfParsers.ClMotionSemantic","type":"Class"},{"name":"ClMotionValveSemantic","href":"Hi.Numerical.ClsfParsers.ClMotionValveSemantic.html","topicHref":"Hi.Numerical.ClsfParsers.ClMotionValveSemantic.html","topicUid":"Hi.Numerical.ClsfParsers.ClMotionValveSemantic","type":"Class"},{"name":"ClTeleportMcMotionSemantic","href":"Hi.Numerical.ClsfParsers.ClTeleportMcMotionSemantic.html","topicHref":"Hi.Numerical.ClsfParsers.ClTeleportMcMotionSemantic.html","topicUid":"Hi.Numerical.ClsfParsers.ClTeleportMcMotionSemantic","type":"Class"},{"name":"ClToMcTransformSyntax","href":"Hi.Numerical.ClsfParsers.ClToMcTransformSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.ClToMcTransformSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.ClToMcTransformSyntax","type":"Class"},{"name":"ClsfKeys","href":"Hi.Numerical.ClsfParsers.ClsfKeys.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfKeys.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfKeys","type":"Class"},{"name":"ClsfRecordCleanupSyntax","href":"Hi.Numerical.ClsfParsers.ClsfRecordCleanupSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfRecordCleanupSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfRecordCleanupSyntax","type":"Class"},{"name":"ClsfRecordSyntax","href":"Hi.Numerical.ClsfParsers.ClsfRecordSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfRecordSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfRecordSyntax","type":"Class"},{"name":"ClsfRunnerConfig","href":"Hi.Numerical.ClsfParsers.ClsfRunnerConfig.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfRunnerConfig.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfRunnerConfig","type":"Class"},{"name":"ClsfSegmenter","href":"Hi.Numerical.ClsfParsers.ClsfSegmenter.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfSegmenter.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfSegmenter","type":"Class"},{"name":"ClsfToolBuildSemantic","href":"Hi.Numerical.ClsfParsers.ClsfToolBuildSemantic.html","topicHref":"Hi.Numerical.ClsfParsers.ClsfToolBuildSemantic.html","topicUid":"Hi.Numerical.ClsfParsers.ClsfToolBuildSemantic","type":"Class"},{"name":"MsysCoordinateOffsetSyntax","href":"Hi.Numerical.ClsfParsers.MsysCoordinateOffsetSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.MsysCoordinateOffsetSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.MsysCoordinateOffsetSyntax","type":"Class"},{"name":"NxClRunner","href":"Hi.Numerical.ClsfParsers.NxClRunner.html","topicHref":"Hi.Numerical.ClsfParsers.NxClRunner.html","topicUid":"Hi.Numerical.ClsfParsers.NxClRunner","type":"Class"},{"name":"RecordToClMotionSyntax","href":"Hi.Numerical.ClsfParsers.RecordToClMotionSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToClMotionSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToClMotionSyntax","type":"Class"},{"name":"RecordToCoolantSyntax","href":"Hi.Numerical.ClsfParsers.RecordToCoolantSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToCoolantSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToCoolantSyntax","type":"Class"},{"name":"RecordToFeedrateSyntax","href":"Hi.Numerical.ClsfParsers.RecordToFeedrateSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToFeedrateSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToFeedrateSyntax","type":"Class"},{"name":"RecordToMsysSyntax","href":"Hi.Numerical.ClsfParsers.RecordToMsysSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToMsysSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToMsysSyntax","type":"Class"},{"name":"RecordToSpindleSyntax","href":"Hi.Numerical.ClsfParsers.RecordToSpindleSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToSpindleSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToSpindleSyntax","type":"Class"},{"name":"RecordToToolingSyntax","href":"Hi.Numerical.ClsfParsers.RecordToToolingSyntax.html","topicHref":"Hi.Numerical.ClsfParsers.RecordToToolingSyntax.html","topicUid":"Hi.Numerical.ClsfParsers.RecordToToolingSyntax","type":"Class"}]},{"name":"Hi.Numerical.CsvParsers","href":"Hi.Numerical.CsvParsers.html","topicHref":"Hi.Numerical.CsvParsers.html","topicUid":"Hi.Numerical.CsvParsers","type":"Namespace","items":[{"name":"CsvActDataSemantic","href":"Hi.Numerical.CsvParsers.CsvActDataSemantic.html","topicHref":"Hi.Numerical.CsvParsers.CsvActDataSemantic.html","topicUid":"Hi.Numerical.CsvParsers.CsvActDataSemantic","type":"Class"},{"name":"CsvActualTimeSemantic","href":"Hi.Numerical.CsvParsers.CsvActualTimeSemantic.html","topicHref":"Hi.Numerical.CsvParsers.CsvActualTimeSemantic.html","topicUid":"Hi.Numerical.CsvParsers.CsvActualTimeSemantic","type":"Class"},{"name":"CsvMotionSemantic","href":"Hi.Numerical.CsvParsers.CsvMotionSemantic.html","topicHref":"Hi.Numerical.CsvParsers.CsvMotionSemantic.html","topicUid":"Hi.Numerical.CsvParsers.CsvMotionSemantic","type":"Class"},{"name":"CsvRowSyntax","href":"Hi.Numerical.CsvParsers.CsvRowSyntax.html","topicHref":"Hi.Numerical.CsvParsers.CsvRowSyntax.html","topicUid":"Hi.Numerical.CsvParsers.CsvRowSyntax","type":"Class"},{"name":"CsvRunnerConfig","href":"Hi.Numerical.CsvParsers.CsvRunnerConfig.html","topicHref":"Hi.Numerical.CsvParsers.CsvRunnerConfig.html","topicUid":"Hi.Numerical.CsvParsers.CsvRunnerConfig","type":"Class"},{"name":"CsvSegmenter","href":"Hi.Numerical.CsvParsers.CsvSegmenter.html","topicHref":"Hi.Numerical.CsvParsers.CsvSegmenter.html","topicUid":"Hi.Numerical.CsvParsers.CsvSegmenter","type":"Class"},{"name":"GeneralCsvRunner","href":"Hi.Numerical.CsvParsers.GeneralCsvRunner.html","topicHref":"Hi.Numerical.CsvParsers.GeneralCsvRunner.html","topicUid":"Hi.Numerical.CsvParsers.GeneralCsvRunner","type":"Class"},{"name":"RowToCoolantSyntax","href":"Hi.Numerical.CsvParsers.RowToCoolantSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToCoolantSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToCoolantSyntax","type":"Class"},{"name":"RowToCsScriptSyntax","href":"Hi.Numerical.CsvParsers.RowToCsScriptSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToCsScriptSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToCsScriptSyntax","type":"Class"},{"name":"RowToFeedrateSyntax","href":"Hi.Numerical.CsvParsers.RowToFeedrateSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToFeedrateSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToFeedrateSyntax","type":"Class"},{"name":"RowToMachineCoordinateSyntax","href":"Hi.Numerical.CsvParsers.RowToMachineCoordinateSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToMachineCoordinateSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToMachineCoordinateSyntax","type":"Class"},{"name":"RowToMotionEventSyntax","href":"Hi.Numerical.CsvParsers.RowToMotionEventSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToMotionEventSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToMotionEventSyntax","type":"Class"},{"name":"RowToSpindleSyntax","href":"Hi.Numerical.CsvParsers.RowToSpindleSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToSpindleSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToSpindleSyntax","type":"Class"},{"name":"RowToTimingSyntax","href":"Hi.Numerical.CsvParsers.RowToTimingSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToTimingSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToTimingSyntax","type":"Class"},{"name":"RowToToolingSyntax","href":"Hi.Numerical.CsvParsers.RowToToolingSyntax.html","topicHref":"Hi.Numerical.CsvParsers.RowToToolingSyntax.html","topicUid":"Hi.Numerical.CsvParsers.RowToToolingSyntax","type":"Class"}]},{"name":"Hi.Numerical.FilePlayers","href":"Hi.Numerical.FilePlayers.html","topicHref":"Hi.Numerical.FilePlayers.html","topicUid":"Hi.Numerical.FilePlayers","type":"Namespace","items":[{"name":"HardNcRunner","href":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicHref":"Hi.Numerical.FilePlayers.HardNcRunner.html","topicUid":"Hi.Numerical.FilePlayers.HardNcRunner","type":"Class"}]},{"name":"Hi.Numerical.MachiningMotionResolutionUtils","href":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils","type":"Namespace","items":[{"name":"FeedPerCycleMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerCycleMachiningMotionResolution","type":"Class"},{"name":"FeedPerToothMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FeedPerToothMachiningMotionResolution","type":"Class"},{"name":"FixedMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.FixedMachiningMotionResolution","type":"Class"},{"name":"IMachiningMotionResolution","href":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicHref":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution.html","topicUid":"Hi.Numerical.MachiningMotionResolutionUtils.IMachiningMotionResolution","type":"Interface"}]},{"name":"Hi.Numerical.NcArgs","href":"Hi.Numerical.NcArgs.html","topicHref":"Hi.Numerical.NcArgs.html","topicUid":"Hi.Numerical.NcArgs","type":"Namespace","items":[{"name":"ArcNcArg","href":"Hi.Numerical.NcArgs.ArcNcArg.html","topicHref":"Hi.Numerical.NcArgs.ArcNcArg.html","topicUid":"Hi.Numerical.NcArgs.ArcNcArg","type":"Class"},{"name":"G28Arg","href":"Hi.Numerical.NcArgs.G28Arg.html","topicHref":"Hi.Numerical.NcArgs.G28Arg.html","topicUid":"Hi.Numerical.NcArgs.G28Arg","type":"Class"},{"name":"Group07NcArg","href":"Hi.Numerical.NcArgs.Group07NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group07NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group07NcArg","type":"Class"},{"name":"Group09NcArg","href":"Hi.Numerical.NcArgs.Group09NcArg.html","topicHref":"Hi.Numerical.NcArgs.Group09NcArg.html","topicUid":"Hi.Numerical.NcArgs.Group09NcArg","type":"Class"},{"name":"HeidenhainCycleDef7Arg","href":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainCycleDef7Arg","type":"Class"},{"name":"HeidenhainPlaneSpatialArg","href":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicHref":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg.html","topicUid":"Hi.Numerical.NcArgs.HeidenhainPlaneSpatialArg","type":"Class"},{"name":"IHeidenhainBlockCacheArg","href":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainBlockCacheArg","type":"Interface"},{"name":"IHeidenhainPlaneArg","href":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicHref":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg.html","topicUid":"Hi.Numerical.NcArgs.IHeidenhainPlaneArg","type":"Interface"},{"name":"ITiltPlaneNcArg","href":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicHref":"Hi.Numerical.NcArgs.ITiltPlaneNcArg.html","topicUid":"Hi.Numerical.NcArgs.ITiltPlaneNcArg","type":"Interface"},{"name":"NcArgCycle800","href":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicHref":"Hi.Numerical.NcArgs.NcArgCycle800.html","topicUid":"Hi.Numerical.NcArgs.NcArgCycle800","type":"Class"},{"name":"NcArgG68","href":"Hi.Numerical.NcArgs.NcArgG68.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68","type":"Class"},{"name":"NcArgG68p2","href":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicHref":"Hi.Numerical.NcArgs.NcArgG68p2.html","topicUid":"Hi.Numerical.NcArgs.NcArgG68p2","type":"Class"},{"name":"NcArgSiemensFrame","href":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicHref":"Hi.Numerical.NcArgs.NcArgSiemensFrame.html","topicUid":"Hi.Numerical.NcArgs.NcArgSiemensFrame","type":"Class"},{"name":"PausingNcArg","href":"Hi.Numerical.NcArgs.PausingNcArg.html","topicHref":"Hi.Numerical.NcArgs.PausingNcArg.html","topicUid":"Hi.Numerical.NcArgs.PausingNcArg","type":"Class"}]},{"name":"Hi.Numerical.StepSelectionUtils","href":"Hi.Numerical.StepSelectionUtils.html","topicHref":"Hi.Numerical.StepSelectionUtils.html","topicUid":"Hi.Numerical.StepSelectionUtils","type":"Namespace","items":[{"name":"AnchorMode","href":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicHref":"Hi.Numerical.StepSelectionUtils.AnchorMode.html","topicUid":"Hi.Numerical.StepSelectionUtils.AnchorMode","type":"Enum"},{"name":"BoundSelector","href":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelector.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelector","type":"Class"},{"name":"BoundSelectorHost","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorHost","type":"Class"},{"name":"BoundSelectorPair","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair","type":"Class"},{"name":"BoundSelectorPair.BoundLocale","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorPair.BoundLocale","type":"Enum"},{"name":"BoundSelectorStepSectionBundle","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorStepSectionBundle","type":"Class"},{"name":"BoundSelectorUtil","href":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicHref":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil.html","topicUid":"Hi.Numerical.StepSelectionUtils.BoundSelectorUtil","type":"Class"},{"name":"DistanceShift","href":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.DistanceShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.DistanceShift","type":"Class"},{"name":"IStepShift","href":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.IStepShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.IStepShift","type":"Interface"},{"name":"TimeShift","href":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicHref":"Hi.Numerical.StepSelectionUtils.TimeShift.html","topicUid":"Hi.Numerical.StepSelectionUtils.TimeShift","type":"Class"}]},{"name":"Hi.Numerical.Xyzabc","href":"Hi.Numerical.Xyzabc.html","topicHref":"Hi.Numerical.Xyzabc.html","topicUid":"Hi.Numerical.Xyzabc","type":"Namespace","items":[{"name":"Abc","href":"Hi.Numerical.Xyzabc.Abc.html","topicHref":"Hi.Numerical.Xyzabc.Abc.html","topicUid":"Hi.Numerical.Xyzabc.Abc","type":"Struct"},{"name":"CodeXyzabcChain","href":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.CodeXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.CodeXyzabcChain","type":"Class"},{"name":"GeneralXyzabcChain","href":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.GeneralXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.GeneralXyzabcChain","type":"Class"},{"name":"IGetMcXyzabc","href":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.IGetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.IGetMcXyzabc","type":"Interface"},{"name":"IGetXyzabcChain","href":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IGetXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IGetXyzabcChain","type":"Interface"},{"name":"IMachineKinematics","href":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicHref":"Hi.Numerical.Xyzabc.IMachineKinematics.html","topicUid":"Hi.Numerical.Xyzabc.IMachineKinematics","type":"Interface"},{"name":"ISetMcXyzabc","href":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicHref":"Hi.Numerical.Xyzabc.ISetMcXyzabc.html","topicUid":"Hi.Numerical.Xyzabc.ISetMcXyzabc","type":"Interface"},{"name":"IXyzabcChain","href":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.IXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.IXyzabcChain","type":"Interface"},{"name":"ReflectedXyzabcChain","href":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicHref":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain.html","topicUid":"Hi.Numerical.Xyzabc.ReflectedXyzabcChain","type":"Class"},{"name":"XyzabcSolver","href":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcSolver.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcSolver","type":"Class"},{"name":"XyzabcUtil","href":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicHref":"Hi.Numerical.Xyzabc.XyzabcUtil.html","topicUid":"Hi.Numerical.Xyzabc.XyzabcUtil","type":"Class"}]},{"name":"Hi.PanelModels","href":"Hi.PanelModels.html","topicHref":"Hi.PanelModels.html","topicUid":"Hi.PanelModels","type":"Namespace","items":[{"name":"HiKey","href":"Hi.PanelModels.HiKey.html","topicHref":"Hi.PanelModels.HiKey.html","topicUid":"Hi.PanelModels.HiKey","type":"Enum"},{"name":"HiKeyEvent","href":"Hi.PanelModels.HiKeyEvent.html","topicHref":"Hi.PanelModels.HiKeyEvent.html","topicUid":"Hi.PanelModels.HiKeyEvent","type":"Class"},{"name":"HiModifierKeys","href":"Hi.PanelModels.HiModifierKeys.html","topicHref":"Hi.PanelModels.HiModifierKeys.html","topicUid":"Hi.PanelModels.HiModifierKeys","type":"Enum"},{"name":"HiMouseButton","href":"Hi.PanelModels.HiMouseButton.html","topicHref":"Hi.PanelModels.HiMouseButton.html","topicUid":"Hi.PanelModels.HiMouseButton","type":"Enum"},{"name":"HiMouseButtonEvent","href":"Hi.PanelModels.HiMouseButtonEvent.html","topicHref":"Hi.PanelModels.HiMouseButtonEvent.html","topicUid":"Hi.PanelModels.HiMouseButtonEvent","type":"Class"},{"name":"HiMouseButtonMask","href":"Hi.PanelModels.HiMouseButtonMask.html","topicHref":"Hi.PanelModels.HiMouseButtonMask.html","topicUid":"Hi.PanelModels.HiMouseButtonMask","type":"Enum"},{"name":"HiMouseButtonMaskUtil","href":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicHref":"Hi.PanelModels.HiMouseButtonMaskUtil.html","topicUid":"Hi.PanelModels.HiMouseButtonMaskUtil","type":"Class"},{"name":"HiMouseMoveEvent","href":"Hi.PanelModels.HiMouseMoveEvent.html","topicHref":"Hi.PanelModels.HiMouseMoveEvent.html","topicUid":"Hi.PanelModels.HiMouseMoveEvent","type":"Class"},{"name":"HiMouseWheelEvent","href":"Hi.PanelModels.HiMouseWheelEvent.html","topicHref":"Hi.PanelModels.HiMouseWheelEvent.html","topicUid":"Hi.PanelModels.HiMouseWheelEvent","type":"Class"},{"name":"PanelModel","href":"Hi.PanelModels.PanelModel.html","topicHref":"Hi.PanelModels.PanelModel.html","topicUid":"Hi.PanelModels.PanelModel","type":"Class"}]},{"name":"Hi.Parallels","href":"Hi.Parallels.html","topicHref":"Hi.Parallels.html","topicUid":"Hi.Parallels","type":"Namespace","items":[{"name":"CurrentThreadTaskScheduler","href":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicHref":"Hi.Parallels.CurrentThreadTaskScheduler.html","topicUid":"Hi.Parallels.CurrentThreadTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskScheduler","href":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicHref":"Hi.Parallels.DistributedQueueTaskScheduler.html","topicUid":"Hi.Parallels.DistributedQueueTaskScheduler","type":"Class"},{"name":"DistributedQueueTaskStarter","href":"Hi.Parallels.DistributedQueueTaskStarter.html","topicHref":"Hi.Parallels.DistributedQueueTaskStarter.html","topicUid":"Hi.Parallels.DistributedQueueTaskStarter","type":"Class"},{"name":"LockUtil","href":"Hi.Parallels.LockUtil.html","topicHref":"Hi.Parallels.LockUtil.html","topicUid":"Hi.Parallels.LockUtil","type":"Class"},{"name":"PriorityTaskScheduler","href":"Hi.Parallels.PriorityTaskScheduler.html","topicHref":"Hi.Parallels.PriorityTaskScheduler.html","topicUid":"Hi.Parallels.PriorityTaskScheduler","type":"Class"},{"name":"QueueTaskScheduler","href":"Hi.Parallels.QueueTaskScheduler.html","topicHref":"Hi.Parallels.QueueTaskScheduler.html","topicUid":"Hi.Parallels.QueueTaskScheduler","type":"Class"},{"name":"ReaderWriterLockUtil","href":"Hi.Parallels.ReaderWriterLockUtil.html","topicHref":"Hi.Parallels.ReaderWriterLockUtil.html","topicUid":"Hi.Parallels.ReaderWriterLockUtil","type":"Class"},{"name":"SemaphoreUtil","href":"Hi.Parallels.SemaphoreUtil.html","topicHref":"Hi.Parallels.SemaphoreUtil.html","topicUid":"Hi.Parallels.SemaphoreUtil","type":"Class"},{"name":"ThreadSafeSet","href":"Hi.Parallels.ThreadSafeSet-1.html","topicHref":"Hi.Parallels.ThreadSafeSet-1.html","topicUid":"Hi.Parallels.ThreadSafeSet`1","type":"Class"}]},{"name":"Hi.Physics","href":"Hi.Physics.html","topicHref":"Hi.Physics.html","topicUid":"Hi.Physics","type":"Namespace","items":[{"name":"AmpPhase","href":"Hi.Physics.AmpPhase.html","topicHref":"Hi.Physics.AmpPhase.html","topicUid":"Hi.Physics.AmpPhase","type":"Class"},{"name":"CoatingMaterial","href":"Hi.Physics.CoatingMaterial.html","topicHref":"Hi.Physics.CoatingMaterial.html","topicUid":"Hi.Physics.CoatingMaterial","type":"Class"},{"name":"CoolantHeatCondition","href":"Hi.Physics.CoolantHeatCondition.html","topicHref":"Hi.Physics.CoolantHeatCondition.html","topicUid":"Hi.Physics.CoolantHeatCondition","type":"Class"},{"name":"CutterMaterial","href":"Hi.Physics.CutterMaterial.html","topicHref":"Hi.Physics.CutterMaterial.html","topicUid":"Hi.Physics.CutterMaterial","type":"Class"},{"name":"IGetThermalLayerList","href":"Hi.Physics.IGetThermalLayerList.html","topicHref":"Hi.Physics.IGetThermalLayerList.html","topicUid":"Hi.Physics.IGetThermalLayerList","type":"Interface"},{"name":"IStructureMaterial","href":"Hi.Physics.IStructureMaterial.html","topicHref":"Hi.Physics.IStructureMaterial.html","topicUid":"Hi.Physics.IStructureMaterial","type":"Interface"},{"name":"ISuccessivePhysicsBriefAccessor","href":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicHref":"Hi.Physics.ISuccessivePhysicsBriefAccessor.html","topicUid":"Hi.Physics.ISuccessivePhysicsBriefAccessor","type":"Interface"},{"name":"ISurfaceMaterial","href":"Hi.Physics.ISurfaceMaterial.html","topicHref":"Hi.Physics.ISurfaceMaterial.html","topicUid":"Hi.Physics.ISurfaceMaterial","type":"Interface"},{"name":"ITimecoded","href":"Hi.Physics.ITimecoded.html","topicHref":"Hi.Physics.ITimecoded.html","topicUid":"Hi.Physics.ITimecoded","type":"Interface"},{"name":"MillingTemperatureUtil","href":"Hi.Physics.MillingTemperatureUtil.html","topicHref":"Hi.Physics.MillingTemperatureUtil.html","topicUid":"Hi.Physics.MillingTemperatureUtil","type":"Class"},{"name":"SeqPhysicsBrief","href":"Hi.Physics.SeqPhysicsBrief.html","topicHref":"Hi.Physics.SeqPhysicsBrief.html","topicUid":"Hi.Physics.SeqPhysicsBrief","type":"Class"},{"name":"StructureMaterial","href":"Hi.Physics.StructureMaterial.html","topicHref":"Hi.Physics.StructureMaterial.html","topicUid":"Hi.Physics.StructureMaterial","type":"Class"},{"name":"TemperatureUtil","href":"Hi.Physics.TemperatureUtil.html","topicHref":"Hi.Physics.TemperatureUtil.html","topicUid":"Hi.Physics.TemperatureUtil","type":"Class"},{"name":"TemperatureVsHardness","href":"Hi.Physics.TemperatureVsHardness.html","topicHref":"Hi.Physics.TemperatureVsHardness.html","topicUid":"Hi.Physics.TemperatureVsHardness","type":"Class"},{"name":"ThermalLayer1D","href":"Hi.Physics.ThermalLayer1D.html","topicHref":"Hi.Physics.ThermalLayer1D.html","topicUid":"Hi.Physics.ThermalLayer1D","type":"Class"},{"name":"TimeSeriesUtil","href":"Hi.Physics.TimeSeriesUtil.html","topicHref":"Hi.Physics.TimeSeriesUtil.html","topicUid":"Hi.Physics.TimeSeriesUtil","type":"Class"},{"name":"TimeValue","href":"Hi.Physics.TimeValue.html","topicHref":"Hi.Physics.TimeValue.html","topicUid":"Hi.Physics.TimeValue","type":"Class"},{"name":"WorkpieceMaterial","href":"Hi.Physics.WorkpieceMaterial.html","topicHref":"Hi.Physics.WorkpieceMaterial.html","topicUid":"Hi.Physics.WorkpieceMaterial","type":"Class"}]},{"name":"Hi.SessionCommands","href":"Hi.SessionCommands.html","topicHref":"Hi.SessionCommands.html","topicUid":"Hi.SessionCommands","type":"Namespace","items":[{"name":"CollisionDetectionCommand","href":"Hi.SessionCommands.CollisionDetectionCommand.html","topicHref":"Hi.SessionCommands.CollisionDetectionCommand.html","topicUid":"Hi.SessionCommands.CollisionDetectionCommand","type":"Class"},{"name":"CommandCatalogAttribute","href":"Hi.SessionCommands.CommandCatalogAttribute.html","topicHref":"Hi.SessionCommands.CommandCatalogAttribute.html","topicUid":"Hi.SessionCommands.CommandCatalogAttribute","type":"Class"},{"name":"CommandCategory","href":"Hi.SessionCommands.CommandCategory.html","topicHref":"Hi.SessionCommands.CommandCategory.html","topicUid":"Hi.SessionCommands.CommandCategory","type":"Enum"},{"name":"CommandFieldAttribute","href":"Hi.SessionCommands.CommandFieldAttribute.html","topicHref":"Hi.SessionCommands.CommandFieldAttribute.html","topicUid":"Hi.SessionCommands.CommandFieldAttribute","type":"Class"},{"name":"EnablingWrapper","href":"Hi.SessionCommands.EnablingWrapper.html","topicHref":"Hi.SessionCommands.EnablingWrapper.html","topicUid":"Hi.SessionCommands.EnablingWrapper","type":"Class"},{"name":"ExportMeshedGeomToStlCommand","href":"Hi.SessionCommands.ExportMeshedGeomToStlCommand.html","topicHref":"Hi.SessionCommands.ExportMeshedGeomToStlCommand.html","topicUid":"Hi.SessionCommands.ExportMeshedGeomToStlCommand","type":"Class"},{"name":"GeomDiffCommand","href":"Hi.SessionCommands.GeomDiffCommand.html","topicHref":"Hi.SessionCommands.GeomDiffCommand.html","topicUid":"Hi.SessionCommands.GeomDiffCommand","type":"Class"},{"name":"ISessionCommand","href":"Hi.SessionCommands.ISessionCommand.html","topicHref":"Hi.SessionCommands.ISessionCommand.html","topicUid":"Hi.SessionCommands.ISessionCommand","type":"Interface"},{"name":"ITitleCommand","href":"Hi.SessionCommands.ITitleCommand.html","topicHref":"Hi.SessionCommands.ITitleCommand.html","topicUid":"Hi.SessionCommands.ITitleCommand","type":"Interface"},{"name":"Lang","href":"Hi.SessionCommands.Lang.html","topicHref":"Hi.SessionCommands.Lang.html","topicUid":"Hi.SessionCommands.Lang","type":"Class"},{"name":"ListCommand","href":"Hi.SessionCommands.ListCommand.html","topicHref":"Hi.SessionCommands.ListCommand.html","topicUid":"Hi.SessionCommands.ListCommand","type":"Class"},{"name":"MachiningMotionResolutionCommand","href":"Hi.SessionCommands.MachiningMotionResolutionCommand.html","topicHref":"Hi.SessionCommands.MachiningMotionResolutionCommand.html","topicUid":"Hi.SessionCommands.MachiningMotionResolutionCommand","type":"Class"},{"name":"MachiningResolutionCommand","href":"Hi.SessionCommands.MachiningResolutionCommand.html","topicHref":"Hi.SessionCommands.MachiningResolutionCommand.html","topicUid":"Hi.SessionCommands.MachiningResolutionCommand","type":"Class"},{"name":"NcCodeCommand","href":"Hi.SessionCommands.NcCodeCommand.html","topicHref":"Hi.SessionCommands.NcCodeCommand.html","topicUid":"Hi.SessionCommands.NcCodeCommand","type":"Class"},{"name":"NcFileCommand","href":"Hi.SessionCommands.NcFileCommand.html","topicHref":"Hi.SessionCommands.NcFileCommand.html","topicUid":"Hi.SessionCommands.NcFileCommand","type":"Class"},{"name":"NcOptOptionCommand","href":"Hi.SessionCommands.NcOptOptionCommand.html","topicHref":"Hi.SessionCommands.NcOptOptionCommand.html","topicUid":"Hi.SessionCommands.NcOptOptionCommand","type":"Class"},{"name":"OptimizeToFilesCommand","href":"Hi.SessionCommands.OptimizeToFilesCommand.html","topicHref":"Hi.SessionCommands.OptimizeToFilesCommand.html","topicUid":"Hi.SessionCommands.OptimizeToFilesCommand","type":"Class"},{"name":"PauseOnFailureCommand","href":"Hi.SessionCommands.PauseOnFailureCommand.html","topicHref":"Hi.SessionCommands.PauseOnFailureCommand.html","topicUid":"Hi.SessionCommands.PauseOnFailureCommand","type":"Class"},{"name":"PhysicsCommand","href":"Hi.SessionCommands.PhysicsCommand.html","topicHref":"Hi.SessionCommands.PhysicsCommand.html","topicUid":"Hi.SessionCommands.PhysicsCommand","type":"Class"},{"name":"PostExecutionCommand","href":"Hi.SessionCommands.PostExecutionCommand.html","topicHref":"Hi.SessionCommands.PostExecutionCommand.html","topicUid":"Hi.SessionCommands.PostExecutionCommand","type":"Class"},{"name":"PreSettingCommand","href":"Hi.SessionCommands.PreSettingCommand.html","topicHref":"Hi.SessionCommands.PreSettingCommand.html","topicUid":"Hi.SessionCommands.PreSettingCommand","type":"Class"},{"name":"RecordMeshedGeomActionEnum","href":"Hi.SessionCommands.RecordMeshedGeomActionEnum.html","topicHref":"Hi.SessionCommands.RecordMeshedGeomActionEnum.html","topicUid":"Hi.SessionCommands.RecordMeshedGeomActionEnum","type":"Enum"},{"name":"RecordMeshedGeomCommand","href":"Hi.SessionCommands.RecordMeshedGeomCommand.html","topicHref":"Hi.SessionCommands.RecordMeshedGeomCommand.html","topicUid":"Hi.SessionCommands.RecordMeshedGeomCommand","type":"Class"},{"name":"ScriptCommand","href":"Hi.SessionCommands.ScriptCommand.html","topicHref":"Hi.SessionCommands.ScriptCommand.html","topicUid":"Hi.SessionCommands.ScriptCommand","type":"Class"},{"name":"WriteShotFilesCommand","href":"Hi.SessionCommands.WriteShotFilesCommand.html","topicHref":"Hi.SessionCommands.WriteShotFilesCommand.html","topicUid":"Hi.SessionCommands.WriteShotFilesCommand","type":"Class"},{"name":"WriteStepFilesCommand","href":"Hi.SessionCommands.WriteStepFilesCommand.html","topicHref":"Hi.SessionCommands.WriteStepFilesCommand.html","topicUid":"Hi.SessionCommands.WriteStepFilesCommand","type":"Class"}]},{"name":"Hi.SessionShellUtils","href":"Hi.SessionShellUtils.html","topicHref":"Hi.SessionShellUtils.html","topicUid":"Hi.SessionShellUtils","type":"Namespace","items":[{"name":"ISessionShell","href":"Hi.SessionShellUtils.ISessionShell.html","topicHref":"Hi.SessionShellUtils.ISessionShell.html","topicUid":"Hi.SessionShellUtils.ISessionShell","type":"Interface"},{"name":"JsAceAttribute","href":"Hi.SessionShellUtils.JsAceAttribute.html","topicHref":"Hi.SessionShellUtils.JsAceAttribute.html","topicUid":"Hi.SessionShellUtils.JsAceAttribute","type":"Class"}]},{"name":"Hi.SqliteUtils","href":"Hi.SqliteUtils.html","topicHref":"Hi.SqliteUtils.html","topicUid":"Hi.SqliteUtils","type":"Namespace","items":[{"name":"SqliteIdentityRole","href":"Hi.SqliteUtils.SqliteIdentityRole.html","topicHref":"Hi.SqliteUtils.SqliteIdentityRole.html","topicUid":"Hi.SqliteUtils.SqliteIdentityRole","type":"Class"},{"name":"SqliteIdentityStorage","href":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage","type":"Class"},{"name":"SqliteIdentityStorage.RoleRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.RoleRow","type":"Class"},{"name":"SqliteIdentityStorage.UserRow","href":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicHref":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow.html","topicUid":"Hi.SqliteUtils.SqliteIdentityStorage.UserRow","type":"Class"},{"name":"SqliteIdentityUser","href":"Hi.SqliteUtils.SqliteIdentityUser.html","topicHref":"Hi.SqliteUtils.SqliteIdentityUser.html","topicUid":"Hi.SqliteUtils.SqliteIdentityUser","type":"Class"},{"name":"SqliteRoleStore","href":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicHref":"Hi.SqliteUtils.SqliteRoleStore-1.html","topicUid":"Hi.SqliteUtils.SqliteRoleStore`1","type":"Class"},{"name":"SqliteStepStorage","href":"Hi.SqliteUtils.SqliteStepStorage.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage","type":"Class"},{"name":"SqliteStepStorage.MillingStepLuggageRow","href":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicHref":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow.html","topicUid":"Hi.SqliteUtils.SqliteStepStorage.MillingStepLuggageRow","type":"Class"},{"name":"SqliteUserStore","href":"Hi.SqliteUtils.SqliteUserStore-1.html","topicHref":"Hi.SqliteUtils.SqliteUserStore-1.html","topicUid":"Hi.SqliteUtils.SqliteUserStore`1","type":"Class"}]},{"name":"Hi.Test","href":"Hi.Test.html","topicHref":"Hi.Test.html","topicUid":"Hi.Test","type":"Namespace","items":[{"name":"TestCollision","href":"Hi.Test.TestCollision.html","topicHref":"Hi.Test.TestCollision.html","topicUid":"Hi.Test.TestCollision","type":"Class"}]},{"name":"Hi.UiExtensions","href":"Hi.UiExtensions.html","topicHref":"Hi.UiExtensions.html","topicUid":"Hi.UiExtensions","type":"Namespace","items":[{"name":"ChartBoundary","href":"Hi.UiExtensions.ChartBoundary.html","topicHref":"Hi.UiExtensions.ChartBoundary.html","topicUid":"Hi.UiExtensions.ChartBoundary","type":"Class"},{"name":"ChartBoundaryEnum","href":"Hi.UiExtensions.ChartBoundaryEnum.html","topicHref":"Hi.UiExtensions.ChartBoundaryEnum.html","topicUid":"Hi.UiExtensions.ChartBoundaryEnum","type":"Enum"},{"name":"NativeVisibility","href":"Hi.UiExtensions.NativeVisibility.html","topicHref":"Hi.UiExtensions.NativeVisibility.html","topicUid":"Hi.UiExtensions.NativeVisibility","type":"Enum"},{"name":"UiUtil","href":"Hi.UiExtensions.UiUtil.html","topicHref":"Hi.UiExtensions.UiUtil.html","topicUid":"Hi.UiExtensions.UiUtil","type":"Class"},{"name":"UiUtil.InvokeFunc","href":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicHref":"Hi.UiExtensions.UiUtil.InvokeFunc.html","topicUid":"Hi.UiExtensions.UiUtil.InvokeFunc","type":"Delegate"}]},{"name":"Hi.Vibrations","href":"Hi.Vibrations.html","topicHref":"Hi.Vibrations.html","topicUid":"Hi.Vibrations","type":"Namespace","items":[{"name":"AngularVelocityUtil","href":"Hi.Vibrations.AngularVelocityUtil.html","topicHref":"Hi.Vibrations.AngularVelocityUtil.html","topicUid":"Hi.Vibrations.AngularVelocityUtil","type":"Class"},{"name":"ForceAccelAmpPhase","href":"Hi.Vibrations.ForceAccelAmpPhase.html","topicHref":"Hi.Vibrations.ForceAccelAmpPhase.html","topicUid":"Hi.Vibrations.ForceAccelAmpPhase","type":"Class"},{"name":"ForceAccelFourierSeries","href":"Hi.Vibrations.ForceAccelFourierSeries.html","topicHref":"Hi.Vibrations.ForceAccelFourierSeries.html","topicUid":"Hi.Vibrations.ForceAccelFourierSeries","type":"Class"},{"name":"ForceAccelShot","href":"Hi.Vibrations.ForceAccelShot.html","topicHref":"Hi.Vibrations.ForceAccelShot.html","topicUid":"Hi.Vibrations.ForceAccelShot","type":"Class"},{"name":"ForceAccelUtil","href":"Hi.Vibrations.ForceAccelUtil.html","topicHref":"Hi.Vibrations.ForceAccelUtil.html","topicUid":"Hi.Vibrations.ForceAccelUtil","type":"Class"},{"name":"IAngularVelocityOwner","href":"Hi.Vibrations.IAngularVelocityOwner.html","topicHref":"Hi.Vibrations.IAngularVelocityOwner.html","topicUid":"Hi.Vibrations.IAngularVelocityOwner","type":"Interface"},{"name":"VibrationUtil","href":"Hi.Vibrations.VibrationUtil.html","topicHref":"Hi.Vibrations.VibrationUtil.html","topicUid":"Hi.Vibrations.VibrationUtil","type":"Class"},{"name":"WAmpPhase","href":"Hi.Vibrations.WAmpPhase.html","topicHref":"Hi.Vibrations.WAmpPhase.html","topicUid":"Hi.Vibrations.WAmpPhase","type":"Class"},{"name":"WAmpPhaseXyzTransformation","href":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicHref":"Hi.Vibrations.WAmpPhaseXyzTransformation.html","topicUid":"Hi.Vibrations.WAmpPhaseXyzTransformation","type":"Class"}]},{"name":"Hi.WinForm.Disp","href":"Hi.WinForm.Disp.html","topicHref":"Hi.WinForm.Disp.html","topicUid":"Hi.WinForm.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WinForm.Disp.RenderingCanvas.html","topicHref":"Hi.WinForm.Disp.RenderingCanvas.html","topicUid":"Hi.WinForm.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingForm","href":"Hi.WinForm.Disp.RenderingForm.html","topicHref":"Hi.WinForm.Disp.RenderingForm.html","topicUid":"Hi.WinForm.Disp.RenderingForm","type":"Class"}]},{"name":"Hi.WpfPlus.Disp","href":"Hi.WpfPlus.Disp.html","topicHref":"Hi.WpfPlus.Disp.html","topicUid":"Hi.WpfPlus.Disp","type":"Namespace","items":[{"name":"RenderingCanvas","href":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicHref":"Hi.WpfPlus.Disp.RenderingCanvas.html","topicUid":"Hi.WpfPlus.Disp.RenderingCanvas","type":"Class"},{"name":"RenderingWindow","href":"Hi.WpfPlus.Disp.RenderingWindow.html","topicHref":"Hi.WpfPlus.Disp.RenderingWindow.html","topicUid":"Hi.WpfPlus.Disp.RenderingWindow","type":"Class"},{"name":"WpfDispUtil","href":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicHref":"Hi.WpfPlus.Disp.WpfDispUtil.html","topicUid":"Hi.WpfPlus.Disp.WpfDispUtil","type":"Class"}]},{"name":"HiMachining.Milling","href":"HiMachining.Milling.html","topicHref":"HiMachining.Milling.html","topicUid":"HiMachining.Milling","type":"Namespace","items":[{"name":"ClMillingDevice","href":"HiMachining.Milling.ClMillingDevice.html","topicHref":"HiMachining.Milling.ClMillingDevice.html","topicUid":"HiMachining.Milling.ClMillingDevice","type":"Class"}]}],"memberLayout":"SamePage"} diff --git a/App/wwwroot/HiAPI-docsite/index.json b/App/wwwroot/HiAPI-docsite/index.json index 175bca8a..116e49d4 100644 --- a/App/wwwroot/HiAPI-docsite/index.json +++ b/App/wwwroot/HiAPI-docsite/index.json @@ -1659,15 +1659,15 @@ "title": "Class DelegateFuncDisplayee | HiAPI-C# 2025", "summary": "Class DelegateFuncDisplayee Namespace Hi.Disp Assembly HiDisp.dll A displayee implementation that delegates display functionality to a function. public class DelegateFuncDisplayee : IDisplayee, IExpandToBox3d Inheritance object DelegateFuncDisplayee Implements IDisplayee IExpandToBox3d Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) DispUtil.Display(IDisplayee, Bind, Mat4d) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors DelegateFuncDisplayee(Func) Initializes a new instance of the DelegateFuncDisplayee class. public DelegateFuncDisplayee(Func func) Parameters func Func The function that returns an IDisplayee instance. Methods Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box" }, - "api/Hi.Disp.DispEngine.ImageRequestedDelegate.html": { - "href": "api/Hi.Disp.DispEngine.ImageRequestedDelegate.html", - "title": "Delegate DispEngine.ImageRequestedDelegate | HiAPI-C# 2025", - "summary": "Delegate DispEngine.ImageRequestedDelegate Namespace Hi.Disp Assembly HiDisp.dll For ImageRequestAfterBufferSwapped. public delegate void DispEngine.ImageRequestedDelegate(byte* bgra_unsignedbyte_pixels, int w, int h) Parameters bgra_unsignedbyte_pixels byte* BGRA convention pixels in unsigned bytes. The size is wh4. w int width h int height Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object)" + "api/Hi.Disp.DispEngine.FrameReadyDelegate.html": { + "href": "api/Hi.Disp.DispEngine.FrameReadyDelegate.html", + "title": "Delegate DispEngine.FrameReadyDelegate | HiAPI-C# 2025", + "summary": "Delegate DispEngine.FrameReadyDelegate Namespace Hi.Disp Assembly HiDisp.dll For FrameReady. public delegate void DispEngine.FrameReadyDelegate(byte* bgra_unsignedbyte_pixels, int w, int h, FramePins pins) Parameters bgra_unsignedbyte_pixels byte* BGRA convention pixels in unsigned bytes, top row first. The size is wh4. Valid only during the callback. w int width h int height pins FramePins The pin table of the same frame (see PinDrawing); never null. PixelsChanged tells whether the pixels differ from the previous frame. Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object)" }, "api/Hi.Disp.DispEngine.html": { "href": "api/Hi.Disp.DispEngine.html", "title": "Class DispEngine | HiAPI-C# 2025", - "summary": "Class DispEngine Namespace Hi.Disp Assembly HiDisp.dll HiAPI display engine. public class DispEngine : IDisposable, IGetDispEngine Inheritance object DispEngine Implements IDisposable IGetDispEngine Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The DispEngine is the core rendering and interaction engine for HiAPI applications. Related Documentation Using RenderingCanvas with DispEngine Building Your Own Rendering Canvas The DispEngine provides a unified API for handling rendering, user interaction, and touch gestures across different UI frameworks. Constructors DispEngine(IDisplayee) Ctor. The SetViewToHomeView() is called in this function. public DispEngine(IDisplayee displayee) Parameters displayee IDisplayee The displayee to render. DispEngine(params IDisplayee[]) Ctor. public DispEngine(params IDisplayee[] displayees) Parameters displayees IDisplayee[] displayees to render. Fields CoreDll Core dll path. public const string CoreDll = \"core.dll\" Field Value string defaultFontFile Sentinel selecting the embedded default font (Noto Sans CJK TC, SIL Open Font License 1.1). Passing this value (or null) to Init(string) loads the embedded font from memory without writing any file to disk. This is not a path; no file of this name is looked up or created. public const string defaultFontFile = \"(embedded)\" Field Value string Properties BackgroundColor Background color public Vec3d BackgroundColor { get; set; } Property Value Vec3d BackgroundOpacity Background opacity. Range is from 0 to 1. public double BackgroundOpacity { get; set; } Property Value double ContextProjDepth Gets the projection depth of the current context. public static double ContextProjDepth { get; } Property Value double CursorOffsetX Internal Use. public int CursorOffsetX { get; } Property Value int CursorOffsetY Internal Use. public int CursorOffsetY { get; } Property Value int CursorX Internal Use. public int CursorX { get; set; } Property Value int CursorY Internal Use. public int CursorY { get; set; } Property Value int Displayee Displayee to be rendered in the rendering loop. The SetViewToHomeView() is called in this function. public IDisplayee Displayee { get; set; } Property Value IDisplayee EnableSuppressDefaultLogo Get or Set to Enable Suppress Default Logo. public static bool EnableSuppressDefaultLogo { get; set; } Property Value bool Exceptions InvalidOperationException Thrown when SuppressDefaultLogo license is not logged in. FontFile Font file. Null while the embedded default font (loaded from memory) is in use. public static string FontFile { get; set; } Property Value string IdleBackoffHeartbeat Idle backoff heartbeat. While the rendered image stays identical, no input arrives and progressive refinement has converged, the engine re-renders only once per this interval instead of every RefreshingPeriod. Zero (the default) disables the backoff. Any input, scene invalidation or an explicit ClearCache() restores the full refresh rate immediately. public TimeSpan IdleBackoffHeartbeat { set; } Property Value TimeSpan IsDisposed Gets a value indicating whether this engine has been disposed. All native-backed members become no-ops afterwards (value getters return neutral defaults). public bool IsDisposed { get; } Property Value bool IsOnDispThread Gets a value indicating whether the current thread is the display thread. public static bool IsOnDispThread { get; } Property Value bool IsVisible The anime stop running if the value is false; otherwise, the anime starts or keeps running. public bool IsVisible { get; set; } Property Value bool Model public Mat4d Model { get; set; } Property Value Mat4d Model matrix in MVP convention. This Model matrix is the first matrix in Hi.Disp.Bind.modelMatStack. PixelProj public Mat4d PixelProj { get; set; } Property Value Mat4d Pixel part of Projection matrix in MVP convention. Projection matrix = ScaleProj * PixelProj; PreCursorX Internal Use. public int PreCursorX { get; set; } Property Value int PreCursorY Internal Use. public int PreCursorY { get; set; } Property Value int PrincipleView public Mat4d PrincipleView { get; set; } Property Value Mat4d view = PrincipleView * SketchView. Where view matrix is in MVP convention. Remarks The default value is new Mat4d(new Vec3d(1, 0, 0), -Math.PI / 2). This make the 2D plane from xy plane to xz plane. The xz plane is much suit for 3D engineering display. RefreshingPeriod Image refreshing period. public TimeSpan RefreshingPeriod { get; set; } Property Value TimeSpan ScaleProj public Mat4d ScaleProj { get; set; } Property Value Mat4d Scale part of Projection matrix in MVP convention. Projection matrix = ScaleProj * PixelProj; SketchView view = PrincipleView * SketchView. Where view matrix is in MVP convention. public Mat4d SketchView { get; set; } Property Value Mat4d SuppressHoverPickWhileDragging When true, mouse moves with a button held do not trigger the hover pick pass (which re-renders the whole scene in picking mode). Enable this for hosts whose drags are pure camera transforms; keep the default (false) when API users drag a picked object via Pickable events. public bool SuppressHoverPickWhileDragging { set; } Property Value bool Methods ClearCache() Clears the display engine cache. public void ClearCache() DeleteDispContext() Deletes the current display context. public static void DeleteDispContext() Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool EnqueueDispose(IDisposable) Enqueues a disposable object to be disposed on the display thread. public static Task EnqueueDispose(IDisposable disposable) Parameters disposable IDisposable The disposable object to be disposed Returns Task A task representing the disposal operation EnqueueTask(Task) Enqueues a task to be executed on the display thread. public static Task EnqueueTask(Task task) Parameters task Task The task to be executed Returns Task The enqueued task EnqueueTask(Task) Enqueues a task to be executed on the display thread. public static Task EnqueueTask(Task task) Parameters task Task The task to be executed Returns Task The enqueued task Type Parameters T The type of the task result ~DispEngine() protected ~DispEngine() FinishDisp() Elegantly end the rendering core. Probably not essential. public static void FinishDisp() GetDispEngine() Get DispEngine. public DispEngine GetDispEngine() Returns DispEngine DispEngine Init(string) Initializes the display engine system. public static void Init(string fontFile = null) Parameters fontFile string The font file to use. If null, the embedded default font is loaded from memory and no file is written to disk. IsKeyPressed(string) Checks if a specific keyboard key is currently pressed. Delegates to IsKeyPressed(string). public bool IsKeyPressed(string key) Parameters key string Key string (W3C KeyboardEvent.key value, e.g. “Alt”, “ArrowLeft”). Returns bool True if the specified key is pressed; otherwise, false. IsMouseButtonPressed(long) Checks if a specific mouse button is currently pressed. Delegates to IsMouseButtonPressed(long). public bool IsMouseButtonPressed(long mouseButton) Parameters mouseButton long The mouse button to check, typically a value from the HiMouseButton enumeration. Returns bool True if the specified mouse button is pressed; otherwise, false. KeyDown(string) Key down. This function is typically called in the GUI implementation for keyboard interaction. public void KeyDown(string key) Parameters key string Key string (W3C KeyboardEvent.key value, e.g. “Alt”, “ArrowLeft”, “a”). KeyDownTransform(string, key_table__transform_view_by_key_pressing_t) Transform SketchView by key. Home, F1, F2, F3, F4 call SetViewToHomeView(), SetViewToFrontView(), SetViewToRightView(), SetViewToTopView(), SetViewToIsometricView() respectively. PageDown and PageUp scale the SketchView. Left, Right, Down, Up translate the SketchView; Press Shift make these keys to rotate the SketchView. public void KeyDownTransform(string key, key_table__transform_view_by_key_pressing_t table) Parameters key string The key that was pressed, typically a value from the HiKey enumeration. table key_table__transform_view_by_key_pressing_t A table defining which keys trigger different transformation operations. Remarks This method is typically called from key down event handlers in the GUI implementation. KeyUp(string) Key up. This function is typically called in the GUI implementation for keyboard interaction. public void KeyUp(string key) Parameters key string Key string (W3C KeyboardEvent.key value). LockGlContext() Lock a opengl context. The function is only used for native OpenGL rendering. After lock the gl context, It should be unlock by UnlockGlContext(nint). public static nint LockGlContext() Returns nint Remarks If any other lock requires LockGlContext, the lock should better set inside LockGlContext. or it is easy to occur race condition. see design pattern of “Solid” class for reference. MouseButtonDown(long) Mouse button down. This function is typically called in the GUI implementation for mouse interaction. public void MouseButtonDown(long button) Parameters button long button MouseButtonUp(long) Mouse button up. This function is typically called in the GUI implementation for mouse interaction. public void MouseButtonUp(long button) Parameters button long button MouseDragTransform(int, int, mouse_button_table__transform_view_by_mouse_drag_t) Transform the view by mouse drag. If drag by left mouse button, Translate(double, double) is performed; If drag by right mouse button, Rotate(double, double) is performed. public void MouseDragTransform(int x, int y, mouse_button_table__transform_view_by_mouse_drag_t mouse_button_table) Parameters x int The current x-coordinate of the mouse cursor. y int The current y-coordinate of the mouse cursor. mouse_button_table mouse_button_table__transform_view_by_mouse_drag_t A table defining which mouse buttons trigger different transformation operations. Remarks The mouse_button_table__transform_view_by_mouse_drag_t structure allows you to configure which mouse buttons perform which transformations: var buttonTable = new mouse_button_table__transform_view_by_mouse_drag_t { LEFT_BUTTON = (long)HiMouseButton.Left, // For translation RIGHT_BUTTON = (long)HiMouseButton.Right // For rotation }; This method is typically called from mouse move event handlers when buttons are pressed. MouseMove(int, int) Mouse move. This function is typically called in the GUI implementation for mouse interaction. public void MouseMove(int x, int y) Parameters x int cursor X position y int cursor Y position MouseWheel(int, int) Mouse wheel move. This function is typically called in the GUI implementation for mouse interaction. public void MouseWheel(int deltaX, int deltaY) Parameters deltaX int mouse wheel delta X deltaY int mouse wheel delta Y. The traditional mouse wheel. MouseWheelTransform(int, int, double) Scale SketchView by mouse wheel. public void MouseWheelTransform(int deltaX, int deltaY, double zooming_ratio = 0.2) Parameters deltaX int mouse wheel delta X deltaY int mouse wheel delta Y. The traditional mouse wheel. zooming_ratio double The ratio used for zooming. Default is 0.2. Resize(int, int) Resize the opengl context. public void Resize(int w, int h) Parameters w int width of the viewport h int height of the viewport Rotate(double, double) Rotate the SketchView. Usually used by mouse drag on window. The rotation axis is along (delta_y, 0, delta_x). The rotation rad is 5 * Math.Sqrt(delta_y * delta_y + delta_x * delta_x) / window_height. public void Rotate(double delta_x, double delta_y) Parameters delta_x double delta x in window coordinate delta_y double delta y in window coordinate RotateAndScaleByTouchPad(Vec2d, Vec2d, Vec2d, Vec2d) Rotate and scale the SketchView based on touch pad gestures. public void RotateAndScaleByTouchPad(Vec2d prePosA, Vec2d curPosA, Vec2d prePosB, Vec2d curPosB) Parameters prePosA Vec2d The previous position of the first touch point. curPosA Vec2d The current position of the first touch point. prePosB Vec2d The previous position of the second touch point. curPosB Vec2d The current position of the second touch point. Remarks The method detects two types of gestures: Pinch gesture: When the distance between touch points changes, it triggers zooming via MouseWheelTransform(int, int, double) Rotation/Pan gesture: When touch points move together, it triggers rotation via Rotate(double, double) This method is typically used to implement touchpad or multi-touch gestures in custom UI implementations. RotateWithoutHeightAdjustment(double, double) Rotate the SketchView. Usually used by keyboard command. The rotation axis is along (delta_y, 0, delta_x). The rotation rad is Math.ToRad(Math.Sqrt(delta_y * delta_y + delta_x * delta_x)). public void RotateWithoutHeightAdjustment(double delta_x, double delta_y) Parameters delta_x double delta x in window coordinate delta_y double delta y in window coordinate SetViewToFrontView() Set the SketchView to front view. public void SetViewToFrontView() SetViewToHomeView() Set the SketchView to home view(front view). This is the same as SetViewToFrontView(). public void SetViewToHomeView() SetViewToIsometricView() Set the SketchView to isometric view. public void SetViewToIsometricView() SetViewToRightView() Set the SketchView to side view. public void SetViewToRightView() SetViewToTopView() Set the SketchView to top view. public void SetViewToTopView() Snapshot(string) Snapshot to BMP file with current canvas size. public void Snapshot(string filePath) Parameters filePath string Snapshot(string, int, int) Snapshot to BMP file. public void Snapshot(string filePath, int panelWidth, int panelHeight) Parameters filePath string panelWidth int panelHeight int Start(int, int) Start a thread of keeping Swapping buffers of OpenGL context. If the thread has running, this function does nothing. public void Start(int panelWidth, int panelHeight) Parameters panelWidth int panel width panelHeight int panel height Terminate() Terminate the opengl context swapping buffers thread from Start(int, int). If the thread has not running, this function does nothing. public void Terminate() TouchDown(int, int, int) Tracks a new touch point in the DispEngine's touch gesture system. public void TouchDown(int touchId, int x, int y) Parameters touchId int A unique identifier for the touch point. x int The x-coordinate of the touch point in screen coordinates. y int The y-coordinate of the touch point in screen coordinates. Remarks When a touch point is added, the method: Stores the touch point in the internal tracking dictionary If this is the first touch point, simulates a mouse move and left button press TouchMove(int, int, int) Updates the position of an existing touch point. public void TouchMove(int touchId, int x, int y) Parameters touchId int The unique identifier of the touch point to update. x int The new x-coordinate of the touch point in screen coordinates. y int The new y-coordinate of the touch point in screen coordinates. Remarks The method handles different gestures based on the number of active touch points: Single touch: Performs panning (translation) like mouse dragging Two touches: Performs pinch-to-zoom and rotation gestures TouchUp(int) Removes a touch point from tracking when the touch is released. public void TouchUp(int touchId) Parameters touchId int The unique identifier of the touch point to remove. Remarks When a touch point is released, the method: Removes the touch point from internal tracking dictionaries If all touch points are released, simulates a mouse button release If transitioning from multi-touch to single-touch, updates the mouse position to prevent “teleportation” Translate(double, double) Translate the SketchView. Usually used by mouse drag on window. The translation is (delta_x * 2.0 / h, 0, -delta_y* 2.0 / h). Where h is window height. public void Translate(double delta_x, double delta_y) Parameters delta_x double delta x in window coordinate delta_y double delta y in window coordinate TurnBackView() Rotate view 180 degrees around Z axis to switch to back view. public void TurnBackView() UnlockGlContext(nint) Unlock opengl context. The function is only used for native OpenGL rendering. The function unlock the opengl context for LockGlContext(). public static void UnlockGlContext(nint disp_torch_p) Parameters disp_torch_p nint Events FinishingDisp Event at the begining of FinishDisp() public static event Action FinishingDisp Event Type Action ImageRequestAfterBufferSwapped Triggered after swap buffer of gl context. public event DispEngine.ImageRequestedDelegate ImageRequestAfterBufferSwapped Event Type DispEngine.ImageRequestedDelegate" + "summary": "Class DispEngine Namespace Hi.Disp Assembly HiDisp.dll HiAPI display engine. public class DispEngine : IDisposable, IGetDispEngine Inheritance object DispEngine Implements IDisposable IGetDispEngine Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The DispEngine is the core rendering and interaction engine for HiAPI applications. Related Documentation Using RenderingCanvas with DispEngine Building Your Own Rendering Canvas The DispEngine provides a unified API for handling rendering, user interaction, and touch gestures across different UI frameworks. Constructors DispEngine(IDisplayee) Ctor. The SetViewToHomeView() is called in this function. public DispEngine(IDisplayee displayee) Parameters displayee IDisplayee The displayee to render. DispEngine(params IDisplayee[]) Ctor. public DispEngine(params IDisplayee[] displayees) Parameters displayees IDisplayee[] displayees to render. Fields CoreDll Core dll path. public const string CoreDll = \"core.dll\" Field Value string defaultFontFile Sentinel selecting the embedded default font (Noto Sans CJK TC, SIL Open Font License 1.1). Passing this value (or null) to Init(string) loads the embedded font from memory without writing any file to disk. This is not a path; no file of this name is looked up or created. public const string defaultFontFile = \"(embedded)\" Field Value string Properties BackgroundColor Background color public Vec3d BackgroundColor { get; set; } Property Value Vec3d BackgroundOpacity Background opacity. Range is from 0 to 1. public double BackgroundOpacity { get; set; } Property Value double ContextProjDepth Gets the projection depth of the current context. public static double ContextProjDepth { get; } Property Value double CursorOffsetX Internal Use. public int CursorOffsetX { get; } Property Value int CursorOffsetY Internal Use. public int CursorOffsetY { get; } Property Value int CursorX Internal Use. public int CursorX { get; set; } Property Value int CursorY Internal Use. public int CursorY { get; set; } Property Value int Displayee Displayee to be rendered in the rendering loop. The SetViewToHomeView() is called in this function. public IDisplayee Displayee { get; set; } Property Value IDisplayee EnableSuppressDefaultLogo Get or Set to Enable Suppress Default Logo. public static bool EnableSuppressDefaultLogo { get; set; } Property Value bool Exceptions InvalidOperationException Thrown when SuppressDefaultLogo license is not logged in. FontFile Font file. Null while the embedded default font (loaded from memory) is in use. public static string FontFile { get; set; } Property Value string IdleBackoffHeartbeat Idle backoff heartbeat. While the rendered image stays identical, no input arrives and progressive refinement has converged, the engine re-renders only once per this interval instead of every RefreshingPeriod. Zero (the default) disables the backoff. Any input, scene invalidation or an explicit ClearCache() restores the full refresh rate immediately. public TimeSpan IdleBackoffHeartbeat { set; } Property Value TimeSpan IsDisposed Gets a value indicating whether this engine has been disposed. All native-backed members become no-ops afterwards (value getters return neutral defaults). public bool IsDisposed { get; } Property Value bool IsOnDispThread Gets a value indicating whether the current thread is the display thread. public static bool IsOnDispThread { get; } Property Value bool IsVisible The anime stop running if the value is false; otherwise, the anime starts or keeps running. public bool IsVisible { get; set; } Property Value bool Model public Mat4d Model { get; set; } Property Value Mat4d Model matrix in MVP convention. This Model matrix is the first matrix in Hi.Disp.Bind.modelMatStack. PixelProj public Mat4d PixelProj { get; set; } Property Value Mat4d Pixel part of Projection matrix in MVP convention. Projection matrix = ScaleProj * PixelProj; PreCursorX Internal Use. public int PreCursorX { get; set; } Property Value int PreCursorY Internal Use. public int PreCursorY { get; set; } Property Value int PrincipleView public Mat4d PrincipleView { get; set; } Property Value Mat4d view = PrincipleView * SketchView. Where view matrix is in MVP convention. Remarks The default value is new Mat4d(new Vec3d(1, 0, 0), -Math.PI / 2). This make the 2D plane from xy plane to xz plane. The xz plane is much suit for 3D engineering display. RefreshingPeriod Image refreshing period. public TimeSpan RefreshingPeriod { get; set; } Property Value TimeSpan ScaleProj public Mat4d ScaleProj { get; set; } Property Value Mat4d Scale part of Projection matrix in MVP convention. Projection matrix = ScaleProj * PixelProj; SketchView view = PrincipleView * SketchView. Where view matrix is in MVP convention. public Mat4d SketchView { get; set; } Property Value Mat4d SuppressHoverPickWhileDragging When true, mouse moves with a button held do not trigger the hover pick pass (which re-renders the whole scene in picking mode). Enable this for hosts whose drags are pure camera transforms; keep the default (false) when API users drag a picked object via Pickable events. public bool SuppressHoverPickWhileDragging { set; } Property Value bool Methods ClearCache() Clears the display engine cache. public void ClearCache() DeleteDispContext() Deletes the current display context. public static void DeleteDispContext() Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool EnqueueDispose(IDisposable) Enqueues a disposable object to be disposed on the display thread. public static Task EnqueueDispose(IDisposable disposable) Parameters disposable IDisposable The disposable object to be disposed Returns Task A task representing the disposal operation EnqueueTask(Task) Enqueues a task to be executed on the display thread. public static Task EnqueueTask(Task task) Parameters task Task The task to be executed Returns Task The enqueued task EnqueueTask(Task) Enqueues a task to be executed on the display thread. public static Task EnqueueTask(Task task) Parameters task Task The task to be executed Returns Task The enqueued task Type Parameters T The type of the task result ~DispEngine() protected ~DispEngine() FinishDisp() Elegantly end the rendering core. Probably not essential. public static void FinishDisp() GetDispEngine() Get DispEngine. public DispEngine GetDispEngine() Returns DispEngine DispEngine Init(string) Initializes the display engine system. public static void Init(string fontFile = null) Parameters fontFile string The font file to use. If null, the embedded default font is loaded from memory and no file is written to disk. IsKeyPressed(string) Checks if a specific keyboard key is currently pressed. Delegates to IsKeyPressed(string). public bool IsKeyPressed(string key) Parameters key string Key string (W3C KeyboardEvent.key value, e.g. “Alt”, “ArrowLeft”). Returns bool True if the specified key is pressed; otherwise, false. IsMouseButtonPressed(long) Checks if a specific mouse button is currently pressed. Delegates to IsMouseButtonPressed(long). public bool IsMouseButtonPressed(long mouseButton) Parameters mouseButton long The mouse button to check, typically a value from the HiMouseButton enumeration. Returns bool True if the specified mouse button is pressed; otherwise, false. KeyDown(string) Key down. This function is typically called in the GUI implementation for keyboard interaction. public void KeyDown(string key) Parameters key string Key string (W3C KeyboardEvent.key value, e.g. “Alt”, “ArrowLeft”, “a”). KeyDownTransform(string, key_table__transform_view_by_key_pressing_t) Transform SketchView by key. Home, F1, F2, F3, F4 call SetViewToHomeView(), SetViewToFrontView(), SetViewToRightView(), SetViewToTopView(), SetViewToIsometricView() respectively. PageDown and PageUp scale the SketchView. Left, Right, Down, Up translate the SketchView; Press Shift make these keys to rotate the SketchView. public void KeyDownTransform(string key, key_table__transform_view_by_key_pressing_t table) Parameters key string The key that was pressed, typically a value from the HiKey enumeration. table key_table__transform_view_by_key_pressing_t A table defining which keys trigger different transformation operations. Remarks This method is typically called from key down event handlers in the GUI implementation. KeyUp(string) Key up. This function is typically called in the GUI implementation for keyboard interaction. public void KeyUp(string key) Parameters key string Key string (W3C KeyboardEvent.key value). LockGlContext() Lock a opengl context. The function is only used for native OpenGL rendering. After lock the gl context, It should be unlock by UnlockGlContext(nint). public static nint LockGlContext() Returns nint Remarks If any other lock requires LockGlContext, the lock should better set inside LockGlContext. or it is easy to occur race condition. see design pattern of “Solid” class for reference. MouseButtonDown(long) Mouse button down. This function is typically called in the GUI implementation for mouse interaction. public void MouseButtonDown(long button) Parameters button long button MouseButtonUp(long) Mouse button up. This function is typically called in the GUI implementation for mouse interaction. public void MouseButtonUp(long button) Parameters button long button MouseDragTransform(int, int, mouse_button_table__transform_view_by_mouse_drag_t) Transform the view by mouse drag. If drag by left mouse button, Translate(double, double) is performed; If drag by right mouse button, Rotate(double, double) is performed. public void MouseDragTransform(int x, int y, mouse_button_table__transform_view_by_mouse_drag_t mouse_button_table) Parameters x int The current x-coordinate of the mouse cursor. y int The current y-coordinate of the mouse cursor. mouse_button_table mouse_button_table__transform_view_by_mouse_drag_t A table defining which mouse buttons trigger different transformation operations. Remarks The mouse_button_table__transform_view_by_mouse_drag_t structure allows you to configure which mouse buttons perform which transformations: var buttonTable = new mouse_button_table__transform_view_by_mouse_drag_t { LEFT_BUTTON = (long)HiMouseButton.Left, // For translation RIGHT_BUTTON = (long)HiMouseButton.Right // For rotation }; This method is typically called from mouse move event handlers when buttons are pressed. MouseLeave() The cursor left the canvas, e.g. onto an element laid over it. The next pick pass sends Hi.Disp.PickEvent Mouse_Exited to the hovered pickable, if any; the cursor position and the drag state are untouched, so a drag that returns to the canvas continues normally. public void MouseLeave() MouseMove(int, int) Mouse move. This function is typically called in the GUI implementation for mouse interaction. public void MouseMove(int x, int y) Parameters x int cursor X position y int cursor Y position MouseWheel(int, int) Mouse wheel move. This function is typically called in the GUI implementation for mouse interaction. public void MouseWheel(int deltaX, int deltaY) Parameters deltaX int mouse wheel delta X deltaY int mouse wheel delta Y. The traditional mouse wheel. MouseWheelTransform(int, int, double) Scale SketchView by mouse wheel. public void MouseWheelTransform(int deltaX, int deltaY, double zooming_ratio = 0.2) Parameters deltaX int mouse wheel delta X deltaY int mouse wheel delta Y. The traditional mouse wheel. zooming_ratio double The ratio used for zooming. Default is 0.2. Resize(int, int) Resize the opengl context. public void Resize(int w, int h) Parameters w int width of the viewport h int height of the viewport Rotate(double, double) Rotate the SketchView. Usually used by mouse drag on window. The rotation axis is along (delta_y, 0, delta_x). The rotation rad is 5 * Math.Sqrt(delta_y * delta_y + delta_x * delta_x) / window_height. public void Rotate(double delta_x, double delta_y) Parameters delta_x double delta x in window coordinate delta_y double delta y in window coordinate RotateAndScaleByTouchPad(Vec2d, Vec2d, Vec2d, Vec2d) Rotate and scale the SketchView based on touch pad gestures. public void RotateAndScaleByTouchPad(Vec2d prePosA, Vec2d curPosA, Vec2d prePosB, Vec2d curPosB) Parameters prePosA Vec2d The previous position of the first touch point. curPosA Vec2d The current position of the first touch point. prePosB Vec2d The previous position of the second touch point. curPosB Vec2d The current position of the second touch point. Remarks The method detects two types of gestures: Pinch gesture: When the distance between touch points changes, it triggers zooming via MouseWheelTransform(int, int, double) Rotation/Pan gesture: When touch points move together, it triggers rotation via Rotate(double, double) This method is typically used to implement touchpad or multi-touch gestures in custom UI implementations. RotateWithoutHeightAdjustment(double, double) Rotate the SketchView. Usually used by keyboard command. The rotation axis is along (delta_y, 0, delta_x). The rotation rad is Math.ToRad(Math.Sqrt(delta_y * delta_y + delta_x * delta_x)). public void RotateWithoutHeightAdjustment(double delta_x, double delta_y) Parameters delta_x double delta x in window coordinate delta_y double delta y in window coordinate SetViewToFrontView() Set the SketchView to front view. public void SetViewToFrontView() SetViewToHomeView() Set the SketchView to home view(front view). This is the same as SetViewToFrontView(). public void SetViewToHomeView() SetViewToIsometricView() Set the SketchView to isometric view. public void SetViewToIsometricView() SetViewToRightView() Set the SketchView to side view. public void SetViewToRightView() SetViewToTopView() Set the SketchView to top view. public void SetViewToTopView() Snapshot(string) Snapshot to BMP file with current canvas size. public void Snapshot(string filePath) Parameters filePath string Snapshot(string, int, int) Snapshot to BMP file. public void Snapshot(string filePath, int panelWidth, int panelHeight) Parameters filePath string panelWidth int panelHeight int Start(int, int) Start a thread of keeping Swapping buffers of OpenGL context. If the thread has running, this function does nothing. public void Start(int panelWidth, int panelHeight) Parameters panelWidth int panel width panelHeight int panel height Terminate() Terminate the opengl context swapping buffers thread from Start(int, int). If the thread has not running, this function does nothing. public void Terminate() TouchDown(int, int, int) Tracks a new touch point in the DispEngine's touch gesture system. public void TouchDown(int touchId, int x, int y) Parameters touchId int A unique identifier for the touch point. x int The x-coordinate of the touch point in screen coordinates. y int The y-coordinate of the touch point in screen coordinates. Remarks When a touch point is added, the method: Stores the touch point in the internal tracking dictionary If this is the first touch point, simulates a mouse move and left button press TouchMove(int, int, int) Updates the position of an existing touch point. public void TouchMove(int touchId, int x, int y) Parameters touchId int The unique identifier of the touch point to update. x int The new x-coordinate of the touch point in screen coordinates. y int The new y-coordinate of the touch point in screen coordinates. Remarks The method handles different gestures based on the number of active touch points: Single touch: Performs panning (translation) like mouse dragging Two touches: Performs pinch-to-zoom and rotation gestures TouchUp(int) Removes a touch point from tracking when the touch is released. public void TouchUp(int touchId) Parameters touchId int The unique identifier of the touch point to remove. Remarks When a touch point is released, the method: Removes the touch point from internal tracking dictionaries If all touch points are released, simulates a mouse button release If transitioning from multi-touch to single-touch, updates the mouse position to prevent “teleportation” Translate(double, double) Translate the SketchView. Usually used by mouse drag on window. The translation is (delta_x * 2.0 / h, 0, -delta_y* 2.0 / h). Where h is window height. public void Translate(double delta_x, double delta_y) Parameters delta_x double delta x in window coordinate delta_y double delta y in window coordinate TurnBackView() Rotate view 180 degrees around Z axis to switch to back view. public void TurnBackView() UnlockGlContext(nint) Unlock opengl context. The function is only used for native OpenGL rendering. The function unlock the opengl context for LockGlContext(). public static void UnlockGlContext(nint disp_torch_p) Parameters disp_torch_p nint Events FinishingDisp Event at the begining of FinishDisp() public static event Action FinishingDisp Event Type Action FrameReady Triggered on the render thread after every frame whose pixels or pin table changed. Handlers must not touch the engine's GL state and must not block. public event DispEngine.FrameReadyDelegate FrameReady Event Type DispEngine.FrameReadyDelegate" }, "api/Hi.Disp.DispEngineConfig.html": { "href": "api/Hi.Disp.DispEngineConfig.html", @@ -1724,6 +1724,11 @@ "title": "Namespace Hi.Disp.Flag | HiAPI-C# 2025", "summary": "Namespace Hi.Disp.Flag Classes ColorScaleBar ColorScaleBar. For Covering mode. CoordinateDrawing Draw a Cartesian Coordinate. CubicalFlagDrawing A drawing class for cubical flag visualization. DimensionBar DimensionBar. For Covering mode. DispCoverUtil Utility class for display covering functionality." }, + "api/Hi.Disp.FramePins.html": { + "href": "api/Hi.Disp.FramePins.html", + "title": "Class FramePins | HiAPI-C# 2025", + "summary": "Class FramePins Namespace Hi.Disp Assembly HiDisp.dll The pin table of one rendered frame, handed to FrameReady together with the pixels. Records are sorted by name and every displayed pin is listed, visible or not; filter with Visible. public sealed class FramePins Inheritance object FramePins Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties ByName Records keyed by name (names are unique within a frame). public IReadOnlyDictionary ByName { get; } Property Value IReadOnlyDictionary Empty The table of a frame that carried no pins. PixelsChanged is true. public static FramePins Empty { get; } Property Value FramePins FrameSerial Increments once per transported frame of the engine. public long FrameSerial { get; } Property Value long Height Frame height in pixels. public int Height { get; } Property Value int Pins All records of the frame, sorted by name. public IReadOnlyList Pins { get; } Property Value IReadOnlyList PinsChanged The pin table differs from the previously transported frame. public bool PinsChanged { get; } Property Value bool PixelsChanged The pixels differ from the previously transported frame. public bool PixelsChanged { get; } Property Value bool ProjDepth Projection depth D of the engine: one pixel unit of z is 1/D of window depth. public double ProjDepth { get; } Property Value double Visible The records whose anchor is on the canvas and not occluded. public IEnumerable Visible { get; } Property Value IEnumerable Width Frame width in pixels. public int Width { get; } Property Value int" + }, "api/Hi.Disp.FuncDisplayee.html": { "href": "api/Hi.Disp.FuncDisplayee.html", "title": "Class FuncDisplayee | HiAPI-C# 2025", @@ -1774,6 +1779,21 @@ "title": "Class Pickable | HiAPI-C# 2025", "summary": "Class Pickable Namespace Hi.Disp Assembly HiDisp.dll Picking event handler for rendering. Note that it has to be disposed manually or the object occurs memory leak. public class Pickable : IGetPickable, IDisposable Inheritance object Pickable Implements IGetPickable IDisposable Derived CbtrPickable ShowEventPickable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors Pickable() Ctor. public Pickable() Fields mark Internal only. protected picking_mark_t* mark Field Value picking_mark_t* Properties Pickables public static ConcurrentDictionary Pickables { get; } Property Value ConcurrentDictionary Remarks Design Concern: Substitude of ConcurrentSet. PickingID ID of picking event. public int PickingID { get; } Property Value int Methods Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() Dispose(bool) protected virtual void Dispose(bool disposing) Parameters disposing bool ~Pickable() protected ~Pickable() GetPickable() Get Pickable public Pickable GetPickable() Returns Pickable pickable OnKeyDown(key_event_t, DispEngine) Behavior on key down. public virtual void OnKeyDown(key_event_t e, DispEngine dispEngine) Parameters e key_event_t event dispEngine DispEngine display engine OnKeyUp(key_event_t, DispEngine) Behavior on key up public virtual void OnKeyUp(key_event_t e, DispEngine dispEngine) Parameters e key_event_t event dispEngine DispEngine display engine OnMouseDown(mouse_button_event_t, DispEngine) Behavior on mouse down public virtual void OnMouseDown(mouse_button_event_t e, DispEngine dispEngine) Parameters e mouse_button_event_t event dispEngine DispEngine display engine OnMouseEnter(ui_event_type, DispEngine) Behavior on mouse enter public virtual void OnMouseEnter(ui_event_type e, DispEngine dispEngine) Parameters e ui_event_type event type dispEngine DispEngine display engine OnMouseLeave(ui_event_type, DispEngine) Behavior on mouse leave public virtual void OnMouseLeave(ui_event_type e, DispEngine dispEngine) Parameters e ui_event_type event type dispEngine DispEngine display engine OnMouseMove(mouse_move_event_t, DispEngine) Behavior on mouse move public virtual void OnMouseMove(mouse_move_event_t e, DispEngine dispEngine) Parameters e mouse_move_event_t event dispEngine DispEngine display engine OnMouseUp(mouse_button_event_t, DispEngine) Behavior on mouse up public virtual void OnMouseUp(mouse_button_event_t e, DispEngine dispEngine) Parameters e mouse_button_event_t event dispEngine DispEngine display engine OnMouseWheel(mouse_wheel_event_t, DispEngine) Behavior on mouse wheel public virtual void OnMouseWheel(mouse_wheel_event_t e, DispEngine dispEngine) Parameters e mouse_wheel_event_t event dispEngine DispEngine display engine" }, + "api/Hi.Disp.PinDrawing.html": { + "href": "api/Hi.Disp.PinDrawing.html", + "title": "Class PinDrawing | HiAPI-C# 2025", + "summary": "Class PinDrawing Namespace Hi.Disp Assembly HiDisp.dll A named, scale-less anchor. Displaying it draws nothing; the engine reports where the anchor landed in each frame, its depth and whether scene geometry hides it, through FrameReady as a PinRecord of the same name. Use it to place external UI (an HTML element, say) over a 3D point of the canvas. public sealed class PinDrawing : IDisplayee, IExpandToBox3d, IDisposable Inheritance object PinDrawing Implements IDisplayee IExpandToBox3d IDisposable Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.ReferenceEquals(object, object) object.ToString() Extension Methods DispUtil.Display(IDisplayee, Bind, Mat4d) DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Remarks The wrapper owns no GL object and has no thread affinity: it may be created, displayed and disposed from any thread. Names must be unique within a frame (prefix them by owner); they are UTF-8 and truncated to 63 bytes. Pins displayed while a picking id is set on the Bind carry that id in their record. Constructors PinDrawing(string) Constructor. public PinDrawing(string name) Parameters name string pin name; unique within a frame Properties IsAlwaysOnTop Display the anchor as never occluded by geometry: the record is on-canvas or not, no depth probe. Set it for a pin paired with an always-on-top StringDrawing at the same point, otherwise the label's own rectangle hides the pin. public bool IsAlwaysOnTop { get; set; } Property Value bool Name The pin name as given to the constructor (the record carries at most 63 UTF-8 bytes of it). public string Name { get; } Property Value string ProbeBiasPx Occlusion bias in pixel units of depth: geometry closer to the viewer than the anchor by less than this does not count as hiding it, so an anchor placed on a surface stays visible. The engine also applies a floor of a few depth-buffer LSB. public double ProbeBiasPx { get; set; } Property Value double Methods Display(Bind) Display function called in DispEngine rendering loop. public void Display(Bind bind) Parameters bind Bind Bind with DispEngine. See Bind. Display(Bind, Vec3d) Display the anchor at p under the current model matrix. public void Display(Bind bind, Vec3d p) Parameters bind Bind bind p Vec3d anchor position Dispose() Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. public void Dispose() ExpandToBox3d(Box3d) Expands the destination box. This function is usually used to compute the bounding box of elements. public void ExpandToBox3d(Box3d dst) Parameters dst Box3d Destination box ~PinDrawing() protected ~PinDrawing()" + }, + "api/Hi.Disp.PinFlags.html": { + "href": "api/Hi.Disp.PinFlags.html", + "title": "Enum PinFlags | HiAPI-C# 2025", + "summary": "Enum PinFlags Namespace Hi.Disp Assembly HiDisp.dll Flag bits of a PinRecord. [Flags] public enum PinFlags Extension Methods InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MaskUtil.GetMaskedValue(T, T, bool) MaskUtil.SetMask(ref T, T, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields AlwaysOnTop = 1 The pin was displayed always-on-top: never occluded by geometry, so no depth probe. DuplicateNameDropped = 16 Another pin of the same name was dropped this frame; this one survived. None = 0 No flag. Occluded = 4 Scene geometry is nearer than the anchor at its pixel (beyond the probe bias). OcclusionTested = 8 The depth probe ran for this pin. OnCanvas = 2 The anchor lies inside the canvas and inside the depth range." + }, + "api/Hi.Disp.PinRecord.html": { + "href": "api/Hi.Disp.PinRecord.html", + "title": "Struct PinRecord | HiAPI-C# 2025", + "summary": "Struct PinRecord Namespace Hi.Disp Assembly HiDisp.dll One named anchor of a rendered frame: where it landed on the canvas, how deep, and whether it is visible. Positions are canvas pixels with a top-left origin, y down; they may lie outside the canvas. public readonly record struct PinRecord : IEquatable Implements IEquatable Inherited Members ValueType.Equals(object) ValueType.GetHashCode() ValueType.ToString() object.Equals(object, object) object.GetType() object.ReferenceEquals(object, object) Extension Methods InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) MaskUtil.GetMaskedValue(T, T, bool) MaskUtil.SetMask(ref T, T, bool) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Constructors PinRecord(string, double, double, double, int, PinFlags) One named anchor of a rendered frame: where it landed on the canvas, how deep, and whether it is visible. Positions are canvas pixels with a top-left origin, y down; they may lie outside the canvas. public PinRecord(string Name, double X, double Y, double Depth, int PickID, PinFlags Flags) Parameters Name string The pin name given to PinDrawing. X double Anchor x in canvas pixels. Y double Anchor y in canvas pixels, y down. Depth double GL window depth clamped to [0, 1]; 0 is nearest. Comparable within one engine only. PickID int The picking id current when the pin was displayed. Flags PinFlags Flag bits. Properties AlwaysOnTop The pin was displayed always-on-top. public bool AlwaysOnTop { get; } Property Value bool Depth GL window depth clamped to [0, 1]; 0 is nearest. Comparable within one engine only. public double Depth { get; init; } Property Value double Flags Flag bits. public PinFlags Flags { get; init; } Property Value PinFlags IsVisible On the canvas and not occluded. public bool IsVisible { get; } Property Value bool Name The pin name given to PinDrawing. public string Name { get; init; } Property Value string Occluded Scene geometry hides the anchor. public bool Occluded { get; } Property Value bool OnCanvas The anchor lies inside the canvas. public bool OnCanvas { get; } Property Value bool PickID The picking id current when the pin was displayed. public int PickID { get; init; } Property Value int X Anchor x in canvas pixels. public double X { get; init; } Property Value double Y Anchor y in canvas pixels, y down. public double Y { get; init; } Property Value double" + }, "api/Hi.Disp.PopModelMat.html": { "href": "api/Hi.Disp.PopModelMat.html", "title": "Class PopModelMat | HiAPI-C# 2025", @@ -1867,7 +1887,7 @@ "api/Hi.Disp.html": { "href": "api/Hi.Disp.html", "title": "Namespace Hi.Disp | HiAPI-C# 2025", - "summary": "Namespace Hi.Disp Classes Bind Runtime rendering data for each iteration in rendering loop. It manipulates geometry transformation, such as moving, rotatingand scaling. It also deal with color and picking. A bind_t object is generated by rendering in the every beginning of each rendering iteration. Box3dDispUtil Utility and Extension of Box3d. DelegateFuncDisplayee A displayee implementation that delegates display functionality to a function. DispEngine HiAPI display engine. DispEngineConfig Configuration class for display engine. DispFrameUtil Utility class for display frame management. DispList A combination of IDisplayee and SynList. DispUtil Display Utility Drawing The most efficient elemental 3D rendering unit. FuncDisplayee A displayee implementation that delegates display functionality to function delegates. GL Native opengl functions wrapper. MatStack Stack-based Matrix. MatStack.ItemDisposable A disposable class that manages push and pop operations on a matrix stack. Pickable Picking event handler for rendering. Note that it has to be disposed manually or the object occurs memory leak. PopModelMat Call Pop() for Hi.Disp.Bind.modelMatStack in Display(Bind). This function is only for test purpose. Since the ExpandToBox3d(Box3d) just expand the translation part of the mat to the target box. This function should be use with PushModelMat. PushModelMat Call Push() for Hi.Disp.Bind.modelMatStack in Display(Bind). This function is only for test purpose. Since the ExpandToBox3d(Box3d) just expand the translation part of the mat to the target box. This function should be use with PopModelMat. Segment3dDispUtil Utilities for converting geometry segments to renderable drawings. ShowEventPickable Show pick events in console. StringDrawing An IDisplayee to draw string. Multi-line text is supported: ‘\\n’ starts a new line. Tri3dDispUtil Utility and Extension of Tri3d. Vec3dDispUtil Utility and Extension of Vec3d. WrappedDisplayee A wrapper class for IDisplayee that allows customizing display and bounding box behavior. Interfaces IDisplayee An object which can be displayed in DispEngine. IGetDispEngine Interface fo getting DispEngine. IGetPickable Get Pickable interface. IGlContextDirver Bridge of Native OpenGL Context. Enums MvpBoxRelation Relation between mvpBox and an AABB Stamp Data scope of the double array for Drawing. Delegates Box3dDispUtil.BoxableExpandToBox3dDel Delegate for expanding a native boxable object to a box3d. DispEngine.ImageRequestedDelegate For ImageRequestAfterBufferSwapped." + "summary": "Namespace Hi.Disp Classes Bind Runtime rendering data for each iteration in rendering loop. It manipulates geometry transformation, such as moving, rotatingand scaling. It also deal with color and picking. A bind_t object is generated by rendering in the every beginning of each rendering iteration. Box3dDispUtil Utility and Extension of Box3d. DelegateFuncDisplayee A displayee implementation that delegates display functionality to a function. DispEngine HiAPI display engine. DispEngineConfig Configuration class for display engine. DispFrameUtil Utility class for display frame management. DispList A combination of IDisplayee and SynList. DispUtil Display Utility Drawing The most efficient elemental 3D rendering unit. FramePins The pin table of one rendered frame, handed to FrameReady together with the pixels. Records are sorted by name and every displayed pin is listed, visible or not; filter with Visible. FuncDisplayee A displayee implementation that delegates display functionality to function delegates. GL Native opengl functions wrapper. MatStack Stack-based Matrix. MatStack.ItemDisposable A disposable class that manages push and pop operations on a matrix stack. Pickable Picking event handler for rendering. Note that it has to be disposed manually or the object occurs memory leak. PinDrawing A named, scale-less anchor. Displaying it draws nothing; the engine reports where the anchor landed in each frame, its depth and whether scene geometry hides it, through FrameReady as a PinRecord of the same name. Use it to place external UI (an HTML element, say) over a 3D point of the canvas. PopModelMat Call Pop() for Hi.Disp.Bind.modelMatStack in Display(Bind). This function is only for test purpose. Since the ExpandToBox3d(Box3d) just expand the translation part of the mat to the target box. This function should be use with PushModelMat. PushModelMat Call Push() for Hi.Disp.Bind.modelMatStack in Display(Bind). This function is only for test purpose. Since the ExpandToBox3d(Box3d) just expand the translation part of the mat to the target box. This function should be use with PopModelMat. Segment3dDispUtil Utilities for converting geometry segments to renderable drawings. ShowEventPickable Show pick events in console. StringDrawing An IDisplayee to draw string. Multi-line text is supported: ‘\\n’ starts a new line. Tri3dDispUtil Utility and Extension of Tri3d. Vec3dDispUtil Utility and Extension of Vec3d. WrappedDisplayee A wrapper class for IDisplayee that allows customizing display and bounding box behavior. Structs PinRecord One named anchor of a rendered frame: where it landed on the canvas, how deep, and whether it is visible. Positions are canvas pixels with a top-left origin, y down; they may lie outside the canvas. Interfaces IDisplayee An object which can be displayed in DispEngine. IGetDispEngine Interface fo getting DispEngine. IGetPickable Get Pickable interface. IGlContextDirver Bridge of Native OpenGL Context. Enums MvpBoxRelation Relation between mvpBox and an AABB PinFlags Flag bits of a PinRecord. Stamp Data scope of the double array for Drawing. Delegates Box3dDispUtil.BoxableExpandToBox3dDel Delegate for expanding a native boxable object to a box3d. DispEngine.FrameReadyDelegate For FrameReady." }, "api/Hi.Fanuc.FanucVarTable.html": { "href": "api/Hi.Fanuc.FanucVarTable.html", @@ -5067,7 +5087,7 @@ "api/Hi.NcParsers.Keywords.ICompoundMotionDef.html": { "href": "api/Hi.NcParsers.Keywords.ICompoundMotionDef.html", "title": "Interface ICompoundMotionDef | HiAPI-C# 2025", - "summary": "Interface ICompoundMotionDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Compound motion section definition for commands that produce multiple sub-operations (G28, G53.1, G81, G82, etc.). Contains a ItemsKey array resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil. Item types (discriminated by key presence): Hi.Motion — rapid/feed linear motion (IMotionEventDef + IMachineCoordinateStateDef) Dwell — pause (Time in seconds) SpindleControl — spindle direction change (Direction) SpindleOrientation — oriented spindle stop (OSS) (Angle_deg) public interface ICompoundMotionDef Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Term CNC term that triggered this compound motion (e.g., “G28”, “G81”). string Term { get; set; } Property Value string" + "summary": "Interface ICompoundMotionDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Compound motion section definition for commands that produce multiple sub-operations (G28, G53.1, G81, G82, etc.). Contains a ItemsKey array resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil. Item types (discriminated by key presence): Hi.Motion — rapid/feed linear motion (IMotionEventDef + IMachineCoordinateStateDef; an item's MachineCoordinateState may carry A/B/C — G28 / tool-change stages write them, and on a canned-cycle block that spoke a rotary word (RotaryWords) the first motion item carries the block's root ABC — in which case the semantic emits the 6-axis contour act) Dwell — pause (Time in seconds) SpindleControl — spindle direction change (Direction) SpindleOrientation — oriented spindle stop (OSS) (Angle_deg) public interface ICompoundMotionDef Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Properties Term CNC term that triggered this compound motion (e.g., “G28”, “G81”). string Term { get; set; } Property Value string" }, "api/Hi.NcParsers.Keywords.ICoolantDef.html": { "href": "api/Hi.NcParsers.Keywords.ICoolantDef.html", @@ -5102,7 +5122,7 @@ "api/Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html": { "href": "api/Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html", "title": "Interface IMachineCoordinateStateDef | HiAPI-C# 2025", - "summary": "Interface IMachineCoordinateStateDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Modal machine-coordinate state — absolute six-axis machine position after the block has executed. Written on every block by motion-related LogicSyntaxs (McAbcSyntax, McAbcXyzFallbackSyntax, McXyzSyntax, MachineCoordSelectSyntax, G53p1RotaryPositionSyntax, ReferenceReturnSyntax); seeded on the init block by HomeMcInitializer; carried across non-motion blocks — and per-key completed on partially-written blocks (an XYZ-only motion block receives the carried modal rotary values) — by ModalCarrySyntax. Only configured axes appear as keys (X/Y/Z/A/B/C). Non-existent axes (e.g., A/B/C on a 3-axis machine) are omitted rather than written as NaN sentinels. After the PostLogic carry the section is a MODAL record: key presence means \"state known\", never \"this block commanded the axis\". Consumers needing \"commanded\" must read the block's Parsing words or compare values against the previous block (see LinearMotionUtil.HasRotaryMotion). The only presence-as-commanded carve-out is CompoundMotion.Items[*] item-level sections, which the carry never touches. public interface IMachineCoordinateStateDef Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples \"MachineCoordinateState\": { \"X\": 100.0, \"Y\": 50.0, \"Z\": -20.0 } \"MachineCoordinateState\": { \"X\": 100.0, \"Y\": 50.0, \"Z\": -20.0, \"A\": 0.0, \"B\": 30.0 } Properties MachineCoordinateState JSON object with per-axis absolute machine coordinate. Configured axes are present; unconfigured axes are omitted. JsonObject MachineCoordinateState { get; set; } Property Value JsonObject" + "summary": "Interface IMachineCoordinateStateDef Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Modal machine-coordinate state — absolute six-axis machine position after the block has executed. Written on every block by motion-related LogicSyntaxs (McAbcSyntax, McAbcXyzFallbackSyntax, McXyzSyntax, MachineCoordSelectSyntax, G53p1RotaryPositionSyntax, ReferenceReturnSyntax); seeded on the init block by HomeMcInitializer; carried across non-motion blocks — and per-key completed on partially-written blocks (an XYZ-only motion block receives the carried modal rotary values) — by ModalCarrySyntax. Only configured axes appear as keys (X/Y/Z/A/B/C). Non-existent axes (e.g., A/B/C on a 3-axis machine) are omitted rather than written as NaN sentinels. After the PostLogic carry the section is a MODAL record: key presence means \"state known\", never \"this block commanded the axis\". Consumers needing \"commanded\" must read the block's Parsing words, the one-shot RotaryWords record (the rotary words this block itself spoke, written by McAbcSyntax), or compare values against the previous block (see LinearMotionUtil.HasRotaryMotion). The only presence-as-commanded carve-out is CompoundMotion.Items[*] item-level sections, which the carry never touches. public interface IMachineCoordinateStateDef Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples \"MachineCoordinateState\": { \"X\": 100.0, \"Y\": 50.0, \"Z\": -20.0 } \"MachineCoordinateState\": { \"X\": 100.0, \"Y\": 50.0, \"Z\": -20.0, \"A\": 0.0, \"B\": 30.0 } Properties MachineCoordinateState JSON object with per-axis absolute machine coordinate. Configured axes are present; unconfigured axes are omitted. JsonObject MachineCoordinateState { get; set; } Property Value JsonObject" }, "api/Hi.NcParsers.Keywords.IMotionEventDef.html": { "href": "api/Hi.NcParsers.Keywords.IMotionEventDef.html", @@ -5269,6 +5289,11 @@ "title": "Class RadiusCompensation | HiAPI-C# 2025", "summary": "Class RadiusCompensation Namespace Hi.NcParsers.Keywords Assembly HiMech.dll Section key holder + concrete implementation for IRadiusCompensationDef. public class RadiusCompensation : IRadiusCompensationDef Inheritance object RadiusCompensation Implements IRadiusCompensationDef Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Fields SideLeft Left of programmed path (G41 / Heidenhain RL). public const string SideLeft = \"Left\" Field Value string SideNone No active compensation (G40 / Heidenhain R0). public const string SideNone = \"None\" Field Value string SideRight Right of programmed path (G42 / Heidenhain RR). public const string SideRight = \"Right\" Field Value string Properties OffsetId Offset number (Fanuc D number) selecting the radius in the tool offset table. Modal — preserved across G40 blocks so the next G41/G42 without an explicit D continues to reference the same row, matching real Fanuc/Siemens behaviour. public int OffsetId { get; set; } Property Value int Radius_mm Unsigned compensation radius in mm, looked up from the tool offset table. Real controller tool tables hold the radius as a non-negative geometry value (wear/delta sits in a separate column); this property mirrors that convention. Direction is encoded by Side. Omitted from the JSON section when Side is SideNone. public double Radius_mm { get; set; } Property Value double Side Compensation direction: SideNone, SideLeft, or SideRight. public string Side { get; set; } Property Value string Term CNC term: “G41”, “G42”, or “G40”. public string Term { get; set; } Property Value string" }, + "api/Hi.NcParsers.Keywords.RotaryWords.html": { + "href": "api/Hi.NcParsers.Keywords.RotaryWords.html", + "title": "Class RotaryWords | HiAPI-C# 2025", + "summary": "Class RotaryWords Namespace Hi.NcParsers.Keywords Assembly HiMech.dll One-shot block-root record of the rotary axis words the block itself commanded — keyed by axis name (A/B/C), valued with the word as programmed: degrees for a plain word, the signed delta for a per-word incremental word (Siemens IC(), klartext IC+), the indexing position number for a coded-position word (CAC()/CIC()/…). The resolved absolute angle lives in MachineCoordinateState; this section only says which rotary axes this block spoke. Written by McAbcSyntax when it consumes A/B/C from Parsing into MachineCoordinateState — and only for axes the IMachineAxisConfig declares rotary. After the PostLogic carry MachineCoordinateState is a modal record (key presence never means \"commanded\"), so consumers that must know whether this block carried a rotary word read this section instead: CannedCycleResolveSyntax (a rotary-only block under an active canned cycle is a modal repeat — Fanuc's any-axis-word rule, HardNc parity: the table indexes, then the cycle drills again) and WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) (the cycle's pre-positioning item carries the block's MC A/B/C so the physical rotary state matches the root record instead of lagging one block behind). Not listed in any ModalCarrySyntax key set — it never carries to later blocks. public static class RotaryWords Inheritance object RotaryWords Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Examples \"RotaryWords\": { \"C\": 40 }" + }, "api/Hi.NcParsers.Keywords.Siemens.ISiemensPathSmoothingDef.html": { "href": "api/Hi.NcParsers.Keywords.Siemens.ISiemensPathSmoothingDef.html", "title": "Interface ISiemensPathSmoothingDef | HiAPI-C# 2025", @@ -5412,7 +5437,7 @@ "api/Hi.NcParsers.Keywords.html": { "href": "api/Hi.NcParsers.Keywords.html", "title": "Namespace Hi.NcParsers.Keywords | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.Keywords Classes BlockSkip Optional block skip marker extracted from the head of an NC block. ISO 6983 / Fanuc calls this feature Block Delete (BDT switch); Siemens / Syntec / Mazak use the same / prefix with matching behaviour. The section is only present on blocks that carry a / prefix. Whether the block's NC commands are actually skipped at runtime depends on IBlockSkipConfig: Config absent or the Layer bit OFF → the / prefix is consumed, Body is left null, and the rest of the line parses as a regular NC block (comments still take effect). Config present and the Layer bit ON → the rest of the line is moved into Body and cleared from UnparsedText, so downstream parsing syntaxes see nothing and no NC action is emitted. Comment syntaxes run before this one so comments (and any embedded CsScript) still take effect. Not a comment: a comment is static metadata, block skip is a runtime toggle that can change per machine/operator setting. CallFrame One entry in Frames. Holds the caller-side information consumers need to “unwind” or “look back” — currently only the relative file path of the caller, used by SubProgramReturnSyntax on M99 P{seq} to locate the caller's N{seq} block. CallStack JSON-section data shape representing the active call-frame stack on a block — pushed by call-and-inline syntaxes (SubProgramCallSyntax for M98/M198, FanucMacroCallSyntax for G65, and FanucModalMacroSyntax's expansion phase for G66 implicit triggers) and popped by SubProgramReturnSyntax on M99. Every block between push and pop carries the section forward via ModalCarrySyntax; the caller's blocks before push and after pop carry the surrounding stack state (typically empty when running from the main file). The section is wrapped in a JsonObject rather than exposed as a bare JsonArray so it fits ModalCarry's \"deep-clone JsonObject\" carry pattern — the array of frames lives inside Frames. CannedCycle Section key holder + concrete implementation for ICannedCycleDef. Comment Comment extracted from an NC block. Symbol identifies the comment style; Text holds the content without the symbol. Downstream syntaxes (e.g., CsScript) may further trim Text after extracting embedded markers. CompoundMotion Section key holder + concrete implementation for ICompoundMotionDef. Coolant Section key holder + concrete implementation for ICoolantDef. CoordinateOffset Work coordinate offset state written by IsoCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G54, G55, G56, G57, G58, G59, G59.1–G59.9. Siemens: G54–G57 + G505–G599 (extended), G500 to cancel. Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift). CsScript Section-key holder for inline C# scripts attached to an NC block. Carries BeginScript (run before the block's acts) and EndScript (run after). Resolved by CsScriptBeginSemantic and CsScriptEndSemantic. Dwell Section key holder + concrete implementation for IDwellDef. FanucGoto Fanuc Custom Macro B GOTO record. Stamped on the host block by FanucGotoSyntax after the control-flow decision has been made; produced earlier by FanucGotoParsingSyntax as a parsing-stage sub-section (Parsing.FanucGoto) carrying the raw captured fields. Two source forms map to the same shape: GOTO — unconditional jump. Condition is null. IF [] GOTO — conditional jump. Condition holds the expression text from inside the brackets. At parsing time N is a raw token from the source — it may be a literal (\"100\"), a variable reference (\"#1\"), or a bracketed expression (\"#[#2+5]\"). VariableEvaluatorSyntax substitutes a resolved literal back into the same field in the Evaluation bundle; FanucGotoSyntax then int.TryParses the final string to produce an int target. Lifecycle of the condition fields. Condition is written at Parsing time as the raw expression text and substituted in place by VariableEvaluatorSyntax pass-2 — the original text is preserved at Formula.FanucGoto.Condition when substitution succeeds. ConditionEvaluated is the host-level stamp written by FanucGotoSyntax carrying the tri-state truthy outcome. FanucHpcc Section data holder for IFanucHpccDef. FanucIfThen Fanuc Custom Macro B IF [] THEN single-block conditional record. Stamped on the host block by FanucIfThenSyntax after the gate decision; produced earlier by FanucIfThenParsingSyntax as a parsing-stage sub-section (Parsing.FanucIfThen) carrying the raw captured fields plus an internal PendingAssignments sub-object harvested from the body text. Spec: IF [bool-expr] THEN executes only when the condition is truthy. Unlike FanucGoto's conditional form there is no jump — the body affects the current block only, no source splice, no label scan, no iteration watchdog. The most common body shape is a single Custom Macro B assignment (#nnn = ); multiple assignments in one body are also accepted and lifted together. Condition is held as a string at parsing time so VariableEvaluatorSyntax's pass-2 tree walk can substitute it to a numeric JsonValue in place; the FanucIfThenSyntax tail then reads the resolved node polymorphically via the same ReadCondition shape used by FanucGotoSyntax. FanucMacroCall One-shot custom-macro-call record written by FanucMacroCallSyntax. Lives on both the G65 host block (the caller) and every inlined block of the macro body — so a cache-dump reader can land on any block inside the macro and immediately see “this block belongs to a G65 call of FileName with these argument bindings” without back-walking to find the host. Each inlined block additionally carries the resolved Vars.Local #1-#26 bindings derived from Args (see FanucMacroArgumentMap), so LocalVariableLookup resolves macro args in a single-block lookup. Frame isolation is structural: caller blocks never have Vars.Local written, so after the macro body ends, the next caller block reads null for any #1-#26 without any explicit frame marker. FanucModalMacro Modal-macro-call record left by FanucModalMacroSyntax. Carries Fanuc G66 setup state forward block-to-block until cancelled by G67. The section is also written on the G67 block itself (with Term = “G67”) so cache dumps show the cancel edge; subsequent blocks then carry no section at all. Per-block expansion of the modal call into an actual macro inline at every positioning move is not yet implemented — a FanucModalMacro--NotExpanded warning is emitted on the setup block to flag the simulation gap. The setup state itself is captured faithfully so external tooling can detect \"this block sits inside a G66 modal\" via the carried section. FanucPathSmoothing Section data holder for IFanucPathSmoothingDef. FanucProgramNumber Fanuc-family program identifier header that follows a TapeBoundary line — e.g. O1234 or . Wrapper records the surface form so a parsed block can be emitted back to the original notation. FanucWhileDo Fanuc Custom Macro B WHILE/END bounded-loop record. Stamped on the host block by FanucWhileDoSyntax after the control-flow decision has been made; produced earlier by FanucWhileDoParsingSyntax as a parsing-stage sub-section (Parsing.FanucWhileDo) carrying the raw captured fields. Two phrases map to the same shape, distinguished by Term: WHILE [] DO — loop entry. Condition holds the expression text from inside the brackets at parsing time; substituted to a numeric JsonValue by VariableEvaluatorSyntax in place. ConditionEvaluated carries the host-level truthy outcome at stamp time. END — 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). LoopId is the spec-named \"identification number for nesting\" (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 JsonObject keyed by LoopId-as-string, each entry recording the BeginLineNo of the WHILE block that opened that frame). Carried by ModalCarrySyntax as part of its Logic tracked keys (mutated in Evaluation, must reach Logic-stage consumers and downstream blocks unchanged). Feedrate Section key holder + concrete implementation for IFeedrateDef. IndexNote JSON-section data shape pairing a single-character address symbol (e.g. ‘O’, ‘N’) with its numeric index, used to annotate program/sequence numbers on an NC block. IsoLocalCoordinateOffset ISO/Fanuc-family local coordinate offset state (G52) written by IsoLocalCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. G52 X Y Z installs a local coordinate-system shift that stacks on top of the active G54-G59 work offset. The cancel mechanism is to write G52 X0 Y0 Z0 (or hit M30 / reset) — there is no separate G code for \"cancel\". The offset vector is therefore always modal: zero is a valid modal value, not a \"disabled\" state, so the section is recorded on every block. Brand-specific kin: Siemens TRANS/ATRANS (which can also carry rotation/scale/mirror) and Heidenhain TRANS DATUM are handled by their own syntaxes and write to their own sections — they do not share this key, because their data shapes are richer. MachineCoordinateState Section key holder for IMachineCoordinateStateDef. MacroFrame Top-level integer marker stamped onto a SyntaxPiece's JSON to identify which call frame the block belongs to. Brand-agnostic by design — written by FanucMacroCallSyntax today, reusable by any future call-inlining syntax (Fanuc G66 modal expansion, Heidenhain LBL CALL, …) that needs local-variable isolation across call boundaries. Semantics: the value is an opaque id; only equality matters. Two blocks with the same MacroFrame id share a call frame (locals visible across them via single-step carry); two blocks with different ids do not. The id 0 is reserved for the main program frame and is returned by Get(JsonObject) when the field is absent — so a plain caller block needs no stamp and yet compares distinct from any inlined frame. Stored as a top-level JSON int (not an object section) so it stays lightweight on every inlined block. Decoupled from FanucMacroCall: that section is a diagnostic record of the call (what file, what args), while MacroFrame is the purely functional marker the local-variable I/O syntaxes consult. MotionEvent Section key holder + concrete implementation for IMotionEventDef. MotionState Section key holder + concrete implementation for IMotionStateDef. PathSmoothing Section key holder for IPathSmoothingDef. PlaneSelect Section key holder for IPlaneSelectDef. PolarInterpolation Inner-key constants of the PolarInterpolationState section. Positioning Section key holder + concrete implementation for IPositioningDef. PositioningOverride Per-word positioning override — a non-modal block-root section keyed by word name (axis words and the I/J/K interpolation parameters) whose values are Absolute / Incremental / Shortest / PositiveOnly / NegativeOnly, plus the coded-position (indexing axis) family CodedAbsolute / CodedIncremental / CodedShortest / CodedPositiveOnly / CodedNegativeOnly. Overrides the modal G90/G91 Positioning state (and, for I/J/K, the default incremental center reading) for the listed words on this block only. Written by SiemensAcIcSyntax when a word carries one of the Siemens per-word coordinate function wrappers AC() / IC() / DC() / ACP() / ACN() or their coded-position counterparts CAC() / CIC() / CDC() / CACP() / CACN(), and by the Heidenhain L / C / CC / CYCL CALL POS parsers (through HeidenhainIncrementalAxisWordUtil) for the klartext I-prefixed incremental words IX+20 / IC+90 — always Incremental there, keyed by the plain axis letter. Not written for the CYCL DEF 7 datum-shift words: those are increments of the active shift, not of the tool position, and stay inside the cycle's own record. Consumed by IncrementalResolveSyntax (linear axes) and McAbcSyntax (rotary axes) — both treat every non-Incremental value as an absolute write, and both resolve a coded entry's indexing position number through CodedPositionUtil and rewrite the entry to its plain counterpart in place — by McAbcCyclicPathSyntax (the directional window for PositiveOnly / NegativeOnly and the non-modular-axis boundary warning; it never sees a coded value), and by SiemensCircularMotionSyntax (absolute I/J/K center components) — and, ahead of the shared resolve, by two consumers that take the raw word before it can see it: HeidenhainCannedCycleSyntax (CYCL CALL POS words and the M99/M89 root words, resolved against the last programmed position on the spot) and MachineCoordSelectSyntax (a distance in the machine frame); words without an entry keep the default behavior unchanged. The section is not listed in any ModalCarry key set — it never carries to later blocks. ProgramEnd Section key holder for IProgramEndDef. ProgramStop Section key holder + concrete implementation for IProgramStopDef. RadiusCompensation Section key holder + concrete implementation for IRadiusCompensationDef. SpindleControl Section key holder + concrete implementation for ISpindleControlDef. SpindleOrientation Section key holder + concrete implementation for ISpindleOrientationDef. SpindleSpeed Section key holder + concrete implementation for ISpindleSpeedDef. SubProgramCall Subprogram call record left by SubProgramCallSyntax on the M98 / M198 host block and on every inlined body block. The call itself emits no motion act; this section is bookkeeping so cache dumps and diagnostic readers can see \"this block triggered (or sits inside) an inline of program P\". M98 and M198 share the exact same section shape. The difference between them is purely environmental — which folder the resolver looks in (SubProgramFolderConfig.InternalFolder vs ExternalFolder) — and that lives on the dependency, not in this JSON record. SubProgramReturn Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible in cache dumps and surfaces the M99 P{seq} jump decision. TapeBoundary Tape leader / trailer line — the literal % that historically marked the start and end of a punched paper-tape program. ISO-style controllers (Fanuc, Mazak, Syntec, Siemens) all preserve it as a file-level boundary marker. Distinct from a comment: the controller uses it as a tape/file delimiter, not as embedded operator text. TiltTransform Concrete class for ITiltTransformDef section serialization. ToolHeightCompensation Section key holder for IToolHeightCompensationDef. Unit Section key holder + concrete implementation for IUnitDef. Vars JSON section schema for per-block variable storage. Each sub-property names a sub-section that holds a { “#nnn”: value } dictionary keyed by Fanuc-style variable id. The sub-sections partition the variable space by lifetime: Local — #1-#33, scope: macro call frame (pushed/popped by G65 / G66 / M99). Volatile — #100-#499, non-retained common; carries block-to-block, cleared by ProgramEndCleanSyntax on M02 / M30. SystemControl — #3000-#3999, controller-side system variables; offline-only round-trip record (real controller effects such as clock reset / alarm trigger / message pause are not simulated). The property types are JsonObject rather than strongly-typed dictionaries because each sub-section's keys are dynamic Fanuc variable ids (#100, #5001, …) discovered at parse time, not a fixed schema. This class exists solely to give the section name and sub-keys stable nameof() targets — instances are never constructed at runtime. Interfaces IArcMotionDef Arc motion data written by CircularMotionSyntax. Stored under the MotionEvent JSON section alongside IMotionEventDef properties. The arc plane is read from the modal PlaneSelect section via GetPlaneNormalDir(JsonObject) rather than cached on the event — same source of truth as IsoG68RotationSyntax. ICannedCycleDef Canned cycle modal state (Group 09). Captures which cycle is currently active, its return mode (G98/G99), and the resolved absolute parameter set used for modal lookback. Written by CannedCycleResolveSyntax on every block that belongs to the canned-cycle group: cycle code present (G81/G82/G83/G73/G84/G74/G85/G86/G89/G76/G87), modal repeat (cycle still active, only coordinates given), or explicit cancel (G80). Term = \"G80\" is the explicit-cancel sentinel used by FindPreviousActiveCycle(LazyLinkedListNode, string[]) to terminate modal lookback without ambiguity; regular blocks (e.g. G00 X.. Y..) simply omit the section entirely. ICompoundMotionDef Compound motion section definition for commands that produce multiple sub-operations (G28, G53.1, G81, G82, etc.). Contains a ItemsKey array resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil. Item types (discriminated by key presence): Hi.Motion — rapid/feed linear motion (IMotionEventDef + IMachineCoordinateStateDef) Dwell — pause (Time in seconds) SpindleControl — spindle direction change (Direction) SpindleOrientation — oriented spindle stop (OSS) (Angle_deg) ICoolantDef Coolant state (M07 mist / M08 flood / M09 off). Written by CoolantSyntax. Modal — persists until changed. IsOn is the on/off convenience flag (true for M07 and M08, false for M09). Mode carries the abstract kind (Flood / Mist / Off) for consumers that need to distinguish flood vs mist. IDwellDef Dwell/pause section definition for use inside Sequence items. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActDelay. IFanucHpccDef Block-root section recording a consumed bare Fanuc G05 P{n} (HPCC family selection), written by FanucPathSmoothingSyntax. P is a function-selection code — not a quantity, dwell time, or look-ahead block count. P10000 enters high-precision contour control (HPCC: RISC-board multi-block look-ahead, pre-interpolation acceleration/deceleration, curvature-based feed clamping); P0 cancels it. P10001–P10999 call high-speed cycle machining: the control executes cycle data pre-registered in its variable area — real axis motion, so an offline run that ignores the call misses that machining (FanucPathSmoothingSyntax emits a Warning for it). Small P values select the high-speed remote buffer modes (binary DNC transfer; exact semantics vary by model). HPCC itself never alters the programmed coordinates, so P10000/P0 are recognized, intentionally not simulated, safe offline (the SiemensStopreSyntax pattern). Deliberately separate from the modal PathSmoothing section (G05.1, IFanucPathSmoothingDef): this section is block-local like Stopre and is NOT tracked by ModalCarrySyntax — it exists for diagnostics and bidirectional NC-text reconstruction only. IFanucPathSmoothingDef Fanuc-specific path smoothing state written by FanucPathSmoothingSyntax. Extends IPathSmoothingDef with the Fanuc G05.1 R argument (precision / smoothness level number, R1..R10 mapping to controller-internal tuning macro variables). Q is binary in current Fanuc firmware (Q0 disable / Q1 enable), so IsEnabled covers it directly — no raw Q field is stored. JSON section key remains nameof(PathSmoothing) so generic readers (cache dumps, modal carry, UI) can cast to IPathSmoothingDef across all controller brands; brand-specific readers cast to IFanucPathSmoothingDef for the extra fields. IFeedrateDef Feedrate state written by FeedrateSyntax. Property names are used as JSON keys via nameof. ISO standard: F command + G94 (per minute) / G95 (per revolution). Supported by all major CNC brands. IFlagsDef JSON section schema describing the modal/non-modal flags that take effect on an NC block. Each entry in Flags is a brand-specific keyword recognized by the soft-NC runtime. IMachineCoordinateStateDef Modal machine-coordinate state — absolute six-axis machine position after the block has executed. Written on every block by motion-related LogicSyntaxs (McAbcSyntax, McAbcXyzFallbackSyntax, McXyzSyntax, MachineCoordSelectSyntax, G53p1RotaryPositionSyntax, ReferenceReturnSyntax); seeded on the init block by HomeMcInitializer; carried across non-motion blocks — and per-key completed on partially-written blocks (an XYZ-only motion block receives the carried modal rotary values) — by ModalCarrySyntax. Only configured axes appear as keys (X/Y/Z/A/B/C). Non-existent axes (e.g., A/B/C on a 3-axis machine) are omitted rather than written as NaN sentinels. After the PostLogic carry the section is a MODAL record: key presence means \"state known\", never \"this block commanded the axis\". Consumers needing \"commanded\" must read the block's Parsing words or compare values against the previous block (see LinearMotionUtil.HasRotaryMotion). The only presence-as-commanded carve-out is CompoundMotion.Items[*] item-level sections, which the carry never touches. IMotionEventDef One-shot motion event — present on every block whose source programmed a motion command, regardless of whether the resulting displacement is non-zero. A redundant G01 X10 on a block already at X10 still gets a MotionEvent; the motion semantics (McLinearMotionSemantic, McArcMotionSemantic, ClLinearMcMotionSemantic) then early-return on distance <= 0 and emit no IAct. NOT carried forward across blocks. Reason for the \"programmed, not displaced\" definition: Fanuc G66 modal macro fires once per programmed motion command (per Fanuc spec — no distance gate), so FanucModalMacroSyntax.Expansion uses MotionEvent presence as its trigger. Suppressing the section on zero-distance moves would silently change G66 behaviour. The modal sibling MotionState separately latches the Group-01 mode for readers that only need to know \"what G-code is active\". Property names are used as JSON keys via nameof. IMotionStateDef Modal motion state — Group 01 G-code mode (G00 / G01 / G02 / G03 ...). Written on every block by LinearMotionSyntax / CircularMotionSyntax; carried across non-motion blocks by ModalCarrySyntax. Property names are used as JSON keys via nameof. Unlike sibling modal sections (Unit, PlaneSelect, Positioning) which carry both a brand-specific Term and a brand-neutral conventional field, MotionState intentionally keeps only Term: the brand-neutral semantic (\"what kind of motion happened\") lives on the sibling one-shot MotionEvent (Form = McLinear / McArc / ClLinear / ClArc). State here is purely the modal latch of the last Group-01 G-code so downstream FindPrevious* can resume motion-mode bookkeeping. IParsingDef JSON section schema carrying the raw, brand-specific parsing trace for an NC block. The Parsing node holds intermediate parser output used by downstream syntaxes and diagnostics. IPathSmoothingDef Path smoothing state. The base interface is brand-agnostic; controller brands extend it with their own argument fields (e.g. IFanucPathSmoothingDef for Fanuc G05.1 R precision-level). Fanuc-flavour writes are produced by FanucPathSmoothingSyntax. ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable): high-precision contour control / AICC / Nano Smoothing. Controller-internal interpolation black box — simulation records the state but does not alter the tool path. IPlaneSelectDef Active plane selection state written by PlaneSelectSyntax. Property names are used as JSON keys via nameof. ISO: G17/G18/G19. Heidenhain: implicit from L/CC syntax. Term carries the brand-specific G-code; Plane stores the conventional, brand-neutral axis-pair name (XY/ZX/YZ). IPolarInterpolationDef JSON section schemas for Fanuc Polar Coordinate Interpolation (G12.1/G13.1). Property names are used as JSON keys via nameof. PolarInterpolationState is the modal valve: its presence on a block means polar interpolation is active there. It is written by PolarInterpolationSyntax on the G12.1 block and re-materialized onto every following block until a G13.1 block ends the mode (single-step lookback carry, same pattern as PositioningSyntax — not registered on ModalCarrySyntax). ProgramPolarRxcz is the per-block polar position, relative to the G12.1 anchor (InitRxcz). Rxcz axes: X = radius-direction linear axis in mm (the NC word X is a diameter and is halved on parse), Y = hypothetical rotary-substitute axis in mm, Z = real Z in mm. The absolute (rotation-center-origin) position used by the math is InitRxcz + ProgramPolarRxcz, mirroring HardNc PolarEntry.CentralProgramPolarRxcz. IPositioningDef Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental). Written by PositioningSyntax, consumed by IncrementalResolveSyntax, canned cycle syntaxes, and MachineCoordSelectSyntax. Property names are used as JSON keys via nameof. Term is the brand-specific G-code (Fanuc/ISO G90/G91); Mode is the conventional, brand-neutral name (Absolute / Incremental). IProgramEndDef Program end marker (M02/M30). Written by ProgramEndSyntax. Other syntaxes (e.g. IsoLocalCoordinateOffsetSyntax) read this section to reset modal state instead of detecting M30 directly. IProgramStopDef Program-stop marker (M00 unconditional / M01 optional). Written by ProgramStopSyntax on each block that carries an M00/M01 flag. Non-modal: the section appears only on the exact block where the stop code is present. Distinct from IProgramEndDef (M02/M30, end of program). M00 halts execution unconditionally; the operator must press Cycle Start to resume. M01 is an optional stop gated by the operator's \"Optional Stop\" panel switch — ignored when the switch is off. This parsing-layer section records the NC intent; runtime / semantic layers decide whether to actually pause. IProgramXyzDef JSON section schema carrying the program-coordinate position commanded on the current block. Written by ProgramXyzSyntax before the ProgramToMcTransform chain composes it into machine coordinates. IRadiusCompensationDef Radius compensation state written by RadiusCompensationSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G41 (left), G42 (right), G40 (cancel). Heidenhain Klartext maps RL → G41, RR → G42, R0 → G40. When active, the tool path is offset perpendicular to the programmed path by Radius_mm; Side determines left vs right. The root ProgramXyz retains the user-programmed position; MachineCoordinate is overwritten to reflect the compensated path. ISpindleControlDef Spindle control item for use inside ItemsKey arrays. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleDirection. ISpindleOrientationDef Oriented spindle stop item for use inside ItemsKey arrays. Commands the spindle to stop at a specific angular position (OSS). Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleOrientation. ISpindleSpeedDef Spindle speed and direction state written by SpindleSpeedSyntax. Property names are used as JSON keys via nameof. ISO: S command for speed, M03/M04/M05 for direction. Heidenhain: M3/M4/M5. Siemens: M3/M4/M5 or SPOS. Direction is stored as the conventional SpindleDirection enum name (CW/CCW/STOP), not as brand-specific M-codes. ITiltTransformDef Tilt transform state written by tilt transform syntaxes. Property names are used as JSON keys via nameof. Managed commands (ISO/Fanuc): G68 (2D rotation), G68.2 (tilted work plane), G69 (cancel). Siemens equivalent: CYCLE800, ROT/AROT (handled by separate syntax). Heidenhain equivalent: PLANE SPATIAL / PLANE RESET (handled by separate syntax). IToolHeightCompensationDef Tool height compensation state written by ToolHeightOffsetSyntax. Property names are used as JSON keys via nameof. The JSON section can be deserialized to an instance implementing this interface. Managed commands (ISO/Fanuc): G43, G44, G49. Fanuc extension: G43.4 (TCPM — parsed only in Fanuc syntax list). Siemens equivalent: TRAFOOF/TRAORI (handled by separate syntax). Heidenhain equivalent: TOOL CALL / M128/M129 (handled by separate syntax). ITransformationDef Chain of named ProgramXyz → MachineCoordinate transformation entries. Stored as a JsonArray of entries, each with “Source”, “Kind”, and “Mat4d” keys. Each contributing INcSyntax adds or replaces its own entry by source name. GetComposedTransform(JsonObject) composes entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. Kind contour-validity classification. Each entry is either: \"Static\" — the Mat4d is valid for any point along the contour. Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable blocks are all Static. \"Dynamic\" — the Mat4d is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composition still yields a correct endpoint MC, but the matrix is not contour-valid: intermediate CL-point positions cannot be derived by applying it to an interpolated ProgramXyz. The semantic layer (ClLinearMcMotionSemantic) handles per-step IK separately. Use HasDynamicEntry(JsonObject) to detect the presence of any Dynamic entry on this block. IUnitDef Unit-system state (ISO Group 06: G20 inch / G21 metric). Written by UnitModeSyntax. Modal. HiNC's NC pipeline works exclusively in millimetres. G21 is therefore a no-op confirmation of the default; G20 is reported as an Unsupported Error and callers are expected to pre-convert the NC program to metric before loading. IUnparsedTextDef JSON section schema carrying the residual block text that was not consumed by any registered syntax. Used for diagnostics and round-trip preservation." + "summary": "Namespace Hi.NcParsers.Keywords Classes BlockSkip Optional block skip marker extracted from the head of an NC block. ISO 6983 / Fanuc calls this feature Block Delete (BDT switch); Siemens / Syntec / Mazak use the same / prefix with matching behaviour. The section is only present on blocks that carry a / prefix. Whether the block's NC commands are actually skipped at runtime depends on IBlockSkipConfig: Config absent or the Layer bit OFF → the / prefix is consumed, Body is left null, and the rest of the line parses as a regular NC block (comments still take effect). Config present and the Layer bit ON → the rest of the line is moved into Body and cleared from UnparsedText, so downstream parsing syntaxes see nothing and no NC action is emitted. Comment syntaxes run before this one so comments (and any embedded CsScript) still take effect. Not a comment: a comment is static metadata, block skip is a runtime toggle that can change per machine/operator setting. CallFrame One entry in Frames. Holds the caller-side information consumers need to “unwind” or “look back” — currently only the relative file path of the caller, used by SubProgramReturnSyntax on M99 P{seq} to locate the caller's N{seq} block. CallStack JSON-section data shape representing the active call-frame stack on a block — pushed by call-and-inline syntaxes (SubProgramCallSyntax for M98/M198, FanucMacroCallSyntax for G65, and FanucModalMacroSyntax's expansion phase for G66 implicit triggers) and popped by SubProgramReturnSyntax on M99. Every block between push and pop carries the section forward via ModalCarrySyntax; the caller's blocks before push and after pop carry the surrounding stack state (typically empty when running from the main file). The section is wrapped in a JsonObject rather than exposed as a bare JsonArray so it fits ModalCarry's \"deep-clone JsonObject\" carry pattern — the array of frames lives inside Frames. CannedCycle Section key holder + concrete implementation for ICannedCycleDef. Comment Comment extracted from an NC block. Symbol identifies the comment style; Text holds the content without the symbol. Downstream syntaxes (e.g., CsScript) may further trim Text after extracting embedded markers. CompoundMotion Section key holder + concrete implementation for ICompoundMotionDef. Coolant Section key holder + concrete implementation for ICoolantDef. CoordinateOffset Work coordinate offset state written by IsoCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G54, G55, G56, G57, G58, G59, G59.1–G59.9. Siemens: G54–G57 + G505–G599 (extended), G500 to cancel. Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift). CsScript Section-key holder for inline C# scripts attached to an NC block. Carries BeginScript (run before the block's acts) and EndScript (run after). Resolved by CsScriptBeginSemantic and CsScriptEndSemantic. Dwell Section key holder + concrete implementation for IDwellDef. FanucGoto Fanuc Custom Macro B GOTO record. Stamped on the host block by FanucGotoSyntax after the control-flow decision has been made; produced earlier by FanucGotoParsingSyntax as a parsing-stage sub-section (Parsing.FanucGoto) carrying the raw captured fields. Two source forms map to the same shape: GOTO — unconditional jump. Condition is null. IF [] GOTO — conditional jump. Condition holds the expression text from inside the brackets. At parsing time N is a raw token from the source — it may be a literal (\"100\"), a variable reference (\"#1\"), or a bracketed expression (\"#[#2+5]\"). VariableEvaluatorSyntax substitutes a resolved literal back into the same field in the Evaluation bundle; FanucGotoSyntax then int.TryParses the final string to produce an int target. Lifecycle of the condition fields. Condition is written at Parsing time as the raw expression text and substituted in place by VariableEvaluatorSyntax pass-2 — the original text is preserved at Formula.FanucGoto.Condition when substitution succeeds. ConditionEvaluated is the host-level stamp written by FanucGotoSyntax carrying the tri-state truthy outcome. FanucHpcc Section data holder for IFanucHpccDef. FanucIfThen Fanuc Custom Macro B IF [] THEN single-block conditional record. Stamped on the host block by FanucIfThenSyntax after the gate decision; produced earlier by FanucIfThenParsingSyntax as a parsing-stage sub-section (Parsing.FanucIfThen) carrying the raw captured fields plus an internal PendingAssignments sub-object harvested from the body text. Spec: IF [bool-expr] THEN executes only when the condition is truthy. Unlike FanucGoto's conditional form there is no jump — the body affects the current block only, no source splice, no label scan, no iteration watchdog. The most common body shape is a single Custom Macro B assignment (#nnn = ); multiple assignments in one body are also accepted and lifted together. Condition is held as a string at parsing time so VariableEvaluatorSyntax's pass-2 tree walk can substitute it to a numeric JsonValue in place; the FanucIfThenSyntax tail then reads the resolved node polymorphically via the same ReadCondition shape used by FanucGotoSyntax. FanucMacroCall One-shot custom-macro-call record written by FanucMacroCallSyntax. Lives on both the G65 host block (the caller) and every inlined block of the macro body — so a cache-dump reader can land on any block inside the macro and immediately see “this block belongs to a G65 call of FileName with these argument bindings” without back-walking to find the host. Each inlined block additionally carries the resolved Vars.Local #1-#26 bindings derived from Args (see FanucMacroArgumentMap), so LocalVariableLookup resolves macro args in a single-block lookup. Frame isolation is structural: caller blocks never have Vars.Local written, so after the macro body ends, the next caller block reads null for any #1-#26 without any explicit frame marker. FanucModalMacro Modal-macro-call record left by FanucModalMacroSyntax. Carries Fanuc G66 setup state forward block-to-block until cancelled by G67. The section is also written on the G67 block itself (with Term = “G67”) so cache dumps show the cancel edge; subsequent blocks then carry no section at all. Per-block expansion of the modal call into an actual macro inline at every positioning move is not yet implemented — a FanucModalMacro--NotExpanded warning is emitted on the setup block to flag the simulation gap. The setup state itself is captured faithfully so external tooling can detect \"this block sits inside a G66 modal\" via the carried section. FanucPathSmoothing Section data holder for IFanucPathSmoothingDef. FanucProgramNumber Fanuc-family program identifier header that follows a TapeBoundary line — e.g. O1234 or . Wrapper records the surface form so a parsed block can be emitted back to the original notation. FanucWhileDo Fanuc Custom Macro B WHILE/END bounded-loop record. Stamped on the host block by FanucWhileDoSyntax after the control-flow decision has been made; produced earlier by FanucWhileDoParsingSyntax as a parsing-stage sub-section (Parsing.FanucWhileDo) carrying the raw captured fields. Two phrases map to the same shape, distinguished by Term: WHILE [] DO — loop entry. Condition holds the expression text from inside the brackets at parsing time; substituted to a numeric JsonValue by VariableEvaluatorSyntax in place. ConditionEvaluated carries the host-level truthy outcome at stamp time. END — 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). LoopId is the spec-named \"identification number for nesting\" (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 JsonObject keyed by LoopId-as-string, each entry recording the BeginLineNo of the WHILE block that opened that frame). Carried by ModalCarrySyntax as part of its Logic tracked keys (mutated in Evaluation, must reach Logic-stage consumers and downstream blocks unchanged). Feedrate Section key holder + concrete implementation for IFeedrateDef. IndexNote JSON-section data shape pairing a single-character address symbol (e.g. ‘O’, ‘N’) with its numeric index, used to annotate program/sequence numbers on an NC block. IsoLocalCoordinateOffset ISO/Fanuc-family local coordinate offset state (G52) written by IsoLocalCoordinateOffsetSyntax. Property names are used as JSON keys via nameof. G52 X Y Z installs a local coordinate-system shift that stacks on top of the active G54-G59 work offset. The cancel mechanism is to write G52 X0 Y0 Z0 (or hit M30 / reset) — there is no separate G code for \"cancel\". The offset vector is therefore always modal: zero is a valid modal value, not a \"disabled\" state, so the section is recorded on every block. Brand-specific kin: Siemens TRANS/ATRANS (which can also carry rotation/scale/mirror) and Heidenhain TRANS DATUM are handled by their own syntaxes and write to their own sections — they do not share this key, because their data shapes are richer. MachineCoordinateState Section key holder for IMachineCoordinateStateDef. MacroFrame Top-level integer marker stamped onto a SyntaxPiece's JSON to identify which call frame the block belongs to. Brand-agnostic by design — written by FanucMacroCallSyntax today, reusable by any future call-inlining syntax (Fanuc G66 modal expansion, Heidenhain LBL CALL, …) that needs local-variable isolation across call boundaries. Semantics: the value is an opaque id; only equality matters. Two blocks with the same MacroFrame id share a call frame (locals visible across them via single-step carry); two blocks with different ids do not. The id 0 is reserved for the main program frame and is returned by Get(JsonObject) when the field is absent — so a plain caller block needs no stamp and yet compares distinct from any inlined frame. Stored as a top-level JSON int (not an object section) so it stays lightweight on every inlined block. Decoupled from FanucMacroCall: that section is a diagnostic record of the call (what file, what args), while MacroFrame is the purely functional marker the local-variable I/O syntaxes consult. MotionEvent Section key holder + concrete implementation for IMotionEventDef. MotionState Section key holder + concrete implementation for IMotionStateDef. PathSmoothing Section key holder for IPathSmoothingDef. PlaneSelect Section key holder for IPlaneSelectDef. PolarInterpolation Inner-key constants of the PolarInterpolationState section. Positioning Section key holder + concrete implementation for IPositioningDef. PositioningOverride Per-word positioning override — a non-modal block-root section keyed by word name (axis words and the I/J/K interpolation parameters) whose values are Absolute / Incremental / Shortest / PositiveOnly / NegativeOnly, plus the coded-position (indexing axis) family CodedAbsolute / CodedIncremental / CodedShortest / CodedPositiveOnly / CodedNegativeOnly. Overrides the modal G90/G91 Positioning state (and, for I/J/K, the default incremental center reading) for the listed words on this block only. Written by SiemensAcIcSyntax when a word carries one of the Siemens per-word coordinate function wrappers AC() / IC() / DC() / ACP() / ACN() or their coded-position counterparts CAC() / CIC() / CDC() / CACP() / CACN(), and by the Heidenhain L / C / CC / CYCL CALL POS parsers (through HeidenhainIncrementalAxisWordUtil) for the klartext I-prefixed incremental words IX+20 / IC+90 — always Incremental there, keyed by the plain axis letter. Not written for the CYCL DEF 7 datum-shift words: those are increments of the active shift, not of the tool position, and stay inside the cycle's own record. Consumed by IncrementalResolveSyntax (linear axes) and McAbcSyntax (rotary axes) — both treat every non-Incremental value as an absolute write, and both resolve a coded entry's indexing position number through CodedPositionUtil and rewrite the entry to its plain counterpart in place — by McAbcCyclicPathSyntax (the directional window for PositiveOnly / NegativeOnly and the non-modular-axis boundary warning; it never sees a coded value), and by SiemensCircularMotionSyntax (absolute I/J/K center components) — and, ahead of the shared resolve, by two consumers that take the raw word before it can see it: HeidenhainCannedCycleSyntax (CYCL CALL POS words and the M99/M89 root words, resolved against the last programmed position on the spot) and MachineCoordSelectSyntax (a distance in the machine frame); words without an entry keep the default behavior unchanged. The section is not listed in any ModalCarry key set — it never carries to later blocks. ProgramEnd Section key holder for IProgramEndDef. ProgramStop Section key holder + concrete implementation for IProgramStopDef. RadiusCompensation Section key holder + concrete implementation for IRadiusCompensationDef. RotaryWords One-shot block-root record of the rotary axis words the block itself commanded — keyed by axis name (A/B/C), valued with the word as programmed: degrees for a plain word, the signed delta for a per-word incremental word (Siemens IC(), klartext IC+), the indexing position number for a coded-position word (CAC()/CIC()/…). The resolved absolute angle lives in MachineCoordinateState; this section only says which rotary axes this block spoke. Written by McAbcSyntax when it consumes A/B/C from Parsing into MachineCoordinateState — and only for axes the IMachineAxisConfig declares rotary. After the PostLogic carry MachineCoordinateState is a modal record (key presence never means \"commanded\"), so consumers that must know whether this block carried a rotary word read this section instead: CannedCycleResolveSyntax (a rotary-only block under an active canned cycle is a modal repeat — Fanuc's any-axis-word rule, HardNc parity: the table indexes, then the cycle drills again) and WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) (the cycle's pre-positioning item carries the block's MC A/B/C so the physical rotary state matches the root record instead of lagging one block behind). Not listed in any ModalCarrySyntax key set — it never carries to later blocks. SpindleControl Section key holder + concrete implementation for ISpindleControlDef. SpindleOrientation Section key holder + concrete implementation for ISpindleOrientationDef. SpindleSpeed Section key holder + concrete implementation for ISpindleSpeedDef. SubProgramCall Subprogram call record left by SubProgramCallSyntax on the M98 / M198 host block and on every inlined body block. The call itself emits no motion act; this section is bookkeeping so cache dumps and diagnostic readers can see \"this block triggered (or sits inside) an inline of program P\". M98 and M198 share the exact same section shape. The difference between them is purely environmental — which folder the resolver looks in (SubProgramFolderConfig.InternalFolder vs ExternalFolder) — and that lives on the dependency, not in this JSON record. SubProgramReturn Subprogram return record left on the M99 host block by SubProgramReturnSyntax. Return blocks produce no motion acts; this section makes the consumed M99 visible in cache dumps and surfaces the M99 P{seq} jump decision. TapeBoundary Tape leader / trailer line — the literal % that historically marked the start and end of a punched paper-tape program. ISO-style controllers (Fanuc, Mazak, Syntec, Siemens) all preserve it as a file-level boundary marker. Distinct from a comment: the controller uses it as a tape/file delimiter, not as embedded operator text. TiltTransform Concrete class for ITiltTransformDef section serialization. ToolHeightCompensation Section key holder for IToolHeightCompensationDef. Unit Section key holder + concrete implementation for IUnitDef. Vars JSON section schema for per-block variable storage. Each sub-property names a sub-section that holds a { “#nnn”: value } dictionary keyed by Fanuc-style variable id. The sub-sections partition the variable space by lifetime: Local — #1-#33, scope: macro call frame (pushed/popped by G65 / G66 / M99). Volatile — #100-#499, non-retained common; carries block-to-block, cleared by ProgramEndCleanSyntax on M02 / M30. SystemControl — #3000-#3999, controller-side system variables; offline-only round-trip record (real controller effects such as clock reset / alarm trigger / message pause are not simulated). The property types are JsonObject rather than strongly-typed dictionaries because each sub-section's keys are dynamic Fanuc variable ids (#100, #5001, …) discovered at parse time, not a fixed schema. This class exists solely to give the section name and sub-keys stable nameof() targets — instances are never constructed at runtime. Interfaces IArcMotionDef Arc motion data written by CircularMotionSyntax. Stored under the MotionEvent JSON section alongside IMotionEventDef properties. The arc plane is read from the modal PlaneSelect section via GetPlaneNormalDir(JsonObject) rather than cached on the event — same source of truth as IsoG68RotationSyntax. ICannedCycleDef Canned cycle modal state (Group 09). Captures which cycle is currently active, its return mode (G98/G99), and the resolved absolute parameter set used for modal lookback. Written by CannedCycleResolveSyntax on every block that belongs to the canned-cycle group: cycle code present (G81/G82/G83/G73/G84/G74/G85/G86/G89/G76/G87), modal repeat (cycle still active, only coordinates given), or explicit cancel (G80). Term = \"G80\" is the explicit-cancel sentinel used by FindPreviousActiveCycle(LazyLinkedListNode, string[]) to terminate modal lookback without ambiguity; regular blocks (e.g. G00 X.. Y..) simply omit the section entirely. ICompoundMotionDef Compound motion section definition for commands that produce multiple sub-operations (G28, G53.1, G81, G82, etc.). Contains a ItemsKey array resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil. Item types (discriminated by key presence): Hi.Motion — rapid/feed linear motion (IMotionEventDef + IMachineCoordinateStateDef; an item's MachineCoordinateState may carry A/B/C — G28 / tool-change stages write them, and on a canned-cycle block that spoke a rotary word (RotaryWords) the first motion item carries the block's root ABC — in which case the semantic emits the 6-axis contour act) Dwell — pause (Time in seconds) SpindleControl — spindle direction change (Direction) SpindleOrientation — oriented spindle stop (OSS) (Angle_deg) ICoolantDef Coolant state (M07 mist / M08 flood / M09 off). Written by CoolantSyntax. Modal — persists until changed. IsOn is the on/off convenience flag (true for M07 and M08, false for M09). Mode carries the abstract kind (Flood / Mist / Off) for consumers that need to distinguish flood vs mist. IDwellDef Dwell/pause section definition for use inside Sequence items. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActDelay. IFanucHpccDef Block-root section recording a consumed bare Fanuc G05 P{n} (HPCC family selection), written by FanucPathSmoothingSyntax. P is a function-selection code — not a quantity, dwell time, or look-ahead block count. P10000 enters high-precision contour control (HPCC: RISC-board multi-block look-ahead, pre-interpolation acceleration/deceleration, curvature-based feed clamping); P0 cancels it. P10001–P10999 call high-speed cycle machining: the control executes cycle data pre-registered in its variable area — real axis motion, so an offline run that ignores the call misses that machining (FanucPathSmoothingSyntax emits a Warning for it). Small P values select the high-speed remote buffer modes (binary DNC transfer; exact semantics vary by model). HPCC itself never alters the programmed coordinates, so P10000/P0 are recognized, intentionally not simulated, safe offline (the SiemensStopreSyntax pattern). Deliberately separate from the modal PathSmoothing section (G05.1, IFanucPathSmoothingDef): this section is block-local like Stopre and is NOT tracked by ModalCarrySyntax — it exists for diagnostics and bidirectional NC-text reconstruction only. IFanucPathSmoothingDef Fanuc-specific path smoothing state written by FanucPathSmoothingSyntax. Extends IPathSmoothingDef with the Fanuc G05.1 R argument (precision / smoothness level number, R1..R10 mapping to controller-internal tuning macro variables). Q is binary in current Fanuc firmware (Q0 disable / Q1 enable), so IsEnabled covers it directly — no raw Q field is stored. JSON section key remains nameof(PathSmoothing) so generic readers (cache dumps, modal carry, UI) can cast to IPathSmoothingDef across all controller brands; brand-specific readers cast to IFanucPathSmoothingDef for the extra fields. IFeedrateDef Feedrate state written by FeedrateSyntax. Property names are used as JSON keys via nameof. ISO standard: F command + G94 (per minute) / G95 (per revolution). Supported by all major CNC brands. IFlagsDef JSON section schema describing the modal/non-modal flags that take effect on an NC block. Each entry in Flags is a brand-specific keyword recognized by the soft-NC runtime. IMachineCoordinateStateDef Modal machine-coordinate state — absolute six-axis machine position after the block has executed. Written on every block by motion-related LogicSyntaxs (McAbcSyntax, McAbcXyzFallbackSyntax, McXyzSyntax, MachineCoordSelectSyntax, G53p1RotaryPositionSyntax, ReferenceReturnSyntax); seeded on the init block by HomeMcInitializer; carried across non-motion blocks — and per-key completed on partially-written blocks (an XYZ-only motion block receives the carried modal rotary values) — by ModalCarrySyntax. Only configured axes appear as keys (X/Y/Z/A/B/C). Non-existent axes (e.g., A/B/C on a 3-axis machine) are omitted rather than written as NaN sentinels. After the PostLogic carry the section is a MODAL record: key presence means \"state known\", never \"this block commanded the axis\". Consumers needing \"commanded\" must read the block's Parsing words, the one-shot RotaryWords record (the rotary words this block itself spoke, written by McAbcSyntax), or compare values against the previous block (see LinearMotionUtil.HasRotaryMotion). The only presence-as-commanded carve-out is CompoundMotion.Items[*] item-level sections, which the carry never touches. IMotionEventDef One-shot motion event — present on every block whose source programmed a motion command, regardless of whether the resulting displacement is non-zero. A redundant G01 X10 on a block already at X10 still gets a MotionEvent; the motion semantics (McLinearMotionSemantic, McArcMotionSemantic, ClLinearMcMotionSemantic) then early-return on distance <= 0 and emit no IAct. NOT carried forward across blocks. Reason for the \"programmed, not displaced\" definition: Fanuc G66 modal macro fires once per programmed motion command (per Fanuc spec — no distance gate), so FanucModalMacroSyntax.Expansion uses MotionEvent presence as its trigger. Suppressing the section on zero-distance moves would silently change G66 behaviour. The modal sibling MotionState separately latches the Group-01 mode for readers that only need to know \"what G-code is active\". Property names are used as JSON keys via nameof. IMotionStateDef Modal motion state — Group 01 G-code mode (G00 / G01 / G02 / G03 ...). Written on every block by LinearMotionSyntax / CircularMotionSyntax; carried across non-motion blocks by ModalCarrySyntax. Property names are used as JSON keys via nameof. Unlike sibling modal sections (Unit, PlaneSelect, Positioning) which carry both a brand-specific Term and a brand-neutral conventional field, MotionState intentionally keeps only Term: the brand-neutral semantic (\"what kind of motion happened\") lives on the sibling one-shot MotionEvent (Form = McLinear / McArc / ClLinear / ClArc). State here is purely the modal latch of the last Group-01 G-code so downstream FindPrevious* can resume motion-mode bookkeeping. IParsingDef JSON section schema carrying the raw, brand-specific parsing trace for an NC block. The Parsing node holds intermediate parser output used by downstream syntaxes and diagnostics. IPathSmoothingDef Path smoothing state. The base interface is brand-agnostic; controller brands extend it with their own argument fields (e.g. IFanucPathSmoothingDef for Fanuc G05.1 R precision-level). Fanuc-flavour writes are produced by FanucPathSmoothingSyntax. ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable): high-precision contour control / AICC / Nano Smoothing. Controller-internal interpolation black box — simulation records the state but does not alter the tool path. IPlaneSelectDef Active plane selection state written by PlaneSelectSyntax. Property names are used as JSON keys via nameof. ISO: G17/G18/G19. Heidenhain: implicit from L/CC syntax. Term carries the brand-specific G-code; Plane stores the conventional, brand-neutral axis-pair name (XY/ZX/YZ). IPolarInterpolationDef JSON section schemas for Fanuc Polar Coordinate Interpolation (G12.1/G13.1). Property names are used as JSON keys via nameof. PolarInterpolationState is the modal valve: its presence on a block means polar interpolation is active there. It is written by PolarInterpolationSyntax on the G12.1 block and re-materialized onto every following block until a G13.1 block ends the mode (single-step lookback carry, same pattern as PositioningSyntax — not registered on ModalCarrySyntax). ProgramPolarRxcz is the per-block polar position, relative to the G12.1 anchor (InitRxcz). Rxcz axes: X = radius-direction linear axis in mm (the NC word X is a diameter and is halved on parse), Y = hypothetical rotary-substitute axis in mm, Z = real Z in mm. The absolute (rotation-center-origin) position used by the math is InitRxcz + ProgramPolarRxcz, mirroring HardNc PolarEntry.CentralProgramPolarRxcz. IPositioningDef Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental). Written by PositioningSyntax, consumed by IncrementalResolveSyntax, canned cycle syntaxes, and MachineCoordSelectSyntax. Property names are used as JSON keys via nameof. Term is the brand-specific G-code (Fanuc/ISO G90/G91); Mode is the conventional, brand-neutral name (Absolute / Incremental). IProgramEndDef Program end marker (M02/M30). Written by ProgramEndSyntax. Other syntaxes (e.g. IsoLocalCoordinateOffsetSyntax) read this section to reset modal state instead of detecting M30 directly. IProgramStopDef Program-stop marker (M00 unconditional / M01 optional). Written by ProgramStopSyntax on each block that carries an M00/M01 flag. Non-modal: the section appears only on the exact block where the stop code is present. Distinct from IProgramEndDef (M02/M30, end of program). M00 halts execution unconditionally; the operator must press Cycle Start to resume. M01 is an optional stop gated by the operator's \"Optional Stop\" panel switch — ignored when the switch is off. This parsing-layer section records the NC intent; runtime / semantic layers decide whether to actually pause. IProgramXyzDef JSON section schema carrying the program-coordinate position commanded on the current block. Written by ProgramXyzSyntax before the ProgramToMcTransform chain composes it into machine coordinates. IRadiusCompensationDef Radius compensation state written by RadiusCompensationSyntax. Property names are used as JSON keys via nameof. Managed commands (ISO): G41 (left), G42 (right), G40 (cancel). Heidenhain Klartext maps RL → G41, RR → G42, R0 → G40. When active, the tool path is offset perpendicular to the programmed path by Radius_mm; Side determines left vs right. The root ProgramXyz retains the user-programmed position; MachineCoordinate is overwritten to reflect the compensated path. ISpindleControlDef Spindle control item for use inside ItemsKey arrays. Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleDirection. ISpindleOrientationDef Oriented spindle stop item for use inside ItemsKey arrays. Commands the spindle to stop at a specific angular position (OSS). Resolved by Hi.NcParsers.Semantics.CompoundMotionSemanticUtil into ActSpindleOrientation. ISpindleSpeedDef Spindle speed and direction state written by SpindleSpeedSyntax. Property names are used as JSON keys via nameof. ISO: S command for speed, M03/M04/M05 for direction. Heidenhain: M3/M4/M5. Siemens: M3/M4/M5 or SPOS. Direction is stored as the conventional SpindleDirection enum name (CW/CCW/STOP), not as brand-specific M-codes. ITiltTransformDef Tilt transform state written by tilt transform syntaxes. Property names are used as JSON keys via nameof. Managed commands (ISO/Fanuc): G68 (2D rotation), G68.2 (tilted work plane), G69 (cancel). Siemens equivalent: CYCLE800, ROT/AROT (handled by separate syntax). Heidenhain equivalent: PLANE SPATIAL / PLANE RESET (handled by separate syntax). IToolHeightCompensationDef Tool height compensation state written by ToolHeightOffsetSyntax. Property names are used as JSON keys via nameof. The JSON section can be deserialized to an instance implementing this interface. Managed commands (ISO/Fanuc): G43, G44, G49. Fanuc extension: G43.4 (TCPM — parsed only in Fanuc syntax list). Siemens equivalent: TRAFOOF/TRAORI (handled by separate syntax). Heidenhain equivalent: TOOL CALL / M128/M129 (handled by separate syntax). ITransformationDef Chain of named ProgramXyz → MachineCoordinate transformation entries. Stored as a JsonArray of entries, each with “Source”, “Kind”, and “Mat4d” keys. Each contributing INcSyntax adds or replaces its own entry by source name. GetComposedTransform(JsonObject) composes entries in order: McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]. Kind contour-validity classification. Each entry is either: \"Static\" — the Mat4d is valid for any point along the contour. Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable blocks are all Static. \"Dynamic\" — the Mat4d is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composition still yields a correct endpoint MC, but the matrix is not contour-valid: intermediate CL-point positions cannot be derived by applying it to an interpolated ProgramXyz. The semantic layer (ClLinearMcMotionSemantic) handles per-step IK separately. Use HasDynamicEntry(JsonObject) to detect the presence of any Dynamic entry on this block. IUnitDef Unit-system state (ISO Group 06: G20 inch / G21 metric). Written by UnitModeSyntax. Modal. HiNC's NC pipeline works exclusively in millimetres. G21 is therefore a no-op confirmation of the default; G20 is reported as an Unsupported Error and callers are expected to pre-convert the NC program to metric before loading. IUnparsedTextDef JSON section schema carrying the residual block text that was not consumed by any registered syntax. Used for diagnostics and round-trip preservation." }, "api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.BackBoringSyntax.html", @@ -5432,7 +5457,7 @@ "api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html", "title": "Class CannedCycleResolveSyntax | HiAPI-C# 2025", - "summary": "Class CannedCycleResolveSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves the canned-cycle Group-09 state for the current block and writes the result to the CannedCycle section. Active cycle (direct G81..G89 or modal repeat): merges Parsing overrides with previous-cycle stored params, applies G91 incremental-to-absolute conversion and missing-axis fallback, writes CannedCycle with Term, ReturnMode, and Params. The resolved cycle sub-section is left in Parsing under the cycle code for downstream cycle syntaxes (DrillingCycleSyntax, etc.) to read. Explicit cancel (G80 flag present on a non-cycle block): consumes the G80 flag and writes CannedCycle = { Term: \"G80\" }, acting as a hard sentinel for Hi.NcParsers.LogicSyntaxs.CannedCycleSyntaxUtil modal lookback. No Group-09 activity: leaves the block untouched. Must be placed after PositioningSyntax and before the individual cycle syntaxes in the chain. public class CannedCycleResolveSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CannedCycleResolveSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Direct G81 active cycle, no #Previous: (so lastProgramXyz = Vec3d.Zero) and no Positioning mode (so the absolute-coordinate path runs, not G91 incremental). The resolved cycle sub-section is left in Parsing under the cycle code for downstream cycle syntaxes to consume; the CannedCycle section carries the snapshot used for modal lookback. ReturnMode defaults to G98 when neither the current block nor a previous block declares G98/G99: #BeforeBuild: { \"Parsing\": { \"G81\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } } } #AfterBuild: { \"Parsing\": { \"G81\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } } } Modal repeat: the current block carries only an X override and no cycle code, but #Previous: has an active G81 with stored params. MergeModalCycleSection(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress) merges X=60 (override) with Y/Z/R from stored params, removes the consumed X from Parsing root, and writes the merged section back to Parsing.G81. ReturnMode inherits “G98” from the previous block's ReturnMode: #Previous: { \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"ProgramXyz\": { \"X\": 50, \"Y\": 30, \"Z\": 0 } } #BeforeBuild: { \"Parsing\": { \"X\": 60 } } #AfterBuild: { \"Parsing\": { \"G81\": { \"X\": 60, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 60, \"Y\": 30, \"Z\": -10, \"R\": 2 } } } Explicit G80 cancel: standalone G80 flag with no cycle data. The G80 flag is consumed and CannedCycle = { Term: G80 } is written as a hard sentinel that FindPreviousActiveCycle(LazyLinkedListNode, string[]) reads to terminate modal lookback. No ReturnMode hint here (no G98/G99 flag on the same block): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G80\"] } } #AfterBuild: { \"CannedCycle\": { \"Term\": \"G80\" } } The first block after a program end — #Previous: carries the ProgramEnd section next to a still-active G81, and the block itself has an X word that would have repeated the cycle. This is the reset edge (ProgramEndSyntax): the controller's reset cancels the canned cycle, so no repeat is resolved (the X word stays for the positioning syntaxes) and the G80 sentinel is written explicitly — an authored section, so the modal carry does not clone the active cycle across the edge. No ReturnMode: the G98 default applies after reset: #Previous: { \"ProgramEnd\": { \"Term\": \"M30\" }, \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G99\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } } } #BeforeBuild: { \"Parsing\": { \"X\": 60 } } #AfterBuild: { \"Parsing\": { \"X\": 60 }, \"CannedCycle\": { \"Term\": \"G80\" } } Properties Default Default instance with standard settings. public static CannedCycleResolveSyntax Default { get; } Property Value CannedCycleResolveSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" + "summary": "Class CannedCycleResolveSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves the canned-cycle Group-09 state for the current block and writes the result to the CannedCycle section. Active cycle (direct G81..G89 or modal repeat): merges Parsing overrides with previous-cycle stored params, applies G91 incremental-to-absolute conversion and missing-axis fallback, writes CannedCycle with Term, ReturnMode, and Params. The resolved cycle sub-section is left in Parsing under the cycle code for downstream cycle syntaxes (DrillingCycleSyntax, etc.) to read. Explicit cancel (G80 flag present on a non-cycle block): consumes the G80 flag and writes CannedCycle = { Term: \"G80\" }, acting as a hard sentinel for Hi.NcParsers.LogicSyntaxs.CannedCycleSyntaxUtil modal lookback. No Group-09 activity: leaves the block untouched. A rotary-only block (C40.) reaches this syntax without a Parsing node — McAbcSyntax consumed the word into MachineCoordinateState and dropped the emptied node — but its one-shot RotaryWords record marks it as a block that spoke an axis word, so under an active cycle it is a modal repeat like any X/Y block (Fanuc's any-axis-word rule; HardNc indexes the table and drills again). The cycle's pre-positioning item then carries the block's ABC (WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d)). Must be placed after PositioningSyntax and before the individual cycle syntaxes in the chain. public class CannedCycleResolveSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object CannedCycleResolveSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Direct G81 active cycle, no #Previous: (so lastProgramXyz = Vec3d.Zero) and no Positioning mode (so the absolute-coordinate path runs, not G91 incremental). The resolved cycle sub-section is left in Parsing under the cycle code for downstream cycle syntaxes to consume; the CannedCycle section carries the snapshot used for modal lookback. ReturnMode defaults to G98 when neither the current block nor a previous block declares G98/G99: #BeforeBuild: { \"Parsing\": { \"G81\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } } } #AfterBuild: { \"Parsing\": { \"G81\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } } } Modal repeat: the current block carries only an X override and no cycle code, but #Previous: has an active G81 with stored params. MergeModalCycleSection(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress, out HashSet) merges X=60 (override) with Y/Z/R from stored params, removes the consumed X from Parsing root, and writes the merged section back to Parsing.G81. ReturnMode inherits “G98” from the previous block's ReturnMode: #Previous: { \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"ProgramXyz\": { \"X\": 50, \"Y\": 30, \"Z\": 0 } } #BeforeBuild: { \"Parsing\": { \"X\": 60 } } #AfterBuild: { \"Parsing\": { \"G81\": { \"X\": 60, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 60, \"Y\": 30, \"Z\": -10, \"R\": 2 } } } Explicit G80 cancel: standalone G80 flag with no cycle data. The G80 flag is consumed and CannedCycle = { Term: G80 } is written as a hard sentinel that FindPreviousActiveCycle(LazyLinkedListNode, string[]) reads to terminate modal lookback. No ReturnMode hint here (no G98/G99 flag on the same block): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G80\"] } } #AfterBuild: { \"CannedCycle\": { \"Term\": \"G80\" } } The first block after a program end — #Previous: carries the ProgramEnd section next to a still-active G81, and the block itself has an X word that would have repeated the cycle. This is the reset edge (ProgramEndSyntax): the controller's reset cancels the canned cycle, so no repeat is resolved (the X word stays for the positioning syntaxes) and the G80 sentinel is written explicitly — an authored section, so the modal carry does not clone the active cycle across the edge. No ReturnMode: the G98 default applies after reset: #Previous: { \"ProgramEnd\": { \"Term\": \"M30\" }, \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G99\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } } } #BeforeBuild: { \"Parsing\": { \"X\": 60 } } #AfterBuild: { \"Parsing\": { \"X\": 60 }, \"CannedCycle\": { \"Term\": \"G80\" } } Rotary-only modal repeat: the block carries no Parsing at all (McAbcSyntax consumed C40. into MachineCoordinateState and dropped the emptied node) but its one-shot RotaryWords record says it spoke an axis word, so the active G81 from #Previous: repeats with every stored parameter (no override to merge). The Parsing node is re-created to host the resolved cycle sub-section for the downstream cycle syntax: #Previous: { \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"ProgramXyz\": { \"X\": 50, \"Y\": 30, \"Z\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"C\": 40 }, \"RotaryWords\": { \"C\": 40 } } #AfterBuild: { \"MachineCoordinateState\": { \"C\": 40 }, \"RotaryWords\": { \"C\": 40 }, \"Parsing\": { \"G81\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } } } Modal repeat under G91 (X10. pitch): only the block's own X word is an increment (50 + 10 = 60, from the previous block's machine position read back through this block's identity chain); the stored Y / Z / R are the previous cycle's absolute results and are reused verbatim instead of being added onto the anchors again (which would have moved Y to 60 and lifted Z to R + Z): #Previous: { \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"ProgramXyz\": { \"X\": 50, \"Y\": 30, \"Z\": 0 }, \"MachineCoordinateState\": { \"X\": 50, \"Y\": 30, \"Z\": 0 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 10 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G81\": { \"X\": 60, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 60, \"Y\": 30, \"Z\": -10, \"R\": 2 } } } A block whose Group-09 state a brand syntax already authored (the shape SiemensModalCycleSyntax writes for a bare MCALL cancel or an MCALL CYCLE8x(…) arm) is left alone even though #Previous: still carries an active G81 and the block spoke a rotary word: the authoring syntax owns the block, nothing repeats, and the sentinel survives for the blocks after it. (The Siemens parser only accepts MCALL alone on its block, so today this is the contract's guard rather than a reachable program line.) #Previous: { \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"ProgramXyz\": { \"X\": 50, \"Y\": 30, \"Z\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"C\": 40 }, \"RotaryWords\": { \"C\": 40 }, \"CannedCycle\": { \"Term\": \"G80\" } } #AfterBuild: { \"MachineCoordinateState\": { \"C\": 40 }, \"RotaryWords\": { \"C\": 40 }, \"CannedCycle\": { \"Term\": \"G80\" } } Properties Default Default instance with standard settings. public static CannedCycleResolveSyntax Default { get; } Property Value CannedCycleResolveSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html", @@ -5457,7 +5482,7 @@ "api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html", "title": "Class DrillingCycleSyntax | HiAPI-C# 2025", - "summary": "Class DrillingCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G81/G82 drilling cycle (rapid retract). Supports modal repetition. G82 covers G81 — the only difference is an optional dwell (P) at the bottom. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G82 only] Dwell P seconds at bottom Rapid from bottom to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class DrillingCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object DrillingCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples All cases below pre-populate CannedCycle as CannedCycleResolveSyntax would have written it (term, return mode, snapshot params) and leave the resolved cycle sub-section in Parsing for this syntax to consume. There is no #Previous:, so GetLastProgramXyz returns Vec3d.Zero → initZ = 0. F is supplied inside the cycle section so ResolveFeedrate(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress) writes the block-level Feedrate (G94 default, mm/min → mm/s) before the items are emitted. 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 CleanupParsing(JsonObject, JsonObject, string); the empty Parsing drops off through CleanupParsing(JsonObject): #BeforeBuild: { \"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 } } } #AfterBuild: { \"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 } } G82 with dwell P=0.5s — inserts a Dwell item between the feed-to-bottom rapid and the final retract, otherwise identical to G81. Five items total: #BeforeBuild: { \"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 } } } #AfterBuild: { \"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 } } Remarks G85 (feed retract) and G86 (spindle-stop retract) have different retract behaviors and require separate syntax classes. Constructors DrillingCycleSyntax() Initializes a new instance with default settings. public DrillingCycleSyntax() DrillingCycleSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public DrillingCycleSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" + "summary": "Class DrillingCycleSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll G81/G82 drilling cycle (rapid retract). Supports modal repetition. G82 covers G81 — the only difference is an optional dwell (P) at the bottom. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G82 only] Dwell P seconds at bottom Rapid from bottom to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. public class DrillingCycleSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object DrillingCycleSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples All cases below pre-populate CannedCycle as CannedCycleResolveSyntax would have written it (term, return mode, snapshot params) and leave the resolved cycle sub-section in Parsing for this syntax to consume. There is no #Previous:, so GetLastProgramXyz returns Vec3d.Zero → initZ = 0. F is supplied inside the cycle section so ResolveFeedrate(JsonObject, JsonObject, ISentenceCarrier, NcDiagnosticProgress) writes the block-level Feedrate (G94 default, mm/min → mm/s) before the items are emitted. 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 CleanupParsing(JsonObject, JsonObject, string); the empty Parsing drops off through CleanupParsing(JsonObject): #BeforeBuild: { \"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 } } } #AfterBuild: { \"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 } } G82 with dwell P=0.5s — inserts a Dwell item between the feed-to-bottom rapid and the final retract, otherwise identical to G81. Five items total: #BeforeBuild: { \"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 } } } #AfterBuild: { \"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 } } G81 on a block that spoke a rotary word — the one-shot RotaryWords record from McAbcSyntax, whose root MachineCoordinateState already holds the resolved C and the lookback-filled A. WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) copies both onto the first (pre-positioning) item so the rapid to the initial level indexes the table at the same time; the remaining items stay XYZ-only exactly as in the first case. Root MC and the record are left untouched: #BeforeBuild: { \"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 } }, \"MachineCoordinateState\": { \"A\": 0, \"C\": 40 }, \"RotaryWords\": { \"C\": 40 } } #AfterBuild: { \"CannedCycle\": { \"Term\": \"G81\", \"ReturnMode\": \"G98\", \"Params\": { \"X\": 50, \"Y\": 30, \"Z\": -10, \"R\": 2 } }, \"MachineCoordinateState\": { \"A\": 0, \"C\": 40 }, \"RotaryWords\": { \"C\": 40 }, \"Feedrate\": { \"FeedrateValue\": 600, \"Term\": \"G94\", \"Unit\": \"mm/min\" }, \"CompoundMotion\": { \"Term\": \"G81\", \"Items\": [ { \"ProgramXyz\": { \"X\": 50, \"Y\": 30, \"Z\": 0 }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true }, \"MachineCoordinateState\": { \"A\": 0, \"C\": 40 } }, { \"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 } } Remarks G85 (feed retract) and G86 (spindle-stop retract) have different retract behaviors and require separate syntax classes. Constructors DrillingCycleSyntax() Initializes a new instance with default settings. public DrillingCycleSyntax() DrillingCycleSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public DrillingCycleSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.DwellSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.DwellSyntax.html", @@ -5597,7 +5622,7 @@ "api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html", "title": "Class IncrementalResolveSyntax | HiAPI-C# 2025", - "summary": "Class IncrementalResolveSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. Per-word override: a block-root PositioningOverride section (written by SiemensAcIcSyntax for the Siemens per-word coordinate functions, and by the Heidenhain L / C / CC / CYCL CALL POS parsers for the klartext I-prefixed words — see HeidenhainIncrementalAxisWordUtil; the CYCL CALL POS words never reach this syntax, HeidenhainCannedCycleSyntax resolves them on the spot ahead of it) beats the modal term for the listed axes on this block only: an Incremental entry converts that word even under G90, an Absolute entry skips it even under G91 — as does, deliberately, every other non-Incremental value (the rotary-family Shortest / PositiveOnly / NegativeOnly entries are absolute targets; their swing resolution lives in McAbcCyclicPathSyntax, not here). A coded-position entry (CodedAbsolute / CodedIncremental — Siemens CAC()/CIC() on a linear indexing axis) carries an indexing position number instead of a coordinate: the number is resolved through IIndexingPositionConfig via TryResolveCodedTarget(IIndexingPositionConfig, string, string, double, double, ISentenceCarrier, NcDiagnosticProgress, out double, out string), the word is rewritten to the resolved absolute coordinate, and the entry to Absolute; a failed resolve reports an error and holds the last program position. Axes without an entry follow the modal term unchanged, so brands that never write the section (Fanuc/...) keep the exact legacy behavior. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]; the Heidenhain bundle instead walks [\"Parsing\", \"CC\"] for the klartext circle-center record (CcAwareIncrementalResolveSyntax). All matching paths are converted against the same last program position — a nested record's words are distances from where the tool stands, exactly like the root's. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. public class IncrementalResolveSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IncrementalResolveSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples G90 (absolute) on the block — the syntax early-returns without touching Parsing.X/Y/Z, even though the values look like incremental deltas: #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } G91 (incremental) with a #Previous: block carrying MachineCoordinateState=(100,200,300). Under the identity ProgramToMcTransform chain, GetLastProgramXyz recovers program XYZ equal to MC, so each axis in Parsing is rewritten to lastAbs + incremental: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 110, \"Y\": 220, \"Z\": 330 } } G91 + Parsing.G28 sub-section — exercises the second entry of the default WorkingPathList; the root Parsing has no X/Y/Z so the first path no-ops, but the [“Parsing”,“G28”] path picks up the G28 intermediate axes and resolves them against the same lastProgramXyz: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G28\": { \"X\": 5, \"Y\": 10, \"Z\": 15 } } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G28\": { \"X\": 105, \"Y\": 210, \"Z\": 315 } } } G90 (absolute) with a per-word PositioningOverride — the Siemens X=IC(10) shape after SiemensAcIcSyntax unwrapped it. Only the overridden X converts against the last program position; Y follows the modal G90 and stays: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"Incremental\" }, \"Parsing\": { \"X\": 10, \"Y\": 20 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"Incremental\" }, \"Parsing\": { \"X\": 110, \"Y\": 20 } } G91 (incremental) with an Absolute override on X — X is skipped (already absolute, e.g. from X=AC(25)), Y still converts under the modal G91: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"PositioningOverride\": { \"X\": \"Absolute\" }, \"Parsing\": { \"X\": 25, \"Y\": 20 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"PositioningOverride\": { \"X\": \"Absolute\" }, \"Parsing\": { \"X\": 25, \"Y\": 220 } } Coded-position absolute on a linear indexing axis (the Siemens X=CAC(2) workholder shape after the unwrap + evaluation stages). The case injects a SiemensMachineDataTable declaring X linear and assigned to indexing table 1 = [-200, -100, 0, 100]: position number 2 resolves to -100 mm and the entry is rewritten to Absolute: #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"CodedAbsolute\" }, \"Parsing\": { \"X\": 2 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"Absolute\" }, \"Parsing\": { \"X\": -100 } } The Heidenhain instance (CcAwareIncrementalResolveSyntax) on a klartext CC IX+0 IY+11 block after the CC parser: the nested record resolves against the last programmed position (the tool stands at (10, 20)), so the center lands at (10, 31); the Parsing root carries no axis word on a CC block and is untouched: #Previous: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 0 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"Incremental\", \"Y\": \"Incremental\" }, \"Parsing\": { \"CC\": { \"X\": 0, \"Y\": 11 } } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"Incremental\", \"Y\": \"Incremental\" }, \"Parsing\": { \"CC\": { \"X\": 10, \"Y\": 31 } } } Constructors IncrementalResolveSyntax(List>) Initializes a new instance with the given working path list. public IncrementalResolveSyntax(List> workingPathList) Parameters workingPathList List> JSON paths to scan for incremental axis values; see WorkingPathList. IncrementalResolveSyntax(XElement) Initializes a new instance by deserializing the working path list from the given XML element. Falls back to Default.WorkingPathList when the element has no Path children. public IncrementalResolveSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with working paths covering the Parsing root and the Parsing.G28 intermediate XYZ subsection. public static IncrementalResolveSyntax Default { get; } Property Value IncrementalResolveSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string WorkingPathList JSON paths where this syntax searches for axis values (X/Y/Z) to convert from incremental to absolute when G91 is active. Each path is a list of segments navigating nested JSON objects. All matching paths are converted. public List> WorkingPathList { get; } Property Value List> Examples [[\"Parsing\"]] → Parsing root (normal XYZ) [[\"Parsing\", \"G28\"]] → Parsing.G28 (G28 intermediate XYZ) XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" + "summary": "Class IncrementalResolveSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. Per-word override: a block-root PositioningOverride section (written by SiemensAcIcSyntax for the Siemens per-word coordinate functions, and by the Heidenhain L / C / CC / CYCL CALL POS parsers for the klartext I-prefixed words — see HeidenhainIncrementalAxisWordUtil; the CYCL CALL POS words never reach this syntax, HeidenhainCannedCycleSyntax resolves them on the spot ahead of it) beats the modal term for the listed axes on this block only: an Incremental entry converts that word even under G90, an Absolute entry skips it even under G91 — as does, deliberately, every other non-Incremental value (the rotary-family Shortest / PositiveOnly / NegativeOnly entries are absolute targets; their swing resolution lives in McAbcCyclicPathSyntax, not here). A coded-position entry (CodedAbsolute / CodedIncremental — Siemens CAC()/CIC() on a linear indexing axis) carries an indexing position number instead of a coordinate: the number is resolved through IIndexingPositionConfig via TryResolveCodedTarget(IIndexingPositionConfig, string, string, double, double, ISentenceCarrier, NcDiagnosticProgress, out double, out string), the word is rewritten to the resolved absolute coordinate, and the entry to Absolute; a failed resolve reports an error and holds the last program position. Axes without an entry follow the modal term unchanged, so brands that never write the section (Fanuc/...) keep the exact legacy behavior. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]; the Heidenhain bundle instead walks [\"Parsing\", \"CC\"] for the klartext circle-center record (CcAwareIncrementalResolveSyntax). All matching paths are converted against the same last program position — a nested record's words are distances from where the tool stands, exactly like the root's. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double, HashSet) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. public class IncrementalResolveSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IncrementalResolveSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples G90 (absolute) on the block — the syntax early-returns without touching Parsing.X/Y/Z, even though the values look like incremental deltas: #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } G91 (incremental) with a #Previous: block carrying MachineCoordinateState=(100,200,300). Under the identity ProgramToMcTransform chain, GetLastProgramXyz recovers program XYZ equal to MC, so each axis in Parsing is rewritten to lastAbs + incremental: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"X\": 110, \"Y\": 220, \"Z\": 330 } } G91 + Parsing.G28 sub-section — exercises the second entry of the default WorkingPathList; the root Parsing has no X/Y/Z so the first path no-ops, but the [“Parsing”,“G28”] path picks up the G28 intermediate axes and resolves them against the same lastProgramXyz: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G28\": { \"X\": 5, \"Y\": 10, \"Z\": 15 } } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"Parsing\": { \"G28\": { \"X\": 105, \"Y\": 210, \"Z\": 315 } } } G90 (absolute) with a per-word PositioningOverride — the Siemens X=IC(10) shape after SiemensAcIcSyntax unwrapped it. Only the overridden X converts against the last program position; Y follows the modal G90 and stays: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"Incremental\" }, \"Parsing\": { \"X\": 10, \"Y\": 20 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"Incremental\" }, \"Parsing\": { \"X\": 110, \"Y\": 20 } } G91 (incremental) with an Absolute override on X — X is skipped (already absolute, e.g. from X=AC(25)), Y still converts under the modal G91: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 200, \"Z\": 300 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"PositioningOverride\": { \"X\": \"Absolute\" }, \"Parsing\": { \"X\": 25, \"Y\": 20 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\", \"Mode\": \"Incremental\" }, \"PositioningOverride\": { \"X\": \"Absolute\" }, \"Parsing\": { \"X\": 25, \"Y\": 220 } } Coded-position absolute on a linear indexing axis (the Siemens X=CAC(2) workholder shape after the unwrap + evaluation stages). The case injects a SiemensMachineDataTable declaring X linear and assigned to indexing table 1 = [-200, -100, 0, 100]: position number 2 resolves to -100 mm and the entry is rewritten to Absolute: #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"CodedAbsolute\" }, \"Parsing\": { \"X\": 2 } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"Absolute\" }, \"Parsing\": { \"X\": -100 } } The Heidenhain instance (CcAwareIncrementalResolveSyntax) on a klartext CC IX+0 IY+11 block after the CC parser: the nested record resolves against the last programmed position (the tool stands at (10, 20)), so the center lands at (10, 31); the Parsing root carries no axis word on a CC block and is untouched: #Previous: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 0 } } #BeforeBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"Incremental\", \"Y\": \"Incremental\" }, \"Parsing\": { \"CC\": { \"X\": 0, \"Y\": 11 } } } #AfterBuild: { \"Positioning\": { \"Term\": \"G90\", \"Mode\": \"Absolute\" }, \"PositioningOverride\": { \"X\": \"Incremental\", \"Y\": \"Incremental\" }, \"Parsing\": { \"CC\": { \"X\": 10, \"Y\": 31 } } } Constructors IncrementalResolveSyntax(List>) Initializes a new instance with the given working path list. public IncrementalResolveSyntax(List> workingPathList) Parameters workingPathList List> JSON paths to scan for incremental axis values; see WorkingPathList. IncrementalResolveSyntax(XElement) Initializes a new instance by deserializing the working path list from the given XML element. Falls back to Default.WorkingPathList when the element has no Path children. public IncrementalResolveSyntax(XElement src) Parameters src XElement Source XML element. Properties Default Default instance with working paths covering the Parsing root and the Parsing.G28 intermediate XYZ subsection. public static IncrementalResolveSyntax Default { get; } Property Value IncrementalResolveSyntax Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string WorkingPathList JSON paths where this syntax searches for axis values (X/Y/Z) to convert from incremental to absolute when G91 is active. Each path is a list of segments navigating nested JSON objects. All matching paths are converted. public List> WorkingPathList { get; } Property Value List> Examples [[\"Parsing\"]] → Parsing root (normal XYZ) [[\"Parsing\", \"G28\"]] → Parsing.G28 (G28 intermediate XYZ) XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html", @@ -5637,12 +5662,12 @@ "api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html", "title": "Class McAbcCyclicPathSyntax | HiAPI-C# 2025", - "summary": "Class McAbcCyclicPathSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. Two stages, mirroring McXyzSyntax: Root MachineCoordinateState — anchored at the previous block's modal rotary state. CompoundMotion.ItemsKey[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i > 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion IAct segments rather than a single root-MC stamp. Per-word directional override: a block-root PositioningOverride entry (stamped by SiemensAcIcSyntax) valued PositiveOnly (Siemens ACP()) or NegativeOnly (ACN()) swaps that axis's window for this block only: [anchor, anchor+360°) / (anchor-360°, anchor] instead of the default ±180° — the approach direction is forced even when it is the longer way around. A target congruent with the anchor (within an ULP-scale epsilon) keeps the anchor value verbatim — no move, never a spurious full turn, and no deg→rad→deg drift. Shortest (DC()) is the default window and needs no special path here. The override is read from the current block only (it is one-shot, never carried — deliberately unlike the modal RotaryWrap gate's one-step previous fallback) and applies to the root MC stage only, not to CompoundMotion items (G28/G74/G75 expansions capture their words in sub-objects the stamping syntax never sees, so an override can only ever describe a root word). Directional/shortest entries keyed by an axis outside the modular set are reported as Coord-McAbc--003 — the promise cannot be honored there and silence would mis-read the program's intent; an entry with no anchor to resolve against (first rotary value in the stream) is reported as Coord-McAbc--004 and adopted unwrapped, matching the default path. Per-word incremental override: an Incremental entry (Siemens IC(), klartext IC+270) is a signed traverse by definition — McAbcSyntax already wrote anchor + delta — so this pass keeps that value verbatim for the axis instead of folding it into the ±180° window (a +270° chain dimension must not become a -90° swing). Incremental entries on non-modular axes need no warning: the literal value is what the axis would do anyway. public class McAbcCyclicPathSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcCyclicPathSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Cases below run with no IMachineAxisConfig on the dep list, so the syntax uses the A/B/C fallback (a configuration warning is emitted but does not affect the JSON). The syntax is the tail-pass rotary-wrap centraliser — upstream rotary writers (McAbcSyntax, G28, G53.1, ...) store raw degrees and let this pass resolve to the shortest cyclic path. Current B is within ±180° of the previous B — no wrap needed; the value is rewritten in place but equals the input: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 10 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 10 } } Current B is 270° but previous B is 0° — the shortest path is the other way around, so the value is rewritten as -90° (mathematically equivalent, geometrically the same orientation, but signalling the shorter rotation to a downstream motion consumer). 270/0 round-trips through ToRad→Cycle→ToDeg with no rounding noise (1.5π → -0.5π → -90 exactly); other angle pairs (e.g. 350° → -10°) emit a trailing ULP-scale drift instead: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 270 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": -90 } } First block of the stream (no #Previous:) — no anchor to resolve against, so the syntax early-returns and the raw value is preserved verbatim: #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 350 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 350 } } CompoundMotion.Items walk — two items chain: item 0 cycles against the previous block's modal B = 0° (270° → -90°), and item 1 cycles against item 0's post-cycle -90° (170° → -190°, since the shorter path from -90° to 170° wraps backward through -180°). If item 1 had used the previous-block anchor instead of the chained anchor, 170° would have stayed at 170° (already in the ±180° window around 0°), so the test discriminates between chain and no-chain: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": 270 } }, { \"MachineCoordinateState\": { \"B\": 170 } } ] } } #AfterBuild: { \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": -90 } }, { \"MachineCoordinateState\": { \"B\": -190 } } ] } } ACP (PositiveOnly) forces the positive swing even though the shortest path from 0° to 270° is -90° (compare the default case above — same numbers, opposite outcome). The override section stays on the block (nothing consumes it away): #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 270 }, \"PositioningOverride\": { \"B\": \"PositiveOnly\" } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 270 }, \"PositioningOverride\": { \"B\": \"PositiveOnly\" } } ACN (NegativeOnly) mirror — target 90° from anchor 0° swings -270° instead of the shortest +90°: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 90 }, \"PositioningOverride\": { \"B\": \"NegativeOnly\" } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": -270 }, \"PositioningOverride\": { \"B\": \"NegativeOnly\" } } Congruent target under a directional override — the raw anchor sits at 370° (e.g. after an earlier ACP long-way swing) and the ACN target 10° is the same physical position: no move, the anchor value is kept verbatim (the epsilon snap; without it, radian ULP noise would decide between \"no move\" and a spurious full -360° turn): #Previous: { \"MachineCoordinateState\": { \"B\": 370 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 10 }, \"PositioningOverride\": { \"B\": \"NegativeOnly\" } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 370 }, \"PositioningOverride\": { \"B\": \"NegativeOnly\" } } Incremental word (B=IC(270) / klartext L IB+270): the rotary writer accumulated anchor 0° + 270° = 270°, and the pass keeps the traverse literal — the same 270° that the default window above rewrote to -90° stays +270°: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 270 }, \"PositioningOverride\": { \"B\": \"Incremental\" } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 270 }, \"PositioningOverride\": { \"B\": \"Incremental\" } } Constructors McAbcCyclicPathSyntax() Initializes a new instance with default settings. public McAbcCyclicPathSyntax() McAbcCyclicPathSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public McAbcCyclicPathSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" + "summary": "Class McAbcCyclicPathSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. Two stages, mirroring McXyzSyntax: Root MachineCoordinateState — anchored at the previous block's modal rotary state. CompoundMotion.ItemsKey[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i > 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion IAct segments rather than a single root-MC stamp. Per-word directional override: a block-root PositioningOverride entry (stamped by SiemensAcIcSyntax) valued PositiveOnly (Siemens ACP()) or NegativeOnly (ACN()) swaps that axis's window for this block only: [anchor, anchor+360°) / (anchor-360°, anchor] instead of the default ±180° — the approach direction is forced even when it is the longer way around. A target congruent with the anchor (within an ULP-scale epsilon) keeps the anchor value verbatim — no move, never a spurious full turn, and no deg→rad→deg drift. Shortest (DC()) is the default window and needs no special path here. The override is read from the current block only (it is one-shot, never carried — deliberately unlike the modal RotaryWrap gate's one-step previous fallback) and applies to the root MC stage, not to CompoundMotion items in general (G28/G74/G75 expansions capture their words in sub-objects the stamping syntax never sees, so an override can only ever describe a root word) — with one exception: an item whose value for an axis equals the root's pre-pass value verbatim carries that same root word (the canned-cycle pre-positioning item that WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) stamps from the root MC) and inherits the root's directive for that axis, so the default window cannot fold the forced swing the root resolved into the short way. Directional/shortest entries keyed by an axis outside the modular set are reported as Coord-McAbc--003 — the promise cannot be honored there and silence would mis-read the program's intent; an entry with no anchor to resolve against (first rotary value in the stream) is reported as Coord-McAbc--004 and adopted unwrapped, matching the default path. Per-word incremental override: an Incremental entry (Siemens IC(), klartext IC+270) is a signed traverse by definition — McAbcSyntax already wrote anchor + delta — so this pass keeps that value verbatim for the axis instead of folding it into the ±180° window (a +270° chain dimension must not become a -90° swing). Incremental entries on non-modular axes need no warning: the literal value is what the axis would do anyway. public class McAbcCyclicPathSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcCyclicPathSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Cases below run with no IMachineAxisConfig on the dep list, so the syntax uses the A/B/C fallback (a configuration warning is emitted but does not affect the JSON). The syntax is the tail-pass rotary-wrap centraliser — upstream rotary writers (McAbcSyntax, G28, G53.1, ...) store raw degrees and let this pass resolve to the shortest cyclic path. Current B is within ±180° of the previous B — no wrap needed; the value is rewritten in place but equals the input: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 10 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 10 } } Current B is 270° but previous B is 0° — the shortest path is the other way around, so the value is rewritten as -90° (mathematically equivalent, geometrically the same orientation, but signalling the shorter rotation to a downstream motion consumer). 270/0 round-trips through ToRad→Cycle→ToDeg with no rounding noise (1.5π → -0.5π → -90 exactly); other angle pairs (e.g. 350° → -10°) emit a trailing ULP-scale drift instead: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 270 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": -90 } } First block of the stream (no #Previous:) — no anchor to resolve against, so the syntax early-returns and the raw value is preserved verbatim: #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 350 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 350 } } CompoundMotion.Items walk — two items chain: item 0 cycles against the previous block's modal B = 0° (270° → -90°), and item 1 cycles against item 0's post-cycle -90° (170° → -190°, since the shorter path from -90° to 170° wraps backward through -180°). If item 1 had used the previous-block anchor instead of the chained anchor, 170° would have stayed at 170° (already in the ±180° window around 0°), so the test discriminates between chain and no-chain: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": 270 } }, { \"MachineCoordinateState\": { \"B\": 170 } } ] } } #AfterBuild: { \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": -90 } }, { \"MachineCoordinateState\": { \"B\": -190 } } ] } } ACP (PositiveOnly) forces the positive swing even though the shortest path from 0° to 270° is -90° (compare the default case above — same numbers, opposite outcome). The override section stays on the block (nothing consumes it away): #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 270 }, \"PositioningOverride\": { \"B\": \"PositiveOnly\" } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 270 }, \"PositioningOverride\": { \"B\": \"PositiveOnly\" } } ACN (NegativeOnly) mirror — target 90° from anchor 0° swings -270° instead of the shortest +90°: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 90 }, \"PositioningOverride\": { \"B\": \"NegativeOnly\" } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": -270 }, \"PositioningOverride\": { \"B\": \"NegativeOnly\" } } Congruent target under a directional override — the raw anchor sits at 370° (e.g. after an earlier ACP long-way swing) and the ACN target 10° is the same physical position: no move, the anchor value is kept verbatim (the epsilon snap; without it, radian ULP noise would decide between \"no move\" and a spurious full -360° turn): #Previous: { \"MachineCoordinateState\": { \"B\": 370 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 10 }, \"PositioningOverride\": { \"B\": \"NegativeOnly\" } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 370 }, \"PositioningOverride\": { \"B\": \"NegativeOnly\" } } Incremental word (B=IC(270) / klartext L IB+270): the rotary writer accumulated anchor 0° + 270° = 270°, and the pass keeps the traverse literal — the same 270° that the default window above rewrote to -90° stays +270°: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 270 }, \"PositioningOverride\": { \"B\": \"Incremental\" } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 270 }, \"PositioningOverride\": { \"B\": \"Incremental\" } } A CompoundMotion item carrying the root word verbatim — the canned-cycle pre-positioning item that WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) stamps from the root MC of a B=ACP(270) block — inherits the root's PositiveOnly directive: both stay +270 instead of the item folding to -90 as the plain items-walk case above would (same numbers, opposite outcome). The second item is not a copy (170 ≠ 270) and resolves under the default window against the chained anchor 270°, where 170 is already the short way: #Previous: { \"MachineCoordinateState\": { \"B\": 0 } } #BeforeBuild: { \"MachineCoordinateState\": { \"B\": 270 }, \"PositioningOverride\": { \"B\": \"PositiveOnly\" }, \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": 270 } }, { \"MachineCoordinateState\": { \"B\": 170 } } ] } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 270 }, \"PositioningOverride\": { \"B\": \"PositiveOnly\" }, \"CompoundMotion\": { \"Items\": [ { \"MachineCoordinateState\": { \"B\": 270 } }, { \"MachineCoordinateState\": { \"B\": 170 } } ] } } Constructors McAbcCyclicPathSyntax() Initializes a new instance with default settings. public McAbcCyclicPathSyntax() McAbcCyclicPathSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public McAbcCyclicPathSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html", "title": "Class McAbcSyntax | HiAPI-C# 2025", - "summary": "Class McAbcSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Per-word override: a block-root PositioningOverride section (written by SiemensAcIcSyntax for the Siemens AC()/IC() coordinate functions, and by the Heidenhain L / C parsers for the klartext IA+/IB+/IC+ words) marks a rotary word Incremental: the parsed value is then added to the previous modal value of that axis (previous MachineCoordinateState lookback, falling back to a value already present in the current section, then 0) instead of being written as an absolute angle. The accumulated raw degrees stay monotonic across iterations: the McAbcCyclicPathSyntax tail-pass keeps an Incremental-stamped axis literal (a chain dimension is a signed traverse, never re-shortened), so even a +270° step survives as net rotation. An Absolute entry (from AC()) matches the default write and needs no special path — and so, deliberately, do the rotary-family entries Shortest (DC()) / PositiveOnly (ACP()) / NegativeOnly (ACN()): this syntax writes the raw absolute target and the shortest/directional swing is resolved by the McAbcCyclicPathSyntax tail-pass, which owns the wrap math. Brands that never write the section keep the exact legacy behavior. Coded-position overrides (Siemens CAC()/CIC()/CDC()/CACP()/CACN()) carry an indexing position number instead of an angle: the number is resolved through IIndexingPositionConfig via TryResolveCodedTarget(IIndexingPositionConfig, string, string, double, double, ISentenceCarrier, NcDiagnosticProgress, out double, out string) and the override entry is rewritten to the plain vocabulary (Absolute / Shortest / PositiveOnly / NegativeOnly — a cyclic CIC keeps its programmed direction through the directional values) before the tail-pass runs, so the tail-pass never sees a coded value. A failed resolve (invalid number, missing table) reports an error and holds the axis at its previous value. Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. public class McAbcSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Cases 1 and 2 inject a TestDeps.AxisConfig declaring B and C as Rotary. Values are stored as raw degrees; shortest-cyclic resolution is a downstream pass via McAbcCyclicPathSyntax. No IMachineAxisConfig dep on the list — early-return no-op (the syntax only fires when rotary axes are declared): #BeforeBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } AxisConfig declares B+C rotary; Parsing.B/C are consumed into a freshly created MachineCoordinateState section (X/Y/Z are deliberately left out so McXyzSyntax can still derive XYZ later — see class summary): #BeforeBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90 } } Only Parsing.B on the current block; #Previous: carries a full MC including C=0. The missing C is filled from the per-axis backward lookback (FindPreviousMcAxis(LazyLinkedListNode, string)): #Previous: { \"MachineCoordinateState\": { \"B\": 0, \"C\": 0 } } #BeforeBuild: { \"Parsing\": { \"B\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 30, \"C\": 0 } } Per-word incremental override (the Siemens C=IC(...) shape after the unwrap + evaluation stages) — the parsed 21.5 is added onto the previous modal C instead of overwriting it; B has no override entry and fills from lookback as usual: #Previous: { \"MachineCoordinateState\": { \"B\": 10, \"C\": 40 } } #BeforeBuild: { \"PositioningOverride\": { \"C\": \"Incremental\" }, \"Parsing\": { \"C\": 21.5 } } #AfterBuild: { \"PositioningOverride\": { \"C\": \"Incremental\" }, \"MachineCoordinateState\": { \"B\": 10, \"C\": 61.5 } } Coded-position absolute (the Siemens C=CAC(3) shape after the unwrap + evaluation stages). The case injects a SiemensMachineDataTable declaring C rotary and assigned to indexing table 1 = [0, 90, 180, 270]: position number 3 resolves to 180° and the override entry is rewritten to Absolute for the tail-pass: #BeforeBuild: { \"PositioningOverride\": { \"C\": \"CodedAbsolute\" }, \"Parsing\": { \"C\": 3 } } #AfterBuild: { \"PositioningOverride\": { \"C\": \"Absolute\" }, \"MachineCoordinateState\": { \"C\": 180 } } Coded-position incremental with the same table — from 270° (position 4), advancing 2 positions wraps the 4-position cycle to position 2 (90°), and the positive count becomes a PositiveOnly approach so the swing keeps the programmed direction: #Previous: { \"MachineCoordinateState\": { \"C\": 270 } } #BeforeBuild: { \"PositioningOverride\": { \"C\": \"CodedIncremental\" }, \"Parsing\": { \"C\": 2 } } #AfterBuild: { \"PositioningOverride\": { \"C\": \"PositiveOnly\" }, \"MachineCoordinateState\": { \"C\": 90 } } Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" + "summary": "Class McAbcSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Per-word override: a block-root PositioningOverride section (written by SiemensAcIcSyntax for the Siemens AC()/IC() coordinate functions, and by the Heidenhain L / C parsers for the klartext IA+/IB+/IC+ words) marks a rotary word Incremental: the parsed value is then added to the previous modal value of that axis (previous MachineCoordinateState lookback, falling back to a value already present in the current section, then 0) instead of being written as an absolute angle. The accumulated raw degrees stay monotonic across iterations: the McAbcCyclicPathSyntax tail-pass keeps an Incremental-stamped axis literal (a chain dimension is a signed traverse, never re-shortened), so even a +270° step survives as net rotation. An Absolute entry (from AC()) matches the default write and needs no special path — and so, deliberately, do the rotary-family entries Shortest (DC()) / PositiveOnly (ACP()) / NegativeOnly (ACN()): this syntax writes the raw absolute target and the shortest/directional swing is resolved by the McAbcCyclicPathSyntax tail-pass, which owns the wrap math. Brands that never write the section keep the exact legacy behavior. Coded-position overrides (Siemens CAC()/CIC()/CDC()/CACP()/CACN()) carry an indexing position number instead of an angle: the number is resolved through IIndexingPositionConfig via TryResolveCodedTarget(IIndexingPositionConfig, string, string, double, double, ISentenceCarrier, NcDiagnosticProgress, out double, out string) and the override entry is rewritten to the plain vocabulary (Absolute / Shortest / PositiveOnly / NegativeOnly — a cyclic CIC keeps its programmed direction through the directional values) before the tail-pass runs, so the tail-pass never sees a coded value. A failed resolve (invalid number, missing table) reports an error and holds the axis at its previous value. Every rotary word the block actually carried is also recorded, as programmed, in the one-shot block-root RotaryWords section ({ \"C\": 40 }) — the resolved angle goes into MachineCoordinateState, which after the modal carry can no longer tell \"commanded\" from \"carried\". Downstream consumers that need that distinction (CannedCycleResolveSyntax repeating an active canned cycle on a rotary-only block, WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) riding the block's ABC on the cycle's pre-positioning item) read the record; the section is never modal-carried. Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. public class McAbcSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object McAbcSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Cases 1 and 2 inject a TestDeps.AxisConfig declaring B and C as Rotary. Values are stored as raw degrees; shortest-cyclic resolution is a downstream pass via McAbcCyclicPathSyntax. No IMachineAxisConfig dep on the list — early-return no-op (the syntax only fires when rotary axes are declared): #BeforeBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } AxisConfig declares B+C rotary; Parsing.B/C are consumed into a freshly created MachineCoordinateState section (X/Y/Z are deliberately left out so McXyzSyntax can still derive XYZ later — see class summary). The words the block spoke are recorded as programmed in the one-shot RotaryWords section: #BeforeBuild: { \"Parsing\": { \"B\": 45, \"C\": 90 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 45, \"C\": 90 }, \"RotaryWords\": { \"B\": 45, \"C\": 90 } } Only Parsing.B on the current block; #Previous: carries a full MC including C=0. The missing C is filled from the per-axis backward lookback (FindPreviousMcAxis(LazyLinkedListNode, string)) — and stays out of RotaryWords, which lists commanded words only: #Previous: { \"MachineCoordinateState\": { \"B\": 0, \"C\": 0 } } #BeforeBuild: { \"Parsing\": { \"B\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"B\": 30, \"C\": 0 }, \"RotaryWords\": { \"B\": 30 } } Per-word incremental override (the Siemens C=IC(...) shape after the unwrap + evaluation stages) — the parsed 21.5 is added onto the previous modal C instead of overwriting it; B has no override entry and fills from lookback as usual. RotaryWords keeps the programmed delta, not the accumulated angle: #Previous: { \"MachineCoordinateState\": { \"B\": 10, \"C\": 40 } } #BeforeBuild: { \"PositioningOverride\": { \"C\": \"Incremental\" }, \"Parsing\": { \"C\": 21.5 } } #AfterBuild: { \"PositioningOverride\": { \"C\": \"Incremental\" }, \"MachineCoordinateState\": { \"B\": 10, \"C\": 61.5 }, \"RotaryWords\": { \"C\": 21.5 } } Coded-position absolute (the Siemens C=CAC(3) shape after the unwrap + evaluation stages). The case injects a SiemensMachineDataTable declaring C rotary and assigned to indexing table 1 = [0, 90, 180, 270]: position number 3 resolves to 180° and the override entry is rewritten to Absolute for the tail-pass (RotaryWords keeps the position number the program spoke): #BeforeBuild: { \"PositioningOverride\": { \"C\": \"CodedAbsolute\" }, \"Parsing\": { \"C\": 3 } } #AfterBuild: { \"PositioningOverride\": { \"C\": \"Absolute\" }, \"MachineCoordinateState\": { \"C\": 180 }, \"RotaryWords\": { \"C\": 3 } } Coded-position incremental with the same table — from 270° (position 4), advancing 2 positions wraps the 4-position cycle to position 2 (90°), and the positive count becomes a PositiveOnly approach so the swing keeps the programmed direction: #Previous: { \"MachineCoordinateState\": { \"C\": 270 } } #BeforeBuild: { \"PositioningOverride\": { \"C\": \"CodedIncremental\" }, \"Parsing\": { \"C\": 2 } } #AfterBuild: { \"PositioningOverride\": { \"C\": \"PositiveOnly\" }, \"MachineCoordinateState\": { \"C\": 90 }, \"RotaryWords\": { \"C\": 2 } } Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html", @@ -5667,12 +5692,12 @@ "api/Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html", "title": "Class PivotTransformUtil | HiAPI-C# 2025", - "summary": "Class PivotTransformUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared engine for the brand pivot-gate syntaxes (PivotTransformationSyntax — ISO/Fanuc family, SiemensPivotTransformationSyntax — Siemens). Each brand syntax owns only its gate (which modal terms mean “commanded XYZ needs the Pn→MC kinematic rigid transform”); the endpoint-ABC resolution and the PivotTransform chain entry composition live here so every brand writes the identical JSON vocabulary. public static class PivotTransformUtil Inheritance object PivotTransformUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ComposePivotEntry(LazyLinkedListNode, JsonObject, List) Composes the PivotTransformSource entry for the block's endpoint ABC — the shared body every brand gate runs after it decides the block needs the kinematic pivot. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). The entry's kind mirrors HasDynamicEntry(JsonObject): when no Dynamic entry exists (RTCP with stable rotary, or a tilted plane without RTCP), the kinematic pivot is contour-valid and stays Static. public static void ComposePivotEntry(LazyLinkedListNode syntaxPieceNode, JsonObject json, List ncDependencyList) Parameters syntaxPieceNode LazyLinkedListNode json JsonObject ncDependencyList List ResolveEndpointAbc(LazyLinkedListNode, IMachineAxisConfig) Reads the current block's MC ABC, falling back per-axis to modal lookback (via FindPreviousMcXyzabc(LazyLinkedListNode, IMachineAxisConfig)) for rotary axes the machine declares but the current section does not carry — blocks like G49, comments, or pure non-motion state changes do not rewrite ABC, yet the kinematic rotary state is still active and must appear in the chain. Non-rotary axes default to 0. Also used by SiemensTraoriSyntax, whose tool-height entry needs the same endpoint semantics. public static Vec3d ResolveEndpointAbc(LazyLinkedListNode node, IMachineAxisConfig axisConfig) Parameters node LazyLinkedListNode axisConfig IMachineAxisConfig Returns Vec3d" + "summary": "Class PivotTransformUtil Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll Shared engine for the brand pivot-gate syntaxes (PivotTransformationSyntax — ISO/Fanuc family, SiemensPivotTransformationSyntax — Siemens). Each brand syntax owns only its gate (which modal terms mean “commanded XYZ needs the Pn→MC kinematic rigid transform”); the endpoint-ABC resolution and the PivotTransform chain entry composition live here so every brand writes the identical JSON vocabulary. public static class PivotTransformUtil Inheritance object PivotTransformUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Methods ComposePivotEntry(LazyLinkedListNode, JsonObject, List) Composes the PivotTransformSource entry for the block's endpoint ABC — the shared body every brand gate runs after it decides the block needs the kinematic pivot. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). The entry's kind mirrors HasDynamicEntry(JsonObject): when no Dynamic entry exists (RTCP with stable rotary, or a tilted plane without RTCP), the kinematic pivot is contour-valid and stays Static. public static void ComposePivotEntry(LazyLinkedListNode syntaxPieceNode, JsonObject json, List ncDependencyList) Parameters syntaxPieceNode LazyLinkedListNode json JsonObject ncDependencyList List PinTiltInMachineSpaceAcrossRotaryWords(LazyLinkedListNode, JsonObject, List) Pins the tilted-plane feature frame in machine space across a rotary word: on a block that spoke A/B/C (one-shot RotaryWords record) under an active tilt, rewrites the block's TransformSource entry so that Tilt(cur)·Pivot(cur) == Tilt(prev)·Pivot(prev) — the feature point the program addresses stays where it was in machine space and the table turns underneath it. This is the Fanuc TWP behaviour HardNc reproduces through NcArgG68p2.PostMcAbc_rad (the delta between the line's rotary word and the IJK solution re-anchors the feature frame; the comment there cites CHEM20180926 N10, whose G81 … C20./C40./… drill a bolt circle on the periphery while the tip never leaves its machine position). Without it the carried tilt stays attached to the table and every C-indexed hole lands on the same spot of the part. Silently no-ops when the block spoke no rotary word, when IMachineKinematics is absent, or when the previous block carries no PivotTransformSource entry (the tilt was not yet active there — nothing to pin). Must run before ComposePivotEntry(LazyLinkedListNode, JsonObject, List) on the same block so the pivot it composes is the one the rewritten tilt was solved against. Brand gates decide whether their tilt vocabulary wants this (PivotTransformationSyntax applies it to G68.2 without RTCP: under G43.4 the tool centre point is tracked in the workpiece-fixed feature frame while the rotaries move — the tilted CL→NC writeback replays on that contract — so a rotary word there is contouring, not indexing, and the carried tilt stays on the table). public static void PinTiltInMachineSpaceAcrossRotaryWords(LazyLinkedListNode syntaxPieceNode, JsonObject json, List ncDependencyList) Parameters syntaxPieceNode LazyLinkedListNode json JsonObject ncDependencyList List ResolveEndpointAbc(LazyLinkedListNode, IMachineAxisConfig) Reads the current block's MC ABC, falling back per-axis to modal lookback (via FindPreviousMcXyzabc(LazyLinkedListNode, IMachineAxisConfig)) for rotary axes the machine declares but the current section does not carry — blocks like G49, comments, or pure non-motion state changes do not rewrite ABC, yet the kinematic rotary state is still active and must appear in the chain. Non-rotary axes default to 0. Also used by SiemensTraoriSyntax, whose tool-height entry needs the same endpoint semantics. public static Vec3d ResolveEndpointAbc(LazyLinkedListNode node, IMachineAxisConfig axisConfig) Parameters node LazyLinkedListNode axisConfig IMachineAxisConfig Returns Vec3d" }, "api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.PivotTransformationSyntax.html", "title": "Class PivotTransformationSyntax | HiAPI-C# 2025", - "summary": "Class PivotTransformationSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll ISO/Fanuc-family pivot gate: writes the PivotTransformSource entry into ProgramToMcTransform on blocks where the controller is interpreting commanded XYZ in a frame that needs the Pn→MC kinematic rigid transform — namely active RTCP (G43.4) or active tilted plane (G68/G68.2). On plain-mode blocks (no RTCP, no tilted plane), the controller treats commanded XYZ as machine-frame directly, so the indexed rotary angle is a positioning value only and must not fold into the linear axes; this syntax skips those blocks and leaves the chain at identity (or whatever non-kinematic offsets earlier syntaxes contributed). Brand variants with their own modal vocabulary gate the same shared engine (PivotTransformUtil): Siemens TRAORI/CYCLE800 → SiemensPivotTransformationSyntax; Heidenhain M128/PLANE SPATIAL would follow the same pattern. Mirrors real Fanuc semantics: plain G43 offsets along the active tilted-plane normal (or machine Z when no tilt is active), and plain XYZ moves map directly to machine axis registers regardless of indexed table/head rotary position. Only G43.4 follows the live tool vector and only G68.2 redefines the work-plane orientation — both of which this guard detects via the existing chain markers. Chain position: must run after all Pn-frame writers (IsoG68p2TiltSyntax, ToolHeightOffsetSyntax, G43p4RtcpSyntax, IsoCoordinateOffsetSyntax, brand-specific coord offset syntaxes) so the guard sees the finalised mode markers and the PivotTransform entry — when emitted — naturally lands as the last chain element. Must run before McXyzSyntax / ProgramXyzSyntax so they see the completed chain. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). public class PivotTransformationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PivotTransformationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Real-kinematics cases below wire TestDeps.CodeKinematics with the default chain code [O][Z][A][w];[O][Y][X][B][S][t] — a table-A / head-B 5-axis machine. A is on the table side (rotates the workpiece around -X); B is on the head side (rotates the spindle around +Y). Both rotary pivot axes pass through the origin (0,0,0) of the chain root frame because CodeXyzabcChain uses zero-offset Branch.Attach between components — a real table-head machine usually has the spindle-B pivot offset from origin, but for the corpus the zero-offset chain keeps the matrices hand-verifiable. Realistic MachineCoordinateState carries A and/or B only; there is no C axis in this chain (5-axis machines have at most two rotary axes). Verification cue specific to this syntax: the zero-offset chain puts the machine-zero attacher at the origin, so the entry's translation anchor T(McToPn(0).Point) vanishes and the matrix reduces to K(abc)⁻¹ alone. Table-A rotation moves the workpiece's coordinate frame around the X axis through origin, so the four-basis probe of MakePivotTransformMat(IMachineKinematics, Vec3d) returns a pure rotation around X — case 3 below pulls out exactly Rx(45°) (no translation column) for table-A=45°. Head-B rotation maps every probe point through the same head-chain rotation, but because everything on the head side downstream of B is at origin before B applies, the rotation reduces to the identity on the probe set: K(abc) == K(0) == I and the entry collapses to identity. That is the symmetry the plain-mode bug fix relies on — head-side rotary was harmlessly writing identity matrices, while table-side rotary was silently rotating linear axes into MC. Plain-mode skip — kinematics dep is present but the block has no active tilted plane and no RTCP, so ShouldFoldKinematicPivot returns false and the syntax leaves the block untouched. This is the \"no work to do\" guard that prevents over-application of the kinematic transform on indexed-rotary plain XYZ moves: #BeforeBuild: {} #AfterBuild: {} Plain-mode skip with indexed rotary — same guard, but the block already carries a MachineCoordinateState.A = 45 indexed table angle (as a prior McAbcSyntax would have written). In a real Fanuc controller, commanded XYZ on this block goes straight to the machine axis registers regardless of A; the kinematic rotation must not be folded into the chain. Real XyzabcSolver dep is wired in so the guard is what stops the write (not the dep-guard at the top of Build): #BeforeBuild: { \"MachineCoordinateState\": { \"A\": 45 } } #AfterBuild: { \"MachineCoordinateState\": { \"A\": 45 } } Active RTCP signalled by a pre-existing Dynamic chain entry (as G43p4RtcpSyntax would have written when RTCP is active and ABC changes across the block). HasDynamicEntry(JsonObject) returns true, so the guard passes and the PivotTransform entry is written and tagged KindDynamic. The TestDeps.Kinematics stub makes MakePivotTransformMat(IMachineKinematics, Vec3d) collapse to identity: #BeforeBuild: { \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Dynamic\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } #AfterBuild: { \"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] } ] } Active G68.2 tilted plane — the current block carries the modal TiltTransform snapshot plus an existing Static TiltTransform chain entry (as IsoG68p2TiltSyntax would have written) and MachineCoordinateState.A = 45. The guard reads TiltTransform.Term = \"G68.2\" and passes; with real XyzabcSolver kinematics (table-A / head-B 5-axis), MakePivotTransformMat at abc = (π/4, 0, 0) produces the table-A Rx(45°) rigid matrix. No Dynamic entries in the chain so the new entry stays Static: #BeforeBuild: { \"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 ] } ], \"MachineCoordinateState\": { \"A\": 45 } } #AfterBuild: { \"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 ] }, { \"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 ] } ], \"MachineCoordinateState\": { \"A\": 45 } } Constructors PivotTransformationSyntax() Initializes a new instance with default settings. public PivotTransformationSyntax() PivotTransformationSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public PivotTransformationSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" + "summary": "Class PivotTransformationSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll ISO/Fanuc-family pivot gate: writes the PivotTransformSource entry into ProgramToMcTransform on blocks where the controller is interpreting commanded XYZ in a frame that needs the Pn→MC kinematic rigid transform — namely active RTCP (G43.4) or active tilted plane (G68/G68.2). On plain-mode blocks (no RTCP, no tilted plane), the controller treats commanded XYZ as machine-frame directly, so the indexed rotary angle is a positioning value only and must not fold into the linear axes; this syntax skips those blocks and leaves the chain at identity (or whatever non-kinematic offsets earlier syntaxes contributed). Brand variants with their own modal vocabulary gate the same shared engine (PivotTransformUtil): Siemens TRAORI/CYCLE800 → SiemensPivotTransformationSyntax; Heidenhain M128/PLANE SPATIAL would follow the same pattern. Mirrors real Fanuc semantics: plain G43 offsets along the active tilted-plane normal (or machine Z when no tilt is active), and plain XYZ moves map directly to machine axis registers regardless of indexed table/head rotary position. Only G43.4 follows the live tool vector and only G68.2 redefines the work-plane orientation — both of which this guard detects via the existing chain markers. Chain position: must run after all Pn-frame writers (IsoG68p2TiltSyntax, ToolHeightOffsetSyntax, G43p4RtcpSyntax, IsoCoordinateOffsetSyntax, brand-specific coord offset syntaxes) so the guard sees the finalised mode markers and the PivotTransform entry — when emitted — naturally lands as the last chain element. Must run before McXyzSyntax / ProgramXyzSyntax so they see the completed chain. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). public class PivotTransformationSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object PivotTransformationSyntax Implements ISituNcSyntax INcSyntax IMakeXmlSource Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Extension Methods DuplicateUtil.TryDuplicate(TSelf, params object[]) InvokeUtil.SelfInvoke(TSrc, Action) InvokeUtil.SelfInvoke(TSrc, Func) ColorUtil.GetGloomyColor(object, double, double) NameUtil.GetSelectionName(object) StringUtil.GetPropertyStringIfToStringNotOverloaded(object, bool, bool) LockUtil.Lock(object) Examples Real-kinematics cases below wire TestDeps.CodeKinematics with the default chain code [O][Z][A][w];[O][Y][X][B][S][t] — a table-A / head-B 5-axis machine. A is on the table side (rotates the workpiece around -X); B is on the head side (rotates the spindle around +Y). Both rotary pivot axes pass through the origin (0,0,0) of the chain root frame because CodeXyzabcChain uses zero-offset Branch.Attach between components — a real table-head machine usually has the spindle-B pivot offset from origin, but for the corpus the zero-offset chain keeps the matrices hand-verifiable. Realistic MachineCoordinateState carries A and/or B only; there is no C axis in this chain (5-axis machines have at most two rotary axes). Verification cue specific to this syntax: the zero-offset chain puts the machine-zero attacher at the origin, so the entry's translation anchor T(McToPn(0).Point) vanishes and the matrix reduces to K(abc)⁻¹ alone. Table-A rotation moves the workpiece's coordinate frame around the X axis through origin, so the four-basis probe of MakePivotTransformMat(IMachineKinematics, Vec3d) returns a pure rotation around X — case 3 below pulls out exactly Rx(45°) (no translation column) for table-A=45°. Head-B rotation maps every probe point through the same head-chain rotation, but because everything on the head side downstream of B is at origin before B applies, the rotation reduces to the identity on the probe set: K(abc) == K(0) == I and the entry collapses to identity. That is the symmetry the plain-mode bug fix relies on — head-side rotary was harmlessly writing identity matrices, while table-side rotary was silently rotating linear axes into MC. Plain-mode skip — kinematics dep is present but the block has no active tilted plane and no RTCP, so ShouldFoldKinematicPivot returns false and the syntax leaves the block untouched. This is the \"no work to do\" guard that prevents over-application of the kinematic transform on indexed-rotary plain XYZ moves: #BeforeBuild: {} #AfterBuild: {} Plain-mode skip with indexed rotary — same guard, but the block already carries a MachineCoordinateState.A = 45 indexed table angle (as a prior McAbcSyntax would have written). In a real Fanuc controller, commanded XYZ on this block goes straight to the machine axis registers regardless of A; the kinematic rotation must not be folded into the chain. Real XyzabcSolver dep is wired in so the guard is what stops the write (not the dep-guard at the top of Build): #BeforeBuild: { \"MachineCoordinateState\": { \"A\": 45 } } #AfterBuild: { \"MachineCoordinateState\": { \"A\": 45 } } Active RTCP signalled by a pre-existing Dynamic chain entry (as G43p4RtcpSyntax would have written when RTCP is active and ABC changes across the block). HasDynamicEntry(JsonObject) returns true, so the guard passes and the PivotTransform entry is written and tagged KindDynamic. The TestDeps.Kinematics stub makes MakePivotTransformMat(IMachineKinematics, Vec3d) collapse to identity: #BeforeBuild: { \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Dynamic\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } #AfterBuild: { \"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] } ] } Active G68.2 tilted plane — the current block carries the modal TiltTransform snapshot plus an existing Static TiltTransform chain entry (as IsoG68p2TiltSyntax would have written) and MachineCoordinateState.A = 45. The guard reads TiltTransform.Term = \"G68.2\" and passes; with real XyzabcSolver kinematics (table-A / head-B 5-axis), MakePivotTransformMat at abc = (π/4, 0, 0) produces the table-A Rx(45°) rigid matrix. No Dynamic entries in the chain so the new entry stays Static: #BeforeBuild: { \"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 ] } ], \"MachineCoordinateState\": { \"A\": 45 } } #AfterBuild: { \"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 ] }, { \"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 ] } ], \"MachineCoordinateState\": { \"A\": 45 } } Active G68.2 across a rotary word — the feature frame stays pinned in machine space (PinTiltInMachineSpaceAcrossRotaryWords(LazyLinkedListNode, JsonObject, List)). #Previous: had the tilt Rx(30°) composed with the pivot at table-A = 0 (identity on this chain); the current block spoke A45. (one-shot RotaryWords, root MC A = 45) and arrived with the carried Rx(30°) tilt. The tilt entry is rewritten to Tilt·Pivot(prev)·Pivot(cur)⁻¹ = Rx(30°)·Rx(45°) = Rx(75°) — so that composed with the new pivot Rx(−45°) the chain still maps the feature frame exactly where the previous block had it — and the pivot entry is written for A = 45 as in the case above. No tool height entry is present, so nothing else is re-aimed: #Previous: { \"TiltTransform\": { \"Term\": \"G68.2\" }, \"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 ] }, { \"Source\": \"PivotTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ], \"MachineCoordinateState\": { \"X\": 0, \"Y\": 0, \"Z\": 0, \"A\": 0, \"B\": 0 } } #BeforeBuild: { \"TiltTransform\": { \"Term\": \"G68.2\" }, \"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 ] } ], \"MachineCoordinateState\": { \"A\": 45, \"B\": 0 }, \"RotaryWords\": { \"A\": 45 } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G68.2\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [ 1, 0, 0, 0, 0, 0.25881904510252085, 0.9659258262890683, 0, 0, -0.9659258262890683, 0.25881904510252085, 0, 0, 0, 0, 1 ] }, { \"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 ] } ], \"MachineCoordinateState\": { \"A\": 45, \"B\": 0 }, \"RotaryWords\": { \"A\": 45 } } Constructors PivotTransformationSyntax() Initializes a new instance with default settings. public PivotTransformationSyntax() PivotTransformationSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public PivotTransformationSyntax(XElement src) Parameters src XElement Source XML element. Properties Name Syntax kind name (typically the concrete type name). public string Name { get; } Property Value string XName XML element name used to register this syntax with XFactory. public static string XName { get; } Property Value string Methods Build(LazyLinkedListNode, List, NcDiagnosticProgress) Build syntax arrangement into the syntaxPieceNode in-place. public void Build(LazyLinkedListNode syntaxPieceNode, List ncDependencyList, NcDiagnosticProgress ncDiagnosticProgress) Parameters syntaxPieceNode LazyLinkedListNode ncDependencyList List ncDiagnosticProgress NcDiagnosticProgress MakeXmlSource(string, string, bool) Creates an XML representation of the object. This method may also generate additional resources such as related files. public XElement MakeXmlSource(string baseDirectory, string relFile, bool exhibitionOnly) Parameters baseDirectory string The base directory for resolving relative paths relFile string The relative file path for the XML source exhibitionOnly bool if true, the extended file creation is suppressed. Returns XElement An XML element representing the object's state Remarks For the demand of easy moving source folder (especially project folder) without configuration file path corruption, the relative file path is applied. The baseDirectory is typically the folder at the nearest configuration file folder. Since the folder can be moving with the configuration file. Reg(XFactory) Registers this type's deserializer with the given XFactory (or Default when factory is null). Idempotent. public static void Reg(XFactory factory = null) Parameters factory XFactory" }, "api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html", @@ -5837,7 +5862,7 @@ "api/Hi.NcParsers.LogicSyntaxs.html": { "href": "api/Hi.NcParsers.LogicSyntaxs.html", "title": "Namespace Hi.NcParsers.LogicSyntaxs | HiAPI-C# 2025", - "summary": "Namespace Hi.NcParsers.LogicSyntaxs Classes BackBoringSyntax G87 back boring cycle. Supports modal repetition. Cuts upward from Z to R — used to bore the back side of a workpiece. Cycle sequence: Oriented spindle stop (OSS) at current position Rapid (shifted) to init position, then down to bottom Z — tool enters pre-drilled hole without contacting bore wall Shift back to hole center at bottom Spindle start (CW) Feed upward from Z to R-point (back boring cut) Oriented spindle stop at R Tool shift, rapid retract (shifted) to final Z Shift back to center, spindle restart Q specifies the lateral shift distance (mm). Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. BoringCycleSyntax G85/G86/G89 boring cycles. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G86 only] Spindle stop at bottom [G89 only] Dwell P seconds at bottom Retract: G85/G89 → feed retract, G86 → rapid retract [G86 only] Spindle restart (CW) after retract G85: feed to Z, feed retract — smooth bore finish. G86: feed to Z, spindle stop (implicit), rapid retract. G89: feed to Z, dwell P, feed retract — like G85 with bottom dwell. Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. CannedCycleResolveSyntax Resolves the canned-cycle Group-09 state for the current block and writes the result to the CannedCycle section. Active cycle (direct G81..G89 or modal repeat): merges Parsing overrides with previous-cycle stored params, applies G91 incremental-to-absolute conversion and missing-axis fallback, writes CannedCycle with Term, ReturnMode, and Params. The resolved cycle sub-section is left in Parsing under the cycle code for downstream cycle syntaxes (DrillingCycleSyntax, etc.) to read. Explicit cancel (G80 flag present on a non-cycle block): consumes the G80 flag and writes CannedCycle = { Term: \"G80\" }, acting as a hard sentinel for Hi.NcParsers.LogicSyntaxs.CannedCycleSyntaxUtil modal lookback. No Group-09 activity: leaves the block untouched. Must be placed after PositioningSyntax and before the individual cycle syntaxes in the chain. CircularMotionSyntax Writes McArc motion for circular commands (ISO G02/G03). Detects motion mode from Flags, reads I/J/K center offsets or R radius from Parsing, computes arc center in program coordinates, and writes a one-shot MotionEvent (form + arc params) plus a modal MotionState (Term). G02/G03 mode is modal (Group 01) — persists across blocks via Term. Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before LinearMotionSyntax in the syntax chain. Both share the Group 01 motion slot; whichever writes a MotionEvent first claims it. IsIjkAbsolute switches the I/J/K reading to absolute center coordinates (Heidenhain DIN/ISO — the ISO twin of the Klartext CC pole; the Heidenhain list sets it, every other brand keeps the offset default). In that mode the center is modal: letters not written in a block inherit the previous absolute pole (AbsoluteIjkPoleKey, carried by the brand's ModalCarrySyntax), a letter never written falls back to the arc start's component, a letters-free block that commands an endpoint continues the modal arc off the pole (a flags-only block stays motionless), a G91 block reads offsets again and breaks the pole chain, and the plane-normal letter is a center coordinate — never the per-turn helix pitch. Behavior mirrors HardNcLine.BuildArcNcArg + ArcNcArg.GetCenterOrCenterOnBeginPlane (HiUniNc 3.1.152.2) bit for bit. CodedPositionUtil Shared coded-position resolution for the write-stage consumers (McAbcSyntax for rotary words, IncrementalResolveSyntax for linear words): turns a per-word PositioningOverride entry of the coded family (CodedAbsolute / CodedIncremental / CodedShortest / CodedPositiveOnly / CodedNegativeOnly — stamped by SiemensAcIcSyntax for CAC()/CIC()/CDC()/CACP()/CACN()) plus the evaluated position number into an axis coordinate via IIndexingPositionConfig, and names the plain override value the caller rewrites the entry to — so the McAbcCyclicPathSyntax tail-pass and every other downstream reader only ever see the established non-coded vocabulary. Failure semantics mirror the Siemens alarms as far as a simulator can: an invalid position number (alarm 17510) or a missing table reports an error diagnostic and resolves to \"hold\" — the caller writes the anchor so the axis does not move. CIC(0) also resolves to hold, by specification (\"the indexing axis is not traversed\") and silently. A CIC from between two indexing positions advances to the n-th next position in the programmed direction. On a cyclic indexing axis the incremental sign becomes a directional (PositiveOnly / NegativeOnly) approach; increments spanning more than one revolution reach the correct position but collapse the extra full turns (the tail-pass windows cover one revolution). CoolantSyntax Consumes M07 (mist ON), M08 (flood ON), and M09 (coolant OFF) from Flags and writes the ICoolantDef section with both IsOn (convenience flag) and Mode (abstract mode name: Flood / Mist / Off). Modal — persists via backward lookback. CoordinateOffsetUtil Shared utilities for all coordinate offset syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. DrillingCycleSyntax G81/G82 drilling cycle (rapid retract). Supports modal repetition. G82 covers G81 — the only difference is an optional dwell (P) at the bottom. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G82 only] Dwell P seconds at bottom Rapid from bottom to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. DwellSyntax Consumes the non-modal G4/G04 dwell sub-section captured by G4Syntax (Parsing.G4 / Parsing.G04) and emits a CompoundMotion with a single Dwell item, which Hi.NcParsers.Semantics.CompoundMotionSemanticUtil resolves into an ActDelay of the dwell duration. Argument dialects are configured per brand preset: Fanuc-family default — SecondsPrefixes = X/U (seconds), MillisecondsPrefixes = P (milliseconds), SpindleRevPrefixes = S (spindle revolutions). Siemens — G4 F / G4 S: the preset sets SecondsPrefixes = F, clears the milliseconds list, keeps S revolutions. Because the capture layer owns the whole argument (the F/X/P word lands inside the dwell sub-section, never in Parsing.F / Parsing.X), a dwell block cannot poison the modal Feedrate and its X-word cannot mint a ghost motion — structural fixes for the G04 F60000 feed-poison and G04 X0.5 ghost-motion hazards. Spindle-revolution dwell needs the modal spindle speed: this syntax must be placed after SpindleSpeedSyntax in the Logic bundle so the block's own modal SpindleSpeed section is already written. When no positive rpm is known the dwell is consumed and recorded via an Unsupported Message (Dwell--SpindleRevUnresolved) instead of being time-simulated — no act is emitted. When several recognized argument prefixes appear on one block the resolution priority is seconds → milliseconds → revolutions; every recognized key is consumed either way. Unrecognized keys inside the sub-section are left in place so they surface through UnconsumedCheckSyntax. FanucPathSmoothingSyntax Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing) and records the modal state in the PathSmoothing JSON section using the FanucPathSmoothing schema. Q1 enables, Q0 disables; the optional R{n} precision-level is preserved as Level. The simulation does not alter the tool path — this is a controller-internal interpolation black box; the captured state exists for bidirectional NC-text reconstruction. Modal carry to subsequent blocks is handled by ModalCarrySyntax, which already tracks the PathSmoothing section key and deep-clones it forward. Also consumes the bare G05 P{n} HPCC family (captured by G05Syntax) into the block-local FanucHpcc section — recognized, intentionally not simulated (the SiemensStopreSyntax pattern). Ignoring P10000/P0 is safe offline; an ignored high-speed cycle machining call (P10001–P10999) means the simulation misses that machining, surfaced as a Warning. See IFanucHpccDef for the P function-selection semantics. The section is deliberately separate from the modal PathSmoothing section and is not modal-carried. FeedrateSyntax Consumes F (feedrate) from Parsing and G94/G95 mode from Flags. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a IFeedrateDef section. FineBoringSyntax G76 fine boring cycle. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Oriented spindle stop (OSS) Tool shift by Q in +X direction (clear bore wall) Rapid retract (shifted) to final Z Tool shift back to center Spindle restart (CW) Q specifies the lateral shift distance (mm) to avoid dragging the tool across the finished bore surface during retract. Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. G43p4RtcpSyntax Handles G43.4 RTCP (Rotary Tool Center Point) activation. Writes the IToolHeightCompensationDef section and the ToolHeightCompensationSource entry in ProgramToMcTransform — a tool-normal · offset_mm translation at the block endpoint ABC. The chain entry is tagged KindDynamic when RTCP is active and ABC changes across the block, and KindStatic otherwise. The RTCP kinematic rotary part (Pn→MC rigid transform) is orthogonal to this syntax and is written by PivotTransformationSyntax on every block, because rotary state remains in effect beyond the RTCP modal (e.g. a non-RTCP G01 after G49 still inherits the last ABC from the program). The \"rotary dynamic\" distinction lives on the chain entry's KindKey alone and is read via HasDynamicEntry(JsonObject) by LinearMotionSyntax to pick ClLinear vs McLinear. G43.4 is used by Fanuc, Mazak, Syntec, and Okuma. Siemens (TRAORI) and Heidenhain (M128) are handled by separate syntaxes. Must be placed after ToolHeightOffsetSyntax (to override the ToolHeightCompensation entry when RTCP is active) and before PivotTransformationSyntax (which runs last in the chain). G53p1RotaryPositionSyntax G53.1 — non-modal, one-shot rotary axis positioning. Positions the rotary axes (A/B/C) to align the physical tool axis with the active tilted work plane defined by G68.2. XYZ position is unchanged; only rotary axes move via rapid traverse. Requires IsoG68p2TiltSyntax (or equivalent) to have written the tilt transform. Uses IMachineKinematics to solve for the target A/B/C via inverse kinematics. Must be placed after IsoG68p2TiltSyntax (needs tilt data) and before ProgramXyzSyntax in the syntax chain. Writes A/B/C into MachineCoordinateState. Motion is handled by LinearMotionSyntax via modal G00/G01. HighSpeedPeckCycleSyntax G73 high-speed peck drilling cycle (chip breaking). Supports modal repetition. Drills in increments of depth Q, partially retracting by PeckRetractionDistance_mm between strokes (instead of fully back to R like PeckDrillingCycleSyntax). Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: feed Q deeper, rapid retract by d If remainder exists: feed to bottom Z, rapid retract by d Rapid to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. IncrementalResolveSyntax Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. Per-word override: a block-root PositioningOverride section (written by SiemensAcIcSyntax for the Siemens per-word coordinate functions, and by the Heidenhain L / C / CC / CYCL CALL POS parsers for the klartext I-prefixed words — see HeidenhainIncrementalAxisWordUtil; the CYCL CALL POS words never reach this syntax, HeidenhainCannedCycleSyntax resolves them on the spot ahead of it) beats the modal term for the listed axes on this block only: an Incremental entry converts that word even under G90, an Absolute entry skips it even under G91 — as does, deliberately, every other non-Incremental value (the rotary-family Shortest / PositiveOnly / NegativeOnly entries are absolute targets; their swing resolution lives in McAbcCyclicPathSyntax, not here). A coded-position entry (CodedAbsolute / CodedIncremental — Siemens CAC()/CIC() on a linear indexing axis) carries an indexing position number instead of a coordinate: the number is resolved through IIndexingPositionConfig via TryResolveCodedTarget(IIndexingPositionConfig, string, string, double, double, ISentenceCarrier, NcDiagnosticProgress, out double, out string), the word is rewritten to the resolved absolute coordinate, and the entry to Absolute; a failed resolve reports an error and holds the last program position. Axes without an entry follow the modal term unchanged, so brands that never write the section (Fanuc/...) keep the exact legacy behavior. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]; the Heidenhain bundle instead walks [\"Parsing\", \"CC\"] for the klartext circle-center record (CcAwareIncrementalResolveSyntax). All matching paths are converted against the same last program position — a nested record's words are distances from where the tool stands, exactly like the root's. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. IsoCoordinateOffsetSyntax ISO/Fanuc/Mazak/Okuma/Syntec: resolves the G54–G59.9 work coordinate offset and the Fanuc-family additional work coordinate systems (G54.1 Pn, also spelled G54 Pn). Reads G54/G55/.../G59.9 from Flags and the captured Parsing.G54.1 = {P: n} object (written by G54p1Syntax for both spellings), which resolves to the coordinate id \"G54.1P{n}\" that the brand parameter tables map to #7001+ (IsoCoordinateAddressMap). Looks the offset Vec3d up via the IIsoCoordinateConfig dependencies (brand parameter table or IsoCoordinateTable) and composes it into ProgramToMcTransform. Modal — the active coordinate persists via backward lookback. Default coordinate ID is set by StaticInitializer. A block that selects a work coordinate system nobody has configured is reported on that block (never on the modal re-query of the following blocks): Coord-WorkOffset--AdditionalZero when an additional system (G54.1 Pn) resolves to no entry or to (0, 0, 0) — the brand tables seed every P row with zero, hardware-faithfully, so a zero there is the \"never entered\" state, whereas a zero row of the standard series (G54–G59 and the G59.1–G59.9 extension alike) is a legitimate authoring convention and stays silent; Coord-WorkOffset--NoTableEntry when no provider resolves the id at all (e.g. a G59.x on a runner carrying no brand-neutral table beside its brand table); and Coord-WorkOffset--IndexUnresolved when the P word is not a positive integer (vacant variable, non-integer), in which case the active system is kept. A bare G54.1 without P is not this syntax's business: the parameterized capture consumes nothing without a parameter, the dotted number lands in Parsing.Flags where it is not a G54-series member, so the active system is kept and the unconsumed check reports the flag. IsoG68RotationSyntax ISO/Fanuc: resolves G68 (2D coordinate rotation) and G69 (cancel). Computes a rotation Mat4d around the active plane normal and composes it into ProgramToMcTransform. No IMachineKinematics dependency needed — G68 is pure geometric rotation. Managed commands: G68, G69 (idempotent with IsoG68p2TiltSyntax). IsoG68p2TiltSyntax ISO/Fanuc: resolves G68.2 (tilted work plane) and G69 (cancel). Computes a tilt Mat4d from I/J/K euler angles (Fanuc ZXZ convention) and composes it into ProgramToMcTransform. Managed commands: G68.2, G69 (idempotent with IsoG68RotationSyntax). Siemens equivalent: CYCLE800 (separate syntax). Heidenhain equivalent: PLANE SPATIAL (separate syntax). IsoLocalCoordinateOffsetSyntax ISO G52: Local coordinate system offset (additive to G54-series). G52 X10 Y20 Z5 → sets local offset. G52 X0 Y0 Z0 → cancels (resets to zero). M30 (program end) → also cancels. Reads Parsing.G52 (from G52Syntax), writes IsoLocalCoordinateOffset section, and adds an \"IsoLocalCoordinateOffset\" entry to the transformation chain. Modal — persists via backward lookback until changed or cancelled. LinearMotionSyntax Writes McLinear motion for linear commands (ISO G00/G01, Heidenhain L/LN). Detects motion mode from Flags, writes a one-shot MotionEvent section (form + isRapid) plus a modal MotionState section (Term) when MachineCoordinateState exists on the block. McLinearMotionSemantic discriminates between XYZ-only and XYZABC motion by checking whether rotary axis values are present in MachineCoordinateState. Must be placed after McAbcSyntax in the syntax chain. MCodeExpansionSyntax Expands machine-declared M-codes (IMCodeDeclarationConfig on the controller parameter table) into the canonical ISO flags the regular consumers already understand: tool change → M06, spindle direction → M03/M04/M05, coolant → M07/M08/M09. Must run ahead of SpindleSpeedSyntax, CoolantSyntax, and ToolChangeSyntax — expanding early is what lets one composite OEM code (e.g. M13 = spindle CW + flood coolant) feed several downstream consumers without any of them fighting over who removes the original flag. Same rewrite-into-shared-vocabulary pattern as HeidenhainRadiusCompSyntax (RL/RR/R0 → G41/G42/G40). Two deliberate boundaries keep the rewrite faithful. Declarations whose sole content is a spindle direction (IsSpindleDirectionOnly) are NOT expanded — SpindleSpeedSyntax resolves them in place via TryResolveDirection(string, out SpindleDirection), which keeps legacy configs bit-identical and avoids the expansion product being re-translated by that same custom-first map (e.g. a mirrored M03↔M04 remap would otherwise flip direction). Expansion codes are inserted at the declared flag's own position, and a code whose raw twin also appears un-declared elsewhere in the block is not emitted — the block's textual order keeps deciding last-wins conflicts exactly as it did before. Declared-but-unmodeled behavior stays loud: a declaration carrying an UnmodeledNote emits one DeclaredMCode--UnmodeledEffects informational diagnostic per occurrence — a declaration replaces the raw Parsing--Unconsumed warning with an explanation, never with silence. A declaration with no effects and no note consumes its code silently by explicit intent. Undeclared codes are untouched and keep falling through to UnconsumedCheckSyntax. MachineCoordSelectSyntax Handles machine coordinate selection — non-modal, one-shot. The axis values (X/Y/Z) in the block are interpreted as machine coordinates, bypassing all work offsets, local coordinates, tool height compensation, and coordinate rotations. If G91 (incremental) is active, the code is ignored per ISO standard. A per-word incremental stamp on the block (block-root PositioningOverride entry Incremental — Siemens SUPA Y=IC(-10), klartext L IY-10 M91) is a distance in the machine frame: the word is added to the previous machine position of that axis. Defaults to ISO G53. Brands with additional one-shot machine-coordinate codes widen SupportedCodes — the Siemens preset adds G153 and SUPA (both suppress every active frame for one block; in this pipeline all of those reduce to \"bypass the composed ProgramToMcTransform\", which the ProgramXyz back-derivation below already models). The matched code is stamped verbatim into Term for bidirectional source recovery. Rotary words on the same block (e.g. SUPA G0 B0, G53 A0 C0) are consumed by McAbcSyntax ahead of this syntax — machine and program rotary coincide while no rotary offsets are modeled — and the block is still a machine-coordinate positioning: the linear axes hold their machine position when no X/Y/Z word is given, and the motion is always McLinear. A machine-coordinate block never takes the RTCP tool-center-point linkage: on a real controller G53 applies no compensation, so a rotary swing commanded through it turns the axis in place instead of dragging X/Y/Z to pin the tool tip (the tip's post-swing program coordinate is what the back-derivation reports). Must be placed before IncrementalResolveSyntax and ProgramXyzSyntax in the syntax chain. When a supported code is active, this syntax consumes X/Y/Z from Parsing and writes MachineCoordinateState directly, preventing ProgramXyzSyntax from processing them as program coordinates — and, ahead of the resolve, reading a per-word incremental word raw instead of re-based into the program frame. McAbcCyclicPathSyntax Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. Two stages, mirroring McXyzSyntax: Root MachineCoordinateState — anchored at the previous block's modal rotary state. CompoundMotion.ItemsKey[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i > 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion IAct segments rather than a single root-MC stamp. Per-word directional override: a block-root PositioningOverride entry (stamped by SiemensAcIcSyntax) valued PositiveOnly (Siemens ACP()) or NegativeOnly (ACN()) swaps that axis's window for this block only: [anchor, anchor+360°) / (anchor-360°, anchor] instead of the default ±180° — the approach direction is forced even when it is the longer way around. A target congruent with the anchor (within an ULP-scale epsilon) keeps the anchor value verbatim — no move, never a spurious full turn, and no deg→rad→deg drift. Shortest (DC()) is the default window and needs no special path here. The override is read from the current block only (it is one-shot, never carried — deliberately unlike the modal RotaryWrap gate's one-step previous fallback) and applies to the root MC stage only, not to CompoundMotion items (G28/G74/G75 expansions capture their words in sub-objects the stamping syntax never sees, so an override can only ever describe a root word). Directional/shortest entries keyed by an axis outside the modular set are reported as Coord-McAbc--003 — the promise cannot be honored there and silence would mis-read the program's intent; an entry with no anchor to resolve against (first rotary value in the stream) is reported as Coord-McAbc--004 and adopted unwrapped, matching the default path. Per-word incremental override: an Incremental entry (Siemens IC(), klartext IC+270) is a signed traverse by definition — McAbcSyntax already wrote anchor + delta — so this pass keeps that value verbatim for the axis instead of folding it into the ±180° window (a +270° chain dimension must not become a -90° swing). Incremental entries on non-modular axes need no warning: the literal value is what the axis would do anyway. McAbcSyntax Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Per-word override: a block-root PositioningOverride section (written by SiemensAcIcSyntax for the Siemens AC()/IC() coordinate functions, and by the Heidenhain L / C parsers for the klartext IA+/IB+/IC+ words) marks a rotary word Incremental: the parsed value is then added to the previous modal value of that axis (previous MachineCoordinateState lookback, falling back to a value already present in the current section, then 0) instead of being written as an absolute angle. The accumulated raw degrees stay monotonic across iterations: the McAbcCyclicPathSyntax tail-pass keeps an Incremental-stamped axis literal (a chain dimension is a signed traverse, never re-shortened), so even a +270° step survives as net rotation. An Absolute entry (from AC()) matches the default write and needs no special path — and so, deliberately, do the rotary-family entries Shortest (DC()) / PositiveOnly (ACP()) / NegativeOnly (ACN()): this syntax writes the raw absolute target and the shortest/directional swing is resolved by the McAbcCyclicPathSyntax tail-pass, which owns the wrap math. Brands that never write the section keep the exact legacy behavior. Coded-position overrides (Siemens CAC()/CIC()/CDC()/CACP()/CACN()) carry an indexing position number instead of an angle: the number is resolved through IIndexingPositionConfig via TryResolveCodedTarget(IIndexingPositionConfig, string, string, double, double, ISentenceCarrier, NcDiagnosticProgress, out double, out string) and the override entry is rewritten to the plain vocabulary (Absolute / Shortest / PositiveOnly / NegativeOnly — a cyclic CIC keeps its programmed direction through the directional values) before the tail-pass runs, so the tail-pass never sees a coded value. A failed resolve (invalid number, missing table) reports an error and holds the axis at its previous value. Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. McAbcXyzFallbackSyntax Fills missing X/Y/Z on an ABC-only MachineCoordinateState section. Behaviour depends on whether the block is under RTCP with rotary motion, as indicated by HasDynamicEntry(JsonObject): Non-dynamic (no RTCP or RTCP with ABC stable) — the programmed tool tip stays put in MC while rotary axes (if any) are unchanged, so we simply copy X/Y/Z from the previous block's MachineCoordinateState. This matches NC modal XYZ carry-forward for rotary-only blocks such as G00 A30. (non-RTCP pivoting). Dynamic (RTCP active + ABC changing) — the programmed tool tip must stay fixed in program coordinates while MC XYZ shifts to compensate the new rotary state. Looks up the last ProgramXyz and re-derives MC = inheritedProgramXyz × composedTransform, where the composed transform is the block's endpoint chain (now including PivotTransformSource as a full rotation+translation Mat4d, so the chain already encodes the kinematic IK). The carried ProgramXyz is also stamped onto the current block so downstream consumers see a consistent ProgramXyz + MC pair. Pair with McAbcSyntax, which runs early to write ABC but deliberately leaves X/Y/Z empty so McXyzSyntax can still derive MC XYZ from ProgramXyz via the transform chain when the block carries linear motion. If McXyzSyntax has nothing to derive (no ProgramXyz), this syntax completes the MC section as described above. Does nothing when the section already carries all three of X/Y/Z (normal linear-motion blocks), or when there is no section at all (pure parse-only block that introduces no MC). Must be placed after McXyzSyntax and before McAbcCyclicPathSyntax / LinearMotionSyntax. McXyzSyntax Derives MachineCoordinateState from ProgramXyz by applying the composed ProgramToMcTransform. Processes two stages: Root ProgramXyz → root MachineCoordinate CompoundMotion.ItemsKey[*] — derives MachineCoordinate from ProgramXyz for items that have ProgramXyz but no MachineCoordinate Must be placed after syntaxes that write ProgramXyz (e.g., ReferenceReturnSyntax) and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). OrientationVectorResolveSyntax Shared vector-orientation resolve — the brand-independent half of tool-axis-vector 5-axis programming (Heidenhain LN TX/TY/TZ; the Fanuc/Syntec/Mazak G43.5 I/J/K and Siemens A3=/B3=/C3= slots when their adapters land). Consumes the ToolOrientationKey section a brand adapter wrote — { “Vector”: {X,Y,Z}, “Term”: “” }, unit vector in program coordinates — and resolves it into rotary-axis degrees on MachineCoordinateState via OrientationToMcAbc(Vec3d, out Vec3d) (axial-only: rotation about the tool axis is free). Everything downstream is the existing RTCP pipeline untouched: the brand RTCP syntax sees the endpoint ABC, marks the tool-height entry KindDynamic on a rotary change, and LinearMotionSyntax routes the block to ClLinear per-step IK. Branch continuity is seeded explicitly: before solving, the chain is set to the previous block's rotary state (McAbcToMat(Vec3d) on the per-axis MC lookback) so the solver follows the current solution branch deterministically — the implicit chain state cannot be trusted under lazy or out-of-order rebuilds — and the solved angles are unwrapped to the nearest ±360° window of that anchor. Must run after McAbcSyntax (explicit rotary words and lookback land first; a vector on the same block overrides them) and before the brand RTCP syntax and McXyzSyntax (the section is created rotary-only, so the XYZ derivation still runs — the McAbcSyntax rotary-only discipline). Registered per brand list by the brand that has a vector adapter. Degradation is diagnosed, never silent: no IMachineKinematics → Orientation-Vector--NoKinematics; no rotary axes → Orientation-Vector--NoRotaryAxes; solver failure → Orientation-Vector--IkFailed. In every case the XYZ motion proceeds and the posture holds at its previous value (deliberately unlike the CLSF path, which drops the motion on IK failure — divergence recorded on the plan card). The section itself stays on the block as the semantic record. PeckDrillingCycleSyntax G83 peck drilling cycle. Supports modal repetition. Drills in increments of depth Q, fully retracting to R between strokes. Cycle sequence (per stroke): Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: rapid to clearance above previous depth, feed Q deeper, rapid back to R If remainder exists: feed to bottom Z, rapid to R Rapid from R/bottom to final (G98 → init Z, G99 → R) Retraction distance is read from ICannedCycleConfig (Fanuc #4002 / Syntec Pr4002, or FallbackConfig fallback). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. PivotTransformUtil Shared engine for the brand pivot-gate syntaxes (PivotTransformationSyntax — ISO/Fanuc family, SiemensPivotTransformationSyntax — Siemens). Each brand syntax owns only its gate (which modal terms mean “commanded XYZ needs the Pn→MC kinematic rigid transform”); the endpoint-ABC resolution and the PivotTransform chain entry composition live here so every brand writes the identical JSON vocabulary. PivotTransformationSyntax ISO/Fanuc-family pivot gate: writes the PivotTransformSource entry into ProgramToMcTransform on blocks where the controller is interpreting commanded XYZ in a frame that needs the Pn→MC kinematic rigid transform — namely active RTCP (G43.4) or active tilted plane (G68/G68.2). On plain-mode blocks (no RTCP, no tilted plane), the controller treats commanded XYZ as machine-frame directly, so the indexed rotary angle is a positioning value only and must not fold into the linear axes; this syntax skips those blocks and leaves the chain at identity (or whatever non-kinematic offsets earlier syntaxes contributed). Brand variants with their own modal vocabulary gate the same shared engine (PivotTransformUtil): Siemens TRAORI/CYCLE800 → SiemensPivotTransformationSyntax; Heidenhain M128/PLANE SPATIAL would follow the same pattern. Mirrors real Fanuc semantics: plain G43 offsets along the active tilted-plane normal (or machine Z when no tilt is active), and plain XYZ moves map directly to machine axis registers regardless of indexed table/head rotary position. Only G43.4 follows the live tool vector and only G68.2 redefines the work-plane orientation — both of which this guard detects via the existing chain markers. Chain position: must run after all Pn-frame writers (IsoG68p2TiltSyntax, ToolHeightOffsetSyntax, G43p4RtcpSyntax, IsoCoordinateOffsetSyntax, brand-specific coord offset syntaxes) so the guard sees the finalised mode markers and the PivotTransform entry — when emitted — naturally lands as the last chain element. Must run before McXyzSyntax / ProgramXyzSyntax so they see the completed chain. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). PlaneSelectSyntax Consumes G17/G18/G19 plane selection from Flags and writes IPlaneSelectDef section using conventional axis-pair names (XY/ZX/YZ). Modal — persists via backward lookback. Default is XY (G17). Downstream consumers (CircularMotionSyntax, IsoG68RotationSyntax) call GetPlaneNormalDir(JsonObject) to read the resolved plane. PolarGCodeCheckSyntax Warns on G-codes that Fanuc disallows during Polar Coordinate Interpolation (G12.1), per the manual whitelist mirrored from HardNc IsGCodePolarModeCompatible (IncompatibleDiagId). Placed FIRST in the Logic bundle so the scan sees Parsing Flags before the mode/plane/offset syntaxes consume their codes — at the old in-place check position, G17/G18/G19, G20/G21, G49, G53.1 and G68/G69 cancels had already been eaten and passed silently. Polar-active detection needs no valve of its own: the PREVIOUS block's PolarInterpolationState is already final (the whole Logic bundle ran for it) unless this block exits with G13.1; a block entering with G12.1 is checked too. Residual blind spot (documented): codes captured as Parsing sub-objects by ParameterizedFlagSyntax in the Parsing bundle (G28, G43/G44, G43.4, G05.1, G52, G54.1, G68/G68.2, canned cycles) never reach Flags and stay outside the scan. They cannot corrupt the polar trajectory — the plane normal is fixed by the polar pair — so the gap is diagnostic-only, same as HardNc's own per-code parse-time check. PolarInterpolationSyntax Maintains the modal Polar Coordinate Interpolation valve section (PolarInterpolationState) for Fanuc G12.1/G13.1. On a G12.1 block: consumes the flag, reads the block's own X/C words as the anchor (InitRxcz; the X word is a diameter and is halved), converts the previous program position (program X/Z + machine C angle) onto the polar hypothetical plane via GetProgramPolarRxczByOrdinaryProgramXcz(Vec3d), and writes both the state section and the entry ProgramPolarRxcz position. Mirrors HardNc HardNcLine case 12_100. On a G13.1 block: consumes the flag and stops carrying the state — the block itself is already Cartesian, matching HardNc case 13_100. On other blocks: re-materializes the previous block's state section (single-step lookback carry, the PositioningSyntax pattern), and warns FanucPolar--IncompatibleGCode for G-codes outside the Fanuc polar-mode whitelist (mirrors HardNc IsGCodePolarModeCompatible). Must be placed before McAbcSyntax so the downstream ProgramRxczSyntax can consume the hypothetical C word before it is interpreted as a rotary machine axis. PositioningSyntax Detects G90/G91 positioning mode from Flags (or by modal lookback) and writes a Positioning section (Term, Mode) to the block JSON. Fanuc/ISO: reads G90/G91 from Flags (global modal). Heidenhain: klartext has no modal word — the modal state stays at the G90 default and the I-prefixed words (IX+20) ride on the same per-word override as Siemens, stamped by the L / C / CC / CYCL CALL POS parsers (see HeidenhainIncrementalAxisWordUtil); the DIN/ISO dialect on that brand uses G90/G91 like Fanuc. Siemens: the AC()/IC() per-word override rides on top of this modal state — SiemensAcIcSyntax writes a PositioningOverride section the downstream consumers (IncrementalResolveSyntax, McAbcSyntax) honor per axis. Does NOT convert incremental values — that is handled by IncrementalResolveSyntax which can be placed later in the syntax chain, after canned cycle syntaxes have consumed their parameters with cycle-specific G91 semantics. ProgramEndCleanSyntax Clears the per-block Vars.Volatile dictionary on blocks that triggered program end (M02 / M30, identified by the ProgramEnd section written by ProgramEndSyntax). Real Fanuc clears non-retained common variables (#100-#499) on program end + reset; this syntax models that behaviour at the simulator level. The clear happens on the same block that carried M02/M30 — the next block's VolatileVariableReadingSyntax carry then sees an empty dictionary on the predecessor and starts fresh. Pipeline placement: must run after both ProgramEndSyntax (which writes the ProgramEnd section this syntax checks) and VolatileVariableReadingSyntax (so the carry has already happened on this block; this syntax overwrites the result). Retained common variables (#500-#999, owned by RetainedCommonVariableTable) are untouched — they survive program end on real hardware (NV-RAM). Local variables (#1-#33, scope: macro call frame) are also untouched here; their lifecycle belongs to G65/G66/M99 push/pop, not program end. Also clears any active FanucModalMacro on the same edge: a G66 modal that was still active when M02/M30 hit is implicitly cancelled, matching real Fanuc reset behaviour. The section is overwritten with a G67-shaped cancel marker so the carry mechanism in FanucModalMacroSyntax sees the boundary and does not propagate the modal past the program-end edge. ProgramEndSyntax Consumes M02/M30 (program end) from Flags and writes IProgramEndDef section. Downstream syntaxes that need to reset modal state on program end (e.g. IsoLocalCoordinateOffsetSyntax for G52 reset) should read the ProgramEnd section rather than scanning for M30 in Flags directly. The program-end edge. On a real controller M02/M30 ends the program and enters the reset state: the modal G codes return to their power-on defaults — tool length compensation is cancelled (G49, which also ends tool-center-point control: Fanuc TCP is cancelled by G49 or reset), the tilted work plane and coordinate rotation are cancelled (G69), cutter radius compensation is cancelled (G40), the canned cycle is cancelled (G80). A simulator that plays a file with several programs chained by M02 must keep playing, so the reset is modelled as an edge between the program-end block and its successor: the program-end block itself keeps the modal state it executed under (its own motion — G0 Z100. M30 — still sees the compensation), and the successor starts from the reset defaults. Each modal owner tests the edge with IsResetEdge(LazyLinkedListNode) in its single-step node.Previous lookback and writes its cancel state on the successor instead of carrying: ToolHeightOffsetSyntax (G43/G44 → G49), G43p4RtcpSyntax (G43.4 → G49), SiemensTraoriSyntax (TRAORI → TRAFOOF, the D compensation itself stays — Siemens retains the active tool on reset), HeidenhainRtcpSyntax (M128 / TCPM → off, TOOL CALL compensation stays), TiltTransformUtil (every tilt / rotation / frame term → G69), RadiusCompensationSyntax (G41/G42 → G40, the modal D is kept) and CannedCycleResolveSyntax (→ G80). Deliberately not reset: G00/G01, G90/G91, G17–G19, G94/G95, the work offset (G54–G59) and the path-smoothing mode — their reset defaults are controller-parameter dependent and they do not enter the program→machine transform chain; G20/G21 is retained by the controller itself. G52 keeps its existing behaviour of clearing on the program-end block (HardNc parity). A block right after the edge that has no words at all (a comment line) is still the edge — every owner handles it before any \"no Parsing\" early return, or the modal carry would clone the active section across it. Must be placed before syntaxes that depend on the ProgramEnd section. ProgramRxczSyntax Polar-mode sibling of ProgramXyzSyntax: while the PolarInterpolationState valve section is present, consumes the block's X/C/Z words as polar hypothetical-plane coordinates (X = diameter, halved; C = hypothetical axis in mm) and writes: ProgramPolarRxcz — the anchor-relative polar position (G90/G91 resolved against the previous block's position, mirroring HardNc NcGroup03.GetNcFromSyntax); ProgramXyz — the derived ordinary program position (radius, previous program Y, Z), so the downstream McXyzSyntax derives machine XYZ through the normal transform chain — ProgramXyzSyntax itself naturally no-ops because the axis words are already consumed; the machine C angle (degrees) into MachineCoordinateState — placed before McAbcSyntax, which then preserves the value instead of treating C as a directly-commanded rotary word; on motion-programmed blocks, MotionState and a MotionEvent with McPolarLinear (G00/G01) or McPolarArc (G02/G03 with R or I/J/K resolved on the hypothetical plane). The G12.1 entry block is skipped (its position was anchored by PolarInterpolationSyntax). Angle-branch resolution mirrors HardNc: GetOrdinaryProgramXcz_rad(Vec3d, double, Vec3d) chained from the previous machine C angle. ProgramStopSyntax Consumes the program-stop words in SupportedCodes (default M00 unconditional / M01 optional) from Flags and writes a IProgramStopDef section on the block that carried the flag. Non-modal: the section is written only on the exact block where the stop code appears. SupportedCodes is ordered by priority: when several listed words share a block the first listed one wins and stamps Term with its literal; every listed word is removed from the block either way. A brand preset widens the list for its own vocabulary (the Heidenhain STOP word — the SupportedCodes precedent). Siblings with ProgramEndSyntax (M02/M30) which handles end-of-program, not in-program stops. The parsing layer only records NC intent. Whether M01 actually pauses the run is a runtime/semantic decision gated by the operator's \"Optional Stop\" switch (analogous to IBlockSkipConfig for block skip). ProgramXyzSyntax Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags. Writes ProgramXyz sub-object to SyntaxPiece.JsonObject. Must be placed after BundleSyntax since it uses cross-node lookback for last position. McXyzSyntax (placed after this in the chain) reads ProgramXyz and writes MachineCoordinateState. ProgramXyzUtil Shared utilities for ProgramXyz and MachineCoordinateState lookback and resolution. Used by ProgramXyzSyntax, ReferenceReturnSyntax, and semantic resolvers that need position lookback. Two strategies for \"what's the program coordinate at a block's endpoint?\" — both invert an MC value through an ProgramToMcTransform chain, but they pick the chain from different nodes: By current-state transform (ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d)) — modal anchor is MachineCoordinateState. Re-expresses an MC value (typically a predecessor's modal MC) into the current block's program frame using the current block's chain. Suitable for chain-change blocks where the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame; mirrors legacy HardNcLine.RebuildProgramXyzByMc. By corresponding-state transform (ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode)) — modal anchor is ProgramXyz. Recovers the program coordinate that nodeCarryingMc was originally commanded at, by inverting that same node's own transform on its own MC. Suitable for RTCP rotary-dynamic inheritance, where the modal invariant is \"tool tip in workpiece frame stays put while rotary axes turn\" — the recovered Vec3d carries forward as the next rotary block's modal ProgramXyz unchanged, regardless of how its PivotTransform differs. Both strategies yield the same Vec3d when prev and current share the same chain modal state; they only diverge across chain boundaries (RTCP toggle, coord-system swap, tilt activation) and at rotary motion (PivotTransform difference). Pick the wrong one and the result lands in a stale frame: Non-RTCP using \"corresponding\" — leaves the pre-chain-change values, so a block emitted right after G43.4 H03 would inherit ProgramXyz still in the G49 frame and the next motion's MC.Z drifts by the introduced tool-height offset. (This was the 2026-04-25 SoftNc / HardNc divergence found on a five-axis sample program.) RTCP using \"current\" — double-counts the rotary PivotTransform difference, so the inherited workpiece anchor rotates by the C delta on every rotary block. Direct callers of the two strategy helpers are rare — typically you call the dispatcher ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) (block's own MC vs predecessor lookback, picks strategy from HasDynamicEntry(JsonObject)) or GetLastProgramXyz(LazyLinkedListNode) (pure predecessor lookback). ReferenceReturnSyntax Writes ICompoundMotionDef section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by G28Syntax) and converts to machine coordinates via ResolveProgramXyz(JsonNode, LazyLinkedListNode, ISentenceCarrier, NcDiagnosticProgress). Must be placed after LinearMotionSyntax in the syntax chain. Removes the IMotionEventDef section written by LinearMotionSyntax (G28 handles its own motion). Overwrites root MachineCoordinateState and ProgramXyz with reference position for subsequent block lookback. RotaryAxisUtil Shared utilities for rotary axis (A/B/C) resolution. Used by G53p1RotaryPositionSyntax, McAbcSyntax, IsoG68p2TiltSyntax, and other syntaxes that read or write rotary axis values. SpindleSpeedSyntax Consumes S (spindle speed) and spindle direction M-codes from Parsing. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a ISpindleSpeedDef section. Direction is converted from M-codes to the conventional SpindleDirection enum at this layer. Direction M-codes: the ISO defaults M03 (CW) / M04 (CCW) / M05 (STOP) always apply; a machine that starts/stops its spindle with custom M-codes (e.g., ultrasonic M203/M205) declares them on an ISpindleControlConfig dependency (ControllerParameterTableBase), which this syntax consults first — mapped flags are consumed like the ISO ones. Fallback: an S > 0 with no direction ever issued is contradictory (physics would silently never run). The build assumes CW and emits a one-shot SpindleDirection--AssumedCw validation warning — once is structural, not stateful: the stamped CW propagates modally, so later blocks no longer lack a direction. An explicit M05 (STOP) is a real direction and never triggers the fallback. TappingCycleSyntax G84 (right-hand) / G74 (left-hand) tapping cycles. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Spindle reverse at bottom Feed retract to final Z (G98 → init Z, G99 → R) Spindle restore to forward direction G84: forward = CW (M03), reverse = CCW (M04). G74: forward = CCW (M04), reverse = CW (M03). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. TiltTransformUtil Shared utilities for all tilt transform syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. ToolChangeMotionSyntax Synthesizes the machine motion of a tool change: on a block whose SectionName section carries IsChangeKey = true AND whose tool number actually differs from the previously equipped tool, overlays IToolingMcConfig's per-axis tooling position onto the current machine pose (NaN / missing axis = stays) and emits a one-item rapid ICompoundMotionDef to that target — the axis travel a real machine's M06 macro performs before the changer cycle runs. Root ProgramXyz (and the moved rotary axes in root MachineCoordinateState) are overwritten for subsequent-block modal lookback, mirroring HardNcLine's M06 handling (McXyz/McAbc_rad overlay + RebuildProgramXyzByMc). A same-number tool call (M06 without an actual change) emits no motion — the parity twin of HardNc's preT != T overlay gate. A block with its own motion words folds them into the single rapid: the overlay applies on top of the block's commanded position and the stamped CompoundMotion makes LinearMotionSyntax skip the block, so one contour covers both — the HardNc M06 branch shape. Placement: the ReferenceReturnSyntax (G28) slot — after the offset/frame syntaxes (the ProgramXyz back-derivation needs the composed transform), before McXyzSyntax / McAbcCyclicPathSyntax (root MC XYZ backfill; rotary targets wrapped shortest-path by the cyclic tail-pass). Programs that retract on their own (G75/G28/SUPA before M06 — every healthy post) reach the tooling position before the M06 block, so the synthesized move is zero-length and CompoundMotionSemantic emits nothing. Only a program that leaves the tool elsewhere (typically hand-edited) gets an actual synthesized travel — and the machining steps along it surface any material contact, plus the runtime's ToolChange--UnsafePose diagnostic. ToolChangeSyntax Consumes T (tool number) and M06 (tool change) from Parsing. T is modal — persists across blocks. M06 triggers the change. Writes resolved state to a ToolChange section: { “ToolId”: 1, “IsChange”: true, “Term”: “M06” }. TermKey records the trigger command and is only written when IsChangeKey is true (i.e. the block actually carried the tool-change M code); modal-only blocks omit it. Two more keys mirror HardNc's T / PreparationT split. PreparedToolIdKey holds the second T of a dual tool word (T10 T2 M06: 10 is loaded, 2 is pre-selected) and is carried until the next change loads it. EquippedToolIdKey is written on non-change blocks and names the tool in the spindle — the ToolId of the last change — because ToolId on such a block may already be a pre-selection (T2 alone). Consumers read it through ReadEquippedToolId(JsonObject). ToolId is an int for numeric calls (T5) and a string for Siemens string tool calls (T=\"D8R1\", captured by SiemensToolCallSyntax); both shapes carry modally. String names are resolved to tool numbers at the semantic layer (ToolChangeSemantic) — this syntax records the call verbatim. The trigger is machine-configurable. A custom tool-change M-code (Siemens MD22560 $MC_TOOL_CHANGE_M_CODE) is declared on the controller parameter table (IsToolChange) and reaches this syntax already expanded to M06 by MCodeExpansionSyntax. Turret/lathe machines where the T word itself performs the change (Siemens MD22550 $MC_TOOL_CHANGE_MODE = 0) set ToolWordTriggersChange; the block then triggers with ToolWordTerm recorded as TermKey. Without that config a bare T block stays pre-selection only — magazine rotation is the PLC's business and moves no feed axis. ToolHeightOffsetSyntax Resolves ISO tool height offset (G43/G44/G49) to the effective offset value (mm) and composes the offset as a translation into the accumulated ProgramToMcTransform matrix. RTCP modes (G43.4, TRAORI, M128) are handled by separate brand-specific syntaxes (e.g., G43p4RtcpSyntax). UnitModeSyntax Detects the unit-system code (ISO Group 06: G20 inch / G21 metric) from Flags and writes a Unit section (Term, System). Modal — absence of an explicit flag inherits the previous block's unit, defaulting to Metric at program start. The code vocabulary is configurable per brand: InchCodes / MetricCodes default to ISO G20 / G21; the Siemens preset uses G70+G700 / G710+G71 instead (G70/G71 switch geometry-word interpretation only, G700/G710 also switch feedrate interpretation — a distinction preserved via the verbatim Term but irrelevant to this record-only syntax; both inch variants warn identically). The first MetricCodes entry doubles as the program-start default Term. RS-274-D, Syntec and Fanuc turning G-code system C all spell the units G70 inch / G71 metric, and the Fanuc milling dialects (RS-274-D descendants) read them the same way, so the Fanuc/Syntec presets carry all four codes. The finishing/roughing-cycle collision exists only on Fanuc turning G-code systems A/B (system C moved those cycles to G72/G73) — a future turning preset for those systems must not inherit this milling preset's vocabulary. The HiNC pipeline works exclusively in millimetres. When an inch code is detected this syntax emits an Unit--InchNotSupported Unsupported Error so upstream callers are forced to pre-convert the NC program to metric — while still recording what the program said. Metric codes are accepted as no-op confirmations of the default. Enums BareG28Behavior Configurable handling for a G28 block with no axis specifiers (“bare G28”) — value of BareG28. Real Fanuc-class controllers vary: older 0i-M alarms (PS010), some 30i variants send every configured axis to home. Default to Alarm so silent NC bugs surface; opt into AllAxesHome per syntax instance." + "summary": "Namespace Hi.NcParsers.LogicSyntaxs Classes BackBoringSyntax G87 back boring cycle. Supports modal repetition. Cuts upward from Z to R — used to bore the back side of a workpiece. Cycle sequence: Oriented spindle stop (OSS) at current position Rapid (shifted) to init position, then down to bottom Z — tool enters pre-drilled hole without contacting bore wall Shift back to hole center at bottom Spindle start (CW) Feed upward from Z to R-point (back boring cut) Oriented spindle stop at R Tool shift, rapid retract (shifted) to final Z Shift back to center, spindle restart Q specifies the lateral shift distance (mm). Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. BoringCycleSyntax G85/G86/G89 boring cycles. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G86 only] Spindle stop at bottom [G89 only] Dwell P seconds at bottom Retract: G85/G89 → feed retract, G86 → rapid retract [G86 only] Spindle restart (CW) after retract G85: feed to Z, feed retract — smooth bore finish. G86: feed to Z, spindle stop (implicit), rapid retract. G89: feed to Z, dwell P, feed retract — like G85 with bottom dwell. Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. CannedCycleResolveSyntax Resolves the canned-cycle Group-09 state for the current block and writes the result to the CannedCycle section. Active cycle (direct G81..G89 or modal repeat): merges Parsing overrides with previous-cycle stored params, applies G91 incremental-to-absolute conversion and missing-axis fallback, writes CannedCycle with Term, ReturnMode, and Params. The resolved cycle sub-section is left in Parsing under the cycle code for downstream cycle syntaxes (DrillingCycleSyntax, etc.) to read. Explicit cancel (G80 flag present on a non-cycle block): consumes the G80 flag and writes CannedCycle = { Term: \"G80\" }, acting as a hard sentinel for Hi.NcParsers.LogicSyntaxs.CannedCycleSyntaxUtil modal lookback. No Group-09 activity: leaves the block untouched. A rotary-only block (C40.) reaches this syntax without a Parsing node — McAbcSyntax consumed the word into MachineCoordinateState and dropped the emptied node — but its one-shot RotaryWords record marks it as a block that spoke an axis word, so under an active cycle it is a modal repeat like any X/Y block (Fanuc's any-axis-word rule; HardNc indexes the table and drills again). The cycle's pre-positioning item then carries the block's ABC (WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d)). Must be placed after PositioningSyntax and before the individual cycle syntaxes in the chain. CircularMotionSyntax Writes McArc motion for circular commands (ISO G02/G03). Detects motion mode from Flags, reads I/J/K center offsets or R radius from Parsing, computes arc center in program coordinates, and writes a one-shot MotionEvent (form + arc params) plus a modal MotionState (Term). G02/G03 mode is modal (Group 01) — persists across blocks via Term. Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before LinearMotionSyntax in the syntax chain. Both share the Group 01 motion slot; whichever writes a MotionEvent first claims it. IsIjkAbsolute switches the I/J/K reading to absolute center coordinates (Heidenhain DIN/ISO — the ISO twin of the Klartext CC pole; the Heidenhain list sets it, every other brand keeps the offset default). In that mode the center is modal: letters not written in a block inherit the previous absolute pole (AbsoluteIjkPoleKey, carried by the brand's ModalCarrySyntax), a letter never written falls back to the arc start's component, a letters-free block that commands an endpoint continues the modal arc off the pole (a flags-only block stays motionless), a G91 block reads offsets again and breaks the pole chain, and the plane-normal letter is a center coordinate — never the per-turn helix pitch. Behavior mirrors HardNcLine.BuildArcNcArg + ArcNcArg.GetCenterOrCenterOnBeginPlane (HiUniNc 3.1.152.2) bit for bit. CodedPositionUtil Shared coded-position resolution for the write-stage consumers (McAbcSyntax for rotary words, IncrementalResolveSyntax for linear words): turns a per-word PositioningOverride entry of the coded family (CodedAbsolute / CodedIncremental / CodedShortest / CodedPositiveOnly / CodedNegativeOnly — stamped by SiemensAcIcSyntax for CAC()/CIC()/CDC()/CACP()/CACN()) plus the evaluated position number into an axis coordinate via IIndexingPositionConfig, and names the plain override value the caller rewrites the entry to — so the McAbcCyclicPathSyntax tail-pass and every other downstream reader only ever see the established non-coded vocabulary. Failure semantics mirror the Siemens alarms as far as a simulator can: an invalid position number (alarm 17510) or a missing table reports an error diagnostic and resolves to \"hold\" — the caller writes the anchor so the axis does not move. CIC(0) also resolves to hold, by specification (\"the indexing axis is not traversed\") and silently. A CIC from between two indexing positions advances to the n-th next position in the programmed direction. On a cyclic indexing axis the incremental sign becomes a directional (PositiveOnly / NegativeOnly) approach; increments spanning more than one revolution reach the correct position but collapse the extra full turns (the tail-pass windows cover one revolution). CoolantSyntax Consumes M07 (mist ON), M08 (flood ON), and M09 (coolant OFF) from Flags and writes the ICoolantDef section with both IsOn (convenience flag) and Mode (abstract mode name: Flood / Mist / Off). Modal — persists via backward lookback. CoordinateOffsetUtil Shared utilities for all coordinate offset syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. DrillingCycleSyntax G81/G82 drilling cycle (rapid retract). Supports modal repetition. G82 covers G81 — the only difference is an optional dwell (P) at the bottom. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z [G82 only] Dwell P seconds at bottom Rapid from bottom to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. DwellSyntax Consumes the non-modal G4/G04 dwell sub-section captured by G4Syntax (Parsing.G4 / Parsing.G04) and emits a CompoundMotion with a single Dwell item, which Hi.NcParsers.Semantics.CompoundMotionSemanticUtil resolves into an ActDelay of the dwell duration. Argument dialects are configured per brand preset: Fanuc-family default — SecondsPrefixes = X/U (seconds), MillisecondsPrefixes = P (milliseconds), SpindleRevPrefixes = S (spindle revolutions). Siemens — G4 F / G4 S: the preset sets SecondsPrefixes = F, clears the milliseconds list, keeps S revolutions. Because the capture layer owns the whole argument (the F/X/P word lands inside the dwell sub-section, never in Parsing.F / Parsing.X), a dwell block cannot poison the modal Feedrate and its X-word cannot mint a ghost motion — structural fixes for the G04 F60000 feed-poison and G04 X0.5 ghost-motion hazards. Spindle-revolution dwell needs the modal spindle speed: this syntax must be placed after SpindleSpeedSyntax in the Logic bundle so the block's own modal SpindleSpeed section is already written. When no positive rpm is known the dwell is consumed and recorded via an Unsupported Message (Dwell--SpindleRevUnresolved) instead of being time-simulated — no act is emitted. When several recognized argument prefixes appear on one block the resolution priority is seconds → milliseconds → revolutions; every recognized key is consumed either way. Unrecognized keys inside the sub-section are left in place so they surface through UnconsumedCheckSyntax. FanucPathSmoothingSyntax Consumes Fanuc G05.1 (high-precision contour / AICC II / Nano Smoothing) and records the modal state in the PathSmoothing JSON section using the FanucPathSmoothing schema. Q1 enables, Q0 disables; the optional R{n} precision-level is preserved as Level. The simulation does not alter the tool path — this is a controller-internal interpolation black box; the captured state exists for bidirectional NC-text reconstruction. Modal carry to subsequent blocks is handled by ModalCarrySyntax, which already tracks the PathSmoothing section key and deep-clones it forward. Also consumes the bare G05 P{n} HPCC family (captured by G05Syntax) into the block-local FanucHpcc section — recognized, intentionally not simulated (the SiemensStopreSyntax pattern). Ignoring P10000/P0 is safe offline; an ignored high-speed cycle machining call (P10001–P10999) means the simulation misses that machining, surfaced as a Warning. See IFanucHpccDef for the P function-selection semantics. The section is deliberately separate from the modal PathSmoothing section and is not modal-carried. FeedrateSyntax Consumes F (feedrate) from Parsing and G94/G95 mode from Flags. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a IFeedrateDef section. FineBoringSyntax G76 fine boring cycle. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Oriented spindle stop (OSS) Tool shift by Q in +X direction (clear bore wall) Rapid retract (shifted) to final Z Tool shift back to center Spindle restart (CW) Q specifies the lateral shift distance (mm) to avoid dragging the tool across the finished bore surface during retract. Shift direction defaults to +X (OSS angle 0°). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax before this syntax runs. G43p4RtcpSyntax Handles G43.4 RTCP (Rotary Tool Center Point) activation. Writes the IToolHeightCompensationDef section and the ToolHeightCompensationSource entry in ProgramToMcTransform — a tool-normal · offset_mm translation at the block endpoint ABC. The chain entry is tagged KindDynamic when RTCP is active and ABC changes across the block, and KindStatic otherwise. The RTCP kinematic rotary part (Pn→MC rigid transform) is orthogonal to this syntax and is written by PivotTransformationSyntax on every block, because rotary state remains in effect beyond the RTCP modal (e.g. a non-RTCP G01 after G49 still inherits the last ABC from the program). The \"rotary dynamic\" distinction lives on the chain entry's KindKey alone and is read via HasDynamicEntry(JsonObject) by LinearMotionSyntax to pick ClLinear vs McLinear. G43.4 is used by Fanuc, Mazak, Syntec, and Okuma. Siemens (TRAORI) and Heidenhain (M128) are handled by separate syntaxes. Must be placed after ToolHeightOffsetSyntax (to override the ToolHeightCompensation entry when RTCP is active) and before PivotTransformationSyntax (which runs last in the chain). G53p1RotaryPositionSyntax G53.1 — non-modal, one-shot rotary axis positioning. Positions the rotary axes (A/B/C) to align the physical tool axis with the active tilted work plane defined by G68.2. XYZ position is unchanged; only rotary axes move via rapid traverse. Requires IsoG68p2TiltSyntax (or equivalent) to have written the tilt transform. Uses IMachineKinematics to solve for the target A/B/C via inverse kinematics. Must be placed after IsoG68p2TiltSyntax (needs tilt data) and before ProgramXyzSyntax in the syntax chain. Writes A/B/C into MachineCoordinateState. Motion is handled by LinearMotionSyntax via modal G00/G01. HighSpeedPeckCycleSyntax G73 high-speed peck drilling cycle (chip breaking). Supports modal repetition. Drills in increments of depth Q, partially retracting by PeckRetractionDistance_mm between strokes (instead of fully back to R like PeckDrillingCycleSyntax). Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: feed Q deeper, rapid retract by d If remainder exists: feed to bottom Z, rapid retract by d Rapid to final (G98 → init Z, G99 → R) Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. IncrementalResolveSyntax Resolves G91 incremental axis values to absolute in-place within Parsing and its sub-sections. Reads Term written by PositioningSyntax. Per-word override: a block-root PositioningOverride section (written by SiemensAcIcSyntax for the Siemens per-word coordinate functions, and by the Heidenhain L / C / CC / CYCL CALL POS parsers for the klartext I-prefixed words — see HeidenhainIncrementalAxisWordUtil; the CYCL CALL POS words never reach this syntax, HeidenhainCannedCycleSyntax resolves them on the spot ahead of it) beats the modal term for the listed axes on this block only: an Incremental entry converts that word even under G90, an Absolute entry skips it even under G91 — as does, deliberately, every other non-Incremental value (the rotary-family Shortest / PositiveOnly / NegativeOnly entries are absolute targets; their swing resolution lives in McAbcCyclicPathSyntax, not here). A coded-position entry (CodedAbsolute / CodedIncremental — Siemens CAC()/CIC() on a linear indexing axis) carries an indexing position number instead of a coordinate: the number is resolved through IIndexingPositionConfig via TryResolveCodedTarget(IIndexingPositionConfig, string, string, double, double, ISentenceCarrier, NcDiagnosticProgress, out double, out string), the word is rewritten to the resolved absolute coordinate, and the entry to Absolute; a failed resolve reports an error and holds the last program position. Axes without an entry follow the modal term unchanged, so brands that never write the section (Fanuc/...) keep the exact legacy behavior. WorkingPathList specifies which JSON paths contain axis values that need incremental-to-absolute conversion. Default: [[\"Parsing\"], [\"Parsing\", \"G28\"]]; the Heidenhain bundle instead walks [\"Parsing\", \"CC\"] for the klartext circle-center record (CcAwareIncrementalResolveSyntax). All matching paths are converted against the same last program position — a nested record's words are distances from where the tool stands, exactly like the root's. Canned cycle paths (Parsing.G81, G82, G83, …) are intentionally excluded — their Z/R incremental semantics differ from normal axes (R is relative to init level, Z is relative to R-point). Resolution is handled by ResolveCycleCoordinates(JsonObject, Vec3d, double?, double?, double, double, HashSet) inside each cycle syntax class, which runs before this syntax. Uses AxisNames to determine which tags are motion axes. Traces backward nodes for last known ProgramXyz to resolve incremental values. After this syntax, all axis values in the working paths are absolute — ProgramXyzSyntax can consume them without incremental logic. IsoCoordinateOffsetSyntax ISO/Fanuc/Mazak/Okuma/Syntec: resolves the G54–G59.9 work coordinate offset and the Fanuc-family additional work coordinate systems (G54.1 Pn, also spelled G54 Pn). Reads G54/G55/.../G59.9 from Flags and the captured Parsing.G54.1 = {P: n} object (written by G54p1Syntax for both spellings), which resolves to the coordinate id \"G54.1P{n}\" that the brand parameter tables map to #7001+ (IsoCoordinateAddressMap). Looks the offset Vec3d up via the IIsoCoordinateConfig dependencies (brand parameter table or IsoCoordinateTable) and composes it into ProgramToMcTransform. Modal — the active coordinate persists via backward lookback. Default coordinate ID is set by StaticInitializer. A block that selects a work coordinate system nobody has configured is reported on that block (never on the modal re-query of the following blocks): Coord-WorkOffset--AdditionalZero when an additional system (G54.1 Pn) resolves to no entry or to (0, 0, 0) — the brand tables seed every P row with zero, hardware-faithfully, so a zero there is the \"never entered\" state, whereas a zero row of the standard series (G54–G59 and the G59.1–G59.9 extension alike) is a legitimate authoring convention and stays silent; Coord-WorkOffset--NoTableEntry when no provider resolves the id at all (e.g. a G59.x on a runner carrying no brand-neutral table beside its brand table); and Coord-WorkOffset--IndexUnresolved when the P word is not a positive integer (vacant variable, non-integer), in which case the active system is kept. A bare G54.1 without P is not this syntax's business: the parameterized capture consumes nothing without a parameter, the dotted number lands in Parsing.Flags where it is not a G54-series member, so the active system is kept and the unconsumed check reports the flag. IsoG68RotationSyntax ISO/Fanuc: resolves G68 (2D coordinate rotation) and G69 (cancel). Computes a rotation Mat4d around the active plane normal and composes it into ProgramToMcTransform. No IMachineKinematics dependency needed — G68 is pure geometric rotation. Managed commands: G68, G69 (idempotent with IsoG68p2TiltSyntax). IsoG68p2TiltSyntax ISO/Fanuc: resolves G68.2 (tilted work plane) and G69 (cancel). Computes a tilt Mat4d from I/J/K euler angles (Fanuc ZXZ convention) and composes it into ProgramToMcTransform. Managed commands: G68.2, G69 (idempotent with IsoG68RotationSyntax). Siemens equivalent: CYCLE800 (separate syntax). Heidenhain equivalent: PLANE SPATIAL (separate syntax). IsoLocalCoordinateOffsetSyntax ISO G52: Local coordinate system offset (additive to G54-series). G52 X10 Y20 Z5 → sets local offset. G52 X0 Y0 Z0 → cancels (resets to zero). M30 (program end) → also cancels. Reads Parsing.G52 (from G52Syntax), writes IsoLocalCoordinateOffset section, and adds an \"IsoLocalCoordinateOffset\" entry to the transformation chain. Modal — persists via backward lookback until changed or cancelled. LinearMotionSyntax Writes McLinear motion for linear commands (ISO G00/G01, Heidenhain L/LN). Detects motion mode from Flags, writes a one-shot MotionEvent section (form + isRapid) plus a modal MotionState section (Term) when MachineCoordinateState exists on the block. McLinearMotionSemantic discriminates between XYZ-only and XYZABC motion by checking whether rotary axis values are present in MachineCoordinateState. Must be placed after McAbcSyntax in the syntax chain. MCodeExpansionSyntax Expands machine-declared M-codes (IMCodeDeclarationConfig on the controller parameter table) into the canonical ISO flags the regular consumers already understand: tool change → M06, spindle direction → M03/M04/M05, coolant → M07/M08/M09. Must run ahead of SpindleSpeedSyntax, CoolantSyntax, and ToolChangeSyntax — expanding early is what lets one composite OEM code (e.g. M13 = spindle CW + flood coolant) feed several downstream consumers without any of them fighting over who removes the original flag. Same rewrite-into-shared-vocabulary pattern as HeidenhainRadiusCompSyntax (RL/RR/R0 → G41/G42/G40). Two deliberate boundaries keep the rewrite faithful. Declarations whose sole content is a spindle direction (IsSpindleDirectionOnly) are NOT expanded — SpindleSpeedSyntax resolves them in place via TryResolveDirection(string, out SpindleDirection), which keeps legacy configs bit-identical and avoids the expansion product being re-translated by that same custom-first map (e.g. a mirrored M03↔M04 remap would otherwise flip direction). Expansion codes are inserted at the declared flag's own position, and a code whose raw twin also appears un-declared elsewhere in the block is not emitted — the block's textual order keeps deciding last-wins conflicts exactly as it did before. Declared-but-unmodeled behavior stays loud: a declaration carrying an UnmodeledNote emits one DeclaredMCode--UnmodeledEffects informational diagnostic per occurrence — a declaration replaces the raw Parsing--Unconsumed warning with an explanation, never with silence. A declaration with no effects and no note consumes its code silently by explicit intent. Undeclared codes are untouched and keep falling through to UnconsumedCheckSyntax. MachineCoordSelectSyntax Handles machine coordinate selection — non-modal, one-shot. The axis values (X/Y/Z) in the block are interpreted as machine coordinates, bypassing all work offsets, local coordinates, tool height compensation, and coordinate rotations. If G91 (incremental) is active, the code is ignored per ISO standard. A per-word incremental stamp on the block (block-root PositioningOverride entry Incremental — Siemens SUPA Y=IC(-10), klartext L IY-10 M91) is a distance in the machine frame: the word is added to the previous machine position of that axis. Defaults to ISO G53. Brands with additional one-shot machine-coordinate codes widen SupportedCodes — the Siemens preset adds G153 and SUPA (both suppress every active frame for one block; in this pipeline all of those reduce to \"bypass the composed ProgramToMcTransform\", which the ProgramXyz back-derivation below already models). The matched code is stamped verbatim into Term for bidirectional source recovery. Rotary words on the same block (e.g. SUPA G0 B0, G53 A0 C0) are consumed by McAbcSyntax ahead of this syntax — machine and program rotary coincide while no rotary offsets are modeled — and the block is still a machine-coordinate positioning: the linear axes hold their machine position when no X/Y/Z word is given, and the motion is always McLinear. A machine-coordinate block never takes the RTCP tool-center-point linkage: on a real controller G53 applies no compensation, so a rotary swing commanded through it turns the axis in place instead of dragging X/Y/Z to pin the tool tip (the tip's post-swing program coordinate is what the back-derivation reports). Must be placed before IncrementalResolveSyntax and ProgramXyzSyntax in the syntax chain. When a supported code is active, this syntax consumes X/Y/Z from Parsing and writes MachineCoordinateState directly, preventing ProgramXyzSyntax from processing them as program coordinates — and, ahead of the resolve, reading a per-word incremental word raw instead of re-based into the program frame. McAbcCyclicPathSyntax Resolve modular rotary axes to the shortest cyclic path relative to the previous node. Uses IsModularRotary(string) to determine which axes within MachineCoordinateState need cyclic resolution. Falls back to hardcoded A/B/C if no IMachineAxisConfig is available. Must be placed after ProgramXyzSyntax in NcSyntaxList. Two stages, mirroring McXyzSyntax: Root MachineCoordinateState — anchored at the previous block's modal rotary state. CompoundMotion.ItemsKey[*] — sequential walk through items, anchoring item 0 at the previous block's modal state and item i > 0 at item i-1's post-cycle value (per-axis chain). Items without a rotary MachineCoordinateState are skipped. The items pass enables rotary motion (e.g. G28 ABC intermediate / home stages) to surface as motion IAct segments rather than a single root-MC stamp. Per-word directional override: a block-root PositioningOverride entry (stamped by SiemensAcIcSyntax) valued PositiveOnly (Siemens ACP()) or NegativeOnly (ACN()) swaps that axis's window for this block only: [anchor, anchor+360°) / (anchor-360°, anchor] instead of the default ±180° — the approach direction is forced even when it is the longer way around. A target congruent with the anchor (within an ULP-scale epsilon) keeps the anchor value verbatim — no move, never a spurious full turn, and no deg→rad→deg drift. Shortest (DC()) is the default window and needs no special path here. The override is read from the current block only (it is one-shot, never carried — deliberately unlike the modal RotaryWrap gate's one-step previous fallback) and applies to the root MC stage, not to CompoundMotion items in general (G28/G74/G75 expansions capture their words in sub-objects the stamping syntax never sees, so an override can only ever describe a root word) — with one exception: an item whose value for an axis equals the root's pre-pass value verbatim carries that same root word (the canned-cycle pre-positioning item that WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) stamps from the root MC) and inherits the root's directive for that axis, so the default window cannot fold the forced swing the root resolved into the short way. Directional/shortest entries keyed by an axis outside the modular set are reported as Coord-McAbc--003 — the promise cannot be honored there and silence would mis-read the program's intent; an entry with no anchor to resolve against (first rotary value in the stream) is reported as Coord-McAbc--004 and adopted unwrapped, matching the default path. Per-word incremental override: an Incremental entry (Siemens IC(), klartext IC+270) is a signed traverse by definition — McAbcSyntax already wrote anchor + delta — so this pass keeps that value verbatim for the axis instead of folding it into the ±180° window (a +270° chain dimension must not become a -90° swing). Incremental entries on non-modular axes need no warning: the literal value is what the axis would do anyway. McAbcSyntax Writes rotary axis values (A/B/C) into MachineCoordinateState from Parsing and modal lookback. Only active when IMachineAxisConfig declares rotary axes. Works for both 3+2-axis (no IMachineKinematics) and simultaneous 5-axis configurations. This syntax is intentionally ABC-only. When the block is rotary-only (no ProgramXyz, e.g. G00 A30.) the section is created with ABC but without X/Y/Z. McAbcXyzFallbackSyntax — placed after McXyzSyntax — copies X/Y/Z from the previous block's MachineCoordinateState to finish the section. Splitting the XYZ fill out lets this syntax run before McXyzSyntax (and before G43p4RtcpSyntax) without accidentally filling X/Y/Z from prev and thereby short-circuiting DeriveMcXyz(JsonObject, Mat4d). Missing rotary axes are filled from previous MachineCoordinateState lookback, unless the current section already has the value (e.g., from HomeMcInitializer). Values are stored in degrees (matching McAbcCyclicPathSyntax). Per-word override: a block-root PositioningOverride section (written by SiemensAcIcSyntax for the Siemens AC()/IC() coordinate functions, and by the Heidenhain L / C parsers for the klartext IA+/IB+/IC+ words) marks a rotary word Incremental: the parsed value is then added to the previous modal value of that axis (previous MachineCoordinateState lookback, falling back to a value already present in the current section, then 0) instead of being written as an absolute angle. The accumulated raw degrees stay monotonic across iterations: the McAbcCyclicPathSyntax tail-pass keeps an Incremental-stamped axis literal (a chain dimension is a signed traverse, never re-shortened), so even a +270° step survives as net rotation. An Absolute entry (from AC()) matches the default write and needs no special path — and so, deliberately, do the rotary-family entries Shortest (DC()) / PositiveOnly (ACP()) / NegativeOnly (ACN()): this syntax writes the raw absolute target and the shortest/directional swing is resolved by the McAbcCyclicPathSyntax tail-pass, which owns the wrap math. Brands that never write the section keep the exact legacy behavior. Coded-position overrides (Siemens CAC()/CIC()/CDC()/CACP()/CACN()) carry an indexing position number instead of an angle: the number is resolved through IIndexingPositionConfig via TryResolveCodedTarget(IIndexingPositionConfig, string, string, double, double, ISentenceCarrier, NcDiagnosticProgress, out double, out string) and the override entry is rewritten to the plain vocabulary (Absolute / Shortest / PositiveOnly / NegativeOnly — a cyclic CIC keeps its programmed direction through the directional values) before the tail-pass runs, so the tail-pass never sees a coded value. A failed resolve (invalid number, missing table) reports an error and holds the axis at its previous value. Every rotary word the block actually carried is also recorded, as programmed, in the one-shot block-root RotaryWords section ({ \"C\": 40 }) — the resolved angle goes into MachineCoordinateState, which after the modal carry can no longer tell \"commanded\" from \"carried\". Downstream consumers that need that distinction (CannedCycleResolveSyntax repeating an active canned cycle on a rotary-only block, WriteCompoundMotion(JsonObject, string, JsonArray, Vec3d) riding the block's ABC on the cycle's pre-positioning item) read the record; the section is never modal-carried. Must be placed before McXyzSyntax so syntaxes that need the current-block ABC to compute transforms (e.g. G43p4RtcpSyntax) can see it; and before McAbcCyclicPathSyntax and LinearMotionSyntax. McAbcXyzFallbackSyntax Fills missing X/Y/Z on an ABC-only MachineCoordinateState section. Behaviour depends on whether the block is under RTCP with rotary motion, as indicated by HasDynamicEntry(JsonObject): Non-dynamic (no RTCP or RTCP with ABC stable) — the programmed tool tip stays put in MC while rotary axes (if any) are unchanged, so we simply copy X/Y/Z from the previous block's MachineCoordinateState. This matches NC modal XYZ carry-forward for rotary-only blocks such as G00 A30. (non-RTCP pivoting). Dynamic (RTCP active + ABC changing) — the programmed tool tip must stay fixed in program coordinates while MC XYZ shifts to compensate the new rotary state. Looks up the last ProgramXyz and re-derives MC = inheritedProgramXyz × composedTransform, where the composed transform is the block's endpoint chain (now including PivotTransformSource as a full rotation+translation Mat4d, so the chain already encodes the kinematic IK). The carried ProgramXyz is also stamped onto the current block so downstream consumers see a consistent ProgramXyz + MC pair. Pair with McAbcSyntax, which runs early to write ABC but deliberately leaves X/Y/Z empty so McXyzSyntax can still derive MC XYZ from ProgramXyz via the transform chain when the block carries linear motion. If McXyzSyntax has nothing to derive (no ProgramXyz), this syntax completes the MC section as described above. Does nothing when the section already carries all three of X/Y/Z (normal linear-motion blocks), or when there is no section at all (pure parse-only block that introduces no MC). Must be placed after McXyzSyntax and before McAbcCyclicPathSyntax / LinearMotionSyntax. McXyzSyntax Derives MachineCoordinateState from ProgramXyz by applying the composed ProgramToMcTransform. Processes two stages: Root ProgramXyz → root MachineCoordinate CompoundMotion.ItemsKey[*] — derives MachineCoordinate from ProgramXyz for items that have ProgramXyz but no MachineCoordinate Must be placed after syntaxes that write ProgramXyz (e.g., ReferenceReturnSyntax) and before syntaxes that read MachineCoordinate (e.g., LinearMotionSyntax). OrientationVectorResolveSyntax Shared vector-orientation resolve — the brand-independent half of tool-axis-vector 5-axis programming (Heidenhain LN TX/TY/TZ; the Fanuc/Syntec/Mazak G43.5 I/J/K and Siemens A3=/B3=/C3= slots when their adapters land). Consumes the ToolOrientationKey section a brand adapter wrote — { “Vector”: {X,Y,Z}, “Term”: “” }, unit vector in program coordinates — and resolves it into rotary-axis degrees on MachineCoordinateState via OrientationToMcAbc(Vec3d, out Vec3d) (axial-only: rotation about the tool axis is free). Everything downstream is the existing RTCP pipeline untouched: the brand RTCP syntax sees the endpoint ABC, marks the tool-height entry KindDynamic on a rotary change, and LinearMotionSyntax routes the block to ClLinear per-step IK. Branch continuity is seeded explicitly: before solving, the chain is set to the previous block's rotary state (McAbcToMat(Vec3d) on the per-axis MC lookback) so the solver follows the current solution branch deterministically — the implicit chain state cannot be trusted under lazy or out-of-order rebuilds — and the solved angles are unwrapped to the nearest ±360° window of that anchor. Must run after McAbcSyntax (explicit rotary words and lookback land first; a vector on the same block overrides them) and before the brand RTCP syntax and McXyzSyntax (the section is created rotary-only, so the XYZ derivation still runs — the McAbcSyntax rotary-only discipline). Registered per brand list by the brand that has a vector adapter. Degradation is diagnosed, never silent: no IMachineKinematics → Orientation-Vector--NoKinematics; no rotary axes → Orientation-Vector--NoRotaryAxes; solver failure → Orientation-Vector--IkFailed. In every case the XYZ motion proceeds and the posture holds at its previous value (deliberately unlike the CLSF path, which drops the motion on IK failure — divergence recorded on the plan card). The section itself stays on the block as the semantic record. PeckDrillingCycleSyntax G83 peck drilling cycle. Supports modal repetition. Drills in increments of depth Q, fully retracting to R between strokes. Cycle sequence (per stroke): Rapid to init position (target XY, previous Z) Rapid from init to R-point For each stroke: rapid to clearance above previous depth, feed Q deeper, rapid back to R If remainder exists: feed to bottom Z, rapid to R Rapid from R/bottom to final (G98 → init Z, G99 → R) Retraction distance is read from ICannedCycleConfig (Fanuc #4002 / Syntec Pr4002, or FallbackConfig fallback). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. PivotTransformUtil Shared engine for the brand pivot-gate syntaxes (PivotTransformationSyntax — ISO/Fanuc family, SiemensPivotTransformationSyntax — Siemens). Each brand syntax owns only its gate (which modal terms mean “commanded XYZ needs the Pn→MC kinematic rigid transform”); the endpoint-ABC resolution and the PivotTransform chain entry composition live here so every brand writes the identical JSON vocabulary. PivotTransformationSyntax ISO/Fanuc-family pivot gate: writes the PivotTransformSource entry into ProgramToMcTransform on blocks where the controller is interpreting commanded XYZ in a frame that needs the Pn→MC kinematic rigid transform — namely active RTCP (G43.4) or active tilted plane (G68/G68.2). On plain-mode blocks (no RTCP, no tilted plane), the controller treats commanded XYZ as machine-frame directly, so the indexed rotary angle is a positioning value only and must not fold into the linear axes; this syntax skips those blocks and leaves the chain at identity (or whatever non-kinematic offsets earlier syntaxes contributed). Brand variants with their own modal vocabulary gate the same shared engine (PivotTransformUtil): Siemens TRAORI/CYCLE800 → SiemensPivotTransformationSyntax; Heidenhain M128/PLANE SPATIAL would follow the same pattern. Mirrors real Fanuc semantics: plain G43 offsets along the active tilted-plane normal (or machine Z when no tilt is active), and plain XYZ moves map directly to machine axis registers regardless of indexed table/head rotary position. Only G43.4 follows the live tool vector and only G68.2 redefines the work-plane orientation — both of which this guard detects via the existing chain markers. Chain position: must run after all Pn-frame writers (IsoG68p2TiltSyntax, ToolHeightOffsetSyntax, G43p4RtcpSyntax, IsoCoordinateOffsetSyntax, brand-specific coord offset syntaxes) so the guard sees the finalised mode markers and the PivotTransform entry — when emitted — naturally lands as the last chain element. Must run before McXyzSyntax / ProgramXyzSyntax so they see the completed chain. Silently no-ops when IMachineKinematics is absent (3-axis configurations without rotary kinematics). PlaneSelectSyntax Consumes G17/G18/G19 plane selection from Flags and writes IPlaneSelectDef section using conventional axis-pair names (XY/ZX/YZ). Modal — persists via backward lookback. Default is XY (G17). Downstream consumers (CircularMotionSyntax, IsoG68RotationSyntax) call GetPlaneNormalDir(JsonObject) to read the resolved plane. PolarGCodeCheckSyntax Warns on G-codes that Fanuc disallows during Polar Coordinate Interpolation (G12.1), per the manual whitelist mirrored from HardNc IsGCodePolarModeCompatible (IncompatibleDiagId). Placed FIRST in the Logic bundle so the scan sees Parsing Flags before the mode/plane/offset syntaxes consume their codes — at the old in-place check position, G17/G18/G19, G20/G21, G49, G53.1 and G68/G69 cancels had already been eaten and passed silently. Polar-active detection needs no valve of its own: the PREVIOUS block's PolarInterpolationState is already final (the whole Logic bundle ran for it) unless this block exits with G13.1; a block entering with G12.1 is checked too. Residual blind spot (documented): codes captured as Parsing sub-objects by ParameterizedFlagSyntax in the Parsing bundle (G28, G43/G44, G43.4, G05.1, G52, G54.1, G68/G68.2, canned cycles) never reach Flags and stay outside the scan. They cannot corrupt the polar trajectory — the plane normal is fixed by the polar pair — so the gap is diagnostic-only, same as HardNc's own per-code parse-time check. PolarInterpolationSyntax Maintains the modal Polar Coordinate Interpolation valve section (PolarInterpolationState) for Fanuc G12.1/G13.1. On a G12.1 block: consumes the flag, reads the block's own X/C words as the anchor (InitRxcz; the X word is a diameter and is halved), converts the previous program position (program X/Z + machine C angle) onto the polar hypothetical plane via GetProgramPolarRxczByOrdinaryProgramXcz(Vec3d), and writes both the state section and the entry ProgramPolarRxcz position. Mirrors HardNc HardNcLine case 12_100. On a G13.1 block: consumes the flag and stops carrying the state — the block itself is already Cartesian, matching HardNc case 13_100. On other blocks: re-materializes the previous block's state section (single-step lookback carry, the PositioningSyntax pattern), and warns FanucPolar--IncompatibleGCode for G-codes outside the Fanuc polar-mode whitelist (mirrors HardNc IsGCodePolarModeCompatible). Must be placed before McAbcSyntax so the downstream ProgramRxczSyntax can consume the hypothetical C word before it is interpreted as a rotary machine axis. PositioningSyntax Detects G90/G91 positioning mode from Flags (or by modal lookback) and writes a Positioning section (Term, Mode) to the block JSON. Fanuc/ISO: reads G90/G91 from Flags (global modal). Heidenhain: klartext has no modal word — the modal state stays at the G90 default and the I-prefixed words (IX+20) ride on the same per-word override as Siemens, stamped by the L / C / CC / CYCL CALL POS parsers (see HeidenhainIncrementalAxisWordUtil); the DIN/ISO dialect on that brand uses G90/G91 like Fanuc. Siemens: the AC()/IC() per-word override rides on top of this modal state — SiemensAcIcSyntax writes a PositioningOverride section the downstream consumers (IncrementalResolveSyntax, McAbcSyntax) honor per axis. Does NOT convert incremental values — that is handled by IncrementalResolveSyntax which can be placed later in the syntax chain, after canned cycle syntaxes have consumed their parameters with cycle-specific G91 semantics. ProgramEndCleanSyntax Clears the per-block Vars.Volatile dictionary on blocks that triggered program end (M02 / M30, identified by the ProgramEnd section written by ProgramEndSyntax). Real Fanuc clears non-retained common variables (#100-#499) on program end + reset; this syntax models that behaviour at the simulator level. The clear happens on the same block that carried M02/M30 — the next block's VolatileVariableReadingSyntax carry then sees an empty dictionary on the predecessor and starts fresh. Pipeline placement: must run after both ProgramEndSyntax (which writes the ProgramEnd section this syntax checks) and VolatileVariableReadingSyntax (so the carry has already happened on this block; this syntax overwrites the result). Retained common variables (#500-#999, owned by RetainedCommonVariableTable) are untouched — they survive program end on real hardware (NV-RAM). Local variables (#1-#33, scope: macro call frame) are also untouched here; their lifecycle belongs to G65/G66/M99 push/pop, not program end. Also clears any active FanucModalMacro on the same edge: a G66 modal that was still active when M02/M30 hit is implicitly cancelled, matching real Fanuc reset behaviour. The section is overwritten with a G67-shaped cancel marker so the carry mechanism in FanucModalMacroSyntax sees the boundary and does not propagate the modal past the program-end edge. ProgramEndSyntax Consumes M02/M30 (program end) from Flags and writes IProgramEndDef section. Downstream syntaxes that need to reset modal state on program end (e.g. IsoLocalCoordinateOffsetSyntax for G52 reset) should read the ProgramEnd section rather than scanning for M30 in Flags directly. The program-end edge. On a real controller M02/M30 ends the program and enters the reset state: the modal G codes return to their power-on defaults — tool length compensation is cancelled (G49, which also ends tool-center-point control: Fanuc TCP is cancelled by G49 or reset), the tilted work plane and coordinate rotation are cancelled (G69), cutter radius compensation is cancelled (G40), the canned cycle is cancelled (G80). A simulator that plays a file with several programs chained by M02 must keep playing, so the reset is modelled as an edge between the program-end block and its successor: the program-end block itself keeps the modal state it executed under (its own motion — G0 Z100. M30 — still sees the compensation), and the successor starts from the reset defaults. Each modal owner tests the edge with IsResetEdge(LazyLinkedListNode) in its single-step node.Previous lookback and writes its cancel state on the successor instead of carrying: ToolHeightOffsetSyntax (G43/G44 → G49), G43p4RtcpSyntax (G43.4 → G49), SiemensTraoriSyntax (TRAORI → TRAFOOF, the D compensation itself stays — Siemens retains the active tool on reset), HeidenhainRtcpSyntax (M128 / TCPM → off, TOOL CALL compensation stays), TiltTransformUtil (every tilt / rotation / frame term → G69), RadiusCompensationSyntax (G41/G42 → G40, the modal D is kept) and CannedCycleResolveSyntax (→ G80). Deliberately not reset: G00/G01, G90/G91, G17–G19, G94/G95, the work offset (G54–G59) and the path-smoothing mode — their reset defaults are controller-parameter dependent and they do not enter the program→machine transform chain; G20/G21 is retained by the controller itself. G52 keeps its existing behaviour of clearing on the program-end block (HardNc parity). A block right after the edge that has no words at all (a comment line) is still the edge — every owner handles it before any \"no Parsing\" early return, or the modal carry would clone the active section across it. Must be placed before syntaxes that depend on the ProgramEnd section. ProgramRxczSyntax Polar-mode sibling of ProgramXyzSyntax: while the PolarInterpolationState valve section is present, consumes the block's X/C/Z words as polar hypothetical-plane coordinates (X = diameter, halved; C = hypothetical axis in mm) and writes: ProgramPolarRxcz — the anchor-relative polar position (G90/G91 resolved against the previous block's position, mirroring HardNc NcGroup03.GetNcFromSyntax); ProgramXyz — the derived ordinary program position (radius, previous program Y, Z), so the downstream McXyzSyntax derives machine XYZ through the normal transform chain — ProgramXyzSyntax itself naturally no-ops because the axis words are already consumed; the machine C angle (degrees) into MachineCoordinateState — placed before McAbcSyntax, which then preserves the value instead of treating C as a directly-commanded rotary word; on motion-programmed blocks, MotionState and a MotionEvent with McPolarLinear (G00/G01) or McPolarArc (G02/G03 with R or I/J/K resolved on the hypothetical plane). The G12.1 entry block is skipped (its position was anchored by PolarInterpolationSyntax). Angle-branch resolution mirrors HardNc: GetOrdinaryProgramXcz_rad(Vec3d, double, Vec3d) chained from the previous machine C angle. ProgramStopSyntax Consumes the program-stop words in SupportedCodes (default M00 unconditional / M01 optional) from Flags and writes a IProgramStopDef section on the block that carried the flag. Non-modal: the section is written only on the exact block where the stop code appears. SupportedCodes is ordered by priority: when several listed words share a block the first listed one wins and stamps Term with its literal; every listed word is removed from the block either way. A brand preset widens the list for its own vocabulary (the Heidenhain STOP word — the SupportedCodes precedent). Siblings with ProgramEndSyntax (M02/M30) which handles end-of-program, not in-program stops. The parsing layer only records NC intent. Whether M01 actually pauses the run is a runtime/semantic decision gated by the operator's \"Optional Stop\" switch (analogous to IBlockSkipConfig for block skip). ProgramXyzSyntax Resolves ProgramXyz (leaf coordinate) from syntax XYZ tags. Writes ProgramXyz sub-object to SyntaxPiece.JsonObject. Must be placed after BundleSyntax since it uses cross-node lookback for last position. McXyzSyntax (placed after this in the chain) reads ProgramXyz and writes MachineCoordinateState. ProgramXyzUtil Shared utilities for ProgramXyz and MachineCoordinateState lookback and resolution. Used by ProgramXyzSyntax, ReferenceReturnSyntax, and semantic resolvers that need position lookback. Two strategies for \"what's the program coordinate at a block's endpoint?\" — both invert an MC value through an ProgramToMcTransform chain, but they pick the chain from different nodes: By current-state transform (ComputeProgramXyzByCurrentTransform(LazyLinkedListNode, Vec3d)) — modal anchor is MachineCoordinateState. Re-expresses an MC value (typically a predecessor's modal MC) into the current block's program frame using the current block's chain. Suitable for chain-change blocks where the spindle physically stays put while the chain (G54 swap, G68.2 activation, G43.4 toggle, tool-height change, ...) re-anchors the program frame; mirrors legacy HardNcLine.RebuildProgramXyzByMc. By corresponding-state transform (ComputeProgramXyzByCorrespondingTransform(LazyLinkedListNode)) — modal anchor is ProgramXyz. Recovers the program coordinate that nodeCarryingMc was originally commanded at, by inverting that same node's own transform on its own MC. Suitable for RTCP rotary-dynamic inheritance, where the modal invariant is \"tool tip in workpiece frame stays put while rotary axes turn\" — the recovered Vec3d carries forward as the next rotary block's modal ProgramXyz unchanged, regardless of how its PivotTransform differs. Both strategies yield the same Vec3d when prev and current share the same chain modal state; they only diverge across chain boundaries (RTCP toggle, coord-system swap, tilt activation) and at rotary motion (PivotTransform difference). Pick the wrong one and the result lands in a stale frame: Non-RTCP using \"corresponding\" — leaves the pre-chain-change values, so a block emitted right after G43.4 H03 would inherit ProgramXyz still in the G49 frame and the next motion's MC.Z drifts by the introduced tool-height offset. (This was the 2026-04-25 SoftNc / HardNc divergence found on a five-axis sample program.) RTCP using \"current\" — double-counts the rotary PivotTransform difference, so the inherited workpiece anchor rotates by the C delta on every rotary block. Direct callers of the two strategy helpers are rare — typically you call the dispatcher ResolveBlockProgramXyz(LazyLinkedListNode, Vec3d) (block's own MC vs predecessor lookback, picks strategy from HasDynamicEntry(JsonObject)) or GetLastProgramXyz(LazyLinkedListNode) (pure predecessor lookback). ReferenceReturnSyntax Writes ICompoundMotionDef section for G28 reference point return. Reads intermediate XYZ from Parsing.G28 (written by G28Syntax) and converts to machine coordinates via ResolveProgramXyz(JsonNode, LazyLinkedListNode, ISentenceCarrier, NcDiagnosticProgress). Must be placed after LinearMotionSyntax in the syntax chain. Removes the IMotionEventDef section written by LinearMotionSyntax (G28 handles its own motion). Overwrites root MachineCoordinateState and ProgramXyz with reference position for subsequent block lookback. RotaryAxisUtil Shared utilities for rotary axis (A/B/C) resolution. Used by G53p1RotaryPositionSyntax, McAbcSyntax, IsoG68p2TiltSyntax, and other syntaxes that read or write rotary axis values. SpindleSpeedSyntax Consumes S (spindle speed) and spindle direction M-codes from Parsing. Both are modal — persist across blocks via backward node lookback. Writes resolved state to a ISpindleSpeedDef section. Direction is converted from M-codes to the conventional SpindleDirection enum at this layer. Direction M-codes: the ISO defaults M03 (CW) / M04 (CCW) / M05 (STOP) always apply; a machine that starts/stops its spindle with custom M-codes (e.g., ultrasonic M203/M205) declares them on an ISpindleControlConfig dependency (ControllerParameterTableBase), which this syntax consults first — mapped flags are consumed like the ISO ones. Fallback: an S > 0 with no direction ever issued is contradictory (physics would silently never run). The build assumes CW and emits a one-shot SpindleDirection--AssumedCw validation warning — once is structural, not stateful: the stamped CW propagates modally, so later blocks no longer lack a direction. An explicit M05 (STOP) is a real direction and never triggers the fallback. TappingCycleSyntax G84 (right-hand) / G74 (left-hand) tapping cycles. Supports modal repetition. Cycle sequence: Rapid to init position (target XY, previous Z) Rapid from init to R-point Feed from R-point to bottom Z Spindle reverse at bottom Feed retract to final Z (G98 → init Z, G99 → R) Spindle restore to forward direction G84: forward = CW (M03), reverse = CCW (M04). G74: forward = CCW (M04), reverse = CW (M03). Reads absolute coordinates from the cycle section, which is resolved by CannedCycleResolveSyntax (modal repetition, G91 conversion, missing-axis fallback) before this syntax runs. Must be placed after CannedCycleResolveSyntax and before IncrementalResolveSyntax in the syntax chain. TiltTransformUtil Shared utilities for all tilt transform syntaxes (ISO, Siemens, Heidenhain). Handles section IO, backward lookback, and ProgramToMcTransform composition. ToolChangeMotionSyntax Synthesizes the machine motion of a tool change: on a block whose SectionName section carries IsChangeKey = true AND whose tool number actually differs from the previously equipped tool, overlays IToolingMcConfig's per-axis tooling position onto the current machine pose (NaN / missing axis = stays) and emits a one-item rapid ICompoundMotionDef to that target — the axis travel a real machine's M06 macro performs before the changer cycle runs. Root ProgramXyz (and the moved rotary axes in root MachineCoordinateState) are overwritten for subsequent-block modal lookback, mirroring HardNcLine's M06 handling (McXyz/McAbc_rad overlay + RebuildProgramXyzByMc). A same-number tool call (M06 without an actual change) emits no motion — the parity twin of HardNc's preT != T overlay gate. A block with its own motion words folds them into the single rapid: the overlay applies on top of the block's commanded position and the stamped CompoundMotion makes LinearMotionSyntax skip the block, so one contour covers both — the HardNc M06 branch shape. Placement: the ReferenceReturnSyntax (G28) slot — after the offset/frame syntaxes (the ProgramXyz back-derivation needs the composed transform), before McXyzSyntax / McAbcCyclicPathSyntax (root MC XYZ backfill; rotary targets wrapped shortest-path by the cyclic tail-pass). Programs that retract on their own (G75/G28/SUPA before M06 — every healthy post) reach the tooling position before the M06 block, so the synthesized move is zero-length and CompoundMotionSemantic emits nothing. Only a program that leaves the tool elsewhere (typically hand-edited) gets an actual synthesized travel — and the machining steps along it surface any material contact, plus the runtime's ToolChange--UnsafePose diagnostic. ToolChangeSyntax Consumes T (tool number) and M06 (tool change) from Parsing. T is modal — persists across blocks. M06 triggers the change. Writes resolved state to a ToolChange section: { “ToolId”: 1, “IsChange”: true, “Term”: “M06” }. TermKey records the trigger command and is only written when IsChangeKey is true (i.e. the block actually carried the tool-change M code); modal-only blocks omit it. Two more keys mirror HardNc's T / PreparationT split. PreparedToolIdKey holds the second T of a dual tool word (T10 T2 M06: 10 is loaded, 2 is pre-selected) and is carried until the next change loads it. EquippedToolIdKey is written on non-change blocks and names the tool in the spindle — the ToolId of the last change — because ToolId on such a block may already be a pre-selection (T2 alone). Consumers read it through ReadEquippedToolId(JsonObject). ToolId is an int for numeric calls (T5) and a string for Siemens string tool calls (T=\"D8R1\", captured by SiemensToolCallSyntax); both shapes carry modally. String names are resolved to tool numbers at the semantic layer (ToolChangeSemantic) — this syntax records the call verbatim. The trigger is machine-configurable. A custom tool-change M-code (Siemens MD22560 $MC_TOOL_CHANGE_M_CODE) is declared on the controller parameter table (IsToolChange) and reaches this syntax already expanded to M06 by MCodeExpansionSyntax. Turret/lathe machines where the T word itself performs the change (Siemens MD22550 $MC_TOOL_CHANGE_MODE = 0) set ToolWordTriggersChange; the block then triggers with ToolWordTerm recorded as TermKey. Without that config a bare T block stays pre-selection only — magazine rotation is the PLC's business and moves no feed axis. ToolHeightOffsetSyntax Resolves ISO tool height offset (G43/G44/G49) to the effective offset value (mm) and composes the offset as a translation into the accumulated ProgramToMcTransform matrix. RTCP modes (G43.4, TRAORI, M128) are handled by separate brand-specific syntaxes (e.g., G43p4RtcpSyntax). UnitModeSyntax Detects the unit-system code (ISO Group 06: G20 inch / G21 metric) from Flags and writes a Unit section (Term, System). Modal — absence of an explicit flag inherits the previous block's unit, defaulting to Metric at program start. The code vocabulary is configurable per brand: InchCodes / MetricCodes default to ISO G20 / G21; the Siemens preset uses G70+G700 / G710+G71 instead (G70/G71 switch geometry-word interpretation only, G700/G710 also switch feedrate interpretation — a distinction preserved via the verbatim Term but irrelevant to this record-only syntax; both inch variants warn identically). The first MetricCodes entry doubles as the program-start default Term. RS-274-D, Syntec and Fanuc turning G-code system C all spell the units G70 inch / G71 metric, and the Fanuc milling dialects (RS-274-D descendants) read them the same way, so the Fanuc/Syntec presets carry all four codes. The finishing/roughing-cycle collision exists only on Fanuc turning G-code systems A/B (system C moved those cycles to G72/G73) — a future turning preset for those systems must not inherit this milling preset's vocabulary. The HiNC pipeline works exclusively in millimetres. When an inch code is detected this syntax emits an Unit--InchNotSupported Unsupported Error so upstream callers are forced to pre-convert the NC program to metric — while still recording what the program said. Metric codes are accepted as no-op confirmations of the default. Enums BareG28Behavior Configurable handling for a G28 block with no axis specifiers (“bare G28”) — value of BareG28. Real Fanuc-class controllers vary: older 0i-M alarms (PS010), some 30i variants send every configured axis to home. Default to Alarm so silent NC bugs surface; opt into AllAxesHome per syntax instance." }, "api/Hi.NcParsers.NcCompositionGate.html": { "href": "api/Hi.NcParsers.NcCompositionGate.html", @@ -6412,7 +6437,7 @@ "api/Hi.NcParsers.Syntaxs.TransformationUtil.html": { "href": "api/Hi.NcParsers.Syntaxs.TransformationUtil.html", "title": "Class TransformationUtil | HiAPI-C# 2025", - "summary": "Class TransformationUtil Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll Utilities for the ProgramToMcTransform chain. Each entry is {Source, Kind, Mat4d}; entries are composed in order with pure matrix multiplication (GetComposedTransform(JsonObject)). KindKey partitions the entries by contour validity: KindStatic — the matrix is valid across the whole block, applicable to any interpolated point along the contour. KindDynamic — the matrix is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composing it produces a correct endpoint MC, but interpolated points along the contour must be derived per-step by motion semantics (ClLinearMcMotionSemantic); do not apply it to interpolated ProgramXyz. Both kinds carry a real Mat4d so composition stays a pure matrix product — no entry has a missing matrix. Use HasDynamicEntry(JsonObject) to detect the dynamic-rotary state without consulting a sibling section flag. public static class TransformationUtil Inheritance object TransformationUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields KindDynamic The entry's Mat4d is a block-endpoint snapshot only; intermediate contour points must be resolved by per-step IK in motion semantics. public const string KindDynamic = \"Dynamic\" Field Value string KindKey JSON key for the entry's contour-validity classification. Value must be KindStatic or KindDynamic. public const string KindKey = \"Kind\" Field Value string KindStatic The entry's Mat4d is valid for any point along the contour. public const string KindStatic = \"Static\" Field Value string Mat4dKey JSON key for the Mat4d snapshot inside each chain entry. public const string Mat4dKey = \"Mat4d\" Field Value string PivotTransformSource Canonical source name for the RTCP pivot transform — the kinematic transform from Pn (post-G54, post-G68.2) to MC at the block's endpoint ABC. Contributed by PivotTransformationSyntax. Must be the last entry written into the chain so that all Pn-frame operations (tilt, tool-height, coord-offset) are accumulated before the final kinematic IK; this ordering is enforced by the syntax- chain registration order, not by the writer API. public const string PivotTransformSource = \"PivotTransform\" Field Value string SourceKey JSON key for the transform origin label inside each chain entry. public const string SourceKey = \"Source\" Field Value string ToolHeightCompensationSource Canonical source name for the tool-height-compensation entry (tool-normal · offset_mm along the current tool axis). Matches the ToolHeightCompensation section key read for Offset_mm. public const string ToolHeightCompensationSource = \"ToolHeightCompensation\" Field Value string Methods AddOrReplaceTransform(JsonObject, string, string, Mat4d) Adds or replaces a named transformation entry in the chain. If an entry with the same source already exists, it is replaced in-place. Otherwise the new entry is appended. kind must be KindStatic or KindDynamic. public static void AddOrReplaceTransform(JsonObject json, string source, string kind, Mat4d mat) Parameters json JsonObject source string kind string mat Mat4d GetComposedTransform(JsonObject) Composes all entries in the chain into a single block-endpoint Mat4d (left-to-right multiplication). Pure multiplication — no special cases, no kinematic lookup. The returned matrix is valid only for the block's endpoint state; see ProgramToMcTransform for the endpoint-semantic contract. public static Mat4d GetComposedTransform(JsonObject json) Parameters json JsonObject Returns Mat4d GetComposedTransformAtAbc(JsonObject, Vec3d, Vec3d, IMachineKinematics, double) Composes the chain into the Mat4d valid at an INTERPOLATED contour point whose rotary state is stepAbc_rad, by rebuilding every KindDynamic entry at that rotary state while keeping every KindStatic entry's stored snapshot. The per-step dual of GetComposedTransform(JsonObject), which is endpoint-only when the chain carries a Dynamic entry. public static Mat4d GetComposedTransformAtAbc(JsonObject json, Vec3d stepAbc_rad, Vec3d endpointAbc_rad, IMachineKinematics kinematics, double toolHeightOffset_mm) Parameters json JsonObject The block's JSON sections carrying the chain. stepAbc_rad Vec3d The interpolated point's MC rotary state in radians (NaN axes are treated as 0, mirroring ResolveEndpointAbc(LazyLinkedListNode, IMachineAxisConfig)). endpointAbc_rad Vec3d The block-endpoint MC rotary state in radians — the state the stored Dynamic snapshots were built at. kinematics IMachineKinematics The machine kinematics; null keeps every stored snapshot. toolHeightOffset_mm double The block's ToolHeightCompensation offset in mm (the value its Dynamic height entry was built with). Returns Mat4d Remarks Rebuild rules, per Dynamic entry source: ToolHeightCompensationSource — rebuilt with MakeToolHeightMat(IMachineKinematics, Vec3d, double) at stepAbc_rad and toolHeightOffset_mm: the same construction every writer uses (G43p4RtcpSyntax, SiemensTraoriSyntax), so at stepAbc_rad equal to the block-endpoint ABC the rebuilt matrix is bit-identical to the stored snapshot. PivotTransformSource — rebuilt anchor-agnostically as stored · K(endpointAbc) · K(stepAbc)⁻¹, recovering the writer's pre-pivot anchor (preFrameToPn = stored · K(endpointAbc), see MakePivotTransformMat(IMachineKinematics, Vec3d, Mat4d)) from the snapshot itself instead of assuming the NC pipeline's machine-zero anchor — the CLSF pivot (ClToMcTransformSyntax) folds a fixture-topology anchor into the same entry and stays correct here. Any other Dynamic source — kept as stored (no rebuild recipe; no shipped writer produces one). With a null kinematics every entry keeps its stored snapshot, collapsing to GetComposedTransform(JsonObject) — correct for the only kinematics-less Dynamic corner (the G43p4RtcpSyntax UnitZ height fallback, whose matrix does not depend on ABC). GetTransformBySource(JsonObject, string) Gets a specific entry's Mat4d by source name. Returns identity if not found. public static Mat4d GetTransformBySource(JsonObject json, string source) Parameters json JsonObject source string Returns Mat4d HasDynamicEntry(JsonObject) Returns true if any entry in the chain carries KindDynamic. Used by motion-form selection (LinearMotionSyntax) and ProgramXyz strategy dispatch (ProgramXyzUtil) to detect RTCP-rotary-dynamic state without consulting a flag on a sibling section. Throws if any entry lacks KindKey. public static bool HasDynamicEntry(JsonObject json) Parameters json JsonObject Returns bool MakePivotTransformMat(IMachineKinematics, Vec3d) Builds the PivotTransformSource Mat4d — an empirically-constructed Pn→MC rigid-affine transform at the block's endpoint ABC. Equivalent to kinematics.PnToMc(pn_input, normal).Point when applied to a Pn-frame point, but expressed as a reusable Mat4d so the chain stays a pure matrix product (no per-point IK call inside GetComposedTransform(JsonObject)). The pre-pivot anchor is the machine-zero attacher point McToPn(0).Point as a pure translation — the same origin anchor HardNc keeps in HardNcEnv.AttacherAtMcZeroOnTableCoordinate. Program-frame vectors already point along the Pn (table-buckle) axes, so only K(0)'s translation may enter the anchor. Folding the full K(0) (its linear part encodes per-axis motion sense — a workpiece-side linear axis contributes a negated row) would flip those axes' program components before the IK; on a machine whose Z rides the table (e.g. the B-x7000 WAC chain, table branch Base→Z→B→W) that mirrored every program Z and, at B≈180°, threw the resolved MC off by twice the pivot-to-attacher distance (~3.5 m). Requiring machine files to be modelled the other way instead — workpiece-side axes negative, which makes K(0)'s linear part the identity and the two constructions equivalent — was evaluated as an alternative to this fix and deliberately rejected. IMachineKinematics resolves either axis direction, so a file that positions correctly through PnToMc(DVec3d, out DVec3d) has to position correctly through this transform as well; a precondition enforced here and nowhere else would only make one consumer diverge from the kinematics on files every other consumer accepts. The modelling convention governs how MC values read against the machine panel, and belongs to a check on the data when it loads — never to this matrix. Constructed by probing McToPn(DVec3d) at the four standard basis points (origin + XYZ unit vectors) at the target ABC to derive K(abc); returns T(McToPn(0).Point) · K(abc).GetInverse(). Topology- agnostic — works for any affine kinematic chain regardless of axis order. Legacy PnToMc(DVec3d, out DVec3d) remains the reference oracle. public static Mat4d MakePivotTransformMat(IMachineKinematics kinematics, Vec3d abc_rad) Parameters kinematics IMachineKinematics abc_rad Vec3d Returns Mat4d MakePivotTransformMat(IMachineKinematics, Vec3d, Mat4d) Variant anchored to an arbitrary pre-pivot frame: builds the PivotTransformSource Mat4d preFrameToPn · K(abc)⁻¹ that maps a point of the chain's accumulated pre-pivot frame directly to MC at the block's endpoint ABC. The two-parameter overload is this variant specialised to the NC pipeline's machine-zero program frame (preFrameToPn = T(McToPn(0).Point), translation only — see its remarks for why K(0)'s linear part must stay out); the CLSF pipeline passes its workpiece→Pn fixture-topology matrix instead, so the pivot entry absorbs the workpiece placement together with the kinematics. public static Mat4d MakePivotTransformMat(IMachineKinematics kinematics, Vec3d abc_rad, Mat4d preFrameToPn) Parameters kinematics IMachineKinematics abc_rad Vec3d preFrameToPn Mat4d Returns Mat4d MakeToolHeightMat(IMachineKinematics, Vec3d, double) Builds the tool-height-compensation Mat4d for a given rotary state: translate by (tool-normal at abc_rad) · height_mm. Pure translation (no rotation component); combines with the downstream PivotTransformSource to form the full Pn→MC IK. public static Mat4d MakeToolHeightMat(IMachineKinematics kinematics, Vec3d abc_rad, double height_mm) Parameters kinematics IMachineKinematics abc_rad Vec3d height_mm double Returns Mat4d" + "summary": "Class TransformationUtil Namespace Hi.NcParsers.Syntaxs Assembly HiMech.dll Utilities for the ProgramToMcTransform chain. Each entry is {Source, Kind, Mat4d}; entries are composed in order with pure matrix multiplication (GetComposedTransform(JsonObject)). KindKey partitions the entries by contour validity: KindStatic — the matrix is valid across the whole block, applicable to any interpolated point along the contour. KindDynamic — the matrix is a block-endpoint snapshot of a rotary-state-dependent transform (RTCP rotary-dynamic). Composing it produces a correct endpoint MC, but interpolated points along the contour must be derived per-step by motion semantics (ClLinearMcMotionSemantic); do not apply it to interpolated ProgramXyz. Both kinds carry a real Mat4d so composition stays a pure matrix product — no entry has a missing matrix. Use HasDynamicEntry(JsonObject) to detect the dynamic-rotary state without consulting a sibling section flag. public static class TransformationUtil Inheritance object TransformationUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields KindDynamic The entry's Mat4d is a block-endpoint snapshot only; intermediate contour points must be resolved by per-step IK in motion semantics. public const string KindDynamic = \"Dynamic\" Field Value string KindKey JSON key for the entry's contour-validity classification. Value must be KindStatic or KindDynamic. public const string KindKey = \"Kind\" Field Value string KindStatic The entry's Mat4d is valid for any point along the contour. public const string KindStatic = \"Static\" Field Value string Mat4dKey JSON key for the Mat4d snapshot inside each chain entry. public const string Mat4dKey = \"Mat4d\" Field Value string PivotTransformSource Canonical source name for the RTCP pivot transform — the kinematic transform from Pn (post-G54, post-G68.2) to MC at the block's endpoint ABC. Contributed by PivotTransformationSyntax. Must be the last entry written into the chain so that all Pn-frame operations (tilt, tool-height, coord-offset) are accumulated before the final kinematic IK; this ordering is enforced by the syntax- chain registration order, not by the writer API. public const string PivotTransformSource = \"PivotTransform\" Field Value string SourceKey JSON key for the transform origin label inside each chain entry. public const string SourceKey = \"Source\" Field Value string ToolHeightCompensationSource Canonical source name for the tool-height-compensation entry (tool-normal · offset_mm along the current tool axis). Matches the ToolHeightCompensation section key read for Offset_mm. public const string ToolHeightCompensationSource = \"ToolHeightCompensation\" Field Value string Methods AddOrReplaceTransform(JsonObject, string, string, Mat4d) Adds or replaces a named transformation entry in the chain. If an entry with the same source already exists, it is replaced in-place. Otherwise the new entry is appended. kind must be KindStatic or KindDynamic. public static void AddOrReplaceTransform(JsonObject json, string source, string kind, Mat4d mat) Parameters json JsonObject source string kind string mat Mat4d GetComposedTransform(JsonObject) Composes all entries in the chain into a single block-endpoint Mat4d (left-to-right multiplication). Pure multiplication — no special cases, no kinematic lookup. The returned matrix is valid only for the block's endpoint state; see ProgramToMcTransform for the endpoint-semantic contract. public static Mat4d GetComposedTransform(JsonObject json) Parameters json JsonObject Returns Mat4d GetComposedTransformAtAbc(JsonObject, Vec3d, Vec3d, IMachineKinematics, double) Composes the chain into the Mat4d valid at an INTERPOLATED contour point whose rotary state is stepAbc_rad, by rebuilding every KindDynamic entry at that rotary state while keeping every KindStatic entry's stored snapshot. The per-step dual of GetComposedTransform(JsonObject), which is endpoint-only when the chain carries a Dynamic entry. public static Mat4d GetComposedTransformAtAbc(JsonObject json, Vec3d stepAbc_rad, Vec3d endpointAbc_rad, IMachineKinematics kinematics, double toolHeightOffset_mm) Parameters json JsonObject The block's JSON sections carrying the chain. stepAbc_rad Vec3d The interpolated point's MC rotary state in radians (NaN axes are treated as 0, mirroring ResolveEndpointAbc(LazyLinkedListNode, IMachineAxisConfig)). endpointAbc_rad Vec3d The block-endpoint MC rotary state in radians — the state the stored Dynamic snapshots were built at. kinematics IMachineKinematics The machine kinematics; null keeps every stored snapshot. toolHeightOffset_mm double The block's ToolHeightCompensation offset in mm (the value its Dynamic height entry was built with). Returns Mat4d Remarks Rebuild rules, per Dynamic entry source: ToolHeightCompensationSource — rebuilt with MakeToolHeightMat(IMachineKinematics, Vec3d, double) at stepAbc_rad and toolHeightOffset_mm: the same construction every writer uses (G43p4RtcpSyntax, SiemensTraoriSyntax), so at stepAbc_rad equal to the block-endpoint ABC the rebuilt matrix is bit-identical to the stored snapshot. PivotTransformSource — rebuilt anchor-agnostically as stored · K(endpointAbc) · K(stepAbc)⁻¹, recovering the writer's pre-pivot anchor (preFrameToPn = stored · K(endpointAbc), see MakePivotTransformMat(IMachineKinematics, Vec3d, Mat4d)) from the snapshot itself instead of assuming the NC pipeline's machine-zero anchor — the CLSF pivot (ClToMcTransformSyntax) folds a fixture-topology anchor into the same entry and stays correct here. Any other Dynamic source — kept as stored (no rebuild recipe; no shipped writer produces one). With a null kinematics every entry keeps its stored snapshot, collapsing to GetComposedTransform(JsonObject) — correct for the only kinematics-less Dynamic corner (the G43p4RtcpSyntax UnitZ height fallback, whose matrix does not depend on ABC). GetTransformBySource(JsonObject, string) Gets a specific entry's Mat4d by source name. Returns identity if not found. public static Mat4d GetTransformBySource(JsonObject json, string source) Parameters json JsonObject source string Returns Mat4d HasDynamicEntry(JsonObject) Returns true if any entry in the chain carries KindDynamic. Used by motion-form selection (LinearMotionSyntax) and ProgramXyz strategy dispatch (ProgramXyzUtil) to detect RTCP-rotary-dynamic state without consulting a flag on a sibling section. Throws if any entry lacks KindKey. public static bool HasDynamicEntry(JsonObject json) Parameters json JsonObject Returns bool HasTransformEntry(JsonObject, string) True when the chain carries an entry with the given source name (GetTransformBySource(JsonObject, string) cannot tell “absent” from “identity”). public static bool HasTransformEntry(JsonObject json, string source) Parameters json JsonObject source string Returns bool MakePivotTransformMat(IMachineKinematics, Vec3d) Builds the PivotTransformSource Mat4d — an empirically-constructed Pn→MC rigid-affine transform at the block's endpoint ABC. Equivalent to kinematics.PnToMc(pn_input, normal).Point when applied to a Pn-frame point, but expressed as a reusable Mat4d so the chain stays a pure matrix product (no per-point IK call inside GetComposedTransform(JsonObject)). The pre-pivot anchor is the machine-zero attacher point McToPn(0).Point as a pure translation — the same origin anchor HardNc keeps in HardNcEnv.AttacherAtMcZeroOnTableCoordinate. Program-frame vectors already point along the Pn (table-buckle) axes, so only K(0)'s translation may enter the anchor. Folding the full K(0) (its linear part encodes per-axis motion sense — a workpiece-side linear axis contributes a negated row) would flip those axes' program components before the IK; on a machine whose Z rides the table (e.g. the B-x7000 WAC chain, table branch Base→Z→B→W) that mirrored every program Z and, at B≈180°, threw the resolved MC off by twice the pivot-to-attacher distance (~3.5 m). Requiring machine files to be modelled the other way instead — workpiece-side axes negative, which makes K(0)'s linear part the identity and the two constructions equivalent — was evaluated as an alternative to this fix and deliberately rejected. IMachineKinematics resolves either axis direction, so a file that positions correctly through PnToMc(DVec3d, out DVec3d) has to position correctly through this transform as well; a precondition enforced here and nowhere else would only make one consumer diverge from the kinematics on files every other consumer accepts. The modelling convention governs how MC values read against the machine panel, and belongs to a check on the data when it loads — never to this matrix. Constructed by probing McToPn(DVec3d) at the four standard basis points (origin + XYZ unit vectors) at the target ABC to derive K(abc); returns T(McToPn(0).Point) · K(abc).GetInverse(). Topology- agnostic — works for any affine kinematic chain regardless of axis order. Legacy PnToMc(DVec3d, out DVec3d) remains the reference oracle. public static Mat4d MakePivotTransformMat(IMachineKinematics kinematics, Vec3d abc_rad) Parameters kinematics IMachineKinematics abc_rad Vec3d Returns Mat4d MakePivotTransformMat(IMachineKinematics, Vec3d, Mat4d) Variant anchored to an arbitrary pre-pivot frame: builds the PivotTransformSource Mat4d preFrameToPn · K(abc)⁻¹ that maps a point of the chain's accumulated pre-pivot frame directly to MC at the block's endpoint ABC. The two-parameter overload is this variant specialised to the NC pipeline's machine-zero program frame (preFrameToPn = T(McToPn(0).Point), translation only — see its remarks for why K(0)'s linear part must stay out); the CLSF pipeline passes its workpiece→Pn fixture-topology matrix instead, so the pivot entry absorbs the workpiece placement together with the kinematics. public static Mat4d MakePivotTransformMat(IMachineKinematics kinematics, Vec3d abc_rad, Mat4d preFrameToPn) Parameters kinematics IMachineKinematics abc_rad Vec3d preFrameToPn Mat4d Returns Mat4d MakeToolHeightMat(IMachineKinematics, Vec3d, double) Builds the tool-height-compensation Mat4d for a given rotary state: translate by (tool-normal at abc_rad) · height_mm. Pure translation (no rotation component); combines with the downstream PivotTransformSource to form the full Pn→MC IK. public static Mat4d MakeToolHeightMat(IMachineKinematics kinematics, Vec3d abc_rad, double height_mm) Parameters kinematics IMachineKinematics abc_rad Vec3d height_mm double Returns Mat4d" }, "api/Hi.NcParsers.Syntaxs.html": { "href": "api/Hi.NcParsers.Syntaxs.html", @@ -8102,17 +8127,17 @@ "release-note/index.html": { "href": "release-note/index.html", "title": "Release Note | HiAPI-C# 2025", - "summary": "Release Note HiNc Packages 3.2 At a glance 3.2 is largely one piece of work: the NC interpreter that reads a controller program is now composed from configurable parts rather than written into one class, and most of this release is the brand coverage that made possible. A Siemens or Heidenhain program that 3.1.175 could not interpret past its first computed coordinate or subprogram call now replays end to end. Control-language coverage. The figure is how far our own verification has reached on that dialect — it is not the share of the language that is implemented, and it is not a guarantee for a program we have not seen: Control language Verification reached Cutter location (NX CLSF / APT source) ~90% Fanuc ~80% Siemens SINUMERIK ~60% Heidenhain (klartext and DIN/ISO) ~40% Syntec and Mazak run on the Fanuc-family vocabulary; their brand-specific syntax has not been worked through and they are not covered by the figures above. The per-construct picture — including what is recognized and deliberately not simulated — is in the brand support matrix. Failures say what went wrong. The class of defect this release spent most effort on is the silent one: a Siemens tool offset with no table row that resolved to zero and machined a whole program one tool length low, a G68 rotation that did nothing while reporting itself active, a tilted plane the machine could not reach. Each of those is now a named, searchable diagnostic rather than a plausible-looking wrong result — see the diagnostic id table. Simulation is faster and holds a bigger program. Physics moved into the native kernel (a paired play: 59.3 s / 16.1 GB allocated → 40.6 s / 3.4 GB), building the topology of a large STL is linear rather than quadratic in triangle count, and a long program no longer degrades as it plays. Figures and their conditions are under Performance and footprint. The application product moves to the web API. The web service is the application the product line is built on, and its source is the same HiNC-2025-webservice sample we publish — what you read there is what the product runs. The WPF desktop client is retired with this line: it was a demo of the same packages rather than a product surface, it takes no feature work, and it is no longer documented here. The Blazor front end builds against the same 3.2 packages but is not published as a product. Important Adoption status. This drop is published for review. Verification is still in progress across most areas, and the coverage figures above are the honest state of it. Do not put 3.2 NC optimization into production. It is not finished on this line. Work that depends on optimization should stay on the 3.1 line, which is serviced as 3.1.175.. The Blazor front end tracks the 3.2 packages, so it is not a way to stay on the 3.1 behaviour. What changed This one entry covers everything since 3.1.175. The 3.1 line is closed at the 3.1.175 package set and is serviced only as 3.1.175.; master moved all ten packages onto the 3.2 line on 2026-08-24 and restarted their build counters. So a 3.2 build number starts low, the two counters are not comparable, and the gap between the last 3.1 number a feed served and the first 3.2 one is expected rather than a missing upload. The versions in between were never published as a release set, which is why they are merged here rather than listed separately. Each package's build counter advances on its own, so no single number is common to all ten; a set is named by its HiNc package version — see The package line. Everything below therefore lands at once on a caller moving a 3.1.175 reference to 3.2. See Upgrading from 3.1.175 to 3.2 for the full detail — the summary here is the shape of the upgrade, not the whole of it. Breaking changes In the order they will bite. Full table with replacements on the upgrade page. Registration: XFactory.Generators becomes a ConcurrentDictionary (a caller declaring the old type breaks at compile time), and LocalProjectService.Reg() must still be called once at startup before any project XML is deserialized Messages: MixedProgress0, MultiTagMessage and MultiTagMessageUtil are removed; every message parameter is retyped from IProgress to IProgress; Category.General is deleted and NcDiagnostic.Text renames to Notification Session lifetime: LocalProjectService.SessionShell is null outside a session and ShellProgress is recreated per session — hold no long-lived reference; MachiningSession takes an injected IMachiningService, and IMachiningService replaces PlayerCancellationToken / PausePlayer with one PacePlayer Play verbs: PlayNcFile / RunNcFile gain an NcKind kind = NcKind.Auto parameter and dispatch by extension; the old narrow verbs become PlayBrandNcFile / RunBrandNcFile. The “Control” vocabulary retires with them (IControlRunner → INcRunner, RunControlLines → RunNcLines, ControlKind → NcKind) Hard renames, no shim: runtime geom → meshed geom across WorkpieceService; IContourTray / UniformContourTray / FreeContourTray → IFluting / UniformFluting / FreeFluting and MillingCutter.FluteContourTray → Fluting; HiNc's Hi.Common.ResourceUtil → ResourceLayout (it was shadowing HiGeom's same-named type); the native topo-STL wrappers move to Hi.Geom.Topo; ITimeGetter → ITimecoded; ClStrip.DrawingRefreshing → DrawingRefreshed; SoftNcRunner.NcDependencyList → PipelineNcDependencyList Removals: CsvRunner0 and EnableSoftCsvRunner, RawCsvRunner, IndexedSentence, SimpleSessionCommand, LsStl; the GUI-layer types MachiningProjectDisplayee, IsoCoordinateEntryDisplayee, HeidenhainCoordinateEntryDisplayee, UserConfig, UserService and PlayerDivConfig; the managed physics kernel types FluteZData, MillingForceUtil.RuntimePack / LayerPack / AnglePack and MillingPhysicsBrief.YieldStressMinHeight_mm; CultureUtil.SupportedCultureNames and SetCurrentCulture(string); eight gl* P/Invoke declarations that had no backing export; and PostExecutionCommand's meshed-geometry output pair (use RecordMeshedGeomCommand / ExportMeshedGeomToStlCommand instead) Shapes: MachiningToolHouse derives from Dictionary; MachiningStep.ActualTimecode / ActualDateTime become get-only views onto the new ActualTime; PreSettingCommand becomes a legacy bundle that expands on load into five single-setting commands and is never written back; ToPresentDto wire keys change Defaults: EnableSoftNcRunner is true — SoftNc is the NC engine and HardNcRunner is the opt-out fallback; EnableNativeMillingPhysics is true and a shipping build throws if you set it false; YieldingStressRatio reports NaN instead of 0 when it cannot be evaluated, so a caller reading 0 as “no constraint” must add a NaN branch New licence feature NcComposition (id 22) gates registering a non-built-in unit into a SoftNcRunner pipeline and executing an NC-embedded C# script. Degradation is silent and functional — the unit is skipped with one Composition--NotLicensed — so an unlicensed installation produces a different simulation, not an error Packaging: x64 only; the shipped machine-tool packages are renamed and now carry the .default marker (MachineTool/Table-B1.default, MachineTool/CT-350.default), so a project that refers to one by its earlier path must be repointed; HiNcServer pins request localization to English and HiNcRcl drops the inert HiNC:DisplayEngine:FontFile key Some results change without any code change — the pivot-transform anchor, a G68 rotation that was a silent no-op, blank lines resetting G90/G91, Heidenhain absolute arc centres, five-axis IK about 1000× tighter, and MC-linear moves stepping by euclidean tip travel. They are listed with their symptoms under Results that change on upgrade. New in this release Siemens SINUMERIK programs replay end to end — real .mpf / .spf files rather than an ISO subset: modal vocabulary and T=\"name\" tool calls, an expression evaluator over R-parameters and $-system variables, programmable frames and $P_UIFR, TRAORI RTCP and CYCLE800 swivel, subprogram and MCALL cycle calls, full control flow with iteration watchdogs, the AC() / IC() / DC() per-word coordinate functions and the coded-position family Heidenhain plays both dialects on one preset — klartext motion, datums, tool calls, arcs and cycles; Q-parameter evaluation with FN 9–12 conditional jumps; the PLANE / FUNCTION TCPM / M128 tilt and RTCP stack; subprogram and CALL PGM calls; post-processed spellings written without separators; and the DIN/ISO dialect with its absolute I / J / K arc centres Fanuc Custom Macro B and polar interpolation — #var expressions, IF / GOTO / WHILE, M98 / M99 subprograms and G65 / G66 macro calls; G12.1 / G13.1 polar coordinate interpolation with G41 / G42 compensation on the hypothetical plane SoftNcRunner is the default NC pipeline. See NC Parsing Engine for its architecture and the per-brand support matrix NC optimization runs on that pipeline — not finished on this line, see Adoption status above — regenerating text as anchored token edits over the verbatim source block, so lines the optimizer does not touch round-trip byte-identically. Output follows the source's decimal digits and is written back in the source file's encoding, so a GBK or Big5 program keeps its comments Cutter-location files drive a real machine chain, not only a ClMillingDevice, and a played CL program converts to Fanuc NC through ConvertClToNcFiles Milling physics moved into the native kernel — engagement, force and the sequential thermal chain — with the tool's scalar physics frozen once per session into MillingToolPhysicsPack, which also makes force waveforms reproducible between two plays of the same program Session commands declare themselves through CommandCatalogAttribute and CommandFieldAttribute, so a generic editor renders them without a hand-written form; the HTTP surface answers a no-session or no-project call with 409 and an ApiActionResult envelope carrying the call's notifications Diagnostics carry a template and its arguments, so a front end can re-render a notification in its own language, and repeats fold into one per-run summary instead of one message per block Shipped resources carry a .default marker distinguishing system territory from user files, and HiNc-Resource ships the five brand controller presets and three coolant presets so those load browsers start populated A parser configuration is a file, and it is shareable. NcRunnerSuit bundles a runner with its per-case data as one loadable unit, and per-case data now travels as proxy placeholders that resolve against the owning project — so one controller configuration is no longer welded to the job it was first built for A long program no longer degrades as it plays. A dead equality guard made the session append an NC-optimization option entry for every played act instead of only at change points, and reading the last one walked the whole map — together, quadratic. On a 2.35-million-line Siemens program the per-100,000-line rate now stays flat instead of climbing from 73 s to about 11 minutes. It applied to every runner, including sessions doing no optimization at all Performance and footprint, measured — physics in the native kernel takes a paired play from 59.3 s / 16.1 GB allocated to 40.6 s / 3.4 GB; building the topology of a large STL is linear instead of quadratic in triangle count (18.7× at 300k triangles, and it was 99.6% of the load); re-triangulating after a cut is about 2.2× faster; and a long program no longer exhausts client memory (session retention on a 25,000-block play: 406 MB → 142 MB). Every figure with its conditions — including the two things that cost more on purpose — is under Performance and footprint Stability and data integrity — the native crashes from disposing a display or geometry object still in use, the intermittent “No cut / No data for step” on freshly-simulated steps, the project-file race between a Load and a Save, and non-reproducible milling-force waveforms are all fixed; large geometry now builds its display topology off-thread instead of freezing the UI HiNc Packages Version 3.1.175 WorkpieceService file IO now takes relative paths and resolves them against a base-directory Func injected by LocalProjectService — the runtime-geometry write/read no longer requires the caller to pre-combine an absolute path. WorkpieceService.ReadRuntimeGeom (now ReadMeshedGeom) now returns whether the source file existed (the not-found notice moves to the calling shell) Rename runtime-geometry mesh-export methods to the Export* convention (STL/OBJ/PLY are foreign interchange formats, not native writes): WriteRuntimeGeomToStl/Obj/Ply → ExportRuntimeGeomToStl / ExportRuntimeGeomToObj / ExportRuntimeGeomToPly; the session command WriteRuntimeGeomToStlCommand → ExportRuntimeGeomToStlCommand (now ExportMeshedGeomToStlCommand) keeps the old element name as a back-compat alias so existing projects still load HiNc Packages Version 3.1.173 Improve Mrr_mm3ds precision: the material-removal-rate now sums each cut contour's signed area-vector (fan triangulation, skipping non-finite triangles) projected on the feed direction, replacing the per-contour bounding-box area that over-estimated the cut cross-section Add AlignWorkpieceProgramZeroToIso script command: resolves a G54/G55/… entry from the project ISO coordinate table and places workpiece + fixture so the program zero coincides with that machine coordinate (topology math delegated to the new AlignWorkpieceProgramZeroToIso extension) Drop gRPC plumbing from the HiNc package: remove Hi.Grpcs.* ClStrip/Player service runners and protos, MachiningProjectGrpcServer, MonitoringPlayer, and UniversalNcMonitorClient; fold CsvRunnerConfig back into CsvRunner0 (gRPC services now ship in HiNcRcl and a downstream RCL package) HiNc Packages Version 3.1.172 Replace implicit XFactory registration (private static () constructors + _ = X.XName wake-up touches) with explicit public static void Reg(XFactory factory = null) methods across ~270 classes. XFactory becomes an instance class with a process-wide Default singleton; Generators is renamed from Regs and now an instance property; the delegate type is renamed XGeneratorDelegate from GenByXElementDelegate. Composite types chain X.Reg(factory) on dependents in place of the old wake-up touches; multi-name (legacy alias) registrations keep the current XName first and group aliases under a //legacy aliases comment. Entry points (web service, test fixtures) must call Reg once at startup before any project XML is deserialized — registration no longer happens by accident when the type is first touched. See XML IO. HiNc Packages Version 3.1.171 Rename RuntimeApi → SessionShell (the runtime entry point exposed to scripting); IShellCommand → ISessionCommand and RuntimeController → SessionShellController; the Hi.ShellCommands namespace moves to Hi.SessionCommands, and every command implementer's Run() parameter renames scriptApi → sessionShell Tri-state milling-physics contract: MachiningStep physics getters converge on a tri-state result, non-null MillingPhysicsBrief on no-cut steps under EnablePhysics; silently skip thermal physics on null FluteMaterial / WorkpieceMaterial; lazy first-equip warning; align relief-face null-sentinel across NoCut + producer (in NcOpt and forces) Rename IMachiningStepHost → IMachiningService (drops the ICsScriptApi seam) Fixes: rotary IK round-trip anchored to pre-FK interpolated angle; ForceAccelShot.ReadRows skips blank lines HiNc Packages Version 3.1.167 Introduce SoftNcRunner as a pluggable NC parser/runner replacing the legacy HardNcRunner, opt-in at the time via EnableSoftNcRunner. It became the default pipeline in 3.2 — see NC Parsing Engine Extend coolant model to CoolantMode Flood/Mist/Off and refactor CoolantHeatCondition / MillingTemperatureUtil for multi-mode coolant Bind session events to MachiningSession lifetime: SessionStepBuilt, SessionStepSelected, SessionSyntaxPieceRan, SessionSourcedActEntry (legacy aliases kept as [Obsolete]); add RegisterWriteSyntaxPieces / RegisterWriteSyntaxPiecesWithActs for syntax-piece debug tracing Add ProjectApiVersion carrier through XFactory deserialization for project-XML version negotiation; resolve Workpiece through a lazy Func getter in WorkpieceService HiNc Packages Version 3.1.162 Refactor message management into three independent categories: Diagnostic (IProgress), UI Notification (MessageBoardUtil), App Log (ILogger); remove MessageUtil class entirely and remove ExceptionUtil.ShowException / ExceptionUtil.OnShown (see Message Management) Thread IProgress through XFactory deserialization chain and MachiningProject loading; remove GenMode enum entirely (see XML IO) Add ActionProgress.FromLogger to bridge IProgress APIs to ILogger Rename ShowIfCatched → CatchExceptions with explicit Action handler; remove RoutineBlocker0 Extract WorkpieceService from Workpiece for runtime geometry operations Update ISO coordinate rendering for 3+2 axis machines: coordinate position now uses IsoCoordinateEntryDisplayee with full machining chain anchor instead of table-buckle-only anchor Rename SessionMessageHost → SessionProgress on both ShellProgress and ShellProgress (SessionShell.SessionMessageHost is kept as [Obsolete]) Remove obsolete HiLog logging utility and DynamicMachiningProjectDisplayee0 HiNc Packages Version 3.1.160 Fix NC optimization R-format arc interpolation with negative R values (follow-up to v158 R-format arc fix) Fix cubetree construction defect when a triangle edge passes through a wire corner Mech Builder: geometry (STL) file picker for anchored transformation now offers Project directory in addition to Resource directory. Rename XML IO utilities: XmlSourceAndFile → FileRefSource, CombineAsSubDirectory → GetResourceDirectory, MakeXmlSourceWithRebaseFile → MakeXmlSourceToFileRef HiNc Packages Version 3.1.158 Fix G53.1 tool height compensation behavior: replace NcEnv.SetToolHeightCompensationOnFeatureNormal configuration with automatic detection via NC flag state Make EnableIntegerShrinkOnPositionCommand configurable via project settings (previously hard-coded by CNC brand, now defaults to false with XML IO support) Fix NC optimization splitting R-format arcs (G02/G03 with R parameter) by converting to IJK format, since R sign meaning does not apply correctly to individual fragments Fix step.csv reading crash on null or malformed values Fix XML IO sub-base directory not applied in some project file operations Improve CSV actual time parsing to support DateTime format in addition to TimeSpan (see Workflow: Basic Machining Simulation) Fix CSV title parsing to trim surrounding quotes HiNc Packages Version 3.1.156 Fix G68 coordinate rotation transformation for non-origin rotation centers Fix NC optimization arc/circle offset when splitting arc fragments across multiple lines Fix optimization rotation code jumping at ±180° cycle boundary by applying cyclic angle comparison Fix RTCP on unmatched tool offset Fix blocking issue when time-mapping file not found Fix FlagsText always null after NC parser refactoring HiNc Packages Version 3.1.150 Add cubetree geometry defect scanning (ScanRuntimeGeomInfDefect) and clearing (ClearDefectDisplayee) for detecting and visualizing geometry anomalies in workpieces (see Workflow: Geometry Validation) Upgrade internal fraction representation to float128 precision for improved cubetree geometry accuracy and numerical stability Refactor messaging system from IMessageHost to standard IProgress pattern; ShellProgress (formerly SessionMessageHost) now implements IProgress, and all messaging methods renamed from Add* to Report* (e.g., AddProgress → MultiTagMessageUtil.ReportProgress) Fix cubetree initialization crash Improve postprocess precision by applying sin–cos parameterization instead of direct angle-based formulation for rotary axis numerical solving in XyzabcSolver Add asynchronous anchor solid preparation on project load for improved startup performance HiNc Packages Version 3.1.144 Enhance Siemens Sinumerik support: Siemens CYCLE800 coordinate transform and reset Siemens MCALL CYCLE81() drilling cycle parsing Siemens TRAORI/TRAFOOF/SUPA flag parsing Fix Siemens TRAFOOF plain rotation coordinate transform issue Fix Siemens coordinate transform for successive file running Fix relief face collision floating-point precision issue Replace MongoDB with SQLite for local step data storage (significant package size reduction) Add machining and motion resolution dynamic adjustment functions HiNc Packages Version 3.1.106 Rename mapping API for clearer naming: ReadCsvByTimeInterpolation → MapSingleByCsvFile (one-to-one mapping) MapByActualTime → MapSeriesByCsvFile (one-to-many mapping) Rename CSV column prefix Spindle to Holder for sensor data mapping Unify CSV column tags to MappingUtil for consistent data mapping Fix ChartRange manipulation to be time-based instead of step-based for more accurate time chart display Tune thread priority for machining parallel processing to improve UI responsiveness during simulation Various code cleanup and improvements HiNc Packages Version 3.1.102 Separate resource files (Resource, wwwroot, Doc) to HiNc-Resource nuget package for smaller package size Add ScaledFeedPerCycle function for scaled feed-per-cycle machining motion resolution Upgrade target framework to .NET 10.0 Various code cleanup and improvements HiNc Packages Version 3.1.100 Refactor project architecture: split runtime functions from MachiningProject to LocalProjectService for better separation of concerns Improve MillingTraining module with separate lead and result parameter templates for more accurate cutting parameter training Separate C++ library for code protection Add UTF-8 file path support for runtime geometry IO operations Improve CsvRunner0 with enhanced time mapping pattern Various architecture improvements and bug fixes HiNc Packages Version 3.1.91 Add NcOptimizationEmbeddedLogMode to control embedded log detail level (None/SimpleLog/FullLog) (see Embedded Log Comments). Fix bug of NcOptProc duplicated feedrate assignment HiNc Packages Version 3.1.90 Rename optimization log API EnableIndividualStepAdjustmentLog Fix crash from workpiece displaying with specific mechanical topology setting Improve .flatproc.log output to maintain step order during parallel computation Various stability improvements and bug fixes HiNc Packages Version 3.1.86 Re-build NcOptProc with stricter optimization logics Add optimization logging features (see Optimization Logs): .flatproc.log file output for optimization process analysis Embedded log comments in optimized NC file marking source lines with (src) suffix Fix cutting depth and width accuracy by bounding-box method with workpiece surface Fix collision check error during concurrent changing collidable object Various stability improvements and bug fixes HiNc Packages Version 3.1.84 Optimize memory usage by shrinking map-size of clStripPos Fix design pattern of cutting parameter training module (MillingTraining) Add LoadCuttingParaByFile function to load cutting parameters from file Improve CsvRunner0 actual time parsing: automatically calculate step duration from actual time when duration is not provided Enhance message handling in SessionShell by unifying ShellProgress usage Improve optimization performance with better task scheduling Various performance improvements and bug fixes HiNc Packages Version 3.1.75 Add actual time tracking functionality (ActualTimecode) Various stability improvements and bug fixes HiNc Packages Version 3.1.74 Rename class MillingCutterOptLimit to MillingCutterOptOption Add physics simulation function for relief face collision detection (ReliefFaceCollidingSpeed_mmds, IsReliefFaceCollided) and optimization (EnableLimitByReliefAngle) Add UpdateNcOptOption function to step processing Fix step ordering bug from concurrent processing Fix ClStrip shrinking to zero issue" + "summary": "Release Note HiNc Packages Version 3.2.24 Correctness and coverage that landed after 3.2.7. The 3.1.175 → 3.2 line jump is the 3.2.7 entry below; the long form is still Upgrading from 3.1.175 to 3.2. Important Adoption status. Verification is still in progress across most areas. Do not put 3.2 NC optimization into production. It is not finished on this line. Work that depends on optimization should stay on the 3.1 line, serviced as 3.1.175.. The Blazor front end tracks the 3.2 packages, so it is not a way to stay on the 3.1 behaviour. Do not put SoftNc canned-cycle indexing with rotary words into production. SoftNc is the default engine, and its G81–G89 family does not take A / B / C words on a repeat block: a rotary-only repeat does not fire the cycle, a mixed block drops the rotary word, and under G68.2 the hole follows the table. Programs that index a rotary axis that way should run with EnableSoftNcRunner set false — the HardNc fallback indexes those blocks the way a control does. See Brand NC language coverage. Whole-program throughput against the last 3.1 set is 2.5×–18.8× in steps per second (paired on one 32-logical-processor Linux workstation; the ratio grows with program length and mesh fineness). The six-core ceiling that used to cap the 3.1 pipeline is about 6% of that gap. Figures and conditions: Performance and footprint M02 / M30 / END PGM is a reset edge on SoftNc. Tool-length compensation (including TCP), tilt, cutter-radius compensation and canned cycles cancel on the next block; the end-of-program block itself still runs under the modal state it executed with. HardNc still carries G43.4 across M02. See Results that change on upgrade An omitted H is no longer a silent zero — it takes the equipped tool's offset row first, then warns Comp-ToolHeight--NoToolForOmittedH / --NoToolForOmittedHRtcp. A vacant table row warns Comp-ToolHeight--RowMissing Cutter-radius compensation runs in the selected G17 / G18 / G19 plane. An interference path that used to swap sides silently now reports RadiusComp--Interference Siemens ROTS / AROTS are simulated into the tilt chain in Sinumerik RPY order. SCALE / MIRROR / CROTS remain recognized, not simulated Heidenhain LN vector blocks resolve into rotary axes through HeidenhainLnOrientationSyntax Fanuc G54.1 Pn (also written G54 Pn) and G59.1–G59.9 resolve additional work offsets. A selected row nobody has entered reports Coord-WorkOffset--AdditionalZero Runner feedrate members rename to CommandedClFeedrate_mmds. Physics follows the equipped tool's tip via ActualTipFeedrate_mmds. A project-level RadiusOffsetBasis decides what a tool-house refresh writes into the D column — see Tool Offsets GetMillingEquipment → GetMachiningEquipment. CodeXyzabcMachineTool is absorbed into GeneralXyzabcMachineTool (the old XML name still loads). The equipment splits into authored SetupEquipment and runtime MachiningEquipment Close joins the ProjectFileBusyException gate. LoadProject and ReloadProject take a message sink for load-time diagnostics OmitLeadingZero is an output style the project can pin (.5 vs 0.5) HiNc Packages Version 3.2.7 At a glance 3.2 is largely one piece of work: the NC interpreter that reads a controller program is now composed from configurable parts rather than written into one class, and most of this release is the brand coverage that made possible. A Siemens or Heidenhain program that 3.1.175 could not interpret past its first computed coordinate or subprogram call now replays end to end. Control-language coverage. The figure is how far our own verification has reached on that dialect — it is not the share of the language that is implemented, and it is not a guarantee for a program we have not seen: Control language Verification reached Cutter location (NX CLSF / APT source) ~90% Fanuc ~80% Siemens SINUMERIK ~60% Heidenhain (klartext and DIN/ISO) ~40% Syntec and Mazak run on the Fanuc-family vocabulary; their brand-specific syntax has not been worked through and they are not covered by the figures above. The per-construct picture — including what is recognized and deliberately not simulated — is in the brand support matrix. Failures say what went wrong. The class of defect this release spent most effort on is the silent one: a Siemens tool offset with no table row that resolved to zero and machined a whole program one tool length low, a G68 rotation that did nothing while reporting itself active, a tilted plane the machine could not reach. Each of those is now a named, searchable diagnostic rather than a plausible-looking wrong result — see the diagnostic id table. Simulation is faster and holds a bigger program. Physics moved into the native kernel (a paired play: 59.3 s / 16.1 GB allocated → 40.6 s / 3.4 GB), building the topology of a large STL is linear rather than quadratic in triangle count, and a long program no longer degrades as it plays. Figures and their conditions are under Performance and footprint. The application product moves to the web API. The web service is the application the product line is built on, and its source is the same HiNC-2025-webservice sample we publish — what you read there is what the product runs. The WPF desktop client is retired with this line: it was a demo of the same packages rather than a product surface, it takes no feature work, and it is no longer documented here. The Blazor front end builds against the same 3.2 packages but is not published as a product. Important Adoption status. This drop is published for review. Verification is still in progress across most areas, and the coverage figures above are the honest state of it. Do not put 3.2 NC optimization into production. It is not finished on this line. Work that depends on optimization should stay on the 3.1 line, which is serviced as 3.1.175.. The Blazor front end tracks the 3.2 packages, so it is not a way to stay on the 3.1 behaviour. What changed This 3.2.7 entry covers everything since 3.1.175. The 3.1 line is closed at the 3.1.175 package set and is serviced only as 3.1.175.; master moved all ten packages onto the 3.2 line on 2026-08-24 and restarted their build counters. So a 3.2 build number starts low, the two counters are not comparable, and the gap between the last 3.1 number a feed served and the first 3.2 one is expected rather than a missing upload. The versions in between were never published as a release set, which is why they are merged here rather than listed separately. Each package's build counter advances on its own, so no single number is common to all ten; a set is named by its HiNc package version — see The package line. Everything below therefore lands at once on a caller moving a 3.1.175 reference to 3.2. See Upgrading from 3.1.175 to 3.2 for the full detail — the summary here is the shape of the upgrade, not the whole of it. Breaking changes In the order they will bite. Full table with replacements on the upgrade page. Registration: XFactory.Generators becomes a ConcurrentDictionary (a caller declaring the old type breaks at compile time), and LocalProjectService.Reg() must still be called once at startup before any project XML is deserialized Messages: MixedProgress0, MultiTagMessage and MultiTagMessageUtil are removed; every message parameter is retyped from IProgress to IProgress; Category.General is deleted and NcDiagnostic.Text renames to Notification Session lifetime: LocalProjectService.SessionShell is null outside a session and ShellProgress is recreated per session — hold no long-lived reference; MachiningSession takes an injected IMachiningService, and IMachiningService replaces PlayerCancellationToken / PausePlayer with one PacePlayer Play verbs: PlayNcFile / RunNcFile gain an NcKind kind = NcKind.Auto parameter and dispatch by extension; the old narrow verbs become PlayBrandNcFile / RunBrandNcFile. The “Control” vocabulary retires with them (IControlRunner → INcRunner, RunControlLines → RunNcLines, ControlKind → NcKind) Hard renames, no shim: runtime geom → meshed geom across WorkpieceService; IContourTray / UniformContourTray / FreeContourTray → IFluting / UniformFluting / FreeFluting and MillingCutter.FluteContourTray → Fluting; HiNc's Hi.Common.ResourceUtil → ResourceLayout (it was shadowing HiGeom's same-named type); the native topo-STL wrappers move to Hi.Geom.Topo; ITimeGetter → ITimecoded; ClStrip.DrawingRefreshing → DrawingRefreshed; SoftNcRunner.NcDependencyList → PipelineNcDependencyList Removals: CsvRunner0 and EnableSoftCsvRunner, RawCsvRunner, IndexedSentence, SimpleSessionCommand, LsStl; the GUI-layer types MachiningProjectDisplayee, IsoCoordinateEntryDisplayee, HeidenhainCoordinateEntryDisplayee, UserConfig, UserService and PlayerDivConfig; the managed physics kernel types FluteZData, MillingForceUtil.RuntimePack / LayerPack / AnglePack and MillingPhysicsBrief.YieldStressMinHeight_mm; CultureUtil.SupportedCultureNames and SetCurrentCulture(string); eight gl* P/Invoke declarations that had no backing export; and PostExecutionCommand's meshed-geometry output pair (use RecordMeshedGeomCommand / ExportMeshedGeomToStlCommand instead) Shapes: MachiningToolHouse derives from Dictionary; MachiningStep.ActualTimecode / ActualDateTime become get-only views onto the new ActualTime; PreSettingCommand becomes a legacy bundle that expands on load into five single-setting commands and is never written back; ToPresentDto wire keys change Defaults: EnableSoftNcRunner is true — SoftNc is the NC engine and HardNcRunner is the opt-out fallback; EnableNativeMillingPhysics is true and a shipping build throws if you set it false; YieldingStressRatio reports NaN instead of 0 when it cannot be evaluated, so a caller reading 0 as “no constraint” must add a NaN branch New licence feature NcComposition (id 22) gates registering a non-built-in unit into a SoftNcRunner pipeline and executing an NC-embedded C# script. Degradation is silent and functional — the unit is skipped with one Composition--NotLicensed — so an unlicensed installation produces a different simulation, not an error Packaging: x64 only; the shipped machine-tool packages are renamed and now carry the .default marker (MachineTool/Table-B1.default, MachineTool/CT-350.default), so a project that refers to one by its earlier path must be repointed; HiNcServer pins request localization to English and HiNcRcl drops the inert HiNC:DisplayEngine:FontFile key Some results change without any code change — the pivot-transform anchor, a G68 rotation that was a silent no-op, blank lines resetting G90/G91, Heidenhain absolute arc centres, five-axis IK about 1000× tighter, and MC-linear moves stepping by euclidean tip travel. They are listed with their symptoms under Results that change on upgrade. New in this release Siemens SINUMERIK programs replay end to end — real .mpf / .spf files rather than an ISO subset: modal vocabulary and T=\"name\" tool calls, an expression evaluator over R-parameters and $-system variables, programmable frames and $P_UIFR, TRAORI RTCP and CYCLE800 swivel, subprogram and MCALL cycle calls, full control flow with iteration watchdogs, the AC() / IC() / DC() per-word coordinate functions and the coded-position family Heidenhain plays both dialects on one preset — klartext motion, datums, tool calls, arcs and cycles; Q-parameter evaluation with FN 9–12 conditional jumps; the PLANE / FUNCTION TCPM / M128 tilt and RTCP stack; subprogram and CALL PGM calls; post-processed spellings written without separators; and the DIN/ISO dialect with its absolute I / J / K arc centres Fanuc Custom Macro B and polar interpolation — #var expressions, IF / GOTO / WHILE, M98 / M99 subprograms and G65 / G66 macro calls; G12.1 / G13.1 polar coordinate interpolation with G41 / G42 compensation on the hypothetical plane SoftNcRunner is the default NC pipeline. See NC Parsing Engine for its architecture and the per-brand support matrix NC optimization runs on that pipeline — not finished on this line, see Adoption status above — regenerating text as anchored token edits over the verbatim source block, so lines the optimizer does not touch round-trip byte-identically. Output follows the source's decimal digits and is written back in the source file's encoding, so a GBK or Big5 program keeps its comments Cutter-location files drive a real machine chain, not only a ClMillingDevice, and a played CL program converts to Fanuc NC through ConvertClToNcFiles Milling physics moved into the native kernel — engagement, force and the sequential thermal chain — with the tool's scalar physics frozen once per session into MillingToolPhysicsPack, which also makes force waveforms reproducible between two plays of the same program Session commands declare themselves through CommandCatalogAttribute and CommandFieldAttribute, so a generic editor renders them without a hand-written form; the HTTP surface answers a no-session or no-project call with 409 and an ApiActionResult envelope carrying the call's notifications Diagnostics carry a template and its arguments, so a front end can re-render a notification in its own language, and repeats fold into one per-run summary instead of one message per block Shipped resources carry a .default marker distinguishing system territory from user files, and HiNc-Resource ships the five brand controller presets and three coolant presets so those load browsers start populated A parser configuration is a file, and it is shareable. NcRunnerSuit bundles a runner with its per-case data as one loadable unit, and per-case data now travels as proxy placeholders that resolve against the owning project — so one controller configuration is no longer welded to the job it was first built for A long program no longer degrades as it plays. A dead equality guard made the session append an NC-optimization option entry for every played act instead of only at change points, and reading the last one walked the whole map — together, quadratic. On a 2.35-million-line Siemens program the per-100,000-line rate now stays flat instead of climbing from 73 s to about 11 minutes. It applied to every runner, including sessions doing no optimization at all Performance and footprint, measured — physics in the native kernel takes a paired play from 59.3 s / 16.1 GB allocated to 40.6 s / 3.4 GB; building the topology of a large STL is linear instead of quadratic in triangle count (18.7× at 300k triangles, and it was 99.6% of the load); re-triangulating after a cut is about 2.2× faster; and a long program no longer exhausts client memory (session retention on a 25,000-block play: 406 MB → 142 MB). Every figure with its conditions — including the two things that cost more on purpose — is under Performance and footprint Stability and data integrity — the native crashes from disposing a display or geometry object still in use, the intermittent “No cut / No data for step” on freshly-simulated steps, the project-file race between a Load and a Save, and non-reproducible milling-force waveforms are all fixed; large geometry now builds its display topology off-thread instead of freezing the UI HiNc Packages Version 3.1.175 WorkpieceService file IO now takes relative paths and resolves them against a base-directory Func injected by LocalProjectService — the runtime-geometry write/read no longer requires the caller to pre-combine an absolute path. WorkpieceService.ReadRuntimeGeom (now ReadMeshedGeom) now returns whether the source file existed (the not-found notice moves to the calling shell) Rename runtime-geometry mesh-export methods to the Export* convention (STL/OBJ/PLY are foreign interchange formats, not native writes): WriteRuntimeGeomToStl/Obj/Ply → ExportRuntimeGeomToStl / ExportRuntimeGeomToObj / ExportRuntimeGeomToPly; the session command WriteRuntimeGeomToStlCommand → ExportRuntimeGeomToStlCommand (now ExportMeshedGeomToStlCommand) keeps the old element name as a back-compat alias so existing projects still load HiNc Packages Version 3.1.173 Improve Mrr_mm3ds precision: the material-removal-rate now sums each cut contour's signed area-vector (fan triangulation, skipping non-finite triangles) projected on the feed direction, replacing the per-contour bounding-box area that over-estimated the cut cross-section Add AlignWorkpieceProgramZeroToIso script command: resolves a G54/G55/… entry from the project ISO coordinate table and places workpiece + fixture so the program zero coincides with that machine coordinate (topology math delegated to the new AlignWorkpieceProgramZeroToIso extension) Drop gRPC plumbing from the HiNc package: remove Hi.Grpcs.* ClStrip/Player service runners and protos, MachiningProjectGrpcServer, MonitoringPlayer, and UniversalNcMonitorClient; fold CsvRunnerConfig back into CsvRunner0 (gRPC services now ship in HiNcRcl and a downstream RCL package) HiNc Packages Version 3.1.172 Replace implicit XFactory registration (private static () constructors + _ = X.XName wake-up touches) with explicit public static void Reg(XFactory factory = null) methods across ~270 classes. XFactory becomes an instance class with a process-wide Default singleton; Generators is renamed from Regs and now an instance property; the delegate type is renamed XGeneratorDelegate from GenByXElementDelegate. Composite types chain X.Reg(factory) on dependents in place of the old wake-up touches; multi-name (legacy alias) registrations keep the current XName first and group aliases under a //legacy aliases comment. Entry points (web service, test fixtures) must call Reg once at startup before any project XML is deserialized — registration no longer happens by accident when the type is first touched. See XML IO. HiNc Packages Version 3.1.171 Rename RuntimeApi → SessionShell (the runtime entry point exposed to scripting); IShellCommand → ISessionCommand and RuntimeController → SessionShellController; the Hi.ShellCommands namespace moves to Hi.SessionCommands, and every command implementer's Run() parameter renames scriptApi → sessionShell Tri-state milling-physics contract: MachiningStep physics getters converge on a tri-state result, non-null MillingPhysicsBrief on no-cut steps under EnablePhysics; silently skip thermal physics on null FluteMaterial / WorkpieceMaterial; lazy first-equip warning; align relief-face null-sentinel across NoCut + producer (in NcOpt and forces) Rename IMachiningStepHost → IMachiningService (drops the ICsScriptApi seam) Fixes: rotary IK round-trip anchored to pre-FK interpolated angle; ForceAccelShot.ReadRows skips blank lines HiNc Packages Version 3.1.167 Introduce SoftNcRunner as a pluggable NC parser/runner replacing the legacy HardNcRunner, opt-in at the time via EnableSoftNcRunner. It became the default pipeline in 3.2 — see NC Parsing Engine Extend coolant model to CoolantMode Flood/Mist/Off and refactor CoolantHeatCondition / MillingTemperatureUtil for multi-mode coolant Bind session events to MachiningSession lifetime: SessionStepBuilt, SessionStepSelected, SessionSyntaxPieceRan, SessionSourcedActEntry (legacy aliases kept as [Obsolete]); add RegisterWriteSyntaxPieces / RegisterWriteSyntaxPiecesWithActs for syntax-piece debug tracing Add ProjectApiVersion carrier through XFactory deserialization for project-XML version negotiation; resolve Workpiece through a lazy Func getter in WorkpieceService HiNc Packages Version 3.1.162 Refactor message management into three independent categories: Diagnostic (IProgress), UI Notification (MessageBoardUtil), App Log (ILogger); remove MessageUtil class entirely and remove ExceptionUtil.ShowException / ExceptionUtil.OnShown (see Message Management) Thread IProgress through XFactory deserialization chain and MachiningProject loading; remove GenMode enum entirely (see XML IO) Add ActionProgress.FromLogger to bridge IProgress APIs to ILogger Rename ShowIfCatched → CatchExceptions with explicit Action handler; remove RoutineBlocker0 Extract WorkpieceService from Workpiece for runtime geometry operations Update ISO coordinate rendering for 3+2 axis machines: coordinate position now uses IsoCoordinateEntryDisplayee with full machining chain anchor instead of table-buckle-only anchor Rename SessionMessageHost → SessionProgress on both ShellProgress and ShellProgress (SessionShell.SessionMessageHost is kept as [Obsolete]) Remove obsolete HiLog logging utility and DynamicMachiningProjectDisplayee0 HiNc Packages Version 3.1.160 Fix NC optimization R-format arc interpolation with negative R values (follow-up to v158 R-format arc fix) Fix cubetree construction defect when a triangle edge passes through a wire corner Mech Builder: geometry (STL) file picker for anchored transformation now offers Project directory in addition to Resource directory. Rename XML IO utilities: XmlSourceAndFile → FileRefSource, CombineAsSubDirectory → GetResourceDirectory, MakeXmlSourceWithRebaseFile → MakeXmlSourceToFileRef HiNc Packages Version 3.1.158 Fix G53.1 tool height compensation behavior: replace NcEnv.SetToolHeightCompensationOnFeatureNormal configuration with automatic detection via NC flag state Make EnableIntegerShrinkOnPositionCommand configurable via project settings (previously hard-coded by CNC brand, now defaults to false with XML IO support) Fix NC optimization splitting R-format arcs (G02/G03 with R parameter) by converting to IJK format, since R sign meaning does not apply correctly to individual fragments Fix step.csv reading crash on null or malformed values Fix XML IO sub-base directory not applied in some project file operations Improve CSV actual time parsing to support DateTime format in addition to TimeSpan (see Workflow: Basic Machining Simulation) Fix CSV title parsing to trim surrounding quotes HiNc Packages Version 3.1.156 Fix G68 coordinate rotation transformation for non-origin rotation centers Fix NC optimization arc/circle offset when splitting arc fragments across multiple lines Fix optimization rotation code jumping at ±180° cycle boundary by applying cyclic angle comparison Fix RTCP on unmatched tool offset Fix blocking issue when time-mapping file not found Fix FlagsText always null after NC parser refactoring HiNc Packages Version 3.1.150 Add cubetree geometry defect scanning (ScanRuntimeGeomInfDefect) and clearing (ClearDefectDisplayee) for detecting and visualizing geometry anomalies in workpieces (see Workflow: Geometry Validation) Upgrade internal fraction representation to float128 precision for improved cubetree geometry accuracy and numerical stability Refactor messaging system from IMessageHost to standard IProgress pattern; ShellProgress (formerly SessionMessageHost) now implements IProgress, and all messaging methods renamed from Add* to Report* (e.g., AddProgress → MultiTagMessageUtil.ReportProgress) Fix cubetree initialization crash Improve postprocess precision by applying sin–cos parameterization instead of direct angle-based formulation for rotary axis numerical solving in XyzabcSolver Add asynchronous anchor solid preparation on project load for improved startup performance HiNc Packages Version 3.1.144 Enhance Siemens Sinumerik support: Siemens CYCLE800 coordinate transform and reset Siemens MCALL CYCLE81() drilling cycle parsing Siemens TRAORI/TRAFOOF/SUPA flag parsing Fix Siemens TRAFOOF plain rotation coordinate transform issue Fix Siemens coordinate transform for successive file running Fix relief face collision floating-point precision issue Replace MongoDB with SQLite for local step data storage (significant package size reduction) Add machining and motion resolution dynamic adjustment functions HiNc Packages Version 3.1.106 Rename mapping API for clearer naming: ReadCsvByTimeInterpolation → MapSingleByCsvFile (one-to-one mapping) MapByActualTime → MapSeriesByCsvFile (one-to-many mapping) Rename CSV column prefix Spindle to Holder for sensor data mapping Unify CSV column tags to MappingUtil for consistent data mapping Fix ChartRange manipulation to be time-based instead of step-based for more accurate time chart display Tune thread priority for machining parallel processing to improve UI responsiveness during simulation Various code cleanup and improvements HiNc Packages Version 3.1.102 Separate resource files (Resource, wwwroot, Doc) to HiNc-Resource nuget package for smaller package size Add ScaledFeedPerCycle function for scaled feed-per-cycle machining motion resolution Upgrade target framework to .NET 10.0 Various code cleanup and improvements HiNc Packages Version 3.1.100 Refactor project architecture: split runtime functions from MachiningProject to LocalProjectService for better separation of concerns Improve MillingTraining module with separate lead and result parameter templates for more accurate cutting parameter training Separate C++ library for code protection Add UTF-8 file path support for runtime geometry IO operations Improve CsvRunner0 with enhanced time mapping pattern Various architecture improvements and bug fixes HiNc Packages Version 3.1.91 Add NcOptimizationEmbeddedLogMode to control embedded log detail level (None/SimpleLog/FullLog) (see Embedded Log Comments). Fix bug of NcOptProc duplicated feedrate assignment HiNc Packages Version 3.1.90 Rename optimization log API EnableIndividualStepAdjustmentLog Fix crash from workpiece displaying with specific mechanical topology setting Improve .flatproc.log output to maintain step order during parallel computation Various stability improvements and bug fixes HiNc Packages Version 3.1.86 Re-build NcOptProc with stricter optimization logics Add optimization logging features (see Optimization Logs): .flatproc.log file output for optimization process analysis Embedded log comments in optimized NC file marking source lines with (src) suffix Fix cutting depth and width accuracy by bounding-box method with workpiece surface Fix collision check error during concurrent changing collidable object Various stability improvements and bug fixes HiNc Packages Version 3.1.84 Optimize memory usage by shrinking map-size of clStripPos Fix design pattern of cutting parameter training module (MillingTraining) Add LoadCuttingParaByFile function to load cutting parameters from file Improve CsvRunner0 actual time parsing: automatically calculate step duration from actual time when duration is not provided Enhance message handling in SessionShell by unifying ShellProgress usage Improve optimization performance with better task scheduling Various performance improvements and bug fixes HiNc Packages Version 3.1.75 Add actual time tracking functionality (ActualTimecode) Various stability improvements and bug fixes HiNc Packages Version 3.1.74 Rename class MillingCutterOptLimit to MillingCutterOptOption Add physics simulation function for relief face collision detection (ReliefFaceCollidingSpeed_mmds, IsReliefFaceCollided) and optimization (EnableLimitByReliefAngle) Add UpdateNcOptOption function to step processing Fix step ordering bug from concurrent processing Fix ClStrip shrinking to zero issue" }, "release-note/upgrading-to-3.2/brand-nc-language-coverage.html": { "href": "release-note/upgrading-to-3.2/brand-nc-language-coverage.html", "title": "Brand NC language coverage | HiAPI-C# 2025", - "summary": "Brand NC language coverage The SoftNc pipeline is the default NC engine, and this is where most of the release went. Siemens SINUMERIK Real .mpf / .spf programs replay end to end, not an ISO subset. At 3.1.175 a program that declared its tool as T=\"NAME\", shifted with SUPA, computed with R-parameters, called L-subprograms or looped with WHILE was not interpreted past that point. Modal vocabulary — SUPA / G153 suppress all frames for one block; T=\"NAME\" string tool calls with D cutting-edge offsets resolved through SiemensToolOffsetTable ($TC_DP lengths and radius plus additive wear); G70 / G71 units; path smoothing (G60x / G64x, FNORM / SOFT / FFWON / COMP* / UPATH, CYCLE832); MSG() and STOPRE; CR= and TURN= arcs. Tail comments became quote-aware, so a ; inside MSG(\"A;B\") no longer truncates the block, and the preset stops misreading L and G74 as Fanuc-family codes. Evaluation — SiemensExpressionParser feeds the shared expression engine, so Z=R63+150 and X=SIN(R10)*20 drive motion. SiemensRParameterTable holds R0–R999 as per-case project data, DEF REAL/INT declarations lower into assignments, and $P_UIFR[n,axis,TR] binds both ways to SiemensFrameTable. Any other $-variable is recorded with an unsupported note rather than dropped. Five axis — SiemensProgrammableFrameSyntax simulates TRANS / ATRANS / ROT / AROT (with RPL=) into the tilt-transform chain in Sinumerik RPY order; SiemensTraoriSyntax makes TRAORI a real RTCP mode, the sibling of ISO G43.4, with TRAFOOF handing the offset back; SiemensCycle800TiltSyntax decodes CYCLE800's MODE bits for all four swivel modes. ROTS / SCALE / MIRROR are recognized and reported, not simulated. Calls — L-prefixed and named subprogram calls resolve against SubProgramFolderConfig ({name}.SPF, then .MPF, then the bare name) and inline with their P repetition count; M17 / RET pop a frame; REPEAT re-runs a labelled slice; MCALL CYCLE81/82/83/85 maps onto the shared canned-cycle machinery; PROC headers and labels are claimed whole. Control flow — GOTOF / GOTOB, IF / ELSE / ENDIF, and WHILE / FOR / REPEAT-UNTIL / LOOP. Runaway programs are bounded rather than hanging the session: SiemensGotoIterationDependency caps jumps per (file, label) and SiemensLoopIterationDependency caps iterations per (file, loop-entry line); over the cap the construct warns and falls through. Per-word coordinate functions — AC() / IC() / DC() / ACP() / ACN(), including on I / J / K circle centres. G90 C=IC(360/17) is one incremental index inside an absolute program. Direction resolution lives in McAbcCyclicPathSyntax: ACP() takes the [anchor, anchor+360) window, ACN() the (anchor-360, anchor] window, DC() the shortest swing, with the exact 180° tie going negative. On a machine-coordinate block the increment is a distance in the machine frame, because MachineCoordSelectSyntax is ordered ahead of IncrementalResolveSyntax in all five brand presets — Fanuc, Mazak, Syntec, Siemens and Heidenhain — so G53 X=IC(10) and SUPA Y=IC(-10) add the raw word to the previous machine position rather than being re-based through the program frame first. That order is not something a saved-file patch can express: a project saved before 3.2.21 keeps the old order for that block shape until its pipeline is re-created from the brand preset. Coded positions — CAC / CIC / CDC / CACP / CACN take a 1-based indexing position number rather than a coordinate, resolved against IIndexingPositionConfig, implemented by SiemensMachineDataTable from the real machine data (the MD30500 axis assignment, the MD10910 / MD10930 position tables, the equidistant MD30501–30503 definition). G74 / G75 fixed-point return is claimed as a whole block, so its dummy axis values no longer mint a rapid to the coordinates written in the block and its F never reaches the modal feedrate. OEM auxiliary M-codes — the preset declares M12 / M13 / M22 / M23 and M330 / M331 note-only, so each occurrence voices DeclaredMCode--UnmodeledEffects instead of an unknown-code warning, without inventing simulated effects. A machine's own table overrides a declaration when the real effects are known. Heidenhain Both dialects play on one preset, HeidenhainNcRunner. Klartext motion and setup — the L statement and its axis words, FMAX, M91 as a one-shot machine-coordinate move, TOOL CALL wired to tool change and spindle speed with the table height and DL. Datum handling follows TNC semantics: CYCL DEF 247 sets the preset and CYCL DEF 7 is an additive shift on top of it, composing as separate transform-chain entries instead of replacing each other, resolved against HeidenhainDatumTable. Arcs (CC pole plus C statement, DR- = CW, closed arc = full circle), RL / RR / R0 radius compensation, the M126 / M127 rotary-wrap state, M140 MB retract, and CYCL DEF 32 TOLERANCE. A C block never states its own centre: each in-plane component comes from the CC block's own axis word, else from the previous CC section's same axis, else from the arc's own start point. A bare CC is the one spelling that states all of them at once — it takes the last programmed position, read at the CC block, and replaces the modal centre rather than inheriting it. A centre that lands on the arc's own start point leaves the block with no radius, so it warns Arc-CircleCenter--OnStartPoint and is degraded to a linear move to the endpoint. Klartext incremental axis words — the I-prefixed word (IX+20, IY-15, rotary IC+90) is the same axis word as its absolute twin, read as a distance from the last programmed position. It is per word rather than per block: L X+60 IY-10 mixes an absolute X with an incremental Y and stamps only the Y. One shared grab serves five statement heads — L, C, CC, LN and CYCL CALL POS — each writing the value under the plain axis key of its own section plus a \"PositioningOverride\": { \"Y\": \"Incremental\" } entry on the block root. That is the same per-word section the Siemens IC() wrapper writes, so the existing resolve consumers convert it and no second incremental mechanism exists. Coverage differs by head: L, C and LN take the whole axis tag list, rotary included, while CC and CYCL CALL POS take X / Y / Z only — a CC never positions a rotary axis, and the stamp is keyed by axis on the block root, where a rotary letter would read as a rotary word of the block. The sign is optional (L IX5), a Q reference resolves behind the prefix (L IZ+Q2), and the glued post-processed run LIX+20IY-15 parses. Before these words were read the plain grab could not see the X inside IX — its prefix guard demands a word boundary, a digit or whitespace before the tag, and I is a word character — so L X+60 IY-10 took the X and dropped the Y: a motion to the wrong place, not a missing one. What an incremental word is measured from depends on the statement. An L / C / LN endpoint and a CC centre are distances from the last programmed tool position, so CC IX+0 IY+11 is a stated centre resolved against that position — never against the previous centre — and it is no longer the spelling whose coordinates the parser could not read. CYCL CALL POS has its own reference: an IX / IY / IZ word there is a distance from the coordinates the previous CYCL CALL POS programmed, which is the control's own rule behind its error 1A0-0108. An axis that no earlier call programmed has no reference: the control refuses the call, and the simulation warns HeidenhainCyclCall--IncrementalNoReference and falls back to the last programmed position. A tool move between the two calls makes the two candidate references differ, and that divergence warns HeidenhainCyclCall--IncrementalAfterMove, the control's stated reference winning. With M91 on the block the increment is a machine-frame distance, per the ordering note under Siemens above. A rotary increment is a signed traverse the wrap pass keeps verbatim — IC+270 from 75° stays 345° instead of folding into the ±180° shortest-path window, while an absolute rotary word on the same block still folds. The CYCL DEF 7 datum-shift I words are a different mechanism: CYCL DEF 7.2 IY+5 shifts by the value on top of the shift last valid, stays under prefixed keys in the cycle's own record, and writes no per-word stamp at all. Q-parameters — HeidenhainExpressionParser lexes Q / QR / QL / QS, the DIV keyword of FN 4 and the prefix SQRT of FN 5, so FQ1 reaches the feedrate, L X+Q2 reaches the program XYZ and TOOL CALL SQ3 reaches the spindle speed. HeidenhainQParameterTable holds Q0–Q99 free and QR0–QR499 permanent parameters as per-case project data. Unimplemented opcodes (FN 14 / 16 / 18…) are claimed and reported rather than half-read, so an FN 18 SYSREAD target stays vacant instead of taking a fabricated value. FN 9–12 conditional jumps execute, with a (file, label)-keyed iteration cap. Tilt and RTCP — PLANE (SPATIAL fully composed with SEQ / COORD ROT / TABLE ROT and STAY / MOVE / TURN positioning; VECTOR structurally captured; EULER / POINTS / RELATIV / AXIAL / PROJECTED consumed and warned with the previous tilt retained, so a PLANE AXIAL B+45 B word can never be mistaken for a rotary axis command), FUNCTION TCPM, and real M128 / M129 tool-centre-point control. Cycles and calls — CYCL DEF 2xx bodies with their Q parameters mirrored into the block assignments, cycles 200 / 232 / 251 / 252 / 253 mapped onto the shared G81 / G82 / G83 slots, CYCL CALL / CYCL CALL POS / M99 / M89 splitting call-once from modal firing, CALL LBL inlining up to LBL 0, CALL LBL n REP m as a section repeat, and CALL PGM resolved by file name. The multi-line tilde continuation form is joined at segmentation (JoinTildeContinuations, on by default). Post-processed spellings — some post-processors write a whole klartext body with no separators at all, which used to yield zero motion. Glued line shapes (LX-26.3Y+43.1, FMAXM03M08, …R0FMAX) and the detached feed spelling (F 20000) now parse, with M140, M128 and PLANE MOVE widening their own F capture so a retract or feed-limit value cannot leak into the modal feedrate. BLK FORM is recorded as a brand-neutral stock declaration without replacing the project workpiece setup, and the klartext STOP word joins M00 / M01. DIN/ISO dialect — % tape header, N block numbers, T + M06, absolute I / J / K arc centres with the modal pole carried forward, the ISO label family (G98 L definitions and the head-anchored L, call mapping the comma count onto REP), G247 Q339 stamping the same datum preset as CYCL DEF 247, G54 with axis words read as a datum-shift declaration, and G70 / G71. Fanuc and ISO common Polar coordinate interpolation — G12.1 / G13.1 on the SoftNc pipeline. Before this a polar section parsed silently wrong: the X word (a diameter) and the C word (a hypothetical Cartesian axis in mm) were consumed as ordinary XYZ and rotary degrees. ProgramRxczSyntax halves X from diameter, resolves G90/G91, writes the polar and derived Cartesian positions and the machine C angle, and classifies motion into polar linear and polar arc — the latter emitting ActMcPolarSpiralContour, which keeps spiral geometry in central polar coordinates and stays continuous across ±180°. G41 / G42 compensation is resolved on the hypothetical plane, a C-axis speed clamp applies, and YA / ZB axis pairs are supported. PolarGCodeCheckSyntax scans for incompatible G codes before the mode syntaxes consume them. Custom Macro B — #var assignment with range-routed stores (#1–#33 local per macro frame, #100–#499 volatile cleared on M02/M30, #500–#999 retained and persisted in the project, #3000–#3999 system-control), boolean and logical operators, IF[..]GOTO n, IF[..]THEN , WHILE[..]DO m / END m with a bounded-loop watchdog, and position and tool-offset system variables. M98 P_ L_, M198 external call, M99 return and M99 P{seq} early return; G65 one-shot macro call with A–Z → #1–#26 argument binding, and G66 / G67 modal macro. Cross-brand A shared DwellSyntax consumes G4 and G04 with the dialect held on the instance: Fanuc-family X / U seconds, P milliseconds, S spindle revolutions; the Siemens instance reads F seconds and S revolutions. Capturing the G04 spelling fixes a real defect — the un-captured spelling fell through to the flag and axis syntaxes, where a Fanuc G04 X0.5 dwell time became a ghost X motion word. Machine-declared M-codes — IMCodeDeclarationConfig and MCodeEffects let a machine state what its own OEM codes do (composite spindle+coolant codes, a tool-change trigger, turret T-word semantics), and MCodeExpansionSyntax expands a declared code into the canonical ISO flags the shared consumers already understand. Custom spindle M-codes drive the spindle direction through a machine-level ISpindleControlConfig; ISO M03 / M04 / M05 remain the built-in fallback. An S greater than zero with no direction ever issued assumes clockwise and emits SpindleDirection--AssumedCw, so the physics gate no longer silently produces zero mechanics for a whole file. Tool changes synthesize their axis travel. ToolChangeMotionSyntax overlays the per-axis tooling position from IToolingMcConfig onto the current pose (a NaN or missing axis stays put) and stamps a one-item rapid compound motion, and ToolChangeSemantic moves behind CompoundMotionSemantic so the tooling step lands at the tooling point. Programs that retract on their own overlay to a zero-length move and emit nothing extra. Per-brand pivot gates. PivotTransformationSyntax reverts to the ISO/Fanuc vocabulary (G43.4 plus the G68.x family), SiemensPivotTransformationSyntax gates TRAORI / CYCLE800, and HeidenhainPivotTransformationSyntax gates the M128 / PLANE vocabulary. All three compose the identical entry through the shared PivotTransformUtil. Exactly one brand gate belongs in a pipeline list — never register two. Controller presets are writable and shipped. A controller resource file is one serialized SoftNcRunner — the whole pipeline that decides how a brand's NC code is interpreted. ControllerPresetWriter serializes the built-in brand presets (CreateBrandPreset, WriteBrandPresetFile, WriteAllBrandPresetFiles) under Resource/Controller/ with the .Controller extension, and HiNc-Resource ships all five so the load browser starts populated. The static brand properties remain the source of truth; the files are regenerable snapshots. Writing needs no XFactory registration — reading one back does, because the loader drops unregistered pipeline entries silently rather than failing the load. Saved pipelines back-fill their system-wired dependencies on load. A project saved before a system-wired dependency existed never self-healed by round-tripping, because re-saving stamped a fresh API version on the same incomplete list. The SoftNcRunner XML constructor now appends the missing ones after the legacy version patches. A runner rehydrated from an older file still keeps the syntax list it was saved with, though — take the regenerated preset, or a fresh NcRunnerSuit built from it, rather than expecting an old file to grow new syntaxes. Machine-coordinate and tilted-plane failures report. G53 and G53.1 record their source G-code on the parsed block and emit Coord-MachCoord--005 / --006 / --007 on paths that used to fail silently. A G68.2 tilted plane the machine cannot reach emits Coord-Tilt--001 / --002, with a tool-axis-only IK retry that avoids a spurious warning on a machine with fewer than three rotary axes. Session-global sentence indexing. SyntaxPiece.SentenceIndex used to be assigned by two independent sequences, so indices collided as soon as a call was inlined mid-stream. The new SentenceIndexCounterDependency supplies every index at one chokepoint, so values are session-globally unique and strictly increasing in execution order, including nested and repeated calls. Inline plays can loop and jump, and playing a file no longer holds it open. Inline NC-code plays stamp their pieces with the command title as a pseudo-path, and every control-flow re-segmentation re-read the host file by that path — the existence check always failed, so loops fell through without looping. RunNc now registers the raw lines on NcLineSourceDependency and LabelScanUtil reads memory first, disk second." + "summary": "Brand NC language coverage The SoftNc pipeline is the default NC engine, and this is where most of the release went. Siemens SINUMERIK Real .mpf / .spf programs replay end to end, not an ISO subset. At 3.1.175 a program that declared its tool as T=\"NAME\", shifted with SUPA, computed with R-parameters, called L-subprograms or looped with WHILE was not interpreted past that point. Modal vocabulary — SUPA / G153 suppress all frames for one block; T=\"NAME\" string tool calls with D cutting-edge offsets resolved through SiemensToolOffsetTable ($TC_DP lengths and radius plus additive wear); G70 / G71 units; path smoothing (G60x / G64x, FNORM / SOFT / FFWON / COMP* / UPATH, CYCLE832); MSG() and STOPRE; CR= and TURN= arcs. Tail comments became quote-aware, so a ; inside MSG(\"A;B\") no longer truncates the block, and the preset stops misreading L and G74 as Fanuc-family codes. Evaluation — SiemensExpressionParser feeds the shared expression engine, so Z=R63+150 and X=SIN(R10)*20 drive motion. SiemensRParameterTable holds R0–R999 as per-case project data, DEF REAL/INT declarations lower into assignments, and $P_UIFR[n,axis,TR] binds both ways to SiemensFrameTable. Any other $-variable is recorded with an unsupported note rather than dropped. Five axis — SiemensProgrammableFrameSyntax simulates TRANS / ATRANS / ROT / AROT (with RPL=) and the solid-angle forms ROTS / AROTS into the tilt-transform chain in Sinumerik RPY order (ROTS / AROTS behave as ROT / AROT: at most two angles, first-named axis first); SiemensTraoriSyntax makes TRAORI a real RTCP mode, the sibling of ISO G43.4, with TRAFOOF handing the offset back; SiemensCycle800TiltSyntax decodes CYCLE800's MODE bits for all four swivel modes. SCALE / MIRROR / CROTS are recognized and reported (SiemensFrame--Unsupported), not simulated. Calls — L-prefixed and named subprogram calls resolve against SubProgramFolderConfig ({name}.SPF, then .MPF, then the bare name) and inline with their P repetition count; M17 / RET pop a frame; REPEAT re-runs a labelled slice; MCALL CYCLE81/82/83/85 maps onto the shared canned-cycle machinery; PROC headers and labels are claimed whole. Control flow — GOTOF / GOTOB, IF / ELSE / ENDIF, and WHILE / FOR / REPEAT-UNTIL / LOOP. Runaway programs are bounded rather than hanging the session: SiemensGotoIterationDependency caps jumps per (file, label) and SiemensLoopIterationDependency caps iterations per (file, loop-entry line); over the cap the construct warns and falls through. Per-word coordinate functions — AC() / IC() / DC() / ACP() / ACN(), including on I / J / K circle centres. G90 C=IC(360/17) is one incremental index inside an absolute program. Direction resolution lives in McAbcCyclicPathSyntax: ACP() takes the [anchor, anchor+360) window, ACN() the (anchor-360, anchor] window, DC() the shortest swing, with the exact 180° tie going negative. On a machine-coordinate block the increment is a distance in the machine frame, because MachineCoordSelectSyntax is ordered ahead of IncrementalResolveSyntax in all five brand presets — Fanuc, Mazak, Syntec, Siemens and Heidenhain — so G53 X=IC(10) and SUPA Y=IC(-10) add the raw word to the previous machine position rather than being re-based through the program frame first. That order is not something a saved-file patch can express: a project saved before 3.2.21 keeps the old order for that block shape until its pipeline is re-created from the brand preset. Coded positions — CAC / CIC / CDC / CACP / CACN take a 1-based indexing position number rather than a coordinate, resolved against IIndexingPositionConfig, implemented by SiemensMachineDataTable from the real machine data (the MD30500 axis assignment, the MD10910 / MD10930 position tables, the equidistant MD30501–30503 definition). G74 / G75 fixed-point return is claimed as a whole block, so its dummy axis values no longer mint a rapid to the coordinates written in the block and its F never reaches the modal feedrate. OEM auxiliary M-codes — the preset declares M12 / M13 / M22 / M23 and M330 / M331 note-only, so each occurrence voices DeclaredMCode--UnmodeledEffects instead of an unknown-code warning, without inventing simulated effects. A machine's own table overrides a declaration when the real effects are known. Heidenhain Both dialects play on one preset, HeidenhainNcRunner. Klartext motion and setup — the L statement and its axis words, FMAX, M91 as a one-shot machine-coordinate move, TOOL CALL wired to tool change and spindle speed with the table height and DL. Datum handling follows TNC semantics: CYCL DEF 247 sets the preset and CYCL DEF 7 is an additive shift on top of it, composing as separate transform-chain entries instead of replacing each other, resolved against HeidenhainDatumTable. Arcs (CC pole plus C statement, DR- = CW, closed arc = full circle), RL / RR / R0 radius compensation, the M126 / M127 rotary-wrap state, M140 MB retract, and CYCL DEF 32 TOLERANCE. HeidenhainLnOrientationSyntax resolves an LN vector block into rotary axes through the same RTCP machinery the rotary-word programs use: T present plus M128 / FUNCTION TCPM keeps the tool on T; T absent plus RTCP holds the tool on the surface normal N; RTCP inactive ignores T (Orientation-Vector--IgnoredNoTcpm), as the control does. A C block never states its own centre: each in-plane component comes from the CC block's own axis word, else from the previous CC section's same axis, else from the arc's own start point. A bare CC is the one spelling that states all of them at once — it takes the last programmed position, read at the CC block, and replaces the modal centre rather than inheriting it. A centre that lands on the arc's own start point leaves the block with no radius, so it warns Arc-CircleCenter--OnStartPoint and is degraded to a linear move to the endpoint. Klartext incremental axis words — the I-prefixed word (IX+20, IY-15, rotary IC+90) is the same axis word as its absolute twin, read as a distance from the last programmed position. It is per word rather than per block: L X+60 IY-10 mixes an absolute X with an incremental Y and stamps only the Y. One shared grab serves five statement heads — L, C, CC, LN and CYCL CALL POS — each writing the value under the plain axis key of its own section plus a \"PositioningOverride\": { \"Y\": \"Incremental\" } entry on the block root. That is the same per-word section the Siemens IC() wrapper writes, so the existing resolve consumers convert it and no second incremental mechanism exists. Coverage differs by head: L, C and LN take the whole axis tag list, rotary included, while CC and CYCL CALL POS take X / Y / Z only — a CC never positions a rotary axis, and the stamp is keyed by axis on the block root, where a rotary letter would read as a rotary word of the block. The sign is optional (L IX5), a Q reference resolves behind the prefix (L IZ+Q2), and the glued post-processed run LIX+20IY-15 parses. Before these words were read the plain grab could not see the X inside IX — its prefix guard demands a word boundary, a digit or whitespace before the tag, and I is a word character — so L X+60 IY-10 took the X and dropped the Y: a motion to the wrong place, not a missing one. What an incremental word is measured from depends on the statement. An L / C / LN endpoint and a CC centre are distances from the last programmed tool position, so CC IX+0 IY+11 is a stated centre resolved against that position — never against the previous centre — and it is no longer the spelling whose coordinates the parser could not read. CYCL CALL POS has its own reference: an IX / IY / IZ word there is a distance from the coordinates the previous CYCL CALL POS programmed, which is the control's own rule behind its error 1A0-0108. An axis that no earlier call programmed has no reference: the control refuses the call, and the simulation warns HeidenhainCyclCall--IncrementalNoReference and falls back to the last programmed position. A tool move between the two calls makes the two candidate references differ, and that divergence warns HeidenhainCyclCall--IncrementalAfterMove, the control's stated reference winning. With M91 on the block the increment is a machine-frame distance, per the ordering note under Siemens above. A rotary increment is a signed traverse the wrap pass keeps verbatim — IC+270 from 75° stays 345° instead of folding into the ±180° shortest-path window, while an absolute rotary word on the same block still folds. The CYCL DEF 7 datum-shift I words are a different mechanism: CYCL DEF 7.2 IY+5 shifts by the value on top of the shift last valid, stays under prefixed keys in the cycle's own record, and writes no per-word stamp at all. Q-parameters — HeidenhainExpressionParser lexes Q / QR / QL / QS, the DIV keyword of FN 4 and the prefix SQRT of FN 5, so FQ1 reaches the feedrate, L X+Q2 reaches the program XYZ and TOOL CALL SQ3 reaches the spindle speed. HeidenhainQParameterTable holds Q0–Q99 free and QR0–QR499 permanent parameters as per-case project data. Unimplemented opcodes (FN 14 / 16 / 18…) are claimed and reported rather than half-read, so an FN 18 SYSREAD target stays vacant instead of taking a fabricated value. FN 9–12 conditional jumps execute, with a (file, label)-keyed iteration cap. Tilt and RTCP — PLANE (SPATIAL fully composed with SEQ / COORD ROT / TABLE ROT and STAY / MOVE / TURN positioning; VECTOR structurally captured; EULER / POINTS / RELATIV / AXIAL / PROJECTED consumed and warned with the previous tilt retained, so a PLANE AXIAL B+45 B word can never be mistaken for a rotary axis command), FUNCTION TCPM, and real M128 / M129 tool-centre-point control. A centre-referenced FUNCTION TCPM REFPNT (TIP-CENTER / CENTER-CENTER) is recorded and reported (Orientation-RefPoint--CntNotSimulated) rather than silently read as TIP-TIP. Cycles and calls — CYCL DEF 2xx bodies with their Q parameters mirrored into the block assignments, cycles 200 / 232 / 251 / 252 / 253 mapped onto the shared G81 / G82 / G83 slots, CYCL CALL / CYCL CALL POS / M99 / M89 splitting call-once from modal firing, CALL LBL inlining up to LBL 0, CALL LBL n REP m as a section repeat, and CALL PGM resolved by file name. The multi-line tilde continuation form is joined at segmentation (JoinTildeContinuations, on by default). Post-processed spellings — some post-processors write a whole klartext body with no separators at all, which used to yield zero motion. Glued line shapes (LX-26.3Y+43.1, FMAXM03M08, …R0FMAX) and the detached feed spelling (F 20000) now parse, with M140, M128 and PLANE MOVE widening their own F capture so a retract or feed-limit value cannot leak into the modal feedrate. BLK FORM is recorded as a brand-neutral stock declaration without replacing the project workpiece setup, and the klartext STOP word joins M00 / M01. DIN/ISO dialect — % tape header, N block numbers, T + M06, absolute I / J / K arc centres with the modal pole carried forward, the ISO label family (G98 L definitions and the head-anchored L, call mapping the comma count onto REP), G247 Q339 stamping the same datum preset as CYCL DEF 247, G54 with axis words read as a datum-shift declaration, and G70 / G71. Fanuc and ISO common Polar coordinate interpolation — G12.1 / G13.1 on the SoftNc pipeline. Before this a polar section parsed silently wrong: the X word (a diameter) and the C word (a hypothetical Cartesian axis in mm) were consumed as ordinary XYZ and rotary degrees. ProgramRxczSyntax halves X from diameter, resolves G90/G91, writes the polar and derived Cartesian positions and the machine C angle, and classifies motion into polar linear and polar arc — the latter emitting ActMcPolarSpiralContour, which keeps spiral geometry in central polar coordinates and stays continuous across ±180°. G41 / G42 compensation is resolved on the hypothetical plane, a C-axis speed clamp applies, and YA / ZB axis pairs are supported. PolarGCodeCheckSyntax scans for incompatible G codes before the mode syntaxes consume them. Custom Macro B — #var assignment with range-routed stores (#1–#33 local per macro frame, #100–#499 volatile cleared on M02/M30, #500–#999 retained and persisted in the project, #3000–#3999 system-control), boolean and logical operators, IF[..]GOTO n, IF[..]THEN , WHILE[..]DO m / END m with a bounded-loop watchdog, and position and tool-offset system variables. M98 P_ L_, M198 external call, M99 return and M99 P{seq} early return; G65 one-shot macro call with A–Z → #1–#26 argument binding, and G66 / G67 modal macro. Additional work coordinate systems — G54.1 Pn, also written G54 Pn, resolves against the extended table (P1–P48). A selected row nobody has entered reports Coord-WorkOffset--AdditionalZero. G59.1–G59.9 have a provider on the Fanuc, Mazak and Syntec presets. See Work Coordinates and ISO core. Fanuc / Syntec unit codes and G05. G71 is the metric spelling of G21; G70 is the inch spelling of G20 and reports Unit--InchNotSupported rather than silently switching units. G05.1 Q1 / Q0 is AICC / Nano Smoothing (recognized). Bare G05 P{n} is a different feature (HPCC) and is consumed without changing programmed coordinates, reported under the Hpcc--* ids. Canned-cycle repeats do not take rotary words on SoftNc. The G73–G89 family expands XYZ / R / Q / F / P / K strokes. An A / B / C word on a repeat is not taken: a rotary-only repeat does not fire the cycle, a mixed block drops the rotary word, and under G68.2 the hole follows the table. Not finished on this line, see Adoption status on the release-note page. The HardNc fallback indexes those blocks the way a control does. Cross-brand A shared DwellSyntax consumes G4 and G04 with the dialect held on the instance: Fanuc-family X / U seconds, P milliseconds, S spindle revolutions; the Siemens instance reads F seconds and S revolutions. Capturing the G04 spelling fixes a real defect — the un-captured spelling fell through to the flag and axis syntaxes, where a Fanuc G04 X0.5 dwell time became a ghost X motion word. Machine-declared M-codes — IMCodeDeclarationConfig and MCodeEffects let a machine state what its own OEM codes do (composite spindle+coolant codes, a tool-change trigger, turret T-word semantics), and MCodeExpansionSyntax expands a declared code into the canonical ISO flags the shared consumers already understand. Custom spindle M-codes drive the spindle direction through a machine-level ISpindleControlConfig; ISO M03 / M04 / M05 remain the built-in fallback. An S greater than zero with no direction ever issued assumes clockwise and emits SpindleDirection--AssumedCw, so the physics gate no longer silently produces zero mechanics for a whole file. Tool changes synthesize their axis travel. ToolChangeMotionSyntax overlays the per-axis tooling position from IToolingMcConfig onto the current pose (a NaN or missing axis stays put) and stamps a one-item rapid compound motion, and ToolChangeSemantic moves behind CompoundMotionSemantic so the tooling step lands at the tooling point. Programs that retract on their own overlay to a zero-length move and emit nothing extra. Per-brand pivot gates. PivotTransformationSyntax reverts to the ISO/Fanuc vocabulary (G43.4 plus the G68.x family), SiemensPivotTransformationSyntax gates TRAORI / CYCLE800, and HeidenhainPivotTransformationSyntax gates the M128 / PLANE vocabulary. All three compose the identical entry through the shared PivotTransformUtil. Exactly one brand gate belongs in a pipeline list — never register two. Controller presets are writable and shipped. A controller resource file is one serialized SoftNcRunner — the whole pipeline that decides how a brand's NC code is interpreted. ControllerPresetWriter serializes the built-in brand presets (CreateBrandPreset, WriteBrandPresetFile, WriteAllBrandPresetFiles) under Resource/Controller/ with the .Controller extension, and HiNc-Resource ships all five so the load browser starts populated. The static brand properties remain the source of truth; the files are regenerable snapshots. Writing needs no XFactory registration — reading one back does, because the loader drops unregistered pipeline entries silently rather than failing the load. Saved pipelines back-fill their system-wired dependencies on load. A project saved before a system-wired dependency existed never self-healed by round-tripping, because re-saving stamped a fresh API version on the same incomplete list. The SoftNcRunner XML constructor now appends the missing ones after the legacy version patches. A runner rehydrated from an older file still keeps the syntax list it was saved with, though — take the regenerated preset, or a fresh NcRunnerSuit built from it, rather than expecting an old file to grow new syntaxes. Machine-coordinate and tilted-plane failures report. G53 and G53.1 record their source G-code on the parsed block and emit Coord-MachCoord--005 / --006 / --007 on paths that used to fail silently. A G68.2 tilted plane the machine cannot reach emits Coord-Tilt--001 / --002, with a tool-axis-only IK retry that avoids a spurious warning on a machine with fewer than three rotary axes. Session-global sentence indexing. SyntaxPiece.SentenceIndex used to be assigned by two independent sequences, so indices collided as soon as a call was inlined mid-stream. The new SentenceIndexCounterDependency supplies every index at one chokepoint, so values are session-globally unique and strictly increasing in execution order, including nested and repeated calls. Inline plays can loop and jump, and playing a file no longer holds it open. Inline NC-code plays stamp their pieces with the command title as a pseudo-path, and every control-flow re-segmentation re-read the host file by that path — the existence check always failed, so loops fell through without looping. RunNc now registers the raw lines on NcLineSourceDependency and LabelScanUtil reads memory first, disk second. M02 / M30 / END PGM is a reset edge. SoftNc models program-end as the edge between that block and the next, so a concatenated multi-program file does not keep TCP, tilt, CRC or a canned cycle alive into the next program. Each modal owner writes an explicit cancel section on the successor (G49 / G69 / G40 / G80); the end-of-program block itself still runs under the modal state it executed with. HardNc still carries G43.4 across M02 — see Results that change on upgrade." }, "release-note/upgrading-to-3.2/breaking-changes.html": { "href": "release-note/upgrading-to-3.2/breaking-changes.html", "title": "Breaking changes | HiAPI-C# 2025", - "summary": "Breaking changes In the order they will bite an upgrading host. 1. Registration, before anything else XFactory.Generators changes from a plain Dictionary to a ConcurrentDictionary, so parallel Reg() calls no longer corrupt the registration map. The property is public, so a caller that declares its type explicitly stops compiling. Carried over from 3.1.172 and still the first thing an upgrading host hits: Reg must be called once at startup, before any project XML is deserialized. Registration no longer happens by accident when a type is first touched. See XML IO. 2. The message channel Message reporting is rebuilt on a unified model. Every notification carries a Severity, a Category and a filterable id (SimpleMessage), and arrives on one of three typed sinks: ShellProgress for session-lifecycle messages, StepDiagnosticProgress for step-anchored diagnostics, and NcDiagnosticProgress for NC-parsing diagnostics. MixedProgress0, MultiTagMessage and MultiTagMessageUtil are removed. Every message parameter across the API — the XFactory deserialization chain included — is retyped from IProgress to IProgress. Category.General is deleted, MessageUtil becomes id-first {Category}{Severity}, and NcDiagnostic.Text renames to Notification. See Message Management. 3. The session surface LocalProjectService.SessionShell is created by BeginSession() and nulled at EndSession() — it is null outside a session and no longer lazily created. ShellProgress is recreated per session, so hold no long-lived reference to either: subscribe once through OnShellMessageAdded / OnShellMessageCleared, or buffer one call's messages with MessageCollector. MachiningSession takes an injected IMachiningService host in its constructor, and IMachiningService replaces PlayerCancellationToken / PausePlayer with a single PacePlayer property. 4. The play verbs Nc becomes the umbrella term for any playable control program, and BrandNc names the famous-brand controller-code group as a sibling of Cl and Csv. Was Is now PlayNcFile(file) — brand G-code only PlayNcFile(file, NcKind kind = NcKind.Auto) RunNcFile(file) RunNcFile(file, NcKind kind = NcKind.Auto) the narrow brand-only file verbs PlayBrandNcFile / RunBrandNcFile IControlRunner Hi.Numerical.INcRunner RunControlLines RunNcLines ControlKind NcKind IsRunningControlLines / BeginControlRunner IsRunningNcLines / BeginNcRunner the interim PlayControlFile / RunControlFile mirrors removed The same rename applies on LocalProjectService, SessionShellController and MachiningSession. Only .cl / .cls / .clsf / .csv arguments change meaning — DetectByPath treats those as closed extension sets and everything else falls back to brand G-code, so an exotic brand extension can never be misrouted. 5. Renames with no shim Was Is now WorkpieceService.GetRuntimeGeom / ReadRuntimeGeom / WriteRuntimeGeom / SetRuntimeGeom / ResetRuntimeGeom / IsRuntimeGeomInit / ScanRuntimeGeomInfDefect GetOrBuildMeshedGeom / ReadMeshedGeom / WriteMeshedGeom / SetMeshedGeom / ResetMeshedGeom / IsMeshedGeomInit / ScanMeshedGeomInfDefect MachiningEquipmentCollisionIndex.WorkpieceRuntimeGeomGetter WorkpieceMeshedGeomGetter IContourTray / UniformContourTray / FreeContourTray IFluting / UniformFluting / FreeFluting MillingCutter.FluteContourTray Fluting Hi.Common.ResourceUtil (the HiNc one) ResourceLayout NativeTopoStld / NativeTopoStlfr / NativeCarveTopoStl3wfr NativeTopoStl3d / NativeTopoStl3wfr / CarveStl Solid.NativeSmoothTopoStl / Sweptable.NativeTopoStl SmoothTopoStl3d / NativeTopoStl3d ITimeGetter and its Time member Hi.Physics.ITimecoded and Timecode ClStrip.DrawingRefreshing ClStrip.DrawingRefreshed CbtrPickable.CleanLinked* CbtrPickable.CleanAttached* SoftNcRunner.NcDependencyList PipelineNcDependencyList StateActRunner.Feedrate_mmds / Feedrate_mmdmin, ActFeedrate.Feedrate_mmds / Feedrate_mmdmin (and ActRapid), MachineMotionStep.Feedrate_mmds, the MachineMotionStep constructor's feedrate_mmds parameter CommandedClFeedrate_mmds / CommandedClFeedrate_mmdmin, CommandedClFeedrate_mmds / CommandedClFeedrate_mmdmin, CommandedClFeedrate_mmds, commandedClFeedrate_mmds Four notes on that table. The SessionShell script names for meshed geometry keep hidden [Obsolete] aliases so existing player scripts still run; the service-level members do not. WorkpieceService.ResetRuntimeGeom also drops its ClStrip parameter. ClStrip.DrawingRefreshed was renamed because both invocations always fired after the work — the -ing name told subscribers the opposite of when they are called. A subscriber that misses the rename silently detaches. Project and cutter files written before the fluting rename keep loading: each Reg() registers the ContourTray-era XName beside the older aliases, and the cutter element reader tries Fluting, then FluteContourTray, then FluteContourTrackTray. A cutter that nevertheless fails to resolve its fluting machines as a plain bounding shape rather than failing loudly, so verify the load rather than assuming it. The feedrate members were renamed because the value is the controller's commanded feedrate of the CL point – the F word after G94/G95/G93 conversion, or for a rapid the CL path over the act duration – and not the equipped tool's tip feedrate; under RTCP with a tool-length offset that does not describe the equipped tool the two differ. The step now also carries ActualTipFeedrate_mmds (client key ActualTipFeedrate_mmdmin), which the physics reads. The client key Feedrate_mmdmin keeps its historical name. SoftNcRunner.PipelineNcDependencyList is the raw list; machine-config consumers read the resolved view through GetEffectiveNcDependencyList. Legacy XML still loads and migrates. 6. Removals CSV — CsvRunner0, LocalProjectService.EnableSoftCsvRunner, and the earlier RawCsvRunner and CsvRowSemantic. CSV playback has one path, GeneralCsvRunner, and CsvRunner returns the CSV suit's SoftNcRunner directly. Carriers — IndexedSentence (wrap a bare Sentence in your own ISentenceCarrier if you passed one as a sourceCommand), SimpleSessionCommand, HiCbtr's [Obsolete] LsStl. The packed MixedIndex file-line key is replaced by typed FileLineIndex comparison, so file and line positions compare by type rather than through a packed integer. GUI-layer composition — MachiningProjectDisplayee, IsoCoordinateEntryDisplayee, HeidenhainCoordinateEntryDisplayee, UserConfig, UserService, PlayerDivConfig. Construct LocalProjectService with the ILogger-only constructor and copy the displayees from any app project — Hi.Sample.Wpf/Disp/ ships them. They compose only public API (IDisplayee over LocalProjectService), so tailoring them is the point. Managed physics kernel types — the class FluteZData, MillingForceUtil.RuntimePack / LayerPack / AnglePack, the LayerMillingEngagement constructor that built an engagement from a z-to-dz list (the default and BinaryReader constructors stay), and MillingPhysicsBrief.YieldStressMinHeight_mm. Culture declaration — CultureUtil.SupportedCultureNames and CultureUtil.SetCurrentCulture(string), deleted outright with no [Obsolete] shim. What remains is English and SetCurrentCultureEn. A host that enumerated supported cultures must enumerate its own manual or resource folders instead. Dead P/Invoke declarations — eight gl* methods on HiDisp's public GL class (glFenceSync, glGetDoublev, glGetDoublei_v, glGetDoubleIndexedvEXT, glIglooInterfaceSGIX, glPNTrianglesfATI, glPNTrianglesiATI, and the already-commented glDebugMessageCallbackAMD). They had no backing export and threw EntryPointNotFoundException when called. NcFileListCommand — a list of NC files is just a List of Program File commands, so the dedicated type is gone. Loading a project that contains one converts it in place: each entry becomes a single-file NcFileCommand (kind Auto, the same per-file extension dispatch) inside a ListCommand, and re-saving persists the converted form. Post-Execution meshed-geometry output — PostExecutionCommand loses EnableWriteMeshedGeom and MeshedGeomFileTemplate (and their pre-rename …RuntimeGeom… spellings) together with the enable-write-meshed-geom and meshed-geom-file-path routes. A geometry snapshot can be taken at any time-spot, unlike the run-derived outputs that command manages, so the carriers are now the placeable RecordMeshedGeomCommand and ExportMeshedGeomToStlCommand. Loading an old project with the pair enabled emits PostExecution--MeshedGeomOutputRetired, and re-saving drops the elements. Cutter tessellation resolution — mesh resolution is runtime data, not authored cutter data, so the seam that let a live object be “the resolution” is gone: MillingCutter no longer implements IPolarResolution2d and loses LinearResolution_mm / AngleResolution_rad / AngleResolution_deg and UpperBeamPolarResolution2dSource; the Func-based IPolarResolution2dSourceProperty interface is deleted together with the PolarResolution2dSource properties on Solid, AptProfile and CustomSpinningProfile. A Solid now holds the immutable resolution it was built with — pass it to the Solid(IGetStl, PolarResolution2d) constructor — and changing resolution means building a new solid: play paths go through SetShaperStlResolution and SetStrutStlResolution (the runner calls both for you, so the strut/upper-beam mesh follows the runtime value during a play too), holders re-mesh when you assign their PolarResolution2d property, and a fresh cutter's shaper solid is born with DefaultShaperStlResolution while the strut solid is born on the geometry's own default. Cutter files keep loading whether or not they carry the old / elements; the values in them were only ever the residue of the last play and are ignored, and 3.2 no longer writes them — a 3.1 install needs a support-line build carrying the guarded cutter reader (HiMech 3.1.157.2 / HiNc 3.1.175.5, shipped 2026-08-29) to open a 3.2-saved cutter file. Parameterless profile meshing — IShaperProfile no longer extends IGetStl, and the GetStl() convenience methods on AptProfile, ConstRatioProfile, FluteDependentRatioProfile and CustomSpinningProfile are gone. Profile mesh access is resolution-explicit: pass your value through GenStl(resolution), or state the profile's own default with GenStl(null). Geometry types that serialize as an STL source (Cylindroid, GeomCombination, TransformationGeom, ExtendedCylinder) keep GetStl() as their IGetStl contract; it is documented as, and equivalent to, GenStl(null). Bounds queries never mesh — expanding a bounding box is a rough, quick operation (view fitting), so it no longer triggers STL generation anywhere. TransformationGeom.ExpandToBox3d transforms the geometry's own box corner-wise — a conservative superset of the transformed geometry's true bounds — instead of meshing, and GeomCombination now implements IExpandToBox3d by folding its sources' boxes. A geometry without IExpandToBox3d support contributes nothing to a bounds query; generate the mesh yourself if you need its true extent. MillingCutter's cutter-height bookkeeping likewise reads the profile's ZR contour and the upper beam's box instead of meshing both on every cache clear. The web application's Legacy-Controller page — HiNC-2025-webservice removes the page the Page menu's third group opened, at /controller/, on 2026-09-11 (the 3.2 line). It edited HardNcEnv — the project's NcEnv, the HardNc controller model that is deprecating now that EnableSoftNcRunner defaults to true. Controller settings are edited on the General Setup page's Controller branch (/general-setup?tree=equipment/controller), the SoftNc runner's own face — see Controller. Of the settings only that page could edit, three were HardNcEnv's alone and retire with it: EnableShortestRotary (the runner honours the program's own M126 / M127 modal codes), MaxRotarySpeedABC (the runner's rotary ceiling is the rotary rate on the branch's Rapid Feedrates leaf) and HeidenhainMasterAxisChar (a HardNc parser setting with no SoftNc counterpart). The fourth, Align P0 — moving the part so that program zero lands on a work-coordinate row — is not offered on the runner path: the Work Coordinates leaf carries only P0 and M0, which write the row from the machine position; the part is placed by hand instead — see Program Zero Alignment. Old links keep working: /controller and anything below it redirects to the Controller branch. Nothing on the C# side moves — MachiningProject.NcEnv still loads and the /api/Controller/* endpoints stay mounted, so a host that drives HardNcEnv through the API or a script is unaffected. 7. Signature and shape changes MachiningToolHouse derives from Dictionary: SetToolId takes an int and CreateStickMillingTool returns KeyValuePair. Any (int)entry.Key cast stops compiling. Siemens T=\"name\" string tool calls are unaffected — they still resolve to an int at the semantic layer. ActualTimecode and ActualDateTime become get-only views onto the new optional ActualTime (StepActualTime) — their setters are gone. AccumulatedTime is superseded by EndTimecode, kept as an [Obsolete] alias; step CSVs write the new header and still read the old. PreSettingCommand becomes a legacy bundle. A saved bundle expands on load into MachiningResolutionCommand, MachiningMotionResolutionCommand, CollisionDetectionCommand, PauseOnFailureCommand and PhysicsCommand (plus a Read-mode RecordMeshedGeomCommand), and is never written back. Anything that located the bundle element in a saved .hincproj must look for the split commands. ToPresentDto wire keys change with the obfuscation fix: geometry DTOs use Type / Min / Max / PairZrs / Z / R / SourceFile / FileIndex / LineIndex (Vec3d keeps lowercase x / y / z), transformer DTOs use Trans, Angle_deg, CosTheta / SinTheta, Axis, Pivot, Scale, Rotation, Translation, Step, Stack, Matrix. A front-end reading those payloads must be updated in lockstep. defaultFontFile changes value from \"Font/WCL06.ttf\" to \"(embedded)\". It is a public const, so an assembly compiled against 3.1.175 already carries the old literal and keeps passing it — Init still accepts it — but a rebuild changes what it passes, and no font file is extracted to the working directory any more. 8. Defaults and gates that changed EnableSoftNcRunner defaults to true. The SoftNc pipeline is the NC engine; HardNcRunner is the opt-out fallback for the shrinking set of features still bound to it. EnableNativeMillingPhysics defaults to true, and in a shipping build setting it to false throws InvalidOperationException at the setter — the managed reference implementation lives only in a non-shipping assembly. Code that flipped it off for an A/B comparison now fails at configuration time. YieldingStressRatio and YieldingStressRatio report NaN instead of 0 when no beam section qualifies. A caller treating 0 as “no yielding constraint” — as both feed solvers did — must add a NaN branch or it will pass NaN into downstream queries. New licence feature NcComposition (id 22). Registering any non-built-in processing unit into a SoftNcRunner pipeline, or executing an NC-embedded C# script, requires it. Degradation is silent and functional: external units are skipped for the session with one Composition--NotLicensed naming them, an external segmenter falls back to SingleLineSegmenter, and scripts are skipped with Script--NotLicensed. An unlicensed installation therefore produces a different simulation, not an error. Calling the public API from your own application or session script needs no extra licence; composing the interpretation pipeline does. See NC Parsing Engine. The four SnapshotSyntax entries in the Fanuc preset default to IsEnabled = false, so projects stop serializing enabled debug snapshots. A project saved by an earlier build keeps what it serialized until its pipeline list is refreshed from the current preset. Server side: HiNcServer pins request localization to English, so an Accept-Language: zh-Hant request falls back to en. HiNcRcl removes the HiNC:DisplayEngine:FontFile configuration key, which never had any effect — delete it from appsettings. FontFile remains for a custom font. Localization: HiMech's MachiningStep.zh-Hant / .zh-Hans resx are deleted. Step presentation strings now come from the HiNc-Resource present catalog (catalog.en.json, catalog.zh-Hant.json, catalog.zh-Hans.json) that a host overlays; a host that ships neither loses the localized step labels it used to get for free. Packaging is x64-only: HiDisp drops the win-x86 runtime identifier and its Sentinel payload, HiNc-Resource drops the x86 platform. The shipped machine-tool packages are renamed. They now carry the .default marker and neutral names: MachineTool/Table-B1.default and MachineTool/CT-350.default. The table-type package was renamed outright — its .mt, its .general-mech and its STL headers travel with it — and the duplicated nested STL set inside the CT-350 package is deleted. A project, script or .mt that refers to a shipped machine-tool package by its earlier path must be repointed at the name above. The shipped mechanism file takes the canonical extension. MachineTool/Table-B1.default/Table-B1.general-mech is now Table-B1.GeneralMechanism — the spelling GeneralMechanism.XName gives and every Save As has written since the type-name extensions arrived — and the package's Table-B1.mt is repointed at it. .general-mech stays readable everywhere: the loader dispatches on the XML root element and never reads the extension, so a hand-authored file keeps its name and loads as before. Only something that refers to the shipped mechanism by its old file name must be repointed. The rename ships from HiNc-Resource 3.2.21; 3.2.20 still carries .general-mech, and an admin folder already seeded by it is re-mirrored — old name deleted, new name copied, Table-B1.mt refreshed — on the first start with the newer package." + "summary": "Breaking changes In the order they will bite an upgrading host. 1. Registration, before anything else XFactory.Generators changes from a plain Dictionary to a ConcurrentDictionary, so parallel Reg() calls no longer corrupt the registration map. The property is public, so a caller that declares its type explicitly stops compiling. Carried over from 3.1.172 and still the first thing an upgrading host hits: Reg must be called once at startup, before any project XML is deserialized. Registration no longer happens by accident when a type is first touched. See XML IO. 2. The message channel Message reporting is rebuilt on a unified model. Every notification carries a Severity, a Category and a filterable id (SimpleMessage), and arrives on one of three typed sinks: ShellProgress for session-lifecycle messages, StepDiagnosticProgress for step-anchored diagnostics, and NcDiagnosticProgress for NC-parsing diagnostics. MixedProgress0, MultiTagMessage and MultiTagMessageUtil are removed. Every message parameter across the API — the XFactory deserialization chain included — is retyped from IProgress to IProgress. Category.General is deleted, MessageUtil becomes id-first {Category}{Severity}, and NcDiagnostic.Text renames to Notification. See Message Management. 3. The session surface LocalProjectService.SessionShell is created by BeginSession() and nulled at EndSession() — it is null outside a session and no longer lazily created. ShellProgress is recreated per session, so hold no long-lived reference to either: subscribe once through OnShellMessageAdded / OnShellMessageCleared, or buffer one call's messages with MessageCollector. MachiningSession takes an injected IMachiningService host in its constructor, and IMachiningService replaces PlayerCancellationToken / PausePlayer with a single PacePlayer property. 4. The play verbs Nc becomes the umbrella term for any playable control program, and BrandNc names the famous-brand controller-code group as a sibling of Cl and Csv. Was Is now PlayNcFile(file) — brand G-code only PlayNcFile(file, NcKind kind = NcKind.Auto) RunNcFile(file) RunNcFile(file, NcKind kind = NcKind.Auto) the narrow brand-only file verbs PlayBrandNcFile / RunBrandNcFile IControlRunner Hi.Numerical.INcRunner RunControlLines RunNcLines ControlKind NcKind IsRunningControlLines / BeginControlRunner IsRunningNcLines / BeginNcRunner the interim PlayControlFile / RunControlFile mirrors removed The same rename applies on LocalProjectService, SessionShellController and MachiningSession. Only .cl / .cls / .clsf / .csv arguments change meaning — DetectByPath treats those as closed extension sets and everything else falls back to brand G-code, so an exotic brand extension can never be misrouted. 5. Renames with no shim Was Is now WorkpieceService.GetRuntimeGeom / ReadRuntimeGeom / WriteRuntimeGeom / SetRuntimeGeom / ResetRuntimeGeom / IsRuntimeGeomInit / ScanRuntimeGeomInfDefect GetOrBuildMeshedGeom / ReadMeshedGeom / WriteMeshedGeom / SetMeshedGeom / ResetMeshedGeom / IsMeshedGeomInit / ScanMeshedGeomInfDefect MachiningEquipmentCollisionIndex.WorkpieceRuntimeGeomGetter WorkpieceMeshedGeomGetter IContourTray / UniformContourTray / FreeContourTray IFluting / UniformFluting / FreeFluting MillingCutter.FluteContourTray Fluting Hi.Common.ResourceUtil (the HiNc one) ResourceLayout NativeTopoStld / NativeTopoStlfr / NativeCarveTopoStl3wfr NativeTopoStl3d / NativeTopoStl3wfr / CarveStl Solid.NativeSmoothTopoStl / Sweptable.NativeTopoStl SmoothTopoStl3d / NativeTopoStl3d ITimeGetter and its Time member Hi.Physics.ITimecoded and Timecode ClStrip.DrawingRefreshing ClStrip.DrawingRefreshed CbtrPickable.CleanLinked* CbtrPickable.CleanAttached* SoftNcRunner.NcDependencyList PipelineNcDependencyList StateActRunner.Feedrate_mmds / Feedrate_mmdmin, ActFeedrate.Feedrate_mmds / Feedrate_mmdmin (and ActRapid), MachineMotionStep.Feedrate_mmds, the MachineMotionStep constructor's feedrate_mmds parameter CommandedClFeedrate_mmds / CommandedClFeedrate_mmdmin, CommandedClFeedrate_mmds / CommandedClFeedrate_mmdmin, CommandedClFeedrate_mmds, commandedClFeedrate_mmds GetMillingEquipment GetMachiningEquipment CodeXyzabcMachineTool / CodeXyzabcMachineToolUri GeneralXyzabcMachineTool (the old XML names still load) Four notes on that table. The SessionShell script names for meshed geometry keep hidden [Obsolete] aliases so existing player scripts still run; the service-level members do not. WorkpieceService.ResetRuntimeGeom also drops its ClStrip parameter. ClStrip.DrawingRefreshed was renamed because both invocations always fired after the work — the -ing name told subscribers the opposite of when they are called. A subscriber that misses the rename silently detaches. Project and cutter files written before the fluting rename keep loading: each Reg() registers the ContourTray-era XName beside the older aliases, and the cutter element reader tries Fluting, then FluteContourTray, then FluteContourTrackTray. A cutter that nevertheless fails to resolve its fluting machines as a plain bounding shape rather than failing loudly, so verify the load rather than assuming it. The feedrate members were renamed because the value is the controller's commanded feedrate of the CL point – the F word after G94/G95/G93 conversion, or for a rapid the CL path over the act duration – and not the equipped tool's tip feedrate; under RTCP with a tool-length offset that does not describe the equipped tool the two differ. The step now also carries ActualTipFeedrate_mmds (client key ActualTipFeedrate_mmdmin), which the physics reads. The client key Feedrate_mmdmin keeps its historical name. SoftNcRunner.PipelineNcDependencyList is the raw list; machine-config consumers read the resolved view through GetEffectiveNcDependencyList. Legacy XML still loads and migrates. 6. Removals CSV — CsvRunner0, LocalProjectService.EnableSoftCsvRunner, and the earlier RawCsvRunner and CsvRowSemantic. CSV playback has one path, GeneralCsvRunner, and CsvRunner returns the CSV suit's SoftNcRunner directly. Carriers — IndexedSentence (wrap a bare Sentence in your own ISentenceCarrier if you passed one as a sourceCommand), SimpleSessionCommand, HiCbtr's [Obsolete] LsStl. The packed MixedIndex file-line key is replaced by typed FileLineIndex comparison, so file and line positions compare by type rather than through a packed integer. GUI-layer composition — MachiningProjectDisplayee, IsoCoordinateEntryDisplayee, HeidenhainCoordinateEntryDisplayee, UserConfig, UserService, PlayerDivConfig. Construct LocalProjectService with the ILogger-only constructor and copy the displayees from any app project — Hi.Sample.Wpf/Disp/ ships them. They compose only public API (IDisplayee over LocalProjectService), so tailoring them is the point. Managed physics kernel types — the class FluteZData, MillingForceUtil.RuntimePack / LayerPack / AnglePack, the LayerMillingEngagement constructor that built an engagement from a z-to-dz list (the default and BinaryReader constructors stay), and MillingPhysicsBrief.YieldStressMinHeight_mm. Culture declaration — CultureUtil.SupportedCultureNames and CultureUtil.SetCurrentCulture(string), deleted outright with no [Obsolete] shim. What remains is English and SetCurrentCultureEn. A host that enumerated supported cultures must enumerate its own manual or resource folders instead. Dead P/Invoke declarations — eight gl* methods on HiDisp's public GL class (glFenceSync, glGetDoublev, glGetDoublei_v, glGetDoubleIndexedvEXT, glIglooInterfaceSGIX, glPNTrianglesfATI, glPNTrianglesiATI, and the already-commented glDebugMessageCallbackAMD). They had no backing export and threw EntryPointNotFoundException when called. NcFileListCommand — a list of NC files is just a List of Program File commands, so the dedicated type is gone. Loading a project that contains one converts it in place: each entry becomes a single-file NcFileCommand (kind Auto, the same per-file extension dispatch) inside a ListCommand, and re-saving persists the converted form. Post-Execution meshed-geometry output — PostExecutionCommand loses EnableWriteMeshedGeom and MeshedGeomFileTemplate (and their pre-rename …RuntimeGeom… spellings) together with the enable-write-meshed-geom and meshed-geom-file-path routes. A geometry snapshot can be taken at any time-spot, unlike the run-derived outputs that command manages, so the carriers are now the placeable RecordMeshedGeomCommand and ExportMeshedGeomToStlCommand. Loading an old project with the pair enabled emits PostExecution--MeshedGeomOutputRetired, and re-saving drops the elements. Cutter tessellation resolution — mesh resolution is runtime data, not authored cutter data, so the seam that let a live object be “the resolution” is gone: MillingCutter no longer implements IPolarResolution2d and loses LinearResolution_mm / AngleResolution_rad / AngleResolution_deg and UpperBeamPolarResolution2dSource; the Func-based IPolarResolution2dSourceProperty interface is deleted together with the PolarResolution2dSource properties on Solid, AptProfile and CustomSpinningProfile. A Solid now holds the immutable resolution it was built with — pass it to the Solid(IGetStl, PolarResolution2d) constructor — and changing resolution means building a new solid: play paths go through SetShaperStlResolution and SetStrutStlResolution (the runner calls both for you, so the strut/upper-beam mesh follows the runtime value during a play too), holders re-mesh when you assign their PolarResolution2d property, and a fresh cutter's shaper solid is born with DefaultShaperStlResolution while the strut solid is born on the geometry's own default. Cutter files keep loading whether or not they carry the old / elements; the values in them were only ever the residue of the last play and are ignored, and 3.2 no longer writes them — a 3.1 install needs a support-line build carrying the guarded cutter reader (HiMech 3.1.157.2 / HiNc 3.1.175.5, shipped 2026-08-29) to open a 3.2-saved cutter file. Parameterless profile meshing — IShaperProfile no longer extends IGetStl, and the GetStl() convenience methods on AptProfile, ConstRatioProfile, FluteDependentRatioProfile and CustomSpinningProfile are gone. Profile mesh access is resolution-explicit: pass your value through GenStl(resolution), or state the profile's own default with GenStl(null). Geometry types that serialize as an STL source (Cylindroid, GeomCombination, TransformationGeom, ExtendedCylinder) keep GetStl() as their IGetStl contract; it is documented as, and equivalent to, GenStl(null). Bounds queries never mesh — expanding a bounding box is a rough, quick operation (view fitting), so it no longer triggers STL generation anywhere. TransformationGeom.ExpandToBox3d transforms the geometry's own box corner-wise — a conservative superset of the transformed geometry's true bounds — instead of meshing, and GeomCombination now implements IExpandToBox3d by folding its sources' boxes. A geometry without IExpandToBox3d support contributes nothing to a bounds query; generate the mesh yourself if you need its true extent. MillingCutter's cutter-height bookkeeping likewise reads the profile's ZR contour and the upper beam's box instead of meshing both on every cache clear. The web application's Legacy-Controller page — HiNC-2025-webservice removes the page the Page menu's third group opened, at /controller/, on 2026-09-11 (the 3.2 line). It edited HardNcEnv — the project's NcEnv, the HardNc controller model that is deprecating now that EnableSoftNcRunner defaults to true. Controller settings are edited on the General Setup page's Controller branch (/general-setup?tree=equipment/controller), the SoftNc runner's own face — see Controller. Of the settings only that page could edit, three were HardNcEnv's alone and retire with it: EnableShortestRotary (the runner honours the program's own M126 / M127 modal codes), MaxRotarySpeedABC (the runner's rotary ceiling is the rotary rate on the branch's Rapid Feedrates leaf) and HeidenhainMasterAxisChar (a HardNc parser setting with no SoftNc counterpart). The fourth, Align P0 — moving the part so that program zero lands on a work-coordinate row — is not offered on the runner path: the Work Coordinates leaf carries only P0 and M0, which write the row from the machine position; the part is placed by hand instead — see Program Zero Alignment. Old links keep working: /controller and anything below it redirects to the Controller branch. Nothing on the C# side moves — MachiningProject.NcEnv still loads and the /api/Controller/* endpoints stay mounted, so a host that drives HardNcEnv through the API or a script is unaffected. 7. Signature and shape changes MachiningToolHouse derives from Dictionary: SetToolId takes an int and CreateStickMillingTool returns KeyValuePair. Any (int)entry.Key cast stops compiling. Siemens T=\"name\" string tool calls are unaffected — they still resolve to an int at the semantic layer. ActualTimecode and ActualDateTime become get-only views onto the new optional ActualTime (StepActualTime) — their setters are gone. AccumulatedTime is superseded by EndTimecode, kept as an [Obsolete] alias; step CSVs write the new header and still read the old. PreSettingCommand becomes a legacy bundle. A saved bundle expands on load into MachiningResolutionCommand, MachiningMotionResolutionCommand, CollisionDetectionCommand, PauseOnFailureCommand and PhysicsCommand (plus a Read-mode RecordMeshedGeomCommand), and is never written back. Anything that located the bundle element in a saved .hincproj must look for the split commands. ToPresentDto wire keys change with the obfuscation fix: geometry DTOs use Type / Min / Max / PairZrs / Z / R / SourceFile / FileIndex / LineIndex (Vec3d keeps lowercase x / y / z), transformer DTOs use Trans, Angle_deg, CosTheta / SinTheta, Axis, Pivot, Scale, Rotation, Translation, Step, Stack, Matrix. A front-end reading those payloads must be updated in lockstep. defaultFontFile changes value from \"Font/WCL06.ttf\" to \"(embedded)\". It is a public const, so an assembly compiled against 3.1.175 already carries the old literal and keeps passing it — Init still accepts it — but a rebuild changes what it passes, and no font file is extracted to the working directory any more. The equipment splits into two faces. SetupEquipment is the authored one — the only face a project file persists, reached as SetupEquipment. MachiningEquipment is the runtime face the runner, physics, collision and execution display read; it is rebuilt from the authored face at project assignment and at session boundaries, so a value written onto it is discarded rather than saved. See Getting started. 8. Defaults and gates that changed EnableSoftNcRunner defaults to true. The SoftNc pipeline is the NC engine; HardNcRunner is the opt-out fallback for the shrinking set of features still bound to it. EnableNativeMillingPhysics defaults to true, and in a shipping build setting it to false throws InvalidOperationException at the setter — the managed reference implementation lives only in a non-shipping assembly. Code that flipped it off for an A/B comparison now fails at configuration time. YieldingStressRatio and YieldingStressRatio report NaN instead of 0 when no beam section qualifies. A caller treating 0 as “no yielding constraint” — as both feed solvers did — must add a NaN branch or it will pass NaN into downstream queries. New licence feature NcComposition (id 22). Registering any non-built-in processing unit into a SoftNcRunner pipeline, or executing an NC-embedded C# script, requires it. Degradation is silent and functional: external units are skipped for the session with one Composition--NotLicensed naming them, an external segmenter falls back to SingleLineSegmenter, and scripts are skipped with Script--NotLicensed. An unlicensed installation therefore produces a different simulation, not an error. Calling the public API from your own application or session script needs no extra licence; composing the interpretation pipeline does. See NC Parsing Engine. RadiusOffsetBasis decides what a tool-house refresh writes into the D column: CutterRadius (default — geometry plus wear, the only behaviour before the basis existed) or ZeroBased (wear only, for a tool-centre CAM path). An older project refreshes exactly as before until the basis is changed. See Tool Offsets. The four SnapshotSyntax entries in the Fanuc preset default to IsEnabled = false, so projects stop serializing enabled debug snapshots. A project saved by an earlier build keeps what it serialized until its pipeline list is refreshed from the current preset. Server side: HiNcServer pins request localization to English, so an Accept-Language: zh-Hant request falls back to en. HiNcRcl removes the HiNC:DisplayEngine:FontFile configuration key, which never had any effect — delete it from appsettings. FontFile remains for a custom font. Localization: HiMech's MachiningStep.zh-Hant / .zh-Hans resx are deleted. Step presentation strings now come from the HiNc-Resource present catalog (catalog.en.json, catalog.zh-Hant.json, catalog.zh-Hans.json) that a host overlays; a host that ships neither loses the localized step labels it used to get for free. Packaging is x64-only: HiDisp drops the win-x86 runtime identifier and its Sentinel payload, HiNc-Resource drops the x86 platform. The shipped machine-tool packages are renamed. They now carry the .default marker and neutral names: MachineTool/Table-B1.default and MachineTool/CT-350.default. The table-type package was renamed outright — its .mt, its .general-mech and its STL headers travel with it — and the duplicated nested STL set inside the CT-350 package is deleted. A project, script or .mt that refers to a shipped machine-tool package by its earlier path must be repointed at the name above. The shipped mechanism file takes the canonical extension. MachineTool/Table-B1.default/Table-B1.general-mech is now Table-B1.GeneralMechanism — the spelling GeneralMechanism.XName gives and every Save As has written since the type-name extensions arrived — and the package's Table-B1.mt is repointed at it. .general-mech stays readable everywhere: the loader dispatches on the XML root element and never reads the extension, so a hand-authored file keeps its name and loads as before. Only something that refers to the shipped mechanism by its old file name must be repointed. The rename ships from HiNc-Resource 3.2.21; 3.2.20 still carries .general-mech, and an admin folder already seeded by it is re-mirrored — old name deleted, new name copied, Table-B1.mt refreshed — on the first start with the newer package." }, "release-note/upgrading-to-3.2/cl-playback.html": { "href": "release-note/upgrading-to-3.2/cl-playback.html", @@ -8127,7 +8152,7 @@ "release-note/upgrading-to-3.2/index.html": { "href": "release-note/upgrading-to-3.2/index.html", "title": "Upgrading from 3.1.175 to 3.2 | HiAPI-C# 2025", - "summary": "Upgrading from 3.1.175 to 3.2 These pages are the long form of the 3.2 release-note entry. They exist because 3.2 is not an increment on the last release most callers hold — it is the accumulation of everything that landed after the 3.1.175 package set, delivered in one step. Read them in order the first time. The two sections that decide whether an upgrade is a recompile or an afternoon are Breaking changes and Results that change on upgrade; everything after them is new capability you can adopt when you need it. Important Read the Adoption status note on the release-note page before planning around this. The short version: 3.2 is published for review, verification is still in progress across most areas, and NC optimization is not finished on this line — work that depends on it should stay on 3.1, serviced as 3.1.175.. Pages Ordered the way to read them: what the package numbers mean, then the two sections that decide whether the upgrade is a recompile or an afternoon, then the new capability, adopted when needed. The package line — Why a 3.2 build number starts low, which ten packages moved together, and what that means for a mixed reference set Breaking changes — The eight groups that stop a build, in the order they bite — registration, messages, the session surface, the play verbs, renames with no shim, removals, signature changes, changed defaults Results that change on upgrade — What a simulation produces differently afterwards — usually because 3.1.175 was wrong — and why a byte-for-byte comparison will differ Brand NC language coverage — Where most of the release went: Siemens, Heidenhain, Fanuc and ISO common, and the cross-brand work behind them NC optimization and writeback — The optimization leg as it stands on this line — published for review, not for production Milling physics, training and measured data — Physics in the native kernel, and what changed in training and in the handling of measured signals Cutter-location (CL) playback and CL-to-NC — Replaying an NX CLSF / APT-source toolpath directly, and writing one out as NC Session, project and command model — Runner suits, the three the project holds, and the command model a script and the app share Geometry, rendering and native stability — Disposal crashes that no longer take the process down, and the geometry and rendering changes behind them Performance and footprint — Every figure with its conditions stated, including the places the release spent time on purpose to buy correctness Packaging, resources and hosting — The .default ownership marker, resource seeding, and what a host has to change New diagnostics you may now see — The searchable ids for failure modes that used to be silent" + "summary": "Upgrading from 3.1.175 to 3.2 These pages are the long form of the 3.1.175 → 3.2 line — the 3.2.7 entry and the 3.2.24 incremental drop. They exist because 3.2 is not an increment on the last release most callers hold — it is the accumulation of everything that landed after the 3.1.175 package set, delivered in one step. Read them in order the first time. The two sections that decide whether an upgrade is a recompile or an afternoon are Breaking changes and Results that change on upgrade; everything after them is new capability you can adopt when you need it. Important Read the Adoption status note on the release-note page before planning around this. The short version: 3.2 is published for review, verification is still in progress across most areas, NC optimization is not finished on this line, and SoftNc canned-cycle indexing with rotary A/B/C words is not finished — work that depends on either should stay on 3.1, serviced as 3.1.175., or run with SoftNc off for the rotary-cycle case. Pages Ordered the way to read them: what the package numbers mean, then the two sections that decide whether the upgrade is a recompile or an afternoon, then the new capability, adopted when needed. The package line — Why a 3.2 build number starts low, which ten packages moved together, and what that means for a mixed reference set Breaking changes — The eight groups that stop a build, in the order they bite — registration, messages, the session surface, the play verbs, renames with no shim, removals, signature changes, changed defaults Results that change on upgrade — What a simulation produces differently afterwards — usually because 3.1.175 was wrong — and why a byte-for-byte comparison will differ Brand NC language coverage — Where most of the release went: Siemens, Heidenhain, Fanuc and ISO common, and the cross-brand work behind them NC optimization and writeback — The optimization leg as it stands on this line — published for review, not for production Milling physics, training and measured data — Physics in the native kernel, and what changed in training and in the handling of measured signals Cutter-location (CL) playback and CL-to-NC — Replaying an NX CLSF / APT-source toolpath directly, and writing one out as NC Session, project and command model — Runner suits, the three the project holds, and the command model a script and the app share Geometry, rendering and native stability — Disposal crashes that no longer take the process down, and the geometry and rendering changes behind them Performance and footprint — Every figure with its conditions stated, including the places the release spent time on purpose to buy correctness Packaging, resources and hosting — The .default ownership marker, resource seeding, and what a host has to change New diagnostics you may now see — The searchable ids for failure modes that used to be silent" }, "release-note/upgrading-to-3.2/milling-physics-and-training.html": { "href": "release-note/upgrading-to-3.2/milling-physics-and-training.html", @@ -8137,12 +8162,12 @@ "release-note/upgrading-to-3.2/nc-optimization-and-writeback.html": { "href": "release-note/upgrading-to-3.2/nc-optimization-and-writeback.html", "title": "NC optimization and writeback | HiAPI-C# 2025", - "summary": "NC optimization and writeback Important NC optimization is not finished on the 3.2 line. What follows describes the leg as it stands, and it is published for review, not for production. Work that depends on optimized output should stay on the 3.1 line, serviced as 3.1.175.. The optimizer runs on the SoftNc pipeline by default. OptimizeToFiles keeps its signature, its script snippet and its HTTP route, but when EnableSoftNcRunner is on and the session holds played SyntaxPieceLayers, it delegates to the new OptimizeNcFiles; otherwise the frozen HardNc path runs unchanged. The new leg classifies the final SyntaxPiece layer, solves the per-step feed adjustments from milling physics, and regenerates text as anchored token edits over the verbatim source block — lines the optimizer does not touch round-trip byte-identically instead of being re-synthesized. Per-file results are retained in NcOptimizations. EnableIndividualStepAdjustmentLog drives both legs. Depth splition re-interpolates through a planned fragment path, with separate modal chains for the pre-build feed and the emission endpoint, per-step machine-to-program-frame inversion, and per-fragment arc IJK recomputation — including R-to-IJK conversion — wherever the arc block itself carries the centre. An arc whose centre lives on a preceding modal block is exempt: its fragments keep the source block's arc words and share that upstream centre line unchanged, so only their endpoint and F words move. Two cases where the frozen HardNc optimizer is silently wrong are downgraded to a non-split rewrite rather than reproduced, each warned once per run. The first is an incremental block, and it is now taken by both of its spellings: G91 modal state, or a block whose modal state is absolute while individual axis words carry a per-word incremental override — Siemens X=IC(10) and the coded CIC(), klartext IX+20 and IC+90. The frozen fragment rewrite carries no G90/G91 handling at all and always re-emits a coordinate as an absolute program value, so it splits both shapes and is wrong on each in its own way: the G91 line comes back stating an absolute number the control still reads as a distance, and the per-word line keeps its incremental source word, so every fragment re-applies the same distance from its own start. Both now stop at NcOpt--SplitionIncrementalUnsupported. The per-word spelling is also the only one that can reach klartext: that dialect has no modal G90/G91 word, so a stamped axis word is the only incremental form it produces. The second case is a klartext C … DR± arc whose modal CC chain left one of the two in-plane axes unstated, so the block's own start point supplied that component — since every fragment would re-derive the centre from its own start; that one reports NcOpt--SplitionStartPointCenterUnsupported. A klartext C block whose centre lands entirely on its own start point never reaches that guard: its radius is zero, so play degrades it to a chord under a validation warning of its own. Neither the controller brand nor klartext as such refuses a split: a klartext L block re-interpolates like an ISO one. The compensation stage is no longer dead on the SoftNc leg. The HardNc baseline wrote the compensation into the step contexts while its output read the piece packs, so it never emitted a compensated coordinate at all. Each fragment endpoint is now offset — XYZ only, rotary words untouched — by the tool-tip deflection rotated into the leaf program frame the endpoint lives in, so a G68.2 tilted setup is compensated in the right direction. It is consumed on re-interpolated splition fragments only, and CompensationMask defaults to 0, so with no mask set the stage is a strict no-op. Output follows the source's decimal digits. Both legs used to write coordinates through a fixed F4 and every F word through F2, so a program stated to three decimals could come back with a fourth — an alarm on controllers strict about their least input increment. Digit counts are now scanned per word family over the played source texts with comment spans masked, floored at 3/3/0 and capped at 9, and threaded through the whole write path. The word-suppression tolerances and the F comparison grid derive from the resolved digits instead of the old fixed literals. Optimized NC is written back in the source file's encoding. NC play reads and optimized writes go through DetectRoundTripEncoding — BOM, then strict UTF-8, then Latin-1 — so an ANSI-family file (GBK, Big5, Shift-JIS) re-encodes to its original bytes instead of having every undecodable byte replaced. Comments in those encodings survive the round trip. A feed change no longer mints a one-step carrier fragment. Under an arc split that fragment is a degenerate arc whose start and end nearly coincide, which an incremental-IJK reader — or a control that treats begin == end as a full turn — expands into a full circle. An F re-statement is now handed to the feed run's next emitted fragment, the one that actually runs at that feed. A splition fragment at the head of the stream writes only the axis words the source stated, so it can no longer invent a Z0. whose value under the source's silence is just the home-fallback modal. Unparsable NC lines survive. A line the parser could not read used to be dropped from the runner's line list, so the optimized file silently lost it. HardNcRunner now rebuilds a parse-failed line as an opaque no-op — the empty-text parse inherits modal state like a blank line, and the raw text is restored for writers — and the optimizer mirrors the fallback, so IF blocks, #-variable macros, G68 R# and GOTO come through verbatim. A BuildNcLines--ParseFailed diagnostic still reports the line, and the line stays un-simulated. The output writer is also closed in a finally, so an exception can no longer leave a half-written file locked. First delivered on the 3.1.175.x service line. A Siemens CYCLE800 swivel counts as a macro line in the piece classifier, so it is preserved rather than treated as an optimizable motion block. The host key HiNC:OptCoreNum governs both legs again. It used to set only the legacy NcOptProc.CoreNum; once the SoftNc optimizer became the default path the key silently stopped governing anything. It now assigns both (0 = derive from the processor count). NC text writeback regenerates NC from a program that has already been played, in two stages over the session's finished syntax pieces: a converter turns the source piece stream into a destination stream plus a bidirectional source↔destination map keyed by sentence index, and a reverse segmenter serializes that stream back to lines. The data→text seam is a brand-agnostic sentence composer, first implemented for Fanuc. A patch-mode writer performs positional token edits — NaN deletes a word absorbing one separator space, insertion follows conventional order, trailing zeros trim keeping the dot — and refuses to rewrite variable, bracket and keyword values rather than corrupting them, reporting Writeback-Patch--VariableValue, --KeywordValue, --CommentOnlyText and --EditUnmatched. Five of its choices follow the dialect rather than the convention: the variable prefix it recognizes and refuses (Q on klartext, R on Siemens, # elsewhere), the keyword feed values it refuses (klartext's FMAX and FAUTO), the comment spans it protects (klartext's ; and // as well as the parenthesized span), and two that show in the written text. On a klartext file an inserted F lands after the rightmost of DR+/DR- and RL/RR/R0 as well as after its conventional predecessor coordinate words, so the patched block keeps the element order a TNC enforces — coordinates, rotation direction, radius compensation, F, M. And a trailing comment is wrapped in the file's own grammar, the Fanuc family's (text) against klartext's ;text, so the optimizer's embedded source note leaves a klartext program valid instead of handing a control a parenthesis it would read as code. A second diagnostic home. NcManipulationDiagnosticProgress is a sibling of the play-time NcDiagnosticProgress, dedicated to NC-rework operations — writeback conversion and optimization — so a play reset never discards manipulation results and vice versa." + "summary": "NC optimization and writeback Important NC optimization is not finished on the 3.2 line. What follows describes the leg as it stands, and it is published for review, not for production. Work that depends on optimized output should stay on the 3.1 line, serviced as 3.1.175.. The optimizer runs on the SoftNc pipeline by default. OptimizeToFiles keeps its signature, its script snippet and its HTTP route, but when EnableSoftNcRunner is on and the session holds played SyntaxPieceLayers, it delegates to the new OptimizeNcFiles; otherwise the frozen HardNc path runs unchanged. The new leg classifies the final SyntaxPiece layer, solves the per-step feed adjustments from milling physics, and regenerates text as anchored token edits over the verbatim source block — lines the optimizer does not touch round-trip byte-identically instead of being re-synthesized. Per-file results are retained in NcOptimizations. EnableIndividualStepAdjustmentLog drives both legs. Depth splition re-interpolates through a planned fragment path, with separate modal chains for the pre-build feed and the emission endpoint, per-step machine-to-program-frame inversion, and per-fragment arc IJK recomputation — including R-to-IJK conversion — wherever the arc block itself carries the centre. An arc whose centre lives on a preceding modal block is exempt: its fragments keep the source block's arc words and share that upstream centre line unchanged, so only their endpoint and F words move. Two cases where the frozen HardNc optimizer is silently wrong are downgraded to a non-split rewrite rather than reproduced, each warned once per run. The first is an incremental block, and it is now taken by both of its spellings: G91 modal state, or a block whose modal state is absolute while individual axis words carry a per-word incremental override — Siemens X=IC(10) and the coded CIC(), klartext IX+20 and IC+90. The frozen fragment rewrite carries no G90/G91 handling at all and always re-emits a coordinate as an absolute program value, so it splits both shapes and is wrong on each in its own way: the G91 line comes back stating an absolute number the control still reads as a distance, and the per-word line keeps its incremental source word, so every fragment re-applies the same distance from its own start. Both now stop at NcOpt--SplitionIncrementalUnsupported. The per-word spelling is also the only one that can reach klartext: that dialect has no modal G90/G91 word, so a stamped axis word is the only incremental form it produces. The second case is a klartext C … DR± arc whose modal CC chain left one of the two in-plane axes unstated, so the block's own start point supplied that component — since every fragment would re-derive the centre from its own start; that one reports NcOpt--SplitionStartPointCenterUnsupported. A klartext C block whose centre lands entirely on its own start point never reaches that guard: its radius is zero, so play degrades it to a chord under a validation warning of its own. Neither the controller brand nor klartext as such refuses a split: a klartext L block re-interpolates like an ISO one. The compensation stage is no longer dead on the SoftNc leg. The HardNc baseline wrote the compensation into the step contexts while its output read the piece packs, so it never emitted a compensated coordinate at all. Each fragment endpoint is now offset — XYZ only, rotary words untouched — by the tool-tip deflection rotated into the leaf program frame the endpoint lives in, so a G68.2 tilted setup is compensated in the right direction. It is consumed on re-interpolated splition fragments only, and CompensationMask defaults to 0, so with no mask set the stage is a strict no-op. Output follows the source's decimal digits. Both legs used to write coordinates through a fixed F4 and every F word through F2, so a program stated to three decimals could come back with a fourth — an alarm on controllers strict about their least input increment. Digit counts are now scanned per word family over the played source texts with comment spans masked, floored at 3/3/0 and capped at 9, and threaded through the whole write path. The word-suppression tolerances and the F comparison grid derive from the resolved digits instead of the old fixed literals. Leading zeros follow the source, and the project can pin the spelling. OmitLeadingZero is an output style: on, the writer drops a leading zero before the decimal (.5 rather than 0.5); off, it writes the zero. The option is carried on the project so two machines produce the same bytes, and a report names which style the source itself used. Optimized NC is written back in the source file's encoding. NC play reads and optimized writes go through DetectRoundTripEncoding — BOM, then strict UTF-8, then Latin-1 — so an ANSI-family file (GBK, Big5, Shift-JIS) re-encodes to its original bytes instead of having every undecodable byte replaced. Comments in those encodings survive the round trip. A feed change no longer mints a one-step carrier fragment. Under an arc split that fragment is a degenerate arc whose start and end nearly coincide, which an incremental-IJK reader — or a control that treats begin == end as a full turn — expands into a full circle. An F re-statement is now handed to the feed run's next emitted fragment, the one that actually runs at that feed. A splition fragment at the head of the stream writes only the axis words the source stated, so it can no longer invent a Z0. whose value under the source's silence is just the home-fallback modal. Unparsable NC lines survive. A line the parser could not read used to be dropped from the runner's line list, so the optimized file silently lost it. HardNcRunner now rebuilds a parse-failed line as an opaque no-op — the empty-text parse inherits modal state like a blank line, and the raw text is restored for writers — and the optimizer mirrors the fallback, so IF blocks, #-variable macros, G68 R# and GOTO come through verbatim. A BuildNcLines--ParseFailed diagnostic still reports the line, and the line stays un-simulated. The output writer is also closed in a finally, so an exception can no longer leave a half-written file locked. First delivered on the 3.1.175.x service line. A Siemens CYCLE800 swivel counts as a macro line in the piece classifier, so it is preserved rather than treated as an optimizable motion block. The host key HiNC:OptCoreNum governs both legs again. It used to set only the legacy NcOptProc.CoreNum; once the SoftNc optimizer became the default path the key silently stopped governing anything. It now assigns both (0 = derive from the processor count). NC text writeback regenerates NC from a program that has already been played, in two stages over the session's finished syntax pieces: a converter turns the source piece stream into a destination stream plus a bidirectional source↔destination map keyed by sentence index, and a reverse segmenter serializes that stream back to lines. The data→text seam is a brand-agnostic sentence composer, first implemented for Fanuc. A patch-mode writer performs positional token edits — NaN deletes a word absorbing one separator space, insertion follows conventional order, trailing zeros trim keeping the dot — and refuses to rewrite variable, bracket and keyword values rather than corrupting them, reporting Writeback-Patch--VariableValue, --KeywordValue, --CommentOnlyText and --EditUnmatched. Five of its choices follow the dialect rather than the convention: the variable prefix it recognizes and refuses (Q on klartext, R on Siemens, # elsewhere), the keyword feed values it refuses (klartext's FMAX and FAUTO), the comment spans it protects (klartext's ; and // as well as the parenthesized span), and two that show in the written text. On a klartext file an inserted F lands after the rightmost of DR+/DR- and RL/RR/R0 as well as after its conventional predecessor coordinate words, so the patched block keeps the element order a TNC enforces — coordinates, rotation direction, radius compensation, F, M. And a trailing comment is wrapped in the file's own grammar, the Fanuc family's (text) against klartext's ;text, so the optimizer's embedded source note leaves a klartext program valid instead of handing a control a parenthesis it would read as code. A second diagnostic home. NcManipulationDiagnosticProgress is a sibling of the play-time NcDiagnosticProgress, dedicated to NC-rework operations — writeback conversion and optimization — so a play reset never discards manipulation results and vice versa." }, "release-note/upgrading-to-3.2/new-diagnostics.html": { "href": "release-note/upgrading-to-3.2/new-diagnostics.html", "title": "New diagnostics you may now see | HiAPI-C# 2025", - "summary": "New diagnostics you may now see Several failure modes that used to be silent now report. These ids are searchable and filterable — they are the fastest way to find out what a run actually did. Id Means Play-Touch--None the play finished without any step touching the workpiece Play-Physics--None physics is on and steps touched, but no touched step carries a physics brief Tool-FluteCount--Zero physics is on and a milling cutter resolves to zero flutes SpindleDirection--AssumedCw an S word greater than zero with no direction ever issued Composition--NotLicensed external pipeline units were skipped for this session Script--NotLicensed an NC-embedded C# script was skipped SiemensToolOffset--TcdpRowMissing a Siemens (T, D) pair had no $TC_DP row; the generic tool height was used SiemensToolOffset--TcdpRowMissingGenericHeightNaN a Siemens (T, D) pair had no $TC_DP row and the generic tool height was NaN too; the D activation resolved to offset 0 Comp-ToolHeight--001 a G43.4 H word could not be resolved RadiusComp--Interference a G41/G42 block whose compensated path runs against the programmed direction (an inner arc or groove smaller than the offset radius); a real control stops there with an interference alarm (Fanuc PS0041) while the simulation continues on the swapped-side path — on a tool-centre CAM path the radius offset row (D row) must hold the wear only, not the tool radius RadiusComp--PlaneChangeInRegion a G17/G18/G19 that selects a different plane while G41/G42 is still active (a G40 sharing its block with a plane code included); a real control stops there (Fanuc PS0037 CAN NOT CHANGE PLANE IN CRC) because the corner spanning the change is built from one running axis per plane — cancel with G40 before selecting the new plane Coord-WorkOffset--AdditionalZero a Fanuc-family additional work coordinate system (G54.1 Pn, also written G54 Pn) was selected but no offset has been entered for it; the program runs on the machine origin Coord-WorkOffset--NoTableEntry a work coordinate word (e.g. a G59.x on a controller carrying no brand-neutral table beside its brand table) that no coordinate table on the controller resolves; a zero offset is used Coord-WorkOffset--IndexUnresolved the P word of a G54.1 / G54 P selection is not a positive integer; the active work coordinate system is kept Coord-MachCoord--005 / --006 / --007 a G53 or G53.1 machine-coordinate move failed on a path that used to fail silently Coord-Tilt--001 / --002 a G68.2 tilted plane the machine cannot reach BuildNcLines--ParseFailed a line could not be parsed; it survives verbatim but is not simulated RunNcLines--RunnerMismatch a second runner kind was attempted inside one session ReadNcRunnerSuit--Refused a suit switch was attempted while a program was playing PostExecution--MeshedGeomOutputRetired an old project still carries the retired meshed-geom output pair ConvertClToNc--NoPlay CL-to-NC conversion ran with no prior play on a machine chain ClToMc--NoToolOffset a CL motion resolved no tool offset CsvStepDurationClamped a replayed CSV row's recorded step gap exceeded the single-step duration limit and was capped at it; such a gap is normally the seam where two recordings were concatenated Map-ShotGap--StepsSkipped steps were skipped because their shot pairing window held no measured row Train-StepEngagement--Missing a step's row is present but its engagement was never built Train-StepLuggage--Unreadable a step's luggage row could not be read back Writeback-Patch--* a writeback edit refused a variable, keyword or comment-only value, or matched nothing HeidenhainPlane--Unsupported / SiemensFrame--Unsupported / HeidenhainCycl--Unsupported the construct is recognized and consumed safely, but not simulated DeclaredMCode--UnmodeledEffects a machine-declared OEM M-code occurred; no effects are simulated for it" + "summary": "New diagnostics you may now see Several failure modes that used to be silent now report. These ids are searchable and filterable — they are the fastest way to find out what a run actually did. Id Means Play-Touch--None the play finished without any step touching the workpiece Play-Physics--None physics is on and steps touched, but no touched step carries a physics brief Tool-FluteCount--Zero physics is on and a milling cutter resolves to zero flutes SpindleDirection--AssumedCw an S word greater than zero with no direction ever issued Composition--NotLicensed external pipeline units were skipped for this session Script--NotLicensed an NC-embedded C# script was skipped SiemensToolOffset--TcdpRowMissing a Siemens (T, D) pair had no $TC_DP row; the generic tool height was used SiemensToolOffset--TcdpRowMissingGenericHeightNaN a Siemens (T, D) pair had no $TC_DP row and the generic tool height was NaN too; the D activation resolved to offset 0 Comp-ToolHeight--001 a G43.4 H word could not be resolved Comp-ToolHeight--NoToolForOmittedH / --NoToolForOmittedHRtcp a G43 / G43.4 with no H, no equipped tool number and no non-zero modal offset id Comp-ToolHeight--RowMissing the resolved offset id has no table row Comp-ToolHeight--RtcpOutlivesToolChange a tool change left G43.4 Hm alive for a different tool; the new tool keeps the previous tool's length StrokeLimit--Unconfigured stroke-limit checking is on but the chain's linear axes carry no travel limit; once per session at BeginSession RadiusComp--Interference a G41/G42 block whose compensated path runs against the programmed direction (an inner arc or groove smaller than the offset radius); a real control stops there with an interference alarm (Fanuc PS0041) while the simulation continues on the swapped-side path — on a tool-centre CAM path the radius offset row (D row) must hold the wear only, not the tool radius RadiusComp--PlaneChangeInRegion a G17/G18/G19 that selects a different plane while G41/G42 is still active (a G40 sharing its block with a plane code included); a real control stops there (Fanuc PS0037 CAN NOT CHANGE PLANE IN CRC) because the corner spanning the change is built from one running axis per plane — cancel with G40 before selecting the new plane Coord-WorkOffset--AdditionalZero a Fanuc-family additional work coordinate system (G54.1 Pn, also written G54 Pn) was selected but no offset has been entered for it; the program runs on the machine origin Coord-WorkOffset--NoTableEntry a work coordinate word (e.g. a G59.x on a controller carrying no brand-neutral table beside its brand table) that no coordinate table on the controller resolves; a zero offset is used Coord-WorkOffset--IndexUnresolved the P word of a G54.1 / G54 P selection is not a positive integer; the active work coordinate system is kept Coord-MachCoord--005 / --006 / --007 a G53 or G53.1 machine-coordinate move failed on a path that used to fail silently Coord-Tilt--001 / --002 a G68.2 tilted plane the machine cannot reach BuildNcLines--ParseFailed a line could not be parsed; it survives verbatim but is not simulated RunNcLines--RunnerMismatch a second runner kind was attempted inside one session ReadNcRunnerSuit--Refused a suit switch was attempted while a program was playing PostExecution--MeshedGeomOutputRetired an old project still carries the retired meshed-geom output pair ConvertClToNc--NoPlay CL-to-NC conversion ran with no prior play on a machine chain ClToMc--NoToolOffset a CL motion resolved no tool offset CsvStepDurationClamped a replayed CSV row's recorded step gap exceeded the single-step duration limit and was capped at it; such a gap is normally the seam where two recordings were concatenated Map-ShotGap--StepsSkipped steps were skipped because their shot pairing window held no measured row Train-StepEngagement--Missing a step's row is present but its engagement was never built Train-StepLuggage--Unreadable a step's luggage row could not be read back Writeback-Patch--* a writeback edit refused a variable, keyword or comment-only value, or matched nothing HeidenhainPlane--Unsupported / SiemensFrame--Unsupported / HeidenhainCycl--Unsupported the construct is recognized and consumed safely, but not simulated HeidenhainCyclCall--IncrementalNoReference / --IncrementalAfterMove a klartext CYCL CALL POS I-prefixed word has no previous call to measure from, or the tool moved between the two calls Orientation-RefPoint--CntNotSimulated FUNCTION TCPM REFPNT with a centre-referenced tool point is not simulated — coordinates are read as TIP-TIP Orientation-Vector--IgnoredNoTcpm an LN tool vector arrived with RTCP inactive and was ignored, as the control ignores it Hpcc--NoOp / --HighSpeedCycleIgnored / --UnsupportedFunction / --UnevaluatedFunction / --MissingFunctionWord a bare G05 P HPCC selection; the programmed coordinates are unchanged, except P10001–P10999 which is real machining the simulation cannot see DeclaredMCode--UnmodeledEffects a machine-declared OEM M-code occurred; no effects are simulated for it" }, "release-note/upgrading-to-3.2/packaging-and-hosting.html": { "href": "release-note/upgrading-to-3.2/packaging-and-hosting.html", @@ -8152,22 +8177,22 @@ "release-note/upgrading-to-3.2/performance-and-footprint.html": { "href": "release-note/upgrading-to-3.2/performance-and-footprint.html", "title": "Performance and footprint | HiAPI-C# 2025", - "summary": "Performance and footprint Every figure below is a measurement with its conditions stated, and where a change cost time to buy correctness that is said too. Read the ratios rather than the absolute times: several campaigns were run on Debug builds or on small machines, deliberately, because a paired A/B on one machine answers “did this get faster” far more reliably than an unpaired Release number on a fast one. Milling physics in the native kernel The per-step physics moved into core.dll in stages — engagement scan conversion, the force kernel, then the sequential temperature and wear chain. Measured as a same-day paired A/B, managed leg against native leg, on one circular test program: Per touched step managed native Engagement build 46.0 ms 5.03 ms ~9× Force (GetMillingFoce) 17.1 ms 0.75 ms ~20× Temperature and wear chain 3.97 ms 0.24 ms ~16× Whole play 59.3 s / 16.1 GB allocated 40.6 s / 3.4 GB allocated −32% wall, −79% allocation Allocation is where the migration bites hardest: engagement construction alone fell from about 5.2 GB to 29 MB per step. Conditions. Debug x64, EnablePhysics on, collision off, one force worker, a two-core / four-thread laptop, ±10% thermal-throttle noise, single paired run per leg. Absolute times are not representative of a customer machine — the ratios are the claim. Numerical parity. Engagement, force and brief are bit-identical between the two legs on Windows. The Linux build is not bit-identical (different libm), so a cross-platform comparison should use a tolerance, not equality. Playing a long program stays linear NcOptOption.Equals ended on a null-propagating comparison of a dictionary that is created on demand and is null on virtually every option, so the whole comparison collapsed to false — an option compared unequal even to a copy of itself. Both record-on-change guards built on it were therefore dead: the session appended an option-map entry for every played act instead of only at change points, and the step rewrote unchanged entries. Reading the last recorded option through a LINQ LastOrDefault over a SortedList<,> — which has no indexed fast path — then walked the whole map each time, so the two defects together made a long play quadratic. Measured on a 2.35-million-line Siemens program: the option map now holds 1 entry instead of one per line, and the per-100,000-line rate stays flat instead of degrading from 73 s at the start of the file to about 11 minutes by 1.9 million lines. This applies to every runner and to sessions doing no optimization at all, because the call site is the session-level play loop. GetHashCode drops the dictionary in the same change, since it hashed by reference and would otherwise disagree with Equals — relevant if you use NcOptOption as a dictionary key. Where the time actually goes Worth knowing before you tune anything. After the migration, on the measured workload the whole parallel physics stage is about 3.3% of wall time, while the single-worker volume subtraction is about 77% — and that subtraction is single-worker as a correctness requirement, not as an oversight. Raising the force-worker count therefore buys nothing on any machine; the bottleneck moved rather than disappearing. What did change in the worker derivation is narrower than it sounds. An unmeasured six-core ceiling was removed, but it only ever governed the sweep workers, and only machines with nine or more logical processors see a different count; force workers are unchanged everywhere. The throughput benefit on such a machine has not been measured — the development machines are smaller — so this is a ceiling removal, not a claimed speedup. Queue depths became fixed item budgets (120 geometry, 3840 physics) rather than scaling with the core count, because those queues bound per-item memory: uncapped, a 64-core machine would have been handed 40,960-deep physics queues. On machines with fewer than six cores this is a small increase in bounded-queue memory (from 80 / 2560), which is the honest cost of the change. Loading a large STL workpiece Building the topology from an STL was quadratic in triangle count — a pointer-derived hash collapsed into a handful of buckets, so lookups degenerated into linear scans. On one 935,000-triangle binary STL, topology construction was 99.6% of the entire load; reading the file off disk was 0.16% of it. With a multiplicative hash mix the build is linear: Triangles before after worst bucket 100,000 8,711 ms 1,305 ms 6.7× 2,245 → 21 300,000 89,036 ms 4,750 ms 18.7× 6,593 → 23 Per-triangle cost is now flat (0.013 → 0.016 ms/tri across a 3× size increase), which is the real result: the cost grows with the mesh instead of with its square. Extrapolated to the full 935,000-triangle mesh that is roughly 14 minutes → 15 seconds. Deduplication and the resulting topology are unchanged — the equality predicate was not touched, and the 300,000-triangle case produces an identical 899,997 lines before and after. Separately, the managed-to-native STL handoff dropped from three full copies of the buffer (about 86 MB each, plus around twenty doubling reallocations) to two. Conditions. Native test harness, debug CRT — which inflates container-operation constants, so the absolute milliseconds are an upper bound. The composition breakdown and the complexity change are build-configuration independent. The full-mesh figure is an extrapolation, not a measured run. Re-triangulating after a cut The marching-cubes step gained a lookup table, and produces fewer triangles for the same surface: Tree before after triangles 17 MB diagnostic 0.63 s 0.29 s 2.17× −35% 30 MB demo 1.29 s 0.60 s 2.15× −35% 309 MB customer part 14.68 s 6.51 s 2.25× −43% Scope. This lands on the rebuild burst after a cut invalidates cached geometry, not on steady-state rendering, which draws from the display cache and is unchanged. It is also an approximation change, not purely a speedup: a non-finite cut drops its triangles, so a sub-voxel feature vanishes at that level of detail instead of being capped. That is what fixed the broken-face slabs seen on RTCP paths. The contact-loop extraction used by milling physics deliberately still uses the previous walk, so physics results are untouched. Session memory: a long program no longer exhausts the client A session retains every executed NC block for its whole lifetime. Once a block leaves the executing window its piece is now frozen to compact UTF-8. Measured on a 25,018-block play: session retention 406 MB → 142 MB, about 2.9×. The encoding itself is smaller than that ratio suggests — roughly 12 KB per line live against 1.6 KB frozen, about 12.9× — because a retained piece carries more than its JSON. The 2.9× is the figure that matters for whether a program fits in memory. The trade is explicit: after the freeze the JsonObject getter re-parses on every call and returns a fresh read-only snapshot, with no caching and no write-back. Code that reads the same piece repeatedly should hold the snapshot in a local. The switch is FreezeExecutedPieces, on by default. Sizing a meshed workpiece A cube tree costs roughly 3.2× its file size in RAM while loaded — a 10 GB .wct at 0.125 mm resolution is about 95 million nodes, holding around 25 GB of tree plus 6 GB of index. Tearing down a tree that size used to block the caller for over two minutes; disposal now runs serialized on a background chain, so the thread that dropped it does not wait. The remaining cost is genuine work: the live renderer must not be left showing geometry that no longer exists. Cutter-location files at production scale Three costs were removed from the CL-to-machine path, and on a production-scale file they are the difference between replaying and appearing to hang: tool-offset resolution walked back to the distant LOAD block for every motion (O(N²), now O(1) through a modal section), the documentary program-to-Pn stamp did the same walk (now stamped once per run), and the program-zero query deep-cloned the whole equipment assembly on every motion block (now a cached per-run matrix over the live assembly). These are complexity changes; they have not been separately timed. Smaller footprint The embedded default font is handed to the display engine from memory, so an 11 MB .ttf is no longer written into the process working directory on startup. The packages are x64-only, and HiNc-Resource no longer ships a duplicated nested copy of the CT-350 STL set. Things that cost more, on purpose Five-axis inverse kinematics. Tightening the orientation envelope from about 1.4e-3 rad to about 1e-6 rad — measured maxima 1.5e-8 rad on the hot path and 2.1e-8 on teleport, a tip deviation of 0.05 µm on a 50 mm tool — costs roughly eleven solver iterations where one used to do, so a posture-changing call went from about 23 µs to about 251 µs, and a teleport from 418 µs to 1607 µs. Only posture-changing RTCP and arc steps pay it: three-axis programs and constant-posture segments are exempt through the McLinear downgrade. In absolute terms a 1,432-step five-axis replay spends about 0.36 s in the solver. (Debug build including measurement overhead, so those microseconds are an upper bound.) Machine-coordinate linear stepping. ActMcXyzLinearContour derives its step count from the euclidean length of the machine XYZ delta rather than the largest single-axis component, so LinearResolution_mm caps actual tool-tip travel per step. A diagonal move therefore produces up to √3× more steps than before at the same setting — more work, for a sampling density that now means what the setting says. Lower the resolution if the old step count was what you were budgeting for. A tuning cliff worth knowing about MillingCycleDivisionNum saturates. Raising it past roughly 180 buys no additional training accuracy while the cost keeps climbing: a training run that takes about four minutes at 180 takes hours at 720 and needs on the order of 100 GB of RAM to do it. The default of 36 is for ordinary simulation; raise it for training, but not past the point where the curve flattens." + "summary": "Performance and footprint Every figure below is a measurement with its conditions stated, and where a change cost time to buy correctness that is said too. Read the ratios rather than the absolute times: several campaigns were run on Debug builds or on small machines, deliberately, because a paired A/B on one machine answers “did this get faster” far more reliably than an unpaired Release number on a fast one. Against the last 3.1 set Paired on one 32-logical-processor Linux workstation, deployed stacks, whole NC programs, steps per second. The 3.1 side is HardNc (the 3.1 default); the 3.2 side is SoftNc (the 3.2 default). Throughput on this line is 2.5×–18.8×; the ratio grows with program length and mesh fineness. Memory is mixed: a cutting-dominated long program peaked higher on 3.2, a large-surface short-NC job peaked lower. The six-core ceiling that used to cap the 3.1 pipeline is not where that gap comes from. On the same workstation, pinning 3.2's worker counts to the products of that ceiling moved a ~193,000-step play from 15.0 s to 15.9 s (+6%); at six available cores the version advantage is still 2.8×–3.8×, and at two cores 2.73×. 3.1 saturates from eight cores; 3.2 from twelve. On that fixture, 3.1 allocated 6–8× more managed memory, and the 3.1 allocation climbed as the mesh got finer while 3.2 stayed almost flat. Conditions. Deployed x64 stacks, one machine, whole programs, steps/s (not wall-clock — a defect that inflated 3.2 step counts on an earlier drop is fixed on this line). Core-count figures used DOTNET_PROCESSOR_COUNT plus CPU affinity, so they are “restricted cores on a large machine”, not a small one: memory bandwidth and cache stay those of the 32-LP host. Milling physics in the native kernel The per-step physics moved into core.dll in stages — engagement scan conversion, the force kernel, then the sequential temperature and wear chain. Measured as a same-day paired A/B, managed leg against native leg, on one circular test program: Per touched step managed native Engagement build 46.0 ms 5.03 ms ~9× Force (GetMillingFoce) 17.1 ms 0.75 ms ~20× Temperature and wear chain 3.97 ms 0.24 ms ~16× Whole play 59.3 s / 16.1 GB allocated 40.6 s / 3.4 GB allocated −32% wall, −79% allocation Allocation is where the migration bites hardest: engagement construction alone fell from about 5.2 GB to 29 MB per step. Conditions. Debug x64, EnablePhysics on, collision off, one force worker, a two-core / four-thread laptop, ±10% thermal-throttle noise, single paired run per leg. Absolute times are not representative of a customer machine — the ratios are the claim. Numerical parity. Engagement, force and brief are bit-identical between the two legs on Windows. The Linux build is not bit-identical (different libm), so a cross-platform comparison should use a tolerance, not equality. Playing a long program stays linear NcOptOption.Equals ended on a null-propagating comparison of a dictionary that is created on demand and is null on virtually every option, so the whole comparison collapsed to false — an option compared unequal even to a copy of itself. Both record-on-change guards built on it were therefore dead: the session appended an option-map entry for every played act instead of only at change points, and the step rewrote unchanged entries. Reading the last recorded option through a LINQ LastOrDefault over a SortedList<,> — which has no indexed fast path — then walked the whole map each time, so the two defects together made a long play quadratic. Measured on a 2.35-million-line Siemens program: the option map now holds 1 entry instead of one per line, and the per-100,000-line rate stays flat instead of degrading from 73 s at the start of the file to about 11 minutes by 1.9 million lines. This applies to every runner and to sessions doing no optimization at all, because the call site is the session-level play loop. GetHashCode drops the dictionary in the same change, since it hashed by reference and would otherwise disagree with Equals — relevant if you use NcOptOption as a dictionary key. Where the time actually goes Worth knowing before you tune anything. After the migration, on the measured workload the whole parallel physics stage is about 3.3% of wall time, while the single-worker volume subtraction is about 77% — and that subtraction is single-worker as a correctness requirement, not as an oversight. Raising the force-worker count therefore buys nothing on any machine; the bottleneck moved rather than disappearing. What did change in the worker derivation is narrower than it sounds. The six-core ceiling was removed, and on a 32-logical-processor machine that is about 6% of the 3.1→3.2 wall-time gap measured above — force workers are unchanged everywhere, and the sweep-worker count only differs on machines with nine or more logical processors. The rest of the gap is allocation and the rest of the pipeline, not the extra cores. Queue depths became fixed item budgets (120 geometry, 3840 physics) rather than scaling with the core count, because those queues bound per-item memory: uncapped, a 64-core machine would have been handed 40,960-deep physics queues. On machines with fewer than six cores this is a small increase in bounded-queue memory (from 80 / 2560), which is the honest cost of the change. Loading a large STL workpiece Building the topology from an STL was quadratic in triangle count — a pointer-derived hash collapsed into a handful of buckets, so lookups degenerated into linear scans. On one 935,000-triangle binary STL, topology construction was 99.6% of the entire load; reading the file off disk was 0.16% of it. With a multiplicative hash mix the build is linear: Triangles before after worst bucket 100,000 8,711 ms 1,305 ms 6.7× 2,245 → 21 300,000 89,036 ms 4,750 ms 18.7× 6,593 → 23 Per-triangle cost is now flat (0.013 → 0.016 ms/tri across a 3× size increase), which is the real result: the cost grows with the mesh instead of with its square. Extrapolated to the full 935,000-triangle mesh that is roughly 14 minutes → 15 seconds. Deduplication and the resulting topology are unchanged — the equality predicate was not touched, and the 300,000-triangle case produces an identical 899,997 lines before and after. Separately, the managed-to-native STL handoff dropped from three full copies of the buffer (about 86 MB each, plus around twenty doubling reallocations) to two. Conditions. Native test harness, debug CRT — which inflates container-operation constants, so the absolute milliseconds are an upper bound. The composition breakdown and the complexity change are build-configuration independent. The full-mesh figure is an extrapolation, not a measured run. Re-triangulating after a cut The marching-cubes step gained a lookup table, and produces fewer triangles for the same surface: Tree before after triangles 17 MB diagnostic 0.63 s 0.29 s 2.17× −35% 30 MB demo 1.29 s 0.60 s 2.15× −35% 309 MB customer part 14.68 s 6.51 s 2.25× −43% Scope. This lands on the rebuild burst after a cut invalidates cached geometry, not on steady-state rendering, which draws from the display cache and is unchanged. It is also an approximation change, not purely a speedup: a non-finite cut drops its triangles, so a sub-voxel feature vanishes at that level of detail instead of being capped. That is what fixed the broken-face slabs seen on RTCP paths. The contact-loop extraction used by milling physics deliberately still uses the previous walk, so physics results are untouched. Session memory: a long program no longer exhausts the client A session retains every executed NC block for its whole lifetime. Once a block leaves the executing window its piece is now frozen to compact UTF-8. Measured on a 25,018-block play: session retention 406 MB → 142 MB, about 2.9×. The encoding itself is smaller than that ratio suggests — roughly 12 KB per line live against 1.6 KB frozen, about 12.9× — because a retained piece carries more than its JSON. The 2.9× is the figure that matters for whether a program fits in memory. The trade is explicit: after the freeze the JsonObject getter re-parses on every call and returns a fresh read-only snapshot, with no caching and no write-back. Code that reads the same piece repeatedly should hold the snapshot in a local. The switch is FreezeExecutedPieces, on by default. Sizing a meshed workpiece A cube tree costs roughly 3.2× its file size in RAM while loaded — a 10 GB .wct at 0.125 mm resolution is about 95 million nodes, holding around 25 GB of tree plus 6 GB of index. Tearing down a tree that size used to block the caller for over two minutes; disposal now runs serialized on a background chain, so the thread that dropped it does not wait. The remaining cost is genuine work: the live renderer must not be left showing geometry that no longer exists. Cutter-location files at production scale Three costs were removed from the CL-to-machine path, and on a production-scale file they are the difference between replaying and appearing to hang: tool-offset resolution walked back to the distant LOAD block for every motion (O(N²), now O(1) through a modal section), the documentary program-to-Pn stamp did the same walk (now stamped once per run), and the program-zero query deep-cloned the whole equipment assembly on every motion block (now a cached per-run matrix over the live assembly). These are complexity changes; they have not been separately timed. Smaller footprint The embedded default font is handed to the display engine from memory, so an 11 MB .ttf is no longer written into the process working directory on startup. The packages are x64-only, and HiNc-Resource no longer ships a duplicated nested copy of the CT-350 STL set. Things that cost more, on purpose Five-axis inverse kinematics. Tightening the orientation envelope from about 1.4e-3 rad to about 1e-6 rad — measured maxima 1.5e-8 rad on the hot path and 2.1e-8 on teleport, a tip deviation of 0.05 µm on a 50 mm tool — costs roughly eleven solver iterations where one used to do, so a posture-changing call went from about 23 µs to about 251 µs, and a teleport from 418 µs to 1607 µs. Only posture-changing RTCP and arc steps pay it: three-axis programs and constant-posture segments are exempt through the McLinear downgrade. In absolute terms a 1,432-step five-axis replay spends about 0.36 s in the solver. (Debug build including measurement overhead, so those microseconds are an upper bound.) Machine-coordinate linear stepping. ActMcXyzLinearContour derives its step count from the euclidean length of the machine XYZ delta rather than the largest single-axis component, so LinearResolution_mm caps actual tool-tip travel per step. A diagonal move therefore produces up to √3× more steps than before at the same setting — more work, for a sampling density that now means what the setting says. Lower the resolution if the old step count was what you were budgeting for. A tuning cliff worth knowing about MillingCycleDivisionNum saturates. Raising it past roughly 180 buys no additional training accuracy while the cost keeps climbing: a training run that takes about four minutes at 180 takes hours at 720 and needs on the order of 100 GB of RAM to do it. The default of 36 is for ordinary simulation; raise it for training, but not past the point where the curve flattens." }, "release-note/upgrading-to-3.2/results-that-change-on-upgrade.html": { "href": "release-note/upgrading-to-3.2/results-that-change-on-upgrade.html", "title": "Results that change on upgrade | HiAPI-C# 2025", - "summary": "Results that change on upgrade None of the following breaks a build. All of them change what a simulation produces, so a byte-for-byte comparison against 3.1.175 output will differ — usually because 3.1.175 was wrong. Silent wrong geometry, now fixed. Each of these produced a plausible-looking simulation of the wrong thing. The kinematic pivot anchor. The pivot-transform chain entry was built as K(0)·K(abc)⁻¹, folding the whole machine-zero forward kinematic — its linear part included — into the pre-pivot anchor. That linear part encodes each axis' motion sense and tool/workpiece-side ownership, so it mirrored the program components of every workpiece-side linear axis before the IK ran. On a table-side chain whose machine-zero linear part is diag(1,1,-1), every program Z was mirrored and a near-180° swing amplified it into metres of machine-Z error, floating the toolpath above the workpiece. The anchor is now the translation alone, matching what HardNc has always kept. Machines whose linear axes all ride the tool side are unaffected. G68 2D coordinate rotation was a silent no-op. TiltTransformUtil judged the active mode from the current block but always took the matrix from the previous one, so every G68 activation past the first block had its freshly authored rotation overwritten with an identity that then propagated. G68 rotation did nothing at all while the block's term still read G68, and the simulation machined the unrotated pattern. Re-running an existing G68 program now gives different — correct — geometry. A blank line reset G90/G91. A piece with no parsing section — a blank line, a comment-only line, %, an O-number — left the next block's single-step lookback empty, and it fell back to the G90 default. A program that was incremental throughout silently flipped to absolute mid-file. Such pieces now carry the positioning section forward like every other modal syntax. A Siemens D offset with no $TC_DP row resolved to zero length, in silence. A whole TRAORI program machined one tool length low. The read point now falls back to the generic tool-number-keyed height and emits SiemensToolOffset--TcdpRowMissing. G43.4 with an unresolvable H word activated RTCP with a zero-length tool. It now reports Comp-ToolHeight--001 as a warning and keeps processing the block. An absent H stays silent — re-activating G43.4 on the modal offset id is legitimate input. Heidenhain DIN/ISO arc centres. I / J / K are absolute circle centres on Heidenhain — the ISO face of the klartext CC pole — not start-to-centre offsets. Reading them incrementally turned arcs into near-full phantom circles. Fixed in all three engines: the HardNc reader (IsIjkAbsolute), the SoftNc reader (IsIjkAbsolute) and the optimizer's write-back. G91 is the exception: an incremental block switches the words back to start-to-centre offsets, so an arc programmed under G91 is unaffected by this change. Also delivered on the 3.1.175.x service line. Feed per tooth, MRR and cutting forces follow the equipped tool's tip, not the controller's F word. The physics used to read the commanded CL feedrate. It now reads the step's real tip feedrate (ActualTipFeedrate_mmds, client key ActualTipFeedrate_mmdmin): the tip's displacement relative to the workpiece over the step duration. On XYZ moves, CL files and RTCP with the equipped tool's own offset the two agree (the recomputation moves forces by at most about 1e-4 relative, from the TimeSpan-quantised step duration); they part under RTCP with a tool-length offset that does not describe the equipped tool, on rotary-axis-limited simultaneous five-axis blocks (the tip is slower than F, up to a few percent), and wherever the commanded value was stale. One such stale case is fixed alongside: a feed block that repeats the current position (X.. Y.. Z.. F1600. right after the same point at F800.) lost its F word, so every following block showed and cut at the old feed; its ActFeedrate now lands. A K0 word on a HardNc G02/G03 saturated the turn count. Under the default G17 plane a written-but-zero plane-normal word divided the axial travel by zero, the additional-turn count saturated to int.MaxValue, and one arc block became a spiral act of roughly 302 simulated years — the play appeared to hang on a single NC line. The reading now falls back to the closed-circle rule for a zero pace, matching the guard the SoftNc side already had. Indexed-rotary programs folded the pivot into plain moves. A block with no active G68.2 or G43.4 no longer folds the kinematic pivot transform into a plain XYZ move, which is what a real controller does with a table-side rotary program. The radius-compensation arc transient cache landed on the wrong block. Any non-motion line between the corner and the arc orphaned the cache, so the arc lost its leading linear bridge and began at the corner intersection instead of on the offset arc. Cutter radius compensation on G18 / G19 ran out of the plane. Both engines built the perpendicular as Z × axis whatever plane was selected, so under G18 or G19 the whole offset went one radius along the plane normal (a G41 region in the ZX plane was displaced in Y), every arc of the region reported Arc-EndpointOffRadius, and the RadiusComp--Interference gate could not fire there. Both engines now take the perpendicular, the in-plane test for blocks without movement and the interference gate from the selected plane: the offset lies in the plane, left/right is judged looking down the plane's positive normal (the same convention that orients G02/G03), and the diagnostics behave as on G17. G17 programs are unaffected. The G68.2 tool-axis IK fallback probed the mirrored tool axis. Both normal-only fallbacks in IsoG68p2TiltSyntax read the transposed third column instead of the third row. On the no-hint path this only skewed a warning gate, but the explicit A/B/C path seeds its hint blend from that solve, so a machine with fewer than three rotary axes composed a mirrored tilted plane. A Fanuc WHILE forward jump bound to the wrong END. Sequential loops idiomatically reuse DO 1, so a second WHILE's falsy-condition exit bound to the first loop's END 1 and redirected execution to a point before the second WHILE — an unbounded loop the iteration watchdog cannot see, because it only ticks on END reverse jumps. The jump now uses the anchored label scan the Siemens loop family already used. Heidenhain G28 is MIRROR IMAGE, not a reference-point return. On the Heidenhain preset the shared pipeline had been reading it as the Fanuc reference return, so a G28 X block minted a phantom rapid to home while the mirror silently vanished. It is now simulated as a program-to-MC transform, ReferenceReturnSyntax leaves the Heidenhain logic list, and klartext CYCL DEF 8 records the same mirror statement so one program mirrors identically in either dialect. HardNc keeps the Fanuc reading, so the two engines are deliberately divergent on Heidenhain G28 files and any parity comparison must account for it. MathUtil.Convert_inchdmin_To_mmds returned mm/min, not mm/s. The body multiplied by 25.4 and never divided by 60, so a caller trusting the name got a 60× feedrate; the sibling Convert_mmdmin_To_mmds divides as its name demands. No shipped path called it — the CL/APT feedrate route converts inches-per-minute to mm/min itself — so this changes nothing inside the product, but a caller who had compensated for the old behaviour must remove that compensation. GetRByZ(List) never interpolated. The list overload looked up its ceiling node with the floor lookup, so floor equalled ceiling and the method degenerated into a step function. For a sharp cone whose inner-beam Z–R list has no node between apex and rim, that pinned the inner radius to 0 across the whole cone face and produced NaN flute vertices — the root cause of the transparent cone-tip flute that 3.1.180 addressed at the display layer. It affects every consumer of radius-by-Z interpolation, force geometry included. Numerical results move even where nothing was renamed. Five-axis IK is roughly 1000× tighter. The rotary solver behind XyzabcSolver now runs coarse→polish: the coarse stage keeps the original dot residual so solve success and failure semantics are unchanged, then a [dot, cross, rr-per-axis] system polishes. The dot criterion is quadratically blind to angle error — an envelope of about 1.4e-3 rad, and the resulting tip error is that envelope times the tool length — so adding the cross term restores quadratic convergence and drops the envelope to about 1e-6 rad. Failed solves no longer pollute the implicit seed, and the measure-zero perfect-saddle case is escaped by a deterministic retry offset instead of by leftover seed pollution. ActMcXyzLinearContour steps by euclidean tip travel instead of the largest per-axis component, so LinearResolution_mm now caps actual tool-tip travel per step and a diagonal move produces up to √3× more steps at the same setting. The SoftNc pipeline is the default engine. Executed SyntaxPieces freeze to UTF-8 (below), so their JsonObject is a fresh read-only snapshot per call rather than a retained live graph. SyntaxPiece.SentenceIndex becomes a session-global execution-order counter and is no longer contiguous per file. Repeated NC diagnostics fold into per-run summaries at the run boundaries. HardNc tool changes fire on M06 / Heidenhain TOOL CALL rather than on a changed T word — a bare T is magazine pre-selection, and a same-tool M06 still runs the changer cycle — and unset HardNcEnv tooling defaults become the three-axis shape (XYZ = NaN, NaN, 0; ABC all NaN). The old defaults swung all three rotary axes home on every M06, which no post expects." + "summary": "Results that change on upgrade None of the following breaks a build. All of them change what a simulation produces, so a byte-for-byte comparison against 3.1.175 output will differ — usually because 3.1.175 was wrong. Silent wrong geometry, now fixed. Each of these produced a plausible-looking simulation of the wrong thing. The kinematic pivot anchor. The pivot-transform chain entry was built as K(0)·K(abc)⁻¹, folding the whole machine-zero forward kinematic — its linear part included — into the pre-pivot anchor. That linear part encodes each axis' motion sense and tool/workpiece-side ownership, so it mirrored the program components of every workpiece-side linear axis before the IK ran. On a table-side chain whose machine-zero linear part is diag(1,1,-1), every program Z was mirrored and a near-180° swing amplified it into metres of machine-Z error, floating the toolpath above the workpiece. The anchor is now the translation alone, matching what HardNc has always kept. Machines whose linear axes all ride the tool side are unaffected. G68 2D coordinate rotation was a silent no-op. TiltTransformUtil judged the active mode from the current block but always took the matrix from the previous one, so every G68 activation past the first block had its freshly authored rotation overwritten with an identity that then propagated. G68 rotation did nothing at all while the block's term still read G68, and the simulation machined the unrotated pattern. Re-running an existing G68 program now gives different — correct — geometry. A blank line reset G90/G91. A piece with no parsing section — a blank line, a comment-only line, %, an O-number — left the next block's single-step lookback empty, and it fell back to the G90 default. A program that was incremental throughout silently flipped to absolute mid-file. Such pieces now carry the positioning section forward like every other modal syntax. A Siemens D offset with no $TC_DP row resolved to zero length, in silence. A whole TRAORI program machined one tool length low. The read point now falls back to the generic tool-number-keyed height and emits SiemensToolOffset--TcdpRowMissing. G43.4 with an unresolvable H word activated RTCP with a zero-length tool. It now reports Comp-ToolHeight--001 as a warning and keeps processing the block. An omitted H is no longer a silent zero: it takes the equipped tool's own offset row first (HardNc parity), then a non-zero modal id, and only then warns Comp-ToolHeight--NoToolForOmittedH (plain G43) or Comp-ToolHeight--NoToolForOmittedHRtcp (G43.4). A vacant table row warns Comp-ToolHeight--RowMissing instead of compensating a zero length. G43.4 survived M02 / M30 and a rotary-only G53 still coupled through RTCP. A sequence that ended one program with M02 and started the next with a rotary rapid — without a G49 — kept tool-centre-point control on, pinned the tip, and dragged machine XYZ through the stock. On SoftNc the program-end block is a reset edge: tool-length compensation (G43 / G44 / G43.4, Siemens TRAORI, Heidenhain M128), tilt (G68 / G68.2 / CYCLE800 / PLANE / TRANS), G41/G42 and G81–G89 cancel on the next block, written as explicit cancel sections so modal carry cannot copy the previous state. The M02 block itself still runs under the modal state it executed with, so a retract on the same line as M30 still carries tool length. A rotary-only G53 under active RTCP now holds the linear axes at the previous machine position and stays McLinear, which is what G53 does on a control (no compensation). HardNc still carries G43.4 across M02 — the two engines are deliberately divergent on that edge; 3.2's default is SoftNc. A tool change that leaves G43.4 Hm alive for a different tool warns Comp-ToolHeight--RtcpOutlivesToolChange on the change block. Fanuc G54.1 Pn (also written G54 Pn) was not resolved. Additional work coordinate systems now resolve against the extended table; a selected row nobody has entered reports Coord-WorkOffset--AdditionalZero and runs on the machine origin. G59.1–G59.9 have a provider on the ISO presets. See Work Coordinates. Heidenhain DIN/ISO arc centres. I / J / K are absolute circle centres on Heidenhain — the ISO face of the klartext CC pole — not start-to-centre offsets. Reading them incrementally turned arcs into near-full phantom circles. Fixed in all three engines: the HardNc reader (IsIjkAbsolute), the SoftNc reader (IsIjkAbsolute) and the optimizer's write-back. G91 is the exception: an incremental block switches the words back to start-to-centre offsets, so an arc programmed under G91 is unaffected by this change. Also delivered on the 3.1.175.x service line. Feed per tooth, MRR and cutting forces follow the equipped tool's tip, not the controller's F word. The physics used to read the commanded CL feedrate. It now reads the step's real tip feedrate (ActualTipFeedrate_mmds, client key ActualTipFeedrate_mmdmin): the tip's displacement relative to the workpiece over the step duration. On XYZ moves, CL files and RTCP with the equipped tool's own offset the two agree (the recomputation moves forces by at most about 1e-4 relative, from the TimeSpan-quantised step duration); they part under RTCP with a tool-length offset that does not describe the equipped tool, on rotary-axis-limited simultaneous five-axis blocks (the tip is slower than F, up to a few percent), and wherever the commanded value was stale. A feed block that does not move lost its F word. A block that repeats the current position (X.. Y.. Z.. F1600. right after the same point at F800., a common CAM habit) returned on zero distance before emitting anything, so every following block showed and cut at the old feed. Its ActFeedrate now lands on a zero-length linear, arc or polar block alike. The same stale commanded value is one of the cases the tip-feedrate split above parts on. A rotary-bearing act mixed tip travel with the commanded CL feed resolution. On a pure RTCP rapid swing the CL point stands still, the commanded feed is ~0, and dividing the equipped tool's tip sweep by that resolution saturated the step count (the play appeared to hang on one line). A rotary-bearing act now splits by posture change (each rotary-axis delta over the rotary resolution) and by spindle cycles when the spindle turns — never by tip travel over the CL-feed resolution. Step counts of existing five-axis projects therefore shift on non-RTCP rotary blocks; XYZ-only programs are unaffected. A K0 word on a HardNc G02/G03 saturated the turn count. Under the default G17 plane a written-but-zero plane-normal word divided the axial travel by zero, the additional-turn count saturated to int.MaxValue, and one arc block became a spiral act of roughly 302 simulated years — the play appeared to hang on a single NC line. The reading now falls back to the closed-circle rule for a zero pace, matching the guard the SoftNc side already had. Indexed-rotary programs folded the pivot into plain moves. A block with no active G68.2 or G43.4 no longer folds the kinematic pivot transform into a plain XYZ move, which is what a real controller does with a table-side rotary program. The radius-compensation arc transient cache landed on the wrong block. Any non-motion line between the corner and the arc orphaned the cache, so the arc lost its leading linear bridge and began at the corner intersection instead of on the offset arc. Cutter radius compensation on G18 / G19 ran out of the plane. Both engines built the perpendicular as Z × axis whatever plane was selected, so under G18 or G19 the whole offset went one radius along the plane normal (a G41 region in the ZX plane was displaced in Y), every arc of the region reported Arc-EndpointOffRadius, and the RadiusComp--Interference gate could not fire there. Both engines now take the perpendicular, the in-plane test for blocks without movement and the interference gate from the selected plane: the offset lies in the plane, left/right is judged looking down the plane's positive normal (the same convention that orients G02/G03), and the diagnostics behave as on G17. G17 programs are unaffected. The G68.2 tool-axis IK fallback probed the mirrored tool axis. Both normal-only fallbacks in IsoG68p2TiltSyntax read the transposed third column instead of the third row. On the no-hint path this only skewed a warning gate, but the explicit A/B/C path seeds its hint blend from that solve, so a machine with fewer than three rotary axes composed a mirrored tilted plane. A Fanuc WHILE forward jump bound to the wrong END. Sequential loops idiomatically reuse DO 1, so a second WHILE's falsy-condition exit bound to the first loop's END 1 and redirected execution to a point before the second WHILE — an unbounded loop the iteration watchdog cannot see, because it only ticks on END reverse jumps. The jump now uses the anchored label scan the Siemens loop family already used. Heidenhain G28 is MIRROR IMAGE, not a reference-point return. On the Heidenhain preset the shared pipeline had been reading it as the Fanuc reference return, so a G28 X block minted a phantom rapid to home while the mirror silently vanished. It is now simulated as a program-to-MC transform, ReferenceReturnSyntax leaves the Heidenhain logic list, and klartext CYCL DEF 8 records the same mirror statement so one program mirrors identically in either dialect. HardNc keeps the Fanuc reading, so the two engines are deliberately divergent on Heidenhain G28 files and any parity comparison must account for it. MathUtil.Convert_inchdmin_To_mmds returned mm/min, not mm/s. The body multiplied by 25.4 and never divided by 60, so a caller trusting the name got a 60× feedrate; the sibling Convert_mmdmin_To_mmds divides as its name demands. No shipped path called it — the CL/APT feedrate route converts inches-per-minute to mm/min itself — so this changes nothing inside the product, but a caller who had compensated for the old behaviour must remove that compensation. GetRByZ(List) never interpolated. The list overload looked up its ceiling node with the floor lookup, so floor equalled ceiling and the method degenerated into a step function. For a sharp cone whose inner-beam Z–R list has no node between apex and rim, that pinned the inner radius to 0 across the whole cone face and produced NaN flute vertices — the root cause of the transparent cone-tip flute that 3.1.180 addressed at the display layer. It affects every consumer of radius-by-Z interpolation, force geometry included. Numerical results move even where nothing was renamed. Five-axis IK is roughly 1000× tighter. The rotary solver behind XyzabcSolver now runs coarse→polish: the coarse stage keeps the original dot residual so solve success and failure semantics are unchanged, then a [dot, cross, rr-per-axis] system polishes. The dot criterion is quadratically blind to angle error — an envelope of about 1.4e-3 rad, and the resulting tip error is that envelope times the tool length — so adding the cross term restores quadratic convergence and drops the envelope to about 1e-6 rad. Failed solves no longer pollute the implicit seed, and the measure-zero perfect-saddle case is escaped by a deterministic retry offset instead of by leftover seed pollution. ActMcXyzLinearContour steps by euclidean tip travel instead of the largest per-axis component, so LinearResolution_mm now caps actual tool-tip travel per step and a diagonal move produces up to √3× more steps at the same setting. The SoftNc pipeline is the default engine. Executed SyntaxPieces freeze to UTF-8 (below), so their JsonObject is a fresh read-only snapshot per call rather than a retained live graph. SyntaxPiece.SentenceIndex becomes a session-global execution-order counter and is no longer contiguous per file. Repeated NC diagnostics fold into per-run summaries at the run boundaries. HardNc tool changes fire on M06 / Heidenhain TOOL CALL rather than on a changed T word — a bare T is magazine pre-selection, and a same-tool M06 still runs the changer cycle — and unset HardNcEnv tooling defaults become the three-axis shape (XYZ = NaN, NaN, 0; ABC all NaN). The old defaults swung all three rotary axes home on every M06, which no post expects." }, "release-note/upgrading-to-3.2/session-project-and-commands.html": { "href": "release-note/upgrading-to-3.2/session-project-and-commands.html", "title": "Session, project and command model | HiAPI-C# 2025", - "summary": "Session, project and command model A parser and its per-case data travel as one file. NcRunnerSuit bundles a runner with the dependency data a particular job needs, as a single file-loadable unit. The project holds three suits — NcRunnerSuit, CsvRunnerSuit and ClsfRunnerSuit — and ReadNcRunnerSuit / WriteNcRunnerSuit switch the active parser mid-project from a suit file. A switch attempted while a program is playing is refused with ReadNcRunnerSuit--Refused. One NC runner configuration is shareable across projects. Per-case data — tool offsets, work-coordinate offsets, Siemens frames, Heidenhain datums, retained macro variables, seeded brand parameter tables — travels as proxy placeholders inside SoftNcRunner and resolves against the owning project's per-case list, so a controller configuration is no longer welded to the job it was first built for. Machine-config consumers read the resolved view through GetEffectiveNcDependencyList; legacy XML and NcEnv-based projects still load and migrate automatically. HTTP guards and one envelope. RequireActiveSessionAttribute answers a session-scoped action with HTTP 409 and an ApiActionResult.NoActiveSession() body when no session is active, instead of the previous null-reference 500; RequireLoadedProjectAttribute does the same for the project-level controller. Both are applied at the controller level and honour opt-out markers (AllowNoActiveSessionAttribute, AllowNoLoadedProjectAttribute). Mutating actions inject a fresh MessageCollector and return the collected notifications inline in the shared ApiActionResult envelope, so a REST or AI caller sees progress, success and error messages in the response instead of only out of band. LocalProjectServiceController exposes the project-level (session-independent) surface parallel to SessionShellController. Session commands declare themselves. CommandCatalogAttribute marks an ISessionCommand as user-addable and places it in a CommandCategory (Setup / Program / Optimization / Output / Flow, declaration order = display order) with an Order sort key and an optional wire kind (default: the class name minus the Command suffix, lower-cased). CommandFieldAttribute marks a bool / int / double / string property as a directly editable scalar with an optional label, unit and physics-licence flag, so a generic editor renders and updates it without a hand-written form. A command without the catalog attribute stays loadable from project files but is not offered for creation. Program File dispatches by kind. NcFileCommand gains an NcKind property (XML element NcKind, absent = Auto for legacy projects) and its mission label becomes “Program File”; each command resolves its own file, so a List of Program Files can mix brand NC, CL and CSV. Two session commands saved but could never be read back. ListCommand.Reg chained every type except NcOptOptionCommand and RecordMeshedGeomCommand, so any XML round-trip of an entry holding one threw KeyNotFoundException out of the XFactory generator lookup — reloading a saved project containing an NC Optimization Config command failed. Both are now chained. Naming. Title is an optional name shown in place of the type name, so nested command lists can be named in the mission tree. PreSettingCommand displays as “General Config” and NcOptOptionCommand as “NC Optimization Config” — display strings only, so serialization and endpoints are untouched. A bare non-list PlayerCommand root is normalized on read into a single enabled entry of the default ListCommand. Command titles, catalog categories and field labels are now localized, and a zh-Hans resource set was created (none existed before). Default-script template keys stay untranslated on purpose — they compose the C# comments and script title written into the user's .hincproj, which travels to other machines. Script faults are keyed errors. A CompilationErrorException or a faulted script task used to surface as an anonymous warning; ScriptCommand now reports ScriptCommand-Compile--Failed with the full diagnostic list and ScriptCommand-Run--Fault with the exception, both at Error severity. A fresh session re-homes the machining chain. ResetRuntime wrote the configured XYZ home but hard-coded ABC to 0, and it only ran on project switch or pace-player reset — never before a plain Play. A freshly loaded project therefore started from whatever pose the .mt happened to serialize, while the act stream interpolated from the home seed, so the first contour swept from a pose the machine was never at and cut along the way. The re-home now reads the rotary homes from the same home configuration and also runs at BeginSession; a mid-session replay is untouched. What a reset actually resets. ResetRuntime now also rewinds the NC-runner session state, so the next play restarts file and line indexing from scratch the way PowerReset does, and it resets the CL device pose to identity. It no longer clobbers MachiningResolution_mm: the runtime resolution is seeded from the workpiece's initial resolution only when a project loads, so an explicit override survives a runtime reset and a workpiece swap. Mixed runner kinds in one session are refused. NcRunnerSessionState remembers the runner that initialised it and RunNcLines refuses a different one with RunNcLines--RunnerMismatch — reachable now that NcKind.Auto makes mixed-kind missions a first-class flow. Stale state on a chain or project switch. Building the coordinate converter nulls the rotary solver when the chain is not an IXyzabcChain, so a solver built for the old machine no longer keeps converting after a switch to a CL device; and ClearCache now also calls ClearIdealGeomCache, so loading another project stops rendering the previous project's target geometry. Project-file operations are serialized through a zero-wait gate. A New / Load / Save / Reload arriving while another is in progress throws ProjectFileBusyException immediately instead of racing into a file-in-use IOException. AlignWorkpieceProgramZeroToIso computes in the machine-zero state. It reflects the assembly and zeroes every dynamic axis before querying displacements, so the alignment is correct even when the live machine's axes are displaced. RunCount counts runs started, incremented synchronously before the run's task launches and never reset. Pairing it with IsFinished in one snapshot lets a polling client distinguish “the run I started has finished” from a stale Finished left by a previous run." + "summary": "Session, project and command model A parser and its per-case data travel as one file. NcRunnerSuit bundles a runner with the dependency data a particular job needs, as a single file-loadable unit. The project holds three suits — NcRunnerSuit, CsvRunnerSuit and ClsfRunnerSuit — and ReadNcRunnerSuit / WriteNcRunnerSuit switch the active parser mid-project from a suit file. A switch attempted while a program is playing is refused with ReadNcRunnerSuit--Refused. One NC runner configuration is shareable across projects. Per-case data — tool offsets, work-coordinate offsets, Siemens frames, Heidenhain datums, retained macro variables, seeded brand parameter tables — travels as proxy placeholders inside SoftNcRunner and resolves against the owning project's per-case list, so a controller configuration is no longer welded to the job it was first built for. Machine-config consumers read the resolved view through GetEffectiveNcDependencyList; legacy XML and NcEnv-based projects still load and migrate automatically. HTTP guards and one envelope. RequireActiveSessionAttribute answers a session-scoped action with HTTP 409 and an ApiActionResult.NoActiveSession() body when no session is active, instead of the previous null-reference 500; RequireLoadedProjectAttribute does the same for the project-level controller. Both are applied at the controller level and honour opt-out markers (AllowNoActiveSessionAttribute, AllowNoLoadedProjectAttribute). Mutating actions inject a fresh MessageCollector and return the collected notifications inline in the shared ApiActionResult envelope, so a REST or AI caller sees progress, success and error messages in the response instead of only out of band. LocalProjectServiceController exposes the project-level (session-independent) surface parallel to SessionShellController. Session commands declare themselves. CommandCatalogAttribute marks an ISessionCommand as user-addable and places it in a CommandCategory (Setup / Program / Optimization / Output / Flow, declaration order = display order) with an Order sort key and an optional wire kind (default: the class name minus the Command suffix, lower-cased). CommandFieldAttribute marks a bool / int / double / string property as a directly editable scalar with an optional label, unit and physics-licence flag, so a generic editor renders and updates it without a hand-written form. A command without the catalog attribute stays loadable from project files but is not offered for creation. Program File dispatches by kind. NcFileCommand gains an NcKind property (XML element NcKind, absent = Auto for legacy projects) and its mission label becomes “Program File”; each command resolves its own file, so a List of Program Files can mix brand NC, CL and CSV. Two session commands saved but could never be read back. ListCommand.Reg chained every type except NcOptOptionCommand and RecordMeshedGeomCommand, so any XML round-trip of an entry holding one threw KeyNotFoundException out of the XFactory generator lookup — reloading a saved project containing an NC Optimization Config command failed. Both are now chained. Naming. Title is an optional name shown in place of the type name, so nested command lists can be named in the mission tree. PreSettingCommand displays as “General Config” and NcOptOptionCommand as “NC Optimization Config” — display strings only, so serialization and endpoints are untouched. A bare non-list PlayerCommand root is normalized on read into a single enabled entry of the default ListCommand. Command titles, catalog categories and field labels are now localized, and a zh-Hans resource set was created (none existed before). Default-script template keys stay untranslated on purpose — they compose the C# comments and script title written into the user's .hincproj, which travels to other machines. Script faults are keyed errors. A CompilationErrorException or a faulted script task used to surface as an anonymous warning; ScriptCommand now reports ScriptCommand-Compile--Failed with the full diagnostic list and ScriptCommand-Run--Fault with the exception, both at Error severity. A fresh session re-homes the machining chain. ResetRuntime wrote the configured XYZ home but hard-coded ABC to 0, and it only ran on project switch or pace-player reset — never before a plain Play. A freshly loaded project therefore started from whatever pose the .mt happened to serialize, while the act stream interpolated from the home seed, so the first contour swept from a pose the machine was never at and cut along the way. The re-home now reads the rotary homes from the same home configuration and also runs at BeginSession; a mid-session replay is untouched. What a reset actually resets. ResetRuntime now also rewinds the NC-runner session state, so the next play restarts file and line indexing from scratch the way PowerReset does, and it resets the CL device pose to identity. It no longer clobbers MachiningResolution_mm: the runtime resolution is seeded from the workpiece's initial resolution only when a project loads, so an explicit override survives a runtime reset and a workpiece swap. Mixed runner kinds in one session are refused. NcRunnerSessionState remembers the runner that initialised it and RunNcLines refuses a different one with RunNcLines--RunnerMismatch — reachable now that NcKind.Auto makes mixed-kind missions a first-class flow. Stale state on a chain or project switch. Building the coordinate converter nulls the rotary solver when the chain is not an IXyzabcChain, so a solver built for the old machine no longer keeps converting after a switch to a CL device; and ClearCache now also calls ClearIdealGeomCache, so loading another project stops rendering the previous project's target geometry. Project-file operations are serialized through a zero-wait gate. A New / Load / Save / Reload / Close arriving while another is in progress throws ProjectFileBusyException immediately instead of racing into a file-in-use IOException. Close was the one operation left outside the gate, so a Close arriving during a Save could let the Save finish without writing and still return 200; it now refuses with the same 409 the other five ops already used. LoadProject and ReloadProject take a message sink for load-time diagnostics (a referenced STL missing on disk, a child XML that will not deserialize). A load-time diagnostic does not fail the load; passing no sink leaves the application log as the only witness. See Message Management. AlignWorkpieceProgramZeroToIso computes in the machine-zero state. It reflects the assembly and zeroes every dynamic axis before querying displacements, so the alignment is correct even when the live machine's axes are displaced. RunCount counts runs started, incremented synchronously before the run's task launches and never reset. Pairing it with IsFinished in one snapshot lets a polling client distinguish “the run I started has finished” from a stale Finished left by a previous run." }, "release-note/upgrading-to-3.2/the-package-line.html": { "href": "release-note/upgrading-to-3.2/the-package-line.html", "title": "The package line | HiAPI-C# 2025", - "summary": "The package line master develops the 3.2 package line as of 2026-08-24. All ten packages — HiGeom, HiLicense, HiDisp, Hi.WinForm, Hi.WpfPlus, HiCbtr, HiMech, HiUniNc, HiNc, HiNc-Resource — moved to 3.2 together and restarted their build counters. Four consequences worth stating plainly: A 3.2 build number starts low, and the two counters are not comparable. The gap between the last 3.1 number a feed served and the first 3.2 one is expected rather than a missing upload. The ten counters are independent. They did not restart at a common value and they do not advance together: a package's counter moves only when that package is rebuilt, so the ten numbers spread apart and stay spread. Where two of them happen to agree it is coincidence, not a shared set number. A set is named by its HiNc package version — the top of the library stack, and the number the application shows as its own version mark — while the nine packages under it carry their own builds. The published packages reference one another with a floating 3.2.*, so restoring HiNc pulls the newest 3.2 build of each dependency rather than a fixed, reproducible set. A build that has to be reproducible pins each package explicitly. The 3.1 line is closed at the 3.1.175 set and is serviced only as patches on that set. A package on the service line keeps the 3.1 build it was frozen at and gains a fourth segment of its own, so the set is quoted as 3.1.175. after its HiNc package while the packages beneath it publish under their own frozen builds — looking on the feed for every package at 3.1.175.x finds only HiNc. A reference left on that set receives correctness fixes for it and none of the capability on this page. The 3.1 builds above 3.1.175 were never published as a release set — which is why the release note carries one 3.2 entry where it might have carried a dozen: for a caller moving off 3.1.175, they were never separate releases." + "summary": "The package line master develops the 3.2 package line as of 2026-08-24. All ten packages — HiGeom, HiLicense, HiDisp, Hi.WinForm, Hi.WpfPlus, HiCbtr, HiMech, HiUniNc, HiNc, HiNc-Resource — moved to 3.2 together and restarted their build counters. Four consequences worth stating plainly: A 3.2 build number starts low, and the two counters are not comparable. The gap between the last 3.1 number a feed served and the first 3.2 one is expected rather than a missing upload. The ten counters are independent. They did not restart at a common value and they do not advance together: a package's counter moves only when that package is rebuilt, so the ten numbers spread apart and stay spread. Where two of them happen to agree it is coincidence, not a shared set number. A set is named by its HiNc package version — the top of the library stack, and the number the application shows as its own version mark — while the nine packages under it carry their own builds. The published packages reference one another with a floating 3.2.*, so restoring HiNc pulls the newest 3.2 build of each dependency rather than a fixed, reproducible set. A build that has to be reproducible pins each package explicitly. The 3.1 line is closed at the 3.1.175 set and is serviced only as patches on that set. A package on the service line keeps the 3.1 build it was frozen at and gains a fourth segment of its own, so the set is quoted as 3.1.175. after its HiNc package while the packages beneath it publish under their own frozen builds — looking on the feed for every package at 3.1.175.x finds only HiNc. A reference left on that set receives correctness fixes for it and none of the capability on this page. The 3.1 builds above 3.1.175 were never published as a release set — which is why 3.2.7 is the first numbered 3.2 drop and absorbs what a caller moving off 3.1.175 has not seen as a published set. Later 3.2 builds are incremental, the same way 3.1.175 / 3.1.173 / … were." }, "technique/api-foundations/basic-geometry.html": { "href": "technique/api-foundations/basic-geometry.html", @@ -8342,7 +8367,7 @@ "technique/nc-dialects/controller-iso.html": { "href": "technique/nc-dialects/controller-iso.html", "title": "General NC Code Support | HiAPI-C# 2025", - "summary": "General NC Code Support The vocabulary HiNC interprets is decided by the controller brand selected for the project. This page covers the ISO-family presets — Fanuc, Syntec and Mazak — and Siemens SINUMERIK. Heidenhain is a different language and has its own page: Heidenhain Support. How to read this page Coverage is stated in three states. State What happens when the construct appears in your program Supported interpreted, and its effect is simulated. Recognized, not simulated consumed on purpose and reported under its own message id. The block keeps running and the construct's effect does not apply — but it can never be silently misread as something else. Not supported the words are left over, and the block reports Parsing--Unconsumed naming them. Tip The message list a run produces is the coverage report for your program. Every word the interpreter could not use is named on the block that carried it, so you never have to infer coverage from the simulated result. An unknown code does not stop the run — it is reported and skipped. ISO core Fanuc, Syntec and Mazak share the vocabulary below. Siemens spells most of it the same way and adds its own for the rest — see Siemens SINUMERIK. Motion Code Meaning G00 Rapid positioning. G01 Linear interpolation at the programmed feedrate. G02 / G03 Circular interpolation, clockwise / counter-clockwise. The centre may be given as I / J / K offsets or as a radius R. G04 Dwell. X / U are seconds, P is milliseconds, S is spindle revolutions. Both the G4 and G04 spellings are read. G28 Reference-point (home) return through an intermediate point. G53 One-shot machine-coordinate move — work offsets are bypassed for that block only. Plane, units and positioning mode Code Meaning G17 / G18 / G19 Plane selection — XY / ZX / YZ. Arcs and canned cycles follow the active plane. G21 Metric. This is the HiNC default. G71 Metric — the RS-274-D / Fanuc G-code system C / Syntec spelling of G21, accepted the same way on the Fanuc and Syntec presets. Mazak EIA stays G20 / G21 only. G20 Inch — not supported. The block reports Unit--InchNotSupported; post the program in metric. G70 Inch — the RS-274-D / Fanuc G-code system C / Syntec spelling of G20, read on the Fanuc and Syntec presets. Not supported; the block reports Unit--InchNotSupported; post the program in metric. G90 / G91 Absolute / incremental positioning. G94 / G95 Feed per minute / feed per revolution. Work coordinates Code Meaning G54–G59 Standard work coordinate systems. G59.1–G59.9 Extended work coordinate systems, backed by the brand-neutral table the Fanuc, Mazak and Syntec presets carry behind their brand table. Like G54–G59, a row left at zero is read as an authoring convention and stays silent. G54.1 P1–P48 Fanuc additional work coordinate systems, backed by the extended work offset table. Also read in the manual's second spelling G54 P1–P48, with or without the space; a G54 with no P word is the plain G54 above. A selected row nobody has entered reports Coord-WorkOffset--AdditionalZero. G52 Local coordinate offset, applied on top of the active work coordinate system. Tool compensation Code Meaning G43 / G44 / G49 Tool length compensation, positive / negative / cancel. H selects the offset row. G41 / G42 / G40 Cutter radius compensation, left / right / cancel. D selects the offset row. Radius compensation is resolved against the blocks that actually travel in the compensation plane. A block whose own words command no movement in that plane — a bare G41 / G42, a comment, an empty line, a plunge along the plane normal (Z under G17) — takes no offset of its own and no part in a corner: Start-up waits for motion. A G41 or G42 block that does not move in the plane does not start the offset; the first block that travels in the plane is the start-up block and takes the perpendicular (type A) offset. The blocks between them carry the previous block's offset vector, so nothing moves on their account. Corners are resolved between travelling blocks. Wordless blocks sitting between two moves are passed over, and the corner is the intersection of the two real segments. Running axes are the in-plane part of each displacement, so a ramping move keeps its full offset and a plunge along the plane normal stays on the offset line. The plane cannot change inside a region. G17 / G18 / G19 selects the compensation plane, and it may only be selected while compensation is cancelled. A plane code that resolves to a different plane while G41 / G42 is active — including one sharing its block with the G40 that cancels the region — is reported as RadiusComp--PlaneChangeInRegion, because the corner spanning the change would be built from one running axis per plane. A control alarms there (Fanuc PS0037 CAN NOT CHANGE PLANE IN CRC). Re-selecting the plane already in force is not a change and is accepted. A bare G40 closes the region. The last compensated block ends on its own perpendicular offset rather than turning toward the first uncompensated move after the cancel. A G40 that carries motion is the last corner's partner instead, and the compensated path meets the cancel line at their intersection (Fanuc type B); the legacy interpreter (EnableSoftNcRunner set false) ends that case perpendicular. The D row must match the program's strategy. A zero-based program (the CAM path is the tool-centre path, G41 D.. kept for wear only) needs a D row whose geometry radius is 0; a cutter-radius program (the NC is the part contour) needs the tool radius there. An offset larger than an inner arc or groove of the contour makes the compensated path run against the programmed direction — a control stops with an interference alarm (Fanuc PS0041), HiNC reports RadiusComp--Interference and keeps playing the swapped-side path. The radius basis of the tool-house refresh is chosen on Tool Offsets. Rotation, tilted planes and five-axis Code Meaning G68 Coordinate rotation in the active plane, around a centre point by angle R. G68.2 Tilted work plane — Euler angles I / J / K with origin X / Y / Z. G69 Cancels G68 and G68.2. G53.1 Tool-axis direction — swings the rotary axes into line with the active G68.2 plane. G43.4 RTCP / tool centre point management. The Siemens equivalent is TRAORI, the Heidenhain equivalent M128. Canned cycles Code Cycle G73 High-speed peck drilling — Q increments with a partial retract. G74 Left-hand tapping. G76 Fine boring — oriented spindle stop, Q shift, rapid out. G81 Drilling. G82 Drilling with a dwell at the bottom. G83 Peck drilling — Q increments with a full retract to the R point. G84 Right-hand tapping. G85 Boring, feed out. G86 Boring, spindle stop then rapid out. G87 Back boring. G89 Boring with a dwell at the bottom. G80 Cancel. G98 / G99 Retract to the initial level / to the R level. A cycle is expanded into the individual strokes it performs — approach, peck, dwell, retract — each with its own feedrate, so material removal and cycle time come out of the real motion rather than an approximation. Modal repetition and G91 incremental cycle data are resolved before the strokes are built. Polar interpolation G12.1 turns polar coordinate interpolation on and G13.1 turns it off. Inside a polar section the X word is a diameter and the C word is a hypothetical Cartesian axis in millimetres, not rotary degrees. HiNC halves X, resolves G90 / G91, writes both the polar and the derived Cartesian positions along with the machine C angle, and simulates polar linear and polar arc motion — the arc as real spiral geometry that stays continuous across ±180°. G41 / G42 compensation is resolved on the hypothetical plane, and YA / ZB axis pairs work the same way. G codes that conflict with polar mode are checked before the mode is entered. Path smoothing G05.1 Q1 enables high-precision contour control (AICC / Nano Smoothing) and Q0 disables it. The optional R precision level is preserved. Bare G05 (or G5) is a different feature under a confusingly similar name, and the two are tracked separately so they cannot cancel one another. It selects a function through its P word, on the Fanuc, Syntec and Mazak presets: P Reading P10000 HPCC — RISC-based high-precision contour control. Recognized, deliberately not simulated: it changes the machine's look-ahead, acceleration and servo behaviour, never the programmed coordinates. Reports Hpcc--NoOp. P0 Cancels HPCC. Consumed silently — cancelling a no-op needs no message. P10001–P10999 High-speed cycle machining. The real machine executes cycle data pre-registered in its variable area, which is actual axis motion HiNC cannot see, so the simulated result misses that machining. Reports Hpcc--HighSpeedCycleIgnored as a warning. anything else Not supported offline and ignored, reported as Hpcc--UnsupportedFunction. Small P values select the high-speed remote buffer modes. no P at all Not supported offline and ignored, reported as Hpcc--MissingFunctionWord. An unevaluated macro variable or expression in P is tolerated — it reports Hpcc--UnevaluatedFunction rather than failing the block. M codes Code Meaning M00 / M01 Program stop / optional stop. M02 / M30 Program end. M03 / M04 / M05 Spindle clockwise / counter-clockwise / stop. M06 Tool change. The axis travel the change requires is synthesized rather than teleported. M07 / M08 / M09 Mist coolant on / flood coolant on / coolant off. M98 / M99 Subprogram call (M98 P{program} L{repeat}) and return, including M99 P{sequence} early return. M198 Subprogram call from external storage — same shape as M98, different lookup folder. Note Composite and OEM M-codes are not built in — they are declared on the machine. An M13 that means “spindle CW plus flood coolant”, an M-code that triggers a tool change, or turret T-word semantics are stated once in the machine's own M-code table and expanded into the ISO effects the rest of the pipeline already understands. A code declared with no modelled effect is voiced once as DeclaredMCode--UnmodeledEffects instead of raising an unknown-code warning on every occurrence. Note If a program states a spindle speed greater than zero but never issues a direction, HiNC assumes clockwise and reports SpindleDirection--AssumedCw. Without that assumption the cutting-force model would silently produce zero mechanics for the whole file. Fanuc Everything in the ISO core, plus: Custom Macro B. # variable assignment and arithmetic, with each range routed to the store it belongs to — #1–#33 local to the macro frame, #100–#499 volatile and cleared on M02 / M30, #500–#999 retained and saved with the project, #3000–#3999 system control. Boolean and logical operators, IF [..] GOTO n, IF [..] THEN , and WHILE [..] DO m / END m with a bounded-loop watchdog. Position and tool-offset system variables read back into expressions. Macro and subprogram calls. G65 one-shot macro call, binding arguments A–Z onto #1–#26; G66 / G67 modal macro, firing at every positioning block until cancelled; M98 / M198 / M99. A callee's blocks are spliced into the program at the call site, so the rest of the run treats them exactly as if they had been written in the main file. Not supported. G10 programmable data setting, G50 spindle speed clamp, G31 skip. Syntec Syntec runs the ISO core plus the Fanuc-family macro and subprogram vocabulary and polar interpolation. Not supported. Custom G macros defined on the controller, Pr parameter mapping, and twin-head / twin-turret program syntax. Mazak Mazak reads EIA/ISO with the Fanuc-family macro and subprogram vocabulary and polar interpolation. Not supported. MAZATROL conversational sections, and switching between MAZATROL and EIA/ISO inside one program. Export the EIA/ISO program from the controller. Siemens SINUMERIK Real .mpf / .spf programs replay end to end — this is not an ISO subset with a Siemens label on it. Modal vocabulary. SUPA / G153 suppress all frames for one block; G70 / G71 units; the path-smoothing family (G60x / G64x, FNORM / SOFT / FFWON / COMP* / UPATH, CYCLE832); MSG() and STOPRE; CR= and TURN= arcs. Tail comments are quote-aware, so a ; inside MSG(\"A;B\") does not truncate the block. G74 / G75 fixed-point return is claimed as a whole block, so the dummy axis values it carries never mint a rapid to those coordinates and its F never reaches the modal feedrate. Tools. T=\"NAME\" string tool calls with D cutting-edge offsets, resolved through the $TC_DP tool table — lengths and radius plus additive wear. Variables and expressions. R parameters R0–R999 are held as per-project data, DEF REAL / DEF INT declarations lower into assignments, and a full expression evaluator means Z=R63+150 and X=SIN(R10)*20 drive real motion. $P_UIFR[n,axis,TR] binds both ways to the frame table. Any other $ variable is recorded with an unsupported note rather than silently dropped. Frames and five-axis. TRANS / ATRANS / ROT / AROT (with RPL=) compose into the tilt chain in Sinumerik RPY order; TRAORI is a real RTCP mode, the sibling of ISO G43.4, with TRAFOOF handing the offset back; CYCLE800 is decoded from its MODE bits across all four swivel modes. Calls and control flow. L-prefixed and named subprogram calls, inlined with their P repetition count; M17 / RET; REPEAT over a labelled slice; MCALL CYCLE81 / 82 / 83 / 85 mapped onto the shared canned-cycle machinery; PROC headers and labels. GOTOF / GOTOB, IF / ELSE / ENDIF, and WHILE / FOR / REPEAT-UNTIL / LOOP. Jumps and loop iterations are capped rather than hanging the session — over the cap the construct warns and falls through. Per-word coordinate functions. AC() / IC() / DC() / ACP() / ACN(), including on I / J / K circle centres, so G90 C=IC(360/17) is one incremental index inside an absolute program. ACP() takes the forward window, ACN() the backward one, and DC() the shortest swing. Coded positions. CAC / CIC / CDC / CACP / CACN take a 1-based indexing position number instead of a coordinate, resolved against the machine's own indexing-position tables. OEM auxiliary M-codes. The preset declares M12 / M13 / M22 / M23 and M330 / M331 as note-only, so each occurrence voices DeclaredMCode--UnmodeledEffects rather than an unknown-code warning. A machine's own table overrides the declaration once the real effects are known. Recognized, not simulated. ROTS / AROTS, SCALE / ASCALE, and MIRROR / AMIRROR — each reported as SiemensFrame--Unsupported. Not supported. SETAL. See Also Heidenhain Support — klartext and Heidenhain DIN/ISO. NC Parsing Engine — the pipeline behind these codes, the brand-by-brand support matrix in one table, and how a machine's own vocabulary is added without changing HiNC." + "summary": "General NC Code Support The vocabulary HiNC interprets is decided by the controller brand selected for the project. This page covers the ISO-family presets — Fanuc, Syntec and Mazak — and Siemens SINUMERIK. Heidenhain is a different language and has its own page: Heidenhain Support. How to read this page Coverage is stated in three states. State What happens when the construct appears in your program Supported interpreted, and its effect is simulated. Recognized, not simulated consumed on purpose and reported under its own message id. The block keeps running and the construct's effect does not apply — but it can never be silently misread as something else. Not supported the words are left over, and the block reports Parsing--Unconsumed naming them. Tip The message list a run produces is the coverage report for your program. Every word the interpreter could not use is named on the block that carried it, so you never have to infer coverage from the simulated result. An unknown code does not stop the run — it is reported and skipped. ISO core Fanuc, Syntec and Mazak share the vocabulary below. Siemens spells most of it the same way and adds its own for the rest — see Siemens SINUMERIK. Motion Code Meaning G00 Rapid positioning. G01 Linear interpolation at the programmed feedrate. G02 / G03 Circular interpolation, clockwise / counter-clockwise. The centre may be given as I / J / K offsets or as a radius R. G04 Dwell. X / U are seconds, P is milliseconds, S is spindle revolutions. Both the G4 and G04 spellings are read. G28 Reference-point (home) return through an intermediate point. G53 One-shot machine-coordinate move — work offsets are bypassed for that block only. Plane, units and positioning mode Code Meaning G17 / G18 / G19 Plane selection — XY / ZX / YZ. Arcs and canned cycles follow the active plane. G21 Metric. This is the HiNC default. G71 Metric — the RS-274-D / Fanuc G-code system C / Syntec spelling of G21, accepted the same way on the Fanuc and Syntec presets. Mazak EIA stays G20 / G21 only. G20 Inch — not supported. The block reports Unit--InchNotSupported; post the program in metric. G70 Inch — the RS-274-D / Fanuc G-code system C / Syntec spelling of G20, read on the Fanuc and Syntec presets. Not supported; the block reports Unit--InchNotSupported; post the program in metric. G90 / G91 Absolute / incremental positioning. G94 / G95 Feed per minute / feed per revolution. Work coordinates Code Meaning G54–G59 Standard work coordinate systems. G59.1–G59.9 Extended work coordinate systems, backed by the brand-neutral table the Fanuc, Mazak and Syntec presets carry behind their brand table. Like G54–G59, a row left at zero is read as an authoring convention and stays silent. G54.1 P1–P48 Fanuc additional work coordinate systems, backed by the extended work offset table. Also read in the manual's second spelling G54 P1–P48, with or without the space; a G54 with no P word is the plain G54 above. A selected row nobody has entered reports Coord-WorkOffset--AdditionalZero. G52 Local coordinate offset, applied on top of the active work coordinate system. Tool compensation Code Meaning G43 / G44 / G49 Tool length compensation, positive / negative / cancel. H selects the offset row. G41 / G42 / G40 Cutter radius compensation, left / right / cancel. D selects the offset row. Radius compensation is resolved against the blocks that actually travel in the compensation plane. A block whose own words command no movement in that plane — a bare G41 / G42, a comment, an empty line, a plunge along the plane normal (Z under G17) — takes no offset of its own and no part in a corner: Start-up waits for motion. A G41 or G42 block that does not move in the plane does not start the offset; the first block that travels in the plane is the start-up block and takes the perpendicular (type A) offset. The blocks between them carry the previous block's offset vector, so nothing moves on their account. Corners are resolved between travelling blocks. Wordless blocks sitting between two moves are passed over, and the corner is the intersection of the two real segments. Running axes are the in-plane part of each displacement, so a ramping move keeps its full offset and a plunge along the plane normal stays on the offset line. The plane cannot change inside a region. G17 / G18 / G19 selects the compensation plane, and it may only be selected while compensation is cancelled. A plane code that resolves to a different plane while G41 / G42 is active — including one sharing its block with the G40 that cancels the region — is reported as RadiusComp--PlaneChangeInRegion, because the corner spanning the change would be built from one running axis per plane. A control alarms there (Fanuc PS0037 CAN NOT CHANGE PLANE IN CRC). Re-selecting the plane already in force is not a change and is accepted. A bare G40 closes the region. The last compensated block ends on its own perpendicular offset rather than turning toward the first uncompensated move after the cancel. A G40 that carries motion is the last corner's partner instead, and the compensated path meets the cancel line at their intersection (Fanuc type B); the legacy interpreter (EnableSoftNcRunner set false) ends that case perpendicular. The D row must match the program's strategy. A zero-based program (the CAM path is the tool-centre path, G41 D.. kept for wear only) needs a D row whose geometry radius is 0; a cutter-radius program (the NC is the part contour) needs the tool radius there. An offset larger than an inner arc or groove of the contour makes the compensated path run against the programmed direction — a control stops with an interference alarm (Fanuc PS0041), HiNC reports RadiusComp--Interference and keeps playing the swapped-side path. The radius basis of the tool-house refresh is chosen on Tool Offsets. Rotation, tilted planes and five-axis Code Meaning G68 Coordinate rotation in the active plane, around a centre point by angle R. G68.2 Tilted work plane — Euler angles I / J / K with origin X / Y / Z. G69 Cancels G68 and G68.2. G53.1 Tool-axis direction — swings the rotary axes into line with the active G68.2 plane. G43.4 RTCP / tool centre point management. The Siemens equivalent is TRAORI, the Heidenhain equivalent M128. Canned cycles Code Cycle G73 High-speed peck drilling — Q increments with a partial retract. G74 Left-hand tapping. G76 Fine boring — oriented spindle stop, Q shift, rapid out. G81 Drilling. G82 Drilling with a dwell at the bottom. G83 Peck drilling — Q increments with a full retract to the R point. G84 Right-hand tapping. G85 Boring, feed out. G86 Boring, spindle stop then rapid out. G87 Back boring. G89 Boring with a dwell at the bottom. G80 Cancel. G98 / G99 Retract to the initial level / to the R level. A cycle is expanded into the individual strokes it performs — approach, peck, dwell, retract — each with its own feedrate, so material removal and cycle time come out of the real motion rather than an approximation. Modal repetition and G91 incremental cycle data are resolved before the strokes are built. On SoftNc (the 3.2 default) a repeat block is the XYZ / R / Q / F / P / K family. An A / B / C word on a repeat is not taken: a rotary-only repeat does not fire the cycle, a mixed block drops the rotary word, and under G68.2 the hole follows the table. Programs that index a rotary axis that way should run with SoftNc off — the HardNc fallback indexes those blocks the way a control does. See the Adoption status note. Polar interpolation G12.1 turns polar coordinate interpolation on and G13.1 turns it off. Inside a polar section the X word is a diameter and the C word is a hypothetical Cartesian axis in millimetres, not rotary degrees. HiNC halves X, resolves G90 / G91, writes both the polar and the derived Cartesian positions along with the machine C angle, and simulates polar linear and polar arc motion — the arc as real spiral geometry that stays continuous across ±180°. G41 / G42 compensation is resolved on the hypothetical plane, and YA / ZB axis pairs work the same way. G codes that conflict with polar mode are checked before the mode is entered. Path smoothing G05.1 Q1 enables high-precision contour control (AICC / Nano Smoothing) and Q0 disables it. The optional R precision level is preserved. Bare G05 (or G5) is a different feature under a confusingly similar name, and the two are tracked separately so they cannot cancel one another. It selects a function through its P word, on the Fanuc, Syntec and Mazak presets: P Reading P10000 HPCC — RISC-based high-precision contour control. Recognized, deliberately not simulated: it changes the machine's look-ahead, acceleration and servo behaviour, never the programmed coordinates. Reports Hpcc--NoOp. P0 Cancels HPCC. Consumed silently — cancelling a no-op needs no message. P10001–P10999 High-speed cycle machining. The real machine executes cycle data pre-registered in its variable area, which is actual axis motion HiNC cannot see, so the simulated result misses that machining. Reports Hpcc--HighSpeedCycleIgnored as a warning. anything else Not supported offline and ignored, reported as Hpcc--UnsupportedFunction. Small P values select the high-speed remote buffer modes. no P at all Not supported offline and ignored, reported as Hpcc--MissingFunctionWord. An unevaluated macro variable or expression in P is tolerated — it reports Hpcc--UnevaluatedFunction rather than failing the block. M codes Code Meaning M00 / M01 Program stop / optional stop. M02 / M30 Program end. On SoftNc the next block starts with tool-length compensation (including TCP), tilt, cutter-radius compensation and canned cycles cancelled; the M02 / M30 block itself still runs under the modal state it executed with. The HardNc fallback does not apply that reset. M03 / M04 / M05 Spindle clockwise / counter-clockwise / stop. M06 Tool change. The axis travel the change requires is synthesized rather than teleported. M07 / M08 / M09 Mist coolant on / flood coolant on / coolant off. M98 / M99 Subprogram call (M98 P{program} L{repeat}) and return, including M99 P{sequence} early return. M198 Subprogram call from external storage — same shape as M98, different lookup folder. Note Composite and OEM M-codes are not built in — they are declared on the machine. An M13 that means “spindle CW plus flood coolant”, an M-code that triggers a tool change, or turret T-word semantics are stated once in the machine's own M-code table and expanded into the ISO effects the rest of the pipeline already understands. A code declared with no modelled effect is voiced once as DeclaredMCode--UnmodeledEffects instead of raising an unknown-code warning on every occurrence. Note If a program states a spindle speed greater than zero but never issues a direction, HiNC assumes clockwise and reports SpindleDirection--AssumedCw. Without that assumption the cutting-force model would silently produce zero mechanics for the whole file. Fanuc Everything in the ISO core, plus: Custom Macro B. # variable assignment and arithmetic, with each range routed to the store it belongs to — #1–#33 local to the macro frame, #100–#499 volatile and cleared on M02 / M30, #500–#999 retained and saved with the project, #3000–#3999 system control. Boolean and logical operators, IF [..] GOTO n, IF [..] THEN , and WHILE [..] DO m / END m with a bounded-loop watchdog. Position and tool-offset system variables read back into expressions. Macro and subprogram calls. G65 one-shot macro call, binding arguments A–Z onto #1–#26; G66 / G67 modal macro, firing at every positioning block until cancelled; M98 / M198 / M99. A callee's blocks are spliced into the program at the call site, so the rest of the run treats them exactly as if they had been written in the main file. Not supported. G10 programmable data setting, G50 spindle speed clamp, G31 skip. Syntec Syntec runs the ISO core plus the Fanuc-family macro and subprogram vocabulary and polar interpolation. Not supported. Custom G macros defined on the controller, Pr parameter mapping, and twin-head / twin-turret program syntax. Mazak Mazak reads EIA/ISO with the Fanuc-family macro and subprogram vocabulary and polar interpolation. Not supported. MAZATROL conversational sections, and switching between MAZATROL and EIA/ISO inside one program. Export the EIA/ISO program from the controller. Siemens SINUMERIK Real .mpf / .spf programs replay end to end — this is not an ISO subset with a Siemens label on it. Modal vocabulary. SUPA / G153 suppress all frames for one block; G70 / G71 units; the path-smoothing family (G60x / G64x, FNORM / SOFT / FFWON / COMP* / UPATH, CYCLE832); MSG() and STOPRE; CR= and TURN= arcs. Tail comments are quote-aware, so a ; inside MSG(\"A;B\") does not truncate the block. G74 / G75 fixed-point return is claimed as a whole block, so the dummy axis values it carries never mint a rapid to those coordinates and its F never reaches the modal feedrate. Tools. T=\"NAME\" string tool calls with D cutting-edge offsets, resolved through the $TC_DP tool table — lengths and radius plus additive wear. Variables and expressions. R parameters R0–R999 are held as per-project data, DEF REAL / DEF INT declarations lower into assignments, and a full expression evaluator means Z=R63+150 and X=SIN(R10)*20 drive real motion. $P_UIFR[n,axis,TR] binds both ways to the frame table. Any other $ variable is recorded with an unsupported note rather than silently dropped. Frames and five-axis. TRANS / ATRANS / ROT / AROT (with RPL=) and the solid-angle forms ROTS / AROTS compose into the tilt chain in Sinumerik RPY order (ROTS / AROTS behave as ROT / AROT: at most two angles, first-named axis first); TRAORI is a real RTCP mode, the sibling of ISO G43.4, with TRAFOOF handing the offset back; CYCLE800 is decoded from its MODE bits across all four swivel modes. Calls and control flow. L-prefixed and named subprogram calls, inlined with their P repetition count; M17 / RET; REPEAT over a labelled slice; MCALL CYCLE81 / 82 / 83 / 85 mapped onto the shared canned-cycle machinery; PROC headers and labels. GOTOF / GOTOB, IF / ELSE / ENDIF, and WHILE / FOR / REPEAT-UNTIL / LOOP. Jumps and loop iterations are capped rather than hanging the session — over the cap the construct warns and falls through. Per-word coordinate functions. AC() / IC() / DC() / ACP() / ACN(), including on I / J / K circle centres, so G90 C=IC(360/17) is one incremental index inside an absolute program. ACP() takes the forward window, ACN() the backward one, and DC() the shortest swing. Coded positions. CAC / CIC / CDC / CACP / CACN take a 1-based indexing position number instead of a coordinate, resolved against the machine's own indexing-position tables. OEM auxiliary M-codes. The preset declares M12 / M13 / M22 / M23 and M330 / M331 as note-only, so each occurrence voices DeclaredMCode--UnmodeledEffects rather than an unknown-code warning. A machine's own table overrides the declaration once the real effects are known. Recognized, not simulated. SCALE / ASCALE, MIRROR / AMIRROR and CROTS — each reported as SiemensFrame--Unsupported. Not supported. SETAL. See Also Heidenhain Support — klartext and Heidenhain DIN/ISO. NC Parsing Engine — the pipeline behind these codes, the brand-by-brand support matrix in one table, and how a machine's own vocabulary is added without changing HiNC." }, "technique/nc-dialects/index.html": { "href": "technique/nc-dialects/index.html", @@ -8352,7 +8377,7 @@ "technique/nc-dialects/nc-parsing.html": { "href": "technique/nc-dialects/nc-parsing.html", "title": "NC Parsing Engine | HiAPI-C# 2025", - "summary": "NC Parsing Engine SoftNcRunner is the NC interpreter. It reads a controller program — Fanuc, Siemens, Syntec, Mazak or Heidenhain G-code, an NX cutter-location file, or a CSV controller recording — and turns it into the machine actions the simulation executes. It is a composed interpreter rather than a fixed one. The segmenter, the initializers, the syntax stages, the semantics and the dependency data are five ordered lists on the runner object, all of them serializable. Adding support for a G-code means adding one syntax unit and one line to a list; removing support means removing that line. Nothing about a brand is compiled into a central class. Note SoftNcRunner is the default NC pipeline as of 3.2 (EnableSoftNcRunner defaults to true). HardNcRunner remains reachable as the opt-out fallback for the shrinking set of features still bound to it. The pipeline A program becomes actions in five ordered stages. Each shipped preset expresses them as five BundleSyntax containers named Parsing, Evaluation, Logic, PostLogic and Inspection. graph TD A[NC raw lines] --> SEG[ISegmenter] SEG --> SENT[Sentence stream] SENT --> INIT[INcInitializer] INIT --> P[Parsing
    text to structure] P --> E[Evaluation
    variables, expressions,
    calls, control flow] E --> L[Logic
    modal state, coordinates,
    compensation, motion] L --> PL[PostLogic
    modal carry] PL --> I[Inspection
    backfill, unconsumed check,
    snapshot] I --> SEM[INcSemantic] SEM --> OUT[Machine actions] DEP[INcDependency list
    brand tables, coordinate systems,
    tool offsets, kinematics, ...] DEP -. injected .-> P DEP -. injected .-> E DEP -. injected .-> L DEP -. injected .-> SEM Stage Responsibility ISegmenter cuts the raw text into blocks. Three implementations ship — one line per block, and the two multi-line forms Heidenhain and Siemens programs need INcInitializer seeds the stream head with the machine's starting state, for example the configured home position Parsing recognizes the text: words, statements, cycle bodies, comments. Writes structure, never meaning Evaluation resolves anything the block computes for itself — variable reads and writes, arithmetic, conditional jumps, loops, and subprogram or macro calls, whose bodies are spliced into the stream so later stages walk them as if they had always been in the host file Logic the modal machine model: units, positioning mode, plane, feed, spindle, coolant, tool change and compensation, work offsets, tilt and RTCP, and the program-to-machine coordinate chain PostLogic carries the block's full modal context forward, so every block's data is self-contained Inspection back-fills derived values, reports words nothing consumed, and optionally snapshots the block INcSemantic turns the finished block into machine actions — linear and arc motion, teleports, tool change, spindle, dwell, stroke-limit checks Over 150 syntax units ship across those five stages, plus the per-brand lists that select and order them. Most syntax units implement ISituNcSyntax — they mutate the block in place. IExpandingNcSyntax exists for a unit that must turn one block into several. Note that the shipped call and repeat syntaxes are not expanders: they splice the callee's already-segmented blocks into the stream ahead of the current position, which keeps one block's identity intact through the rest of the pipeline. Composition and presets The runner is a container; its five lists are what make it a Fanuc runner or a Heidenhain one. ... ... ... ... ... Every unit implements IMakeXmlSource and registers itself with XFactory, so the whole pipeline round-trips through XML. Seven presets are built in: Preset Reads FanucNcRunner Fanuc G-code, including Custom Macro B SiemensNcRunner Sinumerik .mpf / .spf SyntecNcRunner Syntec G-code MazakNcRunner Mazak EIA/ISO HeidenhainNcRunner klartext and DIN/ISO, on one preset GeneralCsvRunner a CSV controller recording NxClRunner NX CLSF / APT-source cutter-location files The five brand presets also ship as standalone files under Resource/Controller/ with the .Controller extension, written by ControllerPresetWriter, so the load browser starts populated. Those files are regenerable snapshots — the static properties above are the source of truth, and the files are rewritten whenever a brand pipeline changes. Important Reading a preset file back requires the pipeline types to be registered first (Reg through Reg at startup). The loader drops unregistered entries silently rather than failing the load, so an unregistered process reads a hollow pipeline that parses nothing. A runner rehydrated from an older saved file keeps the syntax list it was saved with — nothing re-derives a brand's syntax list at read time. To pick up new brand syntaxes, take the current preset or a fresh NcRunnerSuit built from it. Missing system-wired dependencies are back-filled automatically on load; syntaxes are not. The dataflow Each block travels the pipeline as a SyntaxPiece carrying a JSON object. Every stage reads some keys, writes some keys, and removes the keys it has consumed. The convention is section plus term: the section key is a semantic name that is the same across brands (Unit, Feedrate, Motion, CoordinateOffset), while the controller's actual keyword lives in the section's Term field so the correspondence with the source text is never lost. A Fanuc block N162 X-14.696 Y-6.42 Z45.638, after the pipeline (matrices elided): { \"IndexNote\": {\"Symbol\":\"N\",\"Number\":162}, \"Positioning\": {\"Term\":\"G90\",\"Mode\":\"Absolute\"}, \"Unit\": {\"Term\":\"G21\",\"System\":\"Metric\"}, \"PlaneSelect\": {\"Term\":\"G17\",\"Plane\":\"XY\"}, \"Feedrate\": {\"FeedrateValue\":400,\"Term\":\"G94\",\"Unit\":\"mm/min\"}, \"SpindleSpeed\": {\"SpindleSpeed_rpm\":20000,\"Direction\":\"CW\"}, \"Coolant\": {\"IsOn\":true,\"Mode\":\"Flood\"}, \"ToolChange\": {\"ToolId\":4,\"IsChange\":false}, \"TiltTransform\": {\"Term\":\"G68.2\"}, \"ProgramToMcTransform\": [ {\"Source\":\"TiltTransform\", \"Mat4d\":[ ... ]}, {\"Source\":\"ToolHeightCompensation\", \"Mat4d\":[ ... ]}, {\"Source\":\"CoordinateOffset\", \"Mat4d\":[ ... ]}, {\"Source\":\"PivotTransform\", \"Mat4d\":[ ... ]} ], \"ToolHeightCompensation\": {\"Offset_mm\":16,\"Term\":\"G43\",\"OffsetId\":4}, \"CoordinateOffset\": {\"CoordinateId\":\"G54\",\"Offset_X\":72.4,\"Offset_Y\":-72.4,\"Offset_Z\":-116.44}, \"ProgramXyz\": {\"X\":-14.696,\"Y\":-6.42,\"Z\":45.638}, \"MachineCoordinateState\": {\"X\":140.5947,\"Y\":-78.8200,\"Z\":-124.4559}, \"MotionState\": {\"Term\":\"G01\"}, \"MotionEvent\": {\"Form\":\"McLinear\",\"IsRapid\":false}, \"RadiusCompensation\": {\"Term\":\"G40\",\"OffsetId\":0,\"Radius_mm\":0} } Three things are worth reading off that block. Program and machine coordinates are both present. The source states program coordinates; the pipeline keeps them and adds the solved machine coordinates, so a report or a UI can use either. ProgramToMcTransform flattens the cause chain. The program-to-machine mapping is not one opaque matrix but the ordered list of contributions that built it — tilt, tool height, work offset, pivot — each with its own matrix. When a machine coordinate is not what you expected, this array names which compensation is responsible without re-running anything. Modal state is complete on every block, even where the source line states none of it, because PostLogic carries the previous block's sections forward. A section the pipeline synthesized rather than read from the source carries an AddedBy marker (ModalCarry or Backfill), so a reader can tell authored data from carried data — see SyntaxStageKeys. Retention and the freeze A session retains every executed block for its lifetime, and the live JSON graph costs about 12 KB per line against about 1.6 KB for its compact UTF-8 form — which is what made multi-million-line programs exhaust a client machine. Once a block leaves the executing window its piece is frozen: the graph is replaced by those bytes (Freeze, IsFrozen). On a 25,000-line play that takes session retention from 406 MB to 142 MB. The switch is FreezeExecutedPieces, on by default. Downstream readers are unaffected — the JsonObject getter re-parses on demand and the encoding is byte-identical to the live form — but the object it returns is a fresh read-only snapshot per call, with no caching and no write-back. Two reads are not reference-equal, a mutation lands on a throwaway copy, and code that reads the same piece repeatedly should hold the snapshot in a local. To inspect the dataflow, snapshot it in the pipeline with the SnapshotSyntax entry each bundle carries (disabled by default) rather than holding pieces and poking them afterwards. Type discrimination is slightly looser after a round trip, because JSON has fewer types than the live graph: NaN and ±Infinity serialize as quoted strings and thaw as string nodes, and 5.0 freezes as 5, so an integer read of it succeeds where it previously would not. GetDouble maps the quoted non-finite spellings back to their double constants, so read numbers through it rather than through a raw node cast. Dependencies Machine and case data reach the syntaxes as a list of INcDependency objects rather than as fields on a shared configuration object. A syntax declares what it needs by interface and pulls it: // A syntax that needs the machine's home position asks for the interface, not for a class. var homeConfig = ncDependencyList.OfType().FirstOrDefault(); Adding a brand means adding a table that implements the interfaces its syntaxes ask for — the brand parameter tables derive from ControllerParameterTableBase. Per-case data travels as a proxy. Tool offsets, work-coordinate offsets, Siemens frames, Heidenhain datums and retained macro variables belong to a job, not to a controller configuration. Those entries sit in the pipeline list as placeholders that resolve, per session, against the owning project's per-case list — which is what lets one controller configuration be shared across projects. PipelineNcDependencyList is the raw list; consumers read the resolved view through GetEffectiveNcDependencyList. NcRunnerSuit bundles a runner with its per-case data as one file-loadable unit, so a whole parser configuration — pipeline and job data together — moves as a single file. Machine wiring ConfigureByMachiningChain takes the machining chain and settles what the pipeline needs to know about the physical machine: axis order, which axes are rotary and which linear, and the kinematics the coordinate syntaxes solve against. A five-axis machine, a four-axis machine and a twin-table machine all run the same program path — the difference is the chain, not the parser. Extending it Three kinds of customization need no rebuild of the libraries: Switch brand. var runner = SoftNcRunner.HeidenhainNcRunner; runner.ConfigureByMachiningChain(machine.Chain); Add a syntax for one machine's own vocabulary. A machine whose PLC uses a non-standard M168 for clamping needs a class implementing ISituNcSyntax and one entry in that project's pipeline list. No HiAPIs source changes. Declare OEM M-codes without writing code at all. IMCodeDeclarationConfig and MCodeEffects let a machine state what its own M-codes do — a composite spindle-and-coolant code, a tool-change trigger, turret T-word semantics — and MCodeExpansionSyntax expands them into the canonical ISO flags the shared consumers already understand. A code declared with no modeled effects is voiced once as DeclaredMCode--UnmodeledEffects instead of raising an unknown-code warning on every occurrence. Important Composing the pipeline is a licensed capability. Registering a unit that is not built in — into the syntax list, the dependency list, the semantics, the initializers or the segmenter — and executing an NC-embedded C# script both require the NcComposition licence feature. The check runs once per session at the run entry, so it covers project-XML load, whole-object replacement and direct list mutation alike. Degradation is silent and functional, not an error: external units are skipped for that session and named in one Composition--NotLicensed diagnostic, an external segmenter falls back to the single-line segmenter, and scripts are skipped with Script--NotLicensed. The runner's persisted lists are never mutated, so the project still saves correctly — but the simulation that ran is a different one. If you build against this surface, check for that diagnostic rather than assuming your unit ran. Built-in units are unrestricted in order, count, duplication and constructor configuration, and calling the public API from your own application or session script needs no extra licence. Brand support Coverage is stated in three states. Recognized but not simulated is a deliberate state, not a gap: the construct is consumed safely and reported with its own diagnostic id, so it can never be misread as something else — a PLANE AXIAL B+45 will not be mistaken for a rotary axis command. Brand Supported Recognized, not simulated Not supported Fanuc ISO core, canned cycles G73–G89, G41/G42, G43.4 RTCP, G53/G53.1, G68/G68.2/G69, G12.1/G13.1 polar with compensation, Custom Macro B (# variables, IF/GOTO, WHILE/DO), M98/M99 subprograms, G65/G66/G67 macro calls bare G05 P HPCC selections (Hpcc--NoOp, Hpcc--HighSpeedCycleIgnored, Hpcc--UnsupportedFunction, Hpcc--UnevaluatedFunction, Hpcc--MissingFunctionWord) G10 programmable data setting, G50 spindle limit, G31 skip Siemens modal vocabulary, SUPA/G153, T=\"name\" with D offsets, $TC_DP tool tables, R-parameters and DEF variables with a full expression evaluator, $P_UIFR, TRANS/ATRANS/ROT/AROT frames, TRAORI/TRAFOOF, CYCLE800, MSG/STOPRE, CR=/TURN= arcs, L/named subprograms, MCALL, REPEAT, PROC/labels, GOTOF/GOTOB, IF/ELSE/ENDIF, WHILE/FOR/REPEAT-UNTIL/LOOP, AC()/IC()/DC()/ACP()/ACN(), the coded-position family, G74/G75 ROTS/AROTS, SCALE/ASCALE, MIRROR/AMIRROR (SiemensFrame--Unsupported) SETAL Heidenhain klartext motion and FMAX, LN surface-normal blocks resolved into the rotary axes, M91, TOOL CALL with DL/DR, CYCL DEF 247 presets and CYCL DEF 7 additive shifts, CC/C arcs, I-prefixed incremental axis words on L/LN/C (rotary included) and on CC/CYCL CALL POS (X/Y/Z only), RL/RR/R0, M126/M127 with an incremental rotary word exempt from the shortest-path fold, M140, CYCL DEF 32, Q/QR parameters with the FN grammar and FN 9–12 jumps, PLANE SPATIAL, FUNCTION TCPM, M128/M129, machining cycles 200/232/251/252/253, CYCL CALL/CYCL CALL POS, CALL LBL with REP, CALL PGM, tilde continuation, BLK FORM, STOP, mirror image (G28 and CYCL DEF 8), and the DIN/ISO dialect with absolute I/J/K centres, the ISO label family, G247, G54 datum words and G70/G71 PLANE VECTOR (captured), PLANE EULER / POINTS / RELATIV / AXIAL / PROJECTED (HeidenhainPlane--Unsupported), unimplemented FN opcodes such as FN 18 SYSREAD, unrecognized CYCL DEF bodies (HeidenhainCycl--Unsupported), center-referenced FUNCTION TCPM REFPNT (Orientation-RefPoint--CntNotSimulated), and 3D-ToolComp along the LN surface normal (SurfaceNormal--CompNotSimulated) TOOL DEF, FK free contour, SL cycles, PATTERN DEF, TCH PROBE Syntec ISO core plus the Fanuc-family macro and subprogram vocabulary, polar interpolation bare G05 P HPCC selections, as Fanuc custom G macros, Pr parameter mapping, twin-head / twin-turret syntax Mazak EIA/ISO with the Fanuc-family macro and subprogram vocabulary, polar interpolation bare G05 P HPCC selections, as Fanuc Mazatrol conversational sections, MAZATROL ↔ EIA/ISO switching Note On the Heidenhain preset, DIN/ISO G28 is MIRROR IMAGE, not a Fanuc reference-point return, and ReferenceReturnSyntax is not in that preset's Logic list. HardNcRunner keeps the Fanuc reading, so the two engines are deliberately divergent on Heidenhain G28 files. Note Per-word incremental positioning is one mechanism, shared across brands. The Siemens IC() wrapper and the klartext I prefix both write the value under the plain axis key and stamp a per-axis entry — \"PositioningOverride\": {\"Y\":\"Incremental\"} — on the block root, so absolute and incremental words mix inside one block and only the marked axis is relative: on IC() and on the klartext L / LN / C / CC heads, a distance from the last programmed position; on CYCL CALL POS, from the coordinates of the previous CYCL CALL POS. The Siemens coded family (CAC(), CIC() and the rest) stamps the same section with CodedAbsolute / CodedIncremental instead of the plain pair, and the optimizer's incremental guard reads CodedIncremental too. That section is non-modal: it appears in no ModalCarry key set and never reaches the next block. Klartext states no modal G90/G91 at all — its Positioning section stays at the G90 default, and only the DIN/ISO dialect on that brand carries the modal pair. The CYCL DEF 7 datum-shift I words are a separate thing and write no override entry: they shift the active datum rather than measure from the tool position. Scope and testing Two limits sit outside the per-brand table and apply to everything in it. Milling only. Turning and tapping operations are not simulated. A program containing them parses as far as its milling content allows; the operations themselves are not modelled. Fanuc syntax is the primary test surface. All five presets are exercised, but Fanuc carries the most coverage, and a construct that is unusual in Fanuc but ordinary in another dialect is the likeliest place to meet an unimplemented case. The three-state table above exists so that such a case is reported rather than silently mis-read. Full five-axis RTCP is supported across the presets that have it — Fanuc G43.4, Heidenhain FUNCTION TCPM and M128, Siemens TRAORI. Loading a HardNc-era project Projects written for the legacy interpreter still load. Mechanism Purpose FromLegacyNcEnvXml builds a SoftNcRunner from a legacy configuration element the NcEnv XML alias a project saved under the old element name still deserializes the legacy version patches a project saved by an older build gains the syntaxes and semantics added since, according to the project API version it carries the system-wired back-fill a saved pipeline gains the runtime-wired dependencies it predates EnableSoftNcRunner set false to run the legacy interpreter for comparison The version patches cover projects back to the 3.1.163 era; the back-fill is unconditional, because the dependencies it adds are stateless runtime-wired singletons for which presence is the only question worth asking. See Also Heidenhain Support — the reader-facing page for klartext and Heidenhain DIN/ISO General NC Code Support — the reader-facing page for Fanuc, Syntec, Mazak and Siemens SINUMERIK" + "summary": "NC Parsing Engine SoftNcRunner is the NC interpreter. It reads a controller program — Fanuc, Siemens, Syntec, Mazak or Heidenhain G-code, an NX cutter-location file, or a CSV controller recording — and turns it into the machine actions the simulation executes. It is a composed interpreter rather than a fixed one. The segmenter, the initializers, the syntax stages, the semantics and the dependency data are five ordered lists on the runner object, all of them serializable. Adding support for a G-code means adding one syntax unit and one line to a list; removing support means removing that line. Nothing about a brand is compiled into a central class. Note SoftNcRunner is the default NC pipeline as of 3.2 (EnableSoftNcRunner defaults to true). HardNcRunner remains reachable as the opt-out fallback for the shrinking set of features still bound to it. The pipeline A program becomes actions in five ordered stages. Each shipped preset expresses them as five BundleSyntax containers named Parsing, Evaluation, Logic, PostLogic and Inspection. graph TD A[NC raw lines] --> SEG[ISegmenter] SEG --> SENT[Sentence stream] SENT --> INIT[INcInitializer] INIT --> P[Parsing
    text to structure] P --> E[Evaluation
    variables, expressions,
    calls, control flow] E --> L[Logic
    modal state, coordinates,
    compensation, motion] L --> PL[PostLogic
    modal carry] PL --> I[Inspection
    backfill, unconsumed check,
    snapshot] I --> SEM[INcSemantic] SEM --> OUT[Machine actions] DEP[INcDependency list
    brand tables, coordinate systems,
    tool offsets, kinematics, ...] DEP -. injected .-> P DEP -. injected .-> E DEP -. injected .-> L DEP -. injected .-> SEM Stage Responsibility ISegmenter cuts the raw text into blocks. Three implementations ship — one line per block, and the two multi-line forms Heidenhain and Siemens programs need INcInitializer seeds the stream head with the machine's starting state, for example the configured home position Parsing recognizes the text: words, statements, cycle bodies, comments. Writes structure, never meaning Evaluation resolves anything the block computes for itself — variable reads and writes, arithmetic, conditional jumps, loops, and subprogram or macro calls, whose bodies are spliced into the stream so later stages walk them as if they had always been in the host file Logic the modal machine model: units, positioning mode, plane, feed, spindle, coolant, tool change and compensation, work offsets, tilt and RTCP, and the program-to-machine coordinate chain PostLogic carries the block's full modal context forward, so every block's data is self-contained Inspection back-fills derived values, reports words nothing consumed, and optionally snapshots the block INcSemantic turns the finished block into machine actions — linear and arc motion, teleports, tool change, spindle, dwell, stroke-limit checks Over 150 syntax units ship across those five stages, plus the per-brand lists that select and order them. Most syntax units implement ISituNcSyntax — they mutate the block in place. IExpandingNcSyntax exists for a unit that must turn one block into several. Note that the shipped call and repeat syntaxes are not expanders: they splice the callee's already-segmented blocks into the stream ahead of the current position, which keeps one block's identity intact through the rest of the pipeline. Composition and presets The runner is a container; its five lists are what make it a Fanuc runner or a Heidenhain one. ... ... ... ... ... Every unit implements IMakeXmlSource and registers itself with XFactory, so the whole pipeline round-trips through XML. Seven presets are built in: Preset Reads FanucNcRunner Fanuc G-code, including Custom Macro B SiemensNcRunner Sinumerik .mpf / .spf SyntecNcRunner Syntec G-code MazakNcRunner Mazak EIA/ISO HeidenhainNcRunner klartext and DIN/ISO, on one preset GeneralCsvRunner a CSV controller recording NxClRunner NX CLSF / APT-source cutter-location files The five brand presets also ship as standalone files under Resource/Controller/ with the .Controller extension, written by ControllerPresetWriter, so the load browser starts populated. Those files are regenerable snapshots — the static properties above are the source of truth, and the files are rewritten whenever a brand pipeline changes. Important Reading a preset file back requires the pipeline types to be registered first (Reg through Reg at startup). The loader drops unregistered entries silently rather than failing the load, so an unregistered process reads a hollow pipeline that parses nothing. A runner rehydrated from an older saved file keeps the syntax list it was saved with — nothing re-derives a brand's syntax list at read time. To pick up new brand syntaxes, take the current preset or a fresh NcRunnerSuit built from it. Missing system-wired dependencies are back-filled automatically on load; syntaxes are not. The dataflow Each block travels the pipeline as a SyntaxPiece carrying a JSON object. Every stage reads some keys, writes some keys, and removes the keys it has consumed. The convention is section plus term: the section key is a semantic name that is the same across brands (Unit, Feedrate, Motion, CoordinateOffset), while the controller's actual keyword lives in the section's Term field so the correspondence with the source text is never lost. A Fanuc block N162 X-14.696 Y-6.42 Z45.638, after the pipeline (matrices elided): { \"IndexNote\": {\"Symbol\":\"N\",\"Number\":162}, \"Positioning\": {\"Term\":\"G90\",\"Mode\":\"Absolute\"}, \"Unit\": {\"Term\":\"G21\",\"System\":\"Metric\"}, \"PlaneSelect\": {\"Term\":\"G17\",\"Plane\":\"XY\"}, \"Feedrate\": {\"FeedrateValue\":400,\"Term\":\"G94\",\"Unit\":\"mm/min\"}, \"SpindleSpeed\": {\"SpindleSpeed_rpm\":20000,\"Direction\":\"CW\"}, \"Coolant\": {\"IsOn\":true,\"Mode\":\"Flood\"}, \"ToolChange\": {\"ToolId\":4,\"IsChange\":false}, \"TiltTransform\": {\"Term\":\"G68.2\"}, \"ProgramToMcTransform\": [ {\"Source\":\"TiltTransform\", \"Mat4d\":[ ... ]}, {\"Source\":\"ToolHeightCompensation\", \"Mat4d\":[ ... ]}, {\"Source\":\"CoordinateOffset\", \"Mat4d\":[ ... ]}, {\"Source\":\"PivotTransform\", \"Mat4d\":[ ... ]} ], \"ToolHeightCompensation\": {\"Offset_mm\":16,\"Term\":\"G43\",\"OffsetId\":4}, \"CoordinateOffset\": {\"CoordinateId\":\"G54\",\"Offset_X\":72.4,\"Offset_Y\":-72.4,\"Offset_Z\":-116.44}, \"ProgramXyz\": {\"X\":-14.696,\"Y\":-6.42,\"Z\":45.638}, \"MachineCoordinateState\": {\"X\":140.5947,\"Y\":-78.8200,\"Z\":-124.4559}, \"MotionState\": {\"Term\":\"G01\"}, \"MotionEvent\": {\"Form\":\"McLinear\",\"IsRapid\":false}, \"RadiusCompensation\": {\"Term\":\"G40\",\"OffsetId\":0,\"Radius_mm\":0} } Three things are worth reading off that block. Program and machine coordinates are both present. The source states program coordinates; the pipeline keeps them and adds the solved machine coordinates, so a report or a UI can use either. ProgramToMcTransform flattens the cause chain. The program-to-machine mapping is not one opaque matrix but the ordered list of contributions that built it — tilt, tool height, work offset, pivot — each with its own matrix. When a machine coordinate is not what you expected, this array names which compensation is responsible without re-running anything. Modal state is complete on every block, even where the source line states none of it, because PostLogic carries the previous block's sections forward. A section the pipeline synthesized rather than read from the source carries an AddedBy marker (ModalCarry or Backfill), so a reader can tell authored data from carried data — see SyntaxStageKeys. Retention and the freeze A session retains every executed block for its lifetime, and the live JSON graph costs about 12 KB per line against about 1.6 KB for its compact UTF-8 form — which is what made multi-million-line programs exhaust a client machine. Once a block leaves the executing window its piece is frozen: the graph is replaced by those bytes (Freeze, IsFrozen). On a 25,000-line play that takes session retention from 406 MB to 142 MB. The switch is FreezeExecutedPieces, on by default. Downstream readers are unaffected — the JsonObject getter re-parses on demand and the encoding is byte-identical to the live form — but the object it returns is a fresh read-only snapshot per call, with no caching and no write-back. Two reads are not reference-equal, a mutation lands on a throwaway copy, and code that reads the same piece repeatedly should hold the snapshot in a local. To inspect the dataflow, snapshot it in the pipeline with the SnapshotSyntax entry each bundle carries (disabled by default) rather than holding pieces and poking them afterwards. Type discrimination is slightly looser after a round trip, because JSON has fewer types than the live graph: NaN and ±Infinity serialize as quoted strings and thaw as string nodes, and 5.0 freezes as 5, so an integer read of it succeeds where it previously would not. GetDouble maps the quoted non-finite spellings back to their double constants, so read numbers through it rather than through a raw node cast. Dependencies Machine and case data reach the syntaxes as a list of INcDependency objects rather than as fields on a shared configuration object. A syntax declares what it needs by interface and pulls it: // A syntax that needs the machine's home position asks for the interface, not for a class. var homeConfig = ncDependencyList.OfType().FirstOrDefault(); Adding a brand means adding a table that implements the interfaces its syntaxes ask for — the brand parameter tables derive from ControllerParameterTableBase. Per-case data travels as a proxy. Tool offsets, work-coordinate offsets, Siemens frames, Heidenhain datums and retained macro variables belong to a job, not to a controller configuration. Those entries sit in the pipeline list as placeholders that resolve, per session, against the owning project's per-case list — which is what lets one controller configuration be shared across projects. PipelineNcDependencyList is the raw list; consumers read the resolved view through GetEffectiveNcDependencyList. NcRunnerSuit bundles a runner with its per-case data as one file-loadable unit, so a whole parser configuration — pipeline and job data together — moves as a single file. Machine wiring ConfigureByMachiningChain takes the machining chain and settles what the pipeline needs to know about the physical machine: axis order, which axes are rotary and which linear, and the kinematics the coordinate syntaxes solve against. A five-axis machine, a four-axis machine and a twin-table machine all run the same program path — the difference is the chain, not the parser. Extending it Three kinds of customization need no rebuild of the libraries: Switch brand. var runner = SoftNcRunner.HeidenhainNcRunner; runner.ConfigureByMachiningChain(machine.Chain); Add a syntax for one machine's own vocabulary. A machine whose PLC uses a non-standard M168 for clamping needs a class implementing ISituNcSyntax and one entry in that project's pipeline list. No HiAPIs source changes. Declare OEM M-codes without writing code at all. IMCodeDeclarationConfig and MCodeEffects let a machine state what its own M-codes do — a composite spindle-and-coolant code, a tool-change trigger, turret T-word semantics — and MCodeExpansionSyntax expands them into the canonical ISO flags the shared consumers already understand. A code declared with no modeled effects is voiced once as DeclaredMCode--UnmodeledEffects instead of raising an unknown-code warning on every occurrence. Important Composing the pipeline is a licensed capability. Registering a unit that is not built in — into the syntax list, the dependency list, the semantics, the initializers or the segmenter — and executing an NC-embedded C# script both require the NcComposition licence feature. The check runs once per session at the run entry, so it covers project-XML load, whole-object replacement and direct list mutation alike. Degradation is silent and functional, not an error: external units are skipped for that session and named in one Composition--NotLicensed diagnostic, an external segmenter falls back to the single-line segmenter, and scripts are skipped with Script--NotLicensed. The runner's persisted lists are never mutated, so the project still saves correctly — but the simulation that ran is a different one. If you build against this surface, check for that diagnostic rather than assuming your unit ran. Built-in units are unrestricted in order, count, duplication and constructor configuration, and calling the public API from your own application or session script needs no extra licence. Brand support Coverage is stated in three states. Recognized but not simulated is a deliberate state, not a gap: the construct is consumed safely and reported with its own diagnostic id, so it can never be misread as something else — a PLANE AXIAL B+45 will not be mistaken for a rotary axis command. Brand Supported Recognized, not simulated Not supported Fanuc ISO core, canned cycles G73–G89 (XYZ / R / Q / F / P / K; rotary A/B/C words on a repeat are not taken on SoftNc), G41/G42, G43.4 RTCP, G53/G53.1, G68/G68.2/G69, G12.1/G13.1 polar with compensation, Custom Macro B (# variables, IF/GOTO, WHILE/DO), M98/M99 subprograms, G65/G66/G67 macro calls, G54.1 Pn / G54 Pn, G59.1–G59.9 bare G05 P HPCC selections (Hpcc--NoOp, Hpcc--HighSpeedCycleIgnored, Hpcc--UnsupportedFunction, Hpcc--UnevaluatedFunction, Hpcc--MissingFunctionWord) G10 programmable data setting, G50 spindle limit, G31 skip Siemens modal vocabulary, SUPA/G153, T=\"name\" with D offsets, $TC_DP tool tables, R-parameters and DEF variables with a full expression evaluator, $P_UIFR, TRANS/ATRANS/ROT/AROT/ROTS/AROTS frames, TRAORI/TRAFOOF, CYCLE800, MSG/STOPRE, CR=/TURN= arcs, L/named subprograms, MCALL, REPEAT, PROC/labels, GOTOF/GOTOB, IF/ELSE/ENDIF, WHILE/FOR/REPEAT-UNTIL/LOOP, AC()/IC()/DC()/ACP()/ACN(), the coded-position family, G74/G75 SCALE/ASCALE, MIRROR/AMIRROR, CROTS (SiemensFrame--Unsupported) SETAL Heidenhain klartext motion and FMAX, LN surface-normal blocks resolved into the rotary axes, M91, TOOL CALL with DL/DR, CYCL DEF 247 presets and CYCL DEF 7 additive shifts, CC/C arcs, I-prefixed incremental axis words on L/LN/C (rotary included) and on CC/CYCL CALL POS (X/Y/Z only), RL/RR/R0, M126/M127 with an incremental rotary word exempt from the shortest-path fold, M140, CYCL DEF 32, Q/QR parameters with the FN grammar and FN 9–12 jumps, PLANE SPATIAL, FUNCTION TCPM, M128/M129, machining cycles 200/232/251/252/253, CYCL CALL/CYCL CALL POS, CALL LBL with REP, CALL PGM, tilde continuation, BLK FORM, STOP, mirror image (G28 and CYCL DEF 8), and the DIN/ISO dialect with absolute I/J/K centres, the ISO label family, G247, G54 datum words and G70/G71 PLANE VECTOR (captured), PLANE EULER / POINTS / RELATIV / AXIAL / PROJECTED (HeidenhainPlane--Unsupported), unimplemented FN opcodes such as FN 18 SYSREAD, unrecognized CYCL DEF bodies (HeidenhainCycl--Unsupported), center-referenced FUNCTION TCPM REFPNT (Orientation-RefPoint--CntNotSimulated), and 3D-ToolComp along the LN surface normal (SurfaceNormal--CompNotSimulated) TOOL DEF, FK free contour, SL cycles, PATTERN DEF, TCH PROBE Syntec ISO core plus the Fanuc-family macro and subprogram vocabulary, polar interpolation bare G05 P HPCC selections, as Fanuc custom G macros, Pr parameter mapping, twin-head / twin-turret syntax Mazak EIA/ISO with the Fanuc-family macro and subprogram vocabulary, polar interpolation bare G05 P HPCC selections, as Fanuc Mazatrol conversational sections, MAZATROL ↔ EIA/ISO switching Note On the Heidenhain preset, DIN/ISO G28 is MIRROR IMAGE, not a Fanuc reference-point return, and ReferenceReturnSyntax is not in that preset's Logic list. HardNcRunner keeps the Fanuc reading, so the two engines are deliberately divergent on Heidenhain G28 files. Note Per-word incremental positioning is one mechanism, shared across brands. The Siemens IC() wrapper and the klartext I prefix both write the value under the plain axis key and stamp a per-axis entry — \"PositioningOverride\": {\"Y\":\"Incremental\"} — on the block root, so absolute and incremental words mix inside one block and only the marked axis is relative: on IC() and on the klartext L / LN / C / CC heads, a distance from the last programmed position; on CYCL CALL POS, from the coordinates of the previous CYCL CALL POS. The Siemens coded family (CAC(), CIC() and the rest) stamps the same section with CodedAbsolute / CodedIncremental instead of the plain pair, and the optimizer's incremental guard reads CodedIncremental too. That section is non-modal: it appears in no ModalCarry key set and never reaches the next block. Klartext states no modal G90/G91 at all — its Positioning section stays at the G90 default, and only the DIN/ISO dialect on that brand carries the modal pair. The CYCL DEF 7 datum-shift I words are a separate thing and write no override entry: they shift the active datum rather than measure from the tool position. Scope and testing Two limits sit outside the per-brand table and apply to everything in it. Milling only. Turning and tapping operations are not simulated. A program containing them parses as far as its milling content allows; the operations themselves are not modelled. Fanuc syntax is the primary test surface. All five presets are exercised, but Fanuc carries the most coverage, and a construct that is unusual in Fanuc but ordinary in another dialect is the likeliest place to meet an unimplemented case. The three-state table above exists so that such a case is reported rather than silently mis-read. Full five-axis RTCP is supported across the presets that have it — Fanuc G43.4, Heidenhain FUNCTION TCPM and M128, Siemens TRAORI. Loading a HardNc-era project Projects written for the legacy interpreter still load. Mechanism Purpose FromLegacyNcEnvXml builds a SoftNcRunner from a legacy configuration element the NcEnv XML alias a project saved under the old element name still deserializes the legacy version patches a project saved by an older build gains the syntaxes and semantics added since, according to the project API version it carries the system-wired back-fill a saved pipeline gains the runtime-wired dependencies it predates EnableSoftNcRunner set false to run the legacy interpreter for comparison The version patches cover projects back to the 3.1.163 era; the back-fill is unconditional, because the dependencies it adds are stateless runtime-wired singletons for which presence is the only question worth asking. See Also Heidenhain Support — the reader-facing page for klartext and Heidenhain DIN/ISO General NC Code Support — the reader-facing page for Fanuc, Syntec, Mazak and Siemens SINUMERIK" }, "technique/nc-optimization/corner-behavior.html": { "href": "technique/nc-optimization/corner-behavior.html", @@ -8382,7 +8407,7 @@ "technique/rendering/custom-rendering-canvas.html": { "href": "technique/rendering/custom-rendering-canvas.html", "title": "Building Your Own Rendering Canvas | HiAPI-C# 2025", - "summary": "Building Your Own Rendering Canvas This guide provides detailed implementation information for creating your own RenderingCanvas using the DispEngine. By understanding these implementation details, you can customize the rendering component for specific application needs or create implementations for other UI frameworks. Note For Windows Applications: If you are developing for Windows systems, it is recommended to directly use the existing RenderingCanvas implementations in the Hi.WinForm or Hi.WpfPlus packages, rather than creating your own. These implementations are fully tested, optimized, and maintained. The implementation details provided in this document are primarily for educational purposes or for developers who need to port RenderingCanvas to other platforms/frameworks. Basic DispEngine Usage The DispEngine is designed to display objects that implement the IDisplayee interface. This is the fundamental purpose of DispEngine - to render displayable objects. Assign IDisplayee to DispEngine.Displayee. Core Implementation Pattern When implementing a custom RenderingCanvas for a UI platform, follow these key steps: Initialize UI Component - Set up the UI control properties and event handling Configure DispEngine - Create and properly initialize the DispEngine instance Set Up Rendering Pipeline - Implement buffer swapping mechanism for visualization Handle User Input - Map platform-specific input events to DispEngine methods Manage Component Lifecycle - Ensure proper resource management and cleanup Let's examine the actual implementations in WinForm and WPF frameworks to understand these patterns in practice. WinForm Implementation Details The WinForm implementation in Hi.WinForm combines Windows Forms controls with the DispEngine rendering system. Core Properties and Fields Here are the essential properties and fields defined in the WinForm implementation: /// /// . /// public DispEngine DispEngine { get; } // Constants and structures for WM_TOUCH private const int WM_TOUCH = 0x0240; private const int TOUCHEVENTF_MOVE = 0x0001; private const int TOUCHEVENTF_DOWN = 0x0002; private const int TOUCHEVENTF_UP = 0x0004; [StructLayout(LayoutKind.Sequential)] private struct TOUCHINPUT { public int x; public int y; public IntPtr hSource; public int dwID; public int dwFlags; public int dwMask; public int dwTime; public IntPtr dwExtraInfo; public int cxContact; public int cyContact; } [DllImport(\"user32.dll\")] private static extern bool RegisterTouchWindow(IntPtr hWnd, uint ulFlags); [DllImport(\"user32.dll\")] private static extern bool GetTouchInputInfo(IntPtr hTouchInput, int cInputs, [In, Out] TOUCHINPUT[] pInputs, int cbSize); [DllImport(\"user32.dll\")] private static extern void CloseTouchInputHandle(IntPtr lParam); Initialization The initialization code sets up event handlers and creates the DispEngine: /// /// Ctor. /// /// displayees public unsafe RenderingCanvas(params IDisplayee[] displayees) { // Configure the control's visual styles SetStyle(ControlStyles.Selectable, true); SetStyle(ControlStyles.OptimizedDoubleBuffer, false); SetStyle(ControlStyles.ContainerControl, false); SetStyle(ControlStyles.ResizeRedraw, false); DoubleBuffered = true; InitializeComponent(); Dock = DockStyle.Fill; // Connect event handlers for user input and window events this.Resize += RenderingCanvas_Resize; this.VisibleChanged += RenderingCanvas_VisibleChanged; this.MouseMove += RenderingCanvas_MouseMove; this.MouseDown += RenderingCanvas_MouseDown; this.MouseUp += RenderingCanvas_MouseUp; this.MouseWheel += RenderingCanvas_MouseWheel; this.KeyDown += RenderingCanvas_KeyDown; this.KeyUp += RenderingCanvas_KeyUp; // Add focus event handler this.GotFocus += RenderingCanvas_GotFocus; this.HandleCreated += OnHandleCreated; // Enable touch input and click events for the control this.SetStyle(ControlStyles.StandardClick, true); this.SetStyle(ControlStyles.StandardDoubleClick, true); this.TabStop = true; // Initialize the DispEngine with provided displayees DispEngine = new DispEngine(displayees); DispEngine.BackgroundColor = new Vec3d(0.1, 0.1, 0.5); DispEngine.BackgroundOpacity = 0.1; DispEngine.SetViewToHomeView(); DispEngine.ImageRequestAfterBufferSwapped += DispEngine_ImageRequestAfterBufferSwapped; // Set initial size and start the rendering engine this.Size = new System.Drawing.Size(500, 300); DispEngine.Start(this.ClientSize.Width, this.ClientSize.Height); } Rendering Pipeline The rendering pipeline processes images from DispEngine and displays them: private unsafe void DispEngine_ImageRequestAfterBufferSwapped(byte* bgra_unsignedbyte_pixels, int w, int h) { // Create a bitmap from the raw pixel data provided by DispEngine Bitmap bitmap; bitmap = new Bitmap(new Bitmap(w, h, w * 4, PixelFormat.Format32bppArgb, new IntPtr(bgra_unsignedbyte_pixels))); // Update the background image and dispose the previous one Image pre = this.BackgroundImage; this.BackgroundImage = bitmap; pre?.Dispose(); } Input Handling Windows Message Handling for Touch WinForm implementation intercepts Windows touch messages and forwards them to DispEngine: /// /// Processes Windows messages, handling touch input and forwarding other messages to the base class. /// /// The Windows message to process. protected override void WndProc(ref Message m) { if (m.Msg == WM_TOUCH) { HandleTouchInput(m.WParam, m.LParam); return; } base.WndProc(ref m); } private void OnHandleCreated(object sender, EventArgs e) { // Register window to receive touch messages RegisterTouchWindow(this.Handle, 0); } private void HandleTouchInput(IntPtr wParam, IntPtr lParam) { int inputCount = wParam.ToInt32(); TOUCHINPUT[] inputs = new TOUCHINPUT[inputCount]; if (!GetTouchInputInfo(lParam, inputCount, inputs, Marshal.SizeOf(typeof(TOUCHINPUT)))) return; try { for (int i = 0; i < inputCount; i++) { TOUCHINPUT ti = inputs[i]; int touchId = ti.dwID; // Convert touch coordinates to client coordinates Point touchPoint = PointToClient(new Point(ti.x / 100, ti.y / 100)); if ((ti.dwFlags & TOUCHEVENTF_DOWN) != 0) { // Touch down event DispEngine.TouchDown(touchId, touchPoint.X, touchPoint.Y); this.Focus(); } else if ((ti.dwFlags & TOUCHEVENTF_MOVE) != 0) { // Touch move event DispEngine.TouchMove(touchId, touchPoint.X, touchPoint.Y); } else if ((ti.dwFlags & TOUCHEVENTF_UP) != 0) { // Touch up event DispEngine.TouchUp(touchId); } } } finally { CloseTouchInputHandle(lParam); } } The key aspect is mapping Windows touch events to DispEngine's touch API: // Inside HandleTouchInput method if ((ti.dwFlags & TOUCHEVENTF_DOWN) != 0) { // Touch down event - delegate to DispEngine DispEngine.TouchDown(touchId, touchPoint.X, touchPoint.Y); this.Focus(); } else if ((ti.dwFlags & TOUCHEVENTF_MOVE) != 0) { // Touch move event - delegate to DispEngine DispEngine.TouchMove(touchId, touchPoint.X, touchPoint.Y); } else if ((ti.dwFlags & TOUCHEVENTF_UP) != 0) { // Touch up event - delegate to DispEngine DispEngine.TouchUp(touchId); } Mouse Events private void RenderingCanvas_MouseMove(object sender, MouseEventArgs e) { // Update mouse position and handle drag transforms DispEngine.MouseMove(e.Location.X, e.Location.Y); DispEngine.MouseDragTransform(e.Location.X, e.Location.Y, new mouse_button_table__transform_view_by_mouse_drag_t() { LEFT_BUTTON = (long)MouseButtons.Left, RIGHT_BUTTON = (long)MouseButtons.Right }); } private void RenderingCanvas_MouseDown(object sender, MouseEventArgs e) { // Handle mouse button press DispEngine.MouseButtonDown((long)e.Button); this.Focus(); } private void RenderingCanvas_MouseUp(object sender, MouseEventArgs e) { // Handle mouse button release DispEngine.MouseButtonUp((long)e.Button); } private void RenderingCanvas_MouseWheel(object sender, MouseEventArgs e) { // Handle mouse wheel for zoom operations DispEngine.MouseWheel(0, e.Delta / 120); DispEngine.MouseWheelTransform(0, e.Delta / 120); } Keyboard Events /// protected override bool IsInputKey(Keys keyData) { //since in default, arrow does not trigger key event(keyDown and keyUp). return true; } /// /// Convert WinForms Keys to W3C KeyboardEvent.key string. /// static string WinFormsKeyToW3C(Keys key) => (key & Keys.KeyCode) switch { Keys.Home => \"Home\", Keys.End => \"End\", Keys.PageUp => \"PageUp\", Keys.PageDown => \"PageDown\", Keys.Left => \"ArrowLeft\", Keys.Right => \"ArrowRight\", Keys.Up => \"ArrowUp\", Keys.Down => \"ArrowDown\", Keys.LShiftKey or Keys.RShiftKey or Keys.ShiftKey => \"Shift\", Keys.LControlKey or Keys.RControlKey or Keys.ControlKey => \"Control\", Keys.LMenu or Keys.RMenu or Keys.Menu => \"Alt\", Keys.Return => \"Enter\", Keys.Escape => \"Escape\", Keys.Back => \"Backspace\", Keys.Tab => \"Tab\", Keys.Delete => \"Delete\", Keys.Insert => \"Insert\", Keys.Space => \" \", Keys.F1 => \"F1\", Keys.F2 => \"F2\", Keys.F3 => \"F3\", Keys.F4 => \"F4\", Keys.F5 => \"F5\", Keys.F6 => \"F6\", Keys.F7 => \"F7\", Keys.F8 => \"F8\", Keys.F9 => \"F9\", Keys.F10 => \"F10\", Keys.F11 => \"F11\", Keys.F12 => \"F12\", >= Keys.A and <= Keys.Z => ((char)('a' + ((key & Keys.KeyCode) - Keys.A))).ToString(), >= Keys.D0 and <= Keys.D9 => ((char)('0' + ((key & Keys.KeyCode) - Keys.D0))).ToString(), _ => \"Unidentified\" }; private void RenderingCanvas_KeyDown(object sender, KeyEventArgs e) { Focus(); string key = WinFormsKeyToW3C(e.KeyData); DispEngine.KeyDown(key); DispEngine.KeyDownTransform(key, new key_table__transform_view_by_key_pressing_t() { HOME = \"Home\", PAGE_UP = \"PageUp\", PAGE_DOWN = \"PageDown\", F1 = \"F1\", F2 = \"F2\", F3 = \"F3\", F4 = \"F4\", SHIFT = \"Shift\", ARROW_LEFT = \"ArrowLeft\", ARROW_RIGHT = \"ArrowRight\", ARROW_DOWN = \"ArrowDown\", ARROW_UP = \"ArrowUp\" }); } private void RenderingCanvas_KeyUp(object sender, KeyEventArgs e) { DispEngine.KeyUp(WinFormsKeyToW3C(e.KeyData)); } Lifecycle Management Window event handling ensures proper state management: private void RenderingCanvas_Resize(object sender, EventArgs e) { // Notify DispEngine of size changes DispEngine.Resize(this.ClientSize.Width, this.ClientSize.Height); } private void RenderingCanvas_VisibleChanged(object sender, EventArgs e) { // Update visibility state in DispEngine DispEngine.IsVisible = this.Visible; } Resource Cleanup /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { // Dispose the DispEngine to free resources DispEngine.Dispose(); components.Dispose(); } base.Dispose(disposing); } WPF Implementation Details The WPF implementation uses WPF-specific controls and mechanisms but follows the same core pattern. Core Properties /// /// The DispEngine instance that handles rendering and user interactions /// public DispEngine DispEngine { get; } = new DispEngine(); /// /// Internal container for rendering content /// private UserControl DisplayerPane { get; } /// /// Dictionary to store touch point information /// private Dictionary TouchingPointsMap { get; } = new Dictionary(); /// /// Dictionary to store previous positions of touch points /// private Dictionary PreviousTouchingPointsMap { get; } = new Dictionary(); Initialization /// /// Initializes a new instance of the RenderingCanvas /// public RenderingCanvas() { DispEngine.BackgroundColor = new Vec3d(0.1, 0.1, 0.5); DispEngine.BackgroundOpacity = 0.1; // Configure the main control properties HorizontalAlignment = HorizontalAlignment.Stretch; VerticalAlignment = VerticalAlignment.Stretch; Focusable = true; KeyboardNavigation.SetDirectionalNavigation(this, KeyboardNavigationMode.Cycle); DataContextChanged += CanvasDataContextChanged; // Create and configure the display pane DisplayerPane = new UserControl(); DisplayerPane.HorizontalAlignment = HorizontalAlignment.Stretch; DisplayerPane.VerticalAlignment = VerticalAlignment.Stretch; DisplayerPane.Focusable = true; DisplayerPane.IsTabStop = true; // Connect event handlers for user input and window events DisplayerPane.SizeChanged += RenderingCanvas_SizeChanged; DisplayerPane.MouseMove += RenderingCanvas_MouseMove; DisplayerPane.MouseDown += RenderingCanvas_MouseDown; DisplayerPane.MouseUp += RenderingCanvas_MouseUp; DisplayerPane.MouseWheel += RenderingCanvas_MouseWheel; DisplayerPane.KeyDown += RenderingCanvas_KeyDown; DisplayerPane.KeyUp += RenderingCanvas_KeyUp; DisplayerPane.Loaded += RenderingCanvas_Loaded; DisplayerPane.Unloaded += RenderingCanvas_Unloaded; DisplayerPane.IsVisibleChanged += DisplayerPane_IsVisibleChanged; // Add touch event handlers DisplayerPane.TouchDown += RenderingCanvas_TouchDown; DisplayerPane.TouchMove += RenderingCanvas_TouchMove; DisplayerPane.TouchUp += RenderingCanvas_TouchUp; // Enable touch support this.IsManipulationEnabled = true; // Initialize power management InitializePowerManagement(); // Add the display pane to this control's content Content = DisplayerPane; } Rendering Pipeline /// /// Handles the buffer swapped event from DispEngine /// private unsafe void RenderingCanvas_BufferSwapped(byte* data, int w, int h) { if (data == null) return; Span bgra = new Span(data, w * h * 4); // Copy pixel data from DispEngine int n = w * h * 4; byte[] arr = new byte[n]; for (int i = 0; i < n; i++) arr[i] = data[i]; // Update UI on the UI thread DisplayerPane.Dispatcher.InvokeAsync(() => { BitmapSource bitmap = BitmapSource.Create(w, h, 1, 1, PixelFormats.Bgra32, null, arr, w * 4); DisplayerPane.Background = new ImageBrush(bitmap); }); } /// /// Handles the size changed event /// private void RenderingCanvas_SizeChanged(object sender, SizeChangedEventArgs e) { // Notify DispEngine of size changes DispEngine.Resize((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height); } /// /// Handles visibility changes /// private unsafe void DisplayerPane_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { // Update visibility state in DispEngine DispEngine.IsVisible = IsVisible; } Mouse and Keyboard Handling /// /// Helper method to get mouse button mask /// internal static HiMouseButtonMask GetMouseButtonMask(MouseDevice device) { HiMouseButtonMask mouseButtonMask = 0; mouseButtonMask.SetLeftPressed(device.LeftButton == MouseButtonState.Pressed); mouseButtonMask.SetMiddlePressed(device.MiddleButton == MouseButtonState.Pressed); mouseButtonMask.SetRightPressed(device.RightButton == MouseButtonState.Pressed); mouseButtonMask.SetXButton1Pressed(device.XButton1 == MouseButtonState.Pressed); mouseButtonMask.SetXButton2Pressed(device.XButton2 == MouseButtonState.Pressed); return mouseButtonMask; } /// /// Handles the mouse wheel event /// private void RenderingCanvas_MouseWheel(object sender, MouseWheelEventArgs e) { // Handle mouse wheel for zoom operations DispEngine.MouseWheel(0, e.Delta / 120); DispEngine.MouseWheelTransform(0, e.Delta / 120); } /// /// Handles the mouse up event /// private void RenderingCanvas_MouseUp(object sender, MouseButtonEventArgs e) { // Handle mouse button release DispEngine.MouseButtonUp((long)e.ChangedButton); (sender as UIElement)?.ReleaseMouseCapture(); } /// /// Handles the mouse down event /// private void RenderingCanvas_MouseDown(object sender, MouseButtonEventArgs e) { // Handle mouse button press DispEngine.MouseButtonDown((long)e.ChangedButton); DisplayerPane.Focus(); (sender as UIElement)?.CaptureMouse(); } /// /// Handles the mouse move event /// private void RenderingCanvas_MouseMove(object sender, MouseEventArgs e) { // Update mouse position and handle drag transforms Point p = e.GetPosition(DisplayerPane); DispEngine.MouseMove((int)p.X, (int)p.Y); DispEngine.MouseDragTransform((int)p.X, (int)p.Y, new mouse_button_table__transform_view_by_mouse_drag_t() { LEFT_BUTTON = (long)MouseButton.Left, RIGHT_BUTTON = (long)MouseButton.Right }); } /// /// Convert WPF Key to W3C KeyboardEvent.key string. /// static string WpfKeyToW3C(Key key) => key switch { Key.Home => \"Home\", Key.End => \"End\", Key.PageUp => \"PageUp\", Key.PageDown => \"PageDown\", Key.Left => \"ArrowLeft\", Key.Right => \"ArrowRight\", Key.Up => \"ArrowUp\", Key.Down => \"ArrowDown\", Key.LeftShift or Key.RightShift => \"Shift\", Key.LeftCtrl or Key.RightCtrl => \"Control\", Key.LeftAlt or Key.RightAlt => \"Alt\", Key.Return => \"Enter\", Key.Escape => \"Escape\", Key.Back => \"Backspace\", Key.Tab => \"Tab\", Key.Delete => \"Delete\", Key.Insert => \"Insert\", Key.Space => \" \", Key.F1 => \"F1\", Key.F2 => \"F2\", Key.F3 => \"F3\", Key.F4 => \"F4\", Key.F5 => \"F5\", Key.F6 => \"F6\", Key.F7 => \"F7\", Key.F8 => \"F8\", Key.F9 => \"F9\", Key.F10 => \"F10\", Key.F11 => \"F11\", Key.F12 => \"F12\", >= Key.A and <= Key.Z => ((char)('a' + (key - Key.A))).ToString(), >= Key.D0 and <= Key.D9 => ((char)('0' + (key - Key.D0))).ToString(), _ => \"Unidentified\" }; /// /// Handles the key up event /// private void RenderingCanvas_KeyUp(object sender, KeyEventArgs e) { DispEngine.KeyUp(WpfKeyToW3C(e.Key)); } /// /// Handles the key down event /// private void RenderingCanvas_KeyDown(object sender, KeyEventArgs e) { string key = WpfKeyToW3C(e.Key); DispEngine.KeyDown(key); DispEngine.KeyDownTransform(key, new key_table__transform_view_by_key_pressing_t() { HOME = \"Home\", PAGE_UP = \"PageUp\", PAGE_DOWN = \"PageDown\", F1 = \"F1\", F2 = \"F2\", F3 = \"F3\", F4 = \"F4\", SHIFT = \"Shift\", ARROW_LEFT = \"ArrowLeft\", ARROW_RIGHT = \"ArrowRight\", ARROW_DOWN = \"ArrowDown\", ARROW_UP = \"ArrowUp\" }); } Lifecycle Management /// /// Handles window state changes (maximize, minimize, etc.) /// private unsafe void RenderingCanvas_StateChanged(object sender, EventArgs e) { switch ((sender as Window).WindowState) { case WindowState.Maximized: DispEngine.IsVisible = true; break; case WindowState.Minimized: DispEngine.IsVisible = false; break; case WindowState.Normal: DispEngine.IsVisible = true; break; } } /// /// Handles data context changes /// private unsafe void CanvasDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { DispEngine pre = e.OldValue as DispEngine; DispEngine cur = e.NewValue as DispEngine; //child's binding event is triggered after IsVisible event and Load event. if (pre != null) //this section will never occur if the datacontext not set twice. { pre.Terminate(); pre.ImageRequestAfterBufferSwapped -= RenderingCanvas_BufferSwapped; } if (cur != null) { cur.ImageRequestAfterBufferSwapped += RenderingCanvas_BufferSwapped; cur.Start((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height); cur.IsVisible = IsVisible; } } /// /// Reference to the current window containing this control /// private Window currentWindow; /// /// Gets or sets the current window, connecting or disconnecting state change events /// Window CurrentWindow { get => currentWindow; set { if (currentWindow != null) currentWindow.StateChanged -= RenderingCanvas_StateChanged; currentWindow = value; if (currentWindow != null) currentWindow.StateChanged += RenderingCanvas_StateChanged; } } /// /// Handles the loaded event /// private unsafe void RenderingCanvas_Loaded(object sender, RoutedEventArgs e) { // Get the window containing this control CurrentWindow = Window.GetWindow(this); // Set up DispEngine rendering DispEngine.ImageRequestAfterBufferSwapped -= RenderingCanvas_BufferSwapped; DispEngine.ImageRequestAfterBufferSwapped += RenderingCanvas_BufferSwapped; DispEngine.Start((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height); DispEngine.IsVisible = IsVisible; } /// /// Handles the unloaded event /// private unsafe void RenderingCanvas_Unloaded(object sender, RoutedEventArgs e) { DispEngine.IsVisible = IsVisible; DispEngine.ImageRequestAfterBufferSwapped -= RenderingCanvas_BufferSwapped; CurrentWindow = null; } Resource Cleanup /// /// Flag to track disposed state /// private bool disposedValue; /// /// Disposes managed resources /// protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // Unsubscribe from power events SystemEvents.PowerModeChanged -= SystemEvents_PowerModeChanged; // Dispose the DispEngine to free resources DispEngine.Dispose(); } disposedValue = true; } } /// /// Public dispose method to free resources /// public void Dispose() { // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method Dispose(disposing: true); GC.SuppressFinalize(this); } Core DispEngine Integration Patterns 1. Initialization Sequence // Create DispEngine (optionally with displayees) var engine = new DispEngine(displayees); // Set up image buffer callback engine.ImageRequestAfterBufferSwapped += OnBufferSwapped; // Initialize with canvas size engine.Start(width, height); // Set initial view (optional) engine.SetViewToHomeView(); 2. Render Loop The rendering process follows this pattern: DispEngine processes IDisplayee objects Buffer is swapped and callback is triggered UI framework renders the buffer to screen User input triggers view updates Process repeats 3. Complete User Input Mapping All user interactions must be mapped to DispEngine methods: User Action DispEngine Method Mouse move MouseMove(int, int) Mouse drag MouseDragTransform(int, int, mouse_button_table__transform_view_by_mouse_drag_t) Mouse button MouseButtonDown(long) / MouseButtonUp(long) Mouse wheel MouseWheel(int, int) and MouseWheelTransform(int, int, double) Key press KeyDown(string) / KeyUp(string) and KeyDownTransform(string, key_table__transform_view_by_key_pressing_t) Touch events TouchDown(int, int, int) / TouchMove(int, int, int) / TouchUp(int) 4. Proper Resource Cleanup Resource management is critical for proper operation: // In dispose method DispEngine.ImageRequestAfterBufferSwapped -= OnBufferSwapped; DispEngine.Terminate(); DispEngine.Dispose(); Advanced Implementation Considerations When creating custom implementations, consider these aspects: View Manipulation Use SketchView to directly access or modify the view matrix: // Get current view matrix Mat4d currentView = engine.SketchView; // Apply custom rotation Mat4d rotation = Mat4d.RotateX(Math.PI/4); engine.SketchView = currentView * rotation; See Also DispEngine IDisplayee Vec2d Mat4d Using RenderingCanvas with DispEngine — the shipped controls this guide reimplements" + "summary": "Building Your Own Rendering Canvas This guide provides detailed implementation information for creating your own RenderingCanvas using the DispEngine. By understanding these implementation details, you can customize the rendering component for specific application needs or create implementations for other UI frameworks. Note For Windows Applications: If you are developing for Windows systems, it is recommended to directly use the existing RenderingCanvas implementations in the Hi.WinForm or Hi.WpfPlus packages, rather than creating your own. These implementations are fully tested, optimized, and maintained. The implementation details provided in this document are primarily for educational purposes or for developers who need to port RenderingCanvas to other platforms/frameworks. Basic DispEngine Usage The DispEngine is designed to display objects that implement the IDisplayee interface. This is the fundamental purpose of DispEngine - to render displayable objects. Assign IDisplayee to DispEngine.Displayee. Core Implementation Pattern When implementing a custom RenderingCanvas for a UI platform, follow these key steps: Initialize UI Component - Set up the UI control properties and event handling Configure DispEngine - Create and properly initialize the DispEngine instance Set Up Rendering Pipeline - Implement buffer swapping mechanism for visualization Handle User Input - Map platform-specific input events to DispEngine methods Manage Component Lifecycle - Ensure proper resource management and cleanup Let's examine the actual implementations in WinForm and WPF frameworks to understand these patterns in practice. WinForm Implementation Details The WinForm implementation in Hi.WinForm combines Windows Forms controls with the DispEngine rendering system. Core Properties and Fields Here are the essential properties and fields defined in the WinForm implementation: /// /// . /// public DispEngine DispEngine { get; } // Constants and structures for WM_TOUCH private const int WM_TOUCH = 0x0240; private const int TOUCHEVENTF_MOVE = 0x0001; private const int TOUCHEVENTF_DOWN = 0x0002; private const int TOUCHEVENTF_UP = 0x0004; [StructLayout(LayoutKind.Sequential)] private struct TOUCHINPUT { public int x; public int y; public IntPtr hSource; public int dwID; public int dwFlags; public int dwMask; public int dwTime; public IntPtr dwExtraInfo; public int cxContact; public int cyContact; } [DllImport(\"user32.dll\")] private static extern bool RegisterTouchWindow(IntPtr hWnd, uint ulFlags); [DllImport(\"user32.dll\")] private static extern bool GetTouchInputInfo(IntPtr hTouchInput, int cInputs, [In, Out] TOUCHINPUT[] pInputs, int cbSize); [DllImport(\"user32.dll\")] private static extern void CloseTouchInputHandle(IntPtr lParam); Initialization The initialization code sets up event handlers and creates the DispEngine: /// /// Ctor. /// /// displayees public unsafe RenderingCanvas(params IDisplayee[] displayees) { // Configure the control's visual styles SetStyle(ControlStyles.Selectable, true); SetStyle(ControlStyles.OptimizedDoubleBuffer, false); SetStyle(ControlStyles.ContainerControl, false); SetStyle(ControlStyles.ResizeRedraw, false); DoubleBuffered = true; InitializeComponent(); Dock = DockStyle.Fill; // Connect event handlers for user input and window events this.Resize += RenderingCanvas_Resize; this.VisibleChanged += RenderingCanvas_VisibleChanged; this.MouseMove += RenderingCanvas_MouseMove; this.MouseDown += RenderingCanvas_MouseDown; this.MouseUp += RenderingCanvas_MouseUp; this.MouseWheel += RenderingCanvas_MouseWheel; this.KeyDown += RenderingCanvas_KeyDown; this.KeyUp += RenderingCanvas_KeyUp; // Add focus event handler this.GotFocus += RenderingCanvas_GotFocus; this.HandleCreated += OnHandleCreated; // Enable touch input and click events for the control this.SetStyle(ControlStyles.StandardClick, true); this.SetStyle(ControlStyles.StandardDoubleClick, true); this.TabStop = true; // Initialize the DispEngine with provided displayees DispEngine = new DispEngine(displayees); DispEngine.BackgroundColor = new Vec3d(0.1, 0.1, 0.5); DispEngine.BackgroundOpacity = 0.1; DispEngine.SetViewToHomeView(); DispEngine.FrameReady += DispEngine_FrameReady; // Set initial size and start the rendering engine this.Size = new System.Drawing.Size(500, 300); DispEngine.Start(this.ClientSize.Width, this.ClientSize.Height); } Rendering Pipeline The rendering pipeline processes images from DispEngine and displays them: private unsafe void DispEngine_FrameReady(byte* bgra_unsignedbyte_pixels, int w, int h, FramePins pins) { // Create a bitmap from the raw pixel data provided by DispEngine Bitmap bitmap; bitmap = new Bitmap(new Bitmap(w, h, w * 4, PixelFormat.Format32bppArgb, new IntPtr(bgra_unsignedbyte_pixels))); // Update the background image and dispose the previous one Image pre = this.BackgroundImage; this.BackgroundImage = bitmap; pre?.Dispose(); } Input Handling Windows Message Handling for Touch WinForm implementation intercepts Windows touch messages and forwards them to DispEngine: /// /// Processes Windows messages, handling touch input and forwarding other messages to the base class. /// /// The Windows message to process. protected override void WndProc(ref Message m) { if (m.Msg == WM_TOUCH) { HandleTouchInput(m.WParam, m.LParam); return; } base.WndProc(ref m); } private void OnHandleCreated(object sender, EventArgs e) { // Register window to receive touch messages RegisterTouchWindow(this.Handle, 0); } private void HandleTouchInput(IntPtr wParam, IntPtr lParam) { int inputCount = wParam.ToInt32(); TOUCHINPUT[] inputs = new TOUCHINPUT[inputCount]; if (!GetTouchInputInfo(lParam, inputCount, inputs, Marshal.SizeOf(typeof(TOUCHINPUT)))) return; try { for (int i = 0; i < inputCount; i++) { TOUCHINPUT ti = inputs[i]; int touchId = ti.dwID; // Convert touch coordinates to client coordinates Point touchPoint = PointToClient(new Point(ti.x / 100, ti.y / 100)); if ((ti.dwFlags & TOUCHEVENTF_DOWN) != 0) { // Touch down event DispEngine.TouchDown(touchId, touchPoint.X, touchPoint.Y); this.Focus(); } else if ((ti.dwFlags & TOUCHEVENTF_MOVE) != 0) { // Touch move event DispEngine.TouchMove(touchId, touchPoint.X, touchPoint.Y); } else if ((ti.dwFlags & TOUCHEVENTF_UP) != 0) { // Touch up event DispEngine.TouchUp(touchId); } } } finally { CloseTouchInputHandle(lParam); } } The key aspect is mapping Windows touch events to DispEngine's touch API: // Inside HandleTouchInput method if ((ti.dwFlags & TOUCHEVENTF_DOWN) != 0) { // Touch down event - delegate to DispEngine DispEngine.TouchDown(touchId, touchPoint.X, touchPoint.Y); this.Focus(); } else if ((ti.dwFlags & TOUCHEVENTF_MOVE) != 0) { // Touch move event - delegate to DispEngine DispEngine.TouchMove(touchId, touchPoint.X, touchPoint.Y); } else if ((ti.dwFlags & TOUCHEVENTF_UP) != 0) { // Touch up event - delegate to DispEngine DispEngine.TouchUp(touchId); } Mouse Events private void RenderingCanvas_MouseMove(object sender, MouseEventArgs e) { // Update mouse position and handle drag transforms DispEngine.MouseMove(e.Location.X, e.Location.Y); DispEngine.MouseDragTransform(e.Location.X, e.Location.Y, new mouse_button_table__transform_view_by_mouse_drag_t() { LEFT_BUTTON = (long)MouseButtons.Left, RIGHT_BUTTON = (long)MouseButtons.Right }); } private void RenderingCanvas_MouseDown(object sender, MouseEventArgs e) { // Handle mouse button press DispEngine.MouseButtonDown((long)e.Button); this.Focus(); } private void RenderingCanvas_MouseUp(object sender, MouseEventArgs e) { // Handle mouse button release DispEngine.MouseButtonUp((long)e.Button); } private void RenderingCanvas_MouseWheel(object sender, MouseEventArgs e) { // Handle mouse wheel for zoom operations DispEngine.MouseWheel(0, e.Delta / 120); DispEngine.MouseWheelTransform(0, e.Delta / 120); } Keyboard Events /// protected override bool IsInputKey(Keys keyData) { //since in default, arrow does not trigger key event(keyDown and keyUp). return true; } /// /// Convert WinForms Keys to W3C KeyboardEvent.key string. /// static string WinFormsKeyToW3C(Keys key) => (key & Keys.KeyCode) switch { Keys.Home => \"Home\", Keys.End => \"End\", Keys.PageUp => \"PageUp\", Keys.PageDown => \"PageDown\", Keys.Left => \"ArrowLeft\", Keys.Right => \"ArrowRight\", Keys.Up => \"ArrowUp\", Keys.Down => \"ArrowDown\", Keys.LShiftKey or Keys.RShiftKey or Keys.ShiftKey => \"Shift\", Keys.LControlKey or Keys.RControlKey or Keys.ControlKey => \"Control\", Keys.LMenu or Keys.RMenu or Keys.Menu => \"Alt\", Keys.Return => \"Enter\", Keys.Escape => \"Escape\", Keys.Back => \"Backspace\", Keys.Tab => \"Tab\", Keys.Delete => \"Delete\", Keys.Insert => \"Insert\", Keys.Space => \" \", Keys.F1 => \"F1\", Keys.F2 => \"F2\", Keys.F3 => \"F3\", Keys.F4 => \"F4\", Keys.F5 => \"F5\", Keys.F6 => \"F6\", Keys.F7 => \"F7\", Keys.F8 => \"F8\", Keys.F9 => \"F9\", Keys.F10 => \"F10\", Keys.F11 => \"F11\", Keys.F12 => \"F12\", >= Keys.A and <= Keys.Z => ((char)('a' + ((key & Keys.KeyCode) - Keys.A))).ToString(), >= Keys.D0 and <= Keys.D9 => ((char)('0' + ((key & Keys.KeyCode) - Keys.D0))).ToString(), _ => \"Unidentified\" }; private void RenderingCanvas_KeyDown(object sender, KeyEventArgs e) { Focus(); string key = WinFormsKeyToW3C(e.KeyData); DispEngine.KeyDown(key); DispEngine.KeyDownTransform(key, new key_table__transform_view_by_key_pressing_t() { HOME = \"Home\", PAGE_UP = \"PageUp\", PAGE_DOWN = \"PageDown\", F1 = \"F1\", F2 = \"F2\", F3 = \"F3\", F4 = \"F4\", SHIFT = \"Shift\", ARROW_LEFT = \"ArrowLeft\", ARROW_RIGHT = \"ArrowRight\", ARROW_DOWN = \"ArrowDown\", ARROW_UP = \"ArrowUp\" }); } private void RenderingCanvas_KeyUp(object sender, KeyEventArgs e) { DispEngine.KeyUp(WinFormsKeyToW3C(e.KeyData)); } Lifecycle Management Window event handling ensures proper state management: private void RenderingCanvas_Resize(object sender, EventArgs e) { // Notify DispEngine of size changes DispEngine.Resize(this.ClientSize.Width, this.ClientSize.Height); } private void RenderingCanvas_VisibleChanged(object sender, EventArgs e) { // Update visibility state in DispEngine DispEngine.IsVisible = this.Visible; } Resource Cleanup /// /// Clean up any resources being used. /// /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { // Dispose the DispEngine to free resources DispEngine.Dispose(); components.Dispose(); } base.Dispose(disposing); } WPF Implementation Details The WPF implementation uses WPF-specific controls and mechanisms but follows the same core pattern. Core Properties /// /// The DispEngine instance that handles rendering and user interactions /// public DispEngine DispEngine { get; } = new DispEngine(); /// /// Internal container for rendering content /// private UserControl DisplayerPane { get; } /// /// Dictionary to store touch point information /// private Dictionary TouchingPointsMap { get; } = new Dictionary(); /// /// Dictionary to store previous positions of touch points /// private Dictionary PreviousTouchingPointsMap { get; } = new Dictionary(); Initialization /// /// Initializes a new instance of the RenderingCanvas /// public RenderingCanvas() { DispEngine.BackgroundColor = new Vec3d(0.1, 0.1, 0.5); DispEngine.BackgroundOpacity = 0.1; // Configure the main control properties HorizontalAlignment = HorizontalAlignment.Stretch; VerticalAlignment = VerticalAlignment.Stretch; Focusable = true; KeyboardNavigation.SetDirectionalNavigation(this, KeyboardNavigationMode.Cycle); DataContextChanged += CanvasDataContextChanged; // Create and configure the display pane DisplayerPane = new UserControl(); DisplayerPane.HorizontalAlignment = HorizontalAlignment.Stretch; DisplayerPane.VerticalAlignment = VerticalAlignment.Stretch; DisplayerPane.Focusable = true; DisplayerPane.IsTabStop = true; // Connect event handlers for user input and window events DisplayerPane.SizeChanged += RenderingCanvas_SizeChanged; DisplayerPane.MouseMove += RenderingCanvas_MouseMove; DisplayerPane.MouseDown += RenderingCanvas_MouseDown; DisplayerPane.MouseUp += RenderingCanvas_MouseUp; DisplayerPane.MouseWheel += RenderingCanvas_MouseWheel; DisplayerPane.KeyDown += RenderingCanvas_KeyDown; DisplayerPane.KeyUp += RenderingCanvas_KeyUp; DisplayerPane.Loaded += RenderingCanvas_Loaded; DisplayerPane.Unloaded += RenderingCanvas_Unloaded; DisplayerPane.IsVisibleChanged += DisplayerPane_IsVisibleChanged; // Add touch event handlers DisplayerPane.TouchDown += RenderingCanvas_TouchDown; DisplayerPane.TouchMove += RenderingCanvas_TouchMove; DisplayerPane.TouchUp += RenderingCanvas_TouchUp; // Enable touch support this.IsManipulationEnabled = true; // Initialize power management InitializePowerManagement(); // Add the display pane to this control's content Content = DisplayerPane; } Rendering Pipeline /// /// Handles the buffer swapped event from DispEngine /// private unsafe void RenderingCanvas_BufferSwapped(byte* data, int w, int h, FramePins pins) { if (data == null) return; Span bgra = new Span(data, w * h * 4); // Copy pixel data from DispEngine int n = w * h * 4; byte[] arr = new byte[n]; for (int i = 0; i < n; i++) arr[i] = data[i]; // Update UI on the UI thread DisplayerPane.Dispatcher.InvokeAsync(() => { BitmapSource bitmap = BitmapSource.Create(w, h, 1, 1, PixelFormats.Bgra32, null, arr, w * 4); DisplayerPane.Background = new ImageBrush(bitmap); }); } /// /// Handles the size changed event /// private void RenderingCanvas_SizeChanged(object sender, SizeChangedEventArgs e) { // Notify DispEngine of size changes DispEngine.Resize((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height); } /// /// Handles visibility changes /// private unsafe void DisplayerPane_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e) { // Update visibility state in DispEngine DispEngine.IsVisible = IsVisible; } Mouse and Keyboard Handling /// /// Helper method to get mouse button mask /// internal static HiMouseButtonMask GetMouseButtonMask(MouseDevice device) { HiMouseButtonMask mouseButtonMask = 0; mouseButtonMask.SetLeftPressed(device.LeftButton == MouseButtonState.Pressed); mouseButtonMask.SetMiddlePressed(device.MiddleButton == MouseButtonState.Pressed); mouseButtonMask.SetRightPressed(device.RightButton == MouseButtonState.Pressed); mouseButtonMask.SetXButton1Pressed(device.XButton1 == MouseButtonState.Pressed); mouseButtonMask.SetXButton2Pressed(device.XButton2 == MouseButtonState.Pressed); return mouseButtonMask; } /// /// Handles the mouse wheel event /// private void RenderingCanvas_MouseWheel(object sender, MouseWheelEventArgs e) { // Handle mouse wheel for zoom operations DispEngine.MouseWheel(0, e.Delta / 120); DispEngine.MouseWheelTransform(0, e.Delta / 120); } /// /// Handles the mouse up event /// private void RenderingCanvas_MouseUp(object sender, MouseButtonEventArgs e) { // Handle mouse button release DispEngine.MouseButtonUp((long)e.ChangedButton); (sender as UIElement)?.ReleaseMouseCapture(); } /// /// Handles the mouse down event /// private void RenderingCanvas_MouseDown(object sender, MouseButtonEventArgs e) { // Handle mouse button press DispEngine.MouseButtonDown((long)e.ChangedButton); DisplayerPane.Focus(); (sender as UIElement)?.CaptureMouse(); } /// /// Handles the mouse move event /// private void RenderingCanvas_MouseMove(object sender, MouseEventArgs e) { // Update mouse position and handle drag transforms Point p = e.GetPosition(DisplayerPane); DispEngine.MouseMove((int)p.X, (int)p.Y); DispEngine.MouseDragTransform((int)p.X, (int)p.Y, new mouse_button_table__transform_view_by_mouse_drag_t() { LEFT_BUTTON = (long)MouseButton.Left, RIGHT_BUTTON = (long)MouseButton.Right }); } /// /// Convert WPF Key to W3C KeyboardEvent.key string. /// static string WpfKeyToW3C(Key key) => key switch { Key.Home => \"Home\", Key.End => \"End\", Key.PageUp => \"PageUp\", Key.PageDown => \"PageDown\", Key.Left => \"ArrowLeft\", Key.Right => \"ArrowRight\", Key.Up => \"ArrowUp\", Key.Down => \"ArrowDown\", Key.LeftShift or Key.RightShift => \"Shift\", Key.LeftCtrl or Key.RightCtrl => \"Control\", Key.LeftAlt or Key.RightAlt => \"Alt\", Key.Return => \"Enter\", Key.Escape => \"Escape\", Key.Back => \"Backspace\", Key.Tab => \"Tab\", Key.Delete => \"Delete\", Key.Insert => \"Insert\", Key.Space => \" \", Key.F1 => \"F1\", Key.F2 => \"F2\", Key.F3 => \"F3\", Key.F4 => \"F4\", Key.F5 => \"F5\", Key.F6 => \"F6\", Key.F7 => \"F7\", Key.F8 => \"F8\", Key.F9 => \"F9\", Key.F10 => \"F10\", Key.F11 => \"F11\", Key.F12 => \"F12\", >= Key.A and <= Key.Z => ((char)('a' + (key - Key.A))).ToString(), >= Key.D0 and <= Key.D9 => ((char)('0' + (key - Key.D0))).ToString(), _ => \"Unidentified\" }; /// /// Handles the key up event /// private void RenderingCanvas_KeyUp(object sender, KeyEventArgs e) { DispEngine.KeyUp(WpfKeyToW3C(e.Key)); } /// /// Handles the key down event /// private void RenderingCanvas_KeyDown(object sender, KeyEventArgs e) { string key = WpfKeyToW3C(e.Key); DispEngine.KeyDown(key); DispEngine.KeyDownTransform(key, new key_table__transform_view_by_key_pressing_t() { HOME = \"Home\", PAGE_UP = \"PageUp\", PAGE_DOWN = \"PageDown\", F1 = \"F1\", F2 = \"F2\", F3 = \"F3\", F4 = \"F4\", SHIFT = \"Shift\", ARROW_LEFT = \"ArrowLeft\", ARROW_RIGHT = \"ArrowRight\", ARROW_DOWN = \"ArrowDown\", ARROW_UP = \"ArrowUp\" }); } Lifecycle Management /// /// Handles window state changes (maximize, minimize, etc.) /// private unsafe void RenderingCanvas_StateChanged(object sender, EventArgs e) { switch ((sender as Window).WindowState) { case WindowState.Maximized: DispEngine.IsVisible = true; break; case WindowState.Minimized: DispEngine.IsVisible = false; break; case WindowState.Normal: DispEngine.IsVisible = true; break; } } /// /// Handles data context changes /// private unsafe void CanvasDataContextChanged(object sender, DependencyPropertyChangedEventArgs e) { DispEngine pre = e.OldValue as DispEngine; DispEngine cur = e.NewValue as DispEngine; //child's binding event is triggered after IsVisible event and Load event. if (pre != null) //this section will never occur if the datacontext not set twice. { pre.Terminate(); pre.FrameReady -= RenderingCanvas_BufferSwapped; } if (cur != null) { cur.FrameReady += RenderingCanvas_BufferSwapped; cur.Start((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height); cur.IsVisible = IsVisible; } } /// /// Reference to the current window containing this control /// private Window currentWindow; /// /// Gets or sets the current window, connecting or disconnecting state change events /// Window CurrentWindow { get => currentWindow; set { if (currentWindow != null) currentWindow.StateChanged -= RenderingCanvas_StateChanged; currentWindow = value; if (currentWindow != null) currentWindow.StateChanged += RenderingCanvas_StateChanged; } } /// /// Handles the loaded event /// private unsafe void RenderingCanvas_Loaded(object sender, RoutedEventArgs e) { // Get the window containing this control CurrentWindow = Window.GetWindow(this); // Set up DispEngine rendering DispEngine.FrameReady -= RenderingCanvas_BufferSwapped; DispEngine.FrameReady += RenderingCanvas_BufferSwapped; DispEngine.Start((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height); DispEngine.IsVisible = IsVisible; } /// /// Handles the unloaded event /// private unsafe void RenderingCanvas_Unloaded(object sender, RoutedEventArgs e) { DispEngine.IsVisible = IsVisible; DispEngine.FrameReady -= RenderingCanvas_BufferSwapped; CurrentWindow = null; } Resource Cleanup /// /// Flag to track disposed state /// private bool disposedValue; /// /// Disposes managed resources /// protected virtual void Dispose(bool disposing) { if (!disposedValue) { if (disposing) { // Unsubscribe from power events SystemEvents.PowerModeChanged -= SystemEvents_PowerModeChanged; // Dispose the DispEngine to free resources DispEngine.Dispose(); } disposedValue = true; } } /// /// Public dispose method to free resources /// public void Dispose() { // Do not change this code. Put cleanup code in 'Dispose(bool disposing)' method Dispose(disposing: true); GC.SuppressFinalize(this); } Core DispEngine Integration Patterns 1. Initialization Sequence // Create DispEngine (optionally with displayees) var engine = new DispEngine(displayees); // Set up image buffer callback engine.ImageRequestAfterBufferSwapped += OnBufferSwapped; // Initialize with canvas size engine.Start(width, height); // Set initial view (optional) engine.SetViewToHomeView(); 2. Render Loop The rendering process follows this pattern: DispEngine processes IDisplayee objects Buffer is swapped and callback is triggered UI framework renders the buffer to screen User input triggers view updates Process repeats 3. Complete User Input Mapping All user interactions must be mapped to DispEngine methods: User Action DispEngine Method Mouse move MouseMove(int, int) Mouse drag MouseDragTransform(int, int, mouse_button_table__transform_view_by_mouse_drag_t) Mouse button MouseButtonDown(long) / MouseButtonUp(long) Mouse wheel MouseWheel(int, int) and MouseWheelTransform(int, int, double) Key press KeyDown(string) / KeyUp(string) and KeyDownTransform(string, key_table__transform_view_by_key_pressing_t) Touch events TouchDown(int, int, int) / TouchMove(int, int, int) / TouchUp(int) 4. Proper Resource Cleanup Resource management is critical for proper operation: // In dispose method DispEngine.ImageRequestAfterBufferSwapped -= OnBufferSwapped; DispEngine.Terminate(); DispEngine.Dispose(); Advanced Implementation Considerations When creating custom implementations, consider these aspects: View Manipulation Use SketchView to directly access or modify the view matrix: // Get current view matrix Mat4d currentView = engine.SketchView; // Apply custom rotation Mat4d rotation = Mat4d.RotateX(Math.PI/4); engine.SketchView = currentView * rotation; See Also DispEngine IDisplayee Vec2d Mat4d Using RenderingCanvas with DispEngine — the shipped controls this guide reimplements" }, "technique/rendering/drawing.html": { "href": "technique/rendering/drawing.html", diff --git a/App/wwwroot/HiAPI-docsite/release-note/index.html b/App/wwwroot/HiAPI-docsite/release-note/index.html index eb3e1b34..16c12bdf 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/index.html +++ b/App/wwwroot/HiAPI-docsite/release-note/index.html @@ -87,7 +87,68 @@

    Release Note

    -

    HiNc Packages 3.2

    +

    HiNc Packages Version 3.2.24

    +

    Correctness and coverage that landed after 3.2.7. The 3.1.175 → 3.2 line jump is the +3.2.7 entry below; the long form is still +Upgrading from 3.1.175 to 3.2.

    +
    +
    Important
    +

    Adoption status. Verification is still in progress across most areas.

    +

    Do not put 3.2 NC optimization into production. It is not finished on this line. +Work that depends on optimization should stay on the 3.1 line, serviced as +3.1.175.<patch>. The Blazor front end tracks the 3.2 packages, so it is not a way +to stay on the 3.1 behaviour.

    +

    Do not put SoftNc canned-cycle indexing with rotary words into production. SoftNc is +the default engine, and its G81–G89 family does not take A / B / C words on a repeat +block: a rotary-only repeat does not fire the cycle, a mixed block drops the rotary +word, and under G68.2 the hole follows the table. Programs that index a rotary axis that +way should run with +EnableSoftNcRunner set false — the +HardNc fallback indexes those blocks the way a control does. See +Brand NC language coverage.

    +
    +
      +
    • Whole-program throughput against the last 3.1 set is 2.5×–18.8× in steps per +second (paired on one 32-logical-processor Linux workstation; the ratio grows with +program length and mesh fineness). The six-core ceiling that used to cap the 3.1 +pipeline is about 6% of that gap. Figures and conditions: +Performance and footprint
    • +
    • M02 / M30 / END PGM is a reset edge on SoftNc. Tool-length compensation +(including TCP), tilt, cutter-radius compensation and canned cycles cancel on the next +block; the end-of-program block itself still runs under the modal state it executed with. +HardNc still carries G43.4 across M02. See +Results that change on upgrade
    • +
    • An omitted H is no longer a silent zero — it takes the equipped tool's offset row +first, then warns Comp-ToolHeight--NoToolForOmittedH / --NoToolForOmittedHRtcp. A +vacant table row warns Comp-ToolHeight--RowMissing
    • +
    • Cutter-radius compensation runs in the selected G17 / G18 / G19 plane. An +interference path that used to swap sides silently now reports +RadiusComp--Interference
    • +
    • Siemens ROTS / AROTS are simulated into the tilt chain in Sinumerik RPY order. +SCALE / MIRROR / CROTS remain recognized, not simulated
    • +
    • Heidenhain LN vector blocks resolve into rotary axes through +HeidenhainLnOrientationSyntax
    • +
    • Fanuc G54.1 Pn (also written G54 Pn) and G59.1G59.9 resolve additional work +offsets. A selected row nobody has entered reports Coord-WorkOffset--AdditionalZero
    • +
    • Runner feedrate members rename to CommandedClFeedrate_mmds. Physics follows the +equipped tool's tip via +ActualTipFeedrate_mmds. A project-level +RadiusOffsetBasis decides what a tool-house +refresh writes into the D column — see +Tool Offsets
    • +
    • GetMillingEquipmentGetMachiningEquipment. CodeXyzabcMachineTool is absorbed +into GeneralXyzabcMachineTool (the old XML name still loads). The +equipment splits into authored +SetupEquipment and runtime +MachiningEquipment
    • +
    • Close joins the ProjectFileBusyException gate. +LoadProject and +ReloadProject take a message sink for +load-time diagnostics
    • +
    • OmitLeadingZero is an output style the project can pin +(.5 vs 0.5)
    • +
    +

    HiNc Packages Version 3.2.7

    At a glance

    3.2 is largely one piece of work: the NC interpreter that reads a controller program is now composed from configurable parts rather than written into one class, and most of this release is the brand @@ -152,7 +213,7 @@ depends on optimization should stay on the 3.1 line, which is serviced as Blazor front end tracks the 3.2 packages, so it is not a way to stay on the 3.1 behaviour.

    What changed

    -

    This one entry covers everything since 3.1.175. The 3.1 line is closed at the 3.1.175 package +

    This 3.2.7 entry covers everything since 3.1.175. The 3.1 line is closed at the 3.1.175 package set and is serviced only as 3.1.175.<patch>; master moved all ten packages onto the 3.2 line on 2026-08-24 and restarted their build counters. So a 3.2 build number starts low, the two counters are not comparable, and the gap between the last 3.1 number a feed served and the first diff --git a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/brand-nc-language-coverage.html b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/brand-nc-language-coverage.html index 6139a519..12e00669 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/brand-nc-language-coverage.html +++ b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/brand-nc-language-coverage.html @@ -107,11 +107,13 @@ data, DEF REAL/INT declarations lower into assignments, and $ to SiemensFrameTable. Any other $-variable is recorded with an unsupported note rather than dropped.

  • Five axisSiemensProgrammableFrameSyntax simulates -TRANS / ATRANS / ROT / AROT (with RPL=) into the tilt-transform chain in Sinumerik RPY -order; SiemensTraoriSyntax makes TRAORI a real RTCP mode, -the sibling of ISO G43.4, with TRAFOOF handing the offset back; +TRANS / ATRANS / ROT / AROT (with RPL=) and the solid-angle forms ROTS / AROTS into the +tilt-transform chain in Sinumerik RPY order (ROTS / AROTS behave as ROT / AROT: at most two +angles, first-named axis first); SiemensTraoriSyntax makes +TRAORI a real RTCP mode, the sibling of ISO G43.4, with TRAFOOF handing the offset back; SiemensCycle800TiltSyntax decodes CYCLE800's MODE bits for -all four swivel modes. ROTS / SCALE / MIRROR are recognized and reported, not simulated.
  • +all four swivel modes. SCALE / MIRROR / CROTS are recognized and reported +(SiemensFrame--Unsupported), not simulated.
  • Calls — L-prefixed and named subprogram calls resolve against SubProgramFolderConfig ({name}.SPF, then .MPF, then the bare name) and inline with their P repetition count; M17 / RET pop a frame; REPEAT re-runs a @@ -155,9 +157,13 @@ and DL. Datum handling follows TNC semantics: CYCL DEF 247additive shift on top of it, composing as separate transform-chain entries instead of replacing each other, resolved against HeidenhainDatumTable. Arcs (CC pole plus C statement, DR- = CW, closed arc = full circle), RL / RR / R0 radius compensation, -the M126 / M127 rotary-wrap state, M140 MB retract, and CYCL DEF 32 TOLERANCE. A C block -never states its own centre: each in-plane component comes from the CC block's own axis word, -else from the previous CC section's same axis, else from the arc's own start point. A bare CC +the M126 / M127 rotary-wrap state, M140 MB retract, and CYCL DEF 32 TOLERANCE. +HeidenhainLnOrientationSyntax resolves an LN vector +block into rotary axes through the same RTCP machinery the rotary-word programs use: T present +plus M128 / FUNCTION TCPM keeps the tool on T; T absent plus RTCP holds the tool on the +surface normal N; RTCP inactive ignores T (Orientation-Vector--IgnoredNoTcpm), as the control +does. A C block never states its own centre: each in-plane component comes from the CC block's +own axis word, else from the previous CC section's same axis, else from the arc's own start point. A bare CC is the one spelling that states all of them at once — it takes the last programmed position, read at the CC block, and replaces the modal centre rather than inheriting it. A centre that lands on the arc's own start point leaves the block with no radius, so it warns @@ -204,7 +210,9 @@ fabricated value. FN 9–12 conditional jumps execute, with a ( STAY / MOVE / TURN positioning; VECTOR structurally captured; EULER / POINTS / RELATIV / AXIAL / PROJECTED consumed and warned with the previous tilt retained, so a PLANE AXIAL B+45 B word can never be mistaken for a rotary axis command), FUNCTION TCPM, and real M128 / M129 -tool-centre-point control.
  • +tool-centre-point control. A centre-referenced FUNCTION TCPM REFPNT (TIP-CENTER / +CENTER-CENTER) is recorded and reported (Orientation-RefPoint--CntNotSimulated) rather than +silently read as TIP-TIP.
  • Cycles and callsCYCL DEF 2xx bodies with their Q parameters mirrored into the block assignments, cycles 200 / 232 / 251 / 252 / 253 mapped onto the shared G81 / G82 / G83 slots, CYCL CALL / CYCL CALL POS / M99 / M89 splitting call-once from modal firing, CALL LBL @@ -241,6 +249,20 @@ codes before the mode syntaxes consume them.
  • WHILE[..]DO m / END m with a bounded-loop watchdog, and position and tool-offset system variables. M98 P_ L_, M198 external call, M99 return and M99 P{seq} early return; G65 one-shot macro call with A–Z → #1#26 argument binding, and G66 / G67 modal macro. +
  • Additional work coordinate systemsG54.1 Pn, also written G54 Pn, resolves against the +extended table (P1–P48). A selected row nobody has entered reports Coord-WorkOffset--AdditionalZero. +G59.1G59.9 have a provider on the Fanuc, Mazak and Syntec presets. See +Work Coordinates and +ISO core.
  • +
  • Fanuc / Syntec unit codes and G05. G71 is the metric spelling of G21; G70 is the inch +spelling of G20 and reports Unit--InchNotSupported rather than silently switching units. +G05.1 Q1 / Q0 is AICC / Nano Smoothing (recognized). Bare G05 P{n} is a different feature +(HPCC) and is consumed without changing programmed coordinates, reported under the Hpcc--* ids.
  • +
  • Canned-cycle repeats do not take rotary words on SoftNc. The G73–G89 family expands XYZ / R / +Q / F / P / K strokes. An A / B / C word on a repeat is not taken: a rotary-only repeat does not +fire the cycle, a mixed block drops the rotary word, and under G68.2 the hole follows the table. +Not finished on this line, see Adoption status on the release-note page. The +HardNc fallback indexes those blocks the way a control does.
  • Cross-brand

      @@ -304,6 +326,12 @@ re-read the host file by that path — the existence check always failed, so loo without looping. RunNc now registers the raw lines on NcLineSourceDependency and LabelScanUtil reads memory first, disk second. +
    • M02 / M30 / END PGM is a reset edge. SoftNc models program-end as the edge between that +block and the next, so a concatenated multi-program file does not keep TCP, tilt, CRC or a canned +cycle alive into the next program. Each modal owner writes an explicit cancel section on the +successor (G49 / G69 / G40 / G80); the end-of-program block itself still runs under the modal state +it executed with. HardNc still carries G43.4 across M02 — see +Results that change on upgrade.
    diff --git a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/breaking-changes.html b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/breaking-changes.html index df947412..cd691522 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/breaking-changes.html +++ b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/breaking-changes.html @@ -225,6 +225,14 @@ everything else falls back to brand G-code, so an exotic brand extension can nev StateActRunner.Feedrate_mmds / Feedrate_mmdmin, ActFeedrate.Feedrate_mmds / Feedrate_mmdmin (and ActRapid), MachineMotionStep.Feedrate_mmds, the MachineMotionStep constructor's feedrate_mmds parameter CommandedClFeedrate_mmds / CommandedClFeedrate_mmdmin, CommandedClFeedrate_mmds / CommandedClFeedrate_mmdmin, CommandedClFeedrate_mmds, commandedClFeedrate_mmds + +GetMillingEquipment +GetMachiningEquipment + + +CodeXyzabcMachineTool / CodeXyzabcMachineToolUri +GeneralXyzabcMachineTool (the old XML names still load) +

    Four notes on that table.

    @@ -371,6 +379,13 @@ updated in lockstep. It is a public const, so an assembly compiled against 3.1.175 already carries the old literal and keeps passing it — Init still accepts it — but a rebuild changes what it passes, and no font file is extracted to the working directory any more. +
  • The equipment splits into two faces. SetupEquipment is +the authored one — the only face a project file persists, reached as +SetupEquipment. +MachiningEquipment is the runtime face the runner, +physics, collision and execution display read; it is rebuilt from the authored face at project +assignment and at session boundaries, so a value written onto it is discarded rather than saved. +See Getting started.
  • 8. Defaults and gates that changed

      @@ -393,6 +408,13 @@ and scripts are skipped with Script--NotLicensed. An unlicensed ins different simulation, not an error. Calling the public API from your own application or session script needs no extra licence; composing the interpretation pipeline does. See NC Parsing Engine. +
    • RadiusOffsetBasis decides what a tool-house +refresh writes into the D column: +CutterRadius (default — geometry plus wear, +the only behaviour before the basis existed) or +ZeroBased (wear only, for a tool-centre +CAM path). An older project refreshes exactly as before until the basis is changed. See +Tool Offsets.
    • The four SnapshotSyntax entries in the Fanuc preset default to IsEnabled = false, so projects stop serializing enabled debug snapshots. A project saved by an earlier build keeps what it serialized until its pipeline list is refreshed from the current preset.
    • diff --git a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/index.html b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/index.html index e6da817b..89231368 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/index.html +++ b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/index.html @@ -87,7 +87,8 @@

      Upgrading from 3.1.175 to 3.2

      -

      These pages are the long form of the 3.2 release-note entry. They exist because 3.2 is not +

      These pages are the long form of the 3.1.175 → 3.2 line — the 3.2.7 entry and the +3.2.24 incremental drop. They exist because 3.2 is not an increment on the last release most callers hold — it is the accumulation of everything that landed after the 3.1.175 package set, delivered in one step.

      Read them in order the first time. The two sections that decide whether an upgrade is a recompile or @@ -98,8 +99,9 @@ capability you can adopt when you need it.

      Important

      Read the Adoption status note on the release-note page before planning around this. The short version: 3.2 is published for review, verification is still in progress across most -areas, and NC optimization is not finished on this line — work that depends on it should stay -on 3.1, serviced as 3.1.175.<patch>.

      +areas, NC optimization is not finished on this line, and SoftNc canned-cycle indexing +with rotary A/B/C words is not finished — work that depends on either should stay on 3.1, +serviced as 3.1.175.<patch>, or run with SoftNc off for the rotary-cycle case.

      Pages

      Ordered the way to read them: what the package numbers mean, then the two sections that decide whether the upgrade is a recompile or an afternoon, then the new capability, adopted when needed.

      diff --git a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/nc-optimization-and-writeback.html b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/nc-optimization-and-writeback.html index 6251138d..eb229f17 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/nc-optimization-and-writeback.html +++ b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/nc-optimization-and-writeback.html @@ -142,6 +142,11 @@ fourth — an alarm on controllers strict about their least input increment. Dig scanned per word family over the played source texts with comment spans masked, floored at 3/3/0 and capped at 9, and threaded through the whole write path. The word-suppression tolerances and the F comparison grid derive from the resolved digits instead of the old fixed literals. +
    • Leading zeros follow the source, and the project can pin the spelling. +OmitLeadingZero is an output style: on, the writer drops a leading +zero before the decimal (.5 rather than 0.5); off, it writes the zero. The option is carried on +the project so two machines produce the same bytes, and a report names which style the source +itself used.
    • Optimized NC is written back in the source file's encoding. NC play reads and optimized writes go through DetectRoundTripEncoding — BOM, then strict UTF-8, then Latin-1 — so an ANSI-family file (GBK, Big5, Shift-JIS) re-encodes to its original bytes instead of diff --git a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/new-diagnostics.html b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/new-diagnostics.html index 965f6fd9..ff448e04 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/new-diagnostics.html +++ b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/new-diagnostics.html @@ -134,6 +134,22 @@ they are the fastest way to find out what a run actually did.

      a G43.4 H word could not be resolved +Comp-ToolHeight--NoToolForOmittedH / --NoToolForOmittedHRtcp +a G43 / G43.4 with no H, no equipped tool number and no non-zero modal offset id + + +Comp-ToolHeight--RowMissing +the resolved offset id has no table row + + +Comp-ToolHeight--RtcpOutlivesToolChange +a tool change left G43.4 Hm alive for a different tool; the new tool keeps the previous tool's length + + +StrokeLimit--Unconfigured +stroke-limit checking is on but the chain's linear axes carry no travel limit; once per session at BeginSession + + RadiusComp--Interference a G41/G42 block whose compensated path runs against the programmed direction (an inner arc or groove smaller than the offset radius); a real control stops there with an interference alarm (Fanuc PS0041) while the simulation continues on the swapped-side path — on a tool-centre CAM path the radius offset row (D row) must hold the wear only, not the tool radius @@ -210,6 +226,22 @@ they are the fastest way to find out what a run actually did.

      the construct is recognized and consumed safely, but not simulated +HeidenhainCyclCall--IncrementalNoReference / --IncrementalAfterMove +a klartext CYCL CALL POS I-prefixed word has no previous call to measure from, or the tool moved between the two calls + + +Orientation-RefPoint--CntNotSimulated +FUNCTION TCPM REFPNT with a centre-referenced tool point is not simulated — coordinates are read as TIP-TIP + + +Orientation-Vector--IgnoredNoTcpm +an LN tool vector arrived with RTCP inactive and was ignored, as the control ignores it + + +Hpcc--NoOp / --HighSpeedCycleIgnored / --UnsupportedFunction / --UnevaluatedFunction / --MissingFunctionWord +a bare G05 P HPCC selection; the programmed coordinates are unchanged, except P10001P10999 which is real machining the simulation cannot see + + DeclaredMCode--UnmodeledEffects a machine-declared OEM M-code occurred; no effects are simulated for it diff --git a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/performance-and-footprint.html b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/performance-and-footprint.html index bdc8bbd4..42696a70 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/performance-and-footprint.html +++ b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/performance-and-footprint.html @@ -91,6 +91,23 @@ correctness that is said too. Read the ratios rather than the absolute times: several campaigns were run on Debug builds or on small machines, deliberately, because a paired A/B on one machine answers “did this get faster” far more reliably than an unpaired Release number on a fast one.

      +

      Against the last 3.1 set

      +

      Paired on one 32-logical-processor Linux workstation, deployed stacks, whole NC programs, steps per +second. The 3.1 side is HardNc (the 3.1 default); the 3.2 side is SoftNc (the 3.2 default). Throughput +on this line is 2.5×–18.8×; the ratio grows with program length and mesh fineness. Memory is mixed: +a cutting-dominated long program peaked higher on 3.2, a large-surface short-NC job peaked lower.

      +

      The six-core ceiling that used to cap the 3.1 pipeline is not where that gap comes from. On the +same workstation, pinning 3.2's worker counts to the products of that ceiling moved a ~193,000-step +play from 15.0 s to 15.9 s (+6%); at six available cores the version advantage is still 2.8×–3.8×, +and at two cores 2.73×. 3.1 saturates from eight cores; 3.2 from twelve. On that fixture, 3.1 allocated +6–8× more managed memory, and the 3.1 allocation climbed as the mesh got finer while 3.2 stayed +almost flat.

      +
      +

      Conditions. Deployed x64 stacks, one machine, whole programs, steps/s (not wall-clock — a +defect that inflated 3.2 step counts on an earlier drop is fixed on this line). Core-count figures +used DOTNET_PROCESSOR_COUNT plus CPU affinity, so they are “restricted cores on a large machine”, +not a small one: memory bandwidth and cache stay those of the 32-LP host.

      +

      Milling physics in the native kernel

      The per-step physics moved into core.dll in stages — engagement scan conversion, the force kernel, then the sequential temperature and wear chain. Measured as a same-day paired A/B, managed leg @@ -166,11 +183,11 @@ parallel physics stage is about 3.3% of wall time, while the si about 77% — and that subtraction is single-worker as a correctness requirement, not as an oversight. Raising the force-worker count therefore buys nothing on any machine; the bottleneck moved rather than disappearing.

      -

      What did change in the worker derivation is narrower than it sounds. An unmeasured six-core ceiling -was removed, but it only ever governed the sweep workers, and only machines with nine or more -logical processors see a different count; force workers are unchanged everywhere. The throughput -benefit on such a machine has not been measured — the development machines are smaller — so this -is a ceiling removal, not a claimed speedup.

      +

      What did change in the worker derivation is narrower than it sounds. The six-core ceiling +was removed, and on a 32-logical-processor machine that is about 6% of the 3.1→3.2 wall-time gap +measured above — force workers are unchanged everywhere, and the sweep-worker count only differs on +machines with nine or more logical processors. The rest of the gap is allocation and the rest of +the pipeline, not the extra cores.

      Queue depths became fixed item budgets (120 geometry, 3840 physics) rather than scaling with the core count, because those queues bound per-item memory: uncapped, a 64-core machine would have been handed 40,960-deep physics queues. On machines with fewer than six cores this is a small increase in diff --git a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/results-that-change-on-upgrade.html b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/results-that-change-on-upgrade.html index 1c36e84e..6dd737be 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/results-that-change-on-upgrade.html +++ b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/results-that-change-on-upgrade.html @@ -114,8 +114,29 @@ pieces now carry the positioning section forward like every other modal syntax.< program machined one tool length low. The read point now falls back to the generic tool-number-keyed height and emits SiemensToolOffset--TcdpRowMissing.

    • G43.4 with an unresolvable H word activated RTCP with a zero-length tool. It now reports -Comp-ToolHeight--001 as a warning and keeps processing the block. An absent H stays silent — -re-activating G43.4 on the modal offset id is legitimate input.
    • +Comp-ToolHeight--001 as a warning and keeps processing the block. An omitted H is no longer a +silent zero: it takes the equipped tool's own offset row first (HardNc parity), then a non-zero +modal id, and only then warns Comp-ToolHeight--NoToolForOmittedH (plain G43) or +Comp-ToolHeight--NoToolForOmittedHRtcp (G43.4). A vacant table row warns +Comp-ToolHeight--RowMissing instead of compensating a zero length. +
    • G43.4 survived M02 / M30 and a rotary-only G53 still coupled through RTCP. A sequence +that ended one program with M02 and started the next with a rotary rapid — without a G49 — +kept tool-centre-point control on, pinned the tip, and dragged machine XYZ through the stock. On +SoftNc the program-end block is a reset edge: tool-length compensation (G43 / G44 / G43.4, +Siemens TRAORI, Heidenhain M128), tilt (G68 / G68.2 / CYCLE800 / PLANE / TRANS), G41/G42 and +G81–G89 cancel on the next block, written as explicit cancel sections so modal carry cannot copy +the previous state. The M02 block itself still runs under the modal state it executed with, so a +retract on the same line as M30 still carries tool length. A rotary-only G53 under active +RTCP now holds the linear axes at the previous machine position and stays McLinear, which is what +G53 does on a control (no compensation). HardNc still carries G43.4 across M02 — the two +engines are deliberately divergent on that edge; 3.2's default is SoftNc. A tool change that +leaves G43.4 Hm alive for a different tool warns +Comp-ToolHeight--RtcpOutlivesToolChange on the change block.
    • +
    • Fanuc G54.1 Pn (also written G54 Pn) was not resolved. Additional work coordinate systems +now resolve against the extended table; a selected row nobody has entered reports +Coord-WorkOffset--AdditionalZero and runs on the machine origin. G59.1G59.9 have a +provider on the ISO presets. See +Work Coordinates.
    • Heidenhain DIN/ISO arc centres. I / J / K are absolute circle centres on Heidenhain — the ISO face of the klartext CC pole — not start-to-centre offsets. Reading them incrementally turned arcs into near-full phantom circles. Fixed in all three engines: the HardNc reader @@ -132,10 +153,19 @@ to the workpiece over the step duration. On XYZ moves, CL files and RTCP with th offset the two agree (the recomputation moves forces by at most about 1e-4 relative, from the TimeSpan-quantised step duration); they part under RTCP with a tool-length offset that does not describe the equipped tool, on rotary-axis-limited simultaneous five-axis blocks (the tip is slower -than F, up to a few percent), and wherever the commanded value was stale. One such stale case is -fixed alongside: a feed block that repeats the current position (X.. Y.. Z.. F1600. right after -the same point at F800.) lost its F word, so every following block showed and cut at the old -feed; its ActFeedrate now lands.
    • +than F, up to a few percent), and wherever the commanded value was stale. +
    • A feed block that does not move lost its F word. A block that repeats the current position +(X.. Y.. Z.. F1600. right after the same point at F800., a common CAM habit) returned on +zero distance before emitting anything, so every following block showed and cut at the old +feed. Its ActFeedrate now lands on a zero-length linear, arc or polar block alike. The same +stale commanded value is one of the cases the tip-feedrate split above parts on.
    • +
    • A rotary-bearing act mixed tip travel with the commanded CL feed resolution. On a pure RTCP +rapid swing the CL point stands still, the commanded feed is ~0, and dividing the equipped tool's +tip sweep by that resolution saturated the step count (the play appeared to hang on one line). A +rotary-bearing act now splits by posture change (each rotary-axis delta over the rotary +resolution) and by spindle cycles when the spindle turns — never by tip travel over the CL-feed +resolution. Step counts of existing five-axis projects therefore shift on non-RTCP rotary +blocks; XYZ-only programs are unaffected.
    • A K0 word on a HardNc G02/G03 saturated the turn count. Under the default G17 plane a written-but-zero plane-normal word divided the axial travel by zero, the additional-turn count saturated to int.MaxValue, and one arc block became a spiral act of roughly 302 simulated years — diff --git a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/session-project-and-commands.html b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/session-project-and-commands.html index 1e849227..b46cf91e 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/session-project-and-commands.html +++ b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/session-project-and-commands.html @@ -169,8 +169,16 @@ converting after a switch to a CL device; and ClearIdealGeomCache, so loading another project stops rendering the previous project's target geometry.
    • Project-file operations are serialized through a zero-wait gate. A New / Load / Save / Reload -arriving while another is in progress throws ProjectFileBusyException -immediately instead of racing into a file-in-use IOException.
    • +/ Close arriving while another is in progress throws +ProjectFileBusyException immediately instead of racing into a file-in-use +IOException. Close was the one operation left outside the gate, so a Close arriving during a Save +could let the Save finish without writing and still return 200; it now refuses with the same 409 +the other five ops already used. +
    • LoadProject and +ReloadProject take a message sink for load-time +diagnostics (a referenced STL missing on disk, a child XML that will not deserialize). A load-time +diagnostic does not fail the load; passing no sink leaves the application log as the only witness. +See Message Management.
    • AlignWorkpieceProgramZeroToIso computes in the machine-zero state. It reflects the assembly and zeroes every dynamic axis before querying displacements, so the alignment is correct even when the live machine's axes are diff --git a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/the-package-line.html b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/the-package-line.html index 62e4d208..c228fae9 100644 --- a/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/the-package-line.html +++ b/App/wwwroot/HiAPI-docsite/release-note/upgrading-to-3.2/the-package-line.html @@ -109,8 +109,9 @@ own, so the set is quoted as 3.1.175.<patch> after its HiNc p it publish under their own frozen builds — looking on the feed for every package at 3.1.175.x finds only HiNc. A reference left on that set receives correctness fixes for it and none of the capability on this page. The 3.1 builds above 3.1.175 were never published as a release set — -which is why the release note carries one 3.2 entry where it might have carried a dozen: for a -caller moving off 3.1.175, they were never separate releases.
    • +which is why 3.2.7 is the first numbered 3.2 drop and absorbs what a caller moving off +3.1.175 has not seen as a published set. Later 3.2 builds are incremental, the same way +3.1.175 / 3.1.173 / … were.
    diff --git a/App/wwwroot/HiAPI-docsite/technique/nc-dialects/controller-iso.html b/App/wwwroot/HiAPI-docsite/technique/nc-dialects/controller-iso.html index 28839e69..e745a978 100644 --- a/App/wwwroot/HiAPI-docsite/technique/nc-dialects/controller-iso.html +++ b/App/wwwroot/HiAPI-docsite/technique/nc-dialects/controller-iso.html @@ -376,6 +376,11 @@ tool-house refresh is chosen on Adoption status note.

    Polar interpolation

    G12.1 turns polar coordinate interpolation on and G13.1 turns it off. Inside a polar section the X word is a diameter and the C word is a hypothetical Cartesian axis in millimetres, not @@ -437,7 +442,7 @@ the Fanuc, Syntec and Mazak presets:

    M02 / M30 -Program end. +Program end. On SoftNc the next block starts with tool-length compensation (including TCP), tilt, cutter-radius compensation and canned cycles cancelled; the M02 / M30 block itself still runs under the modal state it executed with. The HardNc fallback does not apply that reset. M03 / M04 / M05 @@ -511,10 +516,11 @@ tool table — lengths and radius plus additive wear.

    DEF INT declarations lower into assignments, and a full expression evaluator means Z=R63+150 and X=SIN(R10)*20 drive real motion. $P_UIFR[n,axis,TR] binds both ways to the frame table. Any other $ variable is recorded with an unsupported note rather than silently dropped.

    -

    Frames and five-axis. TRANS / ATRANS / ROT / AROT (with RPL=) compose into the tilt -chain in Sinumerik RPY order; TRAORI is a real RTCP mode, the sibling of ISO G43.4, with -TRAFOOF handing the offset back; CYCLE800 is decoded from its MODE bits across all four swivel -modes.

    +

    Frames and five-axis. TRANS / ATRANS / ROT / AROT (with RPL=) and the solid-angle +forms ROTS / AROTS compose into the tilt chain in Sinumerik RPY order (ROTS / AROTS behave +as ROT / AROT: at most two angles, first-named axis first); TRAORI is a real RTCP mode, the +sibling of ISO G43.4, with TRAFOOF handing the offset back; CYCLE800 is decoded from its MODE +bits across all four swivel modes.

    Calls and control flow. L-prefixed and named subprogram calls, inlined with their P repetition count; M17 / RET; REPEAT over a labelled slice; MCALL CYCLE81 / 82 / 83 / 85 mapped onto the shared canned-cycle machinery; PROC headers and labels. GOTOF / GOTOB, IF / ELSE / @@ -528,7 +534,7 @@ instead of a coordinate, resolved against the machine's own indexing-position ta

    OEM auxiliary M-codes. The preset declares M12 / M13 / M22 / M23 and M330 / M331 as note-only, so each occurrence voices DeclaredMCode--UnmodeledEffects rather than an unknown-code warning. A machine's own table overrides the declaration once the real effects are known.

    -

    Recognized, not simulated. ROTS / AROTS, SCALE / ASCALE, and MIRROR / AMIRROR — each +

    Recognized, not simulated. SCALE / ASCALE, MIRROR / AMIRROR and CROTS — each reported as SiemensFrame--Unsupported.

    Not supported. SETAL.

    See Also

    diff --git a/App/wwwroot/HiAPI-docsite/technique/nc-dialects/nc-parsing.html b/App/wwwroot/HiAPI-docsite/technique/nc-dialects/nc-parsing.html index adf43064..ce78f6b4 100644 --- a/App/wwwroot/HiAPI-docsite/technique/nc-dialects/nc-parsing.html +++ b/App/wwwroot/HiAPI-docsite/technique/nc-dialects/nc-parsing.html @@ -374,14 +374,14 @@ misread as something else — a PLANE AXIAL B+45 will not be mistak Fanuc -ISO core, canned cycles G73–G89, G41/G42, G43.4 RTCP, G53/G53.1, G68/G68.2/G69, G12.1/G13.1 polar with compensation, Custom Macro B (# variables, IF/GOTO, WHILE/DO), M98/M99 subprograms, G65/G66/G67 macro calls +ISO core, canned cycles G73–G89 (XYZ / R / Q / F / P / K; rotary A/B/C words on a repeat are not taken on SoftNc), G41/G42, G43.4 RTCP, G53/G53.1, G68/G68.2/G69, G12.1/G13.1 polar with compensation, Custom Macro B (# variables, IF/GOTO, WHILE/DO), M98/M99 subprograms, G65/G66/G67 macro calls, G54.1 Pn / G54 Pn, G59.1G59.9 bare G05 P HPCC selections (Hpcc--NoOp, Hpcc--HighSpeedCycleIgnored, Hpcc--UnsupportedFunction, Hpcc--UnevaluatedFunction, Hpcc--MissingFunctionWord) G10 programmable data setting, G50 spindle limit, G31 skip Siemens -modal vocabulary, SUPA/G153, T="name" with D offsets, $TC_DP tool tables, R-parameters and DEF variables with a full expression evaluator, $P_UIFR, TRANS/ATRANS/ROT/AROT frames, TRAORI/TRAFOOF, CYCLE800, MSG/STOPRE, CR=/TURN= arcs, L/named subprograms, MCALL, REPEAT, PROC/labels, GOTOF/GOTOB, IF/ELSE/ENDIF, WHILE/FOR/REPEAT-UNTIL/LOOP, AC()/IC()/DC()/ACP()/ACN(), the coded-position family, G74/G75 -ROTS/AROTS, SCALE/ASCALE, MIRROR/AMIRROR (SiemensFrame--Unsupported) +modal vocabulary, SUPA/G153, T="name" with D offsets, $TC_DP tool tables, R-parameters and DEF variables with a full expression evaluator, $P_UIFR, TRANS/ATRANS/ROT/AROT/ROTS/AROTS frames, TRAORI/TRAFOOF, CYCLE800, MSG/STOPRE, CR=/TURN= arcs, L/named subprograms, MCALL, REPEAT, PROC/labels, GOTOF/GOTOB, IF/ELSE/ENDIF, WHILE/FOR/REPEAT-UNTIL/LOOP, AC()/IC()/DC()/ACP()/ACN(), the coded-position family, G74/G75 +SCALE/ASCALE, MIRROR/AMIRROR, CROTS (SiemensFrame--Unsupported) SETAL diff --git a/App/wwwroot/HiAPI-docsite/technique/rendering/custom-rendering-canvas.html b/App/wwwroot/HiAPI-docsite/technique/rendering/custom-rendering-canvas.html index 4146395f..8195fa57 100644 --- a/App/wwwroot/HiAPI-docsite/technique/rendering/custom-rendering-canvas.html +++ b/App/wwwroot/HiAPI-docsite/technique/rendering/custom-rendering-canvas.html @@ -185,7 +185,7 @@ public unsafe RenderingCanvas(params IDisplayee[] displayees) DispEngine.BackgroundColor = new Vec3d(0.1, 0.1, 0.5); DispEngine.BackgroundOpacity = 0.1; DispEngine.SetViewToHomeView(); - DispEngine.ImageRequestAfterBufferSwapped += DispEngine_ImageRequestAfterBufferSwapped; + DispEngine.FrameReady += DispEngine_FrameReady; // Set initial size and start the rendering engine this.Size = new System.Drawing.Size(500, 300); @@ -193,7 +193,7 @@ public unsafe RenderingCanvas(params IDisplayee[] displayees) }

    Rendering Pipeline

    The rendering pipeline processes images from DispEngine and displays them:

    -
    private unsafe void DispEngine_ImageRequestAfterBufferSwapped(byte* bgra_unsignedbyte_pixels, int w, int h)
    +
    private unsafe void DispEngine_FrameReady(byte* bgra_unsignedbyte_pixels, int w, int h, FramePins pins)
     {
         // Create a bitmap from the raw pixel data provided by DispEngine
         Bitmap bitmap;
    @@ -500,7 +500,7 @@ public RenderingCanvas()
     
    /// <summary>
     /// Handles the buffer swapped event from DispEngine
     /// </summary>
    -private unsafe void RenderingCanvas_BufferSwapped(byte* data, int w, int h)
    +private unsafe void RenderingCanvas_BufferSwapped(byte* data, int w, int h, FramePins pins)
     {
         if (data == null)
             return;
    @@ -703,11 +703,11 @@ private unsafe void CanvasDataContextChanged(object sender, DependencyPropertyCh
         if (pre != null)    //this section will never occur if the datacontext not set twice.
         {
             pre.Terminate();
    -        pre.ImageRequestAfterBufferSwapped -= RenderingCanvas_BufferSwapped;
    +        pre.FrameReady -= RenderingCanvas_BufferSwapped;
         }
         if (cur != null)
         {
    -        cur.ImageRequestAfterBufferSwapped += RenderingCanvas_BufferSwapped;
    +        cur.FrameReady += RenderingCanvas_BufferSwapped;
             cur.Start((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height);
     
             cur.IsVisible = IsVisible;
    @@ -743,8 +743,8 @@ private unsafe void RenderingCanvas_Loaded(object sender, RoutedEventArgs e)
         CurrentWindow = Window.GetWindow(this);
     
         // Set up DispEngine rendering
    -    DispEngine.ImageRequestAfterBufferSwapped -= RenderingCanvas_BufferSwapped;
    -    DispEngine.ImageRequestAfterBufferSwapped += RenderingCanvas_BufferSwapped;
    +    DispEngine.FrameReady -= RenderingCanvas_BufferSwapped;
    +    DispEngine.FrameReady += RenderingCanvas_BufferSwapped;
         DispEngine.Start((int)DisplayerPane.RenderSize.Width, (int)DisplayerPane.RenderSize.Height);
         DispEngine.IsVisible = IsVisible;
     }
    @@ -755,7 +755,7 @@ private unsafe void RenderingCanvas_Loaded(object sender, RoutedEventArgs e)
     private unsafe void RenderingCanvas_Unloaded(object sender, RoutedEventArgs e)
     {
         DispEngine.IsVisible = IsVisible;
    -    DispEngine.ImageRequestAfterBufferSwapped -= RenderingCanvas_BufferSwapped;
    +    DispEngine.FrameReady -= RenderingCanvas_BufferSwapped;
         CurrentWindow = null;
     }
     

    Resource Cleanup

    diff --git a/App/wwwroot/HiAPI-docsite/xrefmap.yml b/App/wwwroot/HiAPI-docsite/xrefmap.yml index 1fd986da..54e04000 100644 --- a/App/wwwroot/HiAPI-docsite/xrefmap.yml +++ b/App/wwwroot/HiAPI-docsite/xrefmap.yml @@ -20158,6 +20158,18 @@ references: isSpec: "True" fullName: Hi.Disp.DispEngine.FontFile nameWithType: DispEngine.FontFile +- uid: Hi.Disp.DispEngine.FrameReady + name: FrameReady + href: api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_FrameReady + commentId: E:Hi.Disp.DispEngine.FrameReady + fullName: Hi.Disp.DispEngine.FrameReady + nameWithType: DispEngine.FrameReady +- uid: Hi.Disp.DispEngine.FrameReadyDelegate + name: DispEngine.FrameReadyDelegate + href: api/Hi.Disp.DispEngine.FrameReadyDelegate.html + commentId: T:Hi.Disp.DispEngine.FrameReadyDelegate + fullName: Hi.Disp.DispEngine.FrameReadyDelegate + nameWithType: DispEngine.FrameReadyDelegate - uid: Hi.Disp.DispEngine.GetDispEngine name: GetDispEngine() href: api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_GetDispEngine @@ -20184,18 +20196,6 @@ references: isSpec: "True" fullName: Hi.Disp.DispEngine.IdleBackoffHeartbeat nameWithType: DispEngine.IdleBackoffHeartbeat -- uid: Hi.Disp.DispEngine.ImageRequestAfterBufferSwapped - name: ImageRequestAfterBufferSwapped - href: api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_ImageRequestAfterBufferSwapped - commentId: E:Hi.Disp.DispEngine.ImageRequestAfterBufferSwapped - fullName: Hi.Disp.DispEngine.ImageRequestAfterBufferSwapped - nameWithType: DispEngine.ImageRequestAfterBufferSwapped -- uid: Hi.Disp.DispEngine.ImageRequestedDelegate - name: DispEngine.ImageRequestedDelegate - href: api/Hi.Disp.DispEngine.ImageRequestedDelegate.html - commentId: T:Hi.Disp.DispEngine.ImageRequestedDelegate - fullName: Hi.Disp.DispEngine.ImageRequestedDelegate - nameWithType: DispEngine.ImageRequestedDelegate - uid: Hi.Disp.DispEngine.Init(System.String) name: Init(string) href: api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_Init_System_String_ @@ -20405,6 +20405,19 @@ references: isSpec: "True" fullName: Hi.Disp.DispEngine.MouseDragTransform nameWithType: DispEngine.MouseDragTransform +- uid: Hi.Disp.DispEngine.MouseLeave + name: MouseLeave() + href: api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_MouseLeave + commentId: M:Hi.Disp.DispEngine.MouseLeave + fullName: Hi.Disp.DispEngine.MouseLeave() + nameWithType: DispEngine.MouseLeave() +- uid: Hi.Disp.DispEngine.MouseLeave* + name: MouseLeave + href: api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_MouseLeave_ + commentId: Overload:Hi.Disp.DispEngine.MouseLeave + isSpec: "True" + fullName: Hi.Disp.DispEngine.MouseLeave + nameWithType: DispEngine.MouseLeave - uid: Hi.Disp.DispEngine.MouseMove(System.Int32,System.Int32) name: MouseMove(int, int) href: api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_MouseMove_System_Int32_System_Int32_ @@ -21736,6 +21749,142 @@ references: commentId: F:Hi.Disp.Flag.DispCoverUtil.BarPointSize fullName: Hi.Disp.Flag.DispCoverUtil.BarPointSize nameWithType: DispCoverUtil.BarPointSize +- uid: Hi.Disp.FramePins + name: FramePins + href: api/Hi.Disp.FramePins.html + commentId: T:Hi.Disp.FramePins + fullName: Hi.Disp.FramePins + nameWithType: FramePins +- uid: Hi.Disp.FramePins.ByName + name: ByName + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_ByName + commentId: P:Hi.Disp.FramePins.ByName + fullName: Hi.Disp.FramePins.ByName + nameWithType: FramePins.ByName +- uid: Hi.Disp.FramePins.ByName* + name: ByName + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_ByName_ + commentId: Overload:Hi.Disp.FramePins.ByName + isSpec: "True" + fullName: Hi.Disp.FramePins.ByName + nameWithType: FramePins.ByName +- uid: Hi.Disp.FramePins.Empty + name: Empty + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_Empty + commentId: P:Hi.Disp.FramePins.Empty + fullName: Hi.Disp.FramePins.Empty + nameWithType: FramePins.Empty +- uid: Hi.Disp.FramePins.Empty* + name: Empty + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_Empty_ + commentId: Overload:Hi.Disp.FramePins.Empty + isSpec: "True" + fullName: Hi.Disp.FramePins.Empty + nameWithType: FramePins.Empty +- uid: Hi.Disp.FramePins.FrameSerial + name: FrameSerial + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_FrameSerial + commentId: P:Hi.Disp.FramePins.FrameSerial + fullName: Hi.Disp.FramePins.FrameSerial + nameWithType: FramePins.FrameSerial +- uid: Hi.Disp.FramePins.FrameSerial* + name: FrameSerial + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_FrameSerial_ + commentId: Overload:Hi.Disp.FramePins.FrameSerial + isSpec: "True" + fullName: Hi.Disp.FramePins.FrameSerial + nameWithType: FramePins.FrameSerial +- uid: Hi.Disp.FramePins.Height + name: Height + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_Height + commentId: P:Hi.Disp.FramePins.Height + fullName: Hi.Disp.FramePins.Height + nameWithType: FramePins.Height +- uid: Hi.Disp.FramePins.Height* + name: Height + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_Height_ + commentId: Overload:Hi.Disp.FramePins.Height + isSpec: "True" + fullName: Hi.Disp.FramePins.Height + nameWithType: FramePins.Height +- uid: Hi.Disp.FramePins.Pins + name: Pins + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_Pins + commentId: P:Hi.Disp.FramePins.Pins + fullName: Hi.Disp.FramePins.Pins + nameWithType: FramePins.Pins +- uid: Hi.Disp.FramePins.Pins* + name: Pins + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_Pins_ + commentId: Overload:Hi.Disp.FramePins.Pins + isSpec: "True" + fullName: Hi.Disp.FramePins.Pins + nameWithType: FramePins.Pins +- uid: Hi.Disp.FramePins.PinsChanged + name: PinsChanged + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_PinsChanged + commentId: P:Hi.Disp.FramePins.PinsChanged + fullName: Hi.Disp.FramePins.PinsChanged + nameWithType: FramePins.PinsChanged +- uid: Hi.Disp.FramePins.PinsChanged* + name: PinsChanged + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_PinsChanged_ + commentId: Overload:Hi.Disp.FramePins.PinsChanged + isSpec: "True" + fullName: Hi.Disp.FramePins.PinsChanged + nameWithType: FramePins.PinsChanged +- uid: Hi.Disp.FramePins.PixelsChanged + name: PixelsChanged + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_PixelsChanged + commentId: P:Hi.Disp.FramePins.PixelsChanged + fullName: Hi.Disp.FramePins.PixelsChanged + nameWithType: FramePins.PixelsChanged +- uid: Hi.Disp.FramePins.PixelsChanged* + name: PixelsChanged + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_PixelsChanged_ + commentId: Overload:Hi.Disp.FramePins.PixelsChanged + isSpec: "True" + fullName: Hi.Disp.FramePins.PixelsChanged + nameWithType: FramePins.PixelsChanged +- uid: Hi.Disp.FramePins.ProjDepth + name: ProjDepth + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_ProjDepth + commentId: P:Hi.Disp.FramePins.ProjDepth + fullName: Hi.Disp.FramePins.ProjDepth + nameWithType: FramePins.ProjDepth +- uid: Hi.Disp.FramePins.ProjDepth* + name: ProjDepth + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_ProjDepth_ + commentId: Overload:Hi.Disp.FramePins.ProjDepth + isSpec: "True" + fullName: Hi.Disp.FramePins.ProjDepth + nameWithType: FramePins.ProjDepth +- uid: Hi.Disp.FramePins.Visible + name: Visible + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_Visible + commentId: P:Hi.Disp.FramePins.Visible + fullName: Hi.Disp.FramePins.Visible + nameWithType: FramePins.Visible +- uid: Hi.Disp.FramePins.Visible* + name: Visible + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_Visible_ + commentId: Overload:Hi.Disp.FramePins.Visible + isSpec: "True" + fullName: Hi.Disp.FramePins.Visible + nameWithType: FramePins.Visible +- uid: Hi.Disp.FramePins.Width + name: Width + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_Width + commentId: P:Hi.Disp.FramePins.Width + fullName: Hi.Disp.FramePins.Width + nameWithType: FramePins.Width +- uid: Hi.Disp.FramePins.Width* + name: Width + href: api/Hi.Disp.FramePins.html#Hi_Disp_FramePins_Width_ + commentId: Overload:Hi.Disp.FramePins.Width + isSpec: "True" + fullName: Hi.Disp.FramePins.Width + nameWithType: FramePins.Width - uid: Hi.Disp.FuncDisplayee name: FuncDisplayee href: api/Hi.Disp.FuncDisplayee.html @@ -48797,6 +48946,328 @@ references: commentId: F:Hi.Disp.Pickable.mark fullName: Hi.Disp.Pickable.mark nameWithType: Pickable.mark +- uid: Hi.Disp.PinDrawing + name: PinDrawing + href: api/Hi.Disp.PinDrawing.html + commentId: T:Hi.Disp.PinDrawing + fullName: Hi.Disp.PinDrawing + nameWithType: PinDrawing +- uid: Hi.Disp.PinDrawing.#ctor(System.String) + name: PinDrawing(string) + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing__ctor_System_String_ + commentId: M:Hi.Disp.PinDrawing.#ctor(System.String) + name.vb: New(String) + fullName: Hi.Disp.PinDrawing.PinDrawing(string) + fullName.vb: Hi.Disp.PinDrawing.New(String) + nameWithType: PinDrawing.PinDrawing(string) + nameWithType.vb: PinDrawing.New(String) +- uid: Hi.Disp.PinDrawing.#ctor* + name: PinDrawing + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing__ctor_ + commentId: Overload:Hi.Disp.PinDrawing.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.Disp.PinDrawing.PinDrawing + fullName.vb: Hi.Disp.PinDrawing.New + nameWithType: PinDrawing.PinDrawing + nameWithType.vb: PinDrawing.New +- uid: Hi.Disp.PinDrawing.Display(Hi.Disp.Bind) + name: Display(Bind) + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_Display_Hi_Disp_Bind_ + commentId: M:Hi.Disp.PinDrawing.Display(Hi.Disp.Bind) + fullName: Hi.Disp.PinDrawing.Display(Hi.Disp.Bind) + nameWithType: PinDrawing.Display(Bind) +- uid: Hi.Disp.PinDrawing.Display(Hi.Disp.Bind,Hi.Geom.Vec3d) + name: Display(Bind, Vec3d) + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_Display_Hi_Disp_Bind_Hi_Geom_Vec3d_ + commentId: M:Hi.Disp.PinDrawing.Display(Hi.Disp.Bind,Hi.Geom.Vec3d) + fullName: Hi.Disp.PinDrawing.Display(Hi.Disp.Bind, Hi.Geom.Vec3d) + nameWithType: PinDrawing.Display(Bind, Vec3d) +- uid: Hi.Disp.PinDrawing.Display* + name: Display + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_Display_ + commentId: Overload:Hi.Disp.PinDrawing.Display + isSpec: "True" + fullName: Hi.Disp.PinDrawing.Display + nameWithType: PinDrawing.Display +- uid: Hi.Disp.PinDrawing.Dispose + name: Dispose() + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_Dispose + commentId: M:Hi.Disp.PinDrawing.Dispose + fullName: Hi.Disp.PinDrawing.Dispose() + nameWithType: PinDrawing.Dispose() +- uid: Hi.Disp.PinDrawing.Dispose* + name: Dispose + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_Dispose_ + commentId: Overload:Hi.Disp.PinDrawing.Dispose + isSpec: "True" + fullName: Hi.Disp.PinDrawing.Dispose + nameWithType: PinDrawing.Dispose +- uid: Hi.Disp.PinDrawing.ExpandToBox3d(Hi.Geom.Box3d) + name: ExpandToBox3d(Box3d) + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_ExpandToBox3d_Hi_Geom_Box3d_ + commentId: M:Hi.Disp.PinDrawing.ExpandToBox3d(Hi.Geom.Box3d) + fullName: Hi.Disp.PinDrawing.ExpandToBox3d(Hi.Geom.Box3d) + nameWithType: PinDrawing.ExpandToBox3d(Box3d) +- uid: Hi.Disp.PinDrawing.ExpandToBox3d* + name: ExpandToBox3d + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_ExpandToBox3d_ + commentId: Overload:Hi.Disp.PinDrawing.ExpandToBox3d + isSpec: "True" + fullName: Hi.Disp.PinDrawing.ExpandToBox3d + nameWithType: PinDrawing.ExpandToBox3d +- uid: Hi.Disp.PinDrawing.Finalize + name: ~PinDrawing() + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_Finalize + commentId: M:Hi.Disp.PinDrawing.Finalize + name.vb: '' + fullName: Hi.Disp.PinDrawing.~PinDrawing() + fullName.vb: '' + nameWithType: PinDrawing.~PinDrawing() + nameWithType.vb: '' +- uid: Hi.Disp.PinDrawing.Finalize* + name: ~PinDrawing + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_Finalize_ + commentId: Overload:Hi.Disp.PinDrawing.Finalize + isSpec: "True" + fullName: Hi.Disp.PinDrawing.~PinDrawing + nameWithType: PinDrawing.~PinDrawing +- uid: Hi.Disp.PinDrawing.IsAlwaysOnTop + name: IsAlwaysOnTop + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_IsAlwaysOnTop + commentId: P:Hi.Disp.PinDrawing.IsAlwaysOnTop + fullName: Hi.Disp.PinDrawing.IsAlwaysOnTop + nameWithType: PinDrawing.IsAlwaysOnTop +- uid: Hi.Disp.PinDrawing.IsAlwaysOnTop* + name: IsAlwaysOnTop + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_IsAlwaysOnTop_ + commentId: Overload:Hi.Disp.PinDrawing.IsAlwaysOnTop + isSpec: "True" + fullName: Hi.Disp.PinDrawing.IsAlwaysOnTop + nameWithType: PinDrawing.IsAlwaysOnTop +- uid: Hi.Disp.PinDrawing.Name + name: Name + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_Name + commentId: P:Hi.Disp.PinDrawing.Name + fullName: Hi.Disp.PinDrawing.Name + nameWithType: PinDrawing.Name +- uid: Hi.Disp.PinDrawing.Name* + name: Name + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_Name_ + commentId: Overload:Hi.Disp.PinDrawing.Name + isSpec: "True" + fullName: Hi.Disp.PinDrawing.Name + nameWithType: PinDrawing.Name +- uid: Hi.Disp.PinDrawing.ProbeBiasPx + name: ProbeBiasPx + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_ProbeBiasPx + commentId: P:Hi.Disp.PinDrawing.ProbeBiasPx + fullName: Hi.Disp.PinDrawing.ProbeBiasPx + nameWithType: PinDrawing.ProbeBiasPx +- uid: Hi.Disp.PinDrawing.ProbeBiasPx* + name: ProbeBiasPx + href: api/Hi.Disp.PinDrawing.html#Hi_Disp_PinDrawing_ProbeBiasPx_ + commentId: Overload:Hi.Disp.PinDrawing.ProbeBiasPx + isSpec: "True" + fullName: Hi.Disp.PinDrawing.ProbeBiasPx + nameWithType: PinDrawing.ProbeBiasPx +- uid: Hi.Disp.PinFlags + name: PinFlags + href: api/Hi.Disp.PinFlags.html + commentId: T:Hi.Disp.PinFlags + fullName: Hi.Disp.PinFlags + nameWithType: PinFlags +- uid: Hi.Disp.PinFlags.AlwaysOnTop + name: AlwaysOnTop + href: api/Hi.Disp.PinFlags.html#Hi_Disp_PinFlags_AlwaysOnTop + commentId: F:Hi.Disp.PinFlags.AlwaysOnTop + fullName: Hi.Disp.PinFlags.AlwaysOnTop + nameWithType: PinFlags.AlwaysOnTop +- uid: Hi.Disp.PinFlags.DuplicateNameDropped + name: DuplicateNameDropped + href: api/Hi.Disp.PinFlags.html#Hi_Disp_PinFlags_DuplicateNameDropped + commentId: F:Hi.Disp.PinFlags.DuplicateNameDropped + fullName: Hi.Disp.PinFlags.DuplicateNameDropped + nameWithType: PinFlags.DuplicateNameDropped +- uid: Hi.Disp.PinFlags.None + name: None + href: api/Hi.Disp.PinFlags.html#Hi_Disp_PinFlags_None + commentId: F:Hi.Disp.PinFlags.None + fullName: Hi.Disp.PinFlags.None + nameWithType: PinFlags.None +- uid: Hi.Disp.PinFlags.Occluded + name: Occluded + href: api/Hi.Disp.PinFlags.html#Hi_Disp_PinFlags_Occluded + commentId: F:Hi.Disp.PinFlags.Occluded + fullName: Hi.Disp.PinFlags.Occluded + nameWithType: PinFlags.Occluded +- uid: Hi.Disp.PinFlags.OcclusionTested + name: OcclusionTested + href: api/Hi.Disp.PinFlags.html#Hi_Disp_PinFlags_OcclusionTested + commentId: F:Hi.Disp.PinFlags.OcclusionTested + fullName: Hi.Disp.PinFlags.OcclusionTested + nameWithType: PinFlags.OcclusionTested +- uid: Hi.Disp.PinFlags.OnCanvas + name: OnCanvas + href: api/Hi.Disp.PinFlags.html#Hi_Disp_PinFlags_OnCanvas + commentId: F:Hi.Disp.PinFlags.OnCanvas + fullName: Hi.Disp.PinFlags.OnCanvas + nameWithType: PinFlags.OnCanvas +- uid: Hi.Disp.PinRecord + name: PinRecord + href: api/Hi.Disp.PinRecord.html + commentId: T:Hi.Disp.PinRecord + fullName: Hi.Disp.PinRecord + nameWithType: PinRecord +- uid: Hi.Disp.PinRecord.#ctor(System.String,System.Double,System.Double,System.Double,System.Int32,Hi.Disp.PinFlags) + name: PinRecord(string, double, double, double, int, PinFlags) + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord__ctor_System_String_System_Double_System_Double_System_Double_System_Int32_Hi_Disp_PinFlags_ + commentId: M:Hi.Disp.PinRecord.#ctor(System.String,System.Double,System.Double,System.Double,System.Int32,Hi.Disp.PinFlags) + name.vb: New(String, Double, Double, Double, Integer, PinFlags) + fullName: Hi.Disp.PinRecord.PinRecord(string, double, double, double, int, Hi.Disp.PinFlags) + fullName.vb: Hi.Disp.PinRecord.New(String, Double, Double, Double, Integer, Hi.Disp.PinFlags) + nameWithType: PinRecord.PinRecord(string, double, double, double, int, PinFlags) + nameWithType.vb: PinRecord.New(String, Double, Double, Double, Integer, PinFlags) +- uid: Hi.Disp.PinRecord.#ctor* + name: PinRecord + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord__ctor_ + commentId: Overload:Hi.Disp.PinRecord.#ctor + isSpec: "True" + name.vb: New + fullName: Hi.Disp.PinRecord.PinRecord + fullName.vb: Hi.Disp.PinRecord.New + nameWithType: PinRecord.PinRecord + nameWithType.vb: PinRecord.New +- uid: Hi.Disp.PinRecord.AlwaysOnTop + name: AlwaysOnTop + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_AlwaysOnTop + commentId: P:Hi.Disp.PinRecord.AlwaysOnTop + fullName: Hi.Disp.PinRecord.AlwaysOnTop + nameWithType: PinRecord.AlwaysOnTop +- uid: Hi.Disp.PinRecord.AlwaysOnTop* + name: AlwaysOnTop + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_AlwaysOnTop_ + commentId: Overload:Hi.Disp.PinRecord.AlwaysOnTop + isSpec: "True" + fullName: Hi.Disp.PinRecord.AlwaysOnTop + nameWithType: PinRecord.AlwaysOnTop +- uid: Hi.Disp.PinRecord.Depth + name: Depth + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_Depth + commentId: P:Hi.Disp.PinRecord.Depth + fullName: Hi.Disp.PinRecord.Depth + nameWithType: PinRecord.Depth +- uid: Hi.Disp.PinRecord.Depth* + name: Depth + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_Depth_ + commentId: Overload:Hi.Disp.PinRecord.Depth + isSpec: "True" + fullName: Hi.Disp.PinRecord.Depth + nameWithType: PinRecord.Depth +- uid: Hi.Disp.PinRecord.Flags + name: Flags + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_Flags + commentId: P:Hi.Disp.PinRecord.Flags + fullName: Hi.Disp.PinRecord.Flags + nameWithType: PinRecord.Flags +- uid: Hi.Disp.PinRecord.Flags* + name: Flags + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_Flags_ + commentId: Overload:Hi.Disp.PinRecord.Flags + isSpec: "True" + fullName: Hi.Disp.PinRecord.Flags + nameWithType: PinRecord.Flags +- uid: Hi.Disp.PinRecord.IsVisible + name: IsVisible + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_IsVisible + commentId: P:Hi.Disp.PinRecord.IsVisible + fullName: Hi.Disp.PinRecord.IsVisible + nameWithType: PinRecord.IsVisible +- uid: Hi.Disp.PinRecord.IsVisible* + name: IsVisible + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_IsVisible_ + commentId: Overload:Hi.Disp.PinRecord.IsVisible + isSpec: "True" + fullName: Hi.Disp.PinRecord.IsVisible + nameWithType: PinRecord.IsVisible +- uid: Hi.Disp.PinRecord.Name + name: Name + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_Name + commentId: P:Hi.Disp.PinRecord.Name + fullName: Hi.Disp.PinRecord.Name + nameWithType: PinRecord.Name +- uid: Hi.Disp.PinRecord.Name* + name: Name + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_Name_ + commentId: Overload:Hi.Disp.PinRecord.Name + isSpec: "True" + fullName: Hi.Disp.PinRecord.Name + nameWithType: PinRecord.Name +- uid: Hi.Disp.PinRecord.Occluded + name: Occluded + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_Occluded + commentId: P:Hi.Disp.PinRecord.Occluded + fullName: Hi.Disp.PinRecord.Occluded + nameWithType: PinRecord.Occluded +- uid: Hi.Disp.PinRecord.Occluded* + name: Occluded + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_Occluded_ + commentId: Overload:Hi.Disp.PinRecord.Occluded + isSpec: "True" + fullName: Hi.Disp.PinRecord.Occluded + nameWithType: PinRecord.Occluded +- uid: Hi.Disp.PinRecord.OnCanvas + name: OnCanvas + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_OnCanvas + commentId: P:Hi.Disp.PinRecord.OnCanvas + fullName: Hi.Disp.PinRecord.OnCanvas + nameWithType: PinRecord.OnCanvas +- uid: Hi.Disp.PinRecord.OnCanvas* + name: OnCanvas + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_OnCanvas_ + commentId: Overload:Hi.Disp.PinRecord.OnCanvas + isSpec: "True" + fullName: Hi.Disp.PinRecord.OnCanvas + nameWithType: PinRecord.OnCanvas +- uid: Hi.Disp.PinRecord.PickID + name: PickID + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_PickID + commentId: P:Hi.Disp.PinRecord.PickID + fullName: Hi.Disp.PinRecord.PickID + nameWithType: PinRecord.PickID +- uid: Hi.Disp.PinRecord.PickID* + name: PickID + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_PickID_ + commentId: Overload:Hi.Disp.PinRecord.PickID + isSpec: "True" + fullName: Hi.Disp.PinRecord.PickID + nameWithType: PinRecord.PickID +- uid: Hi.Disp.PinRecord.X + name: X + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_X + commentId: P:Hi.Disp.PinRecord.X + fullName: Hi.Disp.PinRecord.X + nameWithType: PinRecord.X +- uid: Hi.Disp.PinRecord.X* + name: X + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_X_ + commentId: Overload:Hi.Disp.PinRecord.X + isSpec: "True" + fullName: Hi.Disp.PinRecord.X + nameWithType: PinRecord.X +- uid: Hi.Disp.PinRecord.Y + name: Y + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_Y + commentId: P:Hi.Disp.PinRecord.Y + fullName: Hi.Disp.PinRecord.Y + nameWithType: PinRecord.Y +- uid: Hi.Disp.PinRecord.Y* + name: Y + href: api/Hi.Disp.PinRecord.html#Hi_Disp_PinRecord_Y_ + commentId: Overload:Hi.Disp.PinRecord.Y + isSpec: "True" + fullName: Hi.Disp.PinRecord.Y + nameWithType: PinRecord.Y - uid: Hi.Disp.PopModelMat name: PopModelMat href: api/Hi.Disp.PopModelMat.html @@ -130036,6 +130507,12 @@ references: isSpec: "True" fullName: Hi.NcParsers.Keywords.RadiusCompensation.Term nameWithType: RadiusCompensation.Term +- uid: Hi.NcParsers.Keywords.RotaryWords + name: RotaryWords + href: api/Hi.NcParsers.Keywords.RotaryWords.html + commentId: T:Hi.NcParsers.Keywords.RotaryWords + fullName: Hi.NcParsers.Keywords.RotaryWords + nameWithType: RotaryWords - uid: Hi.NcParsers.Keywords.Siemens name: Hi.NcParsers.Keywords.Siemens href: api/Hi.NcParsers.Keywords.Siemens.html @@ -137096,6 +137573,22 @@ references: isSpec: "True" fullName: Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.ComposePivotEntry nameWithType: PivotTransformUtil.ComposePivotEntry +- uid: Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.PinTiltInMachineSpaceAcrossRotaryWords(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Text.Json.Nodes.JsonObject,System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency}) + name: PinTiltInMachineSpaceAcrossRotaryWords(LazyLinkedListNode, JsonObject, List) + href: api/Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html#Hi_NcParsers_LogicSyntaxs_PivotTransformUtil_PinTiltInMachineSpaceAcrossRotaryWords_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__System_Text_Json_Nodes_JsonObject_System_Collections_Generic_List_Hi_NcParsers_Dependencys_INcDependency__ + commentId: M:Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.PinTiltInMachineSpaceAcrossRotaryWords(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},System.Text.Json.Nodes.JsonObject,System.Collections.Generic.List{Hi.NcParsers.Dependencys.INcDependency}) + name.vb: PinTiltInMachineSpaceAcrossRotaryWords(LazyLinkedListNode(Of SyntaxPiece), JsonObject, List(Of INcDependency)) + fullName: Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.PinTiltInMachineSpaceAcrossRotaryWords(Hi.Common.Collections.LazyLinkedListNode, System.Text.Json.Nodes.JsonObject, System.Collections.Generic.List) + fullName.vb: Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.PinTiltInMachineSpaceAcrossRotaryWords(Hi.Common.Collections.LazyLinkedListNode(Of Hi.NcParsers.Syntaxs.SyntaxPiece), System.Text.Json.Nodes.JsonObject, System.Collections.Generic.List(Of Hi.NcParsers.Dependencys.INcDependency)) + nameWithType: PivotTransformUtil.PinTiltInMachineSpaceAcrossRotaryWords(LazyLinkedListNode, JsonObject, List) + nameWithType.vb: PivotTransformUtil.PinTiltInMachineSpaceAcrossRotaryWords(LazyLinkedListNode(Of SyntaxPiece), JsonObject, List(Of INcDependency)) +- uid: Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.PinTiltInMachineSpaceAcrossRotaryWords* + name: PinTiltInMachineSpaceAcrossRotaryWords + href: api/Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html#Hi_NcParsers_LogicSyntaxs_PivotTransformUtil_PinTiltInMachineSpaceAcrossRotaryWords_ + commentId: Overload:Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.PinTiltInMachineSpaceAcrossRotaryWords + isSpec: "True" + fullName: Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.PinTiltInMachineSpaceAcrossRotaryWords + nameWithType: PivotTransformUtil.PinTiltInMachineSpaceAcrossRotaryWords - uid: Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.ResolveEndpointAbc(Hi.Common.Collections.LazyLinkedListNode{Hi.NcParsers.Syntaxs.SyntaxPiece},Hi.NcParsers.Dependencys.IMachineAxisConfig) name: ResolveEndpointAbc(LazyLinkedListNode, IMachineAxisConfig) href: api/Hi.NcParsers.LogicSyntaxs.PivotTransformUtil.html#Hi_NcParsers_LogicSyntaxs_PivotTransformUtil_ResolveEndpointAbc_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__Hi_NcParsers_Dependencys_IMachineAxisConfig_ @@ -152465,6 +152958,22 @@ references: isSpec: "True" fullName: Hi.NcParsers.Syntaxs.TransformationUtil.HasDynamicEntry nameWithType: TransformationUtil.HasDynamicEntry +- uid: Hi.NcParsers.Syntaxs.TransformationUtil.HasTransformEntry(System.Text.Json.Nodes.JsonObject,System.String) + name: HasTransformEntry(JsonObject, string) + href: api/Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_HasTransformEntry_System_Text_Json_Nodes_JsonObject_System_String_ + commentId: M:Hi.NcParsers.Syntaxs.TransformationUtil.HasTransformEntry(System.Text.Json.Nodes.JsonObject,System.String) + name.vb: HasTransformEntry(JsonObject, String) + fullName: Hi.NcParsers.Syntaxs.TransformationUtil.HasTransformEntry(System.Text.Json.Nodes.JsonObject, string) + fullName.vb: Hi.NcParsers.Syntaxs.TransformationUtil.HasTransformEntry(System.Text.Json.Nodes.JsonObject, String) + nameWithType: TransformationUtil.HasTransformEntry(JsonObject, string) + nameWithType.vb: TransformationUtil.HasTransformEntry(JsonObject, String) +- uid: Hi.NcParsers.Syntaxs.TransformationUtil.HasTransformEntry* + name: HasTransformEntry + href: api/Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_HasTransformEntry_ + commentId: Overload:Hi.NcParsers.Syntaxs.TransformationUtil.HasTransformEntry + isSpec: "True" + fullName: Hi.NcParsers.Syntaxs.TransformationUtil.HasTransformEntry + nameWithType: TransformationUtil.HasTransformEntry - uid: Hi.NcParsers.Syntaxs.TransformationUtil.KindDynamic name: KindDynamic href: api/Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_KindDynamic diff --git a/App/zh-Hans/HiNc.resources.dll b/App/zh-Hans/HiNc.resources.dll index 333ce112..c20371cd 100644 Binary files a/App/zh-Hans/HiNc.resources.dll and b/App/zh-Hans/HiNc.resources.dll differ diff --git a/App/zh-Hant/HiGeom.resources.dll b/App/zh-Hant/HiGeom.resources.dll index 8ecaad8f..b29dfdbf 100644 Binary files a/App/zh-Hant/HiGeom.resources.dll and b/App/zh-Hant/HiGeom.resources.dll differ diff --git a/App/zh-Hant/HiNc.resources.dll b/App/zh-Hant/HiNc.resources.dll index a6d3a8c9..d3748bf3 100644 Binary files a/App/zh-Hant/HiNc.resources.dll and b/App/zh-Hant/HiNc.resources.dll differ