// Cubical 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 = 30; 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 piece() { union(){ part1(); part3(); part2();}} difference(){ cube (size=size, center=false); piece(); translate (v=[size,0,size]) rotate (90,[0,0,1]) rotate (90,[0,1,0]) piece(); translate (v=[size,size,0]) rotate (90,[0,0,1]) rotate (-90,[0,1,0]) piece(); rotate (90,[0,1,0]) rotate (90,[0,0,1]) piece(); translate (v=[size,0,size]) rotate (-90,[0,1,0]) rotate (90,[0,0,1]) piece(); }