infty = 100; eps = 0.01; wheel_d = 50; wheel_h = 3; wheel_d1 = wheel_d + wheel_h/2; wheel_thick_outer = 0.5; wheel_thick_inner = 1.5; wheel_rim = 3.5; min_wall = 0.5; spokes = 5; spoke_w = 3.5; spoke_h = 1.5; center_d = 5; center_hole = 1 + 0.5; center_h = 8; module body() { // rim difference() { hull() { cylinder(r = wheel_d/2, h = wheel_h, $fn = 128); translate([0, 0, wheel_h/2-eps]) cylinder(r = wheel_d1/2, h = 2*eps, $fn = 128); } translate([0,0,min_wall-eps]) cylinder(r1 = wheel_d/2 - wheel_thick_inner, r2 = wheel_d/2 - wheel_thick_outer, h = wheel_h - min_wall+ 2*eps); translate([0,0,-eps]) cylinder(r = wheel_d/2 - wheel_rim, h = min_wall+2*eps); } // spokes for (a = [0:360/spokes:360-eps]) { rotate([0, 0, a]) hull() { translate([-spoke_w/2, 0, 0]) cube([spoke_w, wheel_d/2 - min_wall/2, min_wall]); translate([-min_wall/2, 0, spoke_h-eps]) cube([min_wall, wheel_d/2 - min_wall/2, eps]); } } cylinder(r1 = center_d/2, r2 = center_hole/2 + 2*min_wall, h = center_h); } difference() { body(); // center hole translate([0, 0, -eps]) cylinder(r = center_hole/2, h = center_h + 2*eps); }