Revit and FreeCAD
Last couple of weeks I've had the opportunity to do some work in
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
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
All the rest, that makes a full
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
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
- 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
- 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
- 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
- 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
- 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
- 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
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.
we are also trying to build a
"best practices" manual
to transfer data between FreeCAD and Revit (and hopefully other software in the future).
PS - Half the stuff on the images in this post was done by Ryan