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
@@ -88,10 +88,8 @@
<h1 id="transformer-select-panel">Transformer Select Panel</h1>
<p>The Transformer Select Panel is the switchboard that picks which <a class="xref" href="../../api/Hi.Mech.Topo.ITransformer.html">ITransformer</a>
occupies a transformer-valued slot and edits the one that is there. Both clients carry it under the
same name: <code>wwwroot-src/src/components/topo/TransformerSelectPanel.vue</code> on the web,
<code>Mech/Topo/TransformerSelectPanel.xaml</code> 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
<a class="xref" href="../../technique/mechanism/transformers.html">Handle Transform Matrix by ITransformer</a>.</p>
<h2 id="surface">Surface</h2>
<p>The panel's principal home is a <strong>Transformer slot</strong> 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.</p>
<p>Which kinds it offers is the <code>allowedKinds</code> prop, defaulting to all seven. A Control-Tree slot feeds
it from the node's <code>ctx.allowedKinds</code>; 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:
<code>AllowedTransformerTypes</code>, <code>SelectionFilter</code>, <code>ShowNoTransform</code> and <code>ShowNotSet</code>.</p>
appear there.</p>
<p>When the probed kind falls outside <code>allowedKinds</code>, both the active and the selected kind reset to
empty: the dropdown blanks, and the embedded form prints <em>No transformer attached.</em> in place of an
editor. The out-of-list transformer is not rendered. The WPF client resolves that case the other
way — <code>UpdateUI()</code> leaves the combo unselected when no item matches, then still calls
<code>UpdateTransformerPanel()</code> and builds the current transformer's content panel.</p>
editor. The out-of-list transformer is not rendered.</p>
<h2 id="transformer-kinds">Transformer Kinds</h2>
<p>The web client offers seven kinds, one editor each.</p>
<table>
@@ -213,11 +208,7 @@ way — <code>UpdateUI()</code> leaves the combo unselected when no item matches
</tr>
</tbody>
</table>
<p>The WPF client offers six of them — <code>NoTransform</code>, <code>StaticTranslation</code>, <code>StaticFreeform</code>,
<code>GeneralTransform</code>, <code>DynamicTranslation</code>, <code>DynamicRotation</code> — plus a <em>Not Set</em> entry that leaves the
slot holding a null transformer. It has no <code>StaticRotation</code> panel, and selecting <code>NoTransform</code> there
simply empties its content area. The web picker offers no null entry of either sort: identity is
expressed by choosing <code>NoTransform</code>.</p>
<p>The picker offers no null entry: identity is expressed by choosing <code>NoTransform</code>.</p>
<div class="NOTE">
<h5>Note</h5>
<p>The <a class="xref" href="../../api/Hi.Mech.Topo.GeneralTransform.html">GeneralTransform</a> editor is a composition, not a flat form: a scale field,
@@ -226,9 +217,7 @@ embedded in their own bordered cards, titled <em>Rotation sub-transformer</em> a
sub-transformer</em>. It keys the two sub-editors off <code>POST /api/GeneralTransform/IndexRotation</code> and
<code>/IndexTranslation</code>, edits the scale itself, and owns no vector widget — every
<a class="xref" href="../../api/Hi.Geom.Vec3d.html">Vec3d</a> field on it comes from the nested editors. The effective transform is
<code>T × R × scale × I</code>. Its WPF counterpart <code>Mech/Topo/GeneralTransformPanel.xaml</code> takes the other
approach: three Vec3dControls of its own (translation, rotation axis, rotation pivot) plus scale
and angle text boxes, embedding no sub-panel.</p>
<code>T × R × scale × I</code>.</p>
</div>
<h2 id="key-model">Key Model</h2>
<ul>