Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Openjscad Cheat Sheet

OpenJSCAD Cheat Sheet

James Porter

0. 3D

  • Architecture-style
  • x,y,z

1. main

Always have a main function which returns an object

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

cube({size: 1, center: true})
cube({size: [1,2,3]})
  • size s or [x,y,z]
  • center (location) false by default (at 'bottom' corner)

3. Basic Shapes: Cylinder

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

4. Transforms: Scale

scale(2,obj)
scale([1,2,3],obj)
  • can scale in simple way
  • or per x,y,z

5. Transforms: Translate

translate([5,4,3], obj)
  • Move by [x,y,z]
  • e.g. move up 5 units:
translate([0,0,5], obj)

6. Transforms: Rotation

rotate([90,0,45], obj)
  • Rotate about [x,y,z] (respectively)
  • e.g. rotate about vertical by 90 degrees:
rotate([0,0,90], obj)

NB Degrees not radians

7. Operations: Union

  • Glue stuff together
union([obj, another])
union(obj, another)

8. Basic Shapes: Sphere

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

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

Then extrude with linear_extrude:

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

10. Operations: Intersect

  • Bit in all the shapes
intersection(
      sphere({r: 1.3, center: true}),
      cube({size: 2.1, center: true})
    )
  • Can take bunch of arguments or array

11. Operations: Difference

  • First shape with rest carved out
 difference(
      cube({size: 3, center: true}),
      sphere({r: 2, center: true})
    )
  • Can take bunch of arguments or array

Appendix

See the full docs

Adds some mathematical things like sin that work with degrees not radians.

You might want to use Math.{round,sin,cos,tan,floor,ceil,sqrt,random} to generate things in simple way.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment