infty = 200; eps = 0.01; wall = 1.2; base_w = 4; thin_wall = 0.6; body_h = 4; module tbar() { translate([-infty/4, 0, 0]) { cube([infty/2, base_w, thin_wall]); cube([infty/2, thin_wall, body_h]); hull() { translate([0, 0.7*base_w, 0]) cube([infty/2, thin_wall, eps]); translate([0, 0, body_h-eps]) cube([infty/2, thin_wall, eps]); } } } module side_cube() { translate([-infty/2, 0, -eps]) cube([infty, infty, body_h+2*eps]); } module left_side(w, h) { for (i=[0:$children]) { translate([w/2, 0, 0]) rotate([0, 0, 90+atan(w/(2*h))]) translate([infty/5, 0, 0]) child(i); } } module triangle(w, h) { intersection() { union() { tbar(); left_side(w, h) tbar(); scale([-1, 1, 1]) left_side(w, h) tbar(); } side_cube(); left_side(w, h) side_cube(); scale([-1, 1, 1]) left_side(w, h) side_cube(); } } triangle(50, 80); translate([50, 0, 0]) triangle(40, 70); translate([85, 0, 0]) triangle(15, 50); translate([105, 0, 0]) triangle(15, 70);