$fn=240; use use selfTappingHolesMM = 2.9-0.25; holeDistanceMM = 61; standoffDiameterMM = 88; module screw(recessCap=20){ length=20; selfTappingScrew(mSize=3, length=length,recessCap=recessCap); translate([0,0,(recessCap+length)/2])cylinder(h=recessCap,d=10, center=true); } module selfTappingHoles() { mirrorCopy([1,1,0]) mirrorCopy([1,0,0]) translate([holeDistanceMM/2,0,0]) cylinder(d=selfTappingHolesMM, h=20+1, center=true); } module clearanceHoles(){ mirrorCopy([1,1,0]) mirrorCopy([1,0,0]) translate([holeDistanceMM/2,0,0]) screw(recessCap=22); translate([0,holeDistanceMM/2,0]) screw(recessCap=50); } module foot(){ cylinder(d=standoffDiameterMM,h=20,center=true); } module middle(){ translate([0,90,35+7]) scale([0.5,0.6,1]) sphere(d=standoffDiameterMM*0.7); } module wall(){ translate([0,110+5,35]) rotate([90,0,0]) cylinder(d=standoffDiameterMM,h=10,center=true); } difference(){ union(){ hull(){ foot(); middle(); } hull(){ middle(); wall(); } } selfTappingHoles(); translate([0,110+10,35]) rotate([90,0,0]) clearanceHoles(); } /**/