CommunityImagemgithub.com

ezylevy/3d-stl

Duas entradas, um padrão de saída: um STL impermeável, um script paramétrico

O que é 3d-stl?

Esta skill fornece duas rotas para criação de arquivos STL impermeáveis: a rota geométrica, que gera modelos paramétricos a partir de descrições textuais (dimensões, esboços) usando scripts Python com bibliotecas como trimesh e shapely; e a rota de imagem, que converte fotos ou imagens em campos de altura (relevo ou litofania) usando apenas Pillow e numpy, sem dependências de malha complexas. A saída padrão é sempre um STL impermeável acompanhado de um script paramétrico com flags argparse, permitindo regeneração imediata com parâmetros alterados. Ideal para engenheiros e designers que precisam iterar rapidamente em peças 3D, a skill enfatiza a verificação de água-estanque, a documentação explícita de suposições e a geração de tabelas de fatiamento (layer height, suportes, orientação). Suporta plataformas como Claude Code e ambientes Python no Windows/Linux, com instruções claras para montagens multi-peça e tolerâncias de ajuste.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ezylevy/ezy-plugins/tree/HEAD/plugins/3d-stl/skills/3d-stl

Installed? Explore more Imagem skills: steipete/songsee, affaan-m/frontend-design, mattpocock/improve-codebase-architecture · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

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.

EntradaRotaBiblioteca
Dimensões, um objeto descrito, um esboço em palavrasRota geométricascripts/partlib.py
Uma foto ou arquivo de imagemRota de imagemscripts/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çaConstruir a partir de
Alça de ponte, suporte ⊓bridge_profile + extrude
Placa plana com furospolígono shapely com anéis internos + extrude
Pino, cavilha, parafusothreaded_pin, depois place no seu eixo
Porca, soquete roscadohex_nut, ou subtraia threaded_rod(clearance=…)
Espaçador, buchadois círculos concêntricos + extrude
Gancho, suporte em Lpolígono da vista lateral + extrude, plano na mesa
Invólucrocaixa 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
ModoMapeamentoz típico
reliefpixels claros sobem0,6 → 4,0 mm, geralmente sobre uma placa --base
lithophanepixels escuros ficam grossos, então brilha quando iluminado por trás0,8 → 3,0 mm, sem base
  • --res define 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:

  1. Uma tabela de dimensões, incluindo valores assumidos.
  2. 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.
  3. Uma tabela de fatiamento: altura da camada, paredes, preenchimento, suportes (exatamente onde), material e qual face vai na mesa e por quê.
  4. O comando de uma linha para regenerar com números diferentes.
  5. 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

Habilidades Relacionadas