====== std.svg.filter ====== Filtereffekte: Weichzeichnung, Schlagschatten, Graustufen, Sepia, Invertierung, Helligkeit/Kontrast — dazu eigene Filter aus einzelnen Primitiven und Masken. Die fertigen Effekte (''SvgBlur'', ''SvgDropShadow'', …) schreiben eine vollständige Filterdefinition nach ''%%%%'' und liefern deren **Nummer** zurück. Zugewiesen wird sie mit ''SvgSetFilter(doc, fltId)'' aus [[lyx_-_programmiersprache:units:svg:elements|std.svg.elements]], bevor die Form gezeichnet und mit ''SvgApply'' abgeschlossen wird. → [[lyx_-_programmiersprache:units:svg|std.svg]] · [[lyx_-_programmiersprache:units:svg:defs|std.svg.defs]] · [[lyx_-_programmiersprache:units:svg:elements|std.svg.elements]] ---- ===== Verwendung ===== import std.io; import std.svg.builder; import std.svg.elements; import std.svg.style; import std.svg.filter; fn main(): int64 { var doc: int64 := SvgNew(400.0, 300.0); SvgSetPrettyPrint(doc, 1); var blur: int64 := SvgBlur(doc, 4.0); SvgSetFillHex(doc, "blue"); SvgSetFilter(doc, blur); SvgRect(doc, 50.0, 50.0, 200.0, 100.0); SvgApply(doc); var shadow: int64 := SvgDropShadow(doc, 4.0, 4.0, 3.0, 0.6); SvgSetFillHex(doc, "gray"); SvgSetFilter(doc, shadow); SvgCircle(doc, 320.0, 100.0, 40.0); SvgApply(doc); // Eigener Filter aus Primitiven — flt ist die Nummer der Definition var flt: int64 := SvgFilterBegin(doc, "meinFilter", 0.0, 0.0, 1.2, 1.2); SvgFeGaussianBlur(doc, flt, "SourceGraphic", 2.0, 2.0); SvgFeColorMatrix(doc, flt, "SourceGraphic", SVG_CM_SATURATE, 3.0); SvgFeComposite(doc, flt, "SourceGraphic", "SourceGraphic", SVG_COMP_IN); SvgFilterEnd(doc); Print(SvgToString(doc)); Print("\n"); SvgFree(doc); return 0; } ''SvgDropShadow'' nimmt **keine** Farbe — der Schatten ist schwarz mit der angegebenen Deckkraft. > **Negative Werte im Filterbereich nicht verwenden.** ''SvgFilterBegin(doc, "f", -0.1, -0.1, 1.2, 1.2)'' schreibt ''x="0./" y="0./"'' — negative Gleitkommazahlen werden in der ganzen Unit falsch ausgegeben ([[https://github.com/SEOLizer/LyX-Compiler/issues/1686|#1686]]). Bis zur Behebung mit ''0.0'' beginnen oder den fertigen ''SvgDropShadow'' nehmen, der seinen Bereich selbst in Prozent schreibt. ---- ===== Konstanten ===== ^ Name ^ Wert ^ Verwendung ^ | ''SVG_COMP_OVER'' / ''SVG_COMP_IN'' / ''SVG_COMP_OUT'' / ''SVG_COMP_ATOP'' / ''SVG_COMP_XOR'' | 0–4 | ''SvgFeComposite'' | | ''SVG_CM_MATRIX'' / ''SVG_CM_SATURATE'' / ''SVG_CM_HUE_ROTATE'' / ''SVG_CM_LUM_ALPHA'' | 0–3 | ''SvgFeColorMatrix'' | ---- ===== Funktionen ===== ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''SvgBlur(doc: int64, stdDeviation: f64): int64'' | pub | Weichzeichner, liefert die Filternummer | | ''SvgDropShadow(doc: int64, dx: f64, dy: f64, blur: f64, opacity: f64): int64'' | pub | Schwarzer Schlagschatten | | ''SvgGrayscale(doc: int64): int64'' | pub | Graustufen | | ''SvgSepia(doc: int64): int64'' | pub | Sepia | | ''SvgInvert(doc: int64): int64'' | pub | Invertierung | | ''SvgBrightnessContrast(doc: int64, brightness: f64, contrast: f64): int64'' | pub | Helligkeit und Kontrast | | ''SvgFilterBegin(doc: int64, id: pchar, x: f64, y: f64, w: f64, h: f64): int64'' | pub | Eigenen Filter beginnen | | ''SvgFilterEnd(doc: int64): void'' | pub | Eigenen Filter schließen | | ''SvgFeGaussianBlur(doc: int64, flt: int64, src: pchar, stdX: f64, stdY: f64): void'' | pub | Primitiv ''feGaussianBlur'' | | ''SvgFeOffset(doc: int64, flt: int64, src: pchar, dx: f64, dy: f64): void'' | pub | Primitiv ''feOffset'' | | ''SvgFeComposite(doc: int64, flt: int64, in1: pchar, in2: pchar, op: int64): void'' | pub | Primitiv ''feComposite'', Operation über ''SVG_COMP_*'' | | ''SvgFeColorMatrix(doc: int64, flt: int64, src: pchar, cmType: int64, val: f64): void'' | pub | Primitiv ''feColorMatrix'', Typ über ''SVG_CM_*'' | | ''SvgMaskBegin(doc: int64, id: pchar): int64'' | pub | Maske beginnen | | ''SvgMaskEnd(doc: int64): void'' | pub | Maske schließen | Masken haben dieselbe Einschränkung wie Symbole und Clip-Pfade: zwischen ''SvgMaskBegin'' und ''SvgMaskEnd'' gezeichnete Formen landen im Rumpf statt in der Definition ([[https://github.com/SEOLizer/LyX-Compiler/issues/1685|#1685]]). Letzte Aktualisierung: 2026-08-19 — Seite gegen die echten Signaturen neu geschrieben: die Effekte heißen ''SvgBlur''/''SvgDropShadow''/''SvgGrayscale'' (ohne ''Filter''-Präfix und ohne ''id''), liefern eine Nummer und werden über ''SvgSetFilter'' zugewiesen; die Primitive nehmen die Filternummer und Konstanten statt Zeichenketten. Beispiel mit ''lyxc 1.1.3I'' übersetzt und ausgeführt, Ausgabe übernommen.