# Tutorial · Cantos y auto-cantos

Tutorial paso a paso sobre cómo manejar cantos (L1/L2/A1/A2) en Despiece y
cómo aplicar el auto-cantos con patrones configurables.

El modelo de ejemplo es `CocinaV9.despiece`. Cualquier proyecto con piezas
nombradas en castellano sirve — el matcher pliega acentos y es
case-insensitive.

---

## 1. Cargar el modelo y abrir la lista plana

![Vista general al cargar el modelo](img/01-overview.jpg)

Al importar el STEP/IGES/BREP/glTF/GLB, la sidebar izquierda muestra el
**árbol jerárquico** (assemblies / piezas). Para trabajar con cantos lo
más cómodo es la **lista plana** (todas las piezas en un solo scroll,
sin anidar assemblies): botón de la topbar o atajo.

La cámara vuelve a vista isométrica con `Home`; el zoom encaja con `F`.

## 2. La lista plana y sus chips

![Lista plana con filas de piezas y sus chips de cantos](img/02-sidebar-list.jpg)

Cada fila muestra:

- **Nombre** de la pieza (editable con doble click — paso 5).
- **Cotas** nominales `largo × ancho × espesor` (mm) derivadas del AABB en
  espacio de diseño.
- **Fila de 4 chips** correspondientes a los lados L1 · L2 · A1 · A2.
- **Chip de veta** (H/V/—) y **chip de material** (color).
- **Visibilidad / zoom** del RMB sobre la fila o la pieza 3D.

## 3. Anatomía de una fila

![Detalle de una fila con los 4 chips de cantos](img/03-chip-row.jpg)

Los **4 chips rectangulares** son los lados del canto:

| Chip | Posición física | Convención |
|------|-----------------|------------|
| **L1** | lado largo 1 | cara mayor, extremo 1 |
| **L2** | lado largo 2 | cara mayor, extremo 2 |
| **A1** | lado ancho 1 | cara menor, extremo 1 |
| **A2** | lado ancho 2 | cara menor, extremo 2 |

Inicialmente los cuatro están en estado **sin canto** (gris, `0`).
El **borde exterior** del chip es la cara del tablero; el **borde
interior** es el canto como se ve desde el lado opuesto.

## 4. Ciclar el estado de un canto

![Tres estados: sin canto, 0,45 mm, 2 mm](img/04-chip-states.jpg)

Cada click sobre un chip cicla el estado. La secuencia por defecto (sin
catálogo custom) es:

```
sin canto (gris)  →  0,45 mm (rojo)  →  2 mm (azul)  →  sin canto
```

- **Sin canto** = no se enchapa ese lado (pieza interna).
- **0,45 mm** = canto delgado melamínico / PVC fino.
- **2 mm** = canto grueso PVC o ABS.

Si tenés anchos custom en el catálogo (paso 9), el ciclo recorre todos
los del catálogo antes de volver a *sin canto*.

Los cambios **no pisan** lados ya marcados: si una pieza tiene L1 a 2 mm
y se vuelve a ciclar, el click parte del estado actual.

## 5. Renombrar una pieza

![Input inline de renombre](img/05-rename-input.jpg)

Hacé **doble click** sobre el nombre de la pieza para entrar en modo
edición. Escribí el nuevo nombre, `Enter` confirma, `Esc` cancela.

El nombre es la **clave del auto-cantos**: los patrones matchean sobre
él (con pliegue de acentos). Renombrar `Pieza_23` a `Puerta alacena`
hace que el patrón *Perímetro 2 mm* la tome en el próximo `B`.

## 6. Aplicar auto-cantos con `B`

![Modelo después de auto-cantos](img/06-after-auto.jpg)

![Sidebar después de auto-cantos](img/06-sidebar-after-auto.jpg)

El atajo **`B`** (mayúscula, o `Shift+B`) ejecuta **Auto-cantos ✦** sobre
todas las piezas del proyecto. La regla es:

> Para cada pieza, se matchea el **patrón** cuyo keyword (acorde a la
> jerarquía longest-keyword-wins / prioridad ascendente) aparezca en el
> nombre. Solo se **rellenan lados vacíos** — los que ya marcaste a mano
> no se pisan.

Patrones default del catálogo built-in:

