Hace un año, mi equipo pasaba 4 horas cada viernes renombrando vistas del modelo. Cuatro horas. Literal. Una ingeniera junior con 150 vistas abiertas, una lista de Excel al lado, cambiando nombres a mano. "PLANTA NIVEL 1" por "PLANTA-N01". Y así con 150.
Un viernes por la tarde le dije: "¿Y si intentamos algo diferente?" Le instalé pyRevit en su laptop. Le escribí un script de 30 líneas. Lo corrió. 150 vistas renombradas en 2 segundos. Se quedó en silencio. Después me dijo: "¿Por qué no me enseñaron esto antes?"
Desde ese día, todo lo que hacemos más de 3 veces en Revit lo automatizamos. Y te voy a mostrar exactamente cómo.
El Límite del Visual Scripting
Dynamo es increíble. Permite a arquitectos e ingenieros automatizar tareas sin necesidad de saber programar. Pero, en modelos enormes de 5GB con links anidados, Dynamo se vuelve lento.
Esa "sopa de fideos" de 300 nodos es difícil de mantener y exige mucho a la memoria RAM. Aquí es donde entra pyRevit y la Revit API.
Si Dynamo es como andar en bicicleta eléctrica, la Revit API pura con C# es pilotar un avión de combate. Python a través de pyRevit es el punto intermedio: manejar un auto deportivo automático.
¿Qué es pyRevit y Por Qué Deberías Instalarlo Hoy?
pyRevit (creado por Ehsan Iran-Nejad) es un complemento Open Source para Revit. Te permite crear botones nativos en la interfaz de Revit que ejecutan scripts de Python al instante.
Se acabaron los problemas de instalación de paquetes. Solo compartes una carpeta en tu red, y todos los Revit de tu empresa se actualizan automáticamente con tus nuevos botones mágicos.
Tu Primer Script en Python para Revit
Vamos a resolver un problema clásico: obtener la lista de todos los muros del proyecto y cambiar un parámetro. Hacer esto con la Revit API de Python es elegante y requiere pocas líneas.
El lenguaje utilizado es IronPython (Python integrado en .NET).
El Código (Explicado)
from Autodesk.Revit.DB import FilteredElementCollector, BuiltInCategory, Transaction
doc = __revit__.ActiveUIDocument.Document
muros = FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Walls).WhereElementIsNotElementType().ToElements()
t = Transaction(doc, "Marcar Muros de Python")
t.Start()
contador = 0
for muro in muros:
parametro = muro.LookupParamete
<blockquote><strong>⚠️ Ojo en obra:</strong> No confundas el modelo virtual con la estructura real. El acero modelado en Revit no es el acero que el fierrero va a doblar. Siempre hay tolerancias de campo.</blockquote>
r("Comments")
if parametro and not parametro.IsReadOnly:
parametro.Set("Modificado_Por_Python")
contador += 1
t.Commit()
print("Éxito. Se modificaron {} muros casi al instante.".format(contador))
Desglosando la Magia:
- FilteredElementCollector: Base de cálculos rápidos en la API. Actúa en la base de datos C++ de Revit, extrayendo solo los IDs de los muros en milisegundos.
- Transactions: No puedes cambiar nada en el modelo sin "abrir la bóveda" (Start Transaction) y "cerrarla" (Commit). Esto protege el archivo de corrupciones.
¿Por Dónde Empezar a Estudiar?
La curva de aprendizaje para la Revit API puede ser intimidante. La documentación oficial de Autodesk está en C# y es rígida, pero traducirla a Python se vuelve natural con la práctica.
Mi hoja de ruta recomendada:
- Aprende Python Básico: Listas, Diccionarios, Bucles For, Clases y Objetos. Un curso gratis de YouTube es suficiente.
- Descarga pyRevit y estudia su carpeta "extension": Ehsan incluyó docenas de botones pre-hechos. Haz clic con
Alt + Shift + Click_izquierdo en cualquier botón y se abrirá su código fuente.
- Familiarízate con RevitLookup: Es una herramienta OBLIGATORIA. Te permite explorar la "Matrix" detrás de cualquier elemento haciendo clic sobre él.
- Foros: El foro oficial de DynamoBIM - Developer y el de pyRevit son minas de oro donde expertos comparten fragmentos de código diario.
Conclusión
Saber Dynamo en 2024 te hace atractivo como empleado. Saber programar en la Revit API usando Python/C# en 2025/2026 te convierte en irreemplazable.
Con pyRevit, puedes construir tus propios plugins, ahorrando a tu constructora licencias de add-ins ajenos y creando herramientas a medida de la normativa nacional.
Si deseas profundizar en este tema, considera adquirir mi curso en Gumroad.
📚 Fuentes y Referencias
El código que uso para automatizar tareas repetitivas
Script: Renombrar vistas masivamente
"""Renombrador masivo de vistas - Nomenclatura ISO 19650"""
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from pyrevit import revit, script
VIEW_TYPE_MAP = {
ViewType.FloorPlan: "PLANTA",
ViewType.CeilingPlan: "REFLEJO",
ViewType.Elevation: "ELEVACION",
ViewType.Section: "SECCION",
}
with revit.Transaction("Renombrar vistas"):
views = FilteredElementCollector(revit.doc).OfClass(View).ToElements()
for view in views:
if view.IsTemplate:
continue
prefix = VIEW_TYPE_MAP.get(view.ViewType, "VISTA")
level = view.GenLevel
if level:
view.Name = f"{prefix}-{level.Name}"
Resultados del script
| Métrica | Antes (manual) | Después (script) | Ahorro |
|---|
| Tiempo | 4 horas | 30 segundos | 99.8% |
| Errores | 5-10 | 0 | 100% |
| Vistas | ~150 | ~150 | — |
Preguntas frecuentes
📚 Artículos relacionados que te pueden interesar:
¿Puedo crear plugins completos con pyRevit?
Sí. pyRevit soporta scripts de comando, hooks de eventos, y formularios WPF.
¿Necesito licencia especial para usar Revit API?
No. La API está incluida en todas las licencias de Revit (excepto Revit LT).
Mejores prácticas de pyRevit en producción
| Práctica | Descripción | Impacto |
|---|
| TransactionManager | Siempre usar para cambios en modelo | Evita corrupción |
| Error handling | Try/except en cada script | Estabilidad |
| Logging | Registrar ejecuciones | Trazabilidad |
| Versionado Git | Control de cambios | Colaboración |
Checklist antes de distribuir un script