3D STL
Duas entradas, um padrão de saída: um STL impermeável, um script paramétrico que o regenera e uma tabela de fatiamento que faz a impressão funcionar.
| Entrada | Rota | Biblioteca |
|---|---|---|
| Dimensões, um objeto descrito, um esboço em palavras | Rota geométrica | scripts/partlib.py |
| Uma foto ou arquivo de imagem | Rota de imagem | scripts/imagelib.py |
Configuração para a rota geométrica:
pip install trimesh shapely manifold3d --break-system-packages -q
A rota de imagem precisa apenas de Pillow e numpy — sem biblioteca de malha, sem booleanos.
Rota geométrica
1. Fixe as dimensões antes de modelar
A maior parte do retrabalho aqui vem da ambiguidade, não de geometria ruim. Reafirme a peça em uma tabela curta (dimensão → valor → fonte) e marque qualquer coisa que você assumiu. Preste atenção especialmente em:
- Tamanho externo vs. centros de montagem. "87 mm de largura" e "87 mm entre os parafusos" são peças diferentes — diferem por uma espessura de parede. Pergunte.
- Uma terceira dimensão faltando. Um perfil mais uma espessura são apenas dois de três; escolha uma profundidade sensata, diga isso e torne-a uma flag.
- Intenção do fixador. "Parafusos de 5 mm" pode significar furos de passagem para parafusos metálicos M5, pinos rosqueáveis impressos ou uma inserção termofixável. Três modelos diferentes.
- Hardware existente. Se a peça se encaixa com algo que já existe, o espaçamento dos furos e a espessura do material são restrições, não preferências.
Faça no máximo uma ou duas perguntas que alterem a geometria; assuma o resto, declare a suposição e siga em frente.
2. Modele com a biblioteca
scripts/partlib.py fornece construtores de perfil, extrude, threaded_rod,
threaded_pin, hex_nut, place e finish. Importe-a em vez de
re-derivar matemática de malha — a rosca helicoidal é fácil de errar sutilmente.
scripts/example_handle.py é uma peça trabalhada completa (alça de ponte + pinos
roscados integrados + porca correspondente). Copie-a como o esqueleto para uma nova peça.
Escreva o modelo como um script paramétrico com flags argparse, nunca números codificados. O usuário vai pedir uma variante em minutos, e a resposta deve ser uma linha de comando, não um novo modelo. Devolva o script junto com o STL.
3. Receitas comuns de peças
| Peça | Construir a partir de |
|---|---|
| Alça de ponte, suporte ⊓ | bridge_profile + extrude |
| Placa plana com furos | polígono shapely com anéis internos + extrude |
| Pino, cavilha, parafuso | threaded_pin, depois place no seu eixo |
| Porca, soquete roscado | hex_nut, ou subtraia threaded_rod(clearance=…) |
| Espaçador, bucha | dois círculos concêntricos + extrude |
| Gancho, suporte em L | polígono da vista lateral + extrude, plano na mesa |
| Invólucro | caixa externa menos caixa interna; lábio com folga de 0,15 mm |
Qualquer coisa não listada ainda é um polígono, uma extrusão e um booleano.
Rota de imagem
scripts/imagelib.py converte uma foto em um campo de altura e costura um
sólido explícito de grade de vértices — superfície superior, fundo plano, quatro paredes
laterais. Não usa motor booleano, que é exatamente por que não falha em imagens grandes ou estranhas.
python3 imagelib.py photo.jpg --mode lithophane --width 100 \
--out stl_output/lithophane.stl
python3 imagelib.py logo.png --mode relief --width 80 --base 2 \
--out stl_output/relief.stl
| Modo | Mapeamento | z típico |
|---|---|---|
relief | pixels claros sobem | 0,6 → 4,0 mm, geralmente sobre uma placa --base |
lithophane | pixels escuros ficam grossos, então brilha quando iluminado por trás | 0,8 → 3,0 mm, sem base |
--resdefine amostras na borda longa (padrão 200). Resolução além de cerca de 0,4 mm por amostra é desperdício — o bico não consegue imprimir isso e o arquivo incha. Aumente apenas para impressões grandes.- O contraste é ajustado automaticamente no carregamento; uma foto plana e de baixo contraste produz uma impressão plana e decepcionante. Diga isso em vez de imprimi-la.
- Litofanias querem rostos e assuntos de alto contraste. Paisagens e cenas movimentadas viram lama.
check()verifica se cada borda aparece exatamente duas vezes em direções opostas. Apenas contar passaria uma parede costurada ao contrário, o que produz um STL "válido" que o fatiador vira do avesso. Execute e relate.
Finalização, para ambas as rotas
Verifique primeiro: finish() (geometria) e check() (imagem) relatam a caixa
delimitadora, impermeabilidade e contagem de triângulos. Compare a caixa delimitadora com as
dimensões solicitadas — isso pega erros de sinal e desvios de unidade instantaneamente. Nunca apresente
uma malha que não seja impermeável.
Para qualquer coisa visualmente não óbvia — roscas, curvas, montagens — renderize uma prévia rápida em matplotlib e dê uma olhada. Vinte segundos superam uma impressão de seis horas do formato errado.
Leia references/design-rules.md antes de escolher orientação, passo de rosca ou
folgas. Ele cobre resistência na direção das camadas, perfis de rosca imprimíveis, tolerâncias
de ajuste, peças derivadas de imagem e os modos de falha que vale a pena nomear.
A resposta deve conter:
- Uma tabela de dimensões, incluindo valores assumidos.
- Qualquer decisão tomada em nome do usuário, com sua justificativa. Se uma funcionalidade solicitada for mecanicamente fraca, construa o que foi pedido e nomeie a fraqueza com uma alternativa concreta — nunca substitua silenciosamente.
- Uma tabela de fatiamento: altura da camada, paredes, preenchimento, suportes (exatamente onde), material e qual face vai na mesa e por quê.
- O comando de uma linha para regenerar com números diferentes.
- Qualquer coisa para confirmar em relação ao hardware existente antes de imprimir.
Entregue arquivos STL para /mnt/user-data/outputs/ no claude.ai, ou para uma
pasta stl_output/ no diretório de trabalho atual no Claude Code, e apresente-os
junto com o script gerador. Os scripts residem na pasta scripts/ desta skill;
chame-os pelo caminho completo ou copie-os ao lado do script da peça. No Windows use
python em vez de python3.
Montagens multi-peça
Quando as peças se encaixam (pino e porca, tampa e caixa, metades de dobradiça):
- gere ambas a partir de parâmetros compartilhados em um script — um valor de folga existente em dois arquivos vai divergir
- derive a peça fêmea da mesma função que a peça macho, deslocada por uma folga, para que não possam discordar
- indique quantas de cada imprimir e sugira um reserva para a peça pequena
- quando um ajuste for incerto, ofereça um teste de tolerância: imprima a peça pequena com duas folgas e mantenha a que funcionar