include <constants/all.scad> include <soften/fillet.scad>
module soft_cylinder(d, r, h,
d1, d2, chamfer=0, roundover_r=0, fillet_r=0, fillet_angle=360) { my_d = d ? d : d1; d1 = d1 ? d1 : my_d; d2 = d2 ? d2 : my_d; $fn = fn(my_d/2+fillet_r); hull() difference() { union() { height = fillet_r ? h + epsilon : h; translate([0,0,fillet_r? -epsilon : 0]) cylinder(d1=d1,d2=d2,h=height); } if(chamfer > 0) { rotate_extrude() translate([d/2,h-chamfer]) polygon([ [epsilon,epsilon], [-chamfer-epsilon, chamfer+epsilon], [epsilon, chamfer]]); } else if(roundover_r > 0) { rotate_extrude() translate([d/2-roundover_r,h-roundover_r]) difference() { square(roundover_r+2*epsilon); circle(r=roundover_r); } } } if(fillet_r > 0) { circular_fillet(d=d, r=fillet_r, angle=fillet_angle); }
}