# API di scripting Lua di pxstud.io — Selezione

> Parte del riferimento di scripting Lua di pxstud.io, la cui panoramica (https://pxstud.io/it/docs/scripting.md) ne spiega le convenzioni. I gruppi di opzioni e i tipi a cui rimanda sono in https://pxstud.io/it/docs/scripting/option-groups.md e https://pxstud.io/it/docs/scripting/types.md. Tutto in un unico file (in inglese): https://pxstud.io/llms-full.txt. L'indice dell'intero sito (in inglese): https://pxstud.io/llms.txt.

### Selezione
Le forme di selezione si combinano con la selezione attuale (sostituisci, aggiungi, sottrai, interseca). La maschera di selezione è leggibile e scrivibile.

#### `app.canReselect()` — legge
Indica se app.reselect() ha una selezione precedente da ripristinare.

Restituisce (boolean): true se ce n'è una.

#### `app.deselect()` — modifica
Cancella la selezione (Seleziona ▸ Deseleziona): i comandi di disegno dipingono poi ovunque. app.reselect() la riporta indietro.

Non restituisce nulla.

#### `app.enterQuickMask()` — modifica, annullabile
Attiva la maschera rapida: la selezione diventa una maschera che dipingi, e non resta nulla di selezionato. Finché è attiva, le funzioni di disegno dipingono la maschera quando passi `"quickMask"` come layerId e frameId (qualsiasi colore aggiunge, il colore trasparente toglie); tutto il resto che modificherebbe lo sprite viene rifiutato fino a app.exitQuickMask().

Non restituisce nulla.

#### `app.exitQuickMask()` — modifica, annullabile
Disattiva la maschera rapida: ogni pixel della maschera con metà opacità o più diventa la selezione.

Non restituisce nulla.

#### `app.getSelection()` — legge
La selezione attuale come { x, y, width, height, mask }, oppure nil se non c'è nulla di selezionato. mask è una lista piatta di 0/1 sui limiti (per righe: (px, py) all'indice py*width + px + 1), inclusa quando i limiti contengono al massimo 262144 pixel; per selezioni più grandi leggila a pezzi con app.getSelectionMask.

Restituisce (table): Tabella della selezione o nil.

#### `app.getSelectionBounds()` — legge
{ x, y, width, height } della selezione attuale, oppure nil se non c'è nulla di selezionato.

Restituisce (table): { x, y, width, height } o nil.

