AUTOMATIZACIÓN REVIT + DYNAMO: HOJAS DE VENTAS POR ÁREAS CON RECORTE INTELIGENTE Y VIEWPORT CENTRADO

 

En proyectos con múltiples apartamentos o tipologías, generar planos de ventas uno a uno es un ritual arcano y repetitivo. 

Este script de CPython3 para Dynamo (Revit 2023) crea, por cada valor de un parámetro de Área (p. ej. NVL_AR UNIDAD), una vista dependiente, recorta esa vista de acuerdo al contorno real (aunque tenga formas raras), crea la hoja con tu cajetín y centra el viewport automáticamente. 

Además, entiende múltiples idiomas/nomenclaturas (traductor + bSDD) y une varias Áreas si comparten el mismo valor (unidad + área común, por ejemplo).


Qué resuelve

  • Vistas dependientes por Unidad / Edificio / Tipología o por cualquier parámetro de Área.

  • Recorte por contorno real (no un bounding box tosco) con margen configurable.

  • Si una unidad tiene varias Áreas (principal + patio + parte común), el recorte incluye todas.

  • Hoja con cajetín elegido por nombre de Tipo (o Familia:Tipo) y viewport centrado.

  • Traducción y bSDD para que el script funcione con tus parámetros, aunque cambie el idioma.


Requisitos

  • Revit 2023 (probado en 2023.1)

  • Dynamo con nodo Python Script (CPython3)

  • Un Area Plan base (ej. “UNIDADES”) y Áreas con el/los parámetros que vas a usar.


Entradas del script (IN)


Conecta al nodo Python estos 11 strings/números:

  1. IN[0] – Parámetro de agrupación
    Nombre del parámetro de Área por el que agrupas (p. ej. NVL_AR UNIDAD) o palabras clave: Unidad, Edificio, Tipologia. También soporta bsdd:* si usas un mapeo bSDD.

  2. IN[1] – Tipo de cajetín
    Nombre exacto de Tipo o Familia:Tipo (ej.: A4 vacío o MiTitulo:A4).

  3. IN[2] – Hint del plano de áreas
    Fragmento del nombre de tu Area Plan base (ej.: UNIDADES).

  4. IN[3] – Prefijo de hoja
    Ej.: UV para Unidades, BV para Bloques, etc. (opcional; si no, usa uno por defecto).

  5. IN[4] – Índice inicial
    Número inicial para las hojas (1 → UV001, UV002…).

  6. IN[5] – Overrides JSON
    Mapea tus claves lógicas a nombres reales de parámetros (opcional).
    Ej.: {"Unidad":"NVL_AR UNIDAD","Edificio":"NVL_AR EDIFICIO"}

  7. IN[6] – Idioma
    es, en, fr o pt. El script trae sinónimos por idioma.

  8. IN[7] – bSDD JSON
    Mapas tipo {"bsdd:Unit":"NVL_AR UNIDAD"} (opcional).

  9. IN[8] – AreaScheme hint
    Parte del nombre del esquema de Áreas a usar (opcional; si lo omites, toma el del plano base).

  10. IN[9] – Parámetro para recorte
    Normalmente el mismo que IN[0], por ejemplo NVL_AR UNIDAD.

  11. IN[10] – Offset de recorte (pies)
    Margen alrededor del contorno. 10 cm ≈ 0.328084 ft.


Cómo usarlo (paso a paso)

  1. Prepara el plano base
    Ten un Area Plan con todas las Áreas visibles. Nómbralo con algo identificable (ej.: UNIDADES).

  2. Confirma los parámetros de Área
    Ej.: NVL_AR UNIDAD, NVL_AR EDIFICIO, NVL_AR TIPOLOGIA. Asegúrate de que las Áreas tengan valores llenos.

  3. Crea el grafo en Dynamo

    • Un nodo Python Script (CPython3).

    • Crea 11 nodos String/Number para las entradas (ver imagen de arriba).

    • Conecta todo al Python.

  4. Escribe los valores

    • IN[0] = NVL_AR UNIDAD

    • IN[1] = tu tipo de cajetín (ej.: A4 vacío)

    • IN[2] = UNIDADES

    • IN[3] = UV (o el prefijo que uses)

    • IN[4] = 1

    • IN[9] = NVL_AR UNIDAD

    • IN[10] = 0.328084 (10 cm


  5. Ejecuta
    El script creará por cada valor (A-101, A-102…) una vista dependiente, la recortará por la unión de las Áreas que comparten ese valor y generará una hoja con el cajetín y el viewport centrado.

Cómo recorta cuando hay varias Áreas por unidad


Script completo (cópialo tal cual en el nodo Python – CPython3)

Si te interesa puedes pedirlo en la caja de comentarios por un modico precio.


Centrado automático del viewport

Cuando se crea el Viewport, lo movemos al centro geométrico del cajetín usando ViewSheet.Outline y Viewport.GetBoxCenter():


Consejos de precisión

  • Offset: 10 cm suele verse bien. Si tu contorno tiene “orejas” o balcones, sube a 0.15 m ≈ 0.5 ft.

  • Varias Áreas por unidad: el recorte usa la unión de contornos por clave (ej. A-101).

  • Cajetín: puedes pasar solo el Tipo (A4 vacío) o Familia:Tipo para ser 100% específico.

  • Idioma & bSDD: si tus parámetros cambian de idioma o convención, usa IN[5] y IN[7] para normalizar sin tocar el código.


Solución de problemas

  • ¿El plano base es un AreaPlan?

  • ¿El AreaScheme que quieres está seleccionado (IN[8])?

  • ¿Los parámetros (NVL_AR UNIDAD…) existen en todas las Áreas?

  • ¿Los valores por unidad son consistentes?

  • ¿El cajetín existe con ese Tipo o Familia:Tipo?

  • ¿IN[10] (offset) es > 0?


Qué mejoras puedes sumar

  • Aplicar un View Template de “Ventas” a las vistas dependientes.

  • Escalado auto-fit del viewport (máxima área útil sin salir de márgenes).

  • Reglas de nomenclatura (A-101 → UV-101, por ejemplo).

  • Exportación PDF/DWG al vuelo (por paquete/nivel/torre).


Licencia y crédito

Úsalo, modifícalo y compártelo con tu equipo. Si te ahorró horas y café frío, cítanos en tu post:


“Script CPython3 Revit/Dynamo para hojas de ventas por áreas — ARQ. Roberto Hernández

Comentarios