Skip to content

Instantly share code, notes, and snippets.

@jamesporter
Created July 16, 2018 22:09
Show Gist options
  • Select an option

  • Save jamesporter/e53d5535f2bb25f0da3b617b7c7eddc2 to your computer and use it in GitHub Desktop.

Select an option

Save jamesporter/e53d5535f2bb25f0da3b617b7c7eddc2 to your computer and use it in GitHub Desktop.

Revisions

  1. jamesporter created this gist Jul 16, 2018.
    154 changes: 154 additions & 0 deletions openjscad-cheat-sheet.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,154 @@
    # OpenJSCAD Cheat Sheet

    James Porter

    ## 0. 3D

    * Architecture-style
    * x,y,z

    ## 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]})
    ```

    * size `s` or `[x,y,z]`
    * center (location) `false` by default (at 'bottom' corner)

    ## 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)
    ```

    * can scale in simple way
    * or per x,y,z


    ## 5. Transforms: Translate

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

    * Move by `[x,y,z]`
    * e.g. move up 5 units:

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

    ## 6. Transforms: Rotation
    ```js
    rotate([90,0,45], obj)
    ```

    * Rotate about `[x,y,z]` (respectively)
    * e.g. rotate about vertical by 90 degrees:

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

    **NB Degrees not radians**

    ## 7. Operations: Union

    * Glue stuff together

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

    ## 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

    * Bit in all the shapes

    ```js
    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

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

    * Can take bunch of arguments or array

    ## Appendix

    See [the full docs](https://openjscad.org/dokuwiki/doku.php?id=start)

    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.