Vamos a por la parte 2 de «Nodos esenciales de Dynamo»: Nodos de operaciones con listas.
Si estás leyendo esto, hopefully, has leído ya dos fuentes supremas de información en cuanto a conocimiento Dynamil se refiere:
- La guía de Fundamentos de Dynamo, solo para suscriptores, que puedes conseguir aquí mismo.
- La parte 1 del artículo de nodos esenciales de Dynamo de Especialista3D al que puedes acceder desde este link.
Si no los has leído o no tienes ni idea de por dónde empezar con Dynamo… por favor da la vuelta y lee ambas dos antes de ponerte con este artículo y escribirme diciendo que no te has enterado de nada y que para qué sirven estos nodos y que por qué se suicidan las ballenas, etc. De hecho te invito a que te tomes esta ballena como la oportunidad de abandonar este artículo immediately.
Fenomenal.
Ahora que ya estamos los que tenemos que estar en el artículo vamos a por la siguiente ronda de «Nodos Esenciales de Dynamo».
Nodos esenciales de Dynamo. Parte 2
Algunos nodos de trabajo con Listas.
En esta parte de «Nodos esenciales de Dynamo» vamos a tratar algunos nodos para trabajar con listas. Pero antes de empezar se hace necesario explicar qué es una lista.
Las listas son la forma que tiene Dynamo de organizar la información, datos de cualquier tipo o geometría. En Dynamo las listas van numeradas empezando por el 0. El número asignado a cada puesto en la lista se denomina índice.
Si miramos cualquier resultado de Dynamo podemos observar que en la parte inferior de cualquier nodo, a partir de la versión 1.2, aparece @L2@L1.
Vamos a ver qué significa esto.
Las listas tienen distintos niveles así, en el nivel 1 @L1 corresponde con los objetos. El nivel 2 correspondería con una lista de estos objetos, el nivel 3 con una lista de listas de objetos.
Podemos, desde la versión 1.1 creo (de esto no estoy 100% segura), elegir con qué nivel de la lista queremos operar señalando la flecha que aparece a la derecha de las entradas de información e indicando la opción «use levels». Es decir, ¿queremos operar con los plátanos, con los racimos, con racimos de racimos, con los árboles enteros?
Esto es súper importante. Dependiendo de con qué nivel de la lista operemos obtendremos unos resultados completamente distintos. Pero vamos, que me enrollo con esto y no es el objetivo de este post. Vamos a ver ahora algunos de los nodos esenciales que tienen que ver con las operaciones con listas.
Nodos esenciales de Dynamo con listas: List.Create
List create sirve para unificar las listas que necesitemos en una sola lista compuesta. List.Create nos pide los «items», objetos, como entradas de información. Trae además un símbolo de suma que, pulsándolo, nos permite añadir más elementos.
El único problema de List.Create es que simplemente junta las distintas listas para formar una sola, sin dejarnos elegir en qué nivel de la lista vamos a trabajar. Esto hace que, en ocasiones, no utilicemos este nodo sino otros que sí permiten escoger el nivel para unir varias listas. Un ejemplo de este tipo de nodos sería List.AddItemToFront.
Nodos esenciales de Dynamo con listas: List.GetItemAtIndex
En ocasiones tenemos una lista y queremos coger uno o ciertos elementos de la misma. Uno de los nodos más utilizados para discretizar subelementos de listas es List.GetItemAtIndex.
Básicamente lo que nos pide este nodo es: por un lado una lista de elementos y, por el otro, el índice que queremos obtener de la lista. Recordemos que las listas en Dynamo se ordenan desde el 0. Por tanto, si indicamos el índice «0», obtendremos el primer elemento de la lista. Ahora bien, cabría hacernos una pregunta con este nodo: ¿De qué nivel queremos coger el elemento del índice que sea? Vamos a fijarnos en el ejemplo de abajo.
Si no indicamos ningún nivel, por defecto, el nodo nos da como resultado el índice 0 del nivel más alto. En el caso del ejemplo nos da el índice 0 del nivel @L4, obteniendo en este caso una lista de 25 elementos. Volviendo al ejemplo inicial de los plátanos, por defecto Dynamo elige el nivel superior. Si el 1 eran plátanos, 2 racimos, 3 rama de platanero, 4 árbol platanero, etc; entonces en este caso le estaríamos diciendo que coja la primera rama de cada árbol platanero, y nos dan 25 ramas.
En el segundo caso estamos indicando que nos coja el índice 0 del nivel @L2, y obtenemos una lista de 9 elementos. Es decir, siguiendo el caso de los plátanos, que nos coja el primer plátano de cada racimo, obtenemos 9 plátanos.
Sin embargo, como se ve en el último caso, si designamos que extraiga el índice 0 del @L1, obtenemos una lista de 41 elementos. Este es el mismo número de elementos que tenía la lista de la que partíamos. Realmente es algo lógico. Si le pedimos que nos coja el primer plátano de cada plátano… obtenemos los mismos plátanos que había inicialmente.
Nodos esenciales de Dynamo con listas: List.IsIndexOf
Este nodo es especialmente útil a la hora de buscar en listas valores concretos. El nodo nos indica el nº de índice que ocupa un valor único en una lista.
Por ejemplo, en la imagen de abajo, teníamos una serie de superficies en listas. De estas superficies queríamos saber la mayor así como qué posición ocupaba en la lista de superficies cada superficie de área mayor. Vale, sé que es un poco lío pero, bear with me, ok?
Volvamos al ejemplo de abajo. En el primer nodo tenemos las superficies, en el segundo obtenem0s el área de cada una de las superficies. Después de calcular las áreas usamos «List.MaximumItem» para obtener numéricamente el área mayor de cada grupo de superficies. ¿Veis como la lista de Áreas (de Surface.Area) tenía 4 niveles pero en «List.MaximumItem» estoy entrando al nivel @L2? Esto es, a los grupos de áreas.
Una vez tenemos el área mayor de cada grupo de superficies queremos saber qué posición ocupa cada área mayor dentro de los grupos de áreas de superficies. Para ello unamos «IndexOf». Fijáos como en la 4 List–> 0List el valor 2790000 es el mayor, éste ocupa la posición de índice 0 en la lista 0List, por ello «IndexOf» nos da como resultado de esa operación «0».
Nodos esenciales de Dynamo con listas: List.UniqueItems
La aplicación de este nodo es obtener los elementos únicos de una lista de elementos que se repite.
Por ejemplo, en la imagen de abajo, imagina que hemos seleccionado tropecientosmil elementos en el modelo y queremos saber a cuántas categorías pertenecen. En el ejemplo usamos Element.Category, del package Rhythm (llegaremos a los packages en un futuro), para obtener la categoría de cada elemento en forma de texto. Pero claro, de esta manera obtengo tantas categorías como elementos (1447) y yo lo que quiero es saber qué categorías tengo, no cuál es de qué objeto. Para ello utilizo List.uniqueItems y obtengo la lista de categorías (6) que tengo seleccionadas.
Nodos esenciales de Dynamo con listas: Flatten/ List.Flatten
¡Vamos a por los últimos nodos de este post! Empezamos por Flatten. A veces la estructura de listas de Dynamo en Niveles nos viene de lujo, otras simplemente nos gustaría coger las listas, sublistas y sublistas de sublistas, arrojarlos al suelo y gritar saltando sobre ellas… bueno, esto no es que se pueda hacer tal cuál pero cogéis la idea. El caso es que, a veces, queremos todo en un solo nivel y ya está, olvidarnos de los racimos, los árboles, etc. Es en esta circunstancia donde tendremos que utilizar Flatten.
En el ejemplo de abajo tenemos 4 niveles de listas, ¿veis como debajo de Geometry.Explode aparece @L4@L3@L2@L1? Nos queremos quedar con la estructura convencional de una sola lista (@L2) con elementos (@L1), es por ello que usamos «Flatten».
Imaginemos ahora que no queremos rebajar tanto los niveles, sino que simplemente queremos eliminar un nivel de la lista. Esto puede ser perfectamente lógico porque, en ocasiones, la aplicación de algunos nodos puede generar más niveles de lo necesario. En este caso utilizaríamos List.Flatten que, además de la lista a aplanar, nos pide un «amt», es decir, un amount (en Español cantidad) que corresponde a los niveles a aplanar.
Por ejemplo, en esta primera imagen, estamos dándole un amt de 1 y pasamos de una lista @L4@L3@L2@L1 a una @L3@L2@L1, eliminando el nivel @L4
Y aquí, dándole un amt de 2, nos quedaríamos con @L2@L1, habiéndose eliminado los niveles @L4 y @L3.
Pues hasta aquí vamos a llegar por hoy con los nodos esenciales para operar con listas. Si te ha parecido útil te invito a compartir el artículo.
Y, si a pesar de la ballena y las indicaciones, has seguido leyendo y no te has enterado de nada… te recuerdo que puedes descargar aquí mismo la guía de «Fundamentos de Dynamo» de Especialsita3D, exclusiva para suscriptores.
Un saludo y buena semana, especialistas. 😀
Nodos esenciales de Dynamo: operaciones con listas por Especialista3D está licenciado bajo una Licencia Creative Commons Atribución-NoComercial 4.0 Internacional.