← Work

14

Dynamo Player Library — Envelope & Model Management

Workflow Automation — Tool Development

Year

2025

Location

Naples, Italy

Role

Developer & BIM Coordinator

Team

GPA Ingegneria Srl — Naples, Italy. Developed with AI-assisted code generation (Claude, ChatGPT).

Tools

DynamoDynamo PlayerRevit APIbimorphNodesRhythmWombatDynamoarchi-labAI-Assisted Development
Dynamo Player Library — Envelope & Model Management

DynamoPlayer Deployment

All scripts in this library are built for Dynamo Player — Revit’s simplified one-click execution interface that runs a Dynamo graph without exposing the visual programming canvas. The engineer sees only the declared input parameters (sliders, booleans, dropdowns) and a play button. No graph knowledge is required; no nodes are visible. This deployment model makes the scripts usable by any member of the project team, not only those trained in Dynamo, and integrates cleanly into standard drawing production workflows.

The five scripts cover three areas: CAD file management, visual documentation (wall legends), and building envelope coordination.


CAD Housekeeping

DYN-00_CAD_Delete Imported CAD and DYN-00_CAD_Delete Linked CAD address one of the most persistent sources of Revit model bloat: accumulated CAD geometry left over from coordination rounds, consultant deliverables, and early-stage site surveys.

Revit treats imported and linked CAD differently internally. Imported CAD — geometry pasted directly into the model — becomes a permanent part of the Revit file and increases model size, slows graphics, and introduces extraneous line weights into every exported sheet. Linked CAD is held by reference but clutters the model browser and creates dependency chains that break on file moves. The two scripts handle each category independently.

Both use bimorphNodes.CAD.ReportInstances to interrogate the document for all CAD instances, returning separate lists for links and imports. A Refresh boolean input triggers re-evaluation without re-running Dynamo manually. Element.Delete then removes every element in the target category in a single transaction. A task that otherwise requires hunting through the Revit model browser — expanding the CAD links section, identifying each entry, right-clicking to unload and remove — is complete in one click.


Wall Classification Legend

DYN-00_Legends_Create Wall Legend generates a color-coded wall classification legend directly inside the Revit document, using live view filters rather than hand-drawn legend components.

The script exposes four inputs:

  • Spacing (mm) — distance between legend sample elements in the generated grid
  • Colour 01–03 — three ARGB colour strings (default: red 255,0,0, gold 255,215,0, turquoise 72,209,204) that define the classification colour range

How it works. The script collects all wall types in the model and reads two type parameters: Type Mark and Component Type. Component Type is GPA’s internal classification field that groups wall types into structural, envelope, partition, and service categories. The script groups walls by this value, then for each group:

  1. Creates a ParameterFilterElement.ByRules filter scoped to the Walls category, matching elements whose Component Type equals the group value
  2. Builds an OverrideGraphicSettings object with a solid fill colour selected from the defined colour range — the ARGB string is split and converted to an RGB integer using b*256*256 + g*256 + r to produce Revit’s internal colour format
  3. Applies the filter and its overrides to the active view via View.SetFilterOverrides
  4. Places sample wall elements at computed grid positions using Vector.ByCoordinates offsets at the declared spacing, with Type Mark text notes positioned above each sample

The result is a live legend whose colours update automatically if wall types are reclassified — because the legend is driven by view filters and parameters, not static linework. Adding a new wall type to Component Type causes it to appear in the legend on the next script run with no manual drafting.


Thermal Bridge Placement — Exterior Window Sills

DYN-00_M3D_Correzione Ponti Termici Imbotti automates the placement of Imbotte thermal break families at every exterior window location in the model.

Italian building regulation (D.Lgs. 192/2005 and NZEB requirements) requires detailed thermal bridge modelling at window reveals. The standard GPA approach uses a parametric Imbotte family — a thin thermal break component placed at the window jamb — whose dimensions must match each window’s rough opening exactly. On a residential project with sixty or eighty windows of varying sizes, placing and parameterising these elements individually takes several hours and is error-prone: a missed window or an incorrectly transcribed dimension produces an energy model that diverges from the actual building.

The automation. ElementsOfCategory(OST_Windows) collects all windows. Element.GetLocation extracts each window’s insertion point. FamilyInstance.ByPoint places an Imbotte instance at that location using FamilyType.ByName to resolve the correct family and type. Modelical.GetElementRotation reads the host wall’s orientation, and FamilyInstance.SetRotation aligns the Imbotte to match — ensuring it sits flush in the reveal plane regardless of wall angle.

Rhythm.Revit.Elements.Elements.GetParameterValueByNameTypeOrInstance then reads five parameters from each window:

Window parameterImbotte parameter
WidthLarghezza
HeightAltezza
Spessore_MuroSpessore_Muro
ProfonditàProfondità
Spessore_CappottoSpessore_Cappotto

Spessore_Cappotto (insulation layer thickness) is the parameter that controls the thermal break depth — the value that directly determines the psi factor in the thermal bridge calculation. Transferring it automatically from the window family, where it is set by the energy consultant, to the Imbotte family, where it controls geometry, closes the data loop that manual placement leaves open.

Sixty windows, all correctly placed, oriented, and dimensioned, in one run.


Curtain Wall Clash Resolution

DYN-00_M3D_Set CWPanels Intersect Linked Element resolves a specific class of coordination conflict that occurs routinely in mixed construction systems: gap panels in a unitised curtain wall intersecting structural columns in a linked structural model.

On projects where a curtain wall facade meets an in-situ concrete or steel structure, the column grid rarely aligns perfectly with the curtain wall mullion grid. The result is that certain curtain wall panels — specifically the FF_Pannello_Fuga_5cm gap panels used at junctions — overlap with column geometry. In Revit, this clash is invisible in the architectural model alone; it only appears when the structural link is loaded and clash detection is run. Resolving it requires identifying every affected panel, unpinning it (Revit pins linked-element-adjacent components by default), and replacing it with an empty panel type.

The automation. archilab.Revit.Selection.Select.GetDocuments retrieves all loaded linked documents. LinkElement.OfCategory(OST_StructuralColumns) collects the structural columns from the linked model. In the host model, ElementsOfCategory(OST_CurtainWallPanels) collects all curtain panels; Rhythm.Revit.ElementFilter.ElementFilter.ByName filters this list to only FF_Pannello_Fuga_5cm panels — the clash-prone gap type.

Element.IntersectsElement runs pairwise clash detection between the filtered panel list and the structural column list, returning a boolean matrix. Panels with any true intersection are extracted. WombatDynamo.Element.Unpin releases the pin constraint on each clashing panel. WombatDynamo.FamilyInstance.SetType replaces the panel type with Pannello sistema vuoto:Vuoto — an empty, invisible panel that holds the mullion geometry intact while removing the conflicting solid from the clash zone.

The script eliminates every panel-column clash in a single run. Re-running after the structural model is updated catches any new clashes introduced by revised column positions or curtain wall layout changes.