#### `app.getSelectionMask(x, y, width, height)` — legge
Quali pixel di un rettangolo nello spazio dello sprite sono selezionati, come lista piatta di 0/1 (per righe: (px, py) all'indice py*width + px + 1). Tutti 0 quando non c'è nulla di selezionato. Al massimo 262144 pixel per chiamata.

- `x` (number)
- `y` (number)
- `width` (number)
- `height` (number)

Restituisce (table): Lista piatta di 0/1.

#### `app.isSelected(x, y)` — legge
Indica se il pixel (x, y) dello sprite è dentro la selezione attuale (false quando non c'è nulla di selezionato).

- `x` (number)
- `y` (number)

Restituisce (boolean): true se è selezionato.

#### `app.magicWand(layerId, frameId, points, opts?)` — modifica, annullabile
Seleziona i pixel che corrispondono al colore sotto ogni punto su un livello, tutte le regioni in un'unica selezione, esattamente come la bacchetta magica dell'interfaccia (un clic o un trascinamento).

- `layerId` (string)
- `frameId` (string)
- `points` (table) — Lista di punti { x = n, y = n } (o { n, n }), da 1 a 1024: { { x = 3, y = 4 } } seleziona una regione, come un clic; con più punti, la regione di ciascuno entra in un'unica selezione, come un trascinamento.
- `opts` (table, facoltativo)
  - `mode` (SelectionCombineMode: "replace" | "add" | "subtract" | "intersect"; predefinito "replace") — Come la nuova forma si combina con la selezione attuale.
  - `tolerance` (integer 0–255; predefinito context.wandTolerance) — La differenza di colore per canale più grande che conta ancora come corrispondenza.
  - `contiguous` (boolean; predefinito context.wandFillMode (true per la modalità contigua del contesto, false per globale)) — Solo la regione connessa (true), oppure ogni pixel corrispondente sulla tela (false).
  - `diagonal` (boolean; predefinito context.wandDiagonal) — Solo contiguo: si estende anche ai vicini in diagonale (8-connesso), quindi la regione filtra attraverso le linee diagonali di 1px.
  - `stopAtGrid` (boolean; predefinito context.wandStopAtGrid) — Limita la regione alla cella della griglia in cui cade il clic (la cella di una griglia isometrica è il rombo che disegna, con i pixel di linea dei suoi due bordi superiori).

Non restituisce nulla.

#### `app.modifySelection(op, amount, opts?)` — modifica, annullabile
Espande, riduce o trasforma in cornice la selezione, ritagliata sulla tela, esattamente come Seleziona > Modifica. Il bordo della tela conta come bordo della selezione.

- `op` (SelectionModifyOp: "expand" | "contract" | "border")
- `amount` (number) — Pixel, da 1 a 256.
- `opts` (table, facoltativo)
  - `shape` (SelectionModifyShape: "circle" | "square"; predefinito "circle") — Come si misura la distanza dal bordo.

Non restituisce nulla.

#### `app.reselect()` — modifica
Ripristina la selezione non vuota più recente (Seleziona ▸ Riseleziona). Genera un errore se non ce n'è nessuna: controlla app.canReselect().

Non restituisce nulla.

#### `app.selectAll()` — modifica, annullabile
Seleziona l'intera tela.

Non restituisce nulla.

#### `app.selectEllipse(x0, y0, x1, y1, opts?)` — modifica, annullabile
Seleziona l'ellisse inscritta nel riquadro delimitato dai due angoli, esattamente come lo strumento di selezione ellittica dell'interfaccia.

- `x0` (number) — Primo angolo.
- `y0` (number)
- `x1` (number) — Angolo opposto (incluso).
- `y1` (number)
- `opts` (table, facoltativo)
  - `mode` (SelectionCombineMode: "replace" | "add" | "subtract" | "intersect"; predefinito "replace") — Come la nuova forma si combina con la selezione attuale.

Non restituisce nulla.

#### `app.selectGridCells(x0, y0, x1, y1, opts?)` — modifica, annullabile
Seleziona celle intere della griglia dello sprite (rettangolare, isometrica o esagonale): ogni cella che contiene un pixel del riquadro tra i due punti, esattamente come un doppio clic (e trascinamento) con uno strumento di selezione dell'interfaccia.

- `x0` (number) — Un pixel nella prima cella.
- `y0` (number)
- `x1` (number) — Un pixel nell'ultima cella (lo stesso punto ripetuto seleziona una sola cella).
- `y1` (number)
- `opts` (table, facoltativo)
  - `mode` (SelectionCombineMode: "replace" | "add" | "subtract" | "intersect"; predefinito "replace") — Come la nuova forma si combina con la selezione attuale.

Non restituisce nulla.

#### `app.selectInverse()` — modifica, annullabile
Inverte la selezione attuale entro i limiti della tela.

Non restituisce nulla.

#### `app.selectLayerPixels(layerId, frameId, opts?)` — modifica, annullabile
Seleziona i pixel dipinti (o, con transparent = true, non dipinti) di un livello in un fotogramma, esattamente come Seleziona > Seleziona opachi / Seleziona trasparenti e Alt+clic su un livello della timeline.

- `layerId` (string) — Un gruppo seleziona i pixel di ogni livello al suo interno.
- `frameId` (string)
- `opts` (table, facoltativo)
  - `mode` (SelectionCombineMode: "replace" | "add" | "subtract" | "intersect"; predefinito "replace") — Come la nuova forma si combina con la selezione attuale.
  - `transparent` (boolean; predefinito false) — Seleziona i pixel senza colore invece di quelli dipinti.

Non restituisce nulla.

#### `app.selectPolygon(vertices, opts?)` — modifica, annullabile
Seleziona l'interno (e il contorno) del poligono chiuso passante per i vertici, esattamente come il lazo / lazo poligonale dell'interfaccia.

- `vertices` (table) — Lista di vertici { x = n, y = n } (o { n, n }); il poligono si chiude automaticamente sul primo. Copre sia il lazo sia il lazo poligonale.
- `opts` (table, facoltativo)
  - `mode` (SelectionCombineMode: "replace" | "add" | "subtract" | "intersect"; predefinito "replace") — Come la nuova forma si combina con la selezione attuale.

Non restituisce nulla.

#### `app.selectRectangle(x0, y0, x1, y1, opts?)` — modifica, annullabile
Seleziona il rettangolo delimitato dai due angoli, esattamente come lo strumento di selezione rettangolare dell'interfaccia (radius ne arrotonda gli angoli).

- `x0` (number) — Primo angolo.
- `y0` (number)
- `x1` (number) — Angolo opposto (incluso).
- `y1` (number)
- `opts` (table, facoltativo)
  - `mode` (SelectionCombineMode: "replace" | "add" | "subtract" | "intersect"; predefinito "replace") — Come la nuova forma si combina con la selezione attuale.
  - `radius` (an integer 0–1024 for every corner, or a list of four { topLeft, topRight, bottomRight, bottomLeft }; predefinito context.selectionCornerRadius) — Arrotonda gli angoli, in pixel (0 = squadrati): un raggio per tutti e quattro, oppure uno per angolo in senso orario a partire da in alto a sinistra. Ciascuno è limitato alla metà del lato più corto.

Non restituisce nulla.

#### `app.setSelection(x, y, width, height, mask?)` — modifica, annullabile
Sostituisce la selezione con un rettangolo, o con qualsiasi forma tramite `mask`.

- `x` (number)
- `y` (number)
- `width` (number)
- `height` (number)
- `mask` (table, facoltativo) — Lista piatta di 0/1 (width*height, per righe: la forma restituita da app.getSelection) che seleziona solo quei pixel del rettangolo; se omessa = l'intero rettangolo.

Non restituisce nulla.
