shaft_od = 2.0; hub_od = 5.9; mill_od = 50.0; stator_od = mill_od - 5.0; rotor_hub = 15.0; stator_hub = rotor_hub - 2.0; stator_blade_angle = 60.0; $fn = 400; $overlap = 1.0; if(false) { ground(mill_od, hub_od); translate([0, 0, 5]) stator(stator_od, stator_hub, hub_od, stator_blade_angle); translate([0, 0, 10]) rotate(30, [0, 0, 1]) rotor(mill_od, rotor_hub, shaft_od); } else { // ground(mill_od, hub_od); // stator(stator_od, stator_hub, hub_od, stator_blade_angle); // rotor(mill_od, rotor_hub, shaft_od); spacer(stator_od, hub_od); } module spacer(od, id) { difference() { circle(r = od/2); circle(r = id/2); } } module ground(od, hole_id) { difference() { circle(r = od/2); circle(r = hole_id/2); } } module stator(tod, hod, sod, ba) { trifoil(tod, hod, sod, ba); } module rotor(tod, hod, sod) { trifoil(tod, hod, sod); } module trifoil(od, id, hole, angle = 60) { union() { difference() { circle(r = id/2); circle(r = hole/2); } for(i = [0 : 2]) { rotate(i*120, [0, 0, 1]) blade(od, id - $overlap, angle); } } } module blade(od, id, angle = 60) { rotate(-(60 - angle)/2) difference() { intersection() { circle(r = od/2); square(od/2); rotate(90 - angle) square(od/2); } circle(r = id/2); } }