include ; use ; use ; use ; use ; use ; use ; use ; use ; use ; use ; use ; //no_support = true; final_rotate = printed ? [-90,0,0] : [0,0,0]; final_translate = printed ? [0,0,side_length-pcb_delta] : [0,0,0]; //fast = true; module rack(num, no_front_door) { translate(final_translate) rotate(final_rotate) { translate ([0, -pcb_delta, 0]) { translate([-rack_inner_width / 2, 0, -power_supply_height]) { rotate([0,-90,0]) side_wall([], rj45_hole); translate([-side_clearance,0,0]) rotate([0,-90,0]) plain_side_wall(); } translate([0 ,pvc_thickness, -sides_margin[1]/2-pvc_thickness]) midplate(true); translate([0,pvc_thickness, node_clearance * nb_nodes]) top_bottom_wall(false, true); translate([0 ,pvc_thickness, -sides_margin[1]/2-pvc_thickness - power_supply_height]) top_bottom_wall(true, false); translate([0, side_length, -sides_margin[1] - power_supply_height]) rotate([90,0,0]) back_wall([rack_inner_width, nb_nodes * node_clearance], sides_margin, m3, pvc_thickness, power_supply_height, side_clearance); translate([rack_inner_width / 2 + pvc_thickness, 0, -power_supply_height]) { rotate([0,-90,0]) side_wall(usb_hole, []); translate([side_clearance,0,0]) rotate([0,-90,0]) plain_side_wall(); } } if(!no_front_door) { translate([0,-pcb_delta + pvc_thickness, - power_supply_height - sides_margin[0] - pvc_thickness]) rotate([90,0,0]) front_panel(num); } translate([0, -pcb_delta + pvc_thickness * 2, -sides_margin[0] + safe_padding]) rotate([-90,0,0]) power_plate(); translate([-side_clearance - rack_inner_width / 2, -pcb_delta + pvc_thickness, - sides_margin[0] - pvc_thickness * 3]) switch_banch(); if(!no_support) { translate([- rack_inner_width / 2 - pvc_thickness-2, 5, 90]) rotate([-90, 0, 0]) rotate([0, -90, 0]) switch(); translate([-pvc_thickness/2- rack_inner_width / 2, 37-pcb_delta, -39]) charger(); } node_num_offset = 0; for(p = [1:nb_nodes]) { z = (p-1)*node_clearance; translate([0, 0 , z]) { if (!no_support) { if (!fast) { pcb_support_odroid(p + node_num_offset, pcb_hole_spacing, pcb_support_x_margin, pcb_support_y_margin, pvc_thickness, m3); } else { pcb_support(p + node_num_offset, pcb_hole_spacing, pcb_support_x_margin, pcb_support_y_margin, pvc_thickness, m3); } } } } } if(! fast && !one_piece) { translate ([0, -pcb_delta, 0]) { translate([-rack_inner_width / 2 - side_clearance, 0, -power_supply_height]) { /// screws translate([- pvc_thickness, side_length/2, 0]) { translate([0,0,-sides_margin[1]/2 - pvc_thickness/2]) { translate([0, - side_length/6]) rotate([-90,0,0]) screw_and_nut_m3(m3_length, pvc_thickness); translate([0, side_length/6]) rotate([-90,0,0]) screw_and_nut_m3(m3_length, pvc_thickness); } translate([0,0,node_clearance * nb_nodes + pvc_thickness/2+power_supply_height]) { translate([0, - side_length/6]) rotate([-90,0,0]) screw_and_nut_m3(m3_length, pvc_thickness); translate([0, side_length/6]) rotate([-90,0,0]) screw_and_nut_m3(m3_length, pvc_thickness); } translate([side_clearance,0,-sides_margin[1]/2 - pvc_thickness/2 + power_supply_height]) { translate([0, - side_length/6]) rotate([-90,0,0]) screw_and_nut_m3(m3_length, pvc_thickness); translate([0, side_length/6]) rotate([-90,0,0]) screw_and_nut_m3(m3_length, pvc_thickness); } } } /// screws translate([0, side_length]) { translate([0, 0, -sides_margin[1]/2 - pvc_thickness/2 - power_supply_height]) { translate([- rack_inner_width/5, 0]) rotate([0,0,-90]) screw_and_nut_m3(m3_length, pvc_thickness); translate([rack_inner_width/5, 0]) rotate([0,0,-90]) screw_and_nut_m3(m3_length, pvc_thickness); } translate([0, 0, node_clearance * nb_nodes + pvc_thickness/2]) { translate([- rack_inner_width/5, 0]) rotate([0,0,-90]) screw_and_nut_m3(m3_length, pvc_thickness); translate([rack_inner_width/5, 0]) rotate([0,0,-90]) screw_and_nut_m3(m3_length, pvc_thickness); } } translate([rack_inner_width/2+pvc_thickness/2, side_length/2, nb_nodes * node_clearance + pvc_thickness]) { translate([0, - side_length/6, 0]) rotate ([0,90,0]) screw_and_nut_m3(m3_length, pvc_thickness); translate([0, side_length/6, 0]) rotate ([0,90,0]) screw_and_nut_m3(m3_length, pvc_thickness); } translate([-rack_inner_width/2-pvc_thickness/2, side_length/2, nb_nodes * node_clearance + pvc_thickness]) { translate([0, - side_length/6, 0]) rotate ([0,90,0]) screw_and_nut_m3(m3_length, pvc_thickness); translate([0, side_length/6, 0]) rotate ([0,90,0]) screw_and_nut_m3(m3_length, pvc_thickness); } translate([-rack_inner_width/2-pvc_thickness/2, side_length/2, -power_supply_height - sides_margin[0] - pvc_thickness]) { translate([0, - side_length/6, 0]) rotate ([0,-90,0]) screw_and_nut_m3(m3_length, pvc_thickness); translate([0, side_length/6, 0]) rotate ([0,-90,0]) screw_and_nut_m3(m3_length, pvc_thickness); } translate([rack_inner_width/2 + pvc_thickness/2, side_length/2, -power_supply_height - sides_margin[0] - pvc_thickness]) { translate([0, - side_length/6, 0]) rotate ([0,-90,0]) screw_and_nut_m3(m3_length, pvc_thickness); translate([0, side_length/6, 0]) rotate ([0,-90,0]) screw_and_nut_m3(m3_length, pvc_thickness); } translate([0, side_length]) { translate([0, 0, -sides_margin[1]/2 - pvc_thickness/2 - power_supply_height]) { translate([- rack_inner_width - pvc_thickness/2 + side_clearance/2, 0]) rotate([0,0,-90]) screw_and_nut_m3(m3_length, pvc_thickness); translate([rack_inner_width + pvc_thickness/2 - side_clearance/2, 0]) rotate([0,0,-90]) screw_and_nut_m3(m3_length, pvc_thickness); } translate([0, 0, node_clearance * nb_nodes + pvc_thickness/2]) { translate([- rack_inner_width - pvc_thickness/2 + side_clearance/2, 0]) rotate([0,0,-90]) screw_and_nut_m3(m3_length, pvc_thickness); translate([rack_inner_width + pvc_thickness/2 - side_clearance/2, 0]) rotate([0,0,-90]) screw_and_nut_m3(m3_length, pvc_thickness); } } translate([rack_inner_width / 2 + pvc_thickness, 0, -power_supply_height]) { /// screws translate([side_clearance, side_length/2, 0]) { translate([-side_clearance, 0, -sides_margin[1]/2 - pvc_thickness/2+power_supply_height]) { translate([0, - side_length/6, 0]) rotate([0,0,180]) screw_and_nut_m3(m3_length, pvc_thickness); translate([0, side_length/6, 0]) rotate([0,0,180]) screw_and_nut_m3(m3_length, pvc_thickness); } translate([0,0,-sides_margin[1]/2 - pvc_thickness/2]) { translate([0, - side_length/6, 0]) rotate([0,0,180]) screw_and_nut_m3(m3_length, pvc_thickness); translate([0, side_length/6, 0]) rotate([0,0,180]) screw_and_nut_m3(m3_length, pvc_thickness); } translate([0, 0, node_clearance * nb_nodes + pvc_thickness/2+power_supply_height]) { translate([0, - side_length/6, 0]) rotate([0,0,180]) screw_and_nut_m3(m3_length, pvc_thickness); translate([0, side_length/6, 0]) rotate([0,0,180]) screw_and_nut_m3(m3_length, pvc_thickness); } } } } } } total_height=sides_margin[0]+sides_margin[1] + nb_nodes*node_clearance + power_supply_height; rack(2, true); translate([0,0, total_height + safe_padding]) rack(1); color("black") translate([0,(side_length - pcb_delta)/ 2 , -power_supply_height-sides_margin[0]-pvc_thickness*2-feet_size]) cube([300,300,1], center=true);