work on parametrics for drive(s), fan and case size, other gui and misc work

This commit is contained in:
Edward Kisiel
2025-04-07 17:33:32 -04:00
parent 6f26ab2f04
commit a032839b3b
6 changed files with 70 additions and 52 deletions

View File

@@ -65,10 +65,10 @@ 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-(2*wallthick),floorthick]);
translate([(width*(1/5))-8-(wallthick+gap),depth-(2*wallthick)-gap-adj,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-(2*wallthick)-gap-adj,0])
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]);

View File

@@ -26,9 +26,6 @@
module case_side(case_design, side) {
hd_space = 36;
hd_height = 40;
difference() {
union() {
if(case_design == "panel") {
@@ -168,8 +165,14 @@ module case_side(case_design, side) {
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]);
translate([(101.6-80)/2,-1,bottom_height+98]) rotate([90,0,0]) fan_mask(80, wallthick+2, "fan_hex");
translate([(101.6-80)/2,-1,bottom_height+17]) rotate([90,0,0]) fan_mask(80, wallthick+2, "fan_hex");
if(hd_fan == 1 || hd_fan == 2) {
translate([-1+(101.6-hd_fan_size)/2,-1,bottom_height+pcb_tmaxz+hd_fan_position])
rotate([90,0,0]) fan_mask(hd_fan_size, wallthick+2, hd_cooling);
}
if(hd_fan == 2) {
translate([-1+(101.6-hd_fan_size)/2,-1,bottom_height+pcb_tmaxz+hd_fan_position+3+hd_fan_size])
rotate([90,0,0]) fan_mask(hd_fan_size, wallthick+2, hd_cooling);
}
}
}
if(side == "front") {
@@ -208,8 +211,8 @@ module case_side(case_design, side) {
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+6,depth-4*(wallthick)-gap,case_z-6]) rotate([-90,0,0])
vent_hex((width)/3.5,(depth)/7,wallthick+4,5,1.5,"horizontal");
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");
}
}
if(side == "right") {
@@ -223,8 +226,8 @@ module case_side(case_design, side) {
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]);
for( i=[0:1:nas_bays-1]) {
translate([-gap,-(3*wallthick)-gap+78.25,hd_height+hd_space*i])
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);
}
}
@@ -240,8 +243,8 @@ module case_side(case_design, side) {
translate([-wallthick-gap-adj,depth-2*(wallthick)-gap-.25,
((case_z)/2)])
cube([wallthick+2*adj,wallthick+.5,8.5]);
for( i=[0:1:nas_bays-1]) {
translate([-gap,-(3*wallthick)-gap+78.25,hd_height+hd_space*i])
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);
}
}

View File

