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

95 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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