# Peças — desenho paramétrico

**Peças** é o mundo de projeto de uma peça: você desenha um perfil 2D (o *esboço*), o solver o deixa **totalmente restrito**, você o transforma num sólido 3D com uma pilha de operações (extrusão, revolução, rebaixo, filete, chanfro) e salva o resultado na sua **biblioteca**. De lá a peça vira uma **ficha técnica** para o chão de fábrica e um componente que entra na **bancada** como qualquer outro.

É o quarto modo da bancada (**Montagem · Render · Peças · Código**). Abra por **Peças** no cabeçalho da bancada — aí a peça já nasce ligada àquela bancada e o botão "Inserir na bancada" a coloca direto — ou pela rota `/sketch` (avulsa, sem bancada). Tudo em **milímetros**; ângulos em **graus** na tela.

## O fluxo em uma frase

Desenhar o contorno → **Auto-constrain** (Totalmente restrito) → **Sólido 3D** (dar altura/revolucionar) → nomear + classe de tolerância → **Salvar peça** → **Ficha técnica** / **Inserir na bancada**.

## 1. O esboço (2D)

O esboço começa com um **retângulo padrão** já desenhado, pronto para virar sólido. A primeira ferramenta de desenho que você usar substitui esse retângulo intocado; a partir daí, cada ferramenta **adiciona** um contorno.

### Ferramentas de desenho (barra lateral esquerda)

- **Selecionar** — a ferramenta **padrão** (`rail-sketch-tool-select-btn`). Clique numa forma para selecioná-la e arraste seus vértices/grips; arrastar no vazio não desenha nada. **Esc** limpa a seleção; **Del** remove o contorno selecionado. As ferramentas de desenho são de **um uso**: ao completar uma forma (arraste do retângulo, fechar a polilinha, soltar o círculo, confirmar o polígono, colocar o arco) a barra volta sozinha para Selecionar — nenhum arraste acidental vira geometria.
- **Linha** — polilinha fechada: clique cada vértice e feche no primeiro ponto. Vira um contorno `poly` de N lados (um perfil qualquer, um L, um T).
- **Retângulo** — clique-arraste um retângulo. É o contorno com o melhor caminho de restrição (especialista treinado).
- **Círculo** — clique-arraste do centro ao raio. Sozinho vira um disco; **dentro** de outro contorno vira um **furo** (veja multi-contorno).
- **Arco** — em um contorno fechado, arqueia uma aresta pelo grip do ponto médio (curvatura). Bojo ~0 volta a ser reta.
- **Polígono** — polígono regular: clique o centro, afaste para dimensionar. Um HUD numérico define N (3–12, padrão 6) e alterna **inscrito** (o valor é o circunraio, cursor num vértice) / **circunscrito** (o valor é a distância **entre faces**, o que o serralheiro lê numa sextavada com a chave). Emite um contorno `poly` com metadados `regular` para re-editar e cotar.

Além disso, na barra do palco: **grade** (`sketch-grid-toggle`), **snap** (`sketch-snap-toggle`), **ref. da face** (`sketch-face-ref-toggle`, só aparece quando o esboço se apoia num sólido anterior), **desfazer/refazer** (`sketch-undo-btn`/`sketch-redo-btn`, também Ctrl/Cmd+Z e Ctrl/Cmd+Shift+Z) e **redefinir** (`sketch-reset-btn`, volta ao retângulo padrão sob confirmação).

### Grade e snap

A **grade** dá referência visual; o **snap** prende cursor e vértices à grade e a pontos notáveis (cantos, centro) enquanto você desenha. Desenhe "no olho" e o snap fecha os milímetros — ligue/desligue quando precisar de um valor livre.

### Cota (dimensão) com tolerância ±

A ferramenta **Cota** transforma uma medida "como desenhada" numa **cota nomeada e editável**: escolha a aresta/diâmetro e digite o valor nominal. Numa cota você pode anexar uma **tolerância ±** (por exemplo Ø8 ±0,02) — ela sobe para a ficha na tabela **Cotas e tolerâncias**, sobrepondo a tolerância geral ISO 2768 só naquela cota. Cotas sem tolerância própria herdam a geral. As cotas são a ponte entre o desenho e o documento: **nada é digitado à mão na ficha**, tudo deriva daqui.

