====== std.svg.builder ======
Lebenszyklus eines SVG-Dokuments: anlegen, viewBox setzen, Einrückung wählen, serialisieren, speichern, freigeben.
Ein Dokument ist ein ''int64''-Handle; es gibt keinen eigenen ''Svg''-Typ.
→ [[lyx_-_programmiersprache:units:svg|std.svg]] · [[lyx_-_programmiersprache:units:svg:xml|std.svg.xml]] · [[lyx_-_programmiersprache:units:svg:style|std.svg.style]]
----
===== Verwendung =====
import std.io;
import std.svg.builder;
import std.svg.elements;
import std.svg.style;
fn main(): int64 {
// Breite/Hoehe in px, dazu die viewBox
var doc: int64 := SvgNewViewBox(800.0, 600.0, 0.0, 0.0, 100.0, 100.0);
SvgSetPrettyPrint(doc, 1); // 0 = alles in einer Zeile
// Gruppe: Stil und Transformation VOR SvgGroupBegin* setzen,
// sie landen dann am , nicht am ersten Kind
SvgTranslate(doc, 10.0, 5.0);
SvgGroupBeginId(doc, "layer1");
SvgSetFillHex(doc, "teal");
SvgCircle(doc, 20.0, 20.0, 10.0);
SvgApply(doc);
SvgGroupEnd(doc);
var rc: int64 := SvgSave(doc, "out.svg"); // 0 = geschrieben
Print("SvgSave rc="); PrintLn(IntToStr(rc));
Print(SvgToString(doc)); Print("\n");
SvgFree(doc);
return 0;
}
SvgSave rc=0
Beachtenswert: Die Gruppe wird erst beim ersten Kind geschrieben. Alles, was **bis dahin** an Stil gesetzt ist — hier auch das nach ''SvgGroupBeginId'' gesetzte ''fill'' —, landet am ''%%%%''. Wer die Füllung am Kind will, setzt sie erst nach dem ersten ''SvgApply''.
----
===== Funktionen =====
^ Signatur ^ Sichtbarkeit ^ Beschreibung ^
| ''SvgNew(width: f64, height: f64): int64'' | pub | Dokument anlegen, Maße in px |
| ''SvgNewViewBox(width: f64, height: f64, vbX: f64, vbY: f64, vbW: f64, vbH: f64): int64'' | pub | Dokument mit ''viewBox'' |
| ''SvgSetViewBox(doc: int64, x: f64, y: f64, w: f64, h: f64): void'' | pub | ''viewBox'' nachträglich setzen |
| ''SvgSetPrettyPrint(doc: int64, enabled: int64): void'' | pub | Zeilenumbrüche und Einrückung an (''1'') oder aus (''0'') |
| ''SvgToString(doc: int64): pchar'' | pub | Fertiges Dokument als Zeichenkette |
| ''SvgSave(doc: int64, path: pchar): int64'' | pub | In eine Datei schreiben; ''0'' bei Erfolg |
| ''SvgFree(doc: int64): void'' | pub | Speicher freigeben |
Gruppen liegen in [[lyx_-_programmiersprache:units:svg:elements|std.svg.elements]]: ''SvgGroupBegin(doc)'', ''SvgGroupBeginId(doc, id)'' und ''SvgGroupEnd(doc)'' — beide Begin-Formen liefern die Verschachtelungstiefe zurück und nehmen **keinen** Transform- oder Style-String; dafür sind die Setter aus ''std.svg.style'' da.
Ein ''SvgSetBackground'' gibt es nicht: Für einen farbigen Grund zeichnet man als erstes Element ein ''SvgRect'' über den ganzen Viewport.
Letzte Aktualisierung: 2026-08-19 — Seite gegen die echten Signaturen berichtigt: ''SvgSave'' liefert einen Rückgabewert, ''SvgSetBackground'' existiert nicht, Gruppen nehmen keinen Transform-String und stehen in ''std.svg.elements''. Beispiel mit ''lyxc 1.1.3I'' übersetzt und ausgeführt, Ausgabe übernommen.