include use use use use use module back_connector_half( border_side = false, border_top = false, border_bottom = false ) difference() { connector_half(border_side, border_top, border_bottom); if (!border_side) translate([tray_width/2 - bar_thickness, 0, tray_height - bar_thickness/2]) rotate([-90, 0, 0]) screw_hole(nut_depth = 1.1 * nut_height); } module back_connector( border_left = false, border_right = false, border_top = false, border_bottom = false ) { difference() { connector(border_left, border_right, border_top, border_bottom) { mirror() back_connector_half(border_left, border_top, border_bottom); back_connector_half(border_right, border_top, border_bottom); } // screw holes for PCB screws for (h = [bar_thickness/2, tray_height - bar_thickness/2]) translate([0, 0, h]) rotate([-90, 0, 0]) screw_hole(nut_depth = 1.1 * nut_height); } // hooks to hold PCB during assembly if (!border_right) for (p = [[rail_width/2 + bar_thickness/2, bar_thickness/2], [tray_width/4, tray_height - bar_thickness/2]]) translate([p[0], bar_thickness, p[1]]) hook(diameter = 0.7 * rod_diameter, length_rest = backplane_thickness, length_slide = backplane_thickness); } back_connector(); echo("MODEL INFO: tray height = ", tray_height); echo("MODEL INFO: tray width = ", tray_width);