Ya se puede descargar Dynamo 2.0, una nueva versión de este programa que trae una serie de novedades que analizamos en este artículo

Compatibilidad

Compatibilidad con versiones anteriores y paquetes:

Empezamos con malas noticias: Igual que ocurre con las distintas versiones de Revit, los scripts guardados con Dynamo 2.X no se podrán abrir con Dynamo 1.x. Las buenas noticias son que, a diferencia de lo que ocurría con Dynamo 1.3, ahora podremos disponer de Dynamo 2.x simultáneamente con una versión 1.x. En cada cada sesión de Revit elegiremos qué versión de Dynamo queremos abrir.

Cuando abrimos y guardamos con Dynamo 2.0 un script creado en una versión anterior dejará de funcionar en la versión original. Para evitar problemas, en todo caso, se guardará automáticamente un archivo con el formato original en la carpeta de backup (por defecto C:\Users\usuario\AppDa[a\Roaming\Dynamo\Dynamo Revit\backup). El nombre del archivo de seguridad  será [nombre original]_XML.dyn.

Con la nueva versión sí se pueden abrir scripts creados con versiones anteriores. Sin embargo, es posible que algunos nodos personalizados den problemas en función de cómo hayan sido creados, lo que podrá originar los consiguientes errores.

Compatibilidad con versiones de Revit

Dynamo 2.0 es compatible con Revit 2017, 2018 y 2019. Como decíamos antes, afortunadamente ahora es posible instalar en paralelo Dynamo 2.0 y Dynamo 1.x. De este modo, si utilizamos una de estas versiones de Revit a la vez que versiones anteriores, podremos abrir en cada caso la versión de Dynamo compatible.

Conclusión sobre la compatibilidad

Los desarrolladores de Dynamo han tomado hace un tiempo la decisión de que cada versión sea compatible con 3 versiones de Revit. Esta limitación puede ser un inconveniente ya que no es extraño necesitar versiones más alejadas en el tiempo.

La posibilidad de instalar simultáneamente 2 versiones de Dynamo mitigará en cierta medida  este inconveniente pero la imposibilidad de abrir scripts de la nueva versión con versiones anteriores impedirá que utilicemos scripts creados con Dynamo 2.0 en modelos de Revit 2015 o Revit 2016.

El Interfaz

La biblioteca de nodos presenta un aspecto nuevo y más intuitivo. Las categorías se reorganizan y desaparecen algunas poco claras como Core o BuiltIn. Las nuevas categorías son muy claras y lógicas y las subcategorías también tienen bastante sentido. En general podemos decir que en este aspecto se sale ganando claramente.

La otra diferencia en cuanto a la organización de la biblioteca es que ahora todos los nodos personalizados y paquetes aparecerán forzosamente en una sección Add-Ons, debajo de la biblioteca de nodos “de serie”. Puede haber distintas opiniones sobre si esto supone una mejora o una limitación pero en nuestra opinión aclarará cuándo utilizamos nodos de serie y cuándo personalizados lo que puede ayudarnos a evitar alguna confusión.

 

Funcionamiento de las listas

Encaje AUTO

Además de los tradicionales más corto, más largo y producto vectorial aparece una nueva opción AUTO. En realidad este encaje AUTO que se establece por defecto es similar al “Más corto” de las versiones anteriores. El que se modifica es por tanto este encaje “Más corto” que ahora resulta más estricto cuando un nodo recibe un elemento individual y una lista.  Vemos en la siguiente imagen la diferencia (pincha para ampliar):

 

Combinación de listas con elementos individuales

Con el encaje establecido como “Producto vectorial”, cuando coincidían en un nodo una lista y un elemento individual, el elemento aislado se trataba como una lista, dando lugar a estructuras complicadas y de muchos niveles. Con la nueva versión se tiene en cuenta si se trata de un elemento o una lista, simplificando el resultado. Lo vemos en la siguiente imagen (pincha para ampliar):

Novedades en el editor de Python

Se introducen varias novedades en la consola Python que nos facilitarán el trabajo cuando queramos trabajar con este tipo de nodos:

  • Podremos abrir a la vez varias ventanas de edición de Python, lo que nos facilitará en gran medida la tarea de comparar o copiar líneas de código entre ventanas distintas.
  • Se ha añadido un botón de Ejecutar en la ventana de Python, lo que facilitará que probemos el resultado de las modificaciones que hagamos en el código sin necesidad de salir de la ventana y sin guardar.
  • El título de la ventana de edición de Python es el mismo que el del nodo y no “Editar secuencia de comandos de Python…” como era hasta ahora.
  • Se ha añadido la posibilidad de guardar una plantilla de Python. Al introducir un nodo de edición de Python el programa buscara un archivo py en la ruta Usuario/appdata/Roaming/Dynamo/DynamoRevit/2.0/ PythonTemplate.py. Si existe, el nodo incluirá por defecto el código que hayamos guardado. Teniendo en cuenta que borrar es más fácil que teclear, puede resultar interesante tener una plantilla que incluya varías librerías o elementos de entrada IN[x] para evitar la monótona tarea de introducirlas una y otra vez.

Novedades en el lenguaje DesignScript

DesignScript es el lenguaje nativo de Dynamo y el que utilizamos en los nodos Code Block. Se introducen las siguientes novedades:

  • Se utilizarán corchetes para crear listas en vez de llaves. [elem1,elem2, elem3] en vez de {elem1,elem2, elem3} como se venía haciendo hasta ahora. Las llaves se reservarán ahora para los diccionarios (ver apartado posterior).
  • Para señalar el nivel de una lista sobre el que intervenimos utilizaremos lista@L2 en vez de lista@-2 como hasta ahora.
  • No se necesitará = para asignar el valor de return en las funciones. De este modo, se escribirá return x en vez de return = x
  • No se podrá modificar el valor de una variable dentro de un mismo bloque de código. Si definimos una variable x con un valor, este valor permanecerá inmutable en todo el bloque.

Nodos nuevos, actualizados y obsoletos

Los nodos son la base de Dynamo de modo que, como no podía ser de otra manera aparecen nuevos nodos, otros se actualizan y otros se eliminan

Nuevos nodos

Se añaden entre otros los siguientes nodos:

  • Color Palette: Ahora será mucho más fácil seleccionar un color gracias a este nodo.
  • AppendText: Añade texto al final de un archivo de texto.
Nodos que se modifican o actualizan
  • ImportExcel: Similar al anterior Excel.ReadFromFile añade un puerto de entrada para decidir si queremos que se abra el archivo o no.
  • GetDirectory Contents : Ahora permite definir si queremos acceder a las subcarpetas o no.
  • El nodo correspondiente al módulo o resto (%) modifica su comportamiento con números negativos para actuar como hace en Python o Excel (y a diferencia de otros lenguajes de programación como C++). Puedes ver la diferencia en la siguiente imagen (pincha para ampliar).
  • Algunos nodos han visto modificado su comportamiento en relación a los datos de entrada. Anteriormente, algunos nodos aceptaban datos de entrada de tipo distinto al requerido. En la nueva versión deberemos ser más precisos en este aspecto.
Nodos que desaparecen

En general, los nodos que desaparecen no suponen una pérdida de funcionalidad. Se eliminan para evitar nodos redundantes o duplicados.

  • En los casos en los que había dos nodos con el mismo nombre pero uno aplicado a elementos individuales y otro a listas (aunque también a elementos individuales), desaparece el que valía solamente para elementos individuales. Un ejemplo de esto sería el nodo SplitByParameter
  • Otros nodos que se eliminan tienen distinto nombre pero la misma función. En vez de List.Flatten y Flatten o List.Count y Count quedarán únicamente List.Flatten y List.Count

Diccionario (Dictionary)

Ésta probablemente sea la novedad más interesante de esta versión. Aunque ya anteriormente disponíamos de esta función gracias a nodos personalizados de paquetes como Lunchbox o Springs, ahora entran de lleno en el programa con un apartado propio en la biblioteca y dotándole de una categoría a la altura de las listas (y así aparecerá en las burbujas de visualización o nodos Watch).

¿Qué es un diccionario?

Un diccionario es una estructura clave-valor (key-value) en la que a cada clave (Key) le corresponde un valor (Value). De este modo, podremos asociar una lista de claves a una lista de valores para posteriormente, a partir de una lista A con valores que se corresponderán con las claves obtener una lista B de valores asociados. En Dynamo 2.0 los valores Clave deben ser de tipo String. (esto no supone un problema ya que con el nodo String.FromObject podemos convertir cualquier tipo de dato en String)

Ventajas de los diccionarios

Aunque no estamos acostumbrados a trabajar con diccionarios, además de su utilidad evidente, con ellos será más sencillo buscar elementos dentro de listas que de la forma que se hacía habitualmente en función del número de índice (IndexOf / GetItemAtIndex). Habrá que modificar los hábitos y acostumbrarse a utilizarlos pero todo indica que bien empleados van a permitir simplificar y reducir el número de nodos de nuestros scripts.

Puede ser interesante, por ejemplo, utilizarlo en combinación con otros nodos como GroupByKey para obtener una clasificación mucho más clara e intuitiva que una lista clasificada por índices y así facilitar el posterior desarrollo del script.

Dictionarios en DesignScript

Si queremos crear un diccionario mediante Code Block utilizaremos la estructura {clave1:valor1  ,clave2:valor2…}. Para obtener un valor asociado a una clave de un diccionario usaremos diccionario [clave]

Lo que se pierde o desaparece

Se pierden algunas funcionalidades de las versiones anteriores. En principio no debería afectar gravemente a nuestro trabajo pero si estábamos acostumbrados a usarlas seguramente lamentaremos su pérdida.

  • Valores predefinidos (presets): Esta opción desaparece. En principio se debe a motivos tecnológicos por lo que es previsible que vuelva en próximas actualizaciones.
  • Vista preliminar ascendente: Desaparece la opción de modo que el nodo Watch-3D mostrará únicamente la geometría a la que corresponde el nodo al que lo conectemos.
  • El archivo no guardará las burbujas de visualización que hayamos bloqueado de modo que al abrirlo de nuevo deberemos desplegarlas otra vez si las queremos fijar. Buena ocasión para acostumbrarse a usar nodos Watch.
  • No se pueden arrastrar y soltar nodos de la biblioteca al área de trabajo. Únicamente podremos pinchar en ellos y aparecerán en el centro de esta área.
  • Las líneas de modelo o de detalle no aparecerán automáticamente en la previsualización 3D de Dynamo. Si queremos visualizarlas deberemos usar Element.Geometry o Element.Curve igual que con otros elementos de Revit.

Conclusiones

La nueva versión trae consigo novedades interesantes, como una biblioteca mejorada, las nuevas funcionalidades de Python o el tratamiento de las bibliotecas. Estas novedades compensan con creces los elementos que se pierden, pocos y bastante prescindibles. Sin embargo, la falta de compatibilidad con versiones anteriores hará que no se pueda utilizar un script creado con Dynamo 2.0 con una versión no tan antigua como Revit 2016. Se trata en nuestra opinión de la principal tara de esta versión y no lamentablemente parece que esta tendencia se vaya a modificar en el futuro.

Bibliografía:

www.dynamobim.org/to-dynamo-2-0-and-beyond