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

std.svg · std.svg.style · 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;
}

<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="300">
  <rect x="10" y="10" width="200" height="100" fill="#add8e6" stroke="#4582b5" stroke-width="2"/>
  <ellipse cx="300" cy="200" rx="60" ry="30" fill="none"/>
  <line x1="50" y1="260" x2="350" y2="260"/>
  <polyline points="10,80 50,20 90,80 130,20"/>
  <polygon points="150,0 75,130 225,130" fill="gold"/>
</svg>

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 <g> 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 (#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.