added panel tabs and cutouts for case assembly

This commit is contained in:
Edward Kisiel
2025-04-10 21:59:03 -04:00
parent 2e797dd1fb
commit a999585197
5 changed files with 139 additions and 113 deletions

View File

@@ -64,16 +64,16 @@ module case_bottom(case_design) {
}
if(case_design == "panel_nas") {
union() {
translate([-gap,-gap,0])
cube([width-(2*wallthick)+(101.6-width+(2*wallthick)),depth-(3*wallthick),floorthick]);
translate([(width*(1/5))-8-(wallthick+gap),depth-(3*wallthick)-gap-adj,0])
cube([8,wallthick+2*adj,floorthick]);
translate([width-(width*(1/5))-(wallthick+gap),depth-(3*wallthick)-gap-adj,0])
cube([8,wallthick+2*adj,floorthick]);
translate([(width*(1/5))-8-(wallthick+gap),-wallthick-gap+adj,0])
cube([8,wallthick+2*adj,floorthick]);
translate([width-(width*(1/5))-(wallthick+gap),-wallthick-gap+adj,0])
cube([8,wallthick+2*adj,floorthick]);
translate([-gap,-2*wallthick,0])
cube([width-2*(gap+sidethick),depth-wallthick,wallthick]);
#translate([-gap-sidethick+(2*adj),depth-(3*wallthick)-gap-adj-20,0])
cube([sidethick+(2*adj),10,floorthick]);
#translate([width-(3*sidethick)-adj,depth-(3*wallthick)-gap-adj-20,0])
cube([sidethick+2*adj,10,floorthick]);
#translate([-gap-sidethick+(2*adj),40-wallthick-gap+adj,0])
cube([sidethick+2*adj,10,floorthick]);
#translate([width-(3*sidethick)-adj,40-wallthick-gap+adj,0])
cube([sidethick+2*adj,10,floorthick]);
}
}
if(case_design == "stacked") {

View File

@@ -132,39 +132,21 @@ module case_side(case_design, side) {
if(side == "rear") {
difference() {
union() {
translate([-gap,-wallthick-gap,floorthick])
cube([width-2*wallthick+(101.6-width+(2*wallthick)),wallthick,case_z-2*floorthick]);
// right hook
difference() {
translate([width-(2*wallthick)-gap-adj+(101.6-width+(2*wallthick)),-wallthick-gap,
((case_z)/2)-4])
cube([(2*wallthick)+.5,wallthick,8]);
translate([width-(2*wallthick)-gap-adj+(101.6-width+(2*wallthick)),-wallthick-gap-adj,
((case_z)/2)-4-adj])
cube([wallthick+.25,wallthick+(2*adj),4.25]);
}
// left hook
difference() {
translate([-(2*wallthick)-gap-adj-.25,-wallthick-gap,
((case_z)/2)-4])
cube([(2*wallthick)+.5,wallthick,8]);
translate([-wallthick-gap-adj-.25,-wallthick-gap-adj,
((case_z)/2)-4-adj])
cube([wallthick+.25,wallthick+(2*adj),4.25]);
}
translate([-gap,-(2*wallthick),floorthick])
cube([width-2*sidethick,wallthick,case_z-2*wallthick]);
// bottom right tab
translate([width-(3*sidethick)-adj,-(2*wallthick),20])
cube([sidethick+(2*adj),wallthick,10]);
// top right tab
translate([width-(3*sidethick)-adj,-(2*wallthick),case_z-30])
cube([sidethick+(2*adj),wallthick,10]);
// bottom left tab
translate([-sidethick-gap-adj,-(2*wallthick),20])
cube([sidethick+(2*adj),wallthick,10]);
// top left tab
translate([-sidethick-gap-adj,-(2*wallthick),case_z-30])
cube([sidethick+(2*adj),wallthick,10]);
}
// top slots
translate([(width*(1/5))-8.25-(wallthick+gap),-wallthick-gap-adj,
case_z-floorthick-.25])
cube([8.5,wallthick+2*adj,floorthick+.5]);
translate([width-(width*(1/5))-(wallthick+gap)-.25,-wallthick-gap-adj,
case_z-floorthick-.25])
cube([8.5,wallthick+2*adj,floorthick+.5]);
// bottom slots
translate([(width*(1/5))-8.25-(wallthick+gap),-wallthick-gap-adj,-.25])
cube([8.5,wallthick+2*adj,floorthick+.5]);
translate([width-(width*(1/5))-(wallthick+gap)-.25,-wallthick-gap-adj,-.25])
cube([8.5,wallthick+2*adj,floorthick+.5]);
if(rear_fan == 1 || rear_fan == 2) {
translate([-1+(101.6-rear_fan_size)/2,-1,bottom_height+pcb_tmaxz+rear_fan_position])
rotate([90,0,0]) fan_mask(rear_fan_size, wallthick+2, rear_cooling);
@@ -178,75 +160,119 @@ module case_side(case_design, side) {
if(side == "front") {
difference() {
union() {
translate([-gap,depth-4*(wallthick)-gap,floorthick])
cube([width-2*wallthick+(101.6-width+(2*wallthick)),wallthick,case_z-2*wallthick]);
// right hook
difference() {
translate([width-(2*wallthick)-gap-adj+(101.6-width+(2*wallthick)),depth-3*(wallthick)-gap-adj,
((case_z)/2)-4])
cube([(2*wallthick)+.5,wallthick,8]);
translate([width-(2*wallthick)-gap-adj+(101.6-width+(2*wallthick)),
depth-3*(wallthick)-adj-gap-adj,((case_z)/2)-4-adj])
cube([wallthick+.25,wallthick+(2*adj),4.25]);
}
// left hook
difference() {
translate([-(2*wallthick)-gap-adj-.25,depth-3*(wallthick)-gap-adj,(
(case_z)/2)-4])
cube([(2*wallthick)+.5,wallthick,8]);
translate([-wallthick-gap-adj-.25,depth-3*(wallthick)-adj-gap-adj,
((case_z)/2)-4-adj])
cube([wallthick+.25,wallthick+(2*adj),4.25]);
}
translate([-gap,depth-(4*wallthick),floorthick])
cube([width-2*wallthick+(101.6-width+(2*wallthick)),wallthick,case_z-3*wallthick]);
// bottom right tab
translate([width-(3*sidethick)-adj,depth-(4*wallthick),20])
cube([sidethick+(2*adj),wallthick,10]);
// top right tab
translate([width-(3*sidethick)-adj,depth-(4*wallthick),case_z-30])
cube([sidethick+(2*adj),wallthick,10]);
// bottom left tab
translate([-sidethick-gap-adj,depth-(4*wallthick),20])
cube([sidethick+(2*adj),wallthick,10]);
// top left tab
translate([-sidethick-gap-adj,depth-(4*wallthick),case_z-30])
cube([sidethick+(2*adj),wallthick,10]);
}
// top slots
translate([(width*(1/5))-8.25-(wallthick+gap),depth-2*wallthick-gap-adj,
case_z-floorthick-.25])
cube([8.5,wallthick+2*adj,floorthick+.5]);
translate([width-(width*(1/5))-(wallthick+gap)-.25,depth-2*wallthick-gap-adj,
case_z-floorthick-.25])
cube([8.5,wallthick+2*adj,floorthick+.5]);
// bottom slots
translate([(width*(1/5))-8.25-(wallthick+gap),depth-2*wallthick-gap-adj,-.25])
cube([8.5,wallthick+2*adj,floorthick+.5]);
translate([width-(width*(1/5))-(wallthick+gap)-.25,
depth-2*wallthick-gap-adj,-.25]) cube([8.5,wallthick+2*adj,floorthick+.5]);
translate([-gap+8,depth-4*(wallthick)-gap,case_z-8]) rotate([-90,0,0])
vent_hex((width)/3.5,(case_z-8)/6,wallthick+4,5,1.5,"horizontal");
// hex vent
translate([-gap+3,depth-3*(wallthick)+gap,5])
vent_hex(width/3.85,(case_z-6)/6,wallthick+4,5,1.5,"vertical");
}
}
if(side == "right") {
difference() {
// translate([width-(2*wallthick)-gap+(101.6-width+(2*wallthick)),-(3*wallthick)-gap,-wallthick])
// cube([wallthick,depth+2*wallthick,case_z+(2*wallthick)]);
translate([width-gap+(101.6-width+sidethick),-(3*wallthick)-gap,-wallthick])
translate([width-2*sidethick,-(3*wallthick)-gap,-wallthick])
rotate([0,-90,0]) slab([case_z+(2*wallthick),depth+2*wallthick,sidethick],corner_fillet);
translate([width-(2*wallthick)-gap-adj+(101.6-width+(2*wallthick)),-wallthick-gap-.25,
((case_z)/2)]) cube([wallthick+2*adj,wallthick+.5,8.5]);
translate([width-(2*wallthick)-gap-adj+(101.6-width+(2*wallthick)),depth-2*(wallthick)-gap-.25,
((case_z)/2)])
cube([wallthick+2*adj,wallthick+.5,8.5]);
// rear edge top tab openings
translate([width-adj-(3*sidethick),-2*wallthick,case_z-30])
cube([sidethick+2*adj,wallthick+tol,20]);
translate([width-adj-(3*sidethick),-(4*wallthick),case_z-20-tol])
cube([sidethick+(2*adj),2*wallthick,10+tol]);
// rear edge bottom tab openings
translate([width-adj-(3*sidethick),-2*wallthick,20])
cube([sidethick+2*adj,wallthick+tol,20]);
translate([width-adj-(3*sidethick),-(4*wallthick),30-tol])
cube([sidethick+(2*adj),2*wallthick,10+tol]);
// front edge top tab openings
translate([width-(3*sidethick)-adj,depth-(4*wallthick),case_z-30])
cube([sidethick+(2*adj),wallthick,20]);
translate([width-(3*sidethick),depth-(4*wallthick),case_z-20-tol])
cube([sidethick+(2*adj)-adj,3*wallthick,10+tol]);
// front edge bottom tab openings
translate([width-(3*sidethick)-adj,depth-(4*wallthick),20])
cube([sidethick+(2*adj),wallthick,20]);
translate([width-(3*sidethick),depth-(4*wallthick),30-tol])
cube([sidethick+(2*adj)-adj,3*wallthick,10+tol]);
// hd holes for bays
for( i=[0:1:hd_bays-1]) {
translate([-gap,-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
rotate([0,0,0]) hd_holes(3.5, "portrait", "both", sidethick+2);
}
// top edge front tab openings
translate([width-(3*sidethick)-adj,depth-(3*wallthick)-gap-adj-30,
case_z-(2*floorthick)])
cube([sidethick+(2*adj),20,floorthick+tol]);
translate([width-(3*sidethick)-adj,depth-(3*wallthick)-gap-adj-30,
case_z-(2*floorthick)])
cube([sidethick+2*adj,10+tol,(3*floorthick)+adj]);
// top edge rear tab openings
translate([width-(3*sidethick)-adj,40-wallthick-gap+adj,
case_z-(2*floorthick)])
cube([sidethick+(2*adj),10,floorthick+tol]);
translate([width-(3*sidethick)-adj,30-wallthick-gap+adj,
case_z-(2*floorthick)])
cube([sidethick+(2*adj),10+tol,(3*floorthick)+adj]);
}
}
if(side == "left") {
difference() {
// translate([-sidethick-gap,-(2*wallthick)-gap,-wallthick])
// cube([wallthick,depth+2*wallthick,case_z+(2*wallthick)]);
translate([-gap,-(3*wallthick)-gap,-wallthick])
rotate([0,-90,0]) slab([case_z+(2*wallthick),depth+2*wallthick,sidethick],corner_fillet);
translate([-wallthick-gap-adj,-wallthick-gap-.25,((case_z)/2)])
cube([wallthick+2*adj,wallthick+.5,8.5]);
translate([-wallthick-gap-adj,depth-2*(wallthick)-gap-.25,
((case_z)/2)])
cube([wallthick+2*adj,wallthick+.5,8.5]);
rotate([0,-90,0]) slab([case_z+(2*wallthick),depth+(2*wallthick),sidethick],corner_fillet);
// rear edge top tab openings
translate([-sidethick-gap-adj,-2*wallthick,case_z-30])
cube([sidethick+2*adj,wallthick+tol,20]);
translate([-sidethick-gap-adj,-(4*wallthick),case_z-20-tol])
cube([sidethick+(2*adj),2*wallthick,10+tol]);
// rear edge botom tab openings
translate([-sidethick-gap-adj,-2*wallthick,20])
cube([sidethick+2*adj,wallthick+tol,20]);
translate([-sidethick-gap-adj,-(4*wallthick),30-tol])
cube([sidethick+(2*adj),2*wallthick,10+tol]);
// front edge top tab openings
translate([-sidethick-gap-adj,depth-(4*wallthick),case_z-30])
cube([sidethick+(2*adj),wallthick,20]);
translate([-sidethick-gap-adj,depth-(4*wallthick),case_z-20-tol])
cube([sidethick+(2*adj)-adj,3*wallthick,10+tol]);
// front edge bottom tab openings
translate([-sidethick-gap-adj,depth-(4*wallthick),20])
cube([sidethick+(2*adj),wallthick,20]);
translate([-sidethick-gap-adj,depth-(4*wallthick),30-tol])
cube([sidethick+(2*adj)-adj,3*wallthick,10+tol]);
// hd holes for bays
for( i=[0:1:hd_bays-1]) {
translate([-gap,-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
rotate([0,0,0]) hd_holes(3.5, "portrait", "both", sidethick+2);
}
// top edge front tab openings
translate([-gap-sidethick-adj,depth-(3*wallthick)-gap-adj-30,
case_z-(2*floorthick)])
cube([sidethick+(2*adj),20,floorthick+tol]);
translate([-gap-sidethick-adj,depth-(3*wallthick)-gap-adj-30,
case_z-(2*floorthick)])
cube([sidethick+(2*adj),10+tol,(3*floorthick)+adj]);
// top edge rear tab openings
translate([-gap-sidethick-adj,40-wallthick-gap+adj,
case_z-(2*floorthick)])
cube([sidethick+(2*adj),10,floorthick+tol]);
translate([-gap-sidethick-adj,30-wallthick-gap+adj,
case_z-(2*floorthick)])
cube([sidethick+(2*adj),10+tol,(3*floorthick)+adj]);
}
}
}

View File

@@ -72,21 +72,21 @@ module case_top(case_design) {
}
if(case_design == "panel_nas") {
union() {
translate([-gap,-gap,case_z-2*wallthick])
cube([width-(2*wallthick)+(101.6-width+(2*wallthick)),depth-(3*wallthick),wallthick]);
/* translate([(width*(1/5))-8-(wallthick+gap),depth-(2*wallthick)-gap-adj,
case_z-floorthick])
cube([8,wallthick+2*adj,floorthick]);
translate([width-(width*(1/5))-(wallthick+gap),depth-(2*wallthick)-gap-adj,
case_z-floorthick])
cube([8,wallthick+2*adj,floorthick]);
translate([(width*(1/5))-8-(wallthick+gap),-wallthick-gap+adj,
case_z-floorthick])
cube([8,wallthick+2*adj,floorthick]);
translate([width-(width*(1/5))-(wallthick+gap),-wallthick-gap+adj,
case_z-floorthick])
cube([8,wallthick+2*adj,floorthick]);
*/ }
translate([-gap,-wallthick,case_z-2*wallthick])
cube([width-2*(gap+sidethick),depth-(2*wallthick),wallthick]);
translate([-gap-sidethick+(2*adj),depth-(3*wallthick)-gap-adj-20,
case_z-2*floorthick])
cube([sidethick+(2*adj),10,floorthick]);
translate([width-(3*sidethick)-adj,depth-(3*wallthick)-gap-adj-20,
case_z-2*floorthick])
cube([sidethick+2*adj,10,floorthick]);
translate([-gap-sidethick+(2*adj),40-wallthick-gap+adj,
case_z-2*floorthick])
cube([sidethick+2*adj,10,floorthick]);
translate([width-(3*sidethick)-adj,40-wallthick-gap+adj,
case_z-2*floorthick])
cube([sidethick+2*adj,10,floorthick]);
}
}
if(case_design == "stacked") {
translate([(width/2)-wallthick-gap,(depth/2)-wallthick-gap,

View File

@@ -9688,7 +9688,7 @@
"hd_space": "10",
"hd_y_position": "25",
"hd_z_position": "10",
"indents": "true",
"indents": "false",
"individual_part": "bottom",
"lower_bottom": "0",
"material_thickness": "0.5",
@@ -9747,7 +9747,7 @@
"multipcb_top_standoff_type": "blind",
"multipcb_top_standoffs": "false",
"nas_sbc_location": "top",
"pcb_loc_x": "0",
"pcb_loc_x": "8",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",

View File

@@ -368,11 +368,11 @@ pcb_color = sbc_data[s[0]][11][1];
pcb_radius = sbc_data[s[0]][11][0];
pcb_z = sbc_model == "ssi-eeb" || sbc_model == "ssi-ceb" || sbc_model == "atx" || sbc_model == "micro-atx" || sbc_model == "dtx" || sbc_model == "flex-atx" || sbc_model == "mini-dtx" || sbc_model == "mini-itx" || sbc_model == "mini-itx_thin" || sbc_model == "mini-stx" || sbc_model == "mini-stx_thin" || sbc_model == "nano-itx" || sbc_model == "nuc" || sbc_model == "pico-itx" ? pcb_z_orig + standard_motherboard_thickness : pcb_z_orig;
width = pcb_width+2*(wallthick+gap)+case_offset_x;
width = case_design == "panel_nas" && pcb_width <= 100 ? pcb_width+(2*(sidethick+gap))+case_offset_x+(101.6-pcb_width) : pcb_width+(2*(wallthick+gap))+case_offset_x;
depth = case_design == "panel_nas" ? pcb_depth+2*(wallthick+gap)+case_offset_y + 147-pcb_depth+hd_y_position : pcb_depth+2*(wallthick+gap)+case_offset_y;
top_height = pcb_tmaxz+floorthick+case_offset_tz+pcb_loc_z;
bottom_height = (case_design == "tray" || case_design == "tray_vu5" || case_design == "tray_vu7" || case_design == "tray_sides") ? pcb_z+pcb_bmaxz+floorthick+case_offset_bz+4 : pcb_z+pcb_bmaxz+floorthick+case_offset_bz;
case_z = case_design == "panel_nas" ? bottom_height+top_height+hd_z_position + (hd_bays * (hd_space + 26.1)) : bottom_height+top_height;
case_z = case_design == "panel_nas" ? bottom_height+top_height+hd_z_position+(hd_bays * (hd_space + 26.1)) : bottom_height+top_height;
case_diameter = sqrt(pow(width-wallthick-gap,2)+pow(depth-wallthick-gap,2));
hex_diameter = sqrt(pow(width+2*(wallthick+gap),2)+pow(depth+2*(wallthick+gap),2));
@@ -656,10 +656,10 @@ if (view == "model") {
color("grey",1) translate([0,-move_rear,0]) case_side(case_design,"rear");
}
if(move_rightside >= 0) {
color("grey",1) translate([move_rightside,0,0]) case_side(case_design,"right");
color("dimgrey",1) translate([move_rightside,0,0]) case_side(case_design,"right");
}
if(move_leftside >= 0) {
color("grey",1) translate([-move_leftside,0,0]) case_side(case_design,"left");
color("dimgrey",1) translate([-move_leftside,0,0]) case_side(case_design,"left");
}
if(sbc_off == false && nas_sbc_location == "bottom") {
translate([pcb_loc_x ,pcb_loc_y,bottom_height-pcb_z+pcb_loc_z])