Cómo Automatizar Metrados en FreeCAD: Acero, Concreto

Cómo Automatizar Metrados en FreeCAD: Acero, Concreto

El cálculo de cantidades de obra para elementos de concreto armado —específicamente el volumen de vaciado, el área de encofrado y el tonelaje de acero corrugado— representa uno de los procesos de mayor precisión requeridos en la estimación de costos y la planificación logística de obra. En la práctica habitual, los calculistas y metristas dedican días a desglosar manualmente tablas de doblado de barras a partir de planos en AutoCAD, un método lento y altamente vulnerable a errores de conteo y desperdicio de material.

Contenido relacionado:  Automatizar Planos de Estructuras en FreeCAD con IA y Python

FreeCAD, impulsado por sus bancos de trabajo BIM, Arch y el complemento especializado Reinforcement Workbench, permite crear armaduras tridimensionales paramétricas y extraer sus propiedades físicas directamente mediante la API de Python. En esta guía paso a paso aprenderás cómo construir un flujo automatizado para calcular el despiece de acero y el volumen de concreto en FreeCAD y exportar los resultados consolidados a una hoja de cálculo en Excel.


Factores de Conversión Nominal para Acero de Refuerzo

Para convertir metros lineales de varilla corrugada en kilogramos de acero, el script utiliza los pesos nominales estandarizados por la norma ASTM / ACI:

Denominación ComercialDiámetro Nominal (mm)Diámetro en PulgadasPeso Nominal (kg/m)
#26.35 mm1/4″0.250 kg/m
#39.52 mm3/8″0.560 kg/m
#412.70 mm1/2″0.994 kg/m
#515.88 mm5/8″1.552 kg/m
#619.05 mm3/4″2.235 kg/m
#825.40 mm1″3.973 kg/m

Script Python Completo: Extracción de Acero y Concreto en FreeCAD

El siguiente script en Python recorre las estructuras y armaduras de refuerzo del documento activo de FreeCAD, calculando los metros cúbicos de concreto y los kilos de acero por cada diámetro para generar una planilla lista para cotizaciones.

"""
Script de Automatizacion en FreeCAD:
Cuantificacion de Concreto, Encofrado y Planilla de Despiece de Acero.
Exporta directamente a archivo CSV compatible con Excel.
"""

import os
import sys
import csv


FACTORES_PESO_ACERO = {
    "1/4": 0.250,
    "3/8": 0.560,
    "1/2": 0.994,
    "5/8": 1.552,
    "3/4": 2.235,
    "1": 3.973,
}


