Documente Academic
Documente Profesional
Documente Cultură
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.
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?
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.
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: