eps = 0.01; infty = 1000; motor_diam = 18; wall = 1.5; cyl_h = 30; clip_angle = 40; module fin() { assign(h1 = cyl_h, h2 = 20, h_off = 50, w = 30, fin_w = 1.0) translate([0, -fin_w/2, 0]) hull() { cube([eps, fin_w, h1]); translate([w, 0, h_off]) cube([eps, fin_w, h2]); }; }; module body() { difference() { cylinder(r = motor_diam/2 + wall, h = cyl_h); translate([0, 0, -infty/2]) cylinder(r = motor_diam/2, h = infty); for (a = [-clip_angle/2, clip_angle/2]) rotate([0, 0, a]) translate([0, -wall/2, cyl_h/2]) cube([infty, wall, infty]); }; for (a = [60, 180, 300]) { rotate([0, 0, a]) translate([motor_diam/2 + wall/2, 0, 0]) fin(); }; translate([motor_diam/2 + wall + 3, 0, 0]) difference() { union() { cylinder(r = 3 + wall, h = 5); translate([-3 -wall, -3 -wall, 0]) cube([3 + wall, 6 + 2*wall, 5]); }; translate([0, 0, -infty/2]) cylinder(r = 3, h = infty); }; }; body();