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
You can’t perform that action at this time.