eps = 0.01; infty = 200; wall = 1; horn_w = 10; horn_l = 15; tip_hole = 2; tip_d = tip_hole+2*wall; tube_d = 2.0 + 0.5; tube_off = 1; tube_h = 1.5; foam_w = 3; side_w = 0.8; 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]); // 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); }