For over twenty years I have waited. I have waited for wholesome software to help me with technical geometry projects. I learned the hard way that proprietary CAD file formats and astronomical software costs can cut you off from your own substantial body of work. Most engineers stupidly accept, as I once did, that their employer will bear the costs. This does for CAD software exactly what the same attitude does for health care costs — outcomes per dollar are poor.

I started using AutoCAD in 1988. The last time I was able to get an employer to buy me AutoCAD was in 1996. The last time I used AutoCAD was in 2003 and after that, I lost contact with my previous design work. I went from being one of the best technical 3d modelers in town to having almost no ability at all. At my nadir I was composing raw PostScript directly in Vim to create technical diagrams.

I did not wait patiently. I personally crusaded to cure this problem by starting my own geometric modeling project. While that project was successful with many of its objectives, I have not quite achieved the complete functionality I had in the early 1990s. Today, however, I am sensing that things are finally turning around.



This actually worked great for me.

sudo apt-get install freecad

However, at this time, there is a lot of active development on the project and Debian was already far enough behind that one of the features of the beginner’s tutorial I was following was missing.

Here’s the more responsive way to get a bleeding edge copy from source for Debian.

sudo apt-get install build-essential python libcoin60-dev libsoqt4-dev \
libxerces-c2-dev libboost-dev libboost-date-time-dev libboost-filesystem-dev \
libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev \
libboost-serialization-dev libboost-signals-dev libboost-regex-dev \
libqt4-dev qt4-dev-tools python2.5-dev \
libsimage-dev libopencascade-dev \
libsoqt4-dev libode-dev subversion cmake libeigen2-dev python-pivy \
libtool autotools-dev automake gfortran

git clone freecad
cd freecad
cmake .
make -j$(nproc)
bin/FreeCAD -t 0 # test FreeCAD

When just running the software compiled elsewhere here are some of the dependencies I had to get.

sudo apt-get install \
build-essential libsoqt4-dev libboost-dev libboost-date-time-dev \
libboost-filesystem-dev libboost-graph-dev libboost-iostreams-dev \
libboost-program-options-dev libboost-serialization-dev \
libboost-signals-dev libboost-regex-dev libqt4-dev openmpi-common \
libxerces-c-dev libhdf5-openmpi-dev libqtwebkit4 libboost-thread-dev \
libspnav-dev libshiboken-dev libpyside-dev python-pyside

Actually that really didn’t work either. I think the best thing to do if you need to run a later version that you’ve compiled yourself is apt-get install freecad and then let that bring in 99% of the dependencies correctly. Then go run your custom built later version.

Note that this is a lot of software and it takes a while to compile.

You should be able to go back to the freecad directory as described above and do a git pull and then the cmake . and make steps again to update the build.


The file format for FreeCAD (.FCStd) is actually a zip file containing a lot of interesting stuff. There is a Document.xml and tons of (ok, 25) other files related to the project. Gory details here and here.

Access parts of the document from within the Python console with FreeCAD.ActiveDocument.mydocumentpart.

Import And Export

A huge and annoying can of worms is dealing with models created in other systems.

(As a quick reminder to myself why I am utterly correct in repudiating predatory proprietary CAD systems, here’s a classic example. I asked an intern to create a model on whatever system he liked. He used an expensive CAD package that only runs on terrible operating systems. Fine. Whatever. He then came to deliver the model on a different computer running a terrible operating system that also had this same company’s very expensive CAD system installed. I won’t link to that system but it rhymes with the Spanish word for "ugly". Shockingly to all of us, the intern’s model was not interoperable and could not be opened because the intern had used a "student" version of the program and the other computer had the "full" version installed which could not read those files! Mind blown!)

FreeCAD does a pretty good job of doing what can be done to fix this problem. Apparently it can import and export DXF files; it can in theory even do DWG files if you jump through the right hoops and you’re willing to pay. Of interest are IGES, STL, and SVG. The recommended non-native exchange format is STEP which supports solid geometry and NURBS.


FreeCAD is divided into functionality groups called "workbenches". These have their own, often overlapping, tool sets. Here is a decent list of what tools are part of the commonly used workbenches.

Mouse Models

FreeCAD is quite liberal in its acceptance of different ways of doing things. Having just sort of burned into my mind the bizarre Blender way of mouse control, I was not looking forward to learning another system. But FreeCAD has a Blender mode that matches pretty well. Having different mouse binding profiles is a really smart idea.

Here’s the Blender mouse model details.

|LMB | Select |S+MMB | Pan |LMB+RMB | Pan |ScrollW | Zoom (Or use C+S+plus and C+dash. Or…) |C+MMB | Zoom |MMB | Rotate (Camera roll)

Other Software

  • Blender is insanely awesome. Here are my Blender notes. Blender can do anything. However, it is optimized for people doing artistic things where there is a premium on complex things looking good. This is different from my emphasis on things being good. As I say, anything is possible but it can be very complex to get exactly what you want. Here is a post about how I incorporated my modeling system into Blender. Sort of the opposite of "easy". Still if you’re trying to model game assets or an animated film Blender is great. If you just need video editing, Blender is great. But that is an example of how Blender can get off topic for engineering.

  • LibreCAD correctly emphasizes that it is "Open Source and GPLv2". This is very important! If you need some blueprints, take a look at this wholesome piece of software. My problem is that I believe that the entire concept of blueprints is moribund. Why are they even needed? Today, even the shop guys can simply reference a computer model of the part to manufacture. That may yet be a bit of science fiction, but it’s possible now and coming soon. Maybe 2d tool paths are a good application of this program. When it comes to 2d work, however, I’d probably just stick with what I know best which is…

  • Inkscape — if you’re doing 2d work involving vectors, you owe it to yourself to properly understand exactly why Inkscape is deficient because in most cases, it is not. Inkscape is the straightforward GUI way to edit raw SVG (something that can be done with Vim and Unix tools too). Inkscape can make accurate geometry but it can be tedious. However, dashing off decent looking sketches and diagrams is very easy in Inkscape.

  • OpenSCAD - "OpenSCAD is not an interactive modeller. Instead it is something like a 3D-compiler that reads in a script file that describes the object and renders the 3D model from this script file. This gives you (the designer) full control over the modelling process and enables you to easily change any step in the modelling process or make designs that are defined by configurable parameters." Seems interesting. Can use CSG or extrusions of 2d vectors (which can be provided in DXF). Open source and wholesome, FreeCAD has a workbench that supports it. This is almost like 3d PostScript. See also OpenJSCAD.

  • BRL-CAD - An ancient system entangled with the US military. ("Although BRL-CAD can be used for a variety of engineering and graphics applications, the package’s primary purpose continues to be the support of ballistic and electromagnetic analyses." As in "Ballistic Research Labratory".) Started in the 1980s but Open source since 2004. Pretty complicated to get started with when I looked at it many years ago. Still seems pretty complicated. Probably best to cannibalize this if it has any compelling core features.

  • is interesting. It is a cloud based modeling system. I think it is something for people who are, for some inexplicable reason, having trouble acquiring Blender locally. Maybe there are some compelling collaboration features a la Google Docs — there certainly could be. They go out of their way to say it’s "free" (of cost, not free to audit/modify/keep forever) (today) but I’d be hesitant to tie my work up with them. It may be targeted to the same users creating gaming and video assets rather than those needing engineering models.

  • gCAD3D - This looks interesting. It’s a GPL-3 CAD system that has seen updates as recently as the end of 2019. Here is its Github repo.

Other Resources

  • CAD-Blocks - A decent collection of CAD elements for architectural/decorating purposes and maybe other applications.