Añadir información de habitación a elementos de mobiliario usando Revit y Dynamo

Todo modelo BIM debe contener información relativa a los diferentes espacios, habitaciones o locales que existen en el proyecto; una información que solemos utilizar tanto para la identificación y rotuación de espacios en la documentación del proyecto como para obtener mediciones de los mismos (superficies, volúmenes, etc.).

En este artículo propongo ir un paso más allá en el uso de la información asociada a las habitaciones del modelo: ¿no sería interesante poder añadir la información de ubicación a los diferentes elementos de mobiliaro del proyecto? Para ello vamos a recurrir al uso de Dynamo para Revit.

Planteamiento del Script

Antes de empezar a colocar nodos y código, resulta interesante detenernos unos minutos a reflexionar sobre la estructura que tendrá nuestro script:

  1. Obtendremos todos los elementos de mobiliario y habitaciones de nuestro modelo para poder trabajar con ellos, ya sea extrayendo o escribiendo información de sus parámetros .
  2. Debemos encontrar un método para identificar si un elemento de mobiliaro está contenido en una determinada habitación del proyecto, ¿qué tal el punto de inserción de la familia?
  3. Una vez identificados qué muebles están contenidos en las diferentes habitaciones, simplemente escribiremos dicha información en uno de los parámetros de la familia de mobiliaro ¿escribimos el valor del parámetro "Nombre" (de las habitaciones) en el parámetro "Comentarios" (de los muebles)?

Obtención de elementos

Dependiendo de nuestras necesidades, podremos optar por "capturar" todos los elementos de mobiliaro y habitaciones del modelo o simplemente limitarnos a la vista activa o selección manual del usuario.

En este ejemplo, vamos a suponer que vamos a trabajar con todos los elementos de mobiliaro y habitaciones del modelo; obtener estos elementos resulta muy sencillo utilizando el nodo "All Elements of Category":

habitaciones_mobiliario_Dynamo_01.png

Ubicación del mobiliario

Para determinar la ubicación de cualquier elemento de Revit podemos recurrir al nodo "Element.GetLocation" que nos devolverá las coordenadas (X, Y, Z) del punto de inserción de la familia.

Con esta lista de puntos, podemos utilizar el nodo "Room.IsInsideRoom" para comprobar si un determinado punto está contenido dentro de una habitación, devolviendo un valor True/False. Sólo debemos tener la precaución de elegir un enlace/lacing del tipo "Producto vectorial" ("Cross Product") de forma que Dynamo compare todos los elementos de la lista de puntos con todos los elementos de la lista de habitaciones.

Obtendremos tantas listas anidadas como habitaciones existan en el modelo, conteniendo cada una de ellas tantos elementos booleanos como elementos de mobiliario existan en el proyecto.

habitaciones_mobiliario_Dynamo_02.png

A continuación, haremos uso de estas listas de booleanos (a modo de "máscaras") para filtrar la lista inicial de mobiliario utilizando el nodo "List.FilterByBoolMask". En este caso debemos tener la precaución de acceder a la lista de booleanos a partir del nivel @L2, de este modo estaremos comparando listas con la misma estructura de elementos.

Si revisamos el nodo de salida "in", veremos que contiene tantas sublistas como habitaciones existen en el modelo y, en cada una de ellas, los elementos de mobiliario contenidos en dichas habitaciones.

habitaciones_mobiliario_Dynamo_03.png

Escritura de datos

Para escribir la información de la habitación en el parámetro "Comentarios" de cada elemento de mobiliario debemos obtener, en primer lugar, los nombres de las habitaciones con el nodo "Element.GetParameterValueByName".

habitaciones_mobiliario_Dynamo_04.png

Finalmente, utilizando el nodo "Element.SetParameterByName" escribiremos el nombre de habitación que corresponda a cada elemento de mobiliario en su parámetro de sistema "Comentarios". Bastará con conectar las salidas adecuados a cada una de las entradas del nodo:

  • element: salida "in" del nodo "List.FilterByBoolMask".
  • parameterName: un string con el nombre exacto del parámetro.
  • value: la salida del nodo "Element.GetParameterValueByName".
habitaciones_mobiliario_Dynamo_05.png

Comentarios finales

Creo que este es un script muy útil y, a la vez, muy didáctico porque nos permite trabajar con listas teniendo en cuenta los niveles y el encaje/lacing; además, nos aporta una solución sencilla para obtener la habitación en la que se ubica un elemento de mobiliario, que puede ser de utilidad a la hora de desarrollar nodos más complejos.

Dejo una captura general del script completo de Dynamo (pulsar para ampliar) y, a continuación, un enlace para su descarga (para Dynamo 1.3.x).