Sunteți pe pagina 1din 26

Conversión de Dynamo Scripts a Add-ins con PyRevit

Después de leer el excelente post de @Luis Alonso Otero sobre conversión de scripts de Dynamo utilizando
c#, me pareció interesante plantear otra alternativa para las personas que ya están desarrollando scripts en
Dynamo, utilizando Python Code Blocks. Ya que es algo que aún tengo pendiente de generar el contenido
para complementar nuestro set de cursos de Automatización con Dynamo en Academia BIM. Además, me
sirve de excusa para introducir una herramienta tan brillante como PyRevit, ya que su uso es bastante bajo
en Chile y Latinoamérica en general. 

¿Qué es PyRevit?
PyRevit está definido como un ambiente de prototipado rápido, (RAD) por sus siglas en inglés, para Revit.
Básicamente permite generar Add-ins de forma rápida utilizando varios lenguajes de programación, por
ejemplo, IronPython (mismo lenguaje para nodos personalizados en Dynamo), Cpython, c# o VB.Net. A la
vez, permite distribuir los nuevos Add-ins generados de forma rápida dentro de una oficina, lo cual es
importante. Por si esto no fuera poco, también viene con una amplio sets de herramientas desarrolladas por
Ehsan Iran-Nejad (creador de PyRevit) y cuenta con una excelente documentación del uso de PyRevit. 

Script a Convertir
Para mostrar cómo utilizar PyRevit elegí una rutina de Dynamo bastante simple pero que proporciona una
solución a un molesto problema que tiene Revit, y el es cálculo de longitudes, áreas y volúmenes en
elementos de la categoría Muros. Por ejemplo, asumamos que un usuario de Revit quiere saber de forma
rápida el área o longitud total de un conjunto de tabiques en un departamento; la única alternativa sería
crear un schedule, agregar filtros, agregar parámetros a los muros, configurar el schedule... todo esto para
obtener totales de un conjunto particular de tabiques de interés, mismo problema pasa en hormigón. 

El siguiente Script de Dynamo soluciona ese problema. El usuario puede correr el script de Dynamo Player
previo a una selección de muros en particular y con esto obtendrá los totales de longitud, área y volumen de
una forma rápida. 

Script para cálculo rápido de longitud, área y volúmen:


Al correr el script se obtiene el siguiente resultado:
Para el caso previo, el volúmen sería redundante, pero si se tratara de hormigón, seria un dato
muy útil. El script en cuestión usa el nodo de Spring Nodes para obtener la selección actual y un
poco de Python para crear la ventana de diálogo mostrando los valores. El código de Python es
sumamente simple y se presenta a continuación:

Intro a PyRevit 
Bueno, ahora que ya tenemos en mente el script que queremos convertir, veamos que necesitamos para
primero instalar PyRevit, y luego crear nuestra pestaña con comandos personalizados en la cual estará
nuestro botón para cálculo rápido de longitudes, áreas y volúmenes en Revit. 

Instalación de PyRevit
Para instalar pyRevit es necesario ir al siguiente link: https://github.com/eirannejad/pyRevit/releases . Para
este caso, utilizaremos la versión 4.7.4 por lo cual podemos ir hasta la sección de Assets y descargar el
archivo pyRevit_4.7.4_signed.exe
La instalación es estándar. Cierren Revit previo a la instalación y den click en siguiente hasta que
termine el instalador de hacer su trabajo. La próxima vez que se abra Revit, el software
preguntará por autorización para PyRevit, luego de esto debería aparecer la siguiente pestaña
con los comandos por default de PyRevit:

Como podemos observar, todos los comandos que están disponibles dentro de la nueva pestaña fueron creados utilizando PyRevit, por
lo que prueba la versatilidad de la herramienta para generar add-ins con alta complejidad. Les recomiendo den una revisada a esos
comandos, sobretodo las herramientas para láminas, creado de patrones personalizados y herramientas de análisis y selección. 

Ahora bien, esto nos permite usar los comandos por default, ¿pero cómo creamos nuestros propios comandos?

Proceso de creación de Add-ins en PyRevit


Acá es donde en mi opinión brilla PyRevit. El proceso de creación de Add-ins es sumamente simple; muy
fácil de entender para alguien que no tenga tanta experiencia con ambientes de programación y editores de
código. Lo primero que tenemos que hacer es intalar VSCode. Este es un entorno de programación simple y
flexible https://code.visualstudio.com/ .Una vez este instalado debemos agregar la extensión de Python
como se muestra en la siguiente imagen:
VSCode es la herramienta que personalmente uso para desarrollar nodos personalizados en Dynamo por lo que se adapta muy bien en
mi flujo para PyRevit.
Ahora, volviendo a PyRevit. Lo primero que tenemos que hacer es una estructura de carpetas muy particular. La estructura será la
siguiente:

