/* GNU AGPLv3 (or later at your option) see bottom for more license info. please do not remove this notice. */ /*****************************************************/ /* binary */ //ones_place(); //twos_place(); //fours_place(); //eights_place(); /*****************************************************/ /* trinary */ //ones_place(); //threes_place(); //nines_place(); twenty_sevens_place(); /*****************************************************/ /* decimal */ //ones_place(); //tens_place(); //hundreds_place(); //thousands_place(); // use this while editing so previewing is faster: //$fn = 30; // use this for generating STL so model is more accurate: $fn = 100; // how big each ones place side is in millimeters side_length = 20; // modify this to your aesthetic taste corner_radius = side_length / 6; connector_thickness = side_length / 4; fudge = 0.1; module fillet(r) { offset(-r) { offset(r) { children(); } } } module round_inside_corners(r) { fillet(r) children(); } module round_outside_corners(r) { fillet(-r) children(); } module connector_tab(connector_thickness) { rotate([0, -90, -90]) { translate([corner_radius / 2, 0, 0]) { linear_extrude(height = connector_thickness) { intersection() { circle(corner_radius, $fn = 3); translate([-corner_radius, -corner_radius]) { square([corner_radius, 2 * corner_radius]); } } round_outside_corners(corner_radius / 3) { circle(corner_radius, $fn = 3); } } } } } module ones_place() { difference() { linear_extrude(height = side_length) { round_outside_corners(corner_radius) { square(side_length); } } translate([side_length / 2, -fudge, -fudge]) { connector_tab(connector_thickness); } translate([side_length / 2, side_length - connector_thickness + fudge, -fudge]) { connector_tab(connector_thickness); } } translate([side_length / 2, 0, side_length - 2 * fudge]) { connector_tab(connector_thickness - 2 * fudge); } translate([side_length / 2, side_length - connector_thickness + 2 * fudge, side_length - 2 * fudge]) { connector_tab(connector_thickness - 2 * fudge); } } /*****************************************************/ /* decimal */ module tens_place() { for(ones_index = [0 : (10 - 1)]) { translate([ones_index * side_length, 0, 0]) { ones_place(); } } } module hundreds_place() { for(tens_index = [0 : (10 - 1)]) { translate([0, tens_index * side_length, 0]) { tens_place(); } } } module thousands_place() { for(hundreds_index = [0 : (10 - 1)]) { translate([0, 0, hundreds_index * side_length]) { hundreds_place(); } } } /*****************************************************/ /* binary */ module twos_place() { for(ones_index = [0 : (2 - 1)]) { translate([ones_index * side_length, 0, 0]) { ones_place(); } } } module fours_place() { for(twos_index = [0 : (2 - 1)]) { translate([0, twos_index * side_length, 0]) { twos_place(); } } } module eights_place() { for(fours_index = [0 : (2 - 1)]) { translate([0, 0, fours_index * side_length]) { fours_place(); } } } /*****************************************************/ /* trinary */ module threes_place() { for(ones_index = [0 : (3 - 1)]) { translate([ones_index * side_length, 0, 0]) { ones_place(); } } } module nines_place() { for(threes_index = [0 : (3 - 1)]) { translate([0, threes_index * side_length, 0]) { threes_place(); } } } module twenty_sevens_place() { for(nines_index = [0 : (3 - 1)]) { translate([0, 0, nines_index * side_length]) { nines_place(); } } } //connector_tab(connector_thickness);