## 2. Multi-região — contenção é furo, separado é região

Um esboço aceita **vários contornos** agrupados em **regiões**. A regra é geométrica e simples:

- Um contorno que **não está contido** em nenhum outro é o **externo de uma região** (uma forma sólida).
- Um contorno **inteiramente contido** dentro de outro é um **furo** (vazado) nesse externo. Um círculo dentro de um retângulo = chapa furada; uma sextavada dentro de um retângulo = furo hexagonal real.
- **Contornos separados** (lado a lado) são **regiões independentes** — um retângulo e um círculo desenhados um ao lado do outro viram **duas peças no mesmo esboço**. O pad extruda e **une** todas as regiões; o volume é a soma (sem sobreposição).
- Um **furo dentro de um furo** (contido em dois níveis) volta a ser uma **ilha** sólida — a mesma regra par/ímpar do FreeCAD: a união das regiões reproduz o preenchimento.

Só é **erro** quando dois contornos se **cruzam** (sobreposição parcial): o painel avisa (`sketch-contour-error`, "contornos se cruzam"). Contornos apenas separados **não são mais erro**.

Assim um **furo passante** é só um círculo (ou polígono) desenhado dentro do externo — sem operação separada. Cada furo carrega opcionalmente sua **usinagem** (veja abaixo). Um contorno pode ser removido pela árvore, que resume o esboço como **"N regiões · M contornos"** quando há mais de uma região.

Limites da v1: **revolve** exige uma **única região** (uma peça torneada tem um só meridiano — multi-região dá erro atribuído à operação); **fillet/chanfro** também são de **região única** (quebra de aresta 3D não faz sentido entre prismas separados). A cota/tolerância e os especialistas treinados seguem operando por região; em multi-região as cotas ganham prefixo `R1-`, `R2-` na ficha.

### Usinagem do furo (anotação)

Quando um **furo circular** está ativo, aparece o seletor "Usinagem do furo" (`sketch-hole-machining-*`):

