//translate([2,3,1]) sphere(10); // units are mm //color([1,1,1]) cube(10); radius = 10; // difference // # - semi transparent // * - mute // % - semi transparent and not printed // ! - solo * translate([0,radius,radius]) hull() { %cube(radius+5, center=true); sphere(radius); } scaling = 7.2; x = 10 * scaling; comb = 2 * scaling; //square([x, y], true); //for(z=[1,10]) square([z+10, y], true); module teeth(width, side) { eps = .5; depth = .5*side- width; // translate([-width/2, 3]) translate([0, -width/4, 0]) union() { square([width, width]); polygon(points = [[0, width-eps], [-width/2, 2*width], [1.5*width, 2*width], [width, width-eps]]); } } module square_teeth(comb, width, height){ translate([-comb/2, width/2 - comb]) teeth(comb); rotate([0, 0, 90]) translate([-comb/2, height/2 - comb]) teeth(comb, width); rotate([0, 0, 180]) translate([-comb/2, width/2 - comb]) teeth(comb, width); rotate([0, 0, 270]) translate([-comb/2, height/2 - comb]) teeth(comb, width); } module crescent_teeth(comb, big, small){ translate([(big+small+comb)/2, comb]) rotate ([0,0, 180]) teeth(comb); eps = .25; translate([comb,(big+small-comb)/2]) rotate ([0,0, 90]) teeth(comb); //translate([big*1.5,8.25]) rotate([0,0,90]) teeth(comb); //translate([18.25,5]) rotate([0,0,180]) teeth(comb); } module square_shape(x, y, comb) { difference () { square([y,x], true); # square_teeth(comb, x, y); } } module crescent(x, comb){ small = x; radius = 2; translate([x/2,0]) // translate([x,0]) difference() { intersection(){ difference() { circle(radius*x); circle(small); } square(radius*x); } # crescent_teeth(comb, radius*x, x); } } square_shape(x,2*x, comb); *rotate([0,0,90]) teeth(2); crescent(x, comb);