OpenJSCAD

I recommend opening OpenJSCAD and playing around while looking at these docs.

0. 3D

1. main

Always have a main function which returns an object

```js function main () { return union( difference( cube({size: 3, center: true}), sphere({r: 2, center: true}) ), intersection( sphere({r: 1.3, center: true}), cube({size: 2.1, center: true}) ) ).translate([0, 0, 1.5]).scale(10); }

```

2. Basic Shapes: Cube

js cube({size: 1, center: true}) cube({size: [1,2,3]})

All shapes follow this pattern, simple function + options

3. Basic Shapes: Cylinder

js cylinder({r: 1, h: 10}) * r for radius * h for height * again can center or not (default) * fn to control detail

4. Transforms: Scale

js scale(2,obj) scale([1,2,3],obj)

All transformations follow this pattern, function which takes options first then thing(s) to be transformed. Note that official docs can be confusing as cover old OOP-style cube().scale(2) approach, which you shouldn't use.

5. Transforms: Translate

js translate([5,4,3], obj)

js translate([0,0,5], obj)

6. Transforms: Rotation

js rotate([90,0,45], obj)

js rotate([0,0,90], obj)

NB Degrees not radians

7. Operations: Union

js union([obj, another]) union(obj, another)

All the composition operations take either an array of shapes or can take multiple shapes as arguments. You can't mix and match.

8. Basic Shapes: Sphere

js sphere({r: 4}) * r for radius * center is true by default (unlike other primitive objects) * fn to control detail

9. Basic Shapes: Polygon + linear_extrude

List of points to make a (2D) polygon on x,y plane

js let p1 = polygon([ [0,0],[3,0],[3,3] ]) let p2 = polygon({ points: [ [0,0],[3,0],[3,3] ] })

Then extrude with linear_extrude:

js linear_extrude({ height: 10 }, p1); linear_extrude({ height: 1 }, p2);

10. Operations: Intersect

js intersection( sphere({r: 1.3, center: true}), cube({size: 2.1, center: true}) )

11. Operations: Difference

js difference( cube({size: 3, center: true}), sphere({r: 2, center: true}) )

Onward

You now know enough to do create nearly any 3D shape (or an approximation to it) with OpenJSCAD.