2.7 KiB
2.7 KiB
name, description, metadata
| name | description | metadata | ||||||
|---|---|---|---|---|---|---|---|---|
| cpq-verbau-90grad-steher | Ziel 90°-Anbau am Steher wie jetzt Links/Rechts — Engine kann es, cpq-GroupProcessor (translation-only) ist der Blocker |
|
Ziel: an den Stehern im 90°-Winkel anbauen können, genau wie der jetzige Links/Rechts-Verbau.
Wer ist der Blocker: wir (cpq), nicht fire-visual.
- fire-visual kann es. Das Live-Snapping im PlacementMode setzt die Subject-Matrix als
bestMatrix · dragPointTransform⁻¹— die Rotation des Drag-Punkts ist drin, die Engine richtet also den vollen Frame aus und dreht das Teil beim Snap schon korrekt um 90°. (Vorbehalt: aus der Placement-Matrix-Notiz abgeleitet, nicht aus frischem Quell-Read; bei BedarfPlacementMode-Quelle prüfen, ob DropPoints den Rotations-Frame durchreichen.) - cpq verliert es beim Replay. Nach dem Snap übernehmen wir das Engine-Ergebnis nicht, sondern merken nur „Punkt A trifft Punkt B" (
group-mergemit zwei PMI-IDs) und rechnen die Anordnung imGroupProcessorselbst neu — rein translatorisch. Beim nächstensetScenewird die 90°-Drehung auf achsparallel zurückgeplättet.
Warum schwer — das Dock-Modell ist translation-only, einachsig, gemeinsame Orientierung. Links/Rechts geht nur, weil nie rotiert wird. Zu ändernde Schichten:
Edge={from,to,fromPmi,toPmi}kennt keine Rotation → relative Rotation pro Kante nötig.computePositionsdockt mitpos(to)=pos(from)+pmi(from)−pmi(to)(nur Position) → Rotation entlang der Kanten komponieren.pmiLocalliest nurposition.value. Die Orientierung steckt schon in den Daten (properties.rotation), wird aber ignoriert — und Format passt nicht: 3 Euler-Grad (z. B.CS_EIN_90_0_0→[0,-0,180]), deklariert als „quaternion", währendtransformMath[w,x,y,z]erwartet.- Placement-Mode hartverdrahtet auf
.name-CS_LINKS↔.name-CS_RECHTS; Steher-Anschlüsse leben in derCS_EIN_*-Familie → neue Drag-/Drop-Selektoren + Open-End-Logik (occupiedPmis). buildDetachEvent/areConnectednehmen einen 1-achsigen Lauf an (dominante Achse, Links→Rechts-Leseordnung) → 90°-Anbau macht den Verbau zum 2D-Baum, Annahmen brechen.
Datenlage: kein plain CS_VORNE/CS_HINTEN (0 Teile); CS_LINKS/CS_RECHTS nur auf 12 Teilen; Vorne/Hinten nur in CS_EIN_* (rotationscodiert: CS_EIN_VORNE, CS_EIN_HINTEN, CS_EIN_STEHER_VORNE/HINTEN, CS_EIN_90_0_0 …).
Machbar: Erweiterung unseres Modells (Rotation konsumieren + entlang Kanten propagieren + Format-Fix), keine Nachgenerierung der Teile — die nötige Orientierung liefern die Punktdaten bereits.