Creación de Tablas Multicategoría con Dynamo

Excel_2024-08-18_11-16-29.png

Introducción.

 

Este artículo abre una serie de artículos mensuales que buscan ayudar a proporcionar una alternativa de solución a ciertos requerimientos expresados por la comunidad en los foros en Español. La idea es proporcionar una ruta de solución alternativa usando Dynamo aplicado a Modelos con Revit. Es importante que el usuario tenga en cuenta que no se pretende dar una solución absoluta, al contrario, es un punto de partida. De hecho, si como lector del Blog detectas un punto a optimizar o mejorar te invito a que proporciones tu aportación de mejora, así nutramos esta base para lograr una rutina mucho más eficiente.  

 

Planteamiento.

 

Este artículo surge a través de una consulta de los Foros Autodesk en Español, acerca de qué, Tablas Multicategoría no son capaces de lograr la unión de cierta información entre Categorías de Modelos Distintas. Por lo tanto, exploraremos extraer datos de Categorías de Modelo diferentes dentro de Revit, sumarlas y darles salida a un Excel con Dynamo. Por favor toma en cuenta que este es un artículo con un objetivo muy específico, no pretende ser un curso ni de Dynamo ni de Revit. Sin embargo, si a partir de lo visto aquí surgen dudas o se quiere profundizar en otros temas, podemos crear artículos en paralelo que apoyen y profundicen.

 

Desarrollo

 

Iré describiendo cada paso. Por favor, toma en cuenta que usaré el Modelo de Proyecto Básico Estructural proporcionado de ejemplo con Revit, de tal manera que el ejercicio pueda ser lo más neutral posible y fácilmente replicable:

DidierRamirezDarjo_0-1724050788317.png

Te pediré, te centres en el proceso, ya que si lo dominas lograrás replicarlo con las categorías que quieras y no únicamente las que uso para el ejercicio. En este caso usaré las categorías de Structural Columns y Structural Foundations (No es necesario que las aísles, solo es para que quede más claro con qué trabajaremos):

DidierRamirezDarjo_1-1724050788328.png

Iniciaremos un nuevo proyecto Dynamo, este lo abres desde la pestaña de Manage+Dynamo:

DidierRamirezDarjo_2-1724050788337.png

 

DidierRamirezDarjo_3-1724050788338.png

El primer nodo que llamaremos es el nodo que nos permitirá extraer las Categorías de Modelo mencionadas. Darás Click derecho sobre tu espacio de trabajo y teclearás el nombre “Categories”:

DidierRamirezDarjo_4-1724050788379.png

Este nodo extrae las categorías dentro del modelo, por lo que buscaremos “Structural Columns”:

DidierRamirezDarjo_5-1724050788388.png

Puedes comprobar que el nodo está extrayendo la información que se le solicita, si vas a la esquina inferior derecha del nodo en donde encontrarás tres puntos en vertical, si posicionas tu cursor sobre ellos, te mostrará en la parte de abajo la información que detecta, si bajas un poco verás un pincheta que puedes activar para fijar esta información:

DidierRamirezDarjo_6-1724050788399.png

 

DidierRamirezDarjo_7-1724050788408.png

Ahora puedes seleccionar el nodo y usar Ctrl+C para copiar y Ctrl+V para copiarlo y seleccionar “Structural Foundations”:

DidierRamirezDarjo_8-1724050788419.png

Como paréntesis, en la parte de abajo, esquina inferior izquierda de tu interfaz, tendrás la opción de correr el script de forma manual o automática. Para este ejercicio puedes usarlo en forma manual, solo recuerda dar al Botón de “Run” al completar cada conexión de nodos para que arrojen y actualicen información. Si optas por el modo automático, podrás despreocuparte de esto:

DidierRamirezDarjo_9-1724050788420.png 

De momento me centraré en la categoría de “Structural Columns”, recuerda que debes hacer lo mismo para la otra categoría. Como siguiente paso, indicaré a estas Categorías que deben seleccionar todos elementos que les pertenezcan con el nodo “All Elements of Category” (Mismo procesos de los primeros nodos) Conectaremos “Category” en el puerto de Salida con “Category” en el puerto de Entrada:

DidierRamirezDarjo_10-1724050788433.png

En este punto necesitamos identificar los tipos de los Elementos. Para esto utilizaremos los nodos “Element.ElementType” para obtener una lista de los elementos, sin embargo, tendremos elementos duplicados, ya que estos corresponderán a los elementos pertenecientes al mismo tipo.

 

Usaré “List.UniqueItems” para compactar todos los tipos similares en una sola lista sin elementos duplicados:

DidierRamirezDarjo_11-1724050788444.png

Ahora debes identificar el Atributo o “Valor” a extraer. En este caso será el Volumen, el cual se encuentra en las propiedades de Instancia, Grupo Dimensiones para ambos casos:

DidierRamirezDarjo_12-1724050788453.png

 

DidierRamirezDarjo_13-1724050788463.png

 

Identificado el parámetro lo vamos a extraer en Dynamo por medio del Nodo “Element.GetParameterValueByName” y al puerto de entrada “Element” conectaré el puerto de salida del segundo nodo “All Elments of Category” para que extraiga todos los volúmenes de todos los elementos de la Categoría de Modelo (Mismo procesos de los primeros nodos):

