Set Project Info With Dynamo


This post is going to look at setting Project Information Parameters using Revit. I didn’t find much on the line when I set out to do this so I thought I’d share. Project information is found as an element type. Select the Element Type and All Elements of a type nodes.


With the Set Parameter By Name node and input the name of the Project Info Parameter and the value. You may need to check the parameter type. For instance, in the image below, I’m setting Project Number which is a text based parameter so the input needs to be text and not a number.


I went ahead and made this a custom node and posted it in the package manager under WC BIM. It’s my first package but expect more. Here’s a look at that.

Set Project Info Parameter.dyf


Workspace view


If you need to update multiple Project Information Parameters at the same time, use the List Combine Node.




Revit Gapped Grids

This post is going to cover creating gapped column grids. I had not noticed this as a feature so I thought it was worth sharing in case there were others who had not noticed this in the Advanced Sample Revit Project. Column grids 4, 5, & 6 are gapped.

2 - Floor Plan


When you select them, they’re one continuous grid line.

1 - Floor Plan - Continuous Grid

There are two different grid types called “6.5mm Bubble Gap” and “6.5mm Bubble. In the type properties there is a parameter called “Center Segment” The Gapped gridline is set to none. When you set this parameter to none, a new parameter shows up called “End Segment Length” This controls the length of the gapped line.

3 - Type Properties Comparrison

Here’s a look at the parameters and what they do. Starting with having Center Segment set to “Continuous”

4 - Parameters

Continuous Grid Properties

5 - Override Line Types

Gapped Grid Line

6 - Gapped Grid

Gapped Grid Line Overridden

7 - Gapped Grid Overridden

Custom Grid Line

8 - Custom

Custom Grid Line Overridden

9 - Custom Overridden

Grid Head Control

10 - Grid Heads

Grid Head Overridden

11 - Grid Heads Overridden

I haven’t really found many times where I’ve used these features but hopefully this helps someone out there. That’s all for now.







Batch Copy Script

To combat the issue of Revit users overwriting shared coordinates of files linked into their Revit model. I’ve started linking copies of central files into all the models. If someone does overwrite coordinate information, the next day a new copy of the model overwrites the file with the correct information. The process involves creating a batch file that will copy files from one location to another and using windows task scheduler to run that task periodically. I thought this would be a good share.

Create a batch file

  • Right click and create a new text document. I usually do this in the project folder1 - Create Text File
  •  In the text file you need to type a command line. The command for copy is xcopy

In the text file, you need to type:

xcopy “path for files to copy from\*.RVT” “path for files to copy to”/y

The path for the files does need to be the full network path and will not work from your local directory. The \*.RVT at the end of the path is looking for any file that ends with .RVT and will copy those files to the specified path.

  • Save the file as a batch file. Click File/Save As, name the file and add .bat at the end.2 - Save As BAT
  • To test the file, double-click the newly created batch file. You should see a command prompt listing the files being copied.

2 - Command Line

Automate the task with Windows Task Scheduler

  • Open Windows Task Scheduler from your programs
  • Under the Actions Menu, Select Create Task…4 - Create Task
  • On the General tab, you’ll want to name the task descriptively and add a description to help you remember later. Update the security options as needed, I usually select Run whether user is logged on or not5 - General Tab
  • On the Triggers tab, click new you’ll specify how frequently you want to copy the files. This could be daily, weekly, or whatever you decide. You can add multiple triggers so if you would like the task to run twice per day you can add both times as seen below.6 - Triggers7 - Schedule
  • On the Actions tab is where we specify the actual task that is running. Click New8 - Actions
  • For the action, you want to run a program. For the program, you specify the .bat file that you created. Input: “Path to .bat file\Name of bat file.bat” Click Ok Until you’re back to the task scheduler welcome screen.9 - Start a Program
  • Rick-Click on the name of your task and select run to test your task10 - Run Task
  • Enjoy the Automation



A very time consuming issue that I commonly encounter is when a keynote appears in keynote legend but is not visible in any of the views on the sheet. As a dumbed down explanation, because the annotation exists within any view(s) on the sheet, the keynote value appears in the keynote legend whether it is visible or not. Keynotes can become invisible if the item they are hosted to is no longer visible, the annotation is no longer within crop boundary of the view, or simply the annotation is hidden. What usually gets overlooked is that this extends to phasing of elements, closed worksets, or even the view range of the view.

Finding a missing keynote involves toggling through just about every visibility setting. If there are multiple views on a sheet, you need to find out which view or views the keynote is in and remove it from the views to remove it from the legend. I wanted to create a better way of handling this using dynamo.

2 - Elevation View with Reveal Hidden Elements

In the Dynamo workspace shown below, I’ve setup a workspace where we can select all elements in the view and filter the list to get annotation items, and compare that list to the list of annotations in the model that should be in the view. This produces a list of non-visible annotations in the current view so we can delete them.

3 - Select Elevation Elements4 - Get List of annotations visible in view

Now that we have the list of annotations visible in this view we can compare that to the list of annotations for the entire project and remove them from that list.5 - Get List of annotations in model not visible in view

