2D: Griff-Editieren funktioniert jetzt auch bei Mehrfachauswahl

Bug: grips/edgeGrips in useGripEditing.ts waren über sich gegenseitig
ausschliessende Zweige auf genau ein selektiertes Element zugeschnitten;
bei zwei oder mehr gewählten Elementen (Zeichnungen oder Wänden) traf
kein Zweig, beide Arrays wurden leer -> keine Griffe mehr sichtbar/ziehbar.

Neues GripOwner-Modell (gripOwners/gripOwnerRange parallel zum flachen
grips-Array, EdgeGrip.owner? neu im Modell): jedes gewählte Element
liefert weiterhin einen eigenen, zusammenhängenden Vertex-/Kanten-Block.
applyGrip/applyEdge/cycleGripEditField/onGripMove lösen die Zielroute
(moveGripOf/moveEdgeOf) jetzt pro Griff über dessen owner auf statt über
die singulären selectedDrawingId/selectedWallId. Einzelauswahl ist ein
Spezialfall derselben Logik, kein separater Pfad. Der Tab-Feld-Controller
(getippte Länge/Winkel beim Ziehen) funktioniert dadurch auch bei
Mehrfachauswahl korrekt pro Griff. Öffnung/Treppe/Decke/Raum bleiben
bewusst exklusiv (kein Multi-Select für diese vier).

PlanView.tsx brauchte keine Änderung, da Hit-Test und Rendering dort
bereits generisch über die flachen grips/edgeGrips-Arrays laufen.
This commit is contained in:
2026-08-21 20:50:00 +02:00
parent d9cbf2cb07
commit 13619e9271
2 changed files with 160 additions and 61 deletions
+7
View File
@@ -1616,6 +1616,13 @@ export interface EdgeGrip {
* entlang der Außennormale wie bisher.
*/
free?: boolean;
/**
* Zu welchem Element diese Kante gehört (für Mehrfachauswahl — mehrere
* gewählte Elemente liefern je eigene Kanten-Griffe). Fehlt bei den
* exklusiven Einzel-Fällen (Decke/Raum), die weiterhin über die separat
* gehaltene `selectedCeilingId`/`selectedRoomId` aufgelöst werden.
*/
owner?: { drawingId?: string; wallId?: string };
}
// ── Extrudierter Körper (truck-Integration, docs/design/truck-plan.md) ─────