// Furby face in modular synth $fn = 100; // rendering segements ball_diam = 22.4; // eye diameter ball_wall = 3; // eyeball wall thickness pupillary = 30; // distance between pupils axisdist = 22; // distance between two shafts angle = 0.2; // angle of section between eyes and beak lidangle = -30; // opening of eyelids: 0..70 beakangle = 30; // opening of the beak: 0..30 clearance = 0.2; // joint clearance for print in place, for face only innershape(); module cast(){ difference(){ cube([40,40,16]); translate([20,20,2])rotate([0,0,45])cylinder(d1=sqrt(2)*32,d2=sqrt(2)*36,h=14.01,$fn=4);// } difference(){ translate([20,20,2])sphere(d = ball_diam+0.4); translate([0,0,-20])cube([40,40,20]); } translate([20,20,0])hull(){cylinder(d=14,h=11.0);translate([0,0,7.2])sphere(d=14);} } module innershape(){ difference(){ eyeball(); translate([0,0,7])cylinder(d1=4,d2=20,h=3); translate([0,0,9])cylinder(d=14,h=8.8); } } //color("black") module eyeball(){ difference(){ union(){ translate([0, 0, 0])sphere(d = ball_diam); translate([-12, 0, 0])rotate([0, 90, 0])cylinder(d = 5.6, h = 3); } translate([-15, -15, -11.8 + ball_diam / 2 - 30 - 2])cube([30, 30, 30]); translate([-15, 0, 0])rotate([0, 90, 0])cylinder(d = 2+clearance, h = 30); difference(){ translate([0, 0, 0])sphere(d = ball_diam - ball_wall); translate([-15, -15, 6])cube([30, 30, 30]); } translate([-15, -1, -4])cube([10, 2, 4]); } } module eyeball_cutout(){ difference(){ translate([0, 0, 0])sphere(d = ball_diam - ball_wall); translate([-15, -15, 6])cube([30, 30, 30]); } }