include use module connector_pole(units, depth, border_top=true, border_bottom=true, cable_funnel=true) { height = tray_height * units; overlap = bar_thickness + pole_overlap_shunt; difference() { // pole translate([0, 0, (border_bottom ? 0 : -overlap)]) cube([bar_thickness, pole_depth, height + (border_bottom ? 0 : overlap) + (border_top ? 0 : overlap)]); // screw holes for (i = [0:units]) for (s = [-1, 1]) translate([bar_thickness/2, depth, i * tray_height + s * bar_thickness/2]) rotate([90, 0, 0]) screw_hole(nut_depth = nut_height); // cable funnel if (cable_funnel) for (i = [0:units-1]) translate([0, 0, i * tray_height + bar_thickness]) cube([bar_thickness, pole_cable_funnel_width, tray_height - 2 * bar_thickness]); // receptors for lower/upper poles for (i = [[border_bottom, 0, 0], [border_top, depth/2, height]]) if (!i[0]) translate([0, i[1], i[2]-overlap]) cube([bar_thickness, depth/2, 2*overlap]); } } connector_pole(2, 20); translate([50,0,0]) connector_pole(2, 20, border_bottom=false); translate([100,0,0]) connector_pole(2, 20, border_top=false, border_bottom=false); translate([150,0,0]) connector_pole(2, 20, border_top=false);