eps = 0.01; infty = 100; /* Quasar elevons */ /* slot_off_x = 8; slot_off_z = 0; horn_l = 40; slot_depth_front = 6; slot_depth_rear = 2.5; base_angle = 0; top_hole_h = 18; */ /* Quasar rudder */ slot_off_x = 8; slot_off_z = -2.5; horn_l = 40; slot_depth_front = 8; slot_depth_rear = 5; base_angle = 0; top_hole_h = 18; wall = 1; hole_d = 1.6; hole_step = 3; n_holes = 3; hole_side = 2*wall; module horn_body() { // slot hull() { translate([slot_off_x, slot_off_z, 0]) cube([eps, slot_depth_front, wall]); translate([horn_l - eps, slot_off_z, 0]) cube([eps, slot_depth_rear, wall]); } hull() { // base translate([slot_off_x, slot_depth_front+slot_off_z-eps, 0]) cube([eps, eps, wall]); translate([horn_l - eps, slot_depth_rear+slot_off_z-eps, 0]) cube([eps, eps, wall]); rotate([0, 0, -base_angle]) for (y = [1:n_holes]) { translate([0, top_hole_h -(y-1)*hole_step, 0]) cylinder(r = hole_d/2 + hole_side, h = wall, $fn = 6); } } } module horn() { difference() { horn_body(); // holes rotate([0, 0, -base_angle]) for (y = [1:n_holes]) { translate([0, top_hole_h -(y-1)*hole_step, -eps]) cylinder(r = hole_d/2, h = wall + 2*eps, $fn = 6); } } } horn();