# API de scripting Lua de pxstud.io — Slices

> Parte de la referencia de scripting Lua de pxstud.io, cuya introducción (https://pxstud.io/es/docs/scripting.md) explica sus convenciones. Los grupos de opciones y los tipos a los que remite están en https://pxstud.io/es/docs/scripting/option-groups.md y https://pxstud.io/es/docs/scripting/types.md. Todo en un solo archivo (en inglés): https://pxstud.io/llms-full.txt. El índice de todo el sitio (en inglés): https://pxstud.io/llms.txt.

### Slices
Rectángulos con nombre, p. ej. para regiones de exportación o hitboxes. Un slice también puede ser un 9-slice (un rectángulo central) y llevar un punto de pivote; ambos son relativos a la esquina superior izquierda del slice, como en Aseprite, y se mueven con él cuando el lienzo cambia de tamaño, se recorta o se gira.

#### `app.addSlice(name, x, y, width, height, opts?)` — modifica, deshacible
Añade un slice rectangular con nombre nuevo, opcionalmente un 9-slice (center) y/o con un pivote.

- `name` (string)
- `x` (number)
- `y` (number)
- `width` (number)
- `height` (number)
- `opts` (table, opcional)
  - `center` ({ x, y, width, height }) — El centro del 9-slice { x, y, width, height }, relativo al origen del slice: dentro del slice, con tamaño positivo.
  - `pivot` ({ x, y }) — El punto de pivote { x, y }, relativo al origen del slice (puede quedar fuera del slice).

Devuelve (string): El id del nuevo slice.

#### `app.getSlices(frameId?)` — lee
Todos los slices como { id, name, x, y, width, height, center = { x, y, width, height } (slices de 9 segmentos), pivot = { x, y } (slices con pivote), keyFrameIds (fotogramas donde el slice tiene su propia clave, solo slices con claves por fotograma) }. center y pivot son relativos al origen del slice. Pasa un id de fotograma para obtener la geometría vigente en ese fotograma.

- `frameId` (string, opcional) — Fotograma en el que leer los slices (un slice puede cambiar de límites, centro y pivote por fotograma); omítelo para los del primer fotograma.

Devuelve (table): Arreglo de tablas de slice.

#### `app.removeSlice(sliceId)` — modifica, deshacible
Elimina un slice.

- `sliceId` (string)

No devuelve nada.

#### `app.removeSliceKey(sliceId, frameId)` — modifica, deshacible
Elimina la clave de un slice en un fotograma (no el primero, que guarda la geometría propia del slice): desde ese fotograma en adelante vuelve a aplicarse la geometría de la clave anterior. Lanza un error si el slice no tiene clave en ese fotograma.

- `sliceId` (string)
- `frameId` (string)

No devuelve nada.

#### `app.updateSlice(sliceId, props, frameId?)` — modifica, deshacible
Actualiza una o más propiedades de un slice. Cambiar el tamaño de un 9-slice conserva su centro solo si todavía cabe; si no, pasa también un center nuevo (o false). Con un frameId posterior al primer fotograma, x, y, width, height, center y pivot editan la clave del slice en ese fotograma (creándola: la geometría nueva se mantiene desde ese fotograma hasta la siguiente clave); name siempre afecta a todo el slice.

- `sliceId` (string)
- `props` (table) — Las claves omitidas no cambian.
  - `name` (string) — El nombre del slice.
  - `x` (integer) — Borde izquierdo, en píxeles del sprite.
  - `y` (integer) — Borde superior, en píxeles del sprite.
  - `width` (integer ≥ 1) — Ancho en píxeles.
  - `height` (integer ≥ 1) — Alto en píxeles.
  - `center` ({ x, y, width, height } or false) — El centro del 9-slice { x, y, width, height }, relativo al origen del slice: dentro del slice, con tamaño positivo. false lo borra.
  - `pivot` ({ x, y } or false) — El punto de pivote { x, y }, relativo al origen del slice (puede quedar fuera del slice). false lo borra.
- `frameId` (string, opcional) — El fotograma en el que se aplica la geometría; si se omite o es el primer fotograma, edita la geometría propia del slice.

No devuelve nada.
