Automatizar Planos de Estructuras en FreeCAD con IA y Python
La documentación y delineación de planos estructurales en ingeniería civil y edificación representa históricamente una de las fases con mayor consumo de horas-hombre y mayor susceptibilidad a desalineaciones respecto a las memorias de cálculo. En los flujos convencionales, los ingenieros deben trasladar manualmente las dimensiones de vigas, columnas y distribuciones de armaduras hacia programas de CAD bidimensionales.
La combinación de FreeCAD 1.0 —el modelador paramétrico de código abierto más potente de la actualidad— junto con modelos de lenguaje de Inteligencia Artificial (LLMs) y su robusta API de Python, permite transformar este flujo tedioso en un proceso automatizado. Mediante scripts especializados y el módulo TechDraw, es posible convertir modelos 3D y especificaciones de armado en láminas ejecutivas de obra completas en cuestión de segundos, sin depender de costosas licencias comerciales.
Flujo de Trabajo: De Modelado Estructural a Lámina TechDraw
El proceso de automatización estructural con Inteligencia Artificial sigue una arquitectura desacoplada y predecible:
- Definición Geométrica y Estructural: Los elementos portantes (pórticos, zapatas, losas y refuerzos de acero) se instancian en FreeCAD utilizando los módulos
BIM,Archo mediante geometrías paramétricas dePart. - Generación Asistida por IA: Mediante un prompt estructurado (Prompt Engineering), se le suministran a la IA los esquemas de clases de FreeCAD para que formule el script en Python responsable de proyectar la escena.
- Compilación en TechDraw: El script crea una página técnica (formato A1 o A2), genera proyecciones ortogonales (
DrawViewPart), crea secciones de corte transversales (DrawViewSection) y anota cotas automáticas basadas en vértices paramétricos.
| Etapa del Proceso | Flujo Tradicional CAD | Flujo Automatizado FreeCAD + IA |
|---|---|---|
| Creación de Vistas 2D | Delineación manual línea por línea (3-4 horas) | Proyección asociativa instantánea (15 segundos) |
| Actualización por Cambios | Redibujar cotas y vistas manualmente | Recálculo paramétrico automático al regenerar página |
| Despiece de Armaduras | Conteo manual de barras y estribos | Extracción directa de parámetros de la armadura 3D |
| Costo en Licencias | 1,800 – 3,500 USD anuales por usuario | $0 USD (100% Software Libre y Open Source) |
Script Python: Generador Automático de Láminas Estructurales en FreeCAD
El siguiente script en Python es compatible con la API de FreeCAD (ejecutable desde la consola integrada de macros o en modo Headless). Automatiza la creación de una página técnica en TechDraw, inserta un membrete normativo y proyecta las vistas y cortes de los elementos estructurales existentes:
"""
Generador Automático de Láminas y Planos Estructurales para FreeCAD.
Crea páginas TechDraw, proyecciones ortogonales y cotas de vigas/columnas.
Ejecutar dentro de la consola de FreeCAD o mediante macro (.FCMacro).
"""
import math
import os
import sys
def crear_lamina_estructural(nombre_doc=None, escala=0.02):
"""Genera una lamina TechDraw con vistas ortogonales y membrete."""
try:
import FreeCAD as App
import FreeCADGui as Gui
import TechDraw
except ImportError:
print("[MODO SIMULACION] FreeCAD no detectado en el entorno local.")
print("[INFO] Este script esta diseñado para ejecutarse dentro de FreeCAD.")
return False
doc = App.ActiveDocument if nombre_doc is None else App.getDocument(nombre_doc)
if not doc:
doc = App.newDocument("Proyecto_Estructural_IA")
print("[OK] Nuevo documento estructural creado.")
# 1. Crear la Pagina TechDraw
pagina = doc.addObject("TechDraw::DrawPage", "Plano_Estructural_01")
plantilla = doc.addObject("TechDraw::DrawSVGTemplate", "Plantilla_A1")
# Asignar ruta de plantilla SVG estandar de FreeCAD
ruta_recursos = App.getResourceDir()
ruta_svg = os.path.join(ruta_recursos, "Mod", "TechDraw", "Templates", "A1_Landscape_ISO7200TD.svg")
if os.path.exists(ruta_svg):
plantilla.Template = ruta_svg
pagina.Template = plantilla
# 2. Identificar elementos estructurales en el modelo
elementos = [obj for obj in doc.Objects if hasattr(obj, "Shape") and obj != pagina and obj != plantilla]
if not elementos:
# Crear viga estructural de ejemplo si la escena esta vacia
import Part
caja = doc.addObject("Part::Box", "Viga_Concreto_40x25")
caja.Length = 4000.0 # 4 metros
caja.Width = 250.0 # 25 cm
caja.Height = 400.0 # 40 cm
doc.recompute()
elementos = [caja]
print("[OK] Viga parametrica de muestra creada exitosamente.")
# 3. Insertar Vista Superior (Planta)
vista_planta = doc.addObject("TechDraw::DrawViewPart", "Vista_Planta")
vista_planta.Source = elementos
vista_planta.Direction = (0.0, 0.0, 1.0)
vista_planta.Scale = escala
vista_planta.X = 250.0
vista_planta.Y = 400.0
pagina.addView(vista_planta)
# 4. Insertar Vista Frontal (Elevacion Longitud)
vista_elevacion = doc.addObject("TechDraw::DrawViewPart", "Vista_Elevacion")
vista_elevacion.Source = elementos
vista_elevacion.Direction = (0.0, -1.0, 0.0)
vista_elevacion.Scale = escala
vista_elevacion.X = 250.0
vista_elevacion.Y = 220.0
pagina.addView(vista_elevacion)
# 5. Insertar Corte Transversal (Seccion)
corte_seccion = doc.addObject("TechDraw::DrawViewSection", "Corte_Transversal")
corte_seccion.Source = elementos
corte_seccion.BaseView = vista_elevacion
corte_seccion.SectionNormal = (1.0, 0.0, 0.0)
corte_seccion.SectionOrigin = (2000.0, 0.0, 0.0)
corte_seccion.Scale = escala * 2.0 # Escala de detalle
corte_seccion.X = 550.0
corte_seccion.Y = 220.0
pagina.addView(corte_seccion)
doc.recompute()
print("[OK] Lamina estructural generada exitosamente con planta, elevacion y corte.")
return True
if __name__ == "__main__":
crear_lamina_estructural()
Prompt Engineering: Cómo Instruir a la IA para Modelar Estructuras
Para obtener código Python confiable y sin alucinaciones de métodos inexistentes al trabajar con la API de FreeCAD, utiliza el siguiente System Prompt estructurado:
Eres un ingeniero estructural senior y desarrollador experto en la API de Python de FreeCAD (módulos Part, Draft, Arch, Reinforcement y TechDraw).
Tu objetivo es escribir scripts limpios y ejecutables que:
1. Siempre verifiquen si existe un ActiveDocument antes de crear uno nuevo.
2. Utilicen objetos estándar como 'TechDraw::DrawViewPart' y 'TechDraw::DrawViewSection'.
3. Calculen posiciones relativas para vistas evitando superposición en láminas A1 (841 x 594 mm).
4. No importen librerías externas fuera de la instalación nativa de FreeCAD.
5. Incluyan manejo de excepciones para geometrías con aristas complejas.
🏛️ Únete al Ecosistema Maestro BIM
Accede a mi repositorio personal de ingeniería OpenBIM. Obtén de inmediato todos los manuales y archivos base (.FCStd y Blender) de Vivienda, Estructuras, Sketcher y Python. Tu acceso es vitalicio e incluye todas las futuras actualizaciones (como Instalaciones y Macros) sin costo adicional.
Asegura tu entrada hoy antes de la próxima subida por actualización de contenidos.
Preguntas Frecuentes (FAQ)
¿FreeCAD puede generar planos con nivel de detalle para construcción (LOD 350+)?
▼
¿Qué modelos de IA son los más recomendados para escribir scripts de FreeCAD?
▼
¿Se pueden exportar los planos generados a formato DWG o DXF para clientes?
▼