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 |
SvgRoundRectschreibt derzeit immerrx=„0“ ry=„0“— der überSvgSetRoundinggesetzte Radius geht beim Schreiben verloren (#1684). Bis zur Behebung bleibt nur das eckigeSvgRect.
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.
