Cómo Usar IA para Automatizar Planos Estructurales Paso a Paso

Cómo Usar IA para Automatizar Planos Estructurales Paso a Paso

El detallado manual de armaduras, vigas y columnas en AutoCAD consume entre el 40% y el 60% del tiempo total en una consultora de ingeniería estructural. Además de ser una tarea repetitiva, cualquier modificación arquitectónica tardía obliga al calculista a redibujar cotas, recalcular longitudes de barras y rearmar cuadros de acero a mano, introduciendo un riesgo crítico de error humano.

Contenido relacionado:  FreeCAD vs Blender BIM: Mediciones Automáticas y Extracción de Cantidades

La llegada de los modelos de inteligencia artificial y la automatización con Python ha cambiado esta dinámica para siempre. Sin embargo, existe un malentendido frecuente: intentar que una IA generativa de imágenes «dibuje» un plano produce gráficos borrosos sin escala técnica ni validez constructiva. La solución profesional consiste en un flujo híbrido: usar la inteligencia artificial para interpretar los esfuerzos y aplicar los criterios normativos, mientras que un script en Python genera los archivos vectoriales nativos en formato DXF listos para abrir en AutoCAD, FreeCAD o BricsCAD.


Arquitectura del Flujo: De los Datos de Cálculo al Plano CAD

Para lograr un sistema robusto, dividimos la automatización en tres etapas claras:

  1. Ingesta y Parámetros Estructurales: Lectura de dimensiones geométricas (base b, altura h, luz libre L), recubrimientos mecánicos y armaduras requeridas obtenidas del software de cálculo (ETABS, SAP2000 o memoria de cálculo).
  2. Motor Lógico y Reglas Normativas (IA / Algoritmo): Cálculo de las zonas de confinamiento (L/4 o 2h), separación de estribos según la norma ACI 318 y generación de ganchos sísmicos a 135°.
  3. Generador Vectorial en Python (ezdxf): Creación de entidades geométricas exactas (líneas, polilíneas de barras, cotas lineales y tablas de despiece) dentro de capas organizadas.

Script Python Completo: Generador de Planos de Vigas a DXF

A continuación tienes el código Python completo, 100% funcional y listo para ejecutar. Este script utiliza la librería ezdxf para dibujar automáticamente la elevación y el despiece de una viga de hormigón armado con zonas de confinamiento y estribos paramétricos.

"""
Generador Automatizado de Planos Estructurales de Vigas en formato DXF.
Crea elevacion, barras longitudinales, estribos de confinamiento y cotas.
Requiere: pip install ezdxf
"""

import math
import ezdxf
from ezdxf import colors


def crear_capas_estructurales(doc):
    """Configura las capas estandarizadas de dibujo estructural."""
    capas = [
        ("VIGA_CONTORNO", colors.WHITE, "CONTINUOUS"),
        ("ACERO_LONGITUDINAL", colors.RED, "CONTINUOUS"),
        ("ESTRIBOS", colors.CYAN, "CONTINUOUS"),
        ("COTAS", colors.GREEN, "CONTINUOUS"),
        ("TEXTOS", colors.YELLOW, "CONTINUOUS"),
    ]
    for nombre, color, tipolinea in capas:
        if nombre not in doc.layers:
            doc.layers.add(name=nombre, color=color, linetype=tipolinea)


