creating view sets

image by archi-lab

This came about as a request from a colleague of mine from our Washington DC office. It turns out that they do a lot of printing (duh), and their View Sets are always out of date. No surprises there, after all, who wants to run around and keep these updated. The interface in Revit for creating these is atrocious.

Anyways, here’s a few solutions using Dynamo. There are obviously multiple ways to approach this problem, and I am only showing three (3). Take them as a clue, to what can be done, and go ahead and create some more. I will be more than happy to share them here for wider audience.

1. Create a View Set from a Drawing List. 

This is pretty useful. I mean, after all the time you have spent running around your model, and making sure that all of the “right” sheets are displayed in the Drawing List, it would only make sense to be able to print all sheets in a given schedule. Here’s how:

  • First we need to find the Drawing List that we are interested in. Drawing Lists in Revit are nothing more but Schedules so that’s why we are collecting all of the Schedules and then filtering them out for the one that matches the name that we are interested in.
  • Once we have the one that we are interested in we do something that not a whole lot of people actually know. We “select all elements visible in a schedule”. What?! Yes, this is one of those things in Revit that are not obvious, but a Schedule in Revit is a View, and each row in a schedule represents an element. The funny thing is that Revit thinks of these elements as if they were in a view, just like if it was a floor plan. That’s why we can use a node here (Select.ByCategoryView) to select all Sheets visible in the Schedule. Pretty neat, huh? Anyways, that should give us all of the Sheets in a schedule.
  • Next we need to exclude sheets that are placeholders. It’s likely that you can have some placeholders in there filling gaps for consultants sheets. Whatever it is, let’s exclude them since they are not “physical” sheets and would not be printed.
  • Finally, we take these sheets, and pass them to another node (ViewSets.ByViewsName). That will create a new view set for us that contains all of the sheets we passed it. This node will also make the view set the currently selected one so that you can go to printing things faster.

2. Create a View Set from Sheets that have a certain Parameter value. 

This is probably more useful when you want to print sheets being issued for an Addendum. The way that we normally mark these is by some sort of custom parameter added to the sheet itself. That’s usually used to show sheets in a schedule. It could also allow us to create a view set for something like a list of “my” sheets. So on a typical project you might have a few sheets that you are responsible for, these would be marked under “Drawn By” with your initials. When there is time to plot them for the Project Architect (PA) to review, you can get to them really quickly this way.

  • First we get all Sheets in the model, and filter out all Placeholders. See above for reasons.
  • Then we can simply get a parameter value from each Sheet, and compare it to something that we are interested in. In this case we are looking at “Drawn By” Parameter and matching value. That will narrow down the list of sheets for us even more.
  • Finally we can pass the resulting list of sheets to an node (ViewSets.ByViewsName). Done!

3. Create a View Set by Revision. 

This particular method, can be useful when it is time to publish all changes to the contractor. You probably lost track of all the sheets that have changes on them for the given revision. This can let you get them all in one simple swoop.

  • Similarly to the above solutions we first get all sheets, and then filter them down to exclude placeholders.
  • Now we can get all sheets that have a Revision that we are interested in using one of the nodes (Sheets.Revisions). The trick here is that Sheets.Revisions node will return a list of Revisions that are on the Sheet, so we need to check if selected revision is in that list. To do that we are using a little reverse logic with AllFalse node, and List.FilterByBoolMask.
  • Then the final step which is the same as all of the above examples.

That’s it! Now you have a few different ways to create View Sets automatically. That should make it much easier for you quickly get your prints out.

Ps. Please note that the above definitions are for Dynamo 1.3 and package version 2018.0.11.

Ps. Download files:  ViewSetCreationExamples (5269 downloads)

Support archi-lab on Patreon!


  1. Katarina says:

    This is great! Thank you for posting

  2. Alexis says:

    The “replace” option on the ViewSets node is a nice touch. Avoids errors and makes it easy to update the View Sets. Thanks again Konrad :)

  3. dufour says:

    bonjour pourquoi est ce que j’ai un problème avec les vues en format de feuilles A3 aucune vue ne se mets dans la feuille? cela marche que sur la feuille A0

  4. hn says:

    Hi Konrad,

    Thanks for your dynamo definition. I was wondering if you ran into the problem of having the output of the Categories node as “null”? I was not sure why the component would not take in the sheets from the Revit file. I looked online for some answers but couldn’t find any. I hope you can give me some pointers. Attached is a screenshot of my trouble.

    Attachment:  Capture-1.png

    • That’s unusual. Sheets is a built in Category so it should always be there. Try deleting that node, and placing a new one on Canvas. Also, if that doesn’t work, try re-installing Dynamo. It might be a bad install.

      • hn says:

        Thanks for your tip, Konrad.

        For some reason, if I open the algorithm from your website, the Category node does not take in any data from the Revit model. It will, however, if I rebuild the whole algorithm from scratch. Then there was one final node that issued a warning that said “null” instead of “true” like your screenshot. Any clue as to why?

        Attachment:  screenshot.png

      • hn says:

        Please disregard the previous message. I realize the output for Lis.FilterbyBoolMask was null and think that is why. I reconnected the nodes to get some output from that node. But I still get “null” values from the last component. This is where I am stuck now.

        Attachment:  screenshot-2.png

  5. Mark says:

    The “Equals” node within “Find Schedule/Drawing List of interest” is now called “List.Equals” but returns a “false” result.

    Attachment:  Setviews-error.png

  6. Joven says:

    Hi Konrad,

    Thank you this is very heplful! Same with @Mark, everytime I type in “equals” it only shows “List.Equal” node. Do you know what am I doing wrong? Thanks!

    • If you use the List.Equals try enabling Levels and set to @Level2. I think it shows false because it tries to compare a list of names to a single name.

      • Joven says:

        Hi Konrad,

        Thanks for replying, i figured it out, I was using a different version of the package, your original graph worked on 2018 version, so for 2021, guess I’ll try that Levels enabling that you were saying.
        You’re the man!

Leave a Comment