- **Simples** — furo perfurado (padrão).
- **Roscado** — designação métrica pré-selecionada pelo Ø perfurado (M6, M8×1,25…), com **família** alternável: métrica grossa/fina, polegada **UNC**/**UNF**, fuso **Tr** (trapezoidal) e **quadrada** (Ø×passo livre). Ex.: Furo Ø17 → rosca Tr20×4.
- **Escareado** — ângulo (padrão 90°) + Ø maior.
- **Rebaixado** — Ø do rebaixo + profundidade.

São **anotações de nível de especificação**: a geometria continua sendo o cilindro perfurado; a rosca/escareado/rebaixo aparecem como *call-out* na ficha e no desenho, não como sólido modelado. (Rosca externa em eixo torneado — o fuso de verdade — ainda não tem superfície; hoje Tr/quadrada valem para furo interno.)

## 3. Restrições e graus de liberdade

Um esboço tem **graus de liberdade** (DoF): quanto o desenho ainda pode "escorregar". O badge `sketch-dof-badge` mostra o número ao vivo — âmbar quando sub-restrito, **verde "Totalmente restrito"** quando DoF ≤ 0 sem conflito, vermelho num conflito. **Salvar** e a **ficha** exigem DoF 0: uma peça só é fabricável quando totalmente definida.

O botão herói **Auto-constrain** (`sketch-auto-constrain-btn`) resolve isso de uma vez. Duas rotas, sempre verificadas pelo motor gcs2d **no dispositivo** (sem nuvem):

- **Especialistas treinados** (retângulo; chapa com um furo circular) — produzem exatamente a **intenção** de um projetista: horizontal/vertical + comprimentos nomeados. É a melhor experiência, roda offline, cada resposta é conferida pela geometria antes de aceita.
- **Determinístico "restrito com intenção"** para o resto (polígonos livres, L, T, multi-furo): cada aresta alinhada ganha H/V e um comprimento nomeado entre seus próprios extremos, cada troca verificada pelo solver (DoF 0, sem redundância). O chip lê **"Restrito com intenção (H/V + comprimentos)"** quando engatou, senão **"Restrito como desenhado"** (fixa coordenadas — correto, porém menos editável). O caminho determinístico é a rede de segurança e nunca é removido.

Quando você prefere ir **uma restrição por vez**, o botão **Sugerir próxima** (`sketch-suggest-next-btn`) propõe a **próxima restrição sozinha**: num contorno que roteia para um especialista treinado ele roda **um passo** do decodificador (a mesma rede, parada após uma ação) e mostra uma dica em português — por exemplo "Tornar a aresta inferior horizontal" ou "Fixar a largura em 40 mm" — **destacando a aresta/vértice/furo** afetado no canvas. **Aplicar** aplica só aquela restrição (conferida pelo motor, o badge de DoF desce um passo); **Dispensar** descarta a sugestão. No caminho determinístico o botão sugere a **primeira restrição do construtor** ("sugestão do construtor") e Aplicar restringe o contorno inteiro de uma vez.

### Restrições manuais (Horizontal · Vertical · Perpendicular · Coincidente)

Quando você quer restringir **à mão**, a barra tem as ferramentas de restrição. Com **Horizontal** ou **Vertical** ativa, passe o mouse sobre uma aresta do contorno (ela acende) e clique: a aresta **fica reta na hora** — o solver move o vértice livre para satisfazer a restrição (uma aresta inclinada 5° salta para horizontal, o payoff visível). **Perpendicular** é em dois cliques: a primeira aresta fica marcada em verde, a segunda aresta adjacente fecha o ângulo de 90°; Esc cancela o par. A ferramenta fica ativa após cada aplicação (restrições se repetem naturalmente); Esc volta a Selecionar.

Cada restrição manual é **verificada pelo motor** antes de valer: se ela ficaria **redundante ou conflitante** (por exemplo repetir Horizontal na mesma aresta), é **rejeitada** com um aviso e nada muda; se limpa, ela entra na lista **Restrições** com a etiqueta **Manual** e o seu × para remover, o badge de DoF desce e a geometria já sai restringida. As restrições manuais **acompanham o contorno** (persistem no rascunho e no salvamento, como as cotas). No retângulo padrão (especialista treinado) elas roteiam pelo vocabulário de tokens (h0/v1/…); nos demais contornos entram no conjunto **como desenhado**.

**Coincidente** é honesta: num contorno fechado os vértices **já são unidos automaticamente** pelo solver, então a ferramenta apenas explica isso ao clicar num vértice (não há junção pendente a fazer na v1).

O especialista on-device é um diferencial: "solver e especialista rodam no dispositivo, sem nuvem, sem espera".

Cantos **arredondados** (fillet): quando um arco encontra duas paredes retas e foi desenhado **tangente** a elas, o construtor troca a fixação de forma do arco por uma restrição de **tangência + raio**. Assim, ao editar a Cota do raio do fillet, os pontos de tangência **deslizam pelas paredes** e o canto continua tangente — o raio na ficha é uma cota de tangência real, não um arco congelado.

## 4. O corpo (3D) — a árvore de operações

Alterne para **Sólido 3D** (`sketch-mode-3d-btn`) e o esboço vira volume. O corpo é um **histórico ordenado** de operações (`sketch-feature-tree`), cada uma com atribuição de erro própria — como um CAD paramétrico de verdade. Adicione operações por `sketch-tree-add-btn`.

### Planos datum (onde o esboço vive)

Cada esboço fica num **plano datum**. Há as seis orientações alinhadas aos eixos, e — o passo que fecha o CAD — **esboço na face**: com o pick de face (`sketch-face-pick-toggle`) você clica uma face do sólido 3D e desenha um novo esboço **em cima dela** (`sketch-tree-add-sketch-btn`). Assim se constrói uma peça em camadas: base → face → recurso.

Quando o esboço se apoia num sólido anterior, a **ref. da face** (`sketch-face-ref-toggle`, ligada por padrão) desenha o **contorno da face** onde o esboço vive como um traçado tracejado ciano no canvas 2D, com **ímã** nos vértices, nos meios de aresta e no **centro** da face (o FreeCAD faz isso à mão, importando geometria externa; aqui é automático). Assim você prende um furo no centro da face ou alinha uma aresta ao contorno existente sem digitar coordenada. O ímã da referência tem prioridade sobre a grade. No primeiro segmento (sem sólido anterior) não há referência e o botão fica oculto.

### Operações base

- **Pad (extrusão)** — dá **altura** a um contorno fechado (`sketch-tree-thickness-input`). O caminho mais direto de perfil → volume.
- **Revolução** — gira o perfil em torno de um eixo por um ângulo (`sketch-tree-angle-input`). É a peça de **torno**: flanges, buchas, eixos. Um corpo revolucionado também expõe um **eixo de rotação** quando entra na bancada (gira 1:1 com o eixo/engrenagem acoplado).
- **Pocket (rebaixo/bolsão)** — remove material de um contorno numa profundidade (`sketch-tree-depth-input`) ou **passante** (`sketch-tree-pocket-through`).

### Modificadores globais

- **Furos** — círculos/polígonos internos já são furos; a árvore também lista e edita cada furo (posição X/Y, Ø, usinagem).
- **Filete** — arredonda arestas por um raio (`sketch-tree-fillet-radius-input`).
- **Chanfro** — quebra arestas por um tamanho (`sketch-tree-chamfer-size-input`).

> Fora do v1: planos datum inclinados arbitrários, filete por aresta individual, GD&T. Filete/chanfro são globais.

### Aparência (material + textura)

O **Material** (`sketch-part-material-select`) escolhe a densidade (que alimenta o peso) e também o **acabamento visual**: madeira, aço/inox/alumínio (metal escovado) e afins ganham uma **textura procedural** aplicada por posição no espaço (mm), então ela cai certo mesmo na peça sem coordenadas de UV. O campo **Tamanho da textura (mm)** (`sketch-part-texture-tile`) ajusta ao vivo a distância de repetição do padrão — menor = mais fino, maior = mais grosso. É só pré-visualização (não altera peso nem ficha).

## 5. Biblioteca — salvar, importar, atualizar

Com a peça **totalmente restrita**, dê um **nome** (`sketch-body-name-input`), escolha a **classe de tolerância** (fina/média/grossa → ISO 2768) e **Salvar peça** (`sketch-body-save-btn`). A peça vai para **Minhas peças** (`sketch-body-own`); há também as **seeds da plataforma** (curadas, legíveis por qualquer usuário logado).

- **Importar** (`sketch-body-import-btn-*`) traz uma peça (sua ou da plataforma) para a sua biblioteca como **cópia integral** — leva todo o histórico de features, com **procedência** registrada (de onde veio).
- **Atualizar da biblioteca** — opt-in: você verifica se a origem ficou mais nova e re-copia **só a cópia da biblioteca**. Instâncias já colocadas numa bancada **não** mudam (elas carregam suas próprias features embutidas). Importar/atualizar é sempre explícito e reversível.

Salvar/ficha só ficam disponíveis logado; um esboço desenhado deslogado é preservado (autosave local) e migra para a sua conta ao entrar (`sketch-body-login-link` leva a `/login?next=/sketch`). Você nunca perde o desenho ao logar.

## 6. Usar na bancada

Duas pontes levam a peça salva para a montagem:

- **Inserir na bancada** — quando o modo Peças está ligado a uma bancada, o botão embute uma **cópia integral** das features da peça no código da bancada como um `statics.customPart(...)` e salta para **Montagem**. A peça vira um componente estático de verdade: expõe uma porta rígida **body** (entra em soldas/apoios) e é contada por conectividade / envelope / interferência / BOM. Se for revolucionada, ganha também a porta de **eixo** e gira acoplada a um eixo/engrenagem.
- **Usar na bancada** — no modo avulso (`/sketch`), copia para a área de transferência uma chamada `statics.customPart(...)` pronta, que você cola no **Código** de qualquer bancada.

A partir daí a peça segue as regras da bancada estática — veja [Static workbench](/docs/static-workbench) para junções (`weld`/`rest`/`bolted`) e os validadores. E a mesma peça vira documento de fabricação na [Ficha técnica](/docs/ficha-tecnica).

## Próximos passos

- Transforme a peça salva num documento de chão de fábrica: [Ficha técnica](/docs/ficha-tecnica).
- Monte a peça numa estrutura: [Static workbench](/docs/static-workbench).
- Fluxo geral da bancada e os quatro modos: [Guide](/docs/guide).
