add grommet() and panel_clamp() to accessory library, readme.md updated, work on removable bay sbc positioning.

This commit is contained in:
Edward Kisiel
2025-05-22 22:20:27 -04:00
parent 13ccfc6357
commit d502252d2e
7 changed files with 715 additions and 75 deletions

116
README.md
View File

@@ -56,14 +56,15 @@ NOTE: The submodule *SBC Model Framework* needs to be updated anytime SBC Case B
- Paper, Folded - complete
- Standard MB SBC Adapters & io plates - completed
+ SSI-EEB, SSI-CEB, ATX, Micro-ATX, DTX, Flex-ATX, Mini-DTX, Mini-Itx, Mini-ITX Thin, Mini-STX, Mini-STX Thin
- Standard MB Cases - completed
- Standard MB Cases - complete
+ SSI-EEB, SSI-CEB, ATX, Micro-ATX, DTX, Flex-ATX, Mini-DTX, Mini-ITX, Mini-ITX Thin, Mini-STX, Mini-STX Thin, Nano-ITX, NUC, Pico-ITX
- Sheet Metal, Folded
- NAS - panel_nas complete
- Rack - 1U and 2U complete
- Stacked Levels
- Sliding
- Cylinder
- Free Form
- NAS
- Rack
- Sheet Metal, Folded
- CNC Cases
All case data is stored in the json file sbc_case_builder.json with the accessory data stored in a separate file structure in sbc_case_builder_accessories.cfg. An accessory group name for a given case is stored as part of the case data in the json file. This allows for the reuse or sharing of an accessory set by different cases and can be used to manage groups of accessories.
@@ -88,6 +89,10 @@ This tab exclusively deals with folded cases. At this time the bend allowance e
Both standard motherboard adapters and cases can be generated with SBC Case Builder and this tab controls the specific settings. Since it is not possible to know the motherboard thickness it is set to 2mm and the *standard motherboard thickness* setting is used to add or subtract thickness for an accurate representation of the user provided PCB. The *rear io shield* setting is only used when generating full cases and is not needed when generating adapters and io shields. Most of the adjustments in the *3D Case Adjustments* tab also work for motherboard adapters which allows for the SBC or other device to be repositioned on the adapter while providing the full use of the accessory subsystem. Any accessory entries in the sbc_case_builder_accessories.cfg file should reference the bottom face. The *bottom cover pattern* in the *Fan and Vent Openings* tab and the *SBC Bottom Standoff* tabs also apply to motherboard adapters. There are predefined example cases and adapters available in the GUI for further reference.
### Rack Mount Case Adjustments Tab
Both 1U and 2U, 10" and 19", rack cases are configured in this tab. The first entry *rack width* selects if 10" or 19" rack cases are being created. The *rack size* sets wether 1U or 2U. The remaining tab is divided into six groups of settings each representing a virtual bay. Each bay group specifies the SBC thru the pickbox *Rack Bay1* respectively. With *rack bay1 xyz loc* and *rack bay1 rotation determining the position and z-axis rotation. The type of bay is set in the *rack bay1 face* pickbox followed by two checkboxes for the internal dividing wall, rear fan and a bay conduit selection pickbox.
### 3D Case Adjustments Tab
The *3D Case Adjustments* tab makes up the bulk of the possible case adjustments for 3D printed cases. Most of the entries in this tab are self explanatory. The *pcb loc* adjustments allow the selected device model to be moved in the case design, the *case offset* adjustments increase the selected case design dimensions. The *wallthick*, *floorthick* and *sidethick* adjust their respective areas. Do note that the *floorthick* adjustment also determines the ceiling thickness for all case designs and the *sidethick* only affects the tray_sides, tray_vu5, tray_vu7 case designs. The *gap* entry is the distance between the device PCB and the sidewall of the case design. The *tol* adjustment, located at the bottom of the tab, is a tolerance fitment adjustment for the snap, fitted, round and hex case design tops. Adjust accordingly if the tops are too tight or loose.
@@ -214,12 +219,12 @@ Multi-associative parametric positioning of accessories is implemented and allow
### classes: add1, sub, suball, add2, model, platter
Class *add1* and *add2* are used to add geometry to the case. The difference is when the addition occurs. *add1* happens at the beginning when the core case geometry is created before any subtractions and *add2* happens at the end after all subtractions have occurred. *suball* is used to affect all faces of a case, not just a single face. The “face” is the case piece that will be effected by the addition or subtraction. The *model* class is for placing supporting accessories in the model view. e.g. hard drives, fans. The *platter* class is for adding supporting accessories, that are not part of the core case geometry, to the print platter for printing e.g. an access panel cover.
Class *add1* and *add2* are used to add geometry to the case. The difference is when the addition occurs. *add1* happens at the beginning when the core case geometry is created before any subtractions and *add2* happens at the end after all subtractions have occurred. *suball* is used to affect all faces of a case, not just a single face. The “face” is the case piece that will be effected by the addition or subtraction. The *model* class is for placing supporting accessories in the model view. e.g. hard drives, fans. The *platter* class is for adding supporting accessories, that are not part of the core case geometry, to the print platter for printing e.g. a fan cover or access panel cover.
**additive type:**
art, access_panel, batt_holder, button, button_assembly, fan_cover, feet, hd_holder, hk_boom_grill, hk_boom_speaker_holder, hk_boom_vring, hk_h3_port_extender_holder, hk_hc4_oled_holder, hk_uart_holder, hk_uart_strap, keyhole, nut_holder, pcb_holder, rectangle, round, slot, sphere, standoff, text, vent_panel_hex, uart_holder, hc4_oled_holder, button, pcb_holder
art, access_panel, batt_holder, button, button_assembly, fan_cover, feet, grommet, hd_holder, hk_boom_grill, hk_boom_speaker_holder, hk_boom_vring, hk_h3_port_extender_holder, hk_hc4_oled_holder, hk_uart_holder, hk_uart_strap, keyhole, nut_holder, panel_clamp, pcb_holder, rectangle, round, slot, sphere, standoff, text, vent_panel_hex, uart_holder, hc4_oled_holder, button, pcb_holder
**subtractive type:**
@@ -234,7 +239,7 @@ access_cover, adafruit_lcd, dsub, fan, hd25, hd35, hk_boom, hk_boom_speaker, hk_
**platter type:**
access_cover, button_assembly, fan_cover, feet, hk_boom_vring, hk_h3_port_extender_holder, hk_uart_strap, vent_panel_hex
access_cover, button_assembly, fan_cover, feet, grommet, hk_boom_vring, hk_h3_port_extender_holder, hk_uart_strap, vent_panel_hex
## Accessory Reference Manual
@@ -459,6 +464,35 @@ DESCRIPTION: creates case feet.
```
### grommet
```
CLASSES: add1, add2, platter
DESCRIPTION: creates different groumet styles.
MASK: yes
USAGE: "class", "grommet", loc_x, loc_y, loc_z, face, rotation[], parametric[], size[], data[], mask[]
class = "add1", "add2", "platter"
type = "grommet"
loc_x = x location placement
loc_y = y location placement
loc_z = z location placement
face = "top", "bottom", "right", "left", "front", "rear"
rotation[] = object rotation
parametric[] = "case", "sbc", "sbc-case_z"
size[0] = od outside diameter of grommet body
size[1] = id inside hole diameter of grommet body
size[2] = wall thickness of installation
data[0] = "top","bottom","front","rear","left","right"
data[1] = "sleeve"
data[2] = assembled true, false
mask[0] = true enables component mask
mask[1] = mask length
mask[2] = mask setback
mask[3] = mstyle "default"
```
### hd_holder
```
@@ -771,6 +805,35 @@ DESCRIPTION: creates nut holder of various styles.
```
### panel_clamp
```
CLASSES: add1, add2
DESCRIPTION: creates clamps to join two panels.
MASK: yes
USAGE: "class", "panel_clamp", loc_x, loc_y, loc_z, face, rotation[], parametric[], size[], data[], mask[]
class = "add1", "add2"
type = "panel_clamp"
loc_x = x location placement
loc_y = y location placement
loc_z = z location placement
face = "top", "bottom", "right", "left", "front", "rear"
rotation[] = object rotation
parametric[] = "case", "sbc", "sbc-case_z"
size[0] = top diameter or x size in mm
size[1] = bottom diameter or y size in mm
size[2] = clamp height in mm
data[0] = orientation "top","bottom","rear","front","left","right"
data[1] = "sloped"
data[2] = "m2", "m2.5", "m3", "m4"
mask[0] = false
mask[1] = length
mask[2] = set back
mask[3] = mstyle "default", "holes"
```
### pcb_holder
```
@@ -2088,6 +2151,35 @@ DESCRIPTION: creates case feet.
```
### grommet
```
CLASSES: add1, add2, platter
DESCRIPTION: creates different groumet styles.
MASK: yes
USAGE: "class", "grommet", loc_x, loc_y, loc_z, face, rotation[], parametric[], size[], data[], mask[]
class = "add1", "add2", "platter"
type = "grommet"
loc_x = x location placement
loc_y = y location placement
loc_z = z location placement
face = "top", "bottom", "right", "left", "front", "rear"
rotation[] = object rotation
parametric[] = "case", "sbc", "sbc-case_z"
size[0] = od outside diameter of grommet body
size[1] = id inside hole diameter of grommet body
size[2] = wall thickness of installation
data[0] = "top","bottom","front","rear","left","right"
data[1] = "sleeve"
data[2] = assembled true, false
mask[0] = true enables component mask
mask[1] = mask length
mask[2] = mask setback
mask[3] = mstyle "default"
```
### hk_boom_speaker_holder
```
@@ -2220,6 +2312,16 @@ DESCRIPTION: creates hex pattern covers for vent openings.
```
## Case Build Notes
This area covers specific build notes for specific cases. Hardware used or other relavent information is list by case design name.
### panel_nas Case Design
The panel_nas design can be CNC cut or 3D printed. By changing the top and bottom standoff type to "none" in the *SBC Standoff Global Settings* tabs respectively, only a hole is generated for CNC cutting support. Panels can be exported in DXF or SVG by selecting the *part" view under the *view* tab, then the indivual part and select the *section part* checkbox. After the projection has been generated render it by pressing F7 or by selecting render from the user interface. Exported DXF and SVG file formats are available under the File->Export menu.
### rack Case Design
This case is divided into 3 pieces for the 19" cases and 2 pieces for the 10" cases. They can be selected in the *part* view for STL export under the *view* tab by selecting the left, bottom or right individual part. The peices are held together using M2x8mm screws and nuts. The 10 inch cases requires 5 sets of screws and nuts and the 19" rack case takes 10 sets.
## Accuracy
In the past there was been no way of validating whether a SBC Model Framework model and its components were dimensionaly accurate in their size and placement other then trial and error. Along with producing cases this project provides a much needed model validation tool to assure model accuracy thru the use of test cases. It works on the very simple premise that if the real SBC fits the test case then the virtual model is accurate or otherwise shows were corrections are needed. This will further increased the overall accuracy of models over time.

View File

@@ -28,12 +28,12 @@
USAGE: grommet(face, style, od, id, wall, assembly, mask)
face = "top","bottom","front","rear","left","right"
style = "sleeve"
data[0] = "top","bottom","front","rear","left","right"
data[1] = "sleeve"
size[0] = od outside diameter of grommet body
size[1] = id inside hole diameter of grommet body
size[2] = wall thickness of installation
assembly = false
data[3] = assembled true, false
mask[0] = true enables component mask
mask[1] = mask length
mask[2] = mask setback

View File

@@ -3,23 +3,23 @@
DESCRIPTION: creates various clamps to join two panels
TODO: none
USAGE: panel_clamp(face, screw, style, dia_x, dia_y, height, mask)
USAGE: panel_clamp(face, style, screw, dia_x, dia_y, height, mask)
face = "top","bottom","rear","front","left","right"
screw = "m2", "m2.5", "m3", "m4"
style = "sloped"
dia_x = top diameter or x size in mm
dia_y = bottom diameter or y size in mm
height = holder height in mm
data[0] = "top","bottom","rear","front","left","right"
data[1] = "sloped"
data[2] = "m2", "m2.5", "m3", "m4"
size_x = top diameter or x size in mm
size_y = bottom diameter or y size in mm
size_z = clamp height in mm
mask[0] = true enables component mask
mask[1] = mask length
mask[2] = mask setback
mask[3] = mstyle "default"
mask[3] = mstyle "default", "holes"
*/
module panel_clamp(face, screw, style, dia_x, dia_y, height, mask) {
module panel_clamp(face, style, screw, dia_x, dia_y, height, mask) {
nuts = [[2,4,1.6], // m2 size, diameter, height
[2.5,5,2], // m2.5 size, diameter, height

View File

@@ -82,6 +82,9 @@ module add(type, loc_x, loc_y, loc_z, face, rotation, size, data, mask) {
if(type == "feet") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) feet(size_x, size_z);
}
if(type == "grommet") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) grommet(data[0], data[1], size_x, size_y, size_z, data[2], mask);
}
if(type == "hd_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd_mount(data[0],data[1],data[2],data[3]);
}
@@ -112,6 +115,9 @@ module add(type, loc_x, loc_y, loc_z, face, rotation, size, data, mask) {
if(type == "nut_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) nut_holder(data[0], data[1], size_x, size_y, size_z, mask);
}
if(type == "panel_clamp") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) panel_clamp(data[0], data[1], data[2], size_x, size_y, size_z, mask);
}
if(type == "pcb_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) pcb_holder([size_x,size_y,size_z],data[0]);
}

View File

@@ -48,14 +48,14 @@ if(case_design == "rack" && side == "bottom") {
top=[0,0,0,0], bottom=[edge_fillet,edge_fillet,edge_fillet,edge_fillet,edge_fillet], $fn=90);
// case upper panel clamp holes
translate([150-gap-wallthick,-gap-adj,case_z-13+4])
panel_clamp("rear", "m2", "sloped", 6, 18, 5, [true,10,2,"default"]);
panel_clamp("rear", "sloped", "m2", 6, 18, 5, [true,10,2,"default"]);
translate([150-gap-wallthick,depth-gap-(2*wallthick)+adj,
case_z-13+4]) panel_clamp("front", "m2", "sloped", 6, 18, 5, [true,10,2,"default"]);
case_z-13+4]) panel_clamp("front", "sloped", "m2", 6, 18, 5, [true,10,2,"default"]);
if(rack_width == 19) {
translate([300-gap-wallthick,-gap-adj,case_z-13+4])
panel_clamp("rear", "m2", "sloped", 6, 18, 5, [true,10,2,"default"]);
panel_clamp("rear", "sloped", "m2", 6, 18, 5, [true,10,2,"default"]);
translate([300-gap-wallthick,depth-gap-(2*wallthick)+adj,
case_z-13+4]) panel_clamp("front", "m2", "sloped", 6, 18, 5, [true,10,2,"default"]);
case_z-13+4]) panel_clamp("front", "sloped", "m2", 6, 18, 5, [true,10,2,"default"]);
}
}
@@ -74,33 +74,33 @@ if(case_design == "rack" && side == "bottom") {
}
// case upper panel clamps
translate([150-gap-wallthick,-gap-adj,case_z-13+4])
panel_clamp("rear", "m2", "sloped", 6, 18, 5, [false,10,2,"default"]);
panel_clamp("rear", "sloped", "m2", 6, 18, 5, [false,10,2,"default"]);
translate([150-gap-wallthick,depth-gap-(2*wallthick)+adj,
case_z-13+4]) panel_clamp("front", "m2", "sloped", 6, 18, 5, [false,10,2,"default"]);
case_z-13+4]) panel_clamp("front", "sloped", "m2", 6, 18, 5, [false,10,2,"default"]);
if(rack_width == 19) {
translate([300-gap-wallthick,depth-gap-(2*wallthick)+adj,
case_z-13+4]) panel_clamp("front", "m2", "sloped", 6, 18, 5, [false,10,2,"default"]);
case_z-13+4]) panel_clamp("front", "sloped", "m2", 6, 18, 5, [false,10,2,"default"]);
translate([300-gap-wallthick,-gap-adj,case_z-13+4])
panel_clamp("rear", "m2", "sloped", 6, 18, 5, [false,10,2,"default"]);
panel_clamp("rear", "sloped", "m2", 6, 18, 5, [false,10,2,"default"]);
}
// case floor panel clamps
translate([150-gap-wallthick,(depth/2)-gap-wallthick,floorthick-adj-.5])
panel_clamp("bottom", "m2", "sloped", 6, 18, 5, [false,10,2,"default"]);
panel_clamp("bottom", "sloped", "m2", 6, 18, 5, [false,10,2,"default"]);
if(rack_width == 19) {
translate([300-gap-wallthick,(depth/2)-gap-wallthick,floorthick-adj-.5])
panel_clamp("bottom", "m2", "sloped", 6, 18, 5, [false,10,2,"default"]);
panel_clamp("bottom", "sloped", "m2", 6, 18, 5, [false,10,2,"default"]);
}
// top support
translate([-gap,depth-gap-wallthick-18,case_z-floorthick]) rotate([0,0,270])
panel_clamp("rear", "m2", "sloped", 6, 18, 5, [false,10,2,"default"]);
panel_clamp("rear", "sloped", "m2", 6, 18, 5, [false,10,2,"default"]);
translate([width-gap-(2*wallthick),depth-gap-wallthick-18,case_z-floorthick]) rotate([0,0,270])
panel_clamp("front", "m2", "sloped", 6, 18, 5, [false,10,2,"default"]);
panel_clamp("front", "sloped", "m2", 6, 18, 5, [false,10,2,"default"]);
translate([-gap,18-gap,case_z-floorthick]) rotate([0,0,270])
panel_clamp("rear", "m2", "sloped", 6, 18, 5, [false,10,2,"default"]);
panel_clamp("rear", "sloped", "m2", 6, 18, 5, [false,10,2,"default"]);
translate([width-gap-(2*wallthick),18-gap,case_z-floorthick]) rotate([0,0,270])
panel_clamp("front", "m2", "sloped", 6, 18, 5, [false,10,2,"default"]);
panel_clamp("front", "sloped", "m2", 6, 18, 5, [false,10,2,"default"]);
// additive accessories
if(accessory_name != "none") {
@@ -279,10 +279,10 @@ if(case_design == "rack" && side == "bottom") {
}
// case floor panel clamp holes
translate([150-gap-wallthick,(depth/2)-gap-wallthick,floorthick-adj-.5])
panel_clamp("bottom", "m2", "sloped", 6, 18, 5, [true,10,2,"holes"]);
panel_clamp("bottom", "sloped", "m2", 6, 18, 5, [true,10,2,"holes"]);
if(rack_width == 19) {
translate([300-gap-wallthick,(depth/2)-gap-wallthick,floorthick-adj-.5])
panel_clamp("bottom", "m2", "sloped", 6, 18, 5, [true,10,2,"holes"]);
panel_clamp("bottom", "sloped", "m2", 6, 18, 5, [true,10,2,"holes"]);
}
}
// pcb and multi-pcb standoffs
@@ -295,8 +295,6 @@ if(case_design == "rack" && side == "bottom") {
pcb_z_orig = sbc_data[s[0]][10][2];
pcb_tmaxz = sbc_data[s[0]][11][5];
pcb_bmaxz = sbc_data[s[0]][11][6];
// pcb_color = sbc_data[s[0]][11][1];
// pcb_radius = sbc_data[s[0]][11][0];
pcb_loc_x = rack_bay_rotation[r] == 90 ? rack_bay_xyz_loc[r][0] + pcb_width :
rack_bay_rotation[r] == 180 ? rack_bay_xyz_loc[r][0] + pcb_width : rack_bay_xyz_loc[r][0];
@@ -570,7 +568,7 @@ if(case_design == "rack" && side == "bottom") {
r == 2 && rack_width == 10 ? 65.25 :
r >= 1 && r < 5 && rack_bay_wall[r] == true ? 75-wallthick-gap-2 :
r >= 1 && r < 5 && rack_bay_wall[r] == false && rack_bay_sbc[r+1] == "empty" ||
(r != 2 && rack_width == 10) ? 75-wallthick-gap-4+baysize :
(r != 2 && rack_width == 10) ? 75-wallthick-gap+baysize :
r == 5 ? 75-wallthick-sidethick+.125 : 69;
translate([open_offset-wallthick-gap+rack_asm_gap/2+75*(r+1)-75,
@@ -773,8 +771,8 @@ if(case_design == "rack" && side == "top") {
difference() {
union() {
difference() {
translate([-gap,-gap,case_z-2*floorthick])
slab([width-(2*wallthick),depth-(2*wallthick),floorthick],corner_fillet);
translate([-gap,-gap,case_z-floorthick-2])
slab([width-(2*wallthick),depth-(2*wallthick),2],corner_fillet);
// case divide
translate([150-gap-wallthick,-gap-wallthick-1,-adj]) cube([rack_asm_gap,depth+2,case_z+2*adj]);
translate([300-gap-wallthick,-gap-wallthick-1,-adj]) cube([rack_asm_gap,depth+2,case_z+2*adj]);
@@ -992,15 +990,13 @@ module bay_tray(depth, bay) {
pcb_z_orig = sbc_data[s[0]][10][2];
pcb_tmaxz = sbc_data[s[0]][11][5];
pcb_bmaxz = sbc_data[s[0]][11][6];
// pcb_color = sbc_data[s[0]][11][1];
// pcb_radius = sbc_data[s[0]][11][0];
pcb_loc_x = rack_bay_rotation[bay] == 90 ? rack_bay_xyz_loc[bay][0] + pcb_width :
rack_bay_rotation[bay] == 180 ? rack_bay_xyz_loc[bay][0] + pcb_width : rack_bay_xyz_loc[bay][0];
pcb_loc_y = rack_bay_rotation[bay] == 270 ? rack_bay_xyz_loc[bay][1]+pcb_width :
rack_bay_rotation[bay] == 180 ? rack_bay_xyz_loc[bay][1]+pcb_depth : rack_bay_xyz_loc[bay][1];
// pcb_loc_z = rack_bay_sbc[bay] == "n2" || rack_bay_sbc[bay] == "m1" ? rack_bay_xyz_loc[bay][2]+6 :
// rack_bay_sbc[bay] == "n2+" ? rack_bay_xyz_loc[bay][2]+4.5 : rack_bay_xyz_loc[bay][2];
pcb_loc_z = rack_bay_sbc[bay] == "n2" || rack_bay_sbc[bay] == "m1" ? rack_bay_xyz_loc[bay][2]+6 :
rack_bay_sbc[bay] == "n2+" ? rack_bay_xyz_loc[bay][2]+4.5 : rack_bay_xyz_loc[bay][2];
translate([pcb_loc_x,pcb_loc_y+wallthick+gap,0]) rotate([0,0,rack_bay_rotation[bay]]) union() {
// pcb standoff holes
@@ -1108,12 +1104,12 @@ module bay_tray(depth, bay) {
}
// sbc openings
if(sbc_highlight == true && rack_bay_sbc[bay] != "empty") {
#translate([pcb_loc_x ,pcb_loc_y+floorthick+gap,pcb_bmaxz+case_offset_bz+pcb_loc_z-adj])
#translate([pcb_loc_x, pcb_loc_y+gap,pcb_bmaxz+case_offset_bz+pcb_loc_z-pcb_z-adj])
rotate([0,0,rack_bay_rotation[bay]])
sbc(rack_bay_sbc[bay], cooling, fan_size, gpio_opening, uart_opening, true);
}
if(sbc_highlight != true && rack_bay_sbc[bay] != "empty") {
translate([pcb_loc_x ,pcb_loc_y+floorthick+gap,pcb_bmaxz+case_offset_bz+pcb_loc_z-adj])
translate([pcb_loc_x, pcb_loc_y+gap,pcb_bmaxz+case_offset_bz+pcb_loc_z-pcb_z-adj])
rotate([0,0,rack_bay_rotation[bay]])
sbc(rack_bay_sbc[bay], cooling, fan_size, gpio_opening, uart_opening, true);
}

View File

@@ -11915,6 +11915,528 @@
"uart_opening": "none",
"view": "model",
"wallthick": "2"
},
"h4_rack19-1u+": {
"$fn": "90",
"Rack_Bay1": "h4_ultra",
"Rack_Bay2": "empty",
"Rack_Bay3": "h4_ultra",
"Rack_Bay4": "empty",
"Rack_Bay5": "h4_ultra",
"Rack_Bay6": "empty",
"access_panel_location": "[10, 15]",
"access_panel_orientation": "landscape",
"access_panel_rotation": "0",
"access_panel_size": "[70, 30]",
"accessory_highlight": "false",
"accessory_name": "none",
"adj": "0.01",
"bend_allowance": "1",
"bottom_access_panel_enable": "false",
"bottom_clearence": "3.5",
"bottom_cover_pattern": "solid",
"bottom_front_left_adjust": "0",
"bottom_front_left_enable": "true",
"bottom_front_left_support": "front",
"bottom_front_right_adjust": "0",
"bottom_front_right_enable": "true",
"bottom_front_right_support": "front",
"bottom_rear_left_adjust": "0",
"bottom_rear_left_enable": "true",
"bottom_rear_left_support": "rear",
"bottom_rear_right_adjust": "0",
"bottom_rear_right_enable": "true",
"bottom_rear_right_support": "rear",
"bottom_sidewall_support": "false",
"bottom_standoff_diameter": "5.75",
"bottom_standoff_hole_size": "3.4",
"bottom_standoff_insert": "false",
"bottom_standoff_insert_dia": "4.2",
"bottom_standoff_insert_height": "5.1",
"bottom_standoff_pillar": "hex",
"bottom_standoff_reverse": "false",
"bottom_standoff_size": "m3",
"bottom_standoff_support_height": "4",
"bottom_standoff_support_size": "10",
"bottom_standoff_type": "countersunk",
"case_design": "rack",
"case_offset_bz": "0",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "50",
"cooling": "default",
"corner_fillet": "3",
"edge_fillet": "0",
"ext_bottom_front_left_adjust": "0",
"ext_bottom_front_left_enable": "true",
"ext_bottom_front_left_support": "front",
"ext_bottom_front_right_adjust": "0",
"ext_bottom_front_right_enable": "true",
"ext_bottom_front_right_support": "front",
"ext_bottom_rear_left_adjust": "0",
"ext_bottom_rear_left_enable": "true",
"ext_bottom_rear_left_support": "rear",
"ext_bottom_rear_right_adjust": "0",
"ext_bottom_rear_right_enable": "true",
"ext_bottom_rear_right_support": "rear",
"ext_bottom_sidewall_support": "true",
"ext_bottom_standoff_diameter": "5.75",
"ext_bottom_standoff_hole_size": "3.4",
"ext_bottom_standoff_insert": "false",
"ext_bottom_standoff_insert_dia": "4.2",
"ext_bottom_standoff_insert_height": "5.1",
"ext_bottom_standoff_pillar": "hex",
"ext_bottom_standoff_reverse": "false",
"ext_bottom_standoff_size": "m3",
"ext_bottom_standoff_support_height": "4",
"ext_bottom_standoff_support_size": "10",
"ext_bottom_standoff_type": "countersunk",
"ext_bottom_standoffs": "false",
"ext_top_front_left_adjust": "0",
"ext_top_front_left_enable": "true",
"ext_top_front_left_support": "front",
"ext_top_front_right_adjust": "0",
"ext_top_front_right_enable": "true",
"ext_top_front_right_support": "front",
"ext_top_rear_left_adjust": "0",
"ext_top_rear_left_enable": "true",
"ext_top_rear_left_support": "rear",
"ext_top_rear_right_adjust": "0",
"ext_top_rear_right_enable": "true",
"ext_top_rear_right_support": "rear",
"ext_top_sidewall_support": "true",
"ext_top_standoff_diameter": "5.75",
"ext_top_standoff_hole_size": "2.75",
"ext_top_standoff_insert": "false",
"ext_top_standoff_insert_dia": "4.2",
"ext_top_standoff_insert_height": "5.1",
"ext_top_standoff_pillar": "hex",
"ext_top_standoff_reverse": "true",
"ext_top_standoff_size": "m3",
"ext_top_standoff_support_height": "4",
"ext_top_standoff_support_size": "10",
"ext_top_standoff_type": "blind",
"ext_top_standoffs": "false",
"fan_size": "0",
"flat_blank_section": "false",
"floorthick": "3",
"front_cover_pattern": "solid",
"gap": "2",
"gpio_opening": "default",
"hd_bays": "2",
"hd_center": "false",
"hd_reverse": "false",
"hd_space": "10",
"hd_y_position": "25",
"hd_z_position": "40",
"indents": "true",
"individual_part": "bottom",
"lower_bottom": "0",
"material_thickness": "0.5",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"multipcb_bottom_front_left_adjust": "0",
"multipcb_bottom_front_left_enable": "true",
"multipcb_bottom_front_left_support": "front",
"multipcb_bottom_front_right_adjust": "0",
"multipcb_bottom_front_right_enable": "true",
"multipcb_bottom_front_right_support": "front",
"multipcb_bottom_rear_left_adjust": "0",
"multipcb_bottom_rear_left_enable": "true",
"multipcb_bottom_rear_left_support": "rear",
"multipcb_bottom_rear_right_adjust": "0",
"multipcb_bottom_rear_right_enable": "true",
"multipcb_bottom_rear_right_support": "rear",
"multipcb_bottom_sidewall_support": "false",
"multipcb_bottom_standoff_diameter": "5.75",
"multipcb_bottom_standoff_hole_size": "3.4",
"multipcb_bottom_standoff_insert": "false",
"multipcb_bottom_standoff_insert_dia": "4.2",
"multipcb_bottom_standoff_insert_height": "5.1",
"multipcb_bottom_standoff_pillar": "hex",
"multipcb_bottom_standoff_reverse": "false",
"multipcb_bottom_standoff_size": "m2.5",
"multipcb_bottom_standoff_support_height": "4",
"multipcb_bottom_standoff_support_size": "7",
"multipcb_bottom_standoff_type": "countersunk",
"multipcb_bottom_standoffs": "false",
"multipcb_top_front_left_adjust": "0",
"multipcb_top_front_left_enable": "true",
"multipcb_top_front_left_support": "front",
"multipcb_top_front_right_adjust": "0",
"multipcb_top_front_right_enable": "true",
"multipcb_top_front_right_support": "front",
"multipcb_top_rear_left_adjust": "0",
"multipcb_top_rear_left_enable": "true",
"multipcb_top_rear_left_support": "rear",
"multipcb_top_rear_right_adjust": "0",
"multipcb_top_rear_right_enable": "true",
"multipcb_top_rear_right_support": "rear",
"multipcb_top_sidewall_support": "false",
"multipcb_top_standoff_diameter": "5.75",
"multipcb_top_standoff_hole_size": "2.75",
"multipcb_top_standoff_insert": "false",
"multipcb_top_standoff_insert_dia": "4.2",
"multipcb_top_standoff_insert_height": "5.1",
"multipcb_top_standoff_pillar": "hex",
"multipcb_top_standoff_reverse": "true",
"multipcb_top_standoff_size": "m2.5",
"multipcb_top_standoff_support_height": "4",
"multipcb_top_standoff_support_size": "7",
"multipcb_top_standoff_type": "blind",
"multipcb_top_standoffs": "false",
"nas_sbc_location": "top",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"rack_bay1_face": "open",
"rack_bay1_rear_conduit": "none",
"rack_bay1_rear_fan": "false",
"rack_bay1_rotation": "0",
"rack_bay1_wall": "false",
"rack_bay1_xyz_loc": "[13, 0, 0]",
"rack_bay2_face": "fixed",
"rack_bay2_rear_conduit": "grommet",
"rack_bay2_rear_fan": "false",
"rack_bay2_rotation": "0",
"rack_bay2_wall": "false",
"rack_bay2_xyz_loc": "[0, 0, 0]",
"rack_bay3_face": "open",
"rack_bay3_rear_conduit": "none",
"rack_bay3_rear_fan": "false",
"rack_bay3_rotation": "0",
"rack_bay3_wall": "false",
"rack_bay3_xyz_loc": "[160, 0, 0]",
"rack_bay4_face": "fixed",
"rack_bay4_rear_conduit": "grommet",
"rack_bay4_rear_fan": "false",
"rack_bay4_rotation": "0",
"rack_bay4_wall": "false",
"rack_bay4_xyz_loc": "[0, 0, 0]",
"rack_bay5_face": "open",
"rack_bay5_rear_conduit": "none",
"rack_bay5_rear_fan": "false",
"rack_bay5_rotation": "0",
"rack_bay5_wall": "false",
"rack_bay5_xyz_loc": "[310, 0, 0]",
"rack_bay6_face": "fixed",
"rack_bay6_rear_conduit": "grommet",
"rack_bay6_rear_fan": "false",
"rack_bay6_rotation": "0",
"rack_bay6_xyz_loc": "[0, 0, 0]",
"rack_size": "1u+",
"rack_width": "19",
"raise_top": "0",
"rear_cooling": "fan_hex",
"rear_dualfan_spacing": "6",
"rear_fan": "1",
"rear_fan_center": "false",
"rear_fan_position": "0",
"rear_fan_size": "80",
"rear_io_shield": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_information": "false",
"sbc_model": "c1+",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"section_part": "false",
"sidethick": "3",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
"top_cover_pattern": "solid",
"top_front_left_adjust": "0",
"top_front_left_enable": "true",
"top_front_left_support": "front",
"top_front_right_adjust": "0",
"top_front_right_enable": "true",
"top_front_right_support": "front",
"top_rear_left_adjust": "0",
"top_rear_left_enable": "true",
"top_rear_left_support": "rear",
"top_rear_right_adjust": "0",
"top_rear_right_enable": "true",
"top_rear_right_support": "rear",
"top_sidewall_support": "false",
"top_standoff_diameter": "5.75",
"top_standoff_hole_size": "2.75",
"top_standoff_insert": "false",
"top_standoff_insert_dia": "4.2",
"top_standoff_insert_height": "5.1",
"top_standoff_pillar": "hex",
"top_standoff_reverse": "true",
"top_standoff_size": "m3",
"top_standoff_support_height": "4",
"top_standoff_support_size": "10",
"top_standoff_type": "blind",
"uart_opening": "default",
"view": "model",
"wallthick": "2"
},
"test": {
"$fn": "90",
"Rack_Bay1": "n2",
"Rack_Bay2": "empty",
"Rack_Bay3": "n2+",
"Rack_Bay4": "empty",
"Rack_Bay5": "h4_ultra",
"Rack_Bay6": "empty",
"access_panel_location": "[10, 15]",
"access_panel_orientation": "landscape",
"access_panel_rotation": "0",
"access_panel_size": "[70, 30]",
"accessory_highlight": "false",
"accessory_name": "none",
"adj": "0.01",
"bend_allowance": "1",
"bottom_access_panel_enable": "false",
"bottom_clearence": "3.5",
"bottom_cover_pattern": "solid",
"bottom_front_left_adjust": "0",
"bottom_front_left_enable": "true",
"bottom_front_left_support": "front",
"bottom_front_right_adjust": "0",
"bottom_front_right_enable": "true",
"bottom_front_right_support": "front",
"bottom_rear_left_adjust": "0",
"bottom_rear_left_enable": "true",
"bottom_rear_left_support": "rear",
"bottom_rear_right_adjust": "0",
"bottom_rear_right_enable": "true",
"bottom_rear_right_support": "rear",
"bottom_sidewall_support": "false",
"bottom_standoff_diameter": "5.75",
"bottom_standoff_hole_size": "3.4",
"bottom_standoff_insert": "false",
"bottom_standoff_insert_dia": "4.2",
"bottom_standoff_insert_height": "5.1",
"bottom_standoff_pillar": "hex",
"bottom_standoff_reverse": "false",
"bottom_standoff_size": "m3",
"bottom_standoff_support_height": "4",
"bottom_standoff_support_size": "10",
"bottom_standoff_type": "countersunk",
"case_design": "rack",
"case_offset_bz": "0",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "50",
"cooling": "default",
"corner_fillet": "3",
"edge_fillet": "0",
"ext_bottom_front_left_adjust": "0",
"ext_bottom_front_left_enable": "true",
"ext_bottom_front_left_support": "front",
"ext_bottom_front_right_adjust": "0",
"ext_bottom_front_right_enable": "true",
"ext_bottom_front_right_support": "front",
"ext_bottom_rear_left_adjust": "0",
"ext_bottom_rear_left_enable": "true",
"ext_bottom_rear_left_support": "rear",
"ext_bottom_rear_right_adjust": "0",
"ext_bottom_rear_right_enable": "true",
"ext_bottom_rear_right_support": "rear",
"ext_bottom_sidewall_support": "true",
"ext_bottom_standoff_diameter": "5.75",
"ext_bottom_standoff_hole_size": "3.4",
"ext_bottom_standoff_insert": "false",
"ext_bottom_standoff_insert_dia": "4.2",
"ext_bottom_standoff_insert_height": "5.1",
"ext_bottom_standoff_pillar": "hex",
"ext_bottom_standoff_reverse": "false",
"ext_bottom_standoff_size": "m3",
"ext_bottom_standoff_support_height": "4",
"ext_bottom_standoff_support_size": "10",
"ext_bottom_standoff_type": "countersunk",
"ext_bottom_standoffs": "false",
"ext_top_front_left_adjust": "0",
"ext_top_front_left_enable": "true",
"ext_top_front_left_support": "front",
"ext_top_front_right_adjust": "0",
"ext_top_front_right_enable": "true",
"ext_top_front_right_support": "front",
"ext_top_rear_left_adjust": "0",
"ext_top_rear_left_enable": "true",
"ext_top_rear_left_support": "rear",
"ext_top_rear_right_adjust": "0",
"ext_top_rear_right_enable": "true",
"ext_top_rear_right_support": "rear",
"ext_top_sidewall_support": "true",
"ext_top_standoff_diameter": "5.75",
"ext_top_standoff_hole_size": "2.75",
"ext_top_standoff_insert": "false",
"ext_top_standoff_insert_dia": "4.2",
"ext_top_standoff_insert_height": "5.1",
"ext_top_standoff_pillar": "hex",
"ext_top_standoff_reverse": "true",
"ext_top_standoff_size": "m3",
"ext_top_standoff_support_height": "4",
"ext_top_standoff_support_size": "10",
"ext_top_standoff_type": "blind",
"ext_top_standoffs": "false",
"fan_size": "0",
"flat_blank_section": "false",
"floorthick": "3",
"front_cover_pattern": "solid",
"gap": "2",
"gpio_opening": "default",
"hd_bays": "2",
"hd_center": "false",
"hd_reverse": "false",
"hd_space": "10",
"hd_y_position": "25",
"hd_z_position": "40",
"indents": "true",
"individual_part": "bottom",
"lower_bottom": "0",
"material_thickness": "0.5",
"move_front": "-1",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"multipcb_bottom_front_left_adjust": "0",
"multipcb_bottom_front_left_enable": "true",
"multipcb_bottom_front_left_support": "front",
"multipcb_bottom_front_right_adjust": "0",
"multipcb_bottom_front_right_enable": "true",
"multipcb_bottom_front_right_support": "front",
"multipcb_bottom_rear_left_adjust": "0",
"multipcb_bottom_rear_left_enable": "true",
"multipcb_bottom_rear_left_support": "rear",
"multipcb_bottom_rear_right_adjust": "0",
"multipcb_bottom_rear_right_enable": "true",
"multipcb_bottom_rear_right_support": "rear",
"multipcb_bottom_sidewall_support": "false",
"multipcb_bottom_standoff_diameter": "5.75",
"multipcb_bottom_standoff_hole_size": "3.4",
"multipcb_bottom_standoff_insert": "false",
"multipcb_bottom_standoff_insert_dia": "4.2",
"multipcb_bottom_standoff_insert_height": "5.1",
"multipcb_bottom_standoff_pillar": "hex",
"multipcb_bottom_standoff_reverse": "false",
"multipcb_bottom_standoff_size": "m2.5",
"multipcb_bottom_standoff_support_height": "4",
"multipcb_bottom_standoff_support_size": "7",
"multipcb_bottom_standoff_type": "countersunk",
"multipcb_bottom_standoffs": "false",
"multipcb_top_front_left_adjust": "0",
"multipcb_top_front_left_enable": "true",
"multipcb_top_front_left_support": "front",
"multipcb_top_front_right_adjust": "0",
"multipcb_top_front_right_enable": "true",
"multipcb_top_front_right_support": "front",
"multipcb_top_rear_left_adjust": "0",
"multipcb_top_rear_left_enable": "true",
"multipcb_top_rear_left_support": "rear",
"multipcb_top_rear_right_adjust": "0",
"multipcb_top_rear_right_enable": "true",
"multipcb_top_rear_right_support": "rear",
"multipcb_top_sidewall_support": "false",
"multipcb_top_standoff_diameter": "5.75",
"multipcb_top_standoff_hole_size": "2.75",
"multipcb_top_standoff_insert": "false",
"multipcb_top_standoff_insert_dia": "4.2",
"multipcb_top_standoff_insert_height": "5.1",
"multipcb_top_standoff_pillar": "hex",
"multipcb_top_standoff_reverse": "true",
"multipcb_top_standoff_size": "m2.5",
"multipcb_top_standoff_support_height": "4",
"multipcb_top_standoff_support_size": "7",
"multipcb_top_standoff_type": "blind",
"multipcb_top_standoffs": "false",
"nas_sbc_location": "top",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"rack_bay1_face": "removable",
"rack_bay1_rear_conduit": "none",
"rack_bay1_rear_fan": "false",
"rack_bay1_rotation": "0",
"rack_bay1_wall": "false",
"rack_bay1_xyz_loc": "[13, 0, 0]",
"rack_bay2_face": "fixed",
"rack_bay2_rear_conduit": "none",
"rack_bay2_rear_fan": "false",
"rack_bay2_rotation": "0",
"rack_bay2_wall": "false",
"rack_bay2_xyz_loc": "[0, 0, 0]",
"rack_bay3_face": "removable",
"rack_bay3_rear_conduit": "none",
"rack_bay3_rear_fan": "false",
"rack_bay3_rotation": "0",
"rack_bay3_wall": "false",
"rack_bay3_xyz_loc": "[10, 0, 0]",
"rack_bay4_face": "fixed",
"rack_bay4_rear_conduit": "none",
"rack_bay4_rear_fan": "false",
"rack_bay4_rotation": "0",
"rack_bay4_wall": "false",
"rack_bay4_xyz_loc": "[0, 0, 0]",
"rack_bay5_face": "removable",
"rack_bay5_rear_conduit": "none",
"rack_bay5_rear_fan": "false",
"rack_bay5_rotation": "0",
"rack_bay5_wall": "false",
"rack_bay5_xyz_loc": "[10, 0, 0]",
"rack_bay6_face": "fixed",
"rack_bay6_rear_conduit": "none",
"rack_bay6_rear_fan": "false",
"rack_bay6_rotation": "0",
"rack_bay6_xyz_loc": "[0, 0, 0]",
"rack_size": "1u+",
"rack_width": "19",
"raise_top": "-1",
"rear_cooling": "fan_hex",
"rear_dualfan_spacing": "6",
"rear_fan": "1",
"rear_fan_center": "false",
"rear_fan_position": "0",
"rear_fan_size": "80",
"rear_io_shield": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_information": "false",
"sbc_model": "c1+",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"section_part": "false",
"sidethick": "3",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
"top_cover_pattern": "solid",
"top_front_left_adjust": "0",
"top_front_left_enable": "true",
"top_front_left_support": "front",
"top_front_right_adjust": "0",
"top_front_right_enable": "true",
"top_front_right_support": "front",
"top_rear_left_adjust": "0",
"top_rear_left_enable": "true",
"top_rear_left_support": "rear",
"top_rear_right_adjust": "0",
"top_rear_right_enable": "true",
"top_rear_right_support": "rear",
"top_sidewall_support": "false",
"top_standoff_diameter": "5.75",
"top_standoff_hole_size": "2.75",
"top_standoff_insert": "false",
"top_standoff_insert_dia": "4.2",
"top_standoff_insert_height": "5.1",
"top_standoff_pillar": "hex",
"top_standoff_reverse": "true",
"top_standoff_size": "m3",
"top_standoff_support_height": "4",
"top_standoff_support_size": "10",
"top_standoff_type": "blind",
"uart_opening": "default",
"view": "model",
"wallthick": "2"
}
},
"fileFormatVersion": "1"

View File

@@ -82,49 +82,49 @@ rack_size = "1u"; //["1u","1u+","1u++","2u"]
Rack_Bay1 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"]
rack_bay1_xyz_loc = [0,0,0]; // [0:.5:450]
rack_bay1_rotation = 0; // [0:90:270]
rack_bay1_face = "vent"; //["open","fixed","removable","vent"]
rack_bay1_face = "fixed"; //["open","fixed","removable","vent"]
rack_bay1_wall = false; // [true,false]
rack_bay1_rear_fan = false; //[true,false]
rack_bay1_rear_conduit = "grommet"; //["none","conduit","grommet","grommets-vertical"]
rack_bay1_rear_conduit = "none"; //["none","conduit","grommet","grommets-vertical"]
Rack_Bay2 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"]
rack_bay2_xyz_loc = [0,0,0]; // [0:.5:450]
rack_bay2_rotation = 0; // [0:90:270]
rack_bay2_face = "vent"; //["open","fixed","removable","vent"]
rack_bay2_face = "fixed"; //["open","fixed","removable","vent"]
rack_bay2_wall = false; // [true,false]
rack_bay2_rear_fan = false; //[true,false]
rack_bay2_rear_conduit = "grommet"; //["none","conduit","grommet","grommets-vertical"]
rack_bay2_rear_conduit = "none"; //["none","conduit","grommet","grommets-vertical"]
Rack_Bay3 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"]
rack_bay3_xyz_loc = [0,0,0]; // [0:.5:450]
rack_bay3_rotation = 0; // [0:90:270]
rack_bay3_face = "vent"; //["open","fixed","removable","vent"]
rack_bay3_face = "fixed"; //["open","fixed","removable","vent"]
rack_bay3_wall = false; // [true,false]
rack_bay3_rear_fan = false; //[true,false]
rack_bay3_rear_conduit = "grommet"; //["none","conduit","grommet","grommets-vertical"]
rack_bay3_rear_conduit = "none"; //["none","conduit","grommet","grommets-vertical"]
Rack_Bay4 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"]
rack_bay4_xyz_loc = [0,0,0]; // [0:.5:450]
rack_bay4_rotation = 0; // [0:90:270]
rack_bay4_face = "vent"; //["open","fixed","removable","vent"]
rack_bay4_face = "fixed"; //["open","fixed","removable","vent"]
rack_bay4_wall = false; // [true,false]
rack_bay4_rear_fan = false; //[true,false]
rack_bay4_rear_conduit = "grommet"; //["none","conduit","grommet","grommets-vertical"]
rack_bay4_rear_conduit = "none"; //["none","conduit","grommet","grommets-vertical"]
Rack_Bay5 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"]
rack_bay5_xyz_loc = [0,0,0]; // [0:.5:450]
rack_bay5_rotation = 0; // [0:90:270]
rack_bay5_face = "vent"; //["open","fixed","removable","vent"]
rack_bay5_face = "fixed"; //["open","fixed","removable","vent"]
rack_bay5_wall = false; // [true,false]
rack_bay5_rear_fan = false; //[true,false]
rack_bay5_rear_conduit = "grommet"; //["none","conduit","grommet","grommets-vertical"]
rack_bay5_rear_conduit = "none"; //["none","conduit","grommet","grommets-vertical"]
Rack_Bay6 = "empty"; // ["empty", "c1+", "c2", "c4", "hc4", "xu4", "xu4q", "mc1", "hc1", "n1", "n2", "n2+", "n2l", "n2lq", "m1", "m1s", "m2", "h2", "h2+", "h3", "h3+", "h4", "h4+", "h4_ultra", "show2", "rpipico", "rpipicow", "rpicm4+ioboard", "rpicm1", "rpicm3", "rpicm3l", "rpicm3+", "rpicm4s", "rpicm4", "rpicm4l", "rpizero", "rpizerow", "rpizero2w", "rpi1a+", "rpi1b+", "rpi2b", "rpi3a+", "rpi3b", "rpi3b+", "rpi4b", "rpi5", "a64", "a64lts", "rock64", "rockpro64", "quartz64a", "quartz64b", "h64b", "star64", "soedge_a-baseboard", "soedge_rk1808", "rock4a", "rock4b", "rock4a+", "rock4b+", "rock4c", "rock4c+", "rock5b-v1.3", "rock5b", "rock5bq", "rock5b+", "nio12l", "vim1", "vim2", "vim3", "vim3l", "vim4", "tinkerboard", "tinkerboard-s", "tinkerboard-2", "tinkerboard-2s", "tinkerboard-r2", "tinkerboard-r2s", "opizero", "opizero2", "opir1plus_lts", "opir1", "opi5", "opi5max", "jetsonnano", "lepotato", "sweetpotato", "tritium-h2+", "tritium-h3", "tritium-h5", "solitude", "alta", "atomicpi", "visionfive2", "visionfive2q", "bpif3", "milk-v_duos", "licheerv+dock", "rak19007", "cnano-avr128da48", "nodemcu-32s", "cs-solarmeter", "feather-m0_express", "feather-m0_wifi", "feather-m4_express"]
rack_bay6_xyz_loc = [0,0,0]; // [0:.5:450]
rack_bay6_rotation = 0; // [0:90:270]
rack_bay6_face = "vent"; //["open","fixed","removable","vent"]
rack_bay6_face = "fixed"; //["open","fixed","removable","vent"]
rack_bay6_rear_fan = false; //[true,false]
rack_bay6_rear_conduit = "grommet"; //["none","conduit","grommet","grommets-vertical"]
rack_bay6_rear_conduit = "none"; //["none","conduit","grommet","grommets-vertical"]
/* [3D Case Adjustments] */
// sbc location x axis
@@ -548,7 +548,9 @@ rack_bay_wall = [rack_bay1_wall, rack_bay2_wall, rack_bay3_wall, rack_bay4_wall,
rack_bay_rear_fan = [rack_bay1_rear_fan, rack_bay2_rear_fan, rack_bay3_rear_fan, rack_bay4_rear_fan, rack_bay5_rear_fan, rack_bay6_rear_fan];
rack_bay_rear_conduit = [rack_bay1_rear_conduit, rack_bay2_rear_conduit, rack_bay3_rear_conduit, rack_bay4_rear_conduit, rack_bay5_rear_conduit, rack_bay6_rear_conduit];
baysize = (450-(2*wallthick))/6;
bay_height = rack_size == "1u" ? 44.45-floorthick : (2 * 44.45)-floorthick;
bay_height = rack_size == "1u" ? 44.45-floorthick :
rack_size == "1u+" ? (44.45/3)+44.45-floorthick :
rack_size == "1u++" ? 2*(44.45/3)+44.45-floorthick : (2 * 44.45)-floorthick;
adj = .01;
$fn=90;
@@ -640,6 +642,11 @@ if (view == "platter") {
grommet_clip("sleeve", 10, r+2, wallthick);
}
}
for(r = [0:ucount-1]) {
if(rack_bay_face[r] == "removable") {
translate([-gap-wallthick-1+(75*(r))+8,-300,0]) bay_tray(depth, r);
}
}
}
if(case_design == "adapter_mini-stx_thin" || case_design == "adapter_mini-stx" || case_design == "adapter_mini-itx_thin" || case_design == "adapter_mini-itx" || case_design == "adapter_flex-atx" || case_design == "adapter_mini-dtx" || case_design == "adapter_dtx" || case_design == "adapter_micro-atx" || case_design == "adapter_atx" || case_design == "adapter_ssi-ceb" || case_design == "adapter_ssi-eeb") {
color("dimgrey",1) case_adapter(case_design);
@@ -1220,6 +1227,8 @@ if (view == "model") {
pcb_loc_y = rack_bay_rotation[i] == 270 ? rack_bay_xyz_loc[i][1]+pcb_width :
rack_bay_rotation[i] == 180 ? rack_bay_xyz_loc[i][1]+pcb_depth :
rack_bay_xyz_loc[i][1];
// pcb_loc_z = rack_bay_sbc[i] == "n2" || rack_bay_sbc[i] == "m1" ? rack_bay_xyz_loc[i][2]+6 :
// rack_bay_sbc[i] == "n2+" ? rack_bay_xyz_loc[i][2]+4.5 : rack_bay_xyz_loc[i][2];
pcb_loc_z = rack_bay_xyz_loc[i][2];
translate([pcb_loc_x+bayadj+75*(i+1) ,pcb_loc_y+wallthick+gap,
@@ -1474,6 +1483,11 @@ if (view == "part") {
grommet_clip("sleeve", 10, r+2, wallthick);
}
}
for(r = [0:ucount-1]) {
if(rack_bay_face[r] == "removable") {
translate([-gap-wallthick-1+(75*(r))+8,-300,0]) bay_tray(depth, r);
}
}
}
// ui access panel
if(bottom_access_panel_enable == true) {