Bus Stop GEN (POC)
Bus Stop Generation POC | Data-Driven Revit Model Automation
| period | 2023 |
| course | Digital Design |
| type | Individual Project · POC |
| tools | Revit · Dynamo · Python |
After designing the modular bus-stop project 잠시___정류소, I developed a personal bus-stop automation project while learning Revit and Dynamo in a Digital Design course. I organized spreadsheet inputs, type classification, family placement, and parameter control into a single Dynamo workflow that applies multiple bus-stop conditions to a Revit model.
The location, available length, and direction of each stop define Revit Grid at 700mm intervals and place Family on the grid. A single run applied 16 dummy records to stops with different locations and dimensions.
The diagram on the right shows the layout rules for the four types on a 700×700mm grid. The Revit viewport on the left shows the resulting models.

BIM Automation Workflow
Each spreadsheet row defines one bus stop through its X and Y coordinates, available length along the long axis, and direction. The shelter height, grid spacing, and Revit families are configured in Dynamo.
The Dynamo map below shows the complete workflow from input data to the Revit model. The Python component classifies each stop and organizes its data, while Dynamo creates the grids, places the architectural elements, and controls the family parameters.

Bus-Stop Data and Layout Rules
Length represents the available length along the long axis of the installation area. Dynamo creates the Revit Grid at 700mm intervals according to the X and Y coordinates and direction. The grid extent is determined by rounding the input length down to the nearest 700mm.
Python uses multi-branch conditionals to compare the lengths and classify each stop as Type A–D. It stores the results in a dictionary for each stop and connects them to Dynamo’s Data Tree. Dynamo reads the length and type of each stop, then arranges the ends and repeating middle section.



The image on the left shows the location, available length, and direction of the 16 stops. The center and right images show the Python code for type classification and dictionary construction.
The 700mm Grid and Four Architectural Elements
Dynamo calculates the layout from the length and type of each stop, then places four Revit families on the grid: photovoltaic panels, partitions, a roof, and columns.
- The photovoltaic panels follow either the long or short axis of the stop and receive a solar-angle parameter.
- The partitions can be assigned steel-plate or glass types.
- A single roof family is repeated to match the shelter length.
- The columns change their lighting type according to the air-quality input.




From left to right: the photovoltaic panel, partition, roof, and lighting-column families.
Family Parameters
Height, width, material, photovoltaic-panel direction and angle, and column lighting type are connected to Revit family parameters.



The three screens show the type, dimension, and material parameters of the photovoltaic panel, air-quality lighting column, and partition families.
Proof of Concept and Next Step
The dummy dataset confirmed that spreadsheet input, Revit Grid creation, type classification, family placement, and parameter control operate as one continuous workflow. Editing the spreadsheet and rerunning Dynamo applies the revised location, length, and direction to the Revit model.
Dummy values were used for solar angle and air quality to verify the parameter connections. Integration with actual urban data and environmental performance evaluation were not included.
The current form is a basic bus stop used to verify the model-generation workflow. Next, I want to design a new system of repeatable, combinable modules and connect it to this automation workflow.