Acceso a la API de Revit con Ironpython


Acceso a la API de Revit con Ironpython
Created with DALL-E

“¿Cómo es posible construir algo perdurable a partir de partes más bien efímeras?”

John Von Neumann

En el artículo anterior, dimos el primer paso en nuestro viaje hacia la automatización en Revit al desarrollar nuestro primer comando personalizado. A lo largo de esta serie, compartiré mi comprensión de conceptos importantes relacionados con la programación y la extensión de las capacidades de Revit. Sin embargo, es fundamental tener en cuenta que, como entusiasta en constante aprendizaje, mis explicaciones no deben considerarse verdades absolutas. Siempre recomiendo a aquellos que deseen profundizar en estos temas que consulten los recursos oficiales de Autodesk y la documentación de la API de Revit para obtener información completa y precisa.

Además, quiero ser transparente sobre el hecho de que estoy aprovechando la asistencia de IA, como Chat GPT y Claude, para agilizar el proceso de redacción y corrección de estos artículos. Uno de mis objetivos con estos artículos es explorar cómo estas herramientas pueden utilizarse de manera responsable para facilitar la divulgación de conocimientos y mejorar la calidad del contenido. Considero que las IA pueden ser aliadas valiosas en la creación de recursos educativos, siempre y cuando se empleen de manera ética y se revise cuidadosamente el contenido generado.

A través de esta serie de artículos, no solo compartiré mis conocimientos sobre la automatización en Revit, sino que también pondré a prueba las capacidades de las IA en tareas de divulgación de conocimientos especializados. Estoy entusiasmado por ver cómo estas tecnologías pueden ayudarnos a crear contenido más accesible, claro y enriquecedor para la comunidad de usuarios de Revit.

Aclarados estos puntos, podemos iniciar con el tema principal de este artículo.

¿Qué es la API de Revit?

La API (Application Programming Interface) de Revit es un conjunto de herramientas y protocolos que permiten a los desarrolladores interactuar con Revit y extender sus funcionalidades. Es como una puerta de entrada que nos permite comunicarnos con Revit y aprovechar sus capacidades desde nuestros propios programas.

Imagina que estás desarrollando una aplicación que necesita mostrar la ubicación de un edificio en un mapa. En lugar de tener que crear tu propio servicio de mapas desde cero, puedes utilizar la API de Google Maps. Esta API te proporciona acceso a las funcionalidades de Google Maps, como mostrar mapas, marcar ubicaciones y trazar rutas, sin tener que preocuparte por la compleja infraestructura subyacente. Simplemente integras la API de Google Maps en tu aplicación y puedes aprovechar todo su potencial.

De manera similar, la API de Revit te permite acceder a las funcionalidades y datos de Revit desde tus propios programas o complementos. Puedes interactuar con los elementos del modelo, automatizar tareas, crear herramientas personalizadas y mucho más, sin tener que reinventar la rueda cada vez.

¿Python o Ironpython?

Python es un lenguaje de programación de alto nivel, interpretado y multiplataforma. Se destaca por su sintaxis clara y legible, lo que lo hace ideal para principiantes y expertos por igual. Python es ampliamente utilizado en diversos campos, como el desarrollo web, la ciencia de datos, la inteligencia artificial y la automatización de tareas.

IronPython, por otro lado, es una implementación de Python que se ejecuta en el entorno de ejecución de .NET de Microsoft. Esto significa que IronPython puede interactuar sin problemas con otras bibliotecas y frameworks de .NET, como la API de Revit.

La razón principal por la que utilizaremos IronPython para desarrollar nuestros comandos personalizados en Revit es su capacidad para integrarse perfectamente con la API de Revit. Revit, siendo un software desarrollado por Autodesk, se basa en la plataforma .NET. Al utilizar IronPython, podemos aprovechar todas las funcionalidades y clases proporcionadas por la API de Revit de manera directa y eficiente.

Además, IronPython nos permite combinar la simplicidad y la legibilidad de Python con el poder y la robustez de la plataforma .NET. Esto nos brinda lo mejor de ambos mundos: la facilidad de uso de Python y el acceso completo a las capacidades de la API de Revit.

descarga ironpython 2.7 aquí https://ironpython.net/

¿Qué es .NET?

.NET es un framework de desarrollo de software creado por Microsoft. Es una plataforma que proporciona un entorno de ejecución y un conjunto de bibliotecas y herramientas para crear aplicaciones de software robustas y escalables. .NET admite múltiples lenguajes de programación, como C#, Visual Basic y, en nuestro caso, IronPython.

Imagina que tienes un taller con una amplia variedad de herramientas generales, como martillos, destornilladores y sierras. Estas herramientas son análogas a las bibliotecas y funcionalidades proporcionadas por .NET. Ahora, imagina que agregas a tu taller un conjunto de herramientas especializadas para trabajar con un material específico, como la madera. Estas herramientas especializadas serían análogas a la API de Revit, que te brinda capacidades específicas para interactuar con el software Revit.

Al utilizar IronPython en combinación con la API de Revit y .NET, podemos aprovechar tanto las herramientas especializadas de Revit como las herramientas generales de .NET para crear comandos personalizados potentes y flexibles.

En resumen, .NET es una plataforma de desarrollo de software que proporciona un entorno de ejecución y un conjunto de herramientas para crear aplicaciones. La API de Revit es un conjunto especializado de herramientas que se integra con .NET, permitiéndonos aprovechar ambas plataformas para desarrollar comandos personalizados en Revit utilizando IronPython.

