Guest Blogger Martijn de Riet: Let me tell you about Revit Families
Jared’s Note: As should surprise no one, Kristian’s post comparing ArchiCAD GDL vs Revit Families caused quite a stir on both sides of the ArchiCAD vs Revit divide. I am both thrilled and honored that Martijn de Riet has written a wonderful response to Kristian’s comparison, from the Revit side of things. Martijn is one of my favorite Revit pros on Twitter (more so after reading this post while doing my editing and formatting); he is someone who does a great job of keeping me in line about all things Revit, is very knowledgeable about BIM, and if I’m honest someone who makes me nervous whenever I see he has responded to one of my posts, tweets, etc. Everyday he lives up to his Twitter description of “Brutally honest, straightforward.” I hope between Martijn, Kristian, and all the great commenters, we can all learn a little bit more about our own preferred tools and processes, as well as those that are less familiar to us. Onward to BIM!
A few days ago, Kristian Bursell wrote a post about the differences between Revit Families and ArchiCAD GDL. While I enjoyed reading his post and he was right to a certain degree, there were some things in there that needed a response.
Totally unrelated to the matter, but still highly valuable to sensitive topics: do not EVER say you’re unbiased. Kristian is an ArchiCAD user and consultant with over ten years of experience. I am a Revit user and consultant with almost ten years of experience. I am extremely biased. Totally and utterly biased. There are hardly words to describe how biased I am.
But I am open-minded. And I’m assuming that this is the term Kristian was looking for. I’m not, and I am assuming he’s not either, one of those fundamentalists that has long ago decided everything else is a huge stinking pile of useless garbage.
The second part of me being biased comes from the comparison itself. It’s apples vs oranges. Scripting vs User Interface. And I HATE scripting. I tried it in Revit. It too has the ability to create macros. The Revit API would let you build a family creator that would roughly compare to the Archicad GDL interface. And that interface would have the same abilities to link to external or internal project data. It is another way of creating content in Revit. For instance I am currently checking a Door creator that uses Excel and Access data to create the families.
If you are a visual/graphic kind of guy (like me), having to actually script your families is a nightmare. It changes everything. That too is a form of being biased. We’re men, not machines. We cannot shut down our personal preferences. We can try to keep an open mind, but somewhere in the back of my mind there will always be that little voice saying “what kind of sh*t is this? There has to be a better way!”. And, if I read the post, I can’t help but think that this is written by someone highly familiair with scripting and not with a visual UI to create components. And, as it would with me, that resonates…
Back on topic; I found a few shortcomings in the actual comparison.
It’s bad practice to actually constrain the solid geometry. Good practice would be to create a parametric “framework” of Reference Planes. These are virtual planes or lines inside the family that define the bounding box of a family. These planes are dimensioned and referenced to parameters. The actual geometry is simply locked to these planes and inherits it’s geometrical parameters.
It sounds like a minor detail but in practice it’s crucial to limit the amount of errors and frustrations in family creation. Looking at the images in the post, that’s a fundamental mistake the author made.
For instance, the sink has rounded corners. And its dimensions are constraining the solid sketch. This combination will turn flexing the dimensions into a potential disaster. Good practice would be to add some reference planes and reference lines, dimensioning them and making those flex correctly up front. Then draw the solid and constrain.
File size isn’t an issue in Revit. It doesn’t necessarily affect model performance. I have tiny families that only consist of 2D representations (<100kb) that take forever to regenerate. I also have highly complex families of over 6mb that work like a charm. The way a family functions is defined by the kind of constraints, levels of nesting and other stuff, not file size. Besides that, when I place a 6mb family and copy it around 1000 times, this hardly affects model performance. All instances reference the same database entry.
The myth about file size originated in the 32bit era. With 64bit machines and limitless amounts of RAM this is no longer an issue.
Drop Down Menus
I very much like the ArchiCAD ability to use drop down menus. In Revit, you can reference other parameters. So Booleans (Yes/No) can be used to drive numerical, other Booleans, and text parameters. It is, in comparison, a rather clumsy way of doing things but will give you the same results. I’ve watched the videos and can safely say I have basically the same families in Revit with the same functionality and options available.
It’s just a different way of doing things. I wouldn’t go as far as saying that it’s less efficient. I don’t know how long it took to create these examples. I also don’t know how skilled you need to be to create them. For me, it would probably take forever and a day in GDL. Not quite so much in Revit.
There is something I can give ArchiCAD major credit for; however you look at it, the ability to create limitative (are they?) dropdowns is a HUGE advantage. Revit families of this kind of complexity need to be very well thought through and documented. And then they will still probably be complete jibberish due to the great amount of parameters and options to anyone that hasn’t studied them very long.
Revit does have one option to create dropdowns: Family Type parameters. These, in combination with nested families, let you “compose” a family out of it’s elements. They have one big advantage: they will pick up any object of the correct type in your project (which means you don’t have to load them all in your family).
They have one big disadvantage: they will pick up any object of the correct type in your project (even the ones completely unrelated).
I would rather be able to define a limited set of options like in ArchiCAD. This can be achieved by using Type Catalogs but still, the ArchiCAD way seems much more efficient and user friendly.
Revit does have the ability to reference outside information in the UI, although limited (here come apples vs oranges: when using the coding environment in Revit, it would be the same). There is the option of Type Catalogs (which can be driven from Excel sheets of ODBC-databases). Also their are reporting parameters that you can use in Hosted Families (families that automatically attach themselves to other building components), which infuence the geometric behaviour of the family based on characteristics of it’s host. For instance, the placement or size of a Door Frame hosted in a Wall can adapt to the thickness of that Wall.
Adaptive Component families are the most sophisticated in Revit. They will, as the term specifies, adapt themselves to their environment, thus creating highly flexible families that define their appearance based on their placement in the project. Combined with the option of having text parameters respond to numerical or boolean values creates the possibility of having all kinds of properties respond to geometric differences or changes. The basis for this flexibility is geometry or numeric values. And that is a shortcoming. It’s currently not possible to have the geometry respond to a text value, internal or external.
In older versions of Revit MEP, families could contain csv-files (basic excel-like formatting files) to get all kinds of data. In 2014, this option is expanded to other categories too. I haven’t had the chance to thoroughly test this, but if I’m correct this functionality does let you embed, extract and use all sorts of data from an external source.
I cannot compare Archicad and Revit on Materials and Connections. I do not have the Archicad knowledge. However, I can say that Revit Lighting is not for the faint-hearted, despite (or because) of the ability to reference IES-files. As for the 2D representations: I wouldn’t recommend those. Again, it’s a inherentence from the old days where filesize mattered. Now, it’s just another thing to manage and potentially screw up. There are a few very important aspect of Revit Families that Kristian missed in his post. I can’t blame him; the majority of Revit users greatly underestimate the options available when creating families.
Revit Families are NOT by definition fully defined in a project. If you place a Revit family in a project (for instance a piece of furniture), a few curious things happen:
- You can add parameters to the project. These parameters are not in the family, but unique for the project.
- Through schedules you can add a thing called Calculated Values. These are parameters that use conditional statements to calculate new things, based on the actual value of the placed instance.
- This piece of furniture “knows” which Room it’s in. And this too can be scheduled, along with every parameter of that Room.
The above three things combined mean that, once placed in a project, a Revit Family can inherit properties from other objects (mainly rooms or spaces), perform calculations and/or logical statements and add those properties to the family definition. Out of the box you cannot drive family geometry based on that (although, through the programming interface you can. It’s fairly easy to write a macro that ports this kind of data all over the place. An excellent and free example are the Whitefeet tools).
This is, in my humble opinion, by far the most powerful feature in Revit. Because this brings the ability to have families respond to their surroundings, without the need to actually use the Revit programming interface (did I mention I hate all kinds of code, even C++ or BASIC?)
Revit Family Parts can be turned off and on parametrically.
Every solid you create (or family component you nest) can be turned off and on parametrically. Select it, there will be a “Visible” parameter in the properties. Select the radio button and link this hardcoded property to a Yes/No parameter for control. The Yes/No parameter can then be driven by any formula or conditional statement. In theory, one could have a Window family with all options modelled (sliding, fixed, turning) and turn these options off and on by parameter. Not always a good way to do it though, often a nested component with a Family Type parameter is a better option.
Nested families can inherit properties from their host
Once you start nesting families a great functionality comes into play: the ability to link parameters from “child” to “parent”.
For instance the Window. Let’s say you created the frame and a few infilling panels. You cannot choose the panel based on parameters (which is a big shame). However, the size and position of said panel can be defined by the host parameters. So if I were to have a window family with a checkbox “ventilation grille present” I can do a few things:
- Turn a family component on and off that represents a ventilation grille.
- Adjust the infilling panel in height so that it automatically leaves room for the ventilation grill or fills up the entire space.
This post isn’t meant to “prove” Revit is better than ArchiCAD. It’s different. Assuming you have enough knowledge, both will get the job done. But I do want to point out the fact that my post will leave truly unbiased readers (such as my dentist or anyone else not working in the AEC industry) with the impression that Revit IS better. As would they think from Kristian’s post that Archicad IS better.
The funny thing with humans is that facts don’t matter, perception does. It’s not about better or worse. Both Revit and ArchiCAD do what you want them to do. But GDL-experts coming from Archicad will always feel more at home with ArchiCAD than with Revit. It’s a different perspective. I will never be comfertable with GDL. It’s a personal preference. The only “real” difference between Revit Families and GDL is scripting vs graphics. The rest is (lack of) knowledge and your point of reference.
The intriguing question is: Assuming that Archicad and Revit are both equally capable and assuming that the only real limitation to what you can do is knowledge and training, does this mean that your choice in BIM software should be based on your preference in the User Interface? Is the real question here whether you’re a scripting or a graphics person? Does the debate about which software is better eventually boil down to “nurture vs nature”?
(Martijn’s post is longer than anything else I’ve posted on Shoegnome, but I didn’t want to break it up and it’s full of so much good info. So below are some more thoughts that I felt could be moved to the end for hardcore readers. Enjoy!)
As I’m writing this, there are currently 3 comments to Kristian’s post (Stefan Boeykens is the last one). In response to Ben Cohen, Kristian writes:
“The equivalent of editable hotspots in Revit are what they call Handles. You can assign rules to them but i’m told (by a “Power” Revit User) it once again affect file size. Also its restricted to the properties of the element whose handle you are using as to how it can move. As far as I know you cant really assign the levels of control we do with hotspots for altering configurations as well as general sizes. I’m thinking of the rotating hotspot you have/had on your window tool to change an opening from sliding to casement to double hung, or even something simple like the positioning of a downpipe in a length of gutter in a roof edging GDL Object; not possible in Revit.”
Not entirely true. Shape Handles are purely geometric and only work in certain ways. As a building engineer I detest them, basically because you lose control over the outcome (a Door width of 759.4mm is a nightmare). I usually create my families in such a way that they don’t work. Except when the family’s nature calls for them off course (for instance a gutter which should be flexible by definition). Having shape handles however does give you the ability to lock a Family geometry to other building elements and have it flex automatically. But, contrary to general element file size, that DOES hugely affect model performance.
Changing openings from sliding to casement to double is generally done by using nested components. The Door/Window infill is a nested component. Add more infill families to your project and you can choose from a Dropdown menu which one you would want to use. Or add it to the type catalog.
About the position of a downpipe in a roof gutter: sure that’s possible. Want it to be a certain distance from the side? Want that distance to flex based on the length of the gutter? Want that distance to be a numeric value? All relatively easy to do. As is the amount of downpipes based on the total length of the gutter, the length of the downpipe based on the height of the gutter, and so on. IMHO this is a fine example of the “information bias” talking.