Files
claude-projects/robotunits/memory/cpq-verbau-90grad-steher.md
T
2026-07-02 10:59:36 +02:00

2.7 KiB
Raw Blame History

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
node_type type originSessionId
memory project e3d54daa-eb88-474f-9e99-62bfe83821b2

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 Bedarf PlacementMode-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-merge mit zwei PMI-IDs) und rechnen die Anordnung im GroupProcessor selbst neu — rein translatorisch. Beim nächsten setScene wird 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:

  1. Edge = {from,to,fromPmi,toPmi} kennt keine Rotation → relative Rotation pro Kante nötig.
  2. computePositions dockt mit pos(to)=pos(from)+pmi(from)pmi(to) (nur Position) → Rotation entlang der Kanten komponieren.
  3. pmiLocal liest nur position.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ährend transformMath [w,x,y,z] erwartet.
  4. Placement-Mode hartverdrahtet auf .name-CS_LINKS.name-CS_RECHTS; Steher-Anschlüsse leben in der CS_EIN_*-Familie → neue Drag-/Drop-Selektoren + Open-End-Logik (occupiedPmis).
  5. buildDetachEvent/areConnected nehmen 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.

Siehe cpq-verbau-architektur, fire-visual-placement-mode.