eps = 0.01; infty = 200; wall = 1; horn_w = 10; horn_l = 35; tip_hole = 2; tip_d = tip_hole+2*wall; tube_d = 2.0 + 0.7; tube_off = 1; tube_h = 1.5; side_w = 1.2; foam_w = 3 + side_w; side_l = horn_l - 7; side_h = 10; module body() { hull() { for (x = [-1, 1]) scale([x, 1, 1]) translate([horn_w, 0, 0]) cylinder(r = tip_d/2, h = wall); translate([-foam_w/2, -horn_l+tip_d/2, 0]) cube([foam_w, horn_l, wall]); } // side translate([-foam_w/2, -horn_l+tip_d/2, 0]) cube([side_w, side_l, side_h]); // side_front translate([-foam_w/2, -horn_l+tip_d/2+side_l-side_w, 0]) cube([foam_w, side_w, side_h]); // tube translate([0, tube_off, 0]) cylinder(r = tube_d/2 + wall, h = tube_h); } difference() { body(); for (x = [-1, 1]) scale([x, 1, 1]) translate([horn_w, 0, -eps]) cylinder(r = tip_hole/2, h = wall+2*eps); // tube hole translate([0, tube_off, -eps]) cylinder(r = tube_d/2, h = tube_h+2*eps, $fn = 6); }