std.svg.defs
Wiederverwendbare Definitionen im <defs>-Block: Farbverläufe (linear, radial), Kachelmuster, Symbole, Marker und Clip-Pfade.
Die Begin-Funktionen liefern eine laufende Nummer zurück. Diese Nummer ist der Schlüssel für alles Weitere: Farbstopps, das Ende der Definition und die Zuweisung an ein Element (SvgSetFillGradient, SvgSetFillPattern aus std.svg.elements).
→ std.svg · std.svg.style · std.svg.elements
Verwendung
import std.io;
import std.svg.builder;
import std.svg.defs;
import std.svg.elements;
import std.svg.style;
fn main(): int64 {
var doc: int64 := SvgNew(400.0, 300.0);
SvgSetPrettyPrint(doc, 1);
// Linearer Verlauf: Koordinaten als Anteil 0.0–1.0,
// Farbstopps als drei Anteile (r, g, b)
var grad: int64 := SvgLinearGradient(doc, "blauRot", 0.0, 0.0, 1.0, 0.0);
SvgGradientStop(doc, grad, 0.0, 0.0, 0.0, 1.0); // blau
SvgGradientStop(doc, grad, 1.0, 1.0, 0.0, 0.0); // rot
SvgGradientEnd(doc, grad);
// Verlauf verwenden — ueber die Nummer, nicht ueber den Namen
SvgSetFillGradient(doc, grad);
SvgRect(doc, 10.0, 10.0, 300.0, 100.0);
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">
<defs>
<linearGradient id="grad0" class="blauRot" x1="0" y1="0" x2="1" y2="0" gradientUnits="objectBoundingBox">
<stop offset="0" stop-color="#0000ff"/>
<stop offset="1" stop-color="#ff0000"/>
</linearGradient>
</defs>
<rect x="10" y="10" width="300" height="100" fill="url(#grad0)"/>
</svg>
Der übergebene Name („blauRot“) wird als class geschrieben; das id vergibt die Unit selbst (grad0, sym1, clip2 …).
Symbole, Clip-Pfade und Marker lassen sich derzeit nicht füllen (#1685). Die Begin-Funktionen schreiben in den<defs>-Puffer, die Formfunktionen ausstd.svg.elementsdagegen in den Rumpf — eine zwischenSvgSymbolBeginundSvgSymbolEndgezeichnete Form landet sichtbar im Bild statt in der Definition, und die Definition bleibt leer.
Ebenfalls aus #1685:SvgUse(doc, „stern“, …)schreibthref=„#stern“unverändert heraus und trifft damit nicht das automatisch vergebeneid.
Brauchbar sind heute die Verläufe — sie kommen ohne die Formfunktionen aus und werden überSvgSetFillGradient(doc, gradId)zugewiesen.
Konstanten
| Name | Wert | Verwendung |
|---|---|---|
SVG_SPREAD_PAD / SVG_SPREAD_REFLECT / SVG_SPREAD_REPEAT | 0 / 1 / 2 | SvgGradientSpread |
Funktionen
| Signatur | Sichtbarkeit | Beschreibung |
|---|---|---|
SvgLinearGradient(doc: int64, id: pchar, x1: f64, y1: f64, x2: f64, y2: f64): int64 | pub | Linearen Verlauf beginnen, liefert die Verlaufsnummer |
SvgRadialGradient(doc: int64, id: pchar, cx: f64, cy: f64, r: f64): int64 | pub | Radialen Verlauf beginnen |
SvgGradientStop(doc: int64, gid: int64, offset: f64, r: f64, g: f64, b: f64): void | pub | Farbstopp, Farbe als drei Anteile 0.0–1.0 |
SvgGradientStopA(doc: int64, gid: int64, offset: f64, hex: pchar, a: f64): void | pub | Farbstopp als Hex mit Deckkraft |
SvgGradientEnd(doc: int64, gid: int64): void | pub | Linearen Verlauf schließen |
SvgRadialGradientEnd(doc: int64, gid: int64): void | pub | Radialen Verlauf schließen |
SvgGradientSpread(doc: int64, gid: int64, spread: int64): void | pub | Fortsetzung außerhalb, SVG_SPREAD_* |
SvgGradientUserSpace(doc: int64, gid: int64): void | pub | Koordinaten im Benutzersystem statt als Anteil |
SvgGradientRotate(doc: int64, gid: int64, angle: f64): void | pub | Verlauf drehen |
SvgGradientFocus(doc: int64, fx: f64, fy: f64): void | pub | Brennpunkt eines radialen Verlaufs |
SvgPatternBegin(doc: int64, id: pchar, x: f64, y: f64, w: f64, h: f64): int64 | pub | Kachelmuster beginnen |
SvgPatternEnd(doc: int64): void | pub | Kachelmuster schließen |
SvgSetFillPattern(doc: int64, patId: int64): void | pub | Muster als Füllung zuweisen |
SvgSymbolBegin(doc: int64, id: pchar, vw: f64, vh: f64): int64 | pub | Symbol beginnen (ViewBox 0 0 vw vh) |
SvgSymbolEnd(doc: int64): void | pub | Symbol schließen |
SvgUse(doc: int64, id: pchar, x: f64, y: f64, w: f64, h: f64): void | pub | Symbol einsetzen (siehe Kasten) |
SvgMarkerBegin(doc: int64, id: pchar, mw: f64, mh: f64, rx: f64, ry: f64): int64 | pub | Marker beginnen |
SvgMarkerEnd(doc: int64): void | pub | Marker schließen |
SvgClipPathBegin(doc: int64, id: pchar): int64 | pub | Clip-Pfad beginnen |
SvgClipPathEnd(doc: int64): void | pub | Clip-Pfad schließen |
Letzte Aktualisierung: 2026-08-19 — Seite gegen die echten Signaturen neu geschrieben: SvgClipBegin, SvgMarkerArrow, SvgPattern und die Style-String-Aufrufe gibt es nicht; Farbstopps nehmen die Verlaufsnummer und drei Farbanteile. Beispiel mit lyxc 1.1.3I übersetzt und ausgeführt, Ausgabe übernommen; Befunde als #1685 gemeldet.