@@ -330,7 +330,8 @@ module case_top(case_design) {
pcbhole_pos = sbc_data[s[0]][i+10][4];
case_z = case_design == "fitted" || case_design == "tray_sides" ||
case_design == "tray_vu5" || case_design == "tray_vu7" ? case_z+floorthick :
case_design == "snap" ? case_z+(2 * floorthick) : case_z;
case_design == "snap" ? case_z+(2 * floorthick) :
case_design == "panel_nas" ? case_z-floorthick : case_z;
if (class == "pcbhole" && id == 0 && pcbhole_pos == "left_rear" &&
top_rear_left_enable == true && top_standoff[6] != "blind") {
@@ -376,7 +377,8 @@ module case_top(case_design) {
pcbhole_pos = sbc_data[s[0]][i+10][4];
case_z = case_design == "fitted" || case_design == "tray_sides" ||
case_design == "tray_vu5" || case_design == "tray_vu7" ? case_z+floorthick :
case_design == "snap" ? case_z+(2 * floorthick) : case_z;
case_design == "snap" ? case_z+(2 * floorthick) :
case_design == "panel_nas" ? case_z-floorthick : case_z;
if(id == pcbid && id != 0 && pcbclass == "pcbhole") {
if (pcbclass == "pcbhole" && pcbhole_pos == "left_rear" &&
@@ -413,7 +415,8 @@ module case_top(case_design) {
case_z = case_design == "fitted" || case_design == "tray_sides" ||
case_design == "tray_vu5" || case_design == "tray_vu7" ? case_z+floorthick :
case_design == "snap" ? case_z+(2 * floorthick) : case_z;
case_design == "snap" ? case_z+(2 * floorthick) :
case_design == "panel_nas" ? case_z-floorthick : case_z;
// right-rear standoff
if((width-pcb_loc_x-pcb_width-(gap+2*wallthick) >= ext_top_standoff_support_size ||
@@ -507,7 +510,8 @@ module case_top(case_design) {
pcbhole_pos = sbc_data[s[0]][i+10][4];
case_z = case_design == "fitted" || case_design == "tray_sides" ||
case_design == "tray_vu5" || case_design == "tray_vu7" ? case_z+floorthick :
case_design == "snap" ? case_z+(2 * floorthick) : case_z;
case_design == "snap" ? case_z+(2 * floorthick) :
case_design == "panel_nas" ? case_z-floorthick : case_z;
stand_off_adj = case_design == "fitted" || case_design == "tray_sides" ||
case_design == "tray_vu5" || case_design == "tray_vu7" ? floorthick :
case_design == "snap" ? 2 * floorthick : 0;
@@ -608,7 +612,8 @@ module case_top(case_design) {
pcbhole_pos = sbc_data[s[0]][i+10][4];
case_z = case_design == "fitted" || case_design == "tray_sides" ||
case_design == "tray_vu5" || case_design == "tray_vu7" ? case_z+floorthick :
case_design == "snap" ? case_z+(2 * floorthick) : case_z;
case_design == "snap" ? case_z+(2 * floorthick) :
case_design == "panel_nas" ? case_z-floorthick : case_z;
stand_off_adj = case_design == "fitted" || case_design == "tray_sides" ||
case_design == "tray_vu5" || case_design == "tray_vu7" ? floorthick :
case_design == "snap" ? 2 * floorthick : 0;
@@ -696,7 +701,8 @@ module case_top(case_design) {
case_z = case_design == "fitted" || case_design == "tray_sides" ||
case_design == "tray_vu5" || case_design == "tray_vu7" ? case_z+floorthick :
case_design == "snap" ? case_z+(2 * floorthick) : case_z;
case_design == "snap" ? case_z+(2 * floorthick) :
case_design == "panel_nas" ? case_z-floorthick : case_z;
stand_off_adj = case_design == "fitted" || case_design == "tray_sides" ||
case_design == "tray_vu5" || case_design == "tray_vu7" ? floorthick :
case_design == "snap" ? 2 * floorthick : 0;

View File

@@ -9591,7 +9591,7 @@
"access_panel_rotation": "0",
"access_panel_size": "[70, 30]",
"accessory_highlight": "false",
"accessory_name": "nas",
"accessory_name": "none",
"adj": "0.01",
"bend_allowance": "1",
"bottom_access_panel_enable": "false",
@@ -9623,11 +9623,11 @@
"bottom_standoff_type": "countersunk",
"case_design": "panel_nas",
"case_offset_bz": "0",
"case_offset_tz": "165",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "138",
"case_offset_y": "0",
"cooling": "default",
"corner_fillet": "9",
"corner_fillet": "3",
"edge_fillet": "0",
"ext_bottom_front_left_adjust": "0",
"ext_bottom_front_left_enable": "true",
@@ -9684,6 +9684,14 @@
"floorthick": "2",
"gap": "1",
"gpio_opening": "default",
"hd_bays": "2",
"hd_cooling": "fan_hex",
"hd_fan": "1",
"hd_fan_position": "0",
"hd_fan_size": "80",
"hd_space": "10",
"hd_y_position": "25",
"hd_z_position": "40",
"indents": "true",
"individual_part": "bottom",
"lower_bottom": "0",
@@ -9742,9 +9750,8 @@
"multipcb_top_standoff_support_size": "7",
"multipcb_top_standoff_type": "blind",
"multipcb_top_standoffs": "false",
"nas_bays": "2",
"nas_sbc_location": "top",
"pcb_loc_x": "0",
"pcb_loc_x": "8",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
@@ -9754,7 +9761,7 @@
"sbc_information": "false",
"sbc_model": "m2",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sbc_top_standoffs": "true",
"sidethick": "3",
"standard_motherboard_thickness": "0",
"text_color": "Green",
@@ -9784,7 +9791,7 @@
"top_standoff_size": "m3",
"top_standoff_support_height": "4",
"top_standoff_support_size": "10",
"top_standoff_type": "blind",
"top_standoff_type": "countersunk",
"uart_opening": "default",
"view": "model",
"wallthick": "2"

View File

@@ -126,8 +126,16 @@ uart_opening = "default"; // [default,none,open,knockout]
indents = true;
// nas sbc location
nas_sbc_location = "top"; // ["top","bottom"]
// number of nas bays
nas_bays = 2; // [0:5]
// number of nas drive bays
hd_bays = 2; // [1:6]
hd_y_position = 25; // [1:300]
hd_z_position = 40; // [1:300]
hd_space = 10; // [1:50]
hd_fan = 1; // [1,2]
hd_cooling = "fan_hex"; // [fan_open,fan_1,fan_2,fan_hex,custom]
hd_fan_size = 80; // [0,25,30,40,50,60,70,80,92]
hd_fan_position = 0; // [-50:300]
// case accessory group to load
accessory_name = "none"; // ["none", "hk_uart", "nas", "c4_shell_boombox", "c4_desktop_lcd3.5", "c4_deskboom_lcd3.5", "c4_panel_boombox", "c4_panel_lcd3.5", "c4_tray_boombox", "c4_round", "c4_hex", "xu4_shifter_shield", "xu4_keyhole", "hc4_shell_drivebox2.5", "hc4_shell_drivebox2.5v", "hc4_shell_drivebox3.5", "hc4_tray_drivebox2.5", "m2_shell", "m2_eyespi_eink1.54", "m2_eyespi_lcd2.8", "m1s_shell_nvme", "m1s_shell_ups", "m1s_tray_nvme", "m1_tray_ssd", "m1_fitted_pizzabox2.5", "m1_fitted_pizzabox3.5", "h3_shell", "h3_shell_router", "h3_lowboy", "h3_lowboy_router", "h3_ultimate", "h3_ultimate2", "show2_shell", "rpi5_m2hat", "rock5b", "adapter_mini-stx_m1s", "cs_solarmeter", "n2l_env_sensors", "avr_env_sensors", "adafruit_solar_charger"]
// sbc information text color
@@ -359,10 +367,10 @@ 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;
depth = pcb_depth+2*(wallthick+gap)+case_offset_y;
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 = bottom_height+top_height;
case_z = case_design == "panel_nas" ? bottom_height+top_height+hd_z_position + (hd_bays * (hd_space + 26.1)-hd_space) : 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));
@@ -549,12 +557,6 @@ if (view == "platter") {
if(case_design == "paper_split-top" || case_design == "paper_full-top") {
case_folded(case_design);
}
if(case_design == "tray" || case_design == "tray_vu5" || case_design == "tray_vu7" || case_design == "tray_sides") {
echo(Case_Width=width+2*sidethick,Depth=depth,Top=top_height,Bottom=bottom_height);
}
else {
echo(Case_Width=width,Depth=depth,Top=top_height,Bottom=bottom_height);
}
}
// model view
@@ -661,6 +663,10 @@ if (view == "model") {
translate([pcb_loc_x ,pcb_loc_y,bottom_height-pcb_z+pcb_loc_z])
sbc(sbc_model, cooling, fan_size, gpio_opening, uart_opening, false);
}
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]) hd35("portrait", [false,0,0,"default"]);
}
}
if(case_design == "stacked") {
if(lower_bottom >= 0) {
@@ -897,12 +903,6 @@ if (view == "model") {
rotate([90, 0, 0]) text(str(sbc_data[s[0]][1][i]), 5, font = text_font);
}
}
if(case_design == "tray" || case_design == "tray_vu5" || case_design == "tray_vu7" || case_design == "tray_sides") {
echo(Case_Width=width+2*sidethick,Depth=depth,Top=top_height,Bottom=bottom_height);
}
else {
echo(Case_Width=width,Depth=depth,Top=top_height,Bottom=bottom_height);
}
}
//}
// part
@@ -1030,10 +1030,15 @@ if (view == "part") {
}
}
}
if(case_design == "tray" || case_design == "tray_vu5" || case_design == "tray_vu7" || case_design == "tray_sides") {
echo(width=width+2*sidethick,depth=depth,top=top_height,bottom=bottom_height);
}
if(case_design == "tray" || case_design == "tray_vu5" || case_design == "tray_vu7" || case_design == "tray_sides") {
echo(width=width+2*sidethick,depth=depth,top=top_height,bottom=bottom_height);
}
else {
if(case_design == "panel_nas") {
echo(width=width+(101.6-width+(2*sidethick)),depth=depth,top=top_height,bottom=bottom_height);
}
else {
echo(width=width,depth=depth,top=top_height,bottom=bottom_height);
}
}
echo(width=width,depth=depth,top=top_height,bottom=bottom_height);
}
}

View File

@@ -493,9 +493,6 @@ accessory_data = [
// NAS Case
["nas",
"model","hd35",-1,-67,148,"bottom",[0,0,0],["case",true,true,false],[0,0,0],["portrait"],[true,20,2,"both"],
"model","hd35",-1,-67,112,"bottom",[0,0,0],["case",true,true,false],[0,0,0],["portrait"],[true,20,2,"both"],
"model","hd35",-1,-67,76,"bottom",[0,0,0],["case",true,true,false],[0,0,0],["portrait"],[true,20,2,"both"],
"model","hd35",-1,-67,40,"bottom",[0,0,0],["case",true,true,false],[0,0,0],["portrait"],[true,20,2,"both"]],
// circuitsetup solar energy meter