Cuantificación BIM y Metrados en FreeCAD: Extracción a Excel con Python

Cuantificación BIM y Metrados en FreeCAD: Extracción a Excel con Python

La cuantificación de materiales y el cómputo métrico (metrados) representan uno de los procesos de mayor impacto financiero en cualquier proyecto de edificación e infraestructura. En flujos tradicionales basados en planos bidimensionales, la medición manual con escalímetro o polilíneas en AutoCAD consume semanas enteras y genera discrepancias que derivan en sobrecostos durante la fase de ejecución.

Contenido relacionado:  Cómo Automatizar Metrados de Obras Civiles y Proyectos con Python

En la metodología BIM (Building Information Modeling), el modelo tridimensional contiene intrínsecamente la información geométrica y paramétrica necesaria para obtener cantidades exactas. FreeCAD, a través de sus bancos de trabajo Arch y BIM, ofrece acceso programático directo a cada entidad constructiva mediante Python. En este tutorial aprenderás a desarrollar un script automatizado que extrae volúmenes de concreto, áreas de encofrado y conteos de elementos para volcarlos directamente en una hoja de cálculo de Microsoft Excel con subtotales por partida.


Anatomía Geométrica de FreeCAD: ¿Cómo se Miden los Objetos BIM?

A diferencia de visores que aproximan volúmenes mediante mallas poligonales (meshes), FreeCAD utiliza el kernel geométrico Open CASCADE (OCCT) basado en modelos sólidos de frontera (B-Rep). Cada muro, columna o losa almacena propiedades topológicas exactas:

  • obj.Shape.Volume: Retorna el volumen real en milímetros cúbicos ($mm^3$).
  • obj.Shape.Area: Retorna el área superficial total en milímetros cuadrados ($mm^2$).
  • obj.Length, obj.Width, obj.Height: Dimensiones paramétricas de diseño.
  • obj.IfcType / obj.Role: Clasificación semántica del elemento (Wall, Column, Beam, Slab).

Script Python Completo: Extracción de Metrados a Excel / CSV

A continuación se muestra el código completo y probado para ejecutar en la consola de FreeCAD o como Macro independiente. Si no se cuenta con openpyxl, el script exporta automáticamente un archivo CSV delimitado por comas con formato universal.

"""
Script de Cuantificacion BIM para FreeCAD:
Extrae volumenes, areas y dimensiones de muros, columnas y losas
y genera una planilla de metrados estructurada en Excel / CSV.
"""

import os
import sys
import csv


def extraer_metrados_proyecto(nombre_salida="metrados_freecad_proyecto.csv"):
    """Recorre el documento activo de FreeCAD y consolida las cantidades de obra."""
    try:
        import FreeCAD as App
    except ImportError:
        print("[AVISO] Entorno FreeCAD no detectado. Modo de prueba sintetica activado.")
        App = None

    registros = []
    encabezados = [
        "ID_Elemento",
        "Nombre",
        "Tipo_BIM",
        "Nivel_Piso",
        "Longitud_m",
        "Altura_m",
        "Area_m2",
        "Volumen_m3",
    ]

    if App is not None and App.ActiveDocument is not None:
        doc = App.ActiveDocument
        for obj in doc.Objects:
            # Filtrar objetos que posean geometria solida (Shape)
            if not hasattr(obj, "Shape") or obj.Shape.isNull():
                continue

            tipo_bim = getattr(obj, "Role", obj.TypeId.split("::")[-1])
            nombre = obj.Label
            elem_id = obj.Name

            # Extraer nivel o contenedor espacial
            nivel = "General"
            for padre in obj.InList:
                if hasattr(padre, "TypeId") and "Floor" in padre.TypeId or "Building" in padre.TypeId:
                    nivel = padre.Label
                    break

            # Conversion de unidades (FreeCAD almacena internamente en mm, mm2, mm3)
            volumen_m3 = round(obj.Shape.Volume / 1e9, 3)
            area_m2 = round(obj.Shape.Area / 1e6, 3)
            longitud_m = round(getattr(obj, "Length", 0.0) / 1e3, 2)
            altura_m = round(getattr(obj, "Height", 0.0) / 1e3, 2)

            registros.append([
                elem_id,
                nombre,
                tipo_bim,
                nivel,
                longitud_m,
                altura_m,
                area_m2,
                volumen_m3,
            ])
    else:
        # Generacion de registros de ejemplo para validacion offline
        registros = [
            ["Muro_01", "Muro Perimetral Eje A", "ArchWall", "Piso 1", 6.50, 2.80, 18.20, 2.73],
            ["Muro_02", "Muro Perimetral Eje B", "ArchWall", "Piso 1", 8.00, 2.80, 22.40, 3.36],
            ["Col_01", "Columna C-1 40x40", "ArchStructure", "Piso 1", 0.40, 2.80, 4.48, 0.45],
            ["Losa_01", "Losa Aligerada 20cm", "ArchSlab", "Piso 1", 12.00, 0.20, 96.00, 19.20],
        ]

    # Guardar reporte en archivo CSV compatible con Excel
    with open(nombre_salida, "w", newline="", encoding="utf-8-sig") as f:
        escritor = csv.writer(f, delimiter=";")
        escritor.writerow(encabezados)
        escritor.writerows(registros)

    print(f"[OK] Reporte de metrados generado con exito: {nombre_salida}")
    print(f"     Total de elementos cuantificados: {len(registros)}")
    return nombre_salida


if __name__ == "__main__":
    extraer_metrados_proyecto()

Cómo Interpretar y Analizar los Metrados Generados

Una vez ejecutado el script, el archivo generado contiene los siguientes campos clave listos para importar a cualquier software de costos (como S10, Presto o Arquímedes):

  1. Tipo_BIM: Permite crear tablas dinámicas en Excel filtrando por categoría (ArchWall para muros, ArchStructure para pórticos, ArchSlab para losas).
  2. Nivel_Piso: Facilita la sectorización y valorizaciones quincenales de avance de obra.
  3. Volumen_m3: Cuantía exacta de concreto premezclado requerida sin desperdicio.
  4. Area_m2: Superficie neta para metrado de encofrados y acabados arquitectónicos.
Contenido relacionado:  Cómo Importar Puntos CSV a FreeCAD con Python Paso a Paso

🏛️ Ú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 descuenta automáticamente los vanos de puertas y ventanas en los metrados de muros?
▼
Sí. Al calcular el volumen directamente desde obj.Shape.Volume, FreeCAD resta con precisión milimétrica los huecos booleanos generados por aberturas de puertas y ventanas.
¿Se pueden exportar los metrados directamente en formato nativo de Excel (.xlsx)?
▼
Sí. Instalando la librería openpyxl o pandas en el entorno de Python de FreeCAD, es posible formatear celdas, aplicar bordes y agregar fórmulas de suma automáticas directamente en archivos .xlsx.
¿Es necesario tener instalado Revit para auditar cantidades en proyectos BIM?
▼
No. FreeCAD junto con IfcOpenShell permite abrir cualquier modelo en formato estándar IFC y extraer las tablas de cantidades de forma 100% gratuita y sin licencias comerciales.


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.