Interactuando con la API de Revit desde Dynamo

Interactuando con la API de Revit desde Dynamo

¿Qué veremos en este Post?

 

 

En este post vamos a ver cómo ampliar las posibilidades de Dynamo mediante el uso de Python scripts y la API de Revit.

 

Para ello vamos a realizar un ejemplo muy sencillo como es el crear un suelo a través del método que nos expone la API de Revit para este fin.

 

Lo que vamos a hacer se resume en los siguientes pasos:

 

  • Determinar los inputs y outputs de nuestro script

 

  • Consultar la documentación para saber cómo utilizar el método de la API

 

  • Escribir las líneas correspondientes en el nodo que contendrá el Python script

 

  • Ensamblar y ejecutar nuestra rutina comprobando su funcionamiento

 

 

 

Nuestro objetivo

 

 

Vamos a tratar de crear una serie de suelos proporcionando como input 4 parámetros: un contorno, un tipo de suelo, unos niveles y un booleano que indique si los suelos son estructurales o no.

 

 

 

La documentación de la API

 

 

Estos inputs son un requisito del método que vamos a utilizar para crear un suelo. En esta página https://www.revitapidocs.com/2020/0092a6a8-c9cb-38be-769a-cd9fa58407e0.htm encontramos la información necesaria sobre la API de Revit. En nuestro caso simplemente buscamos cómo crear un suelo por lo que, buscando “new floor”, encontramos el método que nos va a permitir conseguirlo. 

 

 

 

Vemos que el método tiene 3 “overloads”, es decir, tenemos 3 formas de invocarlo y la diferencia está en los parámetros que le pasaremos. En nuestro caso hemos elegido el método que requiere 4 parámetros (los mencionados previamente).

 

 

method-phyton-dynamo

 

 

Python Script

 

 

Nuestra rutina es la siguiente:

 

 

rutina1-dynamo-phyton

 

 

Tenemos un polígono que nos va a proporcionar el contorno de nuestro suelo, un tipo de suelo, un nivel y un booleano.

 

 

Vamos a centrarnos en el nodo del Python script. Este es el punto importante de nuestra rutina, aquí vamos a invocar el método de la API. Es importante tener en cuenta que cuando nos comunicamos con la API debemos “hablar su lenguaje” por eso los elementos que pasamos como parámetros deben ser nativos de Revit y no de Dynamo. Podríamos decir que los elementos de Dynamo (una línea o un nivel por ejemplo) tienen su equivalente en el mundo de Revit.

 

 

Aquí podemos ver el script completo en este punto: LINK

 

 

Si nos fijamos en la línea 22 podemos ver como tomamos los inputs y los transformamos a sus equivalentes en el mundo nativo de Revit (de ahí que llamemos a ToRevitType para convertir el polígono que viene de Dynamo en una lista de líneas de Revit y que hagamos UnwrapElement al floorType y al level).

 

 

En la linea 27 podemos ver que creamos un CurveArray. Esto es necesario porque el método de la API no acepta un lista de Python sino un tipo concreto de lista de Revit. Es inmediato ver que lo que hacemos es rellenar este CurveArray con las líneas de nuestra lista original proveniente del polígono.

 

 

Una vez tenemos los inputs preparados solo nos queda llamar al método de la API dentro de una transacción, sino no podríamos ejecutar un cambio sobre los datos del modelo de Revit.

 

 

En la línea 36 invocamos el método pasándole los parámetros en el orden especificado y si todo ha ido bien al ejecutar nuestra rutina deberíamos tener nuestro suelo recién creado!

 

 

 

result1-dynamo-phyton-script

 

 

 

Bonus

 

 

 

Vamos a intentar crear ahora varios suelos a la vez, para ello lo que vamos a hacer es proporcionar al script una lista de niveles en vez de uno solo. Además vamos a jugar un poco con la rotación de cada uno de los suelos por lo que nos debería quedar una torre donde cada nivel tiene una rotación concreta respecto al eje vertical.

 

 

 

Nuestra rutina ahora es la siguiente:

 

 

 

rutina2-dynamo-python-script

 

 

Hemos sustituido el nivel por una lista de ellos y además hemos añadido un input extra con una lista autogenerada de números aleatorios que serán los que usemos para rotar cada suelo una cantidad diferente de grados sobre la vertical.

 

 

 

El script es el siguiente LINK

 

 

 

Vemos que la diferencia está ahora en las líneas 40 a 50. Estamos iterando para generar cada uno de los suelos acorde a la lista de niveles y rotaciones aleatorias. Además, tras crear el suelo seteamos su offset a 0 para que se quede en la altura correcta de su nivel y lo rotamos. No vamos a ahondar en esta parte pero de nuevo estas operaciones se pueden hacer directamente gracias a la API de Revit.

 

 

El resultado es el siguiente:

 

result2-dynamo-phyton-script

 

Si te ha gustado este post en el curso de Dynamo-Python vemos casos como éste en detalle y muchos más sobre cómo aprovechar el scripting con Python para poder exprimir Dynamo y automatizar muchas rutinas o resolver problemas concretos de nuestro flujo de trabajo sin tener las limitaciones propias del Dynamo básico y los paquetes de terceros. También puedes especializarte como especialista en Programación BIM con el nuevo máster de Editeca de programación aplicada a proyectos BIM.

 

 

Autor : Daniel Herrero Hernado

 

 

curso-y-docente-dynamo-python

· Computational BIM Specialist.

· Full Stack Developer.

· Project Manager en Morph Estudio.

· Arquitecto por la UPM

 

 

 

 

También este Curso está incluido en el Máster BIM Online de Editeca

 

 

Ver Curso

 

 

¿Te gusta lo que lees?

Suscríbete ahora

¿Te gusta lo que lees?Suscríbete ahora
RGPD
    Tu cesta
    Tu carrito está vacio

    Hasta un

    40%

    DESCUENTO

    En nuestros másters:
    BIM / PMP / Programación

    Hasta un

    40%

    DESCUENTO

    En nuestros másters:
    BIM / PMP / Programación