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.
CoffeeSCad: Solid CAD modeling in your browser, with a CoffeeScript based syntax (and lots more!)
ImplicitCAD: Powerful, Open-Source, Programmatic CAD. Haskell and extopenscad.
RapCAD: Rapid prototyping CAD IDE for RepRap and RepStrap 3D printing machines.
OpenJSCAD: OpenSCAD + JavaScript = OpenJSCAD, edit locally or remote online, preview in browser direct via WebGL.
FABFabbers bills itself as “a new site for the 3d printing community”. It provides in browser OpenSCAD compilation and linking to github projects.
Update: Atomic let me know about BRL-CAD, the free military-grade antecessor to all of these.
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.
Update 3: CScheme is the integration of geometric kernels in a functional language.
;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.
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.
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.
#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 }
}
Let me know if I’ve left any off the list?
Leave a Reply