include ; use ; only = "outer"; height = 20; width = 100; depth = 30; thickness = 2; gap = 0.4; inner = [width, depth, height]; outer = [width+2*thickness+2*gap, depth+2*thickness+2*gap, height+2*thickness+2*gap]; diag_overlap = 8; module auflage() { rotate([180,0,0]) difference() { translate([0,1,0]) cube( [10,2,10], center=true); translate([-5,2,1]) rotate([45,0,0]) cube([10,6,10]); translate([1,2,-5]) rotate([0,0,-45]) cube([10,6,10]); translate([-5,2,-1]) rotate([-45,0,0]) translate([0,0,-10]) cube([10,6,10]); translate([-1,2,-5]) rotate([0,0,45]) translate([-10,0,0]) cube([10,6,10]); }; }; if(only!="inner") { rotate([0, only=="outer" ? 90 : 0,0]){ union() { difference() { union() { rotate([ 0, 90, 0]) cylinder( inner.x+2*thickness, outer.z/2+thickness, outer.z/2+thickness, center=true); translate([ 0, -inner.y/4-2*thickness, 0]) cube([ inner.x+2*thickness, inner.y/2+thickness, inner.z+2*thickness], center=true); }; union() { //rotate([ 0, 90, 0]) //cylinder( inner.x, inner.z/2, inner.z/2, center=true); translate([ 0, -inner.y/4-thickness, 0]) cube([ inner.x+2.1*thickness, inner.y/2+2*thickness, inner.z], center=true); //translate([ 0, -inner.y/4-thickness, 0]) //cube([ inner.x-thickness, inner.y/2+thickness, inner.z-thickness], center=true); } }; translate( [inner.x/2-thickness/2, 0, inner.z/2-thickness/2]) auflage(); translate( [-inner.x/2+thickness/2, 0, inner.z/2-thickness/2]) auflage(); translate( [inner.x/2-thickness/2, 0, -inner.z/2+thickness/2]) auflage(); translate( [-inner.x/2+thickness/2, 0, -inner.z/2+thickness/2]) auflage(); }; }; }; if(only!="outer") { rotate([only=="inner" ? 90 : 0,0,0]){ union() { difference() { union() { rotate([ 0, 90, 0]) cylinder( outer.x+2*thickness+2*gap, outer.z/2+thickness+2*gap, outer.z/2+thickness+2*gap, center=true); translate([ 0, -outer.y/4, 0]) cube([ outer.x+2*thickness+2*gap, outer.y/2+thickness+2*gap, outer.z+2*thickness+2*gap], center=true); }; union() { rotate([ 0, 90, 0]) cylinder( outer.x, outer.z/2, outer.z/2, center=true); translate([ 0, -outer.y/4, 0]) cube([ outer.x, outer.y/2, outer.z], center=true); }; translate([ 0, thickness, 0]) cube([ outer.x-2*thickness, outer.y-3*thickness, outer.z+3*thickness], center=true); translate([ 0, -outer.y/2, 0]) { cube([ outer.x-2*diag_overlap, 1.5*thickness, outer.z], center=true); cube([ outer.x, 1.5*thickness, outer.z-2*diag_overlap], center=true); diag_overlap_length = sqrt(diag_overlap^2*2); o = [ outer.x/2-diag_overlap, -0.75*thickness, outer.z/2-diag_overlap]; translate([ o.x, o.y, o.z]) rotate([ 0,45,0]) cube([ diag_overlap_length, 2*thickness, diag_overlap_length], center=true); translate([ -o.x, o.y, o.z]) rotate([ 0,45,0]) cube([ diag_overlap_length, 2*thickness, diag_overlap_length], center=true); translate([ -o.x, o.y, -o.z]) rotate([ 0,45,0]) cube([ diag_overlap_length, 2*thickness, diag_overlap_length], center=true); translate([ o.x, o.y, -o.z]) rotate([ 0,45,0]) cube([ diag_overlap_length, 2*thickness, diag_overlap_length], center=true); } } } }; };