motorwidth=35.2; motorheight=36.5; totalheight=65; pillarthick=8; sidethick=3; archthick=6; archoutwards=(pillarthick-archthick)/sqrt(8); mw2=motorwidth/2; include // Libs.scad is @ http://www.thingiverse.com/thing:6021 module corner() { $fn=30; slopeheight= totalheight - motorheight; slope = (mw2 + archoutwards)/slopeheight; translate([-mw2,-mw2,0]) union(){ difference(){ union(){ cylinder(r=pillarthick/2, h=motorheight); translate([0,0,motorheight]) sphere(r=pillarthick/2); } translate([0,0,-1]) cube([mw2,mw2,motorheight+pillarthick+2]); } multmatrix([ [ 1, 0, slope, -archoutwards ], [ 0, 1, slope, -archoutwards ], [ 0, 0, 1, motorheight ], [ 0, 0, 0, 1 ]]) cylinder(r=archthick/2, h=slopeheight); } } module halfside() { spacesz = (motorwidth - pillarthick/2*2) / 4; panelheight = spacesz + sidethick; panelbasez = motorheight+pillarthick/4-panelheight; translate([0,-mw2,0]) { translate([-mw2,-sidethick,0]) cube([motorwidth,sidethick,sidethick]); difference(){ translate([-mw2,-sidethick, panelbasez]) cube([mw2,sidethick,panelheight]); translate([-mw2+pillarthick/3, -sidethick, panelbasez]) rotate([0,45,0]) translate([0,-1,0]) cube([spacesz * sqrt(2), sidethick+2, spacesz * sqrt(2)]); } intersection(){ for (xz=[[-mw2+pillarthick/3, 0, panelbasez], [0, 0, panelbasez + sidethick/sqrt(2)]]) { translate(xz) translate([0,-sidethick,0]) rotate([0,45,0]) translate([0,0,-sidethick]) cube([100, sidethick, sidethick]); } translate([-mw2,-sidethick,0]) cube([motorwidth,sidethick, motorheight+pillarthick]); } } } module towerbase() { difference(){ union(){ for (angle=[0,90,180,270]) rotate([0,0,angle]) corner(); for (angle=[0,90,180]) { rotate([0,0,angle]) halfside(); rotate([0,0,angle]) mirror([1,0,0]) halfside(); } } //translate([-mw2,-mw2,-1]) // cube([motorwidth,motorwidth,motorheight]); } translate([0,0,totalheight]) rotate([0,-90,0]) dovetail(height=10.1, male=true); } towerbase();