This is another one of the long overdue posts, or if someone prefers, posts that I have been sitting on for a while and just didn’t have time to release them. This particular workflow was inspired by work that Mario Guttman (http://www.whitefeet.com/) presented at the AU. Building data is something that every BIM person had to deal with at some point in time. Previously I was exposed to third party software packages like Codebook or dRofus that were used in order to generate huge quantity of Room Data Sheets and in general to manage what goes into each room. Those days are over for me since I no longer work in Healthcare and don’t have to manage 1000s of RDS. I am not going to hide my excitement for that. :-) Either way, with the ascent of Dynamo and its almost unlimited potential in accessing data contained in a Revit model, I lean more towards using custom, and project tailored data extraction workflows than third party plugins. I guess, what I am trying to say is that WhiteFeet is amazing, but it is someone else’s plugin and at the end of the day I would either have to ask Mario for some project specific changes ($$$) or change my project requirements to fit the plugin (insert your PA’s angry face). This is why I decided to ultimately take Mario’s idea and turn it into Dynamo workflow with some added options and enhanced flexibility (ability to assign view templates to newly created views, ability to re-size the crop box so that it always fits into the “room tag”, ability to add missing shared parameters to a project). All in all the process presented below is just a first step in couple step process that allowed me to get Room Data Sheets going for a project that I was working on and have them all done in less than a day – now that’s what I call savings ($$$).
This code is relatively simple and uses the Bounding Box property of the room to create a new Floor Plan view associated with it. It takes an input of a list of Rooms and Crop Box offset in Feet (I know that new Dynamo is supposed to be unit-less but Revit still operates in FT under the hood). I usually set the offset to 3.5 since a door swinging out of the room with a width of 3′-6″ will not get cropped this way. It works for me, but feel free to make it bigger or smaller. Let’s go through the inputs really quickly so that we are all clear on what goes where:
Rooms: This is a List of Rooms. Now you can pass a single room in, but make sure that its in a list format. You can use Archi-lab node called Get Rooms by Level to do just what its called.
Prefix: This is a name prefix for the views. Every new Floor plan will be named Prefix-RoomNumber-RoomName. If you do not specify prefix here, a default value “archilab” will be added to all views.
Offset: This is a value by which the Crop Box will be offset from the room. If you set this to 0 the new view will be cropped to a Room Bounding Box. If you do not supply an input here a default value of 1 FT will be applied.
RunMe: This is a Boolean toggle that when set to False will disable this node. Obviously given that Dynamo now, runs on Automatic mode it might cause your definition to crash if Dynamo constantly tries to create new rooms. Of course that would only happen if you made any changes to rooms in the model which would cause Dynamo to re-execute. Also, this value if not set will be set to True by default so be careful with it, especially in the Auto Run mode. Here’s a full set up: There is one more thing to be cautious of when working with this node. It will check if Floor Plan view with the same name as the one that is about to be created already exists in the project. If that’s the case then it will not create another copy of it, but rather reset the bounding box to a new location. Of course if you change a room name or number and re-run this definition it will create another view since the name might not match exactly. In the image above you can see that I am using couple of custom nodes to filter for Rooms. They are currently part of the archi-lab package. List Contains is a new node that was created for this workflow and used here to FILTER OUT unwanted rooms. As you can see I was creating a Room Data Sheet workflow and didn’t need to include all rooms so I listed some that should be excluded from the process. Here’s the code for it and its really simple: