Conversión de Dynamo Scripts a Add-ins con PyRevit
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:
Instalación 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
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.
Creación de script en VSCode
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
Y esto es todo, no es necesario hacer nada más que probar nuestro script.
Notas finales
Debug y cambios a script
Autor: Ricardo Zepeda. Cofundador Academia BIM y BIMetriX.