Python para Dynamo. «Pero si ya sé Dynamo para qué recórcholis voy a aprender a escribir código. Luisa… se te ha pirado la pinza ya». Pues es verdaderamente útil, pequeños fans del Dynamo, y Viero Hernández Guadalupe, una de las pocas personas que es capaz de hacerme sentir interés hablando de «loops, diccionarios y listas» os va a contar por qué. Os quedáis con él en este artículo de intro a su tema «Python para Dynamo». ¡Os va a flipar!
Enters Viero:
¿Por qué se tiende a pensar que programar es difícil? Aquí algunos tópicos infundados.
- “Escribir código de programación es algo raro relacionado con las matemáticas.”
- “No entiendo nada las líneas que escriben los informáticos. Parece como si fuera otro idioma.”
- “Programar es para frikis informáticos y/o hackers.”
Aquí mi respuesta a estos prejuicios:
- Sí, programar muchas veces tiene que ver con las matemáticas, pero no son matemáticas puras.
- Sí, cuando sabes programar sabes entender y hablar un nuevo idioma. Si te parece raro es porque aún no aceptas o no entiendes que se le puede hablar a las máquinas.
- Programar es para todo el mundo que quiera ahorrar esfuerzo poniendo a trabajar a una máquina por él.
¿Y qué pinto YO escribiendo código?
Quiero asegurarme, antes de entrar en materia, que nos hemos sacudido bien los prejuicios de que “este rollo no es para mí”, y también esa típica pereza por aprender un idioma nuevo. Puedes ser arquitecto, ingeniero, diseñador o artista. De cualquier manera probablemente haya algo que te cambiaría la vida si aprendieses a programar.
En la mayoría de aspectos, aprender a programar tiene más que ver con aprender un idioma, una lengua (esto es una asignatura de letras) que con las matemáticas. Si además pensamos que tenemos la suerte de ser occidentales, donde las líneas se escriben de izquierda a derecha y donde manejamos el alfabeto latino, deberíamos considerar que es mucho más fácil aprender a programar para nosotros que para la mayoría de culturas asiáticas o islámicas, donde se escribe de derecha a izquierda o de arriba a abajo.
Además, creemos que la programación sólo está relacionada con el código, pero nos sorprendería saber que muchas de nuestras acciones rutinarias incluyen programar aparatos de forma más o menos compleja: llevamos toda la vida programando nuestro despertador, grabaciones en la TV, la lavadora, el robot de limpieza, emails, publicaciones de las redes sociales… La lista es grandísima, lo que no nos damos cuenta de que estos aparatos nos ofrecen una interfaz “amigable” para que no necesitemos escribir código. (Faltaría más, después de todo por eso compramos electrodomésticos, para que nos lo pongan fácil.)
No digo esto para consolar al lector ajeno a este tema, lo digo porque al igual que estos aparatos nos ofrecen estas interfaces amigables, como las llamo, hay ciertos lenguajes de programación que también nos lo ponen muy muy fácil.
Lo que acerca la programación a las matemáticas y lo aleja de los lenguajes es que la programación sirve para resolver muchos de nuestros problemas de la manera más sencilla. Sí, habéis adivinado, descontando los problemas del amor, solemos utilizar las matemáticas no la poesía para resolver problemas. Por tanto, cuando leemos y escribimos código, estamos pensando en clave de PROBLEMA->SOLUCION. Rara vez usamos nuestra capacidad de comunicarnos mientras divagamos sobre un problema existencial.
En cualquier caso lo que tienen en común las matemáticas con la literatura es que ambas necesitan una gran dosis de creatividad y abstracción. En efecto señores, la creatividad no exclusiva de las actividades de letras y las artes, al igual que la capacidad de abstracción no es exclusiva de técnicos, científicos y matemáticos.
¿Ya están fuera de casa los prejuicios? Pues al lío.
¿Por qué programar con código si tenemos Dynamo?
Las interfaces de programación gráfica son un puente “amigable” hacia la programación. Los más populares de ellos son los lenguajes de programación gráfica como Dynamo, con los cuales podemos combinar piezas de programación conectándolas como si fueran trozos de puzzle encadenables. Estos trozos de código al final conforman pequeños programas que automatizarán nuestros comandos, ahorrándonos un tiempo precioso en tarreas repetitivas. Luisa Santamaría Gallardo tiene muchísimo que enseñarnos en este campo.
Ojo, no quiero decir en este artículo que aprender programación sea coser y cantar. Dominar la programación gráfica como la de Dynamo puede ser muy arduo para alguien que tenga nula experiencia en el campo. Pero es cierto que todo el que empieza con energía y ganas, desde muy pronto empieza a ver las ventajas.
Si quieres ver cómo se maneja el Dynamo, empieza por el artículo «Nodos esenciales de Dynamo. Parte 1» y también puedes leer la guía de Especialista3D, exclusiva para suscriptores, descargándola desde aquí: «Fundamentos de Dynamo. Especialista3D».
Pero vamos al meollo. Si hemos dicho que con Dynamo podemos crear automatizaciones de comandos sin escribir ni una línea de código, ¿por qué íbamos a aprender a escribir código? Tres respuestas simples espero que respondan a esta gran pregunta:
- Siempre hay algo que Dynamo no puede hacer con sus módulos, y a veces es más rápido escribir el código en Python que buscar en internet un módulo que haga exactamente lo que quieres.
- Programar con código ayuda a modificar sutilmente o a combinar los módulos existentes.
- Saber programar con código ayuda a gestionar datos masivos de manera pormenorizada y ágil.
Python es uno de los lenguajes en circulación más versátiles actualmente, así como de los más accesibles a la hora de aprender para los no iniciados en el mundo de la programación. Dada su sencillez para creación de listas y paquetes de datos, Revit lo ha integrado parcialmente en sus interfaces de tres maneras:
-En Dynamo se pueden hacer módulos de código en Python que condensan las acciones de otros módulos ahorrándonos cables innecesarios. Además hay acciones complejas de organización de datos en Dynamo que sólo se pueden hacer mediante programación de código.
-Plugin Python Shell, esto nos permitirá acceder fácilmente a la API de Revit usando el lenguaje Python, así como automatizar funciones de Revit a modo de macros.
-Además de automatizar funciones complejas de Revit algunos plugins de este lenguaje también nos permiten modelar formas a partir de fórmulas paramétricas.»
Fragmento de Salto al BIM. (Cap. 8 – Automatización de procesos)
Programación procedural y programación orientada a objetos. Diferencias y compatibilidades.
El Dynamo es un software de programación gráfica de tipo procedural, es decir que va recibiendo órdenes estructuradas una tras otra hasta que se termina la función del programa. Dicho de otra manera, en la programación procedural, la función del programa pesa más que los datos del mismo.
Por otro lado, Revit contiene muchísimas funciones que no serían posibles sin programación orientada a objetos (se suele usar el acrónimo POO, o OOP en inglés). Al contrario que la programación procedural, la POO tiene como protagonista los datos, su orden y su jerarquía, no las operaciones. Aquí va un esquema interpretativo que un servidor ha dibujado, para intentar ilustrar rápidamente lo que acabamos de decir:
Pero esto no quiere decir que se usen dos lenguajes de programación distintos para ambos paradigmas. Python y C# son lenguajes que soportan ambos paradigmas de programación para que podamos caracterizar nuestros elementos constructivos dentro del Revit mientras operamos con los mismos.
Estoy seguro que ahora muchos me diréis: vale Javi, si al final se escribe código igual con los dos paradigmas de programación ¿por qué demonios nos cuentas estas historias?
Mis respuestas:
- Porque aunque uses el mismo lenguaje, no se habla de la misma manera a una persona en un funeral que en una despedida de soltero. En programación usamos el cerebro de manera distinta cuando tenemos que estructurar datos que cuando tenemos que estructurar órdenes. (Aunque muchos los expertos que llevan décadas en esto y tengan una fluidez extrema programando me digan lo contrario).
- Porque es muy importante saber de qué están hechas las tripas de un programa si te vas a dedicar a tocarlas. Este tipo de información no sólo nos ayuda a ser más ágiles cuando empecemos a encadenar comandos, sino que nos da la intuición para “sospechar” cómo funciona el programa sin saberlo con total precisión. Cuando tenemos ese olfato, nos ahorramos muchísimo tiempo en investigación profunda.
- Porque a mi me ayudó mucho al empezar, y quiero creer que al resto también le puede venir bien saberlo.
* Nota: Si queréis investigar más, hay miles de foros y documentación en inglés y español sobre estos paradigmas de programación, englobados dentro de la programación estructurada.
Simplificando muchísimo la estructura de Revit-Dynamo, podemos ver que está pensando para automatizar comandos de Revit (proceduralmente) usando lo mejor del campo BIM, que son los objetos Bim (programación orientada a objetos). Cada objeto Bim contiene parámetros y familias (de tipo “padre” en jerga de programación) que permiten utilizar los objetos y sus parámetros de manera flexible.
A continuación exponemos un vídeo resumen del artículo:
Dynamo + Python. La combinación perfecta.
Dynamo nos permite desarrollar todo el potencial de automatización de comandos y cálculo de formas complejas dentro del Revit. Pero saber unas simples nociones de programación con Python, puede hacer mucho más fluida la experiencia de uso de Dynamo, e incluso es probable que se nos ocurran ideas de optimización de procesos más eficaces.
Algunas claves para meter un piececito en los nodos de Python para Dynamo:
A continuación te contamos lo básico basiquísimo que deberías saber para empezar a trabajar en la parcelita de scripts de Python en Dynamo:
1. Cuándo usar Python.
Usamos Python en Dynamo cuando ocurre alguna de las siguientes situaciones o varias a la vez al crear una funcionalidad concreta:
- Cuando no encontramos un módulo o no se nos ocurre cómo buscarlo. Si no hemos visto una funcionalidad nunca, es frecuente que no sepamos cómo se llama. Y si no sabemos encontrarla en internet es como si no existiera para nosotros.
- Cuando es demasiado lioso crear la funcionalidad solo con Dynamo. Demasiados módulos pueden convertir una automatización de tareas simples en un lío de módulos y conexiones nada intuitivo. La programación mediante script (bien ejecutada) no suele dar estos problemas tan a menudo.
- Optimización de recursos. Para operaciones de manipulación de geometrías y/o objetos masivos, es recomendable que optimicemos todos los procesos posibles para no someter al ordenador a esfuerzos imposibles. En este sentido, trabajar con los scripts es una buena manera de ahorrar recursos de memoria y procesado.
- Loops. Los bucles o los comandos recursivos nos permiten operaciones reiterativas y comprobaciones organizadas con mucha facilidad. El problema es que la interfaz de Dynamo no permite «bucles» de conexiones entre los nodos. Por lo que tenemos que arreglárnoslas para que estos loops se den dentro del nodo.
- Cuando tenemos mucha fluidez en la programación con código. Dependiendo del grado de familiaridad que tengamos con las funcionalidades de Python mediante Dynamo, puede ocurrir que (si tenemos facilidad) ni nos planteemos hacer el módulo de Dynamo mediante las pilas de interfaz gráfica.
2. IN[1], IN[2], IN[3],…
En la jerga informática, la palabra INPUT se refiere a la “información entrante”. Cuando creamos un programa, tanto con Dynamo como con los módulos de Python, intentamos transformar una información de entrada en otra de salida, pasando por unos procesos que definiremos con nuestro código. Cada “IN[x]” representa una de las “entradas de información”. La información de entrada más común suelen ser listas de datos, objetos geométricos, textos, archivos, etc.
3. OUT.
De la misma manera que existen INPUTs existen OUTPUTs. OUT, representa la salida que queremos darle a nuestro código. Igualmente, después de la transformación que haremos a los INPUTS mediante nuestro código, los datos salientes pueden ser de muchos tipos.
4. Errores internos.
Es normal tener errores en nuestro código, sobre todo en nuestros inicios. Para ello hay que tener un flujo de trabajo que nos permita ir testeando el funcionamiento de nuestra funcionalidad por partes. Si no funciona veremos cómo la pila de Dynamo nos dice que «algo pasa» dentro del código:
5. Errores externos.
Una vez tenemos el código operativo, tenemos que tener claro que éste está concebido para ser usado de cierta manera. Si lo usamos mal podría dar errores y no funcionar. El error más común en Dynamo tiene que ver con introducir un flujo de información equivocado en el nodo. Pero también suele ocurrir que, por falta de ideas, intentemos conectar un nodo de forma que jenere un «bucle» de información. (Dynamo, hasta donde yo sé, no está preparado para gestionar loops sin nodos especiales). Aquí va un mensaje típico de error por mal uso de un nodo:
* Espero que este artículo sirva a muchos para empezar a meter un pie en la programación con código. Una curiosidad os cuento para animaros a seguir adelante por este camino: Muchos de los que esquivan la pereza inicial para aprender a programar, al final tienen que convivir con una pereza muchísimo más productiva, la de intentar hacerlo todo mediante código.
Python para Dynamo. Parte 1. Cuando los nodos no son suficiente. por Especialista3D está licenciado bajo una Licencia Creative Commons Atribución-NoComercial 4.0 Internacional.