L/W-HUD in den Zeichenbefehlen (line/polyline/wall/rect/circle/arc)

Alle punktbasierten Zeichenbefehle setzen den Cursor-HUD jetzt einheitlich
über den gemeinsamen segmentHud()-Helper statt eigener Text-Formatierung:

- line/polyline/wall: L/W-Kästchen für das lebende Segment ab dem letzten
  Punkt.
- rect: 2-Punkt/Zentrum-Methode zeigt die Diagonale als L/W; die 3-Punkt-
  Methode zeigt die Basiskante als L/W bzw. Basisbreite+Höhe im Rise-Schritt.
- circle/arc (Radius-Schritt): Radius als „R: …m"-Label statt L/W (kein
  Winkel sinnvoll); arc zeigt im Spannwinkel-Schritt Radius als L und
  Spannwinkel als W.

Alle Werte jetzt mit 3 Nachkommastellen (vorher 2 bzw. 0), konsistent mit
der VW-Konvention der Statusleiste.

Tests: line.test.ts/wall.test.ts prüfen hud.length/angleDeg im onMove-Draft
(inkl. negativer Winkel im Bereich (−180,180] und Segment-Wechsel bei
mehrteiligen Wandzügen).
This commit is contained in:
2026-07-11 00:21:35 +02:00
parent 8377b76d98
commit f6d12a645d
8 changed files with 194 additions and 50 deletions
+3 -3
View File
@@ -73,14 +73,14 @@ function circlePts(center: Vec2, r: number): Vec2[] {
return pts;
}
/** Vorschau (offener Bogen) + HUD (Spanne in Grad). */
/** Vorschau (offener Bogen) + HUD (Radius als L, Spanne als W — L/W-Kästchen). */
function arcDraft(center: Vec2, r: number, a0: number, a1: number, at: Vec2 | null): ToolDraft {
if (r < EPS) return { preview: [], vertices: [center] };
const preview: DraftShape[] = [{ kind: "poly", pts: arcPts(center, r, a0, a1), closed: false }];
const draft: ToolDraft = { preview, vertices: [center] };
if (at) {
const deg = (sweepOf(a0, a1) * 180) / Math.PI;
draft.hud = { at, text: `${deg.toFixed(0)}°` };
draft.hud = { at, length: r, angleDeg: deg };
}
return draft;
}
@@ -148,7 +148,7 @@ export const arcCommand: Command = {
draft: {
preview: [{ kind: "poly", pts: circlePts(s.center, r), closed: true }],
vertices: [s.center],
hud: { at: point, text: `r ${r.toFixed(2)} m` },
hud: { at: point, text: `R: ${r.toFixed(3)}m` },
},
},
];