+infty = 300;
+eps = 0.01;
+
+fuse_w = 60;
+fuse_h = 30;
+
+fuse_l = 132;
+
+wall = 2;
+
+rod_d = 3;
+rod_l = 10.5;
+
+// center rod
+center_rod_h = fuse_h - 21;
+center_rod_x = 78;
+
+rod_support_w = rod_d + 2*wall;
+rod_support_l = rod_l + wall;
+rod_support_h_add = rod_d;
+
+// front rod
+front_rod_x = 121.5;
+front_rod_h = fuse_h - 19;
+front_rod_angle = 35; // from the Y axis
+
+// cable_hole
+cable_hole_x = 100;
+cable_hole_w = 25;
+cable_hole_h = 10;
+
+// corner radius
+corner_r = 10;
+corner_l = fuse_l - 21;
+corner_x = fuse_l - corner_l;
+
+// top window
+top_window_x = corner_x + 3;
+top_window_l = center_rod_x - 8 - top_window_x;
+top_window_w = fuse_w - 4*wall;
+
+module body_cube() {
+ translate([0, -fuse_w/2, 0])
+ cube([fuse_l, fuse_w, fuse_h]);
+}
+
+module body() {
+ // main U-shape
+ difference() {
+ body_cube();
+ translate([-eps, -fuse_w/2+wall, wall])
+ cube([corner_x + 2*eps, fuse_w - 2*wall, fuse_h]);
+ // round corners
+ hull() {
+ translate([corner_x-eps, -fuse_w/2+wall, wall+corner_r])
+ cube([corner_l+2*eps, fuse_w - 2*wall, fuse_h]);
+ for (y = [-1, 1]) scale([1, y, 1])
+ translate([corner_x-eps, fuse_w/2-wall-corner_r, wall+corner_r])
+ rotate([0, 90, 0]) cylinder(r = corner_r, h = corner_l+2*eps);
+ }
+ };
+
+
+ // support for center rod
+ for (y = [-1, 1]) scale([1, y, 1]) {
+ translate([center_rod_x-rod_support_w/2, fuse_w/2-rod_support_l, 0])
+ cube([rod_support_w, rod_support_l, center_rod_h+rod_support_h_add]);
+ translate([center_rod_x-rod_support_w/2, fuse_w/2-2*wall, 0])
+ cube([rod_support_w, wall + eps, fuse_h]);
+ }
+ // support for front rod
+ for (y = [-1, 1]) scale([1, y, 1]) {
+ intersection () {
+ body_cube();
+ translate([front_rod_x, fuse_w/2, 0])
+ rotate([0, 0, front_rod_angle]) {
+ translate([-rod_support_w/2, -rod_support_l, 0])
+ cube([rod_support_w, 2*rod_support_l, front_rod_h+rod_support_h_add]);
+ translate([-rod_support_w/2, -3*wall, 0])
+ cube([rod_support_w, 6*wall*tan(front_rod_angle), fuse_h]);
+ }
+ }
+ }
+ // firewall springs
+ spring_d = 2.5;
+ spring_h = 10;
+ for (y = [-1,1]) scale([1, y, 1])
+ translate([spring_d/2, fuse_w/2-wall, fuse_h/2-spring_h/2+wall/2])
+ cylinder(r = spring_d/2, h = spring_h, $fn = 4);
+}
+
+difference() {
+ body();
+ // holes for center rods
+ for (y = [-1, 1]) scale([1, y, 1])
+ translate([center_rod_x-rod_d/2, fuse_w/2-10, center_rod_h-rod_d/2])
+ cube([rod_d, rod_l + eps, fuse_h]);
+ // holes for front rods
+ for (y = [-1, 1]) scale([1, y, 1])
+ translate([front_rod_x, fuse_w/2, front_rod_h-rod_d/2])
+ rotate([0, 0, front_rod_angle])
+ translate([-rod_d/2, -rod_l, 0])
+ cube([rod_d, 2*rod_l, fuse_h]);
+ // holes for servo cables
+ translate([cable_hole_x, -fuse_w/2-eps, fuse_h])
+ rotate([-90, 0, 0])
+ scale([1, 2*cable_hole_h/cable_hole_w, 1])
+ cylinder(r = cable_hole_w/2, h = fuse_w+2*eps);
+ // top window
+ translate([top_window_x, -top_window_w/2, -eps])
+ cube([top_window_l, top_window_w, fuse_h]);
+}