Global Parameters and Arrays
Global parameters do not directly support arrays – you cannot associate a parameter to an array number in a model (unlike the ability to do so in the family editor).
When you select an array number in a project, have a look at the Options Bar - there is no label for you to associate a global parameter.
In the family editor, when you select an array number - there is a label on the Options Bar for you to associate a family parameter to the array number.
To work around this Global Parameter limitation, you need to build the array into an external family:
- The family needs to have an integer instance parameter - this can be created directly when associating the array number (or created prior).
- The array could consist of nested families or arrayed elements - it is usually much easier to control the array when it is a nested family, but that may slow response times if there are too many levels of nesting.
- If you need to be able to schedule, tag or select individual families in the project (from the array), then the nested family should be 'Shared'.
- Once you have associated the array number to a controlling parameter, it is wise to use that as a check parameter, to prevent users from inputting a value of less than 2 - because this would break the array.
- You need to then create a User Input parameter, which is the one used in the project.
- The check parameter is then driven by the User Input array number, with a check formula in place to prevent an input less than 2
- Load the family into project then its instance property (Array Number) can be associated to a global parameter.
Once this is set up, your nested family array should be driven by Global Parameters in the project.
If you would like Autodesk to fix this annoying limitation, please go to Revit Ideas to vote:
Enable global parameters to associate to Array Numbers
In this Revit tutorial, we’ll take a look at parametric arrays in Revit families and how to lock them, constrain them, and also set some custom parameters to them. Specifically, we’re going to start with four things.
We’re going to start with a profile family, a generic model family, a curtain panel family, and then we’re going to load that into a project with just a sample curtain wall as shown here.
To start, snap some lines to what I’ve already kind of set up. I’m gonna lock a line to each side of this so that it flexes with a width parameter and a depth parameter. I’m just using the trim command there to flush it all up. And just to test it, looks like it’s working okay and this is what we are going to make a louver out of so I’m just making as a profile family in case I want to come back and change it later.
So once I’m done I’m going to load it into our louver generic model family and we’re just going to create a basic sweep that then hosts that profile family that we just made. I’m going to snap a sweep line to that middle reference line there, constrain its ends, and then once I complete the sketch I’m going to grab a profile, the one that I just made, and load it in.
Navigate to 3D make sure it looks good, press ok, and then just associate a couple of parameters to type parameters within the family. I’m assigning a material to it, and then I’m also going to associate the angle parameter of that sweep to a parameter called rotation. Now once we have that, let’s just test out those couple of parameters just to make sure that it is actually working. Looks like the angle is working pretty well and then let’s just adjust the length to make sure it’s moving.
One more thing, we need to map the parameters from the profile family we just created. Just the depth and the width so that we can control them through the parent family that these eventually live in. And then we’ll load that into the curtain panel. So this is where we get into arraying what we’ve just created. I’m gonna lock it in the X and y-axis and then I’m going to navigate to – actually, first let’s do it what we just did, associate each parameter from that nested family to this parent family so that we can control it through here. Just a few of them and we’re good to go!
Next, I actually I need to add a reporting parameter to the width since it’s a curtain panel, it’s controlled by whatever it’s hosted in in the project. So we’re gonna make that reporting so it just it shows up with whatever that is and I got to give it a unique name here, so just call it panel width. Now that we have that, let’s lock this in the z-axis.
But first we need to create a couple of reference planes that are going to be kind of the start and finish of the array, and obviously since the louver has a width to it when it’s open, we don’t want that to be at the very bottom in the very top we want that to have an offset. So I’m going to call that array offset. And this offset is actually going to report to just half the width of that louver, I’ll show you in a second.
So if you look what we have here, I’ll just clean a couple of things up. Our length parameter should probably be an instance since it’s going to refer to a reporting parameter, really all of these should probably be instance parameters. So let’s just start with that, and then go to an elevation view where we’re going to, again, assign a reporting parameter to the height now so that we can use that in some of our upcoming formulas.
So now let’s go ahead and edit a couple of these names here so it makes more sense later on. That width parameter, we’re gonna make that louver width so I know what I’m talking about. And then the depths, let’s just do the same thing. And then refer to that in the formula. So the array offset is just going to be half the louver width. Click okay, we can always come back to that.
Now we need to host the louver on that offset plane. It looks like it’s not letting me snap to it, so let’s just kind of move it out of the way to see if we can snap it. So I did forget something, so let’s dive back into that family and check this out. We’re actually going to have to change that reference plane from not a reference to strong reference that we can actually snap to it when trying to lock a piece of geometry. So now that we’ve done that, we should grab the center point, there we go!
Now I’m going to use the array to and array last, make sure you select the last, just to put it off to the side just so we can kind of snap it into place. It’s never a good idea to put it in place at first, because you want to make sure you lock it to where you want it. We only need to lock the last one in the array. So I’m going to lock it to its center first and all the ones in between will follow. Lock it to this, the front/back reference plane, and then also lock it to that top array offset.
Now that we have that, we can specify a parameter for the number of louvers that are happening in that array. We’ll call that louver count. So the louver count is going to – It’s going to reference instance parameters in its formula so we’re going to make it an instance parameter and it’s going to be panel height minus double the array offset.
If these were all closed, they should all line up perfectly from the bottom to the top. So it looks like it’s not letting me use the panel height in here because it’s not referencing out-of-the-box geometry in Revit, and I’ve done this before so I know that you have to grab the actual reference plane at the base rather than the reference level when you’re assigning a reporting parameter in this family.
So, let’s go ahead and copy and paste that formula back in there and it should work.
First, let’s test that parameter just to make sure it’s actually working, but then we’re gonna have it report to a few other parameters in its formula. Looks like that’s all good to go.
Now let’s just make a regular rotation parameter which the user will actually be able to edit. Then a couple of more just kind of presets for the rotation if we want it open, then the louvers will be at a perpendicular angle to the – well actually, a parallel angle to the the ground floor. And if we want it closed, they should be completely closed, all vertical facing upwards. So then for a formula, we’ll just do, if it’s open make that constraint parameter zero, if it’s closed then we’ll make that 90, and otherwise just whatever the user specifies in the rotation parameter. So just to test all this out, let’s close it. Nice!
And then, let’s test the actual rotation parameter too. So it looks like our rotation constraint parameters is reporting kind of what we want. But, if you zoom in it looks like we’re slightly off. That’s because the array spacing would never actually equal the number of pieces arrayed, it would always be plus one. It worked” Just kind of mess around with that if you’re if you’re not too sure what I mean, but now that we have that set up let’s go ahead and kind of test it again. But, let’s also test some of the other parameters that define this too, so since it’s all reporting to the louver width this should change the count and the spacing just like that. So you can get a number of iterations done pretty quickly with just the simple family that we created in about 10 minutes or so. Now that we have all that, here’s kind of a before and after. I just cleaned up all the parameters, I’m adding some constraints, we can add extra functionality to this to constrain the user from like entering something that’s going to break it. So I’m just going to say if the rotation input is less than zero, make it zero, if it’s greater than ninety, keep it at 90, and if not then whatever they specify in between.
So now that we have four specified I can just start messing with everything that we just built in, changing the rotation, louver depth, louver width, whether I want it closed or not. And you can get just an infinite variety of shapes and spacing and sizes so this can be applied to a number of different things as you’re creating content Revit. I hope that was helpful and I appreciate you guys watching. Tune in next time! Thanks everyone.
In this blog, ATG Technical Specialist Quentin Worm demonstrates the different formulas you can use in Revit family parameters.
Array Instance Parameter
I’m going to use a ceiling fan I created and use the blades for the array. Whenever you create an Array, you have the option to turn the array into an instance parameter. First you will need to create a parameter to choose from the label drop down. I use number of blades to make it easy to understand. When you click on the array circle, a contextual menu appears on the ribbon. On the label drop down list pick the parameter you created once you select the parameter it will automatically turn on the Instance Parameter. Now you can go into the Family Types and add a formula to it. You can create another parameter called Angle (Integer, 360) and in the Formula of the Number of Blades, control the Number of Blades with ( Angle / 90) to make 4 blades.
Formulas with Yes/No Parameters
You can use a simple one like (Height < 4’). With this formula, it will turn on the parameter if the object height is under 4’. Or you make a more complex formula of (Height < 4’ 6”, 1 < 2, 2 < 1), which also does the same thing.
Formulas can be used on any parameter. I can add a formula to make the width half of its height like I used above. You can also use simple mathematical operations (+, -, *, and /). Additionally, you can use more complex operations (tan, cos, sin, etc.). You need to put the exact spelling of the parameter you want to use, and add the operation, then number.
I used a formula to make the rough opening around the door larger for construction installation. Here is the formula I used on a door that I created:
Contact ATG today at [email protected] to learn more about our technical resources and staff that can help you with your Revit workflows.
Watch this Tech Talk on Revit to Specifications.
Watch this webinar on Revit 2020 and CTC Tools BIM Project Suite- Using Path of Travel and the Occupancy Flow Analyzer.
- In the Family Editor you can Array a geometry or nested family (ex. linear or radial)
- Always group and associate to assign an integer parameter for the array
- Move to 2nd or Last depending on how you will dimension and calculate the Array
- After an array, select an instance of the new group and then the array "dimension"
- Assign a "Label" in the options bar to control the array count with an Integer Parameter
1. It's not uncommon for a family content builder to parameterize the array count and then leave the count open for the end user to flex. Consider adding an Optimal Spacing parameter so that when the length of the family is flexed, the spacing between shelves, muntins, rafter tails, etc. remains a desirable constant and let Revit calculate the Array Count. The designers will love you.
Not good enough? For scheduling (ex. rafter tail counting) make the Array Count a shared parameter and the PMs will celebrate too.
Optimal Spacing = a default "Length" value for the office standard
Array Count = (Length/Optimal Spacing) + 1
2. Ever need an array count of 1? There are a number of ways to do this:
- Offsetting the first and last instance of an array (toward the center of the array) with an Offset Array parameter, so that the first and last overlap in the center when the array count is equal to 1.
- Optimal Spacing = a typical "Length" value for the office standard
- Array Count = (Length/Optimal Spacing)
- Array Count True = If(Array Count < 2, 2 , Array Count)
- Offset Array = if(Array Count < 2, (Length / 2), 0')
- Other Possible Solutions:
- hiding the first and last element of the array in the geometry of another element like muntins in the stile of a wood panel door
- Using yes/no parameters to visibly turn off the array and turn on a single instance when Array Count = 1
3. Are you getting errors when you try to model 2 arrays in the same family?
- Create the arrays in separate families and nest them into a host family
4. Are your muntins, shelves, or other crossing element arrays giving you the tic-tac-toe (#) look at an intersection? Does a join geometry not always work for you?
- Consider adding a slight curve to the front and back of your muntins/shelves and don't join geometry
- might also be helpful for many railing family intersection challenges.
Parameter revit array
.Revit Masterclass: Family Creation #2 (Parametric Arrays)
- Import direct water pump
- Pekid definition dictionary
- Windsor colorado demographics
- 2014 mustang struts
- Stray kids height
- Mercedes c350 cost
- Words of wisdom wedding cards
- Td bank na swift code
- Steel blue floral tie