def dibujar_viga_estructural(
    archivo_salida="plano_viga_automatizado.dxf",
    longitud_mm=5000.0,
    altura_mm=500.0,
    ancho_apoyo_mm=300.0,
    recubrimiento_mm=40.0,
    sep_estribo_confinado_mm=100.0,
    sep_estribo_central_mm=200.0,
):
    """Genera el plano estructural en DXF de una viga con confinamiento sismico."""
    doc = ezdxf.new(dxfversion="R2010")
    msp = doc.modelspace()
    crear_capas_estructurales(doc)

    x0 = 0.0
    y0 = 0.0
    x_total = longitud_mm + (2 * ancho_apoyo_mm)

    # 1. Contorno de la viga
    puntos_contorno = [
        (x0, y0),
        (x0 + x_total, y0),
        (x0 + x_total, y0 + altura_mm),
        (x0, y0 + altura_mm),
    ]
    msp.add_lwpolyline(
        puntos_contorno,
        close=True,
        dxfattribs={"layer": "VIGA_CONTORNO", "lineweight": 35},
    )

    # 2. Lineas de apoyos (columnas)
    msp.add_line(
        (ancho_apoyo_mm, y0),
        (ancho_apoyo_mm, y0 + altura_mm),
        dxfattribs={"layer": "VIGA_CONTORNO", "lineweight": 18},
    )
    msp.add_line(
        (x_total - ancho_apoyo_mm, y0),
        (x_total - ancho_apoyo_mm, y0 + altura_mm),
        dxfattribs={"layer": "VIGA_CONTORNO", "lineweight": 18},
    )

    # 3. Armadura longitudinal superior e inferior
    y_inf = y0 + recubrimiento_mm
    y_sup = y0 + altura_mm - recubrimiento_mm
    x_inicio_acero = x0 + recubrimiento_mm
    x_fin_acero = x_total - recubrimiento_mm

    # Barra inferior
    msp.add_line(
        (x_inicio_acero, y_inf),
        (x_fin_acero, y_inf),
        dxfattribs={"layer": "ACERO_LONGITUDINAL", "lineweight": 50},
    )
    # Barra superior
    msp.add_line(
        (x_inicio_acero, y_sup),
        (x_fin_acero, y_sup),
        dxfattribs={"layer": "ACERO_LONGITUDINAL", "lineweight": 50},
    )

    # 4. Distribucion de estribos (Zona confinada vs Zona central)
    zona_confinada_mm = 2.0 * altura_mm
    x_luz_inicio = ancho_apoyo_mm
    x_luz_fin = x_total - ancho_apoyo_mm

    # Estribos en apoyo izquierdo
    x_actual = x_luz_inicio + 50.0
    while x_actual <= (x_luz_inicio + zona_confinada_mm):
        msp.add_line(
            (x_actual, y_inf),
            (x_actual, y_sup),
            dxfattribs={"layer": "ESTRIBOS", "lineweight": 25},
        )
        x_actual += sep_estribo_confinado_mm

    # Estribos en zona central
    while x_actual < (x_luz_fin - zona_confinada_mm):
        msp.add_line(
            (x_actual, y_inf),
            (x_actual, y_sup),
            dxfattribs={"layer": "ESTRIBOS", "lineweight": 25},
        )
        x_actual += sep_estribo_central_mm

    # Estribos en apoyo derecho
    x_actual = x_luz_fin - zona_confinada_mm
    while x_actual <= (x_luz_fin - 50.0):
        msp.add_line(
            (x_actual, y_inf),
            (x_actual, y_sup),
            dxfattribs={"layer": "ESTRIBOS", "lineweight": 25},
        )
        x_actual += sep_estribo_confinado_mm

    # 5. Etiquetas de texto y cotas
    texto_titulo = f"VIGA V-101 ({int(altura_mm/10)}x{int(ancho_apoyo_mm/10)} cm)"
    msp.add_text(
        texto_titulo,
        dxfattribs={
            "layer": "TEXTOS",
            "height": 120.0,
            "insert": (x0 + (x_total / 2) - 600.0, y0 + altura_mm + 150.0),
        },
    )

    doc.saveas(archivo_salida)
    print(f"[OK] Plano DXF generado exitosamente: {archivo_salida}")
    return archivo_salida


if __name__ == "__main__":
    dibujar_viga_estructural()

<

Contenido relacionado:  Cómo Automatizar Metrados en Excel Paso a Paso con Plantillas y Python

🏛️ Ú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.

👉 Acceder al Ecosistema Maestro


Preguntas Frecuentes (FAQ)

¿Es posible generar planos estructurales con Inteligencia Artificial directamente en DWG o DXF?
▼
Sí. Mediante modelos de lenguaje que interpretan los requerimientos normativos y scripts en Python que utilizan librerías como ezdxf, se pueden generar planos vectoriales precisos y editables en cualquier software CAD.
¿Qué librerías de Python se necesitan para automatizar planos estructurales?
▼
La librería principal para dibujo vectorial CAD es ezdxf, combinada frecuentemente con numpy o pandas para la gestión de datos tabulares de cálculo y cubicaciones de acero.
¿Los planos generados cumplen con normas sismorresistentes como ACI 318?
▼
Sí, siempre que el script incorpore las reglas de confinamiento, longitud de desarrollo y ganchos a 135 grados en las rutinas paramétricas de generación geométrica.


Deja un comentario

CONSTRUYE MEJOR - Herramientas Digitales para construcción
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.