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.
→ std.svg · std.svg.xml · 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 <g>, 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
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="800" height="600" viewBox="0 0 100 100">
<g fill="teal" transform="translate(10 5) " id="layer1">
<circle cx="20" cy="20" r="10"/>
</g>
</svg>
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 <g>. 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 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.