Código para accesar a la API de Revit

Ahora examinaremos las líneas de código que nos dan acceso a la API de Revit, en el artículo anterior aprendimos a crear el primer comando al que llamamos Test-1, ahora para crear el comando Test-2 seguiremos estos sencillos pasos:

  • Con el cursor colocado sobre el botón de Test-1 en nuestra barra de herramientas de bimetheca (o el nombre que le hayas puesto), presiona la tecla ALT, y das click, automaticamente se abrirá el folder donde esta alojado el script.
  • Sube un nivel hacia la carpeta General.panel y duplica la carpeta Test-1.pushbutton, renombrala como Test-2.pushbutton
  • Abre el archivo script.py y copia el siguiente código:

# Import the necessary CLR libraries and Revit API classes import clr clr.AddReference('RevitAPI') clr.AddReference('RevitAPIUI') from Autodesk.Revit.DB import FilteredElementCollector, BuiltInCategory, ElementId from Autodesk.Revit.UI import TaskDialog doc = __revit__.ActiveUIDocument.Document app = doc.Application # Create a filtered element collector in the given document # Filter for walls and exclude element types (wall types) collector = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).WhereElementIsNotElementType() # Count the elements collected wall_count = len(list(collector)) # Display the count using a Task Dialog dialog = TaskDialog("Wall Count") dialog.MainInstruction = "Number of walls in the model:" dialog.MainContent = str(wall_count) dialog.Show()
  • Recarga pyRevit, te aparecerá un cuadro de dialogo para confirmar que quieres recargar pyRevit, confirmas y al terminar el proceso debería aparecer en la barra de herramientas el nuevo comando.
  • Al ejecutar el comando Test-2 deberia aparecer el Task Dialog de Revit mostrando la cantidad de muros en el modelo.

Como ves es muy sencillo el proceso de agregar nuevos comandos, ahora analicemos el codigo que ejecuta el comando Test-2.

En Ironpython, todas las líneas del código que empiezan con un “#”, son comentarios que no afectan el funcionamiento del comando, se usan para documentar el programa, de modo que si alguien más debe trabajar con él pueda entenderlo con mayor facilidad, ignorando estas líneas de comentarios, analicemos la primera línea de código que nos interesa:

import clr

En esta línea, importamos el módulo clr de IronPython. Este módulo permite la interoperabilidad con el Common Language Runtime (CLR) de .NET, que es necesario para acceder a las bibliotecas y clases de la API de Revit. Pensemos en el CLR como un lenguaje común que permite a Ironpython comunicarse con las librerías de .Net, como lo es la API de Revit.

clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')

Utilizando el módulo clr, agregamos referencias a las bibliotecas principales de la API de Revit: RevitAPI y RevitAPIUI. Estas bibliotecas contienen las clases y funciones necesarias para interactuar con Revit y su interfaz de usuario.

from Autodesk.Revit.DB import FilteredElementCollector, BuiltInCategory, ElementId
from Autodesk.Revit.UI import TaskDialog

Aquí importamos clases específicas de la API de Revit que utilizaremos en nuestro código. FilteredElementCollector nos permite recopilar y filtrar elementos del modelo de Revit. BuiltInCategory y ElementId son enumeraciones y clases utilizadas para identificar y filtrar elementos. TaskDialog es una clase para mostrar cuadros de diálogo al usuario.

doc = __revit__.ActiveUIDocument.Document
app = doc.Application

En estas líneas, obtenemos referencias al documento activo y a la aplicación Revit utilizando la variable especial __revit__ proporcionada por pyRevit. ActiveUIDocument.Document nos da acceso al documento actual, mientras que doc.Application nos permite acceder a la instancia de la aplicación Revit. En mi caso el documento actual es un modelo ejemplo de Revit, y la aplicacion es la sesión de Revit en la que tengo abierto ese modelo.

Hasta aquí, explicamos las líneas mas importantes del código por ahora, ya que son las que nos permiten interactuar con las clases de la API de Revit, estas mismas líneas serán de uso recurrente a la hora de crear nuevos comandos. En futuros artículos profundizaremos en líneas de código que trabajan directamente con esas clases como el FilteredElementCollector o TaskDialog.

Es importante destacar que IronPython nos permite utilizar la sintaxis y las características de Python para interactuar con la API de Revit. Esto nos brinda la flexibilidad y la legibilidad de Python mientras aprovechamos el poder de la API de Revit.

Espero que ahora tengas al menos una idea general de cómo es posible acceder a la API de Revit usando Ironpython, y de los conceptos importantes que intervienen en este proceso.


Gilberto Granados, Arquitecto y Senior Digital Designer en Harris Design Studio

Términos y condiciones

El contenido proporcionado en Bimetheca es solo para fines informativos; el propietario de este blog no se responsabiliza de la exactitud, integridad y disponibilidad de la información de este sitio, el propietario no será responsable de ninguna pérdida, lesión o daño por la visualización o el uso de esta información.

Nos complace que compartan nuestras publicaciones a través de todas las plataformas de redes sociales; incluyendo las publicaciones originales con crédito al autor y proporcionando un enlace al contenido original.

Estos términos y condiciones de uso están sujetos a cambios en cualquier momento y sin previo aviso.



1 comentario en “Acceso a la API de Revit con Ironpython”

Los comentarios están cerrados.