eps = 0.01; infty = 100; foam_w = 3; horn_w = 1; horn_vert_h = 1 + foam_w; horn_h = 10 + foam_w; slot_off = 3.5; // from the hinge line slot_l = 10; hole_d = 1.7; hole_d2 = 5; // base baseplate_l = 15; baseplate_w = 35; baseplate_h = 0.6; difference() { translate([slot_l/2 + slot_off, 0, 0]) scale([1, baseplate_w/baseplate_l, 1]) cylinder(r = baseplate_l/2, h = baseplate_h); translate([slot_off - infty, -infty/2, -infty/2]) cube(infty); } support_l = 1*baseplate_w; support_w = 0.8; support_h = foam_w; // including the baseplate supports_d = 10; module support() { hull() { translate([0, -support_l/2, baseplate_h-eps]) cube([support_w, support_l, eps]); translate([0, -support_w/2, support_h - eps]) cube([support_w, horn_w, eps]); } } /* translate([slot_off, 0, 0]) support(); translate([slot_off + slot_l - support_w, 0, 0]) support(); */ translate([slot_off + slot_l/2 - support_w, 0, 0]) support(); // bottom part of the horn hull() { translate([slot_off, -horn_w/2, 0]) cube([slot_l/2 + baseplate_l/2, horn_w, baseplate_h]); translate([slot_off, -horn_w/2, horn_vert_h]) cube([slot_l, horn_w, eps]); } difference() { hull() { translate([slot_off, -horn_w/2, horn_vert_h]) cube([slot_l, horn_w, eps]); translate([0, -horn_w/2, horn_h]) rotate([-90, 0, 0]) cylinder(r = hole_d2/2, h = horn_w, $fn = 6); } translate([0, -horn_w/2, horn_h]) rotate([-90, 0, 0]) translate([0, 0, -eps]) cylinder(r = hole_d/2, h = horn_w + 2*eps, $fn = 6); } /* module horn() { difference() { hull() { // base translate([slot_off, 0, 0]) cube([base_l, wall, wall]); for (y = [1:n_holes]) { translate([0, hole_h -(y-1)*hole_step, 0]) cylinder(r = hole_d/2 + hole_side, h = wall, $fn = 6); } } for (y = [1:n_holes]) { translate([0, hole_h -(y-1)*hole_step, -eps]) cylinder(r = hole_d/2, h = wall + 2*eps, $fn = 6); } } // side support translate([slot_off, 0, 0]) cube([base_l, wall, side_w]); // slot hull() { translate([slot_off + (base_l - slot_l)/2, -slot_depth/2, 0]) cube([slot_l, slot_depth/2, wall]); translate([slot_off + (base_l - slot_l)/2 + wall, -slot_depth, 0]) cube([slot_l - 2*wall, slot_depth/2+eps, wall]); } } for (x = [-1, 1]) scale([x, 1, 1]) translate([hole_side + hole_d/2 + 2*wall, 0, 0]) horn(); */