# Prueba técnica: pieza plana por extrusión (plan B) La viabilidad de la reconstrucción desde tres vistas ya la demostró `prototipo/reconstruir.py` con CUBE01. Esta segunda prueba comprueba el **plan B** acordado en las decisiones: si la reconstrucción completa no llega a tiempo, o el plano tiene una sola vista, generar una pieza plana extruyendo su contorno con un espesor. También sirve para probar la lectura de contornos cerrados y agujeros con ezdxf y la exportación a STEP y STL con CadQuery, que se reutilizan en el motor. Los scripts están en `prototipo/lizette/`. ## 1. Objetivo - Comprobar que ezdxf lee bien las polilíneas cerradas y los círculos. - Comprobar que CadQuery genera el sólido por extrusión y resta los agujeros. - Comprobar que el STEP y el STL generados se abren bien en un programa CAD. ## 2. Alcance Es un script independiente: no usa la API ni la base de datos, ni `motor/api.py`. Admite polilíneas cerradas y círculos. El contorno de mayor área se toma como exterior y el resto se restan como agujeros. Quedan fuera, y se resolverán en `motor/pieza_plana.py`: - Los arcos dentro de las polilíneas (*bulge*). - Unir líneas y arcos sueltos en contornos cerrados. - Comprobar que los agujeros están dentro del contorno exterior. - Las unidades. ## 3. Pieza de prueba Una placa rectangular de 100 × 60 mm con dos taladros de Ø20 mm, generada con `prototipo/lizette/pieza_prueba.py`. **[ Captura de `placa.dxf` abierto en LibreCAD o AutoCAD ]** *Figura 1. Plano 2D de entrada* ## 4. Ejecución En local, con el entorno del proyecto (`uv sync`): ```bash cd prototipo/lizette uv run python pieza_prueba.py uv run python conversion.py placa.dxf 10 ``` O dentro del contenedor del backend, sin instalar nada en el equipo: ```bash docker compose run --rm -w /app/prototipo/lizette pruebas python pieza_prueba.py docker compose run --rm -w /app/prototipo/lizette pruebas python conversion.py placa.dxf 10 ``` `conversion.py` recibe el DXF y el espesor en mm, y genera `resultado.step` y `resultado.stl`. **[ Captura de la terminal con la salida del script ]** *Figura 2. Ejecución de la prueba* ## 5. Resultado **[ Captura de `resultado.step` abierto en FreeCAD o Fusion 360 ]** *Figura 3. Placa de 10 mm de espesor con dos taladros* Volumen esperado: 100 × 60 × 10 − 2 × π × 10² × 10 ≈ **53 717 mm³**. Se puede comprobar en FreeCAD o con `solido.val().Volume()`. ## 6. Conclusiones **[ Completar tras ejecutar: ¿se ha generado bien?, ¿coincide el volumen?, ¿cuánto ha tardado?, ¿algún problema? ]** Siguientes pasos para llevarlo al motor (`motor/pieza_plana.py`): 1. Leer los arcos de las polilíneas (*bulge*) y unir líneas y arcos sueltos en contornos (con shapely). 2. Comprobar que cada agujero está dentro del contorno exterior y avisar si no. 3. Convertir las unidades a mm. 4. Devolver un `Resultado` del contrato, con el aviso `SIN_PERFIL_CERRADO` en lugar de una excepción. 5. Añadir la placa al catálogo (`pruebas/catalogo/PLACA01/`) con su prueba automática. 6. Probar la conversión completa desde la API: subir `placa.dxf` en Swagger (`/docs`), consultar el estado y descargar el STEP. **[ Captura de Swagger UI (http://localhost:8000/docs) con los endpoints ]** *Figura 4. Endpoints de la API en Swagger*