// allviews front back // testviews test // viewsopts brim10mm include thick=5; module frontleft(){ } module frontright(){ } module cubehole(len,thick,height,nbhole,offset){ difference(){ cube([len,thick,height]); union(){ holer1=2; holer2=3; translate([offset,0,thick+(height-thick)/2]){ for (x=[1:nbhole]){ translate([x*len/(nbhole+1),thick+1,0]){ rotate([90,0,0]){ cylinder(r=holer1,h=10,$fn=40); cylinder(r1=holer2+2,r2=holer1,h=2,$fn=40); } } } } } } } module generic(len,height,nbhole){ cubehole(len,thick,height,nbhole,thick/2); translate([0,len,0]) rotate([0,0,270]) cubehole(len,thick,height,nbhole,-thick/2); intersection(){ cube([len,len,thick]); translate([-len,len*2-height,0]) rotate([0,0,-45]) cube([len*3,height,thick]); } } module front(){ generic(45,15,3); } module back(){ generic(60,15,4); } module main_view(view){ if (view=="front"){ front(); }else if (view=="back"){ back(); }else if (view=="test"){ intersection(){ cube ([15,5,9]); translate([-5,0,-5]) front(); } } }