t = 7; w = 30; h = 47.7; rc = 6.5; rcs = 2; ofs = 88.1-w; $fn = 100; module through(l=7, lh=3.3, lt=1, lb=1){ union(){ translate([0,0,l-lh])cylinder(h=lh+lt, d=5.6); translate([0,0,-lb])cylinder(h=l+lh+lb, d=3.5); } } module m3 (h=8, lb=1){ //translate([0,0,-lb])cylinder(h+lb, d=2.5); // tapped M3 translate([0,0,-lb])cylinder(h+lb, d=4); // rutex insert } difference(){ hull(){ translate([w-rc, rc])cylinder(h=t, r=rc); translate([w-rc,h-rc])cylinder(h=t, r=rc); translate([rcs, h-rcs])cylinder(h=t, r=rcs); translate([rcs, rcs])cylinder(h=t, r=rcs); } translate([72.2-ofs, h-14.75])through(l=t); translate([72.2-ofs, h-39.9])through(l=t); translate([82.1-ofs, h-6.65])through(l=t+4); translate([82.1-ofs, h-6.65-14])m3(); translate([w-7, h-24-14,-1])hull(){ translate([7,0])cube([1,14, t+2]); translate([3,3])cylinder(h=t+2,r=3); translate([3,11])cylinder(h=t+2,r=3); } translate([-1,h-19.5-31,-1])hull(){ cube([0.01,33,t+2]); translate([5,3])cylinder(h=t+2,r=3); translate([5,30])cylinder(h=t+2,r=3); } for(x=[72.6-ofs]){ for(y=[33.4]){ translate([x,h-y,0])m3(); } } for(x=[64.6-ofs]){ for(y=[11.4]){ translate([x,h-y,0])m3(); } } }