Medición de acabados de paramentos verticales por habitación usando Dynamo para Revit

Medición de acabados de paramentos verticales por habitación usando Dynamo para Revit

Introducción
Contamos aquí un ejemplo de uso de Dynamo con Revit para apoyar las tareas de proyecto en árgola arquitectos. Nos vamos a centrar en una definición en la que hemos trabajado para estimar mediciones de acabados en un proyecto hospitalario complejo con miles de habitaciones.

Los procedimientos de los que hablamos son fundamentalmente de proceso de datos. De forma genérica le estamos pidiendo unos datos al modelo, luego los procesamos y hacemos cálculos con ellos y por último escribimos el resultado de nuevo en el modelo en unos parámetros creados al efecto.
Dynamo
Dynamo es una aplicación de programación visual que permite operar sobre un modelo de Revit de manera programática. Se ha convertido en una herramienta fundamental para el estudio a la hora de atacar tareas repetitivas o procesos sobre conjuntos de datos extensos. Animamos a los lectores a descubrirlo, descargarlo y jugar con él en su web oficial http://dynamobim.org/.
El problema
Se trata de estimar la superficie de acabados interiores habitación por habitación en un modelo complejo de miles de habitaciones. La dificultad estriba en que pinturas o acabados superficiales no están modelados y – por tanto – hay que estimarlos a partir de la geometría de la habitación.
A priori una habitación puede descomponerse en áreas horizontales (techos y suelos) y áreas verticales: todos los muros o paramentos verticales que recibirán acabado de algún tipo (pinturas, vinilos, etc.)
El procedimiento que seguimos se resume en hacer las siguientes operaciones en cada habitación del modelo:

  • Deducir una altura media de la habitación (calculada como Volumen / Area)
  • El acabado de techos y suelos para este nivel de definición del modelo coincide con el área de la habitación.
  • El área de acabados verticales se expresará como perímetro neto x altura media. Por tano del perímetro tenemos que deducir:
    • Líneas separadoras de habitaciones.
    • Mamparas y otros elementos que lleven los acabados integrados.
    • Área de puertas y ventanas.

Área de puertas y ventanas
En el proceso de cálculo de las áreas de puertas y ventanas para las deducciones en las superficies de acabados encontramos con la primera dificultad al intentar usar el parámetro interno de AREA que tienen todos los elementos de las categorías puertas y ventanas. Dicha área no se corresponde con el área de hueco abierto, sino que es un cálculo que – en palabras de Peter pjohan13, ver [1]– es la suma de las áreas en planta, alzado y sección del elemento. En resumen: inútil para nuestros propósitos.
Para huecos rectangulares, la inmensa mayoría en un proyecto habitual, el área podría calcularse entonces como Ancho x Alto. Aquí nos encontramos con que a veces dichos parámetros son por tipo, a veces por instancia (y entonces suelen ser A y B) y – lo peor – a veces no se usan y se usan otros (Rough Opening o un parámetro propio del autor de la familia). Total que hay que tener en cuenta muchos casos particulares y la definición se complica en exceso:

Enter IFCUTils
Como hemos dicho, los huecos que no sean rectangulares se convierten en un problema. Por ejemplo, ventanas con formas arbitrarias como las de la izquierda en el ejemplo:

Y sin meternos en formas arbitrarias, una simple ventana en L también reportaría un área incorrecta…
Pues bien, tirando del hilo abierto sobre IFCUtils en el blog de Jeremy Tamnik antes citado y gracias – de nuevo – a la ayuda en foros de Peter Johan [2] pudimos programar un nodo de Dynamo en Python que calcula correctamente las áreas de puertas y ventanas usando la clase ExporterIFCUtils de la API de Revit.

Este nodo funciona a partir de una lista de elementos (puertas o ventanas) y devuelve la familia a la que pertenece el objeto, el área que recorta en el muro y su muro anfitrión.

El código del nodo es:

import clr
clr.AddReference('RevitAPI') 
clr.AddReference('RevitAPIUI') 
clr.AddReference('REVITAPIIFC')
import Autodesk
from Autodesk.Revit.DB import * 
from Autodesk.Revit.DB.IFC import *
I = Autodesk.Revit.DB.IFC
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
import math
#uidoc = DocumentManager.Instance.CurrentUIApplication
doc = DocumentManager.Instance.CurrentDBDocument
#app = uidoc.Application
# Entradas
perforadores = UnwrapElement(IN[0])
muros = []
# El código
for e in perforadores:
 muros.append(e.Host)
areas = []
for perforador,muro in zip(perforadores,muros):
 orient = muro.Orientation
 try:
 bounding, orient = I.ExporterIFCUtils.GetInstanceCutoutFromWall(doc, muro, perforador,)
 loops = []
 loops.Add(bounding)
 # Convertimos a SI. Revit trabaja internamente en sistema imperial
 area = 0.092903 * I.ExporterIFCUtils.ComputeAreaOfCurveLoops(loops)
 areas.append(round(area, 2)) 
 except:
 pass
# Asignamos la salida a una Tupple.
OUT = (perforadores,areas,muros)

 

Daños colaterales o efectos secundarios / Limitaciones
El procedimiento de modelado debe ajustarse en función de los entregables o datos que queramos derivar de él, lo que en este caso implica:

  • Los separadores de habitaciones deben modelarse por segmentos coincidentes con los límites de la habitación, de manera que podamos deducir correctamente su área. Si se modelan “corridos” la deducción será errónea ya que la definición tomaría la longitud completa del separador como base para el cálculo.
  • El procedimiento de cálculo actual es numérico, no geométrico, por lo que aún no tenemos determinado un procedimiento para deducir correctamente por habitación las áreas de huecos que se solapan con varias habitaciones. Evidentemente se pueden deducir globalmente al final pero estamos estudiando un procedimiento geométrico – también con Dynamo – para poder lidiar con estas cuestiones. Cuando sea funcional simplificará el modelado porque permitirá también modelar no sólo huecos sino separadores de habitación corridos, etc.
  • No puede calcular el área si el hueco se abre mediante una operación de sólidos usando vacíos (normalmente sólo usamos vacíos para abrir huecos parciales, por ejemplo cajas de persiana). Como en una familia sólo se puede usar vacíos o aperturas, en el caso de que usemos vacíos el nodo no devolverá área alguna.

Estilo
Como las definiciones de Dynamo no son tan intuitivas como la interfaz nativa de Revit, parece conveniente organizarlas con claridad y hacer explícito qué hay que tocar y dónde para que sean utilizables por el mayor número de usuarios del estudio.
Para la organización general de la definición nos hemos basado en el manual de estilo de Dynamo [3] propuesto por White Arkitekter.
La práctica general es colocar las entradas de datos y controles que deba manipular el usuario en la parte izquierda del lienzo de Dynamo y la salida de datos a Revit en la parte derecha.

Iván Pajares – BIM Manager en árgola arquitectos

[1] http://thebuildingcoder.typepad.com/blog/2015/03/ifcexportutils-methods-determine-door-and-window-area.html

[2] http://forums.autodesk.com/t5/revit-api/door-window-areas/td-p/5535565/page/2

[3] http://dynamobim.org/dynamo-graphic-standards-at-white-arkitekter-ab/


2 years, 3 months ago Comentarios desactivados