El Riesgo Oculto de los Elementos Espejados en Proyectos de Revit

Espejar objetos que tienen algún tipo de apertura y una orientación espacial definida es un problema de modelado muy común en Revit. Al trabajar con modelos arquitectónicos en Revit, los diseñadores se enfrentan regularmente a la tarea de copiar elementos de forma simétrica. Espejar es una herramienta cómoda y rápida, especialmente cuando se trabaja con soluciones de diseño típicas. Sin embargo, esta operación tiene un efecto secundario oculto que puede llevar a errores graves en el proyecto.

Hablamos de elementos espejados de las categorías "Ventanas", "Puertas" y "Paneles de Muro Cortina", que visualmente parecen correctos, pero lógica y paramétricamente pueden comportarse de manera diferente a sus contrapartes no espejadas.

¿Qué debes saber sobre la herramienta "Espejo"?

  • Por qué los elementos espejados son con mayor frecuencia un problema que una simple herramienta;
  • Qué riesgos representan para el diseño y la construcción;
  • Por qué es difícil rastrear este problema usando las herramientas estándar de Revit;
  • Cómo Dynamo + Revit API permiten detectar automáticamente dichos elementos, etiquetarlos y mostrarlos en planillas.

Espejo

¿Cómo maneja Revit el espejado?

Desde la perspectiva del usuario, espejar es simplemente reflejar un elemento respecto a un eje.
Desde la perspectiva del Revit API, es un cambio en la orientación del sistema de coordenadas local del elemento, donde:

  • la geometría permanece visualmente correcta;
  • la lógica del lado "izquierdo o derecho" cambia;
  • algunos parámetros y dependencias pueden comportarse de manera diferente.

Es importante entender:
Un elemento espejado no es lo mismo que un elemento rotado.
La rotación no cambia la orientación del sistema de coordenadas del elemento, pero el espejado sí lo hace.

¿Por qué esto es crítico específicamente para ventanas, puertas y muros cortina?

Los elementos de las categorías "Ventanas", "Puertas" y "Paneles de Muro Cortina" son particularmente sensibles al espejado por las siguientes razones:

  • Dirección de apertura: las puertas y ventanas pueden "abrir hacia el lado incorrecto";
  • Las planillas no distinguen versiones izquierda/derecha: una cosa en el plano de planta, otra en la planilla;
  • El elemento real puede fabricarse en la configuración incorrecta, y el cómputo de cantidades se vuelve incorrecto;
  • El error se detecta demasiado tarde, durante la instalación;
  • Los paneles de muro cortina forman parte de la categoría "Muro Cortina" (muros) y heredan el espejado.

Puerta, ventana y muro cortina

Ejemplos visuales de errores en la etapa de construcción

La etapa más problemática puede ocurrir cuando los planos con estos errores ya han llegado a obra. Los problemas más frecuentes son:

  • los elementos pueden tener distintas holguras de instalación;
  • las aperturas y las piezas embebidas quedan en el lado incorrecto;
  • se producen interferencias con los sistemas de ingeniería.

Un ejemplo claro de cómo espejar una puerta genera un cómputo incorrecto en la planilla: en el plano de planta, las dos puertas obviamente deberían etiquetarse de manera diferente porque tienen configuraciones distintas, pero la planilla no ve la diferencia y las cuenta como idénticas:

Ejemplo de problema de espejado

¿Cómo encontrar objetos espejados problemáticos?

Revit no informa directamente que un elemento está espejado y no puede mostrar automáticamente dichos objetos en una planilla. La única opción es revisar visualmente todas las puertas, ventanas y muros cortina, y verificar si su orientación espacial coincide con lo especificado en sus propiedades.

La solución está en el Revit API

Las categorías estudiadas en Revit tienen el parámetro "Mirrored" necesario, que indica claramente que el objeto ha sido espejado, pero solo se puede acceder a él a través del API. Para resolver este problema, utilizaremos automatización en Dynamo.

Dynamo es un entorno de programación visual que permite automatizar y gestionar paramétricamente un modelo de Revit sin escribir grandes cantidades de código. Ventajas clave:

  • Trabajo sin programación tradicional: la lógica se ensambla a partir de nodos;
  • Flexibilidad: puedes resolver tareas no estándar que Revit "de fábrica" no puede manejar;
  • Integración con el Revit API mediante Python: si es necesario, puedes crear algo "casi como un plugin".

Concepto de la solución usando Dynamo y Revit API

