eps = 0.01; infty = 100; wall = 1.5; magnet_w = 5 + 0.3; magnet_l = 10 + 0.3; magnet_h = 2.5; magnet_clip_w = 0.5; angle = 5; angled_w = 3; inner_bottom_l = 21; inner_bottom_w = 2; inner_bottom_off = 2.0; inner_side_l = 4; inner_side_w = wall; inner_side_off = 1; inner_h = 5; outer_l = inner_bottom_l + 4; outer_w = 10; cable_h = 3; cable_w = 5.5; module body() { difference() { // base plate cube([outer_l, outer_w, wall]); // cable hole translate([outer_l/2-cable_w/2, inner_bottom_off+inner_bottom_w, -eps]) cube([cable_w, cable_h, wall+2*eps]); } // inner bottom translate([outer_l/2-inner_bottom_l/2, inner_bottom_off, 0]) cube([inner_bottom_l, inner_bottom_w, inner_h+wall]); // inner sides for (x = [-1, 1]) { translate([outer_l/2, inner_bottom_off+inner_bottom_w, 0]) scale([x, 1, 1]) translate([inner_bottom_l/2-inner_side_off-inner_side_w, 0, 0]) cube([inner_side_w, inner_side_l, inner_h+wall]); } difference() { // angled outer bottom hull() { cube([outer_l, eps, 2*wall+magnet_w]); translate([0, -angled_w, 0]) rotate([0, 0, -angle]) cube([outer_l, eps, 2*wall+magnet_w]); } // magnet hole rotate([0, 0, -angle]) translate([outer_l/2-magnet_l/2, -angled_w-eps, wall]) difference() { cube([magnet_l, magnet_h, magnet_w]); for (z = [0, magnet_w]) translate([magnet_l/3, 0, z]) rotate([0, 90, 0]) cylinder(r=magnet_clip_w, h=magnet_l/3, $fn=4); } } } body();