Cómo programar un script de Dynamo para clasificar habitaciones automáticamente
La clasificación de habitaciones en Revit suele comenzar como una tarea sencilla y terminar convertida en una sucesión de filtros, comprobaciones y cambios manuales. Cuando el proyecto contiene cientos de espacios, plantas repetidas o varias fases, asignar categorías una por una introduce errores y dificulta mantener una información coherente.
Dynamo permite transformar esa operación en un proceso paramétrico. El script puede leer el nombre, el área, el nivel, la ocupación o cualquier otro parámetro de cada habitación y asignar una clasificación siguiendo reglas definidas por el equipo BIM. El resultado es un modelo más ordenado, con datos aprovechables en tablas, planos, mediciones y entregables de facility management.
Para que la automatización sea fiable no basta con conectar algunos nodos. Es necesario preparar los parámetros, definir prioridades entre reglas, controlar valores vacíos y proteger la información existente. Una estructura clara facilita también que otros usuarios comprendan el funcionamiento del grafo y puedan adaptarlo cuando cambien los criterios del proyecto.
Definir el objetivo de la clasificación
Antes de abrir Dynamo conviene establecer qué significa exactamente clasificar una habitación. El resultado puede ser una familia funcional, como oficina, circulación, aseo o almacén; una categoría de uso, como público, privado o técnico; o un código destinado a la explotación posterior del edificio. Cada propósito requiere campos y reglas diferentes.
La clasificación debe escribirse en un parámetro concreto de Revit. Puede tratarse de un parámetro compartido llamado Clasificacion_Habitacion, un campo de texto existente o un parámetro de proyecto aplicado a la categoría Rooms. Si el dato se utilizará en varios modelos, conviene que el nombre, el tipo y los valores permitidos sean idénticos en todas las plantillas.
También es importante decidir si el script modificará el nombre de la habitación o únicamente un campo adicional. Cambiar nombres puede afectar etiquetas, referencias y documentación, mientras que escribir en un parámetro independiente conserva el valor original. En la mayoría de los casos, separar la denominación visible de la clasificación interna ofrece mayor seguridad y trazabilidad.
Preparar el modelo de Revit
El grafo debe trabajar con habitaciones correctamente delimitadas. Una habitación sin límites, ubicada en una fase incorrecta o asociada a un nivel inesperado puede devolver un área igual a cero y provocar una clasificación errónea. Antes de ejecutar la automatización, es recomendable revisar las líneas de separación, los elementos delimitadores y la fase de cada espacio.
La selección inicial puede realizarse con el nodo Categories, escogiendo Rooms, y después con All Elements of Category. Si el modelo contiene varias fases, vínculos o opciones de diseño, será necesario añadir filtros adicionales. En proyectos complejos, seleccionar únicamente las habitaciones de la vista o de una fase específica evita escribir información en elementos que no forman parte del alcance.
Los parámetros utilizados como criterios deben tener valores previsibles. Por ejemplo, un área numérica debe estar expresada en unidades coherentes y los nombres de ocupación no deberían alternar entre Oficina, oficina y OFICINA. Dynamo puede normalizar mayúsculas, espacios y acentos, pero es preferible establecer una convención desde la plantilla.
Un control inicial puede incluir una tabla con habitaciones cuyo nombre esté vacío, área sea nula o nivel no coincida con el esperado. Así se separan los problemas del modelo de los problemas del algoritmo. El script no debe ocultar deficiencias de autoría: debe identificarlas y hacerlas visibles.
Convertir criterios en reglas
La lógica de clasificación debe expresarse como una matriz de decisiones. Una columna puede contener el criterio, otra la condición y otra el valor que se escribirá. Por ejemplo, una habitación cuyo nombre contenga “aseo” puede recibir la categoría Sanitario; si su nombre contiene “almacén” y su área supera cierto umbral, puede clasificarse como Almacén mayor.
El orden de evaluación es fundamental cuando una habitación cumple varias condiciones. Una regla específica debe tener prioridad sobre otra general. Si primero se asigna Oficina a todos los espacios que contienen determinadas palabras y después se busca Sala de reuniones, algunos elementos quedarán atrapados en la categoría inicial. Por eso conviene evaluar primero las excepciones y al final aplicar una clasificación genérica como Sin clasificar.
Dynamo ofrece varias formas de construir esta lógica. Los nodos String.Contains, String.ToLower, ==, >, && y || permiten crear condiciones legibles. Para listas de términos se pueden combinar List.Map, List.FilterByBoolMask y funciones de cadena. Cuando las reglas son numerosas, una tabla externa en Excel puede resultar más mantenible que una red extensa de nodos.
Una estructura habitual consiste en generar una lista de valores normalizados, evaluar cada regla y devolver un resultado paralelo a la lista original de habitaciones. La correspondencia entre elementos y resultados debe conservarse durante todo el proceso. Operaciones que ordenan o filtran listas sin mantener índices pueden terminar escribiendo una clasificación en la habitación equivocada.
Construir el grafo en Dynamo
El flujo básico comienza con la obtención de habitaciones, continúa con la lectura de parámetros y termina con la escritura del resultado. Los nodos Element.GetParameterValueByName permiten leer Name, Area, Level u otros campos personalizados. Después, varios nodos de decisión generan una lista de textos con la clasificación calculada.
Para escribir los valores, puede utilizarse Element.SetParameterByName. El nombre del parámetro se conecta como una cadena y la lista de clasificaciones se conecta como valor. Ambas listas deben tener la misma longitud y conservar exactamente el mismo orden. Si se usa un filtro intermedio, es aconsejable mantener también una lista de identificadores o índices para verificar la correspondencia.
Los bloques de código pueden simplificar expresiones repetitivas. Una condición como String.Contains(nombre, "oficina") puede integrarse en una función que reciba cada nombre y devuelva un resultado. Sin embargo, abusar de bloques opacos dificulta la revisión. En un entorno colaborativo suele ser preferible combinar nodos reconocibles con grupos de colores, nombres descriptivos y anotaciones.
Cuando el algoritmo crece, una secuencia en Python dentro de Dynamo puede centralizar la normalización y la evaluación de reglas. Este enfoque permite usar diccionarios, expresiones regulares y estructuras condicionales más compactas. Debe emplearse con una versión compatible con Dynamo y Revit, documentando las entradas, las salidas y las dependencias para evitar problemas al abrir el archivo en otro equipo.
Gestionar excepciones y datos incompletos
Un script profesional debe distinguir entre una clasificación válida y una clasificación inventada. Si una habitación no tiene nombre, no debe recibir automáticamente el valor de la primera regla disponible. Es mejor devolver Revisar, Sin nombre o Sin clasificar, según la convención establecida. Estos valores pueden filtrarse después en una vista o en una tabla de control.
También hay que proteger los parámetros bloqueados, de solo lectura o gestionados por una vinculación. Antes de escribir, el grafo puede comprobar si el parámetro existe y si admite edición. Cuando la habitación proviene de un modelo vinculado, normalmente no podrá modificarse desde el archivo anfitrión; en ese caso, el script debe informar del elemento en lugar de producir un error ambiguo.
Las unidades requieren atención especial. El área obtenida por Dynamo puede reflejar las unidades internas de Revit, mientras que los umbrales definidos por el usuario suelen estar en metros cuadrados. Si una regla depende del tamaño, hay que convertir la medida o establecer claramente en qué unidades se introducen los límites. Un error de conversión puede clasificar casi todas las habitaciones de forma incorrecta.
La salida del grafo debería incluir un resumen. Además de escribir el parámetro, puede generar listas de habitaciones actualizadas, elementos sin coincidencia y nombres de reglas aplicadas. Un informe de incidencias permite revisar el resultado sin inspeccionar manualmente cada espacio y facilita la auditoría del modelo.
Conectar la clasificación con la coordinación BIM
Una vez clasificados los espacios, el dato puede alimentar vistas, filtros de color, tablas de planificación y comprobaciones de coordinación. Por ejemplo, una vista puede mostrar en rojo las habitaciones sin categoría o diferenciar mediante colores las áreas públicas, técnicas y administrativas. Esto facilita detectar incoherencias antes de publicar planos o extraer mediciones.
La información también resulta útil para coordinar arquitectura con instalaciones MEP. Una clasificación consistente permite comparar habitaciones con terminales, equipos, cargas, difusores o requisitos de ventilación. Si una zona sanitaria aparece como oficina en el modelo arquitectónico, la discrepancia puede localizarse mediante tablas y reglas de revisión, en lugar de descubrirse durante una comprobación tardía.
Cuando los datos se destinan a operación y mantenimiento, conviene relacionar la clasificación con códigos de espacios, zonas, activos y requisitos de servicio. Los criterios de organización propios de facility management ayudan a pensar más allá de la documentación de obra y a preparar información útil para la explotación del edificio.
El parámetro de clasificación puede formar parte de exportaciones COBie, entregables IFC o informes internos, siempre que su nombre y sus valores estén definidos en los requisitos de información. Dynamo no sustituye esa especificación; la ejecuta de manera repetible y reduce el trabajo manual necesario para cumplirla.
Probar, documentar y mantener el script
La primera ejecución debe realizarse sobre una copia del modelo o sobre un conjunto pequeño de habitaciones. Conviene probar casos normales, nombres con acentos, campos vacíos, habitaciones muy pequeñas, espacios con varias palabras clave y elementos de fases diferentes. La prueba debe confirmar tanto los valores correctos como las excepciones esperadas.
Una técnica segura consiste en ejecutar inicialmente el grafo en modo de previsualización. En lugar de escribir de inmediato, se genera una lista con el nombre de la habitación, el área, la regla coincidente y la clasificación propuesta. Después de revisar esa salida, se activa el nodo de escritura. Este paso reduce el riesgo de alterar cientos de elementos por una condición mal conectada.
El archivo .dyn debe incluir un nombre claro, fecha de revisión y descripción de las entradas. Los grupos pueden organizarse en selección, lectura, normalización, reglas, validación y escritura. También es útil añadir una nota con los nombres exactos de los parámetros, las unidades de los umbrales y el comportamiento previsto para valores no reconocidos.
Una clasificación automática necesita mantenimiento cuando cambian las convenciones del proyecto. Si se añaden nuevas tipologías, se renombrarán espacios o se incorpora una fase distinta, las reglas deben revisarse. La gestión de versiones evita que cada usuario conserve una copia diferente del grafo y produzca resultados incompatibles.
Recomendaciones para un flujo estable
La automatización funciona mejor cuando el modelo, las reglas y el grafo se consideran partes de un mismo sistema. La persona responsable de BIM debería definir los valores permitidos, revisar los resultados y establecer cuándo se ejecuta el script: tras la autoría de espacios, antes de una entrega o como parte de una auditoría periódica.
- Utiliza un parámetro compartido con nombre y valores normalizados en todos los modelos.
- Mantén una categoría
Sin clasificarpara localizar rápidamente los casos pendientes. - Evalúa primero las reglas específicas y deja las condiciones generales para el final.
- Genera un informe de incidencias antes de escribir cambios definitivos en Revit.
- Guarda una versión controlada del grafo junto con sus instrucciones y dependencias.
Con esta estructura, Dynamo deja de ser una colección improvisada de nodos y se convierte en una herramienta de control de información. La clasificación automática de habitaciones será repetible, verificable y adaptable a distintos proyectos, mientras que el equipo podrá dedicar menos tiempo a editar datos y más a comprobar su calidad y utilidad.