documentation work and other cleanup and fixes

This commit is contained in:
Edward Kisiel
2024-04-17 17:31:50 -04:00
parent 50f71b69e3
commit 125ec3a477
14 changed files with 2733 additions and 1229 deletions

2289
README.md

File diff suppressed because it is too large Load Diff

View File

@@ -15,17 +15,17 @@
along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
h3_port_extender(style, mask = false)
h3_port_extender_holder(part, offset)
hk_h3_port_extender(style, mask = false)
hk_h3_port_extender_holder(part, offset)
*/
/*
NAME: h3_port_extender
NAME: hk_h3_port_extender
DESCRIPTION: @mctom's odroid-h3 gpio port extender
TODO: none
USAGE: h3_port_extender(style, mask)
USAGE: hk_h3_port_extender(style, mask)
style = "header", "remote"
mask[0] = true enables component mask
@@ -34,7 +34,7 @@
mask[3] = mstyle "default"
*/
module h3_port_extender(style, mask) {
module hk_h3_port_extender(style, mask) {
enablemask = mask[0];
mlength = mask[1];
@@ -99,17 +99,17 @@ module h3_port_extender(style, mask) {
/*
NAME: h3_port_extender_holder
NAME: hk_h3_port_extender_holder
DESCRIPTION: holder for the @mctom's remote h3 port extender
TODO: none
USAGE: h3_port_extender_holder(part, offset)
USAGE: hk_h3_port_extender_holder(part, offset)
part = "top","bottom","both"
mask = true or false, mask for openings
offset = distance from mount face
*/
module h3_port_extender_holder(part,offset=2) {
module hk_h3_port_extender_holder(part,offset=2) {
size = [16-offset,40,5.5];
adj = .01;

View File

@@ -15,12 +15,18 @@
along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
fans(style, size, mask)
fan_cover(size, thick)
fan_mask(size, thick, style)
*/
/*
NAME: fans
DESCRIPTION: creates different fan styles and sizes
TODO: add vans
USAGE: buttons(style, size, mask)
USAGE: fans(style, size, mask)
style = "box",
size[0] = size of fan
@@ -43,7 +49,9 @@ module fans(style, mask) {
["box140x25", 140, 25, 124.5, 4.3, 40, "#353535"],
["box120x25", 120, 25, 105, 4.3, 40, "#353535"],
["box92x25", 92, 25, 82.5, 4.3, 40, "#353535"],
["box92x10", 92, 10, 82.5, 4.3, 40, "#353535"],
["box80x25", 80, 25, 72.5, 4.3, 35, "#353535"],
["box80x10", 80, 10, 72.5, 4.3, 35, "#353535"],
["box60x10", 60, 10, 50, 4.3, 35, "#353535"],
["box50x10", 60, 10, 40, 4.3, 20, "#353535"],
["box40x10", 40, 10, 32, 4.3, 18, "#353535"],
@@ -93,3 +101,269 @@ module fans(style, mask) {
}
}
/*
NAME: fan_cover
DESCRIPTION: creates fan covers for fan openings
TODO: none
USAGE: fan_cover(size, thick, style)
size = size of fan
thick = thickness of cover
style = "fan_open", "fan_1", "fan_2", "fan_hex"
*/
module fan_cover(size, thick, style) {
difference() {
color("grey", 1) slab([size, size, thick], 3);
color("grey", 1) fan_mask(size, thick, style);
}
}
/*
DESCRIPTION: creates heatsink masks for openings
TODO:
USAGE: heatsink_mask(size, thick, style)
size = size of fan
thick = thickness of cover
style = "fan_open", "fan_1", "fan_2", "fan_hex"
*/
module fan_mask(size, thick, style) {
hole_pos = size == 30 ? 3 :
size == 40 ? 4 :
size == 50 || size == 60 || size == 70 ? 5 :
size >= 80 ? 3.75 : 3.75;
$fn = 90;
adj = .01;
if(style == "fan_open") {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-1);
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
}
if(style == "fan_1" && size == 30) {
union() {
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-8);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-11);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-17);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-20);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-25);
}
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
}
translate([5, 4, -2]) rotate([0, 0, 45]) cube([size, 1.5, thick+4]);
translate([4, size-5, -2]) rotate([0, 0, -45]) cube([size, 1.5, thick+4]);
}
}
}
if(style == "fan_1" && size == 40) {
union() {
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-8);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-11);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-17);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-20);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-25);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-28);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-35);
}
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
}
translate([6.5, 5.5, -2]) rotate([0, 0, 45]) cube([size, 1.5, thick+4]);
translate([5, size-6, -2]) rotate([0, 0, -45]) cube([size, 1.5, thick+4]);
}
}
}
if(style == "fan_1" && (size == 50 || size == 60 || size == 70)) {
union() {
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-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-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-46);
}
if(size > 50) {
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-59);
}
}
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
}
translate([8.5, 7, -2]) rotate([0, 0, 45]) cube([size > 60 ? size+4 : size+1, 2, thick+4]);
translate([6.5, size-8, -2]) rotate([0, 0, -45]) cube([size > 60 ? size+4 : size+1, 2, thick+4]);
}
}
}
if(style == "fan_1" && size >= 80) {
union() {
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-9);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-14);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-21);
}
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-33);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-38);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-45);
}
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-57);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-62);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-68);
}
if(size == 92) {
difference() {
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-80);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-85);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-91);
}
}
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -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 == "fan_2") {
inner = size == 30 ? 24 :
size == 40 ? 32 :
size == 50 ? 40 :
size == 60 ? 50 :
size == 70 ? 61.9 :
size == 80 ? 71.5 :
size * 0.8; // Use 80% as default
rings = size <= 40 ? 4 : 6;
bar_size = size <= 40 ? 2 : 3;
screw_offset = inner / 2;
center_point = size * 0.5;
base_ring_size = size * 0.95;
rings_spacing = size / rings;
translate([size/2, size/2, -1])
union() {
translate([screw_offset, screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
translate([-screw_offset, screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
translate([screw_offset, -screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
translate([-screw_offset, -screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
difference() {
union() {
for(i=[inner:-rings_spacing:0]) {
difference() {
cylinder(d=base_ring_size - i, h=thick+2);
translate([0, 0, -1]) cylinder(d=base_ring_size - i - (rings_spacing/2), h=thick+4);
}
}
}
translate([0, 0, 2])
union() {
cylinder(d=bar_size*2+0.1, thick+2); // Add a circle to prevent any tiny holes around cross bar
rotate([0, 0, 45]) cube([size, bar_size, thick+2], center=true);
rotate([0, 0, 45]) cube([bar_size, size, thick+2], center=true);
}
}
}
}
if(style == "fan_hex") {
hex_pos = size == 30 ? [-11.75, -4.5, 0] :
size == 40 ? [-14, -11.25, 0] :
size == 50 ? [-16, -6.5, 0] :
size == 60 ? [-11, -1.5, 0] :
size == 70 ? [-13, -3.5, 0] :
size >= 80 ? [-8.25, -3.5, 0] : [-9, -4, 0];
union() {
difference () {
translate([1+(size-2)/2, 1+(size-2)/2, -1]) cylinder(h=thick+2, d=size-2);
union() {
difference() {
translate([1+(size-2)/2, 1+(size-2)/2, -1-adj]) cylinder(h=thick+3, d=size-2);
translate(hex_pos) vent_hex(15, 8, thick+4, 12, 2, "horizontal");
}
}
}
}
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
}
}

View File

@@ -425,7 +425,7 @@ module hd35_vtab(side) {
/*
NAME: hd_bottom_holes
NAME: hd_holes
DESCRIPTION: creates 2.5" and 3.5" hard drive hole mask for mounting
TODO: none
@@ -434,11 +434,11 @@ module hd35_vtab(side) {
hd = 2.5, 3.5
orientation = "portrait", "landscape"
position = "vertical", "horizontal"
side = "left", "right"
side = "left", "right", "none"
thick = floor thickness
*/
module hd_bottom_holes(hd, orientation, position, side, thick) {
module hd_holes(hd, orientation, position, side, thick) {
adj = .01;
$fn = 90;

View File

@@ -20,17 +20,16 @@
DESCRIPTION: adafruit 4311 2in TFT IPS Display model
TODO: none
USAGE: adafruit_lcd(enablemask, mask[])
USAGE: adafruit_lcd(mask[])
enablemask = true produces mask, false produces model
mask[0] = true enables component mask
mask[0] = true enables mask
mask[1] = mask length
mask[2] = mask setback
mask[3] = mstyle "default"
*/
module adafruit_lcd(enablemask=false, mask) {
module adafruit_lcd(mask) {
size_x = 35.5;
size_y = 59;
@@ -40,7 +39,7 @@ module adafruit_lcd(enablemask=false, mask) {
lcd_size = [34.75,48,2];
corner_radius = 2;
hole_size = 2.5;
cmask = mask[0];
enablemask = mask[0];
mlen = mask[1];
back = mask[2];
mstyle = mask[3];
@@ -48,7 +47,7 @@ module adafruit_lcd(enablemask=false, mask) {
adj = .01;
$fn = 90;
if(enablemask == true && cmask == true && mstyle == "default") {
if(enablemask == true && mstyle == "default") {
translate([2.25, 11, size_z+2.5-back]) cube([lcd_size[0]-4, lcd_size[1]-7, mlen]);
storage("microsdcard", 11, 44, 0, "bottom", 180, [size_x, size_z, size_y], [0], size_z, enablemask, [true, 20, 0, "default"]);
fpc("fh19", .5, 22, 0, "bottom", 270, [18,0,0], ["smt","side","white","black"], size_z, enablemask, [true,10,2,"default"]);

View File

@@ -30,12 +30,12 @@
m1_hdmount()
hk_speaker()
hk_boom(speakers, orientation, mask)
hk_boom_speaker(side, speaker, pcb, mask)
boom_speaker(mask)
hk_boom_speaker_pcb(side, speaker, pcb, mask)
hk_boom_speaker(mask)
hk_boom_grill(style, thick)
boom_speaker_holder(style, tolerance)
boom_speaker_strap()
boom_vring(tolerance)
hk_boom_speaker_holder(style, tolerance)
hk_boom_speaker_strap()
hk_boom_vring(tolerance)
hk_pwr_button(mask)
hk_m1s_case_holes
hk_m1s_ups()
@@ -850,7 +850,7 @@ module m1_hdmount() {
translate ([ 76, 10.15, 0]) rotate([180,0,0]) screw([3, 7, 0]);
}
// "HDD HOLDER"
// hdd holder
color([0.9, 0.9, 0.9])
translate([67,8,0]) rotate([180,0,180])
linear_extrude(height=0.01) text("HDD HOLDER",5);
@@ -972,12 +972,12 @@ module hk_boom(speakers, orientation, mask) {
}
if(mstyle == "default" || mstyle == "speakers") {
if(speakers == true && orientation == "rear") {
translate([-31.5/2,35/2,1.6]) boom_speaker(mask);
translate([60+(31.5/2),35/2,1.6]) boom_speaker(mask);
translate([-31.5/2,35/2,1.6]) hk_boom_speaker(mask);
translate([60+(31.5/2),35/2,1.6]) hk_boom_speaker(mask);
}
if(speakers == true && orientation == "front") {
translate([-31.5/2,35/2,0]) rotate([0,180,0]) boom_speaker(mask);
translate([60+(31.5/2),35/2,0]) rotate([0,180,0]) boom_speaker(mask);
translate([-31.5/2,35/2,0]) rotate([0,180,0]) hk_boom_speaker(mask);
translate([60+(31.5/2),35/2,0]) rotate([0,180,0]) hk_boom_speaker(mask);
}
}
}
@@ -1047,23 +1047,23 @@ module hk_boom(speakers, orientation, mask) {
translate([10,12,1.6-adj]) color("dimgrey") cube([4,4,1]);
translate([32.5,9,1.6-adj]) color("dimgrey") cube([3.5,3,1]);
if(speakers == true && orientation == "rear") {
translate([-31.5/2,35/2,1.6]) boom_speaker([false,10,0,"default"]);
translate([60+(31.5/2),35/2,1.6]) boom_speaker([false,10,0,"default"]);
translate([-31.5/2,35/2,1.6]) hk_boom_speaker([false,10,0,"default"]);
translate([60+(31.5/2),35/2,1.6]) hk_boom_speaker([false,10,0,"default"]);
}
if(speakers == true && orientation == "front") {
translate([-31.5/2,35/2,0]) rotate([0,180,0]) boom_speaker([false,10,0,"default"]);
translate([60+(31.5/2),35/2,0]) rotate([0,180,0]) boom_speaker([false,10,0,"default"]);
translate([-31.5/2,35/2,0]) rotate([0,180,0]) hk_boom_speaker([false,10,0,"default"]);
translate([60+(31.5/2),35/2,0]) rotate([0,180,0]) hk_boom_speaker([false,10,0,"default"]);
}
}
}
/*
NAME: hk_boom_speaker
DESCRIPTION: hardkernel stereo boom bonnet pcb and speakers
NAME: hk_boom_speaker_pcb
DESCRIPTION: hardkernel stereo boom bonnet speakers with optional speaker pcbs
TODO: none
USAGE: hk_boom_speaker(side, speaker, pcb, mask)
USAGE: hk_boom_speaker_pcb(side, speaker, pcb, mask)
side = "left, "right"
speakers = true, false
@@ -1074,7 +1074,7 @@ module hk_boom(speakers, orientation, mask) {
mask[3] = mstyle "default"
*/
module hk_boom_speaker(side, speaker, pcb, mask) {
module hk_boom_speaker_pcb(side, speaker, pcb, mask) {
enablemask = mask[0];
mlength = mask[1];
@@ -1085,7 +1085,7 @@ module hk_boom_speaker(side, speaker, pcb, mask) {
$fn = 90;
if(enablemask == true) {
translate([31.5/2,35/2,0]) boom_speaker(mask);
translate([31.5/2,35/2,0]) hk_boom_speaker(mask);
}
if(enablemask == false) {
if(pcb == true) {
@@ -1109,28 +1109,28 @@ module hk_boom_speaker(side, speaker, pcb, mask) {
}
}
if(speaker == true && pcb == true) {
translate([(31.5/2),35/2,1.6]) boom_speaker([false,10,0,"default"]);
translate([(31.5/2),35/2,1.6]) hk_boom_speaker([false,10,0,"default"]);
}
if(speaker == true && pcb == false) {
boom_speaker([false,10,0,"default"]);
hk_boom_speaker([false,10,0,"default"]);
}
}
}
/*
NAME: boom_speaker
NAME: hk_boom_speaker
DESCRIPTION: hardkernel stereo boom bonnet speakers
TODO: none
USAGE: boom_speaker(mask)
USAGE: hk_boom_speaker(mask)
mask[0] = true enables component mask
mask[1] = mask length
mask[2] = mask setback
mask[3] = mstyle "default"
*/
module boom_speaker(mask) {
module hk_boom_speaker(mask) {
enablemask = mask[0];
mlength = mask[1];
@@ -1218,17 +1218,17 @@ module hk_boom_grill(style, thick) {
/*
NAME: boom_speaker_holder
NAME: hk_boom_speaker_holder
DESCRIPTION: hardkernel stereo boom bonnet speaker holder
TODO: none
USAGE: boom_speaker_holder(style, tolerance)
USAGE: hk_boom_speaker_holder(style, tolerance)
style = "friction", "clamp"
tolerance = friction adjustment
*/
module boom_speaker_holder(style, tolerance=0) {
module hk_boom_speaker_holder(style, tolerance=0) {
adj = .01;
$fn = 90;
@@ -1262,16 +1262,16 @@ module boom_speaker_holder(style, tolerance=0) {
/*
NAME: boom_speaker_strap
NAME: hk_boom_speaker_strap
DESCRIPTION: hardkernel stereo boom bonnet speaker clamp holder top
TODO: none
USAGE: boom_speaker_strap(side)
USAGE: hk_boom_speaker_strap(side)
side = "left", "right"
*/
module boom_speaker_strap(side) {
module hk_boom_speaker_strap(side) {
topthick = 2;
top_height = 14;
@@ -1319,16 +1319,16 @@ module boom_speaker_strap(side) {
/*
NAME: boom_vring
NAME: hk_boom_vring
DESCRIPTION: hardkernel stereo boom bonnet volume ring
TODO: none
USAGE: boom_vring(tolerance)
USAGE: hk_boom_vring(tolerance)
tolerance = friction fit adjustment
*/
module boom_vring(tolerance) {
module hk_boom_vring(tolerance) {
out_dia = 22;
in_dia = 16.15 + tolerance;

View File

@@ -18,52 +18,9 @@
vent(width, length, height, gap, rows, columns, orientation)
vent_hex(cells_x, cells_y, thickness, cell_size, cell_spacing, orientation)
vent_panel_hex(x, y, thick, cell_size, cell_spacing, border, borders);
fan_cover(size, thick)
fan_mask(size, thick, style)
*/
/*
NAME: vent
DESCRIPTION: creates vent mask patterns
TODO: none
USAGE: vent(width, length, height, gap, rows, columns, orientation)
width = coloumn size_x
length = column size_y
height = size_z
gap = space between
rows = #row
columns = #columns
orientation = "horizontal", "vertical"
*/
module vent(width, length, height, gap, rows, columns, orientation) {
fillet = width/2;
adj = .01;
$fn=90;
// vertical orientation
if(orientation == "vertical") { rotate([90,0,0])
for (r=[0:length+gap:rows*(length+gap)-1]) {
for (c=[0:width+(2*gap):(columns*(width+(2*gap)))-1]) {
translate ([c,r,-1]) cube([width,length,height]);
}
}
}
// horizontal orientation
if(orientation == "horizontal") {
for (r=[0:length+(2*gap):rows*(length+gap)]) {
for (c=[0:width+(2*gap):(columns*(width+(2*gap)))-1]) {
translate ([c,r,-1]) cube([width,length,height]);
}
}
}
}
/*
NAME: vent_panel_hex
DESCRIPTION: creates hex vent panel
@@ -107,267 +64,3 @@ module vent_panel_hex(x, y, thick, cell_size=8, cell_spacing=3, border=3, border
}
/*
NAME: fan_cover
DESCRIPTION: creates fan covers for fan openings
TODO: none
USAGE: fan_cover(size, thick, style)
size = size of fan
thick = thickness of cover
style = fan mask style
*/
module fan_cover(size, thick, style) {
difference() {
color("grey", 1) slab([size, size, thick], 3);
color("grey", 1) fan_mask(size, thick, style);
}
}
/*
DESCRIPTION: creates heatsink masks for openings
TODO:
USAGE: heatsink_mask(size, thick, style)
size = size of fan
thick = thickness of cover
style = 0="fan_open", 1="fan_1", 2="fan_2", 3"fan_hex"
*/
module fan_mask(size, thick, style) {
hole_pos = size == 30 ? 3 :
size == 40 ? 4 :
size == 50 || size == 60 || size == 70 ? 5 :
size >= 80 ? 3.75 : 3.75;
$fn = 90;
adj = .01;
if(style == 0) {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-1);
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
}
if(style == 1 && size == 30) {
union() {
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-8);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-11);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-17);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-20);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-25);
}
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
}
translate([5, 4, -2]) rotate([0, 0, 45]) cube([size, 1.5, thick+4]);
translate([4, size-5, -2]) rotate([0, 0, -45]) cube([size, 1.5, thick+4]);
}
}
}
if(style == 1 && size == 40) {
union() {
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-8);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-11);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-17);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-20);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-25);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-28);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-35);
}
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
}
translate([6.5, 5.5, -2]) rotate([0, 0, 45]) cube([size, 1.5, thick+4]);
translate([5, size-6, -2]) rotate([0, 0, -45]) cube([size, 1.5, thick+4]);
}
}
}
if(style == 1 && (size == 50 || size == 60 || size == 70)) {
union() {
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-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-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-46);
}
if(size > 50) {
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-59);
}
}
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
}
translate([8.5, 7, -2]) rotate([0, 0, 45]) cube([size > 60 ? size+4 : size+1, 2, thick+4]);
translate([6.5, size-8, -2]) rotate([0, 0, -45]) cube([size > 60 ? size+4 : size+1, 2, thick+4]);
}
}
}
if(style == 1 && size >= 80) {
union() {
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-9);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-14);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-21);
}
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-33);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-38);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-45);
}
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-57);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-62);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-68);
}
if(size == 92) {
difference() {
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-80);
}
difference() {
translate([size/2, size/2, -1]) cylinder(h=thick+2, d=size-85);
translate([size/2, size/2, -2]) cylinder(h=thick+4, d=size-91);
}
}
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -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 == 2) {
inner = size == 30 ? 24 :
size == 40 ? 32 :
size == 50 ? 40 :
size == 60 ? 50 :
size == 70 ? 61.9 :
size == 80 ? 71.5 :
size * 0.8; // Use 80% as default
rings = size <= 40 ? 4 : 6;
bar_size = size <= 40 ? 2 : 3;
screw_offset = inner / 2;
center_point = size * 0.5;
base_ring_size = size * 0.95;
rings_spacing = size / rings;
translate([size/2, size/2, -1])
union() {
translate([screw_offset, screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
translate([-screw_offset, screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
translate([screw_offset, -screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
translate([-screw_offset, -screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
difference() {
union() {
for(i=[inner:-rings_spacing:0]) {
difference() {
cylinder(d=base_ring_size - i, h=thick+2);
translate([0, 0, -1]) cylinder(d=base_ring_size - i - (rings_spacing/2), h=thick+4);
}
}
}
translate([0, 0, 2])
union() {
cylinder(d=bar_size*2+0.1, thick+2); // Add a circle to prevent any tiny holes around cross bar
rotate([0, 0, 45]) cube([size, bar_size, thick+2], center=true);
rotate([0, 0, 45]) cube([bar_size, size, thick+2], center=true);
}
}
}
}
if(style == 3) {
hex_pos = size == 30 ? [-11.75, -4.5, 0] :
size == 40 ? [-14, -11.25, 0] :
size == 50 ? [-16, -6.5, 0] :
size == 60 ? [-11, -1.5, 0] :
size == 70 ? [-13, -3.5, 0] :
size >= 80 ? [-8.25, -3.5, 0] : [-9, -4, 0];
union() {
difference () {
translate([1+(size-2)/2, 1+(size-2)/2, -1]) cylinder(h=thick+2, d=size-2);
union() {
difference() {
translate([1+(size-2)/2, 1+(size-2)/2, -1-adj]) cylinder(h=thick+3, d=size-2);
translate(hex_pos) vent_hex(15, 8, thick+4, 12, 2, "horizontal");
}
}
}
}
// mount holes
translate([size-hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([size-hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, size-hole_pos, -1]) cylinder(h=thick+2, d=3);
translate([hole_pos, hole_pos, -1]) cylinder(h=thick+2, d=3);
}
}

View File

@@ -48,108 +48,13 @@ module add(type, loc_x, loc_y, loc_z, face, rotation, size, data, mask) {
msetback = mask[2];
mstyle = mask[3];
if(type == "rectangle") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) slab_r([size_x,size_y,size_z],data[0]);
if(type == "access_cover") {
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[0]);
}
if(type == "round") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) cylinder(d=size_x,h=size_z);
else {
color("grey",1) translate([loc_x,loc_y,loc_z]) rotate(rotation) access_cover([size_x,size_y,size_z],data[0]);
}
if(type == "slot") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) slot(size_x,size_y,size_z);
}
if(type == "text") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) linear_extrude(height = size_z) text(data[1], size=data[0]);
}
if(type == "art") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) art(data[0],data[1],data[2]);
}
if(type == "stl_model") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) stl_model(data[0],data[1]);
}
if(type == "standoff") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) standoff(data[0], mask);
}
if(type == "button") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) buttons(data[0],[size_x,size_y,size_z],data[1],data[2],mask);
}
if(type == "button_top") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) button_assembly(data[0],size_x,size_z);
}
if(type == "pcb_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) pcb_holder([size_x,size_y,size_z],data[0]);
}
if(type == "batt_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) batt_holder(data[0]);
}
if(type == "hk_uart_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_uart_holder(mask);
}
if(type == "hk_uart_strap") {
color("grey",1) translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_uart_strap();
}
if(type == "hd_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd_mount(data[0],data[1], "horizontal", "none");
}
if(type == "hd_vertleft") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd_mount(data[0],data[1], "vertical", "left");
}
if(type == "hd_vertright") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd_mount(data[0],data[1], "vertical", "right");
}
if(type == "hd25") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd25(data[0]);
}
if(type == "hd35") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd35();
}
if(type == "hk_wb2") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_wb2();
}
if(type == "hc4_oled") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_hc4_oled(mask);
}
if(type == "hc4_oled_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_hc4_oled_holder(face, size_z, mask);
}
if(type == "hk_netcard") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_netcard(mask);
}
if(type == "hk_lcd35") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_35lcd(mask);
}
if(type == "hk_m1s_ups") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_m1s_ups(mask);
}
if(type == "hk_uart") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_uart(mask);
}
if(type == "hk_vu7c") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_vu7c(data[0],data[1],mask);
}
if(type == "hk_boom") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom(data[0],data[1],mask);
}
if(type == "boom_speaker") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom_speaker(data[1],true,data[0],mask);
}
if(type == "boom_grill") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom_grill(data[0],size_z);
}
if(type == "boom_speaker_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) boom_speaker_holder(data[0],data[1]);
}
if(type == "hk_speaker") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_speaker(mask);
}
if(type == "fan_cover") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) fan_cover(size_x, size_z, data[0]);
}
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[0], cell_spacing=data[1], border=data[3], borders=data[2]);
}
if(type == "feet") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) feet(size_x, size_z);
}
if(type == "access_panel") {
if(rotation[2] == 180) {
@@ -159,33 +64,145 @@ module add(type, loc_x, loc_y, loc_z, face, rotation, size, data, mask) {
translate([loc_x,loc_y,loc_z]) rotate(rotation) access_panel([size_x,size_y,size_z],data[0],mask);
}
}
if(type == "access_cover") {
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[0]);
if(type == "art") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) art(data[0],data[1],data[2]);
}
else {
color("grey",1) translate([loc_x,loc_y,loc_z]) rotate(rotation) access_cover([size_x,size_y,size_z],data[0]);
if(type == "batt_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) batt_holder(data[0]);
}
if(type == "button") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) buttons(data[0],[size_x,size_y,size_z],data[1],data[2],mask);
}
if(type == "boom_vring") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) boom_vring(data[0]);
if(type == "button_assembly") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) button_assembly(data[0],size_x,size_z);
}
if(type == "h3_port_extender") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) h3_port_extender(data[0],mask);
if(type == "fan_cover") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) fan_cover(size_x, size_z, data[0]);
}
if(type == "h3_port_extender_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) h3_port_extender_holder(data[1],data[0]);
if(type == "feet") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) feet(size_x, size_z);
}
if(type == "hk_pwr_button") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_pwr_button(mask);
if(type == "hd_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd_mount(data[0],data[1],data[2],data[3]);
}
if(type == "hk_boom_grill") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom_grill(data[0],size_z);
}
if(type == "hk_boom_speaker_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom_speaker_holder(data[0],data[1]);
}
if(type == "hk_boom_vring") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom_vring(data[0]);
}
if(type == "hk_h3_port_extender_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_h3_port_extender_holder(data[1],data[0]);
}
if(type == "hk_hc4_oled_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_hc4_oled_holder(face, size_z, mask);
}
if(type == "hk_uart_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_uart_holder(mask);
}
if(type == "hk_uart_strap") {
color("grey",1) translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_uart_strap();
}
if(type == "keyhole") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) keyhole(data[0],mask);
}
if(type == "dsub") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) dsub(data[0], data[1], mask);
}
if(type == "nut_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) nut_holder(data[0], data[1], size_x, size_y, size_z);
}
if(type == "pcb_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) pcb_holder([size_x,size_y,size_z],data[0]);
}
if(type == "rectangle") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) slab_r([size_x,size_y,size_z],data[0]);
}
if(type == "round") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) cylinder(d=size_x,h=size_z);
}
if(type == "slot") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) slot(size_x,size_y,size_z);
}
if(type == "sphere") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) sphere(d=size_x);
}
if(type == "standoff") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) standoff(data[0], mask);
}
if(type == "text") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) linear_extrude(height = size_z) text(data[1], size=data[0]);
}
if(type == "vent_panel_hex") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) vent_panel_hex(size_x, size_y, thick=size_z,
cell_size=data[0], cell_spacing=data[1], border=data[3], borders=data[2]);
}
// models
if(type == "adafruit_lcd") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) adafruit_lcd(mask);
}
if(type == "dsub") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) dsub(data[0], data[1], mask);
}
if(type == "fan") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) fans(data[0],mask);
}
if(type == "hd25") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd25(data[0]);
}
if(type == "hd35") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd35();
}
if(type == "hk_boom") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom(data[0],data[1],mask);
}
if(type == "hk_boom_speaker") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom_speaker(data[1],true,data[0],mask);
}
if(type == "hk_boom_speaker_pcb") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom_speaker_pcb(data[1],true,data[0],mask);
}
if(type == "hk_h3_port_extender") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_h3_port_extender(data[0],mask);
}
if(type == "hk_hc4_oled") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_hc4_oled(mask);
}
if(type == "hk_lcd35") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_35lcd(mask);
}
if(type == "hk_m1s_ups") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_m1s_ups(mask);
}
if(type == "hk_netcard") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_netcard(mask);
}
if(type == "hk_pwr_button") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_pwr_button(mask);
}
if(type == "hk_speaker") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_speaker(mask);
}
if(type == "hk_uart") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_uart(mask);
}
if(type == "hk_vu7c") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_vu7c(data[0],data[1],mask);
}
if(type == "hk_vu8m") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_vu8m(data[0],mask);
}
if(type == "hk_vu8s") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_vu8s(mask);
}
if(type == "hk_wb2") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_wb2();
}
if(type == "hk_xu4_shifter_shield") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_xu4_shifter_shield(mask);
}
if(type == "stl_model") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) stl_model(data[0],data[1]);
}
}

