infty = 300; eps = 0.01; fuse_w = 60; fuse_h = 33; 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; front_edge_w = 4; 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 + 3*wall, 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]); translate([-0.707*front_edge_w, 0, 0]) rotate([0, 0, -30]) translate([-front_edge_w, -front_edge_w, 0]) cube([2*front_edge_w, 2*front_edge_w, fuse_h]); } } } } 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]); // front hole translate([front_rod_x-wall, -infty/2, front_rod_h + rod_support_h_add]) cube(infty); }