// 150x230 $fn=70; M = [ [ 1 , 0 , 0 , 0 ], [ 0 , 1 , 1.8, 0 ], [ 0 , 0 , 1 , 0 ], [ 0 , 0 , 0 , 1 ] ] ; M2 = [ [ 1 , 0 , 0.7 , 0 ], [ 0 , 1 , 0, 0 ], [ 0 , 0 , 1 , 0 ], [ 0 , 0 , 0 , 1 ] ] ; M3 = [ [ 1 , 0 , -0.7 , 0 ], [ 0 , 1 , 0, 0 ], [ 0 , 0 , 1 , 0 ], [ 0 , 0 , 0 , 1 ] ] ; difference() { union() { translate([0,10,0]) cube([210,130,3]); ding(); } // Control panel bottom hole translate([9,25,-7]) resize([192,40,25]) ding(); // Holes for arcade buttons for(i=[0:3]) if(i>=1) translate([61+i*38,115.7,0]) rotate([28,0,0]) cylinder(d=24.6,h=20,$fn=100); else translate([35+i*38,115.7,0]) rotate([28,0,0]) cylinder(d=24.6,h=20,$fn=100); // LED hole translate([59,115.7,0]) rotate([28,0,0]) cylinder(d=5.2,h=20,$fn=100); // Pause button translate([73,115.7,0]) rotate([28,0,0]) cylinder(d=7.4,h=20,$fn=100); // Cartrigde port (hole) translate([44,124,9]) cube([40,18,20]); // Screw holes top translate([5,15,-1]) cylinder(d=3.2,h=10,$fn=60); translate([205,15,-1]) cylinder(d=3.2,h=10,$fn=60); translate([5,135,-1]) cylinder(d=3.2,h=7,$fn=60); translate([5,135,5.9]) cylinder(d=6,h=15,$fn=60); translate([205,135,-1]) cylinder(d=3.2,h=7,$fn=60); translate([205,135,5.9]) cylinder(d=6,h=15,$fn=60); // Bevel space part 1 multmatrix(M2) translate([0,95.5,0]) rotate([28,0,0]) translate([0,0,5]) difference() { cube([100,36,2]); translate([2,2,-1]) cube([196,32,20]); } // Bevel space part 2 multmatrix(M3) translate([0,95.5,0]) rotate([28,0,0]) translate([100,0,5]) difference() { cube([110,36,2]); translate([-4,2,-1]) cube([112,32,20]); } } // Cartrigde port translate([44,124,9]) difference() { cube([40,22,20]); translate([2,2,2]) cube([36,18,20]); translate([10.3,2.3,-1]) cube([19,12,10]); } // Letter Power Off translate([51.5+38*0,120,17.5]) rotate([28,0,0])color("orange") linear_extrude(2) text("o",size=6,direction="ttb",$fn=100); // Letter coin translate([77+38*1,120,17.5]) rotate([28,0,0])color("orange") linear_extrude(2) text("$",size=6,direction="ttb",$fn=100); // Letter 1-player translate([77+38*2,120,17.5]) rotate([28,0,0])color("orange") linear_extrude(2) text("1",size=6,direction="ttb",$fn=100); // Letter 2-players translate([77+38*3,120,17.5]) rotate([28,0,0])color("orange") linear_extrude(3) text("2",size=6,direction="ttb",$fn=100); difference() { // Horizontal bars {for(i=[0:11]) translate([0,13+i*6.35,2]) roundedcube([210,4.5,3],radius=1); } // Screw holes top (2nd time - only front) translate([5,15,-1]) cylinder(d=3.2,h=10,$fn=60); translate([205,15,-1]) cylinder(d=3.2,h=10,$fn=60); translate([5,15,4]) cylinder(d=5.7,h=10,$fn=60); translate([205,15,4]) cylinder(d=5.7,h=10,$fn=60); } module ding() { multmatrix(M2) hull() { translate([-2,140-2,3]) cube([110,2,20]); multmatrix(M) translate([-2,140-55,3]) cube([110,2,20]); } multmatrix(M3) hull() { translate([102,140-2,3]) cube([110,2,20]); multmatrix(M) translate([102,140-55,3]) cube([110,2,20]); } } module roundedcube(size = [1, 1, 1], center = false, radius = 0.5, apply_to = "all") { // If single value, convert to [x, y, z] vector size = (size[0] == undef) ? [size, size, size] : size; translate_min = radius; translate_xmax = size[0] - radius; translate_ymax = size[1] - radius; translate_zmax = size[2] - radius; diameter = radius * 2; module build_point(type = "sphere", rotate = [0, 0, 0]) { if (type == "sphere") { sphere(r = radius); } else if (type == "cylinder") { rotate(a = rotate) cylinder(h = diameter, r = radius, center = true); } } obj_translate = (center == false) ? [0, 0, 0] : [ -(size[0] / 2), -(size[1] / 2), -(size[2] / 2) ]; translate(v = obj_translate) { hull() { for (translate_x = [translate_min, translate_xmax]) { x_at = (translate_x == translate_min) ? "min" : "max"; for (translate_y = [translate_min, translate_ymax]) { y_at = (translate_y == translate_min) ? "min" : "max"; for (translate_z = [translate_min, translate_zmax]) { z_at = (translate_z == translate_min) ? "min" : "max"; translate(v = [translate_x, translate_y, translate_z]) if ( (apply_to == "all") || (apply_to == "xmin" && x_at == "min") || (apply_to == "xmax" && x_at == "max") || (apply_to == "ymin" && y_at == "min") || (apply_to == "ymax" && y_at == "max") || (apply_to == "zmin" && z_at == "min") || (apply_to == "zmax" && z_at == "max") ) { build_point("sphere"); } else { rotate = (apply_to == "xmin" || apply_to == "xmax" || apply_to == "x") ? [0, 90, 0] : ( (apply_to == "ymin" || apply_to == "ymax" || apply_to == "y") ? [90, 90, 0] : [0, 0, 0] ); build_point("cylinder", rotate); } } } } } } }