| Patrón | L1 | L2 | A1 | A2 | Keywords |
|--------|----|----|----|----|----------|
| Perímetro 2 mm | 2 | 2 | 2 | 2 | `puerta`, `ff`, `frente falso` |
| Lado largo 0,45 | 0,45 | — | — | — | `faja`, `lat caj`, `fyf caj`, `gola`, `zocalo`, `zoc` |
| Esquina L 0,45 | 0,45 | — | 0,45 | — | `parante`, `lateral`, `base`, `byt` |

Compará la sidebar antes/después: las piezas que matchearon cambiaron
sus chips al estado del patrón. Las que no matchearon quedan en `0/0/0/0`
(esto es importante — el reporte distingue **unmatched** vs **skipped**).

## 7. Configuración → Auto-cantos

![Tabla de auto-cantos en Configuración](img/07-settings-auto-cantos.jpg)

`Configuración → Auto-cantos` (botón de la topbar) abre la lista de
patrones del taller. Cada pattern card expone:

- **Label** editable.
- **Keywords** (uno por línea; se normalizan sin acentos y en minúsculas).
- **Prioridad** (menor gana en empate de longitud de keyword).
- **Selector de ancho por lado** (L1 · L2 · A1 · A2) — popula desde el
  catálogo de anchos del paso 9.
- **Botón ↑ ↓** para reordenar y **×** para eliminar (con confirmación;
  los built-in son eliminables pero el botón *Restablecer por defecto*
  los regenera).

## 8. Crear un pattern nuevo

![Card de un patrón](img/08-pattern-card.jpg)

*+ Agregar patrón* abre una card vacía con:

1. **Label** (ej. *Estante regulable canto fino*).
2. **L1 · L2 · A1 · A2** — elegí del catálogo de anchos. Si no querés
   tocar un lado, dejalo en `—`.
3. **Keywords** — una por línea. Si tu pieza se llama `Estante reg. 800`,
   basta con `estante`.
4. **Prioridad** — `100` por defecto para customs; los built-in usan
   `0/10/20`.

`Guardar` la deja persistida en `localStorage[despiece.autoEdges.v2]`.
La próxima vez que corras `B` se evalúa junto con los demás patrones.

**Cuidado con colisiones**: si una pieza matchea dos patrones
(empate de longitud), gana el de **menor prioridad** (no el más
reciente). Mirá los ejemplos con `parante` y `lateral` para entender la
regla.

## 9. Catálogo de anchos

![Catálogo de anchos de canto](img/09-catalog-widths.jpg)

`Configuración → Auto-cantos → Catálogo de anchos` lista los anchos
disponibles para asignar a los lados de los patrones:

- **Built-in inamovibles**: `0,45 mm` y `2 mm`. El botón × está
  deshabilitado.
- **Custom** del taller: agregar con `+ Agregar ancho` (label + mm +
  color). Se persisten en `localStorage[despiece.edgeWidths.v1]`.
- Si eliminás un ancho custom que está en uso, los patterns que lo
  referencian quedan con `null` (sin canto) en ese lado y aparece un
  warning en consola.

Las piezas con anchos custom se persisten como **soft field**
`parts.customEdgeWidths` (sin bump del schema del `.despiece`) y aparecen
separadas en BOM/Pedido con columna propia de metros lineales.

## 10. Atajos de teclado

![Hoja de atajos](img/10-atajos.jpg)

`Help` (botón de la topbar o `?`) abre la hoja completa. Los más usados
en el flujo de cantos:

| Atajo | Acción |
|-------|--------|
| `B` / `Shift+B` | Auto-cantos ✦ (sobre todo el proyecto) |
| Click en chip | Cicla estado del lado (sin canto → 0,45 → 2 → custom…) |
| Doble click en nombre | Renombrar pieza |
| `G` | Cicla veta en la selección |
| `I` | Aislar selección |
| `Esc` | Limpiar selección / salir de measure |
| `F` / `Home` | Fit / Fit + iso |

En Mac el modificador de sistema es `⌘`; en otros sistemas `Ctrl`.

---

## Ver también

- [Manual § Cantos, veta, material](../manual/src/06-cantos-veta-material.md)
  — referencia completa de cantos en el manual de usuario.
- [Manual § Atajos](../manual/src/14-atajos-teclado.md) — hoja completa.
- Spec [`2026-07-18-auto-edges-configurable.md`](../superpowers/specs/2026-07-18-auto-edges-configurable.md)
  — modelo de datos de patterns y catálogo de anchos.