eps = 0.01; infty = 100; wall = 1.5; inner_w = 44; inner_d = 32; inner_h = 9; clip_w1 = 8; clip_w2 = 7; clip_h = 16; hole_off = 12.5; hole_l = 14.5; left_edge_l = 22; left_edge_h = 7.5; right_edge_h = inner_h; screw_base_h = inner_h + wall; screw_base_d = 10; screw_hole_d = 4; difference() { union() { // main body cube([inner_w + 2*wall, inner_d + wall, inner_h + wall]); // side top clip hull() { translate([0, 0, inner_h-eps]) cube([wall, clip_w1, eps]); translate([0, 0, inner_h+clip_h-eps]) cube([wall, clip_w2, eps]); } // screw base hull() { translate([inner_w/2 + wall - screw_base_d/2, inner_d + wall - eps, 0]) cube([screw_base_d, eps, screw_base_h]); translate([inner_w/2 + wall, inner_d + wall + screw_base_d/2, 0]) cylinder(r = screw_base_d/2, h = screw_base_h); } } difference() { // inner space translate([wall, -eps, wall]) cube([inner_w, inner_d+eps, inner_h+eps]); // left edge begin translate([wall, clip_w1, left_edge_h + wall]) rotate([-90, 0, 0]) cylinder(r = wall/2, h = hole_off-clip_w1, $fn = 4); // left edge end translate([wall, hole_off+hole_l, left_edge_h + wall]) rotate([-90, 0, 0]) cylinder(r = wall/2, h = left_edge_l + clip_w1 - hole_off -hole_l, $fn = 4); // right edge translate([inner_w + wall, clip_w1, right_edge_h + wall]) rotate([-90, 0, 0]) cylinder(r = wall/2, h = left_edge_l, $fn = 4); } translate([-eps, hole_off, wall]) cube([wall+2*eps, hole_l, inner_h + eps]); // screw hole translate([inner_w/2 + wall, inner_d + wall + screw_base_d/2, -eps]) cylinder(r = screw_hole_d/2, h = screw_base_h + 2*eps); }