$fn=50; HIEGHT = 1; module square_rounded(size1, size2, r1, r2, h) { union() { difference() { translate([0, 0, h/2]) { cube([size1-r1*2, size2, h], center=true); cube([size2, size1-r1*2, h], center=true); } for(r=[0, 90, 180, -90]) rotate([0, 0, r]) translate([-size2/2, size1/2, 0]) rotate([-45, 0, 0]) cube([size2, 100, 2*h]); } for(r=[0, 90, 180, -90]) rotate([0, 0, r]) translate([size1/2-r1, size1/2-r1]) cylinder(h=h, r1=r1, r2=r2); } } module gf_bottom() { union() { square_rounded(size1=35.6, size2=37.2, r1=0.8, r2=1.6, h=0.8); translate([0, 0, 0.8]) square_rounded(size1=37.2, size2=37.2, r1=1.6, r2=1.6, h=1.8); translate([0, 0, 2.6]) square_rounded(size1=37.2, size2=41.5, r1=1.6, r2=3.75, h=2.15); } } module gf_socker_cut() { t = 0.25; a = sin(45)*t; b = a*tan(22.5); c = t/sin(45); echo(a+b); translate([0, 0, -a]) union() { square_rounded(size1=35.6+a*2, size2=37.2+2*t, r1=0.8+a, r2=1.6+t, h=0.8+b); translate([0, 0, 0.8+b]) square_rounded(size1=37.2+2*t, size2=37.2+2*t, r1=1.6+t, r2=1.6+t, h=1.8); translate([0, 0, 2.6+b]) square_rounded(size1=37.2+2*t, size2=41.5+2*c, r1=1.6+t, r2=3.75+c, h=2.15+a-b-0.001); } } // gf_bottom(); // gf_socker_cut(); difference() { union() { gf_bottom(); translate([0, 0, 4.75]) square_rounded(size1=41.5, size2=41.5, r1=3.75, r2=3.75, h=HIEGHT*7+4.4-4.75); } translate([0, 0, HIEGHT*7+4.4]) gf_socker_cut(); }