# Lathe Object

Produto de revolução em WebGL a partir de um perfil de meia silhueta (frasco, vela, pote, difusor com varetas), com giro sozinho, arrasto para orbitar e vento no hover.

- Nome no registry: `lathe-object`
- Tipo: componente
- Dependências npm: three@^0.170.0
- Demo: https://ui.visantlabs.com/c/lathe-object
- Categorias: conteudo, 3d, webgl, produto, embalagem, objeto, difusor

## Quando usar

- Use quando: Mostrar produto de revolução, como frasco, vela ou pote, em 3D que gira e orbita no arrasto
- Evite quando: Livro ou catálogo: book-3d; produto com foto real, plate ou tilt-card

## Instalar

```bash
npx shadcn@latest add @visant/lathe-object
```

## Usar

```tsx
<LatheObject />
```

## API

### LatheObject

- `aria-label?: string = "Objeto em 3D, arraste para girar"` — Descrição para leitor de tela. O canvas é `role="img"`.
- `autoRotate?: boolean = true` — Gira sozinho enquanto ninguém arrasta. Ignorado com movimento reduzido.
- `body?: string = "var(--muted-foreground)"` — Cor do corpo. Qualquer cor CSS ou `var(--token)`.
- `detail?: string = "var(--foreground)"` — Cor das varetas. Qualquer cor CSS ou `var(--token)`.
- `onCanvas?: (canvas: HTMLCanvasElement) => void` — Recebe o canvas da peça (e `null` ao desmontar), pra usá-lo como fonte de outro efeito.
- `preserveDrawingBuffer?: boolean = false` — Mantém o último quadro no buffer. Ligue quando outro efeito lê este canvas (ex.: `shader-riso` com `source`): sem isso o navegador pode entregar o buffer já limpo. Custa um pouco de desempenho, por isso vem desligado.
- `profile?: LatheProfile = "[
  [0, 0], [0.86, 0], [0.98, 0.06], [1, 0.2], [1, 2.05], [0.96, 2.35], [0.82, 2.58],
  [0.5, 2.74], [0.4, 2.8], [0.4, 3.02], [0.48, 3.04], [0.5, 3.1], [0.5, 3.36], [0.44, 3.4], [0, 3.4],
]"` — Meia silhueta, de baixo para cima: `[raio, altura]`. Feche no eixo (`x = 0`) nas pontas.
- `sticks?: boolean | LatheSticks` — Varetas de difusor saindo do topo. Ausente = só o objeto.
