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.
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 Comercial | Diámetro Nominal (mm) | Diámetro en Pulgadas | Peso Nominal (kg/m) |
|---|---|---|---|
| #2 | 6.35 mm | 1/4″ | 0.250 kg/m |
| #3 | 9.52 mm | 3/8″ | 0.560 kg/m |
| #4 | 12.70 mm | 1/2″ | 0.994 kg/m |
| #5 | 15.88 mm | 5/8″ | 1.552 kg/m |
| #6 | 19.05 mm | 3/4″ | 2.235 kg/m |
| #8 | 25.40 mm | 1″ | 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
- 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).
- 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.
- 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.
🏛️ Ú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 calcula los ganchos y dobleces en la longitud total de las barras de acero?
▼
¿Se pueden diferenciar los tipos de concreto (f’c 210 vs f’c 280) en el reporte?
▼
¿Es necesario instalar extensiones de pago para generar las planillas de metrados?
▼