module rpi4_cover(){ pi_height=28; pi_width=104; difference(){ translate([31+thickness+10, 0, height]) chamferCube(pi_width, depth+(thickness*2), pi_height+thickness, 8, [0, 0, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0]); translate([31+thickness+10, thickness, height]) chamferCube(pi_width, depth, pi_height, 8, [0, 0, 1, 1], [0, 0, 0, 0], [0, 0, 0, 0]); translate([31+thickness+62, (depth+(thickness*2))/2, height+pi_height]) cylinder(h=thickness, d=41.5); // hdmi gap translate([thickness+95, depth+thickness, height]) cube([25, 0.8, 17]); // keyboard cabel hole translate([width/2+thickness-6, thickness+1, 20]) rotate([90, 0, 0]) #cylinder(h=thickness+1, d=3); translate([width/2+thickness+6, thickness+1, 20]) rotate([90, 0, 0]) #cylinder(h=thickness+1, d=3); } // logo translate([31+thickness+62, (depth+(thickness*2))/2, height+pi_height]) linear_extrude(height=1.6) resize([42, 42, 0]) import(file="mk-logo.svg", center=true); } module chamferCube(sizeX, sizeY, sizeZ, chamferHeight, chamferX, chamferY, chamferZ) { chamferX = (chamferX == undef) ? [1, 1, 1, 1] : chamferX; chamferY = (chamferY == undef) ? [1, 1, 1, 1] : chamferY; chamferZ = (chamferZ == undef) ? [1, 1, 1, 1] : chamferZ; chamferCLength = sqrt(chamferHeight * chamferHeight * 2); difference() { cube([sizeX, sizeY, sizeZ]); for(x = [0 : 3]) { chamferSide1 = min(x, 1) - floor(x / 3); // 0 1 1 0 chamferSide2 = floor(x / 2); // 0 0 1 1 if(chamferX[x]) { translate([-0.1, chamferSide1 * sizeY, -chamferHeight + chamferSide2 * sizeZ]) rotate([45, 0, 0]) cube([sizeX + 0.2, chamferCLength, chamferCLength]); } if(chamferY[x]) { translate([-chamferHeight + chamferSide2 * sizeX, -0.1, chamferSide1 * sizeZ]) rotate([0, 45, 0]) cube([chamferCLength, sizeY + 0.2, chamferCLength]); } if(chamferZ[x]) { translate([chamferSide1 * sizeX, -chamferHeight + chamferSide2 * sizeY, -0.1]) rotate([0, 0, 45]) cube([chamferCLength, chamferCLength, sizeZ + 0.2]); } } } }