FreeCAD

screenshot of FreeCAD showing a cylinder intersecting a cube and the Boolean operation window visible
Cylinder intersecting a cube

Hack A Day has a great article introducing FreeCAD.

FreeCAD is a parametric 3D modeler. Parametric modeling allows you to easily modify your design by going back into your model history and changing its parameters. FreeCAD is open source (LGPL license) and completely modular, allowing for very advanced extension and customization.

There are several great things about this.

  1. It’s free as in beer
  2. It’s free as in libre
  3. It’s available for Windows, Linux and Mac OS X
  4. It’s scriptable in python
  5. you can draw things using constructive solid geometry (CSG)
  6. you can create objects by extruding 2D drawings similarly to Solidworks

If this article is of interest to you, see my other list of OpenSCAD alternatives, and my other posts about free CAD packages.

Programmatic CAD, OpenSCAD alternatives

There are quite a few programatic CAD, OpenSCAD alternatives out there. I am collecting a list of them and providing links to them here. The requirements to be included in this list are:

  • Free and libre.
  • They are a programming language as opposed to a GUI.

OpenSCAD: The most well known programmatic CAD program. Probably the original open source one that I am aware of.openscad screenshot

CoffeeSCad: Solid CAD modeling in your browser, with a CoffeeScript based syntax (and lots more!)coffeescad screenshot showing code edit window and a rendered cube

ImplicitCAD: Powerful, Open-Source, Programmatic CAD. Haskell and extopenscad.edit area and rendered object in ImplicitCad

RapCAD: Rapid prototyping CAD IDE for RepRap and RepStrap 3D printing machines.code edit window of RapCAD with rendered line next to it

OpenJSCAD: OpenSCAD + JavaScript = OpenJSCAD, edit locally or remote online, preview in browser direct via WebGL.
screenshot of OpenJSCAD

FABFabbers bills itself as “a new site for the 3d printing community”. It provides in browser OpenSCAD compilation and linking to github projects.FABFabbers screenshot

Update: Atomic let me know about BRL-CAD, the free military-grade antecessor to all of these.

BRL-CAD mged graphics window

BRL-CAD mged command window

Update 2: gzmask pointed out SchemeCad, a programmable 3D CAD tool that supports wireframe models and features animation. Users can program Scheme Cad by writing extensions in Scheme (a dialect of LISP). It’s available for Windows and Linux.

screenshot of scheme-cad

Update 3: CScheme is the integration of geometric kernels in a functional language.

screenshot of cscheme website

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
;export the model
(define (print-brep shape filename)
  (BRepTools_Write shape filename))
 
;translate an object
(define (translate obj x y z)
  (let ((vec (make-object gp_Vec% x y z))
        (trsf (make-object gp_Trsf%)))
    (begin
      (send trsf SetTranslation vec)
      (send (make-object BRepBuilderAPI_Transform% obj trsf #t) Shape))))
 
;make a structure from two given object
(define (structure obj1 obj2)
  (let ((compound (make-object TopoDS_Compound%)) 
        (builder (make-object BRep_Builder%)))
    (begin
      (send builder MakeCompound compound)
      (send builder Add compound obj1)
      (send builder Add compound obj2)
      compound)))
 
;make a structure from a list of object
(define (composite lis)
  (if (list? lis)
    (cond
      ((= (length lis) 0) (error "empty list")) 
      ((= (length lis) 1) (car lis))
      (else (make-compound (car lis) (composite (cdr lis)))))
    (error "Not a list")))
 
;build a torus
(define (torus radius circle)
  (make-object BRepPrimApi_MakeTorus% radius circle))
 
;build a sphere
(define (sphere radius)
    (make-object BRepPrimApi_MakeSphere% radius))
 
;calculate the torus dimension
(define (radius z)
  (sqrt (- 1 (* z z))))
 
;make all torus objects
(define (torus-on-sphere the-list)
  (composite 
    (map 
      (lambda (z) (translate (torus (radius z) 0.05) 0.0 0.0 z)) 
      the-list)))
 
Final export operation
;export the model
(print-brep
  (structure
    (sphere 0.3)
    (torus-on-sphere (list -0.93 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 +0.93)))
  "./torus.brep")

and PLaSM: a functional language for computing with geometry.

screenshot of plasm website

1
2
3
4
5
6
7
8
DEF points1 = <<0,0,0>,<0,3,4>,<0,6,3>,<0,10,0>>;
DEF points2 = <<3,0,2>,<2,2.5,5>,<3,6,5>,<4,8,2>>;
DEF points3 = <<6,0,2>,<8,3,5>,<7,6,4.5>,<6,10,2.5>>;
DEF points4 = <<10,0,0>,<11,3,4>,<11,6,3>,<10,9,0>>;
DEF dom = intervals:1:12;
 
MAP:(beziersurface:< points1 , points2 , points3 , points4 >): 
(dom * dom);

Thanks to Kristoffer Josefsson for those two.

Update 4: Parametric Parts allows consumers to create and print 3D parts through our web-based platform. Anyone can make an idea come to life, even without technical expertise or prior 3D experience. It apparently uses  CadQuery for its backend.

CadQuery is an intuitive, easy-to-use python based language for building parametric 3D CAD models. CadQuery is for 3D CAD what jQuery is for javascript. Imagine selecting Faces of a 3d object the same way you select DOM objects with JQuery! Thanks to Monique for pointing them out.

screenshot of parametricparts website

Pierre left a comment to let me know about POV-Ray.  The Persistence of Vision Raytracer (POV-Ray) is a high-quality, Free Software tool for creating stunning three-dimensional graphics. The syntax looks very similar to OpenSCAD and C.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "colors.inc"
camera{
  location <4, 4, -10>
  look_at 0
  angle 36
}
light_source{ <500, 500, -1000> White }
plane{ y, -1.5
  pigment{ checker Green White }
}
union{
  box{ -1, 1 }
  sphere{ 0, 1.375 }
  pigment{ Red }
}

screenshot of povray of sphere unioned with a cube
Let me know if I’ve left any off the list?

openscad is cool

UPDATE: You might also be interested in my list of programmatic CAD tools.

Brendan introduced me to openscad while we were at the hacker space last night. I really like it and I can’t believe I didn’t try this tool out before. You essentially write your solid design in a programming language. Its simple to learn and very easy to get up and running.

There is even a scad-mode for it in emacs which I added to the marmalade repo for easy installation. Anyway here is a screenshot of a display stand I am working on.