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,16 +87,14 @@
<article data-uid="Anatomy-Workpiece">
<h1 id="workpiece">Workpiece</h1>
<p>The Workpiece editor is the <code>equipment/workpiece</code> branch of the General Setup page's Control Tree (<code>/general-setup?tree=equipment/workpiece</code>); the old <code>/workpiece</code> route redirects there. 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 Workpiece editor is the <code>equipment/workpiece</code> branch of the General Setup page's Control Tree (<code>/general-setup?tree=equipment/workpiece</code>); the old <code>/workpiece</code> route redirects there.</p>
<p>The key model is <a class="xref" href="../../api/Hi.NcMech.Workpieces.Workpiece.html">Workpiece</a>, taken from the Main Panel's
<a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_Workpiece">Workpiece</a>. The cached solids it is drawn from belong to
<a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html">WorkpieceService</a>, which both clients share.</p>
<p>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 (<code>Disp/EquipmentSetupDisplayeeConfig.cs</code>), which carries
<a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html">WorkpieceService</a>.</p>
<p>The branch has no display config of its own: it shares the General Setup canvas, gated by the equipment-setup config (<code>Disp/EquipmentSetupDisplayeeConfig.cs</code>), 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 <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html">WorkpieceEditorDisplayeeConfig</a>
from <code>UserService.UserConfig</code>.</p>
single flag.</p>
<h2 id="layout">Layout</h2>
<h3 id="control-tree-branch">Control Tree Branch</h3>
<ul>
@@ -205,120 +203,6 @@ fixture↔workpiece pair), Table Buckle, <strong>Workpiece Geometry Anchor</stro
</ul>
</li>
</ul>
<h3 id="wpf-page">WPF Page</h3>
<ul>
<li>Workpiece Page
<ul>
<li>Management Panel
<ul>
<li>Head Line
<ul>
<li><a class="xref" href="../widget/object-management-menu-button.html">Object Management Menu Button</a>
<ul>
<li>file extension is <code>.Workpiece</code>; the load type is <a class="xref" href="../../api/Hi.NcMech.Workpieces.Workpiece.html">Workpiece</a></li>
<li>The pointed Editor Panel is Management Tabs Panel</li>
</ul>
</li>
<li>Title Label</li>
</ul>
</li>
<li>Management Tabs Panel
<ul>
<li>Raw Shape Tab
<ul>
<li>Raw Geometry Source DropDown (Common Geometry and Meshed Geometry are EXCLUSIVE)
<ul>
<li>Common Geometry
Apply <a class="xref" href="../geom/geom-manage-control.html">Geometry Management Control</a></li>
<li>Meshed Geometry
Apply <a class="xref" href="../geom/meshed-geom-panel.html">Meshed Geometry Panel</a></li>
</ul>
</li>
</ul>
</li>
<li>Target Shape Tab
<ul>
<li>Geometry Management Control</li>
</ul>
</li>
<li>Anchor Tab
<ul>
<li>Geom To Fixture Tab
<ul>
<li><a class="xref" href="../geom/transformer-panel.html">Transformer Manage Panel</a></li>
</ul>
</li>
<li>Geom To Program-Zero Tab
<ul>
<li>Transformer Manage Panel</li>
</ul>
</li>
</ul>
</li>
<li>Runtime Tab
<ul>
<li>Initial Resolution Dropdown — the same powers-of-two ladder as the Mesh item above.</li>
</ul>
</li>
<li>Material Tab
Visible if <code>UserService.EnablePhysics</code> is true.
<ul>
<li>Workpiece Material File Selector
<ul>
<li>Browse Button
The initial directory is the project directory.</li>
<li>Browse Resource Button
The directory is the Default Resource directory.</li>
<li>Readonly File Path TextBox</li>
<li>Readonly Name TextBox (<a class="xref" href="../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>)
<ul>
<li>ToolTip: <a class="xref" href="../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Note">Note</a></li>
</ul>
</li>
</ul>
</li>
<li>Cutting Parameter File Selector
<ul>
<li>Browse Button
The initial directory is the project directory.</li>
<li>Browse Resource Button
The directory is the Default Resource directory.</li>
<li>Readonly File Path TextBox</li>
<li>Readonly Name TextBox (<a class="xref" href="../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Name">Name</a>)
<ul>
<li>ToolTip: <a class="xref" href="../../api/Hi.Common.INameNote.html#Hi_Common_INameNote_Note">Note</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li>Viewer Panel
<ul>
<li>Viewer ToolBar
<ul>
<li><a class="xref" href="../widget/renderingcanvas-tool-bar.html">RenderingCanvas Tool Bar</a></li>
<li>SetupDisplayee Options ToolBar
<ul>
<li>Options of <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html">WorkpieceEditorDisplayee</a></li>
</ul>
</li>
</ul>
</li>
<li>RenderingCanvas
<ul>
<li>The <a class="xref" href="../../api/Hi.Disp.DispEngine.html">DispEngine</a>.<a class="xref" href="../../api/Hi.Disp.DispEngine.html#Hi_Disp_DispEngine_Displayee">Displayee</a> is <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html">WorkpieceEditorDisplayee</a> (Apply the model <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayeeConfig.html">WorkpieceEditorDisplayeeConfig</a>).</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="default-resource">Default Resource</h2>
<p>The default resources of Workpiece Material and Cutting Parameter exist in <code>Resource</code> folder under application folder (Not project folder). Both clients seed their file pickers at the matching <code>Resource</code> sub folder:</p>
<ul>
@@ -336,9 +220,7 @@ None leaves the old object indexed, and re-committing would resurrect it.</p>
</li>
<li><p>Call <a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html">WorkpieceService</a>.<a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html#Hi_NcMech_Workpieces_WorkpieceService_ClearIdealGeomCache">ClearIdealGeomCache()</a> on Target Shape set or changed.</p>
</li>
<li><p>Both clients reach that one service by different routes: the web branch posts the controller's
cache-clear endpoints, and the WPF page calls
<a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceEditorDisplayee.html">WorkpieceEditorDisplayee</a>, which forwards to the same service.</p>
<li><p>The branch reaches that service by posting the controller's cache-clear endpoints.</p>
</li>
<li><p>Anchor edits re-commit their transformer and deliberately do <strong>not</strong> clear the geometry cache, so
a placement change forces no <code>CubeTreeFile</code> re-mesh.</p>
@@ -348,10 +230,7 @@ cache chain runs after a change.</p>
</li>
<li><p>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 <em>set</em> 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.</p>
re-solidifies, and leaves the view alone.</p>
</li>
<li><p>Keep <a href="../conventions/gui-file-path-assignment.html#portability">Portability</a> of the Material properties.</p>
</li>