// use wallLength=127; largeWallHeight=228.6; //full size is 228.6mm wallWidth=10; sinkHoleDiameter=19.05; sinkPadding=1; circleRadius=3.175; module CutOutCircles(r) { color("blue") cylinder(h=15, r=r, center=false); translate([0, 0, 29]) sphere(r*5.2); } module DrawAllCircles(startPoint, endPoint, distanceBetween, xPoint, zPoint) { for(i = [startPoint : distanceBetween : endPoint]) { translate([xPoint, i, zPoint]) CutOutCircles(circleRadius); } } module mainBody() { translate([0, 0, wallWidth]) difference(){ union(){ //Longer Wall color("cyan") cube([wallLength, wallWidth, largeWallHeight]); color("cyan") translate([0, -117, 0]) cube([wallLength, wallWidth, largeWallHeight]); //Shorter Wall color("yellow") translate([0,0,-10]) rotate([0, 0, -90]) cube([wallLength - (wallWidth*2), wallWidth, largeWallHeight + 10]); color("yellow") translate([117, 0, -10]) rotate([0, 0, -90]) cube([wallLength - (wallWidth*2), wallWidth, largeWallHeight + 10]); difference() { color("green") rotate([90,0,0]) translate([0, -10, -10]) cube([wallLength, wallWidth, wallLength]); DrawAllCircles(-72, -27.5, circleRadius*4, 15, -20); DrawAllCircles(-91, -10, circleRadius*4, 27.5, -20); DrawAllCircles(-91, -10, circleRadius*4, 40, -20); DrawAllCircles(-91, -10, circleRadius*4, 52.5, -20); DrawAllCircles(-91, -10, circleRadius*4, 65, -20); DrawAllCircles(-91, -10, circleRadius*4, 77.5, -20); DrawAllCircles(-91, -10, circleRadius*4, 90, -20); DrawAllCircles(-91, -10, circleRadius*4, 102.5, -20); DrawAllCircles(-72, -27.5, circleRadius*4, 113, -20); } } // Holes in the bottom // translate([15, -30, -20]) // CutOutCircles(circleRadius); // Triangular cutouts in the corners union(){ color("blue") translate([0, 10, -30]) rotate([45, 0, 45]) cube([70,70,70], center=true); color("blue") translate([0, -117, -30]) rotate([45, 0, -45]) cube([70,70,70], center=true); color("blue") translate([wallLength, 10, -30]) rotate([-45, 0, -45]) cube([70,70,70], center=true); color("blue") translate([127, -117, -30]) rotate([-45, 0, 45]) cube([70,70,70], center=true); } } } // Grip Mechanism module grip() { translate([0, 0, wallWidth]) difference() { union() { //Base translate([63.5, 30, 162.3]) cube([90.8,47.4,76.2], center=true); //Rounded far edge translate([63.5, 46.6625, 125]) rotate([0,90,0]) cylinder(h = 90.8, r = 6.0375, center=true); //Rounded near edge translate([63.5, 15.6875, 125]) rotate([0,90,0]) cylinder(h = 90.8, r = 6.0375, center=true); } //Opening for grip union() { //Cylinders for hole translate([63.5, 31, 170]) rotate([0,90,0]) cylinder(h = 91, r = sinkHoleDiameter/2 + (sinkPadding * 2), center=true); translate([63.5, 31, 138.7]) cube([91, sinkHoleDiameter + (sinkPadding * 2), 60], center=true); } } } difference() { union() { rotate([0, -45, 0]) union() { mainBody(); grip(); for(i = [1,2]) { translate([-wallLength * 2 - 0.1, -wallLength*i/3 + wallWidth, 0]) cube([wallLength*2, 1.2, largeWallHeight]); } for(i = [-1, 1]) { translate([-wallLength*2 + 63.5 - (90.8/2) - 0.1, 30 + 16*i, 0]) cube([wallLength*2, 1.2, largeWallHeight]); translate([0, -50-50*i, -80.1]) cube([80, 1.2, 80]); } } translate([-140, -74, 0]) cube([1.2, 121, 100]); } translate([-400, -400, -400]) cube([800, 800, 400]); translate([-980, -200, -1]) cube([800, 400, 400]); translate([90, -200, -1]) cube([800, 400, 400]); }