Hello! You should read this FAQ if you're interested in CAD-- especially open source CAD. When we talk about CAD, we mean parametric solid modeling. Today that means boundary representations (b-rep) and non-uniform rational b-splines (NURBS), but it also somewhat includes Constructive Solid Geometry (CSG)-- you'll learn about both shortly.

What is CAD?

Why not use triangulated meshes for all CAD?

The memory requirements of triangulated meshes increases dramatically faster than the memory requirements for nurbs representation of curved surfaces.

Model transfer: 100 GB of triangles versus 5 MB of nurbs makes a huge difference when transmitting models into manufacturing equipment. Triangle enthusiasts will of course say that you could just transmit the definition of the model, such as transmitting source code, and then have the destination render or tessellate the final model. However, this is problematic because not all destinations are able to process a few hundred gigs of triangles. And in some cases the machines may not be able to compile or interpret those instructions for rendering anyway, so you can't get away with 'dirty triangle" strategies where you only render or compute just a segment of the file, unless you are using lots of really funky compiler heuristics that probably don't belong in CAD software anyway.

Why not just use blender for CAD?

All 3D modeling software render 3D objects through a graphics card*. For instance, Blender and Solidworks both use OpenGL. What this means is that the model is either already a collection of points and triangles or it is in some other format and is then converted to triangles, which the graphics card then renders. So ultimately all data representations lead to visualization when it comes to 3D modeling (so that you can see it).

The subject of CAD is not the 3D object that you see on screen but rather the design specification. There is a different language or representation internal to CAD tools. When it is time to show the user what the changes he has made do to the model, the internal representation is tesselated into a collection of triangles which is then rendered on screen. In the case of Solidworks, for instance, this conversion is nearly instanteous. The underlying data representation in Blender is, in fact, that tessellation or collecton of triangles- it's a mesh editor, so it doesn't even have to convert the data in the first place. One exception to this is the NURBS modeling in Blender.

So why not just fix Blender and make it use a parametric solid geometry kernel under the hood? This would involve rewriting Blender completely. And if you're doing that, then you're not really working on Blender, now are you.

* rendering methods exist that do not involve graphics cards

Can't you modify blender to become a CAD tool?

What is the difference between CAD and 3D modeling?

What is solid geometry?

What is Constructive Solid Geometry (CSG)?

What is boundary representation (b-rep)?

What is a non-uniform rational b-spline (NURBS curve)?

What is a mesh?

But IGES and STEP can store triangles!

Can't you just convert meshes to solid models?

ha ha ha don't get me started :(






AutoCAD (and other AutoDesk stuff)













Google Sketchup





file formats

STEP (ISO 10303-21) (.step, .stp)

IGES (.iges, .igs)


parasolid (.xt)

brep (OpenCASCADE)

parametric solid modeling engines



cad packages dump list

  • openscadpy https://github.com/hmeyer/openscadpy
  • cadmium https://github.com/jayesh3/cadmium
  • pyopenscad http://diyhpl.us/~bryan/irc/pyopenscad.py
  • openjscad http://joostn.github.com/OpenJsCad/
  • csg.js http://evanw.github.com/csg.js/
  • implicitcad https://github.com/colah/ImplicitCAD
  • kokompe https://github.com/davidad/kokompe-old
  • lolcad http://diyhpl.us/cgit/lolcad
  • opencascade community edition http://github.com/tpaviot/oce
  • openscad https://github.com/openscad/openscad
  • heekscad https://github.com/Heeks/heekscad
  • freecad https://github.com/danielfalck/free-cad

Other discussions of various CAD packages, emphasizing open-source: