Let’s say you have a family that has shape handles for instance dimensions (Length Parameters). What if you want to use it for quick prototyping, and then switch that same family into a version that uses Type based parameters?
Here’s how I went about it:
- Change all existing Reference Planes to “Not a Reference”
- Create new Reference Planes
- Create new instance parameters bound to those Reference Planes
- Lock one of the planes on each Dimension to existing origin planes
- Create a corresponding set of Type dimensions
- Create a set of Yes / No parameters for “Use Type for …”
- Create formula like:
if(Use Type for X, x type, x instance)
- Apply it to the original parameters (the ones that are driving geometry):
How to Use:
- Place the family
- Resize using the shape handles (instance dimensions)
- Create a Type
- Modify the type Values and Tick the “Use Type” box
At this point, the Shape Handles are still visible, but only the Type values are used for the geometry.
Download Sample Family Here – Revit 2018:
Note: A future development of this family could be to make an inverse visibility parameter that switches off the Shape Handles once the Type Value is enforced.
Chris Price has been pushing the limits. Check it out:
“What I found was Revit would crash at around 580 conditional statements in a single formula… Surely Autodesk should know someone would try and do this, lol!
So how to get around this limitation, my first thought was to try and use “And” and “OR” conditions to try and reduce the number of required conditions. However, this was going to be extremely tedious and there would still be 168+… So then I decided to simply split across a couple of parameters. EG: I had 500 conditions in one parameter then linked to a different parameter with the remaining conditions. SOLVED!
I did note a large performance hit when changing parameters in the family editor. Changing any values would take 5-15 seconds. However, testing in a project and the changes are instant! So not sure why performance is fine in a project.”
Read more at:
Nice tip from Revit Rants on how to round values within a family – and it allows much greater flexibility as to the rounding increment. In the example below, Chris uses ROUNDUP to round to a 5mm degree of precision. You could combine his method with Shared Parameters to ensure that the resulting value is schedulable (make Param2 a shared parameter in the example given below):
I have a parameter called “Param1” that I want to drive “Param2” from.
Param2 = (roundup((Param1 + 5 mm) / 5 mm)) * 5 mm
Revit Rants: Revit Formula Rounding
A couple of formula tricks from the CAD Shack:
Pick One and Only One
Here the condition number will allow only one paramter to be true in a list. Associated with a type, you could control a ton of things simply back picking the correct type.
“Don’t Change Me Bro”
If you need some text to not change, put that text in the Formula column with quotes around it. It greys it out in the Value column. This should stop the majority of users from changing its value.
CAD Shack: Revit Family Formula Examples and Tricks
This is an example of an family with an array that kinda mimics a curtain that opens and closes.
However – it is also a good example of what happens if you don’t create a fix for when an array drops to only one item. You need to formulaically stop this from happening, by doing something like this:
Applied Array=if(Calculated Array>1,Calculated Array,2)
(where Applied Array is the parameter applied to the physical array in the family, and Calculated Array is the number that is formulaically derived)
It is currently not possible to evaluate a text string in a conditional statement. You can have a conditional statement report a text string, but not check text and base a condition on it.
RevitCity.com | Help with If then statement
For the very best resource on Revit Formulas, go to:
Revit Formulas for “everyday” usage
Great forum post from Klaus Munkholm – also author of Revit Forum Blog.