fixed spacer and right side placment issue, updated readme.md, code cleanup and example case accessories
This commit is contained in:
11
README.md
11
README.md
@@ -93,7 +93,7 @@ The *3D Case Adjustments* tab makes up the bulk of the possible case adjustments
|
||||
|
||||
|
||||
### Fan and Vent Openings Tab
|
||||
This tab handles the fan and cooling options for case designs. The *top cover pattern* and *bottom cover pattern* contain several options for the creation of vent patterns that cover the complete top and bottom respectively, including a solid covering. The *cooling* pickbox selects fan and vent openings exclusively for the heatsink associated with the device in SBC Model Framework.
|
||||
This tab handles the fan and cooling options for case designs. The *top cover pattern*, *bottom cover pattern* and *front cover pattern* contain several options for the creation of vent patterns that cover the complete panel, including a solid covering. The *cooling* pickbox selects fan and vent openings exclusively for the heatsink associated with the device in SBC Model Framework.
|
||||
```
|
||||
disable - turns off the heatsink model and mask
|
||||
off - heatsink model is off, mask is on and default will be used
|
||||
@@ -102,7 +102,7 @@ none - heatsink model is on and mask is off.
|
||||
fan and vent pattern selections - open, fan_open, fan_1, fan_2, fan_hex, vent, vent_hex_5mm, vent_hex_8mm
|
||||
custom - uses the file ./SBC_Model_Framework/customfan.dxf
|
||||
```
|
||||
The *fan size* allows the selection of different fan size masks over the default size selected by 0.
|
||||
The *fan size* allows the selection of different fan size masks over the default size selected by 0. The rear fan entries are for the *panel_nas* case design and allow for the same types of fan adjustments as the heatsink. There is also the choice of one or two rear fans as well as additional adjustments for the position and spacing of them.
|
||||
|
||||
|
||||
### Bottom Access Panel Tab
|
||||
@@ -110,7 +110,7 @@ This tab allows the creation of a bottom access panel and its entries are self e
|
||||
|
||||
|
||||
### Options and Accessories
|
||||
The entrys in this tab allow for the enablement and selection of different GPIO and UART openings based on their type identifier in SBC_Model_Framework.
|
||||
The entrys in this tab allow for the enablement and selection of different options and accessories. It includes case indents, GPIO, and UART openings based on their type identifier in SBC_Model_Framework. It also contains hard drive options for the panel_nas case.
|
||||
|
||||
#### GPIO Selections
|
||||
```
|
||||
@@ -130,6 +130,11 @@ mask opening selections - open, knockout
|
||||
|
||||
The *indent* checkbox enables indents for a select group of components defined in SBC Model Framework. The currently support components are - video-hmdi_a, video-hdmi_micro, video-hdmi_mini, power-pwr5.5_7.5x11.5, power-pwr2.5_5x7.5, usb2-micro, usbc-single_horizontal, audio-jack_3.5. The *accessory name* pickbox uses the unique accessory group name to associate a given accessory set with a case design. Entries are stored in the file sbc_case_builder_accessories.cfg which is covered in detail with the Accessory Subsystem in this document. The remaining two entries select the color and proportional font used with the *sbc information* display when enabled in the *View* tab.
|
||||
|
||||
#### NAS HD Options
|
||||
The *nas sbc location* pickbox allows the positioning of the SBC at the top or bottom of a NAS case. *hd bays* sets the number of drive bays, *hd reverse* checkbox rotates the drives 180 degrees while *hd center* centers the drives in the x-axis. The next entry, *hd space* determines the spacing between drives and *hd y position* and *hd z position* sets the respective axis locations.
|
||||
|
||||
#### Accessory Group Name
|
||||
The *accessory name* allows the selection of an accessory group to be associated with the current case. These groups are located in the file sbc_case_builder_accessories.cfg and provide a means to add or subtract geometry, models and add items to the print platter. See the *Accessory Subsystem* area below for further details and use.
|
||||
|
||||
### Standoff Tabs
|
||||
There are 3 types of standoffs available in the user interface, SBC Standoffs, Extended Case Standoffs and Multi-PCB Standoffs. The SBC standoffs control adjustments for the SBC or pcbid 0 as defined by the entry in SBC Model Framework file ./SBC_Model_Framework/sbc_models.cfg. The Extended Case Standoffs control case corner standoffs when the case exceeds the SBC size by the *SBC Standoff Support Size*. The Multi-PCB standoffs are used for additional PCB in multi-PCB configurations as defined in ./SBC_Model_Framework/sbc_models.cfg e.g. pcbid 1, pcbid 2, etc. All three standoff types have similar controls made up of a global tab and individual Settings tab in the GUI.
|
||||
|
||||
@@ -63,16 +63,18 @@ module case_bottom(case_design) {
|
||||
}
|
||||
}
|
||||
if(case_design == "panel_nas") {
|
||||
x_adj = pcb_width > 100 ? width-2*sidethick : width-2*(gap+sidethick);
|
||||
xtab_adj = pcb_width > 100 ? width-gap-2*sidethick-adj : width-gap-2*(gap+sidethick)-adj;
|
||||
union() {
|
||||
translate([-gap,-wallthick,0])
|
||||
cube([width-2*(gap+sidethick),depth-(2*wallthick),wallthick]);
|
||||
cube([x_adj,depth-(2*wallthick),floorthick]);
|
||||
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])
|
||||
translate([xtab_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])
|
||||
translate([xtab_adj,40-wallthick-gap+adj,0])
|
||||
cube([sidethick+2*adj,10,floorthick]);
|
||||
}
|
||||
}
|
||||
@@ -140,12 +142,14 @@ module case_bottom(case_design) {
|
||||
if(class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_front") {
|
||||
if((pcbhole_y >= pcb_depth+case_offset_y-10 && pcbhole_x >= width-10) ||
|
||||
(ext_bottom_standoffs == true && ext_bottom_front_right_enable == true)) {
|
||||
translate([width-wallthick-gap-wallthick-4+adj,wallthick-gap+pcb_depth+case_offset_y-14,floorthick+3.4])
|
||||
rotate([90,0,90]) cylinder(d=10, h=4, $fn=6);
|
||||
translate([width-wallthick-gap-wallthick-4+adj,
|
||||
wallthick-gap+pcb_depth+case_offset_y-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+case_offset_y-8,floorthick+3.4])
|
||||
rotate([90,0,90]) cylinder(d=10, h=4, $fn=6);
|
||||
translate([width-wallthick-gap-wallthick-4+adj,
|
||||
wallthick+gap+pcb_depth+case_offset_y-8,floorthick+3.4])
|
||||
rotate([90,0,90]) cylinder(d=10, h=4, $fn=6);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -129,16 +129,18 @@ module case_side(case_design, side) {
|
||||
}
|
||||
}
|
||||
if(case_design == "panel_nas") {
|
||||
x_adj = pcb_width > 100 ? width-2*sidethick : width-2*(gap+sidethick);
|
||||
xtab_adj = pcb_width > 100 ? width-gap-2*sidethick-adj : width-gap-2*(gap+sidethick)-adj;
|
||||
if(side == "rear") {
|
||||
difference() {
|
||||
union() {
|
||||
translate([-gap,-(2*wallthick),0])
|
||||
cube([width-2*(gap+sidethick),wallthick,case_z-wallthick]);
|
||||
cube([x_adj,wallthick,case_z-wallthick]);
|
||||
// bottom right tab
|
||||
translate([width-(3*sidethick)-adj,-(2*wallthick),20])
|
||||
translate([xtab_adj,-(2*wallthick),20])
|
||||
cube([sidethick+(2*adj),wallthick,10]);
|
||||
// top right tab
|
||||
translate([width-(3*sidethick)-adj,-(2*wallthick),case_z-30])
|
||||
translate([xtab_adj,-(2*wallthick),case_z-30])
|
||||
cube([sidethick+(2*adj),wallthick,10]);
|
||||
// bottom left tab
|
||||
translate([-sidethick-gap-adj,-(2*wallthick),20])
|
||||
@@ -148,7 +150,7 @@ module case_side(case_design, side) {
|
||||
cube([sidethick+(2*adj),wallthick,10]);
|
||||
if(hd_bays > 3) {
|
||||
// middle right tab
|
||||
translate([width-(3*sidethick)-adj,-(2*wallthick),(case_z/2)-5])
|
||||
translate([xtab_adj,-(2*wallthick),(case_z/2)-5])
|
||||
cube([sidethick+(2*adj),wallthick,10]);
|
||||
// middle left tab
|
||||
translate([-sidethick-gap-adj,-(2*wallthick),(case_z/2)-5])
|
||||
@@ -182,12 +184,12 @@ module case_side(case_design, side) {
|
||||
difference() {
|
||||
union() {
|
||||
translate([-gap,depth-(4*wallthick),floorthick])
|
||||
cube([width-2*(gap+sidethick),wallthick,case_z-3*wallthick]);
|
||||
cube([x_adj,wallthick,case_z-3*wallthick]);
|
||||
// bottom right tab
|
||||
translate([width-(3*sidethick)-adj,depth-(4*wallthick),20])
|
||||
translate([xtab_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])
|
||||
translate([xtab_adj,depth-(4*wallthick),case_z-30])
|
||||
cube([sidethick+(2*adj),wallthick,10]);
|
||||
// bottom left tab
|
||||
translate([-sidethick-gap-adj,depth-(4*wallthick),20])
|
||||
@@ -197,14 +199,13 @@ module case_side(case_design, side) {
|
||||
cube([sidethick+(2*adj),wallthick,10]);
|
||||
if(hd_bays > 3) {
|
||||
// middle right tab
|
||||
translate([width-(3*sidethick)-adj,depth-(4*wallthick),(case_z/2)-5])
|
||||
translate([xtab_adj,depth-(4*wallthick),(case_z/2)-5])
|
||||
cube([sidethick+(2*adj),wallthick,10]);
|
||||
// middle left tab
|
||||
translate([-sidethick-gap-adj,depth-(4*wallthick),(case_z/2)-5])
|
||||
cube([sidethick+(2*adj),wallthick,10]);
|
||||
}
|
||||
}
|
||||
|
||||
// front cover pattern
|
||||
if(front_cover_pattern != "solid" && case_design == "panel_nas") {
|
||||
if(front_cover_pattern == "hex_5mm" && hd_bays < 6) {
|
||||
@@ -248,89 +249,95 @@ module case_side(case_design, side) {
|
||||
}
|
||||
if(side == "right") {
|
||||
difference() {
|
||||
translate([width-2*sidethick,-(3*wallthick)-gap,-2*wallthick])
|
||||
rotate([0,-90,0]) slab([case_z+(3*wallthick),depth+2*wallthick,sidethick],corner_fillet);
|
||||
if(case_design == "panel_nas" && pcb_width > 100) {
|
||||
translate([pcb_width+sidethick+gap+case_offset_x,-(3*wallthick)-gap,-2*wallthick])
|
||||
rotate([0,-90,0]) slab([case_z+(3*wallthick),depth+2*wallthick,sidethick],corner_fillet);
|
||||
}
|
||||
else {
|
||||
translate([width-2*sidethick+gap,-(3*wallthick)-gap,-2*wallthick])
|
||||
rotate([0,-90,0]) slab([case_z+(3*wallthick),depth+2*wallthick,sidethick],corner_fillet);
|
||||
}
|
||||
|
||||
// rear edge top tab openings
|
||||
translate([width-adj-(3*sidethick),-2*wallthick+adj,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]);
|
||||
translate([width-3*sidethick+gap-adj,-2*wallthick+adj,case_z-30])
|
||||
cube([2*sidethick+2*adj,wallthick+tol,20]);
|
||||
translate([width-3*sidethick+gap-adj,-(4*wallthick)+2*adj,case_z-20-tol])
|
||||
cube([2*sidethick+(2*adj),2*wallthick,10+tol]);
|
||||
|
||||
// rear edge bottom tab openings
|
||||
translate([width-adj-(3*sidethick),-2*wallthick+adj,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]);
|
||||
translate([width-3*sidethick+gap-adj,-2*wallthick+adj,20])
|
||||
cube([2*sidethick+2*adj,wallthick+tol,20]);
|
||||
translate([width-3*sidethick+gap-adj,-(4*wallthick)+2*adj,30-tol])
|
||||
cube([2*sidethick+(2*adj),3*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)-adj,depth-(4*wallthick),case_z-20-tol])
|
||||
cube([sidethick+(2*adj),3*wallthick,10+tol]);
|
||||
translate([width-3*sidethick+gap-adj,depth-(4*wallthick),case_z-30])
|
||||
cube([2*sidethick+(2*adj),wallthick,20]);
|
||||
translate([width-3*sidethick+gap-adj,depth-(4*wallthick),case_z-20-tol])
|
||||
cube([2*sidethick+(2*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)-adj,depth-(4*wallthick),30-tol])
|
||||
cube([sidethick+(2*adj),3*wallthick,10+tol]);
|
||||
translate([width-3*sidethick+gap-adj,depth-(4*wallthick),20])
|
||||
cube([2*sidethick+(2*adj),wallthick,20]);
|
||||
translate([width-3*sidethick+gap-adj,depth-(4*wallthick),30-tol])
|
||||
cube([2*sidethick+(2*adj),3*wallthick,10+tol]);
|
||||
|
||||
if(hd_bays > 3) {
|
||||
// front edge middle tab openings
|
||||
translate([width-adj-(3*sidethick),depth-(4*wallthick),(case_z/2)-5])
|
||||
cube([sidethick+2*adj,wallthick+tol,20]);
|
||||
translate([width-adj-(3*sidethick),depth-(4*wallthick),(case_z/2)-5+10])
|
||||
cube([sidethick+(2*adj),3*wallthick,10+tol]);
|
||||
translate([width-3*sidethick+gap-adj,depth-(4*wallthick),(case_z/2)-5])
|
||||
cube([2*sidethick+2*adj,wallthick+tol,20]);
|
||||
translate([width-3*sidethick+gap-adj,depth-(4*wallthick),(case_z/2)-5+10])
|
||||
cube([2*sidethick+(2*adj),2*wallthick,10+tol]);
|
||||
|
||||
// rear edge middle tab openings
|
||||
translate([width-adj-(3*sidethick),-2*wallthick+adj,(case_z/2)-5])
|
||||
cube([sidethick+2*adj,wallthick+tol,20]);
|
||||
translate([width-adj-(3*sidethick),-(4*wallthick),(case_z/2)-5+10])
|
||||
cube([sidethick+(2*adj),2*wallthick,10+tol]);
|
||||
translate([width-3*sidethick+gap-adj,-2*wallthick+adj,(case_z/2)-5])
|
||||
cube([2*sidethick+2*adj,wallthick+tol,20]);
|
||||
translate([width-3*sidethick+gap-adj,-(4*wallthick),(case_z/2)-5+10])
|
||||
cube([2*sidethick+(2*adj),2*wallthick,10+tol]);
|
||||
}
|
||||
|
||||
// hd holes for bays
|
||||
if(hd_reverse == false) {
|
||||
for( i=[0:1:hd_bays-1]) {
|
||||
translate([(width-101.6)-(3*sidethick)-gap,
|
||||
translate([(width-101.6)-(3*sidethick)-gap+adj,
|
||||
-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
|
||||
hd_holes(3.5, "portrait", "both", sidethick+2);
|
||||
hd_holes(3.5, "portrait", "both", 2*sidethick+2);
|
||||
}
|
||||
}
|
||||
else {
|
||||
for( i=[0:1:hd_bays-1]) {
|
||||
translate([width-(3*sidethick)-adj,-(3*wallthick)-gap+hd_y_position+147,
|
||||
hd_z_position+(hd_space+27.1)*i])
|
||||
rotate([0,0,180]) hd_holes(3.5, "portrait", "both", sidethick+2);
|
||||
rotate([0,0,180]) hd_holes(3.5, "portrait", "both", 2*sidethick+2);
|
||||
}
|
||||
}
|
||||
// top edge front tab opening
|
||||
translate([width-(3*sidethick)-adj,depth-(3*wallthick)-gap-adj-30,
|
||||
translate([width-3*sidethick+gap-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-tol,
|
||||
cube([2*sidethick+(2*adj),20,floorthick+tol]);
|
||||
translate([width-3*sidethick+gap-adj,depth-(3*wallthick)-gap-adj-30-tol,
|
||||
case_z-(2*floorthick)])
|
||||
cube([sidethick+2*adj,10+tol,(3*floorthick)+adj]);
|
||||
cube([2*sidethick+(2*adj),10+tol,(3*floorthick)+adj]);
|
||||
|
||||
// top edge rear tab opening
|
||||
translate([width-(3*sidethick)-adj,40-wallthick-gap+adj,
|
||||
translate([width-3*sidethick+gap-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-tol,
|
||||
cube([2*sidethick+(2*adj),10+adj,floorthick+tol]);
|
||||
translate([width-3*sidethick+gap-adj,30-wallthick-gap+adj-tol,
|
||||
case_z-(2*floorthick)])
|
||||
cube([sidethick+(2*adj),10+tol,(3*floorthick)+adj]);
|
||||
cube([2*sidethick+(2*adj),10+tol,(3*floorthick)+adj]);
|
||||
|
||||
// bottom edge front tab opening
|
||||
translate([width-(3*sidethick)-adj,depth-(3*wallthick)-gap-adj-30-tol,-tol])
|
||||
cube([sidethick+2*adj,20+tol,floorthick+tol]);
|
||||
translate([width-(3*sidethick)-adj,depth-(3*wallthick)-gap-adj-30-tol,-(3*floorthick)+adj])
|
||||
cube([sidethick+2*adj,10+tol,(3*floorthick)+adj]);
|
||||
translate([width-3*sidethick+gap-adj,depth-(3*wallthick)-gap-adj-30-tol,-tol])
|
||||
cube([2*sidethick+2*adj,20+tol,floorthick+tol]);
|
||||
translate([width-3*sidethick+gap-adj,depth-(3*wallthick)-gap-adj-30-tol,-(3*floorthick)+adj])
|
||||
cube([2*sidethick+2*adj,10+tol,(3*floorthick)+adj]);
|
||||
|
||||
// bottom edge rear tab opening
|
||||
translate([width-(3*sidethick)-adj,30-wallthick-gap+adj-tol,-tol])
|
||||
cube([sidethick+2*adj,20+tol,floorthick+tol]);
|
||||
translate([width-(3*sidethick)-adj,30-wallthick-gap+adj-tol,-(3*floorthick)+adj])
|
||||
cube([sidethick+(2*adj),10+tol,(3*floorthick)+adj]);
|
||||
translate([width-3*sidethick+gap-adj,30-wallthick-gap+adj-tol,-tol])
|
||||
cube([2*sidethick+2*adj,20+tol,floorthick+tol]);
|
||||
translate([width-3*sidethick+gap-adj,30-wallthick-gap+adj-tol,-(3*floorthick)+adj])
|
||||
cube([2*sidethick+(2*adj),10+tol,(3*floorthick)+adj]);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -400,9 +407,9 @@ module case_side(case_design, side) {
|
||||
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,
|
||||
translate([-gap-sidethick-adj,30-wallthick-gap+adj,
|
||||
case_z-(2*floorthick)])
|
||||
cube([sidethick+(2*adj),10,floorthick+tol]);
|
||||
cube([sidethick+(2*adj),20,floorthick+tol]);
|
||||
translate([-gap-sidethick-adj,30-wallthick-gap+adj-tol,
|
||||
case_z-(2*floorthick)])
|
||||
cube([sidethick+(2*adj),10+tol,(3*floorthick)+adj]);
|
||||
|
||||
@@ -71,19 +71,21 @@ module case_top(case_design) {
|
||||
}
|
||||
}
|
||||
if(case_design == "panel_nas") {
|
||||
x_adj = pcb_width > 100 ? width-2*sidethick : width-2*(gap+sidethick);
|
||||
xtab_adj = pcb_width > 100 ? width-gap-2*sidethick-adj : width-gap-2*(gap+sidethick)-adj;
|
||||
union() {
|
||||
translate([-gap,-wallthick,case_z-2*wallthick])
|
||||
cube([width-2*(gap+sidethick),depth-(2*wallthick),wallthick]);
|
||||
translate([-gap,-wallthick,case_z-2*floorthick])
|
||||
cube([x_adj,depth-(2*wallthick),floorthick]);
|
||||
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,
|
||||
translate([xtab_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,
|
||||
translate([xtab_adj,40-wallthick-gap+adj,
|
||||
case_z-2*floorthick])
|
||||
cube([sidethick+2*adj,10,floorthick]);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -87,13 +87,13 @@ case_offset_tz = 0; //[-30:.01:300]
|
||||
// additional z axis case bottom size
|
||||
case_offset_bz = 0; //[0:.01:300]
|
||||
// case wall thickness
|
||||
wallthick = 2; //[1:.01:5]
|
||||
wallthick = 2; //[1:.25:5]
|
||||
// case floor and ceiling thickness
|
||||
floorthick = 2; //[1:.01:5]
|
||||
floorthick = 2; //[1:.25:5]
|
||||
// side wall thickness for tray_side and panel_nas cases only
|
||||
sidethick = 2; //[1:.01:5]
|
||||
sidethick = 2; //[1:.25:5]
|
||||
// distance between pcb and case
|
||||
gap = 1; //[.5:.01:5]
|
||||
gap = 1; //[.5:.25:5]
|
||||
// corner fillets
|
||||
corner_fillet = 3; //[0:.5:9]
|
||||
// edge fillets
|
||||
@@ -111,14 +111,16 @@ bottom_cover_pattern = "solid"; //[solid,hex_5mm,hex_8mm,linear_vertical,linear_
|
||||
// heatsink opening
|
||||
cooling = "default"; // [default,none,open,fan_open,fan_1,fan_2,fan_hex,vent,vent_hex_5mm,vent_hex_8mm,custom]
|
||||
fan_size = 0; // [0,25,30,40,50,60,70,80,92]
|
||||
// rear fan number for nas cases
|
||||
// number of rear fans for nas cases
|
||||
rear_fan = 1; // [1:2]
|
||||
// rear fan x-axis center
|
||||
rear_fan_center = false; // [true,false]
|
||||
// rear fan opening
|
||||
rear_cooling = "fan_hex"; // [fan_open,fan_1,fan_2,fan_hex,custom]
|
||||
rear_fan_size = 80; // [0,25,30,40,50,60,70,80,92]
|
||||
// rear fan z-axis position
|
||||
rear_fan_position = 0; // [0:1:300]
|
||||
// space between dual rear fans
|
||||
rear_dualfan_spacing = 6; // [0:1:50]
|
||||
|
||||
/* [Bottom Access Panel] */
|
||||
@@ -137,18 +139,19 @@ uart_opening = "default"; // [default,none,open,knockout]
|
||||
indents = true;
|
||||
// nas sbc location
|
||||
nas_sbc_location = "top"; // ["top","bottom"]
|
||||
// number of nas drive bays
|
||||
hd_bays = 2; // [1:6]
|
||||
// rotate hd 180 degrees in the z-axis
|
||||
hd_reverse = false; // [true, false]
|
||||
// center hd in the x-axis
|
||||
hd_center = false; // [true, false]
|
||||
// number of nas drive bays
|
||||
hd_bays = 2; // [1:6]
|
||||
// distance between drives
|
||||
hd_space = 10; // [1:50]
|
||||
hd_y_position = 25; // [0:300]
|
||||
hd_z_position = 40; // [0:300]
|
||||
hd_space = 10; // [1:50]
|
||||
|
||||
// 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"]
|
||||
accessory_name = "none"; // ["none", "hk_uart", "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_panel_nas", "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_panel_nas", "h3_ultimate", "h3_ultimate2", "h4_panel_nas", "show2_shell", "rpi5_m2hat", "rock5b", "adapter_mini-stx_m1s", "nas", "cs_solarmeter", "n2l_env_sensors", "avr_env_sensors", "adafruit_solar_charger"]
|
||||
// sbc information text color
|
||||
text_color = "Green"; // [Green, Black, Dimgrey, White, Yellow, Orange, Red, DarkbBlue]
|
||||
// sbc information text font
|
||||
@@ -377,14 +380,17 @@ 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 = case_design == "panel_nas" && pcb_width <= 100 ? pcb_width+(2*(sidethick+gap))+case_offset_x+(101.6-pcb_width) : case_design == "panel_nas" && pcb_width > 100 ? pcb_width+(2*(sidethick+gap))+case_offset_x+(3*gap) : 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) : case_design == "panel_nas" && pcb_width > 100 ? pcb_width+2*(sidethick+gap)+case_offset_x : 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_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));
|
||||
hd_spacer = case_design == "panel_nas" ? (width-2*(sidethick+gap)-101.6) : 0;
|
||||
//hd_spacer = case_design == "panel_nas" && pcb_width > 100 ? (pcb_width+case_offset_x+2*gap)-101.6 :
|
||||
// case_design == "panel_nas" && pcb_width <= 100 ? (width-2*(sidethick+gap)-101.6) : 0;
|
||||
hd_spacer = case_design == "panel_nas" && pcb_width > 100 ? (pcb_width+case_offset_x+2*gap)-101.6 :
|
||||
case_design == "panel_nas" && pcb_width <= 100 ? (width-2*(sidethick+gap)-101.6) : 0;
|
||||
|
||||
/* [Hidden] */
|
||||
top_standoff = [top_standoff_size,
|
||||
@@ -486,12 +492,12 @@ if (view == "platter") {
|
||||
translate([width+25,0,-gap]) rotate([-90,0,0]) case_side(case_design,"rear");
|
||||
translate([width+25,2*(case_z)+10,-depth+wallthick+gap+floorthick])
|
||||
rotate([90,0,0]) case_side(case_design,"front");
|
||||
translate([2.5*width,0,-width+(2*wallthick)+gap]) rotate([0,-90,-90])
|
||||
translate([2.5*width,0,-width+(3*sidethick)+gap]) rotate([0,-90,-90])
|
||||
case_side(case_design,"right");
|
||||
translate([-20,0,-gap]) rotate([0,90,90])
|
||||
case_side(case_design,"left");
|
||||
// nas hd spacers
|
||||
if(case_design == "panel_nas" && pcb_width > 100) {
|
||||
if(case_design == "panel_nas" && (pcb_width > 100 || width > 101.6)) {
|
||||
if(hd_center == false) {
|
||||
translate([0,-35,0]) rotate([270,0,0]) cableholder_spacer(hd_spacer-9.4);
|
||||
}
|
||||
@@ -693,18 +699,18 @@ if (view == "model") {
|
||||
if(hd_center == false) {
|
||||
translate([-gap,-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
|
||||
hd35("portrait", [false,0,0,"default"]);
|
||||
if(pcb_width > 100) {
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
if(pcb_width > 100 || width > 101.6) {
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
28.5-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer-9.4);
|
||||
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
-31-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer-9.4);
|
||||
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
-73-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer-9.4);
|
||||
@@ -714,64 +720,79 @@ if (view == "model") {
|
||||
translate([-gap+hd_spacer/2,
|
||||
-(3*wallthick)-gap+hd_y_position,hd_z_position+(hd_space+27.1)*i])
|
||||
hd35("portrait", [false,0,0,"default"]);
|
||||
if(pcb_width > 100) {
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
if(pcb_width > 100 || width > 101.6) {
|
||||
// right side spacers
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
28.5-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer-9.4);
|
||||
hd_z_position+6.5+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer/2-9.4);
|
||||
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
-31-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer-9.4);
|
||||
hd_z_position+6.5+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer/2-9.4);
|
||||
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
-73-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer-9.4);
|
||||
hd_z_position+6.5+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer/2-9.4);
|
||||
// left side spacers
|
||||
translate([-(hd_spacer/2-9.4)-gap+hd_spacer/2,
|
||||
28.5-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6.5+(hd_space+27.1)*i]) rotate([0,0,180])
|
||||
cableholder_spacer(hd_spacer/2-9.4);
|
||||
|
||||
translate([-(hd_spacer/2-9.4)-gap+hd_spacer/2,
|
||||
-31-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6.5+(hd_space+27.1)*i]) rotate([0,0,180])
|
||||
cableholder_spacer(hd_spacer/2-9.4);
|
||||
|
||||
translate([-(hd_spacer/2-9.4)-gap+hd_spacer/2,
|
||||
-73-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6.5+(hd_space+27.1)*i]) rotate([0,0,180])
|
||||
cableholder_spacer(hd_spacer/2-9.4);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(hd_reverse == true) {
|
||||
if(hd_center == false) {
|
||||
translate([-gap+101.6,-(3*wallthick)-gap+hd_y_position+147,
|
||||
translate([101.6-gap,-(3*wallthick)-gap+hd_y_position+147,
|
||||
hd_z_position+(hd_space+27.1)*i])
|
||||
rotate([0,0,180]) hd35("portrait", [false,0,0,"default"]);
|
||||
if(pcb_width > 100) {
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
if(pcb_width > 100 || width > 101.6) {
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
17-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6.5+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer-9.4);
|
||||
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
-25-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6.5+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer-9.4);
|
||||
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
-84.5-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6.5+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer-9.4);
|
||||
}
|
||||
}
|
||||
if(hd_center == true) {
|
||||
translate([-gap+101.6+hd_spacer/2,
|
||||
translate([101.6-gap+hd_spacer/2,
|
||||
-(3*wallthick)-gap+hd_y_position+147,
|
||||
hd_z_position+(hd_space+27.1)*i])
|
||||
rotate([0,0,180]) hd35("portrait", [false,0,0,"default"]);
|
||||
if(pcb_width > 100) {
|
||||
if(pcb_width > 100 || width > 101.6) {
|
||||
// right side spacers
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
17-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6.5+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer/2-9.4);
|
||||
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
-25-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6.5+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer/2-9.4);
|
||||
|
||||
translate([101.6-gap+wallthick+hd_spacer-11.4,
|
||||
translate([101.6-gap+hd_spacer-9.4,
|
||||
-84.5-(3*wallthick)-gap+hd_y_position+101.6,
|
||||
hd_z_position+6.5+(hd_space+27.1)*i])
|
||||
cableholder_spacer(hd_spacer/2-9.4);
|
||||
@@ -794,28 +815,30 @@ if (view == "model") {
|
||||
}
|
||||
}
|
||||
}
|
||||
fan_model = rear_fan_size == 92 ? "box92x10" : rear_fan_size == 80 ? "box80x10" : rear_fan_size == 60 ? "box60x10" : "box40x10";
|
||||
if(rear_fan == 1 || rear_fan == 2) {
|
||||
if(rear_fan_center == false) {
|
||||
translate([-1+(101.6-rear_fan_size)/2,10-wallthick,rear_fan_position])
|
||||
rotate([90,0,0]) fans(fan_model,[false,0,0,"default"]);
|
||||
}
|
||||
if(rear_fan_center == true) {
|
||||
translate([-1+(101.6-rear_fan_size)/2+(width-2*(sidethick+gap)-101.6)/2,
|
||||
10-wallthick,rear_fan_position]) rotate([90,0,0])
|
||||
fans(fan_model,[false,0,0,"default"]);
|
||||
}
|
||||
}
|
||||
if(rear_fan == 2) {
|
||||
if(rear_fan_center == false) {
|
||||
translate([-1+(101.6-rear_fan_size)/2,10-wallthick,
|
||||
rear_fan_position+rear_dualfan_spacing+rear_fan_size])
|
||||
if(move_rear >= 0) {
|
||||
fan_model = rear_fan_size == 92 ? "box92x10" : rear_fan_size == 80 ? "box80x10" : rear_fan_size == 60 ? "box60x10" : "box40x10";
|
||||
if(rear_fan == 1 || rear_fan == 2) {
|
||||
if(rear_fan_center == false) {
|
||||
translate([-1+(101.6-rear_fan_size)/2,10-wallthick,rear_fan_position])
|
||||
rotate([90,0,0]) fans(fan_model,[false,0,0,"default"]);
|
||||
}
|
||||
if(rear_fan_center == true) {
|
||||
translate([-1+(101.6-rear_fan_size)/2+(width-2*(sidethick+gap)-101.6)/2,
|
||||
10-wallthick,rear_fan_position]) rotate([90,0,0])
|
||||
fans(fan_model,[false,0,0,"default"]);
|
||||
}
|
||||
}
|
||||
if(rear_fan_center == true) {
|
||||
translate([-1+(101.6-rear_fan_size)/2+(width-2*(sidethick+gap)-101.6)/2,
|
||||
10-wallthick,rear_fan_position+rear_dualfan_spacing+rear_fan_size])
|
||||
rotate([90,0,0]) fans(fan_model,[false,0,0,"default"]);
|
||||
if(rear_fan == 2) {
|
||||
if(rear_fan_center == false) {
|
||||
translate([-1+(101.6-rear_fan_size)/2,10-wallthick,
|
||||
rear_fan_position+rear_dualfan_spacing+rear_fan_size])
|
||||
rotate([90,0,0]) fans(fan_model,[false,0,0,"default"]);
|
||||
}
|
||||
if(rear_fan_center == true) {
|
||||
translate([-1+(101.6-rear_fan_size)/2+(width-2*(sidethick+gap)-101.6)/2,
|
||||
10-wallthick,rear_fan_position+rear_dualfan_spacing+rear_fan_size])
|
||||
rotate([90,0,0]) fans(fan_model,[false,0,0,"default"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1129,7 +1152,7 @@ if (view == "part") {
|
||||
}
|
||||
if(individual_part == "accessories") {
|
||||
// nas hd spacers
|
||||
if(case_design == "panel_nas" && pcb_width > 100) {
|
||||
if(case_design == "panel_nas" && (pcb_width > 100 || width > 101.6)) {
|
||||
rotate([270,0,0]) cableholder_spacer(hd_spacer-9.4);
|
||||
}
|
||||
// ui access panel
|
||||
@@ -1191,7 +1214,7 @@ if(case_design == "tray" || case_design == "tray_vu5" || case_design == "tray_vu
|
||||
}
|
||||
else {
|
||||
if(case_design == "panel_nas") {
|
||||
echo(width=width+(101.6-width+(2*sidethick)),depth=depth,top=top_height,bottom=bottom_height, height=case_z+(3*wallthick));
|
||||
echo(width=width+hd_spacer,depth=depth,top=top_height,bottom=bottom_height, height=case_z+(3*wallthick));
|
||||
echo(drive_spacer=hd_spacer);
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -190,6 +190,10 @@ accessory_data = [
|
||||
"add1","keyhole",40,30,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[[7,3.2,6,2]],[true,10,2,"default"]],
|
||||
|
||||
// Odroid-HC4
|
||||
["hc4_panel_nas",
|
||||
"add2","hk_hc4_oled_holder",35,178,2.99,"bottom",[0,0,0],["case",true,true,false],[0,0,2],[0],[true,10,2,"default"],
|
||||
"model","hk_hc4_oled",35,178,2.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[0],[true,10,2,"default"]],
|
||||
|
||||
["hc4_shell_drivebox2.5",
|
||||
"add2","hk_hc4_oled_holder",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,2],[0],[true,10,2,"default"],
|
||||
"model","hk_hc4_oled",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
|
||||
@@ -407,6 +411,9 @@ accessory_data = [
|
||||
"platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"],
|
||||
"platter","button_assembly",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"]],
|
||||
|
||||
["h3_panel_nas",
|
||||
"model","hk_pwr_button",20,175,133.45,"top",[0,0,0],["sbc-case_z",true,true,true],[0,0,0],[0],[true,10,2,"default"]],
|
||||
|
||||
["h3_ultimate",
|
||||
"sub","vent",-3.5,30,58,"top",[0,0,90],["case",false,false,false],[2,12,4],[1,17,"vertical",1],[false,10,2,"default"],
|
||||
"sub","vent",111.5,30,58,"top",[0,0,90],["case",true,false,false],[2,12,4],[1,17,"vertical",1],[false,10,2,"default"],
|
||||
@@ -459,6 +466,10 @@ accessory_data = [
|
||||
"model","hk_pwr_button",18,113,55.25,"top",[0,0,180],["case",false,false,true],[0,0,0],[0],[true,10,2,"default"],
|
||||
"model","dsub",18,-1,46,"top",[90,90,0],["case",false,false,false],[0,0,0],["db9","female"],[true,10,2,"default"]],
|
||||
|
||||
// Odroid-H4
|
||||
["h4_panel_nas",
|
||||
"model","hk_pwr_button",20,175,206,"top",[0,0,0],["sbc-case_z",true,true,true],[0,0,0],[0],[true,10,2,"default"]],
|
||||
|
||||
["show2_shell",
|
||||
"model","hk_wb2",6.25,24.675,16,"bottom",[0,0,180],["sbc",true,true,true],[0,0,0],[0],[false,10,2,"default"],
|
||||
"sub","rectangle",.5,8,8.5,"top",[0,0,0],["case",false,false,false],[6,16.5,8],[[.5,.5,.5,.5]],[false,10,2,"default"]],
|
||||
|
||||
Reference in New Issue
Block a user