Back to blog

Dynamo Revit Tutorial: Automate Structural Column Placement

tutorial·9 min read
Priyank G

Priyank G

Engineering

October 17, 2025

Dynamo Revit Tutorial: Automate Structural Column Placement

Dynamo Revit Automation Tutorial: Bridging Analysis and BIM for Structural Engineers

TL;DR: This Dynamo Revit tutorial teaches structural engineers how to automate structural column placement in Revit using a Dynamo graph and external coordinate data (X, Y coordinates and section sizes) extracted from analysis software like ETABS or SAP2000. This automation solves the error-prone manual transfer process, which typically consumes 40% of project time, by creating a seamless analysis-to-BIM link. The key takeaway is that leveraging Dynamo with packages like Data-Shapes and Clockwork helps engineers increase productivity 2 - 3x in their structural BIM workflows.


Are you tired of the painstaking, error-prone process of manually transferring design data from analysis software like ETABS or SAP2000 into Revit? Structural engineers often spend 40% of their project time on repetitive data entry and coordination tasks. This manual effort is not only time-consuming but also significantly increases the chance of errors. Fortunately, powerful visual programming tools can solve this challenge. Welcome to this comprehensive Dynamo Revit automation tutorial, designed specifically to help structural engineers dramatically streamline their BIM workflows.

In this tutorial, we will build a Dynamo graph that automates the placement of structural columns in Revit based on external coordinate data. This process is fundamental to creating a seamless link between your structural analysis model and your detailed BIM documentation, helping you increase productivity 2 - 3x.

Prerequisites and Setting Up Your Dynamo Revit Automation Environment

Before diving into the visual programming interface, ensure you have the necessary tools and data prepared. Mastering these initial steps is crucial for successful Dynamo Revit automation tutorial outcomes.

Required Software and Packages

  1. Autodesk Revit: (Version 2020 or newer is recommended).
  2. Dynamo: (Installed automatically with Revit, accessible via the Manage tab).
  3. Key Dynamo Packages: While the core functionality is built-in, installing specific packages expands capabilities:
    • Data-Shapes: Useful for creating user interfaces (UI) within Dynamo.
    • Clockwork or Archi-Lab: Contain useful nodes for list management and element selection.

Preparing Your Input Data

For this exercise, we assume you have extracted the critical location data (X, Y coordinates) and section sizes from your analysis software (ETABS/SAP2000) and compiled them into a clean CSV or Excel file.

Your Excel sheet should contain, at minimum, three columns:

  • Column A: X Coordinate (in project units)
  • Column B: Y Coordinate (in project units)
  • Column C: Section Name (matching a Revit Family Type name, e.g., "W12x87")

Ensure your Revit template is open and contains the necessary structural column families loaded before running the graph.

Part 1: Reading and Preparing Structural Data from Analysis

The first step in any automation process is accurately importing the source data. We will use Dynamo’s built-in nodes to read the Excel file containing our column placement data.

Step-by-Step Data Import

  1. Launch Dynamo: Open Revit, navigate to the Manage tab, and click the Dynamo icon.
  2. Locate the File: Place a File Path node on the canvas. Browse to and select your prepared Excel file.
  3. Read the Data: Connect the File Path node to an Excel.ReadData node (found under Import/Export).
    • Set the sheetName input (e.g., "Sheet1").
    • Set the readAsStrings input to false (using a Boolean node set to false). This ensures coordinates are treated as numbers.

The output of the Excel.ReadData node will be a nested list where each inner list represents a row from your spreadsheet. The first list (index 0) usually contains the headers, which must be removed.

Cleaning the Data List

Use the List.RestOfItems node to discard the header row. Then, use the List.Chop or List.Transpose node, followed by List.GetItemAtIndex, to separate the X coordinates, Y coordinates, and Section Names into three distinct lists.

For example, if the X coordinates are in column A (index 0) and Y coordinates in column B (index 1), you would use:

  • List.GetItemAtIndex (list=Transposed List, index=0) -> List of X coordinates
  • List.GetItemAtIndex (list=Transposed List, index=1) -> List of Y coordinates

Part 2: Generating Geometry and Mapping Coordinates

Once we have clean lists of coordinates, we must translate them into geometric points that Revit can understand. This stage is critical for ensuring the structural elements land precisely where the analysis model dictates.

Creating Points from Coordinates

The core node for this conversion is Point.ByCoordinates. This node takes three lists - X, Y, and Z - and generates a corresponding list of 3D points.

  1. Define Z: Since we are placing columns at the base level, the Z coordinate list should typically be zero. Use a Number node set to 0.0 and connect it to a List.Create node, ensuring the list matches the length of your X and Y lists (or use proper list lacing set to Auto or Longest).
  2. Create Points: Feed your X, Y, and Z lists into the respective inputs of the Point.ByCoordinates node.

