//key unit size unit = 19.05; //height of keycap height = 13; //minimum mold thickness extra = 15; //thicknesses of the mold side_thickness = 2; bottom_thickness = 2; total_side = unit + extra*2 + side_thickness * 2; function hypo(num) = sqrt(pow(num,2) / 2); module bottom_mold(){ difference(){ //outer box cube([ total_side, total_side, 5 + bottom_thickness, ]); //inner box translate([ side_thickness, side_thickness, bottom_thickness ]) { cube([ unit + extra*2, unit + extra*2, 5, ]); } } translate([total_side / 2, total_side / 2, 5 + bottom_thickness]) rotate([0,0,45]) difference(){ //outer box cylinder( height + extra - 5, hypo(total_side), hypo(total_side + 3), $fn=4 ); //inner box cylinder( height + extra - 5, hypo(unit + extra*2), hypo(unit + extra*2 + 3), $fn=4 ); } //platform translate([ side_thickness + extra, side_thickness + extra, bottom_thickness ]) cube([unit, unit, bottom_thickness]); /* translate([ side_thickness + extra + unit / 2, side_thickness + extra + unit / 2, bottom_thickness*2 ]) rotate([0,0,45]) cylinder(bottom_thickness, unit/2 + 1, unit / 2, $fn=4);*/ //registration translate([ side_thickness + extra / 2, side_thickness + extra / 2, bottom_thickness ]) cylinder(3,extra/3, extra/4, $fn=4); //registration translate([ side_thickness + extra / 2, side_thickness + unit + extra * 1.5, bottom_thickness ]) cylinder(3,extra/3, extra/4, $fn=4); //registration translate([ side_thickness + unit + extra * 1.5, side_thickness + unit + extra * 1.5, bottom_thickness ]) cylinder(3,extra/3, extra/4, $fn=4); } module top_mold(){ difference(){ //outer box cube([ total_side, total_side, height + extra + bottom_thickness, ]); //inner box translate([ side_thickness, side_thickness, 0 ]) { cube([ unit + extra*2, unit + extra*2, height + extra + bottom_thickness, ]); } } } /*bottom_mold();*/ translate([50,0,0]) top_mold();