====== std.svg.anim ====== SMIL-Animationen: Attributanimation (''%%%%''), Transformationen (''%%%%''), Farbübergänge, Bewegung entlang eines Pfads und Keyframes. Zwei Wege, eine Animation an ein Element zu hängen: * ''elem = 0'' — die Animation wird **vorgemerkt** und beim nächsten ''SvgApply'' als Kind des dort geschlossenen Elements geschrieben. Das Element bekommt dafür automatisch ein ''id'' (''_a0'', ''_a1'', …). * ''elem > 0'' — die Animation wird sofort geschrieben und verweist über ''href="#_a{elem}"'' auf ein bereits vorhandenes Element. Die Dauer ist eine Zahl in **Sekunden** (''f64''), kein String. Die Wiederholung setzt ''SvgAnimRepeat'' vorab: ''0'' bedeutet ''indefinite''. → [[lyx_-_programmiersprache:units:svg|std.svg]] · [[lyx_-_programmiersprache:units:svg:elements|std.svg.elements]] · [[lyx_-_programmiersprache:units:svg:path|std.svg.path]] ---- ===== Verwendung ===== import std.io; import std.svg.builder; import std.svg.elements; import std.svg.style; import std.svg.anim; fn main(): int64 { var doc: int64 := SvgNew(400.0, 300.0); SvgSetPrettyPrint(doc, 1); // Vorgemerkt: haengt sich an das naechste abgeschlossene Element SvgSetFillHex(doc, "red"); SvgAnimate(doc, 0, "r", "50", "80", 1.0); SvgCircle(doc, 200.0, 150.0, 50.0); SvgApply(doc); // Dreimal statt endlos, Drehung ueber die Konstante SvgAnimRepeat(doc, 3); SvgAnimateTransform(doc, 0, SVG_AT_ROTATE, "0 200 200", "360 200 200", 2.0); SvgSetFillHex(doc, "blue"); SvgRect(doc, 150.0, 150.0, 100.0, 100.0); SvgApply(doc); // Keyframes: Zeiten als Anteil 0.0–1.0 var kf: int64 := SvgKeyframesBegin(doc, 0, "opacity"); SvgKeyframe(doc, kf, 0.0, "0"); SvgKeyframe(doc, kf, 0.5, "1"); SvgKeyframe(doc, kf, 1.0, "0"); SvgKeyframesEnd(doc, kf, 2.0, 0); SvgSetFillHex(doc, "green"); SvgCircle(doc, 350.0, 250.0, 30.0); SvgApply(doc); Print(SvgToString(doc)); Print("\n"); SvgFree(doc); return 0; } ''SvgAnimRepeat'' wirkt **fort**, bis es neu gesetzt wird — im Beispiel erbt die Keyframe-Animation deshalb nicht die 3 aus dem zweiten Block, weil ''SvgKeyframesEnd'' die Wiederholung als eigenes Argument nimmt. ---- ===== Konstanten ===== ^ Name ^ Wert ^ Bedeutung ^ | ''SVG_AT_TRANSLATE'' | 0 | ''type="translate"'' | | ''SVG_AT_SCALE'' | 1 | ''type="scale"'' | | ''SVG_AT_ROTATE'' | 2 | ''type="rotate"'' | | ''SVG_AT_SKEWX'' | 3 | ''type="skewX"'' | | ''SVG_AT_SKEWY'' | 4 | ''type="skewY"'' | ---- ===== Funktionen ===== ^ Signatur ^ Sichtbarkeit ^ Beschreibung ^ | ''SvgAnimRepeat(doc: int64, repeatCount: int64): void'' | pub | Wiederholung für die folgenden Animationen; ''0'' = ''indefinite'' | | ''SvgAnimate(doc: int64, elem: int64, attrName: pchar, fromV: pchar, toV: pchar, dur: f64): void'' | pub | ''%%%%'' für ein Attribut | | ''SvgAnimateTransform(doc: int64, elem: int64, atType: int64, fromV: pchar, toV: pchar, dur: f64): void'' | pub | ''%%%%'', Typ über ''SVG_AT_*'' | | ''SvgAnimateMotion(doc: int64, elem: int64, motionPath: pchar, dur: f64, repeatCount: int64): void'' | pub | Bewegung entlang eines Pfads | | ''SvgAnimateMotionRotate(doc: int64, elem: int64, motionPath: pchar, dur: f64, repeatCount: int64): void'' | pub | Bewegung mit Ausrichtung entlang des Pfads | | ''SvgAnimateColor(doc: int64, elem: int64, attrName: pchar, fromHex: pchar, toHex: pchar, dur: f64): void'' | pub | Farbübergang, Farben als Hex | | ''SvgKeyframesBegin(doc: int64, elem: int64, attrName: pchar): int64'' | pub | Keyframe-Folge beginnen | | ''SvgKeyframe(doc: int64, kf: int64, time: f64, value: pchar): void'' | pub | Einzelner Keyframe, Zeit als Anteil 0.0–1.0 | | ''SvgKeyframesEnd(doc: int64, kf: int64, dur: f64, repeatCount: int64): void'' | pub | Keyframe-Folge abschließen | | ''SvgAnimateBeginOn(doc: int64, anim: int64, otherId: int64, eventName: pchar): void'' | pub | Start an ein Ereignis eines anderen Elements binden | Letzte Aktualisierung: 2026-08-19 — Seite gegen die echten Signaturen neu geschrieben: jede Funktion nimmt ''doc'' **und** ''elem'', die Dauer ist ein ''f64'' in Sekunden, der Transformtyp eine ''SVG_AT_*''-Konstante, und ''SvgAnimateBegin''/''SvgAnimateEnd''/''SvgAnimateKeyframes''/''SvgAnimateSet'' gibt es nicht. Beispiel mit ''lyxc 1.1.3I'' übersetzt und ausgeführt, Ausgabe übernommen.