2D: Ellipse, Spline und Bezier als neue Zeichenwerkzeuge

Ellipse (zwei Bounding-Box-Ecken, achsparallel), Spline (Wegpunkte, geglättet
via Catmull-Rom, wie Polylinie mit rundem statt geradem Verlauf) und Bezier
(klassische manuelle Kontrollpunkt-Kette: Anker/Griff/Griff je Segment).

Neue Drawing2DGeom-Formen + Mathe-Helfer (tools/curves.ts). Rendering
tessellliert zu Linien-/Polygon-Primitiven (wie Polylinie/Rechteck) statt
eigenem SVG-Primitiv — dadurch funktionieren DXF-/Print-SVG-Export und
Hit-Testing ohne Änderung mit. Griff-Editieren (2D-PlanView + 3D-Viewport),
Verschieben/Skalieren, Snapping (Ellipse-Mittelpunkt, Bezier/Spline-Konturen)
und Georef-Rebase entsprechend erweitert.
This commit is contained in:
2026-08-22 01:45:32 +02:00
parent c8ac5a3d89
commit 121cb5a372
27 changed files with 1299 additions and 7 deletions
+18
View File
@@ -176,6 +176,12 @@ export const en: Record<TranslationKey, string> = {
"tool.circle.hint": "Circle: set center, then radius",
"tool.arc": "Arc",
"tool.arc.hint": "Arc: center, start point, then end point (CCW)",
"tool.ellipse": "Ellipse",
"tool.ellipse.hint": "Ellipse: two opposite corners of the bounding box",
"tool.spline": "Spline",
"tool.spline.hint": "Spline: click waypoints, Enter finishes (smooth curve through the points)",
"tool.bezier": "Bezier",
"tool.bezier.hint": "Bezier: anchor, handle 1, handle 2, end point — per segment; Enter finishes",
"tool.text": "Text",
"tool.text.hint": "Text: set anchor point, then type the text",
"tool.textbox": "Text column",
@@ -1131,6 +1137,18 @@ export const en: Record<TranslationKey, string> = {
"cmd.arc.center": "Center:",
"cmd.arc.start": "Start point (radius + start angle):",
"cmd.arc.end": "End point (end angle):",
"cmd.ellipse.label": "Ellipse",
"cmd.ellipse.corner1": "First corner:",
"cmd.ellipse.corner2": "Opposite corner:",
"cmd.spline.label": "Spline",
"cmd.spline.start": "Start point:",
"cmd.spline.next": "Next point ( Close Undo ):",
"cmd.bezier.label": "Bezier",
"cmd.bezier.start": "Start point:",
"cmd.bezier.c1": "Handle 1:",
"cmd.bezier.c2": "Handle 2:",
"cmd.bezier.end": "End point ( Finish ):",
"cmd.bezier.finish": "Finish",
"cmd.text.label": "Text",
"cmd.text.point": "Anchor point:",
"cmd.textbox.label": "Text column",