include $fn = 128; infty = 500; inner_d = 64; outer_d = 75; shield_r1 = inner_d/2 - 3; cone_h = 12; wall = 1.5; base_wall = 1.2; cone_angle = atan((outer_d-inner_d)/(2*cone_h)); shield_h = 70; shield_twist = -45; blade_wall = 1; blades = 12; blade_w = 5.5*inner_d/blades; blade1_w = 4; blade_rot = 9; shield_r2 = 1.3*shield_r1; beam_w = 10; beam_h = 11; beam_l = 70; beam_end_l = 20; beam_end_h = 0.45*beam_h; for (angle = [0:30:360]) Rz(angle) { // main blades linear_extrude(height = shield_h, twist = shield_twist, center=false, scale=shield_r2/shield_r1) { Ty(shield_r1) Rz(-blade_rot) { Ty(-shield_r1) intersection() { difference() { circle(r = shield_r1 + blade_wall/2); circle(r = shield_r1 - blade_wall/2); } Tx(-blade_w/2) square([blade_w, shield_r1+blade_wall]); } // square([blade_w, blade_wall], center=true); // Sx(blade_w/blade_wall) circle(r=blade_wall/2); // Tx(-blade_w/3) Ty(blade_wall/2) Sx(0.5) circle(r=blade_wall/2); } } // counter-direction struts linear_extrude(height = shield_h, twist = -shield_twist, center=false, scale=shield_r2/shield_r1) Ty(shield_r1) Sx(blade1_w/blade_wall) circle(r=blade_wall/2); } // top cone difference() { union() { cylinder(r1 = inner_d/2, r2 = outer_d/2, h = cone_h); // beam Tx(inner_d/2) Tz(beam_w/3) Ry(90) Sx(3*beam_h/(2*beam_w)) cylinder(r = beam_w/2, h = beam_l); // beam_end } Tz(-eps) cylinder(r1 = inner_d/2 - wall/cos(cone_angle), r2 = outer_d/2 - wall/cos(cone_angle), h = cone_h + 2*eps); // z negative translate([-infty/2, -infty/2, -infty]) cube(infty); // beam end translate([inner_d/2+beam_l-beam_end_l, -beam_w/2, beam_end_h]) cube([beam_end_l+eps, beam_w, beam_h]); // beam screw hole Tx(inner_d/2+beam_l-beam_w/2) Tz(-eps) cylinder(r=2.5, h = beam_end_h + 2*eps); } // base plate cylinder(r = inner_d/2, h = base_wall); clip_d = 50+0.25; // clips clip_r1 = 1.5; clip_r2 = 8*clip_r1; clip_end_r = 5; clip_h = 3.25; Tz(base_wall) for (angle = [0:120:360]) Rz(angle) difference() { hull() { Tx(clip_d/2) Sy(clip_r2/clip_r1) cylinder(r = clip_r1, h = clip_h + wall); Tx(clip_d/2) Ty(clip_r2-clip_end_r) difference() { cylinder(r = clip_end_r, h = clip_h + wall); translate([0, -2*clip_end_r, -eps]) cube([4*clip_end_r, 4*clip_end_r, clip_h + wall +2*eps]); } } Tz(-eps) difference() { cylinder(r = clip_d/2, h = clip_h+eps); Ty(clip_r2-clip_end_r) Tz(-eps) cube([clip_d, clip_d, clip_h+3*eps]); } }