$fn=180; ow=23; // outer width od=18; // outer depth oh=10; // outer height ep = 0.01; iw=17.4; // inner width id=12.5; // inner depth ih=7.6; // inner height sphMul = 4; difference() { translate([-ow/2, -od/2, 0]) union() { difference() { union() { cube([ow, od, oh]); } union() { color("SlateGray") union() { // right cut (+x) rotate([0, 15, 0]) translate([-8, -ep, 0]) cube([8, od + 2*ep, 2*oh]); // left cut (-x) translate([ow, -ep, 0]) rotate([0, -15, 0]) cube([8, od + 2*ep, 2*oh]); // front cut (-y) rotate([-20, 0, 0]) translate([-ep, -8, 0]) cube([ow + 2*ep, 8, 2*oh]); // back cut (+y) translate([-ep, od, 0]) rotate([5, 0, 0]) cube([ow + 2*ep, 8, 2*oh]); // top cut translate([ow/2, od/2 + 6, ow*sphMul + oh - 1.4]) sphere(r=ow*sphMul); } // inside recess color("SeaGreen") union() { translate([(ow - iw)/2, (od - id)/2 + 1, -ep]) cube([iw , id, ih + ep]); translate([(ow - iw)/2, (od - id)/2 + 1, ih]) rotate([0, 15, 0]) translate([0, 0, -ih-ep]) cube([2 , id, ih + ep]); translate([iw + (ow - iw)/2, (od - id)/2 + 1, ih]) rotate([0, -15, 0]) translate([-2, 0, -ih-ep]) cube([2 , id, ih + ep]); translate([(ow - iw)/2, (od - id)/2 + 1, ih]) rotate([-20, 0, 0]) translate([0, 0, -ih-ep]) cube([iw , 4, ih + ep]); } } } difference() { cw = 4.3; // cross width ct = 1.3; // cross thickness // inner cylinder color("DimGray") translate([ow/2, od/2, 1.4]) cylinder(d=5.3, h=ih - 1.4); // inner cross recess (post hole) color("MediumSeaGreen") translate([ow/2, od/2, 1-ep]) union() { translate([-(ct/2), -(cw/2), 0]) cube([ct, cw, ih - 2 + ep]); translate([-(cw/2), -(ct/2), 0]) cube([cw, ct, ih - 2 + ep]); } } } color("Gainsboro") union() { translate([-1.8, 0, 0]) rotate([0, 0, 45]) translate([0, od/2 + 2.8, oh-1]) rotate([45, 0, 0]) cube([8, 2, 8], center=true); translate([1.8, 0, 0]) rotate([0, 0, -45]) translate([0, od/2 + 2.8, oh-1]) rotate([45, 0, 0]) cube([8, 2, 8], center=true); translate([-1.8, 1, 0]) rotate([0, 0, 135]) translate([0, od/2 + 2.8, oh-1.8]) rotate([45, 0, 0]) cube([8, 2, 8], center=true); translate([1.8, 1, 0]) rotate([0, 0, -135]) translate([0, od/2 + 2.8, oh-1.8]) rotate([45, 0, 0]) cube([8, 2, 8], center=true); } }