{{ message }}

Instantly share code, notes, and snippets.

Created Jul 16, 2018

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})`
• 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)`

## 7. Operations: Union

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

## 8. Basic Shapes: Sphere

`sphere({r: 4})`
• `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

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.