Asumamos que crearemos una carpeta en Mis Documentos que contendrá toda la información de nuestro Add-in. Llamaré a esa
carpeta Dynamo-Py; dentro de esa carpeta crearemos la siguiente estructura y por facilidad usaré la siguiente nomenclatura Nombre de
Carpeta: Descripcion. No es muy común que creemos una carpeta y usemos nomenclatura como MiComando.pushbutton, pero la
última parte después del punto es la forma en que PyRevit jerarquiza y distingue qué es una pestaña, qué es un panel y qué es un
botón. 
El archivo scirpt.py aún no estará generado a este punto. Eso lo haremos en el siguiente paso. El icono
puede ser cualquier imágen png y esta será asociada en el botón en Revit. Para los iconos pueden
usar https://www.freepik.com/popular-icons para encontrar un icono que sea de su interés.
Creación de script en VSCode
Ahora dentro de VSCode abriremos el folder que termina en .pushbutton. Esto nos permitirá crear un nuevo
archivo el cual llamaremos script.py . Noten que es importante terminar el nombre con .py , pues esto le
dice a VSCode que el archivo en cuestión es un script de Python.

El script que desarrollaremos constará de 5 partes principales. Explicaré cada una de ellas a
continuación
Parte 1:

Este no es nada más que el comentario o tooltip que aparecerá en Revit cuando el usuario mueva el cursor sobre el nuevo botón creado.
Notar que se usan 3 """ al inicio y fin para terminar el comentario. 

Parte 2:

Lo primero, similar a un script de IronPython en Dynamo es importar los ensamblajes que se utilizarán. En nuestro caso necesitamos
acceder a las propiedades de los muros, por lo cual necesitamos acceder a la base de datos de Revit; por ello importamos la DB. Luego,
utilizamos uno de los módulos core de PyRevit para extraer el documento activo.
Parte 3:

Las siguientes líneas de código nos permiten 2 cosas: primero, obtener la selección que el usuario tiene en la interfaz de Revit y luego
generar una lista de los elementos seleccionados.

Parte 4:

La siguiente porción de código es la lógica que permite extraer los valores de las propiedades que nos interesa. Nótese que estamos
utilizando BuiltInParameters, es decir, el nombre de los parámetros en la API, que no es el mismo que el nombre que el usuario ve. Por
ejemplo, el parámetro length en las propiedades de los muros es equivalente a CURVE_ELEM_LENGTH. Para más información sobre
estos para metros consultar los documentos de la API de Revit en el siguiente enlace: https://www.revitapidocs.com/2017/fb011c91-
be7e-f737-28c7-3f1e1917a0e0.htm

Otra nota importante es que todas las medidas internas de la API de Revit están en unidades imperiales, por lo que es necesario hacer
la conversión a metros.
Parte 5:

Lo último que necesitamos es mostrar el resultado de nuestra operación. Para esto podríamos crear un hook para mostrar la ventana de
Taskdialog similar a como hicimos dentro del script de Dynamo. Sin embargo, prefiero utilizar la ventana de presentación incluida en
PyRevit, para acceder a esta solo necesitamos dar Print.

Añadiendo pestaña en Revit


Perfecto, hasta este punto ya tenemos el script. El ícono y la configuración de carpetas que necesitamos para
crear nuestra herramienta. Ahora necesitamos decirle a PyRevit dentro de Revit que añada esta estructura
dentro del software. Para ello lo primero es ir a Settings dentro de la pestaña de PyRevit:
Dentro de Settings damos Add folder y buscamos el primer folder en nuestra jerarquía, para
nuestro ejemplo sería el folder de Dynamo-Py.
Luego ejecutamos el botón Save Settings and Reload. Luego de esto, debería aparecer una
nueva pestaña en Revit con nuestro botón tal y como se muestra en la siguiente imagen:

Y esto es todo, no es necesario hacer nada más que probar nuestro script.
Como podemos observar, obtenemos los mismos valores que con el script de Dynamo, pero con
varias ventajas. Entre ellas, que ahora podemos anclar este nuevo botón a un atajo de teclado,
con lo cual podemos obtener los cálculos deseados con una gran rapidez. 
Notas finales
Debug y cambios a script

Para cerrar quiero mencionar lo fácil que es el proceso de debug del Script creado. Algo que
normalmente consume mucho tiempo utilizando otros métodos. Para el caso de PyRevit,
asumamos que queremos cambiar el script para que muestre otro parámetro, o simplemente
cambiar los nombres o unidades en que es presentada la información. Es tan simple como hacer
el cambio, guardar el script y correr ejecutar el comando nuevamente:

S-ar putea să vă placă și