r_lower=20; r_greater=50; axis=40; module half_an_ellipsis(r,axis){ intersection(){ translate([0,max(r,axis)/2]) square(max(r,axis),center=true); scale([1,r/axis]) circle(d=axis); } } /*create a cutting surface of a handle each half-side is ellipsis round, but both halfs have unequal size The shape is similar to a raindrop */ module droplet(r_lower=20, r_greater=50, axis=40){ half_an_ellipsis(r_greater, axis); rotate(180) half_an_ellipsis(r_lower, axis); } //droplet(); very_small=0.01; distance=80; union(){ hull(){ translate([distance/2,0,0]) rotate([0,0,90]) rotate([90,0,0]) linear_extrude(very_small) droplet(15,40,35); translate([-distance/2,0,0]) rotate([0,0,90]) rotate([90,0,0]) linear_extrude(very_small) droplet(); } translate([-distance/2-8,0,-3]) rotate([0,-45,0]) for( angle=[0:45]) { translate([0,0,-r_lower/2]) rotate([0,angle,0]) rotate([0,0,90]) rotate([90,0,0]) linear_extrude(1) translate([0,r_lower/2]) droplet(); } translate([-distance/2-10,0,0]) rotate([90,0,0]) cylinder(d=axis,h=(r_lower+r_greater)/2,center=true); }