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); }