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.