Table of Contents

TransformationGeom Editor

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 Editor.

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 Editor, 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