DOCUMENTACIÓN DE PROYECTOS EN REVIT
• Gran parte del tiempo empleado en el desarrollo de proyectos de Arquitectura se dedica exclusivamente a la documentación.
• Aunque la utilización de Revit ha hecho mucho más eficiente el desarrollo de proyectos de Arquitectura, la documentación como tal sigue ocupando gran parte del tiempo.
• Con la llegada de Dynamo se ha hecho posible automatizar tareas en Revit, acortando los tiempos de ejecución y disminuyendo errores humanos en los proyectos.
• Como Especialista BIM me interesa en particular la documentación automatizada de proyectos en Revit, ya que personalmente he dedicado la mayor parte del tiempo a documentar manualmente.
En la primera parte del desarrollo del Script se utilizó éste diagrama de flujo de trabajo, donde primero se seleccionaron todos los Niveles del proyecto para luego crear las vistas en planta de cada Nivel. Una vez creadas las Plantas se les asignaron inmediatamente los nombres. La lista de los Niveles del proyecto se utilizó para crear los nombres de las Plantas Arquitectónicas y los nombres de las hojas que las contenían. Luego se creó un nodo para enumerar las hojas. Posteriormente, se hizo necesario crear un nodo para configurar la Escala de las vistas en planta, de modo que cupieran dentro de las hojas.


Al correr el script inicial para generar un primer set de planos se produjo este error que no permitía colocar las plantas arquitectónicas dentro de las hojas, indicando que el tamaño de las vistas era mayor al tamaño de las hojas. Sin embargo, como se puede evidenciar en la imagen de la derecha, las vistas generadas por el script a una escala 1:1000 son bastante pequeñas y no deberían tener problema al momento de colocarlas en las hojas. La escala a la que se pretende colocar las plantas es de 1:100, pero se puso inicialmente una escala mucho mayor para probar el script.



Al correr el mismo script en otro modelo pude comprobar que el script sí funcionaba. La diferencia entre el primer modelo y el segundo modelo es que el primer modelo está localizado en las coordenadas reales del proyecto, mientras que el segundo modelo está ubicado con respecto al punto 0,0,0. Adicionalmente, el primer modelo contenía elementos por fuera del modelo del edificio, y además muy distantes, incrementando el área de los “viewports” a colocar dentro de las hojas.
El proyecto que me propongo documentar es un centro comercial de 60.484m2 de área.
Desafíos: Organizar la información necesaria para documentar un proyecto arquitectónico en Revit y diseñar un flujo de trabajo que permita realizar el proceso de documentación de una manera eficiente. El Script que se maneja es de una cierta complejidad al tratarse de un proyecto de gran escala donde es necesario subdividir todas las plantas.
Como el edificio de centro comercial es bastante grande es necesario dividirlo en 4 bloques para poder generar la planimetría general a una escala 1:100. Para dividir el modelo se crearon 4 cajas de referencia (Scope Boxes) así que el siguiente paso es programar el script para que genere no sólo las vistas por niveles sino también las vistas de cada caja de referencia por cada nivel.
Nodos plantas Arquitectónicas
Nodos plantas de Cielo raso
Nodos plantas Arquitectónicas
Nodos plantas de Cielo raso
Luego se definieron los diferentes Inputs (entradas de usuario) del Script para poder hacerlo funcional en Dynamo Player.
Al correr el script uniendo las listas de Plantas Arquitectónicas y Plantas de Cielo Raso, todas las plantas se generaron automáticamente, al igual que todas las hojas y cada planta fue colocada dentro de la hoja correspondiente. Sin embargo, ahora tenemos la necesidad de ordenar las plantas en una forma distinta a como las organizó el sistema. Aparentemente, están ordenadas de forma alfa-numérica, pero por alguna razón, las plantas de los niveles 1 y 2 se están intercambiando de puesto. En la siguiente fase de desarrollo del script se corregirá la organización de los planos.

