Initial Model from Forma Building Design

list all the walls on level B01-L00
Level B01-L00 isn't in Richard's House model, but it is in the model now open in Revit, Forma Building Design - 10-12-2026. That level has 18 walls:
- 9 × Basic Wall 8", running from B01-L00 up to B01-L01 (9'-10 1/8" tall), about 383'-8" total
- 9 × Forma Parapet 0'-4", 1'-5 23/32" tall with no top constraint, about 384'-11" total
# | Element ID | Type | Length | Height |
1 | 376813 | Basic Wall 8" | 32'-0 13/32" | to B01-L01 |
2 | 376832 | Basic Wall 8" | 23'-4 1/4" | to B01-L01 |
3 | 376833 | Basic Wall 8" | 37'-4 1/32" | to B01-L01 |
4 | 376834 | Basic Wall 8" | 78'-8 1/16" | to B01-L01 |
5 | 376835 | Basic Wall 8" | 45'-3 15/32" | to B01-L01 |
6 | 376836 | Basic Wall 8" | 21'-8" | to B01-L01 |
7 | 376837 | Basic Wall 8" | 51'-10 7/8" | to B01-L01 |
8 | 376838 | Basic Wall 8" | 57'-2 7/32" | to B01-L01 |
9 | 376839 | Basic Wall 8" | 36'-2 9/16" | to B01-L01 |
10 | 376864 | Forma Parapet 0'-4" | 32'-3 1/8" | 1'-5 23/32" |
11 | 376865 | Forma Parapet 0'-4" | 23'-4 1/4" | 1'-5 23/32" |
12 | 376866 | Forma Parapet 0'-4" | 37'-4 1/32" | 1'-5 23/32" |
13 | 376867 | Forma Parapet 0'-4" | 79'-0 1/16" | 1'-5 23/32" |
14 | 376868 | Forma Parapet 0'-4" | 45'-7 15/32" | 1'-5 23/32" |
15 | 376869 | Forma Parapet 0'-4" | 21'-8" | 1'-5 23/32" |
16 | 376870 | Forma Parapet 0'-4" | 51'-10 7/8" | 1'-5 23/32" |
17 | 376871 | Forma Parapet 0'-4" | 57'-5 5/32" | 1'-5 23/32" |
18 | 376872 | Forma Parapet 0'-4" | 36'-4 7/32" | 1'-5 23/32" |
The two sets trace the same 9-sided perimeter, and each parapet matches a basic wall in length to within a few inches. That looks like a Forma import placed a parapet over each perimeter wall. The parapets are hosted on B01-L00, though, which is the bottom of the building, not the roof. Unless they have a large base offset, they're sitting inside the ground-floor walls rather than on top of the roof. I can check their base offsets if you'd like.
remove all the columns on that level
All 16 are single-story columns (B01-L00 to B01-L01), so deleting them won't affect other floors.
Level B01-L00 in Forma Building Design - 10-12-2026 has 16 columns, all Forma Column – Circular column 1'-3 3/4". Each one runs only from B01-L00 to B01-L01, so no other floors would lose columns:
377711, 377719, 377723, 377727, 377731, 377735, 377739, 377743, 377747, 377751, 377755, 377759, 377763, 377767, 377768, 377771
Shall I delete all 16? You can undo it in Revit afterward, but anything hosted on or dimensioned to these columns would lose its reference.
yes
All 16 columns on B01-L00 are deleted. The only other change was to Room 1 on that level and its room tag: the room's area recalculated now that the column footprints are gone. Ctrl+Z in Revit will restore the columns if you need them back.
Do you want to review the changes in Revit?
add W10x49 structural columns at all of the grid intersections on that level
The Revit connection can't place new elements, so I'll check what's in the model and then build a script you can run. First, the grids and whether a W10x49 type is loaded.
Revit's connection here can read, edit and delete elements but can't place new ones. I'll build a Dynamo script that places the columns, and you run it once in Revit.
I couldn't place the columns myself because my connection to Revit can't create new elements. I wrote a Dynamo graph instead, Place W10x49 Columns at Grid Intersections.dyn. Open it in Dynamo with the Forma model active and click Run. I checked that the script and the file are valid, but I haven't run them in Revit.
The script will:
- Place a W10x49 column at each of the 33 points where two grid lines actually cross.
- Run each column from B01-L00 to B01-L01 with zero offsets.
- Rotate each column to match the grid, which is about 23.5° off the model's axes.
No W10x49 type is loaded in the model. The script tries to load it from your installed Revit family library first. If it can't find it there, it stops with a message. In that case, use Insert → Load Family → Structural Columns → Steel → AISC → W-Wide Flange-Column, pick W10x49, and run the graph again.
A few things you should know about the grid:
- Seven letter/number pairs never meet because one grid stops short of the other: A1, A6, A7, A8, E1, E2 and E3. The script skips them. If you want columns there, extend those grids first.
- Two pairs of grids are very close together. Grids 4 and 5 are only about 5'-2" apart, and grids 7 and 8 about 6'. That puts columns about 5–6' apart along every lettered line. If those grids are meant to mark something other than column lines, tell me which grids to leave out.
- Running it twice is safe. It skips any intersection that already has a structural column.
Once you've run it, I can check the placement and orientation in the model.
dynamo report an error saying that Property Object contains no traceback
The error comes from one line in my script. It reads the column type's name using a shortcut that only works in Dynamo's older Python engine (IronPython). In the newer CPython/PythonNet engine, that shortcut fails. My error handler then failed while trying to report it, so you got the confusing "traceback" message instead of the real one. I'll fix both.
I've fixed the script, and both files are updated: Place W10x49 Columns at Grid Intersections.dyn and Place W10x49 Columns - Python.py. I checked the code for syntax but couldn't run it here, so your next run is the real test.
There were two problems:
- Reading the column type's name. The script used a shortcut that only works in Dynamo's older Python engine. It now reads the name in a way that works in IronPython, CPython3 and PythonNet3.
- Reporting errors. The error handler itself broke, which is why you got the "traceback" message instead of the real error. It now shows the actual problem in plain text and cleans up any half-finished change.
The error happened while the script was looking for the W10x49 type, before it starts placing anything, so that run shouldn't have added any columns. I can't confirm in the model right now because my connection to Revit has dropped.
Run the new graph, or paste the .py into your existing Python Script node, and click Run. If the node reports an error, paste its exact text here. Once Revit is reachable again, I'll check how many columns were placed and which way they face.
Create W12x26 Beams that connect all of the columns on this floor
I'll check whether Revit is reachable again so I can see where the columns ended up before writing the beam script.
I've written the beam script as Place W12x26 Beams Between Columns.dyn, plus Place W12x26 Beams - Python.py if the graph opens blank or you'd rather paste the code. I couldn't run it in Revit, and I can't currently read the model, so I haven't confirmed the columns are in place. Run the column script first; this one starts from the columns that actually exist on B01-L00.
What the script does:
- Where beams go: along each grid line, one W12x26 beam between each pair of neighboring columns on that line.
- Height: at the tops of the columns, hosted on level B01-L01. I assumed that's what you meant by "this floor," since that's where the beams carry the next level.
- Beam type: if W12x26 isn't loaded, it tries to load it from your installed Revit family library. If that fails, it tells you to load it from Insert → Load Family → Structural Framing → Steel → AISC → W-Wide Flange.
- Re-runs: running it twice is safe, because it skips any beam that already exists between the same two columns.
Using the grid layout and the 33 column positions, I worked out that this should place 53 beams. Of those, 32 run along lettered grid lines and 21 along numbered ones. Most spans are 16'–26'. Because grids 4–5 and 7–8 are so close, every lettered line also gets a short beam of about 5'-2" between 4 and 5 and about 6' between 7 and 8. That's 8 beams in total. If you don't want them, I can make the script skip any span under a length you choose.
When it finishes, the node lists the number of columns it found and each beam it placed with its length.
