From 1cbc923d2cb90ac5958bac4d8855d85bcec6ec29 Mon Sep 17 00:00:00 2001 From: Edward Kisiel Date: Thu, 6 Oct 2022 17:05:57 -0400 Subject: [PATCH] updated version in all files, updated readme.md and other small tweaks and corrections --- README.md | 326 +++++++++++++++++++++++-------- sbc_case_builder.json | 6 +- sbc_case_builder.scad | 6 +- sbc_case_builder_accessories.cfg | 2 +- sbc_case_builder_library.scad | 2 +- 5 files changed, 254 insertions(+), 88 deletions(-) diff --git a/README.md b/README.md index 2b60e91..5187b31 100644 --- a/README.md +++ b/README.md @@ -21,8 +21,9 @@ License: GPLv3. ``` ### SBC Case Builder Features: -- Autonomous Multi-SBC, Multi-Case, Parametric Generation -- Variable Height, Autonomous Case Standoffs +- Autonomous Multi-SBC, Parametric Multi-Case Generation +- Autonomous Case Standoffs with Variable Height +- Extended Standoff sbc collision detection - Accessory Customization Framework - Accessory Multi-Associative Parametric Positioning - Absolute Location @@ -48,9 +49,9 @@ License: GPLv3. - Rack - CNC Cases -All case data is stored in a 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. This differs from version 1.x in that all accessories for a case were stored with the case data and weren’t accessible to be used by another case. +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. -Variable height automated SBC standoffs, which can be individually adjusted, are also implemented to integrate add-on PCB, hats, heatsinks or other accessories that share SBC standoffs for mounting. The HK Netcard uses this feature as well as other accessories. +Variable height automated SBC standoffs, which can be individually adjusted, are also implemented to integrate add-on PCB, hats, heatsinks or other accessories that share SBC standoffs for mounting. Multi-associative parametric positioning of accessories is implemented and allows each accessory to enable or disable parametric movement of the accessory for each axis. The XY and Z axis can be associated with the case offset (size), SBC positioning, multi-associated axises or absolute positioning. For instance, a SBC fan opening needs to follow the SBC in the X and Y axis but the case Z axis for the correct height. ``` @@ -74,21 +75,22 @@ An array holds a string and 3 Boolean that represent which association and axis ### Accuracy In the past there was been no way of validating whether a SBC Model Framework model and it’s 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. -There are currently 47 SBC represented by 43 models, from 8 manufactures represented in SBC Model Framework. Some SBC in SBC Model Framework have not been validated and may produce one or more aspects of a case incorrectly. SBC status is noted in sbc.png, the README.md file and at the beginning of the SBC entry defined in sbc_models.cfg, all a part of SBC Model Framework. The color coded indicator of an SBC’s verification and completion as indicated in sbc.png is as follows: +There are currently 47 SBC represented by 43 models, from 8 manufactures in SBC Model Framework. Some SBC in SBC Model Framework have not been validated or may be missing component data and may produce one or more aspects of a case incorrectly. SBC status is noted in sbc.png, the README.md file and at the beginning of the SBC entry defined in sbc_models.cfg, all a part of SBC Model Framework. The color coded indicator of an SBC’s verification and completion as indicated in sbc.png is as follows: -- GREEN = verified to be correct using SBC Case Builder +- GREEN = verified, complete and passes SBC Case Builder - YELLOW = unverified, mostlikely usable and/or missing minor information - ORANGE = unverified, may be usable but missing component data - RED = unverified, not usable due to incomplete component data ### Utility -Additionally, template creation and i/o panel layouts in a dxf format can be easily created and integrated into other designs or for hand fabrication by sectioning a case panel for the desired SBC. The case design “panel” will most likely work best. If your new to CAD here is an example, towards the bottom of the post, on how to section an 3D stl to a 2D dxf format using OpenSCAD. +Additionally, template creation and i/o panel layouts in a dxf format can be easily created and integrated into other designs or for hand fabrication by sectioning a case panel for the desired SBC. The case design “panel” will most likely work best. Notes: Due to the number of possibilities, no pre-compiled case stl’s are included. “tol”, located at the bottom of the Adjustments Tab, is a tolerance fitment adjustment for the snap, fitted, round and hex tops. Adjust accordingly if the tops are too tight or loose. + ### Case Designs and Styles The case naming convention for standard cases in the configuration file follow the basic form of “sbc”_”design”_”style” e.g. c4_shell or c4_tray_vu5. @@ -96,99 +98,104 @@ The case naming convention for standard cases in the configuration file follow t ##### Hardkernel -**Odorid-C1+ cases** - 16 : c1+_shell,c1+_panel,c1+_panel_lcd3.5,c1+_desktop_lcd3.5,c1+_stacked,c1+_tray,c1+_tray_sides,c1+_tray_vu5, -c1+_tray_vu7,c1+_shell_boombox,c1+_panel_boombox,c1+_tray_boombox,c1+_round,c1+_hex,c1+_snap,c1+_fitted +**Odorid-C1+ cases** - 16 : c1+_shell, c1+_panel, c1+_panel_lcd3.5, c1+_desktop_lcd3.5, c1+_stacked, c1+_tray, c1+_tray_sides, c1+_tray_vu5, +c1+_tray_vu7, c1+_shell_boombox, c1+_panel_boombox, c1+_tray_boombox, c1+_round, c1+_hex, c1+_snap, c1+_fitted -**Odorid-C2 cases** - 17 : c2_shell,c2_panel,c2_panel_lcd3.5,c2_desktop_lcd3.5,c2_stacked,c2_tray,c2_tray_sides,c2_tray_vu5, -c2_tray_vu7,c2_shell_boombox,c2_panel_boombox,c2_deskboom_lcd3.5,c2_tray_boombox,c2_round,c2_hex,c2_snap,c2_fitted +**Odorid-C2 cases** - 17 : c2_shell, c2_panel, c2_panel_lcd3.5, c2_desktop_lcd3.5, c2_stacked, c2_tray, c2_tray_sides, c2_tray_vu5, +c2_tray_vu7, c2_shell_boombox, c2_panel_boombox, c2_deskboom_lcd3.5, c2_tray_boombox, c2_round, c2_hex, c2_snap, c2_fitted -**Odorid-C4 cases** - 17 : c4_shell,c4_panel,c4_panel_lcd3.5,c4_desktop_lcd3.5,c4_stacked,c4_tray,c4_tray_sides,c4_tray_vu5, -c4_tray_vu7,c4_shell_boombox,c4_panel_boombox,c4_deskboom_lcd3.5,c4_tray_boombox,c4_round,c4_hex,c4_snap,c4_fitted +**Odorid-C4 cases** - 17 : c4_shell, c4_panel, c4_panel_lcd3.5, c4_desktop_lcd3.5, c4_stacked, c4_tray, c4_tray_sides, c4_tray_vu5, +c4_tray_vu7, c4_shell_boombox, c4_panel_boombox, c4_deskboom_lcd3.5, c4_tray_boombox, c4_round, c4_hex, c4_snap, c4_fitted -**Odorid-HC4 cases** - 15 : hc4_shell,hc4_shell_drivebox2.5,hc4_shell_drivebox2.5v,hc4_shell_drivebox3.5,hc4_panel,hc4_stacked -,hc4_tray,hc4_tray_sides,hc4_tray_vu5,hc4_tray_vu7,hc4_tray_drivebox2.5,hc4_round,hc4_hex,hc4_snap,hc4_fitted +**Odorid-HC4 cases** - 15 : hc4_shell, hc4_shell_drivebox2.5, hc4_shell_drivebox2.5v, hc4_shell_drivebox3.5, hc4_panel, hc4_stacked +, hc4_tray, hc4_tray_sides, hc4_tray_vu5, hc4_tray_vu7, hc4_tray_drivebox2.5, hc4_round, hc4_hex, hc4_snap, hc4_fitted -**Odorid-N1 cases** - 11 : n1_shell,n1_panel,n1_stacked,n1_tray,n1_tray_sides,n1_tray_vu5,n1_tray_vu7,n1_round,n1_hex,n1_snap,n1_fitted +**Odorid-N1 cases** - 11 : n1_shell, n1_panel, n1_stacked, n1_tray, n1_tray_sides, n1_tray_vu5, n1_tray_vu7, n1_round, n1_hex, n1_snap, n1_fitted -**Odorid-N2 cases** - 9 : n2_panel,n2_tray,n2_tray_sides,n2_tray_vu5,n2_tray_vu7,n2_round,n2_hex,n2_snap,n2_fitted +**Odorid-N2 cases** - 9 : n2_panel, n2_tray, n2_tray_sides, n2_tray_vu5, n2_tray_vu7, n2_round, n2_hex, n2_snap, n2_fitted -**Odorid-N2+ cases** - 9 :n2+_panel,n2+_tray,n2+_tray_sides,n2+_tray_vu5,n2+_tray_vu7,n2+_round,n2+_hex,n2+_snap,n2+_fitted +**Odorid-N2+ cases** - 9 :n2+_panel, n2+_tray, n2+_tray_sides, n2+_tray_vu5, n2+_tray_vu7, n2+_round, n2+_hex, n2+_snap, n2+_fitted -**Odorid-XU4 cases** - 11 : xu4_shell,xu4_panel,xu4_stacked,xu4_tray,xu4_tray_sides,xu4_tray_vu5,xu4_tray_vu7,xu4_round,xu4_hex,xu4_snap,xu4_fitted +**Odorid-XU4 cases** - 11 : xu4_shell, xu4_panel, xu4_stacked, xu4_tray, xu4_tray_sides, xu4_tray_vu5, xu4_tray_vu7, xu4_round, xu4_hex, xu4_snap, xu4_fitted -**Odorid-XU4Q cases** - 11 : xu4q_shell,xu4q_panel,xu4q_stacked,xu4q_tray,xu4q_tray_sides,xu4q_tray_vu5,xu4q_tray_vu7,xu4q_round,xu4q_hex,xu4q_snap,xu4q_fitted +**Odorid-XU4Q cases** - 11 : xu4q_shell, xu4q_panel, xu4q_stacked, xu4q_tray, xu4q_tray_sides, xu4q_tray_vu5, xu4q_tray_vu7, xu4q_round, xu4q_hex, xu4q_snap, xu4q_fitted -**Odroid-H2 cases** - 17 : h2_shell,h2_lowboy,h2_lowboy_router,h2_shell_router,h2_shell_routerssd,h2_panel,h2_stacked,h2_tray,h2_tray_sides, -h2_tray_vu5,h2_tray_vu7,h2_tray_router,h2_router_station,h2_round,h2_hex,h2_snap,h2_fitted +**Odroid-H2 cases** - 17 : h2_shell, h2_lowboy, h2_lowboy_router, h2_shell_router, h2_shell_routerssd, h2_panel, h2_stacked, h2_tray, h2_tray_sides, h2_tray_vu5, h2_tray_vu7, h2_tray_router, h2_router_station, h2_round, h2_hex, h2_snap, h2_fitted **Odroid-Show2** cases - 1 : show2_shell ##### Pine64 -**Rock64** - 9 : rockp64_shell,rock64_panel,rock64_stacked,rock64_tray,rock64_tray_sides,rock64_round,rock64_hex,rock64_snap,rock64_fitted +**Rock64** - 9 : rockp64_shell, rock64_panel, rock64_stacked, rock64_tray, rock64_tray_sides, rock64_round, rock64_hex, rock64_snap, rock64_fitted -**RockPro64** - 9 : rockpro64_shell,rockpro64_panel,rockpro64_stacked,rockpro64_tray,rockpro64_tray_sides,rockpro64_round,rockpro64_hex,rockpro64_snap,rockpro64_fitted +**RockPro64** - 9 : rockpro64_shell, rockpro64_panel, rockpro64_stacked, rockpro64_tray, rockpro64_tray_sides, rockpro64_round, rockpro64_hex, rockpro64_snap, rockpro64_fitted ##### Raspberry PI -**RPIzero** - 9 : rpizero_shell,rpizero_panel,rpizero_stacked,rpizero_tray,rpizero_tray_sides,rpizero_round,rpizero_hex,rpizero_snap,rpizero_fitted +**RPIzero** - 9 : rpizero_shell, rpizero_panel, rpizero_stacked, rpizero_tray, rpizero_tray_sides, rpizero_round, rpizero_hex, rpizero_snap, rpizero_fitted -**RPIzero2w+** - 9 : rpizero2w_shell,rpizero2w_panel,rpizero2w_stacked,rpizero2w_tray,rpizero2w_tray_sides,rpizero2w_round,rpizero2w_hex,rpizero2w_snap,rpizero2w_fitted +**RPIzero2w+** - 9 : rpizero2w_shell, rpizero2w_panel, rpizero2w_stacked, rpizero2w_tray, rpizero2w_tray_sides, rpizero2w_round, rpizero2w_hex, rpizero2w_snap, rpizero2w_fitted -**RPI1a+** - 9 : rpi1a+_shell,rpi1a+_panel,rpi1a+_stacked,rpi1a+_tray,rpi1a+_tray_sides,rpi1a+_round,rpi1a+_hex,rpi1a+_snap,rpi1a+_fitted +**RPI1a+** - 9 : rpi1a+_shell, rpi1a+_panel, rpi1a+_stacked, rpi1a+_tray, rpi1a+_tray_sides, rpi1a+_round, rpi1a+_hex, rpi1a+_snap, rpi1a+_fitted -**RPI1b+** - 9 : rpi1b+_shell,rpi1b+_panel,rpi1b+_stacked,rpi1b+_tray,rpi1b+_tray_sides,rpi1b+_round,rpi1b+_hex,rpi1b+_snap,rpi1b+_fitted +**RPI1b+** - 9 : rpi1b+_shell, rpi1b+_panel, rpi1b+_stacked, rpi1b+_tray, rpi1b+_tray_sides, rpi1b+_round, rpi1b+_hex, rpi1b+_snap, rpi1b+_fitted -**RPI3a+** - 9 : rpi3a+_shell,rpi3a+_panel,rpi3a+_stacked,rpi3a+_tray,rpi3a+_tray_sides,rpi3a+_round,rpi3a+_hex,rpi3a+_snap,rpi3a+_fitted +**RPI3a+** - 9 : rpi3a+_shell, rpi3a+_panel, rpi3a+_stacked, rpi3a+_tray, rpi3a+_tray_sides, rpi3a+_round, rpi3a+_hex, rpi3a+_snap, rpi3a+_fitted -**RPI3b** - 9 : rpi3b_shell,rpi3b_panel,rpi3b_stacked,rpi3b_tray,rpi3b_tray_sides,rpi3b_round,rpi3b_hex,rpi3b_snap,rpi3b_fitted +**RPI3b** - 9 : rpi3b_shell, rpi3b_panel, rpi3b_stacked, rpi3b_tray, rpi3b_tray_sides, rpi3b_round, rpi3b_hex, rpi3b_snap, rpi3b_fitted -**RPI3b+** - 9 : rpi3b+_shell,rpi3b+_panel,rpi3b+_stacked,rpi3b+_tray,rpi3b+_tray_sides,rpi3b+_round,rpi3b+_hex,rpi3b+_snap,rpi3b+_fitted +**RPI3b+** - 9 : rpi3b+_shell, rpi3b+_panel, rpi3b+_stacked, rpi3b+_tray, rpi3b+_tray_sides, rpi3b+_round, rpi3b+_hex, rpi3b+_snap, rpi3b+_fitted -**RPI4b** - 9 : rpi4b_shell,rpi4b_panel,rpi4b_stacked,rpi4b_tray,rpi4b_tray_sides,rpi4b_round,rpi4b_hex,rpi4b_snap,rpi4b_fitted +**RPI4b** - 9 : rpi4b_shell, rpi4b_panel, rpi4b_stacked, rpi4b_tray, rpi4b_tray_sides, rpi4b_round, rpi4b_hex, rpi4b_snap, rpi4b_fitted ##### Nivida -**Jetson Nano** - 9 : jetsonnano_shell,jetsonnano_panel,jetsonnano_stacked,jetsonnano_tray,jetsonnano_tray_sides,jetsonnano_round,jetsonnano_hex,jetsonnano_snap,jetsonnano_fitted +**Jetson Nano** - 9 : jetsonnano_shell, jetsonnano_panel, jetsonnano_stacked, jetsonnano_tray, jetsonnano_tray_sides, jetsonnano_round, jetsonnano_hex, jetsonnano_snap, jetsonnano_fitted ##### Radxa -**ROCKPi 4b+** - 9 : rockpi4b+_shell,rockpi4b+_panel,rockpi4b+_stacked,rockpi4b+_tray,rockpi4b+_tray_sides,rockpi4b+_round,rockpi4b+_hex,rockpi4b+_snap,rockpi4b+_fitted -**ROCKPi 4c** - 9 : rockpi4c_shell,rockpi4c_panel,rockpi4c_stacked,rockpi4c_tray,rockpi4c_tray_sides,rockpi4c_round,rockpi4c_hex,rockpi4c_snap,rockpi4c_fitted -**ROCKPi 4c+** - 9 : rockpi4c+_shell,rockpi4c+_panel,rockpi4c+_stacked,rockpi4c+_tray,rockpi4c+_tray_sides,rockpi4c+_round,rockpi4c+_hex,rockpi4c+_snap,rockpi4c+_fitted +**ROCKPi 4b+** - 9 : rockpi4b+_shell, rockpi4b+_panel, rockpi4b+_stacked, rockpi4b+_tray, rockpi4b+_tray_sides, rockpi4b+_round, rockpi4b+_hex, rockpi4b+_snap, rockpi4b+_fitted + +**ROCKPi 4c** - 9 : rockpi4c_shell, rockpi4c_panel, rockpi4c_stacked, rockpi4c_tray, rockpi4c_tray_sides, rockpi4c_round, rockpi4c_hex, rockpi4c_snap, rockpi4c_fitted + +**ROCKPi 4c+** - 9 : rockpi4c+_shell, rockpi4c+_panel, rockpi4c+_stacked, rockpi4c+_tray, rockpi4c+_tray_sides, rockpi4c+_round, rockpi4c+_hex, rockpi4c+_snap, rockpi4c+_fitted ##### Khadas -**Vim1** - 9 : vim1_shell,vim1_panel,vim1_stacked,vim1_tray,vim1_tray_sides,vim1_round,vim1_hex,vim1_snap,vim1_fitted -**Vim2** - 9 : vim2_shell,vim2_panel,vim2_stacked,vim2_tray,vim2_tray_sides,vim2_round,vim2_hex,vim2_snap,vim2_fitted -**Vim3** - 9 : vim3_shell,vim3_panel,vim3_stacked,vim3_tray,vim3_tray_sides,vim3_round,vim3_hex,vim3_snap,vim3_fitted -**Vim3l** - 9 : vim3l_shell,vim3l_panel,vim3l_stacked,vim3l_tray,vim3l_tray_sides,vim3l_round,vim3l_hex,vim3l_snap,vim3l_fitted -**Vim4** - 9 : vim4_shell,vim4_panel,vim4_stacked,vim4_tray,vim4_tray_sides,vim4_round,vim4_hex,vim4_snap,vim4_fitted +**Vim1** - 9 : vim1_shell, vim1_panel, vim1_stacked, vim1_tray, vim1_tray_sides, vim1_round, vim1_hex, vim1_snap, vim1_fitted + +**Vim2** - 9 : vim2_shell, vim2_panel, vim2_stacked, vim2_tray, vim2_tray_sides, vim2_round, vim2_hex, vim2_snap, vim2_fitted + +**Vim3** - 9 : vim3_shell, vim3_panel, vim3_stacked, vim3_tray, vim3_tray_sides, vim3_round, vim3_hex, vim3_snap, vim3_fitted + +**Vim3l** - 9 : vim3l_shell, vim3l_panel, vim3l_stacked, vim3l_tray, vim3l_tray_sides, vim3l_round, vim3l_hex, vim3l_snap, vim3l_fitted + +**Vim4** - 9 : vim4_shell, vim4_panel, vim4_stacked, vim4_tray, vim4_tray_sides, vim4_round, vim4_hex, vim4_snap, vim4_fitted ##### Asus -**Tinkerboard** - 9 : tinkerboard_shell,tinkerboard_panel,tinkerboard_stacked,tinkerboard_tray,tinkerboard_tray_sides,tinkerboard_round,tinkerboard_hex,tinkerboard_snap,tinkerboard_fitted +**Tinkerboard** - 9 : tinkerboard_shell, tinkerboard_panel, tinkerboard_stacked, tinkerboard_tray, tinkerboard_tray_sides, tinkerboard_round, tinkerboard_hex, tinkerboard_snap, tinkerboard_fitted -**Tinkerboard S** - 9 : tinkerboard-s_shell,tinkerboard_panel,tinkerboard-s_stacked,tinkerboard-s_tray,tinkerboard-s_tray_sides,tinkerboard-s_round,tinkerboard-s_hex,tinkerboard-s_snap,tinkerboard-s_fitted +**Tinkerboard S** - 9 : tinkerboard-s_shell, tinkerboard_panel, tinkerboard-s_stacked, tinkerboard-s_tray, tinkerboard-s_tray_sides, tinkerboard-s_round, tinkerboard-s_hex, tinkerboard-s_snap, tinkerboard-s_fitted -**Tinkerboard 2/2S** - 9 : tinkerboard-2_shell,tinkerboard-2_panel,tinkerboard-2_stacked,tinkerboard-2_tray,tinkerboard-2_tray_sides,tinkerboard-2_round,tinkerboard-2_hex,tinkerboard-2_snap,tinkerboard-2_fitted +**Tinkerboard 2/2S** - 9 : tinkerboard-2_shell, tinkerboard-2_panel, tinkerboard-2_stacked, tinkerboard-2_tray, tinkerboard-2_tray_sides, tinkerboard-2_round, tinkerboard-2_hex, tinkerboard-2_snap, tinkerboard-2_fitted -**Tinkerboard R2/R2S** - 9 : tinkerboard-r2_shell,tinkerboard-r2_panel,tinkerboard-r2_stacked,tinkerboard-r2_tray,tinkerboard-r2_tray_sides,tinkerboard-r2_round,tinkerboard-r2_hex,tinkerboard-r2_snap,tinkerboard-r2_fitted +**Tinkerboard R2/R2S** - 9 : tinkerboard-r2_shell, tinkerboard-r2_panel, tinkerboard-r2_stacked, tinkerboard-r2_tray, tinkerboard-r2_tray_sides, tinkerboard-r2_round, tinkerboard-r2_hex, tinkerboard-r2_snap, tinkerboard-r2_fitted ##### Orange PI -**OPI Zero/ZeroPlus** - 9 : opizero_shell,opizero_panel,opizero_stacked,opizero_tray,opizero_tray_sides,opizero_round,opizero_hex,opizero_snap,opizero_fitted +**OPI Zero/ZeroPlus** - 9 : opizero_shell, opizero_panel, opizero_stacked, opizero_tray, opizero_tray_sides, opizero_round, opizero_hex, opizero_snap, opizero_fitted -**OPI Zero2** - 9 : opizero2_shell,opizero2_panel,opizero2_stacked,opizero2_tray,opizero2_tray_sides,opizero2_round,opizero2_hex,opizero2_snap,opizero2_fitted +**OPI Zero2** - 9 : opizero2_shell, opizero2_panel, opizero2_stacked, opizero2_tray, opizero2_tray_sides, opizero2_round, opizero2_hex, opizero2_snap, opizero2_fitted -**OPI R1PlusLTS** - 9 : opir1plus_lts_shell,opir1plus_lts_panel,opir1plus_lts_stacked,opir1plus_lts_tray,opir1plus_lts_tray_sides,opir1plus_lts_round,opir1plus_lts_hex,opir1plus_lts_snap,opir1plus_lts_fitted +**OPI R1PlusLTS** - 9 : opir1plus_lts_shell, opir1plus_lts_panel, opir1plus_lts_stacked, opir1plus_lts_tray, opir1plus_lts_tray_sides, opir1plus_lts_round, opir1plus_lts_hex, opir1plus_lts_snap, opir1plus_lts_fitted ### Accessory Schema @@ -196,247 +203,406 @@ The schema for case accessories is documented in the beginning of the file sbc_c ``` schema: - "accessory_name", - "class","type",loc_x,loc_y,loc_z,face,rotation[x,y,z],parametrics[association,x,y,z],size_x,size_y,size_z,data_1,data_2,"data_3",data_4[] +"accessory_name", +"class","type",loc_x,loc_y,loc_z,face,rotation[x,y,z],parametrics[association,x,y,z],size_x,size_y,size_z,data_1,data_2,"data_3",data_4[] ``` ### Accessories Entries There are 6 classes, “add1”,“sub”,”suball”,”add2”,”model”,”platter” and all use the same command format for various “type”. ``` - "class","type",loc_x,loc_y,loc_z,size_x,size_y,size_z,"face",rotation[],parametrics[],data_1,data_2,"data_3",data_4[] +"class","type",loc_x,loc_y,loc_z,size_x,size_y,size_z,"face",rotation[],parametrics[],data_1,data_2,"data_3",data_4[] ``` e.g. ``` - p - a - r - r a - o m - t e s s s d d d d -c l l l a t i i i a a a a -l t o o o f t r z z z t t t t -a y c c c a i i e e e a a a a -s p c o c -s, e, x, y, z, e, n, s, x,y,z,1,2,3,4 + p + a + r + r a + o m + t e s s s d d d d + c l l l a t i i i a a a a + l t o o o f t r z z z t t t t + a y c c c a i i e e e a a a a + s p c o c + s, e, x, y, z, e, n, s, x,y,z,1,2,3,4 "sub","fan",10,10,24.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0] ``` -Every type, regardless of it’s class, uses a basic set of variables(loc_x,loc_y,loc_z,”face”,rotation[],parametrics[]) but each type doesn’t necessarily use all available data fields(size_x,size_y,size_z,data_1,data_2,”data_3”,data_4[]). “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 and add2 happens after all subtractions have occurred. “suball” is used to affect all faces of a case, not just “face”. The “face” is the case piece that will be effected by the addition or subtraction. The "model" type is for placing supporting accessories in the model view. e.g. hard drives, fans. The "platter" type is for adding supporting accessories to the print platter. +Every type, regardless of it’s class, uses a basic set of variables +`(loc_x,loc_y,loc_z,”face”,rotation[],parametrics[])` +but each type doesn’t necessarily use all available data fields +`(size_x,size_y,size_z,data_1,data_2,”data_3”,data_4[])` -The parametric array specifies the axis to enable for associated parametric positoning. An accessory can be associated with the sbc position("sbc"), case offset("case"),multi-associated which use sbc xy postion and case z offset(sbc-case_z) or uses absolute values if all axises are false +The parametric array specifies the axis to enable for associated parametric positoning. An accessory can be associated with the sbc position("sbc"), case offset("case"),multi-associated which use sbc xy postion and case z offset(sbc-case_z) or uses absolute values if all axises are false. #### 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 and add2 happens after all subtractions have occurred. “suball” is used to affect all faces of a case, not just “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 to the print platter. + + **additive type:** + circle, rectangle, slot, text, art, standoff, batt_holder, uart_holder, hd_holder, hd_holes, hd_vertright_holes, hc4_oled_holder, access_port, button, pcb_holder, boom_grill, boom_speaker_holder + **subtractive type:** + circle, rectangle, slot, text, art, punchout, vent, fan, hd_holes, hd_vertleft_holes, hd_vertright_holes, microusb, sphere + **model type:** + uart_strap, fan_cover, hd25, hd35, hc4_oled, feet, access_cover, net_card, hk35_lcd, hk_boom, boom_speaker, boom_vring, hk_uart + **platter type:** + uart_strap, fan_cover, access_cover, button_top, boom_vring #### Shared add and sub “type” commands + + **circle** + description: circlular geometry. + *uses:* size_x=dia, size_z=height + **rectangle** + *description:* rectangular geometry with individual defined corner fillets. Radius1 is lower left corner then moves clockwise. + *uses:* size_x, size_y, size_z, data_4=[radius1, radius2, radius3, radius4] + **slot** + *description:* slot geometry. + *uses:* size_x=diameter, size_y=length, size_z=height + **text** + *description:* raised or sunk text + *uses:* data_1=size, data_3="text" + **art** + *description:* art work in dxf or svg format + *uses:* data_1=scale, data_2=height, data_3=file + #### Add class only “types” + + **uart_holder** + *description:* console uart holder + *uses:* none + **batt_holder** + *description:* rtc battery holder + *uses:* none -**standoff** -*description:* user defined standoff -*uses:* data_4= - [ 6.75, // radius - 5, // height - 3.6, // holesize - 10, // supportsize - 4, // supportheight - 1, // 0=none, 1=countersink, 2=recessed hole, 3=nut holder, 4=blind hole - 0, // standoff style 0=hex, 1=cylinder - 0, // enable reverse standoff - 0, // enable insert at top of standoff - 4.5, // insert hole dia. mm - 5.1] // insert depth mm +**standoff** + +*description:* user defined standoff + +*uses:* data_4= + +``` + [ 6.75, // radius + 5, // height + 3.6, // holesize + 10, // supportsize + 4, // supportheight + 1, // 0=none, 1=countersink, 2=recessed hole, 3=nut holder, 4=blind hole + 0, // standoff style 0=hex, 1=cylinder + 0, // enable reverse standoff + 0, // enable insert at top of standoff + 4.5, // insert hole dia. mm + 5.1] // insert depth mm +``` **hd_holder** + *description:* double stacked holder for 2.5 and 3.5 drives + *uses:* data_1=2.5 or 3.5, data_3=”portrait” or “landscape” + **hd_vertleft_holder** + *description:* vertical left side holder for 2.5 and 3.5 drives + *uses:* data_1=2.5 or 3.5, data_3=”portrait” or “landscape” + **hd_vertright_holder** + *description:* vertical right side holder for 2.5 and 3.5 drives + *uses:* data_1=2.5 or 3.5, data_3=”portrait” or “landscape” + **hc4_oled_holder** + *description:* hc4 oled holder + *uses:* size_z=floorthick + **access_port** + *description:* bottom access for sd and emmc + *uses:* size_z=floorthick, data_3=”portrait” or “landscape” + **button** + *description:* button top and plunger + *uses:* size_x=diameter,size_z=height, data_3=”reccess” + **pcb_holder** + *description:* pcb bottom edge holder + *uses:* size_x=pcb_x,size_y=pcb_y,size_z=pcb_z, data_1=wall_thick + **boom_grill** + *description:* hk boom bonnet grill covers + *uses:* data_3="flat", "dome", "frame" + **boom_speaker_holder** + *description:* hk boom bonnet speaker friction holder + *uses:* data_1=tolorence #### Sub class only “types” + + **punchout** + *description:* punchout in rectangle, round or slot shape + *uses:* size_x=width, size_y=depth, data_1=gap, size_z=thick, data_2=fillet, data_3="rectangle","round" or "slot" + **vent** + *description:* horizontal or vertical vent openings -*uses:* size_x=open_width, size_y=open_length, size_z=thick, data_4=gap, data_1=rows, data_3=columns, data_3=orientation("vertical","horizontal") + +*uses:* size_x=open_width, size_y=open_length, size_z=thick, data_4=gap, data_1=rows, data_3=columns, +data_3=orientation("vertical","horizontal") + **fan** + *description:* fan opening + *uses:* size_x=size, size_z=thick, date_1=style(1=open,2=fan) + **hd_holes** + *description:* bottom hole pattern for 2.5 or 3.5 drives + *uses:* data_1=2.5 or 3.5, data_2=thick, data_3=”portrait” or “landscape” + **hd_vertleft_holes** + *description:* bottom hole pattern for 2.5 or 3.5 drives + *uses:* data_1=2.5 or 3.5, data_2=thick, data_3=”portrait” or “landscape” + **hd_vertright_holes** + *description:* bottom hole pattern for 2.5 or 3.5 drives + *uses:* data_1=2.5 or 3.5, data_2=thick, data_3=”portrait” or “landscape”-component mask(incomplete) + **microusb** + *description:* micro usb opening + *uses:* none + **sphere** + *description:* sphere subtraction + *uses:* size_x=diameter + + #### Model class “types” + + **uart_strap** + *description:* console uart holder strap + *uses:* none + **fan_cover** + *description:* cover for fan hole opening + *uses:* size_x=40 or 80, size_z=thick + **hd25** + *description:* 2.5 hard drive + *uses:* data_1=height + **hd35** + *description:* 3.5 hard drive + *uses:* none + **hc4_oled** + *description:* hc4_oled model + *uses:* none + **feet** + *description:* case feet + *uses:* size_x=diameter, size_z=height + **access_cover** + *description:* bottom access cover for sd and emmc + *uses:* size_z=floorthick, data_3=”portrait” or “landscape” + **button_top** + *description:* button top and plunger + *uses:* size_x=diameter,size_z=height, data_3=”reccess” + **h2_netcard** + *description:* h2 network card model + *uses:* none + **hk_lcd35** + *description:* hk 3.5 inch lcd model + *uses:* none + **hk_boom** + *description:* hk stereo boom bonnet model + *uses:* data_1=speakers(true or false), data_3=”front” or "rear" + **boom_speaker** + *description:* hk stereo boom bonnet speaker + *uses:* data_1=pcb(true or false), data_3=”left” or "right" + **hk_speaker** + *description:* hk speaker model + *uses:* none + **boom_vring** + *description:* hk stereo boom bonnet volume wheel extention + *uses:* data_1=tolerence + **hk_uart** + *description:* hk console uart model + *uses:* none + #### Platter class “types” + + **uart_strap** + *description:* console uart holder strap + *uses:* none + **fan_cover** + *description:* cover for fan hole opening + *uses:* size_x=40 or 80, size_z=thick + **access_cover** + *description:*bottom access cover for sd and emmc + *uses:* size_z=floorthick, data_3=”portrait” or “landscape” + **button_top** + *description:* button top and plunger + *uses:* size_x=diameter,size_z=height, data_3=”reccess” + **boom_vring** + *description:* hk stereo boom bonnet volume wheel extention -*uses:* data_1=tolerence + +*uses:* data_1=tolerence diff --git a/sbc_case_builder.json b/sbc_case_builder.json index cf076ce..1184580 100644 --- a/sbc_case_builder.json +++ b/sbc_case_builder.json @@ -4088,7 +4088,7 @@ "sata_punchout": "false", "sbc_bottom_standoffs": "true", "sbc_highlight": "false", - "sbc_model": "xu4", + "sbc_model": "xu4q", "sbc_off": "false", "sbc_top_standoffs": "false", "sidethick": "1", @@ -4145,7 +4145,7 @@ "sata_punchout": "false", "sbc_bottom_standoffs": "true", "sbc_highlight": "false", - "sbc_model": "xu4", + "sbc_model": "xu4q", "sbc_off": "false", "sbc_top_standoffs": "false", "sidethick": "1", @@ -5666,7 +5666,7 @@ "case_style": "none", "cooling": "none", "exhaust_vents": "none", - "fillet": "0", + "fillet": "2", "floorthick": "2", "gap": "1.5", "gpio_opening": "none", diff --git a/sbc_case_builder.scad b/sbc_case_builder.scad index 7bfa6b4..e5dd279 100644 --- a/sbc_case_builder.scad +++ b/sbc_case_builder.scad @@ -34,7 +34,7 @@ fixes and maintenance. 20220515 Version 1.2.3 added odroid-m1, jetson nano, rockpro64, completed mask(), improved docs changed tray top design. - 2022xxxx Version 2.0.x full customizer user interface,case configuration file changed to json, + 20221005 Version 2.0.0 full customizer user interface,case configuration file changed to json, accessories kept in sbc_case_builder_accessories.cfg, added round, hexagon, snap and fitted cases, setup additional sbc from SBC_Model_Framework, added components and masks, added multi-associative parametric positioning for accessories, @@ -267,8 +267,8 @@ if (view == "platter") { } // model view -if (view == "model") { -// translate([-width/2,-depth/2,0]) rotate([0,0,0]){ +if (view == "model") { +// translate([(-width+(gap+wallthick))/2,(-depth+(gap+wallthick))/2,0]) rotate([0,0,0]){ if(case_design == "shell") { if(lower_bottom >= 0) { difference() { diff --git a/sbc_case_builder_accessories.cfg b/sbc_case_builder_accessories.cfg index 98db588..8e315c1 100644 --- a/sbc_case_builder_accessories.cfg +++ b/sbc_case_builder_accessories.cfg @@ -29,7 +29,7 @@ 20220515 Version 1.2.3 added m1_panel,m1_tray,m1_tray_drive,m1_tray_sides,m1_tray_vu5,m1_tray_vu7,show2_shell jetsonnano_shell,jetsonnano_panel,jetsonnano_stacked,jetsonnano_tray rockpro64_shell,rockpro64_panel,rockpro64_stacked,rockpro64_tray - 2022xxxx Version 2.x.x added cusotmizer graphical ui, seperated case data from accessory data, moved case data to customizer json format, + 20221005 Version 2.0.0 added cusotmizer graphical ui, seperated case data from accessory data, moved case data to customizer json format, added multi-associative parametric positioning of accessories, added variable height sbc standoffs to accomidate add-on pcb, converted all existing accessories to use parametric positioning. diff --git a/sbc_case_builder_library.scad b/sbc_case_builder_library.scad index 9171f39..2c6da81 100644 --- a/sbc_case_builder_library.scad +++ b/sbc_case_builder_library.scad @@ -42,7 +42,7 @@ adjusted access_port(), access_cover(), added @mctom's hk_vu8m(bracket), u_bracket(), spacer() 20220515 version 1.2.3 removed spacer(); added screw(); modified hk_vu8m(); added m1_hdmount(); added hdd35_25holder(length) printer friendly punchout(),added remaining mask() entries, standardized mask() - 2022xxxx version 2.x.x increased mask projection for ir_1, added mask for usb2 and usb3 single_horizontal_a, hdmi_micro, + 20221005 version 2.0.0 increased mask projection for ir_1, added mask for usb2 and usb3 single_horizontal_a, hdmi_micro, video-hdmi_mini,microsdcard,momentary_7x3x3_90,rj45_single_short, added subtraction microusb and sphere