How to Select all the Beams on a Level?

I am attempting to select all the beams (structural framing) on the Level 3 (roof level). I am trying to avoid future user error by creating an automated process that only selects the beams (and not the slab) on the roof level. Is there a better way to select all of the beams on a level?

I attempted to use a Bool Mask to filter all of the structural framing by Level 3. The problem is that it produced a list of just the Family and Type of Beams. I need each of the beams to be selected as an individual item in a list, like it does in Select Model Element. Then I can feed it into the StructuralFraming.Location node of the script below.

The script below aligns the beams with the slope of the roof, even if the roof slope changes.

@r.ungerer isn’t the data of the FilterByBoolMask out port what you need?

Sorry I didn’t check your image properly. Just change the lacing to longest and it should work.

Thanks changing the lacing did make it work! Thanks for the help. I’m really new at this.

I am a bit confused about the output of the script that selects all structural framing. When I change the lacing to Longest it is outputting 9 beams. If the lacing is Shortest than it only outputs one (as seen in my original post). But there are only 5 beams on the 3rd Floor. If I select the beams manually than, the selection node outputs 5 beams. (see the image below for the difference)

Why is it outputting 9 beams if there are only 5 beams on the 3rd floor?

It looks like the L.filterByBoolMask isn’t actually doing any thing. There are the same number of beams selected before the Bool Mask is run as after. Do you know why this is selecting all the beams in the project and not filtering the beams by the level the are on?


Then try conparing the name of the levels instead . Use the OOTB node Level.Name. And instead of the List.Equals node use the == OOTB Node. I’ll post an image asap


It’s working for me (see below). Can you post your Revit File ?

Thanks for the help. My script is working now and it’s so exciting!

But to be honest I don’t think I complete understand this Lacing thing. I changed the lacing of List.Equals to longest, as you suggested and it gathered both True and False values. I then change the output to “in” instead of out. This pulled the correct beams.

(I think before I had the List.FilterByBoolMask lacing set to longest. So it was not receiving the correct information.) Also I don’t think I properly understood what the difference between the outputs from List.FilterByBoolMask were. Is the “in” true and the “out” false?

Also what exactly doe the List.Equals node do? Does it compare two nodes and make a list of True & False and is the True list a list that contains both of the input node information?

Sorry my Revit file is too big to attach, but I have attached my Dynamo file.SlopedRoof_Align_Cols_Beams_byLevel.dyn (87.8 KB)

@r.ungerer All good questions!

I suggest to start reading the dynamo primer

About lacing:

About Lists.

If you right click on a node ==>Help==> See more on the dynamo Dictionary, usually you find more info on how to use the node


Please don’t forget to mark the topic as solved

1 Like