====== std.svg.elements ====== SVG-Grundformen: Rechteck (''rect''), Kreis (''circle''), Ellipse (''ellipse''), Linie (''line''), Polyline und Polygon. **Die Formfunktionen nehmen keinen Style-String.** Die Unit arbeitet zustandsbehaftet: erst die Stilwerte setzen (''SvgSetFill*'', ''SvgSetStroke*'' aus [[lyx_-_programmiersprache:units:svg:style|std.svg.style]]), dann die Form aufrufen, dann mit ''SvgApply'' abschließen. Ohne ''SvgApply'' bleibt das Element **offen** — die Ausgabe ist dann kein gültiges XML. → [[lyx_-_programmiersprache:units:svg|std.svg]] · [[lyx_-_programmiersprache:units:svg:style|std.svg.style]] · [[lyx_-_programmiersprache:units:svg:path|std.svg.path]] ---- ===== Verwendung ===== import std.io; import std.svg.builder; import std.svg.elements; import std.svg.style; fn main(): int64 { var doc: int64 := SvgNew(400.0, 300.0); SvgSetPrettyPrint(doc, 1); // Rechteck (x, y, Breite, Hoehe) — Stil vorher setzen SvgSetFillHex(doc, "#add8e6"); SvgSetStroke(doc, 0.27, 0.51, 0.71); SvgSetStrokeWidth(doc, 2.0); SvgRect(doc, 10.0, 10.0, 200.0, 100.0); SvgApply(doc); // Ellipse (cx, cy, rx, ry) SvgSetFillNone(doc); SvgEllipse(doc, 300.0, 200.0, 60.0, 30.0); SvgApply(doc); // Linie (x1, y1, x2, y2) SvgLine(doc, 50.0, 260.0, 350.0, 260.0); SvgApply(doc); // Polyline: Punkte als "x1,y1 x2,y2 ..." SvgPolyline(doc, "10,80 50,20 90,80 130,20"); SvgApply(doc); // Polygon (geschlossen) SvgSetFillHex(doc, "gold"); SvgPolygon(doc, "150,0 75,130 225,130"); SvgApply(doc); Print(SvgToString(doc)); Print("\n"); SvgFree(doc); return 0; } Ein gesetzter Stil gilt **bis zum nächsten ''SvgApply''** und wird danach zurückgesetzt; im Beispiel erbt die Ellipse deshalb weder Füllung noch Rahmen des Rechtecks. ---- ===== Funktionen ===== ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''SvgRect(doc: int64, x: f64, y: f64, w: f64, h: f64): void'' | pub | Rechteck | | ''SvgRoundRect(doc: int64, x: f64, y: f64, w: f64, h: f64): void'' | pub | Rechteck mit den zuvor über ''SvgSetRounding'' gesetzten Radien | | ''SvgSetRounding(doc: int64, rx: f64, ry: f64): void'' | pub | Eckenradien für das nächste ''SvgRoundRect'' | | ''SvgCircle(doc: int64, cx: f64, cy: f64, r: f64): void'' | pub | Kreis | | ''SvgEllipse(doc: int64, cx: f64, cy: f64, rx: f64, ry: f64): void'' | pub | Ellipse | | ''SvgLine(doc: int64, x1: f64, y1: f64, x2: f64, y2: f64): void'' | pub | Linie | | ''SvgPolyline(doc: int64, points: pchar): void'' | pub | Offener Linienzug | | ''SvgPolygon(doc: int64, points: pchar): void'' | pub | Geschlossener Linienzug | | ''SvgPolylineN(doc: int64, xs: int64, ys: int64, n: int64): void'' | pub | Linienzug aus zwei ''f64''-Feldern | | ''SvgPolygonN(doc: int64, xs: int64, ys: int64, n: int64): void'' | pub | Polygon aus zwei ''f64''-Feldern | | ''SvgApply(doc: int64): void'' | pub | Schließt das zuletzt begonnene Element und schreibt die gesetzten Stile hinein | | ''SvgGroupBegin(doc: int64): int64'' | pub | Gruppe ''%%%%'' beginnen | | ''SvgGroupBeginId(doc: int64, id: pchar): int64'' | pub | Gruppe mit ''id'' beginnen | | ''SvgGroupEnd(doc: int64): void'' | pub | Gruppe schließen | | ''SvgSetId(doc: int64, elem: int64, id: pchar): void'' | pub | ''id'' setzen | | ''SvgSetClass(doc: int64, elem: int64, cls: pchar): void'' | pub | ''class'' setzen | | ''SvgSetVisible(doc: int64, elem: int64, visible: int64): void'' | pub | Sichtbarkeit | | ''SvgSetFillGradient(doc: int64, gradId: int64): void'' | pub | Füllung aus einem Verlauf | | ''SvgSetStrokeGradient(doc: int64, gradId: int64): void'' | pub | Rahmen aus einem Verlauf | | ''SvgSetFilter(doc: int64, filterId: int64): void'' | pub | Filter zuweisen | | ''SvgSetClipPath(doc: int64, clipId: int64): void'' | pub | Clip-Pfad zuweisen | | ''SvgSetMask(doc: int64, maskId: int64): void'' | pub | Maske zuweisen | | ''SvgSetMarkerStart(doc: int64, markerId: int64): void'' | pub | Marker am Anfang | | ''SvgSetMarkerEnd(doc: int64, markerId: int64): void'' | pub | Marker am Ende | > **''SvgRoundRect'' schreibt derzeit immer ''rx="0" ry="0"''** — der über ''SvgSetRounding'' gesetzte Radius geht beim Schreiben verloren ([[https://github.com/SEOLizer/LyX-Compiler/issues/1684|#1684]]). Bis zur Behebung bleibt nur das eckige ''SvgRect''. Letzte Aktualisierung: 2026-08-19 — Seite gegen die echten Signaturen berichtigt: die Formfunktionen nehmen **keinen** Style-String, der Stil kommt aus ''std.svg.style'' und wird mit ''SvgApply'' festgeschrieben. Beispiel mit ''lyxc 1.1.3I'' übersetzt und ausgeführt, Ausgabe übernommen.