3D STL
Dos puntos de entrada, un estándar de salida: un STL hermético, un script paramétrico que lo regenera y una tabla de corte que hace que la impresión sea exitosa.
| Entrada | Ruta | Biblioteca |
|---|---|---|
| Dimensiones, un objeto descrito, un boceto en palabras | Ruta geométrica | scripts/partlib.py |
| Una foto o archivo de imagen | Ruta de imagen | scripts/imagelib.py |
Configuración para la ruta geométrica:
pip install trimesh shapely manifold3d --break-system-packages -q
La ruta de imagen solo necesita Pillow y numpy — no requiere bibliotecas de malla ni booleanos.
Ruta geométrica
1. Fijar las dimensiones antes de modelar
La mayor parte del retrabajo aquí proviene de la ambigüedad, no de la geometría mala. Vuelve a formular la pieza en una tabla corta (dimensión → valor → fuente) y marca cualquier cosa que hayas asumido. Presta atención específicamente a:
- Tamaño exterior vs. centros de montaje. "87 mm de ancho" y "87 mm entre los tornillos" son piezas diferentes; difieren en un espesor de pared. Pregunta.
- Una tercera dimensión faltante. Un perfil más un espesor son solo dos de tres; elige una profundidad sensata, indícalo y conviértelo en una bandera.
- Intención del sujetador. "tornillos de 5 mm" puede significar agujeros pasantes para tornillos metálicos M5, pasadores roscados impresos o un inserto termofijado. Tres modelos diferentes.
- Hardware existente. Si la pieza se acopla con algo que ya existe, la distancia entre sus agujeros y el espesor del material son restricciones, no preferencias.
Haz como máximo una o dos preguntas que cambien la geometría; asume el resto, indica la suposición y continúa.
2. Modelar con la biblioteca
scripts/partlib.py proporciona constructores de perfiles, extrude, threaded_rod, threaded_pin, hex_nut, place y finish. Impórtala en lugar de volver a derivar matemáticas de malla — la rosca helicoidal es fácil de obtener sutilmente incorrecta.
scripts/example_handle.py es una pieza de trabajo completa (mango puente + pasadores roscados integrales + tuerca correspondiente). Cópiala como esqueleto para una nueva pieza.
Escribe el modelo como un script paramétrico con banderas argparse, nunca números codificados. El usuario pedirá una variante en minutos, y la respuesta debe ser una línea de comando en lugar de un nuevo modelo. Entrega el script junto con el STL.
3. Recetas comunes de piezas
| Pieza | Construir desde |
|---|---|
| Mango puente, soporte ⊓ | bridge_profile + extrude |
| Placa plana con agujeros | polígono shapely con anillos interiores + extrude |
| Pasador, espárrago, perno | threaded_pin, luego place sobre su eje |
| Tuerca, casquillo roscado | hex_nut, o restar threaded_rod(clearance=…) |
| Separador, buje | dos círculos concéntricos + extrude |
| Gancho, soporte en L | polígono de la vista lateral + extrude, plano en la cama |
| Caja | caja exterior menos caja interior; labio con 0,15 mm de holgura |
Cualquier cosa no listada sigue siendo un polígono, una extrusión y una booleana.
Ruta de imagen
scripts/imagelib.py convierte una imagen en un campo de altura y genera un sólido explícito de cuadrícula de vértices — superficie superior, fondo plano, cuatro paredes laterales. No utiliza ningún motor booleano, que es exactamente por lo que no falla en imágenes grandes o extrañas.
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 | Mapeo | z típica |
|---|---|---|
relief | los píxeles brillantes se elevan | 0,6 → 4,0 mm, a menudo sobre una placa --base |
lithophane | los píxeles oscuros se vuelven gruesos, para que brille con retroiluminación | 0,8 → 3,0 mm, sin base |
--resestablece las muestras en el borde largo (por defecto 200). La resolución más allá de aproximadamente 0,4 mm por muestra se desperdicia — la boquilla no puede imprimirla y el archivo se infla. Auméntala solo para impresiones grandes.- El contraste se estira automáticamente al cargar; una foto plana y de bajo contraste produce una impresión plana y decepcionante. Indícalo en lugar de imprimirla.
- Las litofanías quieren rostros y sujetos de alto contraste. Los paisajes y escenas ocupadas se convierten en barro.
check()verifica que cada borde aparezca exactamente dos veces en direcciones opuestas. Solo contar pasaría una pared cosida al revés, lo que produce un STL "válido" que el cortador invierte. Ejecútalo, infórmalo.
Acabado, para ambas rutas
Verifica primero: finish() (geometría) y check() (imagen) reportan la caja delimitadora, la estanqueidad y el recuento de triángulos. Compara la caja delimitadora con las dimensiones solicitadas — detecta errores de signo y deslizamientos de unidades al instante. Nunca presentes una malla que no sea hermética.
Para cualquier cosa visualmente no obvia — roscas, curvas, ensamblajes — renderiza una vista previa rápida con matplotlib y mírala. Veinte segundos superan una impresión de seis horas de la forma incorrecta.
Lee references/design-rules.md antes de elegir orientación, paso de rosca o holguras. Cubre resistencia en dirección de capa, perfiles de rosca imprimibles, tolerancias de ajuste, piezas derivadas de imagen y los modos de falla que vale la pena nombrar.
La respuesta debe contener:
- Una tabla de dimensiones, incluyendo valores asumidos.
- Cualquier decisión tomada en nombre del usuario, con su motivo. Si una característica solicitada es mecánicamente débil, construye lo que pidieron y nombra la debilidad con una alternativa concreta — nunca sustituyas en silencio.
- Una tabla de corte: altura de capa, paredes, relleno, soportes (exactamente dónde), material y qué cara va en la cama y por qué.
- La línea de comando única para regenerar con números diferentes.
- Cualquier cosa a confirmar con el hardware existente antes de imprimir.
Entrega los archivos STL en /mnt/user-data/outputs/ en claude.ai, o en una carpeta stl_output/ en el directorio de trabajo actual en Claude Code, y preséntalos junto con el script generador. Los scripts se encuentran en la carpeta scripts/ de este skill; llámalos por ruta completa o cópialos junto al script de la pieza. En Windows usa python en lugar de python3.
Ensamblajes de múltiples piezas
Cuando las piezas se acoplan (pasador y tuerca, tapa y caja, mitades de bisagra):
- genera ambas desde parámetros compartidos en un solo script — un valor de holgura que viva en dos archivos se desviará
- deriva la pieza hembra de la misma función que la pieza macho, desplazada por una holgura, para que no puedan discrepar
- indica cuántas de cada una imprimir, y sugiere un repuesto para la pequeña
- cuando un ajuste sea incierto, ofrece una prueba de tolerancia: imprime la pieza pequeña con dos holguras y quédate con la que funcione