$fn=33; height=40; hwidth=40; thickness=5; vthickness=20; vwidth=40.3; vheight=80; M3HoleDiam=3.4; holedistance=10; horizontalcenterholes=true; difference() { frame(); holes(); } module frame(){ // left tile cube([hwidth,thickness,height]); translate([0,thickness,0]) sidetriangle(); translate([0,thickness,height - thickness]) sidetriangle(); // left to back tile translate([hwidth,0,0]) cube([thickness, vthickness, height]); // left triangle translate([hwidth,thickness,height]) rotate([90, 0, 90]) middletriangle(); // covers upper edge of above translate([hwidth, vthickness, 0]) cube([vwidth + thickness * 2, thickness, vheight]); // right to back tile translate([hwidth + vwidth + thickness,0,0]) cube([thickness, vthickness, height]); // right triangle translate([hwidth + vwidth + thickness,thickness,height]) rotate([90, 0, 90]) middletriangle(); // right tile translate([hwidth + vwidth + thickness * 2, 0, 0]) cube([hwidth,thickness,height]); translate([hwidth * 2 + vwidth + thickness * 2,thickness,thickness]) rotate([0, 180,0 ]) sidetriangle(); translate([hwidth * 2 + vwidth + thickness * 2,thickness,height]) rotate([0, 180,0 ]) sidetriangle(); } module middletriangle(){ linear_extrude(thickness) polygon([[0,0], [vthickness-thickness, 0], [vthickness-thickness, vheight-height]]); } module sidetriangle() { linear_extrude(5) polygon([[0,0], [hwidth, 0], [hwidth, vthickness]]); } module holes() { // left holes leftholes(); // right holes translate([hwidth + vwidth + thickness * 2,0,0]) leftholes(); // center holes translate([hwidth + thickness,vthickness,0]) centerholes(); } module leftholes(){ translate([holedistance, 0, holedistance]) XM3Hole(); translate([hwidth - holedistance, 0, holedistance]) XM3Hole(); translate([holedistance, 0, height - holedistance]) XM3Hole(); translate([hwidth - holedistance, 0, height - holedistance]) XM3Hole(); } module centerholes() { translate([holedistance, 0, holedistance]) XM3Hole(); translate([vwidth - holedistance, 0, holedistance]) XM3Hole(); translate([holedistance, 0, vheight - holedistance]) XM3Hole(); translate([vwidth - holedistance, 0, vheight - holedistance]) XM3Hole(); if(horizontalcenterholes){ // center holes translate([vwidth - holedistance, 0, vheight / 2]) XM3Hole(); translate([holedistance, 0, vheight / 2]) XM3Hole(); } } module XM3Hole() { rotate([270,0,0])cylinder(h=thickness, d=M3HoleDiam); }