// Toggle // mainDiam=10; mainLength=20; cordDiam=3; cordHoleGap=1; flattenBottom=0.3; $fn = 40; difference(){ // cyl mirrored across yz color("blue"){ for (dir = [-1 : 1] ) mirror([dir, 0, 0]){ union(){ rotate([0,90,0]){ cylinder(mainLength / 2, d = mainDiam, center=false); } translate([mainLength / 2, 0, 0]){ sphere(d = mainDiam); } } } } // flatten bottom color("red"){ translate([0, 0, -1 * (1 - flattenBottom) * mainDiam]){ cube( [2 * mainLength, mainDiam, mainDiam], center=true); } } //holes color("green"){ for (dir = [-1 : 1]) mirror([dir, 0, 0]){ translate([cordHoleGap * cordDiam, 0, 0]){ cylinder( mainDiam * 1.1, d = cordDiam, center = true); } } } //relief color("yellow"){ translate([0, 0, mainDiam / 2]){ rotate([0, 90, 0]){ cylinder(cordDiam * cordHoleGap * 2, d = cordDiam, center = true); } } } }