// Cord toggle for securing grommet equipment 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); } // rounded ends translate([mainLength / 2, 0, 0]){ sphere(d = mainDiam); } } } } // flatten bottom for better print and interface --------------------------- color("red"){ translate([0, 0, -1 * (1 - flattenBottom) * mainDiam]){ cube( [2 * mainLength, mainDiam, mainDiam], center=true); } } //holes for cord color("green"){ for (dir = [-1 : 1]) mirror([dir, 0, 0]){ translate([cordHoleGap * cordDiam, 0, 0]){ cylinder( mainDiam * 1.1, d = cordDiam, center = true); } } } //relief for cord bend color("yellow"){ translate([0, 0, mainDiam / 2]){ rotate([0, 90, 0]){ cylinder(cordDiam * cordHoleGap * 2, d = cordDiam, center = true); } } } }