# 3D crap

I got a 3D printer (a PrintrBot Simple Metal model 1403), and it’s been great.  I don’t have time to write much, so I’ll share highlights:

• I’m on Thingiverse here. I’ve already put up a bunch of crap, including a customizable omni wheel design.
• I’ve been learning OpenSCAD, a free tool that lets you write code to generate 3D solids.
• There’s no arc function in OpenSCAD, and the solutions I found online were inefficient or only worked for certain inputs, so I wrote a new one.  See below:
```module arc(r,a1,a2,ir=0) {
// normalize to 0..360 (even for negatives)
a1n = (a1 % 360 + 360) % 360;
a2n = (a2 % 360 + 360) % 360;
difference() {
circle(r);
if (ir != 0) circle(ir); // if inner radius given, subtract it away

// get the a1 to interpolate to, adding a revolution if going the long way
a1next = a2n>a1n ? a1n + 360 : a1n;

polygon([
[0,0],
[cos(1.00*a2n + 0.00*a1next)*2*r,sin(1.00*a2n + 0.00*a1next)*2*r],
[cos(0.66*a2n + 0.33*a1next)*2*r,sin(0.66*a2n + 0.33*a1next)*2*r],
[cos(0.33*a2n + 0.66*a1next)*2*r,sin(0.33*a2n + 0.66*a1next)*2*r],
[cos(0.00*a2n + 1.00*a1next)*2*r,sin(0.00*a2n + 1.00*a1next)*2*r],
]);
}
}

// test array
for (a = [-360:60:360], b = [-360:60:360]) {
translate([a,b,0])  linear_extrude(height=10) arc(25,a,b);
}
```