--- /dev/null
+eps = 0.01;
+infty = 100;
+
+foam_w = 3;
+
+horn_w = 1;
+horn_vert_h = 3 + foam_w;
+horn_h = 10 + foam_w;
+
+slot_off = 3.5; // from the hinge line
+
+slot_l = 10;
+
+hole_d = 2;
+hole_d2 = 5;
+
+// base
+baseplate_l = 20;
+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();
+
+*/