2D: Bemassungs-Werkzeug nach SIA 400 B.5.3

Neue Masslinie (shape:"dimension"): zwei Punkte + Lage der Masslinie. Folgt
der Norm statt DIN-Gewohnheiten: Massbegrenzungslinien als Massstriche
(doppelte Strichstärke, keine Pfeilspitzen), Masszahl mit Komma-
Dezimaltrennzeichen, nie kopfüber lesbar (dreht sich automatisch). Die
Masszahl wird nicht gespeichert, sondern immer aus dem aktuellen Abstand der
beiden Punkte abgeleitet — bleibt beim Griff-Ziehen automatisch korrekt.

Drei Griffe (beide Endpunkte + ein Griff auf der Masslinie zum Verschieben
des Abstands), Verschieben/Rotieren, Georef-Rebase und Plan-Einpassen
entsprechend erweitert.
This commit is contained in:
2026-08-22 02:10:38 +02:00
parent ad16202c12
commit 6fd5a50d77
19 changed files with 491 additions and 0 deletions
+2
View File
@@ -112,6 +112,8 @@ export function translateProject(project: Project, dx: number, dy: number): Proj
return { ...d, geom: { ...g, pts: shiftAll(g.pts, dx, dy) } };
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) } };
case "text":
return { ...d, geom: { ...g, at: shift(g.at, dx, dy) } };
case "image":
+10
View File
@@ -1524,6 +1524,16 @@ export type Drawing2DGeom =
* schliesst den Ring (letzter Wegpunkt → erster).
*/
| { shape: "spline"; pts: Vec2[]; closed: boolean }
/**
* Masslinie (lineare Bemassung, SIA 400 B.5.3): misst den Abstand `a`↔`b`.
* `offset` ist der VORZEICHENBEHAFTETE Normalabstand (Modell-Meter, links
* von a→b positiv), in dem die eigentliche Masslinie parallel zu a-b liegt
* — Masshilfslinien laufen von a/b bis zu dieser Linie. Die Masszahl wird
* beim Rendern aus `dist(a,b)` abgeleitet (nicht gespeichert), bleibt also
* 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 }
| {
shape: "text";
at: Vec2;