Revit and FreeCAD
Last couple of weeks I've had the opportunity to do some work in Revit. This was highly welcome as my knowledge of that application was becoming rather obsolete. Having a fresh, new look on it brought me a lot of new ideas, reinforced some ideas I already had, and changed a couple of old perceptions too. So I cannot resist the temptation to do a little comparison between Revit and FreeCAD.
For who is not used to this blog, you must be warned that I am one of the developers of FreeCAD, and therefore my opinions here cannot be anything else than strongly biased. But for the sake of the exercise, I'll do my best to keep as neutral as possible, and look only at the technical side (I won't mention all the open source side of things).
The most important point I think, is that both pieces of software are surprisingly more similar than we use to think. Working in your spare time on a small open source project, and getting bashed all over the internet about how perfect Revit is, you end up thinking your humble work is phenomenally behind what thousands of Autodesk programmers can produce. It turns out that's a pretty wrong perception, I think. Both have their strengths and weaknesses, but FreeCAD comes out surprisingly well compared to Revit, and is actually better in many areas.
I'll start with what is similar in both apps. Both are fundamentally based on constrained sketches, that is, 2D shapes where you can put constraints (radius, length, etc), that you extrude to form 3D objects. Other extruded 2D shapes can then be used in boolean operations (union or subtractions) to produce the final object. So, very fundamentally, the modelling process in Revit is not very different than FreeCAD. In both apps, you'll find these profiles everywhere, underneath almost any object.
Both applications use reference planes to draw onto. In FreeCAD, there are several modalities depending on the workbench, but the concept is the same: You define a work plane, which is a plane in the 3D space, then you draw your 2D shapes on that plane, then you extrude.
The higher-level objects, like walls, structures, windows, etc... are in both applications convenience wrappers around these basic modelling tools. It would be a hassle to have to draw every outline of every wall you need in your project, so the wall tool does that for you, you just need to draw the baseline of the wall, and the whole modelling operation (make the 2D contour + extrusion) is performed automatically for you, and performed again every time you change something to the wall definition.
All the rest, that makes a full BIM application, is basically extensions around this modelling "core". It also surprised me how little the Revit core has been modified over the years. All the new features of these recent years are in that area around the core, not the core itself. This is not necessarily a bad thing, when you think of it, BIM work is composed of a very big part of theses things that are not solely 3D modelling.
The bad sides of both applications are also surprisingly similar, and, even more surprising to me, equal in number and annoyance. In FreeCAD, due to its young age, and the fact that there is too little work spent on the BIM module (don't forget you can help me to remedy the problem!), all kinds of shortcomings, limitations and incomplete features cross your path all the time. Fortunately you can work around these most of the time, and your ability to find and use these workarounds grows with your FreeCAD experience, up to a point that it doesn't annoy you anymore. That typically happens with all FreeCAD developers, so it's important that new users report the problems they encounter.
In Revit, my impression is that you basically encounter the same amount of annoyance. My even deeper impression (a secret I won't hesitate to reveal to you now, exclusively!) is that in the perfect world of Revit, where "everything works", so to speak, programmers are extremely reticent to add anything that could "stain" that perfect model. So all kind of external, hybrid, workaround features are vetoed or minimally implemented because they couldn't avoid, but highly discouraged.
But, more useful than the rant, I also made a list of points that I found good in both applications, with the obvious idea to gather things to improve in FreeCAD.
- The workflow is totally adapted to architecture. This is really a joy to work with. All these little annoying tasks you have to fill your day with, put annotations, make a list of this or that, have some kind of automatic tool. Revit has few tools and buttons, but all of them are a typical architect's task. I don't think any other BIM app offers so much comfort to the architect. No wonder once you begin to use it, you are hooked.
- Autocad-like output: What comes out of the 2D views is really a perfect AutoCAD-like output. With lines, hatches, everything. And you can draw on top of it, which allows people new to Revit but used to AutoCAD to hack their way our of problems very easily, at the cost of infuriating Revit pros around, maybe, but at least you can get the job done even if you are new to it.
- Hundreds of auto 2D objects: I guess that's the most valuable thing Autodesk has added around the Revit core: All the whistles and bells that you used to do manually in AutoCAD, are now smartly handled by some automatic tool: Automatic leaders that pick a value of what they are showing. Automatic tables that gather all the notes found in a view. Automatic section marks that update with the page number the section is in, etc.
- Autocad hatching and "syntax" everywhere: The 2D output of Revit is ready to be worked on further and natively in AutoCAD. I don't think any other BIM app produces so nicely editable DWG files.
- Ease to work in 2D views: Revit is made mostly to work in 2D views. Many tools are in fact only available in 2D views. But one has to admit they are very comfortable to work with. The hidden lines system is mostly cumberstone in the 3D view, but it takes all its meaning in 2D. You really work on a 3D model like if it was a 2D drawing.
- Ease to manage objects by category: The categories of Revit objects (families and types) are very strict. Objects that don't fit in these categories (for example imported objects) are almost useless in Revit. However, this has its advantages too, all the "siblings" relationships that exist, for example, between several types of the same family, or under a same category, are pretty powerful. In Revit, designing object categories is almost more important than desinging individual objects themselves.
- Fast 2D views: Revit pseudo-experts out there will quickly tell you that it's because Revit is a database, doesn't generate its 2D views, and (insert commercial bla-bla shit here), but the fact stays, screen views must be generated, and hidden geometry must be calculated. When an object changes, all the views where it appears must be updated. And this is really fast in Revit.
- The workflow is not specifically adapted to architecture: This is the exact opposite of Revit's first strength. FreeCAD is a generic application, and not a specialized one. This will give you less comfort, but bring a wide series of tools, workflows, solutions or ideas coming from other areas (mechanical engineering, etc). There is always a wide series of possible ways to achieve something, so you (almost) never find yourself in a "this cannot be done" situation. Also, being not specific to architecture, FreeCAD can easily be used by people who are not architects, to design buildings or parts of buildings, their own house for example.
- Modelling is very powerful and free: Modelling capabilities in Revit are limited. In no time you find yourself in front of something very hard or impossible to model. In FreeCAD it's really hard to find something you can't model, and if so, it's easy to use geometry modelled in other applications.
- A complete tree: Revit doesn't show you each and every object in its tree view / project browser. FreeCAD does. That has a lot of advantages.
- FreeCAD can work much more easily with dumb or bad geometry: In Revit, for an object to be workable with, it must comply with many rules dictated by the general structure of the modelling core. Basically, it must be an extrusion, its base 2D shape must be translatable to Revit's 2D system. Otherwise you can do very little. FreeCAD on the other hand can even work with mesh data and use that in BIM workflow. An important consequence is that importing stuff from IFC integrates much more seamlessly in FreeCAD, while in Revit it's a very delicate matter.
- Freedom to organize model as one wishes: In FreeCAD you have many ways to group objects together, and group these groups inside other structures. So you have a very big freedom to organize your model as you like. If you don't want to use the levels/floors system, no problem. If you have something that's not exactly a building, together with your building, it's easy to create a specific structure for it. It makes you also think about how to organize yourself, which is good.
- Ease to work in 3D view: As much as the 2D views of Revit are comfortable to work with, the 3D view is not. The 3D view of FreeCAD is really a joy to work with, comparatively. You can easily hide/unhide or temporarily change the display style of individual objects, select part of objects, and visualize well all the reference and work planes. Here, you can really work in the 3D view.
- Ease to work with other kind of data from other people: Revit can, with many limitations, work with IFC and DWG files, and you'd better keep them as linked (unmodificable) files, not try to import their geometry to do something meaningful with it. In FreeCAD, on the other hand, it is pretty easy to turn anything into a valid FreeCAD (and therefore BIM) object: IFC or DWG objects, but even mesh objects from Sketchup or Blender.
- Happy mix of imperial and metric units: There is no such thing as a template in FreeCAD. You could work on a model in centimeters, hand it over to someone in the US who will see everything expressed in inches. Internally, FreeCAD draws everything in millimeters, always. Only what you see on screen is expressed in the unit of your choice. You can also always insert values in any unit, no matter what the current scheme is, or even mix units in a same expression.
- Easy to manage objects one by one: Contrarily to Revit, where the power lies in categories of objects, the focus in FreeCAD is on the individual object. It is easy to turn individual things off (and turn them back on afterwards), modify a single instance of something without the need to refer to categories or families. You can easily recreate a similar workflow as families, by basing several objects on the same one (clones), but this doesn't tie the clones to their "master". You can give them another master anytime, or grow something else on top of them, using the "family" only as a base. You can do all that in Revit as well, of course, but I find it already much more flexible in FreeCAD.
- 2D modeling tools are more powerful: Hard to believe, but it's true. Have a look at what is possible with the Sketcher, there is already much more than what Revit offers.
- Proper MDI: Working with multiple documents in Revit is still pretty cumberstone, to say the least. Why the hell must a reference be unlinked when you open another document containing it too? FreeCAD has a standard, normal way to work with multiple documents, they can all be openend in parallel, you can display them all together, etc.
So no more shame, let's claim it loud, yes, FreeCAD is as good as Revit! "As good as" doesn't means "the same", though, and their philosophy and workflows are very different. Revit will give you more comfort and speed, FreeCAD will give you more freedom. I don't know if we'll ever reach the comfort level of Revit (I'm not convinced that it wouldn't force us into options that would harm the freedom side), but on the question of speed, there is still a lot to be done, no doubt we'll still see huge improvements in that regard.
I took note of a series of small things I'll try to fix or add in FreeCAD, but also identified these more generic areas that I'll try to improve in FreeCAD:
- References: At the moment there is no reference system in FreeCAD that allows you to split your work in several files. This is a huge question, that has complex implications in FreeCAD's internals, and that the PartDesign people is already on their way to solve. However, we might start experimenting with something directly usable in BIM workflows.
- TAB key cycles through snaps: I find that pretty good in Revit. Currently, in FreeCAD, only the "closest" snap location is kept. We need instead to keep all of the snap locations in a certain radius, order them somehow, and allow to hit a key to take the next one on the list.
- Remember last "hold" snap point: When hovering the mouse without moving for a certain time, that point should be remembered. Then, additional snap locations should become available on horizontal and vertical lines passing through that hold point. This needs a little more thinking to define more exactly what these additional snap location should be.
- Wall layers: In FreeCAD, wall layers can already be made by basing several walls on a same baseline. but this should be developed further so the handling of these walls becomes more user-friendly. Perhaps a new multi-layer wall object, that would include and manage the individual parts. This needs more thinking as well.
- Walls joining: Currently there is no automatic wall joining in FreeCAD. You have to join walls manually, by adding one as a sub wall of another. I'm not sure I like Revit's way too much, because you cannot see clearly where one wall ends and the other begins. You cannot see in Revit what will be exported to IFC, for example. But nevertheless, when you have multilayer walls, it becomes very convenient to have proper wall joining based on materials. Here again, we need a better plan to know how to achieve the goal.
- Hi-res system: The Arch Equipment currently has a system to display a high-resolution mesh instead of its shape. This high-resolution mesh can then be used when exporting to mesh formats such as OBJ. This system should be extended so it supports a higher-resolution shape as well, and applied to all Arch objects (ex: brick wall, or wikihouse panel compounds). There is a basic version working already.
- Better support of IFC properties: Currently all IFC properties found for an IFC object are stored in a simple dictionary (property sets are discarded), and the contents of that dictionary gets saved to IFC properties when exporting to IFC. We need something more complex, that keeps track of which property belongs to which set, and the ability to modify and save that structure back faithfully when exporting to IFC. I'm already working on this too.
- New DXF export: The current DXF exporter is still based on the old python library, we need to recode a new, faster one in C++ like we did for the importer.
PS - Half the stuff on the images in this post was done by Ryan