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:
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 = lineTransaction
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}:
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:
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:
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