Have you ever created a Revit family that had several nested families in it that you wanted a simple drop down menu to give you the chance to choose which nested family you wanted? Well, here’s a brilliant method for creating powerful nested families that seems to be difficult to find solid documentation on. I’d like to thank Bob for reminding me about this easy to use yet dynamic technique for controlling the visibility of nested families.
Here’s the scenario:
Let’s say you have a family (we’ll refer to this as the parent family) that contains several nested families that are possible options within it. For example, you might have a door family that consists of the frame and the opening, but that has several panel families nested into it. One panel might be a typical flush door panel, another is a panel with glass, another is a panel with louvers, etc.
We want to make it easy for users to insert the door family, then choose the type of panel they want. Now the way I’ve seen this documented the most often is to use the Visibility control tied to a Yes/No parameter that controls whether Panel 1 is visible or not, Panel 2 , Panel 3, etc.
This method works ok, but has some potential problems. You end up inserting all the families into the parent family, then having to align and constrain each one, then you have to set up a bunch of Types in the family that in turn have those Visibility Yes/No parameters set correctly. Still following me? One of the problems we’ve run into is that the user now has to create their own types, or manually run through those parameters and make sure that the panel that they wanted is turned on and all the others are off. If they make a mistake, it’s possible that they have more than one panel turned on and all sorts of craziness can ensue.
Also, if you have quite a few nested family options, this list of parameters can get to be pretty unwieldy and difficult to set correctly.
What would be great is to simply have a dropdown parameter in Element Properties that shows all the nested family options and just lets you pick it, having it swap out the appropriate nested family. Well, with the technique we’ll show here, you can do exactly that.
The Solution – Create a Family Type parameter and use it to drive your family Label
After you’ve created your parent family, load up all the nested families that represent the options you want to have available. It’s important that these families be as identical as possible. They won’t be completely identical, of course, but you should create them from each other, keeping the reference lines in the same place to ensure that when one family gets swapped out for the other, things don’t jump around on you and constraints don’t break.
The next step is to create a new Parameter that is configured as a “Family Type” parameter.
Here I’ve named it “Door Panel Type”. You then need to choose which Category of families you want to be available to that Parameter. We’ve created our panels as Generic Models, so I choose this category.
Note that all families that are assigned to that category will be shown in the drop down for that parameter, so make sure you aren’t cramming too much into one family. For instance, if I also had a bunch of families nested in that represented door hardware – knobs, pulls, etc. and they were assigned to the Generic Model category, our drop down for the panels is going to be really confusing, because you’ll see families for both panels and hardware.
Now here comes the little trick that brings it all together: insert one nested family and position it correctly.
You don’t need to insert all of the nested families and go through the trouble of aligning them and constraining them. All the nested families have to be loaded into the main family, but not inserted. Now select the nested family and go to its Element Properties. At the bottom you’ll see Label. Set this value to use the parameter you created earlier (the Family Type parameter) so that this family instance will be driven by it.
That’s all there is to it! Now, when you change the parameter for Family Type, it will swap out this instance with the appropriate family. Brilliant!
In the example at the top of this post, we’ve got two instances of a nested door family that allows endless combinations. Each side of the door can have unlimited family options. This door has 7 panels for each door, giving us a LOT of possibilities.