pump(4000, 10000, 1500); module pump(width=30, height=70, radius=10) { base(); piston(); module base() { difference() { cube(width, center=true); translate([0,0, -width/2]) cylinder(h=width, r=radius); } } module piston() { function percent(base, p) = p /100 * base; function hand_z() = percent(width/2, 99) + height - (height - width); function hand_height() = width * 1.5; // Pump part translate([0, 0, percent(width/2, 99)]) cylinder( h=height-width, r=percent(radius, 98) ); // Hand part translate([-hand_height()/2, 0, hand_z()]) rotate([0, 90, 0]) cylinder( h=hand_height(), r=percent(radius, 30) ); } }