--- /dev/null
+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();
+
+
--- /dev/null
+eps = 0.01;
+infty = 100;
+
+wall = 1.5;
+
+alu_w = 32 + 0.5;
+alu_h = 11 + 0.5;
+alu_wall = 1.8;
+alu_side = 4 + 0.5;
+inside_l = 4.5;
+inside_h = 5;
+alu_side2 = 2;
+inside_h2 = 0.8;
+
+module alu_end() {
+ translate([-alu_w/2, -alu_h/2, 0])
+ cube([alu_w, alu_h, wall]);
+
+ translate([-alu_w/2+alu_side2, -alu_h/2+alu_wall, 0])
+ cube([alu_w - 2*alu_side2, inside_h2, wall+inside_l]);
+
+ translate([-alu_w/2+alu_side, -alu_h/2+alu_wall, 0])
+ cube([alu_w - 2*alu_side, inside_h, wall+inside_l]);
+}
+
+// translate([0, -1.5*alu_h, 0]) alu_end();
+
+end2_h = wall + 10;
+end2_l = 40;
+cable_w = 2.5;
+cable_h = 8;
+
+module alu_end2() {
+ difference() {
+ union() {
+ alu_end();
+ // rear
+ translate([-alu_w/2, alu_h/2, 0])
+ cube([alu_w, end2_h, wall]);
+ // bottom
+ translate([-alu_w/2, alu_h/2+end2_h-wall, 0])
+ cube([alu_w, wall, end2_l]);
+ // sides
+ for (x = [-1, 1]) scale([x, 1, 1])
+ translate([alu_w/2-wall, alu_h/2, 0])
+ cube([wall, end2_h, end2_l]);
+ }
+ translate([-alu_w/2-eps, alu_h/2-cable_w, -eps])
+ cube([cable_h+eps, cable_w, wall+2*eps]);
+ }
+}
+
+// alu_end2();
+alu_end();