====== std.svg.defs ====== Wiederverwendbare Definitionen im ''%%%%''-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 [[lyx_-_programmiersprache:units:svg:elements|std.svg.elements]]). → [[lyx_-_programmiersprache:units:svg|std.svg]] · [[lyx_-_programmiersprache:units:svg:style|std.svg.style]] · [[lyx_-_programmiersprache:units:svg:elements|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; } Der übergebene Name (''"blauRot"'') wird als ''class'' geschrieben; das ''id'' vergibt die Unit selbst (''grad0'', ''sym1'', ''clip2'' …). > **Symbole, Clip-Pfade und Marker lassen sich füllen** ([[https://github.com/SEOLizer/LyX-Compiler/issues/1685|#1685]], nachgemessen mit ''lyxc 1.1.11B''): eine zwischen ''SvgSymbolBegin'' und ''SvgSymbolEnd'' gezeichnete Form landet in der Definition, nicht mehr sichtbar im Bild. Für ''SvgClipPathBegin'' und ''SvgMarkerBegin'' gilt dasselbe. > > **Der angegebene Name wird aber nicht zur ''id''** ([[https://github.com/SEOLizer/LyX-Compiler/issues/1828|#1828]]). Die ''id'' vergibt die Unit (''sym0'', ''clip0'', ''mrk1'' …); bei ''SvgSymbolBegin'' landet der Name in ''class'', bei Clip-Pfad und Marker verschwindet er. ''SvgUse(doc, "stern", …)'' schreibt ''href="#stern"'' und trifft damit nichts. > > **Der Weg, der trifft:** ''SvgUseId(doc, symId, …)'' mit dem Rückgabewert von ''SvgSymbolBegin'' — das schreibt ''href="#sym0"''. Für Clip-Pfad und Marker gibt es keine Id-Fassung; die Referenz ist von außen derzeit nicht herstellbar. var sym: int64 := SvgSymbolBegin(doc, "stern"c, 10.0, 10.0); SvgSetFillHex(doc, "#00ff00"); SvgCircle(doc, 5.0, 5.0, 4.0); SvgApply(doc); SvgSymbolEnd(doc); SvgUseId(doc, sym, 20.0, 20.0, 10.0, 10.0); // trifft — der Weg ueber den Namen nicht ---- ===== 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. Codebeispiele geprüft: gegen **lyxc 1.2.5C** übersetzt (Prüflauf 2026-09-08 über die gesamte Doku: 574 Vollprogramme, 0 echte Fehler; zusätzlich 5159 Aufrufe gegen die ''pub fn''-Signaturen in ''aurum/std'' gehalten, 0 Abweichungen).