// Spherical sixpack // Copyright D.H.Fremlin 2014 // This work is issued under the terms of the Design Science License // as published in http://www.gnu.org/licenses/dsl.html size = 40; r0 = 0.2; module part1(){ hull(){ translate(v=[0,size/2,size]) sphere(r=r0); translate(v=[size,size/2,size]) sphere(r=r0); translate(v=[size/4,size/4,3*size/4]) sphere(r=r0); translate(v=[3*size/4,size/4,3*size/4]) sphere(r=r0); translate(v=[size/4,3*size/4,3*size/4]) sphere(r=r0); translate(v=[3*size/4,3*size/4,3*size/4]) sphere(r=r0); translate(v=[size/2,size/2,size/2]) sphere(r=r0); }} module part2() {hull(){ translate(v=[0,0,size]) sphere(r=r0); translate(v=[size/4,size/4,3*size/4]) sphere(r=r0); translate(v=[size/2,size/2,size]) sphere(r=r0); translate(v=[0,size/2,size/2]) sphere(r=r0); translate(v=[0,size,size]) sphere(r=r0); translate(v=[size/4,3*size/4,3*size/4]) sphere(r=r0); }} module part3() {translate (v=[size,0,0]) mirror([1,0,0]) part2();} module piece0() { union(){ part1(); part3(); part2();}} module piece(){ rotate(225,[1,0,0]) difference(){ translate(v=[size/2,size/2,size/2]) sphere(r=size/2,center=true); piece0(); translate (v=[size,0,size]) rotate (90,[0,0,1]) rotate (90,[0,1,0]) piece0(); translate (v=[size,size,0]) rotate (90,[0,0,1]) rotate (-90,[0,1,0]) piece0(); rotate (90,[0,1,0]) rotate (90,[0,0,1]) piece0(); translate (v=[size,0,size]) rotate (-90,[0,1,0]) rotate (90,[0,0,1]) piece0(); }} for (i=[-1,1]) for (j=[0,1]) translate (v=[i*(size+5),j*(5+size/2),0]) piece();