¿Porqué escribir varios posts de Nodos esenciales de Dynamo? Visualicemos primero una imagen para entenderlo.
Las primeras clases de Dynamo suelen ser una maravilla. Imagina unos cuarenta alumnos, las cabezas agachadas, el boli moviéndose a toda velocidad… intentando apuntar uno tras otro los nombres de los nodos de Dynamo que van resolviendo el problema que tienen delante. En este momento no entienden su utilidad de forma práctica, su conocimiento es mera teoría. Es demasiada información. La clase siguiente han retenido un 25% de la información sobre nodos, con suerte, y eso que el nivel de la clase es altísimo, pero es complicado retener la teoría sin grandes cantidades de práctica.
Para cuando han pasado unas cuantas clases los alumnos han entendido la esencia del programa y tienen la necesidad de conocer los nodos para ejecutar sus propias aplicaciones. Es entonces cuando se dan cuenta de la importancia de aquellos nodos que no comprendían el primer día… y se encuentran demasiado perdidos como para acordarse de ellos. Es por ello que he decidido escribir una serie de pequeños artículos de nodos esenciales. Así que no me deis las gracias a mi, dad gracias a mis alumnos, que son unos auténticos genios y son quienes lo han pedido.
Dynamo nos ofrece un sinfín de posibilidades de automatización y gestión del modelo mediante aplicaciones que serán capaces de selecionar, filtrar y modificar objetos, parámetros y propiedades de forma masiva y automática.»
*Fragmento extraído del libro Salto al BIM (Cap. 8 – Automatización de procesos) ->Saltoalbim.com
La idea es ir contando los nodos de cuatro en cuatro para que podáis quedaros con la información poco a poco. Así que vamos con la primera tanda de nodos… So, let’s go!
BTW. No voy a explicar en qué consiste Dynamo porque para eso ya tenéis la guía de «Fundamentos de Dynamo de Especialista3D». Si aún no la has leído esta información te sonará a chino.
Es solo para suscriptores, puedes conseguirla aquí mismo.
¡Ah! y «obviously» tampoco voy a repetir los nodos que están en la guía porque… para eso tenéis la guía. Éstos son:
- Select model elements.
- All elements in active view.
- Categories. All elements of category.
- Element Types. All elements of type.
- Levels. All elements at level.
- Get All Line Styles.
- Get Scope Boxes.
- String from Object.
- String.ToNumber.
- Excel.WriteToFile.
- Excel.ReadFromFile
Así que, siguiendo con los nodos esenciales de Dynamo, vamos a empezar por el santo grial de los nodos de volcado y escritura de información.
Nodos esenciales de Dynamo
Get parameter value by name & Set parameter
Get parameter básicamente necesita dos entradas de información para funcionar. Por un lado debemos introducir los elementos y por otro el nombre del parámetro en cuestión.
Es necesario introducir el nombre del parámetro tal cual está escrito, las mayúsculas, minúsculas, tildes, etc, sí cuentan a la hora de escribir el nombre del parámetro. Lo más sencillo para introducir el nombre de los parámetros suele ser con un Codeblock, el codeblock se saca haciendo doble click, y escribiendo el nombre del parámetro entre comillas.
Este nodo obtendrá la información de los elementos que introduzcamos en la entrada «element».
Element. SetParameterByName: Funciona de manera similar a GetParameterValueByName pero enviando información a los elementos en vez de leyéndola de los mismos.
Las entradas de información son las mismas que eran en GetParameterValueByName pero ahora, además, aparece una nueva entrada con el nombre «value». En «value» debemos introducir la información que queramos que pase a estar en los elementos. Esta información tiene que estar ordenada en el mismo orden que los elementos en sí para que se introduzca en los mismos de manera correcta.
String Contains
String Contains es uno de los nodos más útiles para comprobar información de los objetos. Por ejemplo, imaginemos que tenemos trescientos tipos de familias de modelo genérico en un proyecto pero, de éstas, queremos coger solo aquellas que contengan en su nombre «PANELADO». Lo que hace string.contains es, básicamente, preguntarle a una lista de textos lo siguiente:
LISTA DE TEXTOS (LT): Hola, soy una LT, y tengo una lista de textos que va así: {«texto1», «texto2», «texto3», «PANELADO», «PANELADO», «texto6»}
STRING CONTAINS (SC): Hola LT, te voy a hacer una pregunta: ¿Tu texto contiene el subtexto «PANELADO»?
LT: A ver… No, no, no, sí, sí, no… Te lo digo a mi manera: {False, False, False, True, True, False}
SC: Gracias.
Es decir, que String.Contains nos indica si es cierto o no que el texto está contenido en una lista y obtenemos esta información en forma de una lista de «verdaderos», es decir «True», cuando lo contiene y «falsos», «False», si no lo contiene.
Una vez obtenida esta lista podremos usar esta información para filtrarla, ¿cómo? con el filtro de máscara boleana que explico en el siguiente punto.
Filter By Bool Mask
El filtro de máscara boleana es uno de los nodos de Dynamo más esenciales para diferenciar cualquier tipo de información.
¿Cómo funciona? El filtro de máscara boleana nos pide dos tipos de información para realizar su cometido. Por un lado nos pide una lista de elementos y por otro lado nos pide una máscara. La máscara es una lista en forma de «True» y «False», como la que veíamos en el apartado anterior de «string.contains». Esta máscara suele ser el resultado de preguntarle algo a un objeto.
Lo que hace el filtro de máscara boleana es dividir la lista de elementos en dos en función de la máscara. Vamos a verlo tal y como sería en una conversación.
LISTA DE ELEMENTOS (LE): Buenas, aquí vengo con mis elementos, son: {2,3,4,5,5,7,2}
MÁSCARA (M): Buenas, yo vengo con mis verdaderos y falsos, en este caso no tengo que ver con LE… como sólo estamos en un ejemplo para que lo entendáis… {true, true, false}
LIST.FILTERBYBOOLMASK (LF): Con lo que me habéis dado LE y M saco dos listas: una la llamo «IN» (para los elementos que eran true) y me da {2,3}, otra la llamo «OUT» (para los elementos que eran false) y me da {4}. Los elementos que no son ni true ni false no sé qué hacer con ellos, así que no voy a hacer nada… así se queda.
Aquí se puede ver el ejemplo de arriba tal y como lo obtendría Dynamo:
Si viéramos un ejemplo un poco más real podría darnos una lista de este tipo:
Count. Count True & Count False
Hay veces que querremos contar elementos simplemente, otras querremos saber cuántos elementos cumplen una condición o cuántos no la cumplen.
Para estos casos utilizamos estos tres nodos esenciales de Dynamo:
- Simplemente para contar cuantos elementos hay en una lista de cualquier tipo: Count
- Para una lista de «true» y «false» cuenta la cantidad de «true» que hay: Count true
- Y para una lista de «true» y «false» cuenta la cantidad de «false»que hay: Count False
Es más ilustrativo viendo el ejercicio completo en su conjunto. En el ejemplo hay gran cantidad de modelos genéricos, generic model, en inglés. El objetivo es saber cuántos de estos modelos genéricos contienen el texto «PANELADO» en el tipo de elemento.
Para resolverlo convertimos el nombre del tipo de elemento en texto y le preguntamos con «String.Contains» si contiene o no el texto «PANELADO». Con ello obtenemos una lista de verdaderos, cuando lo contiene, y falsos, cuando no. Esta lista de verdaderos y falsos la metemos en la máscara del filtro de máscara boleana para obtener dos listas: la de los elementos cuyo tipo contiene «PANELADO» en su nombre (en el IN) y la de aquellos que no lo contienen (en el OUT).
Podéis ver el ejemplo entero aquí:
La cosa empieza sencillita. Iremos introduciendo nodos más complejos en siguientes artículos.
¡Ah! y, si no habéis entendido demasiado, recordad que podéis obtener la guía exclusiva para suscriptores de «Fundamentos de Dynamo» aquí mismo.
Un saludo y buena semana, especialistas.
Nodos de dynamo para seleccionar por Especialista3D está licenciado bajo una Licencia Creative Commons Atribución-NoComercial 4.0 Internacional.