// -*- C -*- cable_maxdia = 12; cable_mindia = 6; wallmin = 1; wall = 2; delta_ellipse = 0.45; // calculated outerdia = cable_maxdia / cos(30) + wall*2; delta_shift = 1 - delta_ellipse; delta_shift_gap = (cable_maxdia-cable_mindia) * delta_shift; module CrossSection(plus=0) { difference(){ for (dx = [-plus, 0, plus]) translate([dx, 0]) circle(r= outerdia/2, $fn=6); scale([cable_maxdia, cable_maxdia * delta_shift + cable_mindia * delta_ellipse]) circle(r= sqrt(0.5) * delta_shift + 0.5 * delta_ellipse, $fn=4); square(center=true, [40, delta_shift_gap]); } } module CrossSectionDemo(){ ////toplevel color("blue"){ translate([0, delta_shift_gap/2, 0]){ difference(){ circle(r = cable_maxdia/2, $fn=20); circle(r = cable_mindia/2, $fn=20); } } } linear_extrude(height=20) CrossSection(0); color("red") linear_extrude(height=1) CrossSection(2); } CrossSectionDemo();