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:
@@ -106,6 +106,12 @@ export function translateProject(project: Project, dx: number, dy: number): Proj
|
||||
return { ...d, geom: { ...g, center: shift(g.center, dx, dy) } };
|
||||
case "arc":
|
||||
return { ...d, geom: { ...g, center: shift(g.center, dx, dy) } };
|
||||
case "ellipse":
|
||||
return { ...d, geom: { ...g, center: shift(g.center, dx, dy) } };
|
||||
case "bezier":
|
||||
return { ...d, geom: { ...g, pts: shiftAll(g.pts, dx, dy) } };
|
||||
case "spline":
|
||||
return { ...d, geom: { ...g, pts: shiftAll(g.pts, dx, dy) } };
|
||||
case "text":
|
||||
return { ...d, geom: { ...g, at: shift(g.at, dx, dy) } };
|
||||
case "image":
|
||||
|
||||
@@ -1502,6 +1502,28 @@ export type Drawing2DGeom =
|
||||
| { shape: "rect"; min: Vec2; max: Vec2 }
|
||||
| { shape: "circle"; center: Vec2; r: number }
|
||||
| { shape: "arc"; center: Vec2; r: number; a0: number; a1: number }
|
||||
/**
|
||||
* Ellipse — achsparalleles Zentrum + zwei Halbachsen + Drehung (Radiant,
|
||||
* CCW). Das Zeichen-Werkzeug erzeugt bewusst nur `rotation: 0`; das Feld
|
||||
* existiert für zukünftige Dreh-Bearbeitung bzw. gedrehte Ellipsen aus
|
||||
* anderen Quellen. Rendering/Snapping/Griffe tessellieren sie (wie ehemals
|
||||
* `circle`), kein eigenes glattes SVG-Primitiv (s. `generatePlan/drawing2d.ts`).
|
||||
*/
|
||||
| { shape: "ellipse"; center: Vec2; rx: number; ry: number; rotation: number }
|
||||
/**
|
||||
* Kubische Bezier-Kette: `pts.length` ≡ 1 (mod 3), ≥ 4 — Punkte im Muster
|
||||
* Anker·Griff·Griff·Anker·Griff·Griff·Anker·… (jedes weitere Segment fügt
|
||||
* 3 Punkte an). Manuell gesetzte Kontrollpunkte (klassisches Bezier-
|
||||
* Werkzeug), im Unterschied zu `spline` (Kurve DURCH Punkte, automatisch
|
||||
* geglättet). Immer offen (kein `closed`-Feld).
|
||||
*/
|
||||
| { shape: "bezier"; pts: Vec2[] }
|
||||
/**
|
||||
* Glatte Kurve DURCH `pts` (uniformer Catmull-Rom), analog `polyline`, aber
|
||||
* mit gerundetem statt geradem Verlauf zwischen den Wegpunkten. `closed`
|
||||
* schliesst den Ring (letzter Wegpunkt → erster).
|
||||
*/
|
||||
| { shape: "spline"; pts: Vec2[]; closed: boolean }
|
||||
| {
|
||||
shape: "text";
|
||||
at: Vec2;
|
||||
|
||||
Reference in New Issue
Block a user