This commit is contained in:
2026-09-09 18:06:21 +08:00
parent 161af68fe3
commit 45b9f9ed5d
79 changed files with 1167 additions and 1532 deletions
@@ -87,9 +87,9 @@
<article data-uid="Anatomy-ToolHousePage">
<h1 id="tool-house-page">Tool House Page</h1>
<p>The Tool House is a page of its own at <code>/tool-house/:toolId?/:tab?/:subtab?</code>, reached from the menu bar's <code>Page ▾</code> dropdown. In the WPF client it is a sub-window opened from the <a class="xref" href="../shell/main-panel.html">Main Panel</a>.</p>
<p>The Tool House is a page of its own at <code>/tool-house/:toolId?/:tab?/:subtab?</code>, reached from the menu bar's <code>Page ▾</code> dropdown.</p>
<p>The key model is MachiningToolHouse.
The model <code>UserService</code> is per-client. On the web it is the server-side <code>Environments/UserService.cs</code>, which <code>Mech/ToolHouseDisplayController.cs</code> reads <code>EnablePhysics</code> from; the WPF client resolves its own <code>UserService</code> from the application's service provider.</p>
The model <code>UserService</code> is the server-side <code>Environments/UserService.cs</code>, which <code>Mech/ToolHouseDisplayController.cs</code> reads <code>EnablePhysics</code> from.</p>
<h2 id="layout">Layout</h2>
<p>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: <strong>New Tool</strong> adds a default tool and the user sets it up in the editor tabs.</p>
<ul>
@@ -164,8 +164,8 @@ The model <code>UserService</code> is per-client. On the web it is the server-si
</li>
</ul>
<p>The three anchor-and-buckle flags of <a class="xref" href="../../api/Hi.NcMech.Holders.HolderEditorDisplayee.html">HolderEditorDisplayee</a> 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.</p>
<p>The cutter's shape mode is not a control here. The server picks it when the canvas binds: <code>InitializeDisplay</code> sets <a class="xref" href="../../api/Hi.Milling.Cutters.MillingCutterEditorDisplayee.html#Hi_Milling_Cutters_MillingCutterEditorDisplayee_ShapeMode">ShapeMode</a> to Solid Bounding Shape whenever <code>UserService.EnablePhysics</code> 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.</p>
<p>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.</p>
<p>The cutter's shape mode is not a control here. The server picks it when the canvas binds: <code>InitializeDisplay</code> sets <a class="xref" href="../../api/Hi.Milling.Cutters.MillingCutterEditorDisplayee.html#Hi_Milling_Cutters_MillingCutterEditorDisplayee_ShapeMode">ShapeMode</a> to Solid Bounding Shape whenever <code>UserService.EnablePhysics</code> is false, and the Display Options dropdown offers no switch for it.</p>
<p>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.</p>
<p>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.</p>
<p>When the canvas first binds, <code>InitializeDisplay</code> attaches the <a class="xref" href="../../api/Hi.Milling.MillingTools.MillingToolEditorDisplayee.html">MillingToolEditorDisplayee</a> and snaps the camera to the isometric view. Each later tool selection re-points that displayee's <code>MillingToolGetter</code> at the chosen tool and calls the renderingCanvas.<a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_SetViewToHomeView">SetViewToHomeView()</a>.</p>
<h3 id="duplication-button">Duplication Button</h3>
@@ -211,8 +211,8 @@ The model <code>UserService</code> is per-client. On the web it is the server-si
<h5>Note</h5>
<p>The fluting type is named loosely on the wire, and every spelling resolves. <code>PUT /{id}/fluting</code> accepts <code>UniformFluting</code> / <code>uniform</code> and <code>FreeFluting</code> / <code>free</code>, and equally <code>UniformContourTray</code> / <code>FreeContourTray</code>. A Control-Tree id whose cutter branch reads <code>…/contours/tray…</code> resolves to the <code>…/contours/fluting…</code> node.</p>
</div>
<p>One editor lives on the WPF client only, and the app says so where the type is chosen: the <strong>FreeformRemover</strong> cutter. Selecting that type on the web page keeps the existing model intact and shows a note pointing at the WPF client or HiNcRcl.</p>
<p>Three smaller surfaces are likewise the WPF client's: the InsertCutter and FluteInnerBeam physics groups, and the <code>CustomSpinningProfile</code> shaper-profile type — the web profile tab offers the five APT types (General / Ball / Column / Cone / Taper).</p>
<p>One cutter type has no editor here, and the app says so where the type is chosen: the <strong>FreeformRemover</strong>. Selecting it keeps the existing model intact and shows a note — <em>FreeformRemover editor is not yet available in the web frontend. Use the WPF client or HiNcRcl for now.</em></p>
<p>Three smaller surfaces are absent for the same reason: the InsertCutter and FluteInnerBeam physics groups, and the <code>CustomSpinningProfile</code> shaper-profile type — the profile tab offers the five APT types (General / Ball / Column / Cone / Taper).</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="cutter/index.html">Cutter Tab</a> — the cutter half of a tool, and the editors each cutter type grows</li>