El resultado obtenido con el primer desarrollo del script es un set de planos que comprende Plantas Arquitectónicas y Plantas de Cielo Raso a escala 1:500. En la segunda fase de desarrollo del script el objetivo es automatizar la creación de Plantas Arquitectónicas y de Cielo Raso por Bloques y por niveles a escala 1:100. A la final, el número total de planos debe ser 56. Igualmente, se debe ajustar la organización de los planos, la asignación del Viewport y la longitud de la línea de título de vista definido por el usuario.
En la segunda fase de desarrollo del script los objetivos son:
• Automatizar la creación de Plantas Arquitectónicas y de Cielo Raso por Áreas y por Niveles a escala 1:100
• Igualmente, se debe ajustar la organización de los planos
• Automatizar la asignación del Viewport y la longitud de la línea de los títulos de vista definidos por el usuario
Prefijo
Plantas Arq.
Inicio Numeración
Plantas Arq.
Escala
Plantas Arq.
Nombrar Plantas Arq.
Enumerar Plantas Arq.
Crear Plantas Arquitectónicas
Escalar Plantas Arq.
Niveles
Arquitectónicos
Formato Hojas
Escala Cielo Rasos
Inicio Numeración
Cielo Rasos
Crear Plantas Cielo Rasos
Prefijo Plantas
Cielo Rasos
Nombrar Plantas Cielos
Escalar Plantas Cielos
Unificar lista nombres vistas
Unificar lista numeración
Unificar lista de vistas
Enumerar Plantas Cielos
Estructura del Script preliminar por grupos. A la izquierda, se visualiza la interfaz de usuario (entradas y controladores, en azul) luego la selección de los Niveles del proyecto (morado) y posteriormente los nodos de creación de plantas arquitectónicas y de cielo raso, hojas, numeración y nomenclatura de planos, divididos en dos grupos: verde= Plantas arquitectónicas y naranja= Plantas de Cielo raso. Por último, hay unos nodos de creación de listas para unificar la información y finalmente tenemos el nodo de creación de Sheets (hojas) que recibe toda la información unificada y crea las hojas junto con toda la información indicada.
Nodo de creación de Hojas
Configuración Dynamo Player:
Para configurar el script para Dynamo Player se definieron 7 entradas de usuario (Inputs) tal y como se muestra en la imagen a la izquierda.
Interfaz de Usuario
Prefijo Plantas Arq.
Inicio Numeración
Plantas Arq.
Formato Hojas
Inicio Numeración
Cielo Rasos
Prefijo Plantas
Cielo Rasos
Escala Plantas Arq.
Escala Plantas Cielo Rasos
Niveles Arquitectónicos
Nombrar Plantas Arq. Enumerar Plantas Arq.
Crear Plantas Arquitectónicas
Escalar Plantas Arq.
Unificar lista nomenclatura
Unificar lista numeración
Crear Plantas Cielo Rasos
Escalar Plantas Cielos
Enumerar Plantas Cielos
Nombrar Plantas Cielos
Unificar lista de vistas
Creación de Hojas
Interfaz de Usuario
Prefijo Plantas Arq.
Inicio Numeración Plantas Arq.
Formato Hojas
Inicio Numeración
Cielo Rasos Niveles Arquitectónicos
Prefijo Plantas
Cielo Rasos
Escala Plantas Arq.
Escala Plantas Cielo Rasos
Crear Plantas Arquitectónicas
Nombrar Plantas Arq.
Crear Plantas Cielo Rasos
Nombrar Plantas Cielos
Filtrar Plantas Cielos
Luego de filtrar y ordenar las vistas obtenemos éste listado de planos generales.
El objetivo ahora es configurar el Script para generar las vistas por Áreas y por Niveles, donde las vistas de las Áreas sean vistas Dependientes de las plantas generales por Nivel, tal y como se muestra en el listado arriba.
(Áreas)
Nodos selección de Áreas (Área A, B, C y D) (Áreas)
Nodos plantas Arquitectónicas por áreas
Nodos plantas de Cielo raso por áreas
Luego de comprobar el Script para la generación de Plantas Arquitectónicas por Áreas en todos los niveles del edificio, se hizo el mismo procedimiento para la generación de las Plantas de Cielo Raso por áreas y se excluyeron los niveles en donde no hay cielo rasos. En la imagen de arriba se puede visualizar el diagrama de flujo de trabajo resultante.
El resultado son dos grupos de vistas de Plantas Generales por Niveles y sus respectivas vistas por Áreas (Dependientes) como se muestra arriba.
Se ajustó el Script hasta que cada vista de Área tuviera el área correspondiente (Scope Box) y la nomenclatura según la vista.
Script creación de Vistas por Áreas
Nodos de numeración, nomenclatura y creación de Hojas
El siguiente paso es crear las Hojas para poner las vistas por áreas y nombrarlas y enumerarlas correspondientemente, completando el Script de creación de Vistas por Áreas (izq.) con los nodos de numeración, nomenclatura y creación de hojas utilizados en el primer Script (arriba)
Nodos de numeración, nomenclatura y creación de Hojas
El siguiente paso es crear las Hojas para poner las vistas por áreas y nombrarlas y enumerarlas correspondientemente, completando el Script de creación de Vistas por Áreas con los nodos de numeración, nomenclatura y creación de hojas utilizados en el primer Script. Arriba se muestra el diagrama de flujo de trabajo resultante.
Sin embargo, al correr el Script, dada la complejidad que tiene en éste punto, ahora toma mucho tiempo para procesar y si hay errores es difícil hacer ajustes y volver a correr el script rápidamente, así que es necesario subdividir el proceso para que el script se corra por etapas y hacer más fácil su verificación.
Al momento de crear el primer grupo de planos surgió un problema porque la lista de Nomenclatura y la lista de Vistas (plantas) estaban organizadas en sub-listas por cada nivel, mientras que la lista de Numeración estaba organizada como una sola lista, tal y como se muestra en la imagen.
Para poder enumerar las Hojas con números consecutivos tuve que aplanar (Flatten) la lista de Numeración, así que el siguiente paso es aplanar las otras dos listas para que se pueda unir la información.
Como las vistas de las plantas están divididas por niveles, cuando se intentan enumerar directamente la numeración se divide de la misma forma, creando varias listas del 201 hasta el 204
Para poder enumerar las Hojas que contienen las vistas con números consecutivos tuve que aplanar la lista de numeración usando el nodo List.Flatten tal y como se muestra en la imagen.
El siguiente paso fue aplanar las otras dos listas usando el nodo List.Flatten en cada uno de los dos grupos de vistas para que toda la información estuviera organizada en listas consecutivas y para que se pudiera vincular toda la información a través del nodo Sheet.ByNameNumberTitleBlockAndView.
Los grupos de vistas que se unen en éste conjunto de planos son:
1. Plantas Arquitectónicas (Áreas A, B, C y D)
2. Plantas de Cielo Raso (Áreas A, B, C y D)
Al correr el Script se generan todas las vistas correctamente, pero al generar los planos (Hojas) el orden en que se crean los del Nivel 1 y del Nivel 2 se invierte, creando primero los planos del Nivel 2 y luego los del Nivel 1.
Esto sucede porque seguramente, el Nivel 1 fue creado posteriormente al Nivel 2. Es probable que, en princìpio existieran solamente los Niveles 0,0 y 1, y luego, al surgir la necesidad de crear un nivel intermedio entre ambos se renombrara el Nivel 1 como Nivel 2 y se creara un nivel nuevo llamado Nivel 1, a una altura aproximada de 1m. Sin embargo, Revit identifica el Nivel 2 como precedente al Nivel 1, y por eso invierte el orden de los planos.
Para ordenar las vistas y los nombres de las vistas, utilicé un nodo List.Sort inmediatamente después de unificar ambas listas.
Para ordenar las vistas y los nombres de las vistas, utilicé un nodo List.Sort inmediatamente después de unificar las listas de ambas.
Aquí se evidencia que no es necesario unificar ambos sets de planos, ya que ambos manejan numeraciones distintas, entonces, se pueden independizar en dos grupos.
En éste punto independizamos la creación de planos en dos grupos tal y como se muestra en el gráfico:
1. Plantas Arquitectónicas (Áreas)
2. Plantas de Cielo Raso (Áreas)
Como se ve en la diapositiva anterior, no es necesario unificar ambos sets de planos, ya que ambos manejan numeraciones distintas, entonces, se pueden independizar en dos grupos.
Plantas Arquitectónicas (Áreas)
Plantas Cielo Rasos (Áreas)
El siguiente paso es crear los sets de planos generales (Plantas arquitectónicas Generales y Plantas de cielo raso Generales). Para crearlos, es necesario hacer dos grupos más de nodos de nomenclatura, numeración y creación de hojas, tal y como se muestra en el diagrama.
Plantas Arquitectónicas (Generales)
Plantas Arquitectónicas (Áreas)
Plantas Cielo Rasos (Áreas)
Plantas Cielo Rasos (Generales)
Al independizar los procesos y dividirlos en grupos, se pueden disminuir la cantidad de procesos simultáneos si se utiliza un nodo Passthrough en medio de ellos. Esto con el propósito de simplificar la ejecución del Script y evitar que el sistema se bloquee o se ralentice demasiado al ejecutarlo.
Al utilizar un nodo Passthrough se divide el Script en 4 subprocesos, generando 4 sets de planos consecutivamente.
Plantas Arquitectónicas (Generales)
Plantas Arquitectónicas (Áreas)
Plantas Cielo Rasos (Áreas)
Plantas Cielo Rasos (Generales)
Passthrough Passthrough Passthrough
El objetivo inicialmente era configurar las vistas de las Áreas a una escala mayor que las plantas Generales, sin embargo, al intentar aumentar la escala de las plantas de Áreas desde el script Revit no podía colocarlas dentro de las hoja tal vez, porque los cortes generales atraviesan todo el proyecto y aumentan el alcance de las vistas. En éste caso, es necesario generar las vistas a la misma escala de las plantas generales y luego ajustarlas manualmente.
El objetivo inicialmente era configurar las vistas de las Áreas a una escala mayor que las plantas Generales, sin embargo, al intentar aumentar la escala de las plantas de Áreas desde el script Revit no podía colocarlas dentro de las hojas, ya que los cortes generales atraviesan todo el proyecto y aumentan el alcance de las vistas. En éste caso, es necesario generar las vistas a la misma escala de las plantas generales y luego ajustarlas manualmente.
En las imágenes se visualizan algunos cortes generales y su alcance en las vistas generales.
Para corroborar el funcionamiento del script lo probé con otro proyecto. Para empezar, los planos no se ordenaron correctamente, Revit ordenó los planos alfabéticamente, anteponiendo los niveles 10 – 13 a los niveles 2 - 9. El otro problema fue el hecho de tener niveles arquitectónicos y estructurales dentro de un mismo modelo, porque el script no diferencia entre unos y otros, y genera todas las plantas dentro de un solo set, mezclando todos los planos, lo cual es equivocado, porque las plantas estructurales deberían estar en un set independiente (Structural Plans). Igualmente, se generaron plantas de cielo raso para los niveles arquitectónicos y para los niveles estructurales, lo cual es un error. También, como se ve en las listas de planos arriba, los planos estructurales tienen el prefijo de “PLANTA ARQ.” que está definida en el script pero no corresponde con el tipo de vistas.
La conclusión es que se necesita un cierto grado de “personalización” o de ajuste del script según las particularidades del modelo que se va a documentar.
Para regresar las vistas al orden original desactivé los nodos List.Sort que había colocado en el proyecto anterior y conecté las listas directamente al nodo de creación de hojas.
En éste caso, las vistas vuelven a organizarse de acuerdo al orden de creación de los niveles en el modelo de Revit, lo cual es problemático, porque como vemos en este caso tampoco coincide el orden de creación de los niveles con la altura de cada uno de ellos.
Tuve que desarrollar otro script para organizar los niveles de cualquier edificio (diapositiva 50)
Igualmente, al ejecutar el script en otro modelo, pude identificar otros nodos que debían ser entradas de usuario (Inputs) como los nombres de las Áreas y los filtros de los niveles que no se incluyen en ninguno de los sets.
Sin embargo, los filtros de los niveles no se pueden estandarizar, porque, de entrada habría que tener un número definido de niveles a excluir, y en realidad, éste es un número que puede variar en cada proyecto o puede incluso no necesitarse. Si se crean las entradas de filtro de niveles y no se agrega ningún número, o no todos los planeados, no se ejecuta el nodo.
La conclusión es nuevamente, que se necesita un cierto grado de “personalización” o de ajuste del script según las particularidades del modelo que se va a documentar.
Si el proyecto no tiene Áreas se debe usar otro script. El presente script es para un proyecto que tenga Scope Boxes (cajas de referencia) y se quiera documentar con base en ellas. En éste punto No se puede documentar las Áreas a una escala menor que las plantas Generales, porque las vistas de Áreas son copias Dependientes de las vistas Generales, y por lo tanto, no pueden tener escalas distintas.
Para tener una escala diferente en ambos casos, se necesitaría crear un tercer grupo de vistas Duplicadas (no Dependientes) de las plantas originales usando el nodo View.Duplicate y conectándolo a las plantas originales, tal y como se muestra en la imagen arriba.
Para tener una escala diferente en ambos casos, creamos un grupo de vistas Duplicadas (no Dependientes) de las plantas originales usando el nodo View.DuplicateView tal y como se muestra en la imagen arriba. Luego, creamos las vistas de Áreas (Dependientes) a partir de las copias, para independizarlas de las plantas originales y poder manejar diferentes escalas.
El objetivo de que las plantas de las Áreas sean dependientes de un grupo de plantas Generales es que sea más fácil modificar su visualización de manera controlada desde las plantas de las que dependen.
La creación de un grupo de vistas Duplicadas (no Dependientes) de las plantas originales usando el nodo View.Duplicate y posteriormente la de las vistas de Áreas (Dependientes) a partir de las copias, funcionó para independizar ambos grupos de plantas y poder así manejar diferentes escalas.
Arriba se pueden visualizar las plantas generadas por el script con las últimas modificaciones (plantas originales y las respectivas copias, junto con las vistas dependientes por Áreas)
Sin embargo, a pesar de que se independizaron los grupos de planos para manejar diferentes escalas, Revit solo coloca las vistas a una escala muy grande, por lo que sigue siendo necesario ajustar las escalas de las vistas manualmente luego de haber ejecutado el script. Si se inserta un valor de escala menor a 1:100 en este caso, Revit no coloca las vistas y genera el siguiente error:
Para organizar los niveles del modelo de Revit, desarrollé éste script:
En éste script estoy identificando los niveles mayores o iguales a Cero y los estoy filtrando de los que son menores a Cero usando un nodo List.FilterByBoolMask. De ésta forma separo los niveles del edificio y los niveles de sótano en dos listas.
Luego organizo los niveles por altura usando un nodo List.Sort para cada lista y finalmente, para organizar los niveles de sótano invierto el orden de la lista de niveles de sótano (<0,00) usando un nodo List.Reverse.
El siguiente paso es Reordenar la lista de Niveles basada en la lista de Alturas para crear una nueva lista de Niveles ordenada por alturas que será conectada a las entradas de niveles del gráfico de documentación para poder crear las plantas en orden de altura.
Reordenar lista Niveles
Organización de Niveles
Luego de adicionar el algoritmo para la organización de los niveles, ésta es la estructura resultante del algoritmo de documentación gráfica automatizada para Revit. El algoritmo funcionó correctamente.