====== std.svg.path ======
SVG-Pfad-Builder: ''<path d="...">'' programmatisch aufbauen. Unterstützt alle SVG-Pfadbefehle: MoveTo, LineTo, kubische und quadratische Bézier-Kurven, Bögen und ClosePath. Koordinaten können absolut (Großbuchstaben) oder relativ (Kleinbuchstaben) sein.
→ [[lyx_-_programmiersprache:units:svg|std.svg]] · [[lyx_-_programmiersprache:units:svg:elements|std.svg.elements]] · [[lyx_-_programmiersprache:units:svg:style|std.svg.style]]
Ein Pfad wird mit ''SvgPathBegin'' begonnen, mit den Befehlen unten gefüllt und wie jedes andere Element mit ''SvgApply'' abgeschlossen. Stil und Transformation kommen vorher aus [[lyx_-_programmiersprache:units:svg:style|std.svg.style]].
----
===== Verwendung =====
import std.io;
import std.svg.builder;
import std.svg.elements;
import std.svg.style;
import std.svg.path;
fn main(): int64 {
var doc: int64 := SvgNew(300.0, 250.0);
SvgSetPrettyPrint(doc, 1);
// Fertige Form: fuenfzackiger Stern
SvgSetFillHex(doc, "gold");
SvgPathBegin(doc);
SvgPathStar(doc, 150.0, 120.0, 60.0, 25.0, 5);
SvgApply(doc);
// Kubische Bezierkurve: erst die Kontrollpunkte, dann der Endpunkt
SvgSetFillNone(doc);
SvgSetStroke(doc, 0.0, 0.0, 0.0);
SvgPathBegin(doc);
SvgMoveTo(doc, 10.0, 230.0);
SvgCurveSetCP(doc, 40.0, 160.0, 65.0, 160.0);
SvgCurveTo2(doc, 95.0, 230.0);
SvgApply(doc);
Print(SvgToString(doc)); Print("\n");
return 0;
}
> **''SvgCurveTo'' stürzt ab** — der Aufruf schreibt nach Adresse 0 und beendet das Programm mit einem Speicherzugriffsfehler ([[https://github.com/SEOLizer/LyX-Compiler/issues/1688|#1688]]). Die reparierte Fassung heißt ''SvgCurveTo2'' und ist im Beispiel oben verwendet.
>
> Ebenfalls zu beachten: Die fertigen Formen (''SvgPathStar'', ''SvgPathArc'', ''SvgPathPieSlice'', ''SvgPathArrow'') schreiben nur Pfaddaten. Ohne vorangehendes ''SvgPathBegin'' erscheint **nichts** in der Ausgabe — ohne Meldung.
----
===== Funktionen =====
^ Signatur ^ Sichtbarkeit ^ Beschreibung ^
| ''SvgPathBegin(doc: int64): void'' | pub | Path begin / setup |
| ''SvgPathBeginId(doc: int64, id: pchar): void'' | pub | — |
| ''SvgClosePath(doc: int64): void'' | pub | — |
| ''SvgApplyHidden(doc: int64): void'' | pub | Applies path as invisible (visibility:hidden, but still referenciable by ID) |
| ''SvgSetFillRule(doc: int64, rule: int64): void'' | pub | — |
| ''SvgMoveTo(doc: int64, x: f64, y: f64): void'' | pub | Absolute path commands |
| ''SvgLineTo(doc: int64, x: f64, y: f64): void'' | pub | — |
| ''SvgHLineTo(doc: int64, x: f64): void'' | pub | — |
| ''SvgVLineTo(doc: int64, y: f64): void'' | pub | — |
| ''SvgCurveSetCP(doc: int64, x1: f64, y1: f64, x2: f64, y2: f64): void'' | pub | SvgCurveSetCP sets control points; SvgCurveTo draws cubic bezier |
| ''SvgCurveTo(doc: int64, x: f64, y: f64): void'' | pub | **Stürzt ab** ([[https://github.com/SEOLizer/LyX-Compiler/issues/1688|#1688]]) — ''SvgCurveTo2'' nehmen |
| ''SvgCurveTo2(doc: int64, x: f64, y: f64): void'' | pub | Kubische Bézierkurve zum Endpunkt, Kontrollpunkte aus ''SvgCurveSetCP'' |
| ''SvgSmoothCurveSetCP(doc: int64, x2: f64, y2: f64): void'' | pub | Smooth cubic bezier (S command): SvgSmoothCurveSetCP + SvgSmoothCurveTo |
| ''SvgSmoothCurveTo(doc: int64, x: f64, y: f64): void'' | pub | — |
| ''SvgQuadSetCP(doc: int64, x1: f64, y1: f64): void'' | pub | Quadratic bezier (Q command): SvgQuadSetCP + SvgQuadTo |
| ''SvgQuadTo(doc: int64, x: f64, y: f64): void'' | pub | — |
| ''SvgSmoothQuadTo(doc: int64, x: f64, y: f64): void'' | pub | — |
| ''SvgArcSetup(doc: int64, rx: f64, ry: f64, rot: f64): void'' | pub | Arc: SvgArcSetup sets rx,ry,rot; SvgArcFlags sets laf,sf; SvgArcTo draws |
| ''SvgArcFlags(doc: int64, laf: int64, sf: int64): void'' | pub | — |
| ''SvgArcTo(doc: int64, x: f64, y: f64): void'' | pub | — |
| ''SvgMoveToRel(doc: int64, dx: f64, dy: f64): void'' | pub | Relative path commands |
| ''SvgLineToRel(doc: int64, dx: f64, dy: f64): void'' | pub | — |
| ''SvgHLineToRel(doc: int64, dx: f64): void'' | pub | — |
| ''SvgVLineToRel(doc: int64, dy: f64): void'' | pub | — |
| ''SvgCurveToRel(doc: int64, x: f64, y: f64): void'' | pub | — |
| ''SvgArcToRel(doc: int64, x: f64, y: f64): void'' | pub | — |
| ''SvgPathArc(doc: int64, cx: f64, cy: f64, r: f64, startDeg: f64, endDeg: f64): void'' | pub | SvgPathArc: circular arc from startDeg to endDeg around (cx,cy) with radius r Uses A-command for accuracy |
| ''SvgPathPieSlice(doc: int64, cx: f64, cy: f64, r: f64, startDeg: f64, endDeg: f64): void'' | pub | SvgPathPieSlice: filled pie slice |
| ''SvgPathStar(doc: int64, cx: f64, cy: f64, r1: f64, r2: f64, n: int64): void'' | pub | SvgPathStar: star with n points, outer radius r1, inner radius r2 |
| ''SvgPathArrow(doc: int64, x1: f64, y1: f64, x2: f64, y2: f64, headLen: f64): void'' | pub | SvgPathArrow: draws an arrow from (x1,y1) to (x2,y2) |
----
//Signaturen automatisch aus ''std/svg/path.lyx'' erzeugt (Stand 2026-08-02, lyxc 1.0.21A). Beschreibungen stammen aus den Quellkommentaren und sind teilweise unvollständig.//
Letzte Aktualisierung: 2026-08-19 — Abschnitt „Verwendung" ergänzt, Beispiel mit ''lyxc 1.1.3I'' übersetzt und ausgeführt; Absturz in ''SvgCurveTo'' als #1688 gemeldet.