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 aus std.svg.elements dagegen in den Rumpf — eine zwischen SvgSymbolBegin und SvgSymbolEnd gezeichnete Form landet sichtbar im Bild statt in der Definition, und die Definition bleibt leer.

Ebenfalls aus #1685: SvgUse(doc, „stern“, …) schreibt href=„#stern“ unverändert heraus und trifft damit nicht das automatisch vergebene id.

Brauchbar sind heute die Verläufe — sie kommen ohne die Formfunktionen aus und werden über SvgSetFillGradient(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.