emotion_ball.scad
1 use <arc.scad> 2 use <pie.scad> 3 use <polyline2d.scad> 4 5 ball_radius = 15; 6 thickness = 2.5; 7 magnet_radius = 3.2; 8 magnet_height = 1.5; 9 10 emoticon(ball_radius, magnet_radius, magnet_height, thickness) 11 grinning_face_with_smiling_eyes(ball_radius); 12 13 translate([ball_radius * 2.5, 0, 0]) 14 emoticon(ball_radius, magnet_radius, magnet_height, thickness) 15 grinning_squinting_face(ball_radius); 16 17 translate([ball_radius * 5, 0, 0]) 18 emoticon(ball_radius, magnet_radius, magnet_height, thickness) 19 persevering_face(ball_radius); 20 21 translate([ball_radius * 7.5, 0, 0]) 22 emoticon(ball_radius, magnet_radius, magnet_height, thickness) 23 smirking_face(ball_radius); 24 25 module emoticon(ball_radius, magnet_radius, magnet_height, thickness) { 26 $fn = 64; 27 difference() { 28 sphere(ball_radius); 29 sphere(ball_radius - thickness); 30 31 translate([0, 0, -ball_radius]) 32 linear_extrude(magnet_height) 33 circle(magnet_radius); 34 35 translate([0, 0, ball_radius]) 36 mirror([0, 0, 1]) 37 linear_extrude(ball_radius * 1.1, scale = 0.5) 38 children(); 39 } 40 } 41 42 // design your emoticon in a cirle with a radius of `ball_radius`. 43 44 module grinning_face_with_smiling_eyes(ball_radius) { 45 translate([ball_radius / 2.25, ball_radius / 8, 0]) 46 arc(ball_radius / 4, 180, width = ball_radius / 10); 47 48 translate([-ball_radius / 2.25, ball_radius / 8, 0]) 49 arc(ball_radius / 4, 180, width = ball_radius / 10); 50 51 scale([1, 0.8, 1]) 52 translate([0, -ball_radius / 3, 0]) 53 pie(radius = ball_radius / 1.5, angle = [180, 360]); 54 } 55 56 module grinning_squinting_face(ball_radius) { 57 r = ball_radius * 0.4; 58 a = 25; 59 60 translate([ball_radius / 4, ball_radius / 4, 0]) 61 polyline2d([[r * cos(a), r * sin(a)], [0, 0], [r * cos(a), r * -sin(a)]], width = ball_radius / 10); 62 63 translate([-ball_radius / 4, ball_radius / 4, 0]) 64 polyline2d([[-r * cos(a), r * sin(a)], [0, 0], [-r * cos(a), r * -sin(a)]], width = ball_radius / 10); 65 66 scale([1, 0.8, 1]) 67 translate([0, -ball_radius / 3, 0]) 68 pie(radius = ball_radius / 1.5, angle = [180, 360]); 69 } 70 71 module persevering_face(ball_radius) { 72 r = ball_radius * 0.4; 73 a = 25; 74 75 translate([ball_radius / 4, ball_radius / 4, 0]) 76 polyline2d([[r * cos(a), r * sin(a)], [0, 0], [r * cos(a), r * -sin(a)]], width = ball_radius / 10); 77 78 translate([-ball_radius / 4, ball_radius / 4, 0]) 79 polyline2d([[-r * cos(a), r * sin(a)], [0, 0], [-r * cos(a), r * -sin(a)]], width = ball_radius / 10); 80 81 scale([1.4, 0.8, 1]) 82 translate([0, -ball_radius / 1.75, 0]) 83 arc(ball_radius / 4, 180, width = ball_radius / 10); 84 } 85 86 module smirking_face(ball_radius) { 87 r = ball_radius * 0.4; 88 a = 25; 89 90 translate([ball_radius / 2.5, ball_radius / 25, 0]) { 91 //scale([1, 0.9, 1]) 92 arc(ball_radius / 3, [35, 150], width = ball_radius / 10); 93 translate([ball_radius / 6, ball_radius / 5.5 ,0]) 94 circle(ball_radius / 8); 95 } 96 97 translate([-ball_radius / 2, ball_radius / 25, 0]) { 98 //scale([1, 0.9, 1]) 99 arc(ball_radius / 3, [35, 150], width = ball_radius / 10); 100 translate([ball_radius / 6, ball_radius / 5.5 ,0]) 101 circle(ball_radius / 8); 102 } 103 104 scale([1.3, 1, 1]) 105 translate([-ball_radius / 15, -ball_radius / 6, 0]) 106 arc(ball_radius / 3, [235, 350], width = ball_radius / 10); 107 } 108