## Extrusions

### Linear Extrude

Extruding 2D shapes into 3D, given height, twist (degrees), and slices (if twist is made):

```linear_extrude({ height: 10 }, square());
linear_extrude({ height: 10, twist: 90 }, square([1,2]));
linear_extrude({ height: 10, twist: 360, slices: 50}, circle().translate([1,0,0]) );

linear_extrude({ height: 10, center: true, twist: 360, slices: 50}, translate([2,0,0], square([1,2])) );
linear_extrude({ height: 10, center: true, twist: 360, slices: 50}, square([1,2]).translate([2,0,0]) );```

Linear extrusion of 2D shape, with optional twist. The 2d shape is placed in in z=0 plane and extruded into direction offset (a CSG.Vector3D). The final face is rotated twistangle degrees. Rotation is done around the origin of the 2D shape (i.e. x=0, y=0) twiststeps determines the resolution of the twist (should be >= 1), returns a CSG object:

```// CAG built in method
extruded = c.extrude({offset: [0,0,10], twistangle: 360, twiststeps: 100});```

### Rectangular Extrude

Extrude the path by following it with a rectangle (upright, perpendicular to the path direction), returns a CSG solid.

Simplified (openscad like, even though OpenSCAD doesn't provide this) via rectangular_extrude(), where as

• w: width (default: 1),
• h: height (default: 1),
• fn: resolution (default: 8), and
• closed: whether path is closed or not (default: false)
```rectangular_extrude([ [10,10], [-10,10], [-20,0], [-10,-10], [10,-10] ],  // path is an array of 2d coords
{w: 1, h: 3, closed: true});```

or more low-level via rectangularExtrude(), with following unnamed variables:

• width of the extrusion, in the z=0 plane
• height of the extrusion in the z direction
• resolution, number of segments per 360 degrees for the curve in a corner
• roundEnds: if true, the ends of the polygon will be rounded, otherwise they will be flat
```// first creating a 2D path, and then extrude it
var path = new CSG.Path2D([ [10,10], [-10,10], [-20,0], [-10,-10], [10,-10] ], /*closed=*/true);
var csg = path.rectangularExtrude(3, 4, 16, true);   // w, h, resolution, roundEnds
return csg;```

### Rotate Extrude

Defaults:

• startAngle : 0
• angle: 360
• overflow: 'cap' (cap the ends inorder to create a solid)
• fn: 32
```rotate_extrude(translate([4,0,0], circle({r: 1, fn: 30, center: true}) ) );
rotate_extrude({fn: 36, startAngle: 45, angle: 180}, translate([4, 0, 0], circle({r: 1, fn: 30, center: true})));

rotate_extrude({fn:4}, square({size: [1,1], center: true}).translate([4,0,0]) );

rotate_extrude(polygon({points:[ [0,0],[2,1],[1,2],[1,3],[3,4],[0,5] ]}) );
rotate_extrude({fn:4}, polygon({points:[ [0,0],[2,1],[1,2],[1,3],[3,4],[0,5] ]}) );```

You can essentially extrude any 2D polygon (circle, square or polygon).