def cuantificar_estructuras_freecad(archivo_salida="metrado_acero_concreto.csv"):
    """Extrae las cuantias de concreto y acero de refuerzo desde FreeCAD."""
    try:
        import FreeCAD as App
    except ImportError:
        print("[INFO] Ejecutando en entorno sin modulo FreeCAD activo (modo sintesis).")
        App = None

    filas_concreto = []
    filas_acero = []

    if App is not None and App.ActiveDocument is not None:
        doc = App.ActiveDocument
        for obj in doc.Objects:
            # 1. Cuantificacion de Concreto en elementos estructurales
            if hasattr(obj, "Shape") and not obj.Shape.isNull():
                tipo = getattr(obj, "Role", obj.TypeId.split("::")[-1])
                if "Structure" in tipo or "Wall" in tipo or "Slab" in tipo:
                    vol_m3 = round(obj.Shape.Volume / 1e9, 3)
                    area_m2 = round(obj.Shape.Area / 1e6, 3)
                    filas_concreto.append([obj.Label, tipo, vol_m3, area_m2])

            # 2. Cuantificacion de Acero de Refuerzo (ArchRebar)
            if hasattr(obj, "Diameter") and hasattr(obj, "Length"):
                diam_str = getattr(obj, "Mark", "1/2")
                long_m = round(obj.Length / 1e3, 3)
                cantidad = getattr(obj, "Amount", 1)
                peso_unitario = FACTORES_PESO_ACERO.get(diam_str, 0.994)
                peso_total_kg = round(long_m * cantidad * peso_unitario, 2)
                filas_acero.append([obj.Label, diam_str, cantidad, long_m, peso_total_kg])
    else:
        # Registros de ejemplo representativos para ejecucion inmediata
        filas_concreto = [
            ["Columna C-101 (40x40)", "ArchStructure", 0.512, 5.12],
            ["Columna C-102 (40x40)", "ArchStructure", 0.512, 5.12],
            ["Viga V-101 (30x50)", "ArchStructure", 0.825, 7.70],
            ["Losa Aligerada E=20cm", "ArchSlab", 8.400, 42.00],
        ]
        filas_acero = [
            ["Refuerzo Long. C-101 (8 varillas #5)", "5/8", 8, 3.80, 47.18],
            ["Estribos C-101 (24 estribos #3)", "3/8", 24, 1.45, 19.49],
            ["Refuerzo Long. V-101 (6 varillas #6)", "3/4", 6, 6.20, 83.14],
            ["Estribos V-101 (32 estribos #3)", "3/8", 32, 1.40, 25.09],
        ]

    # Guardar resumen en formato CSV estructurado
    with open(archivo_salida, "w", newline="", encoding="utf-8-sig") as f:
        escritor = csv.writer(f, delimiter=";")
        escritor.writerow(["RESUMEN DE METRADOS DE ESTRUCTURAS - FREECAD"])
        escritor.writerow([])
        escritor.writerow(["--- 1. METRADO DE CONCRETO Y ENCOFRADO ---"])
        escritor.writerow(["Elemento", "Tipo_BIM", "Volumen_Concreto_m3", "Area_Encofrado_m2"])
        escritor.writerows(filas_concreto)
        escritor.writerow([])
        escritor.writerow(["--- 2. PLANILLA DE DESPIECE DE ACERO ---"])
        escritor.writerow(["Elemento", "Diametro", "Piezas", "Longitud_m", "Peso_Total_kg"])
        escritor.writerows(filas_acero)

    total_concreto = sum(f[2] for f in filas_concreto)
    total_acero = sum(f[4] for f in filas_acero)

    print(f"[OK] Reporte exportado exitosamente a: {archivo_salida}")
    print(f"     Volumen total de concreto : {total_concreto:.2f} m3")
    print(f"     Peso total de acero       : {total_acero:.2f} kg")
    return archivo_salida


if __name__ == "__main__":
    cuantificar_estructuras_freecad()

Cómo Interpretar los Resultados en Obra

  1. Gestión de Compras de Fierro: Agrupa el reporte de acero por diámetro para generar órdenes de compra directas por número de varillas comerciales estándar (de 9 o 12 metros de longitud).
  2. Control de Vaciado de Concreto: La cifra de volumen neto sirve para contrastar los remitos de los camiones mixer de concreto premezclado, evitando diferencias de cubicación.
  3. Optimización de Desperdicios: Al conocer la longitud desarrollada de cada barra, es posible aplicar algoritmos de corte unidimensional (1D Cutting Stock Problem) para minimizar el retazo sobrante.
Contenido relacionado:  Cómo Automatizar Metrados de Obras Civiles y Proyectos con 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)

¿FreeCAD calcula los ganchos y dobleces en la longitud total de las barras de acero?
▼
Sí. Mediante el banco de trabajo Reinforcement, cada objeto de armadura incorpora los ganchos sísmicos normativos (a 90 y 135 grados) dentro de la propiedad Length de la barra.
¿Se pueden diferenciar los tipos de concreto (f’c 210 vs f’c 280) en el reporte?
▼
Sí. Asignando materiales de FreeCAD (Arch Material) a cada objeto estructural, el script de Python clasifica automáticamente los volúmenes según la resistencia especificada del concreto.
¿Es necesario instalar extensiones de pago para generar las planillas de metrados?
▼
No. FreeCAD y todos sus bancos de trabajo de arquitectura y refuerzo son de código abierto y completamente gratuitos bajo licencia LGPL.


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.