From 8e892577592e3f6a7bc7052b047183eb3866ad46 Mon Sep 17 00:00:00 2001 From: Edward Kisiel Date: Sun, 7 Apr 2024 15:20:37 -0400 Subject: [PATCH] rewrote tray side attachment routine based on SBC standoff location --- mod/case_bottom.scad | 186 +++++++++++++++++++++++++----------------- mod/case_top.scad | 74 +++++++++++------ sbc_case_builder.scad | 12 +-- 3 files changed, 167 insertions(+), 105 deletions(-) diff --git a/mod/case_bottom.scad b/mod/case_bottom.scad index 380dd83..1cb18f3 100644 --- a/mod/case_bottom.scad +++ b/mod/case_bottom.scad @@ -79,35 +79,58 @@ module case_bottom(case_design) { vertical=[corner_fillet-1,corner_fillet-1,corner_fillet-1,corner_fillet-1], top=[0,0,0,0],bottom=[2,2,2,2], $fn=90); } - // right side nut - translate([width-wallthick-gap-wallthick-4+adj,wallthick+gap+10, - floorthick+3.4]) rotate([90,0,90]) - cylinder(d=10, h=4, $fn=6); - // left side nut - translate([-adj-gap,wallthick+gap+10,floorthick+3.4]) - rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); - if(depth >= 75 && sbc_model != "visionfive2" && sbc_model != "visionfive2q" && - sbc_model != "rock5b" && sbc_model != "rock5bq" && sbc_model != "rock5b-v1.3") { - translate([width-wallthick-gap-wallthick-4+adj,depth-wallthick-gap-10, - floorthick+3.4]) rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); - translate([-adj-gap,depth-wallthick-gap-10,floorthick+3.4]) - rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); - } - else { - if(sbc_model == "visionfive2" || sbc_model == "visionfive2q" || sbc_model == "rock5b" || - sbc_model == "rock5bq" || sbc_model == "rock5b-v1.3") { - translate([width-wallthick-gap-wallthick-4+adj,wallthick+gap+58, - floorthick+3.4]) rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); - translate([-adj-gap,wallthick+gap+58,floorthick+3.4]) - rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); + // case nut placement + for (i=[1:11:len(sbc_data[s[0]])-2]) { + class = sbc_data[s[0]][i+1]; + type = sbc_data[s[0]][i+2]; + id = sbc_data[s[0]][i+3]; + pcbhole_x = sbc_data[s[0]][i+4]+pcb_loc_x; + pcbhole_y = sbc_data[s[0]][i+5]+pcb_loc_y; + pcbhole_z = sbc_data[s[0]][i+6]; + pcbhole_size = sbc_data[s[0]][i+9][0]; + pcbhole_pos = sbc_data[s[0]][i+10][4]; + + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_rear") { + if(pcbhole_y <= 10) { + translate([-adj-gap,wallthick+gap+10,floorthick+3.4]) rotate([90,0,90]) + cylinder(d=10, h=4, $fn=6); + } + else { + translate([-adj-gap,wallthick+gap+2,floorthick+3.4]) rotate([90,0,90]) + cylinder(d=10, h=4, $fn=6); + } } - else { - translate([width-wallthick-gap-wallthick-4+adj,wallthick+gap+40, - floorthick+3.4]) rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); - translate([-adj-gap,wallthick+gap+40,floorthick+3.4]) - rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_front") { + if(pcbhole_y >= pcb_depth-10) { + translate([-adj-gap,wallthick-gap+pcb_depth-14,floorthick+3.4]) + rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); + } + else { + translate([-adj-gap,wallthick+gap+pcb_depth-8,floorthick+3.4]) + rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); + } } - } + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_rear") { + if(pcbhole_y <= 10) { + translate([width-wallthick-gap-wallthick-4+adj,wallthick+gap+10,floorthick+3.4]) + rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); + } + else { + translate([width-wallthick-gap-wallthick-4+adj,wallthick+gap+2,floorthick+3.4]) + rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); + } + } + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_front") { + if(pcbhole_y >= pcb_depth-10) { + translate([width-wallthick-gap-wallthick-4+adj,wallthick-gap+pcb_depth-14,floorthick+3.4]) + rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); + } + else { + translate([width-wallthick-gap-wallthick-4+adj,wallthick+gap+pcb_depth-8,floorthick+3.4]) + rotate([90,0,90]) cylinder(d=10, h=4, $fn=6); + } + } + } // front panel if(case_design == "tray_vu5" || case_design == "tray_vu7" || case_design == "tray_sides") { @@ -278,56 +301,73 @@ module case_bottom(case_design) { } } } - // side attachment holes + // tray side attachment holes if(case_design == "tray" || case_design == "tray_vu5" || case_design == "tray_vu7" || case_design == "tray_sides") { - // right side bottom attachment holes - translate([width-2*(wallthick+gap)-sidethick-adj,wallthick+gap+10, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - // right side bottom nut inset - translate([width-3.5-(2*wallthick)-gap-.6,wallthick+gap+10, - floorthick+3.4]) rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); - // left side bottom attachment holes - translate([-wallthick-gap-adj,wallthick+gap+10,floorthick+3.4]) rotate([0,90,0]) - cylinder(d=3, h=10+sidethick+(2*adj)); - // left side bottom nut inset - translate([-gap+.6,wallthick+gap+10,floorthick+3.4]) - rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); - if(depth >= 75 && sbc_model != "visionfive2" && sbc_model != "visionfive2q" && - sbc_model != "rock5b" && sbc_model != "rock5bq" && sbc_model != "rock5b-v1.3") { - translate([width-2*(wallthick+gap)-sidethick-adj,depth-wallthick-gap-10, - floorthick+3.4]) rotate([0,90,0]) - cylinder(d=3, h=10+sidethick+(2*adj)); - translate([-wallthick-gap-adj-6,depth-wallthick-gap-10, - floorthick+3.4]) rotate([0,90,0]) - cylinder(d=3, h=10+sidethick+(2*adj)); - translate([width-3.5-(2*wallthick)-gap-.6,depth-wallthick-gap-10, - floorthick+3.4])rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); - translate([-gap+.6,depth-wallthick-gap-10,floorthick+3.4]) - rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); - } - else { - if(sbc_model == "visionfive2" || sbc_model == "visionfive2q" || sbc_model == "rock5b" || - sbc_model == "rock5bq" || sbc_model == "rock5b-v1.3") { - translate([width-3*(wallthick+gap)-adj,wallthick+gap+58, - floorthick+3.4]) rotate([0,90,0]) + for (i=[1:11:len(sbc_data[s[0]])-2]) { + class = sbc_data[s[0]][i+1]; + type = sbc_data[s[0]][i+2]; + id = sbc_data[s[0]][i+3]; + pcbhole_x = sbc_data[s[0]][i+4]+pcb_loc_x; + pcbhole_y = sbc_data[s[0]][i+5]+pcb_loc_y; + pcbhole_z = sbc_data[s[0]][i+6]; + pcbhole_size = sbc_data[s[0]][i+9][0]; + pcbhole_pos = sbc_data[s[0]][i+10][4]; + + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_rear") { + if(pcbhole_y <= 10) { + translate([-wallthick-gap-adj-6,wallthick+gap+10,floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - translate([-wallthick-gap-adj-6,wallthick+gap+58, - floorthick+3.4]) rotate([0,90,0]) + translate([-gap+.6,wallthick+gap+10,floorthick+3.4]) rotate([90,0,90]) + cylinder(d=6.6, h=3.5, $fn=6); + } + else { + translate([-wallthick-gap-adj-6,wallthick+gap+2,floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - translate([width-3.5-(2*wallthick)-gap-.6,wallthick+gap+58, - floorthick+3.4])rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); - translate([-gap+.6,wallthick+gap+58,floorthick+3.4]) - rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); + translate([-gap+.6,wallthick+gap+2,floorthick+3.4]) rotate([90,0,90]) + cylinder(d=6.6, h=3.5, $fn=6); + } } - else { - translate([width-3*(wallthick+gap)-adj,wallthick+gap+40, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - translate([-wallthick-gap-adj-6,wallthick+gap+40, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - translate([width-3.5-(2*wallthick)-gap-.6,wallthick+gap+40, - floorthick+3.4])rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); - translate([-gap+.6,wallthick+gap+40,floorthick+3.4]) - rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_front") { + if(pcbhole_y >= pcb_depth-10) { + translate([-wallthick-gap-adj-6,wallthick-gap+pcb_depth-14, + floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + translate([-gap+.6,wallthick-gap+pcb_depth-14,floorthick+3.4]) + rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); + } + else { + translate([-wallthick-gap-adj-6,wallthick+gap+pcb_depth-8, + floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + translate([-gap+.6,wallthick+gap+pcb_depth-8,floorthick+3.4]) + rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); + } + } + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_rear") { + if(pcbhole_y <= 10) { + translate([width-2*(wallthick+gap)-sidethick-adj,wallthick+gap+10,floorthick+3.4]) + rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + translate([width-3.5-(2*wallthick)-gap-.6,wallthick+gap+10,floorthick+3.4]) + rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); + } + else { + translate([width-2*(wallthick+gap)-sidethick-adj,wallthick+gap+2,floorthick+3.4]) + rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + translate([width-3.5-(2*wallthick)-gap-.6,wallthick+gap+2,floorthick+3.4]) + rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); + } + } + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_front") { + if(pcbhole_y >= pcb_depth-10) { + translate([width-3*(wallthick+gap)-adj,wallthick-gap+pcb_depth-14, + floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + translate([width-3.5-(2*wallthick)-gap-.6,wallthick-gap+pcb_depth-14, + floorthick+3.4])rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); + } + else { + translate([width-3*(wallthick+gap)-adj,wallthick-gap+pcb_depth-8, + floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + translate([width-3.5-(2*wallthick)-gap-.6,wallthick-gap+pcb_depth-8, + floorthick+3.4])rotate([90,0,90]) cylinder(d=6.6, h=3.5, $fn=6); + } } } } diff --git a/mod/case_top.scad b/mod/case_top.scad index 3776aed..9517c31 100644 --- a/mod/case_top.scad +++ b/mod/case_top.scad @@ -92,32 +92,55 @@ module case_top(case_design) { cube_fillet_inside([width+1,depth+(wallthick*2),case_z], vertical=[corner_fillet-1,corner_fillet-1,corner_fillet-1,corner_fillet-1], top=[0,0,0,0],bottom=[0,0,0,0], $fn=90); - // right side bottom attachment hole - translate([width-2*(wallthick+gap)-sidethick-adj,wallthick+gap+10, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - // left side bottom attachment hole - translate([-2*(wallthick+gap)-sidethick-adj,wallthick+gap+10, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - if(depth >= 75 && sbc_model != "visionfive2" && sbc_model != "visionfive2q" && - sbc_model != "rock5b" && sbc_model != "rock5bq" && sbc_model != "rock5b-v1.3") { - translate([width-2*(wallthick+gap)-sidethick-adj,depth-wallthick-gap-10, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - translate([-wallthick-gap-adj-6,depth-wallthick-gap-10, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - } - else { - if(sbc_model == "visionfive2" || sbc_model == "visionfive2q" || sbc_model == "rock5b" || - sbc_model == "rock5bq" || sbc_model == "rock5b-v1.3") { - translate([width-2*(wallthick+gap)-sidethick-adj,wallthick+gap+58, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - translate([-wallthick-gap-adj-6,wallthick+gap+58, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + for (i=[1:11:len(sbc_data[s[0]])-2]) { + class = sbc_data[s[0]][i+1]; + type = sbc_data[s[0]][i+2]; + id = sbc_data[s[0]][i+3]; + pcbhole_x = sbc_data[s[0]][i+4]+pcb_loc_x; + pcbhole_y = sbc_data[s[0]][i+5]+pcb_loc_y; + pcbhole_z = sbc_data[s[0]][i+6]; + pcbhole_size = sbc_data[s[0]][i+9][0]; + pcbhole_pos = sbc_data[s[0]][i+10][4]; + + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_rear") { + if(pcbhole_y <= 10) { + translate([-wallthick-gap-adj-6,wallthick+gap+10,floorthick+3.4]) rotate([0,90,0]) + cylinder(d=3, h=10+sidethick+(2*adj)); + } + else { + translate([-wallthick-gap-adj-6,wallthick+gap+2,floorthick+3.4]) rotate([0,90,0]) + cylinder(d=3, h=10+sidethick+(2*adj)); + } } - else { - translate([width-2*(wallthick+gap)-sidethick-adj,wallthick+gap+40, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); - translate([-wallthick-gap-adj-6,wallthick+gap+40, - floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_front") { + if(pcbhole_y >= pcb_depth-10) { + translate([-wallthick-gap-adj-6,wallthick-gap+pcb_depth-14, + floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + } + else { + translate([-wallthick-gap-adj-6,wallthick+gap+pcb_depth-8, + floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + } + } + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_rear") { + if(pcbhole_y <= 10) { + translate([width-2*(wallthick+gap)-sidethick-adj,wallthick+gap+10,floorthick+3.4]) + rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + } + else { + translate([width-2*(wallthick+gap)-sidethick-adj,wallthick+gap+2,floorthick+3.4]) + rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + } + } + if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_front") { + if(pcbhole_y >= pcb_depth-10) { + translate([width-3*(wallthick+gap)-adj,wallthick-gap+pcb_depth-14, + floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + } + else { + translate([width-3*(wallthick+gap)-adj,wallthick-gap+pcb_depth-8, + floorthick+3.4]) rotate([0,90,0]) cylinder(d=3, h=10+sidethick+(2*adj)); + } } } } @@ -351,7 +374,6 @@ module case_top(case_design) { } } // pcb standoffs - if(sbc_top_standoffs == true) { for (i=[1:11:len(sbc_data[s[0]])-2]) { class = sbc_data[s[0]][i+1]; diff --git a/sbc_case_builder.scad b/sbc_case_builder.scad index 12f3cc7..c81098a 100644 --- a/sbc_case_builder.scad +++ b/sbc_case_builder.scad @@ -426,9 +426,9 @@ if (view == "platter") { add(type, loc_x, loc_y, loc_z, face, rotation, [size_x, size_y, size_z], [data_1, data_2, data_3, data_4], mask); } if (class == "platter" && type == "button_top") { - translate([loc_x,loc_y,loc_z+1.25]) rotate([-90,0,0]) button_plunger(data_3, size_x, size_z); - translate([loc_x-20,loc_y-10,loc_z+3]) rotate([0,0,0]) button_top(data_3, size_x, size_z); - translate([loc_x-20,loc_y-20,loc_z]) rotate([0,0,0]) button_clip(data_3); + translate([loc_x,loc_y,loc_z+1.25]) rotate([-90,0,0]) button_plunger(data_1, size_x, size_z); + translate([loc_x-20,loc_y-10,loc_z+3]) rotate([0,0,0]) button_top(data_1, size_x, size_z); + translate([loc_x-20,loc_y-20,loc_z]) rotate([0,0,0]) button_clip(data_1); } if (class == "platter" && type == "h3_port_extender_holder") { translate([loc_x,loc_y,loc_z]) rotate([0,0,0]) h3_port_extender_holder("bottom"); @@ -862,9 +862,9 @@ if (view == "part") { add(type, loc_x, loc_y, loc_z, face, rotation, [size_x, size_y, size_z], [data_1, data_2, data_3, data_4], mask); } if (class == "platter" && type == "button_top") { - translate([loc_x,loc_y,loc_z+1.25]) rotate([-90,0,0]) button_plunger(data_3, size_x, size_z); - translate([loc_x-20,loc_y-10,loc_z+3]) rotate([0,0,0]) button_top(data_3, size_x, size_z); - translate([loc_x-20,loc_y-20,loc_z]) rotate([0,0,0]) button_clip(data_3); + translate([loc_x,loc_y,loc_z+1.25]) rotate([-90,0,0]) button_plunger(data_1, size_x, size_z); + translate([loc_x-20,loc_y-10,loc_z+3]) rotate([0,0,0]) button_top(data_1, size_x, size_z); + translate([loc_x-20,loc_y-20,loc_z]) rotate([0,0,0]) button_clip(data_1); } if (class == "platter" && type == "h3_port_extender_holder") { translate([loc_x,loc_y,loc_z]) rotate([0,0,0]) h3_port_extender_holder("bottom");