View File

@@ -459,7 +459,7 @@ module case_bottom(case_design) {
// rear io plate opening for standard form motherboards
if(rear_io_plate == true) {
if(sbc_model == "mini-stx") {
translate([6.2+pcb_loc_x,-4.5,-2+bottom_height-case_offset_bz-pcb_z+pcb_loc_z]) cube([123.95, 10+pcb_loc_y, 40]);
translate([6.2+pcb_loc_x,-4.5,-4.4+bottom_height-case_offset_bz-pcb_z+pcb_loc_z]) cube([123.95, 10+pcb_loc_y, 40]);
}
else {
translate([-2.62+pcb_loc_x,-4.5,-2+bottom_height-case_offset_bz-pcb_z+pcb_loc_z]) cube([158.75, 10+pcb_loc_y, 44]);

View File

@@ -382,7 +382,7 @@ module case_top(case_design) {
// rear io plate opening for standard form motherboards
if(rear_io_plate == true) {
if(sbc_model == "mini-stx") {
translate([6.2+pcb_loc_x,-4.5,-2+bottom_height-case_offset_bz-pcb_z+pcb_loc_z]) cube([123.95, 10+pcb_loc_y, 40]);
translate([6.2+pcb_loc_x,-4.5,-4.4+bottom_height-case_offset_bz-pcb_z+pcb_loc_z]) cube([123.95, 10+pcb_loc_y, 40]);
}
else {
translate([-2.62+pcb_loc_x,-4.5,-2+bottom_height-case_offset_bz-pcb_z+pcb_loc_z]) cube([158.75, 10+pcb_loc_y, 44]);

View File

@@ -48,6 +48,18 @@ module sub(type, loc_x, loc_y, loc_z, face, rotation, size, data, mask) {
msetback = mask[2];
mstyle = mask[3];
if(type == "art") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) art(data[0],data[1],data[2]);
}
if(type == "fan_mask") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) fan_mask(size_x, size_z, data[0]);
}
if(type == "hd_holes") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd_bottom_holes(data[0],data[1],data[2],data[3],data[4]);
}
if(type == "knockout") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) knockout(size_x,size_y,data[0],size_z,data[1],data[2]);
}
if(type == "rectangle") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) slab_r([size_x,size_y,size_z],data[0]);
}
@@ -57,55 +69,16 @@ module sub(type, loc_x, loc_y, loc_z, face, rotation, size, data, mask) {
if(type == "slot") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) slot(size_x,size_y,size_z);
}
if(type == "sphere") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) sphere(d=size_x);
}
if(type == "text") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) linear_extrude(height = size_z) text(data_2, size=data[0]);
}
if(type == "art") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) art(data[0],data[1],data[2]);
}
if(type == "button") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) buttons(data[0],[size_x,size_y,size_z],data[1],data[2],mask);
}
if(type == "hd_holes") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd_bottom_holes(data[0],data[2],"none","none",data[1]);
}
if(type == "hd_vertleft_holes") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd_bottom_holes(data[0],data[2],"vertical","left",data[1]);
}
if(type == "hd_vertright_holes") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd_bottom_holes(data[0],data[2],"vertical","right",data[1]);
}
if(type == "hk_fan_top") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_fan_top();
}
if(type == "knockout") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) knockout(size_x,size_y,data[0],size_z,data[1],data[2]);
}
if(type == "fan") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) fan_mask(size_x, size_z, data[0]);
}
if(type == "vent") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) vent(size_x,size_y,size_z,data[3],data[0],data[1],data[2]);
}
if(type == "vent_hex") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) vent_hex(size_x,size_y,size_z,data[0],data[1],data[2]);
}
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[0], true);
}
if(type == "h3_port_extender") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) h3_port_extender(data[0], true);
}
if(type == "hk_pwr_button") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_pwr_button(mask);
}
if(type == "dsub") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) dsub(data[0], true);
}
}

