$fn = 32; grip_points = 6; total_height = 90; shaft_diameter = 5; layer_height = 0.2; diameter = 6; module floret() { linear_extrude(total_height) difference() { union() { circle(d=15); for (i=[0:grip_points - 1]) { angle = (i * 360) / grip_points; rotate([0, 0, angle]) translate([diameter, 0, 0]) circle(d=6); } } circle(d=shaft_diameter, $fn=6); } } // The main body intersection () { floret(); hull() { for (i=[0:grip_points - 1]) { angle = (i * 360) / grip_points; rotate([0, 0, angle]) translate([diameter, 0, 5]) sphere(d=6, $fn=16); rotate([0, 0, angle]) translate([diameter, 0, total_height - 25]) scale([1, 1, 5]) sphere(d=6, $fn=16); } } // cube([20, 20, 20], center=true); }