+infty = 100;
+eps = 0.01;
+
+wheel_d = 60;
+wheel_h = 4;
+wheel_thick = 1;
+
+spokes = 5;
+spoke_w = 5;
+spoke_h = 3;
+
+center_d = 8;
+center_hole = 3;
+
+module body() {
+ // rim
+ difference() {
+ cylinder(r = wheel_d/2, h = wheel_h, $fn = 128);
+ translate([0,0,-eps])
+ cylinder(r = wheel_d/2 - wheel_thick, h = wheel_h + 2*eps);
+ }
+
+ // spokes
+ for (a = [0:360/spokes:360-eps]) {
+ rotate([0, 0, a])
+ translate([2, 0, 0])
+ hull() {
+ translate([-spoke_w/2, 0, 0])
+ cube([spoke_w, wheel_d/2 - wheel_thick/2, eps]);
+ translate([-eps/2, 0, spoke_h-eps])
+ cube([eps, wheel_d/2 - wheel_thick/2, eps]);
+ }
+ }
+
+ cylinder(r = center_d/2, h = wheel_h);
+}
+
+difference() {
+ body();
+ // center hole
+ translate([0, 0, -eps])
+ cylinder(r = center_hole/2, h = wheel_h + 2*eps);
+}