====== 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.