# Lua-Skript-API von pxstud.io — Pinsel

> Teil der Lua-Skript-Referenz von pxstud.io, deren Übersicht (https://pxstud.io/de/docs/scripting.md) die Konventionen erklärt. Die Optionsgruppen und Typen, auf die sie verweist, stehen in https://pxstud.io/de/docs/scripting/option-groups.md und https://pxstud.io/de/docs/scripting/types.md. Alles in einer Datei (auf Englisch): https://pxstud.io/llms-full.txt. Das Verzeichnis der ganzen Website (auf Englisch): https://pxstud.io/llms.txt.

### Pinsel
Definiere eigene Pinsel mit einem Namen und mal dann mit ihnen. Sie existieren nur in der Engine für die Dauer der Sitzung: nicht im Dokument, nicht rückgängig zu machen, nicht gespeichert und getrennt von der Pinselbibliothek des Editors.

#### `app.brushFromSelection(name)` — ändert
Definiert einen eigenen Pinsel aus der Form der aktuellen Auswahl (ausgewählte Pixel malen). Wirft einen Fehler, wenn nichts ausgewählt ist oder die Auswahl größer als 64 x 64 ist.

- `name` (string) — Der Name, den der Pinsel bekommt.

Gibt zurück (table): { width, height } des Pinsels.

#### `app.defineBrush(name, brush)` — ändert
Definiert einen eigenen Pinsel mit einem Namen, den du als `brush = "name"` in den Zeichenbefehlen oder mit app.useBrush verwenden kannst. Pinsel existieren nur in der Engine für die Dauer der Sitzung: Sie sind nicht Teil des Dokuments, nicht rückgängig zu machen und werden weder gespeichert noch zur Pinselbibliothek des Editors hinzugefügt.

- `name` (string) — 1-64 Zeichen. Wird ein vorhandener Name erneut definiert, ersetzt er den alten Pinsel.
- `brush` (table) — Gib `rows` (gut lesbar) oder `width`, `height` und `mask` an. Beispiel: { rows = { ".#.", "###", ".#." } } ist ein Pluszeichen.
  - `name` (string) — Wird ignoriert – ist nur da, damit ein Pinsel aus einem Feld eines Konfigurationsformulars (app.config.<id>) unverändert übergeben werden kann.
  - `rows` (list of strings, one per row; ".", " " and "0" are empty, anything else paints) — Der Pinsel als Text, bis zu 64 x 64. Kurze Zeilen werden mit leeren Pixeln aufgefüllt.
  - `width` (integer 1–64) — Breite in Pixeln (mit `mask`).
  - `height` (integer 1–64) — Höhe in Pixeln (mit `mask`).
  - `mask` (flat row-major list of width*height 0/1 values) — Der Pinsel als Zahlen (mit `width` und `height`).

Gibt zurück (table): { width, height } des Pinsels.

#### `app.getBrush(name)` — liest
Ein eigener Pinsel nach Namen als { name, width, height, mask (flache 0/1-Liste), rows (dasselbe als Strings aus # und .) } oder nil, wenn es keinen solchen Pinsel gibt.

- `name` (string)

Gibt zurück (table): Pinsel-Tabelle oder nil.

#### `app.getBrushes()` — liest
Die mit app.defineBrush definierten eigenen Pinsel in der Reihenfolge ihrer Definition, als { name, width, height }. Eingebaute Pinsel (circle, square, horizontal) werden nicht aufgeführt.

Gibt zurück (table): Array aus { name, width, height }.

#### `app.removeBrush(name)` — ändert
Löscht einen mit app.defineBrush definierten eigenen Pinsel. Zeichenbefehle, die schon gelaufen sind, behalten den Pinsel, den sie benutzt haben.

- `name` (string)

Gibt zurück (boolean): true, wenn es einen solchen Pinsel gab.

#### `app.useBrush(name)` — ändert
Macht einen eigenen Pinsel zum aktuellen Pinsel (brushShape = "custom" und customBrush des Bearbeitungskontexts), sodass Zeichenbefehle ohne `brush`-Option ihn verwenden – die Werkzeugleiste des Editors zeigt ihn ebenfalls an. Wirft einen Fehler, wenn der Name unbekannt ist.

- `name` (string) — Ein mit app.defineBrush definierter Pinsel.

Gibt nichts zurück.
