module whorl( r_out, r_stick, t_hub=4, t_rim=10, h=4, h_hub=15, h_rim=8, r_screw=1.6, h_screw=11, screw_holes=[90, 270], r_latch=2, latches=[0, 60, 120, 180, 240, 300], ) { difference() { union() { cylinder(r=r_out, h=h); cylinder(r=r_stick + t_hub, h=h_hub); difference() { cylinder(r=r_out, h=h_rim); translate([0, 0, -1]) cylinder(r=r_out - t_rim, h=h_rim + 2); } } translate([0, 0, -1]) cylinder(r=r_stick, h=h_hub + 2); for(i=screw_holes) { rotate([0, 0, i]) translate([0, 0, h_screw]) rotate([0, -90, 0]) cylinder(r=r_screw, h=r_stick + t_hub + 2, $fn=16); } for(i=latches) { rotate([0, 0, i]) translate([r_out, 0, -1]) cylinder(r=r_latch, h=h_rim + 2); } } }