Dynamo Python Tips — Digitteck
Dynamo Python Tips
dotnet·10 June 2018·4 min read

Dynamo Python Tips

The Dynamo Python Script node runs IronPython 2.7 with access to the full .NET framework and several pre-loaded Revit assemblies. These tips cover the most commonly needed operations: creating Revit geometry, modifying the model safely inside a transaction, retrieving elements by ID, and reading document settings.

Autodesk.Revit.DB — Creating Geometry

The Autodesk.Revit.DB namespace is available after referencing RevitAPI. It contains geometry types such as XYZ, Line, Arc, Solid, and Revit model elements. Note that Revit internally uses feet — all coordinate values must be in feet:

python
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import XYZ, Line

# Revit works internally in feet — convert from metres/mm before passing to XYZ
startPointXYZ = XYZ(0, 0, 0)
endPointXYZ   = XYZ(10, 10, 10)

line = Line.CreateBound(startPointXYZ, endPointXYZ)
OUT  = line

Transaction

Any operation that modifies the Revit model requires a transaction context. TransactionManager from RevitServices is the Dynamo-friendly way to open and close transactions. The RevitServices.dll is installed with Dynamo under Program Files\Dynamo\Dynamo Revit\{version}\Revit_{version}:

python
import clr
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence    import DocumentManager
from RevitServices.Transactions   import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument

TransactionManager.Instance.EnsureInTransaction(doc)
# your statements that modify the Revit model go here
TransactionManager.Instance.TransactionTaskDone()

Document and GetElement

The active Revit document is accessible through DocumentManager.Instance.CurrentDBDocument. From the document you can retrieve any element by wrapping an integer ID in an ElementId:

python
import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import ElementId

clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager

doc = DocumentManager.Instance.CurrentDBDocument

# IN[0] is an integer element ID coming from a Dynamo node
elementId = ElementId(IN[0])
OUT = doc.GetElement(elementId)

Settings

document.Settings exposes document-level configuration including Categories, Units, and material-related settings:

python
import clr
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager

doc = DocumentManager.Instance.CurrentDBDocument

# Settings exposes Categories, Units, and other document-level configuration
categories = doc.Settings.Categories
OUT = categories

Tags

DynamoPythonRevit.NET
digitteck

© 2026 Digitteck