$fa = 1; $fs = 0.4; wiggle_room = 0.3; epsilon = 0.01; text_depth = 0.4; button_thickness = 3; switch_shaft_upper = 3 + wiggle_room; switch_shaft_lower = 3.5 + wiggle_room; switch_shaft_length = 8.8; shaft_outer = 7; shaft_length = 5; print_spacing = 10; module button(label, width, height, size=3) { difference() { cube([width, height, button_thickness]); translate([0, 0, epsilon]) button_text(label, width, height, text_depth+epsilon, size=size); } translate([width/2, height/2, 0]) difference() { translate([0, 0, -shaft_length]) cylinder(h=shaft_length, r=shaft_outer/2); translate([0, 0, -switch_shaft_length]) cylinder(h=switch_shaft_length, r1=switch_shaft_lower/2, r2=switch_shaft_upper/2); } } module button_text(label, width, height, thickness, size=3) { translate([width/2, height/2, button_thickness-thickness]) linear_extrude(thickness) text(label, font="Orbitron:style=Black", halign="center", valign="center", size=size); } //buttons = ["HDG"]; //buttons_small = [""]; buttons = ["HDG", "LNAV", "ALT", "VNAV", "VS", "FLC", "SPD", "APR", "LVL", "FD", "AP", "A/T", "N1"]; buttons_small = ["", "", "c/o"]; button_width = 15; button_height = 8; button_small_width = 8; button_small_height = 8; render_text = true; render_button = true; row_length = 4; rotate([0, 180, 0]) { for (i = [0:len(buttons)-1]) { translate([(i%row_length)*(button_width+print_spacing), floor(i/row_length)*(button_height+print_spacing), 0]) { if (render_text && render_button) { color("black") button(buttons[i], button_width, button_height); color("white") button_text(buttons[i], button_width, button_height, text_depth); } else if (render_button) { button(buttons[i], button_width, button_height); } else if (render_text) { button_text(buttons[i], button_width, button_height, text_depth); } } } for (i = [0:len(buttons_small)-1]) { translate([(i%row_length)*(button_small_width+print_spacing), floor(i/row_length)*(button_small_height+print_spacing)+80, 0]) { if (render_text && render_button) { color("black") button(buttons_small[i], button_small_width, button_small_height, size=3); color("white") button_text(buttons_small[i], button_small_width, button_small_height, text_depth, size=3); } else if (render_button) { button(buttons_small[i], button_small_width, button_small_height, size=3); } else if (render_text) { button_text(buttons_small[i], button_small_width, button_small_height, text_depth, size=3); } } } }