std.svg.style

Stil und Transformation für das jeweils nächste Element: Füllung, Rahmen, Deckkraft, Strichmuster und die Transform-Kette.

Die Unit kennt keine Style-Strings und keinen Style-Builder. Jede Funktion nimmt das Dokument (doc) und merkt den Wert vor; geschrieben wird er, sobald das Element mit SvgApply abgeschlossen wird — danach ist der Stil wieder leer.

std.svg · std.svg.elements · std.svg.defs


Verwendung

import std.io;
import std.svg.builder;
import std.svg.elements;
import std.svg.style;

fn main(): int64 {
    var doc: int64 := SvgNew(400.0, 300.0);
    SvgSetPrettyPrint(doc, 1);

    // Farben als Anteile 0.0–1.0, nicht als 0–255
    SvgSetFill(doc, 0.12, 0.56, 1.0);
    SvgSetOpacity(doc, 0.8);
    SvgRect(doc, 10.0, 10.0, 100.0, 60.0);
    SvgApply(doc);

    // Fuellung mit Alpha, Strichmuster, Linienenden
    SvgSetFillAlpha(doc, 1.0, 0.0, 0.0, 0.5);
    SvgSetStrokeWidth(doc, 3.0);
    SvgSetLineCap(doc, SVG_CAP_ROUND);
    SvgSetLineJoin(doc, SVG_JOIN_BEVEL);
    SvgSetDashArray(doc, "5,3");
    SvgLine(doc, 20.0, 120.0, 380.0, 120.0);
    SvgApply(doc);

    // Transformationen reihen sich in der Aufrufreihenfolge
    SvgTranslate(doc, 100.0, 50.0);
    SvgRotateAround(doc, 45.0, 200.0, 200.0);
    SvgScale(doc, 2.0, 1.5);
    SvgCircle(doc, 100.0, 100.0, 20.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">
  <rect x="10" y="10" width="100" height="60" fill="#1f8fff" opacity="0.8"/>
  <line x1="20" y1="120" x2="380" y2="120" fill="#ff0000" fill-opacity="0.5" stroke-width="3" stroke-linecap="round" stroke-linejoin="bevel" stroke-dasharray="5,3"/>
  <circle cx="100" cy="100" r="20" transform="translate(100 50) rotate(45 200 200) scale(2 1.5) "/>
</svg>

Zwei Punkte, die beim Schreiben dieser Seite auffielen:

  • SvgSetFill nimmt Anteile (0.01.0), nicht 0–255; die Ausgabe ist Hex. Wer eine benannte Farbe oder ein fertiges Hex will, nimmt SvgSetFillHex(doc, „gold“).
  • Für den Rahmen gibt es kein SvgSetStrokeHex — nur SvgSetStroke mit drei Anteilen, SvgSetStrokeNone und SvgSetStrokeWidth.

Konstanten

Name Wert Verwendung
SVG_CAP_BUTT / SVG_CAP_ROUND / SVG_CAP_SQUARE 0 / 1 / 2 SvgSetLineCap
SVG_JOIN_MITER / SVG_JOIN_ROUND / SVG_JOIN_BEVEL 0 / 1 / 2 SvgSetLineJoin
SVG_FILL_NONZERO / SVG_FILL_EVENODD 0 / 1 SvgSetFillRule (in std.svg.path)

Funktionen

Signatur Sichtbarkeit Beschreibung
SvgSetFill(doc: int64, r: f64, g: f64, b: f64): void pub Füllfarbe, Anteile 0.0–1.0
SvgSetFillAlpha(doc: int64, r: f64, g: f64, b: f64, a: f64): void pub Füllfarbe mit fill-opacity
SvgSetFillNone(doc: int64): void pub fill=„none“
SvgSetFillHex(doc: int64, hex: pchar): void pub Füllung als Hex oder benannte Farbe
SvgSetStroke(doc: int64, r: f64, g: f64, b: f64): void pub Rahmenfarbe, Anteile 0.0–1.0
SvgSetStrokeNone(doc: int64): void pub stroke=„none“
SvgSetStrokeWidth(doc: int64, w: f64): void pub Rahmenbreite
SvgSetOpacity(doc: int64, a: f64): void pub Gesamtdeckkraft
SvgSetLineCap(doc: int64, cap: int64): void pub Linienende, SVG_CAP_*
SvgSetLineJoin(doc: int64, join: int64): void pub Linienverbindung, SVG_JOIN_*
SvgSetMiterLimit(doc: int64, limit: f64): void pub Grenzwert für Gehrungen
SvgSetDashArray(doc: int64, pattern: pchar): void pub Strichmuster, z. B. „5,3“
SvgSetDashArrayN(doc: int64, dashes: int64, n: int64): void pub Strichmuster aus einem f64-Feld
SvgSetDashOffset(doc: int64, offset: f64): void pub Versatz des Strichmusters
SvgTranslate(doc: int64, tx: f64, ty: f64): void pub Verschiebung anhängen
SvgScale(doc: int64, sx: f64, sy: f64): void pub Skalierung anhängen
SvgRotate(doc: int64, angle: f64): void pub Drehung um den Ursprung
SvgRotateAround(doc: int64, angle: f64, cx: f64, cy: f64): void pub Drehung um einen Punkt
SvgSkewX(doc: int64, angle: f64): void pub Scherung in x
SvgSkewY(doc: int64, angle: f64): void pub Scherung in y
SvgMatrixABCD(doc: int64, a: f64, b: f64, c: f64, d: f64): void pub Die vier Matrixanteile
SvgMatrix(doc: int64, e: f64, f2: f64): void pub Die beiden Verschiebungsanteile

Letzte Aktualisierung: 2026-08-19 — Seite vollständig gegen die echten Signaturen neu geschrieben: der frühere Style-Builder (SvgStyleNew, SvgRGB, SvgHex und die Transform-Strings) existiert nicht; alle Funktionen arbeiten auf doc. Beispiel mit lyxc 1.1.3I übersetzt und ausgeführt, Ausgabe übernommen.