2D: Masskette ist jetzt EIN Element (verlängerbar + Punkte einfügbar)

Bemassungs-Modell umgebaut: eine Reihenbemassung war bisher N unabhängige
Einzel-Elemente, jetzt EIN Element mit einer Punktreihe (pts statt a/b).
Alle Segmente teilen weiterhin einen Offset, aber Verschieben/Selektieren/
Löschen betrifft die ganze Kette auf einmal.

Ergänzen einer bestehenden Kette folgt dem "erst selektieren, dann Befehl"-
Muster (wie move/copy/offset): ist beim Start eine Masskette selektiert,
sortiert der erste Klick sich per Geraden-Projektion in die Kette ein —
vor dem ersten Punkt (verlängert rückwärts), nach dem letzten (verlängert
vorwärts) oder zwischen zwei bestehenden Punkten (fügt ein) — und der
Commit ersetzt dasselbe Element statt eine Kopie zu erzeugen.
This commit is contained in:
2026-08-22 02:40:05 +02:00
parent 2dc57d01a5
commit 467e9580a7
12 changed files with 312 additions and 144 deletions
+1 -1
View File
@@ -113,7 +113,7 @@ export function translateProject(project: Project, dx: number, dy: number): Proj
case "spline":
return { ...d, geom: { ...g, pts: shiftAll(g.pts, dx, dy) } };
case "dimension":
return { ...d, geom: { ...g, a: shift(g.a, dx, dy), b: shift(g.b, dx, dy) } };
return { ...d, geom: { ...g, pts: shiftAll(g.pts, dx, dy) } };
case "kote":
return { ...d, geom: { ...g, at: shift(g.at, dx, dy) } };
case "text":
+9 -1
View File
@@ -1533,7 +1533,15 @@ export type Drawing2DGeom =
* beim Verschieben der Griffe automatisch korrekt. Rein 2D (kein Bezug auf
* andere Elemente — Assoziativität nur über die eigenen Endpunkte).
*/
| { shape: "dimension"; a: Vec2; b: Vec2; offset: number }
/**
* `pts.length` ≥ 2, IMMER kollinear (Werkzeug erzwingt das beim Zeichnen/
* Ergänzen — eine Masskette ist eine Gerade, kein Zickzack-Pfad). Jedes
* aufeinanderfolgende Punktpaar ist EIN gemessenes Segment (Reihenbemassung,
* SIA 400 Figur 14), alle teilen denselben `offset`. EIN Element für die
* ganze Kette (nicht mehrere) — spätere Bearbeitung kann Punkte ergänzen
* (verlängern ODER dazwischen einfügen, s. `commands/cmds/dimension.ts`).
*/
| { shape: "dimension"; pts: Vec2[]; offset: number }
/**
* Höhenkote (SIA 400 B.5.4, Figur 18): Dreieck-Symbol + Höhenwert (Meter,
* ±0.00-Referenz frei wählbar, s. Norm) an einem Punkt. `kind` bestimmt