plano3d/docs/propuesta-lizette/04-prueba-pieza-plana.md

95 lines
3.3 KiB
Markdown
Raw Normal View History

# 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*