Next we need to compare the list of annotations that are not visible in the current view with the workset value of the current view. What we’re doing here is finding the non-visible annotation in the view. (See the post of Revision Clouds for more information on the code block and why the workset of the annotation in a view is one greater than the workset of the view.)6 - Detemine annotations associated with active view

When we put it all together and hit run, it will delete the hidden annotation.7 - Delete all annotations not visible in view


A topic I often see Revit users having troubles with is revisions showing up in a revision schedule on a titleblock and no revision clouds are visible on that sheet. This post is going to focus on using dynamo workspaces to delete revision clouds.

This post will identify workspaces to:

  • Delete all revision clouds in the model
  • Delete all revision clouds in active view
  • Delete all revision clouds on a list of sheets

Here’s brief background of the issue so anyone reading this will be on the same page. In the titleblock family, there is usually a revision schedule that displays when a revision cloud is drawn on that sheet or in any view that is on that sheet. This is a wonderful feature within Revit that makes it easy to track which sheets have revisions on them but can cause some frustrations when it’s not working as expected. At some point a Revit user will encounter a time where the revision schedule is populated and they don’t want it to be. This usually occurs when a project is taken from design into construction. The design team is directed to issue an “Issued for Construction” package without any of the previous revisions showing in the titleblock.1 - Sheet Revision Properties

Usually the solution is as simple as clicking “Revisions on Sheet” in the properties of the sheet and deselecting the unwanted revisions. (There’s a great post from What Revit Wants that walks through using Dynamo for updating the revisions with this method. Check out the post here)

Occasionally, this is not the case and the issue caused by a revision cloud that is in a view and for one reason or another, it’s not visible. This starts the hunting and pecking process to find and remove the revision cloud. This is where dynamo can really shine.

We’ll start with a simple task and build from there. A common task on a Revit project is to delete all the revisions as we move from the design phase into construction documents. This can be an extremely tedious task if done manually. In Dynamo, we can do this simply by getting all elements of a category and telling dynamo to delete them. In the Archi-Lab package, there’s a great custom node called “Delete Elements” and as its name would suggest it will do just that.

2 - Delete all Revision Clouds

Deleting all the revision clouds at once is pretty powerful but what if I only want to delete all the revisions on a specific sheet, view, or even sheets for a specific discipline? We need a way to filter the list of elements. When I start exploring something like this, I like to look at all the parameters that Dynamo will read for elements so I can start to sort and filter elements by information. Looking at the element properties, (assuming worksets are enabled) you may notice the workset is named after the view the element is in. When I first saw this, I thought, “great, I’ll filter the list by workset and the name of the view and I’ll be done.” It’s close but not quite that simple.3 - Revision Cloud Properties

Using the node “Element.GetParameterValueByName” to create a list of parameter values, you get a number instead of a name. So there goes my theory that we can filter the list by view name. This does end up being useful though.4 - Revision Cloud Wrokset NameHere’s a look at the parameters for the active view. The workset names match the annotation workset name. 5 - View Parameters

Oddly, when I take the workset by name, I notice the number is one less than the annotation’s value. The annotation workset was 163 and this one is 162. After some searching I found this to be consistent with annotations in views. So far the exception I found is with dependent views and that actually makes a lot of sense because the annotations are in multiple views. 6 - View Workset By name

Next, I’m going to show a few things on what I can do with this information.

Delete All revision clouds in the active view:

In the Dynamo workspace below, I am taking a list of all the revision clouds in the model, getting their workset parameter information, and filtering that information by elements that have a workset that equal the workset of the active view plus one. It works pretty well. 7 - Delete all Revision Clouds in active viewWe can now look to take this further. Looking at the parameters of views, I have a parameter for the sheet number that the view is on. This extends my capabilities of filtering annotations by any of the sheet parameters. Knowing this, I can isolate annotations that are on a specific sheet, sheets in the drawing list, a specific disciplines sheet, or really anything we can filter a sheet list by.8 - Sheet number of View

Deleting annotations in views based on sheets discipline:

The next few images are going to show the process required for deleting the chosen annotation category for views of a specific discipline. We’ll start by creating a list of the sheets that we want to remove the annotation from. For the purpose of this post, I’m going to filter all the architectural sheets. I typically use a parameter called “Discipline Order” to sort our sheet index in a non-alphabetical order. In the sheet index I use a calculated formula with an “If” statement to fill out the discipline in the schedule rather than have the Revit user enter the sheet discipline and the appropriate sorting number. Because of this, I’m filtering the list of sheets in the model by the discipline order that equals architectural which is 3. 9 - List of Views by DisciplineThe next step is to filter a list of all the views in a model that are on the list of sheets we just made. This portion of the workspace becomes the framework for a lot of different workspaces and is worth saving separately. We’re able to feed a list of sheets and create a list of views that are on those sheets. 10 - List of Views on SheetsNow, we will want to compare the list of annotations’ workset to the workset value for the list of views we just created. In the workspace below, we take the input of the list of views created above and compare them to the list of all the annotations worksets using the same formula from the delete all revision clouds in active view workspace in the start of this post. 11 - Delete Annotations on list of viewsPut it together, turn the Boolean for Delete to true and press run:12 - delete annotations on views by discipline

 up next… Delete all non-visible keynotes in active view