// Pixel 1 holder for mounting on the clamp. e = 0.1; w = 30; module rcube(s, r) { hull() { for (x = [r, s[0]-r]) { for (y = [r, s[1]-r]) { translate([x, y, 0]) cylinder(r=r, h=s[2]); } } } } module pixel1() { t = 1.5; // wall thickness r = 5; // major curves radius s = [144-7, 70, 8.5]; // phone dimensions extra = 10; module outer() { translate([-t, -t, -t]) rcube(s + [t*2, t*2, t*2], r); } module holes() { j = 9; k = j+3; translate([j/2, s[1]/2, -t-e]) { for (x = [1, 3, 5, 7]) { translate([x*j*1.6+k, 0, 0]) cylinder(r=j, j); } for (x = [0, 2, 4, 6]) { translate([x*j*1.6+k, -j*2.3, 0]) cylinder(r=j, j); translate([x*j*1.6+k, j*2.3, 0]) cylinder(r=j, j); } } } module usbspkr() { u = [s[2]-1, 15, extra]; translate([s[0], s[1]/2, s[2]/2]) rotate(90, [0, 1, 0]) translate(-u/2) rcube(u, 2); spk = [s[2]-4, 14, extra]; for (y = [15, s[1]-15]) { translate([s[0], y, s[2]/2]) rotate(90, [0, 1, 0]) translate(-spk/2) rcube(spk, 2); } } difference() { outer(); translate([-extra, 0, 0]) rcube(s + [extra, 0, 0], r/2); // phone cutout translate([-extra, t, s[2]-e]) rcube(s + [0, -t*2, 0], r); // screen cutout translate([18+5, s[1]-extra, 2]) cube([80-12-144+s[0], 20, 4+extra]); // buttons cutout usbspkr(); holes(); } translate([s[0]/2, s[1]/2, -t/2]) cube([w,w,t], center=true); // clamp mounting plate } pixel1();