--- /dev/null
+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, 260);
+ rotate([30, 0, 180])
+ translate([-t2_diam/2-wall/2, 0, -cyl_h/2])
+ color("red") cyl_clip(t2_diam, 240);
+ };
+
+ translate([-infty/2, -infty/2, -7.5]) cube(infty);
+ translate([-infty/2, -infty/2, 7.5-infty]) cube(infty);
+};
+