HiNC-2025-webservice/wwwroot-src/src is the flagship front end: a Quasar CLI single-page
application in Vue 3, TypeScript and Pinia, served by the same ASP.NET Core process that answers its
-REST calls. Every page in Anatomy outside the desktop map documents something in this tree.
+REST calls. Every page in Anatomy documents something in this tree or in the backend beside it.
Folders below follow the stock Quasar skeleton order, with the two places the skeleton breaks called
out where they occur.
The genneral convention of the File Path of Load and Save is different by the single-user desktop application and web page application.
-
-
Tip
-
Always preserve an empty filter ( * . * ) for the browser.
-
-
Single-User Desktop Application
-
The default directory of the Save/Load button are generally:
-
-
System Default Directory or Project Directory (default, if not explicitly indicated)
-The initial directory is the project directory.
-
Resource Directory
-The path always point to <application path>/Resource/<classification> directory.
-The button label has to explicitly show ‘Load Resource’.
-
-
The kinds of buttons are not exclusive, they can be existed on the same tool bar.
-
If the selected file path is under the project directory, apply the relative path from the project, i.e. baseDirectory is project directory and relFile is the relative path.
-
Web Page Application
-
The default directory of the Save/Load button are generally:
+
A Load or Save button opens the browser at one of three roots:
Admin Directory
Project Directory
Resource Directory
-
The Resource Directory and Project Directory are generally under the Admin Directory. And the admin directory is generally set in the appsettings.json file.
+
The Resource Directory and Project Directory are generally under the Admin Directory, and the admin directory is generally set in the appsettings.json file. The kinds of button are not exclusive — several may sit on the same tool bar — and a button that opens the Resource root has to say so in its label.
+
If the selected file path is under the project directory, apply the relative path from the project: baseDirectory is the project directory and relFile is the relative path.
+
+
Tip
+
Always preserve an empty filter ( * . * ) for the browser.
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/conventions/translation-remarks.html b/App/wwwroot/HiAPI-docsite/anatomy/conventions/translation-remarks.html
index e74b39dd..a7bb304f 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/conventions/translation-remarks.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/conventions/translation-remarks.html
@@ -164,16 +164,11 @@ MIME-ish strings (STL, *.hincproj) · units (mm<
localStorage keys and series identifiers — anything a machine compares. Language self-names
(English, 简体中文, 繁體中文) stay in their own language in every locale. The full list lives with
the bundles, in the i18n folder's README.
-
Terms Carried by the Desktop Client
-
Three milling-cutter surfaces exist only on the WPF client, and their terms belong to the same
-contract, so none of the words is reused elsewhere:
-
-
Insert-Cutter 刀片 — a tab on Mech/ToolHouse/MillingCutterPanel.xaml
-
Flute-Inner-Beam 刃中芯 — the tab served by Mech/ToolHouse/FluteInnerBeamPanel.xaml
-
Cutter Integral Mode 刀頭形式 — a labelled tab there as well; the web application carries the
-same choice as the integralMode datum, which decides whether the Tool House material section
-offers a separate shank material, and shows no label of its own
-
+
A Choice That Carries No Label
+
The cutter's integral mode reaches the web application as the integralMode datum rather than as a
+named field: it decides whether the Tool House material section offers a separate shank material,
+and shows no label of its own. A term with no visible string is still part of the contract — it has
+to be settled before anything renders a value derived from it.
In the web application the status text moved out of the tool bar and onto the Execution tree item, which carries the run-state badge. The two single-advance buttons there share one skip_next icon and are separated by a letter drawn into the button's corner — L for the line button, S for the step button — rather than by colour; the tool-tips carry the key names.
Behavior
-
Both the webservice and the win-desktop application watch LocalProjectService events to track PacePlayer status changes.
In the webservice, ExecutionStatusService subscribes to those events and broadcasts status changes over SignalR through ExecutionStatusHub.
-
The win-desktop application subscribes to the same LocalProjectService events directly.
The frequently used buttons carry hotkeys: Start / Resume, Pause, Run One Line and Run One Step. The app's tool-tips are the only place those key bindings are written down.
The background color of the Status Text Field follows the status:
@@ -154,7 +153,7 @@
The F5–F8 handler applies the same predicates before acting, and declines in two more cases: when the event target is an input, a textarea or a contenteditable element, and when the hosting page is deactivated. The second matters because the shell keep-alives the routed pages, so leaving the Execution route deactivates rather than unmounts this component; without the detach, F5 elsewhere in the app would drive the transport instead of reloading the browser. Every declined key falls through to the browser.
Tip
-
Use icons rather than text on the tool-bar buttons. Run One Line and Run One Step share an icon, so they need a second mark to tell them apart — the win-desktop application seasons the icon green and blue, the web application draws an L and an S in the button corner. Either works; the default colour is enough for the rest.
+
Use icons rather than text on the tool-bar buttons. Run One Line and Run One Step share an icon, so they need a second mark to tell them apart — this bar draws an L and an S in the button corner. The default colour is enough for the rest.
The panel has no route and no Control-Tree node of its own. It is chrome on the Execution page (/execution): the canvas panel's expansion header carries the Meshed Geom ▾ dropdown — titled Workpiece rendering cache and geometry-diff settings — whose Graphic Cache row opens this panel in a nested menu. It hangs there because it acts on the workpiece meshed geometry's rendering cache, and its sibling row in the same dropdown is Diff Visual Radius. It is therefore only reachable while the Execution page's canvas column is shown.
The panel is self-contained: it takes no parent-supplied model. It holds local lower / upper / current values, loads them on mount, and commits each edit to GET/POST /api/preference/graphic-cache. UserService / UserConfig is the server-side model behind that endpoint.
Layout
Titled Graphic Cache (MB), with the caption “Memory budget for rendering cache. Lower & upper bound the slider.”
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/ListCommand-panel.html b/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/ListCommand-panel.html
index 45b8f0e7..566843ef 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/ListCommand-panel.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/ListCommand-panel.html
@@ -205,36 +205,6 @@ carrying no title of its own still reads as its localized display name.
pane. The draggable vertical divider on screen belongs to the Execution page, between the left dock
— the Control Tree over the editor panel — and the central area; a second divider inside that dock
drags the height between the tree and the editor.
-
The WPF Client's List Panel
-
The WPF panel edits the root list only. It binds the project's player command as a list, its Add
-menu offers no List item, and its content switch has no List arm, so a nested list entry selected
-there renders the literal text “No editor available for ListCommand”. Nesting is a web surface.
-
-
Two columns: a 400px entry column, a GridSplitter, and the selected command's content column,
-both columns floored at 300px.
-
One toolbar over the list — Add, Remove, Move Up, Move Down — acting on the list selection. There
-is no duplicate.
-
Add is a plain button that pops a fixed six-item context menu built in its click handler:
-“Pre-Setting Command”, “NC Opt Option Command”, “NC File Command”, “NC Code Command”,
-“Script Command” and “Post Execution Command”.
-
The list box is extended-select. Remove takes every selected entry, prompting with a count when
-more than one is selected, and a drag can carry a whole selection; Move Up and Move Down stay
-disabled unless exactly one entry is selected.
-
Each entry box carries a labelled Enable checkbox at its left, the command's title in bold, and a
-pin icon with a “Pin at beginning” / “Pin at end” label — shown on the first entry when it is a
-General Config command, and on the last when it is a Post-Execution command.
-
Insertion works around the ends: a new entry lands before a trailing Post-Execution when that is
-the list's only one, and a General Config lands at the top unless the list already starts with
-one. A drag that would move a pinned entry — or drop another entry onto it — is refused, the guard
-testing that the entry is the only command of its kind and sits at that end. The Move Up / Move
-Down buttons are not covered by that guard.
-
The content panel is greyed and made read-only while the selected entry's Enable box is clear.
-
Files dropped from the file explorer onto the entry list create one enabled NC File command per
-file, taking a project-relative path when the file sits under the project directory.
-
The entry label falls back to the raw class name for a command that composes no title of its
-own — GeomDiffCommand, OptimizeToFilesCommand, WriteStepFilesCommand and
-WriteShotFilesCommand.
A plain monospace text area: on the web an 18-row field with a 360 px floor, on WPF a Consolas
-text box in an NC Code group box that takes the panel's remaining height.
-
No line-number gutter and no syntax highlighting on either client. The rich editor in this
+
A plain monospace text area: an 18-row field with a 360 px floor.
+
No line-number gutter and no syntax highlighting. The rich editor in this
folder is the Script command's — that command ships
CodeMirror with a C# grammar, this one ships a text area.
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/NcFileCommand-panel.html b/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/NcFileCommand-panel.html
index 359a8984..9c0a6579 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/NcFileCommand-panel.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/NcFileCommand-panel.html
@@ -97,9 +97,8 @@ into the project itself.
and an absolute path on the server is accepted just as well. No base directory is stored with the
command: at play time RunNcFile hands the stored path
together with the project's own base directory to the local project service, and that is where a
-relative path acquires its root. The WPF panel's BaseDirectory is the code-behind assistant
-property the Load Pattern asks a file-assigning GUI to carry,
-assigned to the panel by its parent — a panel member, not a model member.
+relative path acquires its root; the convention behind it is the
+Load Pattern.
The panel renders on the command's own node in the Mission branch of the Execution page's Control
Tree, below the move / duplicate / delete control bar. This command has no title of its own, so the
row and tree label read Program File [path], the path being the detail the label brackets.
@@ -124,8 +123,7 @@ as CSV, and every other extension as brand NC).
the project folder.
Every keystroke saves the path. Leaving the field or pressing Enter additionally refreshes
the file-info banner.
-
The web field flexes to fill the row beside the Browse button at any panel width; the WPF
-field is a fixed 200 px column carrying its own label.
+
The field flexes to fill the row beside the Browse button at any panel width.
Browse Button
@@ -140,8 +138,6 @@ field is a fixed 200 px column carrying its own label.
Four choices: Auto (by extension), Brand NC, CL (CLSF) and CSV. The hint restates what Auto
detects, so the runner can be pinned when the extension would route the file elsewhere.
-
This control is the web client's. The WPF panel ships no kind control, so a project edited
-there keeps the kind it already holds — Auto until something else sets it.
File Info Banner
@@ -180,9 +176,6 @@ browser to preserve. It is the backstop for a brand extension the NC group does
CL and CSV are split out because they are closed extension sets: those are exactly the extensions
Auto routes to the CL and CSV runners, and everything else falls through to brand NC.
-
The WPF Browse button opens an OpenFileDialog with the panel's file-filter resource, starting at
-the project directory or at the current file's own directory. A pick under the project directory is
-stored as a relative path, and a pick outside it as an absolute one.
Multi-Pick Fan-Out
The dialog is multi-select, and this is the one command editor that grows the mission. The first
picked file lands on this command. Each further pick becomes a new Program File command, added
@@ -191,18 +184,9 @@ list, so a command inside a nested list fans out inside that nested list. The pa
structure change, which rebuilds the owning list's branch around the new rows and leaves the
selection on this command.
Where the Program Text Is Edited
-
The two clients part company here, and the command is the same either way: it stores a path.
-
-
Web — the panel does not edit the file. It assigns the path, picks the runner, reports what
-the server knows about the file, and previews its first 100 lines read-only. Nothing in the
-browser writes NC bytes back; the two file endpoints this panel calls are both reads.
-
WPF — the panel opens the file. A non-text file, or one the panel cannot find, disables the
-editor and states why in the Head Message Place above it. A text file within 20000 lines opens for
-editing, with its line count in the group-box header; a longer one shows its first 20000 lines
-read-only and warns in the Head Message Place. Two seconds after the last keystroke the editor
-writes the file back, and reports the save in that same message place. The editor is AvalonEdit
-with line numbers where that assembly resolves, and a plain Consolas text box otherwise.
-
+
The command stores a path, and the panel does not edit the file. It assigns the path, picks the
+runner, reports what the server knows about the file, and previews its first 100 lines read-only.
+Nothing in the browser writes NC bytes back; the two file endpoints this panel calls are both reads.
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/NcOptOption-panel.html b/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/NcOptOption-panel.html
index 85e51262..b6b3383f 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/NcOptOption-panel.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/execution/mission/NcOptOption-panel.html
@@ -94,7 +94,7 @@ preference. Run assigns the command's option object onto the sessio
sessionShell.NcOptOption = NcOptOption — so the settings take effect at the point the entry sits
in the list. Everything played below it optimizes under them, and a second NC Optimization Config
further down the list re-points them mid-mission.
-
The command carries no title on either client. Its row and its tree label always read
+
The command carries no title. Its row and its tree label always read
NC Optimization Config: GetCommandTitle returns that fixed name and takes nothing from the user.
Where It Renders
The web client has one editor component for this command and mounts it once per tree node, each
@@ -126,7 +126,6 @@ command — a disabled command is skipped during play and stays fully editable.<
The desktop client labels the same switch “Enable Depth Splitting”.
Enable Interpolation CheckBox
@@ -327,11 +326,6 @@ feed per tooth or preferred force survives a project save and reload.
-
The Two Clients
-
The desktop client edits the same command in one scrolling panel of six group boxes, and it names 17
-of the model's options — the four enable switches, the two distances, the three feedrates,
-acceleration and jerk, Preferred Force with the two spindle safety factors, and the three
-compensation switches.
The web client edits five more, and that is the whole difference between the two editors: Min Feed
Per Tooth, Max Feed Per Tooth and Feedrate Assignment Ratio in the Feedrate section, and Yielding
Safety Factor and Thermal Yield Safety Factor in Force & Safety.
The key model is PostExecutionCommand, the command both clients label
-Post-Execution. It is the Output category's first catalog entry, and it carries five outputs
+
The key model is PostExecutionCommand, labelled Post-Execution. It is the Output category's first catalog entry, and it carries five outputs
derived from what the session has played: step files, shot files, optimization files, a CL → NC
writeback, and a geometry-difference detection.
When It Runs, and What It Covers
@@ -103,9 +102,7 @@ command before this command — and it re-serializes every control file the sess
play is written back too. Read this together with
General Config, the other half of the pair: those settings
apply from their position forward, these outputs cover everything up to this position.
-
The web client places the command anywhere in the list, like any other. The WPF client pins it to
-the end: a new command is inserted before a trailing Post-Execution while that is the list's only
-one, and the drag guard refuses to move it off the last position.
+
The command sits anywhere in the list, like any other; nothing pins it to the end.
Run executes the enabled outputs in an order of its own, which is not the order the tree and
the list below show them in: shot files, then step files, then optimization, then the CL → NC
writeback, then the geometry difference. Output timestamps follow that order rather than the layout.
@@ -218,14 +215,6 @@ carries the catalog attribute, so they load from a project file but are not offe
Command dialog. Post-Execution is the catalogued carrier of these outputs, which is why they are
edited as its sections.
-
The WPF Client's Panel
-
There four of the outputs are group boxes on one panel, each an enable checkbox over a grid that is
-disabled until the box is ticked: Step Files Output, Shot Files Output, Optimization Output and
-Geometry Difference Detection. The physics condition collapses the Shot Files and Optimization group
-boxes rather than omitting tree nodes.
-
CL → NC Writeback is the one output the web client has and this panel does not. Its two properties
-live on the same engine command, and the web section and its two endpoints are where they are
-edited.
@@ -251,7 +240,7 @@ overview caption and the writeback paragraph.
wwwroot-src/src/stores/appState.ts — the physics preference and licence flags the tree builder
reads.
Environments/PreferenceController.cs — serves the physics preference already combined with the
-advanced-physics licence, the same condition the WPF panel evaluates.
+advanced-physics licence.
Missions/MissionController.cs — the commands/{path}/postexecution/* endpoints: the five enable
flags, the four templates, the shot-file time resolution and the geom-diff detect radius.
The key model is PreSettingCommand, the command both clients label
-General Config. It is one command carrying a bundle of session settings — the machining
+
The key model is PreSettingCommand, labelled General Config. It is one command carrying a bundle of session settings — the machining
resolution, the machining motion resolution, collision detection, pause on failure, physics — plus
an optional read of a meshed-geometry file.
Where a General Config Comes From
-
The two clients differ on how a mission acquires these settings, and that difference is the first
-thing to know about this panel.
-
The WPF client creates the bundle. Its Add menu carries a hard-coded item that constructs a
-PreSettingCommand, and the insert rule pins it to the top of the list: a new General Config lands
-at index 0 unless the list already starts with one, and while it is the list's only General Config
-the drag guard refuses to move it off that position.
-
The web client's Add Command dialog is served by the server's command catalog, which reflects every
+
How a mission acquires these settings is the first thing to know about this panel.
+
The Add Command dialog is served by the server's command catalog, which reflects every
engine command carrying [CommandCatalog]. PreSettingCommand carries no such attribute, so the
dialog cannot produce one — the catalog keeps presetting only as a readable kind key, and creating
a command looks the kind up in the addable set alone. What the web offers instead is the same
@@ -212,21 +206,6 @@ project is loaded or assigned — not on a runtime reset and not when the workpi
an explicit setting survives both. This command carries its own value, and overwrites the
session's with it at the moment the command runs.
-
The WPF Client's Panel
-
There the whole bundle is one panel, in two group boxes.
-
-
Meshed Geometry Settings — an Enable Read Meshed Geometry checkbox over a Geometry File text
-box and a Browse button; the grid beneath the checkbox is disabled until it is ticked. Browse is
-an OpenFileDialog filtered to *.wct;*.stl, storing a pick under the project directory as a
-relative path and one outside it as an absolute path.
-
Machining Settings — the Machining Resolution control is an editable ComboBox pre-filled with
-fifteen powers of two, from 0.0009765625 up to 16 in doublings, and a typed value outside that
-list is accepted. Beside the Motion Resolution ComboBox a content presenter holds the fixed
-fields, built at runtime and labelled Linear Resolution (mm) and Angle Resolution (deg) — Angle
-Resolution being this client's wording for the same RotaryResolution_deg the web labels Rotary
-Resolution. The three checkboxes sit loose in the same grid, and the Enable Physics one carries no
-licence gate.
Labelled “Title (optional)” on the web, “Script Title” on WPF.
+
Labelled "Title (optional)".
Autosave Indicator (web)
@@ -183,11 +183,6 @@ the evaluator uses — and refuses to start when any of them has an error, namin
title, path, diagnostic id, message and line. The SPA's Start sends nothing to bypass that check, so
the refusal is what a user sees. The same check is also an endpoint of its own, per command and for
the whole mission.
-
The Two Clients
-
The desktop client edits the same command in AvalonEdit: a bold Script Title label with its text
-box, a Script Text label, and the editor with C# syntax highlighting and a line-number gutter,
-bound to the command through an attached behaviour. There is no completion popup and no autosave —
-the binding writes straight into the command as the text changes.
The dialog has no route and no Control-Tree node. It is a modal on the Execution page (/execution), opened by the tune icon button on the Step Properties panel's title bar in the Step Info column — so it is reachable only while that column and that panel are shown. The button sits next to the list it configures.
The dialog's own view models are the two fetched values, categories and displayedKeys. The server models they mirror are UserService.CandidateStepPresentKeyList plus UserService.StepPresentAccessDictionary (the candidates) and UserConfig.DisplayedStepPresentKeyList (the ordered displayed list). The dialog's only prop is its open/closed flag.
Layout
@@ -144,10 +143,9 @@
custom — “Custom”, the catch-all for every key the mapping does not place, including the keys registered at run time through UserService.AdditionalStepPresentAccess.
All seven are always returned; nothing gates any of them, and the candidate list is read from UserService.CandidateStepPresentKeyList rather than from MachiningStep directly, so runtime-registered keys are included.
-
Each client carries its own copy of the key → category mapping: ResolveStepPresentCategory on the webservice, GetKeyCategory in the WPF window. The two are kept in step by hand, with the seven category codes as the shared contract — adding a property means editing both.
+
The key → category mapping is ResolveStepPresentCategory on the webservice, with the seven category codes as its contract.
Labels and Localization
The web app resolves name and shortName server-side for the requested language from the shipped step-present catalog, laid over the live PresentAttribute.Name and ShortName values — those are the English truth and the fallback for a missing catalog file or key. Unit is sent as-is and does not localize. The dialog pins the language with a ?lang= argument on the request and re-pulls when the UI locale changes.
-
The WPF window resolves the same labels locally, through a resource manager over MachiningStep; a key with no translation keeps its original value.
The WPF desktop app has no surface for either value — no page, no panel, and no handler for the
-.CoolantHeatCondition extension. There, both are whatever the project XML carries on the
-equipment face, or the class defaults when the XML says nothing.
-
Layout
Background leaf — equipment/background, item type ThermalCondition
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/general-setup/controller/machine/native-parameters.html b/App/wwwroot/HiAPI-docsite/anatomy/general-setup/controller/machine/native-parameters.html
index e4b20f55..cbd7c40c 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/general-setup/controller/machine/native-parameters.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/general-setup/controller/machine/native-parameters.html
@@ -252,8 +252,7 @@ decides which axis consumes which position table, is shown on
written here as an Axis parameters (integer) row; the REST surface carries no assignment writer
at all. The equidistant definition — the numerator MD30501 and the offset MD30503 as axis
parameters, the denominator MD30502 as an integer axis parameter — has no endpoint that reads or
-writes it and no panel that offers a cell for it: on the web surface it is three ordinary rows on
-this leaf. The engine is its reader: an axis whose MD30500 is 3 resolves its station spacing from
+writes it and no panel that offers a cell for it: it is three ordinary rows on this leaf. The engine is its reader: an axis whose MD30500 is 3 resolves its station spacing from
the trio, and Indexing Position Tables prints that axis' assignment as Equidistant
(MD30501–MD30503), naming the three numbers it offers no cell for. The two position lists
themselves are the mirror image, stored as list properties outside all three dictionaries and so
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/general-setup/fixture.html b/App/wwwroot/HiAPI-docsite/anatomy/general-setup/fixture.html
index fff604e8..713a85ca 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/general-setup/fixture.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/general-setup/fixture.html
@@ -93,18 +93,16 @@ surfaces:
the equipment/fixture branch of the General Setup page's Control Tree
(/general-setup?tree=equipment/fixture), an equipment child of the General Setup group between
-Coolant and Workpiece. /fixture and anything below it redirects there;
-
in the WPF client, a sub-window opened from the Main Panel.
+Coolant and Workpiece. /fixture and anything below it redirects there.
-
Both edit the one fixture the project owns.
+
It edits the one fixture the project owns.
Key Model:
Fixture
-On the web it is addressed by an IndexService key handed to the
+It is addressed by an IndexService key handed to the
Object Management Menu Button and installed back onto
-the project through the controller's UpdateFixture. On the WPF client the same button is wired
-with a TargetObjectGetter / TargetObjectSetter pair (see that page for the design pattern).
+the project through the controller's UpdateFixture.
Assistant Model:
@@ -114,14 +112,11 @@ with a TargetObjectGetter / TargetObjectSetter pair (see that page for the desig
-
The displayee differs by client. The web branch has no fixture-only canvas: it shares the General
-Setup canvas, whose displayee is the equipment-setup displayee (Disp/EquipmentSetupDisplayee.cs) —
-the merged fixture + workpiece scene with the anchor, buckle and controller-coordinate overlays. Its
-option set is the equipment-setup config (Disp/EquipmentSetupDisplayeeConfig.cs), carried on
-UserService.UserConfig as its EquipmentSetupDisplayeeConfig property. The WPF sub-window has a
-canvas of its own, whose displayee is FixtureEditorDisplayee configured by
-FixtureEditorDisplayeeConfig, taken from UserService.UserConfig as its
-FixtureSetupDisplayeeConfig property.
+
There is no fixture-only canvas: the branch shares the General Setup canvas, whose displayee is the
+equipment-setup displayee (Disp/EquipmentSetupDisplayee.cs) — the merged fixture + workpiece scene
+with the anchor, buckle and controller-coordinate overlays. Its option set is the equipment-setup
+config (Disp/EquipmentSetupDisplayeeConfig.cs), carried on UserService.UserConfig as its
+EquipmentSetupDisplayeeConfig property.
Layout
Control Tree Branch
The root panel is rendered inline by the dock's primary editor pane, so it has no title label of its
@@ -164,53 +159,10 @@ Display Options dropdown carries this branch's share of the scene — the
-
WPF Page
-
-
Head Line
-
-
Object Management Menu Button — file extension
-.Fixture, load type Fixture, rel file Fixture.xml. The pointed
-Editor Panel is the Management Tabs Panel, a ContentPresenter the button swaps between the tab
-stack and XML mode.
-
Title Label
-
-
-
Management Tabs Panel — the same content the tree renders as nodes, stacked as tabs:
-
Display Options menu — the Show Geom Anchor, Show Workpiece Buckle and Show Table Buckle
-checkboxes and the Solid / Edge / Hide rendering-mode radio group, all writing
-FixtureEditorDisplayeeConfig.
Both clients put a draggable divider between the editor column and the canvas: a GridSplitter in the
-WPF page, nested draggable splitters on the web page (dock / content column / canvas), plus the
-dock's own height divider between the tree row and the editor row.
Behavior
-
ClearGeomCache() runs after any change at or below the branch. On
-the web each node's afterChange chain ends in the controller's ClearGeometryCache, which calls it;
-in WPF the page calls it directly from the geometry control's setter and update callbacks.
+
ClearGeomCache() runs after any change at or below the branch:
+each node's afterChange chain ends in the controller's ClearGeometryCache, which calls it.
The two anchor slots re-commit their swap-in before clearing the cache: an inner-value edit
re-posts UpdateGeomToWorkpieceTransformer / UpdateGeomToTableTransformer, so the object the
switchboard produced is always the one installed on the owning field when the redraw happens.
@@ -222,10 +174,7 @@ once.
Kind pickers are parent-aware. Picking a geometry kind calls CreateGeometry, which installs the
new object on Geom server-side and maps the literal None to
null; picking a transformer kind creates the object and then rebinds the owning field.
-
View snapping differs by client. The WPF page snaps its canvas to the isometric view when the
-displayee is bound, and again whenever a new geometry object is set, on the assumption that a
-shape swap changes the scene more than an edit within one shape does. The shared web canvas snaps
-once, when its displayee is bound — the display controller's initialize does it server-side.
+
The shared canvas snaps to the isometric view once, when its displayee is bound — the display controller's initialize does it server-side.
Afterwards a geometry set only clears the cache, and the operator re-frames from the
RenderingCanvas Tool Bar's view picker.
Both canvases draw the live model, so an edit shows on the next frame with no further calls.
@@ -287,13 +236,11 @@ fixture + workpiece scene with the anchor, buckle and controller-coordinate over
HiMech/NcMech/Fixtures/Fixture.cs — the key model: the geometry, the table and workpiece
buckles, the geom anchor, the two anchor transformers and ClearGeomCache.
-
HiMech/NcMech/Fixtures/FixtureEditorDisplayee.cs — the WPF fixture canvas's displayee.
-
HiMech/NcMech/Fixtures/FixtureEditorDisplayeeConfig.cs — its option set: ShowGeomAnchor,
-ShowWorkpieceBuckle, ShowTableBuckle and the rendering mode.
Freeform Holder Panel — the other surface built from the same generic Geometry and Transformer slots
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/general-setup/machine-tool.html b/App/wwwroot/HiAPI-docsite/anatomy/general-setup/machine-tool.html
index 62518402..07b61100 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/general-setup/machine-tool.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/general-setup/machine-tool.html
@@ -97,18 +97,16 @@ group and a leaf: chain structure belongs to the
the /machine-tool route, a standalone surface pairing a chain-only canvas with a load button
and a GUI / XML view of what is loaded. Its fields are read-only, but the route is not: its Load
installs the picked chain file onto the project. It carries no Page-menu entry and is reached by
-URL;
-
in the WPF client, a sub-window opened from the Main Panel.
+URL.
-
All three edit the one chain the project owns.
+
Both edit the one chain the project owns.
Key Model:
IMachiningChain
-On the web the chain is addressed by an IndexService key handed to the
+The chain is addressed by an IndexService key handed to the
Object Management Menu Button and installed back onto
-the project through the controller's Update. On the WPF client the same button is wired with a
-TargetObjectGetter / TargetObjectSetter pair (see that page for the design pattern).
+the project through the controller's Update.
Assistant Model:
@@ -184,43 +182,6 @@ fetched lazily on the first switch to XML and re-fetched after a load while XML
The pointed Editor Panel is Management Panel — a ContentPresenter the button swaps between the
-built GUI panel and an AvalonEdit text editor for XML mode.
Name TextField — its TextChanged writes straight onto the chain.
-
-
-
Note Setting Line
-
-
Note Label
-
Note TextField — multi-line, same write-through.
-
-
-
-
-
Type Line — italic Type: {chain type}.
-
Empty-state label when no chain is loaded.
-
-
-
Behavior
Load / Paste / XML-Apply only swap the IndexService entry. The tree root then installs the result
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/general-setup/spindle-capability.html b/App/wwwroot/HiAPI-docsite/anatomy/general-setup/spindle-capability.html
index 1d8baae6..361fc02e 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/general-setup/spindle-capability.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/general-setup/spindle-capability.html
@@ -109,13 +109,6 @@ side-file reference
-
-
Note
-
The WPF desktop app has no spindle-capability surface: no page, no panel, and no handler for the
-.SpindleCapability extension. There, the value is whatever the project XML carries on the
-equipment face, or the class defaults when the XML says nothing. The .SpindleCapability object
-management menu ships on the web only, on this branch's root panel.
-
Layout
The branch is one root plus five children, six selectable nodes in all. Each node's editor occupies
the dock's PRIMARY row, and all six — the root included — register the same CONTENT-column view,
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/general-setup/workpiece.html b/App/wwwroot/HiAPI-docsite/anatomy/general-setup/workpiece.html
index 788bfa0b..105f23fb 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/general-setup/workpiece.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/general-setup/workpiece.html
@@ -87,16 +87,14 @@
Workpiece
-
The Workpiece editor is the equipment/workpiece branch of the General Setup page's Control Tree (/general-setup?tree=equipment/workpiece); the old /workpiece route redirects there. In the WPF client it is a sub-window opened from the Main Panel.
+
The Workpiece editor is the equipment/workpiece branch of the General Setup page's Control Tree (/general-setup?tree=equipment/workpiece); the old /workpiece route redirects there.
The key model is Workpiece, taken from the Main Panel's
Workpiece. The cached solids it is drawn from belong to
-WorkpieceService, which both clients share.
-
The display config differs by client. The web branch has none of its own: it shares the General Setup
-canvas, gated by the equipment-setup config (Disp/EquipmentSetupDisplayeeConfig.cs), which carries
+WorkpieceService.
+
The branch has no display config of its own: it shares the General Setup canvas, gated by the equipment-setup config (Disp/EquipmentSetupDisplayeeConfig.cs), which carries
the fixture and workpiece flags together — the fixture and workpiece geometry anchors keep separate
flags, while the fixture↔workpiece buckle pair, being one attached identity at one location, is a
-single flag. The WPF page takes its own WorkpieceEditorDisplayeeConfig
-from UserService.UserConfig.
The default resources of Workpiece Material and Cutting Parameter exist in Resource folder under application folder (Not project folder). Both clients seed their file pickers at the matching Resource sub folder:
@@ -336,9 +220,7 @@ None leaves the old object indexed, and re-committing would resurrect it.
Both clients reach that one service by different routes: the web branch posts the controller's
-cache-clear endpoints, and the WPF page calls
-WorkpieceEditorDisplayee, which forwards to the same service.
+
The branch reaches that service by posting the controller's cache-clear endpoints.
Anchor edits re-commit their transformer and deliberately do not clear the geometry cache, so
a placement change forces no CubeTreeFile re-mesh.
@@ -348,10 +230,7 @@ cache chain runs after a change.
The equipment canvas snaps to the isometric view when its displayee is bound to a rendering
connection; a shape edit on the branch re-commits and clears the cache so the next frame
-re-solidifies, and leaves the view alone. The WPF page snaps its own canvas to isometric when a
-Raw or Target shape is set to a different object, and whenever its meshed-geometry panel updates
-its content — the assumption being that setting a shape changes the viewer more than changing its
-content does, so only the setter event adjusts the view.
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/geom/box3d-control.html b/App/wwwroot/HiAPI-docsite/anatomy/geom/box3d-control.html
index f7c91f4c..ff2e66b5 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/geom/box3d-control.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/geom/box3d-control.html
@@ -94,9 +94,8 @@ slot, or the geometry switchboard embedded inline.
Layout
Edit Mode — a selector over three modes. Its internal values are MinMax, MinDimension and
-CenterDimension; the web labels them “Min / Max”, “Min + Dimension” and “Center + Dimension”,
-the desktop client “Min and Max”, “Min and Dimension” and “Center and Dimension”.
-
Min, Max, Dimension, Center — four vector rows, one X / Y / Z input each. The web
+CenterDimension, labelled “Min / Max”, “Min + Dimension” and “Center + Dimension”.
+
Min, Max, Dimension, Center — four vector rows, one X / Y / Z input each. The editor
captions Dimension “Dimension (Max − Min)” and Center "Center ((Max + Min) / 2)"; the Min and Max
captions come from the shared label set rather than the geometry one.
@@ -107,18 +106,14 @@ in anything but Center + Dimension.
Only Min and Max are settable on the type;
Dim and Center are derived and get-only. That is why the
other two modes are arithmetic over the same two stored corners rather than a different storage
-shape — and on the web that arithmetic happens in the browser, which then posts the resulting Min
-and Max.
+shape — and that arithmetic happens in the browser, which then posts the resulting Min and Max.
Behavior
A row commits on blur or Enter, not per keystroke. The vector widget emits only from its blur
handlers, suppresses the emit when the parsed value is unchanged, and reverts an unparseable entry
to its previous value.
-
The web editor has no read-only variant. The desktop control additionally carries an
-IsInfoMode property that a host sets to turn the whole control into a display: every field goes
-read-only and the Edit Mode selector is hidden outright. Two hosts use it, the STL file control and
-the geometry combination control. The web equivalent is not this editor — the STL file editor draws
-its own read-only bounding-box rows.
+
This editor has no read-only variant. A host that needs one draws its own rows instead — the
+STL file editor's read-only bounding-box rows are not this editor.
Four endpoints ship without a caller. The controller exposes UpdateByMinDimension,
UpdateByCenterDimension, IndexDimension and IndexCenter; the shipped SPA calls none of them,
because the editor resolves every mode to a plain Update.
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/geom/cylindroid-control.html b/App/wwwroot/HiAPI-docsite/anatomy/geom/cylindroid-control.html
index 74df7039..161720cd 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/geom/cylindroid-control.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/geom/cylindroid-control.html
@@ -101,16 +101,12 @@ of each row, disabled once only two pairs remain.
The caption — a one-line statement of the type: a solid of revolution defined by (Z, R) pairs,
minimum two.
-
The desktop control is shaped differently for the same job: a title, an Add Point and a Clear
-All button, and a data grid with Z, R and Actions columns. Clear All has no web counterpart — it
-confirms, wipes the list and re-seeds a single pair.
Behavior
A cell commits on blur or Enter. An empty or non-finite entry is dropped rather than written,
and a negative radius is clamped to zero — on the client and again on the server.
-
The floor is two pairs, and both ends enforce it. The web disables the remove button at two
-and the controller refuses the call below two. The desktop client blocks only at one, with a
-warning dialog.
+
The floor is two pairs, and both ends enforce it. The remove button is disabled at two and
+the controller refuses the call below two.
Creating one seeds three pairs. The create endpoint starts a new cylindroid at (0, 20),
(30, 20) and (60, 10) rather than empty.
Four endpoints ship without a caller. The controller exposes GetPairCount, GetPairAt,
@@ -119,12 +115,10 @@ warning dialog.
Tessellation Resolution Is Not a Property of the Shape
There is no longitude count, and no per-instance resolution, on a cylindroid. The STL longitude
number is derived internally at generation time from a resolution the caller supplies; the type
-carries only a static default. The desktop client once had a Longitude Number field and its handler
-was deleted when the backing property went away.
+carries only a static default.
Where resolution is exposed, it belongs to the holder rather than to the shape: the Tool House
-cylindroid holder carries a Resolution surface beside its Geometry one — a tree node on the web,
-a tab in the desktop client — offering a linear resolution in millimetres and an angle resolution in
-degrees, described in the app as the tessellation resolution used for display and collision meshing.
+cylindroid holder carries a Resolution tree node beside its Geometry one, offering a linear
+resolution in millimetres and an angle resolution in degrees, described in the app as the tessellation resolution used for display and collision meshing.
The Extended Cylinder editor edits one number on an ExtendedCylinder: its full
length, measured from Z=0 and including the span below the start section. Its only home on
-either client is the Tool House cutter's Upper Beam, where the start section is the flute top.
+it is the Tool House cutter's Upper Beam, where the start section is the flute top.
Layout
An explanatory block stating what the type is and, in bold, how the length is measured.
Full Length — a single numeric field in millimetres, with a hint under it.
-
The desktop panel is a title over the same one field.
Behavior
The hint states a lower bound only when that bound is positive. The bound is the Z of the
@@ -113,19 +112,15 @@ minimum — its minimum is inclusive — so a value exactly equal to the bound p
caught one layer up by the editor, which raises an error to its host as a banner rather than an
inline field message. The controller then rejects non-finite, non-positive, and at-or-below-bound
values with a 400.
-
The field commits on blur or Enter. The desktop control does not: it writes on every
-keystroke, and performs no minimum, positivity or finiteness check at all. The range guard is a
-web and backend feature.
+
The field commits on blur or Enter, and the range guard runs on both the field and the backend.
Creating one through the cutter is not the same as creating one bare. The Upper Beam creates
through the cutter's own endpoint so the backend seeds a valid full length and can return
geometry-issue warnings — which the Upper Beam panel renders as persistent banners. The bare
create endpoint seeds a length of 100 and a single start pair.
Reach
-
Both clients restrict this kind to the cutter's upper beam, by different mechanisms. In the desktop
-client the switchboard's Extended Cylinder entry ships collapsed and is revealed by a property that
-exactly one host sets — the milling cutter panel. On the web no Geometry slot offers the kind at
-all: it is absent from the container kinds, so it can be neither a transformation geometry's inner
+
This kind is restricted to the cutter's upper beam, and the mechanism is absence rather than a flag:
+no Geometry slot offers it at all. it is absent from the container kinds, so it can be neither a transformation geometry's inner
geometry nor a combination child, and it was taken out of the workpiece's raw geometry once a saved
project was found to reload one degenerate. The single surface that offers it is the cutter's Upper
Beam, which mounts the switchboard itself over its own six-kind list rather than being a Geometry
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/geom/geom-combination-control.html b/App/wwwroot/HiAPI-docsite/anatomy/geom/geom-combination-control.html
index 9e5ed2c4..505e02f9 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/geom/geom-combination-control.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/geom/geom-combination-control.html
@@ -87,10 +87,10 @@
Geometry Combination Control
-
A GeomCombination is several geometries treated as one, and it has two faces on the
-web: an inline editor that renders every child's own editor at once, and a Control-Tree panel that
-manages the list only and puts each child on its own node. The desktop client has the inline shape
-alone. There is no selection model on any of them — every child carries its own remove button.
+
A GeomCombination is several geometries treated as one, and it has two faces: an
+inline editor that renders every child's own editor at once, and a Control-Tree panel that manages
+the list only and puts each child on its own node. There is no selection model on either — every
+child carries its own remove button.
Layout
The inline editor
@@ -103,33 +103,23 @@ editable at once.
Deliberately shallow: a list of read-only rows with Add, a per-row remove and Clear all, and a
standing hint that an Item child node is where a child is actually edited. No editor is embedded
here; each child is its own Item node — .../item-{index} — under this one.
-
The desktop control
-
A title, then an Add and a Clear All button over a scrolling list of bordered cards, each
-holding that child's own geometry management panel and a remove button — no index badge and no type
-caption. Below the list sits a collapsed Combination Information expander reporting the aggregate
-triangle count and bounding box, the latter as a read-only box control.
Adding a Child
-
The two clients differ here, and the web is the one that gained something:
-
-
Web — pick the kind first, then Add; the request carries the kind.
-
Desktop — Add takes no kind and always appends a 100 mm cube. The kind is switched afterwards,
-on that child's own Geometry Type combo.
-
+
Pick the kind first, then Add; the request carries the kind.
Five kinds may be children — Box3d, Cylindroid, StlFile, TransformationGeom and a nested
GeomCombination, so combinations nest arbitrarily deep. CubeTreeFile and ExtendedCylinder are
-accepted by neither client's switch.
+accepted by neither switch.
Behavior
A type switch rewires the slot, not just the alias. Changing a child's kind goes through
SetItemAt, which replaces the entry in StlSources itself.
The aggregate STL is cached, and a child's own controller does not invalidate it. Editing a
child through its own endpoints leaves the combination returning the mesh it had already built, so
-both web faces call CleanCache before bubbling the change, and compose that call into the
-ancestor chain. This is the behavioural fact the rest of the page depends on.
+both faces call CleanCache before bubbling the change, and compose that call into the ancestor
+chain. This is the behavioural fact the rest of the page depends on.
Removing a child does not renumber the ones after it. Item keys are minted as
{key}-item-{index} and the remove endpoint leaves later indices pointing at the old aliases,
which is why every structural change rebuilds the branch and re-mints them.
-
Clear all confirms only on the desktop. The web posts it directly.
+
Clear all is posted directly, with no confirmation.
The geometry switchboard is one control: a kind picker over the kinds its host allows, and — unless
-the host asked for the picker alone — the picked kind's editor beneath it. On the web it binds a
+the host asked for the picker alone — the picked kind's editor beneath it. It binds a
key into the shared object store, not an object, and every Control-Tree Geometry slot is this
same control in selector-only mode.
Layout
Web: a geometry-type dropdown; a separator, drawn only while a kind is active; then that kind's
editor. Picking a kind commits immediately — there is no Apply button. In selector-only mode
everything below the dropdown is dropped, which is the form each Geometry slot node shows.
-
Desktop: a combo box on the left of a head line with a Convert menu on its right, over a bordered
-content presenter that hosts the kind's own control.
What It Binds
The web panel has no target-geometry property. It takes a modelKey naming the object it edits and
mutates what sits behind that key; a host that also owns the field holding the geometry passes an
-onCreate hook, so switching the kind rebinds the host's field rather than just the key. The
-desktop panel is the one that exchanges an IStlSource directly, through a getter and
-setter pair its host supplies.
+onCreate hook, so switching the kind rebinds the host's field rather than just the key.
Each host's field type decides which kinds it may offer; whether the kind survives a save decides
which of those it does. A fixture's geometry and a transformation geometry's inner geometry are
IGetStl; a workpiece's initial geometry is an IMakeXmlSource, which is why the
@@ -117,7 +113,7 @@ host that wires that source, the cutter's upper beam.
The default is a guard rail, not a shipped list. Every host passes its own whitelist — the five
Control-Tree Geometry slots from the node context, the four inline hosts as a constant — so no
shipped surface renders the default at all, and the whitelist is what really decides reach.
@@ -151,17 +147,13 @@ shipped surface renders the default at all, and the whitelist is what really dec
only when the host asks for it: the three General Setup slots and a transformation geometry's inner
geometry do, while the mechanism anchor, the cutter upper beam and combination children do not, so
those pickers cannot clear the slot. Clearing goes through the host's create hook with the literal
-kind None, which the container-aware endpoints map to null. The desktop combo always lists a
-None item.
-
Converting Is Desktop-Only
-
Wrapping an existing geometry into a TransformationGeom — and extracting it back out
-— exists only in the desktop client, as items in the Convert menu rather than as buttons. The
-Convert to Transformation item re-titles itself Extract from Transformation when the current
-geometry already is one; the combination item behaves the same way, and its extract is offered only
-when the combination holds exactly one child. Three code-behind properties can hide the menu and each
-of its two items, but no shipped host sets any of them.
-
The web has no equivalent, and the difference is not cosmetic. Picking TransformationGeom in
-the picker creates a new, empty one and discards the geometry that was there — it does not wrap it.
+kind None, which the container-aware endpoints map to null.
+
There Is No Way to Wrap an Existing Geometry
+
Wrapping a geometry that is already in a slot into a TransformationGeom — and
+extracting it back out — is not offered anywhere in the application, and the difference from what
+the picker looks like it does is not cosmetic. Picking TransformationGeom creates a new, empty
+one and discards the geometry that was there. The same holds for a combination: there is no
+operation that takes a geometry and puts a container around it in place.
In the Control Tree
Geometry is a slot item type. Its child builder probes the slot's key for the type behind it and,
when that type is a known kind, grows exactly one child node of that kind bound to the same key
@@ -219,8 +211,8 @@ editor
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/geom/meshed-geom-panel.html b/App/wwwroot/HiAPI-docsite/anatomy/geom/meshed-geom-panel.html
index b6bca137..a05f576c 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/geom/meshed-geom-panel.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/geom/meshed-geom-panel.html
@@ -105,18 +105,14 @@ when nothing is chosen.
A standing description: the geometry is a pre-computed voxel cube tree, and loading it is deferred
until it is needed.
-
The desktop panel is a read-only path field with Browse and Reload buttons. The web has no
-Reload: the controller has no such action.
Reach
One slot offers this kind: the workpiece's Raw Geometry. The fixture's geometry and the
workpiece's target geometry both exclude it, and it is not among the container kinds, so it can be
neither a transformation geometry's inner geometry nor a combination child. The Control-Tree node
carries the chosen file in its label, as MeshedGeomFile [<path>].
-
The desktop client reaches it differently. There, the workpiece page carries a Geometry Source
-combo — Common Geometry or Meshed Geometry — that decides whether this panel or the geometry
-switchboard is visible. The web has no such toggle: picking the MeshedGeomFile kind is choosing
-the meshed source. The classification survives on the server, which still reports a raw geometry of
-this type as a meshed one.
+
There is no separate geometry-source toggle: picking the MeshedGeomFile kind is choosing the
+meshed source. The classification survives on the server, which still reports a raw geometry of this
+type as a meshed one.
Key Model
CubeTreeFile is the file reference; CubeTree is the voxel tree itself.
The reader resolves the stored relative path and opens it with no extension test of its own — .wct
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/geom/stlfile-control.html b/App/wwwroot/HiAPI-docsite/anatomy/geom/stlfile-control.html
index fab9e04d..15535c1a 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/geom/stlfile-control.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/geom/stlfile-control.html
@@ -89,19 +89,17 @@
The STL file editor points a geometry at an .stl file rather than describing a shape: the model
holds a file reference, and the editor is a picker over it plus a read-only summary of what was
-loaded. On the web the file lives on the server, not on the machine running the browser, and
+loaded. The file lives on the server, not on the machine running the browser, and
that difference shapes everything else on the page.
Layout
File reference — a read-only field showing the path currently referenced, with an empty-state
hint when there is none.
-
The picker — on the web a Select dropdown whose menu holds Browse…, Browse Resource…
-and, only while a path is set, Clear. Either Browse entry opens the in-app File Explorer dialog
-filtered to .stl. In the desktop client this is a Browse button opening the operating
-system's file dialog, beside a Reload button and a status line; the web has no Reload.
-
STL info — behind an info icon on the web, opening a dialog; a collapsed Information
-expander in the desktop client. Both show the triangle count and the bounding box as read-only
-vector rows, and the web dialog states an empty case when nothing is loaded.
+
The picker — a Select dropdown whose menu holds Browse…, Browse Resource… and, only
+while a path is set, Clear. Either Browse entry opens the in-app File Explorer dialog filtered
+to .stl. There is no reload action.
+
STL info — behind an info icon, opening a dialog that shows the triangle count and the
+bounding box as read-only vector rows, and states an empty case when nothing is loaded.
Behavior
@@ -115,8 +113,8 @@ re-homed path, not the one that was chosen.
walking the triangles rather than kept resident. Only Min and Max come back from the server;
Dimension and Center are derived in the browser from them.
The picker previews. Double-clicking an .stl row in the File Explorer dialog swaps its slave
-panel to a 3D preview of that file before the pick is confirmed — a capability the desktop file
-dialog has no equivalent of. The dialog opens with that panel hidden, which is why the double-click
+panel to a 3D preview of that file before the pick is confirmed. The dialog opens with that panel
+hidden, which is why the double-click
is the gesture that reaches a preview there; a single click does so only once the toolbar's pencil
has revealed the panel. The preview belongs to the File Explorer rather than to this editor — see
STL Preview Pane.
A TransformationGeom is an inner geometry plus the transformer that places it, and the
-editor is those two things side by side. It has two faces on the web: an embedded two-card editor,
+editor is those two things side by side. It has two faces: an embedded two-card editor,
and a Control-Tree panel that shows only the status of each half and puts the editing on child
nodes.
Important
Choosing a kind here replaces, it does not wrap. Picking an inner geometry calls the
container-aware create endpoint, which constructs a fresh instance and discards whatever was
-there. Wrapping an existing geometry into a transformation geometry, and extracting it back out,
-exists only in the desktop client's
-Geometry Management Panel Convert menu.
+there. There is no operation anywhere that wraps an existing geometry into a transformation
+geometry, or extracts it back out — see
+Geometry Management Panel.
Layout
The embedded editor
@@ -117,22 +117,14 @@ its own default of all seven transformer kinds applies.
Inner Geometry slot and an Inner Transformer slot as children, and each of those grows its
own kind child. The registry deliberately overrides the kind → editor map here, so the two-card
editor never appears inside a tree.
-
The desktop control
-
A geometry-type combo over the inner geometry's own control, and a transformer group box. Its lists
-are narrower on both sides: three inner geometry kinds — Box3d, Cylindroid and StlFile, with no
-unset entry — and a transformer list restricted to No Transform, Static Translation, Static Freeform
-and General Transform. Static Rotation is unreachable there for a second reason: the desktop
-transformer picker never builds it into its base list, so it is absent whatever the restriction says.
Behavior
-
The identity transformer is the floor on the web. The inner-transformer picker offers no null
-entry, and the server installs a NoTransform whenever the field is null, so the slot is never
-unset. The desktop panel instead carries a Not Set entry, shown by default and never removed by
-its type filter, which leaves the slot holding a null transformer.
+
The identity transformer is the floor. The inner-transformer picker offers no null entry, and
+the server installs a NoTransform whenever the field is null, so the slot is never unset.
Creation is container-aware on both halves. Both go through this type's own create endpoints
rather than the generic per-kind ones, so the owning field is rebound and not merely the store
entry.
-
Neither client previews. There is no viewport on this control. It reports edits upward — one
+
The control does not preview. There is no viewport on it. It reports edits upward — one
event when a half is mutated, another when a half is replaced — and the hosting page's shared 3D
canvas re-renders from there.
A null inner geometry has a deterministic key anyway. When the inner geometry is unset the
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/geom/transformer-panel.html b/App/wwwroot/HiAPI-docsite/anatomy/geom/transformer-panel.html
index 03c85617..9b56645a 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/geom/transformer-panel.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/geom/transformer-panel.html
@@ -88,10 +88,8 @@
Transformer Select Panel
The Transformer Select Panel is the switchboard that picks which ITransformer
-occupies a transformer-valued slot and edits the one that is there. Both clients carry it under the
-same name: wwwroot-src/src/components/topo/TransformerSelectPanel.vue on the web,
-Mech/Topo/TransformerSelectPanel.xaml on WPF. For the model behind the picker — what each
-transformer does to a frame — see
+occupies a transformer-valued slot and edits the one that is there. For the model behind the picker
+— what each transformer does to a frame — see
Handle Transform Matrix by ITransformer.
Surface
The panel's principal home is a Transformer slot of the General Setup page's Control Tree
@@ -158,13 +156,10 @@ hook, in which case that hook runs instead so the owning domain object is reboun
IndexService entry.
Which kinds it offers is the allowedKinds prop, defaulting to all seven. A Control-Tree slot feeds
it from the node's ctx.allowedKinds; none of the four General Setup slots narrows it, so all seven
-appear there. The WPF panel restricts through four properties on its code-behind instead:
-AllowedTransformerTypes, SelectionFilter, ShowNoTransform and ShowNotSet.
+appear there.
When the probed kind falls outside allowedKinds, both the active and the selected kind reset to
empty: the dropdown blanks, and the embedded form prints No transformer attached. in place of an
-editor. The out-of-list transformer is not rendered. The WPF client resolves that case the other
-way — UpdateUI() leaves the combo unselected when no item matches, then still calls
-UpdateTransformerPanel() and builds the current transformer's content panel.
+editor. The out-of-list transformer is not rendered.
Transformer Kinds
The web client offers seven kinds, one editor each.
@@ -213,11 +208,7 @@ way — UpdateUI() leaves the combo unselected when no item matches
-
The WPF client offers six of them — NoTransform, StaticTranslation, StaticFreeform,
-GeneralTransform, DynamicTranslation, DynamicRotation — plus a Not Set entry that leaves the
-slot holding a null transformer. It has no StaticRotation panel, and selecting NoTransform there
-simply empties its content area. The web picker offers no null entry of either sort: identity is
-expressed by choosing NoTransform.
+
The picker offers no null entry: identity is expressed by choosing NoTransform.
Note
The GeneralTransform editor is a composition, not a flat form: a scale field,
@@ -226,9 +217,7 @@ embedded in their own bordered cards, titled Rotation sub-transformer a
sub-transformer. It keys the two sub-editors off POST /api/GeneralTransform/IndexRotation and
/IndexTranslation, edits the scale itself, and owns no vector widget — every
Vec3d field on it comes from the nested editors. The effective transform is
-T × R × scale × I. Its WPF counterpart Mech/Topo/GeneralTransformPanel.xaml takes the other
-approach: three Vec3dControls of its own (translation, rotation axis, rotation pivot) plus scale
-and angle text boxes, embedding no sub-panel.
The message is appended to the daily log file at logs/log-{DateTime.Now:yyyy-MM-dd}.txt
-
The second step belongs to the logging path rather than to the bar, and only one client shares it.
-The WPF brief field is fed by a logger provider, so a message that reaches the field has already
-gone to the file sink. The web footer is fed by the routine-progress store instead: what lands there
-is client-side, and it reaches the server's daily log only when the server logged it too — no part
-of the shell posts a message to the log-append endpoint.
+
The second step belongs to the logging path rather than to the bar, and the footer does not share
+it. The footer is fed by the routine-progress store: what lands there is client-side, and it reaches
+the server's daily log only when the server logged it too — no part of the shell posts a message to
+the log-append endpoint.
@@ -128,16 +127,6 @@ of the shell posts a message to the log-append endpoint.
When the message is an Exception, the brief message shows Message while the full exception details are logged to file.
Platform-Specific Layouts
-
WPF Application
-
The WPF version uses a fixed bottom bar:
-
-
Message Section Bottom Bar
-
-
Brief Message Text Field (selectable for copy)
-
Show Log Button
-
-
-
Web Application
The web version docks a single dense bar along the bottom of the layout — AppFooter.vue, not a
stack of toasts:
@@ -159,16 +148,11 @@ Quasar notifications, anchored bottom-right and auto-hiding on a timeout that do
severity. A boot patch mirrors every one of them into the footer's foreground history, which is what
keeps a toast reviewable after it fades.
Show Log Button
-
The Show Log button is the only entrance to the log screen, and the two clients answer it
-differently.
-
In the web application it is a router link in the menu bar's right-hand group — not on this bar —
-and it opens the Log Viewer as a full page inside the shell. See
-Log Viewer Page for that screen's toolbar, its auto-refresh interval, its
-copy and download actions and the states of its text area.
-
In the WPF client the button sits at the right end of this bar. It looks for the current day's file
-under the client's own logs folder and, when it is there, opens it with whatever application the
-operating system associates with the file type; when it is not, it reports that in a message box
-instead of opening anything.
+
The Show Log button is the only entrance to the log screen.
+
It is a router link in the menu bar's right-hand group — not on this bar — and it opens the Log
+Viewer as a full page inside the shell. See Log Viewer Page for that
+screen's toolbar, its auto-refresh interval, its copy and download actions and the states of its
+text area.
See Also
Main Panel — the window frame this bar is docked in
The submenu locates on the Preference Menu Dropdown. It is the only
-place either client offers for changing the interface language. What that choice sets in motion in
-the web client — the message bundles, the locale applied before the first frame, the single switch
+place the application offers for changing the interface language. What that choice sets in motion —
+the message bundles, the locale applied before the first frame, the single switch
function and everything that re-renders behind it — is
Internationalization; this page covers the gesture.
-
The web submenu's model is the application-state store rather than a service handed down by the
+
The submenu's model is the application-state store rather than a service handed down by the
parent component: it reads the current code and the available-code list from that store and calls
the store's language action. Both values are hydrated by the store's server-preferences load, which
the shell layout runs on mount — a separate path from the one that decides which locale the first
-painted frame uses. The WPF client resolves its language manager during start-up, and the manager
-reads the persisted code out of the user configuration as it is constructed.
+painted frame uses.
Layout
-
The two clients draw the submenu differently.
-
Language Selection SubMenu — WPF application
-
-
English RadioButton
-
Simplified Chinese RadioButton
-
Traditional Chinese RadioButton
-
-
Three fixed rows in one radio group, ticked at start-up to match the current language.
-
-
Language Selection SubMenu — web application
+
Language Selection SubMenu
Language Row — one plain row per code in the store's available-code list, so the rows are
whatever the server reports rather than a fixed set of three. Each carries the language's own
@@ -120,13 +110,11 @@ the active state. No row carries a radio button or a checkbox.
The parent entry captions the current language, so it reads without opening the submenu.
-
Choosing a row in the web client closes the popup and makes one call, the store's language action.
+
Choosing a row closes the popup and makes one call, the store's language action.
The store writes the new code optimistically, POSTs it, adopts the current and available lists the
server echoes back, and only then switches the live catalogue — so the interface text flips after
the server has accepted the value, and the confirmation toast already reads in the language just
-picked. A rejected write rolls the store back and changes no interface text at all. In the WPF
-client picking a radio swaps the merged string dictionary in place and saves the code to the user
-configuration, and the labels follow without a restart.
+picked. A rejected write rolls the store back and changes no interface text at all.
Web Service Application: injects ProxyProjectService, the IProjectService implementation that reaches the session's project across the connection
-
-
+
Project Service: injects ProxyProjectService, the IProjectService implementation that reaches the session's project across the connection
User Service: UserService
Layout Structure
Top Navigation Menu
-
Brand logo, and in the web application the HiAPI version as an outlined badge beside it. The
+
Brand logo, and the HiAPI version as an outlined badge beside it. The
badge carries the HiNc assembly version reported by the anonymous authentication-status probe
the router runs before the first route resolves, so it needs neither a loaded project nor a
signed-in session; it is omitted only while that probe has reported no version.
@@ -112,33 +107,14 @@ signed-in session; it is omitted only while that probe has reported no version.<
Project Path Text Field — readonly; reads “No Project Loaded” until a project is loaded
New MenuItem
Load MenuItem
-
ReLoad MenuItem (web application only)
+
ReLoad MenuItem
Save MenuItem
Save As MenuItem
-
Close Project MenuItem (web application only, below a separator)
+
Close Project MenuItem (below a separator)
-
In the web application ReLoad, Save, Save As and Close Project are disabled until a project is loaded, and New, Load and Save As open the shared file-picker dialog with a .hincproj filter. The picker is allowed the Admin and Project roots and is denied the Resource root, which holds read-only templates the project endpoints cannot save through; it asks for the Admin root by name, so that is where it opens, and it seeds its path box with the directory holding the loaded project, or with the admin root itself when there is none. The Project root is one of the two only while a project is loaded: the roots endpoint lists a root only when its directory resolves, and the project directory resolves to nothing until a project is open, so with no project the picker offers Admin alone. The WPF client's dropdown stops at Save As.
+
ReLoad, Save, Save As and Close Project are disabled until a project is loaded, and New, Load and Save As open the shared file-picker dialog with a .hincproj filter. The picker is allowed the Admin and Project roots and is denied the Resource root, which holds read-only templates the project endpoints cannot save through; it asks for the Admin root by name, so that is where it opens, and it seeds its path box with the directory holding the loaded project, or with the admin root itself when there is none. The Project root is one of the two only while a project is loaded: the roots endpoint lists a root only when its directory resolves, and the project directory resolves to nothing until a project is open, so with no project the picker offers Admin alone.
-
Environment Menu Dropdown (WPF application only — the web application has no such dropdown; see below)
Mission MenuItem
-Open Mission Page
-In the web application the Mission editor is a branch of the Execution page's Control Tree; /mission redirects there.
-
-
Page Menu Dropdown (web application only) — the three workflow pages in setup order (fill the tool house, set up the equipment, run), then the utilities.
+
Page Menu Dropdown — the three workflow pages in setup order (fill the tool house, set up the equipment, run), then the utilities.
Debug Menu Dropdown (WPF application only) — Transformers and Geometry Management, visible only while the client runs in debug mode
-
-
Help MenuItem
-
-
HiAPI Version label
-A label to show the HiNc library version.
-The web application shows this as a version badge next to the brand logo, with no Help dropdown.
-
-
-
Show Log Button — a button on both clients, not a menu item. In the web application it sits on the menu bar's right side and routes to the Log Viewer page; in the WPF client it sits at the right end of the bottom message bar.
+
Show Log Button — a button, not a menu item. It sits on the menu bar's right side and routes to the Log Viewer page.
The Log Viewer presents the server's application log for the current day, with a manual refresh, a selectable auto-refresh interval, copy to the clipboard, and download of the day's log file for offline analysis.
Central Page Panel — one router outlet wrapped in a keep-alive cache keyed on a project epoch: an
integer the layout owns, raised by two watchers and read by nothing else. The first watches the project
@@ -183,7 +150,7 @@ A bump discards every cached page and rebuilds it, so each page initializes on i
watching for project changes itself.
Bottom footer — the routine-progress bar: the latest foreground message with a recent-messages history menu on the left, the live session status in the middle, and in-flight background job progress on the right. See Message Section on Main Panel.
-
In the WPF application the run tool bars belong to the menu shell and appear only while the central panel is the player. The web application does not carry them on the menu bar at all: the transport controls ride the Execution Page‘s primary panel header and the view controls ride its canvas panel header. What the menu bar keeps instead is the page's set of column quick-toggles, the connection badge, the active page's title, the Show Log button and — when authentication is on — the logout button. The toggles follow whichever tree page is current: four on the Execution page (control dock, canvas, strip charts, step info) and three on General Setup (control dock, content, canvas); the Tool House page lays itself out with plain splitters and gets none. The connection badge is Execution-only — the other pages’ canvases carry their own in-panel badges.
+
The menu bar carries no run tool bars at all: the transport controls ride the Execution Page‘s primary panel header and the view controls ride its canvas panel header. What the menu bar keeps instead is the page's set of column quick-toggles, the connection badge, the active page's title, the Show Log button and — when authentication is on — the logout button. The toggles follow whichever tree page is current: four on the Execution page (control dock, canvas, strip charts, step info) and three on General Setup (control dock, content, canvas); the Tool House page lays itself out with plain splitters and gets none. The connection badge is Execution-only — the other pages’ canvases carry their own in-panel badges.
Project Menu Behavior
The Project Path Text Field displays the current project path when a project is loaded. It is implemented as a pure text field (not a button) that allows users to select and copy the path.
The Project Menu manages MachiningProject with the following operations:
@@ -228,17 +195,12 @@ watching for project changes itself.
-
In the web application every Project action reports through two channels: a background progress line on the footer while it runs, then a toast when it lands — positive on success, a “busy” warning when a concurrent action has already claimed the service (HTTP 409), negative otherwise. In the WPF client the operations log through ILogger and, after a load, set the player panel's DispEngine to the isometric view. What a project change drives in the web shell is the layout's keep-alive epoch, not a canvas view: every cached page is discarded and rebuilt.
+
Every Project action reports through two channels: a background progress line on the footer while it runs, then a toast when it lands — positive on success, a “busy” warning when a concurrent action has already claimed the service (HTTP 409), negative otherwise. What a project change drives in the shell is the layout's keep-alive epoch, not a canvas view: every cached page is discarded and rebuilt.
Note
-
The web implementation reports through the toast helper and the routine-progress footer store; the WPF client reports through ILogger. Neither routes project messages through MessageUtil. Project I/O is asynchronous on both clients, so the shell stays responsive during file I/O.
+
Project actions report through the toast helper and the routine-progress footer store, and none of them routes a message through MessageUtil. Project I/O is asynchronous, so the shell stays responsive during file I/O.
Platform-Specific Differences
-
WPF Application
-
-
Only a single instance of each sub-window (Mission, Workpiece, Fixture) can exist at a time
-
There is no menu entry for the run cockpit: the Main Panel itself is the player
-
Web Application
The Execution Page is the landing route — / redirects to /execution
The Preference dropdown holds the application's display settings, and it is on the Main Panel. The server-backed ones are service-wide rather than per-account: one UserService singleton holds one UserConfig, saved to a single UserConfig.xml resolved against the process working directory, so every browser signed in to that service reads and writes the same values. The sign-in cookie carries a user-name claim that nothing outside the authentication endpoints reads, and no preference endpoint is keyed on an account.
-
In the WPF application the menu binds UserService, whose UserConfig holds the persisted values. In the web application the dropdown has two models: Language and Show Physics Options bind the appState store, hydrated from and written back through /api/preference/*, where the server keeps them on UserConfig; the CSV / CL Controller checkboxes bind the device-local useViewPrefs singleton, persisted in the browser's localStorage and never sent to the server.
+
The dropdown has two models: Language and Show Physics Options bind the appState store, hydrated from and written back through /api/preference/*, where the server keeps them on UserConfig; the CSV / CL Controller checkboxes bind the device-local useViewPrefs singleton, persisted in the browser's localStorage and never sent to the server.
WPF application: the first entry of the menu, opening the Step Present window.
Web application: the editor belongs to the Execution page's Step Info column, where a small icon button in the Step Properties panel header opens it as a modal next to the list it configures.
WPF application: a nested menu of cache fields inside the dropdown.
Web application: an entry of the Execution page's extended tool bar, under Meshed Geom ▾, which gathers the workpiece rendering-cache settings.
Its write is the one preference write that does not persist. POST /api/preference/graphic-cache clamps the requested size between the stored limits, assigns the three fields on the live UserConfig and returns, without calling UserService.SaveUserConfig(). The new value is service-wide and takes effect at once, but it reaches the file only when some later preference save writes the config out.
It is not a Preference-dropdown entry on either platform: the WPF application puts it on the bottom message bar, and the web application puts it on the menu bar's right side as an always-visible button that opens the Log Viewer page.
+
It is not a Preference-dropdown entry: it sits on the menu bar's right side as an always-visible button that opens the Log Viewer page.
Add the update-table event per sink: MessageAdded / MessageAdded, and for the session-scoped shell sink the app-lifetime bridge OnShellMessageAdded (with the matching Cleared events). The updating process has to be called by Loose Manner for user experience.
-
-
Tip
-
On window desktop application (WPF), consider use textarea instead of datagrid to MessageTable for better performance. Use padding to show the different columns. And use the font in the textarea that with consistent width.
On the web client these fields have no panel of their own: they are rendered inline by the Flute Profile section of the cutter, the Control-Tree node whose role path is toolhouse/tool-<id>/cutter/profile, reached at /tool-house/:toolId/cutter/profile under the page route /tool-house/:toolId?/:tab?/:subtab?. That same section carries the Profile Type selector above the fields. In the WPF client the APT fields are a component of their own, hosted by the Milling Cutter panel's Flute-Profile tab.
+
These fields have no panel of their own: they are rendered inline by the Flute Profile section of the cutter, the Control-Tree node whose role path is toolhouse/tool-<id>/cutter/profile, reached at /tool-house/:toolId/cutter/profile under the page route /tool-house/:toolId?/:tab?/:subtab?. That same section carries the Profile Type selector above the fields.
Layout
Web Layout
@@ -155,29 +155,6 @@
The interface casts live one layer down, on the read side: the cutter DTO builder fills rc_mm, rr_mm, rz_mm, alpha_deg and beta_deg by casting the APT to IAptRc, IAptRr, IAptRz, IAptAlpha and IAptBeta, and emits null for a cast that fails.
Taper APT is where the panel's table and the engine's types disagree. TaperApt is declared over IAptBased, IAptRz, IAptAlpha and IAptBeta and carries no round radius, so the table's Rc entry gives a Taper profile a Round Radius box that the DTO fills with null — the field reads 0 — and the value the panel sends back is not read by the server's Taper branch, which builds the APT from Diameter, Rz, Alpha, Beta and Flute Height alone. Rc on a Taper APT is therefore inert in both directions.
-
WPF Layout
-
-
APT Profile Panel
-
-
Diameter Input Field (mm)
-
Round Radius Input Field (mm)
-Visible if Apt is IAptRc
-
Round Ring Radius Input Field (mm)
-Visible if Apt is IAptRr
-
Round Ring Height Input Field (mm)
-Visible if Apt is IAptRz
-
Bottom Cone Angle Input Field (deg)
-Visible if Apt is IAptAlpha
-
Top Cone Angle Input Field (deg)
-Visible if Apt is IAptBeta
-
Length of Cut Input Field (mm)
-
-
-
-
-
Tip
-
Keep field format G4 on this client. The web fields apply no format: they show the value as stored and commit on blur or Enter.
-
Features
Every edit re-sends the whole profile. Changing the type, or any one field, builds a fresh shaper-profile request carrying the type, Diameter, Length of Cut and only those of Rc / Rr / Rz / Alpha / Beta that the chosen type's table lists, and the server replaces the cutter's AptProfile with a newly constructed APT of that type. The panel then clears the tool cache so the canvas redraws.
Clearing a field is ignored. The shared numeric input emits null for an empty box, and the panel returns on null instead of committing, so a blanked box keeps the previous value rather than writing 0.
The key component is ICutter. A tool carries at most one cutter, and two concrete types answer to that interface: MillingCutter and FreeformRemover. This panel is where the type is chosen, and it holds the cutter's own General fields.
-
On the web client it is the Cutter tab of the Tool House Page, reached at /tool-house/:toolId/cutter under the page route /tool-house/:toolId?/:tab?/:subtab?. It is the panel of the Control-Tree Cutter node under the selected tool — the node whose role path is toolhouse/tool-<id>/cutter. In the WPF client the same surface is the Cutter Management Panel embedded in the tool's editor.
+
It is the Cutter tab of the Tool House Page, reached at /tool-house/:toolId/cutter under the page route /tool-house/:toolId?/:tab?/:subtab?. It is the panel of the Control-Tree Cutter node under the selected tool — the node whose role path is toolhouse/tool-<id>/cutter.
Layout
Web Layout
@@ -105,7 +105,7 @@
Sections Hint Caption — points at the section tabs below
-
Freeform Remover branch — one caption, toolhouse.cutter.freeformRemoverUnavailable, sending the reader to the WPF client or HiNcRcl
+
Freeform Remover branch — one caption, toolhouse.cutter.freeformRemoverUnavailable, saying the editor is not available here
No-cutter branch — one hint, toolhouse.cutter.noCutterHint, inviting the reader to pick Milling Cutter
@@ -113,39 +113,8 @@
The three numeric fields are the cutter's General fields, and they sit here under the Metadata-on-container convention — a container's own General fields are edited on the container's panel instead of in a General child. They are plain, always-editable inputs: one label each, no label switching and no auto-computed mode, and all three commit together through the general endpoint, which accepts exactly shankMass_g, honeRadius_um and reliefAngle_deg. A blanked box commits nothing, so clearing a field never writes a zero.
The type also decides what grows below the node. A Milling Cutter grows the cutter's section tabs — Material, Flute Profile, Flute Contours, Upper Beam, Optimization — as the nodes whose role paths end in .../cutter/material, .../cutter/profile, .../cutter/contours, .../cutter/upper-beam and .../cutter/opt; Material is the one gated behind the Advanced Physics preference. Selecting one replaces this panel with that section's own panel; see Milling Cutter Panel. A Freeform Remover or no cutter grows nothing, so the Cutter node is a leaf and the caption or hint is the whole surface; see Freeform Remover Panel.
This panel carries no object management of its own. Object management for the tool library sits on the tool-house root node, where the Object Management Menu Button is bound to the whole .MachiningToolHouse file rather than to a per-cutter file.
The per-cutter .Cutter file is this client's, and so is the third option's Unset wording; the web selector's third option reads None.
Features
-
Committing a type on the web is one server call plus a cache clear. Milling Cutter calls EnsureCutter, which keeps the tool's existing MillingCutter and only creates one when the tool has none; None calls ClearCutter, which drops the tool's cutter altogether. The panel then clears the tool cache, re-reads the tool and emits a structure change for its own node, which is how the section tabs appear or disappear with the type.
+
Committing a type is one server call plus a cache clear. Milling Cutter calls EnsureCutter, which keeps the tool's existing MillingCutter and only creates one when the tool has none; None calls ClearCutter, which drops the tool's cutter altogether. The panel then clears the tool cache, re-reads the tool and emits a structure change for its own node, which is how the section tabs appear or disappear with the type.
Cache clearing is not a step the user performs. ICutter implements IClearCache, and every cutter endpoint that changes a field or a geometry clears the cache server-side before it answers: the field endpoints call ClearCache() on the milling cutter directly, while the ones that change flute or beam geometry go through the controller's resync hook, which clears the cache and re-aligns the tool's holder-to-cutter anchor transformer so the cutter is re-placed under the holder at its new height. On top of that the panels call clearToolCache(toolId), which clears the tool's cached solids and the holder's, so the tool canvas redraws.
The key model is FreeformRemover: a cutter whose removal volume comes from two referenced geometries — a non-cutting strut and a cutting shaper — anchored to the holder buckle.
-
The two clients divide this cutter between them. The WPF client owns the editing surface: both geometries, the anchor, the spinning flag and the identity fields. The web client offers the type in the Cutter Type selector and nothing more; there is no Freeform Remover editor on the web, and no freeform-remover endpoint in the backend, so a freeform remover is built and edited on the WPF client or through HiNcRcl.
+
This cutter is offered in the Cutter Type selector and nowhere else. There is no Freeform Remover editor here and no freeform-remover endpoint in the backend, so nothing on this surface can create or change one — the shipped caption says as much, naming the WPF client and HiNcRcl.
This panel calls ClearCache() itself after a geometry or anchor change, so the cached solids are dropped before the tool is redrawn.
Web Layout
Cutter Node Panel, the Cutter tab of the Tool House Page at /tool-house/:toolId/cutter — the Control-Tree node toolhouse/tool-<id>/cutter
Cutter Type Selector — its second option, Freeform Remover, is this cutter
-
Freeform Remover Caption (toolhouse.cutter.freeformRemoverUnavailable) — the panel's whole body while that option is showing, directing the reader to the WPF client or HiNcRcl
+
Freeform Remover Caption (toolhouse.cutter.freeformRemoverUnavailable) — the panel's whole body while that option is showing
-
Nothing else on the web belongs to this cutter. The Shank Mass / Hone Radius / Relief Angle fields on that panel are gated to the Milling Cutter branch, and the cutter's child builder grows section tabs only for a MillingCutter, so the Cutter node is a leaf here: no Material, Flute Profile, Flute Contours, Upper Beam or Optimization section appears. See Cutter Panel for the panel these live on.
+
Nothing else on this surface belongs to this cutter. The Shank Mass / Hone Radius / Relief Angle fields on that panel are gated to the Milling Cutter branch, and the cutter's child builder grows section tabs only for a MillingCutter, so the Cutter node is a leaf here: no Material, Flute Profile, Flute Contours, Upper Beam or Optimization section appears. See Cutter Panel for the panel these live on.
Picking Freeform Remover on the web is a no-op that does not stick. The panel makes no API call for that option — it sets the selector locally, clears the tool cache, then re-reads the tool, and the re-read is what puts the selector back to Milling Cutter or None. The model on the tool is left exactly as it was.
+
Picking Freeform Remover is a no-op that does not stick. The panel makes no API call for that option — it sets the selector locally, clears the tool cache, then re-reads the tool, and the re-read is what puts the selector back to Milling Cutter or None. The model on the tool is left exactly as it was.
A tool that already carries a freeform remover reads as None. The tool detail casts the tool's cutter to a MillingCutter and reports both hasCutter and the embedded cutter DTO from that one cast, so a non-milling cutter comes back as no cutter at all, and the selector — which derives its value from those two fields — shows None. The Freeform Remover option is therefore reachable by the user's click but never by a load.
That makes one sequence worth knowing before using the web page on such a tool: picking Milling Cutter calls EnsureCutter, which returns the tool's existing cutter only when it is already a MillingCutter and otherwise assigns a new one — so on a tool holding a freeform remover, that choice replaces it. Leaving the selector alone leaves the freeform remover intact, which is what a round trip through the web page does by default.
-
Cache clearing needs no user action on either client. The WPF panel clears the remover's cache after each geometry or anchor edit; on the web there is nothing to clear for this cutter, since no endpoint mutates it, and the tool-cache clear the selector performs only drops the tool's and the holder's cached solids so the canvas redraws.
+
Cache clearing needs no user action: there is nothing to clear for this cutter, since no endpoint mutates it, and the tool-cache clear the selector performs only drops the tool's and the holder's cached solids so the canvas redraws.
The key model is MillingCutter, the cutter type both clients edit in full.
-
On the web client this cutter is not one panel but the section tabs the Cutter Panel grows once a Milling Cutter is assigned: the Control-Tree nodes under toolhouse/tool-<id>/cutter, reached at /tool-house/:toolId/cutter/:subtab under the page route /tool-house/:toolId?/:tab?/:subtab?. The five :subtab values are material, profile, contours, upper-beam and opt. The cutter's General fields — Shank Mass, Hone Radius, Relief Angle — are not among them: they sit on the Cutter node's own panel. In the WPF client the same cutter is one tab control, and it carries several groups the web does not offer.
+
The key model is MillingCutter, the one cutter type edited here in full.
+
This cutter is not one panel but the section tabs the Cutter Panel grows once a Milling Cutter is assigned: the Control-Tree nodes under toolhouse/tool-<id>/cutter, reached at /tool-house/:toolId/cutter/:subtab under the page route /tool-house/:toolId?/:tab?/:subtab?. The five :subtab values are material, profile, contours, upper-beam and opt. The cutter's General fields — Shank Mass, Hone Radius, Relief Angle — are not among them: they sit on the Cutter node's own panel.
Layout
Web Layout
@@ -102,8 +102,8 @@
-
Material is the only physics-gated section. Flute Profile, Flute Contours, Upper Beam and Optimization grow for every Milling Cutter. The preference behind the gate is the SPA's Advanced Physics option, held as isShowPhysicsOptions in the app-state store and read from the server's preference endpoint, which reports it as on only while the physics feature is licensed. UserService.EnablePhysics is the WPF client's name for the same preference.
-
Integral mode is read-only on the web. The cutter DTO reports it, and the Material section reads it to decide whether the Shank Material picker applies, but no endpoint sets it; it is chosen on the WPF client's Property tab.
+
Material is the only physics-gated section. Flute Profile, Flute Contours, Upper Beam and Optimization grow for every Milling Cutter. The preference behind the gate is the SPA's Advanced Physics option, held as isShowPhysicsOptions in the app-state store and read from the server's preference endpoint, which reports it as on only while the physics feature is licensed.
+
Integral mode is read-only. The cutter DTO reports it, and the Material section reads it to decide whether the Shank Material picker applies, but no endpoint sets it.
Material Section
Material Section (.../cutter/material)
@@ -180,7 +180,7 @@ Manages AptProfile, with a different Apt assigned; which fields appear depends on the type. See APT Profile Panel for the field list and the per-type table that drives it.
See the DemoBuildMachiningProject sample in the Hi.Sample repository for creating the APT profile and setting it on the cutter.
-
CustomSpinningProfile is the WPF client's sixth profile type; the web offers the five APT types only.
+
CustomSpinningProfile is not offered here; the five APT types are.
Flute Contours Section
This part manages Fluting. It is a stem, not a leaf: the section node carries only the type selector, and the fluting itself is a sub-tree of nodes below it.
Integral Mode Selection Dropdown — Solid End / Insert End
-
Cutter/Shank Mass Input Field (g), with an Auto Update CheckBox driven by ShankMassAssignmentMode: when enabled the field turns readonly and shows the mass computed from the inner-beam and upper-beam volume and the density
-
Hone Radius (um) and Relief Angle (deg) Input Fields
Optimization Tab — the same limits as the web section, plus the computed minimum uncut chip thickness beside the minimum-feed checkbox
-
Info Tab
-
-
Name TextField (editable)
-
AbstractNote TextField (readonly)
-
Note TextField (editable)
-
-
-
-
-
-
-
-
UserService.EnablePhysics gates the Property, Material, Flute-Contours, Flute-Inner-Beam and Optimization tabs on this client; the Insert-Cutter tab additionally requires Insert End. Flute-Profile, Upper-Beam and Info are always visible. On the web only the Material section is gated, and the same preference is named isShowPhysicsOptions.
-
Numeric fields on this client are formatted G4. The web's numeric field applies no format: it shows the value as stored and commits on blur or Enter.
-
The cutter has no identity fields on the web. Tool ID, Note and the auto-derived Abstract Note belong to the tool, one level up, and are edited on the tool's own General tab; see Tool House Page.
+
The minimum uncut chip thickness itself is not on this surface: no cutter endpoint returns it, and no field displays it.
Features
Every web edit is a whole-object commit followed by a cache clear. The Flute Profile panel re-sends the entire shaper profile on any field change — only the fields the selected APT type carries are included — then clears the tool cache. The contour panels re-send the whole flute contour. The optimization panel re-sends the whole limit set. The material and coating endpoints each answer with the full cutter DTO, which the panels re-render from.
A blanked numeric box commits nothing. The shared numeric field emits null for an empty entry, and every cutter panel returns on null rather than writing a zero, so clearing a field leaves the stored value alone.
The key model is CylindroidHolder: a holder revolved from a Z-R profile, carrying its own name and note and its own STL tessellation resolution.
-
On the web client the holder occupies two child sections of the Holder node under the selected tool — Geometry and Resolution, the nodes whose role paths end in .../holder/geometry and .../holder/resolution, reached at /tool-house/:toolId/holder/geometry and /tool-house/:toolId/holder/resolution. Its Name, readonly Abstract Note and Note are edited one level up, on the Holder Panel itself, under the Metadata-on-container convention. Every field ships on both clients; what differs is the surface hosting them — the WPF client gives the same three fields a tab of their own.
+
The holder occupies two child sections of the Holder node under the selected tool — Geometry and Resolution, the nodes whose role paths end in .../holder/geometry and .../holder/resolution, reached at /tool-house/:toolId/holder/geometry and /tool-house/:toolId/holder/resolution. Its Name, readonly Abstract Note and Note are edited one level up, on the Holder Panel itself, under the Metadata-on-container convention.
Remember to call UpdateByCylindroid() after geometry reference or content changed.
Feature
The two web sections reach the model by different routes, and that difference is why the holder resync belongs to one of them and not the other.
Geometry. The section mounts the reusable Cylindroid editor on a key. Get publishes the holder's own Cylindroid in the index service under a per-session -HolderCylindroid key and hands that key back — but only when the caller supplies its session key; with no session key the response carries a null key and the section shows its initializing caption in the editor's place. The key names the same object the holder holds, so an edit lands on the holder's geometry directly. Because that generic editor mutates the bare geometry and holds no reference back to the holder, the section issues the holder resync itself after each geometry edit: UpdateGeometryContent runs UpdateByCylindroid() and then ClearCache(), recomputing the holder topology before regenerating the solid — clearing the cache alone would skip the recompute. The slave column mounts only the selected node's panel, so at most one holder-geometry panel is alive at a time and the shared key never collides.
The key model is FreeformHolder: a holder whose shape comes from a referenced geometry, typically an STL, positioned by two anchor transformers — one to the spindle, one to the cutter.
-
On the web client the holder occupies four child sections of the Holder node under the selected tool — Geometry, Geom To Spindle, Geom To Cutter and Resolution, the nodes whose role paths end in .../holder/geometry, .../holder/geom-to-spindle, .../holder/geom-to-cutter and .../holder/resolution, reached at /tool-house/:toolId/holder/:subtab. Its Name, readonly Abstract Note and Note are edited one level up, on the Holder Panel itself, under the Metadata-on-container convention. Every field ships on both clients; what differs is the surface hosting them — the WPF client gives the same fields a tab strip of its own.
+
The holder occupies four child sections of the Holder node under the selected tool — Geometry, Geom To Spindle, Geom To Cutter and Resolution, the nodes whose role paths end in .../holder/geometry, .../holder/geom-to-spindle, .../holder/geom-to-cutter and .../holder/resolution, reached at /tool-house/:toolId/holder/:subtab. Its Name, readonly Abstract Note and Note are edited one level up, on the Holder Panel itself, under the Metadata-on-container convention.
The three shape sections are not holder-specific editors. They are the same generic Geometry and Transformer slots the Fixture branch of the General Setup page is built from: a kind picker on the section node, and the chosen kind's own editor on the child node below it. So an STL holder is picked as StlFile and its source file set through the shared StlFile editor, a TransformationGeom holder grows Inner Geometry and Inner Transformer nodes, a GeomCombination holder grows one node per item, and each placement grows the chosen transformer kind's editor — Static Translation for the usual (0, 0, h) offset.
Remember to call UpdateByGeom() after geometry reference or content changed.
Feature
The generic editors reach the holder's own members, and that is what makes the split work. When the Holder node's children are built, the page calls FreeformHolderController's Get with its session key; the server publishes the holder's Geom, GeomToSpindleTransformer and GeomToCutterTransformer in the index service under three per-session keys (-HolderGeom, -HolderGeomToSpindle, -HolderGeomToCutter) and hands the keys back. The keys name the very objects the holder holds, so an edit through a kind editor lands on the holder directly. The keys are returned even when a member is empty — nothing is published then, the section's picker reads an empty slot, and picking a kind fills that same key — which is how a freshly switched-to Freeform holder, whose geometry starts empty, gets its first shape.
Picking a kind is a container-aware create, not a bare New. The Geometry picker calls CreateGeometry, which builds the geometry, sets it as the holder's Geom and publishes it under the section's key (None clears the geometry). A placement picker first creates the transformer through the kind's own New endpoint and then attaches it with UpdateGeomToSpindleTransformer or UpdateGeomToCutterTransformer. Without the attach, only the index-service entry would change and the holder would keep pointing at its old transformer.
Because the generic editors hold no reference back to the holder, every edit at or below a section ends in the holder resync the page wires onto the section: a geometry edit calls UpdateGeometryContent, a placement edit re-attaches the transformer under its key. Both run UpdateByGeom() to regenerate the solid, ClearCache(), and AlignAnchorByExposedCutterHeight() to re-place the cutter under the holder — clearing the cache alone would leave the cutter where it was. The page then refreshes the tool list and the canvas.
The Resolution section writes the polar resolution straight onto the holder: SetPolarResolution assigns a fresh PolarResolution2d and the holder swaps its solid for one born with the new value, keeping the geometry. Get also returns the current pair, which is how the two fields are seeded.
Guards sit on both sides. Every action on the controller answers Not Found for an unknown tool id and Bad Request when the tool's holder is not a FreeformHolder; SetPolarResolution rejects a linear or angle value that is not greater than zero, and the Resolution section refuses to send one. Fields commit on blur or Enter.
-
Switching a tool to Freeform is a committing choice. SetHolderType assigns a new FreeformHolder only when the tool does not already carry one, so a holder authored on the WPF client or through HiNcRcl survives a round trip through the web page with its geometry, anchors and resolution intact.
+
Switching a tool to Freeform is a committing choice. SetHolderType assigns a new FreeformHolder only when the tool does not already carry one, so a holder authored elsewhere — through HiNcRcl, say — survives a round trip through this page with its geometry, anchors and resolution intact.
Freeform Holder: Represents holders with more complex, freeform geometry, often defined by STL files. See FreeformHolder.
Each holder type has its own user interface elements for defining its geometry and properties.
-
On the web client this panel is the Holder tab of the Tool House Page, reached at /tool-house/:toolId/holder. It is the panel of the Control-Tree Holder node under the selected tool — the node whose role path ends in .../holder.
+
This panel is the Holder tab of the Tool House Page, reached at /tool-house/:toolId/holder. It is the panel of the Control-Tree Holder node under the selected tool — the node whose role path ends in .../holder.
Layout
Web Layout
@@ -121,33 +121,8 @@
The three identity fields belong to whichever holder the tool carries. They sit on this panel under the Metadata-on-container convention — a container's own General fields are edited on the container's panel instead of in a General child — and they commit through the per-type holder controller's SetName and SetNote (CylindroidHolderController or FreeformHolderController), not through ToolHouseController. No holder leaves the panel without them.
The type also decides what grows below the node. A Cylindroid holder grows two child sections, Geometry and Resolution — the nodes whose role paths end in .../holder/geometry and .../holder/resolution; see Cylindroid Holder Panel. A Freeform holder grows four — Geometry, Geom To Spindle, Geom To Cutter and Resolution; see Freeform Holder Panel. Selecting a section replaces this panel in the slave column with that section's own panel. None grows no children, so the Holder node is a leaf and the hint is the whole surface.
This panel carries no object management of its own. Object management for the tool library sits on the tool-house root node, where the Object Management Menu Button is bound to the whole .MachiningToolHouse file rather than to a per-holder file.
Committing a type on the web is one server call plus a cache clear. SetHolderType maps the selector value onto the holder classes: none clears the tool's holder, while cylindroid and freeform each assign a new holder only when the tool does not already carry one of that class — so re-picking the type a tool already has keeps the holder it has, and the edits on it, rather than replacing it. When the caller passes its session key the server re-indexes the resulting holder under that session's holder key, and removes that entry for None, so the session key keeps pointing at the tool's current holder. The response carries the holder's class name and its abstract note.
+
Committing a type is one server call plus a cache clear. SetHolderType maps the selector value onto the holder classes: none clears the tool's holder, while cylindroid and freeform each assign a new holder only when the tool does not already carry one of that class — so re-picking the type a tool already has keeps the holder it has, and the edits on it, rather than replacing it. When the caller passes its session key the server re-indexes the resulting holder under that session's holder key, and removes that entry for None, so the session key keeps pointing at the tool's current holder. The response carries the holder's class name and its abstract note.
The panel then calls ClearToolCache, which clears the tool's cached solids and, when the holder implements IClearCache, the holder's own cache as well, so the tool canvas redraws against the new holder. Finally it emits a structure change for its own node, which is how the Geometry and Resolution sections appear or disappear with the type.
GetHolder reports the same pair — class name and abstract note — and is what the panel reads on mount to seed the selector; an unknown tool id answers Not Found. The panel then reads the per-type controller's Get (CylindroidHolderController or FreeformHolderController) to fill the three identity fields; for a Freeform holder that same call also publishes the holder's geometry and two placements under the session's keys for the sections below.
The Tool House is a page of its own at /tool-house/:toolId?/:tab?/:subtab?, reached from the menu bar's Page ▾ dropdown. In the WPF client it is a sub-window opened from the Main Panel.
+
The Tool House is a page of its own at /tool-house/:toolId?/:tab?/:subtab?, reached from the menu bar's Page ▾ dropdown.
The key model is MachiningToolHouse.
-The model UserService is per-client. On the web it is the server-side Environments/UserService.cs, which Mech/ToolHouseDisplayController.cs reads EnablePhysics from; the WPF client resolves its own UserService from the application's service provider.
+The model UserService is the server-side Environments/UserService.cs, which Mech/ToolHouseDisplayController.cs reads EnablePhysics from.
Layout
Three columns, left to right, in two nested resizable splitters — the tool house and its tool list, the selected tool's editor tabs, and the tool canvas. Creating a tool opens no window of its own: New Tool adds a default tool and the user sets it up in the editor tabs.
@@ -164,8 +164,8 @@ The model UserService is per-client. On the web it is the server-si
The three anchor-and-buckle flags of HolderEditorDisplayee and the Holder Rendering Mode radios are all disabled while Show Holder is off, so a child option is reachable only when its parent is on. The menu is one flat list of labelled groups rather than nested submenus, which is what keeps it one click deep.
-
The cutter's shape mode is not a control here. The server picks it when the canvas binds: InitializeDisplay sets ShapeMode to Solid Bounding Shape whenever UserService.EnablePhysics is false, and the web Display Options dropdown offers no switch for it. The WPF page is the client whose Editor Displayee Options menu carries the Solid Bounding Shape / Detail Physics Shape radio submenu.
-
The left column is the other place the two clients differ. The WPF Tool House page lists its tools in a DataGrid with a checkbox column, an editable Tool ID column and a read-only Note column, and puts a Batch Actions menu above it — Select All, De-Select All, then Batch Duplicate and Batch Delete — with Duplicate and Delete also on the grid's context menu. On the web page Tool ID and Note are edited on the selected tool's General tab, where Duplicate and Delete are per-tool icon buttons, so the list itself stays a plain navigation column of router links.
+
The cutter's shape mode is not a control here. The server picks it when the canvas binds: InitializeDisplay sets ShapeMode to Solid Bounding Shape whenever UserService.EnablePhysics is false, and the Display Options dropdown offers no switch for it.
+
The left column carries no editing of its own. Tool ID and Note are edited on the selected tool's General tab, where Duplicate and Delete are per-tool icon buttons, so the list stays a plain navigation column of router links. There is no batch selection and no batch action.
The Tool ID can not be repeated. Create Tool takes the largest existing ID plus 1 (or 1 in an empty house), Duplicate Tool inserts the clone at the first free ID past both the source and the largest existing ID, and renaming a tool onto an ID the house already holds is refused as a conflict.
When the canvas first binds, InitializeDisplay attaches the MillingToolEditorDisplayee and snaps the camera to the isometric view. Each later tool selection re-points that displayee's MillingToolGetter at the chosen tool and calls the renderingCanvas.DispEngine.SetViewToHomeView().
Duplication Button
@@ -211,8 +211,8 @@ The model UserService is per-client. On the web it is the server-si
Note
The fluting type is named loosely on the wire, and every spelling resolves. PUT /{id}/fluting accepts UniformFluting / uniform and FreeFluting / free, and equally UniformContourTray / FreeContourTray. A Control-Tree id whose cutter branch reads …/contours/tray… resolves to the …/contours/fluting… node.
-
One editor lives on the WPF client only, and the app says so where the type is chosen: the FreeformRemover cutter. Selecting that type on the web page keeps the existing model intact and shows a note pointing at the WPF client or HiNcRcl.
-
Three smaller surfaces are likewise the WPF client's: the InsertCutter and FluteInnerBeam physics groups, and the CustomSpinningProfile shaper-profile type — the web profile tab offers the five APT types (General / Ball / Column / Cone / Taper).
+
One cutter type has no editor here, and the app says so where the type is chosen: the FreeformRemover. Selecting it keeps the existing model intact and shows a note — FreeformRemover editor is not yet available in the web frontend. Use the WPF client or HiNcRcl for now.
+
Three smaller surfaces are absent for the same reason: the InsertCutter and FluteInnerBeam physics groups, and the CustomSpinningProfile shaper-profile type — the profile tab offers the five APT types (General / Ball / Column / Cone / Taper).
See Also
Cutter Tab — the cutter half of a tool, and the editors each cutter type grows
On the shipped web client the Stick Tool Panel is the toolhouse/tool-<n> node of the
Tool House Page: picking a tool in that page's left list mounts it, and
its editor is the tab strip filling the page's middle column.
-
The key model is MillingTool.
-Other model: UserService — the WPF client reads its EnablePhysics to decide whether its
-Intelligent Holder tab is shown.
All five tabs ship unconditionally on the web page: the Int. Holder tab is one of the five
-TOOL_TABS, and the tool node always grows its …/intelligent child. The WPF Stick Tool Panel is
-the client that hides its Intelligent Holder tab when UserService.EnablePhysics is false, from
-UpdateIntelligentHolderTabVisibility in Mech/ToolHouse/StickToolPanel.xaml.cs.
-
Object Management on the web page is house-level rather than per-tool: the
+
All five tabs ship unconditionally: the Int. Holder tab is one of the five TOOL_TABS, and the tool
+node always grows its …/intelligent child. Nothing gates it on UserService.EnablePhysics.
+
Object Management is house-level rather than per-tool: the
Object Management Menu Button sits on the Tool House root
panel with file extension .MachiningToolHouse (load type Hi.Machining.MachiningToolHouse, HiMech)
-and covers the whole house, while the tool node offers Duplicate and Delete for the single tool. The
-WPF Stick Tool Panel is the client that carries a per-tool Object Management Menu Button on its head
-line, with file extension .MillingTool and the Stick Tool Management Panel as its pointed editor
-panel. That client also gives the identity fields a tab of their own — Info, a read-only Abstract
-Note TextBox over an editable Note TextBox; on the web page those two fields are the General tab,
-alongside Tool ID and the Duplicate / Delete buttons.
+and covers the whole house, while the tool node offers Duplicate and Delete for the single tool.
+There is no per-tool object-management button, and no separate tab for the identity fields — the
+Abstract Note and Note sit on the General tab, alongside Tool ID and the Duplicate / Delete buttons.
Tabs and the URL
The tabs are TOOL_TABS — General, Cutter, Holder, Clamping, Int. Holder —
declared in wwwroot-src/src/router/treeRoutes.ts, and those same five names are the :tab? segment
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/util/index.html b/App/wwwroot/HiAPI-docsite/anatomy/util/index.html
index d244c7ba..be5cfec4 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/util/index.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/util/index.html
@@ -121,8 +121,7 @@ that tree has no editor for.
Cutter editor — a Tool House Control-Tree branch, not a util page:
wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue with its section, contour
-and flute panels, over Mech/CutterController.cs, reached through the tool-house route. The
-WPF client has Mech/ToolHouse/CutterManagementPanel.xaml and Mech/ToolHouse/MillingCutterPanel.xaml.
+and flute panels, over Mech/CutterController.cs, reached through the tool-house route. The
Rake-face angles — plain cutter fields: radialRakeAngle_deg in
wwwroot-src/src/components/controlTree/toolhouse/FluteSideContourPanel.vue and
axialRakeAngle_deg in
@@ -131,7 +130,7 @@ or .mp file opens as XML in the File Explorer's editor panel.
Color Index Time Chart — a strip chart on the Execution page:
wwwroot-src/src/components/execution/charts/StripIndividualChart.vue, mounted by
wwwroot-src/src/pages/ExecutionPage.vue under the colorIndexTimeChart panel flag that
-Environments/ExecutionDivConfig.cs persists (Environments/PlayerDivConfig.cs on the WPF side).
+Environments/ExecutionDivConfig.cs persists.
It plots the user-picked inspecting key live per step.
The reusable controls that pages embed rather than own. Each page here documents one control — most
-of them under the SPA's components/widgets/ directory — together with its WPF counterpart where one
-exists, so a reader who meets the same control on four screens reads about it once.
+of them under the SPA's components/widgets/ directory — so a reader who meets the same control on
+four screens reads about it once.
A control earns a page here when more than one screen embeds it. A control that only ever appears
on one screen is documented on that screen's page instead.
-
Ordered by how widely each control is embedded across the two clients, most-embedded first.
+
Ordered by how widely each control is embedded, most-embedded first.
Pages
Numeric Input — The single-value numeric field every editor embeds: blur-and-Enter commit, inclusive bounds, and the Infinity and NaN spellings; the most widely embedded control in the app
The model is PolarResolution2d: a linear step in millimetres plus an angular step, carried in radians and edited in degrees, that together tessellate a revolved shape into an STL mesh. Both clients edit it on a tool holder and nowhere else — the WPF client through this widget, the web client through the Cylindroid holder's Resolution section.
+
The model is PolarResolution2d: a linear step in millimetres plus an angular step, carried in radians and edited in degrees, that together tessellate a revolved shape into an STL mesh. It is edited on a tool holder and nowhere else, through the Cylindroid holder's Resolution section.
Layout
-
WPF Layout
-
-
Polar Resolution 2D Panel
-
-
Enable Custom Resolution CheckBox
-
-
checked if the host model is not null; the checkbox itself is always clickable.
-
unchecking sets the host model to null; checking a null model publishes a fresh PolarResolution2d of 0.5 mm / 5 deg through the setter.
-
-
-
Linear Resolution Input Field, with an mm suffix label
-
-
enabled if model not null
-
-
-
Angle Resolution Input Field, with a degree-sign suffix label
-
-
enabled if model not null
-
-
-
-
-
-
Web Layout
Holder Resolution Section
@@ -122,14 +98,13 @@
-
There is no enable checkbox and no null state on the web: both fields are always editable, and each commits on blur or Enter, and only when both values are greater than zero.
+
There is no enable checkbox and no null state: both fields are always editable, and each commits on blur or Enter, and only when both values are greater than zero.
Feature
-
The Enable CheckBox is always shown. The host drives the WPF widget only through GetterFunc / SetterFunc; it calls UpdateUI() after its own model changes and subscribes to OnModelChanged to react to an edit.
-
An edit republishes a whole new carrier through the setter instead of mutating the current one, in either client. A holder's PolarResolution2d setter swaps the holder's solid for one born with the new value and disposes the old one, and skips a value-equal reassignment — which is what makes the WPF widget's per-keystroke setting affordable. The web client performs the same swap server-side inside SetPolarResolution, then clears the holder's cache.
-
If the host model is null, it may mean the resolution applied the default value: PolarResolution2d is a snapshot of the solid's identity, and a null carrier lets a parametric geometry apply its own default. Only the WPF client can reach that state. The service reports a null resolution as 0 mm / 0 deg, the two web fields display those zeros, and the commit guard then blocks any write until real numbers are typed.
+
An edit republishes a whole new carrier instead of mutating the current one. A holder's PolarResolution2d setter swaps the holder's solid for one born with the new value and disposes the old one, and skips a value-equal reassignment; the same swap happens server-side inside SetPolarResolution, which then clears the holder's cache.
+
A null host model means the resolution applied the default value: PolarResolution2d is a snapshot of the solid's identity, and a null carrier lets a parametric geometry apply its own default. Nothing on this surface can produce that state. The service reports a null resolution as 0 mm / 0 deg, the two fields display those zeros, and the commit guard then blocks any write until real numbers are typed.
HiNC-2025-webservice (Quasar CLI SPA): no standalone widget. The resolution is edited on the Cylindroid holder's Resolution section, at the Control-Tree id toolhouse/tool-{id}/holder/resolution and the route /tool-house/:toolId/holder/resolution. A Freeform holder grows no sections in the web client; its Holder panel shows a hint pointing at the WPF client instead.
+
HiNC-2025-webservice (Quasar CLI SPA): no standalone widget. The resolution is edited on the Cylindroid holder's Resolution section, at the Control-Tree id toolhouse/tool-{id}/holder/resolution and the route /tool-house/:toolId/holder/resolution. A Freeform holder grows no sections here; its Holder panel shows a hint saying the geometry is edited elsewhere.
wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the section === 'resolution' branch: the two number fields, seeded from Get and committed on blur / Enter.
wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — registers that panel as the HolderSection item type and grows the Resolution node only for a CylindroidHolder.
The RenderingCanvas Tool Bar is the camera-preset menu that every 3D canvas in the app carries. In the WPF client the control holds a DispEngine and drives it directly from each menu click. On the web it holds no engine: it takes a canvas prop and calls that component's exposed setView(name), which invokes the SetView hub method, and the hub is what drives the per-connection DispEngine.
+
The RenderingCanvas Tool Bar is the camera-preset menu that every 3D canvas in the app carries. It holds no engine of its own: it takes a canvas prop and calls that component's exposed setView(name), which invokes the SetView hub method, and the hub is what drives the per-connection DispEngine.
View Menu
The bar is a single View ▾ menu. Its seven entries, in shipped order, are Isometric, Front, Back, Right, Left, Top and Bottom. The engine also understands a home view and RenderingCanvas.vue exposes setViewToHomeView, but this menu does not offer it.
@@ -129,9 +129,9 @@
Back View Implementation
-
Back / Left / Bottom views are composed by first calling the corresponding forward-view method (SetViewToFrontView / SetViewToRightView / SetViewToTopView) and then invoking TurnBackView() to flip the camera about the view plane. Both clients compose them the same way — the web in the hub's SetView switch, WPF in the tool bar's click handlers.
+
Back / Left / Bottom views are composed by first calling the corresponding forward-view method (SetViewToFrontView / SetViewToRightView / SetViewToTopView) and then invoking TurnBackView() to flip the camera about the view plane, composed in the hub's SetView switch.
Canvas Binding
-
On the web the tool bar declares exactly one prop, a nullable canvas, typed structurally as an object exposing setView(v: string): Promise<void> rather than as the RenderingCanvas component type. Every entry calls it optionally, so a tool bar with no canvas bound still opens and each entry is a no-op. The preset names travel to the hub untranslated; only the row labels are localized, from the widgets.canvas.* keys.
+
The tool bar declares exactly one prop, a nullable canvas, typed structurally as an object exposing setView(v: string): Promise<void> rather than as the RenderingCanvas component type. Every entry calls it optionally, so a tool bar with no canvas bound still opens and each entry is a no-op. The preset names travel to the hub untranslated; only the row labels are localized, from the widgets.canvas.* keys.
Scene Menu
Pages that sit next to a RenderingCanvas surface a per-page Scene ▾ menu button — the DisplayOptionsMenu component, labelled from widgets.canvas.scene because no caller overrides the label. It chooses what the 3D scene draws (solids, coordinates, display aids), as distinct from the camera-oriented View ▾ menu beside it. The layout (header + checkboxes + radio rows) is shared across four callers — the Execution page's extended tool bar, the General Setup equipment panel, the Tool House setup panel and the STL preview pane — so it is implemented once as a generic, schema-driven component.
Schema
@@ -154,10 +154,6 @@
Backends — one per caller, each a different surface: ExecutionExtendedToolBar.vue reaches /api/rendering-flags (Common/RenderingFlagsController.cs), which flips bits in ExecutionDisplayee.RenderingFlagBitArray; EquipmentSetupPanel.vue reaches /api/mech/equipment-setup-display/* (Mech/EquipmentSetupDisplayController.cs); ToolHouseSetupPanel.vue reaches /api/mech/tool-house-display/* (Mech/ToolHouseDisplayController.cs); StlPreviewPane.vue reaches /api/stl-preview/set-coordinate/* (Disp/StlPreviewController.cs). Those last three route each POST by the caller's renderingConnectionId, so the toggle lands on that canvas's own engine; the rendering-flags surface carries no connection id and acts on the project-wide ExecutionDisplayee instead. DisplayOptionsMenu.vue is UI-only; it does no REST work itself — the caller owns the onUpdate handlers, so optimistic update and error reversion stay page-local.
-
WPF
-
-
Play/RenderingFlagSubmenu.xaml — the shared flag submenu, wrapped per surface by Numerical/Controller/ControllerExtendedRenderingCanvasToolBar.xaml and Play/PlayerExtendedRenderingCanvasToolBar.xaml. Behaviour parity with the web Scene ▾ menu; no schema-driven composition.
diff --git a/App/wwwroot/HiAPI-docsite/anatomy/widget/vec3d-control.html b/App/wwwroot/HiAPI-docsite/anatomy/widget/vec3d-control.html
index d544c365..fb7f3714 100644
--- a/App/wwwroot/HiAPI-docsite/anatomy/widget/vec3d-control.html
+++ b/App/wwwroot/HiAPI-docsite/anatomy/widget/vec3d-control.html
@@ -91,21 +91,17 @@
and no Control-Tree node of its own, reached only through the editors that host it.
Key Model
The persisted model is Vec3d, exposed over /api/Vec3d by Widget/Vec3dController.cs.
-
In the web application the widget's own model is the plain { x, y, z } number triple exported as
+
The widget's own model is the plain { x, y, z } number triple exported as
interface Vec3 from wwwroot-src/src/components/widgets/Vec3Input.vue. The widget carries no key
and calls no endpoint: the host binds it with v-model plus an @update:model-value handler, and
that handler does the persisting, each host on its own terms. The four transformer editors call
updateVec3d from wwwroot-src/src/api/geometry.ts, which posts all three axes together to
/api/Vec3d/Update, while wwwroot-src/src/components/geom/Box3dEditor.vue folds the edited triple
back into a min and max pair and posts that to /api/Box3d/Update.
-
The WPF control likewise holds no value of its own. GetterFunc returns the live
-Vec3d instance, the text handlers write the parsed numbers straight onto it, and
-UpdateByContentFunc is awaited afterwards so the host can push the change on.
-
The web props are modelValue, disable, readonly, normalize, labels and textMode, and the
+
The props are modelValue, disable, readonly, normalize, labels and textMode, and the
emits are update:modelValue and normalize. labels is a three-tuple defaulting to
['X', 'Y', 'Z'], and carries units where the host has them, as in ['X (mm)', 'Y (mm)', 'Z (mm)'].
-textMode sets the initial mode only and defaults to false. The corresponding WPF properties are
-ShowNormalizeButton, IsTextMode and IsReadOnly.
+textMode sets the initial mode only and defaults to false.
Layout
Vec3dControl
@@ -119,496 +115,28 @@ control is disabled or readonly
-
In the WPF client the two forms are two panels, StandardModePanel and TextModePanel, of which
-exactly one is visible; each panel carries its own mode-toggle and normalize buttons.
Feature
Per-axis form
-
X, Y and Z in three separate fields. The web widget renders every finite value at full precision;
-the WPF control renders each axis with a fixed three decimal places.
+
X, Y and Z in three separate fields, each rendering every finite value at full precision.
Single-field text form
-
The web form is (x, y, z). Its parser strips surrounding brackets and splits on comma, semicolon
+
The form is (x, y, z). Its parser strips surrounding brackets and splits on comma, semicolon
or whitespace, requiring at least three parts, and entering the text form re-syncs the field from
-the current value so a stale in-progress edit is discarded. The WPF text box holds comma-separated
-x,y,z without brackets and accepts two further shapes: a pasted 4x4 matrix, from which it takes
-the translation column, and loose text, from which it takes the first three numbers it can read.
+the current value so a stale in-progress edit is discarded.
Vector normalization
-
The normalize button is opt-in and off by default in both clients: the normalize prop in the web
-widget, the ShowNormalizeButton property in the WPF control.
-
In the web widget the button only raises a normalize event, and the embedding editor performs the
+
The normalize button is opt-in and off by default, through the normalize prop.
+
The button only raises a normalize event, and the embedding editor performs the
normalization on its own owning object. wwwroot-src/src/components/topo/StaticRotationEditor.vue
posts to /api/StaticRotation/NormalizeAxis, while
wwwroot-src/src/components/topo/DynamicRotationEditor.vue and
wwwroot-src/src/components/topo/DynamicTranslationEditor.vue call normalizeDynamicRotationAxis
-and normalizeDynamicTranslationAxis from wwwroot-src/src/api/transformer.ts. The WPF control
-normalizes the vector in place and writes the result back at three decimal places.
+and normalizeDynamicTranslationAxis from wwwroot-src/src/api/transformer.ts.
Commit and special values
-
Web edits commit on blur or Enter, never per keystroke, and a value is emitted only when it differs
+
Edits commit on blur or Enter, never per keystroke, and a value is emitted only when it differs
from the current model. An empty field parses to 0; any other unparseable text reverts the field to
the last valid value. Formatting and parsing are local to the component: NaN renders as NaN and
the infinities as Infinity and -Infinity, and the parser accepts those spellings
-case-insensitively as well as the ∞ and -∞ glyphs. The WPF control commits on every keystroke
-instead, leaving the model untouched while the text is unparseable so that a half-typed number is
-not treated as an error.
Load-time audit helpers for IStrokeLimitConfig: which
+machine-coordinate axes the chain has, and which of them the stroke limit
+check cannot judge because no limit is configured. Both checks — the
+per-block StrokeLimitCheckSemantic and the per-step
+CheckStrokeLimit(DVec3d, IProgress<IMessage>) — compare only axes that
+carry a limit, so a machine file without limits passes every position
+silently while EnableStrokeLimitCheck reads as on. The session
+begin reports that gap once through these helpers.
Describes the axes among axisNames that the stroke
+limit check cannot judge: an axis with neither end configured is
+listed by name, an axis with one end only is listed with the missing
+end ("Z (no negative limit)"). Empty when every axis has both
+ends. A limit of NaN or ±infinity counts as not configured (the legacy
+HardNcEnv boxes default to an infinite box).
The machine-coordinate axes chain actually has: an
+axis counts when a transformer is bound to its name
+(GetTransformerX() …
+GetTransformerC()). A three-axis chain yields
+X, Y, Z only; a null chain yields nothing.
+
+
+
+
+
public static List<string> GetChainAxisNames(IXyzabcChain chain, bool linearOnly = false)
When true, only the translation axes (X, Y, Z) are returned. A travel
+audit wants this: a linear axis always has a finite travel, so a
+missing limit is unambiguously a gap, while a rotary table that turns
+continuously legitimately has none and cannot be given one.
+
+
+
+
+
+
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.html
index 9a1e3c62..0a08454e 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.html
@@ -164,6 +164,18 @@ Stored per machine in
consumed by MCodeExpansionSyntax, which
expands the declared code into the canonical ISO flags the regular
consumers already understand.
+
+
+
Load-time audit helpers for IStrokeLimitConfig: which
+machine-coordinate axes the chain has, and which of them the stroke limit
+check cannot judge because no limit is configured. Both checks — the
+per-block StrokeLimitCheckSemantic and the per-step
+CheckStrokeLimit(DVec3d, IProgress<IMessage>) — compare only axes that
+carry a limit, so a machine file without limits passes every position
+silently while EnableStrokeLimitCheck reads as on. The session
+begin reports that gap once through these helpers.
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 32c52330..b2e4179a 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html
@@ -253,6 +253,31 @@ G98/G99 flag on the same block):
{ "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:
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html
index 762b45dd..2157f4e1 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html
@@ -353,6 +353,36 @@ flag (no parameter object to hang an H on):
}
]
}
+The first block after a program end — #Previous: carries the
+ProgramEnd section next to the still-active G43.4, and the
+block itself swings a rotary axis (as a post-M02 G0 A90. does
+when a CAM file chains several programs). This is the reset edge
+(ProgramEndSyntax): the controller's reset cancels
+tool-center-point control, so the modal is not carried, no
+Dynamic entry is written (the swing stays a plain McLinear
+rotary move instead of pinning the tool tip), and the block gets the
+G49 sentinel with the identity Mat4d — ToolHeightOffsetSyntax
+skipped this block because the previous term was not ISO:
+#Previous:
+
The first block after a program end — #Previous: carries the
+ProgramEnd section (END PGM, M2 or M30) next to the
+still-active M128. This is the reset edge
+(ProgramEndSyntax): the TNC resets M128 / FUNCTION
+TCPM at program end while the TOOL CALL length compensation stays,
+so the block gets exactly the M129 hand-back:
+#Previous:
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html
index 8650e7b0..406dc87a 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html
@@ -6,7 +6,7 @@
-
+
@@ -116,9 +116,18 @@ active frame for one block; in this pipeline all of those reduce to
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) are left to
-McAbcSyntax — same behavior as ISO G53, where rotary
-axes flow through the normal rotary path.
+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 beforeIncrementalResolveSyntax
@@ -301,6 +310,44 @@ section stays on the block (one-shot, nobody consumes it):
"ProgramXyz": { "X": 100, "Y": 40, "Z": -200 },
"MotionEvent": { "Form": "McLinear", "IsRapid": true, "Term": "G53" }
}
+
Rotary-only machine-coordinate block under RTCP (G0 G53 A0.
+while G43.4 is active) — McAbcSyntax has already
+consumed the rotary word into MachineCoordinateState, and
+G43p4RtcpSyntax has tagged the chain Dynamic because
+the tool orientation changes across the block. The linear axes hold
+the previous machine position (G53 applies no compensation, so the
+swing turns the axis in place instead of pinning the tool tip) and
+the motion is stamped McLinear; ProgramXyz is the tip's
+program coordinate after the swing — the 10 mm tool-height entry is
+inverted, MC Z 0 → program Z −10:
+#Previous:
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html
index a1158d67..9331515a 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html
@@ -6,7 +6,7 @@
-
+
@@ -105,6 +105,40 @@ Downstream syntaxes that need to reset modal state on program end
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<SyntaxPiece>) 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.
@@ -377,6 +411,51 @@ Must be placed before syntaxes that depend on the ProgramEnd section.
+
+
+
True when node is the first block after a
+program end — its predecessor carries the ProgramEnd
+section (M02 / M30, or a brand equivalent such as klartext
+END PGM). Modal owners call this in their
+node.Previous lookback and, when true, write their reset
+(cancel) state on node instead of carrying the
+predecessor's modal forward — see the class summary for the set.
+The section is one-shot (never carried), so the edge is exactly one
+block wide.
+
+
+
+
+
public static bool IsResetEdge(LazyLinkedListNode<SyntaxPiece> node)
The first block after a program end — #Previous: carries the
+ProgramEnd section next to the still-active TRAORI. This is
+the reset edge (ProgramEndSyntax): the control's reset
+deactivates the transformation (the MD20110 default is TRAFOOF on
+reset) while the tool's D compensation stays active, so the block
+gets exactly the TRAFOOF hand-back — the section returns to the
+recorded owner with the plain translation entry:
+#Previous:
+At the program-end edge (IsResetEdge(LazyLinkedListNode<SyntaxPiece>)
+— the previous block carried M02 / M30 / END PGM) an active
+term is not carried: the controller's reset cancels the tilted
+work plane, the coordinate rotation and the programmable frames, so
+the successor gets the explicit cancel state (G69 section +
+identity entry, the shape TryHandleG69(JsonObject, JsonObject) writes) — an
+explicit section, so ModalCarrySyntax
+does not clone the predecessor's active section onto it.
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html
index 2ec34568..90d48457 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html
@@ -300,6 +300,35 @@ and the same offset-1 table provides 99.98 mm:
}
]
}
+The first block after a program end — #Previous: carries the
+ProgramEnd section next to the still-active G43 H1. This is
+the reset edge (ProgramEndSyntax): the controller's
+reset cancels tool length compensation, so the modal is not carried
+and the block gets the same G49 sentinel and identity Mat4d an
+explicit G49 writes; the unrelated G00 flag survives:
+#Previous:
+
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html
index 8539d7bd..182c509f 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.LogicSyntaxs.html
@@ -655,9 +655,18 @@ active frame for one block; in this pipeline all of those reduce to
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) are left to
-McAbcSyntax — same behavior as ISO G53, where rotary
-axes flow through the normal rotary path.
+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 beforeIncrementalResolveSyntax
@@ -1138,6 +1147,40 @@ Downstream syntaxes that need to reset modal state on program end
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<SyntaxPiece>) 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.
diff --git a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html
index 2a1df2dd..62cf41d8 100644
--- a/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html
+++ b/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html
@@ -273,6 +273,21 @@ the modal fallthrough, not real motion, so it counts as bare:
"MotionEvent": { "Form": "McLinear" },
"RadiusCompensation": { "Side": "None", "Term": "G40", "OffsetId": 1 }
}
+
The first block after a program end — #Previous: carries the
+ProgramEnd section next to a still-active G41 D1. This is the
+reset edge (ProgramEndSyntax): the
+controller's reset cancels cutter compensation, so the block is
+written cancelled (G40) instead of inheriting G41; the modal D row
+is kept, as it is across an explicit G40:
+#Previous:
diff --git a/App/wwwroot/HiAPI-docsite/api/toc.json b/App/wwwroot/HiAPI-docsite/api/toc.json
index a8c3095c..40d74498 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":"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":"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":"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.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":"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":"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"}
diff --git a/App/wwwroot/HiAPI-docsite/index.json b/App/wwwroot/HiAPI-docsite/index.json
index ec18612f..f4217dd1 100644
--- a/App/wwwroot/HiAPI-docsite/index.json
+++ b/App/wwwroot/HiAPI-docsite/index.json
@@ -12,7 +12,7 @@
"anatomy/by-source/webservice-spa/index.html": {
"href": "anatomy/by-source/webservice-spa/index.html",
"title": "Web Service SPA Source Tree | HiAPI-C# 2025",
- "summary": "Web Service SPA Source Tree HiNC-2025-webservice/wwwroot-src/src is the flagship front end: a Quasar CLI single-page application in Vue 3, TypeScript and Pinia, served by the same ASP.NET Core process that answers its REST calls. Every page in Anatomy outside the desktop map documents something in this tree. Folders below follow the stock Quasar skeleton order, with the two places the skeleton breaks called out where they occur. The One Thing to Know First components/ is grouped both ways at the same level, and that is deliberate rather than untidy: Page-scoped — components/controller/, components/execution/ and half of components/mech/ are chrome for exactly one route. Domain-scoped — components/geom/, components/topo/, components/toolhouse/, components/spindle/, components/workpiece/ and components/mission/ are pulled in from wherever the domain surfaces, most often the Control Tree. Primitives — components/widgets/ and components/panels/ have no domain at all and are the most-imported folders in the application. So a component's folder does not tell a reader who mounts it. components/mission/ has no Mission page — /mission redirects into the Execution page's tree — and components/workpiece/ holds a single dropdown while the real workpiece editors are Control-Tree panels. The second break is history. The application has been re-architected repeatedly, and because Control-Tree node ids ride in ?tree= links they are a public surface: every regroup adds a migration hop rather than rewriting the last one. The residue is visible in wwwroot-src/src/router/routes.ts, where a large share of the table is redirects preserving URLs from earlier architectures — a route existing there does not mean a page exists for it. Root and Boot wwwroot-src/src/App.vue — not the shell. It is a bare router view plus the once-per-load wiring that subscribes the project store to the execution-status hub. The real shell is wwwroot-src/src/layouts/MainLayout.vue. Documented in Session State. wwwroot-src/src/boot/auth.ts, wwwroot-src/src/boot/i18n.ts, wwwroot-src/src/boot/routine-toast.ts — Quasar boot files, run once before mount and in a declared order. The auth boot file patches the global fetch and inspects every 401, which is why no API module carries its own 401 handling — but the redirect it can raise is conditional: it fires only while the auth store reports the login gate enabled, and not when the router is already on the login route, so on a build with the gate off a 401 redirects nowhere. The toast boot file patches the shared notify helper so every toast is mirrored into the footer history without touching a call site. Documented in Login and Authentication and Internationalization. wwwroot-src/src/layouts/MainLayout.vue — the shell: menu bar, the routed page container, footer. It also owns the mechanism every page depends on and no page implements: a project epoch, bumped when the loaded project changes, is the keep-alive key, so a project change destroys and rebuilds every cached page. Documented in Main Panel and Session State. The REST Edge wwwroot-src/src/api/ is one thin typed module per backend controller family — functions, DTO types and kind unions, no Vue code. This is the tightest correspondence between the two halves of the application: each module wraps one named controller almost one-to-one. wwwroot-src/src/api/http.ts — the shared response layer. Its own header names the modules that deliberately bypass it, so “every API module goes through it” would be wrong. wwwroot-src/src/api/index-service.ts — not a barrel file. It wraps the backend's keyed object store, which is where the key string threaded through the whole application comes from. Documented in Dictionary Service Pattern. Components wwwroot-src/src/components/ — the shared top level: wwwroot-src/src/components/AppMenuBar.vue, wwwroot-src/src/components/AppFooter.vue, wwwroot-src/src/components/RenderingCanvas.vue, wwwroot-src/src/components/FileExplorer.vue and wwwroot-src/src/components/StlPreviewPane.vue. The canvas does not render locally: it opens a SignalR connection and paints server-rendered frames, which is why several pages each own a canvas bound to a different backend scene. Documented in Rendering Canvas on Web Service, File Explorer and STL Preview Pane. wwwroot-src/src/components/controlTree/ — the largest folder in the SPA by a factor of two, and a registry-driven panel system rather than a folder of tree widgets. wwwroot-src/src/components/controlTree/itemTypes.ts and its domain siblings map an item-type string onto a panel component and a child-building function; wwwroot-src/src/components/controlTree/useControlTreeHost.ts is the state machine that builds the tree, gates a dirty selection switch, and syncs ?tree=; the many panel components are the editors the registry resolves. It serves three consumers, not one — the Execution and General Setup pages each instantiate their own scoped host, while the Tool House page reuses the identical panels and registry through a tab cascade and never touches the host. Documented in Control Tree — the folder's own page — with Execution Page, General Setup Page and Tool House Page for the three consumers, and Program Branch for the NC-program item types and panels that live in this folder. The nineteen SoftNc* panels and their registry are a wave of their own, documented under Controller Branch: which of them the tree mounts at all is decided by Brand Matrix, and what they share is Editing Contract. wwwroot-src/src/components/controlTree/toolhouse/ — the Tool House branch's panels. Easy to confuse with wwwroot-src/src/components/toolhouse/: these are the panels the registry mounts, that folder holds the content fragments those panels embed, and the dependency runs one way only. wwwroot-src/src/components/execution/ — the run cockpit's own panels, plus its charts/ sub-folder, the uPlot charting layer. Not purely page-local: wwwroot-src/src/components/execution/ExecutionToolBar.vue is mounted by the Control Tree's primary panel, and the spindle contours chart imports from the charts folder. Documented in Execution Page, Strip Charts and Cycle-Line Charts. wwwroot-src/src/components/geom/ and wwwroot-src/src/components/topo/ — structural twins: one editor per kind, the same modelKey prop and changed / error emits, and a single kind → editor map — wwwroot-src/src/components/geom/geometryEditors.ts and wwwroot-src/src/components/topo/transformerEditors.ts — that is the source of truth for both the switchboard and the Control Tree. A new kind must be registered there, not merely dropped in the folder. “topo” means coordinate transformers, not mesh topology. Documented in Geometry Panels and Transformer Select Panel. wwwroot-src/src/components/widgets/ — the reusable input library: numeric, vector and matrix inputs, the file-path input and picker, the CodeMirror text editor, the display-options and object-management menus. Documented in Widgets. wwwroot-src/src/components/panels/ — pure layout machinery with no domain: the collapsible expansion panel and the resizable stack whose registration contract produces the “rows collapse in place” behaviour the tree pages describe. Documented in Control Tree, whose dock rows are both expansion rows, and Session State for the keep-mounted flag that decides whether a collapse unmounts its content. wwwroot-src/src/components/mission/, .../toolhouse/, .../spindle/, .../preference/, .../mech/, .../workpiece/ and .../controller/ — the domain and page folders named above. The *Div.vue suffix inside the Tool House folder is a convention carried over from the legacy Blazor components: a Div is an embeddable content fragment with no panel chrome. State, Routing and Text wwwroot-src/src/composables/ — three different concerns in one folder: hub access, shared domain state, and UI mechanics. wwwroot-src/src/composables/useSharedHub.ts is the reference-counted connection manager behind every hub composable, so a hub opens only while something consumes it. wwwroot-src/src/composables/useToolHouse.ts and wwwroot-src/src/composables/useSpindleCapability.ts are module-level singletons, not per-component instances. wwwroot-src/src/composables/useViewPrefs.ts stores layout state in the browser only — it is neither in the project file nor in the server's user config. Documented in Session State. wwwroot-src/src/stores/ — four Pinia stores. wwwroot-src/src/stores/index.ts is not a barrel; it is the Quasar factory. Most shared state lives in composables/ instead. Documented in Session State. wwwroot-src/src/router/ — wwwroot-src/src/router/routes.ts is the table plus the legacy redirects, and wwwroot-src/src/router/treeRoutes.ts is the load-bearing file its name understates: it holds the accumulated chain of tree-id renames and the id → page resolver, plus the tab-name constants both the router and the tab composable consume. A route's meta.title holds an i18n key, not a title. Documented in Tree Ids and Routes. wwwroot-src/src/i18n/ — three locales shipped together, each a list of namespace files. English is the schema, not merely a locale: the two Chinese bundles are typed against it, so a key present in English and missing there is a build error. Keys are split by UI region rather than by source file, so there is no one-to-one mapping between an i18n file and a components folder. Documented in Internationalization and Translation Remarks. wwwroot-src/src/pages/ — one file per route, and page size is a poor guide to importance: the General Setup page is small because it delegates almost everything to the Control Tree dock and the equipment canvas, while the File Explorer page is a thin wrapper around a large shared component. wwwroot-src/src/utils/, wwwroot-src/src/directives/, wwwroot-src/src/css/ — small and mostly presentational. Two severity scales exist and must not be conflated: wwwroot-src/src/utils/messageSeverity.ts maps the engine's diagnostic scale, while the footer's routine severity is a separate, shorter toast scale. See Also Anatomy by Source Directory — the other two source trees, and how this layer is meant to be entered Web Service Backend Source Tree — the process that serves this application and answers its REST and hub traffic"
+ "summary": "Web Service SPA Source Tree HiNC-2025-webservice/wwwroot-src/src is the flagship front end: a Quasar CLI single-page application in Vue 3, TypeScript and Pinia, served by the same ASP.NET Core process that answers its REST calls. Every page in Anatomy documents something in this tree or in the backend beside it. Folders below follow the stock Quasar skeleton order, with the two places the skeleton breaks called out where they occur. The One Thing to Know First components/ is grouped both ways at the same level, and that is deliberate rather than untidy: Page-scoped — components/controller/, components/execution/ and half of components/mech/ are chrome for exactly one route. Domain-scoped — components/geom/, components/topo/, components/toolhouse/, components/spindle/, components/workpiece/ and components/mission/ are pulled in from wherever the domain surfaces, most often the Control Tree. Primitives — components/widgets/ and components/panels/ have no domain at all and are the most-imported folders in the application. So a component's folder does not tell a reader who mounts it. components/mission/ has no Mission page — /mission redirects into the Execution page's tree — and components/workpiece/ holds a single dropdown while the real workpiece editors are Control-Tree panels. The second break is history. The application has been re-architected repeatedly, and because Control-Tree node ids ride in ?tree= links they are a public surface: every regroup adds a migration hop rather than rewriting the last one. The residue is visible in wwwroot-src/src/router/routes.ts, where a large share of the table is redirects preserving URLs from earlier architectures — a route existing there does not mean a page exists for it. Root and Boot wwwroot-src/src/App.vue — not the shell. It is a bare router view plus the once-per-load wiring that subscribes the project store to the execution-status hub. The real shell is wwwroot-src/src/layouts/MainLayout.vue. Documented in Session State. wwwroot-src/src/boot/auth.ts, wwwroot-src/src/boot/i18n.ts, wwwroot-src/src/boot/routine-toast.ts — Quasar boot files, run once before mount and in a declared order. The auth boot file patches the global fetch and inspects every 401, which is why no API module carries its own 401 handling — but the redirect it can raise is conditional: it fires only while the auth store reports the login gate enabled, and not when the router is already on the login route, so on a build with the gate off a 401 redirects nowhere. The toast boot file patches the shared notify helper so every toast is mirrored into the footer history without touching a call site. Documented in Login and Authentication and Internationalization. wwwroot-src/src/layouts/MainLayout.vue — the shell: menu bar, the routed page container, footer. It also owns the mechanism every page depends on and no page implements: a project epoch, bumped when the loaded project changes, is the keep-alive key, so a project change destroys and rebuilds every cached page. Documented in Main Panel and Session State. The REST Edge wwwroot-src/src/api/ is one thin typed module per backend controller family — functions, DTO types and kind unions, no Vue code. This is the tightest correspondence between the two halves of the application: each module wraps one named controller almost one-to-one. wwwroot-src/src/api/http.ts — the shared response layer. Its own header names the modules that deliberately bypass it, so “every API module goes through it” would be wrong. wwwroot-src/src/api/index-service.ts — not a barrel file. It wraps the backend's keyed object store, which is where the key string threaded through the whole application comes from. Documented in Dictionary Service Pattern. Components wwwroot-src/src/components/ — the shared top level: wwwroot-src/src/components/AppMenuBar.vue, wwwroot-src/src/components/AppFooter.vue, wwwroot-src/src/components/RenderingCanvas.vue, wwwroot-src/src/components/FileExplorer.vue and wwwroot-src/src/components/StlPreviewPane.vue. The canvas does not render locally: it opens a SignalR connection and paints server-rendered frames, which is why several pages each own a canvas bound to a different backend scene. Documented in Rendering Canvas on Web Service, File Explorer and STL Preview Pane. wwwroot-src/src/components/controlTree/ — the largest folder in the SPA by a factor of two, and a registry-driven panel system rather than a folder of tree widgets. wwwroot-src/src/components/controlTree/itemTypes.ts and its domain siblings map an item-type string onto a panel component and a child-building function; wwwroot-src/src/components/controlTree/useControlTreeHost.ts is the state machine that builds the tree, gates a dirty selection switch, and syncs ?tree=; the many panel components are the editors the registry resolves. It serves three consumers, not one — the Execution and General Setup pages each instantiate their own scoped host, while the Tool House page reuses the identical panels and registry through a tab cascade and never touches the host. Documented in Control Tree — the folder's own page — with Execution Page, General Setup Page and Tool House Page for the three consumers, and Program Branch for the NC-program item types and panels that live in this folder. The nineteen SoftNc* panels and their registry are a wave of their own, documented under Controller Branch: which of them the tree mounts at all is decided by Brand Matrix, and what they share is Editing Contract. wwwroot-src/src/components/controlTree/toolhouse/ — the Tool House branch's panels. Easy to confuse with wwwroot-src/src/components/toolhouse/: these are the panels the registry mounts, that folder holds the content fragments those panels embed, and the dependency runs one way only. wwwroot-src/src/components/execution/ — the run cockpit's own panels, plus its charts/ sub-folder, the uPlot charting layer. Not purely page-local: wwwroot-src/src/components/execution/ExecutionToolBar.vue is mounted by the Control Tree's primary panel, and the spindle contours chart imports from the charts folder. Documented in Execution Page, Strip Charts and Cycle-Line Charts. wwwroot-src/src/components/geom/ and wwwroot-src/src/components/topo/ — structural twins: one editor per kind, the same modelKey prop and changed / error emits, and a single kind → editor map — wwwroot-src/src/components/geom/geometryEditors.ts and wwwroot-src/src/components/topo/transformerEditors.ts — that is the source of truth for both the switchboard and the Control Tree. A new kind must be registered there, not merely dropped in the folder. “topo” means coordinate transformers, not mesh topology. Documented in Geometry Panels and Transformer Select Panel. wwwroot-src/src/components/widgets/ — the reusable input library: numeric, vector and matrix inputs, the file-path input and picker, the CodeMirror text editor, the display-options and object-management menus. Documented in Widgets. wwwroot-src/src/components/panels/ — pure layout machinery with no domain: the collapsible expansion panel and the resizable stack whose registration contract produces the “rows collapse in place” behaviour the tree pages describe. Documented in Control Tree, whose dock rows are both expansion rows, and Session State for the keep-mounted flag that decides whether a collapse unmounts its content. wwwroot-src/src/components/mission/, .../toolhouse/, .../spindle/, .../preference/, .../mech/, .../workpiece/ and .../controller/ — the domain and page folders named above. The *Div.vue suffix inside the Tool House folder is a convention carried over from the legacy Blazor components: a Div is an embeddable content fragment with no panel chrome. State, Routing and Text wwwroot-src/src/composables/ — three different concerns in one folder: hub access, shared domain state, and UI mechanics. wwwroot-src/src/composables/useSharedHub.ts is the reference-counted connection manager behind every hub composable, so a hub opens only while something consumes it. wwwroot-src/src/composables/useToolHouse.ts and wwwroot-src/src/composables/useSpindleCapability.ts are module-level singletons, not per-component instances. wwwroot-src/src/composables/useViewPrefs.ts stores layout state in the browser only — it is neither in the project file nor in the server's user config. Documented in Session State. wwwroot-src/src/stores/ — four Pinia stores. wwwroot-src/src/stores/index.ts is not a barrel; it is the Quasar factory. Most shared state lives in composables/ instead. Documented in Session State. wwwroot-src/src/router/ — wwwroot-src/src/router/routes.ts is the table plus the legacy redirects, and wwwroot-src/src/router/treeRoutes.ts is the load-bearing file its name understates: it holds the accumulated chain of tree-id renames and the id → page resolver, plus the tab-name constants both the router and the tab composable consume. A route's meta.title holds an i18n key, not a title. Documented in Tree Ids and Routes. wwwroot-src/src/i18n/ — three locales shipped together, each a list of namespace files. English is the schema, not merely a locale: the two Chinese bundles are typed against it, so a key present in English and missing there is a build error. Keys are split by UI region rather than by source file, so there is no one-to-one mapping between an i18n file and a components folder. Documented in Internationalization and Translation Remarks. wwwroot-src/src/pages/ — one file per route, and page size is a poor guide to importance: the General Setup page is small because it delegates almost everything to the Control Tree dock and the equipment canvas, while the File Explorer page is a thin wrapper around a large shared component. wwwroot-src/src/utils/, wwwroot-src/src/directives/, wwwroot-src/src/css/ — small and mostly presentational. Two severity scales exist and must not be conflated: wwwroot-src/src/utils/messageSeverity.ts maps the engine's diagnostic scale, while the footer's routine severity is a separate, shorter toast scale. See Also Anatomy by Source Directory — the other two source trees, and how this layer is meant to be entered Web Service Backend Source Tree — the process that serves this application and answers its REST and hub traffic"
},
"anatomy/conventions/dictionary-service-pattern.html": {
"href": "anatomy/conventions/dictionary-service-pattern.html",
@@ -22,7 +22,7 @@
"anatomy/conventions/gui-file-path-assignment.html": {
"href": "anatomy/conventions/gui-file-path-assignment.html",
"title": "GUI File Path Assignment | HiAPI-C# 2025",
- "summary": "GUI File Path Assignment See the remarks of MakeXmlSource(string, string, bool) to know the design pattern of file path treatment. if the assigned file path is descendent of the configuration directory, it is straight forward that set the baseDirectory to the configuration directory and apply relative path to relFile; if not, set baseDirectory to null and set relFile to absolute path. GUI that needs to assign file generally requires a code-behind BaseDirectory property as assistent model. The property is assigned by the parent model from the parent GUI. In most cases, the first BaseDirectory is the project directory if the project has assigned (created or loaded). Portability To maintain For the portability of project or the other folder-based unit, if the sub-item is loaded by absolute path outside the folder-based unit directory, redirect the saving path to the folder-based unit directory, i.e. the SubItemFile below. Note You have no need to do an additional action to create a duplicate in the folder-based unit directory. Since the file-writing pattern of MakeXmlSource(string, string, bool) create files when user call to save. In other perspective, if user does not call to save, the local duplicate should be created. The design pattern is usually saw in the HiAPI program, a object contains the properties: object SubItem; string SubItemFile; Then you should keep the Protability. File Path of Load Button and Save Button The genneral convention of the File Path of Load and Save is different by the single-user desktop application and web page application. Tip Always preserve an empty filter ( * . * ) for the browser. Single-User Desktop Application The default directory of the Save/Load button are generally: System Default Directory or Project Directory (default, if not explicitly indicated) The initial directory is the project directory. Resource Directory The path always point to /Resource/ directory. The button label has to explicitly show ‘Load Resource’. The kinds of buttons are not exclusive, they can be existed on the same tool bar. If the selected file path is under the project directory, apply the relative path from the project, i.e. baseDirectory is project directory and relFile is the relative path. Web Page Application The default directory of the Save/Load button are generally: Admin Directory Project Directory Resource Directory The Resource Directory and Project Directory are generally under the Admin Directory. And the admin directory is generally set in the appsettings.json file. Typical Action if exhibitionOnly false On IMakeXmlSource.MakeXmlSource(string, string, bool) with exhibitionOnly false, the argument (baseDirectory and relFile) should be the same from object's host (if exist) XML output function."
+ "summary": "GUI File Path Assignment See the remarks of MakeXmlSource(string, string, bool) to know the design pattern of file path treatment. if the assigned file path is descendent of the configuration directory, it is straight forward that set the baseDirectory to the configuration directory and apply relative path to relFile; if not, set baseDirectory to null and set relFile to absolute path. GUI that needs to assign file generally requires a code-behind BaseDirectory property as assistent model. The property is assigned by the parent model from the parent GUI. In most cases, the first BaseDirectory is the project directory if the project has assigned (created or loaded). Portability To maintain For the portability of project or the other folder-based unit, if the sub-item is loaded by absolute path outside the folder-based unit directory, redirect the saving path to the folder-based unit directory, i.e. the SubItemFile below. Note You have no need to do an additional action to create a duplicate in the folder-based unit directory. Since the file-writing pattern of MakeXmlSource(string, string, bool) create files when user call to save. In other perspective, if user does not call to save, the local duplicate should be created. The design pattern is usually saw in the HiAPI program, a object contains the properties: object SubItem; string SubItemFile; Then you should keep the Protability. File Path of Load Button and Save Button A Load or Save button opens the browser at one of three roots: Admin Directory Project Directory Resource Directory The Resource Directory and Project Directory are generally under the Admin Directory, and the admin directory is generally set in the appsettings.json file. The kinds of button are not exclusive — several may sit on the same tool bar — and a button that opens the Resource root has to say so in its label. If the selected file path is under the project directory, apply the relative path from the project: baseDirectory is the project directory and relFile is the relative path. Tip Always preserve an empty filter ( * . * ) for the browser. Typical Action if exhibitionOnly false On IMakeXmlSource.MakeXmlSource(string, string, bool) with exhibitionOnly false, the argument (baseDirectory and relFile) should be the same from object's host (if exist) XML output function."
},
"anatomy/conventions/index.html": {
"href": "anatomy/conventions/index.html",
@@ -42,7 +42,7 @@
"anatomy/conventions/translation-remarks.html": {
"href": "anatomy/conventions/translation-remarks.html",
"title": "Translation Remarks | HiAPI-C# 2025",
- "summary": "Translation Remarks Terminology is a contract: one concept keeps one word on every screen and in every locale. Three locales ship together — en, zh-Hant and zh-Hans — and the English bundle is the schema the Chinese bundles are typed against, so a key missing from a Chinese locale is a build error. The readings below are the ones the zh-Hant bundle ships. Tool House and Mechanism Terms Anchor 錨點 Tool 刀具 Cutter 刀具本體 Insert-End Cutter 刀片式刀具本體 Holder 刀把 Cylindroid Holder 柱狀刀把 Freeform Holder 任意形刀把 Shank 刀柄 Fixture 夾具 Milling Cutter 銑刀 Freeform Remover 任意移除工具 Flute 刀刃 Flute Profile 刃包絡形 Flute Contours 刃雕 Baseline Contour 基準刃雕 Side Contour 側向刃雕 Bottom Contour 底部刃雕 Upper Beam 夾持柱 Integral Mode 刀頭形式 Solid End 一體式 Insert End 刀片式 Preset 預設 Datum Preset 基準點預設 General Config 一般組態 — the mission tree's label for the presetting command kind Meshed Geometry 網格幾何 Machining Resolution 加工解析度 Words That Carry More Than One Sense Contour is the sharpest case: in the cutter namespace it is 刃雕 (Flute Contours 刃雕, Baseline Contour 基準刃雕), and in the spindle-capability namespace it is 等值線 (Power Contours 功率等值線, Torque Contours 扭矩等值線). Each sense keeps its own entry rather than one compromise word. Fluting is a cutter's whole set of flute contours — one shared baseline or one per flute — and translates as 刃雕構型: Uniform Fluting 對稱刃雕構型, Free Fluting 自由刃雕構型. Program is the UI-layer word and does translate: 程式 in zh-Hant, 程序 in zh-Hans. Control in the frontend names the Control Tree UI, 控制樹, and never takes 程式. Never Translate HiNC · hincproj · SoftNc · MachiningStep · brand names (Fanuc, Heidenhain, Mazak, Siemens, Syntec) · NC codes (G54, M128, CYCLE800, TRAORI, RTCP, TCPM) · file extensions and MIME-ish strings (STL, *.hincproj) · units (mm, rpm, mm/min, N, Nm, kW, KB, MB, GB) · the keyboard shortcuts embedded in tooltip sentences · route names, enum keys, localStorage keys and series identifiers — anything a machine compares. Language self-names (English, 简体中文, 繁體中文) stay in their own language in every locale. The full list lives with the bundles, in the i18n folder's README. Terms Carried by the Desktop Client Three milling-cutter surfaces exist only on the WPF client, and their terms belong to the same contract, so none of the words is reused elsewhere: Insert-Cutter 刀片 — a tab on Mech/ToolHouse/MillingCutterPanel.xaml Flute-Inner-Beam 刃中芯 — the tab served by Mech/ToolHouse/FluteInnerBeamPanel.xaml Cutter Integral Mode 刀頭形式 — a labelled tab there as well; the web application carries the same choice as the integralMode datum, which decides whether the Tool House material section offers a separate shank material, and shows no label of its own Source Code Path See HiNC App Anatomy for git repository links. wwwroot-src/src/i18n/en/toolhouse.ts and wwwroot-src/src/i18n/zh-Hant/toolhouse.ts — the Tool House control-tree node names and editor labels: Cutter, Holder, Flute Profile, Flute Contours, Upper Beam, and the cutter and holder types. wwwroot-src/src/i18n/en/mech.ts and wwwroot-src/src/i18n/zh-Hant/mech.ts — the General Setup rendering flags and the anchor labels. wwwroot-src/src/i18n/en/tree.ts and wwwroot-src/src/i18n/zh-Hant/tree.ts — the shared control-tree node names and the mission command kinds. wwwroot-src/src/i18n/zh-Hant/mission.ts — the PreSetting command fields, including Machining Resolution and the meshed-geometry file picker. wwwroot-src/src/i18n/zh-Hant/controller.ts and wwwroot-src/src/i18n/zh-Hant/softNc.ts — the Datum Preset tab, its table, and the runner's datum-preset row. wwwroot-src/src/i18n/zh-Hant/execution.ts — the Execution rendering flags, where Meshed Geometry and Fixture appear together. wwwroot-src/src/i18n/index.ts — createI18n(), applyLocale() and SUPPORTED_LOCALES, the only place a locale switch happens. wwwroot-src/src/i18n/schema.ts — the English bundle as the schema that types the Chinese ones. wwwroot-src/src/i18n/glossary.yaml — generated data, never imported by the application: the harvested legacy corpus with an adjudicated head term per concept, used to settle a reading before it is written into a bundle. See Also Language Selection SubMenu — the sub-menu that switches the locale these terms are written for Internationalization — the bundle layout these terms are written into, and the lint that holds them to it"
+ "summary": "Translation Remarks Terminology is a contract: one concept keeps one word on every screen and in every locale. Three locales ship together — en, zh-Hant and zh-Hans — and the English bundle is the schema the Chinese bundles are typed against, so a key missing from a Chinese locale is a build error. The readings below are the ones the zh-Hant bundle ships. Tool House and Mechanism Terms Anchor 錨點 Tool 刀具 Cutter 刀具本體 Insert-End Cutter 刀片式刀具本體 Holder 刀把 Cylindroid Holder 柱狀刀把 Freeform Holder 任意形刀把 Shank 刀柄 Fixture 夾具 Milling Cutter 銑刀 Freeform Remover 任意移除工具 Flute 刀刃 Flute Profile 刃包絡形 Flute Contours 刃雕 Baseline Contour 基準刃雕 Side Contour 側向刃雕 Bottom Contour 底部刃雕 Upper Beam 夾持柱 Integral Mode 刀頭形式 Solid End 一體式 Insert End 刀片式 Preset 預設 Datum Preset 基準點預設 General Config 一般組態 — the mission tree's label for the presetting command kind Meshed Geometry 網格幾何 Machining Resolution 加工解析度 Words That Carry More Than One Sense Contour is the sharpest case: in the cutter namespace it is 刃雕 (Flute Contours 刃雕, Baseline Contour 基準刃雕), and in the spindle-capability namespace it is 等值線 (Power Contours 功率等值線, Torque Contours 扭矩等值線). Each sense keeps its own entry rather than one compromise word. Fluting is a cutter's whole set of flute contours — one shared baseline or one per flute — and translates as 刃雕構型: Uniform Fluting 對稱刃雕構型, Free Fluting 自由刃雕構型. Program is the UI-layer word and does translate: 程式 in zh-Hant, 程序 in zh-Hans. Control in the frontend names the Control Tree UI, 控制樹, and never takes 程式. Never Translate HiNC · hincproj · SoftNc · MachiningStep · brand names (Fanuc, Heidenhain, Mazak, Siemens, Syntec) · NC codes (G54, M128, CYCLE800, TRAORI, RTCP, TCPM) · file extensions and MIME-ish strings (STL, *.hincproj) · units (mm, rpm, mm/min, N, Nm, kW, KB, MB, GB) · the keyboard shortcuts embedded in tooltip sentences · route names, enum keys, localStorage keys and series identifiers — anything a machine compares. Language self-names (English, 简体中文, 繁體中文) stay in their own language in every locale. The full list lives with the bundles, in the i18n folder's README. A Choice That Carries No Label The cutter's integral mode reaches the web application as the integralMode datum rather than as a named field: it decides whether the Tool House material section offers a separate shank material, and shows no label of its own. A term with no visible string is still part of the contract — it has to be settled before anything renders a value derived from it. Source Code Path See HiNC App Anatomy for git repository links. wwwroot-src/src/i18n/en/toolhouse.ts and wwwroot-src/src/i18n/zh-Hant/toolhouse.ts — the Tool House control-tree node names and editor labels: Cutter, Holder, Flute Profile, Flute Contours, Upper Beam, and the cutter and holder types. wwwroot-src/src/i18n/en/mech.ts and wwwroot-src/src/i18n/zh-Hant/mech.ts — the General Setup rendering flags and the anchor labels. wwwroot-src/src/i18n/en/tree.ts and wwwroot-src/src/i18n/zh-Hant/tree.ts — the shared control-tree node names and the mission command kinds. wwwroot-src/src/i18n/zh-Hant/mission.ts — the PreSetting command fields, including Machining Resolution and the meshed-geometry file picker. wwwroot-src/src/i18n/zh-Hant/controller.ts and wwwroot-src/src/i18n/zh-Hant/softNc.ts — the Datum Preset tab, its table, and the runner's datum-preset row. wwwroot-src/src/i18n/zh-Hant/execution.ts — the Execution rendering flags, where Meshed Geometry and Fixture appear together. wwwroot-src/src/i18n/index.ts — createI18n(), applyLocale() and SUPPORTED_LOCALES, the only place a locale switch happens. wwwroot-src/src/i18n/schema.ts — the English bundle as the schema that types the Chinese ones. wwwroot-src/src/i18n/glossary.yaml — generated data, never imported by the application: the harvested legacy corpus with an adjudicated head term per concept, used to settle a reading before it is written into a bundle. See Also Language Selection SubMenu — the sub-menu that switches the locale these terms are written for Internationalization — the bundle layout these terms are written into, and the lint that holds them to it"
},
"anatomy/conventions/webapi-hub-cleanup-pattern.html": {
"href": "anatomy/conventions/webapi-hub-cleanup-pattern.html",
@@ -62,12 +62,12 @@
"anatomy/execution/execution-tool-bar.html": {
"href": "anatomy/execution/execution-tool-bar.html",
"title": "Execution Tool Bar | HiAPI-C# 2025",
- "summary": "Execution Tool Bar The transport controls for the run. In the web application they sit atop the Execution Page's primary editor panel, shown for the Execution root and every node under it, and this sole instance registers the F5–F8 shortcuts. Layout Execution Tool Bar Status Text Field Start Button (F5; Resume once the run is paused) Pause Button (F6) Run-One-Line Button (F7 — one NC line) Run-One-Step Button (F8 — one machining step) Stop Button Reset Button In the web application the status text moved out of the tool bar and onto the Execution tree item, which carries the run-state badge. The two single-advance buttons there share one skip_next icon and are separated by a letter drawn into the button's corner — L for the line button, S for the step button — rather than by colour; the tool-tips carry the key names. Behavior Both the webservice and the win-desktop application watch LocalProjectService events to track PacePlayer status changes. In the webservice, ExecutionStatusService subscribes to those events and broadcasts status changes over SignalR through ExecutionStatusHub. The win-desktop application subscribes to the same LocalProjectService events directly. The frequently used buttons carry hotkeys: Start / Resume, Pause, Run One Line and Run One Step. The app's tool-tips are the only place those key bindings are written down. The background color of the Status Text Field follows the status: Warning style — Running Secondary style — Paused, No Project Success style — Finished, Ready The action of Reset Button is async, so the UI stays responsive while the session unwinds; the button shows a busy state for the duration, and the flag behind it is shared with the keyboard path so the two agree. Enable Rules Every button is disabled unless a project is loaded and the page has finished initializing its rendering connection — the web transport reads that readiness from the Execution page, so a dropped canvas connection greys the whole bar with a project still open. On top of that gate each button follows the status: Button Enabled for status Start / Resume Ready, Paused Pause Running Run-One-Line, Run-One-Step Ready, Paused Stop Running, Paused, Finished Reset any, while no reset is in flight Neither single-advance button is enabled while the run is Running — stepping is a Ready-or-Paused operation, so a moving run has to be paused before it can be stepped. The F5–F8 handler applies the same predicates before acting, and declines in two more cases: when the event target is an input, a textarea or a contenteditable element, and when the hosting page is deactivated. The second matters because the shell keep-alives the routed pages, so leaving the Execution route deactivates rather than unmounts this component; without the detach, F5 elsewhere in the app would drive the transport instead of reloading the browser. Every declined key falls through to the browser. Tip Use icons rather than text on the tool-bar buttons. Run One Line and Run One Step share an icon, so they need a second mark to tell them apart — the win-desktop application seasons the icon green and blue, the web application draws an L and an S in the button corner. Either works; the default colour is enough for the rest. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/execution/ExecutionToolBar.vue — the buttons. All state and handlers come from the shared useExecutionTransport composable, so the component is pure markup. Execution/ExecutionController.cs — POST /api/Execution/start | pause | resume | run-line | run-step | stop | reset, and GET /api/Execution/status. Execution/ExecutionStatusHub.cs + Execution/ExecutionStatusService.cs — the status broadcast. SignalR Implementation (Web Service Only) ExecutionStatusHub is mapped at /executionStatusHub and answers GetExecutionStatus(). ExecutionStatusService watches the PacePlayer events — IsRunningChangedEvent, IsLockedChangedEvent, IsFinishedChangedEvent and ResetedEvent — and broadcasts each change, so every connected client sees the same run state without polling. See Also Execution Page — the page these controls drive Starting and Stepping — the task these controls serve, with the enable rules read as a procedure"
+ "summary": "Execution Tool Bar The transport controls for the run. In the web application they sit atop the Execution Page's primary editor panel, shown for the Execution root and every node under it, and this sole instance registers the F5–F8 shortcuts. Layout Execution Tool Bar Status Text Field Start Button (F5; Resume once the run is paused) Pause Button (F6) Run-One-Line Button (F7 — one NC line) Run-One-Step Button (F8 — one machining step) Stop Button Reset Button In the web application the status text moved out of the tool bar and onto the Execution tree item, which carries the run-state badge. The two single-advance buttons there share one skip_next icon and are separated by a letter drawn into the button's corner — L for the line button, S for the step button — rather than by colour; the tool-tips carry the key names. Behavior The webservice watches LocalProjectService events to track PacePlayer status changes. In the webservice, ExecutionStatusService subscribes to those events and broadcasts status changes over SignalR through ExecutionStatusHub. The frequently used buttons carry hotkeys: Start / Resume, Pause, Run One Line and Run One Step. The app's tool-tips are the only place those key bindings are written down. The background color of the Status Text Field follows the status: Warning style — Running Secondary style — Paused, No Project Success style — Finished, Ready The action of Reset Button is async, so the UI stays responsive while the session unwinds; the button shows a busy state for the duration, and the flag behind it is shared with the keyboard path so the two agree. Enable Rules Every button is disabled unless a project is loaded and the page has finished initializing its rendering connection — the web transport reads that readiness from the Execution page, so a dropped canvas connection greys the whole bar with a project still open. On top of that gate each button follows the status: Button Enabled for status Start / Resume Ready, Paused Pause Running Run-One-Line, Run-One-Step Ready, Paused Stop Running, Paused, Finished Reset any, while no reset is in flight Neither single-advance button is enabled while the run is Running — stepping is a Ready-or-Paused operation, so a moving run has to be paused before it can be stepped. The F5–F8 handler applies the same predicates before acting, and declines in two more cases: when the event target is an input, a textarea or a contenteditable element, and when the hosting page is deactivated. The second matters because the shell keep-alives the routed pages, so leaving the Execution route deactivates rather than unmounts this component; without the detach, F5 elsewhere in the app would drive the transport instead of reloading the browser. Every declined key falls through to the browser. Tip Use icons rather than text on the tool-bar buttons. Run One Line and Run One Step share an icon, so they need a second mark to tell them apart — this bar draws an L and an S in the button corner. The default colour is enough for the rest. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/execution/ExecutionToolBar.vue — the buttons. All state and handlers come from the shared useExecutionTransport composable, so the component is pure markup. Execution/ExecutionController.cs — POST /api/Execution/start | pause | resume | run-line | run-step | stop | reset, and GET /api/Execution/status. Execution/ExecutionStatusHub.cs + Execution/ExecutionStatusService.cs — the status broadcast. SignalR Implementation (Web Service Only) ExecutionStatusHub is mapped at /executionStatusHub and answers GetExecutionStatus(). ExecutionStatusService watches the PacePlayer events — IsRunningChangedEvent, IsLockedChangedEvent, IsFinishedChangedEvent and ResetedEvent — and broadcasts each change, so every connected client sees the same run state without polling. See Also Execution Page — the page these controls drive Starting and Stepping — the task these controls serve, with the enable rules read as a procedure"
},
"anatomy/execution/graphic-cache-menu.html": {
"href": "anatomy/execution/graphic-cache-menu.html",
"title": "Graphic-Cache SubMenu | HiAPI-C# 2025",
- "summary": "Graphic-Cache SubMenu Shipped Surface The panel has no route and no Control-Tree node of its own. It is chrome on the Execution page (/execution): the canvas panel's expansion header carries the Meshed Geom ▾ dropdown — titled Workpiece rendering cache and geometry-diff settings — whose Graphic Cache row opens this panel in a nested menu. It hangs there because it acts on the workpiece meshed geometry's rendering cache, and its sibling row in the same dropdown is Diff Visual Radius. It is therefore only reachable while the Execution page's canvas column is shown. In the WPF application the same submenu lives on the Preference Menu Dropdown. The panel is self-contained: it takes no parent-supplied model. It holds local lower / upper / current values, loads them on mount, and commits each edit to GET/POST /api/preference/graphic-cache. UserService / UserConfig is the server-side model behind that endpoint. Layout Titled Graphic Cache (MB), with the caption “Memory budget for rendering cache. Lower & upper bound the slider.” Graphic-Cache SubMenu Lower numeric field (unit MB) Upper numeric field (unit MB) Current numeric field (unit MB) Slider Behavior There is no apply step and no Save button: each field posts its own value the moment it is committed — on blur, or on Enter — and the whole panel is loaded once when it is mounted. The Current field is bounded by the two limit fields, so a value below Lower or above Upper is refused with an inline message and never sent. The server clamps a submitted value into the limits regardless, and the panel re-applies the effective state that comes back, so the server's answer is always what ends up on screen. The slider is integer-valued and reflects Current in MB. Its range tracks Lower / Upper, clamped defensively so the minimum never exceeds the maximum. Releasing the slider commits the value. A failed write shows the message inline under the fields, raises a notification, and re-reads from the server so the panel never drifts from stored state. A write lands on the live user configuration, so it takes effect at once — GraphicCacheMb is a pass-through onto CubeTree.DispCacheMb. All three values are part of the user-config XML, so they reach disk with the next save of that config. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/preference/GraphicCacheMenu.vue — the panel itself: Lower / Upper / Current numeric fields plus the slider. Loads on mount, commits each edit to the REST endpoint, re-applies the server's clamped response, and reports failures inline plus a notification. wwwroot-src/src/components/execution/ExecutionExtendedToolBar.vue — where the entry hangs: the Meshed Geom ▾ dropdown on the Execution page canvas panel's expansion header, whose Graphic Cache row opens this panel in a nested menu. wwwroot-src/src/components/workpiece/WorkpieceDiffRadiusMenu.vue — the sibling Diff Visual Radius row in the same dropdown. wwwroot-src/src/components/widgets/NumericInput.vue — the shared numeric field used for all three values. wwwroot-src/src/api/preference.ts — getGraphicCache / setGraphicCache over GET/POST /api/preference/graphic-cache, typed as { lowerLimit, upperLimit, value }. Environments/PreferenceController.cs — GetGraphicCacheSettings returns { success, lowerLimit, upperLimit, value }; UpdateGraphicCacheSettings takes the same three as nullable fields, clamps value into the limits, writes the live UserConfig, and returns the effective state. Environments/UserConfig.cs — GraphicCacheLowerLimitMb (default 10) and GraphicCacheUpperLimitMb (default 1200) are plain stored values; GraphicCacheMb is a pass-through whose getter and setter are CubeTree.DispCacheMb. All three round-trip through the config XML. See Also Preference Menu Dropdown — the dropdown that hosts this entry in the WPF client"
+ "summary": "Graphic-Cache SubMenu Shipped Surface The panel has no route and no Control-Tree node of its own. It is chrome on the Execution page (/execution): the canvas panel's expansion header carries the Meshed Geom ▾ dropdown — titled Workpiece rendering cache and geometry-diff settings — whose Graphic Cache row opens this panel in a nested menu. It hangs there because it acts on the workpiece meshed geometry's rendering cache, and its sibling row in the same dropdown is Diff Visual Radius. It is therefore only reachable while the Execution page's canvas column is shown. The panel is self-contained: it takes no parent-supplied model. It holds local lower / upper / current values, loads them on mount, and commits each edit to GET/POST /api/preference/graphic-cache. UserService / UserConfig is the server-side model behind that endpoint. Layout Titled Graphic Cache (MB), with the caption “Memory budget for rendering cache. Lower & upper bound the slider.” Graphic-Cache SubMenu Lower numeric field (unit MB) Upper numeric field (unit MB) Current numeric field (unit MB) Slider Behavior There is no apply step and no Save button: each field posts its own value the moment it is committed — on blur, or on Enter — and the whole panel is loaded once when it is mounted. The Current field is bounded by the two limit fields, so a value below Lower or above Upper is refused with an inline message and never sent. The server clamps a submitted value into the limits regardless, and the panel re-applies the effective state that comes back, so the server's answer is always what ends up on screen. The slider is integer-valued and reflects Current in MB. Its range tracks Lower / Upper, clamped defensively so the minimum never exceeds the maximum. Releasing the slider commits the value. A failed write shows the message inline under the fields, raises a notification, and re-reads from the server so the panel never drifts from stored state. A write lands on the live user configuration, so it takes effect at once — GraphicCacheMb is a pass-through onto CubeTree.DispCacheMb. All three values are part of the user-config XML, so they reach disk with the next save of that config. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/preference/GraphicCacheMenu.vue — the panel itself: Lower / Upper / Current numeric fields plus the slider. Loads on mount, commits each edit to the REST endpoint, re-applies the server's clamped response, and reports failures inline plus a notification. wwwroot-src/src/components/execution/ExecutionExtendedToolBar.vue — where the entry hangs: the Meshed Geom ▾ dropdown on the Execution page canvas panel's expansion header, whose Graphic Cache row opens this panel in a nested menu. wwwroot-src/src/components/workpiece/WorkpieceDiffRadiusMenu.vue — the sibling Diff Visual Radius row in the same dropdown. wwwroot-src/src/components/widgets/NumericInput.vue — the shared numeric field used for all three values. wwwroot-src/src/api/preference.ts — getGraphicCache / setGraphicCache over GET/POST /api/preference/graphic-cache, typed as { lowerLimit, upperLimit, value }. Environments/PreferenceController.cs — GetGraphicCacheSettings returns { success, lowerLimit, upperLimit, value }; UpdateGraphicCacheSettings takes the same three as nullable fields, clamps value into the limits, writes the live UserConfig, and returns the effective state. Environments/UserConfig.cs — GraphicCacheLowerLimitMb (default 10) and GraphicCacheUpperLimitMb (default 1200) are plain stored values; GraphicCacheMb is a pass-through whose getter and setter are CubeTree.DispCacheMb. All three round-trip through the config XML. See Also Preference Menu Dropdown — the sibling entries of the same dropdown"
},
"anatomy/execution/index.html": {
"href": "anatomy/execution/index.html",
@@ -77,32 +77,32 @@
"anatomy/execution/mission/ListCommand-panel.html": {
"href": "anatomy/execution/mission/ListCommand-panel.html",
"title": "List Command Panel | HiAPI-C# 2025",
- "summary": "List Command Panel A ListCommand is the container command: an optional title plus a list of enable-wrapped commands. Running one walks CommandEntryList top-down and skips a disabled entry together with everything nested under it — the wrapper yields nothing while its flag is clear. The mission's own command is always a list, so the Mission branch root is a list, and every nested one is the same shape one level down. List is an ordinary catalog kind — category Flow — so a list is added the way any command is, and adding one grows a sub-tree: the node's children are its own entries, and its panel embeds the same entry-list editor the branch root uses, scoped to the nested list. This page covers what a list is, how its title reads, and what moving commands in and out of one costs. The entry-list editor itself — Add Command, the row actions, the three drag landings — is documented once, on Mission Root Panel. Key Models Primary: ListCommand — Title and CommandEntryList. Supporting: EnablingWrapper — one entry: Command plus IsEnabled. ITitleCommand — ListCommand implements it, and GetCommandTitle composes the label a row shows. PlayerCommand — the mission's command, a list. CommandCatalogAttribute and CommandCategory — what makes List addable, and the group it is offered under. The Panel of a List Entry Selecting a list command in the Control Tree opens, top to bottom: List Entry Panel Control Bar Up / Down / Duplicate / Delete — labelled buttons for the operations that rewrite the parent list. Delete asks for confirmation in a dialog naming the command. At the bar's left, a caption while the command is disabled: skipped during play, still editable. Title (optional) Input Embedded Entry-List Editor This list's own entries, scoped to the node's path. The Title input holds the raw title — empty when unset — while the label the row and the tree show is composed by the engine: List when the title is blank, List [title] when it is not. A titled list still says what it is. A whitespace-only title counts as unset and is never written into the project file, so it cannot come back as a changed title on the next load. Keystrokes debounce into one title save. The pending save is flushed before anything that shifts the entry paths — a structural operation, a duplicate, a selection change — and cancelled on delete and on unmount, so a late write cannot land on whichever command slid into the old path. Once it is saved the tree label refreshes in place rather than by rebuilding the branch, which would remount the open editor mid-edit. The root list is the one list without a title input: the branch root reads Mission. Enabling, and What a Disabled List Skips The enable switch is the checkbox on the command's own Control Tree item, not a control in the entry row. It decides only whether the command runs: while it is clear the row and the tree node dim, and the editor stays open and fully editable. Unticking a list dims its whole sub-tree — the dim rides ancestor propagation in the tree while each nested entry keeps its own flag, which is exactly what the run does: a disabled entry is skipped with everything under it. Paths A command node's key is its Mission API path — \"0\", \"1\", nested \"0.2\" for entry 2 inside the list at index 0. Every structural change re-mints them: deleting entry 2 slides the next command into path \"2\". Each branch build therefore stamps its nodes, so the editor panel remounts onto the new path instead of going on showing the command that used to live there. Moving Commands In and Out Into a list — drag a row onto the middle band of a list row; that row's outer quarters still reorder around it. Out of a list — drag onto the drop-out zone of a nested list's editor, which is visible only while a row inside that editor is being dragged. The entry lands right after the list command itself in the owning list. Both are the same reparent call. The server resolves the source list and the target list to object references before it mutates either, so the index shift the removal causes cannot misroute the insert, and it refuses to move a list into itself or into one of its own descendants. That guard compares identity rather than path-string prefixes, because \"02\", \"+2\" and \" 2\" all parse to index 2. Two more properties of a list follow from the same API: A new command lands at the end of the list it was added to, root or nested. Nothing is pinned; the order is entirely the user's, changed with the row's up / down buttons or by dragging. Duplicate is a deep copy. The entry is cloned through the same XML round-trip the project file uses, so a nested list copies with its whole sub-tree, and the clone lands right after the source. Dragging serves rearrangement only: a drag carrying text or files is ignored, because the row's drag handling returns as soon as the drag did not start on a row. To bring several program files in at once, open a Program File command's picker and pick them together — the first pick lands on that command and each further pick becomes another Program File command right after it, in pick order, inside the same list at any depth. Which Commands a List Can Hold The addable set is the server's command catalog: every engine command carrying [CommandCatalog], reflected into the picker Add Command opens, which searches by display label, kind key and alias. List is one of those commands, which is what makes nesting an ordinary act rather than a special case. The frontend contributes an icon per kind, and its own label where it has one; the server supplies the localized label otherwise, so a newly attributed engine command becomes addable with no frontend change. A command without that attribute stays loadable from a project file but is never offered for creation. General Config is the one such command with an editor of its own: it is the legacy settings bundle, so a project file storing one loads as the individual setting commands it stands for and saving never writes the bundle back — editable when a project still constructs one through the API, and absent from the catalog. Selecting an entry row selects that command's tree node, and the command's editor opens on that node — the kind's own panel when one exists, otherwise a generic editor built from the scalar fields the command declares. Selection is one row at a time: there is no multi-selection here, and every action acts on the row that carries it. Because the server composes every entry label, a command carrying no title of its own still reads as its localized display name. There is no second column inside this editor: the entry list is a single column in the tree's editor pane. The draggable vertical divider on screen belongs to the Execution page, between the left dock — the Control Tree over the editor panel — and the central area; a second divider inside that dock drags the height between the tree and the editor. The WPF Client's List Panel The WPF panel edits the root list only. It binds the project's player command as a list, its Add menu offers no List item, and its content switch has no List arm, so a nested list entry selected there renders the literal text “No editor available for ListCommand”. Nesting is a web surface. Two columns: a 400px entry column, a GridSplitter, and the selected command's content column, both columns floored at 300px. One toolbar over the list — Add, Remove, Move Up, Move Down — acting on the list selection. There is no duplicate. Add is a plain button that pops a fixed six-item context menu built in its click handler: “Pre-Setting Command”, “NC Opt Option Command”, “NC File Command”, “NC Code Command”, “Script Command” and “Post Execution Command”. The list box is extended-select. Remove takes every selected entry, prompting with a count when more than one is selected, and a drag can carry a whole selection; Move Up and Move Down stay disabled unless exactly one entry is selected. Each entry box carries a labelled Enable checkbox at its left, the command's title in bold, and a pin icon with a “Pin at beginning” / “Pin at end” label — shown on the first entry when it is a General Config command, and on the last when it is a Post-Execution command. Insertion works around the ends: a new entry lands before a trailing Post-Execution when that is the list's only one, and a General Config lands at the top unless the list already starts with one. A drag that would move a pinned entry — or drop another entry onto it — is refused, the guard testing that the entry is the only command of its kind and sits at that end. The Move Up / Move Down buttons are not covered by that guard. The content panel is greyed and made read-only while the selected entry's Enable box is clear. Files dropped from the file explorer onto the entry list create one enabled NC File command per file, taking a project-relative path when the file sits under the project directory. The entry label falls back to the raw class name for a command that composes no title of its own — GeomDiffCommand, OptimizeToFilesCommand, WriteStepFilesCommand and WriteShotFilesCommand. Source Code Path See HiNC App Anatomy for git repository links. Web Application wwwroot-src/src/components/controlTree/MissionCommandSlavePanel.vue — a list entry's panel: the control bar, the optional Title input with its debounce / flush / cancel discipline, the embedded entry-list editor of a list entry, and the bespoke-or-generic editor choice for every other kind. wwwroot-src/src/components/controlTree/MissionRootPanel.vue — the entry-list editor embedded here and serving the branch root: the rows and their actions, the three drag landings, and the drop-out zone shown only during a drag inside a nested editor. wwwroot-src/src/components/controlTree/missionItemTypes.ts — the child builders that recurse into a list's own entries, the per-kind editor override map, the kind and category icons, and the per-build stamp that forces the panel remount. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — which nodes show a checkbox, the dim that flows down a disabled command's sub-tree, the enable write, and the in-place label refresh after a title edit or a language switch. wwwroot-src/src/api/mission.ts — the typed wrapper over the Mission API and the path convention (root or empty = the root list, 0.2 = a nested entry). wwwroot-src/src/components/mission/GenericCommandPanel.vue — the editor a catalog kind gets when it ships no bespoke panel, built from the command's declared scalar fields. wwwroot-src/src/components/mission/NcFileCommandPanel.vue — the multi-pick file dialog: the first pick lands on the command, each further pick becomes another Program File command right after it. wwwroot-src/src/pages/ExecutionPage.vue — the page-level splitter between the left dock and the central area. wwwroot-src/src/i18n/en/tree.ts — the tree.mission.* strings: the kind names, the drop-out zone, the run-order hint, the disabled hint and the operation labels. Missions/MissionController.cs — the entry lifecycle: GET list-command/entries (recursive), POST list-command/entries and POST list-command/entries/{path} (append at the tail of the root or of a nested list), DELETE list-command/entries/{path}, POST list-command/entries/{path}/move, PUT list-command/reorder, POST list-command/entries/{path}/duplicate (the XML-round-trip deep clone), POST list-command/entries/{path}/reparent (drag-into-list and drop-out, with the self/descendant guard), PUT commands/{path}/listcommand for the title, and PUT commands/{path}/enabled for an entry's enable flag. GetCommandTitle composes every entry label the tree shows. Missions/MissionCommandCatalog.cs — reflects the [CommandCatalog] commands into the addable set and constructs the picked kind. HiAPI Engine HiNc/SessionCommands/ListCommand.cs — the container: the optional title, the entry list a run walks top-down, the whitespace-only-title-is-unset XML rule, the Flow catalog attribute, and the List / List [title] composition. HiNc/SessionCommands/EnablingWrapper.cs — the enable flag plus the wrapped command that together make one entry. HiNc/SessionCommands/ITitleCommand.cs — the interface a command implements to compose its own title from the caller's vocabulary. HiNc/SessionCommands/CommandCatalogAttribute.cs — CommandCategory and the attribute (category, order, kind key, aliases) that makes the addable set backend-owned. HiNc/SessionCommands/PreSettingCommand.cs — the General Config bundle: no catalog attribute, and a loaded project expands a stored one into the split setting commands. HiNc/MachiningProcs/MachiningProject.cs — declares the mission's command and keeps it a list. See Also Mission Root Panel — the entry-list editor this command embeds, documented once Building a Mission — the task this command serves: grouping a mission and moving entries between groups Mission — the rest of the command panels"
+ "summary": "List Command Panel A ListCommand is the container command: an optional title plus a list of enable-wrapped commands. Running one walks CommandEntryList top-down and skips a disabled entry together with everything nested under it — the wrapper yields nothing while its flag is clear. The mission's own command is always a list, so the Mission branch root is a list, and every nested one is the same shape one level down. List is an ordinary catalog kind — category Flow — so a list is added the way any command is, and adding one grows a sub-tree: the node's children are its own entries, and its panel embeds the same entry-list editor the branch root uses, scoped to the nested list. This page covers what a list is, how its title reads, and what moving commands in and out of one costs. The entry-list editor itself — Add Command, the row actions, the three drag landings — is documented once, on Mission Root Panel. Key Models Primary: ListCommand — Title and CommandEntryList. Supporting: EnablingWrapper — one entry: Command plus IsEnabled. ITitleCommand — ListCommand implements it, and GetCommandTitle composes the label a row shows. PlayerCommand — the mission's command, a list. CommandCatalogAttribute and CommandCategory — what makes List addable, and the group it is offered under. The Panel of a List Entry Selecting a list command in the Control Tree opens, top to bottom: List Entry Panel Control Bar Up / Down / Duplicate / Delete — labelled buttons for the operations that rewrite the parent list. Delete asks for confirmation in a dialog naming the command. At the bar's left, a caption while the command is disabled: skipped during play, still editable. Title (optional) Input Embedded Entry-List Editor This list's own entries, scoped to the node's path. The Title input holds the raw title — empty when unset — while the label the row and the tree show is composed by the engine: List when the title is blank, List [title] when it is not. A titled list still says what it is. A whitespace-only title counts as unset and is never written into the project file, so it cannot come back as a changed title on the next load. Keystrokes debounce into one title save. The pending save is flushed before anything that shifts the entry paths — a structural operation, a duplicate, a selection change — and cancelled on delete and on unmount, so a late write cannot land on whichever command slid into the old path. Once it is saved the tree label refreshes in place rather than by rebuilding the branch, which would remount the open editor mid-edit. The root list is the one list without a title input: the branch root reads Mission. Enabling, and What a Disabled List Skips The enable switch is the checkbox on the command's own Control Tree item, not a control in the entry row. It decides only whether the command runs: while it is clear the row and the tree node dim, and the editor stays open and fully editable. Unticking a list dims its whole sub-tree — the dim rides ancestor propagation in the tree while each nested entry keeps its own flag, which is exactly what the run does: a disabled entry is skipped with everything under it. Paths A command node's key is its Mission API path — \"0\", \"1\", nested \"0.2\" for entry 2 inside the list at index 0. Every structural change re-mints them: deleting entry 2 slides the next command into path \"2\". Each branch build therefore stamps its nodes, so the editor panel remounts onto the new path instead of going on showing the command that used to live there. Moving Commands In and Out Into a list — drag a row onto the middle band of a list row; that row's outer quarters still reorder around it. Out of a list — drag onto the drop-out zone of a nested list's editor, which is visible only while a row inside that editor is being dragged. The entry lands right after the list command itself in the owning list. Both are the same reparent call. The server resolves the source list and the target list to object references before it mutates either, so the index shift the removal causes cannot misroute the insert, and it refuses to move a list into itself or into one of its own descendants. That guard compares identity rather than path-string prefixes, because \"02\", \"+2\" and \" 2\" all parse to index 2. Two more properties of a list follow from the same API: A new command lands at the end of the list it was added to, root or nested. Nothing is pinned; the order is entirely the user's, changed with the row's up / down buttons or by dragging. Duplicate is a deep copy. The entry is cloned through the same XML round-trip the project file uses, so a nested list copies with its whole sub-tree, and the clone lands right after the source. Dragging serves rearrangement only: a drag carrying text or files is ignored, because the row's drag handling returns as soon as the drag did not start on a row. To bring several program files in at once, open a Program File command's picker and pick them together — the first pick lands on that command and each further pick becomes another Program File command right after it, in pick order, inside the same list at any depth. Which Commands a List Can Hold The addable set is the server's command catalog: every engine command carrying [CommandCatalog], reflected into the picker Add Command opens, which searches by display label, kind key and alias. List is one of those commands, which is what makes nesting an ordinary act rather than a special case. The frontend contributes an icon per kind, and its own label where it has one; the server supplies the localized label otherwise, so a newly attributed engine command becomes addable with no frontend change. A command without that attribute stays loadable from a project file but is never offered for creation. General Config is the one such command with an editor of its own: it is the legacy settings bundle, so a project file storing one loads as the individual setting commands it stands for and saving never writes the bundle back — editable when a project still constructs one through the API, and absent from the catalog. Selecting an entry row selects that command's tree node, and the command's editor opens on that node — the kind's own panel when one exists, otherwise a generic editor built from the scalar fields the command declares. Selection is one row at a time: there is no multi-selection here, and every action acts on the row that carries it. Because the server composes every entry label, a command carrying no title of its own still reads as its localized display name. There is no second column inside this editor: the entry list is a single column in the tree's editor pane. The draggable vertical divider on screen belongs to the Execution page, between the left dock — the Control Tree over the editor panel — and the central area; a second divider inside that dock drags the height between the tree and the editor. Source Code Path See HiNC App Anatomy for git repository links. Web Application wwwroot-src/src/components/controlTree/MissionCommandSlavePanel.vue — a list entry's panel: the control bar, the optional Title input with its debounce / flush / cancel discipline, the embedded entry-list editor of a list entry, and the bespoke-or-generic editor choice for every other kind. wwwroot-src/src/components/controlTree/MissionRootPanel.vue — the entry-list editor embedded here and serving the branch root: the rows and their actions, the three drag landings, and the drop-out zone shown only during a drag inside a nested editor. wwwroot-src/src/components/controlTree/missionItemTypes.ts — the child builders that recurse into a list's own entries, the per-kind editor override map, the kind and category icons, and the per-build stamp that forces the panel remount. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — which nodes show a checkbox, the dim that flows down a disabled command's sub-tree, the enable write, and the in-place label refresh after a title edit or a language switch. wwwroot-src/src/api/mission.ts — the typed wrapper over the Mission API and the path convention (root or empty = the root list, 0.2 = a nested entry). wwwroot-src/src/components/mission/GenericCommandPanel.vue — the editor a catalog kind gets when it ships no bespoke panel, built from the command's declared scalar fields. wwwroot-src/src/components/mission/NcFileCommandPanel.vue — the multi-pick file dialog: the first pick lands on the command, each further pick becomes another Program File command right after it. wwwroot-src/src/pages/ExecutionPage.vue — the page-level splitter between the left dock and the central area. wwwroot-src/src/i18n/en/tree.ts — the tree.mission.* strings: the kind names, the drop-out zone, the run-order hint, the disabled hint and the operation labels. Missions/MissionController.cs — the entry lifecycle: GET list-command/entries (recursive), POST list-command/entries and POST list-command/entries/{path} (append at the tail of the root or of a nested list), DELETE list-command/entries/{path}, POST list-command/entries/{path}/move, PUT list-command/reorder, POST list-command/entries/{path}/duplicate (the XML-round-trip deep clone), POST list-command/entries/{path}/reparent (drag-into-list and drop-out, with the self/descendant guard), PUT commands/{path}/listcommand for the title, and PUT commands/{path}/enabled for an entry's enable flag. GetCommandTitle composes every entry label the tree shows. Missions/MissionCommandCatalog.cs — reflects the [CommandCatalog] commands into the addable set and constructs the picked kind. HiAPI Engine HiNc/SessionCommands/ListCommand.cs — the container: the optional title, the entry list a run walks top-down, the whitespace-only-title-is-unset XML rule, the Flow catalog attribute, and the List / List [title] composition. HiNc/SessionCommands/EnablingWrapper.cs — the enable flag plus the wrapped command that together make one entry. HiNc/SessionCommands/ITitleCommand.cs — the interface a command implements to compose its own title from the caller's vocabulary. HiNc/SessionCommands/CommandCatalogAttribute.cs — CommandCategory and the attribute (category, order, kind key, aliases) that makes the addable set backend-owned. HiNc/SessionCommands/PreSettingCommand.cs — the General Config bundle: no catalog attribute, and a loaded project expands a stored one into the split setting commands. HiNc/MachiningProcs/MachiningProject.cs — declares the mission's command and keeps it a list. See Also Mission Root Panel — the entry-list editor this command embeds, documented once Building a Mission — the task this command serves: grouping a mission and moving entries between groups Mission — the rest of the command panels"
},
"anatomy/execution/mission/NcCodeCommand-panel.html": {
"href": "anatomy/execution/mission/NcCodeCommand-panel.html",
"title": "NcCodeCommand Panel | HiAPI-C# 2025",
- "summary": "NcCodeCommand Panel The key model is NcCodeCommand. The command carries two values: NcText, the NC program itself, and Title, the name that program runs under. Both are written into the project file — the command emits a title element and an NC-text element, and the project nests the whole command list into its own XML — so the program travels with the project instead of existing as a file beside it. That is the whole difference from Program File, which stores a path and leaves the program on disk. A mission can therefore carry a short program without producing an artifact of its own. Title is not decoration. Run passes it to RunNc as the program name the run log shows, which is why the model defaults it to the command's own name, NC Code, rather than to an empty string. It is also the detail the mission row brackets: the row reads NC Code while the title is empty or still that default, and NC Code [title] once it says something else. The panel renders on the command's own node in the Mission branch of the Execution page's Control Tree, below the move / duplicate / delete control bar. A single-purpose kind like this one embeds its whole editor on that node rather than growing section child nodes. Layout NcCodeCommand Panel Title Field The model is Title. Labelled \"Title (optional)\". A newly added command arrives with the model's default name, NC Code, already in the field; renaming it renames the program in the run log and in the mission row. NC Code Editor Area The model is NcText. A plain monospace text area: on the web an 18-row field with a 360 px floor, on WPF a Consolas text box in an NC Code group box that takes the panel's remaining height. No line-number gutter and no syntax highlighting on either client. The rich editor in this folder is the Script command's — that command ships CodeMirror with a C# grammar, this one ships a text area. Stats and Actions Row (web) Line count and character count, both recomputed as the text changes. Trim Blank Lines Button — trims every line and drops the ones left empty, then saves at once. Clear Button — confirms in a dialog before emptying the NC text. Both buttons stay disabled while the code is empty. Saving Typing in either field schedules one save 400 ms after the last keystroke, so a burst of typing costs one request instead of one per character. Trim Blank Lines and Clear save immediately rather than through that timer. The write is a single patch endpoint carrying the NC text and the title. Each field is applied only when the body actually carries it, which is why the client sends the field it changed and a null for the one it did not. NC text is not validated while it is edited: there is no parse at edit time and no error surface on the panel — the server stores whatever string arrives. Errors surface when the mission plays the text. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/NcCodeCommandPanel.vue — this panel: the Title input, the 18-row monospace text area, the 400 ms debounced saves, the live line and character stats, Trim Blank Lines, and Clear behind a confirm dialog. wwwroot-src/src/components/controlTree/missionItemTypes.ts — maps the nccode kind to this panel, and states the rule it belongs to: a single-purpose kind embeds its whole editor on the command node. wwwroot-src/src/api/mission.ts — loadNcCode and setNcCode, and the command shape the panel edits (NC code plus title). wwwroot-src/src/i18n/en/mission.ts — the panel's wording: the NC Code label, the character count, Trim Blank Lines, and the line count it shares with the other panels. wwwroot-src/src/i18n/en/dialog.ts — the Clear confirmation's title and message. Missions/MissionController.cs — the single patch PUT for this command, whose NC-code and title fields are each applied when the body carries them, and the command-snapshot arm that returns both back to the panel. HiAPI Engine HiNc/SessionCommands/NcCodeCommand.cs — the model: NcText, Title defaulting to the command's own display name, the Program-category catalog registration, the XML round-trip that puts the NC text into the project file, Run handing text and title to the session shell, and the row-label rule that shows the bare name while the title is unset or still the default. HiNc/MachiningProcs/SessionShell.cs — RunNc takes the NC text plus an alternative file name, and that name is the title this command supplies for the log. HiNc/MachiningProcs/MachiningProject.cs — nests the command list into the project XML, which is how this command's NC text persists with the project. See Also NcFileCommand Panel — the other Program command: a path to a file instead of text stored in the project Script Command Panel — the rich editor this folder does have, and why this command ships a plain text area instead Playing a Program — the task these two commands serve Mission — the rest of the command panels"
+ "summary": "NcCodeCommand Panel The key model is NcCodeCommand. The command carries two values: NcText, the NC program itself, and Title, the name that program runs under. Both are written into the project file — the command emits a title element and an NC-text element, and the project nests the whole command list into its own XML — so the program travels with the project instead of existing as a file beside it. That is the whole difference from Program File, which stores a path and leaves the program on disk. A mission can therefore carry a short program without producing an artifact of its own. Title is not decoration. Run passes it to RunNc as the program name the run log shows, which is why the model defaults it to the command's own name, NC Code, rather than to an empty string. It is also the detail the mission row brackets: the row reads NC Code while the title is empty or still that default, and NC Code [title] once it says something else. The panel renders on the command's own node in the Mission branch of the Execution page's Control Tree, below the move / duplicate / delete control bar. A single-purpose kind like this one embeds its whole editor on that node rather than growing section child nodes. Layout NcCodeCommand Panel Title Field The model is Title. Labelled \"Title (optional)\". A newly added command arrives with the model's default name, NC Code, already in the field; renaming it renames the program in the run log and in the mission row. NC Code Editor Area The model is NcText. A plain monospace text area: an 18-row field with a 360 px floor. No line-number gutter and no syntax highlighting. The rich editor in this folder is the Script command's — that command ships CodeMirror with a C# grammar, this one ships a text area. Stats and Actions Row (web) Line count and character count, both recomputed as the text changes. Trim Blank Lines Button — trims every line and drops the ones left empty, then saves at once. Clear Button — confirms in a dialog before emptying the NC text. Both buttons stay disabled while the code is empty. Saving Typing in either field schedules one save 400 ms after the last keystroke, so a burst of typing costs one request instead of one per character. Trim Blank Lines and Clear save immediately rather than through that timer. The write is a single patch endpoint carrying the NC text and the title. Each field is applied only when the body actually carries it, which is why the client sends the field it changed and a null for the one it did not. NC text is not validated while it is edited: there is no parse at edit time and no error surface on the panel — the server stores whatever string arrives. Errors surface when the mission plays the text. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/NcCodeCommandPanel.vue — this panel: the Title input, the 18-row monospace text area, the 400 ms debounced saves, the live line and character stats, Trim Blank Lines, and Clear behind a confirm dialog. wwwroot-src/src/components/controlTree/missionItemTypes.ts — maps the nccode kind to this panel, and states the rule it belongs to: a single-purpose kind embeds its whole editor on the command node. wwwroot-src/src/api/mission.ts — loadNcCode and setNcCode, and the command shape the panel edits (NC code plus title). wwwroot-src/src/i18n/en/mission.ts — the panel's wording: the NC Code label, the character count, Trim Blank Lines, and the line count it shares with the other panels. wwwroot-src/src/i18n/en/dialog.ts — the Clear confirmation's title and message. Missions/MissionController.cs — the single patch PUT for this command, whose NC-code and title fields are each applied when the body carries them, and the command-snapshot arm that returns both back to the panel. HiAPI Engine HiNc/SessionCommands/NcCodeCommand.cs — the model: NcText, Title defaulting to the command's own display name, the Program-category catalog registration, the XML round-trip that puts the NC text into the project file, Run handing text and title to the session shell, and the row-label rule that shows the bare name while the title is unset or still the default. HiNc/MachiningProcs/SessionShell.cs — RunNc takes the NC text plus an alternative file name, and that name is the title this command supplies for the log. HiNc/MachiningProcs/MachiningProject.cs — nests the command list into the project XML, which is how this command's NC text persists with the project. See Also NcFileCommand Panel — the other Program command: a path to a file instead of text stored in the project Script Command Panel — the rich editor this folder does have, and why this command ships a plain text area instead Playing a Program — the task these two commands serve Mission — the rest of the command panels"
},
"anatomy/execution/mission/NcFileCommand-panel.html": {
"href": "anatomy/execution/mission/NcFileCommand-panel.html",
"title": "NcFileCommand Panel (Program File) | HiAPI-C# 2025",
- "summary": "NcFileCommand Panel (Program File) The key model is NcFileCommand. The command carries exactly two values: NcFile, the path of the program to play, and NcKind, the runner that plays it. The program text stays a file on disk — the project stores the path and nothing else, which is what separates this command from NC Code, whose text is serialized into the project itself. NcFile is normally a path relative to the project folder — that is what the browse dialog yields — and an absolute path on the server is accepted just as well. No base directory is stored with the command: at play time RunNcFile hands the stored path together with the project's own base directory to the local project service, and that is where a relative path acquires its root. The WPF panel's BaseDirectory is the code-behind assistant property the Load Pattern asks a file-assigning GUI to carry, assigned to the panel by its parent — a panel member, not a model member. The panel renders on the command's own node in the Mission branch of the Execution page's Control Tree, below the move / duplicate / delete control bar. This command has no title of its own, so the row and tree label read Program File [path], the path being the detail the label brackets. Note The GUI labels this command “Program File”: it plays NC, CL (CLSF) and CSV files — the runner is picked by NcKind, and Auto reads it off the extension (DetectByPath: .cl, .cls and .clsf play as CL, .csv as CSV, and every other extension as brand NC). Layout NcFileCommand Panel Head Line Program File Path Field The model is NcFile. Its hint names both accepted forms: an absolute path on the server, or a path relative to the project folder. Every keystroke saves the path. Leaving the field or pressing Enter additionally refreshes the file-info banner. The web field flexes to fill the row beside the Browse button at any panel width; the WPF field is a fixed 200 px column carrying its own label. Browse Button Opens the shared file-explorer dialog — see Browsing for a Program. Play As Select The model is NcKind. Four choices: Auto (by extension), Brand NC, CL (CLSF) and CSV. The hint restates what Auto detects, so the runner can be pinned when the extension would route the file elsewhere. This control is the web client's. The WPF panel ships no kind control, so a project edited there keeps the kind it already holds — Auto until something else sets it. File Info Banner Appears once the path field is non-empty. Every fact in it is read on the server. Found: a green banner stating the file size, its modified stamp and its line count, with a Preview button in the banner's action slot. Missing: an orange banner saying the file is not found on the server, and no Preview button. Preview Dialog Read-only. The server returns the file's first 100 lines and the dialog shows them in a monospace block that scrolls within 60% of the viewport height, inside a card capped at 80%. An empty file previews as \"(empty)\". Browsing for a Program Browse opens the shared server-side file explorer dialog. File reads happen on the server; the browser never uploads file bytes. The Load Pattern's general web convention offers the Admin, Project and Resource roots. This picker narrows to one: it opens on the project directory and allows no other root, so a pick always yields a project-relative path. A file outside the project is reached by typing its absolute path into the path field, which the server accepts. The dialog carries four filter groups rather than one catch-all: NC Files — .nc, .anc, .tap, .eia, .mpf, .spf, .cnc, .ptp, .h. The open set: brand controller extensions, of which these are the common ones rather than all of them. CL Files — .cl, .cls, .clsf. CSV Files — .csv. All Files — an empty extension list, which is the empty filter the Load Pattern asks every browser to preserve. It is the backstop for a brand extension the NC group does not name. CL and CSV are split out because they are closed extension sets: those are exactly the extensions Auto routes to the CL and CSV runners, and everything else falls through to brand NC. The WPF Browse button opens an OpenFileDialog with the panel's file-filter resource, starting at the project directory or at the current file's own directory. A pick under the project directory is stored as a relative path, and a pick outside it as an absolute one. Multi-Pick Fan-Out The dialog is multi-select, and this is the one command editor that grows the mission. The first picked file lands on this command. Each further pick becomes a new Program File command, added to the list this command sits in and moved into place directly after it, in pick order — the same list, so a command inside a nested list fans out inside that nested list. The panel then reports a structure change, which rebuilds the owning list's branch around the new rows and leaves the selection on this command. Where the Program Text Is Edited The two clients part company here, and the command is the same either way: it stores a path. Web — the panel does not edit the file. It assigns the path, picks the runner, reports what the server knows about the file, and previews its first 100 lines read-only. Nothing in the browser writes NC bytes back; the two file endpoints this panel calls are both reads. WPF — the panel opens the file. A non-text file, or one the panel cannot find, disables the editor and states why in the Head Message Place above it. A text file within 20000 lines opens for editing, with its line count in the group-box header; a longer one shows its first 20000 lines read-only and warns in the Head Message Place. Two seconds after the last keystroke the editor writes the file back, and reports the save in that same message place. The editor is AvalonEdit with line numbers where that assembly resolves, and a plain Consolas text box otherwise. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/NcFileCommandPanel.vue — this panel: the path field and Browse, the “Play As” kind select, the file-info banner and its Preview button, the read-only preview dialog, the four filter groups, and the multi-pick fan-out. wwwroot-src/src/components/widgets/FileExplorerDialog.vue — the shared server-side browser Browse opens: the pickable / multi / filters / initial-root / allowed-roots props, and the pick event whose emitted strings pair a root name with a relative path — that relative half is what the command stores. wwwroot-src/src/components/widgets/fileFilter.ts — the filter shape the four groups are built from; an empty extension list means all files. wwwroot-src/src/components/controlTree/missionItemTypes.ts — maps the ncfile kind to this panel. A kind absent from that map is served by the generic field editor instead. wwwroot-src/src/api/mission.ts — loadNcFile, setNcFilePath, setNcFileNcKind, getNcFileInfo and previewNcFile, plus the kind union and the file-info shape. wwwroot-src/src/i18n/en/mission.ts — the panel's wording: the path hint, the Play As hint, the four filter labels, the banner's found and not-found lines, and the preview titles. Missions/MissionController.cs — four endpoints serve this command: a PUT for the path, a PUT for the NC kind, and the two server-side reads behind the banner and the preview (both POSTs, both resolving a relative path against the project folder). The command-snapshot builder emits the file path and the NC kind for this kind of command. HiAPI Engine HiNc/SessionCommands/NcFileCommand.cs — the model: NcFile, NcKind defaulting to Auto, the “Program File” display name and its Program-category catalog registration, the XML round-trip that writes the path verbatim, the Program File [path] row label, and Run handing path and kind to the session shell. HiMech/MachiningProcs/NcKind.cs — the kind enum (Auto / BrandNc / Cl / Csv) and the detect-by-path helper, the authority for what Auto does. HiNc/MachiningProcs/SessionShell.cs — RunNcFile passes the stored path together with the project's base directory to the local project service. See Also NcCodeCommand Panel — the other Program command: NC text stored in the project instead of a path to a file Playing a Program — the task these two commands serve Mission — the rest of the command panels"
+ "summary": "NcFileCommand Panel (Program File) The key model is NcFileCommand. The command carries exactly two values: NcFile, the path of the program to play, and NcKind, the runner that plays it. The program text stays a file on disk — the project stores the path and nothing else, which is what separates this command from NC Code, whose text is serialized into the project itself. NcFile is normally a path relative to the project folder — that is what the browse dialog yields — and an absolute path on the server is accepted just as well. No base directory is stored with the command: at play time RunNcFile hands the stored path together with the project's own base directory to the local project service, and that is where a relative path acquires its root; the convention behind it is the Load Pattern. The panel renders on the command's own node in the Mission branch of the Execution page's Control Tree, below the move / duplicate / delete control bar. This command has no title of its own, so the row and tree label read Program File [path], the path being the detail the label brackets. Note The GUI labels this command “Program File”: it plays NC, CL (CLSF) and CSV files — the runner is picked by NcKind, and Auto reads it off the extension (DetectByPath: .cl, .cls and .clsf play as CL, .csv as CSV, and every other extension as brand NC). Layout NcFileCommand Panel Head Line Program File Path Field The model is NcFile. Its hint names both accepted forms: an absolute path on the server, or a path relative to the project folder. Every keystroke saves the path. Leaving the field or pressing Enter additionally refreshes the file-info banner. The field flexes to fill the row beside the Browse button at any panel width. Browse Button Opens the shared file-explorer dialog — see Browsing for a Program. Play As Select The model is NcKind. Four choices: Auto (by extension), Brand NC, CL (CLSF) and CSV. The hint restates what Auto detects, so the runner can be pinned when the extension would route the file elsewhere. File Info Banner Appears once the path field is non-empty. Every fact in it is read on the server. Found: a green banner stating the file size, its modified stamp and its line count, with a Preview button in the banner's action slot. Missing: an orange banner saying the file is not found on the server, and no Preview button. Preview Dialog Read-only. The server returns the file's first 100 lines and the dialog shows them in a monospace block that scrolls within 60% of the viewport height, inside a card capped at 80%. An empty file previews as \"(empty)\". Browsing for a Program Browse opens the shared server-side file explorer dialog. File reads happen on the server; the browser never uploads file bytes. The Load Pattern's general web convention offers the Admin, Project and Resource roots. This picker narrows to one: it opens on the project directory and allows no other root, so a pick always yields a project-relative path. A file outside the project is reached by typing its absolute path into the path field, which the server accepts. The dialog carries four filter groups rather than one catch-all: NC Files — .nc, .anc, .tap, .eia, .mpf, .spf, .cnc, .ptp, .h. The open set: brand controller extensions, of which these are the common ones rather than all of them. CL Files — .cl, .cls, .clsf. CSV Files — .csv. All Files — an empty extension list, which is the empty filter the Load Pattern asks every browser to preserve. It is the backstop for a brand extension the NC group does not name. CL and CSV are split out because they are closed extension sets: those are exactly the extensions Auto routes to the CL and CSV runners, and everything else falls through to brand NC. Multi-Pick Fan-Out The dialog is multi-select, and this is the one command editor that grows the mission. The first picked file lands on this command. Each further pick becomes a new Program File command, added to the list this command sits in and moved into place directly after it, in pick order — the same list, so a command inside a nested list fans out inside that nested list. The panel then reports a structure change, which rebuilds the owning list's branch around the new rows and leaves the selection on this command. Where the Program Text Is Edited The command stores a path, and the panel does not edit the file. It assigns the path, picks the runner, reports what the server knows about the file, and previews its first 100 lines read-only. Nothing in the browser writes NC bytes back; the two file endpoints this panel calls are both reads. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/NcFileCommandPanel.vue — this panel: the path field and Browse, the “Play As” kind select, the file-info banner and its Preview button, the read-only preview dialog, the four filter groups, and the multi-pick fan-out. wwwroot-src/src/components/widgets/FileExplorerDialog.vue — the shared server-side browser Browse opens: the pickable / multi / filters / initial-root / allowed-roots props, and the pick event whose emitted strings pair a root name with a relative path — that relative half is what the command stores. wwwroot-src/src/components/widgets/fileFilter.ts — the filter shape the four groups are built from; an empty extension list means all files. wwwroot-src/src/components/controlTree/missionItemTypes.ts — maps the ncfile kind to this panel. A kind absent from that map is served by the generic field editor instead. wwwroot-src/src/api/mission.ts — loadNcFile, setNcFilePath, setNcFileNcKind, getNcFileInfo and previewNcFile, plus the kind union and the file-info shape. wwwroot-src/src/i18n/en/mission.ts — the panel's wording: the path hint, the Play As hint, the four filter labels, the banner's found and not-found lines, and the preview titles. Missions/MissionController.cs — four endpoints serve this command: a PUT for the path, a PUT for the NC kind, and the two server-side reads behind the banner and the preview (both POSTs, both resolving a relative path against the project folder). The command-snapshot builder emits the file path and the NC kind for this kind of command. HiAPI Engine HiNc/SessionCommands/NcFileCommand.cs — the model: NcFile, NcKind defaulting to Auto, the “Program File” display name and its Program-category catalog registration, the XML round-trip that writes the path verbatim, the Program File [path] row label, and Run handing path and kind to the session shell. HiMech/MachiningProcs/NcKind.cs — the kind enum (Auto / BrandNc / Cl / Csv) and the detect-by-path helper, the authority for what Auto does. HiNc/MachiningProcs/SessionShell.cs — RunNcFile passes the stored path together with the project's base directory to the local project service. See Also NcCodeCommand Panel — the other Program command: NC text stored in the project instead of a path to a file Playing a Program — the task these two commands serve Mission — the rest of the command panels"
},
"anatomy/execution/mission/NcOptOption-panel.html": {
"href": "anatomy/execution/mission/NcOptOption-panel.html",
"title": "NC Optimization Option Panel (NC Optimization Config) | HiAPI-C# 2025",
- "summary": "NC Optimization Option Panel (NC Optimization Config) The key model is NcOptOptionCommand; the options it carries are a NcOptOption. The command exists so the optimizer's settings are a step in the mission rather than a global preference. Run assigns the command's option object onto the session shell — the whole body is sessionShell.NcOptOption = NcOptOption — so the settings take effect at the point the entry sits in the list. Everything played below it optimizes under them, and a second NC Optimization Config further down the list re-points them mid-mission. The command carries no title on either client. Its row and its tree label always read NC Optimization Config: GetCommandTitle returns that fixed name and takes nothing from the user. Where It Renders The web client has one editor component for this command and mounts it once per tree node, each mount scoped to one group of options: The NC Optimization Config node itself carries the four enable checkboxes, below the move / duplicate / delete control bar every command node shows. The node grows five section children — Distances, Feedrate, Motion Dynamics, Force & Safety, Compensation — and each mounts the same component scoped to its own section. Unlike the General Config and Post-Execution sections, none of these five section nodes carries an enable checkbox: this kind declares no section enable flags, so the tree hides the tick on them. The command node's own checkbox is the only switch, and it only decides whether the mission runs the command — a disabled command is skipped during play and stays fully editable. Layout NC Optimization Config Node Enable Optimization CheckBox The model is EnableOpt. Enable Feedrate Optimization CheckBox The model is EnableOptFeedrate. Enable Depth Splition CheckBox The model is EnableDepthSplition. The desktop client labels the same switch “Enable Depth Splitting”. Enable Interpolation CheckBox The model is EnableInterpolation. Distances Section Extended Pre Distance Numeric Field (mm) The model is ExtendedPreDistance_mm. Extended Post Distance Numeric Field (mm) The model is ExtendedPostDistance_mm. Feedrate Section Min Feedrate Numeric Field (mm/min) The model is MinFeedrate_mmdmin. Max Feedrate Numeric Field (mm/min) The model is MaxFeedrate_mmdmin. Rapid Feed Numeric Field (mm/min) The model is RapidFeed_mmdmin. Min Feed Per Tooth Numeric Field (mm) The model is MinFeedPerTooth_mm. Max Feed Per Tooth Numeric Field (mm) The model is MaxFeedPerTooth_mm. Feedrate Assignment Ratio Numeric Field The model is FeedrateAssignmentRatio. Motion Dynamics Section Max Acceleration Numeric Field (mm/s²) The model is MaxAcceleration_mmds2. Max Jerk Numeric Field (mm/s³) The model is MaxJerk_mmds3. Force & Safety Section Preferred Force Numeric Field (N) The model is PreferedForce_N. The one field hinted \"Accepts Infinity.\", and the one field with no lower bound. Yielding Safety Factor Numeric Field The model is YieldingSafetyFactor. Thermal Yield Safety Factor Numeric Field The model is ThermalYieldSafetyFactor. Spindle Torque Safety Factor Numeric Field The model is MaxSpindleTorqueSafetyFactor. Spindle Power Safety Factor Numeric Field The model is MaxSpindlePowerSafetyFactor. Compensation Section Enable Forward Compensation CheckBox The model is EnableForwardCompensation. Enable Side Compensation CheckBox The model is EnableSideCompensation. Enable Depth Compensation CheckBox The model is EnableDepthCompensation. The three compensation switches are bit accessors over the model's compensation mask — forward is bit 0, side bit 1, depth bit 2 — so all three travel as one integer in the project file. Saving Every edit writes at once. There is no Save button and no dirty state: a checkbox saves on click, a numeric field saves when it loses focus or on Enter, and each write is one PUT for that one property. The value is applied locally first; if the request fails, the panel re-reads the whole command and raises a toast, so the field snaps back to what the server holds. The read side is a single command snapshot rather than one GET per property: the panel loads the command and takes its ncOptOption object. Two keys in that object drop the engine's Max prefix — the spindle torque and spindle power safety factors travel as spindleTorqueSafetyFactor and spindlePowerSafetyFactor. Infinity and Bounds Infinity is a legal value for Preferred Force and Max Feed Per Tooth, and those two are exactly the properties whose endpoints take a string body: the client sends the literal Infinity (or -Infinity), and the reader parses the same spelling back. Every other property's endpoint takes a typed bool or double. Every numeric field except Preferred Force is bounded at 0 — a smaller number is refused in the field with “Must be ≥ 0” and never reaches the server. Tip The engine's XML form parses these values through XmlConvert.ToDouble, which is why an infinite feed per tooth or preferred force survives a project save and reload. Defaults A freshly added command carries the option model's own initial values, so the panel opens on them: Option Default The four enable switches all on Extended Pre / Post Distance 2 mm Min / Max Feedrate 1 / 20000 mm/min Rapid Feed 20000 mm/min Min / Max Feed Per Tooth 0 mm / Infinity Feedrate Assignment Ratio 0.01 Max Acceleration / Max Jerk 10 mm/s² / 100 mm/s³ Preferred Force Infinity Yielding / Thermal Yield Safety Factor 0 Spindle Torque / Power Safety Factor 1.5 The three compensation switches all off The Two Clients The desktop client edits the same command in one scrolling panel of six group boxes, and it names 17 of the model's options — the four enable switches, the two distances, the three feedrates, acceleration and jerk, Preferred Force with the two spindle safety factors, and the three compensation switches. The web client edits five more, and that is the whole difference between the two editors: Min Feed Per Tooth, Max Feed Per Tooth and Feedrate Assignment Ratio in the Feedrate section, and Yielding Safety Factor and Thermal Yield Safety Factor in Force & Safety. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/NcOptOptionCommandPanel.vue — this panel. A section prop picks the one group it renders, a setter map routes each field to its API call, and a failed write re-reads the command and notifies. wwwroot-src/src/components/controlTree/missionItemTypes.ts — registers the ncoptoption kind's bespoke editor, declares its five section children, gives it the tune icon and the NC Optimization Config display name, and leaves it out of the section-enable readers and writers so its section nodes carry no checkbox. wwwroot-src/src/components/controlTree/MissionCommandSlavePanel.vue — the control bar above the command node's checkboxes. wwwroot-src/src/components/controlTree/MissionSectionPanel.vue — mounts this panel once per section node, scoped to that node's section. wwwroot-src/src/api/mission.ts — the option shape the panel edits, the reader that takes the ncOptOption snapshot and parses Infinity, and one setter per property over commands/{path}/ncoptoption/{endpoint}. wwwroot-src/src/components/widgets/NumericInput.vue — the field every non-boolean option uses: it commits on blur or Enter, spells infinity as Infinity, and enforces the minimum the panel passes. wwwroot-src/src/i18n/en/mission.ts — the option labels and the “Accepts Infinity.” hint. wwwroot-src/src/i18n/en/tree.ts — the kind name and the five section names the tree shows. Missions/NcOptOptionEndpoints.cs — a partial of the same MissionController: one PUT per editable property, two of them string-bodied so Infinity round-trips. Each creates the option object when the command has none, and answers a command-type mismatch when the path holds another kind. Missions/MissionController.cs — builds the command snapshot the panel reads, re-keying the two spindle safety factors onto their wire names, and owns the entry lifecycle — add, delete, move, duplicate, reparent — that puts this command in the list. HiAPI Engine HiNc/SessionCommands/NcOptOptionCommand.cs — the mission entry: the NC Optimization Config display name, its Optimization catalog registration, the single option property, the fixed command title, the XML round-trip that nests the options in the project file, and the Run that assigns them onto the session shell. HiMech/NcOpt/NcOptOption.cs — the option model: the engine-side names MaxSpindleTorqueSafetyFactor and MaxSpindlePowerSafetyFactor, the compensation booleans as bit accessors over one mask, and the mm/min feedrates as conversions over mm/s storage. See Also PostExecutionCommand Panel — where the optimized programs are written out, under the settings this command puts in force The Other Commands — the task this command serves Mission — the rest of the command panels"
+ "summary": "NC Optimization Option Panel (NC Optimization Config) The key model is NcOptOptionCommand; the options it carries are a NcOptOption. The command exists so the optimizer's settings are a step in the mission rather than a global preference. Run assigns the command's option object onto the session shell — the whole body is sessionShell.NcOptOption = NcOptOption — so the settings take effect at the point the entry sits in the list. Everything played below it optimizes under them, and a second NC Optimization Config further down the list re-points them mid-mission. The command carries no title. Its row and its tree label always read NC Optimization Config: GetCommandTitle returns that fixed name and takes nothing from the user. Where It Renders The web client has one editor component for this command and mounts it once per tree node, each mount scoped to one group of options: The NC Optimization Config node itself carries the four enable checkboxes, below the move / duplicate / delete control bar every command node shows. The node grows five section children — Distances, Feedrate, Motion Dynamics, Force & Safety, Compensation — and each mounts the same component scoped to its own section. Unlike the General Config and Post-Execution sections, none of these five section nodes carries an enable checkbox: this kind declares no section enable flags, so the tree hides the tick on them. The command node's own checkbox is the only switch, and it only decides whether the mission runs the command — a disabled command is skipped during play and stays fully editable. Layout NC Optimization Config Node Enable Optimization CheckBox The model is EnableOpt. Enable Feedrate Optimization CheckBox The model is EnableOptFeedrate. Enable Depth Splition CheckBox The model is EnableDepthSplition. Enable Interpolation CheckBox The model is EnableInterpolation. Distances Section Extended Pre Distance Numeric Field (mm) The model is ExtendedPreDistance_mm. Extended Post Distance Numeric Field (mm) The model is ExtendedPostDistance_mm. Feedrate Section Min Feedrate Numeric Field (mm/min) The model is MinFeedrate_mmdmin. Max Feedrate Numeric Field (mm/min) The model is MaxFeedrate_mmdmin. Rapid Feed Numeric Field (mm/min) The model is RapidFeed_mmdmin. Min Feed Per Tooth Numeric Field (mm) The model is MinFeedPerTooth_mm. Max Feed Per Tooth Numeric Field (mm) The model is MaxFeedPerTooth_mm. Feedrate Assignment Ratio Numeric Field The model is FeedrateAssignmentRatio. Motion Dynamics Section Max Acceleration Numeric Field (mm/s²) The model is MaxAcceleration_mmds2. Max Jerk Numeric Field (mm/s³) The model is MaxJerk_mmds3. Force & Safety Section Preferred Force Numeric Field (N) The model is PreferedForce_N. The one field hinted \"Accepts Infinity.\", and the one field with no lower bound. Yielding Safety Factor Numeric Field The model is YieldingSafetyFactor. Thermal Yield Safety Factor Numeric Field The model is ThermalYieldSafetyFactor. Spindle Torque Safety Factor Numeric Field The model is MaxSpindleTorqueSafetyFactor. Spindle Power Safety Factor Numeric Field The model is MaxSpindlePowerSafetyFactor. Compensation Section Enable Forward Compensation CheckBox The model is EnableForwardCompensation. Enable Side Compensation CheckBox The model is EnableSideCompensation. Enable Depth Compensation CheckBox The model is EnableDepthCompensation. The three compensation switches are bit accessors over the model's compensation mask — forward is bit 0, side bit 1, depth bit 2 — so all three travel as one integer in the project file. Saving Every edit writes at once. There is no Save button and no dirty state: a checkbox saves on click, a numeric field saves when it loses focus or on Enter, and each write is one PUT for that one property. The value is applied locally first; if the request fails, the panel re-reads the whole command and raises a toast, so the field snaps back to what the server holds. The read side is a single command snapshot rather than one GET per property: the panel loads the command and takes its ncOptOption object. Two keys in that object drop the engine's Max prefix — the spindle torque and spindle power safety factors travel as spindleTorqueSafetyFactor and spindlePowerSafetyFactor. Infinity and Bounds Infinity is a legal value for Preferred Force and Max Feed Per Tooth, and those two are exactly the properties whose endpoints take a string body: the client sends the literal Infinity (or -Infinity), and the reader parses the same spelling back. Every other property's endpoint takes a typed bool or double. Every numeric field except Preferred Force is bounded at 0 — a smaller number is refused in the field with “Must be ≥ 0” and never reaches the server. Tip The engine's XML form parses these values through XmlConvert.ToDouble, which is why an infinite feed per tooth or preferred force survives a project save and reload. Defaults A freshly added command carries the option model's own initial values, so the panel opens on them: Option Default The four enable switches all on Extended Pre / Post Distance 2 mm Min / Max Feedrate 1 / 20000 mm/min Rapid Feed 20000 mm/min Min / Max Feed Per Tooth 0 mm / Infinity Feedrate Assignment Ratio 0.01 Max Acceleration / Max Jerk 10 mm/s² / 100 mm/s³ Preferred Force Infinity Yielding / Thermal Yield Safety Factor 0 Spindle Torque / Power Safety Factor 1.5 The three compensation switches all off The web client edits five more, and that is the whole difference between the two editors: Min Feed Per Tooth, Max Feed Per Tooth and Feedrate Assignment Ratio in the Feedrate section, and Yielding Safety Factor and Thermal Yield Safety Factor in Force & Safety. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/NcOptOptionCommandPanel.vue — this panel. A section prop picks the one group it renders, a setter map routes each field to its API call, and a failed write re-reads the command and notifies. wwwroot-src/src/components/controlTree/missionItemTypes.ts — registers the ncoptoption kind's bespoke editor, declares its five section children, gives it the tune icon and the NC Optimization Config display name, and leaves it out of the section-enable readers and writers so its section nodes carry no checkbox. wwwroot-src/src/components/controlTree/MissionCommandSlavePanel.vue — the control bar above the command node's checkboxes. wwwroot-src/src/components/controlTree/MissionSectionPanel.vue — mounts this panel once per section node, scoped to that node's section. wwwroot-src/src/api/mission.ts — the option shape the panel edits, the reader that takes the ncOptOption snapshot and parses Infinity, and one setter per property over commands/{path}/ncoptoption/{endpoint}. wwwroot-src/src/components/widgets/NumericInput.vue — the field every non-boolean option uses: it commits on blur or Enter, spells infinity as Infinity, and enforces the minimum the panel passes. wwwroot-src/src/i18n/en/mission.ts — the option labels and the “Accepts Infinity.” hint. wwwroot-src/src/i18n/en/tree.ts — the kind name and the five section names the tree shows. Missions/NcOptOptionEndpoints.cs — a partial of the same MissionController: one PUT per editable property, two of them string-bodied so Infinity round-trips. Each creates the option object when the command has none, and answers a command-type mismatch when the path holds another kind. Missions/MissionController.cs — builds the command snapshot the panel reads, re-keying the two spindle safety factors onto their wire names, and owns the entry lifecycle — add, delete, move, duplicate, reparent — that puts this command in the list. HiAPI Engine HiNc/SessionCommands/NcOptOptionCommand.cs — the mission entry: the NC Optimization Config display name, its Optimization catalog registration, the single option property, the fixed command title, the XML round-trip that nests the options in the project file, and the Run that assigns them onto the session shell. HiMech/NcOpt/NcOptOption.cs — the option model: the engine-side names MaxSpindleTorqueSafetyFactor and MaxSpindlePowerSafetyFactor, the compensation booleans as bit accessors over one mask, and the mm/min feedrates as conversions over mm/s storage. See Also PostExecutionCommand Panel — where the optimized programs are written out, under the settings this command puts in force The Other Commands — the task this command serves Mission — the rest of the command panels"
},
"anatomy/execution/mission/PostExecutionCommand-panel.html": {
"href": "anatomy/execution/mission/PostExecutionCommand-panel.html",
"title": "PostExecutionCommand Panel (Post-Execution) | HiAPI-C# 2025",
- "summary": "PostExecutionCommand Panel (Post-Execution) The key model is PostExecutionCommand, the command both clients label Post-Execution. It is the Output category's first catalog entry, and it carries five outputs derived from what the session has played: step files, shot files, optimization files, a CL → NC writeback, and a geometry-difference detection. When It Runs, and What It Covers Post-Execution is an ordinary entry in the command list, not an end-of-run hook. Its name describes what it consumes, not a fixed position: the list runs its entries in order and skips any whose Enable box is clear, and everything this command writes is derived from what the session has played so far. That makes its placement the whole question. Put it after two program entries and it writes both. Put a second one halfway down the list and it writes an interim snapshot of the same accumulating state. The CL → NC writeback says this outright in the panel — place the CL-playing Program File command before this command — and it re-serializes every control file the session played, so an NC play is written back too. Read this together with General Config, the other half of the pair: those settings apply from their position forward, these outputs cover everything up to this position. The web client places the command anywhere in the list, like any other. The WPF client pins it to the end: a new command is inserted before a trailing Post-Execution while that is the list's only one, and the drag guard refuses to move it off the last position. Run executes the enabled outputs in an order of its own, which is not the order the tree and the list below show them in: shot files, then step files, then optimization, then the CL → NC writeback, then the geometry difference. Output timestamps follow that order rather than the layout. Layout Every output is a section child node of the command, and each section's enable flag is that node's own tree checkbox. The command node itself carries only a caption saying so; the section panels hold the template and numeric fields, which stay editable whether or not the output is switched on — the flag decides what runs, not what can be edited. Step Files Output Section The node's checkbox is EnableWriteStepFiles. Step File Template Field The model is StepFileTemplate. Default value: Output/[NcName].step.csv Writes the step-series data of what the session has played. Shot Files Output Section The node's checkbox is EnableWriteShotFiles. Shot File Template Field The model is ShotFileTemplate. Default value: Output/[NcName].shot.csv Shot File Time Resolution Number Field (ms) The model is ShotFileTimeResolution_ms. Default value: 1 This sampling period — not the machining resolution — sets the accuracy ceiling of the time-series data, and a fine period produces a large file: a six-cut program writes about 13 MB at 1 ms and about 128 MB at 0.1 ms. Optimization Output Section The node's checkbox is EnableOptimizeToFiles. Optimization File Template Field The model is OptimizationFileTemplate. Default value: Output/Opt-[NcName] The SoftNc pipeline runs when the SoftNc runner is on and the session holds played syntax layers; otherwise the HardNc path runs. Both clear every cutter's optimization-limit cache first. CL → NC Writeback Section The node's checkbox is EnableConvertClToNcFiles. NC Output Template Field The model is ClToNcFileTemplate. Default value: Output/[NcName].nc Its hint states the substitution: [NcName] is replaced by the source file name, extension kept. A caption below the field explains the synthesis: the MSYS frame becomes a G68.2 tilted working plane, tool posture becomes G43.4 RTCP with rotary words, and motions become G00/G01/G02/G03. The CL must have been played on an XYZABC machine chain first. The converted files appear as → file.nc nodes on the Execution Program branch, with source ⇄ output line jumps. Geometry Difference Detection Section The node's checkbox is EnableGeomDiff. Detect Radius Number Field (mm) The model is GeomDiffDetectRadius_mm. Default value: 1 Compares the workpiece geometry at that radius. With no workpiece in the session it reports “No Workpiece exist” and does nothing. Shot Files Output and Optimization Output are the two physics-gated sections. The condition is the physics preference and the advanced-physics licence, served to the client already combined; when it is off, the tree builder omits those two nodes entirely, and a preference flip shows up on the next branch rebuild. CL → NC Writeback is deliberately not gated — writeback is a SoftNc syntax feature, not a physics one. Every edit saves as it is made. A rejected save is reported and the panel reloads the command. Note Post-Execution writes run-derived files only. The meshed-geometry snapshot is a placeable command of its own, because a snapshot can be taken at any spot in a mission: Record Meshed Geometry (RecordMeshedGeomCommand, with its No Action / Read / Write / Read On First Or Write modes) and Export Meshed Geometry (STL) (ExportMeshedGeomToStlCommand) are both Output-category catalog entries with editors of their own. Opening a project that still carries an enabled meshed-geometry output on this command raises a system warning naming the replacement, and re-saving the project drops the element. Note GeomDiffCommand exists as a standalone command, as do WriteStepFilesCommand, WriteShotFilesCommand and OptimizeToFilesCommand. None of them carries the catalog attribute, so they load from a project file but are not offered in the Add Command dialog. Post-Execution is the catalogued carrier of these outputs, which is why they are edited as its sections. The WPF Client's Panel There four of the outputs are group boxes on one panel, each an enable checkbox over a grid that is disabled until the box is ticked: Step Files Output, Shot Files Output, Optimization Output and Geometry Difference Detection. The physics condition collapses the Shot Files and Optimization group boxes rather than omitting tree nodes. CL → NC Writeback is the one output the web client has and this panel does not. Its two properties live on the same engine command, and the web section and its two endpoints are where they are edited. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/PostExecutionCommandPanel.vue — the command node's caption and one headerless block per section: step-files, shot-files, optimization, cl-nc-writeback and geom-diff. No checkboxes live here. wwwroot-src/src/components/controlTree/missionItemTypes.ts — declares the five sections with their labels, marks Shot Files and Optimization physics-gated with an explicit note that CL → NC is not, filters the gated sections out of the tree, and maps each section id to its enable-flag reader and writer. wwwroot-src/src/components/controlTree/MissionSectionPanel.vue — renders one section headerless, the breadcrumb already naming it, and passes no enable state down because the flags decide only what runs. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — the ticks: a command node ticks its own enable flag, a section node with an enable flag ticks that, and every other node hides the box. wwwroot-src/src/api/mission.ts — loadPostExecution and the eleven postexecution/* PUTs. wwwroot-src/src/i18n/en/mission.ts — the field labels, the [NcName] hint, the command node's overview caption and the writeback paragraph. wwwroot-src/src/i18n/en/tree.ts — the five section node labels. wwwroot-src/src/stores/appState.ts — the physics preference and licence flags the tree builder reads. Environments/PreferenceController.cs — serves the physics preference already combined with the advanced-physics licence, the same condition the WPF panel evaluates. Missions/MissionController.cs — the commands/{path}/postexecution/* endpoints: the five enable flags, the four templates, the shot-file time resolution and the geom-diff detect radius. HiAPI Engine HiNc/SessionCommands/PostExecutionCommand.cs — the model, its display name and Output-category catalog registration, every default above, the run order, and the warning raised for a project still carrying a meshed-geometry output. HiNc/SessionCommands/ListCommand.cs — the in-order run that skips disabled entries, which is what makes this command's placement decide what it covers. HiNc/MachiningProcs/SessionShell.cs — what each output actually calls: the shot-file writer and its sampling-period guidance, the step-file writer, the optimization routing between the SoftNc and HardNc paths, the CL → NC writeback synthesis, and the workpiece difference. HiNc/SessionCommands/GeomDiffCommand.cs, HiNc/SessionCommands/WriteStepFilesCommand.cs, HiNc/SessionCommands/WriteShotFilesCommand.cs and HiNc/SessionCommands/OptimizeToFilesCommand.cs — the standalone commands behind the same four outputs: loadable from a project file, absent from the catalog. HiNc/SessionCommands/RecordMeshedGeomCommand.cs and HiNc/SessionCommands/ExportMeshedGeomToStlCommand.cs — the two catalogued Output commands that carry the meshed-geometry snapshot. HiNc/SessionCommands/CommandCatalogAttribute.cs — the attribute that separates a loadable command from an addable one. See Also PreSettingCommand Panel — the other half of the positional pair: those settings apply forward, these outputs cover everything up to here NC Optimization Option Panel — the settings the Optimization Output section writes its result under The Other Commands — the task this command serves Mission — the rest of the command panels"
+ "summary": "PostExecutionCommand Panel (Post-Execution) The key model is PostExecutionCommand, labelled Post-Execution. It is the Output category's first catalog entry, and it carries five outputs derived from what the session has played: step files, shot files, optimization files, a CL → NC writeback, and a geometry-difference detection. When It Runs, and What It Covers Post-Execution is an ordinary entry in the command list, not an end-of-run hook. Its name describes what it consumes, not a fixed position: the list runs its entries in order and skips any whose Enable box is clear, and everything this command writes is derived from what the session has played so far. That makes its placement the whole question. Put it after two program entries and it writes both. Put a second one halfway down the list and it writes an interim snapshot of the same accumulating state. The CL → NC writeback says this outright in the panel — place the CL-playing Program File command before this command — and it re-serializes every control file the session played, so an NC play is written back too. Read this together with General Config, the other half of the pair: those settings apply from their position forward, these outputs cover everything up to this position. The command sits anywhere in the list, like any other; nothing pins it to the end. Run executes the enabled outputs in an order of its own, which is not the order the tree and the list below show them in: shot files, then step files, then optimization, then the CL → NC writeback, then the geometry difference. Output timestamps follow that order rather than the layout. Layout Every output is a section child node of the command, and each section's enable flag is that node's own tree checkbox. The command node itself carries only a caption saying so; the section panels hold the template and numeric fields, which stay editable whether or not the output is switched on — the flag decides what runs, not what can be edited. Step Files Output Section The node's checkbox is EnableWriteStepFiles. Step File Template Field The model is StepFileTemplate. Default value: Output/[NcName].step.csv Writes the step-series data of what the session has played. Shot Files Output Section The node's checkbox is EnableWriteShotFiles. Shot File Template Field The model is ShotFileTemplate. Default value: Output/[NcName].shot.csv Shot File Time Resolution Number Field (ms) The model is ShotFileTimeResolution_ms. Default value: 1 This sampling period — not the machining resolution — sets the accuracy ceiling of the time-series data, and a fine period produces a large file: a six-cut program writes about 13 MB at 1 ms and about 128 MB at 0.1 ms. Optimization Output Section The node's checkbox is EnableOptimizeToFiles. Optimization File Template Field The model is OptimizationFileTemplate. Default value: Output/Opt-[NcName] The SoftNc pipeline runs when the SoftNc runner is on and the session holds played syntax layers; otherwise the HardNc path runs. Both clear every cutter's optimization-limit cache first. CL → NC Writeback Section The node's checkbox is EnableConvertClToNcFiles. NC Output Template Field The model is ClToNcFileTemplate. Default value: Output/[NcName].nc Its hint states the substitution: [NcName] is replaced by the source file name, extension kept. A caption below the field explains the synthesis: the MSYS frame becomes a G68.2 tilted working plane, tool posture becomes G43.4 RTCP with rotary words, and motions become G00/G01/G02/G03. The CL must have been played on an XYZABC machine chain first. The converted files appear as → file.nc nodes on the Execution Program branch, with source ⇄ output line jumps. Geometry Difference Detection Section The node's checkbox is EnableGeomDiff. Detect Radius Number Field (mm) The model is GeomDiffDetectRadius_mm. Default value: 1 Compares the workpiece geometry at that radius. With no workpiece in the session it reports “No Workpiece exist” and does nothing. Shot Files Output and Optimization Output are the two physics-gated sections. The condition is the physics preference and the advanced-physics licence, served to the client already combined; when it is off, the tree builder omits those two nodes entirely, and a preference flip shows up on the next branch rebuild. CL → NC Writeback is deliberately not gated — writeback is a SoftNc syntax feature, not a physics one. Every edit saves as it is made. A rejected save is reported and the panel reloads the command. Note Post-Execution writes run-derived files only. The meshed-geometry snapshot is a placeable command of its own, because a snapshot can be taken at any spot in a mission: Record Meshed Geometry (RecordMeshedGeomCommand, with its No Action / Read / Write / Read On First Or Write modes) and Export Meshed Geometry (STL) (ExportMeshedGeomToStlCommand) are both Output-category catalog entries with editors of their own. Opening a project that still carries an enabled meshed-geometry output on this command raises a system warning naming the replacement, and re-saving the project drops the element. Note GeomDiffCommand exists as a standalone command, as do WriteStepFilesCommand, WriteShotFilesCommand and OptimizeToFilesCommand. None of them carries the catalog attribute, so they load from a project file but are not offered in the Add Command dialog. Post-Execution is the catalogued carrier of these outputs, which is why they are edited as its sections. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/PostExecutionCommandPanel.vue — the command node's caption and one headerless block per section: step-files, shot-files, optimization, cl-nc-writeback and geom-diff. No checkboxes live here. wwwroot-src/src/components/controlTree/missionItemTypes.ts — declares the five sections with their labels, marks Shot Files and Optimization physics-gated with an explicit note that CL → NC is not, filters the gated sections out of the tree, and maps each section id to its enable-flag reader and writer. wwwroot-src/src/components/controlTree/MissionSectionPanel.vue — renders one section headerless, the breadcrumb already naming it, and passes no enable state down because the flags decide only what runs. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — the ticks: a command node ticks its own enable flag, a section node with an enable flag ticks that, and every other node hides the box. wwwroot-src/src/api/mission.ts — loadPostExecution and the eleven postexecution/* PUTs. wwwroot-src/src/i18n/en/mission.ts — the field labels, the [NcName] hint, the command node's overview caption and the writeback paragraph. wwwroot-src/src/i18n/en/tree.ts — the five section node labels. wwwroot-src/src/stores/appState.ts — the physics preference and licence flags the tree builder reads. Environments/PreferenceController.cs — serves the physics preference already combined with the advanced-physics licence. Missions/MissionController.cs — the commands/{path}/postexecution/* endpoints: the five enable flags, the four templates, the shot-file time resolution and the geom-diff detect radius. HiAPI Engine HiNc/SessionCommands/PostExecutionCommand.cs — the model, its display name and Output-category catalog registration, every default above, the run order, and the warning raised for a project still carrying a meshed-geometry output. HiNc/SessionCommands/ListCommand.cs — the in-order run that skips disabled entries, which is what makes this command's placement decide what it covers. HiNc/MachiningProcs/SessionShell.cs — what each output actually calls: the shot-file writer and its sampling-period guidance, the step-file writer, the optimization routing between the SoftNc and HardNc paths, the CL → NC writeback synthesis, and the workpiece difference. HiNc/SessionCommands/GeomDiffCommand.cs, HiNc/SessionCommands/WriteStepFilesCommand.cs, HiNc/SessionCommands/WriteShotFilesCommand.cs and HiNc/SessionCommands/OptimizeToFilesCommand.cs — the standalone commands behind the same four outputs: loadable from a project file, absent from the catalog. HiNc/SessionCommands/RecordMeshedGeomCommand.cs and HiNc/SessionCommands/ExportMeshedGeomToStlCommand.cs — the two catalogued Output commands that carry the meshed-geometry snapshot. HiNc/SessionCommands/CommandCatalogAttribute.cs — the attribute that separates a loadable command from an addable one. See Also PreSettingCommand Panel — the other half of the positional pair: those settings apply forward, these outputs cover everything up to here NC Optimization Option Panel — the settings the Optimization Output section writes its result under The Other Commands — the task this command serves Mission — the rest of the command panels"
},
"anatomy/execution/mission/PreSettingCommand-panel.html": {
"href": "anatomy/execution/mission/PreSettingCommand-panel.html",
"title": "PreSettingCommand Panel (General Config) | HiAPI-C# 2025",
- "summary": "PreSettingCommand Panel (General Config) The key model is PreSettingCommand, the command both clients label General Config. It is one command carrying a bundle of session settings — the machining resolution, the machining motion resolution, collision detection, pause on failure, physics — plus an optional read of a meshed-geometry file. Where a General Config Comes From The two clients differ on how a mission acquires these settings, and that difference is the first thing to know about this panel. The WPF client creates the bundle. Its Add menu carries a hard-coded item that constructs a PreSettingCommand, and the insert rule pins it to the top of the list: a new General Config lands at index 0 unless the list already starts with one, and while it is the list's only General Config the drag guard refuses to move it off that position. The web client's Add Command dialog is served by the server's command catalog, which reflects every engine command carrying [CommandCatalog]. PreSettingCommand carries no such attribute, so the dialog cannot produce one — the catalog keeps presetting only as a readable kind key, and creating a command looks the kind up in the addable set alone. What the web offers instead is the same settings as five separate Setup commands, each placeable anywhere in the list: Machining Resolution — MachiningResolutionCommand, 0.125 mm by default, reading Machining Resolution [0.125 mm] in the list. Machining Motion Resolution — MachiningMotionResolutionCommand, Feed Per Cycle by default. Collision Detection — CollisionDetectionCommand, on by default. Pause on Failure — PauseOnFailureCommand, off by default. Physics — PhysicsCommand, on by default, its field declared physics-licence gated. Machining Motion Resolution ships an editor of its own. The other four declare their one scalar with [CommandField] and are served by the generic field editor, which builds their input and its server-localized label from that declaration — so the web ships strictly more here than one bundle panel, and none of the four needed frontend code. A project file never brings a reader to this panel either. Reading a stored bundle materializes those five commands in its place, in the order the bundle applies them, preceded by a Read-mode Record Meshed Geometry entry whenever the meshed-geometry read is enabled or a file is set. The bundle's own enable state is consumed into every entry the expansion produces, and the Record entry additionally keeps the bundle's read flag. A bundle stored as the project's bare root command expands the same way, and what the project saves from then on is the split commands. That leaves one case this panel serves: a PreSettingCommand an API caller constructed into the list in place, which has not yet round-tripped through a project file. It edits that command through the commands/{path}/presetting/* endpoints, and every field is a PUT of its own. When the Settings Take Effect A list runs its entries in order and skips any entry whose Enable box is clear. General Config's Run then assigns straight onto the session shell, in this order: the meshed-geometry read when it is enabled, the machining resolution, the motion resolution, collision detection, pause on failure, physics. So these are positional settings, not global pre-run settings. A program entry above this command plays under whatever was in force before it; entries below it play under these values, until something further down changes the session again. The five Setup commands state the same contract one setting at a time — each is documented as taking effect “from this command on” — and each can sit at a different point in the list, which is what having them separate buys. Layout In the web client the command owns two tree nodes: the command node carrying the machining settings, and one section child carrying the meshed-geometry file reference. Command Node Machining Resolution Number Field The model is MachiningResolution_mm. Unit mm, floored at 0, default 0.125. A free numeric field — the web offers no option list. Motion Resolution The model is MachiningMotionResolution. A caption over a select with three choices: Feed Per Cycle, Feed Per Tooth and Fixed. Fixed adds a row of two number fields inline, both floored at 0: Linear Resolution (mm) and Rotary Resolution (deg), the two values of FixedMachiningMotionResolution. Switching the type to Fixed carries the outgoing resolution's current linear and rotary values into the new fixed pair rather than resetting them. Enable Collision Detection CheckBox The model is EnableCollisionDetection. Default value: true Enable Pause On Failure CheckBox The model is EnablePauseOnFailure. Default value: false Enable Physics CheckBox The model is EnablePhysics. Default value: true Disabled unless the advanced-physics licence is held. The engine declares the same gate on the split Physics command's field, so both editors refuse the same edit for the same reason. Meshed Geometry Section Node The node's own tree checkbox is EnableReadMeshedGeom; the panel below it holds the file reference only. The flag decides what runs, not what can be edited, so the field stays editable whether or not the box is ticked — a read can be prepared before it is switched on. Meshed Geometry File Field The model is MeshedGeomFile. Hinted as a .wct or .stl path relative to the project folder. Browse Button Opens the shared server-side file explorer, filtered to .wct / .stl with an All Files fallback. It opens on the project directory and allows no other root, so a pick always yields a project-relative path. Every edit saves as it is made. A rejected save is reported and the panel reloads the command, so what is on screen is what the server holds. Note The session's machining resolution is seeded from the workpiece's initial resolution when a project is loaded or assigned — not on a runtime reset and not when the workpiece is swapped, so an explicit setting survives both. This command carries its own value, and overwrites the session's with it at the moment the command runs. The WPF Client's Panel There the whole bundle is one panel, in two group boxes. Meshed Geometry Settings — an Enable Read Meshed Geometry checkbox over a Geometry File text box and a Browse button; the grid beneath the checkbox is disabled until it is ticked. Browse is an OpenFileDialog filtered to *.wct;*.stl, storing a pick under the project directory as a relative path and one outside it as an absolute path. Machining Settings — the Machining Resolution control is an editable ComboBox pre-filled with fifteen powers of two, from 0.0009765625 up to 16 in doublings, and a typed value outside that list is accepted. Beside the Motion Resolution ComboBox a content presenter holds the fixed fields, built at runtime and labelled Linear Resolution (mm) and Angle Resolution (deg) — Angle Resolution being this client's wording for the same RotaryResolution_deg the web labels Rotary Resolution. The three checkboxes sit loose in the same grid, and the Enable Physics one carries no licence gate. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/PreSettingCommandPanel.vue — this editor in both of its modes: the command node's machining settings, and the meshed-geometry section's file field with its Browse button. wwwroot-src/src/components/controlTree/missionItemTypes.ts — maps the presetting kind to this panel, declares its one Meshed Geometry section child, and turns EnableReadMeshedGeom into that node's tree checkbox on read and on write. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — which nodes show a checkbox: a command node ticks its own enable flag, a section node with an enable flag ticks that, and every other node hides the box. A disabled command dims its whole subtree. wwwroot-src/src/components/controlTree/MissionSectionPanel.vue — renders one section of a command's editor headerless, the breadcrumb already naming it. wwwroot-src/src/components/widgets/FileExplorerDialog.vue — the server-side browser Browse opens, with the project-directory root and the filter list this panel passes it. wwwroot-src/src/components/mission/GenericCommandPanel.vue — the editor the four bespoke-panel-less Setup commands get, built from their declared scalar fields. wwwroot-src/src/api/mission.ts — loadPreSetting and the nine presetting/* PUTs behind it. wwwroot-src/src/i18n/en/mission.ts — the panel's wording, including the Rotary Resolution label and the meshed-geometry hint and filter names. wwwroot-src/src/stores/appState.ts — the physics-licence flag the Enable Physics checkbox reads. Missions/MissionCommandCatalog.cs — the addable set the Add Command dialog is built from: the reflected [CommandCatalog] entries, plus presetting as a read-only kind key that creation never looks at. Missions/MissionController.cs — the commands/{path}/presetting/* endpoints: enable-read-meshed-geom, meshed-geom-file, machining-resolution-mm, machining-motion-resolution-type, fixed-linear-resolution-mm, fixed-rotary-resolution-deg, enable-collision-detection, enable-pause-on-failure and enable-physics. The type switch is where the current linear and rotary values are carried into a new fixed resolution. HiAPI Engine HiNc/SessionCommands/PreSettingCommand.cs — the model, its defaults, the order Run applies them onto the session shell, and the expansion into the split Setup commands. HiNc/SessionCommands/CommandCatalogAttribute.cs — the attribute the catalog reflects, and the five categories. A command without it stays loadable from project files but is not offered for creation. HiNc/SessionCommands/CommandFieldAttribute.cs — the scalar-field declaration the generic editor renders, with its label, unit and physics-licence gate. HiNc/SessionCommands/ListCommand.cs — the in-order run that skips disabled entries, and the XML read path that expands a stored bundle in place. HiNc/MachiningProcs/MachiningProject.cs — the same expansion for a bundle stored as the project's bare root command. HiNc/SessionCommands/MachiningResolutionCommand.cs, HiNc/SessionCommands/MachiningMotionResolutionCommand.cs, HiNc/SessionCommands/CollisionDetectionCommand.cs, HiNc/SessionCommands/PauseOnFailureCommand.cs and HiNc/SessionCommands/PhysicsCommand.cs — the five Setup commands the web catalog offers, their defaults and their list titles. The detection, pause and physics settings each carry the “from this command on” wording. HiNc/MachiningProcs/LocalProjectService.cs — the session's machining resolution and the seeding from the workpiece's initial resolution on project load or assignment. See Also PostExecutionCommand Panel — the other half of the positional pair: these settings apply forward, those outputs cover everything up to there The Other Commands — the five Setup commands this bundle expands into, as a task Mission — the rest of the command panels"
+ "summary": "PreSettingCommand Panel (General Config) The key model is PreSettingCommand, labelled General Config. It is one command carrying a bundle of session settings — the machining resolution, the machining motion resolution, collision detection, pause on failure, physics — plus an optional read of a meshed-geometry file. Where a General Config Comes From How a mission acquires these settings is the first thing to know about this panel. The Add Command dialog is served by the server's command catalog, which reflects every engine command carrying [CommandCatalog]. PreSettingCommand carries no such attribute, so the dialog cannot produce one — the catalog keeps presetting only as a readable kind key, and creating a command looks the kind up in the addable set alone. What the web offers instead is the same settings as five separate Setup commands, each placeable anywhere in the list: Machining Resolution — MachiningResolutionCommand, 0.125 mm by default, reading Machining Resolution [0.125 mm] in the list. Machining Motion Resolution — MachiningMotionResolutionCommand, Feed Per Cycle by default. Collision Detection — CollisionDetectionCommand, on by default. Pause on Failure — PauseOnFailureCommand, off by default. Physics — PhysicsCommand, on by default, its field declared physics-licence gated. Machining Motion Resolution ships an editor of its own. The other four declare their one scalar with [CommandField] and are served by the generic field editor, which builds their input and its server-localized label from that declaration — so the web ships strictly more here than one bundle panel, and none of the four needed frontend code. A project file never brings a reader to this panel either. Reading a stored bundle materializes those five commands in its place, in the order the bundle applies them, preceded by a Read-mode Record Meshed Geometry entry whenever the meshed-geometry read is enabled or a file is set. The bundle's own enable state is consumed into every entry the expansion produces, and the Record entry additionally keeps the bundle's read flag. A bundle stored as the project's bare root command expands the same way, and what the project saves from then on is the split commands. That leaves one case this panel serves: a PreSettingCommand an API caller constructed into the list in place, which has not yet round-tripped through a project file. It edits that command through the commands/{path}/presetting/* endpoints, and every field is a PUT of its own. When the Settings Take Effect A list runs its entries in order and skips any entry whose Enable box is clear. General Config's Run then assigns straight onto the session shell, in this order: the meshed-geometry read when it is enabled, the machining resolution, the motion resolution, collision detection, pause on failure, physics. So these are positional settings, not global pre-run settings. A program entry above this command plays under whatever was in force before it; entries below it play under these values, until something further down changes the session again. The five Setup commands state the same contract one setting at a time — each is documented as taking effect “from this command on” — and each can sit at a different point in the list, which is what having them separate buys. Layout In the web client the command owns two tree nodes: the command node carrying the machining settings, and one section child carrying the meshed-geometry file reference. Command Node Machining Resolution Number Field The model is MachiningResolution_mm. Unit mm, floored at 0, default 0.125. A free numeric field — the web offers no option list. Motion Resolution The model is MachiningMotionResolution. A caption over a select with three choices: Feed Per Cycle, Feed Per Tooth and Fixed. Fixed adds a row of two number fields inline, both floored at 0: Linear Resolution (mm) and Rotary Resolution (deg), the two values of FixedMachiningMotionResolution. Switching the type to Fixed carries the outgoing resolution's current linear and rotary values into the new fixed pair rather than resetting them. Enable Collision Detection CheckBox The model is EnableCollisionDetection. Default value: true Enable Pause On Failure CheckBox The model is EnablePauseOnFailure. Default value: false Enable Physics CheckBox The model is EnablePhysics. Default value: true Disabled unless the advanced-physics licence is held. The engine declares the same gate on the split Physics command's field, so both editors refuse the same edit for the same reason. Meshed Geometry Section Node The node's own tree checkbox is EnableReadMeshedGeom; the panel below it holds the file reference only. The flag decides what runs, not what can be edited, so the field stays editable whether or not the box is ticked — a read can be prepared before it is switched on. Meshed Geometry File Field The model is MeshedGeomFile. Hinted as a .wct or .stl path relative to the project folder. Browse Button Opens the shared server-side file explorer, filtered to .wct / .stl with an All Files fallback. It opens on the project directory and allows no other root, so a pick always yields a project-relative path. Every edit saves as it is made. A rejected save is reported and the panel reloads the command, so what is on screen is what the server holds. Note The session's machining resolution is seeded from the workpiece's initial resolution when a project is loaded or assigned — not on a runtime reset and not when the workpiece is swapped, so an explicit setting survives both. This command carries its own value, and overwrites the session's with it at the moment the command runs. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/PreSettingCommandPanel.vue — this editor in both of its modes: the command node's machining settings, and the meshed-geometry section's file field with its Browse button. wwwroot-src/src/components/controlTree/missionItemTypes.ts — maps the presetting kind to this panel, declares its one Meshed Geometry section child, and turns EnableReadMeshedGeom into that node's tree checkbox on read and on write. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — which nodes show a checkbox: a command node ticks its own enable flag, a section node with an enable flag ticks that, and every other node hides the box. A disabled command dims its whole subtree. wwwroot-src/src/components/controlTree/MissionSectionPanel.vue — renders one section of a command's editor headerless, the breadcrumb already naming it. wwwroot-src/src/components/widgets/FileExplorerDialog.vue — the server-side browser Browse opens, with the project-directory root and the filter list this panel passes it. wwwroot-src/src/components/mission/GenericCommandPanel.vue — the editor the four bespoke-panel-less Setup commands get, built from their declared scalar fields. wwwroot-src/src/api/mission.ts — loadPreSetting and the nine presetting/* PUTs behind it. wwwroot-src/src/i18n/en/mission.ts — the panel's wording, including the Rotary Resolution label and the meshed-geometry hint and filter names. wwwroot-src/src/stores/appState.ts — the physics-licence flag the Enable Physics checkbox reads. Missions/MissionCommandCatalog.cs — the addable set the Add Command dialog is built from: the reflected [CommandCatalog] entries, plus presetting as a read-only kind key that creation never looks at. Missions/MissionController.cs — the commands/{path}/presetting/* endpoints: enable-read-meshed-geom, meshed-geom-file, machining-resolution-mm, machining-motion-resolution-type, fixed-linear-resolution-mm, fixed-rotary-resolution-deg, enable-collision-detection, enable-pause-on-failure and enable-physics. The type switch is where the current linear and rotary values are carried into a new fixed resolution. HiAPI Engine HiNc/SessionCommands/PreSettingCommand.cs — the model, its defaults, the order Run applies them onto the session shell, and the expansion into the split Setup commands. HiNc/SessionCommands/CommandCatalogAttribute.cs — the attribute the catalog reflects, and the five categories. A command without it stays loadable from project files but is not offered for creation. HiNc/SessionCommands/CommandFieldAttribute.cs — the scalar-field declaration the generic editor renders, with its label, unit and physics-licence gate. HiNc/SessionCommands/ListCommand.cs — the in-order run that skips disabled entries, and the XML read path that expands a stored bundle in place. HiNc/MachiningProcs/MachiningProject.cs — the same expansion for a bundle stored as the project's bare root command. HiNc/SessionCommands/MachiningResolutionCommand.cs, HiNc/SessionCommands/MachiningMotionResolutionCommand.cs, HiNc/SessionCommands/CollisionDetectionCommand.cs, HiNc/SessionCommands/PauseOnFailureCommand.cs and HiNc/SessionCommands/PhysicsCommand.cs — the five Setup commands the web catalog offers, their defaults and their list titles. The detection, pause and physics settings each carry the “from this command on” wording. HiNc/MachiningProcs/LocalProjectService.cs — the session's machining resolution and the seeding from the workpiece's initial resolution on project load or assignment. See Also PostExecutionCommand Panel — the other half of the positional pair: these settings apply forward, those outputs cover everything up to there The Other Commands — the five Setup commands this bundle expands into, as a task Mission — the rest of the command panels"
},
"anatomy/execution/mission/index.html": {
"href": "anatomy/execution/mission/index.html",
@@ -117,7 +117,7 @@
"anatomy/execution/mission/script-command-panel.html": {
"href": "anatomy/execution/mission/script-command-panel.html",
"title": "Script Command Panel | HiAPI-C# 2025",
- "summary": "Script Command Panel The key model is ScriptCommand. The command holds two values: ScriptText, a C# script, and ScriptTitle, the name it runs under. Both are written into the project file, so the script travels with the project. Run evaluates the text against the session shell as the globals object, and when the script returns a sequence of actions that sequence is yielded into the run. The title is what the mission row and the tree node show: the label is composed as Script [title], falling back to a bare Script while the title is empty. A newly added command starts empty on both clients — no title, no text. The panel renders on the command's own node in the Mission branch of the Execution page's Control Tree, below the move / duplicate / delete control bar. A single-purpose kind like this one embeds its whole editor on that node rather than growing section child nodes. Its tree checkbox only decides whether the run plays the command; a disabled script is skipped during play and its editor stays fully usable. Layout Head Line Script Title Text Field The model is ScriptTitle. Labelled “Title (optional)” on the web, “Script Title” on WPF. Autosave Indicator (web) Shares the title row. See Saving. Script Editor Area The model is ScriptText. Fills the rest of the panel. The Editor The web editor is CodeMirror 6 running the mission-script mode: a stream tokenizer written for the dialect a mission script actually is — top-level statements, not a compilation unit. It colours keywords and boolean literals, strings (plain, verbatim @\"\", interpolated $\"\" and $@\"\"), character literals, hex and floating-point numbers, line and block comments, and it tags a call site apart from a plain identifier. Because it is linear rather than a parser, every identifier of the same kind gets the same colour no matter where it sits in the file. The C# Lezer grammar the client also ships is not what this editor runs: its compilationUnit rule rejects top-level statements, so it would recover from an error on line 1 and tag identical names inconsistently. That grammar serves the separate csharp mode a .cs file opens in elsewhere in the app. Nothing in the highlighting is semantic. Everything the editor knows about types and members comes from the backend, through completion. Completion Typing an identifier — or asking explicitly — sends the whole script text plus the zero-based cursor offset to POST /api/script/completions, and the response is an items array. Each item carries a label, a kind already normalised to CodeMirror's own completion type names, a detail (the signature, shown dim beside the label), a documentation (the XML , rendered to plain text by Roslyn and shown in the popup's info pane) and an insertText. Completion is Roslyn in-process, over the very ScriptOptions — the same references and imports — that the run compiles the script with, so the session shell's members and the runtime API surface complete for real rather than by name matching. The service prepends the synthesised using / using static prefix those imports need and offsets the cursor by its length, so what the list offers is what the evaluator will see. A cancelled request is answered 499, and a result that arrives after the editor has moved on is dropped rather than shown. Picking a method inserts the server-formatted call with each argument as a Tab stop, so the cursor lands on the first parameter and Tab walks the rest; a method with no parameters inserts as (). Properties, fields, types and keywords insert as their plain text — a snippet there would be noise. Saving There is no Save button. Every keystroke in either field updates the model and schedules one save 500 ms after the last edit, and the pill beside the title reports the state: Idle, Dirty, Staging…, Staged, or Error with the message in its tooltip. Staged means the server runtime holds the value — its tooltip says so, because a staged script is not yet a committed project. The write is a single PUT carrying the script text, the title and the content hash the last load or save handed back. Each field is applied only when the body carries it. The response returns the new hash to chain into the next save. Two prompts guard the edges, each with three buttons because neither is a yes/no question: Unsaved Changes, raised when the Control Tree tries to move the selection off a command whose save is still pending: Save & switch flushes and then allows the switch, Discard drops the pending write, Cancel keeps the selection where it is. Script changed elsewhere, raised when the server rejects the save because the hash no longer matches — another tab, or a project reload, changed the command underneath. The rejection carries the server's current text, title and hash, so the panel can offer Discard & reload, Force overwrite, or Cancel without a second round trip. The panel snapshots its command path at mount, and the autosave closes over that snapshot rather than over the live selection, so a flush can never land on whichever command happens to be selected when it fires. After each successful save the tree relabels the node in place instead of rebuilding the branch, which would remount the editor mid-edit. The Compile Gate A script that does not compile does nothing at run time: the command reports the compile failure into the run's message stream and yields no work, so the run continues without it. Starting a run therefore compile-checks every enabled script first — with the same script options and globals type the evaluator uses — and refuses to start when any of them has an error, naming the first offender's title, path, diagnostic id, message and line. The SPA's Start sends nothing to bypass that check, so the refusal is what a user sees. The same check is also an endpoint of its own, per command and for the whole mission. The Two Clients The desktop client edits the same command in AvalonEdit: a bold Script Title label with its text box, a Script Text label, and the editor with C# syntax highlighting and a line-number gutter, bound to the command through an attached behaviour. There is no completion popup and no autosave — the binding writes straight into the command as the text changes. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/ScriptCommandPanel.vue — this panel: the title row sharing its line with the autosave indicator, the editor below it, the 500 ms autosave, the two three-button prompts, the path snapshot taken at mount, and the change notice that relabels the tree node. wwwroot-src/src/components/widgets/TextEditor.vue — the CodeMirror 6 wrapper: language and read-only swapped through compartments, CRLF normalised on the way in so an unedited file cannot dirty the autosave, an opt-in completion source that overrides the language's own, and a widened monospace popup so full signatures fit before the dim detail column truncates. wwwroot-src/src/components/widgets/missionScriptLanguage.ts — the mission-script mode: the keyword set, the string and character rules, numbers, comments, call-site tagging, and its own highlight style. wwwroot-src/src/components/mission/csharpCompletionSource.ts — the completion source: fires on an identifier prefix or an explicit request, sends the whole document with the cursor offset, drops stale results, and applies every candidate as a snippet. wwwroot-src/src/api/scriptCompletion.ts — the typed wrapper over the completion endpoint and the kind union that maps straight onto CodeMirror's completion types. wwwroot-src/src/api/mission.ts — the script command shape (text, title, content hash), its loader, the save that carries the expected hash, and the conflict error that carries the server's current copy. wwwroot-src/src/composables/useAutoSave.ts — the debounce, the state machine and the conflict recovery behind the panel's saving, saved and error states. wwwroot-src/src/components/widgets/AutoSaveIndicator.vue — the status pill beside the title. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — funnels every selection change through the active panel's switch gate, which is how the Unsaved Changes prompt gets its say. wwwroot-src/src/components/controlTree/missionItemTypes.ts — maps the script kind to this panel and gives it no section children, so the whole editor lives on the command node. wwwroot-src/src/i18n/en/mission.ts — the panel's wording: both prompts, their buttons, and the load and save error contexts. Missions/ScriptCompletionController.cs — POST /api/script/completions: a thin wrapper that returns the items, 499 on cancellation and 500 with the message on failure. Missions/ScriptCompletionService.cs — the singleton holding one workspace, built from the same script options the session evaluates with, and the snippet insert text it builds for methods. Missions/ScriptCompileCheckService.cs — compiles a script without running it, and walks the mission for every enabled one; it backs the two compile-check endpoints and the pre-start gate. Missions/MissionController.cs — the single script PUT with its hash-based concurrency, the content hash stamped into the command snapshot, and the two compile-check endpoints. Execution/ExecutionController.cs — the start gate that compile-checks the enabled scripts and refuses to run while one of them has an error. HiAPI Engine HiNc/SessionCommands/ScriptCommand.cs — the model: the title and text, the Program-category catalog registration, the XML round-trip that puts the script into the project file, the evaluation against the session shell with a compile failure reported into the run's message stream, the returned actions yielded into the run, and the label rule that brackets the title after the command name. See Also NcCodeCommand Panel — the other command that stores its text in the project, and the one that ships no editor chrome The Other Commands — the task this command serves, beside the settings and output kinds Mission — the rest of the command panels"
+ "summary": "Script Command Panel The key model is ScriptCommand. The command holds two values: ScriptText, a C# script, and ScriptTitle, the name it runs under. Both are written into the project file, so the script travels with the project. Run evaluates the text against the session shell as the globals object, and when the script returns a sequence of actions that sequence is yielded into the run. The title is what the mission row and the tree node show: the label is composed as Script [title], falling back to a bare Script while the title is empty. A newly added command starts empty on both clients — no title, no text. The panel renders on the command's own node in the Mission branch of the Execution page's Control Tree, below the move / duplicate / delete control bar. A single-purpose kind like this one embeds its whole editor on that node rather than growing section child nodes. Its tree checkbox only decides whether the run plays the command; a disabled script is skipped during play and its editor stays fully usable. Layout Head Line Script Title Text Field The model is ScriptTitle. Labelled \"Title (optional)\". Autosave Indicator (web) Shares the title row. See Saving. Script Editor Area The model is ScriptText. Fills the rest of the panel. The Editor The web editor is CodeMirror 6 running the mission-script mode: a stream tokenizer written for the dialect a mission script actually is — top-level statements, not a compilation unit. It colours keywords and boolean literals, strings (plain, verbatim @\"\", interpolated $\"\" and $@\"\"), character literals, hex and floating-point numbers, line and block comments, and it tags a call site apart from a plain identifier. Because it is linear rather than a parser, every identifier of the same kind gets the same colour no matter where it sits in the file. The C# Lezer grammar the client also ships is not what this editor runs: its compilationUnit rule rejects top-level statements, so it would recover from an error on line 1 and tag identical names inconsistently. That grammar serves the separate csharp mode a .cs file opens in elsewhere in the app. Nothing in the highlighting is semantic. Everything the editor knows about types and members comes from the backend, through completion. Completion Typing an identifier — or asking explicitly — sends the whole script text plus the zero-based cursor offset to POST /api/script/completions, and the response is an items array. Each item carries a label, a kind already normalised to CodeMirror's own completion type names, a detail (the signature, shown dim beside the label), a documentation (the XML , rendered to plain text by Roslyn and shown in the popup's info pane) and an insertText. Completion is Roslyn in-process, over the very ScriptOptions — the same references and imports — that the run compiles the script with, so the session shell's members and the runtime API surface complete for real rather than by name matching. The service prepends the synthesised using / using static prefix those imports need and offsets the cursor by its length, so what the list offers is what the evaluator will see. A cancelled request is answered 499, and a result that arrives after the editor has moved on is dropped rather than shown. Picking a method inserts the server-formatted call with each argument as a Tab stop, so the cursor lands on the first parameter and Tab walks the rest; a method with no parameters inserts as (). Properties, fields, types and keywords insert as their plain text — a snippet there would be noise. Saving There is no Save button. Every keystroke in either field updates the model and schedules one save 500 ms after the last edit, and the pill beside the title reports the state: Idle, Dirty, Staging…, Staged, or Error with the message in its tooltip. Staged means the server runtime holds the value — its tooltip says so, because a staged script is not yet a committed project. The write is a single PUT carrying the script text, the title and the content hash the last load or save handed back. Each field is applied only when the body carries it. The response returns the new hash to chain into the next save. Two prompts guard the edges, each with three buttons because neither is a yes/no question: Unsaved Changes, raised when the Control Tree tries to move the selection off a command whose save is still pending: Save & switch flushes and then allows the switch, Discard drops the pending write, Cancel keeps the selection where it is. Script changed elsewhere, raised when the server rejects the save because the hash no longer matches — another tab, or a project reload, changed the command underneath. The rejection carries the server's current text, title and hash, so the panel can offer Discard & reload, Force overwrite, or Cancel without a second round trip. The panel snapshots its command path at mount, and the autosave closes over that snapshot rather than over the live selection, so a flush can never land on whichever command happens to be selected when it fires. After each successful save the tree relabels the node in place instead of rebuilding the branch, which would remount the editor mid-edit. The Compile Gate A script that does not compile does nothing at run time: the command reports the compile failure into the run's message stream and yields no work, so the run continues without it. Starting a run therefore compile-checks every enabled script first — with the same script options and globals type the evaluator uses — and refuses to start when any of them has an error, naming the first offender's title, path, diagnostic id, message and line. The SPA's Start sends nothing to bypass that check, so the refusal is what a user sees. The same check is also an endpoint of its own, per command and for the whole mission. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/mission/ScriptCommandPanel.vue — this panel: the title row sharing its line with the autosave indicator, the editor below it, the 500 ms autosave, the two three-button prompts, the path snapshot taken at mount, and the change notice that relabels the tree node. wwwroot-src/src/components/widgets/TextEditor.vue — the CodeMirror 6 wrapper: language and read-only swapped through compartments, CRLF normalised on the way in so an unedited file cannot dirty the autosave, an opt-in completion source that overrides the language's own, and a widened monospace popup so full signatures fit before the dim detail column truncates. wwwroot-src/src/components/widgets/missionScriptLanguage.ts — the mission-script mode: the keyword set, the string and character rules, numbers, comments, call-site tagging, and its own highlight style. wwwroot-src/src/components/mission/csharpCompletionSource.ts — the completion source: fires on an identifier prefix or an explicit request, sends the whole document with the cursor offset, drops stale results, and applies every candidate as a snippet. wwwroot-src/src/api/scriptCompletion.ts — the typed wrapper over the completion endpoint and the kind union that maps straight onto CodeMirror's completion types. wwwroot-src/src/api/mission.ts — the script command shape (text, title, content hash), its loader, the save that carries the expected hash, and the conflict error that carries the server's current copy. wwwroot-src/src/composables/useAutoSave.ts — the debounce, the state machine and the conflict recovery behind the panel's saving, saved and error states. wwwroot-src/src/components/widgets/AutoSaveIndicator.vue — the status pill beside the title. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — funnels every selection change through the active panel's switch gate, which is how the Unsaved Changes prompt gets its say. wwwroot-src/src/components/controlTree/missionItemTypes.ts — maps the script kind to this panel and gives it no section children, so the whole editor lives on the command node. wwwroot-src/src/i18n/en/mission.ts — the panel's wording: both prompts, their buttons, and the load and save error contexts. Missions/ScriptCompletionController.cs — POST /api/script/completions: a thin wrapper that returns the items, 499 on cancellation and 500 with the message on failure. Missions/ScriptCompletionService.cs — the singleton holding one workspace, built from the same script options the session evaluates with, and the snippet insert text it builds for methods. Missions/ScriptCompileCheckService.cs — compiles a script without running it, and walks the mission for every enabled one; it backs the two compile-check endpoints and the pre-start gate. Missions/MissionController.cs — the single script PUT with its hash-based concurrency, the content hash stamped into the command snapshot, and the two compile-check endpoints. Execution/ExecutionController.cs — the start gate that compile-checks the enabled scripts and refuses to run while one of them has an error. HiAPI Engine HiNc/SessionCommands/ScriptCommand.cs — the model: the title and text, the Program-category catalog registration, the XML round-trip that puts the script into the project file, the evaluation against the session shell with a compile failure reported into the run's message stream, the returned actions yielded into the run, and the label rule that brackets the title after the command name. See Also NcCodeCommand Panel — the other command that stores its text in the project, and the one that ships no editor chrome The Other Commands — the task this command serves, beside the settings and output kinds Mission — the rest of the command panels"
},
"anatomy/execution/program.html": {
"href": "anatomy/execution/program.html",
@@ -132,7 +132,7 @@
"anatomy/execution/step-present-dialog.html": {
"href": "anatomy/execution/step-present-dialog.html",
"title": "Step Present Dialog | HiAPI-C# 2025",
- "summary": "Step Present Dialog Shipped Surface The dialog has no route and no Control-Tree node. It is a modal on the Execution page (/execution), opened by the tune icon button on the Step Properties panel's title bar in the Step Info column — so it is reachable only while that column and that panel are shown. The button sits next to the list it configures. In the WPF application the same editor is a window opened from the Preference Menu Dropdown. The dialog's own view models are the two fetched values, categories and displayedKeys. The server models they mirror are UserService.CandidateStepPresentKeyList plus UserService.StepPresentAccessDictionary (the candidates) and UserConfig.DisplayedStepPresentKeyList (the ordered displayed list). The dialog's only prop is its open/closed flag. Layout Header Title, then the counts — n displayed / n available The save-state line (Saving… / Saved / error), which stands in for a Save button Reset and close Splitter Candidate Keys Panel (left) One accordion per category, in the order the server sends them A tri-state checkbox on the category header One checkbox per key, with the key's label and unit Add Selected Displayed Keys Panel (right) One row per displayed key, in UserConfig.DisplayedStepPresentKeyList order, drag-reorderable Per-row up / down / remove Clear Rows are labelled from the per-key payload the server sends — key, name, shortName, unit. The visible label is shortName, falling back to key, with a unit appended in parentheses when it is not None. The tooltip carries the full name above the raw key. Behavior Adding is a two-step gesture on the left: tick candidates — individually, or a whole category through the header's tri-state checkbox — then press Add Selected. A key that is already displayed has its checkbox disabled and shows a check badge instead. Removing lives only on the right, per row or through Clear. Every add, remove and reorder persists immediately: the dialog POSTs the whole ordered list, the server drops unknown keys and duplicates and answers with the effective list, and the dialog re-syncs to that answer. Reset is a DELETE that empties the list; both Reset and Clear go through a confirmation. A failure flips the header state to its error label and notifies; a failed list write additionally re-reads from the server, so the editor never drifts from persisted state. The dialog fetches fresh on every open, and re-pulls when the UI language changes, because the category and key labels arrive already localized. The list this dialog configures omits StepIndex even when it is displayed: the Step Info column's group bar already shows the step index as a badge, so the panel filters that one row out rather than repeating it. Categories Categories are a GUI-level grouping of keys. Each ships as a stable code plus a display label: the code is the transport identity the client compares and keys its UI state on, the label is display text only. The seven, in canonical order: fileCmdFlagTimeSystem — “File / Command / Flag / Time / System” (StepIndex, FileNo, LineNo, FilePath, LineText, FlagsText, EndTimecode, StepDuration). toolFeedrateSpindle — “Tool / Feedrate / Spindle Speed” (ToolId, SpindleSpeed_rpm, Feedrate_mmdmin, CuttingSpeed_mmds, …). coordinateMove — “Coordinate / Move” (Cl, MoveOnProgramCoordinate, MovingLength_mm, and every MC. key). cuttingGeometryChip — “Cutting Geometry / Chip / Bias / Roughness” (CuttingDepth_mm, ChipThickness_um, Mrr_mm3ds, …). mechanicsPowerEnergy — “Mechanics / Power / Energy” (MaxAbsForce_N, SpindleOutputPower_W, AvgAbsTorque_Nm, …). temperatureWear — “Temperature / Wear” (ChipTemperature_C, AccumulatedFlankWearWidth_um, …). custom — “Custom”, the catch-all for every key the mapping does not place, including the keys registered at run time through UserService.AdditionalStepPresentAccess. All seven are always returned; nothing gates any of them, and the candidate list is read from UserService.CandidateStepPresentKeyList rather than from MachiningStep directly, so runtime-registered keys are included. Each client carries its own copy of the key → category mapping: ResolveStepPresentCategory on the webservice, GetKeyCategory in the WPF window. The two are kept in step by hand, with the seven category codes as the shared contract — adding a property means editing both. Labels and Localization The web app resolves name and shortName server-side for the requested language from the shipped step-present catalog, laid over the live PresentAttribute.Name and ShortName values — those are the English truth and the fallback for a missing catalog file or key. Unit is sent as-is and does not localize. The dialog pins the language with a ?lang= argument on the request and re-pulls when the UI locale changes. The WPF window resolves the same labels locally, through a resource manager over MachiningStep; a key with no translation keeps its original value. Refer to the code to apply PresentAttribute: internal static void ShowStepPresent( UserService userEnv, MachiningStep machiningStep) { foreach (var entry in userEnv.DisplayedStepPresentAccessList) { var present = entry.Value.Present; var valueText = string.Format(\"{0:\" + present.DataFormatString + \"}\", entry.Value.GetValueFunc.Invoke(machiningStep)); Console.WriteLine($\"{present.ShortName}: {valueText} {present.TailUnitString} ({present.Name} [{entry.Key}])\"); } } See Also Selected-Step Info Panel — the panel whose property list this page configures Preference Menu Dropdown — the dropdown that hosts this entry in the WPF client Inspecting a Step — the task this dialog serves, as a procedure Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/preference/StepPresentPreferenceDialog.vue — the dialog itself: a Candidate Keys / Displayed Keys splitter, category accordions keyed on the stable category code, the per-category tri-state checkbox, Add Selected, drag-reorder plus up / down / remove and Clear, the header counts, Reset and close, and the auto-save state. Refetches on every open and on a locale change. wwwroot-src/src/components/execution/SelectedStepInfoPanel.vue — what opens it: the tune icon button teleported into the panel's title bar (the hosting expansion header, or the panel's own bar when standalone). Also the list the dialog configures, with the StepIndex row filtered out. wwwroot-src/src/components/execution/StepInfoGroupBar.vue — the Step Info column's group bar, which carries the step-index badge instead. wwwroot-src/src/pages/ExecutionPage.vue — the only surface the dialog is reachable from. wwwroot-src/src/api/preference.ts — getStepPresentKeys (language-pinned) / setStepPresentKeys / resetStepPresentKeys, and the StepPresentKeyInfo / StepPresentCategory / StepPresentKeysSnapshot types. Environments/PreferenceController.cs — GET / POST / DELETE /api/preference/step-present-keys, the seven-entry category table, the ResolveStepPresentCategory mapping, and persistence of DisplayedStepPresentKeyList through SaveUserConfig(). Environments/PresentCatalogService.cs — server-side localization of name and shortName from the shipped step-present catalog, with the live PresentAttribute data as the English base and fallback. Environments/UserService.cs — StepPresentAccessDictionary and CandidateStepPresentKeyList, the candidate-key model. Environments/UserConfig.cs — DisplayedStepPresentKeyList, the ordered displayed-key model."
+ "summary": "Step Present Dialog Shipped Surface The dialog has no route and no Control-Tree node. It is a modal on the Execution page (/execution), opened by the tune icon button on the Step Properties panel's title bar in the Step Info column — so it is reachable only while that column and that panel are shown. The button sits next to the list it configures. The dialog's own view models are the two fetched values, categories and displayedKeys. The server models they mirror are UserService.CandidateStepPresentKeyList plus UserService.StepPresentAccessDictionary (the candidates) and UserConfig.DisplayedStepPresentKeyList (the ordered displayed list). The dialog's only prop is its open/closed flag. Layout Header Title, then the counts — n displayed / n available The save-state line (Saving… / Saved / error), which stands in for a Save button Reset and close Splitter Candidate Keys Panel (left) One accordion per category, in the order the server sends them A tri-state checkbox on the category header One checkbox per key, with the key's label and unit Add Selected Displayed Keys Panel (right) One row per displayed key, in UserConfig.DisplayedStepPresentKeyList order, drag-reorderable Per-row up / down / remove Clear Rows are labelled from the per-key payload the server sends — key, name, shortName, unit. The visible label is shortName, falling back to key, with a unit appended in parentheses when it is not None. The tooltip carries the full name above the raw key. Behavior Adding is a two-step gesture on the left: tick candidates — individually, or a whole category through the header's tri-state checkbox — then press Add Selected. A key that is already displayed has its checkbox disabled and shows a check badge instead. Removing lives only on the right, per row or through Clear. Every add, remove and reorder persists immediately: the dialog POSTs the whole ordered list, the server drops unknown keys and duplicates and answers with the effective list, and the dialog re-syncs to that answer. Reset is a DELETE that empties the list; both Reset and Clear go through a confirmation. A failure flips the header state to its error label and notifies; a failed list write additionally re-reads from the server, so the editor never drifts from persisted state. The dialog fetches fresh on every open, and re-pulls when the UI language changes, because the category and key labels arrive already localized. The list this dialog configures omits StepIndex even when it is displayed: the Step Info column's group bar already shows the step index as a badge, so the panel filters that one row out rather than repeating it. Categories Categories are a GUI-level grouping of keys. Each ships as a stable code plus a display label: the code is the transport identity the client compares and keys its UI state on, the label is display text only. The seven, in canonical order: fileCmdFlagTimeSystem — “File / Command / Flag / Time / System” (StepIndex, FileNo, LineNo, FilePath, LineText, FlagsText, EndTimecode, StepDuration). toolFeedrateSpindle — “Tool / Feedrate / Spindle Speed” (ToolId, SpindleSpeed_rpm, Feedrate_mmdmin, CuttingSpeed_mmds, …). coordinateMove — “Coordinate / Move” (Cl, MoveOnProgramCoordinate, MovingLength_mm, and every MC. key). cuttingGeometryChip — “Cutting Geometry / Chip / Bias / Roughness” (CuttingDepth_mm, ChipThickness_um, Mrr_mm3ds, …). mechanicsPowerEnergy — “Mechanics / Power / Energy” (MaxAbsForce_N, SpindleOutputPower_W, AvgAbsTorque_Nm, …). temperatureWear — “Temperature / Wear” (ChipTemperature_C, AccumulatedFlankWearWidth_um, …). custom — “Custom”, the catch-all for every key the mapping does not place, including the keys registered at run time through UserService.AdditionalStepPresentAccess. All seven are always returned; nothing gates any of them, and the candidate list is read from UserService.CandidateStepPresentKeyList rather than from MachiningStep directly, so runtime-registered keys are included. The key → category mapping is ResolveStepPresentCategory on the webservice, with the seven category codes as its contract. Labels and Localization The web app resolves name and shortName server-side for the requested language from the shipped step-present catalog, laid over the live PresentAttribute.Name and ShortName values — those are the English truth and the fallback for a missing catalog file or key. Unit is sent as-is and does not localize. The dialog pins the language with a ?lang= argument on the request and re-pulls when the UI locale changes. Refer to the code to apply PresentAttribute: internal static void ShowStepPresent( UserService userEnv, MachiningStep machiningStep) { foreach (var entry in userEnv.DisplayedStepPresentAccessList) { var present = entry.Value.Present; var valueText = string.Format(\"{0:\" + present.DataFormatString + \"}\", entry.Value.GetValueFunc.Invoke(machiningStep)); Console.WriteLine($\"{present.ShortName}: {valueText} {present.TailUnitString} ({present.Name} [{entry.Key}])\"); } } See Also Selected-Step Info Panel — the panel whose property list this page configures Preference Menu Dropdown — the preference surface this editor sits beside Inspecting a Step — the task this dialog serves, as a procedure Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/preference/StepPresentPreferenceDialog.vue — the dialog itself: a Candidate Keys / Displayed Keys splitter, category accordions keyed on the stable category code, the per-category tri-state checkbox, Add Selected, drag-reorder plus up / down / remove and Clear, the header counts, Reset and close, and the auto-save state. Refetches on every open and on a locale change. wwwroot-src/src/components/execution/SelectedStepInfoPanel.vue — what opens it: the tune icon button teleported into the panel's title bar (the hosting expansion header, or the panel's own bar when standalone). Also the list the dialog configures, with the StepIndex row filtered out. wwwroot-src/src/components/execution/StepInfoGroupBar.vue — the Step Info column's group bar, which carries the step-index badge instead. wwwroot-src/src/pages/ExecutionPage.vue — the only surface the dialog is reachable from. wwwroot-src/src/api/preference.ts — getStepPresentKeys (language-pinned) / setStepPresentKeys / resetStepPresentKeys, and the StepPresentKeyInfo / StepPresentCategory / StepPresentKeysSnapshot types. Environments/PreferenceController.cs — GET / POST / DELETE /api/preference/step-present-keys, the seven-entry category table, the ResolveStepPresentCategory mapping, and persistence of DisplayedStepPresentKeyList through SaveUserConfig(). Environments/PresentCatalogService.cs — server-side localization of name and shortName from the shipped step-present catalog, with the live PresentAttribute data as the English base and fallback. Environments/UserService.cs — StepPresentAccessDictionary and CandidateStepPresentKeyList, the candidate-key model. Environments/UserConfig.cs — DisplayedStepPresentKeyList, the ordered displayed-key model."
},
"anatomy/execution/strip-charts.html": {
"href": "anatomy/execution/strip-charts.html",
@@ -142,7 +142,7 @@
"anatomy/general-setup/background-coolant.html": {
"href": "anatomy/general-setup/background-coolant.html",
"title": "Background / Coolant | HiAPI-C# 2025",
- "summary": "Background / Coolant Background and Coolant are two leaves of the General Setup page's Control Tree (/general-setup?tree=equipment/background, /general-setup?tree=equipment/coolant), sitting directly under the General Setup group between Spindle Capability and Fixture. They are two tree items rather than a page, so the older /equipment/background-coolant path redirects onto the Background leaf. Both are served by one panel component, which branches on the selected node's role path. They edit the thermal condition on the project's authored equipment face, SetupEquipment, reached as SetupEquipment: BackgroundTemperature_C (Background leaf) the whole CoolantHeatCondition (Coolant leaf) — file-first, see below Key Model: SetupEquipment (+ its CoolantHeatCondition). Note The WPF desktop app has no surface for either value — no page, no panel, and no handler for the .CoolantHeatCondition extension. There, both are whatever the project XML carries on the equipment face, or the class defaults when the XML says nothing. Layout Background leaf — equipment/background, item type ThermalCondition Background Temperature NumberField (°C) — BackgroundTemperature_C. Coolant leaf — equipment/coolant, the same item type and the same panel (file pick on top, properties below, as on the workpiece material leaf) “Not attached” badge — visible until the first coolant-related save (see Lazy CoolantHeatCondition creation below). File row — FilePathInput (.CoolantHeatCondition, resource subfolder CoolantHeatCondition): a Select dropdown button whose menu holds Browse…, Browse Resource… and — only while a file is set — Clear, beside a read-only path input; it loads a saved condition by named root. A Save As… button follows it, prompting for a project-relative file to export the current condition to. Tracked in CoolantHeatConditionFile. The three standard cooling types ship as ready-made files in HiNc-Resource (Resource/CoolantHeatCondition/StandardForcedAir.default.CoolantHeatCondition, StandardOilBasedCoolant.default.CoolantHeatCondition and StandardWaterSolubleCoolant.default.CoolantHeatCondition), so Browse Resource… starts populated like the workpiece-material picker — picking a shipped file is the cooling-type selection. Name / Note — read-only mirror of the loaded condition. Property fields (always visible, under Name / Note): Coolant Temperature (°C) — CoolantTemperature_C. Flood Convection Coefficient (W/(m²·K)) — CoolantConvectionCoefficient_Wdm2K, min: 0. Mist / Flood Ratio — MistFloodConvectionRatio, min: 0. Off (Air) Convection Coefficient (W/(m²·K)) — OffConvectionCoefficient_Wdm2K, min: 0. Both leaves, with no project open: every control is disabled and a “no project — open one first” caption is shown. The panel fetches the snapshot itself on mount and gates on its hasEquipment flag, so the tree host holds no state for either leaf. Behavior File-based conditions (WorkpieceMaterial pattern). Picking a .CoolantHeatCondition file installs it as the whole condition (XFactory.GenByFile); Save As… exports the current values and renames the condition after the file (IPreferredFileName). While CoolantHeatConditionFile is set, the project save externalizes the condition as relPath and regenerates the side-file (a resource pick is copied into the project on save); with no file the bare inline shape is kept byte-compatible. Coefficient edits tune this project's copy. The static presets on CoolantHeatCondition (StandardPresets / ApplyPreset / MatchStandardPreset) are the API-side source the shipped files are authored from. The file row's Clear entry does nothing here. FilePathInput reports a clear by emitting update:modelValue(null), and this panel binds the widget's value one-way and listens only for picked — so the entry is rendered, is clickable while a file is set, and drops nothing. Clearing the tracked file is therefore not reachable from this leaf at all; the reference changes only by loading another file or by a Save As. The .default marker never survives a user save. The shipped resource files carry a .default ownership marker in their names. The Save As… prompt strips it from its prefill, and the controller strips it again from the name it stamps on the condition, so a user save cannot mint a file that masquerades as a shipped default. The “not attached” badge is unreachable, and the lazy creation behind it never fires. SetupEquipment initializes CoolantHeatCondition at its declaration and nothing assigns null to it — the project-XML read replaces the instance only when the element is present — so the controller's hasCoolant, which is a null test on that property, is true whenever a project is open. The badge is therefore rendered only in the no-equipment case the panel already covers with its own caption, and the null branch each scalar PUT carries is defensive rather than reached. What a fresh project actually carries is the class defaults, which are the water-soluble preset's values. Celsius is the wire format. CoolantHeatCondition stores Kelvin internally but exposes _C accessors that handle the conversion, and the DTO carries Celsius. Finite values only. Every field handler drops a null or non-finite entry before any request is made, so Infinity never reaches these endpoints even though the numeric widget can parse it. Background and coolant temperatures accept negatives (e.g. -40 °C for cryogenic coolant); the three convection fields are clamped to min: 0. The run sees it at once. The background-temperature write, all four condition scalars and the file load each end in the project service's ForwardSetupEnvironmentToExecution, which stamps the background temperature and the condition reference onto the runtime equipment face — including the lazily created condition, which otherwise would exist only on the authored side. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/ThermalConditionPanel.vue — the one panel both leaves share, branching on the node's last role-path segment: Background renders the single temperature field, Coolant the not-attached badge, the file row, the read-only Name / Note and the four property fields. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — declares the two ThermalCondition leaves (equipment/background, equipment/coolant) under the General Setup group, with no host-level init state. wwwroot-src/src/components/controlTree/itemTypes.ts — registers the ThermalCondition item type against that panel: no child tree, no geometry-cache chain. wwwroot-src/src/components/widgets/FilePathInput.vue — the file row widget: Browse… / Browse Resource… (opening at the CoolantHeatCondition resource subfolder) / Clear. wwwroot-src/src/components/widgets/NumericInput.vue — the numeric field used by every value on both leaves, and the source of the min: 0 clamp on the three convection fields. wwwroot-src/src/api/backgroundCoolant.ts — typed client for /api/mech/background-coolant/*: the flat snapshot, the load / save-as pair, and the five scalar PUTs. wwwroot-src/src/router/routes.ts — carries the equipment/background-coolant redirect, which lands on general-setup?tree=equipment/background. Mech/BackgroundCoolantController.cs — REST surface at /api/mech/background-coolant over the authored equipment face: GET / — flat snapshot { hasEquipment, backgroundTemperature_C, hasCoolant, coolantTemperature_C, coolantConvectionCoefficient_Wdm2K, mistFloodConvectionRatio, offConvectionCoefficient_Wdm2K, coolantName, coolantNote, coolantHeatConditionFile }. POST /load, POST /save-as — { rootName, relFile }: install a .CoolantHeatCondition file / export the current condition. Both resolve the path under the named root and refuse anything that escapes it, and both record the result in CoolantHeatConditionFile as a project-relative path when it lands under the project. Save-as appends the extension when it is missing and renames the condition after the file (IPreferredFileName) with the .default marker stripped. PUT /background-temperature-c — set BackgroundTemperature_C. PUT /coolant-temperature-c, PUT /coolant-convection-coefficient-wdm2k, PUT /mist-flood-convection-ratio, PUT /off-convection-coefficient-wdm2k — the four condition scalars, all through one helper that lazy-creates the condition when absent, writes it, and forwards to the runtime face. HiAPI Engine HiMech/Physics/CoolantHeatCondition.cs — the model: Kelvin storage with _C accessors, the flood / mist-ratio / off convection coefficients, Name and Note with PreferredFileName, and the StandardPresets / ApplyPreset / MatchStandardPreset statics behind the shipped resource files. HiMech/Machining/MachiningEquipmentUtils/SetupEquipment.cs — the authored equipment face that owns the background temperature, the condition and its file reference, and externalizes the condition to the side-file when that reference is set. See Also Spindle Capability — sibling equipment editor, editing the same authored equipment face. Coolant (manual) — the end-user task: picking a cooling type in the application. Coolant Model — what the values on this panel mean, which one a running program applies, and how the condition is stored."
+ "summary": "Background / Coolant Background and Coolant are two leaves of the General Setup page's Control Tree (/general-setup?tree=equipment/background, /general-setup?tree=equipment/coolant), sitting directly under the General Setup group between Spindle Capability and Fixture. They are two tree items rather than a page, so the older /equipment/background-coolant path redirects onto the Background leaf. Both are served by one panel component, which branches on the selected node's role path. They edit the thermal condition on the project's authored equipment face, SetupEquipment, reached as SetupEquipment: BackgroundTemperature_C (Background leaf) the whole CoolantHeatCondition (Coolant leaf) — file-first, see below Key Model: SetupEquipment (+ its CoolantHeatCondition). Layout Background leaf — equipment/background, item type ThermalCondition Background Temperature NumberField (°C) — BackgroundTemperature_C. Coolant leaf — equipment/coolant, the same item type and the same panel (file pick on top, properties below, as on the workpiece material leaf) “Not attached” badge — visible until the first coolant-related save (see Lazy CoolantHeatCondition creation below). File row — FilePathInput (.CoolantHeatCondition, resource subfolder CoolantHeatCondition): a Select dropdown button whose menu holds Browse…, Browse Resource… and — only while a file is set — Clear, beside a read-only path input; it loads a saved condition by named root. A Save As… button follows it, prompting for a project-relative file to export the current condition to. Tracked in CoolantHeatConditionFile. The three standard cooling types ship as ready-made files in HiNc-Resource (Resource/CoolantHeatCondition/StandardForcedAir.default.CoolantHeatCondition, StandardOilBasedCoolant.default.CoolantHeatCondition and StandardWaterSolubleCoolant.default.CoolantHeatCondition), so Browse Resource… starts populated like the workpiece-material picker — picking a shipped file is the cooling-type selection. Name / Note — read-only mirror of the loaded condition. Property fields (always visible, under Name / Note): Coolant Temperature (°C) — CoolantTemperature_C. Flood Convection Coefficient (W/(m²·K)) — CoolantConvectionCoefficient_Wdm2K, min: 0. Mist / Flood Ratio — MistFloodConvectionRatio, min: 0. Off (Air) Convection Coefficient (W/(m²·K)) — OffConvectionCoefficient_Wdm2K, min: 0. Both leaves, with no project open: every control is disabled and a “no project — open one first” caption is shown. The panel fetches the snapshot itself on mount and gates on its hasEquipment flag, so the tree host holds no state for either leaf. Behavior File-based conditions (WorkpieceMaterial pattern). Picking a .CoolantHeatCondition file installs it as the whole condition (XFactory.GenByFile); Save As… exports the current values and renames the condition after the file (IPreferredFileName). While CoolantHeatConditionFile is set, the project save externalizes the condition as relPath and regenerates the side-file (a resource pick is copied into the project on save); with no file the bare inline shape is kept byte-compatible. Coefficient edits tune this project's copy. The static presets on CoolantHeatCondition (StandardPresets / ApplyPreset / MatchStandardPreset) are the API-side source the shipped files are authored from. The file row's Clear entry does nothing here. FilePathInput reports a clear by emitting update:modelValue(null), and this panel binds the widget's value one-way and listens only for picked — so the entry is rendered, is clickable while a file is set, and drops nothing. Clearing the tracked file is therefore not reachable from this leaf at all; the reference changes only by loading another file or by a Save As. The .default marker never survives a user save. The shipped resource files carry a .default ownership marker in their names. The Save As… prompt strips it from its prefill, and the controller strips it again from the name it stamps on the condition, so a user save cannot mint a file that masquerades as a shipped default. The “not attached” badge is unreachable, and the lazy creation behind it never fires. SetupEquipment initializes CoolantHeatCondition at its declaration and nothing assigns null to it — the project-XML read replaces the instance only when the element is present — so the controller's hasCoolant, which is a null test on that property, is true whenever a project is open. The badge is therefore rendered only in the no-equipment case the panel already covers with its own caption, and the null branch each scalar PUT carries is defensive rather than reached. What a fresh project actually carries is the class defaults, which are the water-soluble preset's values. Celsius is the wire format. CoolantHeatCondition stores Kelvin internally but exposes _C accessors that handle the conversion, and the DTO carries Celsius. Finite values only. Every field handler drops a null or non-finite entry before any request is made, so Infinity never reaches these endpoints even though the numeric widget can parse it. Background and coolant temperatures accept negatives (e.g. -40 °C for cryogenic coolant); the three convection fields are clamped to min: 0. The run sees it at once. The background-temperature write, all four condition scalars and the file load each end in the project service's ForwardSetupEnvironmentToExecution, which stamps the background temperature and the condition reference onto the runtime equipment face — including the lazily created condition, which otherwise would exist only on the authored side. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/ThermalConditionPanel.vue — the one panel both leaves share, branching on the node's last role-path segment: Background renders the single temperature field, Coolant the not-attached badge, the file row, the read-only Name / Note and the four property fields. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — declares the two ThermalCondition leaves (equipment/background, equipment/coolant) under the General Setup group, with no host-level init state. wwwroot-src/src/components/controlTree/itemTypes.ts — registers the ThermalCondition item type against that panel: no child tree, no geometry-cache chain. wwwroot-src/src/components/widgets/FilePathInput.vue — the file row widget: Browse… / Browse Resource… (opening at the CoolantHeatCondition resource subfolder) / Clear. wwwroot-src/src/components/widgets/NumericInput.vue — the numeric field used by every value on both leaves, and the source of the min: 0 clamp on the three convection fields. wwwroot-src/src/api/backgroundCoolant.ts — typed client for /api/mech/background-coolant/*: the flat snapshot, the load / save-as pair, and the five scalar PUTs. wwwroot-src/src/router/routes.ts — carries the equipment/background-coolant redirect, which lands on general-setup?tree=equipment/background. Mech/BackgroundCoolantController.cs — REST surface at /api/mech/background-coolant over the authored equipment face: GET / — flat snapshot { hasEquipment, backgroundTemperature_C, hasCoolant, coolantTemperature_C, coolantConvectionCoefficient_Wdm2K, mistFloodConvectionRatio, offConvectionCoefficient_Wdm2K, coolantName, coolantNote, coolantHeatConditionFile }. POST /load, POST /save-as — { rootName, relFile }: install a .CoolantHeatCondition file / export the current condition. Both resolve the path under the named root and refuse anything that escapes it, and both record the result in CoolantHeatConditionFile as a project-relative path when it lands under the project. Save-as appends the extension when it is missing and renames the condition after the file (IPreferredFileName) with the .default marker stripped. PUT /background-temperature-c — set BackgroundTemperature_C. PUT /coolant-temperature-c, PUT /coolant-convection-coefficient-wdm2k, PUT /mist-flood-convection-ratio, PUT /off-convection-coefficient-wdm2k — the four condition scalars, all through one helper that lazy-creates the condition when absent, writes it, and forwards to the runtime face. HiAPI Engine HiMech/Physics/CoolantHeatCondition.cs — the model: Kelvin storage with _C accessors, the flood / mist-ratio / off convection coefficients, Name and Note with PreferredFileName, and the StandardPresets / ApplyPreset / MatchStandardPreset statics behind the shipped resource files. HiMech/Machining/MachiningEquipmentUtils/SetupEquipment.cs — the authored equipment face that owns the background temperature, the condition and its file reference, and externalizes the condition to the side-file when that reference is set. See Also Spindle Capability — sibling equipment editor, editing the same authored equipment face. Coolant (manual) — the end-user task: picking a cooling type in the application. Coolant Model — what the values on this panel mean, which one a running program applies, and how the condition is stored."
},
"anatomy/general-setup/controller/brand-matrix.html": {
"href": "anatomy/general-setup/controller/brand-matrix.html",
@@ -187,7 +187,7 @@
"anatomy/general-setup/controller/machine/native-parameters.html": {
"href": "anatomy/general-setup/controller/machine/native-parameters.html",
"title": "Native Parameters | HiAPI-C# 2025",
- "summary": "Native Parameters Parameters (Native) is the machine plane's escape hatch: the brand parameter table rendered as the flat numbered form an operator reads off the real control, with no domain vocabulary and no unit conversion in between. It lives on the General Setup page at /general-setup under the Control-Tree id equipment/controller/machine/native, and it is one of the two leaves the hasNativeTable snapshot flag grows — the other, M-Code Declarations, edits a different part of the same object. Every value the domain-grouped leaves beside it edit that is a row of the brand parameter table is a row here; the ones stored elsewhere — the tool-change pose, the block-skip layers, the subprogram folders and the indexing position lists among them — reach no native form at all. Several rows here reach no domain-grouped face. Important Anatomy makes no claim that any id named here is stable across versions. The migration hop that keeps an older ?tree= value resolving is described in Tree Ids and Routes. The leaf is pushed behind hasNativeTable, which reports whether any ControllerParameterTableBase resolves in the runner's effective dependency list. All five shipped presets carry one, so the flag is a gate in code and unconditional in practice — see Brand Matrix. How a Parameter Is Addressed The table stores its numbers in three dictionaries, and the panel is those three dictionaries with a heading over each: Section heading the user reads Backing storage Cell System parameters SystemParams one value per id Axis parameters AxisParams one floating-point value per id per axis Axis parameters (integer) IntAxisParams one integer value per id per axis An id is a bare number in storage. What the panel prints in front of it is the brand's prefix, and that prefix is the whole of the addressing convention: Brand marker Prefix shown Table that answers Example row Fanuc # FanucParameterTable #1420 rapid traverse rate Mazak # the Fanuc table #1420 rapid traverse rate Syntec Pr SyntecParameterTable Pr1420 rapid traverse rate Siemens MD SiemensMachineDataTable MD32000 max axis velocity Heidenhain MP HeidenhainParameterTable MP1010 rapid traverse rate Mazak borrows the Fanuc table outright. The Mazak preset carries the Fanuc parameter-table proxy rather than one of its own, so the prefix resolves to # and every number on this leaf is a Fanuc parameter number under a Mazak brand badge. The prefix is not taken from the brand marker string but from the type of the parameter table that resolved, so the two cannot drift apart the way a brand-marker label can — see Brand Matrix. A ControllerParameterTableBase subclass outside those four resolves an empty prefix, and the ids then render bare. No shipped preset produces that. The prefix the panel renders comes from the leaf's own read of the parameter form. The shared runner snapshot carries a prefix field of its own, and nothing renders it. The caption under the id Each id cell carries the number in bold and, beneath it, a short usage caption — Rapid traverse rate (mm/min or deg/min), Axis type (0 linear / 1 rotary / 2 spindle), G54 X offset, Tool change M function code. The same text repeats as the cell's hover title. The caption is the brand table's own description of a well-known number, produced by DescribeSystemParam(API) and its two per-axis counterparts, and it travels down the wire with the row. It is therefore engine text, not an interface string: it is written in English in the brand table and belongs to no locale bundle, so it reads the same under every language the application offers. An id the brand table does not model has no caption at all, which is how a modelled row and a free extra are told apart on screen. Raw Values, Raw Units The caption at the top of the panel states the rule: \"Raw stored values in native units — no unit conversion is applied here. The interface-form nodes edit the same backing table.\" No cell carries a unit suffix, and none can: the unit belongs to the number, not to the column. What a cell means is whatever the brand stores at that address — millimetres or degrees on a stroke limit, mm/min or deg/min on a rapid rate, rpm on a spindle limit, an enumeration ordinal on an axis type, a count on a controlled-axis parameter. The peck clearance is the case where the two forms visibly disagree, and it ships. Canned Cycle (Peck) always speaks millimetres; the Fanuc-family table stores millimetres at #4002, and the Syntec table stores microns at Pr4002. A machine at a 5 mm clearance therefore reads 5 on Interface Parameters on every brand, and reads 5 here on Fanuc and Mazak but 5000 here on Syntec. The write endpoint converts on the way in; this leaf does not, which is the point of it — an operator copying from a real Syntec control reads the micron form. Two further asymmetries follow from where a value is stored rather than from its unit: On Siemens and Heidenhain the peck clearance has no row here at all. Those two presets supply it through a generic fallback config, a plain runner entry rather than a parameter table, so the interface leaf shows a field whose backing has no place in this form. On the Fanuc-family and Syntec tables the work-coordinate offsets are rows of this table. The G54–G59 triads start at #5221 and the G54.1 P1–P48 triads at #7001, both on a stride of 20, all in the System parameters section. That mixing is why the machine plane's parameter table is stored on the project rather than on the runner — see Machine and Controller Plane. On the Fanuc-family table those two address ranges are also what an NC program's #-variable read resolves against, so those rows are live in both directions. What Only This Leaf Reaches Most rows have a domain-grouped twin. These do not. The axis roster itself. Every per-axis leaf of the branch — Machine Limits (Stroke), Rapid Feedrates, Home / G28 Reference, Tool-Change Position — lists the axes named by the axis-type row of this table (#1006, Pr1006, MD30300, MP400), because AxisNames is that row's key set. None of those leaves can add an axis, rename one, remove one, or change one from linear to rotary; their columns are handed to them. Inside the Controller branch the axis-type row is editable here and nowhere else, through the footer with the section set to Axis (integer), the brand's axis-type number as the id, an axis name, and a value of 0 linear, 1 rotary or 2 spindle. The one other writer is outside the branch entirely: ConfigureByMachiningChain(API) stamps the machining chain's axis codes into the same row when a machine tool is attached to the project; an axis the chain does not name stays in the row. That call does not stop at the axis-type row: a chain axis it marks rotary also has its reference position set to 0 and its rapid rate to 36000 deg/min, whatever those two Axis parameters rows held. The inverse holds, with one exception. Deleting the axis-type row leaves the table with no named axes, so Machine Limits (Stroke), Rapid Feedrates and Home / G28 Reference have no rows left to draw. Tool-Change Position keeps its own: its reader falls back to the tool-change configuration's own axis keys when the axis set is empty, and every shipped preset seeds that configuration with X, Y and Z. Rows recovered that way carry no axis type and are reported linear. The Siemens indexing machine data, all four numbers. MD30500, the per-axis assignment that decides which axis consumes which position table, is shown on Indexing Position Tables as display-only text and is written here as an Axis parameters (integer) row; the REST surface carries no assignment writer at all. The equidistant definition — the numerator MD30501 and the offset MD30503 as axis parameters, the denominator MD30502 as an integer axis parameter — has no endpoint that reads or writes it and no panel that offers a cell for it: on the web surface it is three ordinary rows on this leaf. The engine is its reader: an axis whose MD30500 is 3 resolves its station spacing from the trio, and Indexing Position Tables prints that axis' assignment as Equidistant (MD30501–MD30503), naming the three numbers it offers no cell for. The two position lists themselves are the mirror image, stored as list properties outside all three dictionaries and so absent from this form entirely. Numbers with no interface field. The controlled-axis count (#1020, Pr1020) is read by nothing in the web service. The Siemens fixed-point position MD30600, the G75 target, likewise. So is the Siemens tool-change M function MD22560, whose presence overlays a tool-change effect onto the named code in the declaration view the parsers resolve against. M-Code Declarations renders the stored map rather than that view, so the overlaid row is on no screen at all: the effect is honoured in every program the machine runs, and the one number that shows anywhere is this row. The Siemens tool-change mode MD22550 is a half case: where the row already exists, the T word performs the tool change itself toggle on M-Code Declarations writes it, and where it does not, that toggle writes a brand-neutral flag instead; creating the row is possible only here. Any number the model does not name. The three writers are get-or-create, so an id outside the brand's well-known set is accepted, stored, serialized into the project file and read back. It carries no usage caption, and the engine consumes only the numbers its brand table models — a free extra is a record, not a setting. A Fractional Number Has Three Fates The Axis parameters (integer) section is the one place on the branch where a value can be typed, accepted by the field, and silently discarded. The cell is the shared numeric widget, which commits on blur or Enter and carries no integer rule. Typing 2.5 parses cleanly: the widget clears its own error state, emits 2.5 to the panel, and rewrites its text to the parsed form. The panel's integer handler is where the value stops — it returns without assigning and without raising anything when the number is not whole. Because the bound value never changed, nothing pushes the stored integer back into the box. The cell goes on reading 2.5 over a table that still holds the old integer, with no error message, no toast and no console line. The row corrects itself only when the panel refetches: after an add, after a removal, or on a fresh mount when the selection leaves this leaf and comes back. The footer does not behave the same way. Add / Set with Axis (integer) selected truncates a fractional value toward zero and writes the truncation, so the same 2.5 becomes a stored 2; and the same button refuses a fractional Parameter id outright, with the message \"Enter a non-negative integer id and a value.\" That refusal belongs to the button, not to the box — the Parameter id field is the shared numeric widget with a minimum of 0 and no integer rule, so it accepts and keeps 2.5 the way any other cell does, and the one message answers an empty Value (raw) as well. Three controls, one number, three outcomes. Clearing any cell ends the same way for a different reason. An emptied field commits null, and all three handlers return early on null, so the box is blank and the stored value is untouched. There is no way to unset one cell of a table; the value stands until it is overwritten or its whole row is removed. The general rule for a box that disagrees with its model is Numeric Input; what is particular here is that the widget did nothing wrong — the panel accepted the commit and dropped it. Adding, Overwriting and Removing a Row The footer is one control set for both adding and overwriting, and the button says so: Add / Set. The write is get-or-create at every level — an unknown id creates its row, an unknown axis name creates its column — so setting an existing cell and creating a new one are the same request. The Axis field appears only while the section is not System, is free text, and is trimmed and checked for emptiness only. It is not validated against the machine's axes: any name is accepted and becomes a new column. A successful add re-reads the whole form. The footer's own fields are not cleared, and Enter does not submit — see Editing Contract for how the branch's add footers differ from one another. The two client-side refusals are the id, which must be a non-negative whole number, and, for the two per-axis sections, a non-empty axis name. Each raises a negative toast and sends nothing. Delete is per row, not per cell. The trailing button on a row of either per-axis table removes the id from that dictionary entirely — every axis column of it at once, not the cell it sits beside. A confirmation dialog comes first, titled Remove parameter and reading Remove from the section?, where the section word is the storage kind — system, axis, int-axis — rather than the heading printed above the table. The removal is not optimistic: the request is awaited and the whole form is re-read. A deleted well-known row can come back on its own. The brand tables' modelled accessors are get-or-create with a default, so a read through a sibling leaf re-materializes the row it wants. The clearest case is the maximum spindle speed: delete #3741 here, open Interface Parameters, and that read stores the brand's default back — 60000 on Fanuc, Mazak, Siemens and Heidenhain, 24000 on Syntec — so the row reappears at that value. The cutter-compensation type, the tool-axis direction and the peck clearance behave the same way. A free extra id has no accessor and stays deleted. What a Freshly Switched Brand Shows The seed each brand's proxy clones decides what the three tables open with. All five declare a linear X, Y and Z in the axis-type row, a reference position of zero per axis and a rapid rate per axis, so on every brand the Axis parameters section opens with two rows and the Axis parameters (integer) section with one. The System section is where they part company. Brand System parameters Axis parameters Axis parameters (integer) Fanuc, Mazak 166 rows — controlled axes, max spindle speed, peck retraction, cutter-comp type, and 162 seeded work-offset addresses at zero reference position, rapid rate axis type Syntec 166 rows — the same four under Pr numbering, the peck retraction in microns, and the same 162 offsets reference position, rapid rate axis type Siemens 1 row — max spindle speed reference position, max axis velocity axis type Heidenhain 2 rows — max spindle speed, tool-axis direction reference position, rapid rate axis type The 162 offset rows are SeedAllDefaults(API) writing every G54–G59 and G54.1 P1–P48 triad as zero, so that a managed address always has a value the way a real control with a fresh battery reads zero rather than nothing. They dominate the System section on the three brands that carry them, and their captions — G54 X offset, G54.1P12 Z offset — are what separates them from machine configuration in the same list. No brand seeds a stroke limit, so the positive and negative stroke-limit rows are absent from the Axis parameters section until Machine Limits (Stroke) or this leaf creates them. The Two Empty Layers, and Which One Is Reachable The panel opens through the branch's shared two-layer gate. The first layer is the shared \"No NC runner — load a project first.\" from the runner snapshot; the second is \"No controller parameter table on the active runner.\" from the leaf's own read — the same line M-Code Declarations and Interface Parameters show, and honest in all three, because every one of those reads reports presence from the same parameter-table lookup. Neither line is normally reached by navigating, because the node itself exists only while the snapshot reported a parameter table. The second line is also what a failed read leaves on screen: the presence flag starts false and the failure path only raises a toast. A failed write answers inside a success envelope — HTTP 200 carrying No ControllerParameterTableBase on the active runner — and surfaces as one negative toast, three seconds, the panel's localized context followed by that raw English sentence. The full rule is Editing Contract. Layout General Setup Control Tree — the left dock of /general-setup Controller Node Row Machine / Controller Group Row Parameters (Native) Node Row — equipment/controller/machine/native, the last leaf of the plane, after Indexing Position Tables Editor Row — the panel of the selected node Parameters (Native) Panel — one column, gutter-spaced Hint Caption — \"Raw stored values in native units — no unit conversion is applied here. The interface-form nodes edit the same backing table.\" System parameters Section Heading System Table — dense, flat, bordered Header Row — Id, Value, and an unlabelled action column Data Row — the prefixed id in bold over its usage caption (absent on a free extra), a numeric cell, and a delete button Axis parameters Section Heading Axis Table — dense, flat, bordered Header Row — Id, then one column per axis name, then an unlabelled action column Data Row — the prefixed id in bold over its usage caption, one numeric cell per axis column (blank where the row has no entry for that axis), and a delete button that removes the whole id Axis parameters (integer) Section Heading Integer Axis Table — the same shape as the Axis Table, over the integer dictionary Separator Add Row — one line, bottom-aligned Section Select — System / Axis (double) / Axis (integer) Parameter id Numeric Field — minimum 0 Axis Text Field — present only while the section is not System Value (raw) Numeric Field Add / Set Button — primary No-Table Body — replaces everything above: \"No controller parameter table on the active runner.\" Shared Empty State — replaces the whole body while the snapshot reports no runner: \"No NC runner — load a project first.\" Remove Dialog — Remove parameter over Remove from the section?, with a cancel Toast — negative, three seconds, the panel's context followed by the server's own message The axis columns of the two per-axis tables are computed independently of each other, and each is the union of the shared snapshot's axis names with every axis key present in that table's own rows. An axis created here therefore gets its column from the rows even before the shared snapshot is next refreshed, and an axis the snapshot knows about with no entry in a row shows an empty cell rather than being omitted. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/SoftNcNativeParamsPanel.vue — this panel: the three tables over the three dictionaries, the prefixed id column with its usage caption, the axis-column union, the three commit handlers with the integer test that drops a fractional value, the confirm-then-remove flow, and the add footer with its truncation and its two refusals. wwwroot-src/src/components/controlTree/softNcItemTypes.ts — the node's id, label and label key, and the snapshot flag it is pushed behind, last on the machine plane. wwwroot-src/src/api/softNcRunner.ts — the reader that parses the prefix and the three row families, the three per-cell writers and the three per-id removals, and the snapshot field carrying a prefix this panel does not use. wwwroot-src/src/composables/useSoftNcRunner.ts — the shared snapshot the first empty layer and the axis-column union read. wwwroot-src/src/components/widgets/NumericInput.vue — the cell: commit on blur or Enter, the parsed value written back into the box, and the absence of any integer rule. wwwroot-src/src/components/controlTree/SoftNcEmptyState.vue — the shared no-runner line. wwwroot-src/src/components/controlTree/SoftNcIndexingPositionsPanel.vue — the sibling that displays the MD30500 assignment this leaf writes, and points here for it. wwwroot-src/src/api/http.ts — the shared fetch helper that turns both a non-2xx status and a success: false body into one thrown error. wwwroot-src/src/i18n/en/softNc.ts — the node label, the raw-units hint, the three section headings, the three add-footer section options, the two footer refusals and the five error contexts — one read and four writes, the two per-axis savers sharing a context. wwwroot-src/src/i18n/en/common.ts — the shared Id, Value, Axis and Add / Set strings. wwwroot-src/src/i18n/en/dialog.ts — the remove dialog's title, its message, and the three storage kind words it interpolates. Mech/SoftNcRunnerController.cs — the REST surface: the read that orders each dictionary by id and attaches the brand's usage description to every row, the prefix computed from the resolved table's type, the three get-or-create writers and the three whole-row removals, the shared dependency wrapper that answers a missing table inside a success envelope, and the neighbouring readers this form's rows also feed — the three per-axis reads that take the axis-type row's key set bare, the tool-change read that falls back to its own configuration's keys when that set is empty, and the M-code read bound to the stored declaration map rather than the overlaid view. HiAPI Engine HiMech/NcParsers/Dependencys/ControllerParameterTableBase.cs — the three dictionaries this leaf is, the get-or-create bucket accessors, the role interfaces that let the domain-grouped leaves read the same rows, the axis-name set taken from the axis-type row, the three usage-description methods, the rotary-axis helper that writes type, reference position and rapid rate in one call, and the XML round-trip that persists every row including free extras. HiMech/NcParsers/Dependencys/Fanuc/FanucParameterTable.cs — the # vocabulary: the well-known numbers, the get-or-create defaults behind the modelled accessors, the macro-variable lookup over the work-offset address ranges, and the seed a fresh Fanuc or Mazak runner opens on. HiMech/NcParsers/Dependencys/Syntec/SyntecParameterTable.cs — the Pr vocabulary, and the peck clearance stored in microns with the conversion kept in its accessor. HiMech/NcParsers/Dependencys/Siemens/SiemensMachineDataTable.cs — the MD vocabulary: the indexing assignment, the three equidistant numbers this leaf alone edits and the spacing resolution that reads them, the tool-change mode, the tool-change M function with the read-time declaration overlay that never enters the stored map, the fixed-point position, and the seed that declares one system row. HiMech/NcParsers/Dependencys/Heidenhain/HeidenhainParameterTable.cs — the MP vocabulary and its two-row seed. HiMech/NcParsers/Dependencys/IsoCoordinateAddressMap.cs — the work-offset address scheme shared by the Fanuc and Syntec tables, the per-address description that captions those rows, and the seeding of every triad to zero. HiMech/NcParsers/Dependencys/IMachineAxisConfig.cs — the axis contract, and the axis-type enumeration a cell of the integer section stores. HiMech/NcParsers/Dependencys/Generic/ToolingMcConfig.cs — the tool-change pose, stored outside the three dictionaries, whose own X / Y / Z keys are what Tool-Change Position falls back to when the axis-type row is gone. HiMech/NcParsers/SoftNcRunner.cs — the five brand presets and which parameter-table proxy each carries, the Fanuc proxy inside the Mazak preset among them, the tool-change configuration every preset seeds, and the chain configuration that is the only other writer of the axis-type row and, on a rotary chain axis, of that axis' reference position and rapid rate. See Also Machine and Controller Plane — the plane this leaf sits on, and why the table it exposes is stored on the project rather than on the runner file Brand Matrix — the flag that grows this node, why it never reports false on a shipped preset, and why Mazak resolves the Fanuc table Editing Contract — the commit, rollback, confirm and toast rules this panel shares with the branch, and the add-footer details it differs on Interface Parameters — the same values in domain vocabulary, including the peck clearance this leaf shows in the brand's own unit Indexing Position Tables — the leaf that displays the MD30500 assignment and the equidistant definition that are written here"
+ "summary": "Native Parameters Parameters (Native) is the machine plane's escape hatch: the brand parameter table rendered as the flat numbered form an operator reads off the real control, with no domain vocabulary and no unit conversion in between. It lives on the General Setup page at /general-setup under the Control-Tree id equipment/controller/machine/native, and it is one of the two leaves the hasNativeTable snapshot flag grows — the other, M-Code Declarations, edits a different part of the same object. Every value the domain-grouped leaves beside it edit that is a row of the brand parameter table is a row here; the ones stored elsewhere — the tool-change pose, the block-skip layers, the subprogram folders and the indexing position lists among them — reach no native form at all. Several rows here reach no domain-grouped face. Important Anatomy makes no claim that any id named here is stable across versions. The migration hop that keeps an older ?tree= value resolving is described in Tree Ids and Routes. The leaf is pushed behind hasNativeTable, which reports whether any ControllerParameterTableBase resolves in the runner's effective dependency list. All five shipped presets carry one, so the flag is a gate in code and unconditional in practice — see Brand Matrix. How a Parameter Is Addressed The table stores its numbers in three dictionaries, and the panel is those three dictionaries with a heading over each: Section heading the user reads Backing storage Cell System parameters SystemParams one value per id Axis parameters AxisParams one floating-point value per id per axis Axis parameters (integer) IntAxisParams one integer value per id per axis An id is a bare number in storage. What the panel prints in front of it is the brand's prefix, and that prefix is the whole of the addressing convention: Brand marker Prefix shown Table that answers Example row Fanuc # FanucParameterTable #1420 rapid traverse rate Mazak # the Fanuc table #1420 rapid traverse rate Syntec Pr SyntecParameterTable Pr1420 rapid traverse rate Siemens MD SiemensMachineDataTable MD32000 max axis velocity Heidenhain MP HeidenhainParameterTable MP1010 rapid traverse rate Mazak borrows the Fanuc table outright. The Mazak preset carries the Fanuc parameter-table proxy rather than one of its own, so the prefix resolves to # and every number on this leaf is a Fanuc parameter number under a Mazak brand badge. The prefix is not taken from the brand marker string but from the type of the parameter table that resolved, so the two cannot drift apart the way a brand-marker label can — see Brand Matrix. A ControllerParameterTableBase subclass outside those four resolves an empty prefix, and the ids then render bare. No shipped preset produces that. The prefix the panel renders comes from the leaf's own read of the parameter form. The shared runner snapshot carries a prefix field of its own, and nothing renders it. The caption under the id Each id cell carries the number in bold and, beneath it, a short usage caption — Rapid traverse rate (mm/min or deg/min), Axis type (0 linear / 1 rotary / 2 spindle), G54 X offset, Tool change M function code. The same text repeats as the cell's hover title. The caption is the brand table's own description of a well-known number, produced by DescribeSystemParam(API) and its two per-axis counterparts, and it travels down the wire with the row. It is therefore engine text, not an interface string: it is written in English in the brand table and belongs to no locale bundle, so it reads the same under every language the application offers. An id the brand table does not model has no caption at all, which is how a modelled row and a free extra are told apart on screen. Raw Values, Raw Units The caption at the top of the panel states the rule: \"Raw stored values in native units — no unit conversion is applied here. The interface-form nodes edit the same backing table.\" No cell carries a unit suffix, and none can: the unit belongs to the number, not to the column. What a cell means is whatever the brand stores at that address — millimetres or degrees on a stroke limit, mm/min or deg/min on a rapid rate, rpm on a spindle limit, an enumeration ordinal on an axis type, a count on a controlled-axis parameter. The peck clearance is the case where the two forms visibly disagree, and it ships. Canned Cycle (Peck) always speaks millimetres; the Fanuc-family table stores millimetres at #4002, and the Syntec table stores microns at Pr4002. A machine at a 5 mm clearance therefore reads 5 on Interface Parameters on every brand, and reads 5 here on Fanuc and Mazak but 5000 here on Syntec. The write endpoint converts on the way in; this leaf does not, which is the point of it — an operator copying from a real Syntec control reads the micron form. Two further asymmetries follow from where a value is stored rather than from its unit: On Siemens and Heidenhain the peck clearance has no row here at all. Those two presets supply it through a generic fallback config, a plain runner entry rather than a parameter table, so the interface leaf shows a field whose backing has no place in this form. On the Fanuc-family and Syntec tables the work-coordinate offsets are rows of this table. The G54–G59 triads start at #5221 and the G54.1 P1–P48 triads at #7001, both on a stride of 20, all in the System parameters section. That mixing is why the machine plane's parameter table is stored on the project rather than on the runner — see Machine and Controller Plane. On the Fanuc-family table those two address ranges are also what an NC program's #-variable read resolves against, so those rows are live in both directions. What Only This Leaf Reaches Most rows have a domain-grouped twin. These do not. The axis roster itself. Every per-axis leaf of the branch — Machine Limits (Stroke), Rapid Feedrates, Home / G28 Reference, Tool-Change Position — lists the axes named by the axis-type row of this table (#1006, Pr1006, MD30300, MP400), because AxisNames is that row's key set. None of those leaves can add an axis, rename one, remove one, or change one from linear to rotary; their columns are handed to them. Inside the Controller branch the axis-type row is editable here and nowhere else, through the footer with the section set to Axis (integer), the brand's axis-type number as the id, an axis name, and a value of 0 linear, 1 rotary or 2 spindle. The one other writer is outside the branch entirely: ConfigureByMachiningChain(API) stamps the machining chain's axis codes into the same row when a machine tool is attached to the project; an axis the chain does not name stays in the row. That call does not stop at the axis-type row: a chain axis it marks rotary also has its reference position set to 0 and its rapid rate to 36000 deg/min, whatever those two Axis parameters rows held. The inverse holds, with one exception. Deleting the axis-type row leaves the table with no named axes, so Machine Limits (Stroke), Rapid Feedrates and Home / G28 Reference have no rows left to draw. Tool-Change Position keeps its own: its reader falls back to the tool-change configuration's own axis keys when the axis set is empty, and every shipped preset seeds that configuration with X, Y and Z. Rows recovered that way carry no axis type and are reported linear. The Siemens indexing machine data, all four numbers. MD30500, the per-axis assignment that decides which axis consumes which position table, is shown on Indexing Position Tables as display-only text and is written here as an Axis parameters (integer) row; the REST surface carries no assignment writer at all. The equidistant definition — the numerator MD30501 and the offset MD30503 as axis parameters, the denominator MD30502 as an integer axis parameter — has no endpoint that reads or writes it and no panel that offers a cell for it: it is three ordinary rows on this leaf. The engine is its reader: an axis whose MD30500 is 3 resolves its station spacing from the trio, and Indexing Position Tables prints that axis' assignment as Equidistant (MD30501–MD30503), naming the three numbers it offers no cell for. The two position lists themselves are the mirror image, stored as list properties outside all three dictionaries and so absent from this form entirely. Numbers with no interface field. The controlled-axis count (#1020, Pr1020) is read by nothing in the web service. The Siemens fixed-point position MD30600, the G75 target, likewise. So is the Siemens tool-change M function MD22560, whose presence overlays a tool-change effect onto the named code in the declaration view the parsers resolve against. M-Code Declarations renders the stored map rather than that view, so the overlaid row is on no screen at all: the effect is honoured in every program the machine runs, and the one number that shows anywhere is this row. The Siemens tool-change mode MD22550 is a half case: where the row already exists, the T word performs the tool change itself toggle on M-Code Declarations writes it, and where it does not, that toggle writes a brand-neutral flag instead; creating the row is possible only here. Any number the model does not name. The three writers are get-or-create, so an id outside the brand's well-known set is accepted, stored, serialized into the project file and read back. It carries no usage caption, and the engine consumes only the numbers its brand table models — a free extra is a record, not a setting. A Fractional Number Has Three Fates The Axis parameters (integer) section is the one place on the branch where a value can be typed, accepted by the field, and silently discarded. The cell is the shared numeric widget, which commits on blur or Enter and carries no integer rule. Typing 2.5 parses cleanly: the widget clears its own error state, emits 2.5 to the panel, and rewrites its text to the parsed form. The panel's integer handler is where the value stops — it returns without assigning and without raising anything when the number is not whole. Because the bound value never changed, nothing pushes the stored integer back into the box. The cell goes on reading 2.5 over a table that still holds the old integer, with no error message, no toast and no console line. The row corrects itself only when the panel refetches: after an add, after a removal, or on a fresh mount when the selection leaves this leaf and comes back. The footer does not behave the same way. Add / Set with Axis (integer) selected truncates a fractional value toward zero and writes the truncation, so the same 2.5 becomes a stored 2; and the same button refuses a fractional Parameter id outright, with the message \"Enter a non-negative integer id and a value.\" That refusal belongs to the button, not to the box — the Parameter id field is the shared numeric widget with a minimum of 0 and no integer rule, so it accepts and keeps 2.5 the way any other cell does, and the one message answers an empty Value (raw) as well. Three controls, one number, three outcomes. Clearing any cell ends the same way for a different reason. An emptied field commits null, and all three handlers return early on null, so the box is blank and the stored value is untouched. There is no way to unset one cell of a table; the value stands until it is overwritten or its whole row is removed. The general rule for a box that disagrees with its model is Numeric Input; what is particular here is that the widget did nothing wrong — the panel accepted the commit and dropped it. Adding, Overwriting and Removing a Row The footer is one control set for both adding and overwriting, and the button says so: Add / Set. The write is get-or-create at every level — an unknown id creates its row, an unknown axis name creates its column — so setting an existing cell and creating a new one are the same request. The Axis field appears only while the section is not System, is free text, and is trimmed and checked for emptiness only. It is not validated against the machine's axes: any name is accepted and becomes a new column. A successful add re-reads the whole form. The footer's own fields are not cleared, and Enter does not submit — see Editing Contract for how the branch's add footers differ from one another. The two client-side refusals are the id, which must be a non-negative whole number, and, for the two per-axis sections, a non-empty axis name. Each raises a negative toast and sends nothing. Delete is per row, not per cell. The trailing button on a row of either per-axis table removes the id from that dictionary entirely — every axis column of it at once, not the cell it sits beside. A confirmation dialog comes first, titled Remove parameter and reading Remove from the section?, where the section word is the storage kind — system, axis, int-axis — rather than the heading printed above the table. The removal is not optimistic: the request is awaited and the whole form is re-read. A deleted well-known row can come back on its own. The brand tables' modelled accessors are get-or-create with a default, so a read through a sibling leaf re-materializes the row it wants. The clearest case is the maximum spindle speed: delete #3741 here, open Interface Parameters, and that read stores the brand's default back — 60000 on Fanuc, Mazak, Siemens and Heidenhain, 24000 on Syntec — so the row reappears at that value. The cutter-compensation type, the tool-axis direction and the peck clearance behave the same way. A free extra id has no accessor and stays deleted. What a Freshly Switched Brand Shows The seed each brand's proxy clones decides what the three tables open with. All five declare a linear X, Y and Z in the axis-type row, a reference position of zero per axis and a rapid rate per axis, so on every brand the Axis parameters section opens with two rows and the Axis parameters (integer) section with one. The System section is where they part company. Brand System parameters Axis parameters Axis parameters (integer) Fanuc, Mazak 166 rows — controlled axes, max spindle speed, peck retraction, cutter-comp type, and 162 seeded work-offset addresses at zero reference position, rapid rate axis type Syntec 166 rows — the same four under Pr numbering, the peck retraction in microns, and the same 162 offsets reference position, rapid rate axis type Siemens 1 row — max spindle speed reference position, max axis velocity axis type Heidenhain 2 rows — max spindle speed, tool-axis direction reference position, rapid rate axis type The 162 offset rows are SeedAllDefaults(API) writing every G54–G59 and G54.1 P1–P48 triad as zero, so that a managed address always has a value the way a real control with a fresh battery reads zero rather than nothing. They dominate the System section on the three brands that carry them, and their captions — G54 X offset, G54.1P12 Z offset — are what separates them from machine configuration in the same list. No brand seeds a stroke limit, so the positive and negative stroke-limit rows are absent from the Axis parameters section until Machine Limits (Stroke) or this leaf creates them. The Two Empty Layers, and Which One Is Reachable The panel opens through the branch's shared two-layer gate. The first layer is the shared \"No NC runner — load a project first.\" from the runner snapshot; the second is \"No controller parameter table on the active runner.\" from the leaf's own read — the same line M-Code Declarations and Interface Parameters show, and honest in all three, because every one of those reads reports presence from the same parameter-table lookup. Neither line is normally reached by navigating, because the node itself exists only while the snapshot reported a parameter table. The second line is also what a failed read leaves on screen: the presence flag starts false and the failure path only raises a toast. A failed write answers inside a success envelope — HTTP 200 carrying No ControllerParameterTableBase on the active runner — and surfaces as one negative toast, three seconds, the panel's localized context followed by that raw English sentence. The full rule is Editing Contract. Layout General Setup Control Tree — the left dock of /general-setup Controller Node Row Machine / Controller Group Row Parameters (Native) Node Row — equipment/controller/machine/native, the last leaf of the plane, after Indexing Position Tables Editor Row — the panel of the selected node Parameters (Native) Panel — one column, gutter-spaced Hint Caption — \"Raw stored values in native units — no unit conversion is applied here. The interface-form nodes edit the same backing table.\" System parameters Section Heading System Table — dense, flat, bordered Header Row — Id, Value, and an unlabelled action column Data Row — the prefixed id in bold over its usage caption (absent on a free extra), a numeric cell, and a delete button Axis parameters Section Heading Axis Table — dense, flat, bordered Header Row — Id, then one column per axis name, then an unlabelled action column Data Row — the prefixed id in bold over its usage caption, one numeric cell per axis column (blank where the row has no entry for that axis), and a delete button that removes the whole id Axis parameters (integer) Section Heading Integer Axis Table — the same shape as the Axis Table, over the integer dictionary Separator Add Row — one line, bottom-aligned Section Select — System / Axis (double) / Axis (integer) Parameter id Numeric Field — minimum 0 Axis Text Field — present only while the section is not System Value (raw) Numeric Field Add / Set Button — primary No-Table Body — replaces everything above: \"No controller parameter table on the active runner.\" Shared Empty State — replaces the whole body while the snapshot reports no runner: \"No NC runner — load a project first.\" Remove Dialog — Remove parameter over Remove from the section?, with a cancel Toast — negative, three seconds, the panel's context followed by the server's own message The axis columns of the two per-axis tables are computed independently of each other, and each is the union of the shared snapshot's axis names with every axis key present in that table's own rows. An axis created here therefore gets its column from the rows even before the shared snapshot is next refreshed, and an axis the snapshot knows about with no entry in a row shows an empty cell rather than being omitted. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/SoftNcNativeParamsPanel.vue — this panel: the three tables over the three dictionaries, the prefixed id column with its usage caption, the axis-column union, the three commit handlers with the integer test that drops a fractional value, the confirm-then-remove flow, and the add footer with its truncation and its two refusals. wwwroot-src/src/components/controlTree/softNcItemTypes.ts — the node's id, label and label key, and the snapshot flag it is pushed behind, last on the machine plane. wwwroot-src/src/api/softNcRunner.ts — the reader that parses the prefix and the three row families, the three per-cell writers and the three per-id removals, and the snapshot field carrying a prefix this panel does not use. wwwroot-src/src/composables/useSoftNcRunner.ts — the shared snapshot the first empty layer and the axis-column union read. wwwroot-src/src/components/widgets/NumericInput.vue — the cell: commit on blur or Enter, the parsed value written back into the box, and the absence of any integer rule. wwwroot-src/src/components/controlTree/SoftNcEmptyState.vue — the shared no-runner line. wwwroot-src/src/components/controlTree/SoftNcIndexingPositionsPanel.vue — the sibling that displays the MD30500 assignment this leaf writes, and points here for it. wwwroot-src/src/api/http.ts — the shared fetch helper that turns both a non-2xx status and a success: false body into one thrown error. wwwroot-src/src/i18n/en/softNc.ts — the node label, the raw-units hint, the three section headings, the three add-footer section options, the two footer refusals and the five error contexts — one read and four writes, the two per-axis savers sharing a context. wwwroot-src/src/i18n/en/common.ts — the shared Id, Value, Axis and Add / Set strings. wwwroot-src/src/i18n/en/dialog.ts — the remove dialog's title, its message, and the three storage kind words it interpolates. Mech/SoftNcRunnerController.cs — the REST surface: the read that orders each dictionary by id and attaches the brand's usage description to every row, the prefix computed from the resolved table's type, the three get-or-create writers and the three whole-row removals, the shared dependency wrapper that answers a missing table inside a success envelope, and the neighbouring readers this form's rows also feed — the three per-axis reads that take the axis-type row's key set bare, the tool-change read that falls back to its own configuration's keys when that set is empty, and the M-code read bound to the stored declaration map rather than the overlaid view. HiAPI Engine HiMech/NcParsers/Dependencys/ControllerParameterTableBase.cs — the three dictionaries this leaf is, the get-or-create bucket accessors, the role interfaces that let the domain-grouped leaves read the same rows, the axis-name set taken from the axis-type row, the three usage-description methods, the rotary-axis helper that writes type, reference position and rapid rate in one call, and the XML round-trip that persists every row including free extras. HiMech/NcParsers/Dependencys/Fanuc/FanucParameterTable.cs — the # vocabulary: the well-known numbers, the get-or-create defaults behind the modelled accessors, the macro-variable lookup over the work-offset address ranges, and the seed a fresh Fanuc or Mazak runner opens on. HiMech/NcParsers/Dependencys/Syntec/SyntecParameterTable.cs — the Pr vocabulary, and the peck clearance stored in microns with the conversion kept in its accessor. HiMech/NcParsers/Dependencys/Siemens/SiemensMachineDataTable.cs — the MD vocabulary: the indexing assignment, the three equidistant numbers this leaf alone edits and the spacing resolution that reads them, the tool-change mode, the tool-change M function with the read-time declaration overlay that never enters the stored map, the fixed-point position, and the seed that declares one system row. HiMech/NcParsers/Dependencys/Heidenhain/HeidenhainParameterTable.cs — the MP vocabulary and its two-row seed. HiMech/NcParsers/Dependencys/IsoCoordinateAddressMap.cs — the work-offset address scheme shared by the Fanuc and Syntec tables, the per-address description that captions those rows, and the seeding of every triad to zero. HiMech/NcParsers/Dependencys/IMachineAxisConfig.cs — the axis contract, and the axis-type enumeration a cell of the integer section stores. HiMech/NcParsers/Dependencys/Generic/ToolingMcConfig.cs — the tool-change pose, stored outside the three dictionaries, whose own X / Y / Z keys are what Tool-Change Position falls back to when the axis-type row is gone. HiMech/NcParsers/SoftNcRunner.cs — the five brand presets and which parameter-table proxy each carries, the Fanuc proxy inside the Mazak preset among them, the tool-change configuration every preset seeds, and the chain configuration that is the only other writer of the axis-type row and, on a rotary chain axis, of that axis' reference position and rapid rate. See Also Machine and Controller Plane — the plane this leaf sits on, and why the table it exposes is stored on the project rather than on the runner file Brand Matrix — the flag that grows this node, why it never reports false on a shipped preset, and why Mazak resolves the Fanuc table Editing Contract — the commit, rollback, confirm and toast rules this panel shares with the branch, and the add-footer details it differs on Interface Parameters — the same values in domain vocabulary, including the peck clearance this leaf shows in the brand's own unit Indexing Position Tables — the leaf that displays the MD30500 assignment and the equidistant definition that are written here"
},
"anatomy/general-setup/controller/machine/per-axis-tables.html": {
"href": "anatomy/general-setup/controller/machine/per-axis-tables.html",
@@ -237,7 +237,7 @@
"anatomy/general-setup/fixture.html": {
"href": "anatomy/general-setup/fixture.html",
"title": "Fixture | HiAPI-C# 2025",
- "summary": "Fixture The fixture is what holds the workpiece on the machine table: one geometry, and the two anchor transformers that place that geometry against the workpiece and against the table. It has two surfaces: the equipment/fixture branch of the General Setup page's Control Tree (/general-setup?tree=equipment/fixture), an equipment child of the General Setup group between Coolant and Workpiece. /fixture and anything below it redirects there; in the WPF client, a sub-window opened from the Main Panel. Both edit the one fixture the project owns. Key Model: Fixture On the web it is addressed by an IndexService key handed to the Object Management Menu Button and installed back onto the project through the controller's UpdateFixture. On the WPF client the same button is wired with a TargetObjectGetter / TargetObjectSetter pair (see that page for the design pattern). Assistant Model: LocalProjectService — owns the fixture as Fixture. The displayee differs by client. The web branch has no fixture-only canvas: it shares the General Setup canvas, whose displayee is the equipment-setup displayee (Disp/EquipmentSetupDisplayee.cs) — the merged fixture + workpiece scene with the anchor, buckle and controller-coordinate overlays. Its option set is the equipment-setup config (Disp/EquipmentSetupDisplayeeConfig.cs), carried on UserService.UserConfig as its EquipmentSetupDisplayeeConfig property. The WPF sub-window has a canvas of its own, whose displayee is FixtureEditorDisplayee configured by FixtureEditorDisplayeeConfig, taken from UserService.UserConfig as its FixtureSetupDisplayeeConfig property. Layout Control Tree Branch The root panel is rendered inline by the dock's primary editor pane, so it has no title label of its own — the wrapping expansion header carries the selection breadcrumb. Every item below is a tree node whose editor is swapped into that same PRIMARY row. Fixture Root Panel — equipment/fixture, item type FixtureRoot Object Management Menu Button — file extension .Fixture, load type Hi.NcMech.Fixtures.Fixture, HiMech, rel file Fixture.xml, based at the project directory. Load / Save As / Copy / Paste / XML. Geometry Type Badge — the attached geometry's kind name, none when the slot is empty. Intro caption, and an empty-state caption while no fixture key is minted. equipment/fixture/geometry — “Geometry”, a Geometry slot backing Geom. The slot's own panel is the kind picker (Geometry Management Control, selector only); the picked kind's editor is the slot's child item. Kinds offered: Box3d, Cylindroid, StlFile, TransformationGeom, GeomCombination, plus None. The geometry must satisfy IStlSource, so the runtime-only voxel CubeTreeFile is not among them. equipment/fixture/anchor — “Anchor”, a Group stem whose info text states how the fixture is placed. Two Transformer slots hang from it, each a kind picker (Transformer Manage Panel) over the picked kind's child editor: equipment/fixture/geom-to-workpiece — “Geom To Workpiece”, GeomToWorkpieceTransformer, which places the workpiece buckle — where the workpiece attaches — relative to the fixture geometry (see Workpiece). equipment/fixture/geom-to-table — “Geom To Table”, GeomToTableTransformer, which pins the fixture geometry onto the machine table buckle. Kinds offered on both: StaticTranslation, StaticRotation, StaticFreeform, DynamicTranslation, DynamicRotation, GeneralTransform, NoTransform. Shared slave view: the General Setup equipment canvas in the page's MAIN column, shared with Machine Tool, Workpiece and Controller (see General Setup Page). Its Display Options dropdown carries this branch's share of the scene — the Fixture Solid / Edge / Hide radio group, and the Fixture Geom Anchor, Workpiece Buckle and Table Buckle flags in the Anchors group. WPF Page Head Line Object Management Menu Button — file extension .Fixture, load type Fixture, rel file Fixture.xml. The pointed Editor Panel is the Management Tabs Panel, a ContentPresenter the button swaps between the tab stack and XML mode. Title Label Management Tabs Panel — the same content the tree renders as nodes, stacked as tabs: Geometry Tab — Geometry Management Control over Geom. Anchor Tab — a nested tab stack, each tab a Transformer Manage Panel: Geom To Workpiece Tab Geom To Table Tab Viewer Panel Viewer ToolBar RenderingCanvas Tool Bar Display Options menu — the Show Geom Anchor, Show Workpiece Buckle and Show Table Buckle checkboxes and the Solid / Edge / Hide rendering-mode radio group, all writing FixtureEditorDisplayeeConfig. RenderingCanvas — its DispEngine.Displayee is FixtureEditorDisplayee. Both clients put a draggable divider between the editor column and the canvas: a GridSplitter in the WPF page, nested draggable splitters on the web page (dock / content column / canvas), plus the dock's own height divider between the tree row and the editor row. Behavior ClearGeomCache() runs after any change at or below the branch. On the web each node's afterChange chain ends in the controller's ClearGeometryCache, which calls it; in WPF the page calls it directly from the geometry control's setter and update callbacks. The two anchor slots re-commit their swap-in before clearing the cache: an inner-value edit re-posts UpdateGeomToWorkpieceTransformer / UpdateGeomToTableTransformer, so the object the switchboard produced is always the one installed on the owning field when the redraw happens. Load / Paste / XML-Apply only swap the IndexService entry. The tree root then installs the result onto the project through UpdateFixture — the equipment setter re-attaches the buckles itself — re-runs Initialize to re-mint the branch's keys, and clears the geometry cache. The button's XML dialog re-emits its object-loaded event on Apply, so that install and refresh chain runs exactly once. Kind pickers are parent-aware. Picking a geometry kind calls CreateGeometry, which installs the new object on Geom server-side and maps the literal None to null; picking a transformer kind creates the object and then rebinds the owning field. View snapping differs by client. The WPF page snaps its canvas to the isometric view when the displayee is bound, and again whenever a new geometry object is set, on the assumption that a shape swap changes the scene more than an edit within one shape does. The shared web canvas snaps once, when its displayee is bound — the display controller's initialize does it server-side. Afterwards a geometry set only clears the cache, and the operator re-frames from the RenderingCanvas Tool Bar's view picker. Both canvases draw the live model, so an edit shows on the next frame with no further calls. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/useControlTreeHost.ts — builds the equipment/fixture root (item type FixtureRoot, keyed on the IndexService fixture key) with its geometry slot and the anchor Group holding geom-to-workpiece and geom-to-table; owns the clear-cache and transformer-rebind afterChange chains, the create hooks and the Object Management install handlers. wwwroot-src/src/components/controlTree/PrimarySlavePanel.vue — renders the root editor inline: the Object Management button, the geometry-type badge and the intro / empty-state captions. wwwroot-src/src/components/controlTree/itemTypes.ts — the ItemType registry that binds the branch's Geometry and Transformer slots and every concrete kind to their panels, and grows the sub-tree from the indexed object's type. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the Geometry node's kind picker. wwwroot-src/src/components/controlTree/TransformerSlotPanel.vue — the Geom To Workpiece and Geom To Table nodes' kind picker. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — hosts the concrete kind's own editor once a geometry or transformer kind is chosen. wwwroot-src/src/components/controlTree/ControlTreeDock.vue — the left dock: the Control Tree row over the PRIMARY editor row, with a draggable height divider. wwwroot-src/src/pages/GeneralSetupPage.vue — the three-column host page (dock / content column / canvas) that provides the equipment-scope control-tree host. wwwroot-src/src/components/mech/EquipmentSetupPanel.vue — the shared canvas column: the RenderingCanvasToolBar, the Display Options dropdown and the RenderingCanvas. wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue — the reused object-management dropdown, keyed entirely on its modelKey (see Object Management Menu Button). wwwroot-src/src/components/geom/GeometryEditor.vue — the generic geometry kind switchboard reached from the Geometry slot panel, including its None (unset) entry. wwwroot-src/src/components/topo/TransformerSelectPanel.vue — the generic transformer kind switchboard reached from the Transformer slot panels. wwwroot-src/src/api/fixture.ts — typed client for /api/Fixture/*: Initialize, UpdateFixture, the three Get…Type reads, UpdateGeometry, the two Update…Transformer rebinds, CreateGeometry and ClearGeometryCache. wwwroot-src/src/api/equipmentSetup.ts — typed client for the shared canvas: binds the equipment-setup displayee onto the connection's engine and drives its display options. wwwroot-src/src/router/routes.ts — declares general-setup and the fixture/:rest(.*)* redirect onto ?tree=equipment/fixture. Mech/FixtureController.cs — REST surface at /api/Fixture: Initialize, UpdateFixture, GetGeometryType, GetGeomToWorkpieceType, GetGeomToTableType, UpdateGeometry, UpdateGeomToWorkpieceTransformer, UpdateGeomToTableTransformer, CreateGeometry, IndexCurrentGeometry and ClearGeometryCache. Mech/EquipmentSetupDisplayController.cs — /api/mech/equipment-setup-display: binds and configures the displayee per rendering connection and serves its whole option set — the three rendering-mode endpoints (fixture, raw-geom, ideal-geom), show-machine, show-tool, show-dimension-bar, show-fixture-geom-anchor, show-workpiece-buckle, show-table-buckle, show-workpiece-geom-anchor, show-program-zero-anchor, show-meshed-geom, show-controller-coordinate and controller-coordinate-id. Disp/EquipmentSetupDisplayee.cs — the displayee the General Setup canvas renders: the merged fixture + workpiece scene with the anchor, buckle and controller-coordinate overlays. HiAPI Engine HiMech/NcMech/Fixtures/Fixture.cs — the key model: the geometry, the table and workpiece buckles, the geom anchor, the two anchor transformers and ClearGeomCache. HiMech/NcMech/Fixtures/FixtureEditorDisplayee.cs — the WPF fixture canvas's displayee. HiMech/NcMech/Fixtures/FixtureEditorDisplayeeConfig.cs — its option set: ShowGeomAnchor, ShowWorkpieceBuckle, ShowTableBuckle and the rendering mode. See Also Mechanism Builder Page — reuses this page’s parent-aware transformer rebind pattern"
+ "summary": "Fixture The fixture is what holds the workpiece on the machine table: one geometry, and the two anchor transformers that place that geometry against the workpiece and against the table. It has two surfaces: the equipment/fixture branch of the General Setup page's Control Tree (/general-setup?tree=equipment/fixture), an equipment child of the General Setup group between Coolant and Workpiece. /fixture and anything below it redirects there. It edits the one fixture the project owns. Key Model: Fixture It is addressed by an IndexService key handed to the Object Management Menu Button and installed back onto the project through the controller's UpdateFixture. Assistant Model: LocalProjectService — owns the fixture as Fixture. There is no fixture-only canvas: the branch shares the General Setup canvas, whose displayee is the equipment-setup displayee (Disp/EquipmentSetupDisplayee.cs) — the merged fixture + workpiece scene with the anchor, buckle and controller-coordinate overlays. Its option set is the equipment-setup config (Disp/EquipmentSetupDisplayeeConfig.cs), carried on UserService.UserConfig as its EquipmentSetupDisplayeeConfig property. Layout Control Tree Branch The root panel is rendered inline by the dock's primary editor pane, so it has no title label of its own — the wrapping expansion header carries the selection breadcrumb. Every item below is a tree node whose editor is swapped into that same PRIMARY row. Fixture Root Panel — equipment/fixture, item type FixtureRoot Object Management Menu Button — file extension .Fixture, load type Hi.NcMech.Fixtures.Fixture, HiMech, rel file Fixture.xml, based at the project directory. Load / Save As / Copy / Paste / XML. Geometry Type Badge — the attached geometry's kind name, none when the slot is empty. Intro caption, and an empty-state caption while no fixture key is minted. equipment/fixture/geometry — “Geometry”, a Geometry slot backing Geom. The slot's own panel is the kind picker (Geometry Management Control, selector only); the picked kind's editor is the slot's child item. Kinds offered: Box3d, Cylindroid, StlFile, TransformationGeom, GeomCombination, plus None. The geometry must satisfy IStlSource, so the runtime-only voxel CubeTreeFile is not among them. equipment/fixture/anchor — “Anchor”, a Group stem whose info text states how the fixture is placed. Two Transformer slots hang from it, each a kind picker (Transformer Manage Panel) over the picked kind's child editor: equipment/fixture/geom-to-workpiece — “Geom To Workpiece”, GeomToWorkpieceTransformer, which places the workpiece buckle — where the workpiece attaches — relative to the fixture geometry (see Workpiece). equipment/fixture/geom-to-table — “Geom To Table”, GeomToTableTransformer, which pins the fixture geometry onto the machine table buckle. Kinds offered on both: StaticTranslation, StaticRotation, StaticFreeform, DynamicTranslation, DynamicRotation, GeneralTransform, NoTransform. Shared slave view: the General Setup equipment canvas in the page's MAIN column, shared with Machine Tool, Workpiece and Controller (see General Setup Page). Its Display Options dropdown carries this branch's share of the scene — the Fixture Solid / Edge / Hide radio group, and the Fixture Geom Anchor, Workpiece Buckle and Table Buckle flags in the Anchors group. Behavior ClearGeomCache() runs after any change at or below the branch: each node's afterChange chain ends in the controller's ClearGeometryCache, which calls it. The two anchor slots re-commit their swap-in before clearing the cache: an inner-value edit re-posts UpdateGeomToWorkpieceTransformer / UpdateGeomToTableTransformer, so the object the switchboard produced is always the one installed on the owning field when the redraw happens. Load / Paste / XML-Apply only swap the IndexService entry. The tree root then installs the result onto the project through UpdateFixture — the equipment setter re-attaches the buckles itself — re-runs Initialize to re-mint the branch's keys, and clears the geometry cache. The button's XML dialog re-emits its object-loaded event on Apply, so that install and refresh chain runs exactly once. Kind pickers are parent-aware. Picking a geometry kind calls CreateGeometry, which installs the new object on Geom server-side and maps the literal None to null; picking a transformer kind creates the object and then rebinds the owning field. The shared canvas snaps to the isometric view once, when its displayee is bound — the display controller's initialize does it server-side. Afterwards a geometry set only clears the cache, and the operator re-frames from the RenderingCanvas Tool Bar's view picker. Both canvases draw the live model, so an edit shows on the next frame with no further calls. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/useControlTreeHost.ts — builds the equipment/fixture root (item type FixtureRoot, keyed on the IndexService fixture key) with its geometry slot and the anchor Group holding geom-to-workpiece and geom-to-table; owns the clear-cache and transformer-rebind afterChange chains, the create hooks and the Object Management install handlers. wwwroot-src/src/components/controlTree/PrimarySlavePanel.vue — renders the root editor inline: the Object Management button, the geometry-type badge and the intro / empty-state captions. wwwroot-src/src/components/controlTree/itemTypes.ts — the ItemType registry that binds the branch's Geometry and Transformer slots and every concrete kind to their panels, and grows the sub-tree from the indexed object's type. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the Geometry node's kind picker. wwwroot-src/src/components/controlTree/TransformerSlotPanel.vue — the Geom To Workpiece and Geom To Table nodes' kind picker. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — hosts the concrete kind's own editor once a geometry or transformer kind is chosen. wwwroot-src/src/components/controlTree/ControlTreeDock.vue — the left dock: the Control Tree row over the PRIMARY editor row, with a draggable height divider. wwwroot-src/src/pages/GeneralSetupPage.vue — the three-column host page (dock / content column / canvas) that provides the equipment-scope control-tree host. wwwroot-src/src/components/mech/EquipmentSetupPanel.vue — the shared canvas column: the RenderingCanvasToolBar, the Display Options dropdown and the RenderingCanvas. wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue — the reused object-management dropdown, keyed entirely on its modelKey (see Object Management Menu Button). wwwroot-src/src/components/geom/GeometryEditor.vue — the generic geometry kind switchboard reached from the Geometry slot panel, including its None (unset) entry. wwwroot-src/src/components/topo/TransformerSelectPanel.vue — the generic transformer kind switchboard reached from the Transformer slot panels. wwwroot-src/src/api/fixture.ts — typed client for /api/Fixture/*: Initialize, UpdateFixture, the three Get…Type reads, UpdateGeometry, the two Update…Transformer rebinds, CreateGeometry and ClearGeometryCache. wwwroot-src/src/api/equipmentSetup.ts — typed client for the shared canvas: binds the equipment-setup displayee onto the connection's engine and drives its display options. wwwroot-src/src/router/routes.ts — declares general-setup and the fixture/:rest(.*)* redirect onto ?tree=equipment/fixture. Mech/FixtureController.cs — REST surface at /api/Fixture: Initialize, UpdateFixture, GetGeometryType, GetGeomToWorkpieceType, GetGeomToTableType, UpdateGeometry, UpdateGeomToWorkpieceTransformer, UpdateGeomToTableTransformer, CreateGeometry, IndexCurrentGeometry and ClearGeometryCache. Mech/EquipmentSetupDisplayController.cs — /api/mech/equipment-setup-display: binds and configures the displayee per rendering connection and serves its whole option set — the three rendering-mode endpoints (fixture, raw-geom, ideal-geom), show-machine, show-tool, show-dimension-bar, show-fixture-geom-anchor, show-workpiece-buckle, show-table-buckle, show-workpiece-geom-anchor, show-program-zero-anchor, show-meshed-geom, show-controller-coordinate and controller-coordinate-id. Disp/EquipmentSetupDisplayee.cs — the displayee the General Setup canvas renders: the merged fixture + workpiece scene with the anchor, buckle and controller-coordinate overlays. HiAPI Engine HiMech/NcMech/Fixtures/Fixture.cs — the key model: the geometry, the table and workpiece buckles, the geom anchor, the two anchor transformers and ClearGeomCache. See Also Mechanism Builder Page — reuses this page’s parent-aware transformer rebind pattern Freeform Holder Panel — the other surface built from the same generic Geometry and Transformer slots"
},
"anatomy/general-setup/hidden-controllers.html": {
"href": "anatomy/general-setup/hidden-controllers.html",
@@ -252,42 +252,42 @@
"anatomy/general-setup/machine-tool.html": {
"href": "anatomy/general-setup/machine-tool.html",
"title": "Machine Tool | HiAPI-C# 2025",
- "summary": "Machine Tool The machine tool is the project's kinematic chain — the linkage between the machine table and the tool spindle. It has three surfaces: the equipment/machine-tool branch of the General Setup page's Control Tree (/general-setup?tree=equipment/machine-tool), the first equipment child of the General Setup group and a leaf: chain structure belongs to the Mechanism Builder Page, so the root carries no child slots; the /machine-tool route, a standalone surface pairing a chain-only canvas with a load button and a GUI / XML view of what is loaded. Its fields are read-only, but the route is not: its Load installs the picked chain file onto the project. It carries no Page-menu entry and is reached by URL; in the WPF client, a sub-window opened from the Main Panel. All three edit the one chain the project owns. Key Model: IMachiningChain On the web the chain is addressed by an IndexService key handed to the Object Management Menu Button and installed back onto the project through the controller's Update. On the WPF client the same button is wired with a TargetObjectGetter / TargetObjectSetter pair (see that page for the design pattern). Assistant Model: LocalProjectService — owns the chain as the MachiningChain / MachiningChainFile pair. MachiningProject Layout Control Tree Branch The root panel is rendered inline by the dock's primary editor pane, so it has no title label of its own — the wrapping expansion header carries the selection breadcrumb. Machine Tool Root Panel Object Management Menu Button New Items: one entry, New ClMillingDevice (“CL-driven blank device”). Its parameterless form is the complete CL-driven device; any other chain type arrives by Load, Paste or XML. Load / Save As / Copy / Paste / XML, over the project directory and the admin directory. File extensions are .MachineTool and .mt, so the Load / Save As filter reads *.MachineTool / *.mt / *.xml; the load type is IMachiningChain. Type Badge — the chain's runtime type name, none when no chain is attached. Read-only caption lines, shown once a chain is attached: Name: — Name Note: — Note, when non-empty File: — the chain's project-relative file, when it has one Intro caption, and an empty-state caption while no project is open. Shared slave view: the General Setup equipment canvas, whose Solid group's Machine flag draws this chain (see General Setup Page). That flag starts cleared, so the shared canvas shows a correctly attached chain only after it is ticked; the /machine-tool route's own canvas has no such flag and always draws it. /machine-tool Route Load and show only: no Save As, no ReLoad, no name editing. Header Row Title Label “Machine Tool” [relFile] caption — the loaded chain's project-relative path, when it has one. Folder-icon Load Button — opens the server-side file explorer dialog, restricted to the ProjectDirectory and ResourceDir roots and filtered to Machine Tool (.MachineTool|.mt). Disabled until a project is open. Read-only Name Field, shown once a chain is loaded. GUI / XML View Toggle, disabled until a chain is loaded. Body — two columns Left: Identity Card or XML Source GUI mode — a read-only Name input, a read-only auto-grow Note textarea, and a Type chip. XML mode — the chain serialised to XML, badged read-only, with a refresh button. The text is fetched lazily on the first switch to XML and re-fetched after a load while XML mode is open. Right: Viewer Panel RenderingCanvas Tool Bar and a connection badge. RenderingCanvas, cache id MachineToolCanvas — this route's own canvas. WPF Page Head Line Object Management Menu Button file extension is mt; the load type is IMachiningChain. The pointed Editor Panel is Management Panel — a ContentPresenter the button swaps between the built GUI panel and an AvalonEdit text editor for XML mode. Title Label “Machine Tool” Management Panel If the key model inherits INameNote: Name Setting Line Name Label Name TextField — its TextChanged writes straight onto the chain. Note Setting Line Note Label Note TextField — multi-line, same write-through. Type Line — italic Type: {chain type}. Empty-state label when no chain is loaded. Behavior Load / Paste / XML-Apply only swap the IndexService entry. The tree root then installs the result onto MachiningChain — the setter re-attaches the fixture and workpiece buckles and wires the runtime hooks itself — re-mints the key and rebuilds the branch. The button's XML dialog re-emits its object-loaded event on Apply, so that install and refresh chain runs exactly once. A chain the file describes wrongly is refused, and which of the two steps refuses it depends on the file. A machine tool file asking for its collision pairs to be generated is walked from the ground anchor to each end while it is being read, so a chain carrying no anchor named exactly t or exactly w never reaches the IndexService at all: Object Management's Load answers Load failed: This kinematic chain has no worktable-end anchor named 'w'. A file that lists its collision pairs instead is read without that walk and does reach the index; the install that follows builds the kinematics solver, which requires the same two anchors, so the same sentence arrives one step later as Install machine tool: … and the project keeps the chain it had. The shipped machine tool files all ask for generated pairs, so the first form is the one usually met. The worktable end is checked before the tool end, so a chain missing both names only 'w' until that one is fixed. The /machine-tool route runs both steps inside its single call, so either refusal reaches it as Load machine tool: …, and — like the no-project refusal behind the disabled folder button — leaves the loaded chain untouched. The IndexService key is minted even on a project with no chain attached, so Load and Paste stay usable from an empty root. The /machine-tool route's own Load takes the shorter path: one call materialises the picked file server-side and assigns the chain to MachiningChain in the same request, with no IndexService swap in between. It re-points MachiningChainFile too — project-relative when the picked file sits under the project directory, and the path relative to the chosen root otherwise. It is refused while no project is open, which is why the folder button is disabled there. New ClMillingDevice builds and installs the blank chain in one server call and clears the project's chain-file reference, so a later project save embeds the fresh chain inline instead of overwriting the previous chain's file. When the replacement came from a server-file Load, the install also re-points MachiningChainFile: project-relative when the file sits under the project directory, resource-root-relative when it sits under the resource root, absolute otherwise. An absolute path there would make every later project save rewrite the shared resource file in place instead of copying it into the project. Paste and XML applies leave the file reference unchanged. Both canvases draw the live model, so a replacement shows on the next frame with no further calls. The /machine-tool canvas snaps to the isometric view when it is bound and again after each load; the shared equipment canvas snaps once, when its displayee is bound. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/useControlTreeHost.ts — builds the equipment/machine-tool node (item type MachineToolRoot, keyed on the IndexService chain key) and owns the install / create / rebind handlers. wwwroot-src/src/components/controlTree/PrimarySlavePanel.vue — renders that branch inline: the Object Management button, its New ClMillingDevice entry, the type badge and the read-only Name / Note / File captions. wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue — the reused object-management dropdown, keyed entirely on its modelKey (see Object Management Menu Button). wwwroot-src/src/components/mech/EquipmentSetupPanel.vue — the shared equipment canvas the tree root's chain is drawn on. wwwroot-src/src/pages/MachineToolPage.vue — the /machine-tool route. wwwroot-src/src/components/widgets/FileExplorerDialog.vue — the server-side file picker that route opens, seeded to the resource root's MachineTool folder when nothing is loaded and to the current file's directory otherwise; it emits \"{rootName}:{relativePath}\" selection keys. wwwroot-src/src/api/machineTool.ts — typed client for /api/mech/machine-tool/*: snapshot, initialize, update, create, load, XML, plus the display initialize and reset-view calls. Shared by the route page and the tree root. wwwroot-src/src/router/routes.ts — declares the machine-tool route. wwwroot-src/src/components/AppMenuBar.vue — the Page menu, which lists General Setup but not /machine-tool. Mech/MachineToolController.cs — REST surface at /api/mech/machine-tool: the snapshot DTO, initialize / update / create / load and the XML read. Only ClMillingDevice is offered for blank creation. Mech/MachineToolDisplayController.cs — /api/mech/machine-tool/display: binds the project's chain onto a rendering connection's DispEngine through a delegating displayee, and serves the isometric reset-view the route page calls after a load. See Also Mechanism Builder Page — the user-scoped editor for the same anchor topology"
+ "summary": "Machine Tool The machine tool is the project's kinematic chain — the linkage between the machine table and the tool spindle. It has three surfaces: the equipment/machine-tool branch of the General Setup page's Control Tree (/general-setup?tree=equipment/machine-tool), the first equipment child of the General Setup group and a leaf: chain structure belongs to the Mechanism Builder Page, so the root carries no child slots; the /machine-tool route, a standalone surface pairing a chain-only canvas with a load button and a GUI / XML view of what is loaded. Its fields are read-only, but the route is not: its Load installs the picked chain file onto the project. It carries no Page-menu entry and is reached by URL. Both edit the one chain the project owns. Key Model: IMachiningChain The chain is addressed by an IndexService key handed to the Object Management Menu Button and installed back onto the project through the controller's Update. Assistant Model: LocalProjectService — owns the chain as the MachiningChain / MachiningChainFile pair. MachiningProject Layout Control Tree Branch The root panel is rendered inline by the dock's primary editor pane, so it has no title label of its own — the wrapping expansion header carries the selection breadcrumb. Machine Tool Root Panel Object Management Menu Button New Items: one entry, New ClMillingDevice (“CL-driven blank device”). Its parameterless form is the complete CL-driven device; any other chain type arrives by Load, Paste or XML. Load / Save As / Copy / Paste / XML, over the project directory and the admin directory. File extensions are .MachineTool and .mt, so the Load / Save As filter reads *.MachineTool / *.mt / *.xml; the load type is IMachiningChain. Type Badge — the chain's runtime type name, none when no chain is attached. Read-only caption lines, shown once a chain is attached: Name: — Name Note: — Note, when non-empty File: — the chain's project-relative file, when it has one Intro caption, and an empty-state caption while no project is open. Shared slave view: the General Setup equipment canvas, whose Solid group's Machine flag draws this chain (see General Setup Page). That flag starts cleared, so the shared canvas shows a correctly attached chain only after it is ticked; the /machine-tool route's own canvas has no such flag and always draws it. /machine-tool Route Load and show only: no Save As, no ReLoad, no name editing. Header Row Title Label “Machine Tool” [relFile] caption — the loaded chain's project-relative path, when it has one. Folder-icon Load Button — opens the server-side file explorer dialog, restricted to the ProjectDirectory and ResourceDir roots and filtered to Machine Tool (.MachineTool|.mt). Disabled until a project is open. Read-only Name Field, shown once a chain is loaded. GUI / XML View Toggle, disabled until a chain is loaded. Body — two columns Left: Identity Card or XML Source GUI mode — a read-only Name input, a read-only auto-grow Note textarea, and a Type chip. XML mode — the chain serialised to XML, badged read-only, with a refresh button. The text is fetched lazily on the first switch to XML and re-fetched after a load while XML mode is open. Right: Viewer Panel RenderingCanvas Tool Bar and a connection badge. RenderingCanvas, cache id MachineToolCanvas — this route's own canvas. Behavior Load / Paste / XML-Apply only swap the IndexService entry. The tree root then installs the result onto MachiningChain — the setter re-attaches the fixture and workpiece buckles and wires the runtime hooks itself — re-mints the key and rebuilds the branch. The button's XML dialog re-emits its object-loaded event on Apply, so that install and refresh chain runs exactly once. A chain the file describes wrongly is refused, and which of the two steps refuses it depends on the file. A machine tool file asking for its collision pairs to be generated is walked from the ground anchor to each end while it is being read, so a chain carrying no anchor named exactly t or exactly w never reaches the IndexService at all: Object Management's Load answers Load failed: This kinematic chain has no worktable-end anchor named 'w'. A file that lists its collision pairs instead is read without that walk and does reach the index; the install that follows builds the kinematics solver, which requires the same two anchors, so the same sentence arrives one step later as Install machine tool: … and the project keeps the chain it had. The shipped machine tool files all ask for generated pairs, so the first form is the one usually met. The worktable end is checked before the tool end, so a chain missing both names only 'w' until that one is fixed. The /machine-tool route runs both steps inside its single call, so either refusal reaches it as Load machine tool: …, and — like the no-project refusal behind the disabled folder button — leaves the loaded chain untouched. The IndexService key is minted even on a project with no chain attached, so Load and Paste stay usable from an empty root. The /machine-tool route's own Load takes the shorter path: one call materialises the picked file server-side and assigns the chain to MachiningChain in the same request, with no IndexService swap in between. It re-points MachiningChainFile too — project-relative when the picked file sits under the project directory, and the path relative to the chosen root otherwise. It is refused while no project is open, which is why the folder button is disabled there. New ClMillingDevice builds and installs the blank chain in one server call and clears the project's chain-file reference, so a later project save embeds the fresh chain inline instead of overwriting the previous chain's file. When the replacement came from a server-file Load, the install also re-points MachiningChainFile: project-relative when the file sits under the project directory, resource-root-relative when it sits under the resource root, absolute otherwise. An absolute path there would make every later project save rewrite the shared resource file in place instead of copying it into the project. Paste and XML applies leave the file reference unchanged. Both canvases draw the live model, so a replacement shows on the next frame with no further calls. The /machine-tool canvas snaps to the isometric view when it is bound and again after each load; the shared equipment canvas snaps once, when its displayee is bound. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/useControlTreeHost.ts — builds the equipment/machine-tool node (item type MachineToolRoot, keyed on the IndexService chain key) and owns the install / create / rebind handlers. wwwroot-src/src/components/controlTree/PrimarySlavePanel.vue — renders that branch inline: the Object Management button, its New ClMillingDevice entry, the type badge and the read-only Name / Note / File captions. wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue — the reused object-management dropdown, keyed entirely on its modelKey (see Object Management Menu Button). wwwroot-src/src/components/mech/EquipmentSetupPanel.vue — the shared equipment canvas the tree root's chain is drawn on. wwwroot-src/src/pages/MachineToolPage.vue — the /machine-tool route. wwwroot-src/src/components/widgets/FileExplorerDialog.vue — the server-side file picker that route opens, seeded to the resource root's MachineTool folder when nothing is loaded and to the current file's directory otherwise; it emits \"{rootName}:{relativePath}\" selection keys. wwwroot-src/src/api/machineTool.ts — typed client for /api/mech/machine-tool/*: snapshot, initialize, update, create, load, XML, plus the display initialize and reset-view calls. Shared by the route page and the tree root. wwwroot-src/src/router/routes.ts — declares the machine-tool route. wwwroot-src/src/components/AppMenuBar.vue — the Page menu, which lists General Setup but not /machine-tool. Mech/MachineToolController.cs — REST surface at /api/mech/machine-tool: the snapshot DTO, initialize / update / create / load and the XML read. Only ClMillingDevice is offered for blank creation. Mech/MachineToolDisplayController.cs — /api/mech/machine-tool/display: binds the project's chain onto a rendering connection's DispEngine through a delegating displayee, and serves the isometric reset-view the route page calls after a load. See Also Mechanism Builder Page — the user-scoped editor for the same anchor topology"
},
"anatomy/general-setup/spindle-capability.html": {
"href": "anatomy/general-setup/spindle-capability.html",
"title": "Spindle Capability | HiAPI-C# 2025",
- "summary": "Spindle Capability The Spindle Capability editor is the equipment/spindle branch of the General Setup page's Control Tree (/general-setup?tree=equipment/spindle), the equipment child after Machine Tool. Two older paths redirect onto it: /spindle-capability/:tab?, whose tab segment maps straight onto one of the branch's five children, and /equipment/spindle. The menu bar carries no entry of its own for it — the Page menu reaches General Setup, and the tree reaches the branch. It edits SpindleCapability on the project's authored equipment face, SetupEquipment, reached as SetupEquipment. It exposes the metadata (name, note), the thermal scalars (energy efficiency, working-temperature ceiling), the gear-shift spindle speed, the two dry-run coefficients, and the power / torque contour lists. Key Model: SpindleCapability Assistant Model: SetupEquipment — owns the capability as SpindleCapability and its optional side-file reference SpindleCapabilityFile. MachiningProject — carries that face across the .hincproj save. Note The WPF desktop app has no spindle-capability surface: no page, no panel, and no handler for the .SpindleCapability extension. There, the value is whatever the project XML carries on the equipment face, or the class defaults when the XML says nothing. The .SpindleCapability object management menu ships on the web only, on this branch's root panel. Layout The branch is one root plus five children, six selectable nodes in all. Each node's editor occupies the dock's PRIMARY row, and all six — the root included — register the same CONTENT-column view, the two contour charts, so the charts stay mounted while the operator walks the branch. Control Tree Branch Spindle Capability Root Panel — equipment/spindle, item type SpindleCapabilityRoot Object Management Menu Button — Load / Save As / Copy / Paste / XML over file extension .SpindleCapability, load type Hi.Milling.SpindleCapability, HiMech, rel file SpindleCapability.xml, based at the project directory. This is the whole file surface of the editor. Caption — the capability's name, or a “no capability” note. Empty state, while nothing is attached: an hourglass, a “not attached to project” line and a hint pointing at the ⋮ menu's Load entry. Name TextField — Name. Note TextField — Note. equipment/spindle/thermal — “Thermal / Energy”, item type SpindleScalars Energy Efficiency NumberField — EnergyEfficiency, clamped to 0 – 1. Working Temperature Upper Boundary NumberField (°C) — WorkingTemperatureUpperBoundary_C. equipment/spindle/gear-shift — “Gear Shift”, item type SpindleScalars Has-Gear-Shift CheckBox — flips GearShiftSpindleSpeed_rpm between null (no mechanism) and 0 (mechanism present; the operator dials in the speed). Gear Shift Spindle Speed NumberField (rpm) — always rendered, disabled until the checkbox is on. equipment/spindle/dry-run — “Dry-Run Coefficients”, item type SpindleScalars Friction Power Coefficient NumberField (mW/rpm) — DryRunFrictionPowerCoefficient_mWdrpm. Windage Power Coefficient NumberField (pW/rpm³) — DryRunWindagePowerCoefficient_pWdrpm3. equipment/spindle/power — “Power Contours”, item type SpindleContour Count line and an Add button. Contour Selector — a select over the contour list, each entry labelled by its workable duration (n min, or Continuous for the infinite one). Edit-duration Button — opens the modal below. Delete Button — confirms, then removes the selected contour. Disabled at one remaining contour. Points Table — the selected contour's points, one row per point: a spindle-speed cell (rpm, min: 0), a value cell, an insert-next button that clones the row, and a double-click remove that is disabled at one remaining point. A cell edit replaces the whole point list server-side. Empty state, when the axis has no contour yet. Edit-duration Modal Continuous (∞) CheckBox — disabled when another contour already holds the continuous key. Workable Duration NumberField (min), shown while Continuous is off, min: 0. Save rejects a non-positive duration and is a no-op when the key is unchanged. equipment/spindle/torque — “Torque Contours”, item type SpindleContour, the same shape over the torque list. Shared content view, registered by the root and by all five children: the two contour charts in the General Setup page's CONTENT column. Power chart and Torque chart, each with a chip legend — one chip per contour, showing its duration and, on hover, its point count. Clicking a chip selects the contour the PRIMARY-row editor edits. A vertical marker line at the gear-shift spindle speed, while one is set. Its own not-attached empty state, mirroring the root panel's. Behavior Rpm ↔ cycles/s conversion lives server-side. SpindleCapability stores spindle speed in cycles/s (Hz); the controller converts to rpm in its DTOs and back on write. The frontend only ever sees rpm. Nullable gear shift. The Has-Gear-Shift checkbox writes 0 when checked and null when cleared, which is how the model distinguishes “mechanism present, speed not yet dialled in” from “no gear-shift mechanism”. One state, thin views throughout. Every panel on the branch — root, the three scalar sections, the two contour sections and the charts — reads and writes one module-singleton composable. A point edit therefore redraws the chart in the same tick, and a legend click moves the editor. The composable installs a single project-change watch that reloads on open and clears on close. No cache chain. These scalars feed the cutting-force and thermal physics, not the setup canvas, so the branch's afterChange does nothing — unlike the geometry branches, nothing here clears a geometry cache. Add Contour. The prompt is pre-filled with 60; a blank entry means continuous (∞). A duration already present is refused, a second continuous contour included. The new contour is seeded from the currently selected contour, falling back to the first in the list, and to a built-in default curve when the axis is empty — so the operator rarely draws from scratch. Project-scoped, and forwarded to the run. The capability lives on the authored equipment face and is persisted with the .hincproj save; setting SpindleCapabilityFile externalizes it to a side-file instead. The runtime equipment face holds the same object by reference, so a scalar or point edit is visible to a run immediately; a replacement (Load, Paste, XML Apply) re-stamps that reference through the project service's ForwardSetupEnvironmentToExecution. Load / Paste / XML-Apply only swap the IndexService entry. The root panel then installs the result onto the equipment through the controller's update, and reloads the snapshot and the key. The controller's initialize indexes a blank placeholder when nothing is attached yet, which is what keeps the ⋮ menu usable — and Load reachable — on a project with no capability. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/useControlTreeHost.ts — builds the equipment/spindle root (item type SpindleCapabilityRoot) and its five children: thermal, gear-shift and dry-run as SpindleScalars, power and torque as SpindleContour. wwwroot-src/src/components/controlTree/itemTypes.ts — registers those three item types and gives all of them the same CONTENT-column view. wwwroot-src/src/components/controlTree/SpindleCapabilityPanel.vue — the branch root panel: the Object Management button, the name caption, the not-attached empty state, and the Name / Note fields. wwwroot-src/src/components/controlTree/SpindleScalarsPanel.vue — one scalar section per role path: thermal, gear-shift (checkbox plus the rpm field, disabled while the value is null) and dry-run. wwwroot-src/src/components/controlTree/SpindleContourPanel.vue — the power / torque child: the count line, Add, the contour selector, the edit-duration modal and the delete button, hosting the point editor. wwwroot-src/src/components/spindle/SpindleContourEditor.vue — the selected contour's numeric points table; its own header is hidden when the tree panel drives it. wwwroot-src/src/components/spindle/SpindleContoursPanel.vue — the CONTENT-column view every spindle item registers: both charts. wwwroot-src/src/components/spindle/SpindleContoursChart.vue — one plotted chart with the clickable chip legend that selects the contour the editor edits, plus the gear-shift marker line. wwwroot-src/src/components/controlTree/ContentSlavePanel.vue — the General Setup page's CONTENT column, which mounts whichever content panel the selection's item type registers; it deliberately leaves that component unkeyed so the charts survive a move between the branch's six nodes. wwwroot-src/src/composables/useSpindleCapability.ts — the module-singleton state and every mutation on the branch: the scalar handlers, add / remove / rename contour, the point updates and the object-management install hooks. wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue — the reused ⋮ menu carrying Load / Save As / Copy / Paste / XML for the .SpindleCapability file surface. wwwroot-src/src/api/spindleCapability.ts — typed client for /api/mech/spindle-capability/*. wwwroot-src/src/router/routes.ts — the spindle-capability/:tab? redirect (the tab mapped onto the branch child id) and the equipment/spindle redirect, both landing on general-setup?tree=…. wwwroot-src/src/router/treeRoutes.ts — defines the tab segments that redirect accepts: thermal, gear-shift, dry-run, power, torque. Mech/SpindleCapabilityController.cs — REST surface at /api/mech/spindle-capability over the authored equipment face's capability: GET / — flat snapshot: metadata plus the contour keys of each axis. GET /power-contours, GET /torque-contours — per-axis contour lists with their points. PUT /name | /note | /energy-efficiency | /working-temperature-upper-boundary-c | /gear-shift-spindle-speed-rpm | /dry-run-friction-power-coefficient-mwdrpm | /dry-run-windage-power-coefficient-pwdrpm3 — one scalar each. POST /power-contours | /torque-contours — add one contour. DELETE /power-contours/{key} | /torque-contours/{key} — remove one contour ({key} accepts numeric strings and \"inf\" / \"infinity\"). PUT /power-contours/{key}/points | /torque-contours/{key}/points — replace one contour's points; this is what backs per-point editing. PUT /power-contours/{key}/key | /torque-contours/{key}/key — rename a contour's workable-duration key, refusing a key that already exists; this is what backs the edit-duration modal. GET /xml — serialise to XML text. POST /load, POST /load-file, POST /reload — install from XML text, from a file under a named root, or from the file already stamped on the equipment. PUT /capability-file — set the side-file reference without reloading. POST /initialize, POST /update — index the capability for the Object Management button, and install the swapped-in object back onto the equipment. HiAPI Engine HiMech/Milling/SpindleCapability.cs — the model: EnergyEfficiency, WorkingTemperatureUpperBoundary_K with its _C accessor, the nullable GearShiftSpindleSpeed_cycleds with its _rpm convenience property, the two dry-run coefficients and the power / torque contour dictionaries keyed by workable duration. HiMech/Machining/MachiningEquipmentUtils/SetupEquipment.cs — the authored equipment face that owns the capability and its file reference and serializes them, inline or as a side-file reference. See Also Mechanism Builder Page — same file-level IO pattern (Load / Reload / Save As) but user-scoped rather than project-scoped. Background / Coolant — sibling branch of the same Control Tree, editing the same authored equipment face. Spindle Capability — what the model represents physically and how the per-step ratios come out of it."
+ "summary": "Spindle Capability The Spindle Capability editor is the equipment/spindle branch of the General Setup page's Control Tree (/general-setup?tree=equipment/spindle), the equipment child after Machine Tool. Two older paths redirect onto it: /spindle-capability/:tab?, whose tab segment maps straight onto one of the branch's five children, and /equipment/spindle. The menu bar carries no entry of its own for it — the Page menu reaches General Setup, and the tree reaches the branch. It edits SpindleCapability on the project's authored equipment face, SetupEquipment, reached as SetupEquipment. It exposes the metadata (name, note), the thermal scalars (energy efficiency, working-temperature ceiling), the gear-shift spindle speed, the two dry-run coefficients, and the power / torque contour lists. Key Model: SpindleCapability Assistant Model: SetupEquipment — owns the capability as SpindleCapability and its optional side-file reference SpindleCapabilityFile. MachiningProject — carries that face across the .hincproj save. Layout The branch is one root plus five children, six selectable nodes in all. Each node's editor occupies the dock's PRIMARY row, and all six — the root included — register the same CONTENT-column view, the two contour charts, so the charts stay mounted while the operator walks the branch. Control Tree Branch Spindle Capability Root Panel — equipment/spindle, item type SpindleCapabilityRoot Object Management Menu Button — Load / Save As / Copy / Paste / XML over file extension .SpindleCapability, load type Hi.Milling.SpindleCapability, HiMech, rel file SpindleCapability.xml, based at the project directory. This is the whole file surface of the editor. Caption — the capability's name, or a “no capability” note. Empty state, while nothing is attached: an hourglass, a “not attached to project” line and a hint pointing at the ⋮ menu's Load entry. Name TextField — Name. Note TextField — Note. equipment/spindle/thermal — “Thermal / Energy”, item type SpindleScalars Energy Efficiency NumberField — EnergyEfficiency, clamped to 0 – 1. Working Temperature Upper Boundary NumberField (°C) — WorkingTemperatureUpperBoundary_C. equipment/spindle/gear-shift — “Gear Shift”, item type SpindleScalars Has-Gear-Shift CheckBox — flips GearShiftSpindleSpeed_rpm between null (no mechanism) and 0 (mechanism present; the operator dials in the speed). Gear Shift Spindle Speed NumberField (rpm) — always rendered, disabled until the checkbox is on. equipment/spindle/dry-run — “Dry-Run Coefficients”, item type SpindleScalars Friction Power Coefficient NumberField (mW/rpm) — DryRunFrictionPowerCoefficient_mWdrpm. Windage Power Coefficient NumberField (pW/rpm³) — DryRunWindagePowerCoefficient_pWdrpm3. equipment/spindle/power — “Power Contours”, item type SpindleContour Count line and an Add button. Contour Selector — a select over the contour list, each entry labelled by its workable duration (n min, or Continuous for the infinite one). Edit-duration Button — opens the modal below. Delete Button — confirms, then removes the selected contour. Disabled at one remaining contour. Points Table — the selected contour's points, one row per point: a spindle-speed cell (rpm, min: 0), a value cell, an insert-next button that clones the row, and a double-click remove that is disabled at one remaining point. A cell edit replaces the whole point list server-side. Empty state, when the axis has no contour yet. Edit-duration Modal Continuous (∞) CheckBox — disabled when another contour already holds the continuous key. Workable Duration NumberField (min), shown while Continuous is off, min: 0. Save rejects a non-positive duration and is a no-op when the key is unchanged. equipment/spindle/torque — “Torque Contours”, item type SpindleContour, the same shape over the torque list. Shared content view, registered by the root and by all five children: the two contour charts in the General Setup page's CONTENT column. Power chart and Torque chart, each with a chip legend — one chip per contour, showing its duration and, on hover, its point count. Clicking a chip selects the contour the PRIMARY-row editor edits. A vertical marker line at the gear-shift spindle speed, while one is set. Its own not-attached empty state, mirroring the root panel's. Behavior Rpm ↔ cycles/s conversion lives server-side. SpindleCapability stores spindle speed in cycles/s (Hz); the controller converts to rpm in its DTOs and back on write. The frontend only ever sees rpm. Nullable gear shift. The Has-Gear-Shift checkbox writes 0 when checked and null when cleared, which is how the model distinguishes “mechanism present, speed not yet dialled in” from “no gear-shift mechanism”. One state, thin views throughout. Every panel on the branch — root, the three scalar sections, the two contour sections and the charts — reads and writes one module-singleton composable. A point edit therefore redraws the chart in the same tick, and a legend click moves the editor. The composable installs a single project-change watch that reloads on open and clears on close. No cache chain. These scalars feed the cutting-force and thermal physics, not the setup canvas, so the branch's afterChange does nothing — unlike the geometry branches, nothing here clears a geometry cache. Add Contour. The prompt is pre-filled with 60; a blank entry means continuous (∞). A duration already present is refused, a second continuous contour included. The new contour is seeded from the currently selected contour, falling back to the first in the list, and to a built-in default curve when the axis is empty — so the operator rarely draws from scratch. Project-scoped, and forwarded to the run. The capability lives on the authored equipment face and is persisted with the .hincproj save; setting SpindleCapabilityFile externalizes it to a side-file instead. The runtime equipment face holds the same object by reference, so a scalar or point edit is visible to a run immediately; a replacement (Load, Paste, XML Apply) re-stamps that reference through the project service's ForwardSetupEnvironmentToExecution. Load / Paste / XML-Apply only swap the IndexService entry. The root panel then installs the result onto the equipment through the controller's update, and reloads the snapshot and the key. The controller's initialize indexes a blank placeholder when nothing is attached yet, which is what keeps the ⋮ menu usable — and Load reachable — on a project with no capability. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/useControlTreeHost.ts — builds the equipment/spindle root (item type SpindleCapabilityRoot) and its five children: thermal, gear-shift and dry-run as SpindleScalars, power and torque as SpindleContour. wwwroot-src/src/components/controlTree/itemTypes.ts — registers those three item types and gives all of them the same CONTENT-column view. wwwroot-src/src/components/controlTree/SpindleCapabilityPanel.vue — the branch root panel: the Object Management button, the name caption, the not-attached empty state, and the Name / Note fields. wwwroot-src/src/components/controlTree/SpindleScalarsPanel.vue — one scalar section per role path: thermal, gear-shift (checkbox plus the rpm field, disabled while the value is null) and dry-run. wwwroot-src/src/components/controlTree/SpindleContourPanel.vue — the power / torque child: the count line, Add, the contour selector, the edit-duration modal and the delete button, hosting the point editor. wwwroot-src/src/components/spindle/SpindleContourEditor.vue — the selected contour's numeric points table; its own header is hidden when the tree panel drives it. wwwroot-src/src/components/spindle/SpindleContoursPanel.vue — the CONTENT-column view every spindle item registers: both charts. wwwroot-src/src/components/spindle/SpindleContoursChart.vue — one plotted chart with the clickable chip legend that selects the contour the editor edits, plus the gear-shift marker line. wwwroot-src/src/components/controlTree/ContentSlavePanel.vue — the General Setup page's CONTENT column, which mounts whichever content panel the selection's item type registers; it deliberately leaves that component unkeyed so the charts survive a move between the branch's six nodes. wwwroot-src/src/composables/useSpindleCapability.ts — the module-singleton state and every mutation on the branch: the scalar handlers, add / remove / rename contour, the point updates and the object-management install hooks. wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue — the reused ⋮ menu carrying Load / Save As / Copy / Paste / XML for the .SpindleCapability file surface. wwwroot-src/src/api/spindleCapability.ts — typed client for /api/mech/spindle-capability/*. wwwroot-src/src/router/routes.ts — the spindle-capability/:tab? redirect (the tab mapped onto the branch child id) and the equipment/spindle redirect, both landing on general-setup?tree=…. wwwroot-src/src/router/treeRoutes.ts — defines the tab segments that redirect accepts: thermal, gear-shift, dry-run, power, torque. Mech/SpindleCapabilityController.cs — REST surface at /api/mech/spindle-capability over the authored equipment face's capability: GET / — flat snapshot: metadata plus the contour keys of each axis. GET /power-contours, GET /torque-contours — per-axis contour lists with their points. PUT /name | /note | /energy-efficiency | /working-temperature-upper-boundary-c | /gear-shift-spindle-speed-rpm | /dry-run-friction-power-coefficient-mwdrpm | /dry-run-windage-power-coefficient-pwdrpm3 — one scalar each. POST /power-contours | /torque-contours — add one contour. DELETE /power-contours/{key} | /torque-contours/{key} — remove one contour ({key} accepts numeric strings and \"inf\" / \"infinity\"). PUT /power-contours/{key}/points | /torque-contours/{key}/points — replace one contour's points; this is what backs per-point editing. PUT /power-contours/{key}/key | /torque-contours/{key}/key — rename a contour's workable-duration key, refusing a key that already exists; this is what backs the edit-duration modal. GET /xml — serialise to XML text. POST /load, POST /load-file, POST /reload — install from XML text, from a file under a named root, or from the file already stamped on the equipment. PUT /capability-file — set the side-file reference without reloading. POST /initialize, POST /update — index the capability for the Object Management button, and install the swapped-in object back onto the equipment. HiAPI Engine HiMech/Milling/SpindleCapability.cs — the model: EnergyEfficiency, WorkingTemperatureUpperBoundary_K with its _C accessor, the nullable GearShiftSpindleSpeed_cycleds with its _rpm convenience property, the two dry-run coefficients and the power / torque contour dictionaries keyed by workable duration. HiMech/Machining/MachiningEquipmentUtils/SetupEquipment.cs — the authored equipment face that owns the capability and its file reference and serializes them, inline or as a side-file reference. See Also Mechanism Builder Page — same file-level IO pattern (Load / Reload / Save As) but user-scoped rather than project-scoped. Background / Coolant — sibling branch of the same Control Tree, editing the same authored equipment face. Spindle Capability — what the model represents physically and how the per-step ratios come out of it."
},
"anatomy/general-setup/workpiece.html": {
"href": "anatomy/general-setup/workpiece.html",
"title": "Workpiece | HiAPI-C# 2025",
- "summary": "Workpiece The Workpiece editor is the equipment/workpiece branch of the General Setup page's Control Tree (/general-setup?tree=equipment/workpiece); the old /workpiece route redirects there. In the WPF client it is a sub-window opened from the Main Panel. The key model is Workpiece, taken from the Main Panel's Workpiece. The cached solids it is drawn from belong to WorkpieceService, which both clients share. The display config differs by client. The web branch has none of its own: it shares the General Setup canvas, gated by the equipment-setup config (Disp/EquipmentSetupDisplayeeConfig.cs), which carries the fixture and workpiece flags together — the fixture and workpiece geometry anchors keep separate flags, while the fixture↔workpiece buckle pair, being one attached identity at one location, is a single flag. The WPF page takes its own WorkpieceEditorDisplayeeConfig from UserService.UserConfig. Layout Control Tree Branch Workpiece Root — a summary panel, rendered inline by the dock's primary editor pane. It carries no Object Management button: the workpiece has no standalone .Workpiece file surface here, and its geometry, anchors, mesh and material are all edited through the child items below. Raw Geometry Type Badge and Target Geometry Type Badge (none when the slot is empty) Intro caption, and an empty-state caption while the project has no workpiece equipment/workpiece/raw-geometry — “Raw Geometry”, a Geometry slot backing InitGeom. The slot's own panel is the kind picker (Geometry Management Control, selector only); the picked kind's editor is the slot's child item. Kinds offered: Box3d, Cylindroid, StlFile, TransformationGeom, GeomCombination, CubeTreeFile, plus None. ExtendedCylinder is an IMakeXmlSource and was offered here until its start section — wired by a host, never serialized — was found to reload a saved project degenerate; see Extended Cylinder Panel for what an older project holding one still shows. The source choice folds into that one picker — picking the voxel CubeTreeFile, which the picker shows as MeshedGeomFile, is the meshed source (see Meshed Geometry Panel). equipment/workpiece/target-geometry — “Target Geometry”, the same slot shape backing IdealGeom. Kinds offered: Box3d, Cylindroid, StlFile, TransformationGeom, plus None. The target must satisfy IGetStl, so CubeTreeFile is not among them. equipment/workpiece/anchor — “Anchor”, a Group stem whose info text states how the workpiece is placed. Two Transformer slots hang from it, each a kind picker (Transformer Manage Panel) over the picked kind's child editor: .../anchor/geom-to-fixture — “Geom To Fixture”, which positions the workpiece geometry on the fixture's workpiece buckle (see Fixture). .../anchor/geom-to-program-zero — “Geom To Program Zero”, which places the program zero, the NC origin, relative to the workpiece geometry. equipment/workpiece/runtime — labelled Mesh in the tree. Initial Resolution Select (InitResolution, in mm), a fifteen-step powers-of-two ladder: 0.0009765625 0.001953125 0.00390625 0.0078125 0.015625 0.03125 0.0625 0.125 0.25 0.5 1 2 4 8 16 Hint caption: a smaller resolution means a finer voxel grid and a slower runtime simulation. The engine's own ladder bottoms out at 0.001953125, so the first entry builds the same mesh as the second. Values typed in from elsewhere are rounded to the next finer rung rather than used as given — see Mesh Resolution. The panel self-gates on the project having a workpiece. equipment/workpiece/material — “Material”, a Group stem whose info text names the two pre-prepared resources loaded by reference. Present whenever the project has a workpiece; nothing on this branch gates it on a physics flag. Its two children share one panel, which reads its role from the node's own path: .../material/workpiece-material — .WorkpieceMaterial files, seeded to the resource root's WorkpieceMaterial folder. .../material/cutting-parameter — .mp files, seeded to the resource root's CuttingParameter folder. Each child is one Resource-only File Path Input — the project-directory Browse entry is suppressed, leaving the Resource-root pick — plus a readonly Name field (Name) and a readonly Note field (Note). Page Frame The General Setup page lays the tree dock, the content column and the equipment canvas out in nested splitters with device-local widths; inside the dock, a height divider between the Control Tree row and the primary editor row trades their heights. See General Setup Page. Canvas Column — one RenderingCanvas bound to the equipment-setup displayee (Disp/EquipmentSetupDisplayee.cs): the merged fixture + workpiece setup scene, with optional machine and tool solids. RenderingCanvas Tool Bar Display Options Menu — six groups; the workpiece's own entries are in bold: Solid — Machine, Tool, Meshed Geometry Fixture Rendering Mode — Solid / Edge / Hide Raw Shape Rendering Mode — Solid / Edge / Hide Target Shape Rendering Mode — Solid / Edge / Hide Anchors — Fixture Geometry Anchor, Workpiece Buckle (the one flag for the fixture↔workpiece pair), Table Buckle, Workpiece Geometry Anchor, Program-Zero Anchor, Controller Coordinate Display Aids — Dimension Bar WPF Page Workpiece Page Management Panel Head Line Object Management Menu Button file extension is .Workpiece; the load type is Workpiece The pointed Editor Panel is Management Tabs Panel Title Label Management Tabs Panel Raw Shape Tab Raw Geometry Source DropDown (Common Geometry and Meshed Geometry are EXCLUSIVE) Common Geometry Apply Geometry Management Control Meshed Geometry Apply Meshed Geometry Panel Target Shape Tab Geometry Management Control Anchor Tab Geom To Fixture Tab Transformer Manage Panel Geom To Program-Zero Tab Transformer Manage Panel Runtime Tab Initial Resolution Dropdown — the same powers-of-two ladder as the Mesh item above. Material Tab Visible if UserService.EnablePhysics is true. Workpiece Material File Selector Browse Button The initial directory is the project directory. Browse Resource Button The directory is the Default Resource directory. Readonly File Path TextBox Readonly Name TextBox (Name) ToolTip: Note Cutting Parameter File Selector Browse Button The initial directory is the project directory. Browse Resource Button The directory is the Default Resource directory. Readonly File Path TextBox Readonly Name TextBox (Name) ToolTip: Note Viewer Panel Viewer ToolBar RenderingCanvas Tool Bar SetupDisplayee Options ToolBar Options of WorkpieceEditorDisplayee RenderingCanvas The DispEngine.Displayee is WorkpieceEditorDisplayee (Apply the model WorkpieceEditorDisplayeeConfig). Default Resource The default resources of Workpiece Material and Cutting Parameter exist in Resource folder under application folder (Not project folder). Both clients seed their file pickers at the matching Resource sub folder: “Resource/WorkpieceMaterial” “Resource/CuttingParameter” Behavior A geometry slot's edit re-commits the swap-in before clearing the cache. The canvas draws the runtime face's solids, and that face follows an authored edit only by rebuild, so a bare cache clear would re-solidify a stale face. The re-commit is skipped when the slot is cleared to None: None leaves the old object indexed, and re-committing would resurrect it. Call WorkpieceService.ClearRawGeomCache() on Raw Shape set or changed. Call WorkpieceService.ClearIdealGeomCache() on Target Shape set or changed. Both clients reach that one service by different routes: the web branch posts the controller's cache-clear endpoints, and the WPF page calls WorkpieceEditorDisplayee, which forwards to the same service. Anchor edits re-commit their transformer and deliberately do not clear the geometry cache, so a placement change forces no CubeTreeFile re-mesh. The Mesh item's Initial Resolution feeds the runtime voxel simulation, not the setup canvas, so no cache chain runs after a change. The equipment canvas snaps to the isometric view when its displayee is bound to a rendering connection; a shape edit on the branch re-commits and clears the cache so the next frame re-solidifies, and leaves the view alone. The WPF page snaps its own canvas to isometric when a Raw or Target shape is set to a different object, and whenever its meshed-geometry panel updates its content — the assumption being that setting a shape changes the viewer more than changing its content does, so only the setter event adjusts the view. Keep Portability of the Material properties. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/useControlTreeHost.ts — builds the whole equipment/workpiece branch: the root, the two geometry slots, the anchor group with its two transformer slots, the Mesh item and the material group with its two resource items — including each slot's re-commit-then-clear chain and the two allowed-kind whitelists. wwwroot-src/src/components/controlTree/PrimarySlavePanel.vue — renders the root inline: the Raw and Target type badges plus the intro. wwwroot-src/src/components/controlTree/itemTypes.ts — the ItemType registry mapping the branch's children to their panels. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the kind picker behind the raw and target geometry slots. wwwroot-src/src/components/controlTree/TransformerSlotPanel.vue — the kind picker behind the two anchor slots. wwwroot-src/src/components/controlTree/WorkpieceRuntimePanel.vue — the Mesh item's editor: the Initial Resolution ladder and its hint. wwwroot-src/src/components/controlTree/WorkpieceResourcePanel.vue — the one panel both Material children share, choosing its extension and resource subfolder from the node's role path. wwwroot-src/src/components/widgets/FilePathInput.vue — the file field those children use; its project Browse entry is suppressed under resourceOnly, leaving the Resource-root pick. wwwroot-src/src/components/mech/EquipmentSetupPanel.vue — the canvas column and its Display Options menu. wwwroot-src/src/pages/GeneralSetupPage.vue — the /general-setup page hosting the tree dock, the content column and the canvas in nested splitters. wwwroot-src/src/api/workpiece.ts — typed client for /api/Workpiece/*: initialize, status, the geometry re-commit and cache-clear calls, the two anchor transformer updates, init-resolution, the two resource loads and the diff settings. wwwroot-src/src/api/equipmentSetup.ts — typed client for the shared canvas: the three rendering-mode targets and the ten display flags, several of which are the workpiece's own overlays. Mech/WorkpieceController.cs — the model REST surface at /api/Workpiece: geometry install and cache clears, the anchor transformer updates, init-resolution, workpiece-material/load, cutting-parameter/load, and the geometry-diff settings pair (visual radius and detection radius) whose menu rides the Execution Extended Tool Bar rather than this branch. Mech/EquipmentSetupDisplayController.cs — /api/mech/equipment-setup-display: binds the equipment-setup displayee to a rendering connection, framing it isometrically at bind time, and serves the rendering-mode and flag endpoints. Disp/EquipmentSetupDisplayee.cs — the merged fixture + workpiece setup scene the canvas draws. Disp/EquipmentSetupDisplayeeConfig.cs — its config: the fixture and workpiece display flags in one place."
+ "summary": "Workpiece The Workpiece editor is the equipment/workpiece branch of the General Setup page's Control Tree (/general-setup?tree=equipment/workpiece); the old /workpiece route redirects there. The key model is Workpiece, taken from the Main Panel's Workpiece. The cached solids it is drawn from belong to WorkpieceService. The branch has no display config of its own: it shares the General Setup canvas, gated by the equipment-setup config (Disp/EquipmentSetupDisplayeeConfig.cs), which carries the fixture and workpiece flags together — the fixture and workpiece geometry anchors keep separate flags, while the fixture↔workpiece buckle pair, being one attached identity at one location, is a single flag. Layout Control Tree Branch Workpiece Root — a summary panel, rendered inline by the dock's primary editor pane. It carries no Object Management button: the workpiece has no standalone .Workpiece file surface here, and its geometry, anchors, mesh and material are all edited through the child items below. Raw Geometry Type Badge and Target Geometry Type Badge (none when the slot is empty) Intro caption, and an empty-state caption while the project has no workpiece equipment/workpiece/raw-geometry — “Raw Geometry”, a Geometry slot backing InitGeom. The slot's own panel is the kind picker (Geometry Management Control, selector only); the picked kind's editor is the slot's child item. Kinds offered: Box3d, Cylindroid, StlFile, TransformationGeom, GeomCombination, CubeTreeFile, plus None. ExtendedCylinder is an IMakeXmlSource and was offered here until its start section — wired by a host, never serialized — was found to reload a saved project degenerate; see Extended Cylinder Panel for what an older project holding one still shows. The source choice folds into that one picker — picking the voxel CubeTreeFile, which the picker shows as MeshedGeomFile, is the meshed source (see Meshed Geometry Panel). equipment/workpiece/target-geometry — “Target Geometry”, the same slot shape backing IdealGeom. Kinds offered: Box3d, Cylindroid, StlFile, TransformationGeom, plus None. The target must satisfy IGetStl, so CubeTreeFile is not among them. equipment/workpiece/anchor — “Anchor”, a Group stem whose info text states how the workpiece is placed. Two Transformer slots hang from it, each a kind picker (Transformer Manage Panel) over the picked kind's child editor: .../anchor/geom-to-fixture — “Geom To Fixture”, which positions the workpiece geometry on the fixture's workpiece buckle (see Fixture). .../anchor/geom-to-program-zero — “Geom To Program Zero”, which places the program zero, the NC origin, relative to the workpiece geometry. equipment/workpiece/runtime — labelled Mesh in the tree. Initial Resolution Select (InitResolution, in mm), a fifteen-step powers-of-two ladder: 0.0009765625 0.001953125 0.00390625 0.0078125 0.015625 0.03125 0.0625 0.125 0.25 0.5 1 2 4 8 16 Hint caption: a smaller resolution means a finer voxel grid and a slower runtime simulation. The engine's own ladder bottoms out at 0.001953125, so the first entry builds the same mesh as the second. Values typed in from elsewhere are rounded to the next finer rung rather than used as given — see Mesh Resolution. The panel self-gates on the project having a workpiece. equipment/workpiece/material — “Material”, a Group stem whose info text names the two pre-prepared resources loaded by reference. Present whenever the project has a workpiece; nothing on this branch gates it on a physics flag. Its two children share one panel, which reads its role from the node's own path: .../material/workpiece-material — .WorkpieceMaterial files, seeded to the resource root's WorkpieceMaterial folder. .../material/cutting-parameter — .mp files, seeded to the resource root's CuttingParameter folder. Each child is one Resource-only File Path Input — the project-directory Browse entry is suppressed, leaving the Resource-root pick — plus a readonly Name field (Name) and a readonly Note field (Note). Page Frame The General Setup page lays the tree dock, the content column and the equipment canvas out in nested splitters with device-local widths; inside the dock, a height divider between the Control Tree row and the primary editor row trades their heights. See General Setup Page. Canvas Column — one RenderingCanvas bound to the equipment-setup displayee (Disp/EquipmentSetupDisplayee.cs): the merged fixture + workpiece setup scene, with optional machine and tool solids. RenderingCanvas Tool Bar Display Options Menu — six groups; the workpiece's own entries are in bold: Solid — Machine, Tool, Meshed Geometry Fixture Rendering Mode — Solid / Edge / Hide Raw Shape Rendering Mode — Solid / Edge / Hide Target Shape Rendering Mode — Solid / Edge / Hide Anchors — Fixture Geometry Anchor, Workpiece Buckle (the one flag for the fixture↔workpiece pair), Table Buckle, Workpiece Geometry Anchor, Program-Zero Anchor, Controller Coordinate Display Aids — Dimension Bar Default Resource The default resources of Workpiece Material and Cutting Parameter exist in Resource folder under application folder (Not project folder). Both clients seed their file pickers at the matching Resource sub folder: “Resource/WorkpieceMaterial” “Resource/CuttingParameter” Behavior A geometry slot's edit re-commits the swap-in before clearing the cache. The canvas draws the runtime face's solids, and that face follows an authored edit only by rebuild, so a bare cache clear would re-solidify a stale face. The re-commit is skipped when the slot is cleared to None: None leaves the old object indexed, and re-committing would resurrect it. Call WorkpieceService.ClearRawGeomCache() on Raw Shape set or changed. Call WorkpieceService.ClearIdealGeomCache() on Target Shape set or changed. The branch reaches that service by posting the controller's cache-clear endpoints. Anchor edits re-commit their transformer and deliberately do not clear the geometry cache, so a placement change forces no CubeTreeFile re-mesh. The Mesh item's Initial Resolution feeds the runtime voxel simulation, not the setup canvas, so no cache chain runs after a change. The equipment canvas snaps to the isometric view when its displayee is bound to a rendering connection; a shape edit on the branch re-commits and clears the cache so the next frame re-solidifies, and leaves the view alone. Keep Portability of the Material properties. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/useControlTreeHost.ts — builds the whole equipment/workpiece branch: the root, the two geometry slots, the anchor group with its two transformer slots, the Mesh item and the material group with its two resource items — including each slot's re-commit-then-clear chain and the two allowed-kind whitelists. wwwroot-src/src/components/controlTree/PrimarySlavePanel.vue — renders the root inline: the Raw and Target type badges plus the intro. wwwroot-src/src/components/controlTree/itemTypes.ts — the ItemType registry mapping the branch's children to their panels. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the kind picker behind the raw and target geometry slots. wwwroot-src/src/components/controlTree/TransformerSlotPanel.vue — the kind picker behind the two anchor slots. wwwroot-src/src/components/controlTree/WorkpieceRuntimePanel.vue — the Mesh item's editor: the Initial Resolution ladder and its hint. wwwroot-src/src/components/controlTree/WorkpieceResourcePanel.vue — the one panel both Material children share, choosing its extension and resource subfolder from the node's role path. wwwroot-src/src/components/widgets/FilePathInput.vue — the file field those children use; its project Browse entry is suppressed under resourceOnly, leaving the Resource-root pick. wwwroot-src/src/components/mech/EquipmentSetupPanel.vue — the canvas column and its Display Options menu. wwwroot-src/src/pages/GeneralSetupPage.vue — the /general-setup page hosting the tree dock, the content column and the canvas in nested splitters. wwwroot-src/src/api/workpiece.ts — typed client for /api/Workpiece/*: initialize, status, the geometry re-commit and cache-clear calls, the two anchor transformer updates, init-resolution, the two resource loads and the diff settings. wwwroot-src/src/api/equipmentSetup.ts — typed client for the shared canvas: the three rendering-mode targets and the ten display flags, several of which are the workpiece's own overlays. Mech/WorkpieceController.cs — the model REST surface at /api/Workpiece: geometry install and cache clears, the anchor transformer updates, init-resolution, workpiece-material/load, cutting-parameter/load, and the geometry-diff settings pair (visual radius and detection radius) whose menu rides the Execution Extended Tool Bar rather than this branch. Mech/EquipmentSetupDisplayController.cs — /api/mech/equipment-setup-display: binds the equipment-setup displayee to a rendering connection, framing it isometrically at bind time, and serves the rendering-mode and flag endpoints. Disp/EquipmentSetupDisplayee.cs — the merged fixture + workpiece setup scene the canvas draws. Disp/EquipmentSetupDisplayeeConfig.cs — its config: the fixture and workpiece display flags in one place."
},
"anatomy/geom/box3d-control.html": {
"href": "anatomy/geom/box3d-control.html",
"title": "Box3d Control | HiAPI-C# 2025",
- "summary": "Box3d Control The Box3d editor edits an axis-aligned Box3d through four vector rows — Min, Max, Dimension and Center — of which an Edit Mode selector decides which two are writable. It is reached wherever a Geometry slot admits the Box3d kind: a Control-Tree kind node under a Geometry slot, or the geometry switchboard embedded inline. Layout Edit Mode — a selector over three modes. Its internal values are MinMax, MinDimension and CenterDimension; the web labels them “Min / Max”, “Min + Dimension” and “Center + Dimension”, the desktop client “Min and Max”, “Min and Dimension” and “Center and Dimension”. Min, Max, Dimension, Center — four vector rows, one X / Y / Z input each. The web captions Dimension “Dimension (Max − Min)” and Center \"Center ((Max + Min) / 2)\"; the Min and Max captions come from the shared label set rather than the geometry one. The mode rules each row read-only or editable rather than showing a different set of rows: Min is read-only in Center + Dimension, Max in anything but Min / Max, Dimension in Min / Max, and Center in anything but Center + Dimension. Key Model Only Min and Max are settable on the type; Dim and Center are derived and get-only. That is why the other two modes are arithmetic over the same two stored corners rather than a different storage shape — and on the web that arithmetic happens in the browser, which then posts the resulting Min and Max. Behavior A row commits on blur or Enter, not per keystroke. The vector widget emits only from its blur handlers, suppresses the emit when the parsed value is unchanged, and reverts an unparseable entry to its previous value. The web editor has no read-only variant. The desktop control additionally carries an IsInfoMode property that a host sets to turn the whole control into a display: every field goes read-only and the Edit Mode selector is hidden outright. Two hosts use it, the STL file control and the geometry combination control. The web equivalent is not this editor — the STL file editor draws its own read-only bounding-box rows. Four endpoints ship without a caller. The controller exposes UpdateByMinDimension, UpdateByCenterDimension, IndexDimension and IndexCenter; the shipped SPA calls none of them, because the editor resolves every mode to a plain Update. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/Box3dEditor.vue — the editor: the Edit Mode selector, the four vector rows and their per-mode read-only rules, and the client-side arithmetic behind the two derived modes. Its only prop is the IndexService key. wwwroot-src/src/components/widgets/Vec3Input.vue — the X / Y / Z row widget, in standard or single-field text mode; its readonly prop is what the edit mode drives. wwwroot-src/src/components/geom/geometryEditors.ts — maps the Box3d kind to this editor, the single map both the switchboard and the Control Tree resolve through. wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker that creates a Box3d and, outside selector-only mode, embeds this editor beneath itself. wwwroot-src/src/components/controlTree/itemTypes.ts — registers Box3d against the sole-editor panel and lists it among the kinds a container may hold. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — the kind node's panel, resolving Box3d through the kind map and binding the editor to the node's key. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the Geometry slot's picker, from which a Box3d is chosen. wwwroot-src/src/api/geometry.ts — getBox3d, indexBox3dMin, indexBox3dMax and the create entry. There is deliberately no update wrapper here; the editor posts the update itself. wwwroot-src/src/i18n/en/geom.ts — the box.* and bounds.* strings, and wwwroot-src/src/i18n/en/common.ts — the shared Min and Max row captions. Geom/Box3dController.cs — REST endpoints at /api/Box3d/*: New, NewWithValue, Get, Update, IndexMin, IndexMax, IndexDimension, IndexCenter, UpdateByMinDimension and UpdateByCenterDimension. Common/IndexService.cs — the keyed object store every box key resolves against. See Also Geometry Management Panel — the switchboard that offers this kind and hosts this editor"
+ "summary": "Box3d Control The Box3d editor edits an axis-aligned Box3d through four vector rows — Min, Max, Dimension and Center — of which an Edit Mode selector decides which two are writable. It is reached wherever a Geometry slot admits the Box3d kind: a Control-Tree kind node under a Geometry slot, or the geometry switchboard embedded inline. Layout Edit Mode — a selector over three modes. Its internal values are MinMax, MinDimension and CenterDimension, labelled “Min / Max”, “Min + Dimension” and “Center + Dimension”. Min, Max, Dimension, Center — four vector rows, one X / Y / Z input each. The editor captions Dimension “Dimension (Max − Min)” and Center \"Center ((Max + Min) / 2)\"; the Min and Max captions come from the shared label set rather than the geometry one. The mode rules each row read-only or editable rather than showing a different set of rows: Min is read-only in Center + Dimension, Max in anything but Min / Max, Dimension in Min / Max, and Center in anything but Center + Dimension. Key Model Only Min and Max are settable on the type; Dim and Center are derived and get-only. That is why the other two modes are arithmetic over the same two stored corners rather than a different storage shape — and that arithmetic happens in the browser, which then posts the resulting Min and Max. Behavior A row commits on blur or Enter, not per keystroke. The vector widget emits only from its blur handlers, suppresses the emit when the parsed value is unchanged, and reverts an unparseable entry to its previous value. This editor has no read-only variant. A host that needs one draws its own rows instead — the STL file editor's read-only bounding-box rows are not this editor. Four endpoints ship without a caller. The controller exposes UpdateByMinDimension, UpdateByCenterDimension, IndexDimension and IndexCenter; the shipped SPA calls none of them, because the editor resolves every mode to a plain Update. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/Box3dEditor.vue — the editor: the Edit Mode selector, the four vector rows and their per-mode read-only rules, and the client-side arithmetic behind the two derived modes. Its only prop is the IndexService key. wwwroot-src/src/components/widgets/Vec3Input.vue — the X / Y / Z row widget, in standard or single-field text mode; its readonly prop is what the edit mode drives. wwwroot-src/src/components/geom/geometryEditors.ts — maps the Box3d kind to this editor, the single map both the switchboard and the Control Tree resolve through. wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker that creates a Box3d and, outside selector-only mode, embeds this editor beneath itself. wwwroot-src/src/components/controlTree/itemTypes.ts — registers Box3d against the sole-editor panel and lists it among the kinds a container may hold. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — the kind node's panel, resolving Box3d through the kind map and binding the editor to the node's key. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the Geometry slot's picker, from which a Box3d is chosen. wwwroot-src/src/api/geometry.ts — getBox3d, indexBox3dMin, indexBox3dMax and the create entry. There is deliberately no update wrapper here; the editor posts the update itself. wwwroot-src/src/i18n/en/geom.ts — the box.* and bounds.* strings, and wwwroot-src/src/i18n/en/common.ts — the shared Min and Max row captions. Geom/Box3dController.cs — REST endpoints at /api/Box3d/*: New, NewWithValue, Get, Update, IndexMin, IndexMax, IndexDimension, IndexCenter, UpdateByMinDimension and UpdateByCenterDimension. Common/IndexService.cs — the keyed object store every box key resolves against. See Also Geometry Management Panel — the switchboard that offers this kind and hosts this editor"
},
"anatomy/geom/cylindroid-control.html": {
"href": "anatomy/geom/cylindroid-control.html",
"title": "Cylindroid Control | HiAPI-C# 2025",
- "summary": "Cylindroid Control The Cylindroid editor edits a Cylindroid — a solid of revolution defined by a list of (Z, R) pairs — as a table of rows, with a minimum of two. It is reached from any Geometry slot that admits the Cylindroid kind, and again from the Tool House cylindroid holder, whose Geometry node embeds the same editor directly. Layout Z-R pairs — a header row carrying the section label and an Add button. Add appends a row ten millimetres above the last one, at the same radius. The table — one row per pair, columns #, Z (mm) and R (mm). Each Z and R cell is an inline text field parsed as a number; there is no spinner. A per-row remove button sits at the end of each row, disabled once only two pairs remain. The caption — a one-line statement of the type: a solid of revolution defined by (Z, R) pairs, minimum two. The desktop control is shaped differently for the same job: a title, an Add Point and a Clear All button, and a data grid with Z, R and Actions columns. Clear All has no web counterpart — it confirms, wipes the list and re-seeds a single pair. Behavior A cell commits on blur or Enter. An empty or non-finite entry is dropped rather than written, and a negative radius is clamped to zero — on the client and again on the server. The floor is two pairs, and both ends enforce it. The web disables the remove button at two and the controller refuses the call below two. The desktop client blocks only at one, with a warning dialog. Creating one seeds three pairs. The create endpoint starts a new cylindroid at (0, 20), (30, 20) and (60, 10) rather than empty. Four endpoints ship without a caller. The controller exposes GetPairCount, GetPairAt, UpdatePairAt and SortByZ; the shipped SPA uses none of them, committing the whole list instead. Tessellation Resolution Is Not a Property of the Shape There is no longitude count, and no per-instance resolution, on a cylindroid. The STL longitude number is derived internally at generation time from a resolution the caller supplies; the type carries only a static default. The desktop client once had a Longitude Number field and its handler was deleted when the backing property went away. Where resolution is exposed, it belongs to the holder rather than to the shape: the Tool House cylindroid holder carries a Resolution surface beside its Geometry one — a tree node on the web, a tab in the desktop client — offering a linear resolution in millimetres and an angle resolution in degrees, described in the app as the tessellation resolution used for display and collision meshing. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/CylindroidEditor.vue — the editor: the header row and Add button, the Z / R table with its per-cell commit, and the per-row remove and its two-pair floor. Edits by IndexService key and emits changed so the owner can resync. wwwroot-src/src/components/geom/geometryEditors.ts — maps the Cylindroid kind to this editor. wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker that creates a Cylindroid and embeds this editor beneath itself. wwwroot-src/src/components/controlTree/itemTypes.ts — registers Cylindroid against the sole-editor panel and lists it among the kinds a container may hold. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — the kind node's panel. wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the second host: it embeds this editor on the holder's cylindroid key for the Geometry node, and renders the linear and angle resolution fields for the sibling Resolution node. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — grows those two holder children, and only for a cylindroid holder. wwwroot-src/src/api/geometry.ts — getCylindroid, updateCylindroidPairs, addCylindroidPair, removeCylindroidPairAt and the create entry. wwwroot-src/src/api/cylindroidHolder.ts — the holder side: the cylindroid key it exposes, the geometry update, and the resolution setter. wwwroot-src/src/i18n/en/geom.ts — the cylindroid.* strings, and wwwroot-src/src/i18n/en/toolhouse.ts — the Resolution node's own labels and hint. Geom/CylindroidController.cs — REST endpoints at /api/Cylindroid/*: New, Get, GetPairCount, GetPairAt, UpdatePairAt, UpdateAllPairs, AddPair, RemovePairAt and SortByZ. Mech/CylindroidHolderController.cs — the holder surface at /api/CylindroidHolder/* behind the Tool House host. Common/IndexService.cs — the keyed object store every cylindroid key resolves against. See Also Geometry Management Panel — the switchboard that offers this kind and hosts this editor Cylindroid Holder Panel — the second host, and the surface that owns the tessellation resolution"
+ "summary": "Cylindroid Control The Cylindroid editor edits a Cylindroid — a solid of revolution defined by a list of (Z, R) pairs — as a table of rows, with a minimum of two. It is reached from any Geometry slot that admits the Cylindroid kind, and again from the Tool House cylindroid holder, whose Geometry node embeds the same editor directly. Layout Z-R pairs — a header row carrying the section label and an Add button. Add appends a row ten millimetres above the last one, at the same radius. The table — one row per pair, columns #, Z (mm) and R (mm). Each Z and R cell is an inline text field parsed as a number; there is no spinner. A per-row remove button sits at the end of each row, disabled once only two pairs remain. The caption — a one-line statement of the type: a solid of revolution defined by (Z, R) pairs, minimum two. Behavior A cell commits on blur or Enter. An empty or non-finite entry is dropped rather than written, and a negative radius is clamped to zero — on the client and again on the server. The floor is two pairs, and both ends enforce it. The remove button is disabled at two and the controller refuses the call below two. Creating one seeds three pairs. The create endpoint starts a new cylindroid at (0, 20), (30, 20) and (60, 10) rather than empty. Four endpoints ship without a caller. The controller exposes GetPairCount, GetPairAt, UpdatePairAt and SortByZ; the shipped SPA uses none of them, committing the whole list instead. Tessellation Resolution Is Not a Property of the Shape There is no longitude count, and no per-instance resolution, on a cylindroid. The STL longitude number is derived internally at generation time from a resolution the caller supplies; the type carries only a static default. Where resolution is exposed, it belongs to the holder rather than to the shape: the Tool House cylindroid holder carries a Resolution tree node beside its Geometry one, offering a linear resolution in millimetres and an angle resolution in degrees, described in the app as the tessellation resolution used for display and collision meshing. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/CylindroidEditor.vue — the editor: the header row and Add button, the Z / R table with its per-cell commit, and the per-row remove and its two-pair floor. Edits by IndexService key and emits changed so the owner can resync. wwwroot-src/src/components/geom/geometryEditors.ts — maps the Cylindroid kind to this editor. wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker that creates a Cylindroid and embeds this editor beneath itself. wwwroot-src/src/components/controlTree/itemTypes.ts — registers Cylindroid against the sole-editor panel and lists it among the kinds a container may hold. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — the kind node's panel. wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the second host: it embeds this editor on the holder's cylindroid key for the Geometry node, and renders the linear and angle resolution fields for the sibling Resolution node. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — grows those two holder children, and only for a cylindroid holder. wwwroot-src/src/api/geometry.ts — getCylindroid, updateCylindroidPairs, addCylindroidPair, removeCylindroidPairAt and the create entry. wwwroot-src/src/api/cylindroidHolder.ts — the holder side: the cylindroid key it exposes, the geometry update, and the resolution setter. wwwroot-src/src/i18n/en/geom.ts — the cylindroid.* strings, and wwwroot-src/src/i18n/en/toolhouse.ts — the Resolution node's own labels and hint. Geom/CylindroidController.cs — REST endpoints at /api/Cylindroid/*: New, Get, GetPairCount, GetPairAt, UpdatePairAt, UpdateAllPairs, AddPair, RemovePairAt and SortByZ. Mech/CylindroidHolderController.cs — the holder surface at /api/CylindroidHolder/* behind the Tool House host. Common/IndexService.cs — the keyed object store every cylindroid key resolves against. See Also Geometry Management Panel — the switchboard that offers this kind and hosts this editor Cylindroid Holder Panel — the second host, and the surface that owns the tessellation resolution"
},
"anatomy/geom/extended-cylinder-panel.html": {
"href": "anatomy/geom/extended-cylinder-panel.html",
"title": "Extended Cylinder Panel | HiAPI-C# 2025",
- "summary": "Extended Cylinder Panel The Extended Cylinder editor edits one number on an ExtendedCylinder: its full length, measured from Z=0 and including the span below the start section. Its only home on either client is the Tool House cutter's Upper Beam, where the start section is the flute top. Layout An explanatory block stating what the type is and, in bold, how the length is measured. Full Length — a single numeric field in millimetres, with a hint under it. The desktop panel is a title over the same one field. Behavior The hint states a lower bound only when that bound is positive. The bound is the Z of the start section, served with the value as minFullLength; above zero the hint reads “must exceed the start-section Z”, and at zero it degrades to a plain “full length from Z=0”. The test is the number, not the wiring — a geometry with no start-section source and one whose source sits at Z=0 read identically here, because the controller answers 0 for both. There is no upper bound anywhere — not in the editor and not in the controller. A live bound belongs to the cutter alone. The bare create endpoint installs a constant start pair at Z=0, and the container-aware create switches install no source at all; both answer a bound of zero. Only the cutter upper beam wires a real one — setting the beam links it to the flute top — so only there does a bound appear. The guard is two layers, and they differ by one. The numeric field rejects a value below the minimum — its minimum is inclusive — so a value exactly equal to the bound passes the field and is caught one layer up by the editor, which raises an error to its host as a banner rather than an inline field message. The controller then rejects non-finite, non-positive, and at-or-below-bound values with a 400. The field commits on blur or Enter. The desktop control does not: it writes on every keystroke, and performs no minimum, positivity or finiteness check at all. The range guard is a web and backend feature. Creating one through the cutter is not the same as creating one bare. The Upper Beam creates through the cutter's own endpoint so the backend seeds a valid full length and can return geometry-issue warnings — which the Upper Beam panel renders as persistent banners. The bare create endpoint seeds a length of 100 and a single start pair. Reach Both clients restrict this kind to the cutter's upper beam, by different mechanisms. In the desktop client the switchboard's Extended Cylinder entry ships collapsed and is revealed by a property that exactly one host sets — the milling cutter panel. On the web no Geometry slot offers the kind at all: it is absent from the container kinds, so it can be neither a transformation geometry's inner geometry nor a combination child, and it was taken out of the workpiece's raw geometry once a saved project was found to reload one degenerate. The single surface that offers it is the cutter's Upper Beam, which mounts the switchboard itself over its own six-kind list rather than being a Geometry slot. Note A project saved earlier can still carry one on a workpiece, and the two halves of the tree disagree about it. The kind is serialized; only the start-section hookup is not. Such a project reloads with the raw geometry in place, and the Geometry slot's child builder tests the type against the whole kind map rather than against the slot's whitelist, so the ExtendedCylinder kind node and this editor still appear beneath it. The slot's own picker tests the whitelist, finds the type outside it and blanks — leaving an empty type dropdown above a child node that edits an Extended Cylinder. The bound reads zero there, because nothing is wiring a start section. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/ExtendedCylinderEditor.vue — the description block and the Full Length field, its hint, and the at-or-below-bound check that raises an error to the host. wwwroot-src/src/components/widgets/NumericInput.vue — the shared numeric field: an inclusive minimum rejected on blur, and the hint slot under it. wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue — the component's real home: the cutter's Upper Beam, which creates through the container-aware cutter endpoint and renders the returned geometry-issue warnings. wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue — mounts that panel for the cutter's Upper Beam node, and deliberately skips its own fetch there. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — builds the Upper Beam child of the Cutter node. wwwroot-src/src/components/geom/geometryEditors.ts — maps the ExtendedCylinder kind to this editor. wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker. wwwroot-src/src/components/controlTree/itemTypes.ts — registers ExtendedCylinder against the sole-editor panel, is where its absence from the container kinds is declared, and holds the Geometry slot's child builder — the half that tests the whole kind map rather than the whitelist. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — the workpiece raw-geometry whitelist, and the comment recording why the kind is no longer in it. wwwroot-src/src/api/geometry.ts — getExtendedCylinder, updateExtendedCylinderFullLength and the create entry. wwwroot-src/src/api/toolHouse.ts — the upper-beam get, create and resync wrappers, and the warnings contract. wwwroot-src/src/i18n/en/geom.ts — the extCylinder.* strings: the label, the description and measure rule, both hints, and the below-minimum error. Geom/ExtendedCylinderController.cs — REST endpoints at /api/ExtendedCylinder/*: New, Get, UpdateFullLength and GetFullLength. Get carries minFullLength alongside the value. Mech/CutterController.cs — the upper-beam routes the Tool House host actually goes through, and the geometry-issue warnings it surfaces. Mech/WorkpieceController.cs — the raw-geometry create switch, which still carries an ExtendedCylinder arm that no picker can now reach. See Also Geometry Management Panel — the switchboard that offers this kind and hosts this editor Milling Cutter Panel — the cutter whose Upper Beam is this editor's real home, and the one surface that supplies a start section"
+ "summary": "Extended Cylinder Panel The Extended Cylinder editor edits one number on an ExtendedCylinder: its full length, measured from Z=0 and including the span below the start section. Its only home on it is the Tool House cutter's Upper Beam, where the start section is the flute top. Layout An explanatory block stating what the type is and, in bold, how the length is measured. Full Length — a single numeric field in millimetres, with a hint under it. Behavior The hint states a lower bound only when that bound is positive. The bound is the Z of the start section, served with the value as minFullLength; above zero the hint reads “must exceed the start-section Z”, and at zero it degrades to a plain “full length from Z=0”. The test is the number, not the wiring — a geometry with no start-section source and one whose source sits at Z=0 read identically here, because the controller answers 0 for both. There is no upper bound anywhere — not in the editor and not in the controller. A live bound belongs to the cutter alone. The bare create endpoint installs a constant start pair at Z=0, and the container-aware create switches install no source at all; both answer a bound of zero. Only the cutter upper beam wires a real one — setting the beam links it to the flute top — so only there does a bound appear. The guard is two layers, and they differ by one. The numeric field rejects a value below the minimum — its minimum is inclusive — so a value exactly equal to the bound passes the field and is caught one layer up by the editor, which raises an error to its host as a banner rather than an inline field message. The controller then rejects non-finite, non-positive, and at-or-below-bound values with a 400. The field commits on blur or Enter, and the range guard runs on both the field and the backend. Creating one through the cutter is not the same as creating one bare. The Upper Beam creates through the cutter's own endpoint so the backend seeds a valid full length and can return geometry-issue warnings — which the Upper Beam panel renders as persistent banners. The bare create endpoint seeds a length of 100 and a single start pair. Reach This kind is restricted to the cutter's upper beam, and the mechanism is absence rather than a flag: no Geometry slot offers it at all. it is absent from the container kinds, so it can be neither a transformation geometry's inner geometry nor a combination child, and it was taken out of the workpiece's raw geometry once a saved project was found to reload one degenerate. The single surface that offers it is the cutter's Upper Beam, which mounts the switchboard itself over its own six-kind list rather than being a Geometry slot. Note A project saved earlier can still carry one on a workpiece, and the two halves of the tree disagree about it. The kind is serialized; only the start-section hookup is not. Such a project reloads with the raw geometry in place, and the Geometry slot's child builder tests the type against the whole kind map rather than against the slot's whitelist, so the ExtendedCylinder kind node and this editor still appear beneath it. The slot's own picker tests the whitelist, finds the type outside it and blanks — leaving an empty type dropdown above a child node that edits an Extended Cylinder. The bound reads zero there, because nothing is wiring a start section. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/ExtendedCylinderEditor.vue — the description block and the Full Length field, its hint, and the at-or-below-bound check that raises an error to the host. wwwroot-src/src/components/widgets/NumericInput.vue — the shared numeric field: an inclusive minimum rejected on blur, and the hint slot under it. wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue — the component's real home: the cutter's Upper Beam, which creates through the container-aware cutter endpoint and renders the returned geometry-issue warnings. wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue — mounts that panel for the cutter's Upper Beam node, and deliberately skips its own fetch there. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — builds the Upper Beam child of the Cutter node. wwwroot-src/src/components/geom/geometryEditors.ts — maps the ExtendedCylinder kind to this editor. wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker. wwwroot-src/src/components/controlTree/itemTypes.ts — registers ExtendedCylinder against the sole-editor panel, is where its absence from the container kinds is declared, and holds the Geometry slot's child builder — the half that tests the whole kind map rather than the whitelist. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — the workpiece raw-geometry whitelist, and the comment recording why the kind is no longer in it. wwwroot-src/src/api/geometry.ts — getExtendedCylinder, updateExtendedCylinderFullLength and the create entry. wwwroot-src/src/api/toolHouse.ts — the upper-beam get, create and resync wrappers, and the warnings contract. wwwroot-src/src/i18n/en/geom.ts — the extCylinder.* strings: the label, the description and measure rule, both hints, and the below-minimum error. Geom/ExtendedCylinderController.cs — REST endpoints at /api/ExtendedCylinder/*: New, Get, UpdateFullLength and GetFullLength. Get carries minFullLength alongside the value. Mech/CutterController.cs — the upper-beam routes the Tool House host actually goes through, and the geometry-issue warnings it surfaces. Mech/WorkpieceController.cs — the raw-geometry create switch, which still carries an ExtendedCylinder arm that no picker can now reach. See Also Geometry Management Panel — the switchboard that offers this kind and hosts this editor Milling Cutter Panel — the cutter whose Upper Beam is this editor's real home, and the one surface that supplies a start section"
},
"anatomy/geom/geom-combination-control.html": {
"href": "anatomy/geom/geom-combination-control.html",
"title": "Geometry Combination Control | HiAPI-C# 2025",
- "summary": "Geometry Combination Control A GeomCombination is several geometries treated as one, and it has two faces on the web: an inline editor that renders every child's own editor at once, and a Control-Tree panel that manages the list only and puts each child on its own node. The desktop client has the inline shape alone. There is no selection model on any of them — every child carries its own remove button. Layout The inline editor Add bar — a child-kind picker beside an Add button, and a Clear all button. One card per child, each with a #n index badge, the child's type name, its own remove button, and — in the card body — that child's full editor, rendered recursively. All children are editable at once. The Control-Tree panel Deliberately shallow: a list of read-only rows with Add, a per-row remove and Clear all, and a standing hint that an Item child node is where a child is actually edited. No editor is embedded here; each child is its own Item node — .../item-{index} — under this one. The desktop control A title, then an Add and a Clear All button over a scrolling list of bordered cards, each holding that child's own geometry management panel and a remove button — no index badge and no type caption. Below the list sits a collapsed Combination Information expander reporting the aggregate triangle count and bounding box, the latter as a read-only box control. Adding a Child The two clients differ here, and the web is the one that gained something: Web — pick the kind first, then Add; the request carries the kind. Desktop — Add takes no kind and always appends a 100 mm cube. The kind is switched afterwards, on that child's own Geometry Type combo. Five kinds may be children — Box3d, Cylindroid, StlFile, TransformationGeom and a nested GeomCombination, so combinations nest arbitrarily deep. CubeTreeFile and ExtendedCylinder are accepted by neither client's switch. Behavior A type switch rewires the slot, not just the alias. Changing a child's kind goes through SetItemAt, which replaces the entry in StlSources itself. The aggregate STL is cached, and a child's own controller does not invalidate it. Editing a child through its own endpoints leaves the combination returning the mesh it had already built, so both web faces call CleanCache before bubbling the change, and compose that call into the ancestor chain. This is the behavioural fact the rest of the page depends on. Removing a child does not renumber the ones after it. Item keys are minted as {key}-item-{index} and the remove endpoint leaves later indices pointing at the old aliases, which is why every structural change rebuilds the branch and re-mints them. Clear all confirms only on the desktop. The web posts it directly. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/GeomCombinationEditor.vue — the inline face: the Add bar, the per-child cards, and the recursive editor in each. Type switches route through SetItemAt, a cache clean precedes every changed bubble, and item aliases are released on refresh and unmount. wwwroot-src/src/components/controlTree/GeomCombinationTreePanel.vue — the Control-Tree face: list management only, emitting a structure change so the host re-mints the item aliases. wwwroot-src/src/components/controlTree/itemTypes.ts — registers the kind against that panel with a child builder that mints one Item node per element, and declares the five container kinds a child may be. wwwroot-src/src/components/geom/geometryEditors.ts — maps the GeomCombination kind to the inline editor. wwwroot-src/src/components/geom/GeometryEditor.vue — the recursive kind picker each child card embeds. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue and wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — an Item node's picker and, once a kind is chosen, that kind's editor. wwwroot-src/src/components/geom/TransformationGeomEditor.vue — the nesting host: a combination is an allowed inner geometry. wwwroot-src/src/components/controlTree/useControlTreeHost.ts, wwwroot-src/src/pages/MechBuilderPage.vue and wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue — the slots that admit the kind: the fixture geometry, the workpiece raw geometry, a mechanism anchor's geometry and the cutter upper beam. The workpiece's target geometry deliberately does not. wwwroot-src/src/api/geometry.ts — getGeomCombination, addGeomCombinationItem, setGeomCombinationItemAt, removeGeomCombinationItemAt, clearGeomCombination, cleanGeomCombinationCache and indexGeomCombinationItemAt, with the child-kind and combination types and the create entry. wwwroot-src/src/api/index-service.ts — the index release the editor uses to drop item aliases. wwwroot-src/src/i18n/en/geom.ts — the combination.* strings, and wwwroot-src/src/i18n/en/tree.ts — the tree panel's own strings and the Item node label. Geom/GeomCombinationController.cs — REST endpoints at /api/GeomCombination/*: New, Get, GetCount, AddItem, SetItemAt, RemoveItemAt, Clear, CleanCache, IndexItemAt and GetItemTypeAt. AddItem and SetItemAt share one five-arm kind switch and both clean the cache. Geom/TransformationGeomController.cs, Mech/FixtureController.cs, Mech/WorkpieceController.cs, Mech/MechBuilder/GeneralMechanismController.cs and Mech/CutterController.cs — the container-aware create switches behind each host's onCreate. See Also Geometry Management Panel — the switchboard that offers this kind, and the panel each desktop child card embeds"
+ "summary": "Geometry Combination Control A GeomCombination is several geometries treated as one, and it has two faces: an inline editor that renders every child's own editor at once, and a Control-Tree panel that manages the list only and puts each child on its own node. There is no selection model on either — every child carries its own remove button. Layout The inline editor Add bar — a child-kind picker beside an Add button, and a Clear all button. One card per child, each with a #n index badge, the child's type name, its own remove button, and — in the card body — that child's full editor, rendered recursively. All children are editable at once. The Control-Tree panel Deliberately shallow: a list of read-only rows with Add, a per-row remove and Clear all, and a standing hint that an Item child node is where a child is actually edited. No editor is embedded here; each child is its own Item node — .../item-{index} — under this one. Adding a Child Pick the kind first, then Add; the request carries the kind. Five kinds may be children — Box3d, Cylindroid, StlFile, TransformationGeom and a nested GeomCombination, so combinations nest arbitrarily deep. CubeTreeFile and ExtendedCylinder are accepted by neither switch. Behavior A type switch rewires the slot, not just the alias. Changing a child's kind goes through SetItemAt, which replaces the entry in StlSources itself. The aggregate STL is cached, and a child's own controller does not invalidate it. Editing a child through its own endpoints leaves the combination returning the mesh it had already built, so both faces call CleanCache before bubbling the change, and compose that call into the ancestor chain. This is the behavioural fact the rest of the page depends on. Removing a child does not renumber the ones after it. Item keys are minted as {key}-item-{index} and the remove endpoint leaves later indices pointing at the old aliases, which is why every structural change rebuilds the branch and re-mints them. Clear all is posted directly, with no confirmation. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/GeomCombinationEditor.vue — the inline face: the Add bar, the per-child cards, and the recursive editor in each. Type switches route through SetItemAt, a cache clean precedes every changed bubble, and item aliases are released on refresh and unmount. wwwroot-src/src/components/controlTree/GeomCombinationTreePanel.vue — the Control-Tree face: list management only, emitting a structure change so the host re-mints the item aliases. wwwroot-src/src/components/controlTree/itemTypes.ts — registers the kind against that panel with a child builder that mints one Item node per element, and declares the five container kinds a child may be. wwwroot-src/src/components/geom/geometryEditors.ts — maps the GeomCombination kind to the inline editor. wwwroot-src/src/components/geom/GeometryEditor.vue — the recursive kind picker each child card embeds. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue and wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — an Item node's picker and, once a kind is chosen, that kind's editor. wwwroot-src/src/components/geom/TransformationGeomEditor.vue — the nesting host: a combination is an allowed inner geometry. wwwroot-src/src/components/controlTree/useControlTreeHost.ts, wwwroot-src/src/pages/MechBuilderPage.vue and wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue — the slots that admit the kind: the fixture geometry, the workpiece raw geometry, a mechanism anchor's geometry and the cutter upper beam. The workpiece's target geometry deliberately does not. wwwroot-src/src/api/geometry.ts — getGeomCombination, addGeomCombinationItem, setGeomCombinationItemAt, removeGeomCombinationItemAt, clearGeomCombination, cleanGeomCombinationCache and indexGeomCombinationItemAt, with the child-kind and combination types and the create entry. wwwroot-src/src/api/index-service.ts — the index release the editor uses to drop item aliases. wwwroot-src/src/i18n/en/geom.ts — the combination.* strings, and wwwroot-src/src/i18n/en/tree.ts — the tree panel's own strings and the Item node label. Geom/GeomCombinationController.cs — REST endpoints at /api/GeomCombination/*: New, Get, GetCount, AddItem, SetItemAt, RemoveItemAt, Clear, CleanCache, IndexItemAt and GetItemTypeAt. AddItem and SetItemAt share one five-arm kind switch and both clean the cache. Geom/TransformationGeomController.cs, Mech/FixtureController.cs, Mech/WorkpieceController.cs, Mech/MechBuilder/GeneralMechanismController.cs and Mech/CutterController.cs — the container-aware create switches behind each host's onCreate. See Also Geometry Management Panel — the switchboard that offers this kind, and the panel each child card embeds"
},
"anatomy/geom/geom-manage-control.html": {
"href": "anatomy/geom/geom-manage-control.html",
"title": "Geometry Management Panel | HiAPI-C# 2025",
- "summary": "Geometry Management Panel The geometry switchboard is one control: a kind picker over the kinds its host allows, and — unless the host asked for the picker alone — the picked kind's editor beneath it. On the web it binds a key into the shared object store, not an object, and every Control-Tree Geometry slot is this same control in selector-only mode. Layout Web: a geometry-type dropdown; a separator, drawn only while a kind is active; then that kind's editor. Picking a kind commits immediately — there is no Apply button. In selector-only mode everything below the dropdown is dropped, which is the form each Geometry slot node shows. Desktop: a combo box on the left of a head line with a Convert menu on its right, over a bordered content presenter that hosts the kind's own control. What It Binds The web panel has no target-geometry property. It takes a modelKey naming the object it edits and mutates what sits behind that key; a host that also owns the field holding the geometry passes an onCreate hook, so switching the kind rebinds the host's field rather than just the key. The desktop panel is the one that exchanges an IStlSource directly, through a getter and setter pair its host supplies. Each host's field type decides which kinds it may offer; whether the kind survives a save decides which of those it does. A fixture's geometry and a transformation geometry's inner geometry are IGetStl; a workpiece's initial geometry is an IMakeXmlSource, which is why the cube-tree file — which is not an IGetStl — reaches that picker and no other. Type compatibility alone is not sufficient, and ExtendedCylinder is the case that shows it. It is an IMakeXmlSource, so the workpiece's raw slot could hold one and once did — but its start section is supplied by a host at run time and is not serialized, so a saved project reloaded it with a zero-radius start and the shape degenerated. The kind is now offered by the one host that wires that source, the cutter's upper beam. Reach The picker's own default is six of the seven kinds: Box3d, Cylindroid, StlFile, TransformationGeom, GeomCombination and CubeTreeFile. ExtendedCylinder is in the kind map but out of that default: a host that can wire its start section names it explicitly. Nothing is hidden by a flag on the web. The default is a guard rail, not a shipped list. Every host passes its own whitelist — the five Control-Tree Geometry slots from the node context, the four inline hosts as a constant — so no shipped surface renders the default at all, and the whitelist is what really decides reach. Host Kinds offered Fixture geometry, mechanism anchor, a transformation geometry's inner geometry, a combination child the five container kinds — Box3d, Cylindroid, StlFile, TransformationGeom, GeomCombination Workpiece raw geometry six — the five container kinds plus CubeTreeFile Workpiece target geometry four Cutter upper beam six — Cylindroid, ExtendedCylinder, TransformationGeom, StlFile, Box3d, GeomCombination A null geometry is a legal state of the model, but the web picker offers its None (unset) entry only when the host asks for it: the three General Setup slots and a transformation geometry's inner geometry do, while the mechanism anchor, the cutter upper beam and combination children do not, so those pickers cannot clear the slot. Clearing goes through the host's create hook with the literal kind None, which the container-aware endpoints map to null. The desktop combo always lists a None item. Converting Is Desktop-Only Wrapping an existing geometry into a TransformationGeom — and extracting it back out — exists only in the desktop client, as items in the Convert menu rather than as buttons. The Convert to Transformation item re-titles itself Extract from Transformation when the current geometry already is one; the combination item behaves the same way, and its extract is offered only when the combination holds exactly one child. Three code-behind properties can hide the menu and each of its two items, but no shipped host sets any of them. The web has no equivalent, and the difference is not cosmetic. Picking TransformationGeom in the picker creates a new, empty one and discards the geometry that was there — it does not wrap it. In the Control Tree Geometry is a slot item type. Its child builder probes the slot's key for the type behind it and, when that type is a known kind, grows exactly one child node of that kind bound to the same key — so the slot node carries the picker and its single child carries the editor. Five kinds resolve to the shared sole-editor panel; TransformationGeom and GeomCombination instead map to panels of their own, because they grow further slot children rather than hosting one editor. The two file-backed kinds compose the referenced file into their node label. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/GeometryEditor.vue — the switchboard: the kind picker over the allowed kinds, the opt-in unset entry, the immediate commit through the create hook, and the active kind's editor. wwwroot-src/src/components/geom/geometryEditors.ts — the single kind → editor map both this picker and the Control Tree's sole-editor panel resolve through. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the slot node's panel: this switchboard in selector-only mode, fed its allowed kinds, its unset flag and its create hook from the node. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — the kind child's panel. wwwroot-src/src/components/controlTree/itemTypes.ts — registers Geometry as a slot type with its child builder, registers each kind against its panel, and holds both the container-kind list and the file-backed node labels. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — the three General Setup Geometry slots and their per-host kind whitelists. wwwroot-src/src/pages/MechBuilderPage.vue and wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue — the two inline, non-tree hosts. wwwroot-src/src/api/index-service.ts — the type probe the picker calls to discover which kind is currently behind the key. wwwroot-src/src/api/geometry.ts — the kind union, the create dispatcher and its per-kind endpoint map, and every per-kind call. wwwroot-src/src/api/fixture.ts, wwwroot-src/src/api/workpiece.ts, wwwroot-src/src/api/toolHouse.ts and wwwroot-src/src/api/generalMechanism.ts — the container-aware create wrappers each host's hook posts through. wwwroot-src/src/i18n/en/common.ts and wwwroot-src/src/i18n/en/geom.ts — the picker's label and its unset and empty-state strings. Geometry type names are deliberately not translated. The seven per-kind controllers under Geom/ — Geom/Box3dController.cs, Geom/CylindroidController.cs, Geom/ExtendedCylinderController.cs, Geom/StlFileController.cs, Geom/CubeTreeFileController.cs, Geom/TransformationGeomController.cs and Geom/GeomCombinationController.cs — each at /api/{Kind}/*. There is no single geometry controller and no geometry hub. Common/IndexController.cs — the type probe at /api/Index/GetType. Common/IndexService.cs — the keyed object store all of the above read and write. There is no per-panel session object. Mech/FixtureController.cs, Mech/WorkpieceController.cs, Mech/CutterController.cs and Mech/MechBuilder/GeneralMechanismController.cs — the container-aware create endpoints that set the host's own field, and the ones that accept None and store null. See Also Mechanism Builder Page — embeds this control under its anchor editor Box3d Control — the kind editors this switchboard resolves Cylindroid Control — the same, for a solid of revolution Extended Cylinder Panel — the same, and the kind exactly one host offers STL File Control — the same, for an STL reference Meshed Geometry Panel — the same, for a voxel cube tree Transformation Geometry Control — the container kind this panel can wrap into on the desktop client Geometry Combination Control — the other container kind, whose every child embeds this panel again"
+ "summary": "Geometry Management Panel The geometry switchboard is one control: a kind picker over the kinds its host allows, and — unless the host asked for the picker alone — the picked kind's editor beneath it. It binds a key into the shared object store, not an object, and every Control-Tree Geometry slot is this same control in selector-only mode. Layout Web: a geometry-type dropdown; a separator, drawn only while a kind is active; then that kind's editor. Picking a kind commits immediately — there is no Apply button. In selector-only mode everything below the dropdown is dropped, which is the form each Geometry slot node shows. What It Binds The web panel has no target-geometry property. It takes a modelKey naming the object it edits and mutates what sits behind that key; a host that also owns the field holding the geometry passes an onCreate hook, so switching the kind rebinds the host's field rather than just the key. Each host's field type decides which kinds it may offer; whether the kind survives a save decides which of those it does. A fixture's geometry and a transformation geometry's inner geometry are IGetStl; a workpiece's initial geometry is an IMakeXmlSource, which is why the cube-tree file — which is not an IGetStl — reaches that picker and no other. Type compatibility alone is not sufficient, and ExtendedCylinder is the case that shows it. It is an IMakeXmlSource, so the workpiece's raw slot could hold one and once did — but its start section is supplied by a host at run time and is not serialized, so a saved project reloaded it with a zero-radius start and the shape degenerated. The kind is now offered by the one host that wires that source, the cutter's upper beam. Reach The picker's own default is six of the seven kinds: Box3d, Cylindroid, StlFile, TransformationGeom, GeomCombination and CubeTreeFile. ExtendedCylinder is in the kind map but out of that default: a host that can wire its start section names it explicitly. Nothing is hidden by a flag. The default is a guard rail, not a shipped list. Every host passes its own whitelist — the five Control-Tree Geometry slots from the node context, the four inline hosts as a constant — so no shipped surface renders the default at all, and the whitelist is what really decides reach. Host Kinds offered Fixture geometry, mechanism anchor, a transformation geometry's inner geometry, a combination child the five container kinds — Box3d, Cylindroid, StlFile, TransformationGeom, GeomCombination Workpiece raw geometry six — the five container kinds plus CubeTreeFile Workpiece target geometry four Cutter upper beam six — Cylindroid, ExtendedCylinder, TransformationGeom, StlFile, Box3d, GeomCombination A null geometry is a legal state of the model, but the web picker offers its None (unset) entry only when the host asks for it: the three General Setup slots and a transformation geometry's inner geometry do, while the mechanism anchor, the cutter upper beam and combination children do not, so those pickers cannot clear the slot. Clearing goes through the host's create hook with the literal kind None, which the container-aware endpoints map to null. There Is No Way to Wrap an Existing Geometry Wrapping a geometry that is already in a slot into a TransformationGeom — and extracting it back out — is not offered anywhere in the application, and the difference from what the picker looks like it does is not cosmetic. Picking TransformationGeom creates a new, empty one and discards the geometry that was there. The same holds for a combination: there is no operation that takes a geometry and puts a container around it in place. In the Control Tree Geometry is a slot item type. Its child builder probes the slot's key for the type behind it and, when that type is a known kind, grows exactly one child node of that kind bound to the same key — so the slot node carries the picker and its single child carries the editor. Five kinds resolve to the shared sole-editor panel; TransformationGeom and GeomCombination instead map to panels of their own, because they grow further slot children rather than hosting one editor. The two file-backed kinds compose the referenced file into their node label. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/GeometryEditor.vue — the switchboard: the kind picker over the allowed kinds, the opt-in unset entry, the immediate commit through the create hook, and the active kind's editor. wwwroot-src/src/components/geom/geometryEditors.ts — the single kind → editor map both this picker and the Control Tree's sole-editor panel resolve through. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the slot node's panel: this switchboard in selector-only mode, fed its allowed kinds, its unset flag and its create hook from the node. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — the kind child's panel. wwwroot-src/src/components/controlTree/itemTypes.ts — registers Geometry as a slot type with its child builder, registers each kind against its panel, and holds both the container-kind list and the file-backed node labels. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — the three General Setup Geometry slots and their per-host kind whitelists. wwwroot-src/src/pages/MechBuilderPage.vue and wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue — the two inline, non-tree hosts. wwwroot-src/src/api/index-service.ts — the type probe the picker calls to discover which kind is currently behind the key. wwwroot-src/src/api/geometry.ts — the kind union, the create dispatcher and its per-kind endpoint map, and every per-kind call. wwwroot-src/src/api/fixture.ts, wwwroot-src/src/api/workpiece.ts, wwwroot-src/src/api/toolHouse.ts and wwwroot-src/src/api/generalMechanism.ts — the container-aware create wrappers each host's hook posts through. wwwroot-src/src/i18n/en/common.ts and wwwroot-src/src/i18n/en/geom.ts — the picker's label and its unset and empty-state strings. Geometry type names are deliberately not translated. The seven per-kind controllers under Geom/ — Geom/Box3dController.cs, Geom/CylindroidController.cs, Geom/ExtendedCylinderController.cs, Geom/StlFileController.cs, Geom/CubeTreeFileController.cs, Geom/TransformationGeomController.cs and Geom/GeomCombinationController.cs — each at /api/{Kind}/*. There is no single geometry controller and no geometry hub. Common/IndexController.cs — the type probe at /api/Index/GetType. Common/IndexService.cs — the keyed object store all of the above read and write. There is no per-panel session object. Mech/FixtureController.cs, Mech/WorkpieceController.cs, Mech/CutterController.cs and Mech/MechBuilder/GeneralMechanismController.cs — the container-aware create endpoints that set the host's own field, and the ones that accept None and store null. See Also Mechanism Builder Page — embeds this control under its anchor editor Box3d Control — the kind editors this switchboard resolves Cylindroid Control — the same, for a solid of revolution Extended Cylinder Panel — the same, and the kind exactly one host offers STL File Control — the same, for an STL reference Meshed Geometry Panel — the same, for a voxel cube tree Transformation Geometry Control — one of the container kinds this panel offers, and why picking it replaces rather than wraps Geometry Combination Control — the other container kind, whose every child embeds this panel again"
},
"anatomy/geom/index.html": {
"href": "anatomy/geom/index.html",
@@ -297,22 +297,22 @@
"anatomy/geom/meshed-geom-panel.html": {
"href": "anatomy/geom/meshed-geom-panel.html",
"title": "Meshed Geometry Panel | HiAPI-C# 2025",
- "summary": "Meshed Geometry Panel The meshed-geometry editor points a geometry at a pre-computed voxel cube tree in a .wct file. Its model is CubeTreeFile, a reference to that file: neither the editor nor the controller loads the voxel data, which stays deferred until something actually needs the mesh. Important The kind is CubeTreeFile; the label is MeshedGeomFile. The rename is display-only and lives in exactly two registries — the kind picker's option label and the Control-Tree node label — while the value sent to the backend stays the type name. The domain type carries the matching display name of its own. Any page describing a mesh source has to keep the two apart. Layout A caption naming what the field takes, .wct. The file selector — the shared file-path widget, filtered to .wct, with an empty-state hint when nothing is chosen. A standing description: the geometry is a pre-computed voxel cube tree, and loading it is deferred until it is needed. The desktop panel is a read-only path field with Browse and Reload buttons. The web has no Reload: the controller has no such action. Reach One slot offers this kind: the workpiece's Raw Geometry. The fixture's geometry and the workpiece's target geometry both exclude it, and it is not among the container kinds, so it can be neither a transformation geometry's inner geometry nor a combination child. The Control-Tree node carries the chosen file in its label, as MeshedGeomFile []. The desktop client reaches it differently. There, the workpiece page carries a Geometry Source combo — Common Geometry or Meshed Geometry — that decides whether this panel or the geometry switchboard is visible. The web has no such toggle: picking the MeshedGeomFile kind is choosing the meshed source. The classification survives on the server, which still reports a raw geometry of this type as a meshed one. Key Model CubeTreeFile is the file reference; CubeTree is the voxel tree itself. The reader resolves the stored relative path and opens it with no extension test of its own — .wct is what the app writes and what every user-facing string names, not something the loader enforces. The consumer that reads the data is the equipment-setup scene: it recognises a workpiece whose initial geometry is a cube-tree file and builds the meshed geometry for the canvas, behind the canvas's own Meshed Geometry display toggle. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/CubeTreeFileEditor.vue — the editor: the caption, the .wct file selector and the deferred-loading description. wwwroot-src/src/components/widgets/FilePathInput.vue and wwwroot-src/src/components/widgets/FileExplorerDialog.vue — the picker and the in-app browser it opens. wwwroot-src/src/components/geom/geometryEditors.ts — maps the CubeTreeFile kind to this editor. wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker, and the display-only rename applied to its option label. wwwroot-src/src/components/controlTree/itemTypes.ts — registers the kind against the sole-editor panel, holds the other half of the rename, builds the node label that carries the file, and is where the kind's absence from the container kinds is declared. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue and wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the kind node's panel and the parent slot's picker. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — the workpiece raw-geometry slot, the only slot whose allowed kinds admit it, and the node-label refresh when the file changes. wwwroot-src/src/api/geometry.ts — getCubeTreeFile, setCubeTreeFileSourceFile and the create entry. wwwroot-src/src/i18n/en/geom.ts — the meshedFile.* strings, and wwwroot-src/src/i18n/en/tree.ts — the Raw Geometry slot label. Geom/CubeTreeFileController.cs — REST endpoints at /api/CubeTreeFile/*: New, Get and SetSourceFile, and nothing else. None of them loads the voxel data. Mech/WorkpieceController.cs — the raw-geometry create path, and the classification that still reports this type as a meshed geometry. Common/IndexService.cs — the keyed object store every cube-tree-file key resolves against. Disp/EquipmentSetupDisplayee.cs and Mech/EquipmentSetupDisplayController.cs — the scene that builds the meshed geometry for the canvas, and the display toggle that shows it. See Also Geometry Management Panel — the switchboard that offers this kind and hosts this editor STL File Control — the other file-backed kind, and the one this slot offers beside it"
+ "summary": "Meshed Geometry Panel The meshed-geometry editor points a geometry at a pre-computed voxel cube tree in a .wct file. Its model is CubeTreeFile, a reference to that file: neither the editor nor the controller loads the voxel data, which stays deferred until something actually needs the mesh. Important The kind is CubeTreeFile; the label is MeshedGeomFile. The rename is display-only and lives in exactly two registries — the kind picker's option label and the Control-Tree node label — while the value sent to the backend stays the type name. The domain type carries the matching display name of its own. Any page describing a mesh source has to keep the two apart. Layout A caption naming what the field takes, .wct. The file selector — the shared file-path widget, filtered to .wct, with an empty-state hint when nothing is chosen. A standing description: the geometry is a pre-computed voxel cube tree, and loading it is deferred until it is needed. Reach One slot offers this kind: the workpiece's Raw Geometry. The fixture's geometry and the workpiece's target geometry both exclude it, and it is not among the container kinds, so it can be neither a transformation geometry's inner geometry nor a combination child. The Control-Tree node carries the chosen file in its label, as MeshedGeomFile []. There is no separate geometry-source toggle: picking the MeshedGeomFile kind is choosing the meshed source. The classification survives on the server, which still reports a raw geometry of this type as a meshed one. Key Model CubeTreeFile is the file reference; CubeTree is the voxel tree itself. The reader resolves the stored relative path and opens it with no extension test of its own — .wct is what the app writes and what every user-facing string names, not something the loader enforces. The consumer that reads the data is the equipment-setup scene: it recognises a workpiece whose initial geometry is a cube-tree file and builds the meshed geometry for the canvas, behind the canvas's own Meshed Geometry display toggle. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/CubeTreeFileEditor.vue — the editor: the caption, the .wct file selector and the deferred-loading description. wwwroot-src/src/components/widgets/FilePathInput.vue and wwwroot-src/src/components/widgets/FileExplorerDialog.vue — the picker and the in-app browser it opens. wwwroot-src/src/components/geom/geometryEditors.ts — maps the CubeTreeFile kind to this editor. wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker, and the display-only rename applied to its option label. wwwroot-src/src/components/controlTree/itemTypes.ts — registers the kind against the sole-editor panel, holds the other half of the rename, builds the node label that carries the file, and is where the kind's absence from the container kinds is declared. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue and wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the kind node's panel and the parent slot's picker. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — the workpiece raw-geometry slot, the only slot whose allowed kinds admit it, and the node-label refresh when the file changes. wwwroot-src/src/api/geometry.ts — getCubeTreeFile, setCubeTreeFileSourceFile and the create entry. wwwroot-src/src/i18n/en/geom.ts — the meshedFile.* strings, and wwwroot-src/src/i18n/en/tree.ts — the Raw Geometry slot label. Geom/CubeTreeFileController.cs — REST endpoints at /api/CubeTreeFile/*: New, Get and SetSourceFile, and nothing else. None of them loads the voxel data. Mech/WorkpieceController.cs — the raw-geometry create path, and the classification that still reports this type as a meshed geometry. Common/IndexService.cs — the keyed object store every cube-tree-file key resolves against. Disp/EquipmentSetupDisplayee.cs and Mech/EquipmentSetupDisplayController.cs — the scene that builds the meshed geometry for the canvas, and the display toggle that shows it. See Also Geometry Management Panel — the switchboard that offers this kind and hosts this editor STL File Control — the other file-backed kind, and the one this slot offers beside it"
},
"anatomy/geom/stlfile-control.html": {
"href": "anatomy/geom/stlfile-control.html",
"title": "STL File Control | HiAPI-C# 2025",
- "summary": "STL File Control The STL file editor points a geometry at an .stl file rather than describing a shape: the model holds a file reference, and the editor is a picker over it plus a read-only summary of what was loaded. On the web the file lives on the server, not on the machine running the browser, and that difference shapes everything else on the page. Layout File reference — a read-only field showing the path currently referenced, with an empty-state hint when there is none. The picker — on the web a Select dropdown whose menu holds Browse…, Browse Resource… and, only while a path is set, Clear. Either Browse entry opens the in-app File Explorer dialog filtered to .stl. In the desktop client this is a Browse button opening the operating system's file dialog, beside a Reload button and a status line; the web has no Reload. STL info — behind an info icon on the web, opening a dialog; a collapsed Information expander in the desktop client. Both show the triangle count and the bounding box as read-only vector rows, and the web dialog states an empty case when nothing is loaded. Behavior The picker browses the server's named roots, not a file system. Three roots are exposed — Project, Resource and Admin — and nothing outside them is reachable. A pick outside the current project is silently re-homed. The update endpoint stores Geom/ rather than the picked location, so saving the project copies the geometry into the project folder. The consequence is visible: after such a pick the read-only field shows the re-homed path, not the one that was chosen. The info dialog refetches on each open, because the bounding box is computed server-side by walking the triangles rather than kept resident. Only Min and Max come back from the server; Dimension and Center are derived in the browser from them. The picker previews. Double-clicking an .stl row in the File Explorer dialog swaps its slave panel to a 3D preview of that file before the pick is confirmed — a capability the desktop file dialog has no equivalent of. The dialog opens with that panel hidden, which is why the double-click is the gesture that reaches a preview there; a single click does so only once the toolbar's pencil has revealed the panel. The preview belongs to the File Explorer rather than to this editor — see STL Preview Pane. One endpoint ships without a caller. The controller exposes Reload; nothing in the SPA calls it. Reach StlFile is the least restricted geometry kind. It is allowed in every Control-Tree geometry slot — the fixture's geometry and both of the workpiece's — is one of the container kinds, so it can be a transformation geometry's inner geometry or a combination child, and it is offered by the two inline hosts as well: a mechanism anchor's geometry and the cutter's upper beam. The Control-Tree node carries the referenced file in its own label. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/StlFileEditor.vue — the editor: the caption, the file-path input, and the info dialog with its triangle-count badge and four read-only vector rows. wwwroot-src/src/components/widgets/FilePathInput.vue — the picker widget: the Select dropdown with its Browse, Browse Resource and Clear entries beside a read-only field. wwwroot-src/src/components/widgets/FileExplorerDialog.vue and wwwroot-src/src/components/FileExplorer.vue — the in-app browser the Browse entries open, and the row gestures that swap in the STL preview. wwwroot-src/src/components/StlPreviewPane.vue and wwwroot-src/src/api/stlPreview.ts — that preview and the surface behind it. wwwroot-src/src/components/widgets/Vec3Input.vue — the read-only vector rows in the info dialog. wwwroot-src/src/components/geom/geometryEditors.ts — maps the StlFile kind to this editor. wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker; it leaves this kind's label verbatim. wwwroot-src/src/components/controlTree/itemTypes.ts — registers StlFile against the sole-editor panel, lists it among the container kinds, and builds the node label that carries the referenced file. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue and wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the kind node's panel and the parent slot's picker. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — the three tree slots that admit the kind, and the node-label refresh when the source file changes. wwwroot-src/src/components/geom/TransformationGeomEditor.vue, wwwroot-src/src/components/geom/GeomCombinationEditor.vue, wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue and wwwroot-src/src/pages/MechBuilderPage.vue — the inline hosts that also admit it. wwwroot-src/src/api/geometry.ts — getStlFile, getStlFileInfo, setStlFileSource and the create entry. wwwroot-src/src/i18n/en/geom.ts — the stl.* strings and the bounds.* captions shared with the Box3d editor. Geom/StlFileController.cs — REST endpoints at /api/StlFile/*: New, NewWithPath, Get, GetInfo, UpdateSourceFile, UpdateSource, Clear, GetFileInfo and Reload. UpdateSource is where the re-homing happens; GetInfo answers loaded: false when nothing is cached. Common/NamedRootResolver.cs — the three named roots the picker can reach, and the only three. Common/IndexService.cs — the keyed object store every STL file key resolves against. Mech/WorkpieceController.cs — the workpiece slots' create paths. Disp/StlPreviewController.cs and Disp/StlPreviewService.cs — the picker's preview, loaded onto the caller's own rendering connection and superseded as the selection moves. See Also Geometry Management Panel — the switchboard that offers this kind and hosts this editor Meshed Geometry Panel — the other file-backed kind, and the one the workpiece's raw geometry offers beside this one STL Preview Pane — the preview the picker opens on an .stl row before the pick is confirmed"
+ "summary": "STL File Control The STL file editor points a geometry at an .stl file rather than describing a shape: the model holds a file reference, and the editor is a picker over it plus a read-only summary of what was loaded. The file lives on the server, not on the machine running the browser, and that difference shapes everything else on the page. Layout File reference — a read-only field showing the path currently referenced, with an empty-state hint when there is none. The picker — a Select dropdown whose menu holds Browse…, Browse Resource… and, only while a path is set, Clear. Either Browse entry opens the in-app File Explorer dialog filtered to .stl. There is no reload action. STL info — behind an info icon, opening a dialog that shows the triangle count and the bounding box as read-only vector rows, and states an empty case when nothing is loaded. Behavior The picker browses the server's named roots, not a file system. Three roots are exposed — Project, Resource and Admin — and nothing outside them is reachable. A pick outside the current project is silently re-homed. The update endpoint stores Geom/ rather than the picked location, so saving the project copies the geometry into the project folder. The consequence is visible: after such a pick the read-only field shows the re-homed path, not the one that was chosen. The info dialog refetches on each open, because the bounding box is computed server-side by walking the triangles rather than kept resident. Only Min and Max come back from the server; Dimension and Center are derived in the browser from them. The picker previews. Double-clicking an .stl row in the File Explorer dialog swaps its slave panel to a 3D preview of that file before the pick is confirmed. The dialog opens with that panel hidden, which is why the double-click is the gesture that reaches a preview there; a single click does so only once the toolbar's pencil has revealed the panel. The preview belongs to the File Explorer rather than to this editor — see STL Preview Pane. One endpoint ships without a caller. The controller exposes Reload; nothing in the SPA calls it. Reach StlFile is the least restricted geometry kind. It is allowed in every Control-Tree geometry slot — the fixture's geometry and both of the workpiece's — is one of the container kinds, so it can be a transformation geometry's inner geometry or a combination child, and it is offered by the two inline hosts as well: a mechanism anchor's geometry and the cutter's upper beam. The Control-Tree node carries the referenced file in its own label. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/StlFileEditor.vue — the editor: the caption, the file-path input, and the info dialog with its triangle-count badge and four read-only vector rows. wwwroot-src/src/components/widgets/FilePathInput.vue — the picker widget: the Select dropdown with its Browse, Browse Resource and Clear entries beside a read-only field. wwwroot-src/src/components/widgets/FileExplorerDialog.vue and wwwroot-src/src/components/FileExplorer.vue — the in-app browser the Browse entries open, and the row gestures that swap in the STL preview. wwwroot-src/src/components/StlPreviewPane.vue and wwwroot-src/src/api/stlPreview.ts — that preview and the surface behind it. wwwroot-src/src/components/widgets/Vec3Input.vue — the read-only vector rows in the info dialog. wwwroot-src/src/components/geom/geometryEditors.ts — maps the StlFile kind to this editor. wwwroot-src/src/components/geom/GeometryEditor.vue — the kind picker; it leaves this kind's label verbatim. wwwroot-src/src/components/controlTree/itemTypes.ts — registers StlFile against the sole-editor panel, lists it among the container kinds, and builds the node label that carries the referenced file. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue and wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue — the kind node's panel and the parent slot's picker. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — the three tree slots that admit the kind, and the node-label refresh when the source file changes. wwwroot-src/src/components/geom/TransformationGeomEditor.vue, wwwroot-src/src/components/geom/GeomCombinationEditor.vue, wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue and wwwroot-src/src/pages/MechBuilderPage.vue — the inline hosts that also admit it. wwwroot-src/src/api/geometry.ts — getStlFile, getStlFileInfo, setStlFileSource and the create entry. wwwroot-src/src/i18n/en/geom.ts — the stl.* strings and the bounds.* captions shared with the Box3d editor. Geom/StlFileController.cs — REST endpoints at /api/StlFile/*: New, NewWithPath, Get, GetInfo, UpdateSourceFile, UpdateSource, Clear, GetFileInfo and Reload. UpdateSource is where the re-homing happens; GetInfo answers loaded: false when nothing is cached. Common/NamedRootResolver.cs — the three named roots the picker can reach, and the only three. Common/IndexService.cs — the keyed object store every STL file key resolves against. Mech/WorkpieceController.cs — the workpiece slots' create paths. Disp/StlPreviewController.cs and Disp/StlPreviewService.cs — the picker's preview, loaded onto the caller's own rendering connection and superseded as the selection moves. See Also Geometry Management Panel — the switchboard that offers this kind and hosts this editor Meshed Geometry Panel — the other file-backed kind, and the one the workpiece's raw geometry offers beside this one STL Preview Pane — the preview the picker opens on an .stl row before the pick is confirmed"
},
"anatomy/geom/transformation-geom-control.html": {
"href": "anatomy/geom/transformation-geom-control.html",
"title": "Transformation Geometry Control | HiAPI-C# 2025",
- "summary": "Transformation Geometry Control A TransformationGeom is an inner geometry plus the transformer that places it, and the editor is those two things side by side. It has two faces on the web: an embedded two-card editor, and a Control-Tree panel that shows only the status of each half and puts the editing on child nodes. Important Choosing a kind here replaces, it does not wrap. Picking an inner geometry calls the container-aware create endpoint, which constructs a fresh instance and discards whatever was there. Wrapping an existing geometry into a transformation geometry, and extracting it back out, exists only in the desktop client's Geometry Management Panel Convert menu. Layout The embedded editor Two bordered cards, each badged with the live type behind it, over a short explanation of what a transformer applied to a geometry means: Inner Geometry (.../inner-geom) — the full Geometry Management Panel, its dropdown labelled Inner geometry type, over five kinds: Box3d, Cylindroid, StlFile, a nested TransformationGeom and GeomCombination — which is what makes recursion and nesting legal — plus a None (unset) entry. Inner Transformer — the Transformer Select Panel, mounted with no kind restriction at all, so its own default of all seven transformer kinds applies. The Control-Tree panel Status badges for the two halves and the same explanation, and nothing editable: the tree grows an Inner Geometry slot and an Inner Transformer slot as children, and each of those grows its own kind child. The registry deliberately overrides the kind → editor map here, so the two-card editor never appears inside a tree. The desktop control A geometry-type combo over the inner geometry's own control, and a transformer group box. Its lists are narrower on both sides: three inner geometry kinds — Box3d, Cylindroid and StlFile, with no unset entry — and a transformer list restricted to No Transform, Static Translation, Static Freeform and General Transform. Static Rotation is unreachable there for a second reason: the desktop transformer picker never builds it into its base list, so it is absent whatever the restriction says. Behavior The identity transformer is the floor on the web. The inner-transformer picker offers no null entry, and the server installs a NoTransform whenever the field is null, so the slot is never unset. The desktop panel instead carries a Not Set entry, shown by default and never removed by its type filter, which leaves the slot holding a null transformer. Creation is container-aware on both halves. Both go through this type's own create endpoints rather than the generic per-kind ones, so the owning field is rebound and not merely the store entry. Neither client previews. There is no viewport on this control. It reports edits upward — one event when a half is mutated, another when a half is replaced — and the hosting page's shared 3D canvas re-renders from there. A null inner geometry has a deterministic key anyway. When the inner geometry is unset the server returns no key, so the editor falls back to a derived alias; without it the picker could never create the first geometry. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/TransformationGeomEditor.vue — the embedded editor: the two cards and their type badges, the two container-aware create hooks, and the fallback alias for a null inner geometry. wwwroot-src/src/components/controlTree/TransformationGeomTreePanel.vue — the Control-Tree face: status only. wwwroot-src/src/components/controlTree/itemTypes.ts — registers the kind against that panel with a child builder that grows the Inner Geometry and Inner Transformer slots, and is where the override of the kind → editor map lives. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue, wwwroot-src/src/components/controlTree/TransformerSlotPanel.vue and wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — the two child slots' pickers and each kind grandchild's editor. wwwroot-src/src/components/geom/geometryEditors.ts and wwwroot-src/src/components/geom/GeometryEditor.vue — the kind map that reaches this editor, and the switchboard it re-enters for its own inner geometry. wwwroot-src/src/components/topo/TransformerSelectPanel.vue and wwwroot-src/src/components/topo/transformerEditors.ts — the inner-transformer picker and the seven kinds it offers, with the labels it renders them under. wwwroot-src/src/components/geom/GeomCombinationEditor.vue, wwwroot-src/src/pages/MechBuilderPage.vue and wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue — the three embedders of the non-tree form. wwwroot-src/src/api/geometry.ts — the transformation-geometry DTO, the two index calls and the two create calls. wwwroot-src/src/api/transformer.ts — the transformer kind union and the per-kind endpoints the inner transformer's editors bind through. wwwroot-src/src/i18n/en/geom.ts and wwwroot-src/src/i18n/en/tree.ts — the card labels, the explanation, and the two child-node labels. Geom/TransformationGeomController.cs — REST endpoints at /api/TransformationGeom/*: New, Get, IndexGeom, IndexTransformer, CreateGeom, CreateTransformer, UpdateTransformer, GetGeomType and GetTransformerType. IndexGeom answers empty for a null geometry, and IndexTransformer is where the identity default is installed. Geom/Box3dController.cs, Geom/CylindroidController.cs, Geom/StlFileController.cs and Geom/GeomCombinationController.cs — the four other inner-geometry kinds' own surfaces. The seven per-kind transformer controllers under Mech/Topo/ — reached by the inner transformer's editors for their own reads and writes, not for creation, which this type's own endpoint owns. Common/IndexController.cs and Common/IndexService.cs — the type probe both pickers use, and the store the two aliases are registered into. See Also Transformers Geometry Management Panel — the switchboard this editor embeds for its inner geometry, and the only place a wrap or extract exists Transformer Select Panel — the inner-transformer picker and its seven kinds"
+ "summary": "Transformation Geometry Control A TransformationGeom is an inner geometry plus the transformer that places it, and the editor is those two things side by side. It has two faces: an embedded two-card editor, and a Control-Tree panel that shows only the status of each half and puts the editing on child nodes. Important Choosing a kind here replaces, it does not wrap. Picking an inner geometry calls the container-aware create endpoint, which constructs a fresh instance and discards whatever was there. There is no operation anywhere that wraps an existing geometry into a transformation geometry, or extracts it back out — see Geometry Management Panel. Layout The embedded editor Two bordered cards, each badged with the live type behind it, over a short explanation of what a transformer applied to a geometry means: Inner Geometry (.../inner-geom) — the full Geometry Management Panel, its dropdown labelled Inner geometry type, over five kinds: Box3d, Cylindroid, StlFile, a nested TransformationGeom and GeomCombination — which is what makes recursion and nesting legal — plus a None (unset) entry. Inner Transformer — the Transformer Select Panel, mounted with no kind restriction at all, so its own default of all seven transformer kinds applies. The Control-Tree panel Status badges for the two halves and the same explanation, and nothing editable: the tree grows an Inner Geometry slot and an Inner Transformer slot as children, and each of those grows its own kind child. The registry deliberately overrides the kind → editor map here, so the two-card editor never appears inside a tree. Behavior The identity transformer is the floor. The inner-transformer picker offers no null entry, and the server installs a NoTransform whenever the field is null, so the slot is never unset. Creation is container-aware on both halves. Both go through this type's own create endpoints rather than the generic per-kind ones, so the owning field is rebound and not merely the store entry. The control does not preview. There is no viewport on it. It reports edits upward — one event when a half is mutated, another when a half is replaced — and the hosting page's shared 3D canvas re-renders from there. A null inner geometry has a deterministic key anyway. When the inner geometry is unset the server returns no key, so the editor falls back to a derived alias; without it the picker could never create the first geometry. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/geom/TransformationGeomEditor.vue — the embedded editor: the two cards and their type badges, the two container-aware create hooks, and the fallback alias for a null inner geometry. wwwroot-src/src/components/controlTree/TransformationGeomTreePanel.vue — the Control-Tree face: status only. wwwroot-src/src/components/controlTree/itemTypes.ts — registers the kind against that panel with a child builder that grows the Inner Geometry and Inner Transformer slots, and is where the override of the kind → editor map lives. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue, wwwroot-src/src/components/controlTree/TransformerSlotPanel.vue and wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — the two child slots' pickers and each kind grandchild's editor. wwwroot-src/src/components/geom/geometryEditors.ts and wwwroot-src/src/components/geom/GeometryEditor.vue — the kind map that reaches this editor, and the switchboard it re-enters for its own inner geometry. wwwroot-src/src/components/topo/TransformerSelectPanel.vue and wwwroot-src/src/components/topo/transformerEditors.ts — the inner-transformer picker and the seven kinds it offers, with the labels it renders them under. wwwroot-src/src/components/geom/GeomCombinationEditor.vue, wwwroot-src/src/pages/MechBuilderPage.vue and wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue — the three embedders of the non-tree form. wwwroot-src/src/api/geometry.ts — the transformation-geometry DTO, the two index calls and the two create calls. wwwroot-src/src/api/transformer.ts — the transformer kind union and the per-kind endpoints the inner transformer's editors bind through. wwwroot-src/src/i18n/en/geom.ts and wwwroot-src/src/i18n/en/tree.ts — the card labels, the explanation, and the two child-node labels. Geom/TransformationGeomController.cs — REST endpoints at /api/TransformationGeom/*: New, Get, IndexGeom, IndexTransformer, CreateGeom, CreateTransformer, UpdateTransformer, GetGeomType and GetTransformerType. IndexGeom answers empty for a null geometry, and IndexTransformer is where the identity default is installed. Geom/Box3dController.cs, Geom/CylindroidController.cs, Geom/StlFileController.cs and Geom/GeomCombinationController.cs — the four other inner-geometry kinds' own surfaces. The seven per-kind transformer controllers under Mech/Topo/ — reached by the inner transformer's editors for their own reads and writes, not for creation, which this type's own endpoint owns. Common/IndexController.cs and Common/IndexService.cs — the type probe both pickers use, and the store the two aliases are registered into. See Also Transformers Geometry Management Panel — the switchboard this editor embeds for its inner geometry, and the only place a wrap or extract exists Transformer Select Panel — the inner-transformer picker and its seven kinds"
},
"anatomy/geom/transformer-panel.html": {
"href": "anatomy/geom/transformer-panel.html",
"title": "Transformer Select Panel | HiAPI-C# 2025",
- "summary": "Transformer Select Panel The Transformer Select Panel is the switchboard that picks which ITransformer occupies a transformer-valued slot and edits the one that is there. Both clients carry it under the same name: wwwroot-src/src/components/topo/TransformerSelectPanel.vue on the web, Mech/Topo/TransformerSelectPanel.xaml on WPF. For the model behind the picker — what each transformer does to a frame — see Handle Transform Matrix by ITransformer. Surface The panel's principal home is a Transformer slot of the General Setup page's Control Tree (/general-setup). Four slots on that tree are Transformer slots: equipment/fixture/geom-to-workpiece — “Geom To Workpiece” equipment/fixture/geom-to-table — “Geom To Table” equipment/workpiece/anchor/geom-to-fixture — “Geom To Fixture” equipment/workpiece/anchor/geom-to-program-zero — “Geom To Program Zero” A fifth shape appears wherever a TransformationGeom is grown as a tree node: its .../inner-transformer child is a Transformer slot too. Two surfaces embed the panel outside any tree — the Mechanism Builder Page (/util/mech-builder), for the selected branch's transformer, and the inner-transformer card of Transformation Geometry Control. Layout Transformer Select Panel Transformer Type Dropdown — one dense, outlined q-select listing the kinds this host allows. Its label is the host's label prop, falling back to Transformer type; the inner-transformer card labels it Inner transformer. Picking a kind commits immediately; there is no Apply button. Separator — drawn only when a kind is active. Active Kind's Editor — the component the kind maps to in TRANSFORMER_EDITORS, bound to the IndexService key the picker resolved for the live transformer. The panel takes a selectorOnly prop that drops everything below the dropdown, which gives it two forms: Form Where it is used What renders Embedded (default) Mechanism Builder page; the inner-transformer card of TransformationGeomEditor.vue dropdown, separator, and the active kind's editor in one column Selector only every Control-Tree Transformer slot, through TransformerSlotPanel.vue the dropdown alone In a Control Tree the picker and the editor sit on two different nodes. buildTransformerChildren() grows at most one child under the slot, typed with the current kind, and that child's panel is SoleEditorPanel.vue, which resolves the kind through the same TRANSFORMER_EDITORS map and binds it to the slot's own key. The builder first probes the slot's key with getIndexType and returns no child at all when that probe fails or names a type outside the seven kinds, so a slot holding nothing is a picker with nothing beneath it. Selecting the slot shows the picker; selecting the child shows the kind's editor. Transformer Type Dropdown The dropdown gets and sets the ITransformer behind the bound key. On mount, and again whenever that key changes, it probes the object's type with getIndexType; picking a different kind creates the replacement through POST /api/{Kind}/New unless the host supplied an onCreate hook, in which case that hook runs instead so the owning domain object is rebound alongside the IndexService entry. Which kinds it offers is the allowedKinds prop, defaulting to all seven. A Control-Tree slot feeds it from the node's ctx.allowedKinds; none of the four General Setup slots narrows it, so all seven appear there. The WPF panel restricts through four properties on its code-behind instead: AllowedTransformerTypes, SelectionFilter, ShowNoTransform and ShowNotSet. When the probed kind falls outside allowedKinds, both the active and the selected kind reset to empty: the dropdown blanks, and the embedded form prints No transformer attached. in place of an editor. The out-of-list transformer is not rendered. The WPF client resolves that case the other way — UpdateUI() leaves the combo unselected when no item matches, then still calls UpdateTransformerPanel() and builds the current transformer's content panel. Transformer Kinds The web client offers seven kinds, one editor each. Kind Editor What the editor holds StaticTranslation StaticTranslationEditor.vue one Vec3 input, the constant offset StaticRotation StaticRotationEditor.vue axis Vec3 input (with Normalize), angle in degrees, pivot Vec3 input StaticFreeform StaticFreeformEditor.vue a 4×4 matrix grid with Identity and Invert (stored column-major, displayed row-major) DynamicTranslation DynamicTranslationEditor.vue axis Vec3 input (with Normalize) and a step in mm DynamicRotation DynamicRotationEditor.vue axis Vec3 input (with Normalize), angle in degrees, pivot Vec3 input GeneralTransform GeneralTransformEditor.vue a scale field over two embedded sub-transformer cards NoTransform NoTransformEditor.vue an identity-transform notice; no controls The WPF client offers six of them — NoTransform, StaticTranslation, StaticFreeform, GeneralTransform, DynamicTranslation, DynamicRotation — plus a Not Set entry that leaves the slot holding a null transformer. It has no StaticRotation panel, and selecting NoTransform there simply empties its content area. The web picker offers no null entry of either sort: identity is expressed by choosing NoTransform. Note The GeneralTransform editor is a composition, not a flat form: a scale field, then the StaticRotation and StaticTranslation editors embedded in their own bordered cards, titled Rotation sub-transformer and Translation sub-transformer. It keys the two sub-editors off POST /api/GeneralTransform/IndexRotation and /IndexTranslation, edits the scale itself, and owns no vector widget — every Vec3d field on it comes from the nested editors. The effective transform is T × R × scale × I. Its WPF counterpart Mech/Topo/GeneralTransformPanel.xaml takes the other approach: three Vec3dControls of its own (translation, rotation axis, rotation pivot) plus scale and angle text boxes, embedding no sub-panel. Key Model ITransformer — the interface the slot holds and the dropdown swaps. StaticTranslation, StaticRotation, StaticFreeform, DynamicTranslation, DynamicRotation, GeneralTransform and NoTransform — the seven implementations the web picker lists. Vec3d — the axis, pivot and translation fields the static and dynamic editors bind. Source Code Path See HiNC App Anatomy for git repository links. The switchboard and its editors: wwwroot-src/src/components/topo/TransformerSelectPanel.vue — the picker, the create call and the optional inline editor; props modelKey / label / allowedKinds / onCreate / selectorOnly, events changed / typeChanged / error. wwwroot-src/src/components/topo/transformerEditors.ts — TRANSFORMER_EDITORS, the single kind → editor map, plus isTransformerKind() and humanizeTransformerKind(). wwwroot-src/src/components/topo/StaticTranslationEditor.vue wwwroot-src/src/components/topo/StaticRotationEditor.vue wwwroot-src/src/components/topo/StaticFreeformEditor.vue wwwroot-src/src/components/topo/DynamicTranslationEditor.vue wwwroot-src/src/components/topo/DynamicRotationEditor.vue wwwroot-src/src/components/topo/GeneralTransformEditor.vue wwwroot-src/src/components/topo/NoTransformEditor.vue The Control-Tree glue and the two direct embedders: wwwroot-src/src/components/controlTree/TransformerSlotPanel.vue — the slot's panel: this switchboard in selector-only mode, fed allowedKinds and onCreate from the node context. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — the kind node's panel. wwwroot-src/src/components/controlTree/itemTypes.ts — registers Transformer as a slot type with buildTransformerChildren, and each of the seven kinds against SoleEditorPanel. wwwroot-src/src/pages/MechBuilderPage.vue — embeds the panel for the selected branch. wwwroot-src/src/components/geom/TransformationGeomEditor.vue — embeds it for the inner transformer. The transport and the strings: wwwroot-src/src/api/transformer.ts — the TransformerKind union, the per-kind /api/{Kind}/New create endpoints, and the typed wrappers for every update and Index* call. wwwroot-src/src/i18n/en/topo.ts — every string on these panels, including topo.select.noTransformer. Transformer type names are identity and stay verbatim. The REST controllers, one per kind: Mech/Topo/StaticTranslationController.cs Mech/Topo/StaticRotationController.cs Mech/Topo/StaticFreeformController.cs Mech/Topo/DynamicTranslationController.cs Mech/Topo/DynamicRotationController.cs Mech/Topo/GeneralTransformController.cs — also serves IndexRotation and IndexTranslation. Mech/Topo/NoTransformController.cs — New and Get; there is nothing on a NoTransform to update. See Also Mechanism Builder Page — edits a mechanism’s per-branch transformer through this switchboard Transformation Geometry Control — embeds this picker as its inner transformer, with no kind restriction at all"
+ "summary": "Transformer Select Panel The Transformer Select Panel is the switchboard that picks which ITransformer occupies a transformer-valued slot and edits the one that is there. For the model behind the picker — what each transformer does to a frame — see Handle Transform Matrix by ITransformer. Surface The panel's principal home is a Transformer slot of the General Setup page's Control Tree (/general-setup). Four slots on that tree are Transformer slots: equipment/fixture/geom-to-workpiece — “Geom To Workpiece” equipment/fixture/geom-to-table — “Geom To Table” equipment/workpiece/anchor/geom-to-fixture — “Geom To Fixture” equipment/workpiece/anchor/geom-to-program-zero — “Geom To Program Zero” A fifth shape appears wherever a TransformationGeom is grown as a tree node: its .../inner-transformer child is a Transformer slot too. Two surfaces embed the panel outside any tree — the Mechanism Builder Page (/util/mech-builder), for the selected branch's transformer, and the inner-transformer card of Transformation Geometry Control. Layout Transformer Select Panel Transformer Type Dropdown — one dense, outlined q-select listing the kinds this host allows. Its label is the host's label prop, falling back to Transformer type; the inner-transformer card labels it Inner transformer. Picking a kind commits immediately; there is no Apply button. Separator — drawn only when a kind is active. Active Kind's Editor — the component the kind maps to in TRANSFORMER_EDITORS, bound to the IndexService key the picker resolved for the live transformer. The panel takes a selectorOnly prop that drops everything below the dropdown, which gives it two forms: Form Where it is used What renders Embedded (default) Mechanism Builder page; the inner-transformer card of TransformationGeomEditor.vue dropdown, separator, and the active kind's editor in one column Selector only every Control-Tree Transformer slot, through TransformerSlotPanel.vue the dropdown alone In a Control Tree the picker and the editor sit on two different nodes. buildTransformerChildren() grows at most one child under the slot, typed with the current kind, and that child's panel is SoleEditorPanel.vue, which resolves the kind through the same TRANSFORMER_EDITORS map and binds it to the slot's own key. The builder first probes the slot's key with getIndexType and returns no child at all when that probe fails or names a type outside the seven kinds, so a slot holding nothing is a picker with nothing beneath it. Selecting the slot shows the picker; selecting the child shows the kind's editor. Transformer Type Dropdown The dropdown gets and sets the ITransformer behind the bound key. On mount, and again whenever that key changes, it probes the object's type with getIndexType; picking a different kind creates the replacement through POST /api/{Kind}/New unless the host supplied an onCreate hook, in which case that hook runs instead so the owning domain object is rebound alongside the IndexService entry. Which kinds it offers is the allowedKinds prop, defaulting to all seven. A Control-Tree slot feeds it from the node's ctx.allowedKinds; none of the four General Setup slots narrows it, so all seven appear there. When the probed kind falls outside allowedKinds, both the active and the selected kind reset to empty: the dropdown blanks, and the embedded form prints No transformer attached. in place of an editor. The out-of-list transformer is not rendered. Transformer Kinds The web client offers seven kinds, one editor each. Kind Editor What the editor holds StaticTranslation StaticTranslationEditor.vue one Vec3 input, the constant offset StaticRotation StaticRotationEditor.vue axis Vec3 input (with Normalize), angle in degrees, pivot Vec3 input StaticFreeform StaticFreeformEditor.vue a 4×4 matrix grid with Identity and Invert (stored column-major, displayed row-major) DynamicTranslation DynamicTranslationEditor.vue axis Vec3 input (with Normalize) and a step in mm DynamicRotation DynamicRotationEditor.vue axis Vec3 input (with Normalize), angle in degrees, pivot Vec3 input GeneralTransform GeneralTransformEditor.vue a scale field over two embedded sub-transformer cards NoTransform NoTransformEditor.vue an identity-transform notice; no controls The picker offers no null entry: identity is expressed by choosing NoTransform. Note The GeneralTransform editor is a composition, not a flat form: a scale field, then the StaticRotation and StaticTranslation editors embedded in their own bordered cards, titled Rotation sub-transformer and Translation sub-transformer. It keys the two sub-editors off POST /api/GeneralTransform/IndexRotation and /IndexTranslation, edits the scale itself, and owns no vector widget — every Vec3d field on it comes from the nested editors. The effective transform is T × R × scale × I. Key Model ITransformer — the interface the slot holds and the dropdown swaps. StaticTranslation, StaticRotation, StaticFreeform, DynamicTranslation, DynamicRotation, GeneralTransform and NoTransform — the seven implementations the web picker lists. Vec3d — the axis, pivot and translation fields the static and dynamic editors bind. Source Code Path See HiNC App Anatomy for git repository links. The switchboard and its editors: wwwroot-src/src/components/topo/TransformerSelectPanel.vue — the picker, the create call and the optional inline editor; props modelKey / label / allowedKinds / onCreate / selectorOnly, events changed / typeChanged / error. wwwroot-src/src/components/topo/transformerEditors.ts — TRANSFORMER_EDITORS, the single kind → editor map, plus isTransformerKind() and humanizeTransformerKind(). wwwroot-src/src/components/topo/StaticTranslationEditor.vue wwwroot-src/src/components/topo/StaticRotationEditor.vue wwwroot-src/src/components/topo/StaticFreeformEditor.vue wwwroot-src/src/components/topo/DynamicTranslationEditor.vue wwwroot-src/src/components/topo/DynamicRotationEditor.vue wwwroot-src/src/components/topo/GeneralTransformEditor.vue wwwroot-src/src/components/topo/NoTransformEditor.vue The Control-Tree glue and the two direct embedders: wwwroot-src/src/components/controlTree/TransformerSlotPanel.vue — the slot's panel: this switchboard in selector-only mode, fed allowedKinds and onCreate from the node context. wwwroot-src/src/components/controlTree/SoleEditorPanel.vue — the kind node's panel. wwwroot-src/src/components/controlTree/itemTypes.ts — registers Transformer as a slot type with buildTransformerChildren, and each of the seven kinds against SoleEditorPanel. wwwroot-src/src/pages/MechBuilderPage.vue — embeds the panel for the selected branch. wwwroot-src/src/components/geom/TransformationGeomEditor.vue — embeds it for the inner transformer. The transport and the strings: wwwroot-src/src/api/transformer.ts — the TransformerKind union, the per-kind /api/{Kind}/New create endpoints, and the typed wrappers for every update and Index* call. wwwroot-src/src/i18n/en/topo.ts — every string on these panels, including topo.select.noTransformer. Transformer type names are identity and stay verbatim. The REST controllers, one per kind: Mech/Topo/StaticTranslationController.cs Mech/Topo/StaticRotationController.cs Mech/Topo/StaticFreeformController.cs Mech/Topo/DynamicTranslationController.cs Mech/Topo/DynamicRotationController.cs Mech/Topo/GeneralTransformController.cs — also serves IndexRotation and IndexTranslation. Mech/Topo/NoTransformController.cs — New and Get; there is nothing on a NoTransform to update. See Also Mechanism Builder Page — edits a mechanism’s per-branch transformer through this switchboard Transformation Geometry Control — embeds this picker as its inner transformer, with no kind restriction at all"
},
"anatomy/index.html": {
"href": "anatomy/index.html",
@@ -367,7 +367,7 @@
"anatomy/shell/bottom-message-bar.html": {
"href": "anatomy/shell/bottom-message-bar.html",
"title": "Bottom Message Bar | HiAPI-C# 2025",
- "summary": "Bottom Message Bar The Bottom Message Bar displays application-level notifications at the bottom of the Main Panel. This is the UI Error Notification channel — see Message Management for how it fits into the overall message architecture. Message Handling The Bottom Message Bar is connected to MessageBoardUtil (or ILogger with level-filtered treatment). When a notification is triggered: The Brief Message Text Field content is updated The message is appended to the daily log file at logs/log-{DateTime.Now:yyyy-MM-dd}.txt The second step belongs to the logging path rather than to the bar, and only one client shares it. The WPF brief field is fed by a logger provider, so a message that reaches the field has already gone to the file sink. The web footer is fed by the routine-progress store instead: what lands there is client-side, and it reaches the server's daily log only when the server logged it too — no part of the shell posts a message to the log-append endpoint. Message Types The MessageFlag determines the display behavior: Flag Display Behavior Exception Alert style, shown in Message Bar Warning and above Shown in Message Bar Info and below Logged only, not shown in Message Bar Note When the message is an Exception, the brief message shows Message while the full exception details are logged to file. Platform-Specific Layouts WPF Application The WPF version uses a fixed bottom bar: Message Section Bottom Bar Brief Message Text Field (selectable for copy) Show Log Button Web Application The web version docks a single dense bar along the bottom of the layout — AppFooter.vue, not a stack of toasts: Routine Progress Footer Bar Brief Message Text Field — the latest foreground message behind its severity glyph, reading Ready while there is none, with the full text and caption on hover Recent Messages Button — a history menu over the capped foreground list, with a clear action Session Status Strip — the live execution cursor and latest session message, rendering nothing at all until there is activity Background Progress Zone — one in-flight job's spinner or progress ring and its message, which disappears when the job ends Transient notifications are a second channel beside the bar rather than the bar itself: toasts are Quasar notifications, anchored bottom-right and auto-hiding on a timeout that does not vary with severity. A boot patch mirrors every one of them into the footer's foreground history, which is what keeps a toast reviewable after it fades. Show Log Button The Show Log button is the only entrance to the log screen, and the two clients answer it differently. In the web application it is a router link in the menu bar's right-hand group — not on this bar — and it opens the Log Viewer as a full page inside the shell. See Log Viewer Page for that screen's toolbar, its auto-refresh interval, its copy and download actions and the states of its text area. In the WPF client the button sits at the right end of this bar. It looks for the current day's file under the client's own logs folder and, when it is there, opens it with whatever application the operating system associates with the file type; when it is not, it reports that in a message box instead of opening anything. See Also Main Panel — the window frame this bar is docked in Session Message Panel — the session-scoped message surface, as distinct from this app-level one"
+ "summary": "Bottom Message Bar The Bottom Message Bar displays application-level notifications at the bottom of the Main Panel. This is the UI Error Notification channel — see Message Management for how it fits into the overall message architecture. Message Handling The Bottom Message Bar is connected to MessageBoardUtil (or ILogger with level-filtered treatment). When a notification is triggered: The Brief Message Text Field content is updated The message is appended to the daily log file at logs/log-{DateTime.Now:yyyy-MM-dd}.txt The second step belongs to the logging path rather than to the bar, and the footer does not share it. The footer is fed by the routine-progress store: what lands there is client-side, and it reaches the server's daily log only when the server logged it too — no part of the shell posts a message to the log-append endpoint. Message Types The MessageFlag determines the display behavior: Flag Display Behavior Exception Alert style, shown in Message Bar Warning and above Shown in Message Bar Info and below Logged only, not shown in Message Bar Note When the message is an Exception, the brief message shows Message while the full exception details are logged to file. Platform-Specific Layouts Web Application The web version docks a single dense bar along the bottom of the layout — AppFooter.vue, not a stack of toasts: Routine Progress Footer Bar Brief Message Text Field — the latest foreground message behind its severity glyph, reading Ready while there is none, with the full text and caption on hover Recent Messages Button — a history menu over the capped foreground list, with a clear action Session Status Strip — the live execution cursor and latest session message, rendering nothing at all until there is activity Background Progress Zone — one in-flight job's spinner or progress ring and its message, which disappears when the job ends Transient notifications are a second channel beside the bar rather than the bar itself: toasts are Quasar notifications, anchored bottom-right and auto-hiding on a timeout that does not vary with severity. A boot patch mirrors every one of them into the footer's foreground history, which is what keeps a toast reviewable after it fades. Show Log Button The Show Log button is the only entrance to the log screen. It is a router link in the menu bar's right-hand group — not on this bar — and it opens the Log Viewer as a full page inside the shell. See Log Viewer Page for that screen's toolbar, its auto-refresh interval, its copy and download actions and the states of its text area. See Also Main Panel — the window frame this bar is docked in Session Message Panel — the session-scoped message surface, as distinct from this app-level one"
},
"anatomy/shell/index.html": {
"href": "anatomy/shell/index.html",
@@ -377,37 +377,37 @@
"anatomy/shell/language-selection-submenu.html": {
"href": "anatomy/shell/language-selection-submenu.html",
"title": "Language Selection SubMenu | HiAPI-C# 2025",
- "summary": "Language Selection SubMenu The submenu locates on the Preference Menu Dropdown. It is the only place either client offers for changing the interface language. What that choice sets in motion in the web client — the message bundles, the locale applied before the first frame, the single switch function and everything that re-renders behind it — is Internationalization; this page covers the gesture. The web submenu's model is the application-state store rather than a service handed down by the parent component: it reads the current code and the available-code list from that store and calls the store's language action. Both values are hydrated by the store's server-preferences load, which the shell layout runs on mount — a separate path from the one that decides which locale the first painted frame uses. The WPF client resolves its language manager during start-up, and the manager reads the persisted code out of the user configuration as it is constructed. Layout The two clients draw the submenu differently. Language Selection SubMenu — WPF application English RadioButton Simplified Chinese RadioButton Traditional Chinese RadioButton Three fixed rows in one radio group, ticked at start-up to match the current language. Language Selection SubMenu — web application Language Row — one plain row per code in the store's available-code list, so the rows are whatever the server reports rather than a fixed set of three. Each carries the language's own name from a hard-coded label map, falling back to the raw code for anything the map does not name, with that code beneath it as a caption; the row matching the current language is drawn in the active state. No row carries a radio button or a checkbox. The parent entry captions the current language, so it reads without opening the submenu. Choosing a row in the web client closes the popup and makes one call, the store's language action. The store writes the new code optimistically, POSTs it, adopts the current and available lists the server echoes back, and only then switches the live catalogue — so the interface text flips after the server has accepted the value, and the confirmation toast already reads in the language just picked. A rejected write rolls the store back and changes no interface text at all. In the WPF client picking a radio swaps the merged string dictionary in place and saves the code to the user configuration, and the labels follow without a restart. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/AppMenuBar.vue — the nested Preference → Language ▸ popup: the row loop over the available codes, the hard-coded self-name map, the active-row marker, and the handler whose single call is the store's language action. wwwroot-src/src/stores/appState.ts — the current-code and available-code state, the language action with its optimistic write, its POST-then-apply order and its rollback, and the server-preferences load the shell layout runs on mount. wwwroot-src/src/api/preference.ts — the typed wrappers over the two language endpoints. Environments/PreferenceController.cs — GET /api/preference/language and its POST twin, both answering success, current and available; languageCode is the name of a field in the POST request body only. An unlisted code is rejected with 400, and an accepted one is written to the persisted UserConfig.LanguageCode and saved. See Also Translation Remarks — the terminology every translated label is held to Preference Menu Dropdown — the dropdown this sub-menu hangs from Internationalization — the bundles and the switch point this menu drives"
+ "summary": "Language Selection SubMenu The submenu locates on the Preference Menu Dropdown. It is the only place the application offers for changing the interface language. What that choice sets in motion — the message bundles, the locale applied before the first frame, the single switch function and everything that re-renders behind it — is Internationalization; this page covers the gesture. The submenu's model is the application-state store rather than a service handed down by the parent component: it reads the current code and the available-code list from that store and calls the store's language action. Both values are hydrated by the store's server-preferences load, which the shell layout runs on mount — a separate path from the one that decides which locale the first painted frame uses. Layout Language Selection SubMenu Language Row — one plain row per code in the store's available-code list, so the rows are whatever the server reports rather than a fixed set of three. Each carries the language's own name from a hard-coded label map, falling back to the raw code for anything the map does not name, with that code beneath it as a caption; the row matching the current language is drawn in the active state. No row carries a radio button or a checkbox. The parent entry captions the current language, so it reads without opening the submenu. Choosing a row closes the popup and makes one call, the store's language action. The store writes the new code optimistically, POSTs it, adopts the current and available lists the server echoes back, and only then switches the live catalogue — so the interface text flips after the server has accepted the value, and the confirmation toast already reads in the language just picked. A rejected write rolls the store back and changes no interface text at all. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/AppMenuBar.vue — the nested Preference → Language ▸ popup: the row loop over the available codes, the hard-coded self-name map, the active-row marker, and the handler whose single call is the store's language action. wwwroot-src/src/stores/appState.ts — the current-code and available-code state, the language action with its optimistic write, its POST-then-apply order and its rollback, and the server-preferences load the shell layout runs on mount. wwwroot-src/src/api/preference.ts — the typed wrappers over the two language endpoints. Environments/PreferenceController.cs — GET /api/preference/language and its POST twin, both answering success, current and available; languageCode is the name of a field in the POST request body only. An unlisted code is rejected with 400, and an accepted one is written to the persisted UserConfig.LanguageCode and saved. See Also Translation Remarks — the terminology every translated label is held to Preference Menu Dropdown — the dropdown this sub-menu hangs from Internationalization — the bundles and the switch point this menu drives"
},
"anatomy/shell/main-panel.html": {
"href": "anatomy/shell/main-panel.html",
"title": "Main Panel | HiAPI-C# 2025",
- "summary": "Main Panel The Main Panel is the primary window of the HiNC application, providing navigation and access to all major features. Key Models Project Service WPF Single-User Desktop Application: Uses self-hosted LocalProjectService Web Service Application: injects ProxyProjectService, the IProjectService implementation that reaches the session's project across the connection User Service: UserService Layout Structure Top Navigation Menu Brand logo, and in the web application the HiAPI version as an outlined badge beside it. The badge carries the HiNc assembly version reported by the anonymous authentication-status probe the router runs before the first route resolves, so it needs neither a loaded project nor a signed-in session; it is omitted only while that probe has reported no version. Project Menu Dropdown Project Path Text Field — readonly; reads “No Project Loaded” until a project is loaded New MenuItem Load MenuItem ReLoad MenuItem (web application only) Save MenuItem Save As MenuItem Close Project MenuItem (web application only, below a separator) In the web application ReLoad, Save, Save As and Close Project are disabled until a project is loaded, and New, Load and Save As open the shared file-picker dialog with a .hincproj filter. The picker is allowed the Admin and Project roots and is denied the Resource root, which holds read-only templates the project endpoints cannot save through; it asks for the Admin root by name, so that is where it opens, and it seeds its path box with the directory holding the loaded project, or with the admin root itself when there is none. The Project root is one of the two only while a project is loaded: the roots endpoint lists a root only when its directory resolves, and the project directory resolves to nothing until a project is open, so with no project the picker offers Admin alone. The WPF client's dropdown stops at Save As. Environment Menu Dropdown (WPF application only — the web application has no such dropdown; see below) Machine Tool MenuItem Open Machine Tool Page Sole window in WPF app. The page manages MachiningEquipment.MachiningChain. Controller MenuItem Open Legacy Controller Page Tool House MenuItem Fixture MenuItem Open Fixture Page Workpiece MenuItem Open Workpiece Page Mission MenuItem Open Mission Page In the web application the Mission editor is a branch of the Execution page's Control Tree; /mission redirects there. Page Menu Dropdown (web application only) — the three workflow pages in setup order (fill the tool house, set up the equipment, run), then the utilities. Tool House MenuItem Open Tool House Page General Setup MenuItem The equipment Control Tree — Machine Tool, Spindle Capability, Background, Coolant, Fixture, Workpiece, Controller, in that order — plus the shared equipment canvas. Two further controller branches, CSV Controller and CL Controller, are hidden by default and are switched on from the Preference dropdown. Execution MenuItem Open Execution Page File Explorer MenuItem (below a separator). See Util Pages. Mechanism Builder MenuItem Open Mechanism Builder Page Legacy-Controller MenuItem (below a separator) Open Legacy Controller Page The dropdown is not every route the application has. The Machine Tool page stays reachable by URL for its chain-only canvas preview, the Log Viewer is reached by the Show Log button, and the Fixture, Workpiece, Spindle Capability, Mission and Background / Coolant paths resolve as redirects into the two tree pages. Preference Menu Dropdown Debug Menu Dropdown (WPF application only) — Transformers and Geometry Management, visible only while the client runs in debug mode Help MenuItem HiAPI Version label A label to show the HiNc library version. The web application shows this as a version badge next to the brand logo, with no Help dropdown. Show Log Button — a button on both clients, not a menu item. In the web application it sits on the menu bar's right side and routes to the Log Viewer page; in the WPF client it sits at the right end of the bottom message bar. The Log Viewer presents the server's application log for the current day, with a manual refresh, a selectable auto-refresh interval, copy to the clipboard, and download of the day's log file for offline analysis. Central Page Panel — one router outlet wrapped in a keep-alive cache keyed on a project epoch: an integer the layout owns, raised by two watchers and read by nothing else. The first watches the project store's path, which New, Load and Save As each assign from the response they get back, which Close Project clears, and which a store-level watcher on the shared execution-status hub adopts from every broadcast — so a project change made in another tab, from another browser, or outside the browser altogether bumps the epoch here as well, and so does the boot status fetch, once, on a service that already has a project open. The second watches a counter the store raises in exactly one place, ReLoad, which is what makes a re-read of the same path remount at all: the backend raises its project-changed event with the path it already had, so the broadcast cannot be told apart from a no-op. Assigning the path it already holds moves neither watcher, so Save on the current path does not remount and neither does a Save As written back onto the path already open. A bump discards every cached page and rebuilds it, so each page initializes on its own mount hook rather than watching for project changes itself. Bottom footer — the routine-progress bar: the latest foreground message with a recent-messages history menu on the left, the live session status in the middle, and in-flight background job progress on the right. See Message Section on Main Panel. In the WPF application the run tool bars belong to the menu shell and appear only while the central panel is the player. The web application does not carry them on the menu bar at all: the transport controls ride the Execution Page‘s primary panel header and the view controls ride its canvas panel header. What the menu bar keeps instead is the page's set of column quick-toggles, the connection badge, the active page's title, the Show Log button and — when authentication is on — the logout button. The toggles follow whichever tree page is current: four on the Execution page (control dock, canvas, strip charts, step info) and three on General Setup (control dock, content, canvas); the Tool House page lays itself out with plain splitters and gets none. The connection badge is Execution-only — the other pages’ canvases carry their own in-panel badges. Project Menu Behavior The Project Path Text Field displays the current project path when a project is loaded. It is implemented as a pure text field (not a button) that allows users to select and copy the path. The Project Menu manages MachiningProject with the following operations: Operation Description Example New Creates a new project See DemoBuildGeomOnlyMachiningProject Load Opens an existing project See DemoUseMachiningProject ReLoad Re-reads the current project from disk, same path — Save Saves the current project See DemoBuildGeomOnlyMachiningProject Save As Saves the project to a new location See DemoBuildGeomOnlyMachiningProject Close Closes the current project and clears the shell — In the web application every Project action reports through two channels: a background progress line on the footer while it runs, then a toast when it lands — positive on success, a “busy” warning when a concurrent action has already claimed the service (HTTP 409), negative otherwise. In the WPF client the operations log through ILogger and, after a load, set the player panel's DispEngine to the isometric view. What a project change drives in the web shell is the layout's keep-alive epoch, not a canvas view: every cached page is discarded and rebuilt. Note The web implementation reports through the toast helper and the routine-progress footer store; the WPF client reports through ILogger. Neither routes project messages through MessageUtil. Project I/O is asynchronous on both clients, so the shell stays responsive during file I/O. Platform-Specific Differences WPF Application Only a single instance of each sub-window (Mission, Workpiece, Fixture) can exist at a time There is no menu entry for the run cockpit: the Main Panel itself is the player Web Application The Execution Page is the landing route — / redirects to /execution The page URL and panel state are synchronized (bi-directional navigation) There is no Environment dropdown. Machine Tool, Fixture, Workpiece, Controller, Background / Coolant and Spindle Capability are branches of the General Setup page's Control Tree, and Tool House and Execution are pages of their own; the remaining paths resolve as redirects into those pages. The menu bar is therefore Project ▾ | Page ▾ | Preference ▾, and the Controller page is reached from Page ▾ as Legacy-Controller. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): Environments/PreferenceController.cs — the endpoints behind the Preference dropdown. Environments/ProjectController.cs — the project endpoints: status, new, load, save, reload, saveas and close, plus the log endpoints. Environments/UserService.cs — the shell's user model. wwwroot-src/src/components/AppMenuBar.vue — the whole navigation menu. wwwroot-src/src/components/AppFooter.vue — the routine-progress footer the layout docks. wwwroot-src/src/layouts/MainLayout.vue — the shell that hosts the menu bar, the keep-alive page panel and the footer. wwwroot-src/src/router/routes.ts — the routes the Page dropdown targets and the redirect-only legacy paths. wwwroot-src/src/i18n/en/menu.ts — the menu bar's English labels. wwwroot-src/src/stores/project.ts — the six Project actions and the busy error a 409 becomes. wwwroot-src/src/stores/routineProgress.ts — the foreground-message and background-progress store the Project handlers share with the footer. wwwroot-src/src/composables/useToast.ts — the toasts every Project action ends in. wwwroot-src/src/composables/useViewPrefs.ts — the device-local per-page column visibility and the CSV / CL controller switches. wwwroot-src/src/composables/useConnectionsHealth.ts — the aggregate state behind the Execution connection badge. wwwroot-src/src/components/widgets/FileExplorerDialog.vue — the shared picker New, Load and Save As open. wwwroot-src/src/components/widgets/ColumnToggleIcon.vue — the glyph each column quick-toggle draws. wwwroot-src/src/pages/LogViewerPage.vue — the Log Viewer the Show Log button opens. See Also Execution Page — the landing page the shell routes to Preference Menu Dropdown — the third menu on the bar Bottom Message Bar — the notification bar the shell docks along the bottom General Setup Page — the equipment page the Page menu reaches Tree Ids and Routes — the route table this bar navigates, and how a ?tree= id lands on the page that owns it Session State — the keep-alive this shell wraps the router view in, and what a project change destroys Login and Authentication — the gate in front of this shell, and the sign-out entry on this bar Log Viewer Page — the screen the Show Log button opens"
+ "summary": "Main Panel The Main Panel is the primary window of the HiNC application, providing navigation and access to all major features. Key Models Project Service: injects ProxyProjectService, the IProjectService implementation that reaches the session's project across the connection User Service: UserService Layout Structure Top Navigation Menu Brand logo, and the HiAPI version as an outlined badge beside it. The badge carries the HiNc assembly version reported by the anonymous authentication-status probe the router runs before the first route resolves, so it needs neither a loaded project nor a signed-in session; it is omitted only while that probe has reported no version. Project Menu Dropdown Project Path Text Field — readonly; reads “No Project Loaded” until a project is loaded New MenuItem Load MenuItem ReLoad MenuItem Save MenuItem Save As MenuItem Close Project MenuItem (below a separator) ReLoad, Save, Save As and Close Project are disabled until a project is loaded, and New, Load and Save As open the shared file-picker dialog with a .hincproj filter. The picker is allowed the Admin and Project roots and is denied the Resource root, which holds read-only templates the project endpoints cannot save through; it asks for the Admin root by name, so that is where it opens, and it seeds its path box with the directory holding the loaded project, or with the admin root itself when there is none. The Project root is one of the two only while a project is loaded: the roots endpoint lists a root only when its directory resolves, and the project directory resolves to nothing until a project is open, so with no project the picker offers Admin alone. Page Menu Dropdown — the three workflow pages in setup order (fill the tool house, set up the equipment, run), then the utilities. Tool House MenuItem Open Tool House Page General Setup MenuItem The equipment Control Tree — Machine Tool, Spindle Capability, Background, Coolant, Fixture, Workpiece, Controller, in that order — plus the shared equipment canvas. Two further controller branches, CSV Controller and CL Controller, are hidden by default and are switched on from the Preference dropdown. Execution MenuItem Open Execution Page File Explorer MenuItem (below a separator). See Util Pages. Mechanism Builder MenuItem Open Mechanism Builder Page Legacy-Controller MenuItem (below a separator) Open Legacy Controller Page The dropdown is not every route the application has. The Machine Tool page stays reachable by URL for its chain-only canvas preview, the Log Viewer is reached by the Show Log button, and the Fixture, Workpiece, Spindle Capability, Mission and Background / Coolant paths resolve as redirects into the two tree pages. Preference Menu Dropdown Show Log Button — a button, not a menu item. It sits on the menu bar's right side and routes to the Log Viewer page. The Log Viewer presents the server's application log for the current day, with a manual refresh, a selectable auto-refresh interval, copy to the clipboard, and download of the day's log file for offline analysis. Central Page Panel — one router outlet wrapped in a keep-alive cache keyed on a project epoch: an integer the layout owns, raised by two watchers and read by nothing else. The first watches the project store's path, which New, Load and Save As each assign from the response they get back, which Close Project clears, and which a store-level watcher on the shared execution-status hub adopts from every broadcast — so a project change made in another tab, from another browser, or outside the browser altogether bumps the epoch here as well, and so does the boot status fetch, once, on a service that already has a project open. The second watches a counter the store raises in exactly one place, ReLoad, which is what makes a re-read of the same path remount at all: the backend raises its project-changed event with the path it already had, so the broadcast cannot be told apart from a no-op. Assigning the path it already holds moves neither watcher, so Save on the current path does not remount and neither does a Save As written back onto the path already open. A bump discards every cached page and rebuilds it, so each page initializes on its own mount hook rather than watching for project changes itself. Bottom footer — the routine-progress bar: the latest foreground message with a recent-messages history menu on the left, the live session status in the middle, and in-flight background job progress on the right. See Message Section on Main Panel. The menu bar carries no run tool bars at all: the transport controls ride the Execution Page‘s primary panel header and the view controls ride its canvas panel header. What the menu bar keeps instead is the page's set of column quick-toggles, the connection badge, the active page's title, the Show Log button and — when authentication is on — the logout button. The toggles follow whichever tree page is current: four on the Execution page (control dock, canvas, strip charts, step info) and three on General Setup (control dock, content, canvas); the Tool House page lays itself out with plain splitters and gets none. The connection badge is Execution-only — the other pages’ canvases carry their own in-panel badges. Project Menu Behavior The Project Path Text Field displays the current project path when a project is loaded. It is implemented as a pure text field (not a button) that allows users to select and copy the path. The Project Menu manages MachiningProject with the following operations: Operation Description Example New Creates a new project See DemoBuildGeomOnlyMachiningProject Load Opens an existing project See DemoUseMachiningProject ReLoad Re-reads the current project from disk, same path — Save Saves the current project See DemoBuildGeomOnlyMachiningProject Save As Saves the project to a new location See DemoBuildGeomOnlyMachiningProject Close Closes the current project and clears the shell — Every Project action reports through two channels: a background progress line on the footer while it runs, then a toast when it lands — positive on success, a “busy” warning when a concurrent action has already claimed the service (HTTP 409), negative otherwise. What a project change drives in the shell is the layout's keep-alive epoch, not a canvas view: every cached page is discarded and rebuilt. Note Project actions report through the toast helper and the routine-progress footer store, and none of them routes a message through MessageUtil. Project I/O is asynchronous, so the shell stays responsive during file I/O. Platform-Specific Differences Web Application The Execution Page is the landing route — / redirects to /execution The page URL and panel state are synchronized (bi-directional navigation) There is no Environment dropdown. Machine Tool, Fixture, Workpiece, Controller, Background / Coolant and Spindle Capability are branches of the General Setup page's Control Tree, and Tool House and Execution are pages of their own; the remaining paths resolve as redirects into those pages. The menu bar is therefore Project ▾ | Page ▾ | Preference ▾, and the Controller page is reached from Page ▾ as Legacy-Controller. Source Code Path See HiNC App Anatomy for git repository links. Web Application HiNC-2025-webservice (Quasar CLI SPA): Environments/PreferenceController.cs — the endpoints behind the Preference dropdown. Environments/ProjectController.cs — the project endpoints: status, new, load, save, reload, saveas and close, plus the log endpoints. Environments/UserService.cs — the shell's user model. wwwroot-src/src/components/AppMenuBar.vue — the whole navigation menu. wwwroot-src/src/components/AppFooter.vue — the routine-progress footer the layout docks. wwwroot-src/src/layouts/MainLayout.vue — the shell that hosts the menu bar, the keep-alive page panel and the footer. wwwroot-src/src/router/routes.ts — the routes the Page dropdown targets and the redirect-only legacy paths. wwwroot-src/src/i18n/en/menu.ts — the menu bar's English labels. wwwroot-src/src/stores/project.ts — the six Project actions and the busy error a 409 becomes. wwwroot-src/src/stores/routineProgress.ts — the foreground-message and background-progress store the Project handlers share with the footer. wwwroot-src/src/composables/useToast.ts — the toasts every Project action ends in. wwwroot-src/src/composables/useViewPrefs.ts — the device-local per-page column visibility and the CSV / CL controller switches. wwwroot-src/src/composables/useConnectionsHealth.ts — the aggregate state behind the Execution connection badge. wwwroot-src/src/components/widgets/FileExplorerDialog.vue — the shared picker New, Load and Save As open. wwwroot-src/src/components/widgets/ColumnToggleIcon.vue — the glyph each column quick-toggle draws. wwwroot-src/src/pages/LogViewerPage.vue — the Log Viewer the Show Log button opens. See Also Execution Page — the landing page the shell routes to Preference Menu Dropdown — the third menu on the bar Bottom Message Bar — the notification bar the shell docks along the bottom General Setup Page — the equipment page the Page menu reaches Tree Ids and Routes — the route table this bar navigates, and how a ?tree= id lands on the page that owns it Session State — the keep-alive this shell wraps the router view in, and what a project change destroys Login and Authentication — the gate in front of this shell, and the sign-out entry on this bar Log Viewer Page — the screen the Show Log button opens"
},
"anatomy/shell/preference-menu.html": {
"href": "anatomy/shell/preference-menu.html",
"title": "Preference Menu Dropdown | HiAPI-C# 2025",
- "summary": "Preference Menu Dropdown The Preference dropdown holds the application's display settings, and it is on the Main Panel. The server-backed ones are service-wide rather than per-account: one UserService singleton holds one UserConfig, saved to a single UserConfig.xml resolved against the process working directory, so every browser signed in to that service reads and writes the same values. The sign-in cookie carries a user-name claim that nothing outside the authentication endpoints reads, and no preference endpoint is keyed on an account. In the WPF application the menu binds UserService, whose UserConfig holds the persisted values. In the web application the dropdown has two models: Language and Show Physics Options bind the appState store, hydrated from and written back through /api/preference/*, where the server keeps them on UserConfig; the CSV / CL Controller checkboxes bind the device-local useViewPrefs singleton, persisted in the browser's localStorage and never sent to the server. Layout Preference Menu Dropdown Step Present Preference Button WPF application: the first entry of the menu, opening the Step Present window. Web application: the editor belongs to the Execution page's Step Info column, where a small icon button in the Step Properties panel header opens it as a modal next to the list it configures. Graphic-Cache Dropdown WPF application: a nested menu of cache fields inside the dropdown. Web application: an entry of the Execution page's extended tool bar, under Meshed Geom ▾, which gathers the workpiece rendering-cache settings. Its write is the one preference write that does not persist. POST /api/preference/graphic-cache clamps the requested size between the stored limits, assigns the three fields on the live UserConfig and returns, without calling UserService.SaveUserConfig(). The new value is service-wide and takes effect at once, but it reaches the file only when some later preference save writes the config out. Language Selection SubMenu The persisted value is UserConfig.LanguageCode; the web application reaches it through GET/POST /api/preference/language, whose response also names the language codes the server supports. In the web application the parent row captions the current language and the sub-menu marks the active code. A successful switch flips the interface text at once, so the confirmation toast already reads in the just-picked language. CSV Controller CheckBox Web application only. The model is useViewPrefs().showCsvController — device-local, stored in the browser's localStorage, not in UserConfig. It is off by default. Checking it adds the CSV Controller node to the General Setup page's Control Tree; unchecking removes it, moving the selection away first when that node is the selected one. The caption under the box says whether the loaded project plays CSV — This project plays CSV, or Not used by this project — read from the referenced flag of GET /api/mech/csv-runner. Opening the dropdown fetches both runner snapshots in parallel, but the fetch is guarded on a loaded project: with none, neither request is made and both captions are cleared to blank. A snapshot that fails to arrive leaves its caption blank as well, so a blank caption states nothing about the project. The guard reaches the captions only — neither checkbox is disabled by it. CL Controller CheckBox The same, for useViewPrefs().showClController, the CL Controller Control Tree node and GET /api/mech/cl-runner. Show Physics Options CheckBox The model is UserConfig.ShowPhysicsOptions, reached in the web application through GET/POST /api/preference/show-physics-options. The checkbox is disabled and unchecked if UserService.IsPhysicsLicensed is false: the GET returns the flag ANDed with the licence and the POST forces false without it. Show Log Button See Message Section. It is not a Preference-dropdown entry on either platform: the WPF application puts it on the bottom message bar, and the web application puts it on the menu bar's right side as an always-visible button that opens the Log Viewer page. So the web application's Preference dropdown carries the Language submenu, the CSV Controller and CL Controller visibility checkboxes, and the Show Physics Options checkbox. A server write that fails raises a negative toast and rolls the item back in appState, so the dropdown never shows a language or a physics flag the server did not take. Source Code Path See HiNC App Anatomy for git repository links. wwwroot-src/src/components/AppMenuBar.vue — the Preference ▾ dropdown itself and the menu bar's Show Log button. wwwroot-src/src/stores/appState.ts — the model of the two server-backed items, with the boot-time hydration and the write-back actions. wwwroot-src/src/composables/useViewPrefs.ts — the device-local localStorage singleton behind the two controller checkboxes. wwwroot-src/src/api/preference.ts — typed wrapper over /api/preference/language and /api/preference/show-physics-options. wwwroot-src/src/api/csvRunner.ts, wwwroot-src/src/api/clRunner.ts — the referenced flag each controller caption reports. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — builds or omits the two controller nodes and rebuilds the tree when either checkbox flips. wwwroot-src/src/i18n/en/menu.ts — the dropdown's labels and captions. wwwroot-src/src/pages/LogViewerPage.vue — the page the Show Log button routes to. Environments/PreferenceController.cs — the endpoints. The step-present, show-physics-options, language and execution-layout writes persist through UserService.SaveUserConfig(); the graphic-cache write is the exception, and returns without one. Environments/UserConfig.cs — the persisted LanguageCode and ShowPhysicsOptions properties. Environments/UserService.cs — owns the single UserConfig the service holds, writes it to UserConfigPath, and answers the physics licence check. Program.cs — the one UserService registration behind every server-backed item here, and the configuration path it resolves against the process working directory. See Also Main Panel — the menu bar this dropdown sits on Language Selection SubMenu — the only sub-menu this dropdown nests Graphic-Cache SubMenu — one of the two entries the web client hosts elsewhere Step Present Preference Page — the other entry the web client hosts elsewhere Log Viewer Page — the log screen this menu's namesake route serves Hidden Controller Branches — the two equipment nodes the CSV and CL entries reveal, and what a link to one does while its box is off"
+ "summary": "Preference Menu Dropdown The Preference dropdown holds the application's display settings, and it is on the Main Panel. The server-backed ones are service-wide rather than per-account: one UserService singleton holds one UserConfig, saved to a single UserConfig.xml resolved against the process working directory, so every browser signed in to that service reads and writes the same values. The sign-in cookie carries a user-name claim that nothing outside the authentication endpoints reads, and no preference endpoint is keyed on an account. The dropdown has two models: Language and Show Physics Options bind the appState store, hydrated from and written back through /api/preference/*, where the server keeps them on UserConfig; the CSV / CL Controller checkboxes bind the device-local useViewPrefs singleton, persisted in the browser's localStorage and never sent to the server. Layout Preference Menu Dropdown Step Present Preference Button Web application: the editor belongs to the Execution page's Step Info column, where a small icon button in the Step Properties panel header opens it as a modal next to the list it configures. Graphic-Cache Dropdown Web application: an entry of the Execution page's extended tool bar, under Meshed Geom ▾, which gathers the workpiece rendering-cache settings. Its write is the one preference write that does not persist. POST /api/preference/graphic-cache clamps the requested size between the stored limits, assigns the three fields on the live UserConfig and returns, without calling UserService.SaveUserConfig(). The new value is service-wide and takes effect at once, but it reaches the file only when some later preference save writes the config out. Language Selection SubMenu The persisted value is UserConfig.LanguageCode; the web application reaches it through GET/POST /api/preference/language, whose response also names the language codes the server supports. In the web application the parent row captions the current language and the sub-menu marks the active code. A successful switch flips the interface text at once, so the confirmation toast already reads in the just-picked language. CSV Controller CheckBox Web application only. The model is useViewPrefs().showCsvController — device-local, stored in the browser's localStorage, not in UserConfig. It is off by default. Checking it adds the CSV Controller node to the General Setup page's Control Tree; unchecking removes it, moving the selection away first when that node is the selected one. The caption under the box says whether the loaded project plays CSV — This project plays CSV, or Not used by this project — read from the referenced flag of GET /api/mech/csv-runner. Opening the dropdown fetches both runner snapshots in parallel, but the fetch is guarded on a loaded project: with none, neither request is made and both captions are cleared to blank. A snapshot that fails to arrive leaves its caption blank as well, so a blank caption states nothing about the project. The guard reaches the captions only — neither checkbox is disabled by it. CL Controller CheckBox The same, for useViewPrefs().showClController, the CL Controller Control Tree node and GET /api/mech/cl-runner. Show Physics Options CheckBox The model is UserConfig.ShowPhysicsOptions, reached in the web application through GET/POST /api/preference/show-physics-options. The checkbox is disabled and unchecked if UserService.IsPhysicsLicensed is false: the GET returns the flag ANDed with the licence and the POST forces false without it. Show Log Button See Message Section. It is not a Preference-dropdown entry: it sits on the menu bar's right side as an always-visible button that opens the Log Viewer page. So the web application's Preference dropdown carries the Language submenu, the CSV Controller and CL Controller visibility checkboxes, and the Show Physics Options checkbox. A server write that fails raises a negative toast and rolls the item back in appState, so the dropdown never shows a language or a physics flag the server did not take. Source Code Path See HiNC App Anatomy for git repository links. wwwroot-src/src/components/AppMenuBar.vue — the Preference ▾ dropdown itself and the menu bar's Show Log button. wwwroot-src/src/stores/appState.ts — the model of the two server-backed items, with the boot-time hydration and the write-back actions. wwwroot-src/src/composables/useViewPrefs.ts — the device-local localStorage singleton behind the two controller checkboxes. wwwroot-src/src/api/preference.ts — typed wrapper over /api/preference/language and /api/preference/show-physics-options. wwwroot-src/src/api/csvRunner.ts, wwwroot-src/src/api/clRunner.ts — the referenced flag each controller caption reports. wwwroot-src/src/components/controlTree/useControlTreeHost.ts — builds or omits the two controller nodes and rebuilds the tree when either checkbox flips. wwwroot-src/src/i18n/en/menu.ts — the dropdown's labels and captions. wwwroot-src/src/pages/LogViewerPage.vue — the page the Show Log button routes to. Environments/PreferenceController.cs — the endpoints. The step-present, show-physics-options, language and execution-layout writes persist through UserService.SaveUserConfig(); the graphic-cache write is the exception, and returns without one. Environments/UserConfig.cs — the persisted LanguageCode and ShowPhysicsOptions properties. Environments/UserService.cs — owns the single UserConfig the service holds, writes it to UserConfigPath, and answers the physics licence check. Program.cs — the one UserService registration behind every server-backed item here, and the configuration path it resolves against the process working directory. See Also Main Panel — the menu bar this dropdown sits on Language Selection SubMenu — the only sub-menu this dropdown nests Graphic-Cache SubMenu — one of the two entries the web client hosts elsewhere Step Present Preference Page — the other entry the web client hosts elsewhere Log Viewer Page — the log screen this menu's namesake route serves Hidden Controller Branches — the two equipment nodes the CSV and CL entries reveal, and what a link to one does while its box is off"
},
"anatomy/shell/session-message-panel.html": {
"href": "anatomy/shell/session-message-panel.html",
"title": "Session Message Panel | HiAPI-C# 2025",
- "summary": "Session Message Panel Session messages are partitioned by kind into four sinks on LocalProjectService (obtained via dependency injection): ShellProgress — session-level routine / lifecycle messages (ShellProgress). Session-scoped: the property is null outside BeginSession/EndSession. NcDiagnosticProgress — play-time NC-pipeline diagnostics (NcDiagnosticProgress), anchored to the NC source block that raised them wherever the diagnostic has one. StepDiagnosticProgress — diagnostics anchored to a motion step (StepDiagnosticProgress). NcManipulationDiagnosticProgress — NC-manipulation diagnostics: a second NcDiagnosticProgress, written by ConvertClToNcFiles and OptimizeNcFiles, held apart from the play-time sink so writeback findings never mix into the play pipeline's. The panel surfaces each sink in its own tab, so one tab holds one message kind. ResetRuntime — which a project change runs — empties the first three, so each of them holds the current project only; the manipulation sink is outside that sweep, cleared only at the start of the conversion or optimization run that fills it, and its rows therefore survive a project change. Layout Tab Bar (each tab carries a floating count badge, drawn only while its sink holds messages) Shell Tab NC Diagnostics Tab Step Diagnostics Tab NC Manipulation Tab Per-Tab Content Filter Toolbar Severity Filter Dropdown Category Filter Dropdown Message Text Filter Input Reset Button (this tab's three filters, nothing else) Export Button Matched / Total Badge (also the tab's hub connection indicator) Message Table Message Table (per tab) Each tab renders its sink's message list — Messages, Messages, or Diagnostics for the two NC-diagnostic sinks — as rows of: Severity (colour-coded via GetSeverity()) Anchor — the kind-specific position: none for shell messages, the NC sentence ordinal (Sn ) for both the play-time and the manipulation NC diagnostics, and the motion step with its sentence ordinal (S · Sn ) for step diagnostics; an NC diagnostic raised at pipeline level rather than at a source block carries none Message — GetCategory(), GetId() and GetNotification() Only take the last filtered elements (e.g. 500–1000) for user experience. Find the usage example in the code: internal static void DemoUseSessionMessageHost(LocalProjectService localProjectService) { // Session messages are partitioned by kind into three sinks on LocalProjectService: // - ShellProgress: session-level routine / lifecycle messages // (session-scoped: null outside BeginSession/EndSession). // - NcDiagnosticProgress: NC-pipeline diagnostics, anchored to the NC source sentence. // - StepDiagnosticProgress: diagnostics anchored to a motion step. ShellProgress shellProgress = localProjectService.ShellProgress; List shellMessages = shellProgress == null ? new List() : shellProgress.Messages.ToList(); foreach (IMessage message in shellMessages) Console.WriteLine( $\"Shell [{message.GetSeverity()}] {message.GetId()}: {message.GetNotification()}\"); foreach (NcDiagnostic diagnostic in localProjectService.NcDiagnosticProgress.Diagnostics.ToList()) { var ncLine = diagnostic.SentenceCarrier?.GetSentence()?.FirstIndexedFileLine; Console.WriteLine( $\"NC [{diagnostic.GetSeverity()}] {diagnostic.GetId()}: {diagnostic.GetNotification()}; \" + $\"File: {ncLine?.FilePath}; LineNo: {ncLine?.GetLineNo()}; NC: {ncLine?.Line}\"); } foreach (StepDiagnostic diagnostic in localProjectService.StepDiagnosticProgress.Messages.ToList()) Console.WriteLine( $\"Step {diagnostic.StepIndex} [{diagnostic.GetSeverity()}] \" + $\"{diagnostic.GetId()}: {diagnostic.GetNotification()}\"); File.WriteAllLines(\"output-session-messages.txt\", shellMessages.Select(m => $\"[{m.GetSeverity()}] {m.GetId()}: {m.GetNotification()}\")); } Add the update-table event per sink: MessageAdded / MessageAdded, and for the session-scoped shell sink the app-lifetime bridge OnShellMessageAdded (with the matching Cleared events). The updating process has to be called by Loose Manner for user experience. Tip On window desktop application (WPF), consider use textarea instead of datagrid to MessageTable for better performance. Use padding to show the different columns. And use the font in the textarea that with consistent width. Note The message display should be real-time. Behavior of Export Button Every tab has its own Export, and it carries that tab's sink alone. It writes the rows the tab is holding — the recent window pulled from that sink, narrowed by that tab's severity, category and text filters — as a CSV of Index,Count,Severity,Category,Id,Anchor,Notification,Detail, named after the sink it came from. It is disabled while the filters match nothing. SignalR Implementation (Webapi Only) One hub per sink — /shellMessageHub, /ncDiagnosticHub, /stepDiagnosticHub, /ncManipulationDiagnosticHub — each with a GetMessages(int limit) pull returning MessagesUpdate { messages, totalCount }. A per-sink broadcast service subscribes its sink's MessageAdded/Cleared and raises a coalesced MessagesChanged notification via LooseRunner; the client re-pulls the recent window on each notification (loss-free regardless of how many appends coalesced). The client components connect to the hubs they display to receive real-time updates. Source Code Path See HiNC App Anatomy for git repository links. wwwroot-src/src/components/execution/SessionMessagePanel.vue (tabbed panel) wwwroot-src/src/components/execution/SessionMessageTab.vue + MessageRow.vue (per-tab list) wwwroot-src/src/composables/useSessionSinkHub.ts (the four hub composables) Execution/SessionSinkHub.cs (the SignalR hub base; one hub per sink) Execution/SessionSinkBroadcastService.cs + ShellMessageBroadcastService.cs, NcDiagnosticBroadcastService.cs, StepDiagnosticBroadcastService.cs, NcManipulationDiagnosticBroadcastService.cs (subscribe-and-rebroadcast) Execution/SessionSinkDtos.cs (typed DTOs) See Also Execution Page — the page whose main column hosts this panel Bottom Message Bar — the app-level notification bar, as distinct from these session sinks"
+ "summary": "Session Message Panel Session messages are partitioned by kind into four sinks on LocalProjectService (obtained via dependency injection): ShellProgress — session-level routine / lifecycle messages (ShellProgress). Session-scoped: the property is null outside BeginSession/EndSession. NcDiagnosticProgress — play-time NC-pipeline diagnostics (NcDiagnosticProgress), anchored to the NC source block that raised them wherever the diagnostic has one. StepDiagnosticProgress — diagnostics anchored to a motion step (StepDiagnosticProgress). NcManipulationDiagnosticProgress — NC-manipulation diagnostics: a second NcDiagnosticProgress, written by ConvertClToNcFiles and OptimizeNcFiles, held apart from the play-time sink so writeback findings never mix into the play pipeline's. The panel surfaces each sink in its own tab, so one tab holds one message kind. ResetRuntime — which a project change runs — empties the first three, so each of them holds the current project only; the manipulation sink is outside that sweep, cleared only at the start of the conversion or optimization run that fills it, and its rows therefore survive a project change. Layout Tab Bar (each tab carries a floating count badge, drawn only while its sink holds messages) Shell Tab NC Diagnostics Tab Step Diagnostics Tab NC Manipulation Tab Per-Tab Content Filter Toolbar Severity Filter Dropdown Category Filter Dropdown Message Text Filter Input Reset Button (this tab's three filters, nothing else) Export Button Matched / Total Badge (also the tab's hub connection indicator) Message Table Message Table (per tab) Each tab renders its sink's message list — Messages, Messages, or Diagnostics for the two NC-diagnostic sinks — as rows of: Severity (colour-coded via GetSeverity()) Anchor — the kind-specific position: none for shell messages, the NC sentence ordinal (Sn ) for both the play-time and the manipulation NC diagnostics, and the motion step with its sentence ordinal (S · Sn ) for step diagnostics; an NC diagnostic raised at pipeline level rather than at a source block carries none Message — GetCategory(), GetId() and GetNotification() Only take the last filtered elements (e.g. 500–1000) for user experience. Find the usage example in the code: internal static void DemoUseSessionMessageHost(LocalProjectService localProjectService) { // Session messages are partitioned by kind into three sinks on LocalProjectService: // - ShellProgress: session-level routine / lifecycle messages // (session-scoped: null outside BeginSession/EndSession). // - NcDiagnosticProgress: NC-pipeline diagnostics, anchored to the NC source sentence. // - StepDiagnosticProgress: diagnostics anchored to a motion step. ShellProgress shellProgress = localProjectService.ShellProgress; List shellMessages = shellProgress == null ? new List() : shellProgress.Messages.ToList(); foreach (IMessage message in shellMessages) Console.WriteLine( $\"Shell [{message.GetSeverity()}] {message.GetId()}: {message.GetNotification()}\"); foreach (NcDiagnostic diagnostic in localProjectService.NcDiagnosticProgress.Diagnostics.ToList()) { var ncLine = diagnostic.SentenceCarrier?.GetSentence()?.FirstIndexedFileLine; Console.WriteLine( $\"NC [{diagnostic.GetSeverity()}] {diagnostic.GetId()}: {diagnostic.GetNotification()}; \" + $\"File: {ncLine?.FilePath}; LineNo: {ncLine?.GetLineNo()}; NC: {ncLine?.Line}\"); } foreach (StepDiagnostic diagnostic in localProjectService.StepDiagnosticProgress.Messages.ToList()) Console.WriteLine( $\"Step {diagnostic.StepIndex} [{diagnostic.GetSeverity()}] \" + $\"{diagnostic.GetId()}: {diagnostic.GetNotification()}\"); File.WriteAllLines(\"output-session-messages.txt\", shellMessages.Select(m => $\"[{m.GetSeverity()}] {m.GetId()}: {m.GetNotification()}\")); } Add the update-table event per sink: MessageAdded / MessageAdded, and for the session-scoped shell sink the app-lifetime bridge OnShellMessageAdded (with the matching Cleared events). The updating process has to be called by Loose Manner for user experience. Note The message display should be real-time. Behavior of Export Button Every tab has its own Export, and it carries that tab's sink alone. It writes the rows the tab is holding — the recent window pulled from that sink, narrowed by that tab's severity, category and text filters — as a CSV of Index,Count,Severity,Category,Id,Anchor,Notification,Detail, named after the sink it came from. It is disabled while the filters match nothing. SignalR Implementation (Webapi Only) One hub per sink — /shellMessageHub, /ncDiagnosticHub, /stepDiagnosticHub, /ncManipulationDiagnosticHub — each with a GetMessages(int limit) pull returning MessagesUpdate { messages, totalCount }. A per-sink broadcast service subscribes its sink's MessageAdded/Cleared and raises a coalesced MessagesChanged notification via LooseRunner; the client re-pulls the recent window on each notification (loss-free regardless of how many appends coalesced). The client components connect to the hubs they display to receive real-time updates. Source Code Path See HiNC App Anatomy for git repository links. wwwroot-src/src/components/execution/SessionMessagePanel.vue (tabbed panel) wwwroot-src/src/components/execution/SessionMessageTab.vue + MessageRow.vue (per-tab list) wwwroot-src/src/composables/useSessionSinkHub.ts (the four hub composables) Execution/SessionSinkHub.cs (the SignalR hub base; one hub per sink) Execution/SessionSinkBroadcastService.cs + ShellMessageBroadcastService.cs, NcDiagnosticBroadcastService.cs, StepDiagnosticBroadcastService.cs, NcManipulationDiagnosticBroadcastService.cs (subscribe-and-rebroadcast) Execution/SessionSinkDtos.cs (typed DTOs) See Also Execution Page — the page whose main column hosts this panel Bottom Message Bar — the app-level notification bar, as distinct from these session sinks"
},
"anatomy/tool-house/cutter/apt-profile-panel.html": {
"href": "anatomy/tool-house/cutter/apt-profile-panel.html",
"title": "APT Profile Panel | HiAPI-C# 2025",
- "summary": "APT Profile Panel The main model is AptProfile and its property AptProfile.Apt. See Cutter Geometry. GeneralApt is the generalization of the other IAptBased types. On the web client these fields have no panel of their own: they are rendered inline by the Flute Profile section of the cutter, the Control-Tree node whose role path is toolhouse/tool-/cutter/profile, reached at /tool-house/:toolId/cutter/profile under the page route /tool-house/:toolId?/:tab?/:subtab?. That same section carries the Profile Type selector above the fields. In the WPF client the APT fields are a component of their own, hosted by the Milling Cutter panel's Flute-Profile tab. Layout Web Layout Flute Profile Section Profile Type Selection Dropdown General APT (GeneralApt) Ball APT (BallApt) Column APT (ColumnApt) Cone APT (ConeApt) Taper APT (TaperApt) First row, always present Diameter Input Field (mm) Length of Cut Input Field (mm) Type-dependent rows, one field per row, in this order Round Radius (Rc) Input Field (mm) Round Ring Radius (Rr) Input Field (mm) Round Ring Height (Rz) Input Field (mm) Bottom Cone Angle (Alpha) Input Field (deg) Top Cone Angle (Beta) Input Field (deg) Which of the five type-dependent fields appear is decided by a per-APT-type table held in the panel itself, not by testing the APT object's interfaces: Profile Type Fields shown General APT Rc, Rr, Rz, Alpha, Beta Ball APT none — Diameter and Length of Cut only Column APT Rc Cone APT Alpha Taper APT Rc, Rz, Alpha, Beta The interface casts live one layer down, on the read side: the cutter DTO builder fills rc_mm, rr_mm, rz_mm, alpha_deg and beta_deg by casting the APT to IAptRc, IAptRr, IAptRz, IAptAlpha and IAptBeta, and emits null for a cast that fails. Taper APT is where the panel's table and the engine's types disagree. TaperApt is declared over IAptBased, IAptRz, IAptAlpha and IAptBeta and carries no round radius, so the table's Rc entry gives a Taper profile a Round Radius box that the DTO fills with null — the field reads 0 — and the value the panel sends back is not read by the server's Taper branch, which builds the APT from Diameter, Rz, Alpha, Beta and Flute Height alone. Rc on a Taper APT is therefore inert in both directions. WPF Layout APT Profile Panel Diameter Input Field (mm) Round Radius Input Field (mm) Visible if Apt is IAptRc Round Ring Radius Input Field (mm) Visible if Apt is IAptRr Round Ring Height Input Field (mm) Visible if Apt is IAptRz Bottom Cone Angle Input Field (deg) Visible if Apt is IAptAlpha Top Cone Angle Input Field (deg) Visible if Apt is IAptBeta Length of Cut Input Field (mm) Tip Keep field format G4 on this client. The web fields apply no format: they show the value as stored and commit on blur or Enter. Features Every edit re-sends the whole profile. Changing the type, or any one field, builds a fresh shaper-profile request carrying the type, Diameter, Length of Cut and only those of Rc / Rr / Rz / Alpha / Beta that the chosen type's table lists, and the server replaces the cutter's AptProfile with a newly constructed APT of that type. The panel then clears the tool cache so the canvas redraws. Clearing a field is ignored. The shared numeric input emits null for an empty box, and the panel returns on null instead of committing, so a blanked box keeps the previous value rather than writing 0. Because the profile changes the flute geometry, the server does more than drop the cutter's cached solids: it also re-aligns the tool's holder-to-cutter anchor transformer, so the cutter is re-placed under the holder at its new height instead of rendering with a wrong exposed length. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue — the shipped home of these fields: the Profile Type selector, Diameter, Length of Cut, the per-type field table, and the whole-profile commit. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — builds the profile section node this panel renders. wwwroot-src/src/router/treeRoutes.ts — maps that node's role path onto the page's :subtab param. wwwroot-src/src/components/widgets/NumericInput.vue — the numeric field behind every APT input: unit as a suffix, commit on blur or Enter, no G4. wwwroot-src/src/i18n/en/toolhouse.ts — the exact labels: \"Round Radius (Rc)\", \"Round Ring Radius (Rr)\", \"Round Ring Height (Rz)\", \"Bottom Cone Angle (Alpha)\", \"Top Cone Angle (Beta)\", “Diameter”, “Length of Cut”, and the five APT type names. wwwroot-src/src/api/toolHouse.ts — setShaperProfile and the shaper-profile DTO shape, which carries only the fields the selected APT type lists. Mech/CutterController.cs — the shaper-profile endpoint: it builds a ColumnApt, ConeApt, BallApt, TaperApt or GeneralApt from the DTO, assigns a new AptProfile, and runs the cache-clear and re-align hook. Mech/CutterDtoBuilder.cs — the read side that emits aptType, diameter_mm, fluteHeight_mm and the five interface-cast fields."
+ "summary": "APT Profile Panel The main model is AptProfile and its property AptProfile.Apt. See Cutter Geometry. GeneralApt is the generalization of the other IAptBased types. These fields have no panel of their own: they are rendered inline by the Flute Profile section of the cutter, the Control-Tree node whose role path is toolhouse/tool-/cutter/profile, reached at /tool-house/:toolId/cutter/profile under the page route /tool-house/:toolId?/:tab?/:subtab?. That same section carries the Profile Type selector above the fields. Layout Web Layout Flute Profile Section Profile Type Selection Dropdown General APT (GeneralApt) Ball APT (BallApt) Column APT (ColumnApt) Cone APT (ConeApt) Taper APT (TaperApt) First row, always present Diameter Input Field (mm) Length of Cut Input Field (mm) Type-dependent rows, one field per row, in this order Round Radius (Rc) Input Field (mm) Round Ring Radius (Rr) Input Field (mm) Round Ring Height (Rz) Input Field (mm) Bottom Cone Angle (Alpha) Input Field (deg) Top Cone Angle (Beta) Input Field (deg) Which of the five type-dependent fields appear is decided by a per-APT-type table held in the panel itself, not by testing the APT object's interfaces: Profile Type Fields shown General APT Rc, Rr, Rz, Alpha, Beta Ball APT none — Diameter and Length of Cut only Column APT Rc Cone APT Alpha Taper APT Rc, Rz, Alpha, Beta The interface casts live one layer down, on the read side: the cutter DTO builder fills rc_mm, rr_mm, rz_mm, alpha_deg and beta_deg by casting the APT to IAptRc, IAptRr, IAptRz, IAptAlpha and IAptBeta, and emits null for a cast that fails. Taper APT is where the panel's table and the engine's types disagree. TaperApt is declared over IAptBased, IAptRz, IAptAlpha and IAptBeta and carries no round radius, so the table's Rc entry gives a Taper profile a Round Radius box that the DTO fills with null — the field reads 0 — and the value the panel sends back is not read by the server's Taper branch, which builds the APT from Diameter, Rz, Alpha, Beta and Flute Height alone. Rc on a Taper APT is therefore inert in both directions. Features Every edit re-sends the whole profile. Changing the type, or any one field, builds a fresh shaper-profile request carrying the type, Diameter, Length of Cut and only those of Rc / Rr / Rz / Alpha / Beta that the chosen type's table lists, and the server replaces the cutter's AptProfile with a newly constructed APT of that type. The panel then clears the tool cache so the canvas redraws. Clearing a field is ignored. The shared numeric input emits null for an empty box, and the panel returns on null instead of committing, so a blanked box keeps the previous value rather than writing 0. Because the profile changes the flute geometry, the server does more than drop the cutter's cached solids: it also re-aligns the tool's holder-to-cutter anchor transformer, so the cutter is re-placed under the holder at its new height instead of rendering with a wrong exposed length. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue — the shipped home of these fields: the Profile Type selector, Diameter, Length of Cut, the per-type field table, and the whole-profile commit. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — builds the profile section node this panel renders. wwwroot-src/src/router/treeRoutes.ts — maps that node's role path onto the page's :subtab param. wwwroot-src/src/components/widgets/NumericInput.vue — the numeric field behind every APT input: unit as a suffix, commit on blur or Enter, no G4. wwwroot-src/src/i18n/en/toolhouse.ts — the exact labels: \"Round Radius (Rc)\", \"Round Ring Radius (Rr)\", \"Round Ring Height (Rz)\", \"Bottom Cone Angle (Alpha)\", \"Top Cone Angle (Beta)\", “Diameter”, “Length of Cut”, and the five APT type names. wwwroot-src/src/api/toolHouse.ts — setShaperProfile and the shaper-profile DTO shape, which carries only the fields the selected APT type lists. Mech/CutterController.cs — the shaper-profile endpoint: it builds a ColumnApt, ConeApt, BallApt, TaperApt or GeneralApt from the DTO, assigns a new AptProfile, and runs the cache-clear and re-align hook. Mech/CutterDtoBuilder.cs — the read side that emits aptType, diameter_mm, fluteHeight_mm and the five interface-cast fields."
},
"anatomy/tool-house/cutter/cutter-panel.html": {
"href": "anatomy/tool-house/cutter/cutter-panel.html",
"title": "Cutter Panel | HiAPI-C# 2025",
- "summary": "Cutter Panel Overview The key component is ICutter. A tool carries at most one cutter, and two concrete types answer to that interface: MillingCutter and FreeformRemover. This panel is where the type is chosen, and it holds the cutter's own General fields. On the web client it is the Cutter tab of the Tool House Page, reached at /tool-house/:toolId/cutter under the page route /tool-house/:toolId?/:tab?/:subtab?. It is the panel of the Control-Tree Cutter node under the selected tool — the node whose role path is toolhouse/tool-/cutter. In the WPF client the same surface is the Cutter Management Panel embedded in the tool's editor. Layout Web Layout Cutter Node Panel Title Label — Cutter Cutter Type Selector — Milling Cutter / Freeform Remover / None Milling Cutter branch, rendered only while the type is Milling Cutter Shank Mass Input Field (g) Hone Radius Input Field (um) Relief Angle Input Field (deg) Sections Hint Caption — points at the section tabs below Freeform Remover branch — one caption, toolhouse.cutter.freeformRemoverUnavailable, sending the reader to the WPF client or HiNcRcl No-cutter branch — one hint, toolhouse.cutter.noCutterHint, inviting the reader to pick Milling Cutter The three numeric fields are the cutter's General fields, and they sit here under the Metadata-on-container convention — a container's own General fields are edited on the container's panel instead of in a General child. They are plain, always-editable inputs: one label each, no label switching and no auto-computed mode, and all three commit together through the general endpoint, which accepts exactly shankMass_g, honeRadius_um and reliefAngle_deg. A blanked box commits nothing, so clearing a field never writes a zero. The type also decides what grows below the node. A Milling Cutter grows the cutter's section tabs — Material, Flute Profile, Flute Contours, Upper Beam, Optimization — as the nodes whose role paths end in .../cutter/material, .../cutter/profile, .../cutter/contours, .../cutter/upper-beam and .../cutter/opt; Material is the one gated behind the Advanced Physics preference. Selecting one replaces this panel with that section's own panel; see Milling Cutter Panel. A Freeform Remover or no cutter grows nothing, so the Cutter node is a leaf and the caption or hint is the whole surface; see Freeform Remover Panel. This panel carries no object management of its own. Object management for the tool library sits on the tool-house root node, where the Object Management Menu Button is bound to the whole .MachiningToolHouse file rather than to a per-cutter file. WPF Layout Cutter Management Panel Head Line Object Management Menu Button File extension is .Cutter, load type ICutter The pointed Editor Panel is the cutter content presenter below Title Label Cutter Type Selection Dropdown Options: Milling Cutter, Freeform Remover, Unset Cutter Content Presenter Varies by the Cutter Type. It can be: Milling Cutter Panel Freeform Remover Panel The per-cutter .Cutter file is this client's, and so is the third option's Unset wording; the web selector's third option reads None. Features Committing a type on the web is one server call plus a cache clear. Milling Cutter calls EnsureCutter, which keeps the tool's existing MillingCutter and only creates one when the tool has none; None calls ClearCutter, which drops the tool's cutter altogether. The panel then clears the tool cache, re-reads the tool and emits a structure change for its own node, which is how the section tabs appear or disappear with the type. Cache clearing is not a step the user performs. ICutter implements IClearCache, and every cutter endpoint that changes a field or a geometry clears the cache server-side before it answers: the field endpoints call ClearCache() on the milling cutter directly, while the ones that change flute or beam geometry go through the controller's resync hook, which clears the cache and re-aligns the tool's holder-to-cutter anchor transformer so the cutter is re-placed under the holder at its new height. On top of that the panels call clearToolCache(toolId), which clears the tool's cached solids and the holder's, so the tool canvas redraws. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the Cutter node's panel: the Milling Cutter / Freeform Remover / None selector, the Shank Mass / Hone Radius / Relief Angle fields, the Freeform Remover caption and the no-cutter hint. Commits a type change through ensureCutter or clearCutter followed by clearToolCache. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — registers this panel as the ToolCutter item type; its cutter child builder grows the section tabs only for a MillingCutter, and gates Material on the Advanced Physics preference. wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue and wwwroot-src/src/components/controlTree/toolhouse/CutterContoursPanel.vue — the panels those section nodes render. wwwroot-src/src/components/controlTree/toolhouse/ToolHouseRootPanel.vue — the tool-house root panel, which carries the Object Management Menu Button for the .MachiningToolHouse file. wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue — the reused object-management dropdown that root panel mounts. wwwroot-src/src/components/widgets/NumericInput.vue — the shared numeric field behind the three General inputs; it commits on blur or Enter and reverts an unparseable entry. wwwroot-src/src/pages/ToolHousePage.vue — the routed page that hosts the tool list and the tab cascade this panel appears in; the route is /tool-house/:toolId?/:tab?/:subtab?. wwwroot-src/src/i18n/en/toolhouse.ts — the toolhouse.cutter.* strings this panel renders: cutterType, shankMass, honeRadius, reliefAngle, sectionsHint, freeformRemoverUnavailable, noCutterHint, millingCutter, freeformRemover. The None option's label comes from common.options.none in wwwroot-src/src/i18n/en/common.ts. wwwroot-src/src/api/toolHouse.ts — the typed wrapper: /api/ToolHouse for the house and the tool-level fields, /api/Cutter for every cutter mutation, plus ensureCutter, clearCutter, setGeneral and clearToolCache. Mech/CutterController.cs — the cutter backend at /api/Cutter: EnsureCutter / ClearCutter, the shaper-profile, fluting, general and opt-limit endpoints, the upper-beam endpoints and the material and coating-layer endpoints. Every field and geometry mutator clears the cutter cache before it answers. Mech/CutterDtoBuilder.cs — the single source of truth for the read-side cutter DTO (integralMode, general, shaperProfile, fluting, optLimit, material), shared by CutterController and the tool detail in ToolHouseController. Mech/ToolHouseController.cs — the tool detail that embeds that cutter DTO and that this panel reads on mount, plus the tool-cache clear the panel calls after every commit."
+ "summary": "Cutter Panel Overview The key component is ICutter. A tool carries at most one cutter, and two concrete types answer to that interface: MillingCutter and FreeformRemover. This panel is where the type is chosen, and it holds the cutter's own General fields. It is the Cutter tab of the Tool House Page, reached at /tool-house/:toolId/cutter under the page route /tool-house/:toolId?/:tab?/:subtab?. It is the panel of the Control-Tree Cutter node under the selected tool — the node whose role path is toolhouse/tool-/cutter. Layout Web Layout Cutter Node Panel Title Label — Cutter Cutter Type Selector — Milling Cutter / Freeform Remover / None Milling Cutter branch, rendered only while the type is Milling Cutter Shank Mass Input Field (g) Hone Radius Input Field (um) Relief Angle Input Field (deg) Sections Hint Caption — points at the section tabs below Freeform Remover branch — one caption, toolhouse.cutter.freeformRemoverUnavailable, saying the editor is not available here No-cutter branch — one hint, toolhouse.cutter.noCutterHint, inviting the reader to pick Milling Cutter The three numeric fields are the cutter's General fields, and they sit here under the Metadata-on-container convention — a container's own General fields are edited on the container's panel instead of in a General child. They are plain, always-editable inputs: one label each, no label switching and no auto-computed mode, and all three commit together through the general endpoint, which accepts exactly shankMass_g, honeRadius_um and reliefAngle_deg. A blanked box commits nothing, so clearing a field never writes a zero. The type also decides what grows below the node. A Milling Cutter grows the cutter's section tabs — Material, Flute Profile, Flute Contours, Upper Beam, Optimization — as the nodes whose role paths end in .../cutter/material, .../cutter/profile, .../cutter/contours, .../cutter/upper-beam and .../cutter/opt; Material is the one gated behind the Advanced Physics preference. Selecting one replaces this panel with that section's own panel; see Milling Cutter Panel. A Freeform Remover or no cutter grows nothing, so the Cutter node is a leaf and the caption or hint is the whole surface; see Freeform Remover Panel. This panel carries no object management of its own. Object management for the tool library sits on the tool-house root node, where the Object Management Menu Button is bound to the whole .MachiningToolHouse file rather than to a per-cutter file. Features Committing a type is one server call plus a cache clear. Milling Cutter calls EnsureCutter, which keeps the tool's existing MillingCutter and only creates one when the tool has none; None calls ClearCutter, which drops the tool's cutter altogether. The panel then clears the tool cache, re-reads the tool and emits a structure change for its own node, which is how the section tabs appear or disappear with the type. Cache clearing is not a step the user performs. ICutter implements IClearCache, and every cutter endpoint that changes a field or a geometry clears the cache server-side before it answers: the field endpoints call ClearCache() on the milling cutter directly, while the ones that change flute or beam geometry go through the controller's resync hook, which clears the cache and re-aligns the tool's holder-to-cutter anchor transformer so the cutter is re-placed under the holder at its new height. On top of that the panels call clearToolCache(toolId), which clears the tool's cached solids and the holder's, so the tool canvas redraws. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the Cutter node's panel: the Milling Cutter / Freeform Remover / None selector, the Shank Mass / Hone Radius / Relief Angle fields, the Freeform Remover caption and the no-cutter hint. Commits a type change through ensureCutter or clearCutter followed by clearToolCache. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — registers this panel as the ToolCutter item type; its cutter child builder grows the section tabs only for a MillingCutter, and gates Material on the Advanced Physics preference. wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue and wwwroot-src/src/components/controlTree/toolhouse/CutterContoursPanel.vue — the panels those section nodes render. wwwroot-src/src/components/controlTree/toolhouse/ToolHouseRootPanel.vue — the tool-house root panel, which carries the Object Management Menu Button for the .MachiningToolHouse file. wwwroot-src/src/components/widgets/ObjectManagementMenuButton.vue — the reused object-management dropdown that root panel mounts. wwwroot-src/src/components/widgets/NumericInput.vue — the shared numeric field behind the three General inputs; it commits on blur or Enter and reverts an unparseable entry. wwwroot-src/src/pages/ToolHousePage.vue — the routed page that hosts the tool list and the tab cascade this panel appears in; the route is /tool-house/:toolId?/:tab?/:subtab?. wwwroot-src/src/i18n/en/toolhouse.ts — the toolhouse.cutter.* strings this panel renders: cutterType, shankMass, honeRadius, reliefAngle, sectionsHint, freeformRemoverUnavailable, noCutterHint, millingCutter, freeformRemover. The None option's label comes from common.options.none in wwwroot-src/src/i18n/en/common.ts. wwwroot-src/src/api/toolHouse.ts — the typed wrapper: /api/ToolHouse for the house and the tool-level fields, /api/Cutter for every cutter mutation, plus ensureCutter, clearCutter, setGeneral and clearToolCache. Mech/CutterController.cs — the cutter backend at /api/Cutter: EnsureCutter / ClearCutter, the shaper-profile, fluting, general and opt-limit endpoints, the upper-beam endpoints and the material and coating-layer endpoints. Every field and geometry mutator clears the cutter cache before it answers. Mech/CutterDtoBuilder.cs — the single source of truth for the read-side cutter DTO (integralMode, general, shaperProfile, fluting, optLimit, material), shared by CutterController and the tool detail in ToolHouseController. Mech/ToolHouseController.cs — the tool detail that embeds that cutter DTO and that this panel reads on mount, plus the tool-cache clear the panel calls after every commit."
},
"anatomy/tool-house/cutter/freeform-remover-panel.html": {
"href": "anatomy/tool-house/cutter/freeform-remover-panel.html",
"title": "Freeform Remover Panel | HiAPI-C# 2025",
- "summary": "Freeform Remover Panel The key model is FreeformRemover: a cutter whose removal volume comes from two referenced geometries — a non-cutting strut and a cutting shaper — anchored to the holder buckle. The two clients divide this cutter between them. The WPF client owns the editing surface: both geometries, the anchor, the spinning flag and the identity fields. The web client offers the type in the Cutter Type selector and nothing more; there is no Freeform Remover editor on the web, and no freeform-remover endpoint in the backend, so a freeform remover is built and edited on the WPF client or through HiNcRcl. Layout WPF Layout Freeform Remover Panel Tabs Strut Geometry Tab Geometry Management Panel Manages StrutGeom Shaper Geometry Tab Geometry Management Panel Manages ShaperGeom Anchor Tab Label: Geometry Anchor To Holder Buckle KeepHolderBuckleOnTop Checkbox Transformer Manage Panel Model is GeomToHolderTransformer Enabled if KeepHolderBuckleOnTop is true. Property Tab Is Spinning Cutter Checkbox Controls IsSpinningCutter Info Tab Name TextField (editable) AbstractNote TextField (readonly) Note TextField (editable) This panel calls ClearCache() itself after a geometry or anchor change, so the cached solids are dropped before the tool is redrawn. Web Layout Cutter Node Panel, the Cutter tab of the Tool House Page at /tool-house/:toolId/cutter — the Control-Tree node toolhouse/tool-/cutter Cutter Type Selector — its second option, Freeform Remover, is this cutter Freeform Remover Caption (toolhouse.cutter.freeformRemoverUnavailable) — the panel's whole body while that option is showing, directing the reader to the WPF client or HiNcRcl Nothing else on the web belongs to this cutter. The Shank Mass / Hone Radius / Relief Angle fields on that panel are gated to the Milling Cutter branch, and the cutter's child builder grows section tabs only for a MillingCutter, so the Cutter node is a leaf here: no Material, Flute Profile, Flute Contours, Upper Beam or Optimization section appears. See Cutter Panel for the panel these live on. Geometry Definitions Strut Geometry — The non-cutting portion (holder/shank) Used for collision detection Shaper Geometry — The cutting portion Defines cutting surfaces Used for material removal simulation Features Picking Freeform Remover on the web is a no-op that does not stick. The panel makes no API call for that option — it sets the selector locally, clears the tool cache, then re-reads the tool, and the re-read is what puts the selector back to Milling Cutter or None. The model on the tool is left exactly as it was. A tool that already carries a freeform remover reads as None. The tool detail casts the tool's cutter to a MillingCutter and reports both hasCutter and the embedded cutter DTO from that one cast, so a non-milling cutter comes back as no cutter at all, and the selector — which derives its value from those two fields — shows None. The Freeform Remover option is therefore reachable by the user's click but never by a load. That makes one sequence worth knowing before using the web page on such a tool: picking Milling Cutter calls EnsureCutter, which returns the tool's existing cutter only when it is already a MillingCutter and otherwise assigns a new one — so on a tool holding a freeform remover, that choice replaces it. Leaving the selector alone leaves the freeform remover intact, which is what a round trip through the web page does by default. Cache clearing needs no user action on either client. The WPF panel clears the remover's cache after each geometry or anchor edit; on the web there is nothing to clear for this cutter, since no endpoint mutates it, and the tool-cache clear the selector performs only drops the tool's and the holder's cached solids so the canvas redraws. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the only web surface this cutter has: the selector option, the caption shown in its place, and the branch of the type handler that makes no call. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — its cutter child builder grows sections only for a MillingCutter, so this cutter's Cutter node is a leaf. wwwroot-src/src/i18n/en/toolhouse.ts — toolhouse.cutter.freeformRemover, the option label, and toolhouse.cutter.freeformRemoverUnavailable, the caption; the zh-Hans and zh-Hant files carry the same keys. Mech/ToolHouseController.cs — the tool detail, which casts the cutter to a MillingCutter and reports hasCutter from that cast; this is why the selector cannot come back showing Freeform Remover. Mech/CutterController.cs — EnsureCutter / ClearCutter and every cutter mutation, all MillingCutter-only; the backend has no freeform-remover endpoint."
+ "summary": "Freeform Remover Panel The key model is FreeformRemover: a cutter whose removal volume comes from two referenced geometries — a non-cutting strut and a cutting shaper — anchored to the holder buckle. This cutter is offered in the Cutter Type selector and nowhere else. There is no Freeform Remover editor here and no freeform-remover endpoint in the backend, so nothing on this surface can create or change one — the shipped caption says as much, naming the WPF client and HiNcRcl. Layout Web Layout Cutter Node Panel, the Cutter tab of the Tool House Page at /tool-house/:toolId/cutter — the Control-Tree node toolhouse/tool-/cutter Cutter Type Selector — its second option, Freeform Remover, is this cutter Freeform Remover Caption (toolhouse.cutter.freeformRemoverUnavailable) — the panel's whole body while that option is showing Nothing else on this surface belongs to this cutter. The Shank Mass / Hone Radius / Relief Angle fields on that panel are gated to the Milling Cutter branch, and the cutter's child builder grows section tabs only for a MillingCutter, so the Cutter node is a leaf here: no Material, Flute Profile, Flute Contours, Upper Beam or Optimization section appears. See Cutter Panel for the panel these live on. Geometry Definitions Strut Geometry — The non-cutting portion (holder/shank) Used for collision detection Shaper Geometry — The cutting portion Defines cutting surfaces Used for material removal simulation Features Picking Freeform Remover is a no-op that does not stick. The panel makes no API call for that option — it sets the selector locally, clears the tool cache, then re-reads the tool, and the re-read is what puts the selector back to Milling Cutter or None. The model on the tool is left exactly as it was. A tool that already carries a freeform remover reads as None. The tool detail casts the tool's cutter to a MillingCutter and reports both hasCutter and the embedded cutter DTO from that one cast, so a non-milling cutter comes back as no cutter at all, and the selector — which derives its value from those two fields — shows None. The Freeform Remover option is therefore reachable by the user's click but never by a load. That makes one sequence worth knowing before using the web page on such a tool: picking Milling Cutter calls EnsureCutter, which returns the tool's existing cutter only when it is already a MillingCutter and otherwise assigns a new one — so on a tool holding a freeform remover, that choice replaces it. Leaving the selector alone leaves the freeform remover intact, which is what a round trip through the web page does by default. Cache clearing needs no user action: there is nothing to clear for this cutter, since no endpoint mutates it, and the tool-cache clear the selector performs only drops the tool's and the holder's cached solids so the canvas redraws. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the only web surface this cutter has: the selector option, the caption shown in its place, and the branch of the type handler that makes no call. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — its cutter child builder grows sections only for a MillingCutter, so this cutter's Cutter node is a leaf. wwwroot-src/src/i18n/en/toolhouse.ts — toolhouse.cutter.freeformRemover, the option label, and toolhouse.cutter.freeformRemoverUnavailable, the caption; the zh-Hans and zh-Hant files carry the same keys. Mech/ToolHouseController.cs — the tool detail, which casts the cutter to a MillingCutter and reports hasCutter from that cast; this is why the selector cannot come back showing Freeform Remover. Mech/CutterController.cs — EnsureCutter / ClearCutter and every cutter mutation, all MillingCutter-only; the backend has no freeform-remover endpoint."
},
"anatomy/tool-house/cutter/index.html": {
"href": "anatomy/tool-house/cutter/index.html",
@@ -417,22 +417,22 @@
"anatomy/tool-house/cutter/milling-cutter-panel.html": {
"href": "anatomy/tool-house/cutter/milling-cutter-panel.html",
"title": "Milling Cutter Panel | HiAPI-C# 2025",
- "summary": "Milling Cutter Panel The key model is MillingCutter, the cutter type both clients edit in full. On the web client this cutter is not one panel but the section tabs the Cutter Panel grows once a Milling Cutter is assigned: the Control-Tree nodes under toolhouse/tool-/cutter, reached at /tool-house/:toolId/cutter/:subtab under the page route /tool-house/:toolId?/:tab?/:subtab?. The five :subtab values are material, profile, contours, upper-beam and opt. The cutter's General fields — Shank Mass, Hone Radius, Relief Angle — are not among them: they sit on the Cutter node's own panel. In the WPF client the same cutter is one tab control, and it carries several groups the web does not offer. Layout Web Layout Cutter Section Tabs, in this order Material Section — grows only while the Advanced Physics preference is on Flute Profile Section Flute Contours Section Upper Beam Section Optimization Section Material is the only physics-gated section. Flute Profile, Flute Contours, Upper Beam and Optimization grow for every Milling Cutter. The preference behind the gate is the SPA's Advanced Physics option, held as isShowPhysicsOptions in the app-state store and read from the server's preference endpoint, which reports it as on only while the physics feature is licensed. UserService.EnablePhysics is the WPF client's name for the same preference. Integral mode is read-only on the web. The cutter DTO reports it, and the Material section reads it to decide whether the Shank Material picker applies, but no endpoint sets it; it is chosen on the WPF client's Property tab. Material Section Material Section (.../cutter/material) Flute Material Applies CutterMaterial Intro caption naming the .CutterMaterial extension Material File Selector Menu Dropdown — Browse Resource…, plus Clear once a file is picked Readonly path TextBox with the placeholder “No flute material selected” Name and note caption beneath the picker, the two joined on one line Shank Material, rendered only while the cutter's integral mode is Insert End Applies IStructureMaterial Intro caption naming the .xml structure material and the .CutterMaterial alternative Material File Selector, filtered to .xml — same Browse Resource… menu, with the placeholder “Default: AlloySteel42CrMo” Name and note caption beneath the picker Solid-End Note, shown in place of that block for a solid-end cutter — the shank material mirrors the flute material, so it has no separate setting Coating Layers Manages CoatingLayerList Add Layer Button One sequence hint above the whole list: the sequence starts from the surface, #0 is the outermost / air-exposing layer, and each layer is a .CoatingMaterial plus a thickness in um One row per ThermalLayer1D, all controls on that one line Index Badge #i Coating Material File Selector — Browse Resource…, placeholder “No coating material” Thickness Input Field (um) — Length_um Move Toward Surface Button, disabled on the first row Move Toward Body Button, disabled on the last row Delete Layer Button Empty state caption “No coating layers.” All three pickers are resource-only, which is what leaves the dropdown with a single browse entry: the absolute Browse item is hidden and only Browse Resource… remains. The picked material's name and note are rendered as a caption line under the picker rather than as a tooltip on a readonly name box. The mirroring for a solid-end cutter is enforced server-side: loading a flute material onto a solid-end cutter assigns the same material as the shank material, and unsetting it clears both. For an insert-end cutter, unsetting the shank material resets it to the built-in AlloySteel42CrMo rather than to nothing. Every coating endpoint answers with the whole cutter DTO, so the row list re-renders from the server's own ordering after an add, a move or a delete. Default Resource The default resources of Material live in the built-in Resource folder the server exposes as a named root of its own — not in the project folder. Each picker opens Browse Resource… into its own subfolder of that root: StructureMaterial — the Shank Material picker CutterMaterial — the Flute Material picker CoatingMaterial — the coating rows' pickers Flute Profile Section Flute Profile Section (.../cutter/profile) Profile Type Selection Dropdown General APT (GeneralApt) Ball APT (BallApt) Column APT (ColumnApt) Cone APT (ConeApt) Taper APT (TaperApt) The APT fields themselves, rendered inline in this same panel The five types are all wrapped by AptProfile, with a different Apt assigned; which fields appear depends on the type. See APT Profile Panel for the field list and the per-type table that drives it. See the DemoBuildMachiningProject sample in the Hi.Sample repository for creating the APT profile and setting it on the cutter. CustomSpinningProfile is the WPF client's sixth profile type; the web offers the five APT types only. Flute Contours Section This part manages Fluting. It is a stem, not a leaf: the section node carries only the type selector, and the fluting itself is a sub-tree of nodes below it. Flute Contours Section (.../cutter/contours) Title Label — Fluting Fluting Type Selection Dropdown Uniform (shared baseline) — UniformFluting Free (per-flute) — FreeFluting — unset — A caption describing the chosen kind, or “Fluting unset.” while none is set Fluting Node, grown only once a fluting is set — labelled Uniform Fluting or Free Fluting For a uniform fluting: Flute Number Input Field (minimum 1) For a free fluting: a “Flutes: n” caption and an Add Flute Button, with a “No flutes yet” hint while the list is empty Flute Contour Node(s) One Baseline Contour node (.../fluting/baseline) for a uniform fluting; one Flute n node (.../fluting/flute-{i}) per flute for a free fluting Setup Angle Input Field (deg) Delete This Flute Button — free fluting only Side Contour Sub-Node (.../baseline/side, .../flute-{i}/side) Kind Selector — Const Helix / Freeform / — unset — Const Helix Side Contour form: Helix Angle (deg), Radial Rake Angle (deg), Radial Relief Angle (deg) Freeform Side Contour form: the span-position table, ordered by Z Bottom Contour Sub-Node (.../baseline/bottom, .../flute-{i}/bottom) Kind Selector — Slide / Freeform / — unset — Slide Bottom Contour form: Outer Radius (mm), Cutter Length on Bottom Projection (mm), Eccentric Angle (deg), Disk Angle (deg), Axial Rake Angle (deg) Freeform Bottom Contour form: the span-position table, ordered by R Both freeform forms share one span-position table: four numeric columns — R (mm), A (deg), Z (mm), R.Ang (deg) — one row per 4D span position, with an insert-next button that clones the row and a double-click to remove it. The header wording mirrors the CSV field order the wire format uses, and the R.Ang column carries a tooltip explaining that the radial angle feeds the bottom-surface loft. A flute contour is always committed as a whole. Editing a Setup Angle, a side contour or a bottom contour re-sends the entire contour: a uniform fluting re-sends the fluting with its current flute number, and a free fluting updates the slot at its index. Free flute node ids are positional, so adding or deleting a flute rebuilds the branch to re-point them. Picking — unset — in the Fluting Type selector is inert — the panel returns without a call, because the backend exposes no way to null a fluting. Picking — unset — on a Side or Bottom Contour, in contrast, does commit: it clears that contour on the flute. Upper Beam Section The upper beam is the cutter's shank / body above the flute. Upper Beam Section (.../cutter/upper-beam) Intro caption Warnings Banner — one orange banner per geometry issue the backend reports, e.g. an ExtendedCylinder beam whose FullLength sits below the flute top Geometry Management Control, limited to the six IGetStl kinds an upper beam can be Cylindroid ExtendedCylinder TransformationGeom StlFile Box3d GeomCombination The banner is persistent rather than a transient toast: the same unreasonable settings fail thermal physics at run time as configuration errors, so they are surfaced at edit time. Creating a geometry here is container-aware — the server builds it, sets it as the cutter's upper-beam geometry, auto-links an ExtendedCylinder to the flute with a valid seed length, and indexes it under the same key so the per-kind editor edits it in place. Each later edit resyncs the cutter and refreshes the warning list. Optimization Section This part manages MillingCutterOptOption. Optimization Section (.../cutter/opt) Enable Optimization Checkbox Controls whether the limits below are shown and active When optimization is enabled: Limit by Theoretical Minimum Feed Per Tooth Checkbox Limit by Relief Angle Checkbox Min Feed Per Tooth Input Field (mm) Max Feed Per Tooth Input Field (mm) Yielding Utilization Factor Input Field The reciprocal of the Yielding Safety Factor the server stores; the panel converts in both directions Hint caption: typical values run 0.33 (conservative) to 1.0 (aggressive) Both checkboxes are plain labelled checkboxes — neither displays a computed value. The server's defaults when a limit set is written without them are a Yielding Safety Factor of 3 (a utilization factor of about 0.33), a Max Feed Per Tooth of 999, and both limit flags on. The minimum uncut chip thickness itself is not on this surface: no cutter endpoint returns it, and no field displays it. It is the WPF client's Optimization panel that computes it from the cutter and the project workpiece's cutting parameter and shows it beside the checkbox. WPF Layout Milling Cutter Panel Tabs Flute-Profile Tab — the profile type dropdown plus the APT panel, and the CustomSpinningProfile option with its own geometry-management panel Upper-Beam Tab Geometry Management Control, with the ExtendedCylinder option enabled Property Tab Integral Mode Selection Dropdown — Solid End / Insert End Cutter/Shank Mass Input Field (g), with an Auto Update CheckBox driven by ShankMassAssignmentMode: when enabled the field turns readonly and shows the mass computed from the inner-beam and upper-beam volume and the density Hone Radius (um) and Relief Angle (deg) Input Fields Minimum Available Cutting Thickness (um), readonly, from GetMinimumUncutChipThickness_um(ICuttingPara) with the project workpiece's CuttingPara, and a note label naming that cutting parameter Insert-Cutter Tab Insert Number, Insert Mass (g) and Insert Thickness (mm) Input Fields; the thickness feeds heat transfer Material Tab Flute-Contours Tab Flute-Inner-Beam Tab Profile Type Selection Dropdown for InnerBeamProfile — Flute Dependent Ratio (FluteDependentRatioProfile), Const Ratio (ConstRatioProfile), Custom Spinning (CustomSpinningProfile) For Flute Dependent Ratio: a readonly Radius Ratio field whose label also names the flute number it depends on For Const Ratio: an editable Radius Ratio field For Custom Spinning: a Geometry Management Control Optimization Tab — the same limits as the web section, plus the computed minimum uncut chip thickness beside the minimum-feed checkbox Info Tab Name TextField (editable) AbstractNote TextField (readonly) Note TextField (editable) UserService.EnablePhysics gates the Property, Material, Flute-Contours, Flute-Inner-Beam and Optimization tabs on this client; the Insert-Cutter tab additionally requires Insert End. Flute-Profile, Upper-Beam and Info are always visible. On the web only the Material section is gated, and the same preference is named isShowPhysicsOptions. Numeric fields on this client are formatted G4. The web's numeric field applies no format: it shows the value as stored and commits on blur or Enter. The cutter has no identity fields on the web. Tool ID, Note and the auto-derived Abstract Note belong to the tool, one level up, and are edited on the tool's own General tab; see Tool House Page. Features Every web edit is a whole-object commit followed by a cache clear. The Flute Profile panel re-sends the entire shaper profile on any field change — only the fields the selected APT type carries are included — then clears the tool cache. The contour panels re-send the whole flute contour. The optimization panel re-sends the whole limit set. The material and coating endpoints each answer with the full cutter DTO, which the panels re-render from. A blanked numeric box commits nothing. The shared numeric field emits null for an empty entry, and every cutter panel returns on null rather than writing a zero, so clearing a field leaves the stored value alone. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — the item-type registry and the child builders: the cutter's five sections, the Material physics gate, and the fluting / flute / side / bottom sub-tree. wwwroot-src/src/router/treeRoutes.ts — role-path to route translation; CUTTER_SECTIONS pins material, profile, contours, upper-beam and opt, and it also translates a …/contours/tray… id onto the fluting segment the node carries, so both spellings of the engine's Fluting type family resolve. wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the parent Cutter node: the type selector plus the cutter's General fields. wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue — the one panel shared by the material / profile / upper-beam / opt sections, keyed off the node's last role segment. It renders the Flute Profile fields inline and delegates the other three. wwwroot-src/src/components/toolhouse/MaterialDiv.vue — the Material section: flute material, the insert-end-only shank material, the solid-end note, and the coating list. wwwroot-src/src/components/toolhouse/CoatingLayersDiv.vue — the coating rows: index badge, material picker, thickness, move toward surface / body, delete. wwwroot-src/src/components/controlTree/toolhouse/CutterContoursPanel.vue — the Flute Contours stem: the Fluting Type selector. wwwroot-src/src/components/controlTree/toolhouse/FlutingPanel.vue — the concrete fluting node: Flute Number for uniform, the flute count and Add Flute for free. wwwroot-src/src/components/controlTree/toolhouse/FluteContourPanel.vue — one flute contour node: Setup Angle, and Delete This Flute for a free flute. wwwroot-src/src/components/controlTree/toolhouse/FluteSideContourPanel.vue and wwwroot-src/src/components/controlTree/toolhouse/FluteBottomContourPanel.vue — the two sub-nodes: kind selector plus the matching form. wwwroot-src/src/components/controlTree/toolhouse/fluteContourNode.ts — the shared load and commit logic behind those three panels, and the rule that a contour is committed whole. wwwroot-src/src/components/toolhouse/fluting/ConstHelixSideContourDiv.vue, wwwroot-src/src/components/toolhouse/fluting/SlideBottomContourDiv.vue, wwwroot-src/src/components/toolhouse/fluting/FreeformSideContourDiv.vue and wwwroot-src/src/components/toolhouse/fluting/FreeformBottomContourDiv.vue — the four contour parameter forms. wwwroot-src/src/components/toolhouse/fluting/SpanContourPosListDiv.vue — the R / A / Z / R.Ang span-position table both freeform forms share. wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue — the Upper Beam section: the six allowed geometry kinds, the container-aware create, the resync-on-edit and the warnings banner. wwwroot-src/src/components/geom/GeometryEditor.vue — the shared geometry editor that section reuses. wwwroot-src/src/components/toolhouse/MillingCutterOptLimitDiv.vue — the Optimization section, including the Yielding Utilization Factor conversion. wwwroot-src/src/components/widgets/NumericInput.vue — the numeric field every cutter form uses: no G4, commit on blur or Enter, revert on an unparseable entry. wwwroot-src/src/components/widgets/FilePathInput.vue — the picker behind the material selectors; its resource-only mode hides the absolute Browse item and leaves Browse Resource…. wwwroot-src/src/stores/appState.ts — holds isShowPhysicsOptions, the Advanced Physics preference that gates the Material section. wwwroot-src/src/i18n/en/toolhouse.ts — every label quoted above: cutter.*, material.*, contour.*, fluting.*, upperBeam.* and opt.*. wwwroot-src/src/api/toolHouse.ts — the typed wrapper over /api/Cutter: shaper profile, fluting, the free-contour CRUD, the material and coating endpoints, the upper beam and the opt limit. Mech/CutterController.cs — the cutter backend: the APT construction from the profile DTO, the fluting builders, the opt-limit defaults, the solid-end shank-material mirroring, and the cache clear every field and geometry mutator performs. Mech/CutterDtoBuilder.cs — the read-side cutter DTO: integral mode, general, shaper profile, fluting, opt limit and material. Mech/ToolHouseController.cs — the tool detail that embeds that DTO, which every cutter section refreshes from. See Also Extended Cylinder Panel — the Upper Beam's kind that exists for this cutter, and the one surface that gives it a start section"
+ "summary": "Milling Cutter Panel The key model is MillingCutter, the one cutter type edited here in full. This cutter is not one panel but the section tabs the Cutter Panel grows once a Milling Cutter is assigned: the Control-Tree nodes under toolhouse/tool-/cutter, reached at /tool-house/:toolId/cutter/:subtab under the page route /tool-house/:toolId?/:tab?/:subtab?. The five :subtab values are material, profile, contours, upper-beam and opt. The cutter's General fields — Shank Mass, Hone Radius, Relief Angle — are not among them: they sit on the Cutter node's own panel. Layout Web Layout Cutter Section Tabs, in this order Material Section — grows only while the Advanced Physics preference is on Flute Profile Section Flute Contours Section Upper Beam Section Optimization Section Material is the only physics-gated section. Flute Profile, Flute Contours, Upper Beam and Optimization grow for every Milling Cutter. The preference behind the gate is the SPA's Advanced Physics option, held as isShowPhysicsOptions in the app-state store and read from the server's preference endpoint, which reports it as on only while the physics feature is licensed. Integral mode is read-only. The cutter DTO reports it, and the Material section reads it to decide whether the Shank Material picker applies, but no endpoint sets it. Material Section Material Section (.../cutter/material) Flute Material Applies CutterMaterial Intro caption naming the .CutterMaterial extension Material File Selector Menu Dropdown — Browse Resource…, plus Clear once a file is picked Readonly path TextBox with the placeholder “No flute material selected” Name and note caption beneath the picker, the two joined on one line Shank Material, rendered only while the cutter's integral mode is Insert End Applies IStructureMaterial Intro caption naming the .xml structure material and the .CutterMaterial alternative Material File Selector, filtered to .xml — same Browse Resource… menu, with the placeholder “Default: AlloySteel42CrMo” Name and note caption beneath the picker Solid-End Note, shown in place of that block for a solid-end cutter — the shank material mirrors the flute material, so it has no separate setting Coating Layers Manages CoatingLayerList Add Layer Button One sequence hint above the whole list: the sequence starts from the surface, #0 is the outermost / air-exposing layer, and each layer is a .CoatingMaterial plus a thickness in um One row per ThermalLayer1D, all controls on that one line Index Badge #i Coating Material File Selector — Browse Resource…, placeholder “No coating material” Thickness Input Field (um) — Length_um Move Toward Surface Button, disabled on the first row Move Toward Body Button, disabled on the last row Delete Layer Button Empty state caption “No coating layers.” All three pickers are resource-only, which is what leaves the dropdown with a single browse entry: the absolute Browse item is hidden and only Browse Resource… remains. The picked material's name and note are rendered as a caption line under the picker rather than as a tooltip on a readonly name box. The mirroring for a solid-end cutter is enforced server-side: loading a flute material onto a solid-end cutter assigns the same material as the shank material, and unsetting it clears both. For an insert-end cutter, unsetting the shank material resets it to the built-in AlloySteel42CrMo rather than to nothing. Every coating endpoint answers with the whole cutter DTO, so the row list re-renders from the server's own ordering after an add, a move or a delete. Default Resource The default resources of Material live in the built-in Resource folder the server exposes as a named root of its own — not in the project folder. Each picker opens Browse Resource… into its own subfolder of that root: StructureMaterial — the Shank Material picker CutterMaterial — the Flute Material picker CoatingMaterial — the coating rows' pickers Flute Profile Section Flute Profile Section (.../cutter/profile) Profile Type Selection Dropdown General APT (GeneralApt) Ball APT (BallApt) Column APT (ColumnApt) Cone APT (ConeApt) Taper APT (TaperApt) The APT fields themselves, rendered inline in this same panel The five types are all wrapped by AptProfile, with a different Apt assigned; which fields appear depends on the type. See APT Profile Panel for the field list and the per-type table that drives it. See the DemoBuildMachiningProject sample in the Hi.Sample repository for creating the APT profile and setting it on the cutter. CustomSpinningProfile is not offered here; the five APT types are. Flute Contours Section This part manages Fluting. It is a stem, not a leaf: the section node carries only the type selector, and the fluting itself is a sub-tree of nodes below it. Flute Contours Section (.../cutter/contours) Title Label — Fluting Fluting Type Selection Dropdown Uniform (shared baseline) — UniformFluting Free (per-flute) — FreeFluting — unset — A caption describing the chosen kind, or “Fluting unset.” while none is set Fluting Node, grown only once a fluting is set — labelled Uniform Fluting or Free Fluting For a uniform fluting: Flute Number Input Field (minimum 1) For a free fluting: a “Flutes: n” caption and an Add Flute Button, with a “No flutes yet” hint while the list is empty Flute Contour Node(s) One Baseline Contour node (.../fluting/baseline) for a uniform fluting; one Flute n node (.../fluting/flute-{i}) per flute for a free fluting Setup Angle Input Field (deg) Delete This Flute Button — free fluting only Side Contour Sub-Node (.../baseline/side, .../flute-{i}/side) Kind Selector — Const Helix / Freeform / — unset — Const Helix Side Contour form: Helix Angle (deg), Radial Rake Angle (deg), Radial Relief Angle (deg) Freeform Side Contour form: the span-position table, ordered by Z Bottom Contour Sub-Node (.../baseline/bottom, .../flute-{i}/bottom) Kind Selector — Slide / Freeform / — unset — Slide Bottom Contour form: Outer Radius (mm), Cutter Length on Bottom Projection (mm), Eccentric Angle (deg), Disk Angle (deg), Axial Rake Angle (deg) Freeform Bottom Contour form: the span-position table, ordered by R Both freeform forms share one span-position table: four numeric columns — R (mm), A (deg), Z (mm), R.Ang (deg) — one row per 4D span position, with an insert-next button that clones the row and a double-click to remove it. The header wording mirrors the CSV field order the wire format uses, and the R.Ang column carries a tooltip explaining that the radial angle feeds the bottom-surface loft. A flute contour is always committed as a whole. Editing a Setup Angle, a side contour or a bottom contour re-sends the entire contour: a uniform fluting re-sends the fluting with its current flute number, and a free fluting updates the slot at its index. Free flute node ids are positional, so adding or deleting a flute rebuilds the branch to re-point them. Picking — unset — in the Fluting Type selector is inert — the panel returns without a call, because the backend exposes no way to null a fluting. Picking — unset — on a Side or Bottom Contour, in contrast, does commit: it clears that contour on the flute. Upper Beam Section The upper beam is the cutter's shank / body above the flute. Upper Beam Section (.../cutter/upper-beam) Intro caption Warnings Banner — one orange banner per geometry issue the backend reports, e.g. an ExtendedCylinder beam whose FullLength sits below the flute top Geometry Management Control, limited to the six IGetStl kinds an upper beam can be Cylindroid ExtendedCylinder TransformationGeom StlFile Box3d GeomCombination The banner is persistent rather than a transient toast: the same unreasonable settings fail thermal physics at run time as configuration errors, so they are surfaced at edit time. Creating a geometry here is container-aware — the server builds it, sets it as the cutter's upper-beam geometry, auto-links an ExtendedCylinder to the flute with a valid seed length, and indexes it under the same key so the per-kind editor edits it in place. Each later edit resyncs the cutter and refreshes the warning list. Optimization Section This part manages MillingCutterOptOption. Optimization Section (.../cutter/opt) Enable Optimization Checkbox Controls whether the limits below are shown and active When optimization is enabled: Limit by Theoretical Minimum Feed Per Tooth Checkbox Limit by Relief Angle Checkbox Min Feed Per Tooth Input Field (mm) Max Feed Per Tooth Input Field (mm) Yielding Utilization Factor Input Field The reciprocal of the Yielding Safety Factor the server stores; the panel converts in both directions Hint caption: typical values run 0.33 (conservative) to 1.0 (aggressive) Both checkboxes are plain labelled checkboxes — neither displays a computed value. The server's defaults when a limit set is written without them are a Yielding Safety Factor of 3 (a utilization factor of about 0.33), a Max Feed Per Tooth of 999, and both limit flags on. The minimum uncut chip thickness itself is not on this surface: no cutter endpoint returns it, and no field displays it. Features Every web edit is a whole-object commit followed by a cache clear. The Flute Profile panel re-sends the entire shaper profile on any field change — only the fields the selected APT type carries are included — then clears the tool cache. The contour panels re-send the whole flute contour. The optimization panel re-sends the whole limit set. The material and coating endpoints each answer with the full cutter DTO, which the panels re-render from. A blanked numeric box commits nothing. The shared numeric field emits null for an empty entry, and every cutter panel returns on null rather than writing a zero, so clearing a field leaves the stored value alone. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — the item-type registry and the child builders: the cutter's five sections, the Material physics gate, and the fluting / flute / side / bottom sub-tree. wwwroot-src/src/router/treeRoutes.ts — role-path to route translation; CUTTER_SECTIONS pins material, profile, contours, upper-beam and opt, and it also translates a …/contours/tray… id onto the fluting segment the node carries, so both spellings of the engine's Fluting type family resolve. wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the parent Cutter node: the type selector plus the cutter's General fields. wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue — the one panel shared by the material / profile / upper-beam / opt sections, keyed off the node's last role segment. It renders the Flute Profile fields inline and delegates the other three. wwwroot-src/src/components/toolhouse/MaterialDiv.vue — the Material section: flute material, the insert-end-only shank material, the solid-end note, and the coating list. wwwroot-src/src/components/toolhouse/CoatingLayersDiv.vue — the coating rows: index badge, material picker, thickness, move toward surface / body, delete. wwwroot-src/src/components/controlTree/toolhouse/CutterContoursPanel.vue — the Flute Contours stem: the Fluting Type selector. wwwroot-src/src/components/controlTree/toolhouse/FlutingPanel.vue — the concrete fluting node: Flute Number for uniform, the flute count and Add Flute for free. wwwroot-src/src/components/controlTree/toolhouse/FluteContourPanel.vue — one flute contour node: Setup Angle, and Delete This Flute for a free flute. wwwroot-src/src/components/controlTree/toolhouse/FluteSideContourPanel.vue and wwwroot-src/src/components/controlTree/toolhouse/FluteBottomContourPanel.vue — the two sub-nodes: kind selector plus the matching form. wwwroot-src/src/components/controlTree/toolhouse/fluteContourNode.ts — the shared load and commit logic behind those three panels, and the rule that a contour is committed whole. wwwroot-src/src/components/toolhouse/fluting/ConstHelixSideContourDiv.vue, wwwroot-src/src/components/toolhouse/fluting/SlideBottomContourDiv.vue, wwwroot-src/src/components/toolhouse/fluting/FreeformSideContourDiv.vue and wwwroot-src/src/components/toolhouse/fluting/FreeformBottomContourDiv.vue — the four contour parameter forms. wwwroot-src/src/components/toolhouse/fluting/SpanContourPosListDiv.vue — the R / A / Z / R.Ang span-position table both freeform forms share. wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue — the Upper Beam section: the six allowed geometry kinds, the container-aware create, the resync-on-edit and the warnings banner. wwwroot-src/src/components/geom/GeometryEditor.vue — the shared geometry editor that section reuses. wwwroot-src/src/components/toolhouse/MillingCutterOptLimitDiv.vue — the Optimization section, including the Yielding Utilization Factor conversion. wwwroot-src/src/components/widgets/NumericInput.vue — the numeric field every cutter form uses: no G4, commit on blur or Enter, revert on an unparseable entry. wwwroot-src/src/components/widgets/FilePathInput.vue — the picker behind the material selectors; its resource-only mode hides the absolute Browse item and leaves Browse Resource…. wwwroot-src/src/stores/appState.ts — holds isShowPhysicsOptions, the Advanced Physics preference that gates the Material section. wwwroot-src/src/i18n/en/toolhouse.ts — every label quoted above: cutter.*, material.*, contour.*, fluting.*, upperBeam.* and opt.*. wwwroot-src/src/api/toolHouse.ts — the typed wrapper over /api/Cutter: shaper profile, fluting, the free-contour CRUD, the material and coating endpoints, the upper beam and the opt limit. Mech/CutterController.cs — the cutter backend: the APT construction from the profile DTO, the fluting builders, the opt-limit defaults, the solid-end shank-material mirroring, and the cache clear every field and geometry mutator performs. Mech/CutterDtoBuilder.cs — the read-side cutter DTO: integral mode, general, shaper profile, fluting, opt limit and material. Mech/ToolHouseController.cs — the tool detail that embeds that DTO, which every cutter section refreshes from. See Also Extended Cylinder Panel — the Upper Beam's kind that exists for this cutter, and the one surface that gives it a start section"
},
"anatomy/tool-house/holder/cylindroid-holder-panel.html": {
"href": "anatomy/tool-house/holder/cylindroid-holder-panel.html",
"title": "Cylindroid Holder Panel | HiAPI-C# 2025",
- "summary": "Cylindroid Holder Panel The key model is CylindroidHolder: a holder revolved from a Z-R profile, carrying its own name and note and its own STL tessellation resolution. On the web client the holder occupies two child sections of the Holder node under the selected tool — Geometry and Resolution, the nodes whose role paths end in .../holder/geometry and .../holder/resolution, reached at /tool-house/:toolId/holder/geometry and /tool-house/:toolId/holder/resolution. Its Name, readonly Abstract Note and Note are edited one level up, on the Holder Panel itself, under the Metadata-on-container convention. Every field ships on both clients; what differs is the surface hosting them — the WPF client gives the same three fields a tab of their own. Layout Web Layout Geometry Section Cylindroid Panel — the reusable Z-R pair table, driven by a model key Initializing Caption — stands in for the editor until the holder's cylindroid has been published under a key Resolution Section Resolution Hint Caption — names the STL tessellation resolution used for display and collision meshing Linear Resolution (mm) Input Field Angle Resolution (deg) Input Field WPF Layout Cylindroid Holder Panel Head Line Title Label Tabs Geometry Tab Cylindroid Panel Resolution Tab Model: PolarResolution2d Polar Resolution 2d Info Tab Name TextField (editable) AbstractNote TextField (readonly) Note TextField (editable) Remember to call UpdateByCylindroid() after geometry reference or content changed. Feature The two web sections reach the model by different routes, and that difference is why the holder resync belongs to one of them and not the other. Geometry. The section mounts the reusable Cylindroid editor on a key. Get publishes the holder's own Cylindroid in the index service under a per-session -HolderCylindroid key and hands that key back — but only when the caller supplies its session key; with no session key the response carries a null key and the section shows its initializing caption in the editor's place. The key names the same object the holder holds, so an edit lands on the holder's geometry directly. Because that generic editor mutates the bare geometry and holds no reference back to the holder, the section issues the holder resync itself after each geometry edit: UpdateGeometryContent runs UpdateByCylindroid() and then ClearCache(), recomputing the holder topology before regenerating the solid — clearing the cache alone would skip the recompute. The slave column mounts only the selected node's panel, so at most one holder-geometry panel is alive at a time and the shared key never collides. Resolution. The section writes the polar resolution straight onto the holder: SetPolarResolution assigns a fresh PolarResolution2d built from the two values and calls ClearCache(), so the server regenerates the solid cache at the new tessellation. No topology resync is involved on this path. Get also returns the current pair, which is how the two fields are seeded; a null resolution on the model is reported as 0 mm / 0 deg. Guards sit on both sides. Every action on the controller answers Not Found for an unknown tool id and Bad Request when the tool's holder is not a CylindroidHolder; SetPolarResolution additionally rejects a linear or angle value that is not greater than zero, and the Resolution section refuses to send a non-positive value at all. Both fields commit on blur or Enter. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — both sections in one panel, chosen by the last segment of the node's role path: the Cylindroid editor on the indexed key plus the resync on change, and the linear-mm / angle-deg fields with their positive-value guard. wwwroot-src/src/components/geom/CylindroidEditor.vue — the reusable Z-R profile editor the Geometry section wraps, driven by model key. wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the parent Holder node's panel, which hosts this holder's Name, readonly Abstract Note and Note and commits them through setCylindroidHolderName / setCylindroidHolderNote. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — grows the two child sections for a CylindroidHolder and routes both to the HolderSection item type. wwwroot-src/src/api/cylindroidHolder.ts — the typed wrapper over /api/CylindroidHolder: getCylindroidHolder, updateCylindroidHolderGeometry, setCylindroidHolderName, setCylindroidHolderNote, setCylindroidHolderResolution. wwwroot-src/src/i18n/en/toolhouse.ts — the two section labels, the tessellation hint, the two field labels and the initializing caption. Mech/CylindroidHolderController.cs — GET Get (name / note / abstract note, the polar resolution, and — with a session key — the indexed cylindroid key) plus POST UpdateGeometryContent | SetName | SetNote | SetPolarResolution. See Also Polar Resolution 2D Panel — the resolution editor this panel embeds Cylindroid Control — the shape editor this panel's Geometry surface embeds, and the shape whose tessellation the Resolution surface governs"
+ "summary": "Cylindroid Holder Panel The key model is CylindroidHolder: a holder revolved from a Z-R profile, carrying its own name and note and its own STL tessellation resolution. The holder occupies two child sections of the Holder node under the selected tool — Geometry and Resolution, the nodes whose role paths end in .../holder/geometry and .../holder/resolution, reached at /tool-house/:toolId/holder/geometry and /tool-house/:toolId/holder/resolution. Its Name, readonly Abstract Note and Note are edited one level up, on the Holder Panel itself, under the Metadata-on-container convention. Layout Web Layout Geometry Section Cylindroid Panel — the reusable Z-R pair table, driven by a model key Initializing Caption — stands in for the editor until the holder's cylindroid has been published under a key Resolution Section Resolution Hint Caption — names the STL tessellation resolution used for display and collision meshing Linear Resolution (mm) Input Field Angle Resolution (deg) Input Field Feature The two web sections reach the model by different routes, and that difference is why the holder resync belongs to one of them and not the other. Geometry. The section mounts the reusable Cylindroid editor on a key. Get publishes the holder's own Cylindroid in the index service under a per-session -HolderCylindroid key and hands that key back — but only when the caller supplies its session key; with no session key the response carries a null key and the section shows its initializing caption in the editor's place. The key names the same object the holder holds, so an edit lands on the holder's geometry directly. Because that generic editor mutates the bare geometry and holds no reference back to the holder, the section issues the holder resync itself after each geometry edit: UpdateGeometryContent runs UpdateByCylindroid() and then ClearCache(), recomputing the holder topology before regenerating the solid — clearing the cache alone would skip the recompute. The slave column mounts only the selected node's panel, so at most one holder-geometry panel is alive at a time and the shared key never collides. Resolution. The section writes the polar resolution straight onto the holder: SetPolarResolution assigns a fresh PolarResolution2d built from the two values and calls ClearCache(), so the server regenerates the solid cache at the new tessellation. No topology resync is involved on this path. Get also returns the current pair, which is how the two fields are seeded; a null resolution on the model is reported as 0 mm / 0 deg. Guards sit on both sides. Every action on the controller answers Not Found for an unknown tool id and Bad Request when the tool's holder is not a CylindroidHolder; SetPolarResolution additionally rejects a linear or angle value that is not greater than zero, and the Resolution section refuses to send a non-positive value at all. Both fields commit on blur or Enter. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — both sections in one panel, chosen by the last segment of the node's role path: the Cylindroid editor on the indexed key plus the resync on change, and the linear-mm / angle-deg fields with their positive-value guard. wwwroot-src/src/components/geom/CylindroidEditor.vue — the reusable Z-R profile editor the Geometry section wraps, driven by model key. wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the parent Holder node's panel, which hosts this holder's Name, readonly Abstract Note and Note and commits them through setCylindroidHolderName / setCylindroidHolderNote. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — grows the two child sections for a CylindroidHolder and routes both to the HolderSection item type. wwwroot-src/src/api/cylindroidHolder.ts — the typed wrapper over /api/CylindroidHolder: getCylindroidHolder, updateCylindroidHolderGeometry, setCylindroidHolderName, setCylindroidHolderNote, setCylindroidHolderResolution. wwwroot-src/src/i18n/en/toolhouse.ts — the two section labels, the tessellation hint, the two field labels and the initializing caption. Mech/CylindroidHolderController.cs — GET Get (name / note / abstract note, the polar resolution, and — with a session key — the indexed cylindroid key) plus POST UpdateGeometryContent | SetName | SetNote | SetPolarResolution. See Also Polar Resolution 2D Panel — the resolution editor this panel embeds Cylindroid Control — the shape editor this panel's Geometry surface embeds, and the shape whose tessellation the Resolution surface governs"
},
"anatomy/tool-house/holder/freeform-holder-panel.html": {
"href": "anatomy/tool-house/holder/freeform-holder-panel.html",
"title": "Freeform Holder Panel | HiAPI-C# 2025",
- "summary": "Freeform Holder Panel The key model is FreeformHolder: a holder whose shape comes from a referenced geometry, typically an STL, positioned by two anchor transformers — one to the spindle, one to the cutter. On the web client the holder occupies four child sections of the Holder node under the selected tool — Geometry, Geom To Spindle, Geom To Cutter and Resolution, the nodes whose role paths end in .../holder/geometry, .../holder/geom-to-spindle, .../holder/geom-to-cutter and .../holder/resolution, reached at /tool-house/:toolId/holder/:subtab. Its Name, readonly Abstract Note and Note are edited one level up, on the Holder Panel itself, under the Metadata-on-container convention. Every field ships on both clients; what differs is the surface hosting them — the WPF client gives the same fields a tab strip of its own. The three shape sections are not holder-specific editors. They are the same generic Geometry and Transformer slots the Fixture branch of the General Setup page is built from: a kind picker on the section node, and the chosen kind's own editor on the child node below it. So an STL holder is picked as StlFile and its source file set through the shared StlFile editor, a TransformationGeom holder grows Inner Geometry and Inner Transformer nodes, a GeomCombination holder grows one node per item, and each placement grows the chosen transformer kind's editor — Static Translation for the usual (0, 0, h) offset. Layout Web Layout Geometry Section Geometry Type Selector — None / Box3d / Cylindroid / StlFile / TransformationGeom / GeomCombination The chosen kind's editor, on the child node the kind grows Geom To Spindle Section — where the holder sits relative to the spindle Transformer Type Selector — Static Translation / Static Rotation / Static Freeform / Dynamic Translation / Dynamic Rotation / General Transform / No Transform The chosen kind's editor, on the child node the kind grows Geom To Cutter Section — where the cutter sits relative to the holder Transformer Type Selector and the chosen kind's editor, as above Resolution Section Resolution Hint Caption — names the STL tessellation resolution used for display and collision meshing Linear Resolution (mm) Input Field Angle Resolution (deg) Input Field WPF Layout Freeform Holder Panel Head Line Title Label Tabs Geometry Tab Geometry Management Panel Anchor Tab (Apply Transformer Manage Panel to set the following tabs) Geom To Spindle Tab Geom To Cutter Tab Resolution Tab Model: PolarResolution2d Polar Resolution 2d Info Tab Name TextField (editable) AbstractNote TextField (readonly) Note TextField (editable) Remember to call UpdateByGeom() after geometry reference or content changed. Feature The generic editors reach the holder's own members, and that is what makes the split work. When the Holder node's children are built, the page calls FreeformHolderController's Get with its session key; the server publishes the holder's Geom, GeomToSpindleTransformer and GeomToCutterTransformer in the index service under three per-session keys (-HolderGeom, -HolderGeomToSpindle, -HolderGeomToCutter) and hands the keys back. The keys name the very objects the holder holds, so an edit through a kind editor lands on the holder directly. The keys are returned even when a member is empty — nothing is published then, the section's picker reads an empty slot, and picking a kind fills that same key — which is how a freshly switched-to Freeform holder, whose geometry starts empty, gets its first shape. Picking a kind is a container-aware create, not a bare New. The Geometry picker calls CreateGeometry, which builds the geometry, sets it as the holder's Geom and publishes it under the section's key (None clears the geometry). A placement picker first creates the transformer through the kind's own New endpoint and then attaches it with UpdateGeomToSpindleTransformer or UpdateGeomToCutterTransformer. Without the attach, only the index-service entry would change and the holder would keep pointing at its old transformer. Because the generic editors hold no reference back to the holder, every edit at or below a section ends in the holder resync the page wires onto the section: a geometry edit calls UpdateGeometryContent, a placement edit re-attaches the transformer under its key. Both run UpdateByGeom() to regenerate the solid, ClearCache(), and AlignAnchorByExposedCutterHeight() to re-place the cutter under the holder — clearing the cache alone would leave the cutter where it was. The page then refreshes the tool list and the canvas. The Resolution section writes the polar resolution straight onto the holder: SetPolarResolution assigns a fresh PolarResolution2d and the holder swaps its solid for one born with the new value, keeping the geometry. Get also returns the current pair, which is how the two fields are seeded. Guards sit on both sides. Every action on the controller answers Not Found for an unknown tool id and Bad Request when the tool's holder is not a FreeformHolder; SetPolarResolution rejects a linear or angle value that is not greater than zero, and the Resolution section refuses to send one. Fields commit on blur or Enter. Switching a tool to Freeform is a committing choice. SetHolderType assigns a new FreeformHolder only when the tool does not already carry one, so a holder authored on the WPF client or through HiNcRcl survives a round trip through the web page with its geometry, anchors and resolution intact. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — grows the four child sections for a FreeformHolder: reads Get to publish the three members, binds the Geometry section to the generic Geometry item type and the two placements to the generic Transformer item type (with the create hooks and the resync chain), and routes Resolution to the HolderSection item type. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue / TransformerSlotPanel.vue — the kind pickers on the three shape sections; the chosen kind's editor lives on the child node (wwwroot-src/src/components/geom/geometryEditors.ts, wwwroot-src/src/components/topo/transformerEditors.ts). wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the Resolution section, dispatching on the holder type to FreeformHolderController for a Freeform holder. wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the parent Holder node's panel, which hosts this holder's Name, readonly Abstract Note and Note and commits them through setFreeformHolderName / setFreeformHolderNote. wwwroot-src/src/api/freeformHolder.ts — the typed wrapper over /api/FreeformHolder: getFreeformHolder, createFreeformHolderGeometry, updateFreeformHolderGeometry, resyncFreeformHolder, updateFreeformHolderGeomToSpindle, updateFreeformHolderGeomToCutter, setFreeformHolderName, setFreeformHolderNote, setFreeformHolderResolution. wwwroot-src/src/i18n/en/toolhouse.ts — the two placement section labels (toolhouse.node.geomToSpindle / geomToCutter) and the Freeform sections hint; the zh-Hans and zh-Hant files carry the same keys. Mech/FreeformHolderController.cs — GET Get (name / note / abstract note, the polar resolution, and — with a session key — the three member keys) plus POST CreateGeometry | UpdateGeometry | IndexCurrentGeometry | UpdateGeometryContent | UpdateGeomToSpindleTransformer | UpdateGeomToCutterTransformer | SetName | SetNote | SetPolarResolution. See Also Polar Resolution 2D Panel — the resolution editor this panel embeds Fixture Page — the other user of the generic Geometry and Transformer slots this holder's shape sections are made of"
+ "summary": "Freeform Holder Panel The key model is FreeformHolder: a holder whose shape comes from a referenced geometry, typically an STL, positioned by two anchor transformers — one to the spindle, one to the cutter. The holder occupies four child sections of the Holder node under the selected tool — Geometry, Geom To Spindle, Geom To Cutter and Resolution, the nodes whose role paths end in .../holder/geometry, .../holder/geom-to-spindle, .../holder/geom-to-cutter and .../holder/resolution, reached at /tool-house/:toolId/holder/:subtab. Its Name, readonly Abstract Note and Note are edited one level up, on the Holder Panel itself, under the Metadata-on-container convention. The three shape sections are not holder-specific editors. They are the same generic Geometry and Transformer slots the Fixture branch of the General Setup page is built from: a kind picker on the section node, and the chosen kind's own editor on the child node below it. So an STL holder is picked as StlFile and its source file set through the shared StlFile editor, a TransformationGeom holder grows Inner Geometry and Inner Transformer nodes, a GeomCombination holder grows one node per item, and each placement grows the chosen transformer kind's editor — Static Translation for the usual (0, 0, h) offset. Layout Web Layout Geometry Section Geometry Type Selector — None / Box3d / Cylindroid / StlFile / TransformationGeom / GeomCombination The chosen kind's editor, on the child node the kind grows Geom To Spindle Section — where the holder sits relative to the spindle Transformer Type Selector — Static Translation / Static Rotation / Static Freeform / Dynamic Translation / Dynamic Rotation / General Transform / No Transform The chosen kind's editor, on the child node the kind grows Geom To Cutter Section — where the cutter sits relative to the holder Transformer Type Selector and the chosen kind's editor, as above Resolution Section Resolution Hint Caption — names the STL tessellation resolution used for display and collision meshing Linear Resolution (mm) Input Field Angle Resolution (deg) Input Field Feature The generic editors reach the holder's own members, and that is what makes the split work. When the Holder node's children are built, the page calls FreeformHolderController's Get with its session key; the server publishes the holder's Geom, GeomToSpindleTransformer and GeomToCutterTransformer in the index service under three per-session keys (-HolderGeom, -HolderGeomToSpindle, -HolderGeomToCutter) and hands the keys back. The keys name the very objects the holder holds, so an edit through a kind editor lands on the holder directly. The keys are returned even when a member is empty — nothing is published then, the section's picker reads an empty slot, and picking a kind fills that same key — which is how a freshly switched-to Freeform holder, whose geometry starts empty, gets its first shape. Picking a kind is a container-aware create, not a bare New. The Geometry picker calls CreateGeometry, which builds the geometry, sets it as the holder's Geom and publishes it under the section's key (None clears the geometry). A placement picker first creates the transformer through the kind's own New endpoint and then attaches it with UpdateGeomToSpindleTransformer or UpdateGeomToCutterTransformer. Without the attach, only the index-service entry would change and the holder would keep pointing at its old transformer. Because the generic editors hold no reference back to the holder, every edit at or below a section ends in the holder resync the page wires onto the section: a geometry edit calls UpdateGeometryContent, a placement edit re-attaches the transformer under its key. Both run UpdateByGeom() to regenerate the solid, ClearCache(), and AlignAnchorByExposedCutterHeight() to re-place the cutter under the holder — clearing the cache alone would leave the cutter where it was. The page then refreshes the tool list and the canvas. The Resolution section writes the polar resolution straight onto the holder: SetPolarResolution assigns a fresh PolarResolution2d and the holder swaps its solid for one born with the new value, keeping the geometry. Get also returns the current pair, which is how the two fields are seeded. Guards sit on both sides. Every action on the controller answers Not Found for an unknown tool id and Bad Request when the tool's holder is not a FreeformHolder; SetPolarResolution rejects a linear or angle value that is not greater than zero, and the Resolution section refuses to send one. Fields commit on blur or Enter. Switching a tool to Freeform is a committing choice. SetHolderType assigns a new FreeformHolder only when the tool does not already carry one, so a holder authored elsewhere — through HiNcRcl, say — survives a round trip through this page with its geometry, anchors and resolution intact. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — grows the four child sections for a FreeformHolder: reads Get to publish the three members, binds the Geometry section to the generic Geometry item type and the two placements to the generic Transformer item type (with the create hooks and the resync chain), and routes Resolution to the HolderSection item type. wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue / TransformerSlotPanel.vue — the kind pickers on the three shape sections; the chosen kind's editor lives on the child node (wwwroot-src/src/components/geom/geometryEditors.ts, wwwroot-src/src/components/topo/transformerEditors.ts). wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the Resolution section, dispatching on the holder type to FreeformHolderController for a Freeform holder. wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the parent Holder node's panel, which hosts this holder's Name, readonly Abstract Note and Note and commits them through setFreeformHolderName / setFreeformHolderNote. wwwroot-src/src/api/freeformHolder.ts — the typed wrapper over /api/FreeformHolder: getFreeformHolder, createFreeformHolderGeometry, updateFreeformHolderGeometry, resyncFreeformHolder, updateFreeformHolderGeomToSpindle, updateFreeformHolderGeomToCutter, setFreeformHolderName, setFreeformHolderNote, setFreeformHolderResolution. wwwroot-src/src/i18n/en/toolhouse.ts — the two placement section labels (toolhouse.node.geomToSpindle / geomToCutter) and the Freeform sections hint; the zh-Hans and zh-Hant files carry the same keys. Mech/FreeformHolderController.cs — GET Get (name / note / abstract note, the polar resolution, and — with a session key — the three member keys) plus POST CreateGeometry | UpdateGeometry | IndexCurrentGeometry | UpdateGeometryContent | UpdateGeomToSpindleTransformer | UpdateGeomToCutterTransformer | SetName | SetNote | SetPolarResolution. See Also Polar Resolution 2D Panel — the resolution editor this panel embeds Fixture Page — the other user of the generic Geometry and Transformer slots this holder's shape sections are made of"
},
"anatomy/tool-house/holder/holder-panel.html": {
"href": "anatomy/tool-house/holder/holder-panel.html",
"title": "Holder Panel | HiAPI-C# 2025",
- "summary": "Holder Panel This section describes the user interface and behavior for managing different types of tool holders in the application. Tool holders are crucial components in defining a complete tool assembly. Note While tool holders are essential components in real-world machining operations, some users may choose not to define them in simulation environments for convenience, particularly when collision detection is not a primary concern. The system allows for this flexibility, though it's recommended to include holders for accurate representation and comprehensive collision analysis. The primary models involved are subclasses of IHolder. Two common types are: Cylindroid Holder: Represents holders with a cylindrical geometry. See CylindroidHolder. Freeform Holder: Represents holders with more complex, freeform geometry, often defined by STL files. See FreeformHolder. Each holder type has its own user interface elements for defining its geometry and properties. On the web client this panel is the Holder tab of the Tool House Page, reached at /tool-house/:toolId/holder. It is the panel of the Control-Tree Holder node under the selected tool — the node whose role path ends in .../holder. Layout Web Layout Holder Node Panel Title Label Holder Type Selector — None / Cylindroid Holder / Freeform Holder Holder branch, rendered while the type is Cylindroid or Freeform Name TextField (editable) Abstract Note TextField (readonly, derived by the model) Note TextField (editable) Sections Hint Caption — names the sections below for the current type No-holder branch — one hint, toolhouse.holder.noHolderHint, inviting the reader to pick Cylindroid Holder or Freeform Holder The three identity fields belong to whichever holder the tool carries. They sit on this panel under the Metadata-on-container convention — a container's own General fields are edited on the container's panel instead of in a General child — and they commit through the per-type holder controller's SetName and SetNote (CylindroidHolderController or FreeformHolderController), not through ToolHouseController. No holder leaves the panel without them. The type also decides what grows below the node. A Cylindroid holder grows two child sections, Geometry and Resolution — the nodes whose role paths end in .../holder/geometry and .../holder/resolution; see Cylindroid Holder Panel. A Freeform holder grows four — Geometry, Geom To Spindle, Geom To Cutter and Resolution; see Freeform Holder Panel. Selecting a section replaces this panel in the slave column with that section's own panel. None grows no children, so the Holder node is a leaf and the hint is the whole surface. This panel carries no object management of its own. Object management for the tool library sits on the tool-house root node, where the Object Management Menu Button is bound to the whole .MachiningToolHouse file rather than to a per-holder file. WPF Layout Holder Panel Head Line Object Management Menu Button File extension is .Holder, load type IHolder The pointed Editor Panel is the Holder Sub Management Panel. Title Label Holder Management Panel Holder Type Selection Bar — None / Cylindroid / Freeform Holder Sub Management Panel A ContentPresenter whose content varies by the Holder Type: the Cylindroid Holder Panel, the Freeform Holder Panel, or nothing for None. Feature Committing a type on the web is one server call plus a cache clear. SetHolderType maps the selector value onto the holder classes: none clears the tool's holder, while cylindroid and freeform each assign a new holder only when the tool does not already carry one of that class — so re-picking the type a tool already has keeps the holder it has, and the edits on it, rather than replacing it. When the caller passes its session key the server re-indexes the resulting holder under that session's holder key, and removes that entry for None, so the session key keeps pointing at the tool's current holder. The response carries the holder's class name and its abstract note. The panel then calls ClearToolCache, which clears the tool's cached solids and, when the holder implements IClearCache, the holder's own cache as well, so the tool canvas redraws against the new holder. Finally it emits a structure change for its own node, which is how the Geometry and Resolution sections appear or disappear with the type. GetHolder reports the same pair — class name and abstract note — and is what the panel reads on mount to seed the selector; an unknown tool id answers Not Found. The panel then reads the per-type controller's Get (CylindroidHolderController or FreeformHolderController) to fill the three identity fields; for a Freeform holder that same call also publishes the holder's geometry and two placements under the session's keys for the sections below. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the Holder node's panel: the None / Cylindroid / Freeform selector, the holder's Name / readonly Abstract Note / Note (committed through the per-type controller) and the no-holder hint. Commits a type change through setHolderType followed by clearToolCache. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — registers this panel as the ToolHolder item type; its holder child builder grows Geometry and Resolution for a CylindroidHolder, Geometry / Geom To Spindle / Geom To Cutter / Resolution for a FreeformHolder, and nothing for None. wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the panel behind the Cylindroid holder's two sections and both holders' Resolution section, dispatching on the last segment of the node's role path and on the holder type. wwwroot-src/src/components/controlTree/toolhouse/ToolHouseRootPanel.vue — the tool-house root panel, which carries the Object Management Menu Button for the .MachiningToolHouse file. wwwroot-src/src/api/toolHouse.ts — getHolder, setHolderType and clearToolCache, plus the HolderType union (None / CylindroidHolder / FreeformHolder) the selector's three values map onto. wwwroot-src/src/api/cylindroidHolder.ts / wwwroot-src/src/api/freeformHolder.ts — get…Holder, set…HolderName and set…HolderNote for each holder type, behind the three identity fields. wwwroot-src/src/i18n/en/toolhouse.ts — the toolhouse.holder.* strings this panel renders: holderType, abstractNote, sectionsHint, freeformSectionsHint, noHolderHint, cylindroidHolder, freeformHolder. Mech/ToolHouseController.cs — POST SetHolderType, GET GetHolder and POST ClearToolCache, the three endpoints behind the selector. Per-holder-type editing lives in the dedicated holder controllers."
+ "summary": "Holder Panel This section describes the user interface and behavior for managing different types of tool holders in the application. Tool holders are crucial components in defining a complete tool assembly. Note While tool holders are essential components in real-world machining operations, some users may choose not to define them in simulation environments for convenience, particularly when collision detection is not a primary concern. The system allows for this flexibility, though it's recommended to include holders for accurate representation and comprehensive collision analysis. The primary models involved are subclasses of IHolder. Two common types are: Cylindroid Holder: Represents holders with a cylindrical geometry. See CylindroidHolder. Freeform Holder: Represents holders with more complex, freeform geometry, often defined by STL files. See FreeformHolder. Each holder type has its own user interface elements for defining its geometry and properties. This panel is the Holder tab of the Tool House Page, reached at /tool-house/:toolId/holder. It is the panel of the Control-Tree Holder node under the selected tool — the node whose role path ends in .../holder. Layout Web Layout Holder Node Panel Title Label Holder Type Selector — None / Cylindroid Holder / Freeform Holder Holder branch, rendered while the type is Cylindroid or Freeform Name TextField (editable) Abstract Note TextField (readonly, derived by the model) Note TextField (editable) Sections Hint Caption — names the sections below for the current type No-holder branch — one hint, toolhouse.holder.noHolderHint, inviting the reader to pick Cylindroid Holder or Freeform Holder The three identity fields belong to whichever holder the tool carries. They sit on this panel under the Metadata-on-container convention — a container's own General fields are edited on the container's panel instead of in a General child — and they commit through the per-type holder controller's SetName and SetNote (CylindroidHolderController or FreeformHolderController), not through ToolHouseController. No holder leaves the panel without them. The type also decides what grows below the node. A Cylindroid holder grows two child sections, Geometry and Resolution — the nodes whose role paths end in .../holder/geometry and .../holder/resolution; see Cylindroid Holder Panel. A Freeform holder grows four — Geometry, Geom To Spindle, Geom To Cutter and Resolution; see Freeform Holder Panel. Selecting a section replaces this panel in the slave column with that section's own panel. None grows no children, so the Holder node is a leaf and the hint is the whole surface. This panel carries no object management of its own. Object management for the tool library sits on the tool-house root node, where the Object Management Menu Button is bound to the whole .MachiningToolHouse file rather than to a per-holder file. Feature Committing a type is one server call plus a cache clear. SetHolderType maps the selector value onto the holder classes: none clears the tool's holder, while cylindroid and freeform each assign a new holder only when the tool does not already carry one of that class — so re-picking the type a tool already has keeps the holder it has, and the edits on it, rather than replacing it. When the caller passes its session key the server re-indexes the resulting holder under that session's holder key, and removes that entry for None, so the session key keeps pointing at the tool's current holder. The response carries the holder's class name and its abstract note. The panel then calls ClearToolCache, which clears the tool's cached solids and, when the holder implements IClearCache, the holder's own cache as well, so the tool canvas redraws against the new holder. Finally it emits a structure change for its own node, which is how the Geometry and Resolution sections appear or disappear with the type. GetHolder reports the same pair — class name and abstract note — and is what the panel reads on mount to seed the selector; an unknown tool id answers Not Found. The panel then reads the per-type controller's Get (CylindroidHolderController or FreeformHolderController) to fill the three identity fields; for a Freeform holder that same call also publishes the holder's geometry and two placements under the session's keys for the sections below. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the Holder node's panel: the None / Cylindroid / Freeform selector, the holder's Name / readonly Abstract Note / Note (committed through the per-type controller) and the no-holder hint. Commits a type change through setHolderType followed by clearToolCache. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — registers this panel as the ToolHolder item type; its holder child builder grows Geometry and Resolution for a CylindroidHolder, Geometry / Geom To Spindle / Geom To Cutter / Resolution for a FreeformHolder, and nothing for None. wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the panel behind the Cylindroid holder's two sections and both holders' Resolution section, dispatching on the last segment of the node's role path and on the holder type. wwwroot-src/src/components/controlTree/toolhouse/ToolHouseRootPanel.vue — the tool-house root panel, which carries the Object Management Menu Button for the .MachiningToolHouse file. wwwroot-src/src/api/toolHouse.ts — getHolder, setHolderType and clearToolCache, plus the HolderType union (None / CylindroidHolder / FreeformHolder) the selector's three values map onto. wwwroot-src/src/api/cylindroidHolder.ts / wwwroot-src/src/api/freeformHolder.ts — get…Holder, set…HolderName and set…HolderNote for each holder type, behind the three identity fields. wwwroot-src/src/i18n/en/toolhouse.ts — the toolhouse.holder.* strings this panel renders: holderType, abstractNote, sectionsHint, freeformSectionsHint, noHolderHint, cylindroidHolder, freeformHolder. Mech/ToolHouseController.cs — POST SetHolderType, GET GetHolder and POST ClearToolCache, the three endpoints behind the selector. Per-holder-type editing lives in the dedicated holder controllers."
},
"anatomy/tool-house/holder/index.html": {
"href": "anatomy/tool-house/holder/index.html",
@@ -442,12 +442,12 @@
"anatomy/tool-house/index.html": {
"href": "anatomy/tool-house/index.html",
"title": "Tool House Page | HiAPI-C# 2025",
- "summary": "Tool House Page The Tool House is a page of its own at /tool-house/:toolId?/:tab?/:subtab?, reached from the menu bar's Page ▾ dropdown. In the WPF client it is a sub-window opened from the Main Panel. The key model is MachiningToolHouse. The model UserService is per-client. On the web it is the server-side Environments/UserService.cs, which Mech/ToolHouseDisplayController.cs reads EnablePhysics from; the WPF client resolves its own UserService from the application's service provider. Layout Three columns, left to right, in two nested resizable splitters — the tool house and its tool list, the selected tool's editor tabs, and the tool canvas. Creating a tool opens no window of its own: New Tool adds a default tool and the user sets it up in the editor tabs. Tool House Page Tool List Column Tool House Root Panel Object Management Menu Button file extension is .MachiningToolHouse, load type Hi.Machining.MachiningToolHouse, HiMech The managed object is the whole tool house, not one tool New Tool Button (disabled until the project has a tool house) Ready / No-Project Badge Tool-count caption with the pick hint — replaced, while the project has no tool house, by an empty-state block naming New Tool and the Object Management button's .MachiningToolHouse extension Tool List one router-link row per tool: the Tool ID badge, then the tool's note — or the auto abstract note as an italic caption when the note is empty Selected Tool Editor Column Stick Tool Panel — the tool's five tabs: General, Cutter, Holder, Clamping, Int. Holder Viewer Column Viewer ToolBar RenderingCanvas Tool Bar Display Options Menu Dropdown — three flat groups, no submenus Head Label: Cutter Show Cutter CheckBox Head Label: Holder Show Holder CheckBox Show Geometry Anchor CheckBox Show Spindle Buckle CheckBox Show Cutter Buckle CheckBox Head Label: Holder Rendering Mode Solid / Edge / Hide Radio Buttons Selected-Tool Badge Rendering-Connection Badge RenderingCanvas The DispEngine.Displayee is MillingToolEditorDisplayee. The three anchor-and-buckle flags of HolderEditorDisplayee and the Holder Rendering Mode radios are all disabled while Show Holder is off, so a child option is reachable only when its parent is on. The menu is one flat list of labelled groups rather than nested submenus, which is what keeps it one click deep. The cutter's shape mode is not a control here. The server picks it when the canvas binds: InitializeDisplay sets ShapeMode to Solid Bounding Shape whenever UserService.EnablePhysics is false, and the web Display Options dropdown offers no switch for it. The WPF page is the client whose Editor Displayee Options menu carries the Solid Bounding Shape / Detail Physics Shape radio submenu. The left column is the other place the two clients differ. The WPF Tool House page lists its tools in a DataGrid with a checkbox column, an editable Tool ID column and a read-only Note column, and puts a Batch Actions menu above it — Select All, De-Select All, then Batch Duplicate and Batch Delete — with Duplicate and Delete also on the grid's context menu. On the web page Tool ID and Note are edited on the selected tool's General tab, where Duplicate and Delete are per-tool icon buttons, so the list itself stays a plain navigation column of router links. The Tool ID can not be repeated. Create Tool takes the largest existing ID plus 1 (or 1 in an empty house), Duplicate Tool inserts the clone at the first free ID past both the source and the largest existing ID, and renaming a tool onto an ID the house already holds is refused as a conflict. When the canvas first binds, InitializeDisplay attaches the MillingToolEditorDisplayee and snaps the camera to the isometric view. Each later tool selection re-points that displayee's MillingToolGetter at the chosen tool and calls the renderingCanvas.DispEngine.SetViewToHomeView(). Duplication Button Use Duplicate(params object[]) to duplicate the tool; the clone joins the house under a fresh ID. Tool Row Note A tool's row shows its note when the note exists and is not an empty string; otherwise it shows the AbstractNote, set in an italic caption so the auto-derived text reads as a fallback. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA). The page is built on the shared Control Tree: the tool nodes on the left, the selected node's tab cascade in the middle, the canvas on the right. wwwroot-src/src/router/routes.ts — declares the route itself: path tool-house/:toolId(\\d+)?/:tab?/:subtab?, name tool-house. wwwroot-src/src/components/AppMenuBar.vue — the Page ▾ dropdown; its first item targets the tool-house route. wwwroot-src/src/router/treeRoutes.ts — declares TOOL_TABS, CUTTER_SECTIONS and HOLDER_SECTIONS, and routeForTreeId / migrateLegacyTreeId, which map a Control-Tree id onto this page's tab params. wwwroot-src/src/composables/useRouteTabs.ts — the :tab? / :subtab? URL sync, defaulting to general, and to profile under Cutter / geometry under Holder. wwwroot-src/src/composables/useToolHouse.ts — the module-singleton state every tool-house panel and the canvas share: the tool list, the active tool, the tool-house key and the rendering connection id. wwwroot-src/src/pages/ToolHousePage.vue — routed page: ToolHouseRootPanel + tool list on the left, the tool's own five-tab strip in the middle, ToolHouseSetupPanel on the right, in two nested resizable panes. Cutter and Holder grow a second, URL-synced sub-tab strip from the tab node's children, and NodeTabCascade.vue hosts the active tab's panel and the levels nested below it. wwwroot-src/src/components/controlTree/NodeTabCascade.vue — the nested-level host the page mounts inside the active tab. wwwroot-src/src/components/toolhouse/ToolHouseSetupPanel.vue — the canvas column: one RenderingCanvas bound server-side to MillingToolEditorDisplayee, following the page's selected tool, with the Display Options dropdown (Show Cutter / Show Holder + the 3 anchor-and-buckle flags + the Holder Rendering Mode radios). wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue — the generic groups/items dropdown that panel feeds, which is why the menu is flat groups rather than nested submenus. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — the tool house's ItemType registry: one tool node per tool, and each tool node's …/cutter, …/holder, …/clamping, …/intelligent children. wwwroot-src/src/components/controlTree/toolhouse/ToolHouseRootPanel.vue — the tool-house root node: Object Management over the MachiningToolHouse + New Tool. The button's own entries are Load, Save As, Copy, Paste and XML; the Load Resource entry is conditional on a resourceDirectory prop this panel does not pass, so it is absent here. wwwroot-src/src/components/controlTree/toolhouse/ToolNodePanel.vue — one tool's General tab: Tool ID / Note / auto Abstract Note + Duplicate / Delete. Mounting it points the tool canvas at that tool. wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the Cutter stem: cutter type selector plus the MillingCutter identity fields (Shank Mass / Hone Radius / Relief Angle). wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue — the cutter's inner tabs, keyed off the node's role path (material / profile / upper-beam / opt). Flute Profile is edited inline; the others dispatch to wwwroot-src/src/components/toolhouse/MaterialDiv.vue (which grows CoatingLayersDiv.vue), wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue and wwwroot-src/src/components/toolhouse/MillingCutterOptLimitDiv.vue. wwwroot-src/src/components/controlTree/toolhouse/CutterContoursPanel.vue — the Flute Contours stem: the fluting type selector only. The selected fluting's editor grows below it. wwwroot-src/src/components/controlTree/toolhouse/FlutingPanel.vue — the concrete fluting node and its fluting-level fields; uniform fluting grows one Baseline Contour, free fluting one tab per flute. wwwroot-src/src/components/controlTree/toolhouse/FluteContourPanel.vue — one flute contour node (baseline, or flute- for a free fluting): hosts Setup Angle, with Side Contour and Bottom Contour as sub-tabs. fluteContourNode.ts carries the shared re-commit. wwwroot-src/src/components/controlTree/toolhouse/FluteSideContourPanel.vue / FluteBottomContourPanel.vue — kind selector + editor, dispatching to wwwroot-src/src/components/toolhouse/fluting/ConstHelixSideContourDiv.vue, FreeformSideContourDiv.vue, SlideBottomContourDiv.vue and FreeformBottomContourDiv.vue; the two freeform editors share SpanContourPosListDiv.vue for the per-flute position list. wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the Holder stem: holder type selector plus the holder's Name / Note / auto Abstract Note, committed through the per-type holder controller. wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the Cylindroid holder's Geometry (the Z-R profile, via wwwroot-src/src/components/geom/CylindroidEditor.vue) and both holders' Resolution tabs; resyncs the Cylindroid holder (UpdateByCylindroid()) after each geometry edit. A Freeform holder's Geometry / Geom To Spindle / Geom To Cutter tabs are the generic Geometry / Transformer Control-Tree slots (wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue / TransformerSlotPanel.vue), wired by toolHouseItemTypes.ts to FreeformHolderController's keys and resync. wwwroot-src/src/components/controlTree/toolhouse/ToolClampingPanel.vue — the Clamping tab: ExposedCutterHeight = PreservedDistance + FluteHeight; changing either field updates the other on the server. wwwroot-src/src/components/controlTree/toolhouse/ToolIntelligentPanel.vue — the Intelligent Holder tab; a thin wrapper over wwwroot-src/src/components/toolhouse/IntelligentHolderDiv.vue (Observation Location: ObservationAnchorReference dropdown + relative Z + ring radius). wwwroot-src/src/api/toolHouse.ts — typed wrapper over three server modules: ToolHouseController (/api/ToolHouse), CutterController (/api/Cutter) and ToolHouseDisplayController (/api/mech/tool-house-display). wwwroot-src/src/api/cylindroidHolder.ts / wwwroot-src/src/api/freeformHolder.ts — typed wrappers over CylindroidHolderController / FreeformHolderController. Mech/ToolHouseController.cs — the tool-house collection and the tool-level fields. REST endpoints: GET /, GET /{id}, GET /GetHolder, GET/PUT /{id}/observation, PUT /{id}/note | exposed-height | preserved-distance, POST /Initialize | Update | SelectTool | CreateTool | DuplicateTool | RenameTool | SetHolderType | ClearToolCache, DELETE /DeleteTool. Mech/CutterController.cs — cutter editing, the /api/Cutter sibling of ToolHouseController. REST endpoints at /api/Cutter/*: POST EnsureCutter | ClearCutter, PUT /{id}/shaper-profile | fluting | general | opt-limit, FreeFluting child CRUD at /{id}/fluting/contours[/{index}], GET/POST /{id}/upper-beam[/create | /resync], and the material endpoints /{id}/flute-material/*, /{id}/shank-material/*, /{id}/coating-layers/*. Mech/ToolHouseDisplayController.cs — REST endpoints at /api/mech/tool-house-display/* for display options (initialize, select-tool, show-cutter / show-holder / show-geom-anchor / show-spindle-buckle / show-cutter-buckle, holder-rendering-mode, cutter-shape-mode, clear-cache). initialize attaches the MillingToolEditorDisplayee and snaps to the isometric view; select-tool re-points the MillingToolGetter and snaps to the home view. It also reports enablePhysics from UserService. Mech/CylindroidHolderController.cs — holder-aware layer over a tool's CylindroidHolder. REST endpoints at /api/CylindroidHolder/*: GET Get (returns name / note / abstract note / resolution + indexes the holder's Cylindroid), POST UpdateGeometryContent | SetName | SetNote | SetPolarResolution. UpdateGeometryContent is the post-edit resync (UpdateByCylindroid() + ClearCache()) that the generic CylindroidController cannot perform. Mech/FreeformHolderController.cs — the Freeform counterpart. REST endpoints at /api/FreeformHolder/*: GET Get (name / note / abstract note / resolution + indexes the holder's geometry and two placement transformers under per-session keys), POST CreateGeometry | UpdateGeometry | IndexCurrentGeometry | UpdateGeometryContent | UpdateGeomToSpindleTransformer | UpdateGeomToCutterTransformer | SetName | SetNote | SetPolarResolution. Every shape edit ends in UpdateByGeom() + ClearCache() + AlignAnchorByExposedCutterHeight(), the resync the generic geometry and transformer controllers cannot perform. Environments/UserService.cs — the web client's own per-user service, living on the server; ToolHouseDisplayController reads EnablePhysics from it. Note The fluting type is named loosely on the wire, and every spelling resolves. PUT /{id}/fluting accepts UniformFluting / uniform and FreeFluting / free, and equally UniformContourTray / FreeContourTray. A Control-Tree id whose cutter branch reads …/contours/tray… resolves to the …/contours/fluting… node. One editor lives on the WPF client only, and the app says so where the type is chosen: the FreeformRemover cutter. Selecting that type on the web page keeps the existing model intact and shows a note pointing at the WPF client or HiNcRcl. Three smaller surfaces are likewise the WPF client's: the InsertCutter and FluteInnerBeam physics groups, and the CustomSpinningProfile shaper-profile type — the web profile tab offers the five APT types (General / Ball / Column / Cone / Taper). See Also Cutter Tab — the cutter half of a tool, and the editors each cutter type grows Holder Tab — the holder half, and the editors each holder type grows Stick Tool Panel — the selected tool’s tab cascade, which those two tabs belong to General Setup Page — the equipment these tools are mounted into"
+ "summary": "Tool House Page The Tool House is a page of its own at /tool-house/:toolId?/:tab?/:subtab?, reached from the menu bar's Page ▾ dropdown. The key model is MachiningToolHouse. The model UserService is the server-side Environments/UserService.cs, which Mech/ToolHouseDisplayController.cs reads EnablePhysics from. Layout Three columns, left to right, in two nested resizable splitters — the tool house and its tool list, the selected tool's editor tabs, and the tool canvas. Creating a tool opens no window of its own: New Tool adds a default tool and the user sets it up in the editor tabs. Tool House Page Tool List Column Tool House Root Panel Object Management Menu Button file extension is .MachiningToolHouse, load type Hi.Machining.MachiningToolHouse, HiMech The managed object is the whole tool house, not one tool New Tool Button (disabled until the project has a tool house) Ready / No-Project Badge Tool-count caption with the pick hint — replaced, while the project has no tool house, by an empty-state block naming New Tool and the Object Management button's .MachiningToolHouse extension Tool List one router-link row per tool: the Tool ID badge, then the tool's note — or the auto abstract note as an italic caption when the note is empty Selected Tool Editor Column Stick Tool Panel — the tool's five tabs: General, Cutter, Holder, Clamping, Int. Holder Viewer Column Viewer ToolBar RenderingCanvas Tool Bar Display Options Menu Dropdown — three flat groups, no submenus Head Label: Cutter Show Cutter CheckBox Head Label: Holder Show Holder CheckBox Show Geometry Anchor CheckBox Show Spindle Buckle CheckBox Show Cutter Buckle CheckBox Head Label: Holder Rendering Mode Solid / Edge / Hide Radio Buttons Selected-Tool Badge Rendering-Connection Badge RenderingCanvas The DispEngine.Displayee is MillingToolEditorDisplayee. The three anchor-and-buckle flags of HolderEditorDisplayee and the Holder Rendering Mode radios are all disabled while Show Holder is off, so a child option is reachable only when its parent is on. The menu is one flat list of labelled groups rather than nested submenus, which is what keeps it one click deep. The cutter's shape mode is not a control here. The server picks it when the canvas binds: InitializeDisplay sets ShapeMode to Solid Bounding Shape whenever UserService.EnablePhysics is false, and the Display Options dropdown offers no switch for it. The left column carries no editing of its own. Tool ID and Note are edited on the selected tool's General tab, where Duplicate and Delete are per-tool icon buttons, so the list stays a plain navigation column of router links. There is no batch selection and no batch action. The Tool ID can not be repeated. Create Tool takes the largest existing ID plus 1 (or 1 in an empty house), Duplicate Tool inserts the clone at the first free ID past both the source and the largest existing ID, and renaming a tool onto an ID the house already holds is refused as a conflict. When the canvas first binds, InitializeDisplay attaches the MillingToolEditorDisplayee and snaps the camera to the isometric view. Each later tool selection re-points that displayee's MillingToolGetter at the chosen tool and calls the renderingCanvas.DispEngine.SetViewToHomeView(). Duplication Button Use Duplicate(params object[]) to duplicate the tool; the clone joins the house under a fresh ID. Tool Row Note A tool's row shows its note when the note exists and is not an empty string; otherwise it shows the AbstractNote, set in an italic caption so the auto-derived text reads as a fallback. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA). The page is built on the shared Control Tree: the tool nodes on the left, the selected node's tab cascade in the middle, the canvas on the right. wwwroot-src/src/router/routes.ts — declares the route itself: path tool-house/:toolId(\\d+)?/:tab?/:subtab?, name tool-house. wwwroot-src/src/components/AppMenuBar.vue — the Page ▾ dropdown; its first item targets the tool-house route. wwwroot-src/src/router/treeRoutes.ts — declares TOOL_TABS, CUTTER_SECTIONS and HOLDER_SECTIONS, and routeForTreeId / migrateLegacyTreeId, which map a Control-Tree id onto this page's tab params. wwwroot-src/src/composables/useRouteTabs.ts — the :tab? / :subtab? URL sync, defaulting to general, and to profile under Cutter / geometry under Holder. wwwroot-src/src/composables/useToolHouse.ts — the module-singleton state every tool-house panel and the canvas share: the tool list, the active tool, the tool-house key and the rendering connection id. wwwroot-src/src/pages/ToolHousePage.vue — routed page: ToolHouseRootPanel + tool list on the left, the tool's own five-tab strip in the middle, ToolHouseSetupPanel on the right, in two nested resizable panes. Cutter and Holder grow a second, URL-synced sub-tab strip from the tab node's children, and NodeTabCascade.vue hosts the active tab's panel and the levels nested below it. wwwroot-src/src/components/controlTree/NodeTabCascade.vue — the nested-level host the page mounts inside the active tab. wwwroot-src/src/components/toolhouse/ToolHouseSetupPanel.vue — the canvas column: one RenderingCanvas bound server-side to MillingToolEditorDisplayee, following the page's selected tool, with the Display Options dropdown (Show Cutter / Show Holder + the 3 anchor-and-buckle flags + the Holder Rendering Mode radios). wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue — the generic groups/items dropdown that panel feeds, which is why the menu is flat groups rather than nested submenus. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — the tool house's ItemType registry: one tool node per tool, and each tool node's …/cutter, …/holder, …/clamping, …/intelligent children. wwwroot-src/src/components/controlTree/toolhouse/ToolHouseRootPanel.vue — the tool-house root node: Object Management over the MachiningToolHouse + New Tool. The button's own entries are Load, Save As, Copy, Paste and XML; the Load Resource entry is conditional on a resourceDirectory prop this panel does not pass, so it is absent here. wwwroot-src/src/components/controlTree/toolhouse/ToolNodePanel.vue — one tool's General tab: Tool ID / Note / auto Abstract Note + Duplicate / Delete. Mounting it points the tool canvas at that tool. wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the Cutter stem: cutter type selector plus the MillingCutter identity fields (Shank Mass / Hone Radius / Relief Angle). wwwroot-src/src/components/controlTree/toolhouse/CutterSectionPanel.vue — the cutter's inner tabs, keyed off the node's role path (material / profile / upper-beam / opt). Flute Profile is edited inline; the others dispatch to wwwroot-src/src/components/toolhouse/MaterialDiv.vue (which grows CoatingLayersDiv.vue), wwwroot-src/src/components/toolhouse/UpperBeamDiv.vue and wwwroot-src/src/components/toolhouse/MillingCutterOptLimitDiv.vue. wwwroot-src/src/components/controlTree/toolhouse/CutterContoursPanel.vue — the Flute Contours stem: the fluting type selector only. The selected fluting's editor grows below it. wwwroot-src/src/components/controlTree/toolhouse/FlutingPanel.vue — the concrete fluting node and its fluting-level fields; uniform fluting grows one Baseline Contour, free fluting one tab per flute. wwwroot-src/src/components/controlTree/toolhouse/FluteContourPanel.vue — one flute contour node (baseline, or flute- for a free fluting): hosts Setup Angle, with Side Contour and Bottom Contour as sub-tabs. fluteContourNode.ts carries the shared re-commit. wwwroot-src/src/components/controlTree/toolhouse/FluteSideContourPanel.vue / FluteBottomContourPanel.vue — kind selector + editor, dispatching to wwwroot-src/src/components/toolhouse/fluting/ConstHelixSideContourDiv.vue, FreeformSideContourDiv.vue, SlideBottomContourDiv.vue and FreeformBottomContourDiv.vue; the two freeform editors share SpanContourPosListDiv.vue for the per-flute position list. wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the Holder stem: holder type selector plus the holder's Name / Note / auto Abstract Note, committed through the per-type holder controller. wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the Cylindroid holder's Geometry (the Z-R profile, via wwwroot-src/src/components/geom/CylindroidEditor.vue) and both holders' Resolution tabs; resyncs the Cylindroid holder (UpdateByCylindroid()) after each geometry edit. A Freeform holder's Geometry / Geom To Spindle / Geom To Cutter tabs are the generic Geometry / Transformer Control-Tree slots (wwwroot-src/src/components/controlTree/GeometrySlotPanel.vue / TransformerSlotPanel.vue), wired by toolHouseItemTypes.ts to FreeformHolderController's keys and resync. wwwroot-src/src/components/controlTree/toolhouse/ToolClampingPanel.vue — the Clamping tab: ExposedCutterHeight = PreservedDistance + FluteHeight; changing either field updates the other on the server. wwwroot-src/src/components/controlTree/toolhouse/ToolIntelligentPanel.vue — the Intelligent Holder tab; a thin wrapper over wwwroot-src/src/components/toolhouse/IntelligentHolderDiv.vue (Observation Location: ObservationAnchorReference dropdown + relative Z + ring radius). wwwroot-src/src/api/toolHouse.ts — typed wrapper over three server modules: ToolHouseController (/api/ToolHouse), CutterController (/api/Cutter) and ToolHouseDisplayController (/api/mech/tool-house-display). wwwroot-src/src/api/cylindroidHolder.ts / wwwroot-src/src/api/freeformHolder.ts — typed wrappers over CylindroidHolderController / FreeformHolderController. Mech/ToolHouseController.cs — the tool-house collection and the tool-level fields. REST endpoints: GET /, GET /{id}, GET /GetHolder, GET/PUT /{id}/observation, PUT /{id}/note | exposed-height | preserved-distance, POST /Initialize | Update | SelectTool | CreateTool | DuplicateTool | RenameTool | SetHolderType | ClearToolCache, DELETE /DeleteTool. Mech/CutterController.cs — cutter editing, the /api/Cutter sibling of ToolHouseController. REST endpoints at /api/Cutter/*: POST EnsureCutter | ClearCutter, PUT /{id}/shaper-profile | fluting | general | opt-limit, FreeFluting child CRUD at /{id}/fluting/contours[/{index}], GET/POST /{id}/upper-beam[/create | /resync], and the material endpoints /{id}/flute-material/*, /{id}/shank-material/*, /{id}/coating-layers/*. Mech/ToolHouseDisplayController.cs — REST endpoints at /api/mech/tool-house-display/* for display options (initialize, select-tool, show-cutter / show-holder / show-geom-anchor / show-spindle-buckle / show-cutter-buckle, holder-rendering-mode, cutter-shape-mode, clear-cache). initialize attaches the MillingToolEditorDisplayee and snaps to the isometric view; select-tool re-points the MillingToolGetter and snaps to the home view. It also reports enablePhysics from UserService. Mech/CylindroidHolderController.cs — holder-aware layer over a tool's CylindroidHolder. REST endpoints at /api/CylindroidHolder/*: GET Get (returns name / note / abstract note / resolution + indexes the holder's Cylindroid), POST UpdateGeometryContent | SetName | SetNote | SetPolarResolution. UpdateGeometryContent is the post-edit resync (UpdateByCylindroid() + ClearCache()) that the generic CylindroidController cannot perform. Mech/FreeformHolderController.cs — the Freeform counterpart. REST endpoints at /api/FreeformHolder/*: GET Get (name / note / abstract note / resolution + indexes the holder's geometry and two placement transformers under per-session keys), POST CreateGeometry | UpdateGeometry | IndexCurrentGeometry | UpdateGeometryContent | UpdateGeomToSpindleTransformer | UpdateGeomToCutterTransformer | SetName | SetNote | SetPolarResolution. Every shape edit ends in UpdateByGeom() + ClearCache() + AlignAnchorByExposedCutterHeight(), the resync the generic geometry and transformer controllers cannot perform. Environments/UserService.cs — the web client's own per-user service, living on the server; ToolHouseDisplayController reads EnablePhysics from it. Note The fluting type is named loosely on the wire, and every spelling resolves. PUT /{id}/fluting accepts UniformFluting / uniform and FreeFluting / free, and equally UniformContourTray / FreeContourTray. A Control-Tree id whose cutter branch reads …/contours/tray… resolves to the …/contours/fluting… node. One cutter type has no editor here, and the app says so where the type is chosen: the FreeformRemover. Selecting it keeps the existing model intact and shows a note — FreeformRemover editor is not yet available in the web frontend. Use the WPF client or HiNcRcl for now. Three smaller surfaces are absent for the same reason: the InsertCutter and FluteInnerBeam physics groups, and the CustomSpinningProfile shaper-profile type — the profile tab offers the five APT types (General / Ball / Column / Cone / Taper). See Also Cutter Tab — the cutter half of a tool, and the editors each cutter type grows Holder Tab — the holder half, and the editors each holder type grows Stick Tool Panel — the selected tool’s tab cascade, which those two tabs belong to General Setup Page — the equipment these tools are mounted into"
},
"anatomy/tool-house/stick-tool-panel.html": {
"href": "anatomy/tool-house/stick-tool-panel.html",
"title": "Stick Tool Panel | HiAPI-C# 2025",
- "summary": "Stick Tool Panel The term stick is for not only milling, but other remover like electric discharge machining tool. On the shipped web client the Stick Tool Panel is the toolhouse/tool- node of the Tool House Page: picking a tool in that page's left list mounts it, and its editor is the tab strip filling the page's middle column. The key model is MillingTool. Other model: UserService — the WPF client reads its EnablePhysics to decide whether its Intelligent Holder tab is shown. Layout Tool Node (toolhouse/tool-) General Tab Tool ID TextField — the T-number; committing it renames the tool Note TextField (editable) Abstract Note (read-only, auto-derived, with a one-click copy button) Duplicate Button and Delete Button (icon buttons on the tab's title bar) Cutter Tab Cutter Panel Holder Tab Holder Panel Clamping Tab Exposed-Cutter-Height numeric field Preserved-Distance-Between-Flute-and-Spindle-Nose numeric field Int. Holder Tab Observation Location Reference Anchor Dropdown (ObservationAnchorReference) — its options are the MillingToolAnchorReference names the server sends with the observation: None, Tool Tip, Holder Anchor, Spindle Buckle Anchor Relative-Z-From-Reference numeric field (RelativeHeightFromObservationAnchor_mm) Observation-Ring-Radius numeric field (ObservationRingRadius_mm) All five tabs ship unconditionally on the web page: the Int. Holder tab is one of the five TOOL_TABS, and the tool node always grows its …/intelligent child. The WPF Stick Tool Panel is the client that hides its Intelligent Holder tab when UserService.EnablePhysics is false, from UpdateIntelligentHolderTabVisibility in Mech/ToolHouse/StickToolPanel.xaml.cs. Object Management on the web page is house-level rather than per-tool: the Object Management Menu Button sits on the Tool House root panel with file extension .MachiningToolHouse (load type Hi.Machining.MachiningToolHouse, HiMech) and covers the whole house, while the tool node offers Duplicate and Delete for the single tool. The WPF Stick Tool Panel is the client that carries a per-tool Object Management Menu Button on its head line, with file extension .MillingTool and the Stick Tool Management Panel as its pointed editor panel. That client also gives the identity fields a tab of their own — Info, a read-only Abstract Note TextBox over an editable Note TextBox; on the web page those two fields are the General tab, alongside Tool ID and the Duplicate / Delete buttons. Tabs and the URL The tabs are TOOL_TABS — General, Cutter, Holder, Clamping, Int. Holder — declared in wwwroot-src/src/router/treeRoutes.ts, and those same five names are the :tab? segment of the page route /tool-house/:toolId?/:tab?/:subtab?. General is the tool node's own panel; the other four are the tool node's children (…/cutter, …/holder, …/clamping, …/intelligent), registered in wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts. Cutter and Holder are type-selector stems, so each grows a second, URL-synced sub-tab strip — the :subtab? segment, from CUTTER_SECTIONS (Material / Flute Profile / Flute Contours / Upper Beam / Optimization — Material only while the shell's Show Physics Options preference is on) and HOLDER_SECTIONS (Geometry / Resolution). The levels below that — Flute Contours to fluting to flutes to side and bottom contour — nest inside wwwroot-src/src/components/controlTree/NodeTabCascade.vue, which the page mounts inside the active tab. wwwroot-src/src/composables/useRouteTabs.ts keeps both segments in the URL, defaulting to general, and to profile under Cutter / geometry under Holder. Selecting another tool keeps the tab segments: only the tool part of the URL moves, so the reader stays on the tab they were reading. A Control-Tree id addressing any of these levels is translated into the page's route params by routeForTreeId, and an id deeper than the URL carries lands on the nearest tab. Note The Exposed-Cutter-Height and Preserved-Distance-Between-Flute-and-Spindle-Nose are directly related: ExposedCutterHeight = PreservedDistance + FluteHeight, so each value changes when the other is changed. Editing Preserved Distance commits PUT /api/ToolHouse/{id}/preserved-distance, whose response carries the recomputed pair and fills both fields; editing Exposed Height commits PUT /api/ToolHouse/{id}/exposed-height, which answers without a body, so the panel re-reads the tool to pick up the new preserved distance. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA). The tool node is a set of tabs on the Tool House page rather than a panel of its own: wwwroot-src/src/router/treeRoutes.ts — declares TOOL_TABS (general / cutter / holder / clamping / intelligent) with CUTTER_SECTIONS and HOLDER_SECTIONS, and routeForTreeId, which turns a toolhouse/tool-// Control-Tree id into the /tool-house route params. wwwroot-src/src/pages/ToolHousePage.vue — renders the five-tab strip, mounts only the active tab's panel, and keeps the tab segments when the selected tool changes. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — the Control-Tree ItemType registry: buildToolChildren emits the tool node's …/cutter, …/holder, …/clamping and …/intelligent children, General being the tool node's own panel. wwwroot-src/src/components/controlTree/toolhouse/ToolNodePanel.vue — the General tab: Tool ID / Note / read-only auto Abstract Note with copy, plus Duplicate and Delete. Mounting it points the tool canvas at that tool. wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the Cutter tab's type selector (Milling Cutter / Freeform Remover / None) plus the MillingCutter identity fields. wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the Holder tab's type selector (None / Cylindroid / Freeform) plus the Cylindroid holder's Name / Note / auto Abstract Note. wwwroot-src/src/components/controlTree/toolhouse/ToolClampingPanel.vue — the Clamping tab and its two coupled fields. wwwroot-src/src/components/controlTree/toolhouse/ToolIntelligentPanel.vue — the Int. Holder tab; a thin wrapper over wwwroot-src/src/components/toolhouse/IntelligentHolderDiv.vue, which holds the Observation Location controls and reads no physics flag. wwwroot-src/src/components/controlTree/NodeTabCascade.vue — hosts the active tab's panel and the levels nested below it. wwwroot-src/src/composables/useRouteTabs.ts — syncs the :tab? / :subtab? params with the URL. wwwroot-src/src/composables/useToolHouse.ts — the module-singleton state every tool-house panel is a thin view over: the tool list, the active tool, and the rendering connection id. Mech/ToolHouseController.cs — [Route(\"api/[controller]\")], so /api/ToolHouse: the tool-level fields the tool node edits — PUT /{id}/note | exposed-height | preserved-distance, GET/PUT /{id}/observation, POST DuplicateTool | RenameTool | SetHolderType, DELETE DeleteTool. Mech/CutterController.cs (/api/Cutter) and Mech/CylindroidHolderController.cs (/api/CylindroidHolder) — the server surface behind the Cutter and Holder tabs. wwwroot-src/src/api/toolHouse.ts — the typed client for those endpoints. See Also Tool House Page — the page this tool node sits in, and where the tool list and the route live Cutter Tab — the cutter half of the tab cascade Holder Tab — the holder half"
+ "summary": "Stick Tool Panel The term stick is for not only milling, but other remover like electric discharge machining tool. On the shipped web client the Stick Tool Panel is the toolhouse/tool- node of the Tool House Page: picking a tool in that page's left list mounts it, and its editor is the tab strip filling the page's middle column. The key model is MillingTool. Layout Tool Node (toolhouse/tool-) General Tab Tool ID TextField — the T-number; committing it renames the tool Note TextField (editable) Abstract Note (read-only, auto-derived, with a one-click copy button) Duplicate Button and Delete Button (icon buttons on the tab's title bar) Cutter Tab Cutter Panel Holder Tab Holder Panel Clamping Tab Exposed-Cutter-Height numeric field Preserved-Distance-Between-Flute-and-Spindle-Nose numeric field Int. Holder Tab Observation Location Reference Anchor Dropdown (ObservationAnchorReference) — its options are the MillingToolAnchorReference names the server sends with the observation: None, Tool Tip, Holder Anchor, Spindle Buckle Anchor Relative-Z-From-Reference numeric field (RelativeHeightFromObservationAnchor_mm) Observation-Ring-Radius numeric field (ObservationRingRadius_mm) All five tabs ship unconditionally: the Int. Holder tab is one of the five TOOL_TABS, and the tool node always grows its …/intelligent child. Nothing gates it on UserService.EnablePhysics. Object Management is house-level rather than per-tool: the Object Management Menu Button sits on the Tool House root panel with file extension .MachiningToolHouse (load type Hi.Machining.MachiningToolHouse, HiMech) and covers the whole house, while the tool node offers Duplicate and Delete for the single tool. There is no per-tool object-management button, and no separate tab for the identity fields — the Abstract Note and Note sit on the General tab, alongside Tool ID and the Duplicate / Delete buttons. Tabs and the URL The tabs are TOOL_TABS — General, Cutter, Holder, Clamping, Int. Holder — declared in wwwroot-src/src/router/treeRoutes.ts, and those same five names are the :tab? segment of the page route /tool-house/:toolId?/:tab?/:subtab?. General is the tool node's own panel; the other four are the tool node's children (…/cutter, …/holder, …/clamping, …/intelligent), registered in wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts. Cutter and Holder are type-selector stems, so each grows a second, URL-synced sub-tab strip — the :subtab? segment, from CUTTER_SECTIONS (Material / Flute Profile / Flute Contours / Upper Beam / Optimization — Material only while the shell's Show Physics Options preference is on) and HOLDER_SECTIONS (Geometry / Resolution). The levels below that — Flute Contours to fluting to flutes to side and bottom contour — nest inside wwwroot-src/src/components/controlTree/NodeTabCascade.vue, which the page mounts inside the active tab. wwwroot-src/src/composables/useRouteTabs.ts keeps both segments in the URL, defaulting to general, and to profile under Cutter / geometry under Holder. Selecting another tool keeps the tab segments: only the tool part of the URL moves, so the reader stays on the tab they were reading. A Control-Tree id addressing any of these levels is translated into the page's route params by routeForTreeId, and an id deeper than the URL carries lands on the nearest tab. Note The Exposed-Cutter-Height and Preserved-Distance-Between-Flute-and-Spindle-Nose are directly related: ExposedCutterHeight = PreservedDistance + FluteHeight, so each value changes when the other is changed. Editing Preserved Distance commits PUT /api/ToolHouse/{id}/preserved-distance, whose response carries the recomputed pair and fills both fields; editing Exposed Height commits PUT /api/ToolHouse/{id}/exposed-height, which answers without a body, so the panel re-reads the tool to pick up the new preserved distance. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA). The tool node is a set of tabs on the Tool House page rather than a panel of its own: wwwroot-src/src/router/treeRoutes.ts — declares TOOL_TABS (general / cutter / holder / clamping / intelligent) with CUTTER_SECTIONS and HOLDER_SECTIONS, and routeForTreeId, which turns a toolhouse/tool-// Control-Tree id into the /tool-house route params. wwwroot-src/src/pages/ToolHousePage.vue — renders the five-tab strip, mounts only the active tab's panel, and keeps the tab segments when the selected tool changes. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — the Control-Tree ItemType registry: buildToolChildren emits the tool node's …/cutter, …/holder, …/clamping and …/intelligent children, General being the tool node's own panel. wwwroot-src/src/components/controlTree/toolhouse/ToolNodePanel.vue — the General tab: Tool ID / Note / read-only auto Abstract Note with copy, plus Duplicate and Delete. Mounting it points the tool canvas at that tool. wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue — the Cutter tab's type selector (Milling Cutter / Freeform Remover / None) plus the MillingCutter identity fields. wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the Holder tab's type selector (None / Cylindroid / Freeform) plus the Cylindroid holder's Name / Note / auto Abstract Note. wwwroot-src/src/components/controlTree/toolhouse/ToolClampingPanel.vue — the Clamping tab and its two coupled fields. wwwroot-src/src/components/controlTree/toolhouse/ToolIntelligentPanel.vue — the Int. Holder tab; a thin wrapper over wwwroot-src/src/components/toolhouse/IntelligentHolderDiv.vue, which holds the Observation Location controls and reads no physics flag. wwwroot-src/src/components/controlTree/NodeTabCascade.vue — hosts the active tab's panel and the levels nested below it. wwwroot-src/src/composables/useRouteTabs.ts — syncs the :tab? / :subtab? params with the URL. wwwroot-src/src/composables/useToolHouse.ts — the module-singleton state every tool-house panel is a thin view over: the tool list, the active tool, and the rendering connection id. Mech/ToolHouseController.cs — [Route(\"api/[controller]\")], so /api/ToolHouse: the tool-level fields the tool node edits — PUT /{id}/note | exposed-height | preserved-distance, GET/PUT /{id}/observation, POST DuplicateTool | RenameTool | SetHolderType, DELETE DeleteTool. Mech/CutterController.cs (/api/Cutter) and Mech/CylindroidHolderController.cs (/api/CylindroidHolder) — the server surface behind the Cutter and Holder tabs. wwwroot-src/src/api/toolHouse.ts — the typed client for those endpoints. See Also Tool House Page — the page this tool node sits in, and where the tool list and the route live Cutter Tab — the cutter half of the tab cascade Holder Tab — the holder half"
},
"anatomy/util/file-explorer.html": {
"href": "anatomy/util/file-explorer.html",
@@ -457,7 +457,7 @@
"anatomy/util/index.html": {
"href": "anatomy/util/index.html",
"title": "Util Pages | HiAPI-C# 2025",
- "summary": "Util Pages The utility pages are the ones not tied to the main machining workflow. They support side-tasks — browsing the server filesystem and building a generic mechanism XML — and are reachable from the menu bar's Page ▾ dropdown, below the separator that follows the three workflow pages (Tool House / General Setup / Execution). Their routes are /util/file-explorer and /util/mech-builder; the dropdown itself is built in wwwroot-src/src/components/AppMenuBar.vue over the menu.page.* strings in wwwroot-src/src/i18n/en/menu.ts, and both routes are declared in wwwroot-src/src/router/routes.ts. The two pages share a component, not just a menu section. The File Explorer's browser (wwwroot-src/src/components/FileExplorer.vue) also runs inside a modal wrapper, wwwroot-src/src/components/widgets/FileExplorerDialog.vue, and that wrapper is the app's file picker: it is what the Mechanism Builder's Load and both Save As actions open, and what the menu bar's Project ▾ entries open. One page documents the browser, the other a page built on it. Pages File Explorer — server-side filesystem browser over three named roots (Admin / Project / Resource), with a lazy-loading tree, an editor slave panel running CodeMirror 6, an STL preview, zip pack / extract, and rename / duplicate / delete. The same component is the app's modal file picker. Mechanism Builder — editor for a standalone GeneralMechanism: anchor / branch graph, per-branch transformer, per-anchor geometry and display colour, with server-side Load and Save As through the File Explorer's picker. STL Preview Pane — the 3D preview that takes over the File Explorer's editor column for an .stl row: its cancellable load, the rendering connection it owns, and the transform it can bake into the file. Legacy-Controller — the legacy controller screen, reachable from Page → Legacy-Controller below the second separator. The General Setup page's Controller branch is the settings face for the SoftNcRunner; this page stays reachable while it carries settings that tree has no editor for. Where Neighbouring Editors Live Three editors a reader might expect here are shipped surfaces of other pages: Cutter editor — a Tool House Control-Tree branch, not a util page: wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue with its section, contour and flute panels, over Mech/CutterController.cs, reached through the tool-house route. The WPF client has Mech/ToolHouse/CutterManagementPanel.xaml and Mech/ToolHouse/MillingCutterPanel.xaml. Rake-face angles — plain cutter fields: radialRakeAngle_deg in wwwroot-src/src/components/controlTree/toolhouse/FluteSideContourPanel.vue and axialRakeAngle_deg in wwwroot-src/src/components/controlTree/toolhouse/FluteBottomContourPanel.vue. A .MillingPara or .mp file opens as XML in the File Explorer's editor panel. Color Index Time Chart — a strip chart on the Execution page: wwwroot-src/src/components/execution/charts/StripIndividualChart.vue, mounted by wwwroot-src/src/pages/ExecutionPage.vue under the colorIndexTimeChart panel flag that Environments/ExecutionDivConfig.cs persists (Environments/PlayerDivConfig.cs on the WPF side). It plots the user-picked inspecting key live per step."
+ "summary": "Util Pages The utility pages are the ones not tied to the main machining workflow. They support side-tasks — browsing the server filesystem and building a generic mechanism XML — and are reachable from the menu bar's Page ▾ dropdown, below the separator that follows the three workflow pages (Tool House / General Setup / Execution). Their routes are /util/file-explorer and /util/mech-builder; the dropdown itself is built in wwwroot-src/src/components/AppMenuBar.vue over the menu.page.* strings in wwwroot-src/src/i18n/en/menu.ts, and both routes are declared in wwwroot-src/src/router/routes.ts. The two pages share a component, not just a menu section. The File Explorer's browser (wwwroot-src/src/components/FileExplorer.vue) also runs inside a modal wrapper, wwwroot-src/src/components/widgets/FileExplorerDialog.vue, and that wrapper is the app's file picker: it is what the Mechanism Builder's Load and both Save As actions open, and what the menu bar's Project ▾ entries open. One page documents the browser, the other a page built on it. Pages File Explorer — server-side filesystem browser over three named roots (Admin / Project / Resource), with a lazy-loading tree, an editor slave panel running CodeMirror 6, an STL preview, zip pack / extract, and rename / duplicate / delete. The same component is the app's modal file picker. Mechanism Builder — editor for a standalone GeneralMechanism: anchor / branch graph, per-branch transformer, per-anchor geometry and display colour, with server-side Load and Save As through the File Explorer's picker. STL Preview Pane — the 3D preview that takes over the File Explorer's editor column for an .stl row: its cancellable load, the rendering connection it owns, and the transform it can bake into the file. Legacy-Controller — the legacy controller screen, reachable from Page → Legacy-Controller below the second separator. The General Setup page's Controller branch is the settings face for the SoftNcRunner; this page stays reachable while it carries settings that tree has no editor for. Where Neighbouring Editors Live Three editors a reader might expect here are shipped surfaces of other pages: Cutter editor — a Tool House Control-Tree branch, not a util page: wwwroot-src/src/components/controlTree/toolhouse/ToolCutterPanel.vue with its section, contour and flute panels, over Mech/CutterController.cs, reached through the tool-house route. The Rake-face angles — plain cutter fields: radialRakeAngle_deg in wwwroot-src/src/components/controlTree/toolhouse/FluteSideContourPanel.vue and axialRakeAngle_deg in wwwroot-src/src/components/controlTree/toolhouse/FluteBottomContourPanel.vue. A .MillingPara or .mp file opens as XML in the File Explorer's editor panel. Color Index Time Chart — a strip chart on the Execution page: wwwroot-src/src/components/execution/charts/StripIndividualChart.vue, mounted by wwwroot-src/src/pages/ExecutionPage.vue under the colorIndexTimeChart panel flag that Environments/ExecutionDivConfig.cs persists. It plots the user-picked inspecting key live per step."
},
"anatomy/util/mech-builder.html": {
"href": "anatomy/util/mech-builder.html",
@@ -472,7 +472,7 @@
"anatomy/widget/index.html": {
"href": "anatomy/widget/index.html",
"title": "Widgets | HiAPI-C# 2025",
- "summary": "Widgets The reusable controls that pages embed rather than own. Each page here documents one control — most of them under the SPA's components/widgets/ directory — together with its WPF counterpart where one exists, so a reader who meets the same control on four screens reads about it once. A control earns a page here when more than one screen embeds it. A control that only ever appears on one screen is documented on that screen's page instead. Ordered by how widely each control is embedded across the two clients, most-embedded first. Pages Numeric Input — The single-value numeric field every editor embeds: blur-and-Enter commit, inclusive bounds, and the Infinity and NaN spellings; the most widely embedded control in the app Object Management Menu Button — Load / Save / Paste / XML for any object that can produce an XML source RenderingCanvas Tool Bar — The View ▾ camera-preset menu every 3D canvas docks Vec3dControl — The three-component vector editor: per-axis and single-field text modes, with local special-value handling Polar Resolution 2D Panel — The editor for PolarResolution2d, embedded by the two holder editors that tessellate a revolved profile; the one control here with no SPA widget of its own Mat4dControl — The sixteen-cell 4x4 matrix grid, with its Identity and Invert events See Also Numeric Input — the single-value numeric field the other editors on this shelf are built beside Conventions — the file-path and numeric-value contracts two of these controls implement App Shell — the frame these controls are embedded inside"
+ "summary": "Widgets The reusable controls that pages embed rather than own. Each page here documents one control — most of them under the SPA's components/widgets/ directory — so a reader who meets the same control on four screens reads about it once. A control earns a page here when more than one screen embeds it. A control that only ever appears on one screen is documented on that screen's page instead. Ordered by how widely each control is embedded, most-embedded first. Pages Numeric Input — The single-value numeric field every editor embeds: blur-and-Enter commit, inclusive bounds, and the Infinity and NaN spellings; the most widely embedded control in the app Object Management Menu Button — Load / Save / Paste / XML for any object that can produce an XML source RenderingCanvas Tool Bar — The View ▾ camera-preset menu every 3D canvas docks Vec3dControl — The three-component vector editor: per-axis and single-field text modes, with local special-value handling Polar Resolution 2D Panel — The editor for PolarResolution2d, embedded by the two holder editors that tessellate a revolved profile; the one control here with no SPA widget of its own Mat4dControl — The sixteen-cell 4x4 matrix grid, with its Identity and Invert events See Also Numeric Input — the single-value numeric field the other editors on this shelf are built beside Conventions — the file-path and numeric-value contracts two of these controls implement App Shell — the frame these controls are embedded inside"
},
"anatomy/widget/mat4d-control.html": {
"href": "anatomy/widget/mat4d-control.html",
@@ -492,17 +492,17 @@
"anatomy/widget/polar-resolution-2d-panel.html": {
"href": "anatomy/widget/polar-resolution-2d-panel.html",
"title": "Polar Resolution 2D Panel | HiAPI-C# 2025",
- "summary": "Polar Resolution 2D Panel The model is PolarResolution2d: a linear step in millimetres plus an angular step, carried in radians and edited in degrees, that together tessellate a revolved shape into an STL mesh. Both clients edit it on a tool holder and nowhere else — the WPF client through this widget, the web client through the Cylindroid holder's Resolution section. Layout WPF Layout Polar Resolution 2D Panel Enable Custom Resolution CheckBox checked if the host model is not null; the checkbox itself is always clickable. unchecking sets the host model to null; checking a null model publishes a fresh PolarResolution2d of 0.5 mm / 5 deg through the setter. Linear Resolution Input Field, with an mm suffix label enabled if model not null Angle Resolution Input Field, with a degree-sign suffix label enabled if model not null Web Layout Holder Resolution Section Resolution Hint Caption — names the STL tessellation used for display and collision meshing Linear Resolution (mm) Input Field Angle Resolution (deg) Input Field There is no enable checkbox and no null state on the web: both fields are always editable, and each commits on blur or Enter, and only when both values are greater than zero. Feature The Enable CheckBox is always shown. The host drives the WPF widget only through GetterFunc / SetterFunc; it calls UpdateUI() after its own model changes and subscribes to OnModelChanged to react to an edit. An edit republishes a whole new carrier through the setter instead of mutating the current one, in either client. A holder's PolarResolution2d setter swaps the holder's solid for one born with the new value and disposes the old one, and skips a value-equal reassignment — which is what makes the WPF widget's per-keystroke setting affordable. The web client performs the same swap server-side inside SetPolarResolution, then clears the holder's cache. If the host model is null, it may mean the resolution applied the default value: PolarResolution2d is a snapshot of the solid's identity, and a null carrier lets a parametric geometry apply its own default. Only the WPF client can reach that state. The service reports a null resolution as 0 mm / 0 deg, the two web fields display those zeros, and the commit guard then blocks any write until real numbers are typed. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): no standalone widget. The resolution is edited on the Cylindroid holder's Resolution section, at the Control-Tree id toolhouse/tool-{id}/holder/resolution and the route /tool-house/:toolId/holder/resolution. A Freeform holder grows no sections in the web client; its Holder panel shows a hint pointing at the WPF client instead. wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the section === 'resolution' branch: the two number fields, seeded from Get and committed on blur / Enter. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — registers that panel as the HolderSection item type and grows the Resolution node only for a CylindroidHolder. wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the Holder stem above it, whose holder-type selector decides which sections appear. wwwroot-src/src/api/cylindroidHolder.ts — PolarResolutionDto (linear_mm / angle_deg) and setCylindroidHolderResolution. wwwroot-src/src/router/treeRoutes.ts — maps the holder's section ids onto the Tool House route params. wwwroot-src/src/i18n/en/toolhouse.ts — the two field labels and the tessellation hint caption. Mech/CylindroidHolderController.cs — POST /api/CylindroidHolder/SetPolarResolution, which rejects a non-positive value, assigns a fresh PolarResolution2d and calls ClearCache(); GET Get reports a null resolution as 0 / 0. See Also Cylindroid Holder Panel — the holder editor that embeds this panel to tessellate its profile Freeform Holder Panel — the other holder editor that embeds it"
+ "summary": "Polar Resolution 2D Panel The model is PolarResolution2d: a linear step in millimetres plus an angular step, carried in radians and edited in degrees, that together tessellate a revolved shape into an STL mesh. It is edited on a tool holder and nowhere else, through the Cylindroid holder's Resolution section. Layout Holder Resolution Section Resolution Hint Caption — names the STL tessellation used for display and collision meshing Linear Resolution (mm) Input Field Angle Resolution (deg) Input Field There is no enable checkbox and no null state: both fields are always editable, and each commits on blur or Enter, and only when both values are greater than zero. Feature An edit republishes a whole new carrier instead of mutating the current one. A holder's PolarResolution2d setter swaps the holder's solid for one born with the new value and disposes the old one, and skips a value-equal reassignment; the same swap happens server-side inside SetPolarResolution, which then clears the holder's cache. A null host model means the resolution applied the default value: PolarResolution2d is a snapshot of the solid's identity, and a null carrier lets a parametric geometry apply its own default. Nothing on this surface can produce that state. The service reports a null resolution as 0 mm / 0 deg, the two fields display those zeros, and the commit guard then blocks any write until real numbers are typed. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): no standalone widget. The resolution is edited on the Cylindroid holder's Resolution section, at the Control-Tree id toolhouse/tool-{id}/holder/resolution and the route /tool-house/:toolId/holder/resolution. A Freeform holder grows no sections here; its Holder panel shows a hint saying the geometry is edited elsewhere. wwwroot-src/src/components/controlTree/toolhouse/HolderSectionPanel.vue — the section === 'resolution' branch: the two number fields, seeded from Get and committed on blur / Enter. wwwroot-src/src/components/controlTree/toolHouseItemTypes.ts — registers that panel as the HolderSection item type and grows the Resolution node only for a CylindroidHolder. wwwroot-src/src/components/controlTree/toolhouse/ToolHolderPanel.vue — the Holder stem above it, whose holder-type selector decides which sections appear. wwwroot-src/src/api/cylindroidHolder.ts — PolarResolutionDto (linear_mm / angle_deg) and setCylindroidHolderResolution. wwwroot-src/src/router/treeRoutes.ts — maps the holder's section ids onto the Tool House route params. wwwroot-src/src/i18n/en/toolhouse.ts — the two field labels and the tessellation hint caption. Mech/CylindroidHolderController.cs — POST /api/CylindroidHolder/SetPolarResolution, which rejects a non-positive value, assigns a fresh PolarResolution2d and calls ClearCache(); GET Get reports a null resolution as 0 / 0. See Also Cylindroid Holder Panel — the holder editor that embeds this panel to tessellate its profile Freeform Holder Panel — the other holder editor that embeds it"
},
"anatomy/widget/renderingcanvas-tool-bar.html": {
"href": "anatomy/widget/renderingcanvas-tool-bar.html",
"title": "RenderingCanvas Tool Bar | HiAPI-C# 2025",
- "summary": "RenderingCanvas Tool Bar The RenderingCanvas Tool Bar is the camera-preset menu that every 3D canvas in the app carries. In the WPF client the control holds a DispEngine and drives it directly from each menu click. On the web it holds no engine: it takes a canvas prop and calls that component's exposed setView(name), which invokes the SetView hub method, and the hub is what drives the per-connection DispEngine. View Menu The bar is a single View ▾ menu. Its seven entries, in shipped order, are Isometric, Front, Back, Right, Left, Top and Bottom. The engine also understands a home view and RenderingCanvas.vue exposes setViewToHomeView, but this menu does not offer it. Entry API Method Isometric SetViewToIsometricView() Front SetViewToFrontView() Back SetViewToFrontView() + TurnBackView() Right SetViewToRightView() Left SetViewToRightView() + TurnBackView() Top SetViewToTopView() Bottom SetViewToTopView() + TurnBackView() Back View Implementation Back / Left / Bottom views are composed by first calling the corresponding forward-view method (SetViewToFrontView / SetViewToRightView / SetViewToTopView) and then invoking TurnBackView() to flip the camera about the view plane. Both clients compose them the same way — the web in the hub's SetView switch, WPF in the tool bar's click handlers. Canvas Binding On the web the tool bar declares exactly one prop, a nullable canvas, typed structurally as an object exposing setView(v: string): Promise rather than as the RenderingCanvas component type. Every entry calls it optionally, so a tool bar with no canvas bound still opens and each entry is a no-op. The preset names travel to the hub untranslated; only the row labels are localized, from the widgets.canvas.* keys. Scene Menu Pages that sit next to a RenderingCanvas surface a per-page Scene ▾ menu button — the DisplayOptionsMenu component, labelled from widgets.canvas.scene because no caller overrides the label. It chooses what the 3D scene draws (solids, coordinates, display aids), as distinct from the camera-oriented View ▾ menu beside it. The layout (header + checkboxes + radio rows) is shared across four callers — the Execution page's extended tool bar, the General Setup equipment panel, the Tool House setup panel and the STL preview pane — so it is implemented once as a generic, schema-driven component. Schema Each dropdown consumes a DisplayGroup[] array. A group has an optional header and a flat list of items: { kind: 'check', label, modelValue, disable?, onUpdate } — a checkbox row. { kind: 'radio', label, groupValue, value, disable?, onUpdate } — a radio row; rows sharing a groupValue behave as one group, each row bound to its own value. The component is generic over the radio value type, so RenderingMode / HolderRenderingMode / etc. stay fully typed at the call site. Besides groups it accepts label, disable, title, minWidthPx (default 220), size (default sm), contentClass and compact. compact is a tighter-than-dense row mode, used by the General Setup and Tool House panels for their long option lists; the General Setup, Tool House and Execution callers pass content-class=\"bg-white\" to opt out of Quasar's transparent menu. HiNC-2025-webservice (Quasar CLI SPA) wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue — the shared + implementation behind four of the app's five Scene menus. The Controller viewer is the exception: wwwroot-src/src/components/controller/ControllerExtendedToolBar.vue builds its Scene dropdown inline against the same /api/rendering-flags surface. Callers (each reads a DisplayGroup[] computed from its page-local state and forwards onUpdate to its existing handlers): wwwroot-src/src/components/execution/ExecutionExtendedToolBar.vue wwwroot-src/src/components/mech/EquipmentSetupPanel.vue wwwroot-src/src/components/toolhouse/ToolHouseSetupPanel.vue wwwroot-src/src/components/StlPreviewPane.vue Backends — one per caller, each a different surface: ExecutionExtendedToolBar.vue reaches /api/rendering-flags (Common/RenderingFlagsController.cs), which flips bits in ExecutionDisplayee.RenderingFlagBitArray; EquipmentSetupPanel.vue reaches /api/mech/equipment-setup-display/* (Mech/EquipmentSetupDisplayController.cs); ToolHouseSetupPanel.vue reaches /api/mech/tool-house-display/* (Mech/ToolHouseDisplayController.cs); StlPreviewPane.vue reaches /api/stl-preview/set-coordinate/* (Disp/StlPreviewController.cs). Those last three route each POST by the caller's renderingConnectionId, so the toggle lands on that canvas's own engine; the rendering-flags surface carries no connection id and acts on the project-wide ExecutionDisplayee instead. DisplayOptionsMenu.vue is UI-only; it does no REST work itself — the caller owns the onUpdate handlers, so optimistic update and error reversion stay page-local. WPF Play/RenderingFlagSubmenu.xaml — the shared flag submenu, wrapped per surface by Numerical/Controller/ControllerExtendedRenderingCanvasToolBar.xaml and Play/PlayerExtendedRenderingCanvasToolBar.xaml. Behaviour parity with the web Scene ▾ menu; no schema-driven composition. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/RenderingCanvasToolBar.vue — the View ▾ menu. Eight callers embed it, one per canvas: wwwroot-src/src/pages/ExecutionPage.vue (teleported into the canvas panel's header, beside ExecutionExtendedToolBar), wwwroot-src/src/pages/ControllerPage.vue (beside ControllerExtendedToolBar), wwwroot-src/src/pages/MachineToolPage.vue, wwwroot-src/src/pages/MechBuilderPage.vue, wwwroot-src/src/components/mech/EquipmentSetupPanel.vue (the General Setup canvas column, mounted by wwwroot-src/src/pages/GeneralSetupPage.vue), wwwroot-src/src/components/toolhouse/ToolHouseSetupPanel.vue (mounted by wwwroot-src/src/pages/ToolHousePage.vue), wwwroot-src/src/components/StlPreviewPane.vue (the File Explorer preview pane, mounted by wwwroot-src/src/components/FileExplorer.vue) and wwwroot-src/src/components/execution/StepVolumePanel.vue (the CWE footprint canvas, teleported into its host expansion's header). Four of those sit beside a Scene ▾ menu — the Execution, General Setup, Tool House and STL preview canvases; the Machine Tool, Mechanism Builder and CWE canvases carry the View ▾ menu alone, and the Controller viewer pairs it with an inlined Scene dropdown. wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue — schema-driven dropdown described above. wwwroot-src/src/components/RenderingCanvas.vue — SignalR-hosted WebSocket canvas whose exposed setView / setViewTo*View methods the tool bar calls (see Rendering Canvas on Web Service). wwwroot-src/src/i18n/en/widgets.ts — the widgets.canvas.* keys: view, the seven preset labels, and scene. Backends: Disp/RenderingHub.cs — the SetView(string) hub method that maps each preset name onto engine calls. Disp/RenderingService.cs — GetOrCreateEngine(connectionId), the per-connection DispEngine store the hub resolves against. Common/RenderingFlagsController.cs — the /api/rendering-flags surface (GET, POST update, POST batch) behind the Execution page's Scene menu and the Controller viewer's inlined one, wrapped by wwwroot-src/src/api/renderingFlags.ts. It reads and writes ExecutionDisplayee.RenderingFlagBitArray through ProjectDisplayeeService. wwwroot-src/src/api/equipmentSetup.ts, wwwroot-src/src/api/toolHouse.ts and wwwroot-src/src/api/stlPreview.ts — the typed wrappers the other three Scene menus post through. See Also Execution Page — the page whose canvas header adopts this tool bar Execution Extended RenderingCanvas Tool Bar — the run-specific controls that sit beside it Rendering Canvas on Web Service Application — the SignalR transport whose hub actually moves the camera this menu asks for STL Preview Pane — the one caller whose canvas is a single file rather than a project scene"
+ "summary": "RenderingCanvas Tool Bar The RenderingCanvas Tool Bar is the camera-preset menu that every 3D canvas in the app carries. It holds no engine of its own: it takes a canvas prop and calls that component's exposed setView(name), which invokes the SetView hub method, and the hub is what drives the per-connection DispEngine. View Menu The bar is a single View ▾ menu. Its seven entries, in shipped order, are Isometric, Front, Back, Right, Left, Top and Bottom. The engine also understands a home view and RenderingCanvas.vue exposes setViewToHomeView, but this menu does not offer it. Entry API Method Isometric SetViewToIsometricView() Front SetViewToFrontView() Back SetViewToFrontView() + TurnBackView() Right SetViewToRightView() Left SetViewToRightView() + TurnBackView() Top SetViewToTopView() Bottom SetViewToTopView() + TurnBackView() Back View Implementation Back / Left / Bottom views are composed by first calling the corresponding forward-view method (SetViewToFrontView / SetViewToRightView / SetViewToTopView) and then invoking TurnBackView() to flip the camera about the view plane, composed in the hub's SetView switch. Canvas Binding The tool bar declares exactly one prop, a nullable canvas, typed structurally as an object exposing setView(v: string): Promise rather than as the RenderingCanvas component type. Every entry calls it optionally, so a tool bar with no canvas bound still opens and each entry is a no-op. The preset names travel to the hub untranslated; only the row labels are localized, from the widgets.canvas.* keys. Scene Menu Pages that sit next to a RenderingCanvas surface a per-page Scene ▾ menu button — the DisplayOptionsMenu component, labelled from widgets.canvas.scene because no caller overrides the label. It chooses what the 3D scene draws (solids, coordinates, display aids), as distinct from the camera-oriented View ▾ menu beside it. The layout (header + checkboxes + radio rows) is shared across four callers — the Execution page's extended tool bar, the General Setup equipment panel, the Tool House setup panel and the STL preview pane — so it is implemented once as a generic, schema-driven component. Schema Each dropdown consumes a DisplayGroup[] array. A group has an optional header and a flat list of items: { kind: 'check', label, modelValue, disable?, onUpdate } — a checkbox row. { kind: 'radio', label, groupValue, value, disable?, onUpdate } — a radio row; rows sharing a groupValue behave as one group, each row bound to its own value. The component is generic over the radio value type, so RenderingMode / HolderRenderingMode / etc. stay fully typed at the call site. Besides groups it accepts label, disable, title, minWidthPx (default 220), size (default sm), contentClass and compact. compact is a tighter-than-dense row mode, used by the General Setup and Tool House panels for their long option lists; the General Setup, Tool House and Execution callers pass content-class=\"bg-white\" to opt out of Quasar's transparent menu. HiNC-2025-webservice (Quasar CLI SPA) wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue — the shared + implementation behind four of the app's five Scene menus. The Controller viewer is the exception: wwwroot-src/src/components/controller/ControllerExtendedToolBar.vue builds its Scene dropdown inline against the same /api/rendering-flags surface. Callers (each reads a DisplayGroup[] computed from its page-local state and forwards onUpdate to its existing handlers): wwwroot-src/src/components/execution/ExecutionExtendedToolBar.vue wwwroot-src/src/components/mech/EquipmentSetupPanel.vue wwwroot-src/src/components/toolhouse/ToolHouseSetupPanel.vue wwwroot-src/src/components/StlPreviewPane.vue Backends — one per caller, each a different surface: ExecutionExtendedToolBar.vue reaches /api/rendering-flags (Common/RenderingFlagsController.cs), which flips bits in ExecutionDisplayee.RenderingFlagBitArray; EquipmentSetupPanel.vue reaches /api/mech/equipment-setup-display/* (Mech/EquipmentSetupDisplayController.cs); ToolHouseSetupPanel.vue reaches /api/mech/tool-house-display/* (Mech/ToolHouseDisplayController.cs); StlPreviewPane.vue reaches /api/stl-preview/set-coordinate/* (Disp/StlPreviewController.cs). Those last three route each POST by the caller's renderingConnectionId, so the toggle lands on that canvas's own engine; the rendering-flags surface carries no connection id and acts on the project-wide ExecutionDisplayee instead. DisplayOptionsMenu.vue is UI-only; it does no REST work itself — the caller owns the onUpdate handlers, so optimistic update and error reversion stay page-local. Source Code Path See HiNC App Anatomy for git repository links. HiNC-2025-webservice (Quasar CLI SPA): wwwroot-src/src/components/RenderingCanvasToolBar.vue — the View ▾ menu. Eight callers embed it, one per canvas: wwwroot-src/src/pages/ExecutionPage.vue (teleported into the canvas panel's header, beside ExecutionExtendedToolBar), wwwroot-src/src/pages/ControllerPage.vue (beside ControllerExtendedToolBar), wwwroot-src/src/pages/MachineToolPage.vue, wwwroot-src/src/pages/MechBuilderPage.vue, wwwroot-src/src/components/mech/EquipmentSetupPanel.vue (the General Setup canvas column, mounted by wwwroot-src/src/pages/GeneralSetupPage.vue), wwwroot-src/src/components/toolhouse/ToolHouseSetupPanel.vue (mounted by wwwroot-src/src/pages/ToolHousePage.vue), wwwroot-src/src/components/StlPreviewPane.vue (the File Explorer preview pane, mounted by wwwroot-src/src/components/FileExplorer.vue) and wwwroot-src/src/components/execution/StepVolumePanel.vue (the CWE footprint canvas, teleported into its host expansion's header). Four of those sit beside a Scene ▾ menu — the Execution, General Setup, Tool House and STL preview canvases; the Machine Tool, Mechanism Builder and CWE canvases carry the View ▾ menu alone, and the Controller viewer pairs it with an inlined Scene dropdown. wwwroot-src/src/components/widgets/DisplayOptionsMenu.vue — schema-driven dropdown described above. wwwroot-src/src/components/RenderingCanvas.vue — SignalR-hosted WebSocket canvas whose exposed setView / setViewTo*View methods the tool bar calls (see Rendering Canvas on Web Service). wwwroot-src/src/i18n/en/widgets.ts — the widgets.canvas.* keys: view, the seven preset labels, and scene. Backends: Disp/RenderingHub.cs — the SetView(string) hub method that maps each preset name onto engine calls. Disp/RenderingService.cs — GetOrCreateEngine(connectionId), the per-connection DispEngine store the hub resolves against. Common/RenderingFlagsController.cs — the /api/rendering-flags surface (GET, POST update, POST batch) behind the Execution page's Scene menu and the Controller viewer's inlined one, wrapped by wwwroot-src/src/api/renderingFlags.ts. It reads and writes ExecutionDisplayee.RenderingFlagBitArray through ProjectDisplayeeService. wwwroot-src/src/api/equipmentSetup.ts, wwwroot-src/src/api/toolHouse.ts and wwwroot-src/src/api/stlPreview.ts — the typed wrappers the other three Scene menus post through. See Also Execution Page — the page whose canvas header adopts this tool bar Execution Extended RenderingCanvas Tool Bar — the run-specific controls that sit beside it Rendering Canvas on Web Service Application — the SignalR transport whose hub actually moves the camera this menu asks for STL Preview Pane — the one caller whose canvas is a single file rather than a project scene"
},
"anatomy/widget/vec3d-control.html": {
"href": "anatomy/widget/vec3d-control.html",
"title": "Vec3dControl Component | HiAPI-C# 2025",
- "summary": "Vec3dControl Component Vec3dControl edits and displays a three-component vector. It is an embedded widget with no route and no Control-Tree node of its own, reached only through the editors that host it. Key Model The persisted model is Vec3d, exposed over /api/Vec3d by Widget/Vec3dController.cs. In the web application the widget's own model is the plain { x, y, z } number triple exported as interface Vec3 from wwwroot-src/src/components/widgets/Vec3Input.vue. The widget carries no key and calls no endpoint: the host binds it with v-model plus an @update:model-value handler, and that handler does the persisting, each host on its own terms. The four transformer editors call updateVec3d from wwwroot-src/src/api/geometry.ts, which posts all three axes together to /api/Vec3d/Update, while wwwroot-src/src/components/geom/Box3dEditor.vue folds the edited triple back into a min and max pair and posts that to /api/Box3d/Update. The WPF control likewise holds no value of its own. GetterFunc returns the live Vec3d instance, the text handlers write the parsed numbers straight onto it, and UpdateByContentFunc is awaited afterwards so the host can push the change on. The web props are modelValue, disable, readonly, normalize, labels and textMode, and the emits are update:modelValue and normalize. labels is a three-tuple defaulting to ['X', 'Y', 'Z'], and carries units where the host has them, as in ['X (mm)', 'Y (mm)', 'Z (mm)']. textMode sets the initial mode only and defaults to false. The corresponding WPF properties are ShowNormalizeButton, IsTextMode and IsReadOnly. Layout Vec3dControl Mode Toggle Button — always present; switches between the per-axis columns and the single-field text form, and is highlighted while the text form is showing X, Y and Z Input Fields — the per-axis form, three fields side by side Vector Text Field — the single-field form, standing in place of the three axis fields Normalize Button — present only when the normalize flag is set, and disabled while the control is disabled or readonly In the WPF client the two forms are two panels, StandardModePanel and TextModePanel, of which exactly one is visible; each panel carries its own mode-toggle and normalize buttons. Feature Per-axis form X, Y and Z in three separate fields. The web widget renders every finite value at full precision; the WPF control renders each axis with a fixed three decimal places. Single-field text form The web form is (x, y, z). Its parser strips surrounding brackets and splits on comma, semicolon or whitespace, requiring at least three parts, and entering the text form re-syncs the field from the current value so a stale in-progress edit is discarded. The WPF text box holds comma-separated x,y,z without brackets and accepts two further shapes: a pasted 4x4 matrix, from which it takes the translation column, and loose text, from which it takes the first three numbers it can read. Vector normalization The normalize button is opt-in and off by default in both clients: the normalize prop in the web widget, the ShowNormalizeButton property in the WPF control. In the web widget the button only raises a normalize event, and the embedding editor performs the normalization on its own owning object. wwwroot-src/src/components/topo/StaticRotationEditor.vue posts to /api/StaticRotation/NormalizeAxis, while wwwroot-src/src/components/topo/DynamicRotationEditor.vue and wwwroot-src/src/components/topo/DynamicTranslationEditor.vue call normalizeDynamicRotationAxis and normalizeDynamicTranslationAxis from wwwroot-src/src/api/transformer.ts. The WPF control normalizes the vector in place and writes the result back at three decimal places. Commit and special values Web edits commit on blur or Enter, never per keystroke, and a value is emitted only when it differs from the current model. An empty field parses to 0; any other unparseable text reverts the field to the last valid value. Formatting and parsing are local to the component: NaN renders as NaN and the infinities as Infinity and -Infinity, and the parser accepts those spellings case-insensitively as well as the ∞ and -∞ glyphs. The WPF control commits on every keystroke instead, leaving the model untouched while the text is unparseable so that a half-typed number is not treated as an error. Refer Sample Code using System; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows; using Hi.Geom; using System.Text.RegularExpressions; using System.ComponentModel; using Hi.Common; using Hi.Common.Messages; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace HiNC_2025_win_desktop.Geom { /// /// Vec3dControl.xaml 的交互逻辑 /// public partial class Vec3dControl : UserControl, INotifyPropertyChanged { private bool _isUpdating = false; private Func _getterFunc; private Func _updateByContentFunc; private bool _showNormalizeButton = false; private bool _isTextMode = false; private bool _isReadOnly = false; private readonly ILogger _logger = App.ServiceProvider.GetRequiredService>(); private static readonly Regex VectorRegex = new Regex(@\"^\\s*[\\(\\[\\{]?\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*[\\)\\]\\}]?\\s*$\", RegexOptions.Compiled); private static readonly Regex MatrixRegex = new Regex(@\"\\{(?:\\s*\\{?\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*\\}?\\s*,){3}\\s*\\{?\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*,\\s*(-?\\d*\\.?\\d+)\\s*\\}?\\s*\\}\", RegexOptions.Compiled); public event PropertyChangedEventHandler PropertyChanged; public string ControlId { get; set; } = Guid.NewGuid().ToString(); public Func GetterFunc { get => _getterFunc; set { _getterFunc = value; UpdateUI(); } } public Func UpdateByContentFunc { get => _updateByContentFunc; set => _updateByContentFunc = value; } public bool ShowNormalizeButton { get => _showNormalizeButton; set { if (_showNormalizeButton != value) { _showNormalizeButton = value; OnPropertyChanged(nameof(ShowNormalizeButton)); } } } public bool IsTextMode { get => _isTextMode; set { if (_isTextMode != value) { _isTextMode = value; UpdateModeVisibility(); OnPropertyChanged(nameof(IsTextMode)); } } } public bool IsReadOnly { get => _isReadOnly; set { if (_isReadOnly != value) { _isReadOnly = value; OnPropertyChanged(nameof(IsReadOnly)); } } } protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } public Vec3dControl() { InitializeComponent(); DataContext = this; } private void UpdateModeVisibility() { if (IsTextMode) { StandardModePanel.Visibility = Visibility.Collapsed; TextModePanel.Visibility = Visibility.Visible; UpdateVectorTextFromXYZ(); } else { StandardModePanel.Visibility = Visibility.Visible; TextModePanel.Visibility = Visibility.Collapsed; } } private void UpdateVectorTextFromXYZ() { if (_isUpdating) return; if (double.TryParse(XTextBox.Text, out double x) && double.TryParse(YTextBox.Text, out double y) && double.TryParse(ZTextBox.Text, out double z)) { VectorTextBox.Text = $\"{x},{y},{z}\"; } } private void TextModeToggle_Click(object sender, RoutedEventArgs e) { IsTextMode = true; } private void StandardModeToggle_Click(object sender, RoutedEventArgs e) { IsTextMode = false; } private async void NormalizeButton_Click(object sender, RoutedEventArgs e) { if (_isUpdating || _getterFunc == null || IsReadOnly) return; try { _isUpdating = true; var vec = _getterFunc(); if (vec != null) { vec.Normalize(); XTextBox.Text = vec.X.ToString(\"F3\"); YTextBox.Text = vec.Y.ToString(\"F3\"); ZTextBox.Text = vec.Z.ToString(\"F3\"); if (IsTextMode) { VectorTextBox.Text = $\"{vec.X:F3},{vec.Y:F3},{vec.Z:F3}\"; } if(_updateByContentFunc != null) await _updateByContentFunc(); } } catch (Exception ex) { _logger.LogWarning(string.Format(Application.Current.FindResource(\"Vec3d_Update_Error\").ToString(), ex.Message)); _logger.LogError(ex, \"{Message}\", ex.Message); } finally { _isUpdating = false; } } public void UpdateUI() { if (_isUpdating || _getterFunc == null) return; try { _isUpdating = true; var vec = _getterFunc(); if (vec != null) { XTextBox.Text = vec.X.ToString(\"F3\"); YTextBox.Text = vec.Y.ToString(\"F3\"); ZTextBox.Text = vec.Z.ToString(\"F3\"); if (IsTextMode) { VectorTextBox.Text = $\"{vec.X},{vec.Y},{vec.Z}\"; } } else { XTextBox.Text = \"\"; YTextBox.Text = \"\"; ZTextBox.Text = \"\"; VectorTextBox.Text = \"\"; } } finally { _isUpdating = false; } } private async void XTextBox_TextChanged(object sender, TextChangedEventArgs e) { await HandleTextChanged(); } private async void YTextBox_TextChanged(object sender, TextChangedEventArgs e) { await HandleTextChanged(); } private async void ZTextBox_TextChanged(object sender, TextChangedEventArgs e) { await HandleTextChanged(); } private async void VectorTextBox_TextChanged(object sender, TextChangedEventArgs e) { if (_isUpdating || _getterFunc == null || IsReadOnly) return; try { string text = VectorTextBox.Text.Trim(); // 如果文本为空或太短,不做处理 if (string.IsNullOrWhiteSpace(text) || text.Length < 3) return; _isUpdating = true; // 尝试解析为向量格式 if (TryParseVector(text, out double x, out double y, out double z)) { await UpdateVectorValues(x, y, z); } // 尝试解析为变换矩阵格式(仅提取位移分量) else if (TryParseTransformMatrix(text, out double tx, out double ty, out double tz)) { await UpdateVectorValues(tx, ty, tz); } // 尝试作为单值解析每个字段(宽松模式) else if (TryParseLooseVector(text, out double lx, out double ly, out double lz)) { await UpdateVectorValues(lx, ly, lz); } } catch (Exception ex) { _logger.LogWarning(string.Format(Application.Current.FindResource(\"Vec3d_Update_Error\").ToString(), ex.Message)); _logger.LogError(ex, \"{Message}\", ex.Message); } finally { _isUpdating = false; } } private bool TryParseVector(string text, out double x, out double y, out double z) { x = y = z = 0; // 使用正则表达式匹配向量格式 Match match = VectorRegex.Match(text); if (match.Success && match.Groups.Count >= 4) { if (double.TryParse(match.Groups[1].Value, out x) && double.TryParse(match.Groups[2].Value, out y) && double.TryParse(match.Groups[3].Value, out z)) { return true; } } return false; } private bool TryParseTransformMatrix(string text, out double tx, out double ty, out double tz) { tx = ty = tz = 0; // 移除所有换行和多余空格,便于匹配 text = Regex.Replace(text, @\"\\s+\", \" \"); // 尝试匹配变换矩阵格式 Match match = MatrixRegex.Match(text); if (match.Success && match.Groups.Count >= 8) { // 变换矩阵的第4列通常是位移分量 if (double.TryParse(match.Groups[4].Value, out tx) && double.TryParse(match.Groups[8].Value, out ty) && double.TryParse(match.Groups[12].Value, out tz)) { return true; } } // 尝试匹配更宽松的变换矩阵表示(例如从界面复制的数据) var numbers = Regex.Matches(text, @\"(-?\\d*\\.?\\d+)\"); if (numbers.Count >= 16) { // 假设这是一个4x4矩阵,提取位移分量(第4、8、12个数字) if (double.TryParse(numbers[3].Value, out tx) && double.TryParse(numbers[7].Value, out ty) && double.TryParse(numbers[11].Value, out tz)) { return true; } } return false; } private bool TryParseLooseVector(string text, out double x, out double y, out double z) { x = y = z = 0; // 移除所有非数字和小数点以外的字符,然后按空白分割 string cleanText = Regex.Replace(text, @\"[^\\d\\.\\-\\s,;]+\", \" \"); string[] parts = Regex.Split(cleanText, @\"[\\s,;]+\"); // 尝试从分割后的部分获取三个数字 var numbers = new System.Collections.Generic.List(); foreach (var part in parts) { if (!string.IsNullOrWhiteSpace(part) && double.TryParse(part, out double value)) { numbers.Add(value); if (numbers.Count >= 3) break; // 最多取3个数字 } } // 如果获取到了三个数字,就认为解析成功 if (numbers.Count >= 3) { x = numbers[0]; y = numbers[1]; z = numbers[2]; return true; } return false; } private async Task UpdateVectorValues(double x, double y, double z) { XTextBox.Text = x.ToString(\"F3\"); YTextBox.Text = y.ToString(\"F3\"); ZTextBox.Text = z.ToString(\"F3\"); var vec = _getterFunc?.Invoke(); if (vec != null) { vec.X = x; vec.Y = y; vec.Z = z; if (_updateByContentFunc != null) { await _updateByContentFunc(); } } } private async Task HandleTextChanged() { if (_isUpdating || _getterFunc == null || IsReadOnly) return; try { _isUpdating = true; // 尝试解析每个文本框的值 bool allValid = true; allValid &= double.TryParse(XTextBox.Text, out double x); allValid &= double.TryParse(YTextBox.Text, out double y); allValid &= double.TryParse(ZTextBox.Text, out double z); if (allValid) { if (IsTextMode) { VectorTextBox.Text = $\"{x},{y},{z}\"; } var vec = _getterFunc(); if (vec != null) { vec.X = x; vec.Y = y; vec.Z = z; if(_updateByContentFunc != null) await _updateByContentFunc(); } } else { // 如果有无效输入,不进行更新但也不显示错误 // 这允许用户在输入过程中有不完整的状态 } } catch (Exception ex) { // 记录异常但不中断用户操作 _logger.LogWarning(string.Format(Application.Current.FindResource(\"Vec3d_Update_Error\").ToString(), ex.Message)); _logger.LogError(ex, \"{Message}\", ex.Message); } finally { _isUpdating = false; } } } } Source Code Path See HiNC App Anatomy for git repository links. wwwroot-src/src/components/widgets/Vec3Input.vue — the widget itself: mode toggle, per-axis and single-field inputs, normalize button, and the local format and parse helpers wwwroot-src/src/api/geometry.ts — the /api/Vec3d client the transformer editors use, and the Vec3dDto shape Widget/Vec3dController.cs — the REST surface behind /api/Vec3d: New, NewWithValue, Get, Update, UpdateAt, ParseAndUpdate and Normalize. The SPA reaches Update. wwwroot-src/src/components/topo/StaticRotationEditor.vue — the full binding contract in one place: v-model, @update:model-value, the normalize opt-in and its @normalize handler wwwroot-src/src/components/topo/StaticTranslationEditor.vue — one instance, no normalize button wwwroot-src/src/components/topo/DynamicRotationEditor.vue — axis with normalize, plus pivot wwwroot-src/src/components/topo/DynamicTranslationEditor.vue — axis with normalize wwwroot-src/src/components/geom/Box3dEditor.vue — four instances (min, max, dimension, center) whose readonly state follows the current edit mode, persisted through the Box3d endpoint wwwroot-src/src/components/geom/StlFileEditor.vue — four display-only instances for the STL bounding-box pad wwwroot-src/src/i18n/en/widgets.ts — the tooltip strings under widgets.vecInput See Also Mat4dControl Component — the sibling numeric-geometry editor, and the one a reader usually wants next Numeric Input/Output — why NaN and the infinities are text on the wire, and how the three inputs differ"
+ "summary": "Vec3dControl Component Vec3dControl edits and displays a three-component vector. It is an embedded widget with no route and no Control-Tree node of its own, reached only through the editors that host it. Key Model The persisted model is Vec3d, exposed over /api/Vec3d by Widget/Vec3dController.cs. The widget's own model is the plain { x, y, z } number triple exported as interface Vec3 from wwwroot-src/src/components/widgets/Vec3Input.vue. The widget carries no key and calls no endpoint: the host binds it with v-model plus an @update:model-value handler, and that handler does the persisting, each host on its own terms. The four transformer editors call updateVec3d from wwwroot-src/src/api/geometry.ts, which posts all three axes together to /api/Vec3d/Update, while wwwroot-src/src/components/geom/Box3dEditor.vue folds the edited triple back into a min and max pair and posts that to /api/Box3d/Update. The props are modelValue, disable, readonly, normalize, labels and textMode, and the emits are update:modelValue and normalize. labels is a three-tuple defaulting to ['X', 'Y', 'Z'], and carries units where the host has them, as in ['X (mm)', 'Y (mm)', 'Z (mm)']. textMode sets the initial mode only and defaults to false. Layout Vec3dControl Mode Toggle Button — always present; switches between the per-axis columns and the single-field text form, and is highlighted while the text form is showing X, Y and Z Input Fields — the per-axis form, three fields side by side Vector Text Field — the single-field form, standing in place of the three axis fields Normalize Button — present only when the normalize flag is set, and disabled while the control is disabled or readonly Feature Per-axis form X, Y and Z in three separate fields, each rendering every finite value at full precision. Single-field text form The form is (x, y, z). Its parser strips surrounding brackets and splits on comma, semicolon or whitespace, requiring at least three parts, and entering the text form re-syncs the field from the current value so a stale in-progress edit is discarded. Vector normalization The normalize button is opt-in and off by default, through the normalize prop. The button only raises a normalize event, and the embedding editor performs the normalization on its own owning object. wwwroot-src/src/components/topo/StaticRotationEditor.vue posts to /api/StaticRotation/NormalizeAxis, while wwwroot-src/src/components/topo/DynamicRotationEditor.vue and wwwroot-src/src/components/topo/DynamicTranslationEditor.vue call normalizeDynamicRotationAxis and normalizeDynamicTranslationAxis from wwwroot-src/src/api/transformer.ts. Commit and special values Edits commit on blur or Enter, never per keystroke, and a value is emitted only when it differs from the current model. An empty field parses to 0; any other unparseable text reverts the field to the last valid value. Formatting and parsing are local to the component: NaN renders as NaN and the infinities as Infinity and -Infinity, and the parser accepts those spellings case-insensitively as well as the ∞ and -∞ glyphs. Source Code Path See HiNC App Anatomy for git repository links. wwwroot-src/src/components/widgets/Vec3Input.vue — the widget itself: mode toggle, per-axis and single-field inputs, normalize button, and the local format and parse helpers wwwroot-src/src/api/geometry.ts — the /api/Vec3d client the transformer editors use, and the Vec3dDto shape Widget/Vec3dController.cs — the REST surface behind /api/Vec3d: New, NewWithValue, Get, Update, UpdateAt, ParseAndUpdate and Normalize. The SPA reaches Update. wwwroot-src/src/components/topo/StaticRotationEditor.vue — the full binding contract in one place: v-model, @update:model-value, the normalize opt-in and its @normalize handler wwwroot-src/src/components/topo/StaticTranslationEditor.vue — one instance, no normalize button wwwroot-src/src/components/topo/DynamicRotationEditor.vue — axis with normalize, plus pivot wwwroot-src/src/components/topo/DynamicTranslationEditor.vue — axis with normalize wwwroot-src/src/components/geom/Box3dEditor.vue — four instances (min, max, dimension, center) whose readonly state follows the current edit mode, persisted through the Box3d endpoint wwwroot-src/src/components/geom/StlFileEditor.vue — four display-only instances for the STL bounding-box pad wwwroot-src/src/i18n/en/widgets.ts — the tooltip strings under widgets.vecInput See Also Mat4dControl Component — the sibling numeric-geometry editor, and the one a reader usually wants next Numeric Input/Output — why NaN and the infinities are text on the wire, and how the three inputs differ"
},
"api/Hi.Cbtr.CachedTris.SweepingMode.html": {
"href": "api/Hi.Cbtr.CachedTris.SweepingMode.html",
@@ -4409,6 +4409,11 @@
"title": "Namespace Hi.NcParsers.Dependencys.Siemens | HiAPI-C# 2025",
"summary": "Namespace Hi.NcParsers.Dependencys.Siemens Classes SiemensFrameTable Sinumerik settable work coordinate frames ($P_UIFR[n]). Models G54–G57 (ISO-compatible), G505–G599 (extended Siemens), and G500 (cancel — always zero). On real Sinumerik, $P_UIFR is a frame array containing translation, rotation, scale and mirror per entry. HiNC currently consumes only the translation component, so this table stores Vec3d per id. $P_UIFR is NOT in the machine data table — therefore this is a separate dependency from SiemensMachineDataTable (which holds MD-prefixed OEM machine data such as MD30300 axis type, MD34010 reference position, etc.). Deliberately not ISessionResettable: settable frames are setting data on the control — a $P_UIFR write from the program survives reset and power-off, so a replayed session must see the values the previous run wrote. SiemensFrameTableProxy Get-or-create INcDependencyProxy for SiemensFrameTable: a placeholder in the shared PipelineNcDependencyList that resolves the host project's own per-case settable work frames ($P_UIFR, G54–G57…). SiemensGotoIterationDependency Watchdog for Siemens GOTOF/GOTOB jumps — the label-keyed sibling of the Fanuc FanucGotoIterationDependency, with the same “soft-cap + runtime counter + session-init ISessionResettable” shape. Kept per-brand (rather than widening the Fanuc dep's int-keyed bucket) for diagnostic clarity and because Siemens targets are named labels, not N-numbers. The counter key is (FileName, Label) where FileName is the source-level file path of the jump host (the relative form carried on FilePath). Source-level keying means multiple inline invocations of the same subprogram pool their counts, while two files each jumping to their own LBL1 stay isolated. Forward and backward jumps to the same label share one bucket — only the backward direction can loop, but a shared bucket keeps the accounting simple and the cap generous. The consuming syntax (SiemensGotoSyntax) counts after the condition gate and before the label scan; above MaxIterationsPerLabel the jump warns SiemensGoto--IterationLimitExceeded and falls through. A missing dependency disables the cap (Fanuc parity) — the brand preset wires one by default. SiemensLoopIterationDependency Watchdog shared by all four Siemens loop constructs (WHILE/ENDWHILE, FOR/ENDFOR, REPEAT/UNTIL, LOOP/ENDLOOP) — construct-neutral by design, unlike the Fanuc sibling (FanucWhileDoIterationDependency) which only has WHILE to guard. Same “soft-cap + runtime counter + session-init ISessionResettable” shape. Siemens loop constructs carry no LoopId, so the counter key is (FileName, BeginLineNo) — the loop-entry line recorded in the active frame identifies the construct uniquely within its file, and the file path isolates identically-numbered lines across files (and across inlined subprograms). The consuming syntax (SiemensLoopSyntax) counts at the back-jump step (the loop terminator / falsy UNTIL), so a loop whose condition is false from the outset consumes zero iterations. Above MaxIterationsPerLoop the terminator warns SiemensLoop--IterationLimitExceeded, pops the frame and falls through. A missing dependency disables the cap for the condition-bearing constructs (Fanuc parity) but hard-blocks the ENDLOOP back-jump — LOOP has no exit condition, so an uncapped back-jump would hang the pipeline deterministically. SiemensMachineDataTable Siemens Sinumerik machine data table. Stores machine data (MD numbers) as system and per-axis parameters. MD10000–MD19999: General machine data. MD20000–MD29999: Axis-specific machine data. MD30000–MD39999: Axis-specific machine data (extended). Deliberately not ISessionResettable: machine data is control configuration a part program cannot mutate, so there is no session-scoped state to clear. SiemensMachineDataTableProxy Get-or-create INcDependencyProxy for SiemensMachineDataTable: a placeholder in the shared PipelineNcDependencyList that resolves the host project's own machine data table. Like the Fanuc-family parameter table, the Siemens machine data mixes machine config (axis types / reference positions / velocities / indexing tables) with per-project edits, so the proxy carries a fixed machine-config Seed that is serialized into the shared runner file. On wire, the host receives a deep clone of the seed only when it has no SiemensMachineDataTable yet; a loaded project's own full table wins, so a same-brand re-flash re-binds to the project's machine data instead of resetting it. The resolved host table is fully serialized on the project. The proxy deliberately does not implement the machine-config interfaces (IMachineAxisConfig, IIndexingPositionConfig, etc.) — every machine-config consumer must go through GetEffectiveNcDependencyList() so it sees the resolved host table, never this placeholder. SiemensRParameterTable Sinumerik R-parameter table (R0-R999). R parameters are the Siemens arithmetic-variable surface (R63=100.5, C=R61, R26=(558.5+14)/2); on real hardware they live in retentive memory (sized by MD28050) and survive program end and power cycles, so — like the Fanuc sibling RetainedCommonVariableTable — this table is not session-reset and is serialised into the project file. Reads flow through Get(string) (registered automatically because the table sits on the runner's effective NcDependencyList); writes flow through SiemensRParameterReadingSyntax, which consumes literal Parsing.Assignments.Rn entries after VariableEvaluatorSyntax has normalized expression RHS to literals. Vacant is represented by null: either the dictionary has no entry for the key, or the entry maps to null — both read identically. Real Sinumerik default-initialises every allocated R to 0, but a vacant read failing loud (Variable--Vacant via the evaluator) surfaces missing setup data instead of silently machining with 0. SiemensRParameterTableProxy Get-or-create INcDependencyProxy for SiemensRParameterTable: a placeholder in the shared PipelineNcDependencyList that resolves the host project's own per-case R parameters (R0–R999). SiemensToolEdgeOffset One Siemens cutting-edge offset row ($TC_DP fields for a (T, D) pair): geometry lengths L1/L2/L3 ($TC_DP3/4/5), radius ($TC_DP6) and the corresponding wear values ($TC_DP12/13/14/15) as typed properties (all mm), plus VerbatimDpFields for every other $TC_DP index — same split as SiemensMachineDataTable's well-known-MD properties over a generic parameter bag. A typed property means the simulation consumes the field; a bag entry means the value is stored and round-tripped but not interpreted. SiemensToolOffsetTable Per-case Siemens tool offset table — the first concrete ISiemensToolOffsetConfig ($TC_DP model): one SiemensToolEdgeOffset row per (tool number T, cutting edge D), each carrying the three length components + radius with their wear counterparts, plus a verbatim bag for the remaining $TC_DP indices (round-tripped, not consumed — see VerbatimDpFields). Effective values are geometry + wear — Sinumerik wear ($TC_DP12..15) is additive; a worn-down tool carries a negative wear value. Unconfigured (T, D) pairs return 0 per the interface contract. Also carries the ToolNames map ($TC_TP2 analog, case-insensitive) so Siemens string tool calls (T=\"D8R1\") can resolve to the int-keyed act chain — consumed by ToolChangeSemantic. Per-case editable data — reaches the pipeline through SiemensToolOffsetTableProxy on the host's PerCaseNcDependencyList, never as a concrete instance baked into the shared runner. Deliberately separate from SiemensMachineDataTable (MD-prefixed machine-fixed OEM data) — same split rationale as SiemensFrameTable. SiemensToolOffsetTableProxy Get-or-create INcDependencyProxy for SiemensToolOffsetTable: a placeholder in the shared PipelineNcDependencyList that resolves the host project's own per-case Siemens ($TC_DP) tool offset table. Interfaces ISiemensToolOffsetConfig Siemens (840D/Sinumerik) tool offset configuration. Offsets are addressed by (tool number T, cutting edge D number), unlike IToolOffsetConfig where a single integer selects the row. Siemens stores up to 25 data fields per cutting edge ($TC_DP1..$TC_DP25), including three independent length components (L1/L2/L3 for Z/X/Y directions), radius, and corresponding wear values."
},
+ "api/Hi.NcParsers.Dependencys.StrokeLimitUtil.html": {
+ "href": "api/Hi.NcParsers.Dependencys.StrokeLimitUtil.html",
+ "title": "Class StrokeLimitUtil | HiAPI-C# 2025",
+ "summary": "Class StrokeLimitUtil Namespace Hi.NcParsers.Dependencys Assembly HiMech.dll Load-time audit helpers for IStrokeLimitConfig: which machine-coordinate axes the chain has, and which of them the stroke limit check cannot judge because no limit is configured. Both checks — the per-block StrokeLimitCheckSemantic and the per-step CheckStrokeLimit(DVec3d, IProgress) — compare only axes that carry a limit, so a machine file without limits passes every position silently while EnableStrokeLimitCheck reads as on. The session begin reports that gap once through these helpers. public static class StrokeLimitUtil Inheritance object StrokeLimitUtil Inherited Members object.Equals(object) object.Equals(object, object) object.GetHashCode() object.GetType() object.MemberwiseClone() object.ReferenceEquals(object, object) object.ToString() Fields McAxisNames Machine-coordinate axis names, linear first then rotary. public static readonly string[] McAxisNames Field Value string[] Methods DescribeUnlimitedAxes(IEnumerable, Func, Func) Describes the axes among axisNames that the stroke limit check cannot judge: an axis with neither end configured is listed by name, an axis with one end only is listed with the missing end (\"Z (no negative limit)\"). Empty when every axis has both ends. A limit of NaN or ±infinity counts as not configured (the legacy HardNcEnv boxes default to an infinite box). public static List DescribeUnlimitedAxes(IEnumerable axisNames, Func positiveLimit, Func negativeLimit) Parameters axisNames IEnumerable The axes to audit, normally GetChainAxisNames(IXyzabcChain, bool). positiveLimit Func Positive-end limit per axis; null when not configured. negativeLimit Func Negative-end limit per axis; null when not configured. Returns List GetChainAxisNames(IXyzabcChain, bool) The machine-coordinate axes chain actually has: an axis counts when a transformer is bound to its name (GetTransformerX() … GetTransformerC()). A three-axis chain yields X, Y, Z only; a null chain yields nothing. public static List GetChainAxisNames(IXyzabcChain chain, bool linearOnly = false) Parameters chain IXyzabcChain The machine chain, or null. linearOnly bool When true, only the translation axes (X, Y, Z) are returned. A travel audit wants this: a linear axis always has a finite travel, so a missing limit is unambiguously a gap, while a rotary table that turns continuously legitimately has none and cannot be given one. Returns List"
+ },
"api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html": {
"href": "api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html",
"title": "Class SyntecParameterTable | HiAPI-C# 2025",
@@ -4487,7 +4492,7 @@
"api/Hi.NcParsers.Dependencys.html": {
"href": "api/Hi.NcParsers.Dependencys.html",
"title": "Namespace Hi.NcParsers.Dependencys | HiAPI-C# 2025",
- "summary": "Namespace Hi.NcParsers.Dependencys Classes CncBrandDependency Explicit CNC controller brand identifier carried in PipelineNcDependencyList. Use ncDependencyList.OfType().FirstOrDefault() to retrieve the brand. ControllerParameterTableBase Base class for brand-specific controller parameter tables. Provides shared data structures, XML IO, and IHomeMcConfig IMachineAxisConfig implementations. Subclasses define brand-specific parameter numbers, XML attribute names, and derived convenience properties. HeidenhainDatumTable Heidenhain datum preset and datum shift tables. CYCL DEF 247 Q339=N reads from DatumPresetTable, CYCL DEF 7 #N reads from DatumShiftTable. Each table maps an integer ID (1–20) to a Vec3d offset. On real Heidenhain controllers, preset and datum tables are separate disk files (e.g. TNC:\\table\\preset.pr, *.d) — distinct from MP-prefixed Machine Parameters (held by HeidenhainParameterTable). HiNC mirrors that separation by keeping this dependency independent of HeidenhainParameterTable. Implements IIsoCoordinateConfig by mapping the ISO/DIN G54–G59 codes to preset rows 1–6, the conventional Heidenhain compatibility mapping for ISO/DIN programs running on a Heidenhain. HeidenhainDatumTableProxy Get-or-create INcDependencyProxy for HeidenhainDatumTable: a placeholder in the shared PipelineNcDependencyList that resolves the host project's own per-case datum preset / datum shift tables. IsoCoordinateAddressMap Fanuc-style ISO coordinate parameter address mapping. G54–G59 → #5221+ (stride 20, three consecutive numbers per entry for X/Y/Z), G54.1 P1–P48 → #7001+ (stride 20). Shared between FanucParameterTable (which calls these “ParamId”) and SyntecParameterTable (which calls them “PrId”) because both follow the same numeric scheme. MCodeEffects What one machine-declared M-code does. Real-machine OEM M-codes are frequently composite — e.g. an M13 that means “spindle CW + flood coolant on” — so a declaration carries every effect the code performs rather than a single meaning, and additionally an UnmodeledNote for the parts this simulation does not model. Declaring only the known parts and staying loud about the rest keeps a composite code from being half-consumed silently. Stored per machine in MCodeDeclarations and consumed by MCodeExpansionSyntax, which expands the declared code into the canonical ISO flags the regular consumers already understand. Interfaces IBlockSkipConfig Runtime state of the controller's Block Delete / Block Skip switches. Present in PipelineNcDependencyList exposes this to the runner so that blocks whose head carries / or /N (parsed by BlockSkipSyntax into BlockSkip) are skipped at semantic time. Layers are 1..9; Layer 1 corresponds to the bare / prefix. Controllers (Fanuc / Syntec / Mazak / Siemens) let each layer be toggled independently via panel switches or system parameters. When this dependency is absent from PipelineNcDependencyList, no block is skipped (safest default: simulate the full machining). The syntax still consumes the / prefix so no UnparsedText--Remaining diagnostic is produced. ICannedCycleConfig Canned cycle configuration parameters. Implemented by brand-specific parameter tables (e.g., FanucParameterTable for Fanuc #4002, SyntecParameterTable for Syntec Pr4002) and by FallbackConfig as a safety net. Siemens and Heidenhain specify peck clearance per-call (CYCLE83 parameter / CYCL DEF), so their tables do not implement this interface. The FallbackConfig provides the default value in those cases. IHomeMcConfig G28 first reference position (home machine coordinate) per axis. IIndexingPositionConfig Indexing-axis position table: maps 1-based indexing position numbers to axis coordinates for axes that only take up discrete stations (Hirth couplings, indexing rotary tables, turret-style workholders). Consumed by the coded-position coordinate functions (Siemens CAC()/CIC()/CDC()/CACP()/CACN() — unwrapped by SiemensAcIcSyntax, resolved by McAbcSyntax / IncrementalResolveSyntax via CodedPositionUtil). Implemented by SiemensMachineDataTable using the Siemens machine data (MD30500 $MA_INDEX_AX_ASSIGN_POS_TAB per axis; global tables MD10910/MD10930; equidistant MD30501–MD30503). Positions are expressed in the axis' native units (degrees for rotary, mm for linear) in the coordinate frame the axis word itself is written in — machine coordinates for rotary words, program coordinates for linear words. Position numbering is 1-based: number 1 is the first table entry (the Siemens machine-data help and alarm texts count this way; the 0-based value range printed in some programming-manual editions describes the machine-data array index, not the programmable number). IIsoCoordinateConfig ISO work coordinate offset provider. Maps a G-code work coordinate id (e.g. “G54”, “G59.2”, “G54.1P1”) to a machine-coordinate offset Vec3d. Implementations include IsoCoordinateTable (brand-agnostic standalone storage), FanucParameterTable / SyntecParameterTable (parameter-table integration via real Fanuc/Syntec parameter numbers #5221+ for G54–G59 and #7001+ for G54.1 P1–P48), SiemensFrameTable (Sinumerik $P_UIFR frames), and HeidenhainDatumTable (Heidenhain preset rows). IMCodeDeclarationConfig Machine-declared M-code map: what each machine-specific (OEM/PLC) M-code does, as MCodeEffects — possibly several effects per code (tool change, spindle direction, coolant) plus a note for behavior this simulation does not model. Consumed by MCodeExpansionSyntax, which expands declared codes into the canonical ISO flags ahead of the regular consumers. Machine-level (per-case parameter table) rather than brand vocabulary — implemented by ControllerParameterTableBase, alongside the narrower ISpindleControlConfig face over the same storage. IMachineAxisConfig Machine axis configuration: which axes exist and their types. Compatible with Fanuc, Siemens, Heidenhain, Mazak, Okuma. INcDependency Marker interface for objects that participate in the NC dependency list resolved by the soft-NC runtime. INcDependencyListHost Hosts a per-case INcDependency list that INcDependencyProxy placeholders in a shared SoftNcRunner resolve their data against. Implemented by the object owning both the shared runner and the varied setting data — e.g. MachiningProject. INcDependencyProxy An INcDependency placeholder that resolves the real dependency lazily at pipeline-build time instead of carrying the data itself. Lets a shared SoftNcRunner hold only the fixed pipeline logic while the frequently-varied data lives on the owning INcDependencyListHost (e.g. a MachiningProject). \"Maker and taker\": GetNcDependency() either constructs the dependency on demand (maker) or fetches one from the host wired by InitNcDependencyHost(INcDependencyListHost) (taker). A get-or-create proxy does both — it takes the host's instance when present and otherwise makes one, installing it into the host list so it persists and is editable per case. A proxy may carry runtime-only state (the wired host, a memoized resolved dependency). That state is host-wired per run and MUST NOT be written by MakeXmlSource(string, string, bool) — same runtime-only posture as ProjectFolderDependency. IPowerResettable Marks an INcDependency that holds volatile state which must be cleared when the controller performs a power reset (power off then on). Implementers should clear only the volatile subset they own (e.g. Fanuc common volatile macro variables #100-#499), and leave persistent state untouched (e.g. #500-#999, controller parameters). Call-frame local state (Fanuc #1-#33, Heidenhain Q200-Q1199) is NOT in scope — that lives in the SyntaxPiece JSON dataflow and is bounded by call activation, not power cycle. IRapidFeedrateConfig Provides per-axis rapid traverse feedrate for motion semantics. Implemented by ControllerParameterTableBase using brand-specific parameter numbers (e.g., Fanuc #1420, Siemens MD32000, Heidenhain MP1010). ISpindleControlConfig Machine-specific spindle control codes: maps custom spindle direction M-codes to SpindleDirection — e.g., an ultrasonic spindle started by M203 (CW) and stopped by M205 (STOP) instead of ISO M03/M05. Consulted by SpindleSpeedSyntax in addition to the built-in ISO defaults (M03/M04/M05), which always stay in effect; a configured code wins over its ISO meaning when both match. Machine-level (per-case parameter table) rather than brand vocabulary — implemented by ControllerParameterTableBase as a spindle-direction face over its MCodeDeclarations storage (the multi-effect IMCodeDeclarationConfig map), so one code is never half-recognized by two separate maps. IStrokeLimitConfig Per-axis stroke (travel) limits. Unit is mm for linear axes, deg for rotary axes. Implemented by ControllerParameterTableBase using brand-specific parameter numbers (e.g., Fanuc #1300/#1320, Siemens MD36100/MD36110, Heidenhain MP420/MP430). IToolChangeTriggerConfig Machine-level tool-change trigger mode. Machining centers with a magazine treat a bare T word as pre-selection only (the magazine rotates, no feed axis moves) and change the tool on the trigger M-code; lathes/turret machines index the turret — and thereby change the tool — on the T word itself. Real controllers declare this per machine (e.g. Siemens MD22550 $MC_TOOL_CHANGE_MODE, where 0 means the T word performs the change). Consulted by ToolChangeSyntax; machine-level (per-case parameter table) rather than brand vocabulary — implemented by ControllerParameterTableBase. Custom trigger M-codes are the separate IMCodeDeclarationConfig concern (IsToolChange). IToolOffsetConfig Tool offset configuration indexed by a single integer offset number. Applies to Fanuc (H/D numbers), Heidenhain (tool number), Mazak, Okuma, and other ISO-compatible controllers where one integer selects the offset row. For Siemens (840D/Sinumerik) where offsets are addressed by (tool number, cutting edge D number), see ISiemensToolOffsetConfig. IToolingMcConfig Machine position axes move to during tool change (M06). Enums AxisType Axis type: linear (translation), rotary (rotation), or spindle (speed/positioning dual mode)."
+ "summary": "Namespace Hi.NcParsers.Dependencys Classes CncBrandDependency Explicit CNC controller brand identifier carried in PipelineNcDependencyList. Use ncDependencyList.OfType().FirstOrDefault() to retrieve the brand. ControllerParameterTableBase Base class for brand-specific controller parameter tables. Provides shared data structures, XML IO, and IHomeMcConfig IMachineAxisConfig implementations. Subclasses define brand-specific parameter numbers, XML attribute names, and derived convenience properties. HeidenhainDatumTable Heidenhain datum preset and datum shift tables. CYCL DEF 247 Q339=N reads from DatumPresetTable, CYCL DEF 7 #N reads from DatumShiftTable. Each table maps an integer ID (1–20) to a Vec3d offset. On real Heidenhain controllers, preset and datum tables are separate disk files (e.g. TNC:\\table\\preset.pr, *.d) — distinct from MP-prefixed Machine Parameters (held by HeidenhainParameterTable). HiNC mirrors that separation by keeping this dependency independent of HeidenhainParameterTable. Implements IIsoCoordinateConfig by mapping the ISO/DIN G54–G59 codes to preset rows 1–6, the conventional Heidenhain compatibility mapping for ISO/DIN programs running on a Heidenhain. HeidenhainDatumTableProxy Get-or-create INcDependencyProxy for HeidenhainDatumTable: a placeholder in the shared PipelineNcDependencyList that resolves the host project's own per-case datum preset / datum shift tables. IsoCoordinateAddressMap Fanuc-style ISO coordinate parameter address mapping. G54–G59 → #5221+ (stride 20, three consecutive numbers per entry for X/Y/Z), G54.1 P1–P48 → #7001+ (stride 20). Shared between FanucParameterTable (which calls these “ParamId”) and SyntecParameterTable (which calls them “PrId”) because both follow the same numeric scheme. MCodeEffects What one machine-declared M-code does. Real-machine OEM M-codes are frequently composite — e.g. an M13 that means “spindle CW + flood coolant on” — so a declaration carries every effect the code performs rather than a single meaning, and additionally an UnmodeledNote for the parts this simulation does not model. Declaring only the known parts and staying loud about the rest keeps a composite code from being half-consumed silently. Stored per machine in MCodeDeclarations and consumed by MCodeExpansionSyntax, which expands the declared code into the canonical ISO flags the regular consumers already understand. StrokeLimitUtil Load-time audit helpers for IStrokeLimitConfig: which machine-coordinate axes the chain has, and which of them the stroke limit check cannot judge because no limit is configured. Both checks — the per-block StrokeLimitCheckSemantic and the per-step CheckStrokeLimit(DVec3d, IProgress) — compare only axes that carry a limit, so a machine file without limits passes every position silently while EnableStrokeLimitCheck reads as on. The session begin reports that gap once through these helpers. Interfaces IBlockSkipConfig Runtime state of the controller's Block Delete / Block Skip switches. Present in PipelineNcDependencyList exposes this to the runner so that blocks whose head carries / or /N (parsed by BlockSkipSyntax into BlockSkip) are skipped at semantic time. Layers are 1..9; Layer 1 corresponds to the bare / prefix. Controllers (Fanuc / Syntec / Mazak / Siemens) let each layer be toggled independently via panel switches or system parameters. When this dependency is absent from PipelineNcDependencyList, no block is skipped (safest default: simulate the full machining). The syntax still consumes the / prefix so no UnparsedText--Remaining diagnostic is produced. ICannedCycleConfig Canned cycle configuration parameters. Implemented by brand-specific parameter tables (e.g., FanucParameterTable for Fanuc #4002, SyntecParameterTable for Syntec Pr4002) and by FallbackConfig as a safety net. Siemens and Heidenhain specify peck clearance per-call (CYCLE83 parameter / CYCL DEF), so their tables do not implement this interface. The FallbackConfig provides the default value in those cases. IHomeMcConfig G28 first reference position (home machine coordinate) per axis. IIndexingPositionConfig Indexing-axis position table: maps 1-based indexing position numbers to axis coordinates for axes that only take up discrete stations (Hirth couplings, indexing rotary tables, turret-style workholders). Consumed by the coded-position coordinate functions (Siemens CAC()/CIC()/CDC()/CACP()/CACN() — unwrapped by SiemensAcIcSyntax, resolved by McAbcSyntax / IncrementalResolveSyntax via CodedPositionUtil). Implemented by SiemensMachineDataTable using the Siemens machine data (MD30500 $MA_INDEX_AX_ASSIGN_POS_TAB per axis; global tables MD10910/MD10930; equidistant MD30501–MD30503). Positions are expressed in the axis' native units (degrees for rotary, mm for linear) in the coordinate frame the axis word itself is written in — machine coordinates for rotary words, program coordinates for linear words. Position numbering is 1-based: number 1 is the first table entry (the Siemens machine-data help and alarm texts count this way; the 0-based value range printed in some programming-manual editions describes the machine-data array index, not the programmable number). IIsoCoordinateConfig ISO work coordinate offset provider. Maps a G-code work coordinate id (e.g. “G54”, “G59.2”, “G54.1P1”) to a machine-coordinate offset Vec3d. Implementations include IsoCoordinateTable (brand-agnostic standalone storage), FanucParameterTable / SyntecParameterTable (parameter-table integration via real Fanuc/Syntec parameter numbers #5221+ for G54–G59 and #7001+ for G54.1 P1–P48), SiemensFrameTable (Sinumerik $P_UIFR frames), and HeidenhainDatumTable (Heidenhain preset rows). IMCodeDeclarationConfig Machine-declared M-code map: what each machine-specific (OEM/PLC) M-code does, as MCodeEffects — possibly several effects per code (tool change, spindle direction, coolant) plus a note for behavior this simulation does not model. Consumed by MCodeExpansionSyntax, which expands declared codes into the canonical ISO flags ahead of the regular consumers. Machine-level (per-case parameter table) rather than brand vocabulary — implemented by ControllerParameterTableBase, alongside the narrower ISpindleControlConfig face over the same storage. IMachineAxisConfig Machine axis configuration: which axes exist and their types. Compatible with Fanuc, Siemens, Heidenhain, Mazak, Okuma. INcDependency Marker interface for objects that participate in the NC dependency list resolved by the soft-NC runtime. INcDependencyListHost Hosts a per-case INcDependency list that INcDependencyProxy placeholders in a shared SoftNcRunner resolve their data against. Implemented by the object owning both the shared runner and the varied setting data — e.g. MachiningProject. INcDependencyProxy An INcDependency placeholder that resolves the real dependency lazily at pipeline-build time instead of carrying the data itself. Lets a shared SoftNcRunner hold only the fixed pipeline logic while the frequently-varied data lives on the owning INcDependencyListHost (e.g. a MachiningProject). \"Maker and taker\": GetNcDependency() either constructs the dependency on demand (maker) or fetches one from the host wired by InitNcDependencyHost(INcDependencyListHost) (taker). A get-or-create proxy does both — it takes the host's instance when present and otherwise makes one, installing it into the host list so it persists and is editable per case. A proxy may carry runtime-only state (the wired host, a memoized resolved dependency). That state is host-wired per run and MUST NOT be written by MakeXmlSource(string, string, bool) — same runtime-only posture as ProjectFolderDependency. IPowerResettable Marks an INcDependency that holds volatile state which must be cleared when the controller performs a power reset (power off then on). Implementers should clear only the volatile subset they own (e.g. Fanuc common volatile macro variables #100-#499), and leave persistent state untouched (e.g. #500-#999, controller parameters). Call-frame local state (Fanuc #1-#33, Heidenhain Q200-Q1199) is NOT in scope — that lives in the SyntaxPiece JSON dataflow and is bounded by call activation, not power cycle. IRapidFeedrateConfig Provides per-axis rapid traverse feedrate for motion semantics. Implemented by ControllerParameterTableBase using brand-specific parameter numbers (e.g., Fanuc #1420, Siemens MD32000, Heidenhain MP1010). ISpindleControlConfig Machine-specific spindle control codes: maps custom spindle direction M-codes to SpindleDirection — e.g., an ultrasonic spindle started by M203 (CW) and stopped by M205 (STOP) instead of ISO M03/M05. Consulted by SpindleSpeedSyntax in addition to the built-in ISO defaults (M03/M04/M05), which always stay in effect; a configured code wins over its ISO meaning when both match. Machine-level (per-case parameter table) rather than brand vocabulary — implemented by ControllerParameterTableBase as a spindle-direction face over its MCodeDeclarations storage (the multi-effect IMCodeDeclarationConfig map), so one code is never half-recognized by two separate maps. IStrokeLimitConfig Per-axis stroke (travel) limits. Unit is mm for linear axes, deg for rotary axes. Implemented by ControllerParameterTableBase using brand-specific parameter numbers (e.g., Fanuc #1300/#1320, Siemens MD36100/MD36110, Heidenhain MP420/MP430). IToolChangeTriggerConfig Machine-level tool-change trigger mode. Machining centers with a magazine treat a bare T word as pre-selection only (the magazine rotates, no feed axis moves) and change the tool on the trigger M-code; lathes/turret machines index the turret — and thereby change the tool — on the T word itself. Real controllers declare this per machine (e.g. Siemens MD22550 $MC_TOOL_CHANGE_MODE, where 0 means the T word performs the change). Consulted by ToolChangeSyntax; machine-level (per-case parameter table) rather than brand vocabulary — implemented by ControllerParameterTableBase. Custom trigger M-codes are the separate IMCodeDeclarationConfig concern (IsToolChange). IToolOffsetConfig Tool offset configuration indexed by a single integer offset number. Applies to Fanuc (H/D numbers), Heidenhain (tool number), Mazak, Okuma, and other ISO-compatible controllers where one integer selects the offset row. For Siemens (840D/Sinumerik) where offsets are addressed by (tool number, cutting edge D number), see ISiemensToolOffsetConfig. IToolingMcConfig Machine position axes move to during tool change (M06). Enums AxisType Axis type: linear (translation), rotary (rotation), or spindle (speed/positioning dual mode)."
},
"api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html": {
"href": "api/Hi.NcParsers.EvaluationSyntaxs.CallStackUtil.html",
@@ -5422,7 +5427,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\" } } 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. 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"
},
"api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html": {
"href": "api/Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html",
@@ -5472,7 +5477,7 @@
"api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html": {
"href": "api/Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html",
"title": "Class G43p4RtcpSyntax | HiAPI-C# 2025",
- "summary": "Class G43p4RtcpSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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). public class G43p4RtcpSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object G43p4RtcpSyntax 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 pivots around -X through origin (table side); B pivots around +Y through origin (head side). Both pivot axes pass through (0,0,0) because CodeXyzabcChain uses zero-offset component attachments — the head-B origin pivot is a pedagogical simplification (a real table-head machine has the spindle pivot offset from origin). Realistic MachineCoordinateState therefore carries A and B only; there is no C axis in this chain (5-axis machines have at most two rotary axes). Verification cue: with B=30° on the head side and the cutter extending +Z in tool frame at ABC=0, the tool normal after the head rotation lies at (sin 30°, 0, cos 30°); multiplying by the 10 mm tool length gives Trans ≈ (5, 0, 8.66). Explicit G43.4 H1 activation with no IMachineKinematics and no IToolOffsetConfig in the dependency list — exercises the activate path on its identity-matrix corner. The section is written with Offset_mm = 0 (no offset table → rawHeight = 0); the height-mat falls back to the no-kinematics branch new Mat4d { Trans = UnitZ * 0 } which collapses to identity; abcChanged is false (no current MC, no previous block) so the entry is tagged KindStatic. #BeforeBuild: { \"Parsing\": { \"G43.4\": { \"H\": \"1\" } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 0, \"Term\": \"G43.4\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G43.4 H1 with ToolOffset(1 → 10 mm), the real 5-axis solver above, and current block carrying both rotary axes MachineCoordinateState.A = 0, B = 30 (as a prior McAbcSyntax would have written on this machine). The height-mat goes through MakeToolHeightMat(IMachineKinematics, Vec3d, double) which probes kinematics.McToPn(Zero, abc).Normal at abc = (0, π/6, 0) to get the tool orientation, then scales by 10 mm. With no previous block, abcChanged is false → entry stays Static: #BeforeBuild: { \"Parsing\": { \"G43.4\": { \"H\": \"1\" } }, \"MachineCoordinateState\": { \"A\": 0, \"B\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"A\": 0, \"B\": 30 }, \"ToolHeightCompensation\": { \"Offset_mm\": 10, \"Term\": \"G43.4\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.999999999999999, 0, 8.660254037844387, 1 ] } ] } Same setup plus a #Previous: block with MachineCoordinateState.B = 0 + XYZ origin — DidAbcChange(LazyLinkedListNode, IMachineAxisConfig) compares the rotary deltas and finds B changed across the block, so the entry is tagged KindDynamic (signalling that the tool orientation varies along the contour): #Previous: { \"MachineCoordinateState\": { \"X\": 0, \"Y\": 0, \"Z\": 0, \"A\": 0, \"B\": 0 } } #BeforeBuild: { \"Parsing\": { \"G43.4\": { \"H\": \"1\" } }, \"MachineCoordinateState\": { \"A\": 0, \"B\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"A\": 0, \"B\": 30 }, \"ToolHeightCompensation\": { \"Offset_mm\": 10, \"Term\": \"G43.4\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Dynamic\", \"Mat4d\": [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.999999999999999, 0, 8.660254037844387, 1 ] } ] } Explicit activation whose H did not survive variable evaluation (vacant #100 stays a string) — no offset id resolves, RTCP still activates with a zero-length compensation (identity height mat) and the syntax emits the Comp-ToolHeight--001 validation warning (asserted by the integration test; the dump below pins the JSON shape only): #BeforeBuild: { \"Parsing\": { \"G43.4\": { \"H\": \"#100\" } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 0, \"Term\": \"G43.4\", \"OffsetId\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G43.4 with no H word on a block whose ToolChange section says tool 1 is in the spindle — the offset id is the equipped tool number (HardNc parity), the same ToolOffset(1 → 10 mm) and real kinematics as above, no rotary state so the tool normal is +Z and the height-mat carries Trans = (0, 0, 10). A bare G43.4 arrives as a flag (no parameter object to hang an H on): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G43.4\"] }, \"ToolChange\": { \"ToolId\": 1, \"IsChange\": true, \"Term\": \"M06\" } } #AfterBuild: { \"ToolChange\": { \"ToolId\": 1, \"IsChange\": true, \"Term\": \"M06\" }, \"ToolHeightCompensation\": { \"Offset_mm\": 10, \"Term\": \"G43.4\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,10,1] } ] } Constructors G43p4RtcpSyntax() Initializes a new instance with default settings. public G43p4RtcpSyntax() G43p4RtcpSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public G43p4RtcpSyntax(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 G43p4RtcpSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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). public class G43p4RtcpSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object G43p4RtcpSyntax 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 pivots around -X through origin (table side); B pivots around +Y through origin (head side). Both pivot axes pass through (0,0,0) because CodeXyzabcChain uses zero-offset component attachments — the head-B origin pivot is a pedagogical simplification (a real table-head machine has the spindle pivot offset from origin). Realistic MachineCoordinateState therefore carries A and B only; there is no C axis in this chain (5-axis machines have at most two rotary axes). Verification cue: with B=30° on the head side and the cutter extending +Z in tool frame at ABC=0, the tool normal after the head rotation lies at (sin 30°, 0, cos 30°); multiplying by the 10 mm tool length gives Trans ≈ (5, 0, 8.66). Explicit G43.4 H1 activation with no IMachineKinematics and no IToolOffsetConfig in the dependency list — exercises the activate path on its identity-matrix corner. The section is written with Offset_mm = 0 (no offset table → rawHeight = 0); the height-mat falls back to the no-kinematics branch new Mat4d { Trans = UnitZ * 0 } which collapses to identity; abcChanged is false (no current MC, no previous block) so the entry is tagged KindStatic. #BeforeBuild: { \"Parsing\": { \"G43.4\": { \"H\": \"1\" } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 0, \"Term\": \"G43.4\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G43.4 H1 with ToolOffset(1 → 10 mm), the real 5-axis solver above, and current block carrying both rotary axes MachineCoordinateState.A = 0, B = 30 (as a prior McAbcSyntax would have written on this machine). The height-mat goes through MakeToolHeightMat(IMachineKinematics, Vec3d, double) which probes kinematics.McToPn(Zero, abc).Normal at abc = (0, π/6, 0) to get the tool orientation, then scales by 10 mm. With no previous block, abcChanged is false → entry stays Static: #BeforeBuild: { \"Parsing\": { \"G43.4\": { \"H\": \"1\" } }, \"MachineCoordinateState\": { \"A\": 0, \"B\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"A\": 0, \"B\": 30 }, \"ToolHeightCompensation\": { \"Offset_mm\": 10, \"Term\": \"G43.4\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.999999999999999, 0, 8.660254037844387, 1 ] } ] } Same setup plus a #Previous: block with MachineCoordinateState.B = 0 + XYZ origin — DidAbcChange(LazyLinkedListNode, IMachineAxisConfig) compares the rotary deltas and finds B changed across the block, so the entry is tagged KindDynamic (signalling that the tool orientation varies along the contour): #Previous: { \"MachineCoordinateState\": { \"X\": 0, \"Y\": 0, \"Z\": 0, \"A\": 0, \"B\": 0 } } #BeforeBuild: { \"Parsing\": { \"G43.4\": { \"H\": \"1\" } }, \"MachineCoordinateState\": { \"A\": 0, \"B\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"A\": 0, \"B\": 30 }, \"ToolHeightCompensation\": { \"Offset_mm\": 10, \"Term\": \"G43.4\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Dynamic\", \"Mat4d\": [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 4.999999999999999, 0, 8.660254037844387, 1 ] } ] } Explicit activation whose H did not survive variable evaluation (vacant #100 stays a string) — no offset id resolves, RTCP still activates with a zero-length compensation (identity height mat) and the syntax emits the Comp-ToolHeight--001 validation warning (asserted by the integration test; the dump below pins the JSON shape only): #BeforeBuild: { \"Parsing\": { \"G43.4\": { \"H\": \"#100\" } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 0, \"Term\": \"G43.4\", \"OffsetId\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G43.4 with no H word on a block whose ToolChange section says tool 1 is in the spindle — the offset id is the equipped tool number (HardNc parity), the same ToolOffset(1 → 10 mm) and real kinematics as above, no rotary state so the tool normal is +Z and the height-mat carries Trans = (0, 0, 10). A bare G43.4 arrives as a flag (no parameter object to hang an H on): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G43.4\"] }, \"ToolChange\": { \"ToolId\": 1, \"IsChange\": true, \"Term\": \"M06\" } } #AfterBuild: { \"ToolChange\": { \"ToolId\": 1, \"IsChange\": true, \"Term\": \"M06\" }, \"ToolHeightCompensation\": { \"Offset_mm\": 10, \"Term\": \"G43.4\", \"OffsetId\": 1 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,10,1] } ] } The first block after a program end — #Previous: carries the ProgramEnd section next to the still-active G43.4, and the block itself swings a rotary axis (as a post-M02 G0 A90. does when a CAM file chains several programs). This is the reset edge (ProgramEndSyntax): the controller's reset cancels tool-center-point control, so the modal is not carried, no Dynamic entry is written (the swing stays a plain McLinear rotary move instead of pinning the tool tip), and the block gets the G49 sentinel with the identity Mat4d — ToolHeightOffsetSyntax skipped this block because the previous term was not ISO: #Previous: { \"ProgramEnd\": { \"Term\": \"M02\" }, \"MachineCoordinateState\": { \"X\": 0, \"Y\": 0, \"Z\": 0, \"A\": 0, \"B\": 0 }, \"ToolHeightCompensation\": { \"Offset_mm\": 10, \"Term\": \"G43.4\", \"OffsetId\": 1 } } #BeforeBuild: { \"MachineCoordinateState\": { \"A\": 90, \"B\": 0 } } #AfterBuild: { \"MachineCoordinateState\": { \"A\": 90, \"B\": 0 }, \"ToolHeightCompensation\": { \"Offset_mm\": 0, \"Term\": \"G49\", \"OffsetId\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } Constructors G43p4RtcpSyntax() Initializes a new instance with default settings. public G43p4RtcpSyntax() G43p4RtcpSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public G43p4RtcpSyntax(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.G53p1RotaryPositionSyntax.html": {
"href": "api/Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html",
@@ -5557,7 +5562,7 @@
"api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax.html": {
"href": "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax.html",
"title": "Class HeidenhainRtcpSyntax | HiAPI-C# 2025",
- "summary": "Class HeidenhainRtcpSyntax Namespace Hi.NcParsers.LogicSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain RTCP (M128/M129, FUNCTION TCPM/FUNCTION RESET TCPM): the Heidenhain sibling of G43p4RtcpSyntax and SiemensTraoriSyntax. While RTCP is active the IToolHeightCompensationDef section carries the activating term (M128Term or TcpmTerm) and the ToolHeightCompensation chain entry becomes a tool-normal · offset translation at the block endpoint ABC (MakeToolHeightMat(IMachineKinematics, Vec3d, double)), tagged KindDynamic when the rotary state changes across the block — the signal that routes the block to ClLinear per-step IK. Tool length ownership stays with the TOOL CALL machinery (HeidenhainToolOffsetSyntax — table height + DL, which runs earlier in the bundle): activation adopts the compensation already resolved on this or the previous block and records the adopted owner in PriorTermKey; a TOOL CALL during the modal re-takes the section with the fresh offset; M129 / FUNCTION RESET TCPM hands the section back to the recorded owner (default Term — klartext tool-length compensation survives RTCP deactivation). The TOOL CALL Delta_mm (DL) rides along so the hand-back restores it. A deactivation with no active RTCP (the corpus' ubiquitous program-head M129) is consumed silently. Same-block contradiction (M128 with M129): the off state wins conservatively (the P1 rule, kept for continuity). The M128 feed limit (M128 F6000., or an FQn token the evaluator could not resolve) is recorded on the section as FeedLimitKey — recorded, not simulated. FUNCTION TCPM behavior arguments are recorded by the parsing syntax and warn Tcpm--ArgsNotSimulated on activation. Must run after ToolHeightOffsetSyntax / HeidenhainToolOffsetSyntax and the coordinate-offset syntaxes (mirroring the Fanuc G43.4 / Siemens TRAORI slot) and before HeidenhainPivotTransformationSyntax, whose gate recognizes the RtcpTerms and folds the kinematic pivot. Silently degrades to a plain UnitZ · offset translation when IMachineKinematics is absent. public class HeidenhainRtcpSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainRtcpSyntax 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 Activation adopting the TOOL CALL compensation resolved earlier on the same block (feed limit recorded; owner recorded for hand-back): #BeforeBuild: { \"Parsing\": { \"M128\": { \"F\": 6000 } }, \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"TOOL CALL\", \"OffsetId\": 2, \"Delta_mm\": 0.5 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,120.5,1] } ] } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"M128\", \"OffsetId\": 2, \"PriorTerm\": \"TOOL CALL\", \"Delta_mm\": 0.5, \"FeedLimit\": 6000 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,120.5,1] } ] } Modal continuation — no word on the block; the snapshot is carried and the entry rebuilt: #Previous: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"M128\", \"OffsetId\": 2, \"PriorTerm\": \"TOOL CALL\", \"Delta_mm\": 0.5, \"FeedLimit\": 6000 } } #BeforeBuild: {} #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"M128\", \"OffsetId\": 2, \"PriorTerm\": \"TOOL CALL\", \"Delta_mm\": 0.5, \"FeedLimit\": 6000 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,120.5,1] } ] } M129 hand-back — the section returns to the recorded owner and the plain translation entry is rebuilt; TOOL CALL modal re-resolution resumes on following blocks: #Previous: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"M128\", \"OffsetId\": 2, \"PriorTerm\": \"TOOL CALL\", \"Delta_mm\": 0.5, \"FeedLimit\": 6000 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M129\"] } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"TOOL CALL\", \"OffsetId\": 2, \"Delta_mm\": 0.5 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,120.5,1] } ] } Defensive M129 with no active RTCP (every GPE program head) — consumed silently, nothing written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M129\"] } } #AfterBuild: {} Bare activation with no prior compensation and no kinematics — the section is taken with zero offset and the entry collapses to identity: #BeforeBuild: { \"Parsing\": { \"M128\": { \"Bare\": true } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 0, \"Term\": \"M128\", \"OffsetId\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } Constructors HeidenhainRtcpSyntax() Initializes a new instance with default settings. public HeidenhainRtcpSyntax() HeidenhainRtcpSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainRtcpSyntax(XElement src) Parameters src XElement Source XML element. Fields FeedLimitKey Section key recording the M128 feed limit (compensating-movement feed cap) — recorded, not simulated. public const string FeedLimitKey = \"FeedLimit\" Field Value string M128Term Ownership term while the classic M128 RTCP is active. public const string M128Term = \"M128\" Field Value string RtcpTerms The Heidenhain RTCP terms — the brand vocabulary the pivot gate (HeidenhainPivotTransformationSyntax) recognizes on the ToolHeightCompensation section. public static readonly string[] RtcpTerms Field Value string[] TcpmTerm Ownership term while FUNCTION TCPM RTCP is active. public const string TcpmTerm = \"FUNCTION TCPM\" Field Value string 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 IsRtcpTerm(string) True when term is a Heidenhain RTCP owner term. public static bool IsRtcpTerm(string term) Parameters term string Returns bool 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 HeidenhainRtcpSyntax Namespace Hi.NcParsers.LogicSyntaxs.Heidenhain Assembly HiMech.dll Heidenhain RTCP (M128/M129, FUNCTION TCPM/FUNCTION RESET TCPM): the Heidenhain sibling of G43p4RtcpSyntax and SiemensTraoriSyntax. While RTCP is active the IToolHeightCompensationDef section carries the activating term (M128Term or TcpmTerm) and the ToolHeightCompensation chain entry becomes a tool-normal · offset translation at the block endpoint ABC (MakeToolHeightMat(IMachineKinematics, Vec3d, double)), tagged KindDynamic when the rotary state changes across the block — the signal that routes the block to ClLinear per-step IK. Tool length ownership stays with the TOOL CALL machinery (HeidenhainToolOffsetSyntax — table height + DL, which runs earlier in the bundle): activation adopts the compensation already resolved on this or the previous block and records the adopted owner in PriorTermKey; a TOOL CALL during the modal re-takes the section with the fresh offset; M129 / FUNCTION RESET TCPM hands the section back to the recorded owner (default Term — klartext tool-length compensation survives RTCP deactivation). The TOOL CALL Delta_mm (DL) rides along so the hand-back restores it. A deactivation with no active RTCP (the corpus' ubiquitous program-head M129) is consumed silently. Same-block contradiction (M128 with M129): the off state wins conservatively (the P1 rule, kept for continuity). The M128 feed limit (M128 F6000., or an FQn token the evaluator could not resolve) is recorded on the section as FeedLimitKey — recorded, not simulated. FUNCTION TCPM behavior arguments are recorded by the parsing syntax and warn Tcpm--ArgsNotSimulated on activation. Must run after ToolHeightOffsetSyntax / HeidenhainToolOffsetSyntax and the coordinate-offset syntaxes (mirroring the Fanuc G43.4 / Siemens TRAORI slot) and before HeidenhainPivotTransformationSyntax, whose gate recognizes the RtcpTerms and folds the kinematic pivot. Silently degrades to a plain UnitZ · offset translation when IMachineKinematics is absent. public class HeidenhainRtcpSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object HeidenhainRtcpSyntax 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 Activation adopting the TOOL CALL compensation resolved earlier on the same block (feed limit recorded; owner recorded for hand-back): #BeforeBuild: { \"Parsing\": { \"M128\": { \"F\": 6000 } }, \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"TOOL CALL\", \"OffsetId\": 2, \"Delta_mm\": 0.5 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,120.5,1] } ] } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"M128\", \"OffsetId\": 2, \"PriorTerm\": \"TOOL CALL\", \"Delta_mm\": 0.5, \"FeedLimit\": 6000 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,120.5,1] } ] } Modal continuation — no word on the block; the snapshot is carried and the entry rebuilt: #Previous: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"M128\", \"OffsetId\": 2, \"PriorTerm\": \"TOOL CALL\", \"Delta_mm\": 0.5, \"FeedLimit\": 6000 } } #BeforeBuild: {} #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"M128\", \"OffsetId\": 2, \"PriorTerm\": \"TOOL CALL\", \"Delta_mm\": 0.5, \"FeedLimit\": 6000 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,120.5,1] } ] } M129 hand-back — the section returns to the recorded owner and the plain translation entry is rebuilt; TOOL CALL modal re-resolution resumes on following blocks: #Previous: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"M128\", \"OffsetId\": 2, \"PriorTerm\": \"TOOL CALL\", \"Delta_mm\": 0.5, \"FeedLimit\": 6000 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M129\"] } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"TOOL CALL\", \"OffsetId\": 2, \"Delta_mm\": 0.5 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,120.5,1] } ] } Defensive M129 with no active RTCP (every GPE program head) — consumed silently, nothing written: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M129\"] } } #AfterBuild: {} Bare activation with no prior compensation and no kinematics — the section is taken with zero offset and the entry collapses to identity: #BeforeBuild: { \"Parsing\": { \"M128\": { \"Bare\": true } } } #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 0, \"Term\": \"M128\", \"OffsetId\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } The first block after a program end — #Previous: carries the ProgramEnd section (END PGM, M2 or M30) next to the still-active M128. This is the reset edge (ProgramEndSyntax): the TNC resets M128 / FUNCTION TCPM at program end while the TOOL CALL length compensation stays, so the block gets exactly the M129 hand-back: #Previous: { \"ProgramEnd\": { \"Term\": \"END PGM\" }, \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"M128\", \"OffsetId\": 2, \"PriorTerm\": \"TOOL CALL\", \"Delta_mm\": 0.5, \"FeedLimit\": 6000 } } #BeforeBuild: {} #AfterBuild: { \"ToolHeightCompensation\": { \"Offset_mm\": 120.5, \"Term\": \"TOOL CALL\", \"OffsetId\": 2, \"Delta_mm\": 0.5 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,120.5,1] } ] } Constructors HeidenhainRtcpSyntax() Initializes a new instance with default settings. public HeidenhainRtcpSyntax() HeidenhainRtcpSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public HeidenhainRtcpSyntax(XElement src) Parameters src XElement Source XML element. Fields FeedLimitKey Section key recording the M128 feed limit (compensating-movement feed cap) — recorded, not simulated. public const string FeedLimitKey = \"FeedLimit\" Field Value string M128Term Ownership term while the classic M128 RTCP is active. public const string M128Term = \"M128\" Field Value string RtcpTerms The Heidenhain RTCP terms — the brand vocabulary the pivot gate (HeidenhainPivotTransformationSyntax) recognizes on the ToolHeightCompensation section. public static readonly string[] RtcpTerms Field Value string[] TcpmTerm Ownership term while FUNCTION TCPM RTCP is active. public const string TcpmTerm = \"FUNCTION TCPM\" Field Value string 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 IsRtcpTerm(string) True when term is a Heidenhain RTCP owner term. public static bool IsRtcpTerm(string term) Parameters term string Returns bool 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.Heidenhain.HeidenhainStockDeclarationSyntax.html": {
"href": "api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainStockDeclarationSyntax.html",
@@ -5602,7 +5607,7 @@
"api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html": {
"href": "api/Hi.NcParsers.LogicSyntaxs.IsoG68p2TiltSyntax.html",
"title": "Class IsoG68p2TiltSyntax | HiAPI-C# 2025",
- "summary": "Class IsoG68p2TiltSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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). public class IsoG68p2TiltSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoG68p2TiltSyntax 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 pivots around -X through origin (table side); B pivots around +Y through origin (head side). Both pivot axes pass through (0,0,0) because CodeXyzabcChain uses zero-offset component attachments — origin pivots are physically realistic for a table-table trunnion layout but not for a head pivot on a real table-head machine; here the zero-offset chain is a pedagogical simplification. Only the IK-refinement cases (2 and 3) use kinematics; cases 0 (G69 cancel) and 1 (pure IJK euler) are kinematics-free. Verification cue: the IK refinement path computes orientationDelta = ijkAbcOrient.Inverse * ijkRotation to preserve the exact IJK orientation while aligning with the kinematic ABC solution. For this chain at IJK=(0,30°,0), the solver's polished convergence lands the table-A angle within ~1e-8 rad of 30°, and that residual lives in the Mat4d off-diagonals visible in case 3 (≈1e-8-scale entries). G69 cancel via TryHandleG69(JsonObject, JsonObject) — the kinematics-free short-circuit path that writes the identity tilt. Standalone G69 — the flag is consumed, TiltTransform is written with Term: \"G69\", and an identity Mat4d entry is added to ProgramToMcTransform so any previously composed tilt rotation is reset: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G69\"] } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G69\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G68.2 with IJK = (0, 30, 0) and no kinematics dep — exercises the pure ZXZ Fanuc euler math (Rz(K=0) * Rx(J=30°) * Rz(I=0) * Translate(0) = Rx(30°)) without any IK refinement. The TiltTransform section retains the G68.2 ctor params for debug; the chain entry's Mat4d is the rotation matrix: #BeforeBuild: { \"Parsing\": { \"G68.2\": { \"X\": 0, \"Y\": 0, \"Z\": 0, \"I\": 0, \"J\": 30, \"K\": 0 } } } #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 ] } ] } Same G68.2 IJK with a real XyzabcSolver (table-A / head-B 5-axis layout) — hasPostAbc is false but the kinematics solves OrientationToMcAbc(tiltByIjk) successfully, so the refinement path ijkAbcOrientation * orientationDelta * Translate(origin) runs. The resulting Mat4d preserves the IJK orientation but aligns it with the kinematic ABC solution: #BeforeBuild: { \"Parsing\": { \"G68.2\": { \"X\": 0, \"Y\": 0, \"Z\": 0, \"I\": 0, \"J\": 30, \"K\": 0 } } } #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.8660254037844388, 0.49999999999999994, 0, 0, -0.49999999999999994, 0.8660254037844388, 0, 0, 0, 0, 1 ] } ] } G68.2 IJK with explicit post-processor rotary hints A=0, B=30 — hasPostAbc is true, kinematics first solves tiltByIjk → ijkMcAbc, then overrides A/B with the explicit values to form postMcAbc; the final Mat4d combines postAbcOrient * orientationDeltaIjkToPost * Translate(origin). The TiltTransform section gains the consumed A and B entries: #BeforeBuild: { \"Parsing\": { \"G68.2\": { \"X\": 0, \"Y\": 0, \"Z\": 0, \"I\": 0, \"J\": 30, \"K\": 0 }, \"A\": 0, \"B\": 30 } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G68.2\", \"X\": 0, \"Y\": 0, \"Z\": 0, \"I\": 0, \"J\": 30, \"K\": 0, \"A\": 0, \"B\": 30 }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [ 0.8660254037844387, 9.927341754201178E-09, -0.4999999999999999, 0, 0, 0.9999999999999999, 1.985468350840236E-08, 0, 0.49999999999999994, -1.719466030237639E-08, 0.8660254037844386, 0, 0, 0, 0, 1 ] } ] } Remarks G68.2 optionally uses IMachineKinematics dependency for IK refinement. The ZXZ euler convention is Fanuc-specific: Rz(K) * Rx(J) * Rz(I) * Translate(origin). Optional A/B/C parameters are post-processor rotary axis hints. When present and IMachineKinematics is available, the tilt is computed as: kinematicRotation(postAbc) * orientationDelta * Translate(origin) where orientationDelta = kinematicRotation(ijkAbc).Inverse * ijkRotation preserves the exact IJK orientation while aligning with the post-processor's solution. When kinematics is configured but the inverse-kinematics solve fails (orientation outside rotary-axis travel, or unrepresentable by the chain), the tilt falls back to the un-refined IJK euler result and a validation warning is emitted — Coord-Tilt--001 on the plain IJK path, Coord-Tilt--002 on the explicit A/B/C path. A missing kinematics dependency is not a warning: IK is optional refinement for G68.2 and the euler tilt is a complete result on its own. Constructors IsoG68p2TiltSyntax() Initializes a new instance with default settings. public IsoG68p2TiltSyntax() IsoG68p2TiltSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoG68p2TiltSyntax(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 IsoG68p2TiltSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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). public class IsoG68p2TiltSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object IsoG68p2TiltSyntax 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 pivots around -X through origin (table side); B pivots around +Y through origin (head side). Both pivot axes pass through (0,0,0) because CodeXyzabcChain uses zero-offset component attachments — origin pivots are physically realistic for a table-table trunnion layout but not for a head pivot on a real table-head machine; here the zero-offset chain is a pedagogical simplification. Only the IK-refinement cases (2 and 3) use kinematics; cases 0 (G69 cancel) and 1 (pure IJK euler) are kinematics-free. Verification cue: the IK refinement path computes orientationDelta = ijkAbcOrient.Inverse * ijkRotation to preserve the exact IJK orientation while aligning with the kinematic ABC solution. For this chain at IJK=(0,30°,0), the solver's polished convergence lands the table-A angle within ~1e-8 rad of 30°, and that residual lives in the Mat4d off-diagonals visible in case 3 (≈1e-8-scale entries). G69 cancel via TryHandleG69(JsonObject, JsonObject) — the kinematics-free short-circuit path that writes the identity tilt. Standalone G69 — the flag is consumed, TiltTransform is written with Term: \"G69\", and an identity Mat4d entry is added to ProgramToMcTransform so any previously composed tilt rotation is reset: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G69\"] } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G69\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } G68.2 with IJK = (0, 30, 0) and no kinematics dep — exercises the pure ZXZ Fanuc euler math (Rz(K=0) * Rx(J=30°) * Rz(I=0) * Translate(0) = Rx(30°)) without any IK refinement. The TiltTransform section retains the G68.2 ctor params for debug; the chain entry's Mat4d is the rotation matrix: #BeforeBuild: { \"Parsing\": { \"G68.2\": { \"X\": 0, \"Y\": 0, \"Z\": 0, \"I\": 0, \"J\": 30, \"K\": 0 } } } #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 ] } ] } Same G68.2 IJK with a real XyzabcSolver (table-A / head-B 5-axis layout) — hasPostAbc is false but the kinematics solves OrientationToMcAbc(tiltByIjk) successfully, so the refinement path ijkAbcOrientation * orientationDelta * Translate(origin) runs. The resulting Mat4d preserves the IJK orientation but aligns it with the kinematic ABC solution: #BeforeBuild: { \"Parsing\": { \"G68.2\": { \"X\": 0, \"Y\": 0, \"Z\": 0, \"I\": 0, \"J\": 30, \"K\": 0 } } } #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.8660254037844388, 0.49999999999999994, 0, 0, -0.49999999999999994, 0.8660254037844388, 0, 0, 0, 0, 1 ] } ] } G68.2 IJK with explicit post-processor rotary hints A=0, B=30 — hasPostAbc is true, kinematics first solves tiltByIjk → ijkMcAbc, then overrides A/B with the explicit values to form postMcAbc; the final Mat4d combines postAbcOrient * orientationDeltaIjkToPost * Translate(origin). The TiltTransform section gains the consumed A and B entries: #BeforeBuild: { \"Parsing\": { \"G68.2\": { \"X\": 0, \"Y\": 0, \"Z\": 0, \"I\": 0, \"J\": 30, \"K\": 0 }, \"A\": 0, \"B\": 30 } } #AfterBuild: { \"TiltTransform\": { \"Term\": \"G68.2\", \"X\": 0, \"Y\": 0, \"Z\": 0, \"I\": 0, \"J\": 30, \"K\": 0, \"A\": 0, \"B\": 30 }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [ 0.8660254037844387, 9.927341754201178E-09, -0.4999999999999999, 0, 0, 0.9999999999999999, 1.985468350840236E-08, 0, 0.49999999999999994, -1.719466030237639E-08, 0.8660254037844386, 0, 0, 0, 0, 1 ] } ] } The first block after a program end — #Previous: carries the ProgramEnd section next to the still-active G68.2. This is the reset edge (ProgramEndSyntax): the controller's reset cancels the tilted work plane, so CarryForwardFromPrevious(LazyLinkedListNode, JsonObject) does not carry the tilt and writes the explicit G69 cancel state instead (the same shape as case 0), leaving the unrelated G00 flag alone: #Previous: { \"ProgramEnd\": { \"Term\": \"M30\" }, \"TiltTransform\": { \"Term\": \"G68.2\", \"X\": 0, \"Y\": 0, \"Z\": 0, \"I\": 0, \"J\": 30, \"K\": 0 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G00\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"G00\"] }, \"TiltTransform\": { \"Term\": \"G69\" }, \"ProgramToMcTransform\": [ { \"Source\": \"TiltTransform\", \"Kind\": \"Static\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1] } ] } Remarks G68.2 optionally uses IMachineKinematics dependency for IK refinement. The ZXZ euler convention is Fanuc-specific: Rz(K) * Rx(J) * Rz(I) * Translate(origin). Optional A/B/C parameters are post-processor rotary axis hints. When present and IMachineKinematics is available, the tilt is computed as: kinematicRotation(postAbc) * orientationDelta * Translate(origin) where orientationDelta = kinematicRotation(ijkAbc).Inverse * ijkRotation preserves the exact IJK orientation while aligning with the post-processor's solution. When kinematics is configured but the inverse-kinematics solve fails (orientation outside rotary-axis travel, or unrepresentable by the chain), the tilt falls back to the un-refined IJK euler result and a validation warning is emitted — Coord-Tilt--001 on the plain IJK path, Coord-Tilt--002 on the explicit A/B/C path. A missing kinematics dependency is not a warning: IK is optional refinement for G68.2 and the euler tilt is a complete result on its own. Constructors IsoG68p2TiltSyntax() Initializes a new instance with default settings. public IsoG68p2TiltSyntax() IsoG68p2TiltSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public IsoG68p2TiltSyntax(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.IsoLocalCoordinateOffsetSyntax.html": {
"href": "api/Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html",
@@ -5622,7 +5627,7 @@
"api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html": {
"href": "api/Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html",
"title": "Class MachineCoordSelectSyntax | HiAPI-C# 2025",
- "summary": "Class MachineCoordSelectSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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) are left to McAbcSyntax — same behavior as ISO G53, where rotary axes flow through the normal rotary path. 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. public class MachineCoordSelectSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object MachineCoordSelectSyntax 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 G53 with full XYZ on a first block (no #Previous:) — FindPreviousMc falls back to Vec3d.Zero, transform defaults to identity, so ProgramXyz equals MachineCoordinateState. A non-modal MotionEvent is stamped with Term: “G53” for bidirectional source recovery (per the precedence rule on Term); IsRapid inherits from the modal MotionState.Term (G00 → true, G01/G02/G03 → false, none → true as the conservative “safe rapid” default common in practice): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true, \"Term\": \"G53\" } } G53 with only Z specified — FindPreviousMc picks up X/Y from the previous block's MachineCoordinateState; Z is overwritten; MotionEvent stamped as above: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": -200 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"Z\": 0 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": 0 }, \"ProgramXyz\": { \"X\": 100, \"Y\": 50, \"Z\": 0 }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true, \"Term\": \"G53\" } } G91 active on the same block — G53 incompatible with G91 incremental positioning per ISO standard. Syntax emits validation error Coord-MachCoord–006, consumes the G53 flag and any X/Y/Z, and writes no machine state. Positioning section preserved: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10 }, \"Positioning\": { \"Term\": \"G91\" } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\" } } Standalone G53 with no X/Y/Z — G53 by itself has no destination to interpret as machine coordinates, so the syntax emits validation error Coord-MachCoord–007 and consumes the flag without writing machine state: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"] } } #AfterBuild: {} Siemens SUPA retract (SUT configured with SupportedCodes = [“G53”, “G153”, “SUPA”]) — corpus shape N5 SUPA G0 Z1150 D0: the matched code is stamped verbatim as Term, missing X/Y fill from the previous machine position, the motion-mode flag is claimed into the modal MotionState (LinearMotionSyntax skips this block, so nobody else would), and the D word stays in Parsing for its own consumer: #Previous: { \"MachineCoordinateState\": { \"X\": 500, \"Y\": 1000, \"Z\": -30 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"SUPA\", \"G00\"], \"Z\": 1150, \"D\": 0 } } #AfterBuild: { \"Parsing\": { \"D\": 0 }, \"MachineCoordinateState\": { \"X\": 500, \"Y\": 1000, \"Z\": 1150 }, \"ProgramXyz\": { \"X\": 500, \"Y\": 1000, \"Z\": 1150 }, \"MotionState\": { \"Term\": \"G00\" }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true, \"Term\": \"SUPA\" } } Per-word incremental word on the machine-coordinate block (klartext L IY-10 M91, Siemens SUPA Y=IC(-10)) — a distance in the MACHINE frame: added to the previous machine position, never re-based through the program frame. This is why the syntax sits ahead of IncrementalResolveSyntax in every brand list; the override section stays on the block (one-shot, nobody consumes it): #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": -200 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"Y\": -10 }, \"PositioningOverride\": { \"Y\": \"Incremental\" } } #AfterBuild: { \"PositioningOverride\": { \"Y\": \"Incremental\" }, \"MachineCoordinateState\": { \"X\": 100, \"Y\": 40, \"Z\": -200 }, \"ProgramXyz\": { \"X\": 100, \"Y\": 40, \"Z\": -200 }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true, \"Term\": \"G53\" } } Constructors MachineCoordSelectSyntax() Initializes a new instance with default settings. public MachineCoordSelectSyntax() MachineCoordSelectSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public MachineCoordSelectSyntax(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 SupportedCodes One-shot machine-coordinate codes this syntax consumes; defaults to ISO G53. The Siemens preset widens the list to G53 + G153 + SUPA. The first list entry present in Parsing.Flags is stamped as Term; every listed code present on the block is consumed so none re-triggers the unconsumed-parsing warning. public List SupportedCodes { get; set; } Property Value List 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 MachineCoordSelectSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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. public class MachineCoordSelectSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object MachineCoordSelectSyntax 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 G53 with full XYZ on a first block (no #Previous:) — FindPreviousMc falls back to Vec3d.Zero, transform defaults to identity, so ProgramXyz equals MachineCoordinateState. A non-modal MotionEvent is stamped with Term: “G53” for bidirectional source recovery (per the precedence rule on Term); IsRapid inherits from the modal MotionState.Term (G00 → true, G01/G02/G03 → false, none → true as the conservative “safe rapid” default common in practice): #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10, \"Y\": 20, \"Z\": 30 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"ProgramXyz\": { \"X\": 10, \"Y\": 20, \"Z\": 30 }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true, \"Term\": \"G53\" } } G53 with only Z specified — FindPreviousMc picks up X/Y from the previous block's MachineCoordinateState; Z is overwritten; MotionEvent stamped as above: #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": -200 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"Z\": 0 } } #AfterBuild: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": 0 }, \"ProgramXyz\": { \"X\": 100, \"Y\": 50, \"Z\": 0 }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true, \"Term\": \"G53\" } } G91 active on the same block — G53 incompatible with G91 incremental positioning per ISO standard. Syntax emits validation error Coord-MachCoord–006, consumes the G53 flag and any X/Y/Z, and writes no machine state. Positioning section preserved: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"X\": 10 }, \"Positioning\": { \"Term\": \"G91\" } } #AfterBuild: { \"Positioning\": { \"Term\": \"G91\" } } Standalone G53 with no X/Y/Z — G53 by itself has no destination to interpret as machine coordinates, so the syntax emits validation error Coord-MachCoord–007 and consumes the flag without writing machine state: #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"] } } #AfterBuild: {} Siemens SUPA retract (SUT configured with SupportedCodes = [“G53”, “G153”, “SUPA”]) — corpus shape N5 SUPA G0 Z1150 D0: the matched code is stamped verbatim as Term, missing X/Y fill from the previous machine position, the motion-mode flag is claimed into the modal MotionState (LinearMotionSyntax skips this block, so nobody else would), and the D word stays in Parsing for its own consumer: #Previous: { \"MachineCoordinateState\": { \"X\": 500, \"Y\": 1000, \"Z\": -30 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"SUPA\", \"G00\"], \"Z\": 1150, \"D\": 0 } } #AfterBuild: { \"Parsing\": { \"D\": 0 }, \"MachineCoordinateState\": { \"X\": 500, \"Y\": 1000, \"Z\": 1150 }, \"ProgramXyz\": { \"X\": 500, \"Y\": 1000, \"Z\": 1150 }, \"MotionState\": { \"Term\": \"G00\" }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true, \"Term\": \"SUPA\" } } Per-word incremental word on the machine-coordinate block (klartext L IY-10 M91, Siemens SUPA Y=IC(-10)) — a distance in the MACHINE frame: added to the previous machine position, never re-based through the program frame. This is why the syntax sits ahead of IncrementalResolveSyntax in every brand list; the override section stays on the block (one-shot, nobody consumes it): #Previous: { \"MachineCoordinateState\": { \"X\": 100, \"Y\": 50, \"Z\": -200 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\"], \"Y\": -10 }, \"PositioningOverride\": { \"Y\": \"Incremental\" } } #AfterBuild: { \"PositioningOverride\": { \"Y\": \"Incremental\" }, \"MachineCoordinateState\": { \"X\": 100, \"Y\": 40, \"Z\": -200 }, \"ProgramXyz\": { \"X\": 100, \"Y\": 40, \"Z\": -200 }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true, \"Term\": \"G53\" } } Rotary-only machine-coordinate block under RTCP (G0 G53 A0. while G43.4 is active) — McAbcSyntax has already consumed the rotary word into MachineCoordinateState, and G43p4RtcpSyntax has tagged the chain Dynamic because the tool orientation changes across the block. The linear axes hold the previous machine position (G53 applies no compensation, so the swing turns the axis in place instead of pinning the tool tip) and the motion is stamped McLinear; ProgramXyz is the tip's program coordinate after the swing — the 10 mm tool-height entry is inverted, MC Z 0 → program Z −10: #Previous: { \"MachineCoordinateState\": { \"X\": -1, \"Y\": -1, \"Z\": 0, \"A\": 90 } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"G53\", \"G00\"] }, \"MachineCoordinateState\": { \"A\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Dynamic\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,10,1] } ] } #AfterBuild: { \"MachineCoordinateState\": { \"A\": 0, \"X\": -1, \"Y\": -1, \"Z\": 0 }, \"ProgramToMcTransform\": [ { \"Source\": \"ToolHeightCompensation\", \"Kind\": \"Dynamic\", \"Mat4d\": [1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,10,1] } ], \"ProgramXyz\": { \"X\": -1, \"Y\": -1, \"Z\": -10 }, \"MotionState\": { \"Term\": \"G00\" }, \"MotionEvent\": { \"Form\": \"McLinear\", \"IsRapid\": true, \"Term\": \"G53\" } } Constructors MachineCoordSelectSyntax() Initializes a new instance with default settings. public MachineCoordSelectSyntax() MachineCoordSelectSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public MachineCoordSelectSyntax(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 SupportedCodes One-shot machine-coordinate codes this syntax consumes; defaults to ISO G53. The Siemens preset widens the list to G53 + G153 + SUPA. The first list entry present in Parsing.Flags is stamped as Term; every listed code present on the block is consumed so none re-triggers the unconsumed-parsing warning. public List SupportedCodes { get; set; } Property Value List 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.McAbcCyclicPathSyntax.html": {
"href": "api/Hi.NcParsers.LogicSyntaxs.McAbcCyclicPathSyntax.html",
@@ -5692,7 +5697,7 @@
"api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html": {
"href": "api/Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html",
"title": "Class ProgramEndSyntax | HiAPI-C# 2025",
- "summary": "Class ProgramEndSyntax Namespace Hi.NcParsers.LogicSyntaxs Assembly HiMech.dll 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. Must be placed before syntaxes that depend on the ProgramEnd section. public class ProgramEndSyntax : ISituNcSyntax, INcSyntax, IMakeXmlSource Inheritance object ProgramEndSyntax 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 #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M30\"] } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M30\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M02\"] } } #AfterBuild: { \"ProgramEnd\": { \"Term\": \"M02\" } } #BeforeBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } #AfterBuild: { \"Parsing\": { \"Flags\": [\"M03\"] } } Constructors ProgramEndSyntax() Initializes a new instance with default settings. public ProgramEndSyntax() ProgramEndSyntax(XElement) Initializes a new instance by deserializing from the given XML element. public ProgramEndSyntax(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