La solución se construye según el siguiente principio:

  • Recopilar elementos de las categorías requeridas en todo el proyecto: puertas, ventanas y paneles de muro cortina;
  • Filtrar los objetos innecesarios de estas categorías: alféizares, tapajuntas, etc.;
  • Verificar el valor del parámetro "Mirrored" para cada elemento y seleccionar todos los que tengan el valor true;
  • Para los objetos espejados obtenidos, escribir el valor "Mirrored" en el parámetro "Comments"; para los demás, limpiar el parámetro "Comments" (se puede usar cualquier otro parámetro del sistema o compartido en Revit);
  • Adicionalmente: mostrar los IDs de los elementos espejados en el Dynamo Player.

Script de Dynamo

Escritura del script de Dynamo

1. Recopilar todos los elementos de las categorías requeridas

Category.ByName

En el nodo "Code Block", ingresa el siguiente código y recopila todos los elementos usando "All Elements of Category":

Category.ByName("OST_Doors");
Category.ByName("OST_Windows");
Category.ByName("OST_CurtainWallPanels");

2. Filtrar los elementos obtenidos

List.FilterByBoolMask

Pasa los elementos de la categoría requerida a un nodo "Code Block", donde obtenemos el nombre del Type como cadena de texto:

el.Name;

Envía las cadenas de Type resultantes al siguiente "Code Block", donde buscamos los tipos que contienen "Window flashing" o "Window sill":

String.Contains(el, "Window flashing")||String.Contains(el, "Window sill");

Luego fíltralos pasando los valores true o false resultantes a la entrada "Mask" del nodo "List.FilterByBoolMask". Esto produce la lista final de elementos para verificar el espejado.

3. Obtener los elementos espejados

Objetos espejados

Ahora necesitamos obtener el valor del parámetro "Mirrored" para los elementos obtenidos. El nodo Python Script y el siguiente código nos permiten acceder a él:

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)

items = UnwrapElement(IN[0])

def IsMirrored(item):
	if hasattr(item, "Mirrored"):
		return item.Mirrored
	else: return False


if isinstance(IN[0], list): OUT = [IsMirrored(x) for x in items]
else: OUT = IsMirrored(items)

En este caso, lo más sencillo es usar el nodo Python Script y definir la lógica directamente. Luego usa el ya conocido "List.FilterByBoolMask" para filtrar los elementos espejados y obtener las dos listas requeridas.

4. Escribir datos en los parámetros del elemento

SetParameterByName

Para escribir información sobre el espejado del elemento en el parámetro "Comments", pasa los elementos problemáticos a un "Code Block" y usa el método:

el.SetParameterByName("Comments", "Mirrored");

Es decir, asignamos la palabra "Mirrored" al comentario del elemento espejado.
Para los elementos no espejados, limpiamos el valor del parámetro:

el.SetParameterByName("Comments", "");

5. Mostrar los IDs de los elementos espejados

Pasa la lista de elementos espejados a otro nodo Python Script para obtener sus IDs:

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)

def GetId(item):
	if hasattr(item, "Id"): return item.Id.IntegerValue
	else: return None

items = UnwrapElement(IN[0])

if isinstance(IN[0], list): OUT = [GetId(x) for x in items]
else: OUT = GetId(items)

Luego envía los IDs obtenidos al nodo "Watch". Adicionalmente, puedes habilitar el modo "Is Output" en las propiedades del nodo "Watch" para mostrar los datos en el Dynamo Player.

Procesamiento de los resultados obtenidos

Para trabajar con los elementos espejados procesados por el script, puedes usar filtros y planillas, lo que facilita su búsqueda en proyectos grandes. Por ejemplo, busca usando una planilla "Multi-Category" preparada con la condición de filtro "Comments" igual a "Mirrored":

Planilla

Tras obtener dicha lista, los objetos espejados se corrigen con mayor frecuencia de forma manual.

Conclusión

El espejado en Revit no es simplemente una técnica inofensiva para acelerar el modelado, sino una fuente potencial de errores sistémicos que pueden pasar desapercibidos durante mucho tiempo. Esto es especialmente crítico para ventanas, puertas y paneles de muro cortina, donde la orientación del elemento afecta directamente las planillas, la fabricación y la instalación.

El uso de Dynamo en combinación con el Revit API permite sacar a la superficie este problema oculto: detectar automáticamente los elementos espejados, etiquetarlos claramente y controlarlos a través de planillas.
Implementar scripts de validación de este tipo es un paso hacia un modelo BIM más confiable, menor riesgo en la construcción y mayor calidad de la documentación en general.

Descargar archivo de Revit Descargar archivo de Dynamo