2D: Fillet und Extend als Befehle verdrahtet (Geometrie existierte bereits)

filletCorner (Eckpunkt-Verrundung) und extendSegment (Gegenstück zu Trim)
existierten fertig implementiert und getestet im Kernel (kernel2d.ts), hatten
aber keinen einzigen Aufrufer — kein Command, kein Werkzeug-Knopf, für den
Nutzer nicht erreichbar. Reine Verdrahtungsarbeit, kein neues Geometrie-
Problem:

- fillet.ts: Ecke einer polyline/rect wählen (nächstgelegener Eckpunkt mit
  zwei Nachbarn), Radius per Maus oder getippt (Tab-Feld wie bei circle.ts).
  Da Polylinien im Modell keine Bogen-Segmente kennen (kein "Bulge" —
  bekannte, separate Lücke), wird die Verrundung als kurze Punktfolge
  tessselliert statt als echtes Arc-Objekt gespeichert; ein rect wird beim
  ersten Fillet zu einer polyline. Ehrlich im Kopfkommentar dokumentiert.
- extend.ts: offene Kurve (line/offene polyline) nahe einem Ende anklicken,
  dieses Ende wird bis zur nächsten anderen Kurve verlängert (implizite
  Cutter wie bei Trim). Kein Treffer → No-op, Befehl bleibt aktiv.

Beide in COMMANDS/ALIASES registriert (fi/verrunden, ext/verlaengern),
i18n de/en ergänzt, in ToolsPanel COMMANDS_EDIT neben Trim/Join aufgenommen,
eigene Icons in CommandIcon.tsx (bisher: unbekannter Name → kein Icon).

Rotate NICHT angefasst: der ursprüngliche Befund „Rotate ist keine getippte
Kommandozeilen-Aktion, nur ein UI-Button" war unvollständig — App.tsx routet
sowohl den Ribbon-Button als auch das getippte Wort „rotate"/„drehen" ganz
bewusst an startTransformOp() (den reicheren U/I/O/P-Move/Copy/Array/
Verteilen-Fluss), nicht an die generische Befehls-Engine (Kommentar dort
erklärt das explizit). Ein zuerst geschriebener, einfacher rotateCommand
(nur „move"-Modus) wäre über diese Sonderfälle nie erreicht worden UND hätte
über neue Aliase wie „ro" einen inkonsistenten Zweit-Pfad geöffnet (voller
Funktionsumfang bei „rotate", abgespeckter bei „ro") — verworfen, bevor
committet.

6 neue Tests (fillet: Verrundung + Fehltreffer; extend: Verlängerung +
Kein-Cutter-No-op). tsc -b / vitest run (911/911) / npm run build grün.
This commit is contained in:
2026-08-20 20:53:31 +02:00
parent f450a1aa08
commit 51e594ee90
9 changed files with 636 additions and 1 deletions
+17
View File
@@ -91,6 +91,23 @@ export function CommandIcon({ name }: { name: string }) {
<circle cx="8" cy="13" r="1.4" fill="currentColor" stroke="none" />
</svg>
);
case "fillet":
// Eckpunkt-Verrundung: gerade Schenkel, Ecke durch einen Bogen ersetzt.
return (
<svg {...common}>
<path d="M3,13 L3,8 Q3,3 8,3 L13,3" />
</svg>
);
case "extend":
// Linie, die bis zu einer Grenze verlängert wird (Pfeil + Ziellinie).
return (
<svg {...common}>
<line x1="2.5" y1="10" x2="9" y2="6" />
<line x1="9" y1="6" x2="12.5" y2="3.7" strokeDasharray="1.6 1.6" />
<polyline points="10,2.8 13,3 12.8,6" />
<line x1="12.5" y1="9.5" x2="12.5" y2="13.5" />
</svg>
);
case "column":
// Stütze: Quadrat-Querschnitt mit vertikalen Kanten (Pfeiler).
return (