If your analysis software uses a local coordinate system that differs significantly from your Revit project base point, you might need to apply a transformation matrix or simple offset. This is where automation truly reduces errors - research shows that automation can reduce manual data transfer errors by 60%.

Enhancing Coordinate Processing with Python

For complex coordinate transformations or filtering based on specific criteria (e.g., only placing columns in certain zones), a Python Script node provides immense flexibility.

Here is a simple example of a Python script that takes X and Y lists and returns the combined list of points, ensuring they are properly cast as Dynamo Points:

import clr clr.AddReference('ProtoGeometry') from Autodesk.DesignScript.Geometry import * # The inputs to this node will be stored as list of X and Y x_coords = IN[0] y_coords = IN[1] z_val = 0.0 # Assuming Z is zero for foundation level points = [] for x, y in zip(x_coords, y_coords): # Create the 3D Point object points.append(Point.ByCoordinates(float(x), float(y), z_val)) OUT = points

Connecting your X and Y lists to the inputs (IN[0] and IN[1]) of this Python node will output a clean list of Dynamo Point objects, ready for placement. Utilizing this kind of automation allows engineers to save up to 40% of the time traditionally spent on data reconciliation.

Part 3: Advanced Dynamo Revit Automation: Placing Structural Elements Efficiently

With our list of placement points ready, the final step is to instruct Revit to create the structural columns using the appropriate family types and levels. This completes the core Dynamo Revit automation tutorial workflow.

Selecting Levels and Families

Revit elements require specific levels and family types. We need Dynamo to reference existing elements in our open Revit project.

  1. Select the Level: Use the Level.ByName node. Input the name of your target level (e.g., "Level 1") using a String node.
  2. Select the Family Type: Use the FamilyType.ByName node. Input the list of section names you extracted in Part 1 (e.g., "W12x87"). Note: Ensure these string names exactly match the Type Names in your Revit project.

Placing the Columns

The most direct way to place structural columns is using the StructuralColumn.ByPointAndTypeAndLevel node.

  1. Points: Connect the list of Points created in Part 2.
  2. Structural Type: Connect the list of Family Types derived from your Section Name list.
  3. Level: Connect the Level node output.

Dynamo will now iterate through your list of points and create a structural column at each location, assigning the specified section size and ensuring it is constrained to the correct floor level.

For firms dealing with highly complex analytical models, particularly those requiring dynamic section optimization or detailed analysis-to-BIM mapping, specialized tools can further enhance this process. Solutions like Structures AI - an AI-Powered Automation platform for Structural Engineering - offer enhanced features such as ETABS Integration, SAP2000 Automation, and AI-Powered Recommendations, which handle complex data mapping that might be challenging to script manually in Dynamo.

Testing and Validation

Once the graph runs successfully, switch back to your Revit 3D view.

Verification Steps

  • Check Quantity: Verify that the number of placed columns matches the number of entries in your Excel spreadsheet.
  • Check Location: Spot-check several columns against your grid lines or imported analysis results to ensure accurate X and Y placement.
  • Check Properties: Select a few columns and verify that the instance properties (Level Constraint, Top Constraint) and the Type Property (Section Size) match the data provided in your input file.

If errors occur (e.g., null values, failed element creation), check your list lacing in Dynamo. Mismatched list lengths between Points and Family Types are the most common cause of placement failure.

Next Steps and Resources

This tutorial provided a foundational workflow for column placement. Structural automation extends far beyond this simple example.

Advanced Automation Concepts

  • Beam and Bracing Placement: Use Beam.ByStartPointEndPointAndType to automate linear elements, requiring start and end coordinates from your analysis output.
  • Adaptive Components: Use adaptive components for complex geometry or custom connections that require multiple placement points.
  • Parameter Updates: Automate the writing of analysis results (e.g., axial forces, required reinforcement) back into Revit parameters for documentation and tagging.

For further learning and community support, the official Dynamo Primer is an invaluable resource that covers foundational concepts and advanced workflows. Read the official Dynamo Primer here.

Conclusion and Call to Action

Visual programming through Dynamo is no longer a niche skill; it is a necessity for structural engineers seeking efficiency and accuracy. By automating the transfer of critical design data from analysis software into Revit, you eliminate repetitive tasks and free up valuable time for engineering judgment. This Dynamo Revit automation tutorial is your gateway to a more productive, error-resistant workflow.

Ready to take your structural automation capabilities to the next level, integrating directly with ETABS and SAP2000 models?

Download Structures AI for free and explore the future of AI-Powered Automation for Structural Engineering.

Share this article

Email
X
Linkedin

San Francisco, CA