Compare commits
58 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7cec418b69 | ||
|
|
59b894d738 | ||
|
|
2e7cd76f20 | ||
|
|
7eab4fe790 | ||
|
|
501da93cad | ||
|
|
c83301debf | ||
|
|
c2d7cc3352 | ||
|
|
20ab01b924 | ||
|
|
0770c17468 | ||
|
|
3a1ba0f811 | ||
|
|
572293170d | ||
|
|
b59f99c0b6 | ||
|
|
a6795b3383 | ||
|
|
00648a52e9 | ||
|
|
f24d3e918b | ||
|
|
b4189a6cee | ||
|
|
6aa68c568e | ||
|
|
efed91db76 | ||
|
|
30d709a00e | ||
|
|
bb5fb69cab | ||
|
|
f7d06bb311 | ||
|
|
2aad1fef87 | ||
|
|
adf4101e3c | ||
|
|
fa1d426130 | ||
|
|
3af7520d67 | ||
|
|
d5f718ca59 | ||
|
|
236be28bdd | ||
|
|
6ef186018f | ||
|
|
bf7377efbb | ||
|
|
addb512b7f | ||
|
|
6cb1ad2e5d | ||
|
|
eb01bb2829 | ||
|
|
8b11dea464 | ||
|
|
489e953d09 | ||
|
|
dca4858007 | ||
|
|
4b24af0f4b | ||
|
|
33e9c04da1 | ||
|
|
c0da9dc727 | ||
|
|
36e6538090 | ||
|
|
8d1d9bdaf0 | ||
|
|
17e4e9dd97 | ||
|
|
44a0697e2b | ||
|
|
a068940140 | ||
|
|
e109837ae7 | ||
|
|
51f453be04 | ||
|
|
c23033d819 | ||
|
|
c29341d1d6 | ||
|
|
61446a322f | ||
|
|
949af488aa | ||
|
|
d565be1614 | ||
|
|
000724340b | ||
|
|
79985241c0 | ||
|
|
d070e829f0 | ||
|
|
e9b5d5508e | ||
|
|
c330f3fcad | ||
|
|
610a432a86 | ||
|
|
7806e8d578 | ||
|
|
6c46501c69 |
103
README.md
103
README.md
@@ -3,7 +3,7 @@
|
||||
|
||||
## Introduction
|
||||
|
||||
This project is about autonomous SBC case creation. It utilizes the SBC Model Framework project to automatically generate cases based on the data for any of the 53 current SBC contained within the framework. This allows legacy, current and future SBC to have multiple cases available on day one of their inclusion in the framework. There are multiple base case designs(shell, panel, stacked, tray, tray-sides, round, hex, snap, fitted) available and each allows for different styles within the design.
|
||||
This project is about autonomous SBC case creation. It utilizes the SBC Model Framework project to automatically generate cases based on the data for any of the 62 current SBC contained within the framework. This allows legacy, current and future SBC to have multiple cases available on day one of their inclusion in the framework. There are multiple base case designs(shell, panel, stacked, tray, tray-sides, round, hex, snap, fitted) available and each allows for different styles within the design.
|
||||
|
||||
All case openings are created automatically based on SBC data and the dimensions of any case design can be expanded in any axis allowing for the creation of larger cases. If you reposition the SBC in a case, you will see i/o openings created or removed appropriately based on it’s proximity to the case geometry. These cases might be useful for prototypes or other in house uses to quickly and easily create standard, specialized and custom SBC cases thru different case designs, styles and accessories.
|
||||
|
||||
@@ -76,7 +76,7 @@ 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 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:
|
||||
There are currently 58 SBC represented by 54 models, from 10 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, complete and passes SBC Case Builder
|
||||
- YELLOW = unverified, mostlikely usable and/or missing minor information
|
||||
@@ -103,9 +103,9 @@ Template creation and i/o panel layouts in a dxf format can be easily created an
|
||||
### 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.
|
||||
|
||||
#### Current Case Count 423
|
||||
#### Current Case Count 454
|
||||
|
||||
##### Hardkernel - 182
|
||||
##### Hardkernel - 191
|
||||
|
||||
**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
|
||||
@@ -129,6 +129,8 @@ c4_tray_vu7, c4_shell_boombox, c4_panel_boombox, c4_deskboom_lcd3.5, c4_tray_boo
|
||||
|
||||
**Odorid-N2LQ cases** - 9 :n2lq_shell, n2lq_panel, n2lq_stacked, n2lq_tray, n2lq_tray_sides, n2lq_tray_vu5, n2lq_tray_vu7, n2lq_snap, n2lq_fitted
|
||||
|
||||
**Odorid-M1S cases** - 9 : m1s_shell, m1s_panel, m1s_stacked, m1s_tray, m1s_tray_vu5, m1s_tray_vu7, m1s_tray_sides, m1s_snap, m1s_fitted
|
||||
|
||||
**Odorid-M1 cases** - 12 : m1_panel, m1_tray, m1_tray_drive, m1_tray_sides, m1_tray_vu5, m1_tray_vu7, m1_snap, m1_fitted, m1_fitted_drivebox2.5, m1_fitted_drivebox3.5, m1_fitted_pizzabox, m1_fitted_drivebox3.5v
|
||||
|
||||
**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
|
||||
@@ -154,6 +156,9 @@ c4_tray_vu7, c4_shell_boombox, c4_panel_boombox, c4_deskboom_lcd3.5, c4_tray_boo
|
||||
|
||||
**h64b** - 2 : h64b_shell, h64b_panel
|
||||
|
||||
**star64** - 1 : star64_shell
|
||||
|
||||
|
||||
##### Raspberry PI - 72
|
||||
|
||||
**RPIzero** - 9 : rpizero_shell, rpizero_panel, rpizero_stacked, rpizero_tray, rpizero_tray_sides, rpizero_round, rpizero_hex, rpizero_snap, rpizero_fitted
|
||||
@@ -178,15 +183,15 @@ c4_tray_vu7, c4_shell_boombox, c4_panel_boombox, c4_deskboom_lcd3.5, c4_tray_boo
|
||||
**Jetson Nano** - 9 : jetsonnano_shell, jetsonnano_panel, jetsonnano_stacked, jetsonnano_tray, jetsonnano_tray_sides, jetsonnano_round, jetsonnano_hex, jetsonnano_snap, jetsonnano_fitted
|
||||
|
||||
|
||||
##### Radxa - 36
|
||||
##### Radxa - 37
|
||||
|
||||
**ROCKPi 4b+** - 9 : rockpi4b+_shell, rockpi4b+_panel, rockpi4b+_stacked, rockpi4b+_tray, rockpi4b+_tray_sides, rockpi4b+_round, rockpi4b+_hex, rockpi4b+_snap, rockpi4b+_fitted
|
||||
**ROCK 4b+** - 9 : rock4b+_shell, rock4b+_panel, rock4b+_stacked, rock4b+_tray, rock4b+_tray_sides, rock4b+_round, rock4b+_hex, rock4b+_snap, rock4b+_fitted
|
||||
|
||||
**ROCKPi 4c** - 9 : rockpi4c_shell, rockpi4c_panel, rockpi4c_stacked, rockpi4c_tray, rockpi4c_tray_sides, rockpi4c_round, rockpi4c_hex, rockpi4c_snap, rockpi4c_fitted
|
||||
**ROCK 4c** - 9 : rock4c_shell, rock4c_panel, rock4c_stacked, rock4c_tray, rock4c_tray_sides, rock4c_round, rock4c_hex, rock4c_snap, rock4c_fitted
|
||||
|
||||
**ROCKPi 4c+** - 9 : rockpi4c+_shell, rockpi4c+_panel, rockpi4c+_stacked, rockpi4c+_tray, rockpi4c+_tray_sides, rockpi4c+_round, rockpi4c+_hex, rockpi4c+_snap, rockpi4c+_fitted
|
||||
**ROCK 4c+** - 9 : rock4c+_shell, rock4c+_panel, rock4c+_stacked, rock4c+_tray, rock4c+_tray_sides, rock4c+_round, rock4c+_hex, rock4c+_snap, rock4c+_fitted
|
||||
|
||||
**ROCKPi5b** - 9 : rockpi5b_shell, rockpi5b_panel, rockpi5b_stacked, rockpi5b_tray, rockpi5b_tray_sides, rockpi5b_round, rockpi5b_hex, rockpi5b_snap, rockpi5b_fitted
|
||||
**ROCK 5b** - 10 : rock5b_shell,rock5b_shell-v1.3, rock5b_panel, rock5b_stacked, rock5b_tray, rock5b_tray_sides, rock5b_round, rock5b_hex, rock5b_snap, rock5b_fitted
|
||||
|
||||
|
||||
##### Khadas - 45
|
||||
@@ -213,15 +218,31 @@ c4_tray_vu7, c4_shell_boombox, c4_panel_boombox, c4_deskboom_lcd3.5, c4_tray_boo
|
||||
**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 - 27
|
||||
##### Orange PI - 34
|
||||
|
||||
**OPI 5** - 7 : opi5_shell, opi5_panel, opi5_stacked, opi5_tray, opi5_tray_sides, opi5_snap, opi5_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 R1** - 1 : opir1_shell
|
||||
|
||||
**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
|
||||
|
||||
|
||||
##### Sipeed - 1
|
||||
|
||||
**licheerv+dock** - 0 :
|
||||
|
||||
|
||||
##### StarFive - 14
|
||||
|
||||
**visionfive2** - 7 : visionfive2_shell, visionfive2_panel, visionfive2_stacked, visionfive2_tray, visionfive2_tray_sides, visionfive2_snap, visionfive2_fitted
|
||||
|
||||
**visionfive2q** - 7 : visionfive2q_shell, visionfive2q_panel, visionfive2q_stacked, visionfive2q_tray, visionfive2q_tray_sides, visionfive2q_snap, visionfive2q_fitted
|
||||
|
||||
|
||||
### Accessory Schema
|
||||
The schema for case accessories is documented in the beginning of the file sbc_case_builder_accessories.cfg. There is one fixed entry that is the accessory set name followed by an unlimited number of accessory entries each containing 15 entries.
|
||||
```
|
||||
@@ -323,6 +344,13 @@ description: circlular geometry.
|
||||
*uses:* data_1=scale, data_2=height, data_3=file
|
||||
|
||||
|
||||
**keyhole**
|
||||
|
||||
*description:* enclosed keyhole
|
||||
|
||||
*uses:* data4=[head_dia, slot_width, slot_length, floor_thick]
|
||||
|
||||
|
||||
|
||||
#### Add class only “types”
|
||||
|
||||
@@ -424,6 +452,13 @@ description: circlular geometry.
|
||||
*uses:* data_1=tolorence
|
||||
|
||||
|
||||
**nut_holder**
|
||||
|
||||
*description:* nut holder
|
||||
|
||||
*uses:* size_x=top diameter or x size in mm, size_y=bottom diameter or y size in mm, size_z=holder height in mm, data_0="m2" or "m2.5" or "m3" or "m4", data_1="default" or "sloped" or "trap"
|
||||
|
||||
|
||||
#### Sub class only “types”
|
||||
|
||||
|
||||
@@ -438,7 +473,15 @@ description: circlular geometry.
|
||||
|
||||
*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,
|
||||
*uses:* size_x=open_width, size_y=open_length, size_z=thick, data_1=rows, data_2=columns,
|
||||
data_3=orientation("vertical","horizontal"), data_4=gap
|
||||
|
||||
|
||||
**vent_hex**(cells_x, cells_y, cell_size, cell_spacing, orientation)
|
||||
|
||||
*description:* horizontal or vertical hex vent openings
|
||||
|
||||
*uses:* size_x=cells_x, size_y=cells_y, size_z=thick, data_1=cell_size, data_2=cell_spacing,
|
||||
data_3=orientation("vertical","horizontal")
|
||||
|
||||
|
||||
@@ -593,6 +636,34 @@ data_3=orientation("vertical","horizontal")
|
||||
*uses:* none
|
||||
|
||||
|
||||
**h3_port_extender**
|
||||
|
||||
*description:* h3 usb port extender model
|
||||
|
||||
*uses:* data_3="header" or "remote"
|
||||
|
||||
|
||||
**hk_pwr_button**
|
||||
|
||||
*description:* hk power button model
|
||||
|
||||
*uses:* none
|
||||
|
||||
|
||||
**dsub**
|
||||
|
||||
*description:* d-sub connectors
|
||||
|
||||
*uses:* data4=[pin, type("male" or "female"), floor_thick]
|
||||
|
||||
|
||||
**vent_panel_hex**
|
||||
|
||||
*description:* cover for vent opening, honeycomb pattern
|
||||
|
||||
*uses:* size_x=x, size_y=y, size_z=thick,
|
||||
data1=cell_size, data2=cell_spacing,
|
||||
data3="x", "y", "none", or "default", data4=border
|
||||
|
||||
#### Platter class “types”
|
||||
|
||||
@@ -630,3 +701,13 @@ data_3=orientation("vertical","horizontal")
|
||||
*description:* hk stereo boom bonnet volume wheel extention
|
||||
|
||||
*uses:* data_1=tolerence
|
||||
|
||||
|
||||
**vent_panel_hex**
|
||||
|
||||
*description:* cover for vent opening, honeycomb pattern
|
||||
|
||||
*uses:* size_x=x, size_y=y, size_z=thick,
|
||||
data1=cell_size, data2=cell_spacing,
|
||||
data3="x", "y", "none", or "default", data4=border
|
||||
|
||||
|
||||
Submodule SBC_Model_Framework updated: 710fba6d20...cca4d08395
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -31,7 +31,7 @@
|
||||
|
||||
types for additive: circle,rectangle,slot,text,art,button,standoff,batt_holder,uart_holder,hd_holder,hd_vertleft_holder,
|
||||
hd_vertright_holder,hc4_oled_holder,access_port,button,pcb_holder,boom_grill,boom_speaker_holder
|
||||
types for subtractive: circle,rectangle,slot,text,art,punchout,vent,fan,hd_holes,hd_vertleft_holes,hd_vertright_holes,microusb,sphere
|
||||
types for subtractive: circle,rectangle,slot,text,art,punchout,vent,vent_hex,fan,hd_holes,hd_vertleft_holes,hd_vertright_holes,microusb,sphere
|
||||
types for model: uart_strap,fan_cover,hd25,hd35,hc4_oled,feet,button_top,access_cover,net_card,hk35_lcd,hk_boom,boom_speaker,boom_vring,hk_uart
|
||||
types for platter: uart_strap,fan_cover,button_top,boom_vring
|
||||
|
||||
@@ -51,6 +51,13 @@
|
||||
|
||||
accessory_data = [
|
||||
["none"],
|
||||
|
||||
// hk uart group
|
||||
["hk_uart",
|
||||
"add2","uart_holder",-25,0,1.9,"bottom",[0,0,0],["sbc",true,false,false],10,10,0,0,0,"",0, // add uart holder
|
||||
"model","hk_uart",-22.5,23,5,"bottom",[0,0,-90],["sbc",true,false,false],10,10,0,0,0,"",0, // add uart model
|
||||
"model","uart_strap",-25,0,2,"bottom",[0,0,0],["sbc",true,false,false],0,0,0,0,0,"",0,
|
||||
"platter","uart_strap",-35,75,-9,"bottom",[0,0,0],["case",false,false,false],0,0,0,0,0,"",0], // hk uart strap
|
||||
|
||||
// Odroid-C1+
|
||||
["c1+_shell_boombox",
|
||||
@@ -378,6 +385,11 @@ accessory_data = [
|
||||
"suball","round",10.5,-2,14.5,"top",[90,0,0],["case",false,false,false],11,0,18,0,0,"",0, // sub power plug hole
|
||||
"suball","rectangle",35,-26,4,"top",[0,0,0],["case",false,false,false],21,10,15.5,0,0,"vertical",[1,1,1,1]], // sub hdmi opening
|
||||
|
||||
// Odroid-XU4
|
||||
["xu4_keyhole",
|
||||
"add1","keyhole",40,30,0,"bottom",[0,0,0],["case",false,false,false],0,0,0,0,0,"",[7,3.2,6,2], // keyhole
|
||||
"sub","keyhole",40,30,0,"bottom",[0,0,0],["case",false,false,false],0,0,0,0,0,"",[7,3.2,6,2]], // keyhole
|
||||
|
||||
|
||||
// Odroid-HC4
|
||||
["hc4_tray_drivebox2.5",
|
||||
@@ -459,6 +471,11 @@ accessory_data = [
|
||||
["n2l_tray",
|
||||
"sub","rectangle",65,36,-2.5,"bottom",[0,0,0],["case",true,true,true],5,13,15.5,0,0,"vertical",[1,1,1,1]], // sub hdmi opening
|
||||
|
||||
["n2l_gpio",
|
||||
"sub","vent",22,-1.99,16,"top",[0,0,0],["sbc-case_z",true,true,true],2,9,8,1,10,"vertical",1, // vent opening
|
||||
"sub","fan",20,8,24.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0, // sub fan opening
|
||||
"sub","rectangle",8.5,49,9.9,"top",[0,0,0],["sbc",true,true,true],56,18,20,0,0,"vertical",[1,1,1,1]], // gpio opening
|
||||
|
||||
// Odroid-N2+
|
||||
// internal fan
|
||||
["n2+_tray_vu7_fan",
|
||||
@@ -823,7 +840,7 @@ accessory_data = [
|
||||
"sub","vent",111.5,30,28,"top",[0,0,90],["case",true,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",-3.5,30,4,"bottom",[0,0,90],["case",false,false,false],2,6,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",111.5,30,4,"bottom",[0,0,90],["case",true,false,false],2,6,4,1,17,"vertical",1, // vent opening
|
||||
"sub","fan",99,10,48,"top",[0,0,90],["sbc-case_z",true,true,true],90,0,6,2,0,"",0, // fan opening
|
||||
"sub","fan",99,10,48,"top",[0,0,90],["sbc-case_z",true,true,true],90,0,6,2,0,"",0, // fan opening
|
||||
"add2","batt_holder",113.5,45,20,"top",[90,0,270],["sbc-case_z",true,true,true],10,10,0,0,0,"",0, // add battery holder
|
||||
"add1","access_port",10,30,-0.01,"bottom",[0,0,0],["sbc",true,true,false],100,80,2,0,0,"landscape",0, // access port
|
||||
"add2","button",12.34,106.43,53,"top",[0,0,0],["sbc-case_z",true,true,true],10,0,53,0,0,"recess",0, // button
|
||||
@@ -835,14 +852,14 @@ accessory_data = [
|
||||
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],10,0,58,0,0,"recess",0, // button top
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],100,80,2,0,0,"landscape",0], // access port cover
|
||||
|
||||
["h3_tallboy-ssd",
|
||||
["h3_tallboy-ssd",
|
||||
"sub","vent",-3.5,30,58,"top",[0,0,90],["case",false,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",111.5,30,58,"top",[0,0,90],["case",true,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",-3.5,30,28,"top",[0,0,90],["case",false,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",111.5,30,28,"top",[0,0,90],["case",true,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",-3.5,30,4,"bottom",[0,0,90],["case",false,false,false],2,6,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",111.5,30,4,"bottom",[0,0,90],["case",true,false,false],2,6,4,1,17,"vertical",1, // vent opening
|
||||
"sub","fan",99,10,48,"top",[0,0,90],["sbc-case_z",true,true,true],90,0,6,2,0,"",0, // fan opening
|
||||
"sub","fan",99,10,48,"top",[0,0,90],["sbc-case_z",true,true,true],90,0,6,2,0,"",0, // fan opening
|
||||
"add1","access_port",10,30,-0.01,"bottom",[0,0,0],["sbc",true,true,false],100,80,2,0,0,"landscape",0, // access port
|
||||
"add2","button",12.34,106.43,53,"top",[0,0,0],["sbc-case_z",true,true,true],10,0,53,0,0,"recess",0, // button
|
||||
"add2","button",23.77,106.43,53,"top",[0,0,0],["sbc-case_z",true,true,true],10,0,53,0,0,"recess",0, // button
|
||||
@@ -851,13 +868,96 @@ accessory_data = [
|
||||
"model","access_cover",10,30,-0.01,"bottom",[0,0,0],["sbc",true,true,false],100,80,2,0,0,"landscape",0, // access port cover
|
||||
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],10,0,58,0,0,"recess",0, // button top
|
||||
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],10,0,58,0,0,"recess",0, // button top
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],100,80,2,0,0,"landscape",0, // access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],100,80,2,0,0,"landscape",0, // access port cover
|
||||
"sub","round",111,34,6.07,"bottom",[0,90,0],["case",true,false,false],3,0,3,0,0,"",0, // sub hd side screw hole
|
||||
"sub","round",111,110.6,6.07,"bottom",[0,90,0],["case",true,false,false],3,0,3,0,0,"",0, // sub hd side screw hole
|
||||
"add2","hd_vertleft",98,10,1.99,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,3,"portrait",0, // add hd holder
|
||||
"sub","hd_vertleft_holes",98,10,-.01,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,3,"portrait",0, // sub hd bottom holes
|
||||
"add2","hd_vertleft",98,10,1.99,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,3,"portrait",0, // add hd holder
|
||||
"sub","hd_vertleft_holes",98,10,-.01,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,3,"portrait",0, // sub hd bottom holes
|
||||
"model","hd25",98,110,2,"bottom",[90,0,-90],["case",true,true,false],0,0,0,7,0,"",0], // model 2.5 hd
|
||||
|
||||
["h3_ultimate",
|
||||
"sub","vent",-3.5,30,58,"top",[0,0,90],["case",false,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",111.5,30,58,"top",[0,0,90],["case",true,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",-3.5,30,19,"top",[0,0,90],["case",false,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",111.5,30,28,"top",[0,0,90],["case",true,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",-3.5,30,4,"bottom",[0,0,90],["case",false,false,false],2,6,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",111.5,30,4,"bottom",[0,0,90],["case",true,false,false],2,6,4,1,17,"vertical",1, // vent opening
|
||||
"sub","fan",99,10,48,"top",[0,0,90],["sbc-case_z",true,true,true],90,0,6,2,0,"",0, // fan opening
|
||||
"sub","round",3.81,17.78,29,"top",[0,0,0],["sbc-case_z",true,true,true],6.5,0,26,0,0,"",0, // sub screw hole
|
||||
"sub","round",3.81,106.19,29,"top",[0,0,0],["sbc-case_z",true,true,true],6.5,0,26,0,0,"",0, // sub screw hole
|
||||
"sub","round",106.04,24.77,29,"top",[0,0,0],["sbc-case_z",true,true,true],6.5,0,26,0,0,"",0, // sub screw hole
|
||||
"sub","round",106.04,106.2,29,"top",[0,0,0],["sbc-case_z",true,true,true],6.5,0,26,0,0,"",0, // sub screw hole
|
||||
"model","h3_port_extender",6,70,18.5,"bottom",[0,0,0],["sbc",true,true,false],0,0,0,0,0,"header",0, // h3 port extender
|
||||
"sub","h3_port_extender",6,70,18.5,"top",[0,0,0],["sbc",true,true,false],0,0,0,0,0,"header",0, // h3 port extender
|
||||
"model","hk_pwr_button",20,110,53,"top",[0,0,0],["sbc-case_z",true,true,true],0,0,0,0,0,0,0, // hk pwr button model
|
||||
"sub","hk_pwr_button",20,110,53,"top",[0,0,0],["sbc-case_z",true,true,true],0,0,0,0,0,0,0, // hk pwr button model
|
||||
// "add2","button",12.34,106.43,53,"top",[0,0,0],["sbc-case_z",true,true,true],10,0,53,0,0,"recess",0, // button
|
||||
// "add2","button",23.77,106.43,53,"top",[0,0,0],["sbc-case_z",true,true,true],10,0,53,0,0,"recess",0, // button
|
||||
// "model","button_top",12.34,106.43,53,"top",[0,0,0],["sbc-case_z",true,true,true],10,0,58,0,0,"recess",0, // button top
|
||||
// "model","button_top",23.77,106.43,53,"top",[0,0,0],["sbc-case_z",true,true,true],10,0,58,0,0,"recess",0, // button top
|
||||
// "platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],10,0,58,0,0,"recess",0, // button top
|
||||
// "platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],10,0,58,0,0,"recess",0, // button top
|
||||
"add1","access_port",10,30,-0.01,"bottom",[0,0,0],["sbc",true,true,true],100,80,2,0,0,"landscape",0, // access port
|
||||
"model","access_cover",10,30,-0.01,"bottom",[0,0,0],["sbc",true,true,false],100,80,2,0,0,"landscape",0, // access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],100,80,2,0,0,"landscape",0, // access port cover
|
||||
"sub","round",111,34,6.07,"bottom",[0,90,0],["case",true,false,false],3,0,3,0,0,"",0, // sub hd side screw hole
|
||||
"sub","round",111,110.6,6.07,"bottom",[0,90,0],["case",true,false,false],3,0,3,0,0,"",0, // sub hd side screw hole
|
||||
"add2","hd_vertleft",98,10,1.99,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,3,"portrait",0, // add hd holder
|
||||
"sub","hd_vertleft_holes",98,10,-.01,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,3,"portrait",0, // sub hd bottom holes
|
||||
"model","hd25",98,110,2,"bottom",[90,0,-90],["case",true,true,false],0,0,0,7,0,"",0], // model 2.5 hd
|
||||
|
||||
["h3_ultimate2",
|
||||
"suball","fan",0,25,3,"top",[0,270,0],["case",false,false,false],60,0,6,1,0,"",0, // sub fan opening
|
||||
"model","fan_cover",-4,25,3,"top",[0,270,0],["case",false,false,false],60,0,3,2,0,"",0, // model fan cover
|
||||
"platter","fan_cover",-100,150,0,"top",[0,0,0],["case",false,false,false],60,0,3,2,0,"",0, // model fan cover
|
||||
"model","vent_panel_hex",144,11.77,64,"top",[0,90,0],["case",false,false,false],62,107.43,3,5.0,1.6,"y",14, // model vent cover
|
||||
"platter","vent_panel_hex",-200,13.77,0,"top",[0,0,0],["case",false,false,false],62,107.43,3,5.0,1.6,"y",14, // model vent cover
|
||||
"suball","rectangle",111,26.77,62,"top",[0,90,0],["case",true,false,false],58,77.43,4,0,0,"",[2,2,2,2], // vent opening
|
||||
"sub","round",111,16.57,57,"top",[0,90,0],["case",true,false,false],7,0,4,0,0,"",0, // vent cover screw hole
|
||||
"sub","round",111,16.57,9,"bottom",[0,90,0],["case",true,false,false],7,0,4,0,0,"",0, // vent cover screw hole
|
||||
"sub","round",111,114.4,57,"top",[0,90,0],["case",true,false,false],7,0,4,0,0,"",0, // vent cover screw hole
|
||||
"sub","round",111,114.4,9,"bottom",[0,90,0],["case",true,false,false],7,0,4,0,0,"",0, // vent cover screw hole
|
||||
"sub","round",3.81,17.78,35,"top",[0,0,0],["sbc-case_z",true,true,true],6.5,0,19,0,0,"",0, // sub screw hole
|
||||
"sub","round",3.81,106.19,35,"top",[0,0,0],["sbc-case_z",true,true,true],6.5,0,19,0,0,"",0, // sub screw hole
|
||||
"sub","round",106.04,24.77,35,"top",[0,0,0],["sbc-case_z",true,true,true],6.5,0,19,0,0,"",0, // sub screw hole
|
||||
"sub","round",106.04,106.2,35,"top",[0,0,0],["sbc-case_z",true,true,true],6.5,0,19,0,0,"",0, // sub screw hole
|
||||
"add2","nut_holder",144,16.57,57,"top",[0,270,0],["case",false,false,false],8,16,5,"m3","sloped",0,0, // vent cover nut holder
|
||||
"add2","nut_holder",144,16.57,9 ,"bottom",[0,270,0],["case",false,false,false],8,16,5,"m3","sloped",0,0, // vent cover nut holder
|
||||
"add2","nut_holder",144,114.4,57,"top",[0,270,0],["case",false,false,false],8,16,5,"m3","sloped",0,0, // vent cover nut holder
|
||||
"add2","nut_holder",144,114.4,9 ,"bottom",[0,270,0],["case",false,false,false],8,16,5,"m3","sloped",0,0, // vent cover nut holder
|
||||
"sub","rectangle",-4,100.5,3,"top",[0,0,0],["sbc-case_z",true,true,true],14,4,20,0,0,"",[1,1,1,1], // sub rectangle
|
||||
"sub","rectangle",100.5,17,30,"top",[0,0,0],["sbc-case_z",true,true,true],9,4,10,0,0,"",[1,1,1,1], // sub rectangle
|
||||
"add1","round",23,111.5,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",71,111.5,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",-31.5,3,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",-31.5,77,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",-10,111.5,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",101,111.5,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",91.25,-16.5,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",66.25,-16.5,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",42.25,-16.5,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",16.25,-16.5,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",-1,-16.5,4,"top",[0,0,0],["case",true,true,true],4,0,47,0,0,"",0, // wall support
|
||||
"add1","round",-29,109,4,"top",[0,0,0],["case",true,true,true],3,0,47,0,0,"",0, // wall support
|
||||
"add1","round",-29,-14,4,"top",[0,0,0],["case",true,true,true],3,0,47,0,0,"",0, // wall support
|
||||
"add1","round",109,109,4,"top",[0,0,0],["case",true,true,true],3,0,47,0,0,"",0, // wall support
|
||||
"add1","rectangle",2,7,49,"top",[0,0,0],["case",true,true,true],4,80,3,0,0,"",[.25,.25,.25,.25], // ceiling support
|
||||
"add1","rectangle",27,-16.5,49,"top",[0,0,0],["case",true,true,true],4,130,3,0,0,"",[.25,.25,.25,.25], // ceiling support
|
||||
"add1","rectangle",52,-16.5,49,"top",[0,0,0],["case",true,true,true],4,130,3,0,0,"",[.25,.25,.25,.25], // ceiling support
|
||||
"add1","rectangle",77,-16.5,49,"top",[0,0,0],["case",true,true,true],4,130,3,0,0,"",[.25,.25,.25,.25], // ceiling support
|
||||
"add1","rectangle",104,7,49,"top",[0,0,0],["case",true,true,true],4,80,3,0,0,"",[.25,.25,.25,.25], // ceiling support
|
||||
"model","h3_port_extender",31,119,4,"top",[0,0,-90],["case",true,false,true],0,0,0,0,0,"remote",0, // port extender model
|
||||
"sub","h3_port_extender",31,119,4,"top",[0,0,-90],["case",true,false,true],0,0,0,0,0,"remote",0, // port extender openings
|
||||
"model","h3_port_extender_holder",31,119,4,"top",[0,0,-90],["case",true,false,true],0,0,0,2.5,0,"both",0, // port extender holder
|
||||
"platter","h3_port_extender_holder",-170,150,0,"top",[0,0,-90],["case",true,false,true],0,0,0,2.5,0,"remote",0, // port extender holder
|
||||
"model","hk_pwr_button",11,114,53,"top",[0,0,180],["case",false,false,true],0,0,0,0,0,0,0, // hk pwr button model
|
||||
"sub","hk_pwr_button",11,114,53,"top",[0,0,0],["case",false,false,true],0,0,0,0,0,0,0, // hk pwr button opening
|
||||
"model","dsub",12,-1,48,"top",[0,90,0],["case",false,false,false],0,0,0,0,0,0,[9,"male",4], // db9 model
|
||||
"sub","dsub",12,-1,48,"top",[0,90,0],["case",false,false,false],0,0,0,0,0,0,[9,"male",4], // db9 model
|
||||
"add1","access_port",19,20,-0.01,"bottom",[0,0,0],["sbc",true,true,true], 81,100,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",19,20,-0.01,"bottom",[0,0,0],["sbc",true,true,false],81,100,2,0,0,"portrait",0, // access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],81,100,2,0,0,"portrait",0], // access port cover
|
||||
|
||||
["h3_shell_drivebox2.5v",
|
||||
"sub","vent",-3.5,30,58,"top",[0,0,90],["case",false,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",111.5,30,58,"top",[0,0,90],["case",true,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
@@ -865,7 +965,7 @@ accessory_data = [
|
||||
"sub","vent",111.5,30,28,"top",[0,0,90],["case",true,false,false],2,12,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",-3.5,30,4,"bottom",[0,0,90],["case",false,false,false],2,6,4,1,17,"vertical",1, // vent opening
|
||||
"sub","vent",111.5,30,4,"bottom",[0,0,90],["case",true,false,false],2,6,4,1,17,"vertical",1, // vent opening
|
||||
"sub","fan",99,10,48,"top",[0,0,90],["sbc-case_z",true,true,true],90,0,6,2,0,"",0, // fan opening
|
||||
"sub","fan",99,10,48,"top",[0,0,90],["sbc-case_z",true,true,true],90,0,6,2,0,"",0, // fan opening
|
||||
"add1","access_port",10,30,-0.01,"bottom",[0,0,0],["sbc",true,true,false],100,80,2,0,0,"landscape",0, // access port
|
||||
"add2","button",12.34,106.43,53,"top",[0,0,0],["sbc-case_z",true,true,true],10,0,53,0,0,"recess",0, // button
|
||||
"add2","button",23.77,106.43,53,"top",[0,0,0],["sbc-case_z",true,true,true],10,0,53,0,0,"recess",0, // button
|
||||
@@ -874,15 +974,15 @@ accessory_data = [
|
||||
"model","access_cover",10,30,-0.01,"bottom",[0,0,0],["sbc",true,true,false],100,80,2,0,0,"landscape",0, // access port cover
|
||||
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],10,0,58,0,0,"recess",0, // button top
|
||||
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],10,0,58,0,0,"recess",0, // button top
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],100,80,2,0,0,"landscape",0, // access port cover
|
||||
"sub","round",111,24,6.07,"bottom",[0,90,0],["case",true,true,false],3,0,3,0,0,"",0, // sub hd side screw hole
|
||||
"sub","round",111,100.6,6.07,"bottom",[0,90,0],["case",true,true,false],3,0,3,0,0,"",0, // sub hd side screw hole
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],100,80,2,0,0,"landscape",0, // access port cover
|
||||
"sub","round",111,24,6.07,"bottom",[0,90,0],["case",true,true,false],3,0,3,0,0,"",0, // sub hd side screw hole
|
||||
"sub","round",111,100.6,6.07,"bottom",[0,90,0],["case",true,true,false],3,0,3,0,0,"",0, // sub hd side screw hole
|
||||
"add2","hd_vertleft",100,10,1.99,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,3,"portrait",0, // add hd holder
|
||||
"add2","hd_vertright",65,10,1.99,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,0,"portrait",0, // sub hd bottom holes
|
||||
"add2","hd_vertright",65,10,1.99,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,0,"portrait",0, // sub hd bottom holes
|
||||
"sub","hd_vertleft_holes",100,10,-.01,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,3,"portrait",0, // sub hd bottom holes
|
||||
"sub","hd_vertright_holes",65,10,-.01,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,2,"portrait",0, // sub hd bottom holes
|
||||
"model","hd25",65,110,71.85,"bottom",[-90,0,-90],["case",true,true,false],0,0,0,15,0,"",0, // model 2.5 hd
|
||||
"model","hd25",100,110,2,"bottom",[90,0,-90],["case",true,true,false],0,0,0,15,0,"",0], // model 2.5 hd
|
||||
"sub","hd_vertright_holes",65,10,-.01,"bottom",[0,0,0],["case",true,true,false],0,0,0,2.5,2,"portrait",0, // sub hd bottom holes
|
||||
"model","hd25",65,110,71.85,"bottom",[-90,0,-90],["case",true,true,false],0,0,0,15,0,"",0, // model 2.5 hd
|
||||
"model","hd25",100,110,2,"bottom",[90,0,-90],["case",true,true,false],0,0,0,15,0,"",0], // model 2.5 hd
|
||||
|
||||
|
||||
// Nvidia
|
||||
@@ -984,6 +1084,10 @@ accessory_data = [
|
||||
["quartz64b_stacked_poe_hat",
|
||||
"sub","fan",20,0,24.5,"top",[0,0,0],["case",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["star64_shell",
|
||||
"sub","fan",43,28,36,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0, // sub fan opening
|
||||
"sub","rectangle",43,0,36,"top",[0,0,0],["sbc-case_z",true,true,true],40,10,6,0,0,"",[1,1,1,1]], // sub pcie opening
|
||||
|
||||
["show2_shell",
|
||||
"model","hk_wb2",6.25,24.675,16,"top",[0,0,180],["sbc",true,true,true],0,0,0,0,0,"",0, // hk weatherboard2
|
||||
"suball","round",48.75,0,6,"top",[90,0,0],["sbc",true,true,true],4,0,4,0,0,"",0, // sub button access hole
|
||||
@@ -1175,107 +1279,239 @@ accessory_data = [
|
||||
["rpi4b_fitted",
|
||||
"sub","fan",10,10,25.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rpi5_noheatsink_shell",
|
||||
"sub","fan",10,10,24.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rpi5_noheatsink_panel",
|
||||
"sub","fan",10,10,24.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rpi5_noheatsink_stacked",
|
||||
"sub","fan",10,10,24.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rpi5_noheatsink_tray",
|
||||
"sub","fan",10,10,24.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rpi5_noheatsink_tray_sides",
|
||||
"sub","fan",10,10,25.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rpi5_noheatsink_round",
|
||||
"suball","rectangle",4.5,-26,5.5,"top",[0,0,0],["case",false,false,false],11,20,8,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"suball","rectangle",21.5,-26,4,"top",[0,0,0],["case",false,false,false],21,10,15.5,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"sub","fan",10,10,24.5,"top",[0,0,0],["case",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rpi5_noheatsink_hex",
|
||||
"suball","rectangle",4.5,-20,5.5,"top",[0,0,0],["case",false,false,false],11,20,8,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"suball","rectangle",21.5,-26,4,"top",[0,0,0],["case",false,false,false],21,20,15.5,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"sub","fan",10,10,24.5,"top",[0,0,0],["case",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rpi5_noheatsink_snap",
|
||||
"sub","fan",10,10,24.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rpi5_noheatsink_fitted",
|
||||
"sub","fan",10,10,25.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
// Radxa
|
||||
["rockpi4b+_shell",
|
||||
["rock4b+_shell",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4b+_panel",
|
||||
["rock4b+_panel",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4b+_stacked",
|
||||
["rock4b+_stacked",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4b+_tray",
|
||||
["rock4b+_tray",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4b+_tray_sides",
|
||||
["rock4b+_tray_sides",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4b+_round",
|
||||
["rock4b+_round",
|
||||
"suball","rectangle",4.5,-26,14.5,"top",[0,0,0],["sbc",true,true,true],11,20,8,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"suball","rectangle",21.5,-26,13,"top",[0,0,0],["sbc",true,true,true],21,10,15.5,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4b+_hex",
|
||||
["rock4b+_hex",
|
||||
"suball","rectangle",4.5,-20,14.5,"top",[0,0,0],["sbc",true,true,true],11,20,8,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"suball","rectangle",21.5,-26,13,"top",[0,0,0],["sbc",true,true,true],21,20,15.5,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4b+_snap",
|
||||
["rock4b+_snap",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4b+_fitted",
|
||||
["rock4b+_fitted",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c_shell",
|
||||
["rock4c_shell",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c_panel",
|
||||
["rock4c_panel",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c_stacked",
|
||||
["rock4c_stacked",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c_tray",
|
||||
["rock4c_tray",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c_tray_sides",
|
||||
["rock4c_tray_sides",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c_round",
|
||||
["rock4c_round",
|
||||
"suball","rectangle",4.5,-26,14.5,"top",[0,0,0],["sbc",true,true,true],11,20,8,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"suball","rectangle",21.5,-26,13,"top",[0,0,0],["sbc",true,true,true],21,10,15.5,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c_hex",
|
||||
["rock4c_hex",
|
||||
"suball","rectangle",4.5,-20,14.5,"top",[0,0,0],["sbc",true,true,true],11,20,8,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"suball","rectangle",21.5,-26,13,"top",[0,0,0],["sbc",true,true,true],21,20,15.5,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c_snap",
|
||||
["rock4c_snap",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c_fitted",
|
||||
["rock4c_fitted",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c+_shell",
|
||||
["rock4c+_shell",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c+_panel",
|
||||
["rock4c+_panel",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c+_stacked",
|
||||
["rock4c+_stacked",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c+_tray",
|
||||
["rock4c+_tray",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c+_tray_sides",
|
||||
["rock4c+_tray_sides",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c+_round",
|
||||
["rock4c+_round",
|
||||
"suball","rectangle",4.5,-26,14.5,"top",[0,0,0],["sbc",true,true,true],11,20,8,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"suball","rectangle",21.5,-26,13,"top",[0,0,0],["sbc",true,true,true],21,10,15.5,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c+_hex",
|
||||
["rock4c+_hex",
|
||||
"suball","rectangle",4.5,-20,14.5,"top",[0,0,0],["sbc",true,true,true],11,20,8,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"suball","rectangle",21.5,-26,13,"top",[0,0,0],["sbc",true,true,true],21,20,15.5,0,0,"vertical",[1,1,1,1], // sub hdmi opening
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c+_snap",
|
||||
["rock4c+_snap",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi4c+_fitted",
|
||||
["rock4c+_fitted",
|
||||
"sub","fan",10,10,0,"bottom",[0,0,0],["sbc",true,true,false],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["rockpi5b",
|
||||
["rock5b",
|
||||
"sub","rectangle",-1,66.5,12.99,"top",[0,0,0],["sbc",true,true,true],10,2,8,0,0,"",[.25,.25,.25,.25], // UL standoff adjustment
|
||||
"sub","rectangle",92,17.5,12.99,"top",[0,0,0],["sbc",true,true,true],10,2,15,0,0,"",[.25,.25,.25,.25], // LR standoff adjustment
|
||||
"sub","rectangle",93,17.5,12.99,"top",[0,0,0],["sbc",true,true,true],2,10,15,0,0,"",[.25,.25,.25,.25], // LR standoff adjustment
|
||||
"sub","rectangle",78,67,-1,"bottom",[0,0,0],["sbc",true,true,false],14,18,12.5,0,0,"",[.25,.25,.25,.25], // sdcard opening
|
||||
"sub","slot",15,0,21.25,"top",[90,90,0],["sbc",true,true,true],3.75,6.125,5,0,0,"",[.25,.25,.25,.25], // usb-c adjustment
|
||||
"sub","rectangle",81.575,-5,13,"top",[0,0,0],["sbc",true,true,true],16.75,4,14.25,0,0,"",[.25,.25,.25,.25], // rj-45 adjustment
|
||||
"sub","rectangle",64.25,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb3 adjustment
|
||||
"sub","rectangle",45.5,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb2 adjustment
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access cover
|
||||
"platter","access_cover",-110,40,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access cover
|
||||
|
||||
["rock5b_shell",
|
||||
"sub","rectangle",-1,66.5,12.99,"top",[0,0,0],["sbc",true,true,true],10,2,8,0,0,"",[.25,.25,.25,.25], // UL standoff adjustment
|
||||
"sub","rectangle",92,17.5,12.99,"top",[0,0,0],["sbc",true,true,true],10,2,15,0,0,"",[.25,.25,.25,.25], // LR standoff adjustment
|
||||
"sub","rectangle",93,17.5,12.99,"top",[0,0,0],["sbc",true,true,true],2,10,15,0,0,"",[.25,.25,.25,.25], // LR standoff adjustment
|
||||
"sub","rectangle",78,67,-1,"bottom",[0,0,0],["sbc",true,true,false],14,18,12.5,0,0,"",[.25,.25,.25,.25], // sdcard opening
|
||||
"add1","round",62.5,-1.5,14,"top",[0,0,0],["case",true,true,true],3,0,18,0,0,"",0, // wall support
|
||||
"add1","round",80.75,-1.5,14,"top",[0,0,0],["case",true,true,true],2,0,18,0,0,"",0, // wall support
|
||||
"sub","slot",15,0,21.25,"top",[90,90,0],["sbc",true,true,true],3.75,6.125,5,0,0,"",[.25,.25,.25,.25], // usb-c adjustment
|
||||
"sub","rectangle",81.575,-5,13,"top",[0,0,0],["sbc",true,true,true],16.75,4,14.25,0,0,"",[.25,.25,.25,.25], // rj-45 adjustment
|
||||
"sub","rectangle",64.25,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb3 adjustment
|
||||
"sub","rectangle",45.5,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb2 adjustment
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access cover
|
||||
|
||||
["rock5bq",
|
||||
"sub","rectangle",-1,66.5,12.99,"top",[0,0,0],["sbc",true,true,true],10,2,8,0,0,"",[.25,.25,.25,.25], // UL standoff adjustment
|
||||
"sub","rectangle",92,17.5,12.99,"top",[0,0,0],["sbc",true,true,true],10,2,15,0,0,"",[.25,.25,.25,.25], // LR standoff adjustment
|
||||
"sub","rectangle",93,17.5,12.99,"top",[0,0,0],["sbc",true,true,true],2,10,15,0,0,"",[.25,.25,.25,.25], // LR standoff adjustment
|
||||
"sub","rectangle",89,9.25,11,"top",[0,0,0],["case",true,true,false],10,10,15,0,0,"vertical",[1,1,1,1], // sub fitting
|
||||
"sub","rectangle",14,23.5,28,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // heatsink opening
|
||||
"sub","slot",15,0,21.25,"top",[90,90,0],["sbc",true,true,true],3.75,6.125,5,0,0,"",[.25,.25,.25,.25], // usb-c adjustment
|
||||
"sub","rectangle",81.575,-5,13,"top",[0,0,0],["sbc",true,true,true],16.75,4,14.25,0,0,"",[.25,.25,.25,.25], // rj-45 adjustment
|
||||
"sub","rectangle",64.25,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb3 adjustment
|
||||
"sub","rectangle",45.5,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb2 adjustment
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access cover
|
||||
"platter","access_cover",-110,40,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access cover
|
||||
|
||||
["rock5bq_shell",
|
||||
"sub","rectangle",-1,66.5,12.99,"top",[0,0,0],["sbc",true,true,true],10,2,8,0,0,"",[.25,.25,.25,.25], // UL standoff adjustment
|
||||
"sub","rectangle",92,17.5,12.99,"top",[0,0,0],["sbc",true,true,true],10,2,15,0,0,"",[.25,.25,.25,.25], // LR standoff adjustment
|
||||
"sub","rectangle",93,17.5,12.99,"top",[0,0,0],["sbc",true,true,true],2,10,15,0,0,"",[.25,.25,.25,.25], // LR standoff adjustment
|
||||
"sub","rectangle",89,9.25,11,"top",[0,0,0],["case",true,true,false],10,10,15,0,0,"vertical",[1,1,1,1], // sub fitting
|
||||
"sub","rectangle",14,23.5,28,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // heatsink opening
|
||||
"add1","round",62.5,-1.5,14,"top",[0,0,0],["case",true,true,true],3,0,18,0,0,"",0, // wall support
|
||||
"add1","round",80.75,-1.5,14,"top",[0,0,0],["case",true,true,true],2,0,18,0,0,"",0, // wall support
|
||||
"sub","slot",15,0,21.25,"top",[90,90,0],["sbc",true,true,true],3.75,6.125,5,0,0,"",[.25,.25,.25,.25], // usb-c adjustment
|
||||
"sub","rectangle",81.575,-5,13,"top",[0,0,0],["sbc",true,true,true],16.75,4,14.25,0,0,"",[.25,.25,.25,.25], // rj-45 adjustment
|
||||
"sub","rectangle",64.25,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb3 adjustment
|
||||
"sub","rectangle",45.5,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb2 adjustment
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access cover
|
||||
|
||||
["rock5bq_tray",
|
||||
"sub","rectangle",89,9.25,11,"top",[0,0,0],["case",true,true,false],10,10,15,0,0,"vertical",[1,1,1,1], // sub fitting
|
||||
"sub","rectangle",14,23.5,28,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // heatsink opening
|
||||
"sub","slot",15,0,21.25,"top",[90,90,0],["sbc",true,true,true],3.75,6.125,5,0,0,"",[.25,.25,.25,.25], // usb-c adjustment
|
||||
"sub","rectangle",81.575,-5,13,"top",[0,0,0],["sbc",true,true,true],16.75,4,14.25,0,0,"",[.25,.25,.25,.25], // rj-45 adjustment
|
||||
"sub","rectangle",64.25,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb3 adjustment
|
||||
"sub","rectangle",45.5,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb2 adjustment
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access cover
|
||||
|
||||
["rock5bq_tray_sides",
|
||||
"sub","rectangle",89,9.25,11,"top",[0,0,0],["case",true,true,false],10,10,15,0,0,"vertical",[1,1,1,1], // sub fitting
|
||||
"sub","rectangle",14,23.5,30,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // heatsink opening
|
||||
"sub","slot",15,0,21.25,"top",[90,90,0],["sbc",true,true,true],3.75,6.125,5,0,0,"",[.25,.25,.25,.25], // usb-c adjustment
|
||||
"sub","rectangle",81.575,-5,13,"top",[0,0,0],["sbc",true,true,true],16.75,4,14.25,0,0,"",[.25,.25,.25,.25], // rj-45 adjustment
|
||||
"sub","rectangle",64.25,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb3 adjustment
|
||||
"sub","rectangle",45.5,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb2 adjustment
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access cover
|
||||
|
||||
["rock5bq_snap",
|
||||
"sub","rectangle",89,9.25,11,"top",[0,0,0],["case",true,true,false],10,10,15,0,0,"vertical",[1,1,1,1], // sub fitting
|
||||
"sub","rectangle",14,23.5,32,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // heatsink opening
|
||||
"sub","slot",15,0,21.25,"top",[90,90,0],["sbc",true,true,true],3.75,6.125,5,0,0,"",[.25,.25,.25,.25], // usb-c adjustment
|
||||
"sub","rectangle",81.575,-5,13,"top",[0,0,0],["sbc",true,true,true],16.75,4,14.25,0,0,"",[.25,.25,.25,.25], // rj-45 adjustment
|
||||
"sub","rectangle",64.25,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb3 adjustment
|
||||
"sub","rectangle",45.5,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb2 adjustment
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access cover
|
||||
|
||||
["rock5bq_fitted",
|
||||
"sub","rectangle",89,9.25,11,"top",[0,0,0],["case",true,true,false],10,10,15,0,0,"vertical",[1,1,1,1], // sub fitting
|
||||
"sub","rectangle",14,23.5,30,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // heatsink opening
|
||||
"sub","slot",15,0,21.25,"top",[90,90,0],["sbc",true,true,true],3.75,6.125,5,0,0,"",[.25,.25,.25,.25], // usb-c adjustment
|
||||
"sub","rectangle",81.575,-5,13,"top",[0,0,0],["sbc",true,true,true],16.75,4,14.25,0,0,"",[.25,.25,.25,.25], // rj-45 adjustment
|
||||
"sub","rectangle",64.25,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb3 adjustment
|
||||
"sub","rectangle",45.5,-5,13,"top",[0,0,0],["sbc",true,true,true],15,4,17,0,0,"",[.25,.25,.25,.25], // usb2 adjustment
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access cover
|
||||
|
||||
["rock5b-v1.3",
|
||||
"sub","rectangle",-1,66.5,13,"top",[0,0,0],["sbc",true,true,false],10,2,8,0,0,"",[.25,.25,.25,.25], // UL standoff adjustment
|
||||
"sub","rectangle",92,17.5,13,"top",[0,0,0],["sbc",true,true,false],10,2,15,0,0,"",[.25,.25,.25,.25], // LR standoff adjustment
|
||||
"sub","rectangle",77,67,-1,"bottom",[0,0,0],["sbc",true,true,false],15,18,12.5,0,0,"",[.25,.25,.25,.25], // sdcard opening
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access cover
|
||||
|
||||
|
||||
// Khadas
|
||||
@@ -1583,12 +1819,109 @@ accessory_data = [
|
||||
|
||||
["tinkerboard-r2_fitted",
|
||||
"sub","fan",10,10,25.5,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["opi5_shell",
|
||||
"sub","fan",35,13,18,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["opi5_panel",
|
||||
"sub","fan",35,13,18,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["opi5_stacked",
|
||||
"sub","fan",35,13,18,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["opi5_tray",
|
||||
"sub","fan",35,13,18,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["opi5_tray-sides",
|
||||
"sub","fan",35,13,19,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["opi5_snap",
|
||||
"sub","fan",35,13,21,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["opi5_fitted",
|
||||
"sub","fan",35,13,19,"top",[0,0,0],["sbc-case_z",true,true,true],40,0,6,2,0,"",0], // sub fan opening
|
||||
|
||||
["visonfive2_shell",
|
||||
"sub","rectangle",89,9.25,11,"top",[0,0,0],["case",true,true,false],10,10,15,0,0,"vertical",[1,1,1,1], // sub fitting
|
||||
"add1","round",11.25,-.5,10,"top",[0,0,0],["case",true,true,true],2,0,17,0,0,"",0, // wall support
|
||||
"add1","round",29.75,-.5,10,"top",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",50,-.5,10,"top",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",60.875,-.5,10,"top",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",81.125,-.5,10,"top",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access port cover
|
||||
|
||||
// hk uart group
|
||||
["hk_uart",
|
||||
"add2","uart_holder",-25,0,1.9,"bottom",[0,0,0],["sbc",true,false,false],10,10,0,0,0,"",0, // add uart holder
|
||||
"model","hk_uart",-22.5,23,5,"bottom",[0,0,-90],["sbc",true,false,false],10,10,0,0,0,"",0, // add uart model
|
||||
"model","uart_strap",-25,0,2,"bottom",[0,0,0],["sbc",true,false,false],0,0,0,0,0,"",0,
|
||||
"platter","uart_strap",-35,75,-9,"bottom",[0,0,0],["case",false,false,false],0,0,0,0,0,"",0] // hk uart strap
|
||||
["visonfive2_panel",
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access port cover
|
||||
|
||||
["visonfive2_stacked",
|
||||
"sub","rectangle",89,9.25,11,"top",[0,0,0],["case",true,true,false],10,10,15,0,0,"vertical",[1,1,1,1]], // sub fitting
|
||||
|
||||
["visonfive2_tray",
|
||||
"add1","round",11.25,-.5,9,"bottom",[0,0,0],["case",true,true,true],2,0,17,0,0,"",0, // wall support
|
||||
"add1","round",29.75,-.5,9,"bottom",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",50,-.5,9,"bottom",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",60.875,-.5,9,"bottom",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",81.125,-.5,9,"bottom",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access port cover
|
||||
|
||||
["visonfive2_snap",
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access port cover
|
||||
|
||||
["visonfive2_fitted",
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access port cover
|
||||
["visonfive2q_shell",
|
||||
"sub","rectangle",89,9.25,11,"top",[0,0,0],["case",true,true,false],10,10,15,0,0,"vertical",[1,1,1,1], // sub fitting
|
||||
"add1","round",11.25,-.5,10,"top",[0,0,0],["case",true,true,true],2,0,17,0,0,"",0, // wall support
|
||||
"add1","round",29.75,-.5,10,"top",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",50,-.5,10,"top",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",60.875,-.5,10,"top",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",81.125,-.5,10,"top",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"sub","rectangle",27,20,25,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // sub rectangle
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access port cover
|
||||
|
||||
["visonfive2q_panel",
|
||||
"sub","rectangle",27,20,25,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // sub rectangle
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access port cover
|
||||
|
||||
["visonfive2q_stacked",
|
||||
"sub","rectangle",27,20,25,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // sub rectangle
|
||||
"sub","rectangle",89,9.25,11,"top",[0,0,0],["case",true,true,false],10,10,15,0,0,"vertical",[1,1,1,1]], // sub fitting
|
||||
|
||||
["visonfive2q_tray",
|
||||
"sub","rectangle",27,20,25,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // sub rectangle
|
||||
"add1","round",11.25,-.5,9,"bottom",[0,0,0],["case",true,true,true],2,0,17,0,0,"",0, // wall support
|
||||
"add1","round",29.75,-.5,9,"bottom",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",50,-.5,9,"bottom",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",60.875,-.5,9,"bottom",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","round",81.125,-.5,9,"bottom",[0,0,0],["case",true,true,true],3,0,17,0,0,"",0, // wall support
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access port cover
|
||||
|
||||
["visonfive2q_snap",
|
||||
"sub","rectangle",27,20,25,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // sub rectangle
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0], // platter access port cover
|
||||
|
||||
["visonfive2q_fitted",
|
||||
"sub","rectangle",27,20,25,"top",[0,0,0],["sbc-case_z",true,true,true],43,43,6,0,0,"horizontal",[.25,.25,.25,.25], // sub rectangle
|
||||
"add1","access_port",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // access port
|
||||
"model","access_cover",10,0,-0.01,"bottom",[0,0,0],["sbc",true,true,false],80,75,2,0,0,"portrait",0, // model access port cover
|
||||
"platter","access_cover",-110,30,0,"bottom",[0,0,0],["case",false,false,false],80,75,2,0,0,"portrait",0] // platter access port cover
|
||||
];
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
Contributions:
|
||||
hk_vu8m(brackets),u_bracket(),screw(),m1_hdmount() Copyright 2022 Tomek Szczęsny, mctom @ www.forum.odroid.com
|
||||
vent_hex(), vent_panel_hex() Copyright 2023 Tomek Szczęsny, mctom @ www.forum.odroid.com
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -48,6 +49,12 @@
|
||||
20221101 version 2.0.2 added hdmi_a_vertical mask, increased jack_3.5 mask dia.to 6mm, lowered hdmi_a_vertical mask by 2mm,
|
||||
added mask for microsdcard2
|
||||
20221207 version 2.0.3 added double_stacked_usb3-usb2, hd35_vtab(side) and supporting code
|
||||
20231110 version 2.0.4 added h3_port_extender(style, mask = false), hk_pwr_button(mask = false), keyhole(keysize, mask = false),
|
||||
vent_hex(cells_x, cells_y, cell_size, cell_spacing, orientation) and supporting code, dsub(dsubsize, mask = false),
|
||||
vent_panel_hex(x, y, thick, cell_size, cell_spacing, border, borders),
|
||||
added nut_holder(nut, style, dia_x, dia_y, height), fixed access_port and access_cover 180 rotation
|
||||
in portrait and landscape, added h3_port_extender_holder(part,offset), cableholder_spacer()
|
||||
20231115 Version 2.0.5 added hex vent and new component openings
|
||||
|
||||
see https://github.com/hominoids/SBC_Case_Builder
|
||||
|
||||
@@ -117,7 +124,15 @@
|
||||
fan_mask(size, thick, style)
|
||||
mask(loc_x,loc_y,rotation,side,class,type,case_z,wallthick,gap,floorthick,pcb_z)
|
||||
punchout(width,depth,gap,thick,fillet,shape)
|
||||
|
||||
h3_port_extender(style, mask = false)
|
||||
h3_port_extender_holder(part,offset)
|
||||
hk_pwr_button(mask = false)
|
||||
keyhole(keysize, mask = false)
|
||||
vent_hex(cells_x, cells_y, cell_size, cell_spacing, orientation)
|
||||
vent_panel_hex(x, y, thick, cell_size, cell_spacing, border, borders);
|
||||
dsub(dsubsize, mask = false)
|
||||
nut_holder(nut, style, dia_x, dia_y, height)
|
||||
cableholder_spacer()
|
||||
*/
|
||||
|
||||
use <./lib/fillets.scad>;
|
||||
@@ -257,18 +272,50 @@ module add(type,loc_x,loc_y,loc_z,face,rotation,size_x,size_y,size_z,data_1,data
|
||||
if(type == "fan_cover") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) fan_cover(size_x, size_z);
|
||||
}
|
||||
if(type == "vent_panel_hex") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) vent_panel_hex(x=size_x, y=size_y, thick=size_z,
|
||||
cell_size=data_1, cell_spacing=data_2, border=data_4, borders=data_3);
|
||||
}
|
||||
if(type == "feet") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) feet(size_x, size_z);
|
||||
}
|
||||
if(type == "access_port") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) access_port([size_x,size_y,size_z],data_3);
|
||||
if(rotation[2] == 180) {
|
||||
translate([loc_x+size_x,loc_y+size_y,loc_z]) rotate(rotation) access_port([size_x,size_y,size_z],data_3);
|
||||
}
|
||||
else {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) access_port([size_x,size_y,size_z],data_3);
|
||||
}
|
||||
}
|
||||
if(type == "access_cover") {
|
||||
color("grey",1) translate([loc_x,loc_y,loc_z]) rotate(rotation) access_cover([size_x,size_y,size_z],data_3);
|
||||
if(rotation[2] == 180) {
|
||||
color("grey",1) translate([loc_x+size_x,loc_y+size_y,loc_z]) rotate(rotation) access_cover([size_x,size_y,size_z],data_3);
|
||||
}
|
||||
else {
|
||||
color("grey",1) translate([loc_x,loc_y,loc_z]) rotate(rotation) access_cover([size_x,size_y,size_z],data_3);
|
||||
}
|
||||
}
|
||||
if(type == "boom_vring") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) boom_vring(data_1);
|
||||
}
|
||||
if(type == "h3_port_extender") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) h3_port_extender(data_3);
|
||||
}
|
||||
if(type == "h3_port_extender_holder") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) h3_port_extender_holder(data_3,data_1);
|
||||
}
|
||||
if(type == "hk_pwr_button") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_pwr_button();
|
||||
}
|
||||
if(type == "keyhole") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) keyhole(data_4);
|
||||
}
|
||||
if(type == "dsub") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) dsub(data_4);
|
||||
}
|
||||
if(type == "nut_holder") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) nut_holder(data_1, data_2, size_x, size_y, size_z);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -314,12 +361,27 @@ module sub(type,loc_x,loc_y,loc_z,face,rotation,size_x,size_y,size_z,data_1,data
|
||||
if(type == "vent") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) vent(size_x,size_y,size_z,data_4,data_1,data_2,data_3);
|
||||
}
|
||||
if(type == "vent_hex") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) vent_hex(size_x,size_y,size_z,data_1,data_2,data_3);
|
||||
}
|
||||
if(type == "microusb") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) microusb_open();
|
||||
}
|
||||
if(type == "sphere") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) sphere(d=size_x);
|
||||
}
|
||||
if(type == "keyhole") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) keyhole(data_4, true);
|
||||
}
|
||||
if(type == "h3_port_extender") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) h3_port_extender(data_3, true);
|
||||
}
|
||||
if(type == "hk_pwr_button") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_pwr_button(true);
|
||||
}
|
||||
if(type == "dsub") {
|
||||
translate([loc_x,loc_y,loc_z]) rotate(rotation) dsub(data_4, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -705,6 +767,38 @@ module fan_cover(size, thick) {
|
||||
}
|
||||
}
|
||||
|
||||
/* hex vent panel */
|
||||
// borders:
|
||||
// y - specified size along y axis
|
||||
// x - specified size along x axis
|
||||
// none - both borders the size of cell_spacing, no mounting holes
|
||||
// anything else ("default") - all borders of specified size
|
||||
//
|
||||
module vent_panel_hex(x, y, thick, cell_size=8, cell_spacing=3, border=3, borders="default") {
|
||||
hole = 3.2;
|
||||
xb = (borders == "y" || borders == "none") ? cell_spacing : border;
|
||||
yb = (borders == "x" || borders == "none") ? cell_spacing : border;
|
||||
hxb = max(yb/2, cell_spacing + hole);
|
||||
hyb = max(xb/2, cell_spacing + hole);
|
||||
|
||||
cells_x = floor((2*(x-2*xb-cell_size)/(cell_size+cell_spacing))+1);
|
||||
cells_y = floor(((sqrt(12)*(y-2*yb)-4*cell_size)/(3*(cell_size+cell_spacing)))+1);
|
||||
csx = cell_size + (cells_x-1)*(cell_size+cell_spacing)/2;
|
||||
csy = sqrt(4/3)*cell_size + ((cell_size+cell_spacing)*sqrt(3/4)*(cells_y-1));
|
||||
|
||||
difference() {
|
||||
color("grey",1) slab([x,y,thick],2);
|
||||
color("grey",1) translate([(x-csx)/2,(y-csy)/2,-1])
|
||||
vent_hex(cells_x, cells_y, thick+3, cell_size, cell_spacing, "horizontal");
|
||||
if (borders != "none") {
|
||||
color("grey",1) translate([ hxb, hyb, -1]) cylinder(d=hole, h=thick+3);
|
||||
color("grey",1) translate([x - hxb, hyb, -1]) cylinder(d=hole, h=thick+3);
|
||||
color("grey",1) translate([ hxb, y - hyb, -1]) cylinder(d=hole, h=thick+3);
|
||||
color("grey",1) translate([x - hxb, y - hyb, -1]) cylinder(d=hole, h=thick+3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module hk_wb2() {
|
||||
difference () {
|
||||
@@ -1277,11 +1371,11 @@ module hd35() {
|
||||
|
||||
|
||||
/* 3.5" hdd to 2.5" hdd holder */
|
||||
module hdd35_25holder(length) {
|
||||
module hdd35_25holder(length,width=101.6) {
|
||||
wallthick = 3;
|
||||
floorthick = 2;
|
||||
hd35_x = length; // 145mm for 3.5" drive
|
||||
hd35_y = 101.6;
|
||||
hd35_y = width;
|
||||
hd35_z = 12;
|
||||
hd25_x = 100;
|
||||
hd25_y = 69.85;
|
||||
@@ -1307,7 +1401,7 @@ module hdd35_25holder(length) {
|
||||
|
||||
// bottom vents
|
||||
for ( r=[15:40:hd35_x-40]) {
|
||||
for (c=[25:4:75]) {
|
||||
for (c=[hd35_y-76:4:75]) {
|
||||
translate ([r,c,-adjust]) cube([35,2,wallthick+(adjust*2)]);
|
||||
}
|
||||
}
|
||||
@@ -1323,10 +1417,10 @@ module hdd35_25holder(length) {
|
||||
translate([76,wallthick-adjust,7]) rotate([-90,0,0]) cylinder(d=10,h=3);
|
||||
if(length >= 120) {
|
||||
translate([117.5,wallthick-adjust,7]) rotate([-90,0,0]) cylinder(d=10,h=3);
|
||||
translate([117.5,hd35_y-wallthick-adjust,7]) rotate([90,0,0]) cylinder(d=10,h=3);
|
||||
translate([117.5,hd35_y-wallthick+adjust,7]) rotate([90,0,0]) cylinder(d=10,h=3);
|
||||
}
|
||||
translate([76,hd35_y-wallthick-adjust,7]) rotate([90,0,0]) cylinder(d=10,h=3);
|
||||
translate([16,hd35_y-wallthick-adjust,7]) rotate([90,0,0]) cylinder(d=10,h=3);
|
||||
translate([76,hd35_y-wallthick+adjust,7]) rotate([90,0,0]) cylinder(d=10,h=3);
|
||||
translate([16,hd35_y-wallthick+adjust,7]) rotate([90,0,0]) cylinder(d=10,h=3);
|
||||
|
||||
// bottom-side support
|
||||
translate([wallthick,wallthick,floorthick-2]) rotate([45,0,0]) cube([hd35_x-(wallthick*2),3,3]);
|
||||
@@ -1911,11 +2005,11 @@ module header(pins) {
|
||||
|
||||
adjust = .01;
|
||||
$fn = 90;
|
||||
size_x = 2.5;
|
||||
size_y = 2.5 * pins;
|
||||
size_x = 2.54;
|
||||
size_y = 2.54 * pins;
|
||||
union() {
|
||||
color("black") translate([0,0,0]) cube([size_x, size_y, 2.5]);
|
||||
for (i=[1:2.5:size_y]) {
|
||||
for (i=[1:2.54:size_y]) {
|
||||
color("silver") translate ([1,i,2.5]) cube([.64,.64,5]);
|
||||
}
|
||||
}
|
||||
@@ -1968,7 +2062,7 @@ module audio_jack35() {
|
||||
union() {
|
||||
color("dimgray") cube([size_x,size_y,3]);
|
||||
color("dimgray") cube([size_x,5.6,4]);
|
||||
color("dimgray") translate([size_x/2,0,2.25]) rotate([-90,0,0]) cylinder(d=4, h=size_y);
|
||||
color("dimgray") translate([size_x/2,0,2.25]) rotate([-90,0,0]) cylinder(d=6, h=size_y);
|
||||
}
|
||||
color("gray") translate([size_x/2,0,2.25]) rotate([-90,0,0]) cylinder(d=3, h=size_y+adjust);
|
||||
}
|
||||
@@ -2508,15 +2602,32 @@ module microusb_open() {
|
||||
|
||||
/* fan mask to create opening */
|
||||
module fan_mask(size, thick, style) {
|
||||
$fn=90;
|
||||
|
||||
$fn=90;
|
||||
|
||||
if(style == 1) {
|
||||
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-2);
|
||||
// mount holes
|
||||
translate ([size-4,size-4,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([size-4,4,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([4,size-4,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([4,4,-1]) cylinder(h=thick+2, d=3);
|
||||
if(size == 40) {
|
||||
// mount holes
|
||||
translate ([size-4,size-4,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([size-4,4,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([4,size-4,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([4,4,-1]) cylinder(h=thick+2, d=3);
|
||||
}
|
||||
if(size == 60) {
|
||||
// mount holes
|
||||
translate ([size-5,size-5,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([size-5,5,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([5,size-5,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([5,5,-1]) cylinder(h=thick+2, d=3);
|
||||
}
|
||||
if(size >= 80) {
|
||||
// mount holes
|
||||
translate ([size-3.75,size-3.75,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([size-3.75,3.75,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([3.75,size-3.75,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([3.75,3.75,-1]) cylinder(h=thick+2, d=3);
|
||||
}
|
||||
}
|
||||
if(style == 2 && size == 40) {
|
||||
difference() {
|
||||
@@ -2549,7 +2660,48 @@ module fan_mask(size, thick, style) {
|
||||
}
|
||||
translate([6.5,5,-2]) rotate([0,0,45]) cube([size,2,thick+4]);
|
||||
translate([4.5,size-6,-2]) rotate([0,0,-45]) cube([size,2,thick+4]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(style == 2 && size == 60) {
|
||||
difference() {
|
||||
union () {
|
||||
difference() {
|
||||
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-2);
|
||||
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-6);
|
||||
}
|
||||
difference() {
|
||||
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-10);
|
||||
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-14);
|
||||
}
|
||||
difference() {
|
||||
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-18);
|
||||
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-22);
|
||||
}
|
||||
difference() {
|
||||
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-26);
|
||||
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-30);
|
||||
}
|
||||
difference() {
|
||||
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-34);
|
||||
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-38);
|
||||
}
|
||||
difference() {
|
||||
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-42);
|
||||
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-46);
|
||||
}
|
||||
difference() {
|
||||
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-50);
|
||||
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-54);
|
||||
}
|
||||
// mount holes
|
||||
translate ([size-5,size-5,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([size-5,5,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([5,size-5,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([5,5,-1]) cylinder(h=thick+2, d=3);
|
||||
}
|
||||
translate([9.5,8,-2]) rotate([0,0,45]) cube([size,2,thick+4]);
|
||||
translate([8.5,size-10,-2]) rotate([0,0,-45]) cube([size,2,thick+4]);
|
||||
}
|
||||
}
|
||||
if(style == 2 && size >= 80) {
|
||||
difference() {
|
||||
@@ -2582,15 +2734,21 @@ module fan_mask(size, thick, style) {
|
||||
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-74);
|
||||
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-79);
|
||||
}
|
||||
if(size == 92) {
|
||||
difference() {
|
||||
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-86);
|
||||
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-92);
|
||||
}
|
||||
}
|
||||
// mount holes
|
||||
translate ([size-4,size-4,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([size-4,4,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([4,size-4,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([4,4,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([size-3.75,size-3.75,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([size-3.75,3.75,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([3.75,size-3.75,-1]) cylinder(h=thick+2, d=3);
|
||||
translate ([3.75,3.75,-1]) cylinder(h=thick+2, d=3);
|
||||
}
|
||||
translate([6.5,4.25,-2]) rotate([0,0,45]) cube([size*1.2,3,thick+4]);
|
||||
translate([4.25,size-6.5,-2]) rotate([0,0,-45]) cube([size*1.2,3,thick+4]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(style == 3) {
|
||||
inner = size == 30 ? 24 :
|
||||
@@ -2669,16 +2827,16 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
|
||||
}
|
||||
// hdmi vertical opening
|
||||
if(type == "hdmi_a_vertical" && side == "top" && rotation == 0) {
|
||||
place(loc_x-.5,loc_y,loc_z,15,11.5,rotation,side) translate([-.25,0,15.4]) rotate([0,90,0]) hdmi_open("hdmi_a");
|
||||
place(loc_x-.5,loc_y,loc_z+1.5,15,11.5,rotation,side) translate([-.25,0,15.4]) rotate([0,90,0]) hdmi_open("hdmi_a");
|
||||
}
|
||||
if(type == "hdmi_a_vertical" && side == "top" && rotation == 90) {
|
||||
place(loc_x-1,loc_y,loc_z,15,11.5,rotation,side) translate([-.25,0,15.4]) rotate([0,90,0]) hdmi_open("hdmi_a");
|
||||
place(loc_x-1,loc_y,loc_z+1.5,15,11.5,rotation,side) translate([-.25,0,15.4]) rotate([0,90,0]) hdmi_open("hdmi_a");
|
||||
}
|
||||
if(type == "hdmi_a_vertical" && side == "top" && rotation == 180) {
|
||||
place(loc_x,loc_y+1,loc_z,15,11.5,rotation,side) translate([-.25,0,15.4]) rotate([0,90,0]) hdmi_open("hdmi_a");
|
||||
place(loc_x,loc_y+1,loc_z+1.5,15,11.5,rotation,side) translate([-.25,0,15.4]) rotate([0,90,0]) hdmi_open("hdmi_a");
|
||||
}
|
||||
if(type == "hdmi_a_vertical" && side == "top" && rotation == 270) {
|
||||
place(loc_x+1,loc_y-.5,loc_z,15,11.5,rotation,side) translate([-.25,0,15.4]) rotate([0,90,0]) hdmi_open("hdmi_a");
|
||||
place(loc_x+1,loc_y-.5,loc_z+1.5,15,11.5,rotation,side) translate([-.25,0,15.4]) rotate([0,90,0]) hdmi_open("hdmi_a");
|
||||
}
|
||||
// hdmi micro opening
|
||||
if(class == "video" && type == "hdmi_micro" && rotation == 0 && side == "top") {
|
||||
@@ -2956,7 +3114,7 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
|
||||
cube([12,15.5,2]);
|
||||
}
|
||||
if(type == "microsdcard2" && side == "top" && rotation == 270) {
|
||||
place(loc_x+5,loc_y,loc_z+1.75,12,15.5,rotation,side)
|
||||
place(loc_x+5,loc_y,loc_z,12,15.5,rotation,side)
|
||||
cube([12,15.5,2]);
|
||||
}
|
||||
// rj45 opening
|
||||
@@ -2976,6 +3134,22 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
|
||||
place(loc_x+9,loc_y,loc_z,16,17.5,rotation,side)
|
||||
cube([16.5,8,14]);
|
||||
}
|
||||
if(type == "rj45_reverse_single" && rotation == 0) {
|
||||
place(loc_x-.25,loc_y-6,loc_z,16,17.5,rotation,side)
|
||||
cube([16.5,8,14]);
|
||||
}
|
||||
if(type == "rj45_reverse_single" && rotation == 90) {
|
||||
place(loc_x-6,loc_y,loc_z,16,17.5,rotation,side)
|
||||
cube([16.5,8,14]);
|
||||
}
|
||||
if(type == "rj45_reverse_single" && rotation == 180) {
|
||||
place(loc_x,loc_y+10,loc_z,16,17.5,rotation,side)
|
||||
cube([16.5,8,14]);
|
||||
}
|
||||
if(type == "rj45_reverse_single" && rotation == 270) {
|
||||
place(loc_x+9,loc_y,loc_z,16,17.5,rotation,side)
|
||||
cube([16.5,8,14]);
|
||||
}
|
||||
// rj45 short opening
|
||||
if(type == "rj45_single_short" && rotation == 0) {
|
||||
place(loc_x,loc_y-6,loc_z,16,17.5,rotation,side)
|
||||
@@ -2993,6 +3167,27 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
|
||||
place(loc_x+9,loc_y,loc_z,16,17.5,rotation,side)
|
||||
cube([15,8,12]);
|
||||
}
|
||||
// double stacked rj45 opening
|
||||
if(type == "rj45_double_stacked" && rotation == 0) {
|
||||
place(loc_x,loc_y-7.5,loc_z,18,17.5,rotation,side)
|
||||
cube([19,12,27]);
|
||||
}
|
||||
if(type == "rj45_double_stacked" && rotation == 90) {
|
||||
place(loc_x-7.5,loc_y,loc_z,18,17.5,rotation,side)
|
||||
cube([19,12,27]);
|
||||
}
|
||||
if(type == "rj45_double_stacked" && rotation == 180) {
|
||||
place(loc_x,loc_y+11.5,loc_z,18,17.5,rotation,side)
|
||||
cube([19,12,27]);
|
||||
}
|
||||
if(type == "rj45_double_stacked" && rotation == 270) {
|
||||
place(loc_x+10.5,loc_y,loc_z,18,17.5,rotation,side)
|
||||
cube([19,12,27]);
|
||||
}
|
||||
if(type == "rj45_low_profile" && rotation == 0) {
|
||||
place(loc_x,loc_y-6,loc_z-3.5,15,8,rotation,side)
|
||||
cube([14.75,8,12.25]);
|
||||
}
|
||||
// micro usb opening
|
||||
if(class == "usb2" && type == "micro" && rotation == 0 && side == "top") {
|
||||
place(loc_x,loc_y-3,loc_z,8,3,rotation,side) microusb_open();
|
||||
@@ -3102,22 +3297,28 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
|
||||
place(loc_x+2,loc_y+1.5,loc_z-3.25,6,8,rotation,side)
|
||||
rotate([90,0,0]) slot(3.75,6,8);
|
||||
}
|
||||
// single horizontal usbc opening, lifted and enlarged for Lichee RV SoM
|
||||
// TODO: implement other directions
|
||||
if(class == "usbc" && type == "single_horizontal_on_licheerv" && rotation == 0 && side == "top") {
|
||||
place(loc_x+1.5,loc_y+2,loc_z+5.05,6,8,rotation,side)
|
||||
rotate([90,0,0]) slot(6,8,10);
|
||||
}
|
||||
// single vertical usbc opening
|
||||
if(class == "usbc" && type == "single_vertical" && rotation == 0 && side == "top") {
|
||||
place(loc_x+1.5,loc_y+2,loc_z+1.75,6,8,rotation,side)
|
||||
translate([.25,0,5.5]) rotate([90,90,0]) slot(3.75,5.5,8);
|
||||
translate([.25,0,6.25]) rotate([90,90,0]) slot(3.75,5.5,8);
|
||||
}
|
||||
if(class == "usbc" && type == "single_vertical" && rotation == 90 && side == "top") {
|
||||
place(loc_x+2,loc_y+1.5,loc_z+1.75,6,8,rotation,side)
|
||||
translate([.25,0,5.5]) rotate([90,90,0]) slot(3.75,5.5,8);
|
||||
translate([.25,0,5.75]) rotate([90,90,0]) slot(3.75,5.5,8);
|
||||
}
|
||||
if(class == "usbc" && type == "single_vertical" && rotation == 180 && side == "top") {
|
||||
place(loc_x+1.5,loc_y-3-adjust,loc_z+2,6,8,rotation,side)
|
||||
translate([.25,0,5.5]) rotate([90,90,0]) slot(3.75,5.5,8);
|
||||
translate([.25,0,5.75]) rotate([90,90,0]) slot(3.75,5.5,8);
|
||||
}
|
||||
if(class == "usbc" && type == "single_vertical" && rotation == 270 && side == "top") {
|
||||
place(loc_x-3-adjust,loc_y+1.5,loc_z+1.75,6,8,rotation,side)
|
||||
translate([.25,0,5.5]) rotate([90,90,0]) slot(3.75,5.5,8);
|
||||
translate([.25,0,5.75]) rotate([90,90,0]) slot(3.75,5.5,8);
|
||||
}
|
||||
// ir opening
|
||||
if(type == "ir_1" && rotation == 0) {
|
||||
@@ -3240,65 +3441,73 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
|
||||
}
|
||||
// audio jack opening
|
||||
if(type == "jack_3.5" && rotation == 0 && side == "top") {
|
||||
place(loc_x,loc_y,loc_z,7.5,7.5,rotation,side)
|
||||
place(loc_x,loc_y,loc_z+.25,7.5,7.5,rotation,side)
|
||||
union() {
|
||||
translate([3.15,2,2]) rotate([90,0,0]) cylinder(d=6, h=8);
|
||||
translate([3.15,2,2]) rotate([90,0,0]) cylinder(d=7, h=8);
|
||||
translate([-.5,-.5,0]) cube([7.5,2.5,4.5]);
|
||||
}
|
||||
}
|
||||
if(type == "jack_3.5" && rotation == 90 && side == "top") {
|
||||
place(loc_x,loc_y,loc_z,7.5,7.5,rotation,side)
|
||||
union() {
|
||||
translate([4.1,2,2]) rotate([90,0,0]) cylinder(d=6, h=8);
|
||||
translate([4.1,2,2]) rotate([90,0,0]) cylinder(d=7, h=8);
|
||||
translate([.5,-.5,0]) cube([7.5,2.5,4.5]);
|
||||
}
|
||||
}
|
||||
if(type == "jack_3.5" && rotation == 180 && side == "top") {
|
||||
place(loc_x,loc_y,loc_z,7.5,7.5,rotation,side)
|
||||
union() {
|
||||
translate([4.1,-2.5,2]) rotate([90,0,0]) cylinder(d=6, h=8);
|
||||
translate([4.1,-2.5,2]) rotate([90,0,0]) cylinder(d=7, h=8);
|
||||
translate([.5,-5,0]) cube([7.5,2.5,4.5]);
|
||||
}
|
||||
}
|
||||
if(type == "jack_3.5" && rotation == 270 && side == "top") {
|
||||
place(loc_x,loc_y,loc_z,7.5,7.5,rotation,side)
|
||||
union() {
|
||||
translate([3.15,-2.5,2]) rotate([90,0,0]) cylinder(d=6, h=8);
|
||||
translate([3.15,-2.5,2]) rotate([90,0,0]) cylinder(d=7, h=8);
|
||||
translate([-.5,-5,0]) cube([7.5,2.5,4.5]);
|
||||
}
|
||||
}
|
||||
if(type == "jack_3.5" && rotation == 0 && side == "bottom") {
|
||||
place(loc_x-1,loc_y,loc_z-1.5,7.5,7.5,rotation,side)
|
||||
union() {
|
||||
translate([3.15,2,2]) rotate([90,0,0]) cylinder(d=6, h=8);
|
||||
translate([3.15,2,2]) rotate([90,0,0]) cylinder(d=7, h=8);
|
||||
translate([-.5,-.5,0]) cube([7.5,2.5,4.5]);
|
||||
}
|
||||
}
|
||||
if(type == "jack_3.5" && rotation == 90 && side == "bottom") {
|
||||
place(loc_x+4.1,loc_y,loc_z-1.5,7.5,7.5,rotation,side)
|
||||
union() {
|
||||
translate([4.1,2,2]) rotate([90,0,0]) cylinder(d=6, h=8);
|
||||
translate([4.1,2,2]) rotate([90,0,0]) cylinder(d=7, h=8);
|
||||
translate([.5,-.5,0]) cube([7.5,2.5,4.5]);
|
||||
}
|
||||
}
|
||||
if(type == "jack_3.5" && rotation == 180 && side == "bottom") {
|
||||
place(loc_x-1,loc_y,loc_z-1.5,7.5,7.5,rotation,side)
|
||||
union() {
|
||||
translate([4.1,-2.5,2]) rotate([90,0,0]) cylinder(d=6, h=8);
|
||||
translate([4.1,-2.5,2]) rotate([90,0,0]) cylinder(d=6.5, h=8);
|
||||
translate([.5,-5,0]) cube([7.5,2.5,4.5]);
|
||||
}
|
||||
}
|
||||
if(type == "jack_3.5" && rotation == 270 && side == "bottom") {
|
||||
place(loc_x+4.1,loc_y,loc_z-1.5,7.5,7.5,rotation,side)
|
||||
union() {
|
||||
translate([3,-2.5,2]) rotate([90,0,0]) cylinder(d=6, h=8);
|
||||
translate([3,-2.5,2]) rotate([90,0,0]) cylinder(d=7, h=8);
|
||||
translate([-.5,-5,0]) cube([7.5,2.5,4.5]);
|
||||
}
|
||||
}
|
||||
// button opening
|
||||
if(type == "momentary_6x6x4") {
|
||||
place(loc_x,loc_y,loc_z,6,6,rotation,side)
|
||||
translate([3,3,4]) rotate([0,0,0]) cylinder(d=5, h=50);
|
||||
translate([3,3,4]) rotate([0,0,0]) cylinder(d=5, h=10);
|
||||
}
|
||||
if(type == "momentary_4x2x1" && rotation == 0) {
|
||||
place(loc_x,loc_y,loc_z,6,6,rotation,side)
|
||||
translate([2,1.5,1.5]) rotate([270,0,0]) cylinder(d=4, h=10);
|
||||
}
|
||||
if(type == "momentary_4x2x1" && rotation == 180) {
|
||||
place(loc_x,loc_y,loc_z,6,6,rotation,side)
|
||||
translate([4,4,1.5]) rotate([90,0,0]) cylinder(d=4, h=10);
|
||||
}
|
||||
if(type == "momentary_6x6x4_90" && rotation == 0) {
|
||||
place(loc_x,loc_y,loc_z,6,6,rotation,side)
|
||||
@@ -3328,6 +3537,38 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
|
||||
translate([-.5,-3.75,0]) cube([7,2.5,6.5]);
|
||||
}
|
||||
}
|
||||
if(type == "momentary_4.5x3.5x2.5_90" && side == "top" && rotation == 0) {
|
||||
place(loc_x,loc_y,loc_z,4.5,3.5,rotation,side)
|
||||
translate([2.25,0,1.8]) rotate([90,0,0]) cylinder(d=3.5, h=8);
|
||||
}
|
||||
if(type == "momentary_4.5x3.5x2.5_90" && side == "top" && rotation == 90) {
|
||||
place(loc_x,loc_y,loc_z,4.5,3.5,rotation,side)
|
||||
translate([2.25,0,1.8]) rotate([90,0,0]) cylinder(d=3.5, h=8);
|
||||
}
|
||||
if(type == "momentary_4.5x3.5x2.5_90" && side == "top" && rotation == 180) {
|
||||
place(loc_x,loc_y,loc_z,4.5,3.5,rotation,side)
|
||||
translate([2.25,1,1.8]) rotate([90,0,0]) cylinder(d=3.5, h=8);
|
||||
}
|
||||
if(type == "momentary_4.5x3.5x2.5_90" && side == "top" && rotation == 270) {
|
||||
place(loc_x,loc_y,loc_z,4.5,3.5,rotation,side)
|
||||
translate([2.25,1,1.8]) rotate([90,0,0]) cylinder(d=3.5, h=8);
|
||||
}
|
||||
if(type == "momentary_4.5x3.5x2.5_90" && side == "bottom" && rotation == 0) {
|
||||
place(loc_x,loc_y,loc_z,4.5,3.5,rotation,side)
|
||||
translate([2.25,0,3.25]) rotate([90,0,0]) cylinder(d=3.5, h=8);
|
||||
}
|
||||
if(type == "momentary_4.5x3.5x2.5_90" && side == "bottom" && rotation == 90) {
|
||||
place(loc_x,loc_y,loc_z,4.5,3.5,rotation,side)
|
||||
translate([2.25,1.25,3.25]) rotate([90,0,0]) cylinder(d=3.5, h=8);
|
||||
}
|
||||
if(type == "momentary_4.5x3.5x2.5_90" && side == "bottom" && rotation == 180) {
|
||||
place(loc_x,loc_y,loc_z,4.5,3.5,rotation,side)
|
||||
translate([2.25,1.25,3.25]) rotate([90,0,0]) cylinder(d=3.5, h=8);
|
||||
}
|
||||
if(type == "momentary_4.5x3.5x2.5_90" && side == "bottom"&& rotation == 270) {
|
||||
place(loc_x,loc_y,loc_z,4.5,3.5,rotation,side)
|
||||
translate([2.25,0,3.25]) rotate([90,0,0]) cylinder(d=3.5, h=8);
|
||||
}
|
||||
if(type == "momentary_7x3x3_90" && rotation == 0) {
|
||||
place(loc_x,loc_y,loc_z,7,3,rotation,side)
|
||||
translate([0,-6,0]) cube([7,8,3]);
|
||||
@@ -3348,6 +3589,10 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
|
||||
place(loc_x,loc_y,loc_z,7.5,7.5,rotation,side)
|
||||
translate([0,4,0]) cube([7.5,8,4]);
|
||||
}
|
||||
if(type == "audio_micro" && rotation == 90) {
|
||||
place(loc_x,loc_y,loc_z,7.5,7.5,rotation,side)
|
||||
translate([0,4,0]) cube([7.5,8,4]);
|
||||
}
|
||||
if(type == "m1_oem" && rotation == 0) {
|
||||
place(loc_x,loc_y,loc_z,6,6,rotation,side)
|
||||
union() {
|
||||
@@ -3442,3 +3687,331 @@ module vent(width,length,height,gap,rows,columns,orientation) {
|
||||
}
|
||||
}
|
||||
|
||||
// Hex vent opening
|
||||
module vent_hex(cells_x, cells_y, thickness, cell_size, cell_spacing, orientation) {
|
||||
xs = cell_size + cell_spacing;
|
||||
ys = xs * sqrt(3/4);
|
||||
rot = (orientation=="vertical") ? 90 : 0;
|
||||
|
||||
rotate([rot,0,0]) translate([cell_size/2, cell_size*sqrt(1/3),-1]) {
|
||||
for (ix = [0 : ceil(cells_x/2)-1]) {
|
||||
for (iy = [0 : 2 : cells_y-1]) {
|
||||
translate([ix*xs, iy*ys,0]) rotate([0,0,90])
|
||||
cylinder(r=cell_size/sqrt(3), h=thickness, $fn=6);
|
||||
}
|
||||
}
|
||||
for (ix = [0 : (cells_x/2)-1]) {
|
||||
for (iy = [1 : 2 : cells_y-1]) {
|
||||
translate([(ix+0.5)*xs, iy*ys,0]) rotate([0,0,90])
|
||||
cylinder(r=cell_size/sqrt(3), h=thickness, $fn=6);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// hk power button
|
||||
module hk_pwr_button(mask = false) {
|
||||
|
||||
adjust=.01;
|
||||
$fn = 90;
|
||||
|
||||
if(mask == true) {
|
||||
color("silver") translate([0, 0, -19]) cylinder(h=20, d=16);
|
||||
}
|
||||
else {
|
||||
difference() {
|
||||
union() {
|
||||
// light ring
|
||||
difference() {
|
||||
color("blue", .6) translate([0, 0, 1.67]) cylinder(h=.1, d=14.75);
|
||||
color("blue", .6) translate([0, 0, 1.66]) cylinder(h=.2, d=13.75);
|
||||
}
|
||||
// power symbol
|
||||
color("blue", .6) translate([-.5, 0, 1.65]) color("blue", .6) cube([1,3.5,.1]);
|
||||
difference() {
|
||||
color("blue", .6) translate([0, 0, 1.66]) cylinder(h=.1, d=5.75);
|
||||
color("blue", .6) translate([0, 0, 1.65]) cylinder(h=.2, d=4.5);
|
||||
color("blue", .6) translate([-1.75, 0, 1.65]) cube([3.5,4,2]);
|
||||
}
|
||||
// body
|
||||
color("Gainsboro") cylinder(h=1.66, d1=17.75, d2=14.75);
|
||||
color("silver") translate([0, 0, -19]) cylinder(h=19, d=15.8);
|
||||
difference() {
|
||||
color("steelblue") translate([0, 0, -27.9]) cylinder(h=9, d=15.8);
|
||||
color("steelblue") translate([-1+15.8/2, -4, -19-9.1]) cube([2,8,6.1]);
|
||||
color("steelblue") translate([-1-15.8/2, -4, -19-9.1]) cube([2,8,6.1]);
|
||||
}
|
||||
color("white") translate([-3.5, -6, -28]) cube([7,12,2]);
|
||||
|
||||
// nut
|
||||
difference() {
|
||||
translate([0, 0, -4.75]) color("Gainsboro", .6) cylinder(h=2.75, d=21.5, $fn=6);
|
||||
translate([0, 0, -4.75]) color("Gainsboro", .6) cylinder(h=2.75, d=15.8);
|
||||
}
|
||||
// connector pins
|
||||
color("silver") translate([-1.4, -.5, -34.99]) cube([2.8, 1, 7]);
|
||||
color("silver") translate([-1.4, -.5+5, -34.99]) cube([2.8, 1, 7]);
|
||||
color("silver") translate([-1.4, -.5-5, -34.99]) cube([2.8, 1, 7]);
|
||||
color("silver") translate([-1.4-1.75, -.5+1.75, -34.99]) cube([1, 2.8, 7]);
|
||||
color("silver") translate([-1.4+3.5, -.5+1.75, -34.99]) cube([1, 2.8, 7]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// @mctom's odroid-h3 gpio port extender
|
||||
module h3_port_extender(style, mask = false) {
|
||||
|
||||
adjust=.01;
|
||||
$fn = 90;
|
||||
|
||||
if(style == "header") {
|
||||
if(mask == true) {
|
||||
translate([-20, 6.25, 15]) cube([12, 7.5, 14.75]);
|
||||
translate([-20, 15.875, 15]) cube([12, 7.5, 14.75]);
|
||||
translate([-20, 25.375, 15]) cube([12, 7.5, 14.75]);
|
||||
translate([-20, 17, 32.2]) rotate([0, 90, 0]) cylinder(d=3.5, h=12);
|
||||
}
|
||||
else {
|
||||
// gpio 24 pin front position
|
||||
color("silver") translate([1.6, 188.5, 84]) rotate([90, 0, 270]) import("stl/h3_port_extender.stl");
|
||||
// color("dimgrey") translate([-3, 15.75, 0.25]) rotate([90, 180, 180]) import("stl/header_f_2x12_90.stl");
|
||||
translate([0, 2, 8.25]) rotate([0, 180, 0]) header_f(12,8);
|
||||
translate([-2.54, 2, 8.25]) rotate([0, 180, 0]) header_f(12,8);
|
||||
color("dimgrey") translate([-2.5, 0, 29.5]) rotate([270, 0, 90]) import("stl/header_2x2_90.stl");
|
||||
}
|
||||
}
|
||||
if(style == "remote") {
|
||||
if(mask == true) {
|
||||
translate([-19, 6.25, 15]) cube([12,7.5,14.75]);
|
||||
translate([-19, 15.875, 15]) cube([12,7.5,14.75]);
|
||||
translate([-19, 25.375, 15]) cube([12,7.5,14.75]);
|
||||
translate([-19, 17, 32.2]) rotate([0,90,0]) cylinder(d=2.5, h=12);
|
||||
translate([-19, 17, 4.6]) rotate([0,90,0]) cylinder(d=2.5, h=12);
|
||||
}
|
||||
else {
|
||||
// gpio 24 pin front position
|
||||
color("silver") translate([1.6, 188.5, 84]) rotate([90, 0, 270]) import("stl/h3_port_extender.stl");
|
||||
color("dimgrey") translate([-2.5, 0, 29.5]) rotate([270, 0, 90]) import("stl/header_2x2_90.stl");
|
||||
color("dimgrey")translate([9,-.5,12.75]) rotate([0,270,90]) import("stl/header_encl_2x5_90.stl");
|
||||
translate([2, 2, 14.08]) rotate([0, 90, 0]) header(12);
|
||||
translate([2, 2, 11.54]) rotate([0, 90, 0]) header(12);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
// h3_port_extender_holder(part, offset)
|
||||
// part = "both","top","bottom"
|
||||
// offset = projection from inside wall in mm
|
||||
// holder for the @mctom's remote h3 port extender
|
||||
*/
|
||||
module h3_port_extender_holder(part,offset=2) {
|
||||
|
||||
adjust = .01;
|
||||
size = [16-offset,40,5.5];
|
||||
if(part == "bottom" || part == "both") {
|
||||
difference() {
|
||||
translate([-10+offset,-3.5,2]) cube(size);
|
||||
translate([-.25,-.25,-adjust]) cube([2.5, 33.25, 12]);
|
||||
translate([2, 2, -adjust]) cube([10, 28, 12]);
|
||||
translate([-12,(33.25/2)+.25,4.5]) rotate([0,90,0]) cylinder(d=2.7, h=20, $fn=60);
|
||||
// translate([-7,-1.,-adjust]) cylinder(d=4.25, h=20);
|
||||
}
|
||||
}
|
||||
if(part == "top" || part == "both") {
|
||||
difference() {
|
||||
translate([-10+offset,-3.5,29.5]) cube(size);
|
||||
translate([-.25,-.25,28]) cube([2.5, 33.25, 12]);
|
||||
translate([1.5, 2, 27.5-adjust]) cube([10, 28.5, 12]);
|
||||
translate([-12, -4, 28]) cube([20, 13, 10]);
|
||||
translate([1.35, 20, 25.5]) cube([10, 13, 5]);
|
||||
translate([-12,(33.25/2)+.25,32]) rotate([0,90,0]) cylinder(d=2.7, h=20, $fn=60);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// enclosed keyhole
|
||||
module keyhole(keysize, mask = false) {
|
||||
|
||||
adjust=.01;
|
||||
$fn = 90;
|
||||
|
||||
if(mask == true) {
|
||||
union() {
|
||||
translate([0, 0, -adjust]) cylinder(h=keysize[3]+2*adjust, d=keysize[0]);
|
||||
translate([-keysize[1]/2, 0, -adjust]) cube([keysize[1], keysize[2]+keysize[0]/2, keysize[3]+2*adjust]);
|
||||
translate([0, -keysize[1]/2, -adjust]) cube([keysize[2]+keysize[0]/2, keysize[1], keysize[3]+2*adjust]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
difference() {
|
||||
union() {
|
||||
translate([0, 0, -adjust])
|
||||
difference() {
|
||||
difference() {
|
||||
translate([-keysize[2], -keysize[2], keysize[3]]) cube([keysize[2]*3, keysize[2]*3, 4.5]);
|
||||
translate([0, -10, 0]) rotate([0, 0, 135]) cube([20, 10, 10]);
|
||||
translate([keysize[2], keysize[2], -adjust]) cube([keysize[2]*3, keysize[2]*3, keysize[3]+5]);
|
||||
}
|
||||
difference() {
|
||||
translate([-keysize[2]+2, -keysize[2]+2, keysize[3]-adjust])
|
||||
cube([-4+keysize[2]*3, -4+keysize[2]*3, 3.5]);
|
||||
translate([2, -10, 0]) rotate([0, 0, 135]) cube([20, 10, 10]);
|
||||
translate([+keysize[2]-2, keysize[2]-2, -adjust])
|
||||
cube([keysize[2]*3, keysize[2]*3, keysize[3]+5]);
|
||||
}
|
||||
}
|
||||
difference() {
|
||||
translate([-keysize[2], -keysize[2], 0]) cube([keysize[2]*3, keysize[2]*3, keysize[3]]);
|
||||
translate([0, -10, -adjust]) rotate([0, 0, 135]) cube([20, 10, 10]);
|
||||
}
|
||||
}
|
||||
translate([keysize[2], keysize[2], -adjust]) cube([keysize[2]*3, keysize[2]*3, keysize[3]+2*adjust]);
|
||||
union() {
|
||||
translate([0, 0, -adjust]) cylinder(h=keysize[3]+2*adjust, d=keysize[0]);
|
||||
translate([-keysize[1]/2, 0, -adjust]) cube([keysize[1], keysize[2]+keysize[0]/2, keysize[3]+2*adjust]);
|
||||
translate([0, -keysize[1]/2, -adjust]) cube([keysize[2]+keysize[0]/2, keysize[1], keysize[3]+2*adjust]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// d-sub connector
|
||||
module dsub(dsubsize, mask = false) {
|
||||
|
||||
adjust=.01;
|
||||
$fn = 90;
|
||||
|
||||
if(mask == true) {
|
||||
union() {
|
||||
translate([-1, 1, -.75]) rotate([90,0,0]) slab_r([19,10.5,10], [4,4,4,4]);
|
||||
translate([-4, 1, 4.5]) rotate([90,0,0]) cylinder(h=10, d=3);
|
||||
translate([21, 1, 4.5]) rotate([90,0,0]) cylinder(h=10, d=3);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(dsubsize[0] == 9 && dsubsize[1] == "female") {
|
||||
translate([8.5,0.4,4.5]) rotate([90,0,0]) import("./stl/db9_f.stl");
|
||||
}
|
||||
if(dsubsize[0] == 9 && dsubsize[1] == "male") {
|
||||
translate([8.5,0.4,4.5]) rotate([90,0,0]) import("./stl/db9_m.stl");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// nut_holder(nut, style, dia_x, dia_y, height)
|
||||
// nut = "m2", "m2.5", "m3", "m4"
|
||||
// style = "default", "sloped", "trap"
|
||||
// dia_x = top diameter or x size in mm
|
||||
// dia_y = bottom diameter or y size in mm
|
||||
// height = holder height in mm
|
||||
//
|
||||
module nut_holder(nut, style, dia_x, dia_y, height) {
|
||||
|
||||
|
||||
nuts = [[2,4,1.6], // m2 size, diameter, height
|
||||
[2.5,5,2], // m2.5 size, diameter, height
|
||||
[3,5.5,2.4], // m3 size, diameter, height
|
||||
[4,7,3.2]]; // m4 size, diameter, height
|
||||
|
||||
$fn = 180;
|
||||
|
||||
if( style == "default") {
|
||||
difference() {
|
||||
cylinder(d=dia_x, h=height);
|
||||
if(nut == "m2") {
|
||||
translate([0, 0, -1]) cylinder(d=nuts[0][0]+.25, h=height+2);
|
||||
translate([0, 0, 2]) cylinder(d=nuts[0][1]*2/sqrt(3), h=height, $fn=6);
|
||||
}
|
||||
if(nut == "m2.5") {
|
||||
translate([0, 0, -1]) cylinder(d=nuts[1][0]+.25, h=height+2);
|
||||
translate([0, 0, 2]) cylinder(d=nuts[1][1]*2/sqrt(3), h=height, $fn=6);
|
||||
}
|
||||
if(nut == "m3") {
|
||||
translate([0, 0, -1]) cylinder(d=nuts[2][0]+.5, h=height+2);
|
||||
translate([0, 0, 2]) cylinder(d=nuts[2][1]*2/sqrt(3), h=height, $fn=6);
|
||||
}
|
||||
if(nut == "m4") {
|
||||
translate([0, 0, -1]) cylinder(d=nuts[3][0]+.5, h=height+2);
|
||||
translate([0, 0, 2]) cylinder(d=nuts[3][1]*2/sqrt(3), h=height, $fn=6);
|
||||
}
|
||||
}
|
||||
}
|
||||
if( style == "sloped") {
|
||||
difference() {
|
||||
cylinder(d2=dia_x, d1=dia_y, h=height);
|
||||
if(nut == "m2") {
|
||||
translate([0, 0, -1]) cylinder(d=nuts[0][0]+.25, h=height+2);
|
||||
translate([0, 0, 2]) cylinder(d=nuts[0][1]*2/sqrt(3), h=height, $fn=6);
|
||||
}
|
||||
if(nut == "m2.5") {
|
||||
translate([0, 0, -1]) cylinder(d=nuts[1][0]+.25, h=height+2);
|
||||
translate([0, 0, 2]) cylinder(d=nuts[1][1]*2/sqrt(3), h=height, $fn=6);
|
||||
}
|
||||
if(nut == "m3") {
|
||||
translate([0, 0, -1]) cylinder(d=nuts[2][0]+.5, h=height+2);
|
||||
translate([0, 0, 2]) cylinder(d=nuts[2][1]*2/sqrt(3), h=height, $fn=6);
|
||||
}
|
||||
if(nut == "m4") {
|
||||
translate([0, 0, -1]) cylinder(d=nuts[3][0]+.5, h=height+2);
|
||||
translate([0, 0, 2]) cylinder(d=nuts[3][1]*2/sqrt(3), h=height, $fn=6);
|
||||
}
|
||||
}
|
||||
}
|
||||
if( style == "trap") {
|
||||
if(nut == "m2") {
|
||||
difference() {
|
||||
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
|
||||
translate([0, 0, -1]) cylinder(d=nuts[0][0]+.25, h=height+2);
|
||||
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[0][1]*2/sqrt(3), h=nuts[0][2], $fn=6);
|
||||
translate([-nuts[0][1]/2, 0, 2]) cube([nuts[0][1], dia_x, nuts[0][2]]);
|
||||
}
|
||||
}
|
||||
if(nut == "m2.5") {
|
||||
difference() {
|
||||
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
|
||||
translate([0, 0, -1]) cylinder(d=nuts[1][0]+.325, h=height+2);
|
||||
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[1][1]*2/sqrt(3), h=nuts[1][2], $fn=6);
|
||||
translate([-nuts[1][1]/2, 0, 2]) cube([nuts[1][1], dia_x, nuts[1][2]]);
|
||||
}
|
||||
}
|
||||
if(nut == "m3") {
|
||||
difference() {
|
||||
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
|
||||
translate([0, 0, -1]) cylinder(d=nuts[2][0]+.5, h=height+2);
|
||||
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[2][1]*2/sqrt(3), h=nuts[2][2], $fn=6);
|
||||
translate([-nuts[2][1]/2, 0, 2]) cube([nuts[2][1], dia_x, nuts[2][2]]);
|
||||
}
|
||||
}
|
||||
if(nut == "m4") {
|
||||
difference() {
|
||||
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
|
||||
translate([0, 0, -1]) cylinder(d=nuts[3][0]+.5, h=height+2);
|
||||
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[3][1]*2/sqrt(3), h=nuts[3][2], $fn=6);
|
||||
translate([-nuts[3][1]/2, 0, 2]) cube([nuts[3][1], dia_x, nuts[3][2]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
module cableholder_spacer() {
|
||||
|
||||
size = [9.4,16,6];
|
||||
$fn = 90;
|
||||
translate([0,size[2]/2,-5]) rotate([90,0,0])
|
||||
difference() {
|
||||
translate([size[0]/2,size[0]/2,0]) rotate([0,0,90]) slot(size[0],size[1],size[2]);
|
||||
translate([-1,5,3]) rotate([0,90,0]) cylinder(d=3.2, h=12);
|
||||
translate([-1,7.5,-1]) cube([2,20,9]);
|
||||
translate([5,9.5,-1]) rotate([0,0,90]) slot(4.5,11,9);
|
||||
translate([3,20,-1]) rotate([0,0,45]) cube([2,6,9]);
|
||||
}
|
||||
}
|
||||
|
||||
BIN
stl/db9_f.stl
Normal file
BIN
stl/db9_f.stl
Normal file
Binary file not shown.
BIN
stl/db9_m.stl
Normal file
BIN
stl/db9_m.stl
Normal file
Binary file not shown.
BIN
stl/h3_port_extender.stl
Normal file
BIN
stl/h3_port_extender.stl
Normal file
Binary file not shown.
BIN
stl/header_2x2_90.stl
Normal file
BIN
stl/header_2x2_90.stl
Normal file
Binary file not shown.
BIN
stl/header_2x5_90.stl
Normal file
BIN
stl/header_2x5_90.stl
Normal file
Binary file not shown.
BIN
stl/header_encl_2x5_90.stl
Normal file
BIN
stl/header_encl_2x5_90.stl
Normal file
Binary file not shown.
BIN
stl/header_f_2x12_90.stl
Normal file
BIN
stl/header_f_2x12_90.stl
Normal file
Binary file not shown.
Reference in New Issue
Block a user