DidierRamirezDarjo_14-1724050788475.png

Como paso intermedio aquí, para el puerto de entrada “parameterName” usaremos un “Code Block”. Para llamar un “Code Block” solo debes dar doble clic sobre el espacio de trabajo y en el valor de “Code Block” escribirás “Volume” con comillas y punto y coma al final (Esta sintaxis es muy importante aunado a que escribas el nombre del atributo tal cual como aparece en Revit😞

DidierRamirezDarjo_15-1724050788486.png

Toma en cuenta que si este valor no existe en las geometrías Dynamo no extraerá nada, no se puede inventar información que no existe.

 

Esta es la visión general de lo que tenemos hasta el momento:

DidierRamirezDarjo_16-1724050788500.png

 

Para las dos Categorías:

DidierRamirezDarjo_17-1724050788513.png

 

Ahora usaremos el Nodo “List.GroupByKey” para concentrar los datos de los Tipos+Volumen que ya hemos extraído. Conectando el nodo de “Element.ElementType” en su Puerto de Salida “ElementType” con el Puerto de entrada de “List.GroupByKey” de “Keys” y el Puerto de Salida del Nodo “Element.GetParameterValueByName” con el Puerto de Entrada de “List.GroupByKey” llamado “Keys”:

DidierRamirezDarjo_18-1724050788528.png

Una vez teniendo esto, lo conectaré a un nodo que hará la operación de suma para obtener los valores sumados de cada "Type" de los elementos: “Math.Sum”:

DidierRamirezDarjo_19-1724050788541.png

En este punto ya deberíamos tener las sumas de los valores para cada tipo y en cada categoría de modelo:

DidierRamirezDarjo_20-1724050788555.png

 

Ahora sumaremos ambas, para lograrlo debemos unificarlas en una sola lista con el nodo “List Create” (Tendrás que agregar un item más con el símbolo de +):

DidierRamirezDarjo_21-1724050788568.png

Te darás cuenta de que, naturalmente creara dos niveles de lista, puedes aplanar la lista por medio del nodo “Flatten List” (Esto te permitirá obtener un solo valor final, de no ser así el resultado consistirá en dos valores separados para cada categoría) y con otro nodo de suma obtener la suma final de los valores del Volumen para las dos categorías:

DidierRamirezDarjo_22-1724050788580.png

Redondearé la cantidad final para que solo muestre dos decimales por medio del nodo “Math.Round” (En el Puerto que pide el número de dígitos a redondear, usaré un nodo tipo “Number” con un valor de 2😞

DidierRamirezDarjo_23-1724050788589.png

En este punto daremos salida a esta información a Excel. Para esto crearé en una ubicación, un archivo de Excel completamente en blanco, solo requerimos que Dynamo lo pueda rastrear (Elige la ubicación que quieras, puede ser en tu escritorio o Carpeta de documentos, por ejemplo):

DidierRamirezDarjo_24-1724050788594.png

Para que Dynamo reconozca a este archivo y vacíe la información en él, usaré el Nodo: “Data.ExportToExcel”:

DidierRamirezDarjo_25-1724050788604.png

De tal forma que:

  • En el puerto de entrada “File Path” conectaré un nodo de tipo “File Path” en donde cargaré con “Browse” el archivo de Excel.
  • Crearé un “Code Block” en el cual el primer dato será el nombre de la Hoja de Excel en donde se vaciará la información. Recuerda que la Sintaxis es muy importante, el nombre de la hoja debe ser tal y como aparece en Excel.
  • Como segundo dato en este nodo, indicaré el número de Fila y de Columna, desde donde partirá a colocar la información. En este caso, como quiero que sea en ambos la primera celda, pondré el valor de cero.
  • En el Puerto de "Data” conectaré un nodo de tipo “List.AddItemToFront” con su puerto de salida tipo “list”. A este Nodo le conectaré un “Code Block” con el nombre del encabezado que quiero para la columna que almacenará la información, en este caso la llamaré: "Volumen Total para Estructura y Cimentación". Nuevamente, la Sintaxis es primordial, este nombre debe ir entre corchetes y tú decides el nombre, es totalmente libre.
  • Por último, en el puerto de este mismo nodo denominado como “List” Conectaré mi valor total de volumen obtenido. Recuerda que este valor, aunque sumado, también se puede tratar como una lista.   

El resultado es este:

 

DidierRamirezDarjo_26-1724050788614.png

 

DidierRamirezDarjo_27-1724050788625.png

Cuando ejecutes el script en este último paso, notarás que se abre Excel, mostrándote la información vaciada:

DidierRamirezDarjo_28-1724050788629.png

De esta manera, básicamente hemos logrado crear una Tabla Multicategoría, con la capacidad de sumar los valores de volumen para dos categorías completamente distintas.

 

Espero te sea de utilidad, de ser así no dejes de comentar y si consideras que puedes aportar para mejorar la rutina será bienvenido. Nos vemos en un mes para la siguiente parte que consistirá en crear parámetros compartidos e inyectar información en el modelo en el o los parámetros que queramos.

 

Saludos!