View File

@@ -118,6 +118,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -267,6 +268,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "1",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -416,6 +418,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -565,6 +568,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -714,6 +718,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -863,6 +868,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -1012,6 +1018,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -1161,6 +1168,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -1367,6 +1375,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "1",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -1516,6 +1525,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "1",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -1664,6 +1674,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -1813,6 +1824,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -1962,6 +1974,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -2111,6 +2124,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -2260,6 +2274,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -2409,6 +2424,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -2558,6 +2574,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -2707,6 +2724,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -2856,6 +2874,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -3005,6 +3024,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -3154,6 +3174,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -3303,6 +3324,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -3452,6 +3474,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -3601,6 +3624,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -3750,6 +3774,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -3899,6 +3924,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -4048,6 +4074,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -4197,6 +4224,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -4346,6 +4374,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -4495,6 +4524,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -4644,6 +4674,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -4793,6 +4824,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "3",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -4942,6 +4974,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -5091,6 +5124,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -5240,6 +5274,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -5389,6 +5424,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -5538,6 +5574,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -5687,6 +5724,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -5836,6 +5874,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -5985,6 +6024,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -6134,6 +6174,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -6283,6 +6324,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -6432,6 +6474,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -6581,6 +6624,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "0",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -6730,6 +6774,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -6879,6 +6924,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "1",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -7028,6 +7074,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "1",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -7177,6 +7224,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "1",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -7326,6 +7374,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "1",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -7475,6 +7524,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -7624,6 +7674,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -7773,6 +7824,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -7922,6 +7974,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -8071,6 +8124,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -8220,6 +8274,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -8369,6 +8424,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -8517,6 +8573,7 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "1.5",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
@@ -8548,154 +8605,6 @@
"view": "model",
"wallthick": "2"
},
"mini-stx_shell": {
"$fn": "90",
"access_panel_location": "[10, 15]",
"access_panel_orientation": "landscape",
"access_panel_rotation": "0",
"access_panel_size": "[70, 30]",
"accessory_highlight": "false",
"accessory_name": "none",
"adj": "0.01",
"bend_allowance": "1",
"bottom_access_panel_enable": "false",
"bottom_clearence": "3.5",
"bottom_cover_pattern": "linear_horizontal",
"bottom_front_left_adjust": "0",
"bottom_front_left_enable": "true",
"bottom_front_left_support": "front",
"bottom_front_right_adjust": "0",
"bottom_front_right_enable": "true",
"bottom_front_right_support": "front",
"bottom_rear_left_adjust": "0",
"bottom_rear_left_enable": "true",
"bottom_rear_left_support": "rear",
"bottom_rear_right_adjust": "0",
"bottom_rear_right_enable": "true",
"bottom_rear_right_support": "rear",
"bottom_sidewall_support": "false",
"bottom_standoff_diameter": "5.75",
"bottom_standoff_hole_size": "3.4",
"bottom_standoff_insert": "false",
"bottom_standoff_insert_dia": "4.2",
"bottom_standoff_insert_height": "5.1",
"bottom_standoff_pillar": "hex",
"bottom_standoff_reverse": "false",
"bottom_standoff_support_height": "4",
"bottom_standoff_support_size": "10",
"bottom_standoff_type": "countersunk",
"case_design": "shell",
"case_offset_bz": "4",
"case_offset_tz": "35",
"case_offset_x": "0",
"case_offset_y": "0",
"cooling": "default",
"corner_fillet": "3",
"edge_fillet": "0",
"ext_bottom_front_left_adjust": "0",
"ext_bottom_front_left_enable": "true",
"ext_bottom_front_left_support": "front",
"ext_bottom_front_right_adjust": "0",
"ext_bottom_front_right_enable": "true",
"ext_bottom_front_right_support": "front",
"ext_bottom_rear_left_adjust": "0",
"ext_bottom_rear_left_enable": "true",
"ext_bottom_rear_left_support": "rear",
"ext_bottom_rear_right_adjust": "0",
"ext_bottom_rear_right_enable": "true",
"ext_bottom_rear_right_support": "rear",
"ext_bottom_sidewall_support": "true",
"ext_bottom_standoff_diameter": "5.75",
"ext_bottom_standoff_hole_size": "3.4",
"ext_bottom_standoff_insert": "false",
"ext_bottom_standoff_insert_dia": "4.2",
"ext_bottom_standoff_insert_height": "5.1",
"ext_bottom_standoff_pillar": "hex",
"ext_bottom_standoff_reverse": "false",
"ext_bottom_standoff_support_height": "4",
"ext_bottom_standoff_support_size": "10",
"ext_bottom_standoff_type": "countersunk",
"ext_bottom_standoffs": "true",
"ext_top_front_left_adjust": "0",
"ext_top_front_left_enable": "true",
"ext_top_front_left_support": "front",
"ext_top_front_right_adjust": "0",
"ext_top_front_right_enable": "true",
"ext_top_front_right_support": "front",
"ext_top_rear_left_adjust": "0",
"ext_top_rear_left_enable": "true",
"ext_top_rear_left_support": "rear",
"ext_top_rear_right_adjust": "0",
"ext_top_rear_right_enable": "true",
"ext_top_rear_right_support": "rear",
"ext_top_sidewall_support": "true",
"ext_top_standoff_diameter": "6.75",
"ext_top_standoff_hole_size": "3.4",
"ext_top_standoff_insert": "true",
"ext_top_standoff_insert_dia": "4.2",
"ext_top_standoff_insert_height": "5.1",
"ext_top_standoff_pillar": "hex",
"ext_top_standoff_reverse": "true",
"ext_top_standoff_support_height": "4",
"ext_top_standoff_support_size": "10",
"ext_top_standoff_type": "blind",
"ext_top_standoffs": "false",
"fan_size": "0",
"flat_blank_section": "false",
"floorthick": "2",
"gap": "2",
"gpio_opening": "default",
"indents": "true",
"individual_part": "top",
"lower_bottom": "0",
"material_thickness": "0.5",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "4",
"raise_top": "0",
"rear_io_plate": "true",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_information": "false",
"sbc_model": "mini-stx",
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "1.5",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
"top_cover_pattern": "hex_8mm",
"top_front_left_adjust": "0",
"top_front_left_enable": "true",
"top_front_left_support": "front",
"top_front_right_adjust": "0",
"top_front_right_enable": "true",
"top_front_right_support": "front",
"top_rear_left_adjust": "0",
"top_rear_left_enable": "true",
"top_rear_left_support": "left",
"top_rear_right_adjust": "0",
"top_rear_right_enable": "true",
"top_rear_right_support": "right",
"top_sidewall_support": "true",
"top_standoff_diameter": "6.75",
"top_standoff_hole_size": "3.4",
"top_standoff_insert": "true",
"top_standoff_insert_dia": "4.2",
"top_standoff_insert_height": "5.1",
"top_standoff_pillar": "hex",
"top_standoff_reverse": "true",
"top_standoff_support_height": "4",
"top_standoff_support_size": "10",
"top_standoff_type": "blind",
"uart_opening": "default",
"view": "model",
"wallthick": "2"
},
"mini-itx_shell": {
"$fn": "90",
"access_panel_location": "[10, 15]",
@@ -8813,6 +8722,156 @@
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "1.5",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
"top_cover_pattern": "hex_8mm",
"top_front_left_adjust": "0",
"top_front_left_enable": "true",
"top_front_left_support": "front",
"top_front_right_adjust": "0",
"top_front_right_enable": "true",
"top_front_right_support": "front",
"top_rear_left_adjust": "0",
"top_rear_left_enable": "true",
"top_rear_left_support": "left",
"top_rear_right_adjust": "0",
"top_rear_right_enable": "true",
"top_rear_right_support": "right",
"top_sidewall_support": "true",
"top_standoff_diameter": "6.75",
"top_standoff_hole_size": "3.4",
"top_standoff_insert": "true",
"top_standoff_insert_dia": "4.2",
"top_standoff_insert_height": "5.1",
"top_standoff_pillar": "hex",
"top_standoff_reverse": "true",
"top_standoff_support_height": "4",
"top_standoff_support_size": "10",
"top_standoff_type": "blind",
"uart_opening": "default",
"view": "model",
"wallthick": "2"
},
"mini-stx_shell": {
"$fn": "90",
"access_panel_location": "[10, 15]",
"access_panel_orientation": "landscape",
"access_panel_rotation": "0",
"access_panel_size": "[70, 30]",
"accessory_highlight": "false",
"accessory_name": "none",
"adj": "0.01",
"bend_allowance": "1",
"bottom_access_panel_enable": "false",
"bottom_clearence": "3.5",
"bottom_cover_pattern": "linear_horizontal",
"bottom_front_left_adjust": "0",
"bottom_front_left_enable": "true",
"bottom_front_left_support": "front",
"bottom_front_right_adjust": "0",
"bottom_front_right_enable": "true",
"bottom_front_right_support": "front",
"bottom_rear_left_adjust": "0",
"bottom_rear_left_enable": "true",
"bottom_rear_left_support": "rear",
"bottom_rear_right_adjust": "0",
"bottom_rear_right_enable": "true",
"bottom_rear_right_support": "rear",
"bottom_sidewall_support": "false",
"bottom_standoff_diameter": "5.75",
"bottom_standoff_hole_size": "3.4",
"bottom_standoff_insert": "false",
"bottom_standoff_insert_dia": "4.2",
"bottom_standoff_insert_height": "5.1",
"bottom_standoff_pillar": "hex",
"bottom_standoff_reverse": "false",
"bottom_standoff_support_height": "4",
"bottom_standoff_support_size": "10",
"bottom_standoff_type": "countersunk",
"case_design": "shell",
"case_offset_bz": "4",
"case_offset_tz": "35",
"case_offset_x": "0",
"case_offset_y": "0",
"cooling": "default",
"corner_fillet": "3",
"edge_fillet": "0",
"ext_bottom_front_left_adjust": "0",
"ext_bottom_front_left_enable": "true",
"ext_bottom_front_left_support": "front",
"ext_bottom_front_right_adjust": "0",
"ext_bottom_front_right_enable": "true",
"ext_bottom_front_right_support": "front",
"ext_bottom_rear_left_adjust": "0",
"ext_bottom_rear_left_enable": "true",
"ext_bottom_rear_left_support": "rear",
"ext_bottom_rear_right_adjust": "0",
"ext_bottom_rear_right_enable": "true",
"ext_bottom_rear_right_support": "rear",
"ext_bottom_sidewall_support": "true",
"ext_bottom_standoff_diameter": "5.75",
"ext_bottom_standoff_hole_size": "3.4",
"ext_bottom_standoff_insert": "false",
"ext_bottom_standoff_insert_dia": "4.2",
"ext_bottom_standoff_insert_height": "5.1",
"ext_bottom_standoff_pillar": "hex",
"ext_bottom_standoff_reverse": "false",
"ext_bottom_standoff_support_height": "4",
"ext_bottom_standoff_support_size": "10",
"ext_bottom_standoff_type": "countersunk",
"ext_bottom_standoffs": "true",
"ext_top_front_left_adjust": "0",
"ext_top_front_left_enable": "true",
"ext_top_front_left_support": "front",
"ext_top_front_right_adjust": "0",
"ext_top_front_right_enable": "true",
"ext_top_front_right_support": "front",
"ext_top_rear_left_adjust": "0",
"ext_top_rear_left_enable": "true",
"ext_top_rear_left_support": "rear",
"ext_top_rear_right_adjust": "0",
"ext_top_rear_right_enable": "true",
"ext_top_rear_right_support": "rear",
"ext_top_sidewall_support": "true",
"ext_top_standoff_diameter": "6.75",
"ext_top_standoff_hole_size": "3.4",
"ext_top_standoff_insert": "true",
"ext_top_standoff_insert_dia": "4.2",
"ext_top_standoff_insert_height": "5.1",
"ext_top_standoff_pillar": "hex",
"ext_top_standoff_reverse": "true",
"ext_top_standoff_support_height": "4",
"ext_top_standoff_support_size": "10",
"ext_top_standoff_type": "blind",
"ext_top_standoffs": "false",
"fan_size": "0",
"flat_blank_section": "false",
"floorthick": "2",
"gap": "2",
"gpio_opening": "default",
"indents": "true",
"individual_part": "top",
"lower_bottom": "0",
"material_thickness": "0.5",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "4",
"raise_top": "0",
"rear_io_plate": "true",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_information": "false",
"sbc_model": "mini-stx",
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "1.5",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",

View File

@@ -253,9 +253,11 @@ ext_bottom_front_right_adjust = 0; //[-20:.01:20]
ext_bottom_front_right_support = "front"; //[none,left,rear,front,right]
/* [Accessories and Options] */
// adjustment for atx, micro-atx, dtx, flex-atx, mini-dtx, mini-itx, mini-stx, nano-itx,nuc, pico-itx PCB thickness from 2mm default//
standard_motherboard_thickness = 0; //[-3:.01:3]
// rear io plate opening for standard form motherboards
rear_io_plate = false;
// case accessory group to load
accessory_name = "none"; // ["none", "hk_uart", "sensors", "c4_shell_boombox", "c4_desktop_lcd3.5", "c4_deskboom_lcd3.5", "c4_panel_boombox", "c4_panel_lcd3.5", "c4_tray_boombox", "c4_round", "c4_hex", "xu4_keyhole", "hc4_tray_drivebox2.5", "hc4_shell_drivebox2.5", "hc4_shell_drivebox2.5v", "hc4_shell_drivebox3.5", "m1s_shell_nvme", "m1s_shell_ups", "m1s_tray_nvme", "m1_tray_ssd", "m1_fitted_drivebox2.5", "m1_fitted_drivebox3.5", "m1_fitted_pizzabox", "m1_fitted_drivebox3.5v", "h3_shell", "h3_tallboy-ssd", "h3_shell_router", "h3_shell_router-ssd", "h3_lowboy", "h3_lowboy_router", "h3_tray_router", "h3_router_station", "h3_ultimate", "h3_ultimate2", "h3_shell_drivebox2.5v", "show2_shell", "jetsonnano_shell", "jetsonnano_panel", "jetsonnano_stacked", "jetsonnano_tray", "jetsonnano_tray_sides", "rock5b", "visionfive2_shell", "visionfive2_stacked", "visionfive2_tray",adapter_mini-stx_m1s]
@@ -269,12 +271,13 @@ s = search([sbc_model],sbc_data);
pcb_id = sbc_data[s[0]][4];
pcb_width = sbc_data[s[0]][10][0];
pcb_depth = sbc_data[s[0]][10][1];
pcb_z = sbc_data[s[0]][10][2];
pcb_z_orig = sbc_data[s[0]][10][2];
pcb_tmaxz = sbc_data[s[0]][11][5];
pcb_bmaxz = sbc_data[s[0]][11][6];
pcb_color = sbc_data[s[0]][11][1];
pcb_radius = sbc_data[s[0]][11][0];
pcb_z = sbc_model == "atx" || sbc_model == "micro-atx" || sbc_model == "dtx" || sbc_model == "flex-atx" || sbc_model == "mini-dtx" || sbc_model == "mini-itx" || sbc_model == "mini-stx" || sbc_model == "nano-itx" || sbc_model == "nuc" || sbc_model == "pico-itx" ? pcb_z_orig + standard_motherboard_thickness : pcb_z_orig;
width = pcb_width+2*(wallthick+gap)+case_offset_x;
depth = pcb_depth+2*(wallthick+gap)+case_offset_y;
top_height = pcb_tmaxz+floorthick+case_offset_tz;
@@ -426,10 +429,10 @@ if (view == "platter") {
data_4 = accessory_data[a[0]][i+9][3];
mask = accessory_data[a[0]][i+10];
if (class == "platter" && type != "button_top") {
if (class == "platter" && type != "button_assembly") {
add(type, loc_x, loc_y, loc_z, face, rotation, [size_x, size_y, size_z], [data_1, data_2, data_3, data_4], mask);
}
if (class == "platter" && type == "button_top") {
if (class == "platter" && type == "button_assembly") {
translate([loc_x,loc_y,loc_z+1.25]) rotate([-90,0,0]) button_plunger(data_1, size_x, size_z);
translate([loc_x-20,loc_y-10,loc_z+3]) rotate([0,0,0]) button_top(data_1, size_x, size_z);
translate([loc_x-20,loc_y-20,loc_z]) rotate([0,0,0]) button_clip(data_1);
@@ -885,10 +888,10 @@ if (view == "part") {
data_4 = accessory_data[a[0]][i+9][3];
mask = accessory_data[a[0]][i+10];
if (class == "platter" && type != "button_top") {
if (class == "platter" && type != "button_assembly") {
add(type, loc_x, loc_y, loc_z, face, rotation, [size_x, size_y, size_z], [data_1, data_2, data_3, data_4], mask);
}
if (class == "platter" && type == "button_top") {
if (class == "platter" && type == "button_assembly") {
translate([loc_x,loc_y,loc_z+1.25]) rotate([-90,0,0]) button_plunger(data_1, size_x, size_z);
translate([loc_x-20,loc_y-10,loc_z+3]) rotate([0,0,0]) button_top(data_1, size_x, size_z);
translate([loc_x-20,loc_y-20,loc_z]) rotate([0,0,0]) button_clip(data_1);

View File

@@ -29,23 +29,34 @@
classes: add1, sub, suball, add2, model, platter
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_panel,button,pcb_holder,boom_grill,boom_speaker_holder
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: hk_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: hk_uart_strap,fan_cover,button_top,boom_vring
types for additive: access_cover,access_panel,art,batt_holder,button,button_assembly,fan_cover,feet,hd_holder,
hk_boom_grill,hk_boom_speaker_holder,hk_boom_vring,hk_h3_port_extender_holder,hk_hc4_oled_holder,hk_uart_holder,
hk_uart_strap,keyhole,nut_holder,pcb_holder,rectangle,round,slot,sphere,standoff,text,vent_panel_hex
types for subtractive: art,fan_mask,hd_holes,knockout,rectangle,round,slot,sphere,text,vent,vent_hex
types for model: adafruit_lcd,dsub,fan,hd25,hd35,hk_boom,hk_boom_speaker,hk_h3_port_extender,hk_hc4_oled,hk_lcd35,hk_m1s_ups,hk_netcard,
hk_pwr_button,hk_speaker,hk_uart,hk_vu7c,hk_vu8m,hk_vu8s,hk_wb2,hk_xu4_shifter_shield,stl_model
types for platter: access_cover,button_assembly,fan_cover,feet,hk_boom_speaker_holder,hk_boom_vring,hk_h3_port_extender_holder,hk_uart_strap,vent_panel_hex
standoff[ 6.75, // diameter
0, // height (not used)
2.5, // holesize
10, // supportsize
4, // supportheight
4, // 0=none, 1=countersink, 2=recessed hole, 3=nut holder, 4=blind hole
0, // standoff style 0=hex, 1=cylinder
1, // enable reverse standoff
0, // enable insert at top of standoff
4.5, // insert hole dia. mm
5.1] // insert depth mm
stand_off[radius, height, holesize, supportsize, supportheight, sink, pillarstyle,
pillarsupport, reverse, insert_e, i_dia, i_depth], mask)
radius = pillar radius
height = total height
holesize = hole diameter
supportsize = support size for sink
supportheight = height of support for sink
sink = none, countersunk, recessed, nut holder, blind
pillarstyle = hex, round
pillarsupport = none, left, rear, front, right
reverse = true or false
insert_e = true or false
i_dia = insert diameter
i_depth = insert hole depth
mask[0] = enablemask
mask[1] = mlength
mask[2] = msetback
mask[3] = mstyle
p
a
@@ -59,7 +70,7 @@
s p c o c t s t c l
s, e, x, y, z, e, n, s, x,y,z, a, k h k e
"sub","fan",10,10,24.5,"top",[0,0,0],["sbc-case_z",true,true,true],[40,0,6],[0],[true,10,2,"default"],
"sub","fan_mask",10,10,24.5,"top",[0,0,0],["sbc-case_z",true,true,true],[40,0,6],[0],[true,10,2,"default"],
*/
@@ -95,17 +106,17 @@ accessory_data = [
// Odroid-C4
["c4_shell_boombox",
"add2","pcb_holder",.75,51.1,1.99,"bottom",[0,0,0],["case",false,true,false],[123.5,35,1.6],[2],[false,10,2,"default"],
"add2","boom_grill",16.5,60.5,22.5,"top",[90,0,180],["case",false,true,false],[0,0,0],["dome"],[false,10,2,"default"],
"add2","boom_grill",108,60.5,22.5,"top",[90,0,180],["case",false,true,false],[0,0,0],["dome"],[false,10,2,"default"],
"add2","hk_boom_grill",16.5,60.5,22.5,"top",[90,0,180],["case",false,true,false],[0,0,0],["dome"],[false,10,2,"default"],
"add2","hk_boom_grill",108,60.5,22.5,"top",[90,0,180],["case",false,true,false],[0,0,0],["dome"],[false,10,2,"default"],
"sub","vent",44,60,17,"top",[0,0,0],["case",false,true,false],[2,10,4],[1,10,"vertical",1],[false,10,2,"default"],
"add2","hk_uart_holder",10,-1.5,5,"bottom",[0,0,0],["case",false,false,false],[10,10,0],[0],[true,10,2,"default"],
"model","hk_uart",12.5,20.5,8,"bottom",[0,0,270],["case",false,false,false],[10,10,0],[0],[false,10,2,"default"],
"model","hk_uart_strap",25.5,15,8,"bottom",[0,0,90],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"],
"model","hk_boom",32.25,53,5,"bottom",[90,0,0],["case",false,true,false],[0,0,0],[true,"front"],[true,10,2,"default"],
"model","boom_vring",76.75,49.5,31,"bottom",[90,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","hk_boom_vring",76.75,49.5,31,"bottom",[90,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"platter","hk_uart_strap",-35,75,-9,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"],
"platter","boom_vring",-60,100,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"]],
"platter","hk_boom_vring",-60,100,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"]],
["c4_desktop_lcd3.5",
"add2","button",89.875,45,27,"top",[0,0,180],["sbc-case_z",false,false,true],[12,8,2],["cutout",[2,2,2,2],2.25],[true,10,2,"default"],
@@ -130,16 +141,16 @@ accessory_data = [
"add2","button",89.875,23,27,"top",[0,0,180],["sbc-case_z",false,false,true],[12,8,2],["cutout",[2,2,2,2],2.25],[true,10,2,"default"],
"add2","button",89.875,12,27,"top",[0,0,180],["sbc-case_z",false,false,true],[12,8,2],["cutout",[2,2,2,2],2.25],[true,10,2,"default"],
"add2","pcb_holder",.75,66.1,1.99,"bottom",[0,0,0],["case",false,false,false],[123.5,35,1.6],[2],[false,10,2,"default"],
"add2","boom_grill",16.5,72.5,21.5,"front",[90,0,180],["case",false,false,false],[0,0,2],["flat"],[false,10,2,"default"],
"add2","boom_grill",108,72.5,21.5,"front",[90,0,180],["case",false,false,false],[0,0,2],["flat"],[false,10,2,"default"],
"add2","hk_boom_grill",16.5,72.5,21.5,"front",[90,0,180],["case",false,false,false],[0,0,2],["flat"],[false,10,2,"default"],
"add2","hk_boom_grill",108,72.5,21.5,"front",[90,0,180],["case",false,false,false],[0,0,2],["flat"],[false,10,2,"default"],
"add2","hk_uart_holder",10,0,1.9,"bottom",[0,0,0],["case",false,false,false],[10,10,0],[0],[true,10,2,"default"],
"model","hk_uart",12.5,22,5,"bottom",[0,0,270],["case",false,false,false],[10,10,0],[0],[false,10,2,"default"],
"model","hk_uart_strap",25,15,5,"bottom",[0,0,90],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"],
"model","hk_boom",32.25,68,4,"bottom",[90,0,0],["case",false,false,false],[0,0,0],[true,"front"],[true,10,2,"default"],
"model","boom_vring",76.75,64.5,31,"bottom",[90,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"],
"model","hk_boom_vring",76.75,64.5,31,"bottom",[90,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"],
"model","hk_lcd35",95,56,31,"bottom",[0,0,180],["case",false,false,false],[0,0,0],[0],[true,10,2,"default"],
"platter","hk_uart_strap",-35,75,-9,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"],
"platter","boom_vring",-60,100,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"]],
"platter","hk_boom_vring",-60,100,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"]],
["c4_panel_boombox",
"sub","vent",-3,22,13,"left",[0,0,90],["case",false,false,false],[2,10,5],[1,8,"vertical",1],[false,10,2,"default"],
@@ -147,12 +158,12 @@ accessory_data = [
"add2","hk_uart_holder",10,0,1.9,"bottom",[0,0,0],["case",false,false,false],[10,10,0],[0],[true,10,2,"default"],
"model","hk_uart",12.5,22,5,"bottom",[0,0,270],["case",false,false,false],[10,10,0],[0],[false,10,2,"default"],
"model","hk_uart_strap",25,15,5,"bottom",[0,0,90],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"],
"add2","boom_grill",16.5,57.5,21.5,"front",[90,0,180],["case",false,true,false],[0,0,2],["flat"],[false,10,2,"default"],
"add2","boom_grill",108,57.5,21.5,"front",[90,0,180],["case",false,true,false],[0,0,2],["flat"],[false,10,2,"default"],
"add2","hk_boom_grill",16.5,57.5,21.5,"front",[90,0,180],["case",false,true,false],[0,0,2],["flat"],[false,10,2,"default"],
"add2","hk_boom_grill",108,57.5,21.5,"front",[90,0,180],["case",false,true,false],[0,0,2],["flat"],[false,10,2,"default"],
"model","hk_boom",32.25,53,4,"bottom",[90,0,0],["case",false,true,false],[0,0,0],[true,"front"],[true,10,2,"default"],
"model","boom_vring",76.75,49.5,31,"bottom",[90,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","hk_boom_vring",76.75,49.5,31,"bottom",[90,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"platter","hk_uart_strap",-35,75,-9,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"],
"platter","boom_vring",-60,100,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"]],
"platter","hk_boom_vring",-60,100,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"]],
["c4_panel_lcd3.5",
"add2","button",89.875,45,27,"top",[0,0,180],["sbc-case_z",false,false,true],[12,8,2],["cutout",[2,2,2,2],2.25],[true,10,2,"default"],
@@ -166,15 +177,15 @@ accessory_data = [
"sub","vent",44,59,12,"bottom",[0,0,0],["case",false,true,false],[2,10,4],[1,10,"vertical",1],[false,10,2,"default"],
"add2","standoff",28.5,3.5,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[[5.75,16,3.6,10,4,"countersunk","hex",false,false,4.5,5.1]],[true,10,2,"default"],
"add2","standoff",28.5,56.25,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[[5.75,16,3.6,10,4,"countersunk","hex",false,false,4.5,5.1]],[true,10,2,"default"],
"add2","boom_speaker_holder",16.75,54.6,17.5,"bottom",[90,0,180],["case",false,true,false],[0,0,0],["friction",0],[false,10,2,"default"],
"add2","boom_speaker_holder",108.25,54.6,17.5,"bottom",[90,0,180],["case",false,true,false],[0,0,0],["friction",0],[false,10,2,"default"],
"add2","boom_grill",16.75,59,17.5,"bottom",[90,0,180],["case",false,true,false],[0,0,0],["dome"],[false,10,2,"default"],
"add2","boom_grill",108.25,59,17.5,"bottom",[90,0,180],["case",false,true,false],[0,0,0],["dome"],[false,10,2,"default"],
"model","boom_speaker",16.75,56,17.5,"bottom",[270,0,0],["case",false,true,false],[0,0,0],[false,"left"],[false,10,2,"default"],
"model","boom_speaker",108.25,56,17.5,"bottom",[270,0,0],["case",false,true,false],[0,0,0],[false,"right"],[false,10,2,"default"],
"add2","hk_boom_speaker_holder",16.75,54.6,17.5,"bottom",[90,0,180],["case",false,true,false],[0,0,0],["friction",0],[false,10,2,"default"],
"add2","hk_boom_speaker_holder",108.25,54.6,17.5,"bottom",[90,0,180],["case",false,true,false],[0,0,0],["friction",0],[false,10,2,"default"],
"add2","hk_boom_grill",16.75,59,17.5,"bottom",[90,0,180],["case",false,true,false],[0,0,0],["dome"],[false,10,2,"default"],
"add2","hk_boom_grill",108.25,59,17.5,"bottom",[90,0,180],["case",false,true,false],[0,0,0],["dome"],[false,10,2,"default"],
"model","hk_boom_speaker",16.75,56,17.5,"bottom",[270,0,0],["case",false,true,false],[0,0,0],[false,"left"],[false,10,2,"default"],
"model","hk_boom_speaker",108.25,56,17.5,"bottom",[270,0,0],["case",false,true,false],[0,0,0],[false,"right"],[false,10,2,"default"],
"model","hk_boom",32,0,16,"bottom",[0,0,90],["case",false,false,false],[0,0,0],[false,"none"],[true,10,2,"pcb"],
"model","boom_vring",5,44.5,20,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"],
"platter","boom_vring",-50,0,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"]],
"model","hk_boom_vring",5,44.5,20,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"],
"platter","hk_boom_vring",-50,0,0,"bottom",[0,0,0],["case",false,false,false],[0,0,0],[0],[false,10,2,"default"]],
["c4_round",
"suball","round",10.5,-2,14.5,"top",[90,0,0],["case",false,false,false],[11,0,18],[0],[false,10,2,"default"],
@@ -190,71 +201,71 @@ accessory_data = [
// Odroid-HC4
["hc4_tray_drivebox2.5",
"add1","hc4_oled_holder",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,2],[0],[true,10,2,"default"],
"add1","hk_hc4_oled_holder",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,2],[0],[true,10,2,"default"],
"add2","hd_holder",10,-24,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait"],[false,10,2,"default"],
"sub","hd_holes",10,-24,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,3,"portrait"],[false,10,2,"default"],
"sub","hd_holes",10,-24,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","horizontal","none",3],[false,10,2,"default"],
"sub","round",92,-10,5,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",92,66.6,5,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",92,-10,23,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",92,66.6,23,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"suball","fan",37,-.1,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],[0],[false,10,2,"default"],
"suball","fan_mask",37,-.1,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_open"],[false,10,2,"default"],
"suball","vent",72,87,27,"bottom",[0,0,0],["case",false,true,false],[2,13,4],[1,4,"vertical",1],[false,10,2,"default"],
"model","hc4_oled",20,81,2,"bottom",[0,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","hk_hc4_oled",20,81,2,"bottom",[0,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","hd25",10,76,2,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"],
"model","hd25",10,76,20,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"],
"model","fan_cover",37,-4,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],[1],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],[1],[false,10,2,"default"]],
"model","fan_cover",37,-4,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_1"],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],["fan_1"],[false,10,2,"default"]],
["hc4_shell_drivebox2.5",
"add2","hc4_oled_holder",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,2],[0],[true,10,2,"default"],
"add2","hk_hc4_oled_holder",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,2],[0],[true,10,2,"default"],
"add2","hd_holder",10,-21,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait"],[false,10,2,"default"],
"sub","hd_holes",10,-21,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,3,"portrait"],[false,10,2,"default"],
"sub","hd_holes",10,-21,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","horizontal","none",3],[false,10,2,"default"],
"sub","round",92,-5,5,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",92,69.6,5,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",92,-5,23,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",92,69.6,23,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","vent",71.85,88,30,"top",[0,0,0],["case",false,true,false],[2,13,4],[1,4,"vertical",1],[false,10,2,"default"],
"suball","fan",39,-.1,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],[0],[false,10,2,"default"],
"suball","fan_mask",39,-.1,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_open"],[false,10,2,"default"],
"sub","vent",-3.5,35,34,"top",[0,0,90],["case",false,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"sub","vent",92,35,34,"top",[0,0,90],["case",true,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"sub","vent",-3.5,35,9,"bottom",[0,0,90],["case",false,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"sub","vent",92,35,9,"bottom",[0,0,90],["case",true,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"model","hc4_oled",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","hk_hc4_oled",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","hd25",10,79,2,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"],
"model","hd25",10,79,20,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"],
"model","fan_cover",39,-4,7,"top",[90,0,0],["case",true,false,false],[40,0,3],[1],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],[1],[false,10,2,"default"]],
"model","fan_cover",39,-4,7,"top",[90,0,0],["case",true,false,false],[40,0,3],["fan_1"],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],["fan_1"],[false,10,2,"default"]],
["hc4_shell_drivebox2.5v",
"add2","hd_vertright",45.6,-21,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait"],[false,10,2,"default"],
"add2","hd_vertleft",79.6,-21,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait"],[false,10,2,"default"],
"sub","hd_vertright_holes",45.6,-21,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,2,"portrait"],[false,10,2,"default"],
"sub","hd_vertleft_holes",79.6,-21,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,2,"portrait"],[false,10,2,"default"],
"add2","hd_holder",45.6,-21,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","right"],[false,10,2,"default"],
"add2","hd_holder",79.6,-21,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","left",3],[false,10,2,"default"],
"sub","hd_holes",45.6,-21,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","right",3],[false,10,2,"default"],
"sub","hd_holes",79.6,-21,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","left",3],[false,10,2,"default"],
"sub","round",91.3,-5,6.07,"bottom",[0,90,0],["case",true,true,false],[3,0,6],[0],[false,10,2,"default"],
"sub","round",91.3,71.6,6.07,"bottom",[0,90,0],["case",true,true,false],[3,0,6],[0],[false,10,2,"default"],
"sub","vent",71.85,88,30,"top",[0,0,0],["case",false,true,false],[2,13,4],[1,4,"vertical",1],[false,10,2,"default"],
"sub","fan",45.6,-.1,30,"top",[90,0,0],["case",true,false,false],[40,0,3],[0],[false,10,2,"default"],
"add1","hc4_oled_holder",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,2],[0],[true,10,2,"default"],
"model","hc4_oled",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","fan_cover",46.6,-3,30,"top",[90,0,0],["case",true,false,false],[40,0,3],[1],[false,10,2,"default"],
"sub","fan_mask",45.6,-.1,30,"top",[90,0,0],["case",true,false,false],[40,0,3],["fan_open"],[false,10,2,"default"],
"add1","hk_hc4_oled_holder",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,2],[0],[true,10,2,"default"],
"model","hk_hc4_oled",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","fan_cover",46.6,-3,30,"top",[90,0,0],["case",true,false,false],[40,0,3],["fan_1"],[false,10,2,"default"],
"model","hd25",45.6,79,71.85,"bottom",[-90,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"],
"model","hd25",79.3,79,2,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],[1],[false,10,2,"default"]],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],["fan_1"],[false,10,2,"default"]],
["hc4_shell_drivebox3.5",
"add1","hc4_oled_holder",20,82,3,"bottom",[0,0,0],["case",false,true,false],[0,0,3],[0],[true,10,2,"default"],
"add1","hk_hc4_oled_holder",20,82,3,"bottom",[0,0,0],["case",false,true,false],[0,0,3],[0],[true,10,2,"default"],
"add2","hd_holder",-19.4,-67,3,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,"portrait"],[false,10,2,"default"],
"sub","hd_holes",-19.4,-67,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,3,"portrait"],[false,10,2,"default"],
"sub","hd_holes",-19.4,-67,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,"portrait","horizontal","none",3],[false,10,2,"default"],
"sub","round",91.6,-38.5,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
"sub","round",91.6,3.4,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
"sub","round",91.6,63.1,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
"suball","vent",72,88,29,"bottom",[0,0,0],["case",false,true,false],[2,13,4],[1,4,"vertical",1],[false,10,2,"default"],
"suball","fan",5.6,-1.5,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],[0],[false,10,2,"default"],
"model","hc4_oled",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"suball","fan_mask",5.6,-1.5,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_open"],[false,10,2,"default"],
"model","hk_hc4_oled",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","hd35",-19.4,80,3,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","hd35",-19.4,80,35,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","fan_cover",5.6,-4,7,"top",[90,0,0],["case",true,false,false],[40,0,3],[1],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],[1],[false,10,2,"default"]],
"model","fan_cover",5.6,-4,7,"top",[90,0,0],["case",true,false,false],[40,0,3],["fan_1"],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],["fan_1"],[false,10,2,"default"]],
// Odroid-M1S
["m1s_shell_nvme",
@@ -275,8 +286,8 @@ accessory_data = [
"add2","standoff",2.5,119,0,"bottom",[0,0,0],["sbc",false,false,false],[0,0,0],[[5.75,5,3.6,10,4,"countersunk","hex",false,false,4.5,5.1]],[true,10,2,"default"],
"add2","standoff",27.5,119,0,"bottom",[0,0,0],["sbc",false,false,false],[0,0,0],[[5.75,5,3.6,10,4,"countersunk","hex",false,false,4.5,5.1]],[true,10,2,"default"],
"add2","button",2,33.5,21.2,"top",[0,0,0],["sbc-case_z",false,false,true],[10,0,23.5],["recess"],[true,10,2,"default"],
"model","button_top",2,33.5,21.2,"top",[0,0,0],["sbc-case_z",false,false,true],[10,0,23.5],["recess"],[false,10,2,"default"],
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,23.5],["recess"],[false,10,2,"default"],
"model","button_assembly",2,33.5,21.2,"top",[0,0,0],["sbc-case_z",false,false,true],[10,0,23.5],["recess"],[false,10,2,"default"],
"platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,23.5],["recess"],[false,10,2,"default"],
"sub","rectangle",73.5,5.5,2.5,"top",[0,0,45],["sbc",true,true,true],[11,3,15],[[1,1,1,1]],[false,10,2,"default"],
"sub","rectangle",5.5,56,2.5,"top",[0,0,0],["sbc",true,true,true],[3,11,15],[[1,1,1,1]],[false,10,2,"default"],
"sub","rectangle",81.5,56,2.5,"top",[0,0,0],["sbc",true,true,true],[3,11,15],[[1,1,1,1]],[false,10,2,"default"],
@@ -294,33 +305,33 @@ accessory_data = [
// Odroid-M1
["m1_tray_ssd",
// "add2","button",60,118.5,37.7,"top",[0,0,0],["sbc-case_z",false,false,true],[10,0,18.5],["recess"],[true,10,2,"default"],
// "model","button_top",60,118.5,37.7,"top",[0,0,0],["sbc-case_z",false,false,true],[10,0,18.5],["recess"],[false,10,2,"default"],
// "platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"],
"sub","hd_holes",10,22,35,"top",[0,0,0],["sbc-case_z",true,true,true],[0,0,0],[2.5,3,"portrait"],[false,10,2,"default"],
// "model","button_assembly",60,118.5,37.7,"top",[0,0,0],["sbc-case_z",false,false,true],[10,0,18.5],["recess"],[false,10,2,"default"],
// "platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"],
"sub","hd_holes",10,22,35,"top",[0,0,0],["sbc-case_z",true,true,true],[0,0,0],[2.5,"portrait","horizontal","none",3],[false,10,2,"default"],
"model","hd25",80,122,35.5,"top",[0,180,90],["sbc-case_z",true,true,true],[0,0,0],[7],[false,10,2,"default"],
"sub","vent",94.5,32,10,"top",[0,0,90],["case",true,false,false],[2,15,4],[1,17,"vertical",1],[false,10,2,"default"],
"sub","vent",-6.5,32,10,"top",[0,0,90],["case",false,false,false],[2,15,4],[1,17,"vertical",1],[false,10,2,"default"]],
["m1_fitted_drivebox2.5",
"add2","hd_holder",10,20,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait"],[false,10,2,"default"],
"sub","hd_holes",10,20,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,3,"portrait"],[false,10,2,"default"],
"sub","hd_holes",10,20,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","horizontal","none",3],[false,10,2,"default"],
"sub","round",92,34,5,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",92,110.6,5,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",92,34,23,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",92,110.6,23,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"suball","fan",39,-1,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],[0],[false,10,2,"default"],
"suball","fan_mask",39,-1,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_open"],[false,10,2,"default"],
"sub","vent",-3.75,25,30,"bottom",[0,0,90],["case",false,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"sub","vent",92,25,30,"bottom",[0,0,90],["case",true,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"sub","vent",-3.75,25,9,"bottom",[0,0,90],["case",false,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"sub","vent",92,25,9,"bottom",[0,0,90],["case",true,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"model","hd25",10,120,2,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"],
"model","hd25",10,120,20,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"],
"model","fan_cover",39,-4,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],[3],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],[2],[false,10,2,"default"]],
"model","fan_cover",39,-4,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_hex"],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],["fan_hex"],[false,10,2,"default"]],
["m1_fitted_drivebox3.5",
"add2","hd_holder",-19.4,-27,2.49,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,"portrait"],[false,10,2,"default"],
"sub","hd_holes",-19.4,-27,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,3,"portrait"],[false,10,2,"default"],
"sub","hd_holes",-19.4,-27,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,"portrait","horizontal","none",3],[false,10,2,"default"],
"sub","round",91.6,1.5,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
"sub","round",91.6,43.4,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
"sub","round",91.6,103.1,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
@@ -329,26 +340,26 @@ accessory_data = [
"sub","vent",-3.75,60,20,"bottom",[0,0,90],["case",false,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"sub","vent",92,60,20,"bottom",[0,0,90],["case",true,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"suball","vent",29,126,29,"bottom",[0,0,0],["case",false,true,false],[2,13,4],[1,4,"vertical",1],[false,10,2,"default"],
"suball","fan",5.6,-1.5,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],[0],[false,10,2,"default"],
"suball","fan_mask",5.6,-1.5,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_open"],[false,10,2,"default"],
"model","hd35",-19.4,120,2.49,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","hd35",-19.4,120,34.5,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","fan_cover",5.6,-4,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],[3],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],[2],[false,10,2,"default"]],
"model","fan_cover",5.6,-4,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_hex"],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],["fan_hex"],[false,10,2,"default"]],
["m1_fitted_pizzabox",
"sub","hd_holes",-12,-27,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,3,"portrait"],[false,10,2,"default"],
"sub","hd_holes",-12,-27,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,"portrait","horizontal","none",3],[false,10,2,"default"],
"sub","round",91.6,1.5,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
"sub","round",91.6,43.4,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
"sub","round",91.6,103.1,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
"sub","vent",-3.75,60,9,"bottom",[0,0,90],["case",false,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"sub","vent",92,60,9,"bottom",[0,0,90],["case",true,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"suball","vent",-89,126,15,"bottom",[0,0,0],["case",true,true,false],[2,13,4],[1,4,"vertical",1],[false,10,2,"default"],
"suball","fan",-30,60,48,"top",[0,0,0],["case",true,false,false],[80,0,3],[0],[false,10,2,"default"],
"suball","fan_mask",-30,60,48,"top",[0,0,0],["case",true,false,false],[80,0,3],["fan_open"],[false,10,2,"default"],
"model","hd35",-12,120,2.5,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[0],[false,10,2,"default"]],
["m1_fitted_drivebox3.5v",
"add2","hd_vertleft",80,-27,2.49,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,"portrait"],[false,10,2,"default"],
"sub","hd_vertleft_holes",80,-27,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,"portrait"],[false,10,2,"default"],
"add2","hd_holder",80,-27,2.49,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,"portrait","vertical","left"],[false,10,2,"default"],
"sub","hd_holes",80,-27,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[3.5,"portrait","vertical","left",3],[false,10,2,"default"],
"sub","round",91.6,14.5,6,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
"sub","round",91.6,58.55,6,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
"sub","round",91.6,90.1,6,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
@@ -357,10 +368,10 @@ accessory_data = [
"sub","vent",-3.75,60,20,"bottom",[0,0,90],["case",false,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"sub","vent",92,60,20,"bottom",[0,0,90],["case",true,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"suball","vent",29,126,29,"bottom",[0,0,0],["case",false,true,false],[2,13,4],[1,4,"vertical",1],[false,10,2,"default"],
"suball","fan",5.6,-1.5,35,"bottom",[90,0,0],["case",true,false,false],[60,0,3],[0],[false,10,2,"default"],
"suball","fan_mask",5.6,-1.5,35,"bottom",[90,0,0],["case",true,false,false],[60,0,3],["fan_open"],[false,10,2,"default"],
"model","hd35",80,120,2.5,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],[0],[false,10,2,"default"],
"model","fan_cover",5.6,-4,35,"bottom",[90,0,0],["case",true,false,false],[60,0,3],[3],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[60,0,3],[3],[false,10,2,"default"]],
"model","fan_cover",5.6,-4,35,"bottom",[90,0,0],["case",true,false,false],[60,0,3],["fan_hex"],[false,10,2,"default"],
"platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[60,0,3],["fan_hex"],[false,10,2,"default"]],
// Odroid-H3
["h3_shell",
@@ -371,10 +382,10 @@ accessory_data = [
"add2","batt_holder",98,40,55.25,"top",[180,0,-18],["sbc-case_z",true,true,true],[10,10,0],[0],[false,10,2,"default"],
"add2","button",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[true,10,2,"default"],
"add2","button",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[true,10,2,"default"],
"model","button_top",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"model","button_top",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,32],["recess"],[false,10,2,"default"],
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,32],["recess"],[false,10,2,"default"]],
"model","button_assembly",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"model","button_assembly",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,32],["recess"],[false,10,2,"default"],
"platter","button_assembly",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,32],["recess"],[false,10,2,"default"]],
["h3_tallboy-ssd",
"sub","vent",-3.5,30,58,"top",[0,0,90],["case",false,false,false],[2,12,4],[1,17,"vertical",1],[false,10,2,"default"],
@@ -385,14 +396,14 @@ accessory_data = [
"sub","vent",111.5,30,4,"bottom",[0,0,90],["case",true,false,false],[2,6,4],[1,17,"vertical",1],[false,10,2,"default"],
"add2","button",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,53],["recess"],[true,10,2,"default"],
"add2","button",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,53],["recess"],[true,10,2,"default"],
"model","button_top",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,58],["recess"],[false,10,2,"default"],
"model","button_top",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,58],["recess"],[false,10,2,"default"],
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,58],["recess"],[false,10,2,"default"],
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,58],["recess"],[false,10,2,"default"],
"model","button_assembly",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,58],["recess"],[false,10,2,"default"],
"model","button_assembly",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,58],["recess"],[false,10,2,"default"],
"platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,58],["recess"],[false,10,2,"default"],
"platter","button_assembly",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,58],["recess"],[false,10,2,"default"],
"sub","round",111,34,6.07,"bottom",[0,90,0],["case",true,false,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",111,110.6,6.07,"bottom",[0,90,0],["case",true,false,false],[3,0,3],[0],[false,10,2,"default"],
"add2","hd_vertleft",98,10,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,3,"portrait"],[false,10,2,"default"],
"sub","hd_vertleft_holes",98,10,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,3,"portrait"],[false,10,2,"default"],
"add2","hd_holder",98,10,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","left"],[false,10,2,"default"],
"sub","hd_holes",98,10,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","left",3],[false,10,2,"default"],
"model","hd25",98,110,2,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],[7],[false,10,2,"default"]],
["h3_shell_router",
@@ -403,11 +414,11 @@ accessory_data = [
"add2","batt_holder",98,40,65.25,"top",[180,0,-18],["sbc",true,true,true],[10,10,0],[0],[false,10,2,"default"],
"add2","button",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[true,10,2,"default"],
"add2","button",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[true,10,2,"default"],
"model","button_top",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"model","button_top",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"model","button_assembly",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"model","button_assembly",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"model","hk_netcard",0,0,19,"bottom",[0,0,0],["sbc",true,true,true],[0,0,0],["portrait"],[true,10,2,"default"],
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,32],["recess"],[false,10,2,"default"],
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,32],["recess"],[false,10,2,"default"]],
"platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,32],["recess"],[false,10,2,"default"],
"platter","button_assembly",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,32],["recess"],[false,10,2,"default"]],
["h3_shell_router-ssd",
"sub","vent",111.5,30,40,"top",[0,0,90],["case",true,false,false],[2,15,4],[1,17,"vertical",1],[false,10,2,"default"],
@@ -419,14 +430,14 @@ accessory_data = [
"add2","batt_holder",98,40,75.25,"top",[180,0,-18],["sbc",true,true,true],[10,10,0],[0],[false,10,2,"default"],
"add2","button",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,42],["recess"],[true,10,2,"default"],
"add2","button",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,42],["recess"],[true,10,2,"default"],
"model","button_top",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,42],["recess"],[false,10,2,"default"],
"model","button_top",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,42],["recess"],[false,10,2,"default"],
"model","button_assembly",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,42],["recess"],[false,10,2,"default"],
"model","button_assembly",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,42],["recess"],[false,10,2,"default"],
"model","hk_netcard",0,0,19,"bottom",[0,0,0],["sbc",true,true,true],[0,0,0],["portrait"],[true,10,2,"default"],
"add2","hd_vertleft",101,10,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait"],[false,10,2,"default"],
"sub","hd_vertleft_holes",101,10,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,3,"portrait"],[false,10,2,"default"],
"add2","hd_holder",101,10,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","left"],[false,10,2,"default"],
"sub","hd_holes",101,10,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","left",3],[false,10,2,"default"],
"model","hd25",101,110,2,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],[7],[false,10,2,"default"],
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,42],["recess"],[false,10,2,"default"],
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,42],["recess"],[false,10,2,"default"]],
"platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,42],["recess"],[false,10,2,"default"],
"platter","button_assembly",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,42],["recess"],[false,10,2,"default"]],
["h3_lowboy",
"sub","rectangle",94.5,-4,32,"top",[0,0,0],["sbc-case_z",true,true,true],[14,24.5,35],[[.25,.25,.25,.25]],[false,10,2,"default"],
@@ -440,10 +451,10 @@ accessory_data = [
"sub","vent",111.5,30,4,"bottom",[0,0,90],["case",true,false,false],[2,6,4],[1,17,"vertical",1],[false,10,2,"default"],
"add2","button",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[true,10,2,"default"],
"add2","button",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[true,10,2,"default"],
"model","button_top",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[false,10,2,"default"],
"model","button_top",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[false,10,2,"default"],
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"],
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"]],
"model","button_assembly",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[false,10,2,"default"],
"model","button_assembly",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[false,10,2,"default"],
"platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"],
"platter","button_assembly",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"]],
["h3_lowboy_router",
"sub","rectangle",94.5,-4,32,"top",[0,0,0],["sbc-case_z",true,true,true],[14,24.5,35],[[.25,.25,.25,.25]],[false,10,2,"default"],
@@ -457,11 +468,11 @@ accessory_data = [
"sub","vent",111.5,30,4,"bottom",[0,0,90],["case",true,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
"add2","button",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[true,10,2,"default"],
"add2","button",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[true,10,2,"default"],
"model","button_top",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[false,10,2,"default"],
"model","button_top",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[false,10,2,"default"],
"model","button_assembly",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[false,10,2,"default"],
"model","button_assembly",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,11],["recess"],[false,10,2,"default"],
"model","hk_netcard",0,0,19,"bottom",[0,0,0],["sbc",true,true,true],[0,0,0],["portrait"],[true,10,2,"default"],
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"],
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"]],
"platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"],
"platter","button_assembly",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,11],["recess"],[false,10,2,"default"]],
["h3_tray_router",
"suball","vent",-6.5,30,45,"top",[0,0,90],["case",false,false,false],[2,10,7],[1,17,"vertical",1],[false,10,2,"default"],
@@ -470,11 +481,11 @@ accessory_data = [
"suball","vent",111.5,30,6,"top",[0,0,90],["case",true,false,false],[2,10,7],[1,17,"vertical",1],[false,10,2,"default"],
"add2","button",12.34,106.43,59.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[true,10,2,"default"],
"add2","button",23.77,106.43,59.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[true,10,2,"default"],
"model","button_top",12.34,106.43,59.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"model","button_top",23.77,106.43,59.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"model","button_assembly",12.34,106.43,59.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"model","button_assembly",23.77,106.43,59.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,32],["recess"],[false,10,2,"default"],
"model","hk_netcard",0,0,19,"bottom",[0,0,0],["sbc",true,true,true],[0,0,0],["portrait"],[true,10,2,"default"],
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,44],["recess"],[false,10,2,"default"],
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,44],["recess"],[false,10,2,"default"]],
"platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,44],["recess"],[false,10,2,"default"],
"platter","button_assembly",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,44],["recess"],[false,10,2,"default"]],
["h3_router_station",
"suball","vent",-6.5,30,45,"left",[0,0,90],["case",false,false,false],[2,10,7],[1,17,"vertical",1],[false,10,2,"default"],
@@ -493,14 +504,14 @@ accessory_data = [
"model","hk_pwr_button",20,110,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[0,0,0],[0],[true,10,2,"default"],
"sub","round",111,34,6.07,"bottom",[0,90,0],["case",true,false,false],[3,0,6],[0],[false,10,2,"default"],
"sub","round",111,110.5,6.07,"bottom",[0,90,0],["case",true,false,false],[3,0,6],[0],[false,10,2,"default"],
"add2","hd_vertleft",98,10,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait"],[false,10,2,"default"],
"sub","hd_vertleft_holes",98,10,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,3,"portrait"],[false,10,2,"default"],
"add2","hd_holder",98,10,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","left"],[false,10,2,"default"],
"sub","hd_holes",98,10,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","left",3],[false,10,2,"default"],
"model","hd25",98,110,2,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],[7],[false,10,2,"default"]],
["h3_ultimate2",
"suball","fan",0,25,3,"top",[0,270,0],["case",false,false,false],[60,0,6],[0],[false,10,2,"default"],
"model","fan_cover",-4,25,3,"top",[0,270,0],["case",false,false,false],[60,0,2],[3],[false,10,2,"default"],
"platter","fan_cover",-100,150,0,"top",[0,0,0],["case",false,false,false],[60,0,2],[3],[false,10,2,"default"],
"suball","fan_mask",0,25,3,"top",[0,270,0],["case",false,false,false],[60,0,6],["fan_open"],[false,10,2,"default"],
"model","fan_cover",-4,25,3,"top",[0,270,0],["case",false,false,false],[60,0,2],["fan_hex"],[false,10,2,"default"],
"platter","fan_cover",-100,150,0,"top",[0,0,0],["case",false,false,false],[60,0,2],["fan_hex"],[false,10,2,"default"],
// side panel
"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],[false,10,2,"default"],
"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],[false,10,2,"default"],
@@ -535,9 +546,9 @@ accessory_data = [
"add1","rectangle",52,-16.5,51,"top",[0,0,0],["case",true,true,true],[4,130,3],[[.25,.25,.25,.25]],[false,10,2,"default"],
"add1","rectangle",77,-16.5,51,"top",[0,0,0],["case",true,true,true],[4,130,3],[[.25,.25,.25,.25]],[false,10,2,"default"],
"add1","rectangle",104,7,51,"top",[0,0,0],["case",true,true,true],[4,80,3],[[.25,.25,.25,.25]],[false,10,2,"default"],
"model","h3_port_extender",63.5,117,4,"top",[90,0,180],["case",true,false,true],[0,0,0],["remote"],[true,15,5,"default"],
"model","h3_port_extender_holder",31,119,4,"top",[0,0,-90],["case",true,false,true],[0,0,0],[2.5,"both"],[false,10,2,"default"],
"platter","h3_port_extender_holder",-170,150,0,"top",[0,0,-90],["case",true,false,true],[0,0,0],[2.5,"remote"],[false,10,2,"default"],
"model","hk_h3_port_extender",63.5,117,4,"top",[90,0,180],["case",true,false,true],[0,0,0],["remote"],[true,15,5,"default"],
"model","hk_h3_port_extender_holder",31,119,4,"top",[0,0,-90],["case",true,false,true],[0,0,0],[2.5,"both"],[false,10,2,"default"],
"platter","hk_h3_port_extender_holder",-170,150,0,"top",[0,0,-90],["case",true,false,true],[0,0,0],[2.5,"remote"],[false,10,2,"default"],
"model","hk_pwr_button",18,113,55.25,"top",[0,0,180],["case",false,false,true],[0,0,0],[0],[true,10,2,"default"],
"model","dsub",18,-1,46,"top",[90,90,0],["case",false,false,false],[0,0,0],["db9","female"],[true,10,2,"default"]],
@@ -550,16 +561,16 @@ accessory_data = [
"sub","vent",111.5,30,4,"bottom",[0,0,90],["case",true,false,false],[2,6,4],[1,17,"vertical",1],[false,10,2,"default"],
"add2","button",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,53],["recess"],[true,10,2,"default"],
"add2","button",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,53],["recess"],[true,10,2,"default"],
"model","button_top",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,58],["recess"],[false,10,2,"default"],
"model","button_top",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,58],["recess"],[false,10,2,"default"],
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,58],["recess"],[false,10,2,"default"],
"platter","button_top",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,58],["recess"],[false,10,2,"default"],
"model","button_assembly",12.34,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,58],["recess"],[false,10,2,"default"],
"model","button_assembly",23.77,106.43,55.25,"top",[0,0,0],["sbc-case_z",true,true,true],[10,0,58],["recess"],[false,10,2,"default"],
"platter","button_assembly",-20,0,0,"top",[0,0,0],["case",false,false,false],[10,0,58],["recess"],[false,10,2,"default"],
"platter","button_assembly",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,58],["recess"],[false,10,2,"default"],
"sub","round",111,24,6.07,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"sub","round",111,100.6,6.07,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
"add2","hd_vertleft",100,10,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait"],[false,10,2,"default"],
"add2","hd_vertright",65,10,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait"],[false,10,2,"default"],
"sub","hd_vertleft_holes",100,10,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,3,"portrait"],[false,10,2,"default"],
"sub","hd_vertright_holes",65,10,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,2,"portrait"],[false,10,2,"default"],
"add2","hd_holder",100,10,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","left"],[false,10,2,"default"],
"add2","hd_holder",65,10,1.99,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","right"],[false,10,2,"default"],
"sub","hd_holes",100,10,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","left",3],[false,10,2,"default"],
"sub","hd_holes",65,10,-.01,"bottom",[0,0,0],["case",true,true,false],[0,0,0],[2.5,"portrait","vertical","right",3],[false,10,2,"default"],
"model","hd25",65,110,71.85,"bottom",[-90,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"],
"model","hd25",100,110,2,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"]],