roundR=15; cubeX=50; cubeY=50; cubeIX=30; cubeIY=30; height=8; cubeRX=cubeX-roundR; cubeRY=cubeY-roundR; supportX=120-roundR; supportY=300-roundR; explode=0; screw=4; resolution=50; module support(){ difference(){ minkowski(){ cube([supportX,supportY,height],center=true); cylinder(d=roundR,h=0.001,center=true,$fn=resolution); } translate([0,-supportY/2,0],center=true) cylinder(d=screw,h=height+10,$fn=resolution,center=true); translate([0,supportY/2,0],center=true) cylinder(d=screw,h=height+10,$fn=resolution,center=true); } } module hole(){ translate([cubeX/2-5,0,0],center=true) cylinder(d=screw,h=height+1,$fn=resolution); translate([-cubeX/2+5,0,0],center=true) cylinder(d=screw,h=height+1,$fn=resolution); } module middle(){ difference(){ minkowski(){ cube([cubeRX,cubeRY,height+1],center=true); cylinder(d=roundR,h=0.001,center=true,$fn=resolution); } cube([cubeIX,cubeIY,height+1],center=true); hole(); } } module bottom(){ difference(){ minkowski(){ cube([cubeRX,cubeRY,height+1],center=true); cylinder(d=roundR,h=0.001,center=true,$fn=resolution); } cube([cubeIX-2,cubeIY-2,height+1],center=true); hole(); } } module top(){ difference(){ minkowski(){ cube([cubeRX,cubeRY,height+1],center=true); cylinder(d=roundR,h=0.001,center=true,$fn=resolution); } hole(); } } module topPot(){ difference(){ minkowski(){ cube([cubeRX,cubeRY,height+1],center=true); cylinder(d=roundR,h=0.001,center=true,$fn=resolution); } hole(); cylinder(d=8,h=height+1); } } module topScreen(){ difference(){ minkowski(){ cube([cubeRX,cubeRY,height+1],center=true); cylinder(d=roundR,h=0.001,center=true,$fn=resolution); } minkowski(){ cube([cubeRX-15,cubeRY-15,height+1],center=true); cylinder(d=roundR,h=0.001,center=true,$fn=resolution); } hole(); } } module cubeORCAS(){ translate([0,0,height/2+height*2+explode*2]) top(); translate([0,0,height/2+height+explode]) middle(); translate([0,0,height/2]) middle(); translate([0,0,-height/2-explode]) bottom(); } projection(){ difference(){ support(); for(y=[-1,1]) for(x=[-2:2]){ translate([y*(supportX/4+2),x*supportY/5,0]){ if(x==-2) top(); if(x==-1) middle(); if(x==0) middle(); if(x==1) bottom(); if(x==2&&y==-1) topPot(); if(x==2&&y==1) topScreen(); } } } }