$fn=45; nozzle_dia=.4; handle_dia=28; handle_length=153; shaft_length=18; hand_width=handle_length*.60; screw_offset=5.9; screw_dia=2.8; support_offset=screw_dia/2+nozzle_dia; oval=21.6/28; mount_inset=1.8; extra=.01; module handle() { scale([1,1,oval]) difference() { union() { difference() { translate([0,0,handle_dia/2]) rotate([90,0,0]) cylinder(r=handle_dia/2,h=handle_length-handle_dia-handle_dia/2,center=true); translate([handle_dia/2,0,handle_dia/2]) cube([handle_dia,hand_width,handle_dia],center=true); } translate([0,0,handle_dia/2]) rotate([90,0,0]) scale([.85,1,1]) cylinder(r=handle_dia/2,h=handle_length-handle_dia*2,center=true); translate([handle_dia,(handle_length-handle_dia*2)/-2,handle_dia/2]) corner(); translate([handle_dia,(handle_length-handle_dia*2)/2,handle_dia/2]) mirror([0,1,0]) corner(); for (i=[-1,1]) translate([handle_dia-handle_dia/4+shaft_length/2,handle_length*i/2,handle_dia/2]) { rotate([90,0,90]) cylinder(r=handle_dia/2-mount_inset,h=shaft_length,center=true); #for (j=[-2,-1,0,1,2]) translate([0,j*support_offset,-handle_dia/2+handle_dia/8]) cube([shaft_length-2*extra,nozzle_dia,handle_dia/4],center=true); } for (i = [-hand_width/2:hand_width/4:hand_width/2]) translate([0,i,handle_dia/2]) for(j=[-1,1]) hull() { sphere(r=handle_dia/2,center=true); translate([0,hand_width*j/6,0]) scale([.7,1,1]) sphere(r=handle_dia/2,center=true); } } for (i = [-1,1]) translate([handle_dia-handle_dia/4+screw_offset,handle_length/2*i,handle_dia/2]) cylinder(r=screw_dia/2,h=handle_dia,center=true); } } module corner() { translate([-handle_dia/4,-handle_dia/4,0]) intersection() { rotate_extrude(convexity=10,angle=90) translate([handle_dia-handle_dia/4,0,0]) circle(r=handle_dia/2,center=true); translate([-handle_dia*4,-handle_dia*4,0]) cube([handle_dia*8,handle_dia*8,handle_dia+extra], center=true); } } handle();