infty = 300; eps = 0.01; wall = 1.5; t1_diam = 10; t2_diam = 12; cyl_h = 30; module cyl_clip(d, angle) { difference() { cylinder(r = d/2 + wall, h = cyl_h); translate([0, 0, -eps]) cylinder(r = d/2, h = cyl_h + 2*eps); intersection() { rotate([0, 0, 180 - angle/2]) translate([-infty/2, 0, -infty/2]) cube(infty); rotate([0, 0, angle/2]) translate([-infty/2, 0, -infty/2]) cube(infty); } } }; intersection() { union() { rotate([-30, 0, 0]) translate([-t1_diam/2-wall/2, 0, -cyl_h/2]) color("blue")cyl_clip(t1_diam, 280); rotate([-30, 0, 180]) translate([-t2_diam/2-wall/2, 0, -cyl_h/2]) color("red") cyl_clip(t2_diam, 280); }; translate([-infty/2, -infty/2, -7.5]) cube(infty); translate([-infty/2, -infty/2, 7.5-infty]) cube(infty); };