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

3.3 KiB
Raw Blame 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):

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:

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