→ Cuando Dynamo no es suficiente y C# es complicarse demasiado

El Madrid Dynamo User Group publica en su canal de YouTube:

Interesante charla de Carlos Romero (Árgola Arquitectos) que se impartió en el marco del tercer evento del MDUG celebrado el pasado 30 de noviembre de 2018.

Carlos comenta las bondades de pyRevit, una librería de scripts de IronPython (la implementación de Python para .NET Framework), y cómo nos facilita el acceso a la API de Revit, escribiendo código en Python en lugar de C#, para conseguir funcionalidades que Dynamo no puede ofrecernos.

Muy interesante ver como diferentes usuarios, con diferentes necesidades, utilizan la programación para mejorar su trabajo con modelos BIM.

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).

→ Extraer mediciones de Revit con Dynamo

Luisa Santamaría escribe en Especialista 3D:

En este vídeo hablamos con Alicia Moreno de su experiencia a la hora de extraer mediciones de Revit. Alicia es arquitecto técnico e ingeniera de edificación, máster BIM y tiene experiencia con proyectos de ejecución en Revit y mediciones para proyectos de ejecución y para construcción. Además fue una de las pioneras en realizar Dynamo Like a Pro, sumando Dynamo a sus competencias técnicas.

Una entrevista/videotutorial en el que queda muy claro el potencial de herramientas como Dynamo (programación visual para Revit) para gestionar de forma eficaz la información de modelos BIM.

Os recuerdo que los integrantes de Especialista 3D, Luisa y Viero, estuvieron charlando con nosotros en el episodio #009 y episodio #010 de BIM podcast.

→ Improve Your Team Efficiency: 20 Practical Uses of Dynamo for Revit

Matthew Anderle y Ron Allen escriben en el perfil de Medium de Autodesk University:

Dynamo provides its users the ability to extend BIM by employing data and logic via a graphical algorithm editor. Because Dynamo is an open source tool, a community of users contributes to its continuous improvement. The 20 practical uses of the software described in this article will aid teams in streamlining their workflow to improve their productivity.

Se trata de un resumen de la clase que impartieron en la Autodesk University en 2016, en la que los autores ofrecen 20 ejemplos (algunos más interesantes que otros) del uso de scripts de Dynamo para mejorar la productividad a la hora de trabajar con modelos BIM en Revit.

Me quedo con tres puntos interesantes que se pueden aplicar a casi cualquier proyecto:

  • Organización del script: al igual que en programación tradicional es casi obligatorio el uso de comentarios (para revisiones posteriores del código), en Dynamo también resulta fundamental tener claro el esquema que seguiremos a la hora de organizar los diferentes nodos, ya sea mediante la forma del flujo (boceto) como mediante el uso de colores (siguiendo una estructura fija) para identificar la "tarea" que realizan los diferentes nodos.
  • Añadir parámetros de localización: existen multitud de categorías de Revit que no incluyen un parámetro (de ejemplar) que nos permita identificar fácilmente su ubicación en el proyecto; es cierto que podemos utilizar tablas anidadas, sin embargo, puede resultar interesante (sobre todo de cara a una exportación IFC) que los diferentes elementos contengan un parámetro que permita conocer la posición rápidamente. Dynamo es nuestro mejor aliado para rellenar estos parámetros de forma masiva.
  • Crear vistas de plano de planta por habitación: existen tareas repetitivas, como la creación de vistas o planos, que pueden resolverse de forma eficaz con Dynamo y un poco de imaginación; el caso de nuevas vistas de plano de planta para cada habitación, y con regiones de recorte automáticas, es un ejemplo bastante común (si lo combinamos con las plantilla de vista podremos ahorrar algunas horas de trabajo).