w=25; h=16; s=1.3; l = 1; r = 0.5; // oh hai, bitmaps! a = [ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0, 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0, 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0, 0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0, 0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0, 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,]; module left_side(){ union(){ for(i = [ 0 : (w*h) ]){ if(a[i] == 1){ translate([floor(i/w), i%w, 0]){ scale([s,s,s]){ drawCube(i); } } } } } } module right_side(){ translate([0,1.925*w,0]){ scale([1,-1,1]){ left_side(); } } } module drawCube(i){ cube([l,l,l], centered=true); } module drawRoundedCube(i){ difference(){ cube([l,l,l], centered=true); if((i < w) || (a[i-w] == 0)){ translate([-l/2+2*r,l/2,l/2]){ cornerRounder(r); } } if((i + w > (w*h)) || (a[i+w] == 0)){ translate([-l/2+2*r,l/2,l/2]){ rotate(180) cornerRounder(r); } } // TODO: left corner // TODO: right corner } } module cornerRounder(radius){ rotate([90,0,0]) difference(){ translate([-radius/2-0.1,radius/2+0.1,0]){ cube([radius+0.02,radius+0.01,l+0.02],center=true); } cylinder(l=l+0.02,r=radius,$fn = 25,center=true); } } module frame() { scale(2.87) union(){ left_side(); right_side(); } } include module arm() { linear_extrude(height=(l * 2.87)) rect3050(); } module left_arm() { translate([18.1,2.8,76]) rotate([0,-90,90]) arm(); } module right_arm() { translate([0,135.3,0]) left_arm(); } module left_mouse_ear(){ translate([5,-2,0]) cylinder(h=0.3, r = 15); } module right_mouse_ear() { translate([0,142,0]) left_mouse_ear(); } module mouse_ears(){ left_mouse_ear(); right_mouse_ear(); } union() { frame(); mouse_ears(); left_arm(); right_arm(); }