finished library documentation update, added fan and hd masks and other fixes

This commit is contained in:
Edward Kisiel
2024-04-18 19:47:42 -04:00
parent 125ec3a477
commit 2eef11f03f
23 changed files with 2027 additions and 1854 deletions

View File

@@ -680,7 +680,7 @@ DESCRIPTION: creates nut holder of various styles.
size[2] = holder height in mm size[2] = holder height in mm
data[0] = "m2", "m2.5", "m3", "m4" data[0] = "m2", "m2.5", "m3", "m4"
data[1] = "default", "sloped", "trap" data[1] = "default", "sloped", "trap"
mask[0] = false mask[0] = true
mask[1] = length mask[1] = length
mask[2] = set back mask[2] = set back
mask[3] = mstyle "default" mask[3] = mstyle "default"
@@ -994,9 +994,8 @@ DESCRIPTION: creates hard drive holes for 2.5 and 3.5 drives in various orientat
size[] = not used size[] = not used
data[0] = 2.5 or 3.5 data[0] = 2.5 or 3.5
data[1] = "portrait", "landscape" data[1] = "portrait", "landscape"
data[2] = "vertical", "horizontal" data[2] = "left", "right", "both", "bottom", "all"
data[3] = "left", "right", "none" data[3] = floor thickness
data[4] = floor thickness
mask[0] = false, not used mask[0] = false, not used
mask[1] = length mask[1] = length
mask[2] = set back mask[2] = set back
@@ -1303,7 +1302,7 @@ DESCRIPTION: creates db connectors.
mask[0] = true mask[0] = true
mask[1] = length mask[1] = length
mask[2] = set back mask[2] = set back
mask[3] = mstyle "default" mask[3] = mstyle "default", "fan_open", "fan_1", "fan_2", "fan_hex"
``` ```
@@ -1324,11 +1323,12 @@ DESCRIPTION: creates a 2.5 hard drive model.
rotation[] = object rotation rotation[] = object rotation
parametric[] = "case", "sbc", "sbc-case_z" parametric[] = "case", "sbc", "sbc-case_z"
size[] = not used size[] = not used
data[0] = height data[0] = "landscape", "portrait"
data[1] = height
mask[0] = true mask[0] = true
mask[1] = length mask[1] = length
mask[2] = set back mask[2] = set back
mask[3] = mstyle "default" mask[3] = mstyle "default", "bottom", "side", "both"
``` ```
@@ -1349,11 +1349,11 @@ DESCRIPTION: creates a 3.5 hard drive model.
rotation[] = object rotation rotation[] = object rotation
parametric[] = "case", "sbc", "sbc-case_z" parametric[] = "case", "sbc", "sbc-case_z"
size[] = not used size[] = not used
data[] = not used data[0] = "landscape", "portrait"
mask[0] = true mask[0] = true
mask[1] = length mask[1] = length
mask[2] = set back mask[2] = set back
mask[3] = mstyle "default" mask[3] = mstyle "default", "bottom", "side", "both"
``` ```

View File

@@ -15,11 +15,71 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
access_panel(size, orientation)
access_cover(size, orientation) access_cover(size, orientation)
access_panel(size, orientation, mask)
*/ */
/*
NAME: access_cover
DESCRIPTION: creates covers for access port openings
TODO: none
USAGE: access_panel(size[], orientation)
size[0] = size_x
size[1] = size_y
size[2] = floor thickness
orientation = "landscape", "portrait"
*/
module access_cover(size, orientation) {
size_x = size[0];
size_y = size[1];
floorthick = size[2];
adj = .01;
$fn = 90;
if(orientation == "portrait") {
difference() {
union() {
translate([1, 6.25, 0]) cube([size_x-2.15, size_y-17.5, floorthick]);
translate([(size_x/2)-4.75, size_y-12.25, 0]) slab([10, 5, floorthick], 5);
translate([1, 6.25, floorthick-adj]) cube([size_x-2.15, 6, floorthick]);
translate([4.25, 3, floorthick]) cube([7.25, 4, 2]);
translate([size_x-12.75, 3, floorthick]) cube([7.25, 4, 2]);
if(size_x > 100) {
translate([(size_x/2)+.25, 3, floorthick]) cube([7.25, 4, 2]);
}
}
translate([(size_x/2)+.25, size_y-6.5, -floorthick-adj])
cylinder(d=3.2, h=(floorthick*2)+(adj*2));
translate([(size_x/2)+.25, size_y-6.5, -adj])
cylinder(d1=6, d2=3.2, h=floorthick);
}
}
if(orientation == "landscape") {
difference() {
union() {
translate([6.25, 0, 0]) cube([size_x-17.75, size_y-2, floorthick]);
translate([size_x-12.25, (size_y/2)-5.75, 0]) slab([5, 10, floorthick], 5);
translate([6.25, 0, floorthick-adj]) cube([6,size_y-2.15, floorthick]);
translate([3.5+adj, 3.25, floorthick]) cube([4, 7.25, 2]);
translate([3.5+adj, size_y-12.75, floorthick]) cube([4, 7.25, 2]);
if(size_y > 100) {
translate([3.5+adj, (size_y/2)-(7.75/2)-1, floorthick]) cube([4, 7.25, 2]);
}
}
translate([size_x-6.5, (size_y/2)-.75, -floorthick-adj])
cylinder(d=3.2, h=(floorthick*2)+(adj*2));
translate([size_x-6.5, (size_y/2)-.75, -adj])
cylinder(d1=6, d2=3.2, h=floorthick);
}
}
}
/* /*
NAME: access_panel NAME: access_panel
DESCRIPTION: creates opening and structure for access openings DESCRIPTION: creates opening and structure for access openings
@@ -108,62 +168,3 @@ module access_panel(size, orientation, mask) {
} }
} }
} }
/*
NAME: access_cover
DESCRIPTION: creates covers for access port openings
TODO: none
USAGE: access_panel(size[], orientation)
size[0] = size_x
size[1] = size_y
size[2] = floor thickness
orientation = "landscape", "portrait"
*/
module access_cover(size, orientation) {
size_x = size[0];
size_y = size[1];
floorthick = size[2];
adj = .01;
$fn = 90;
if(orientation == "portrait") {
difference() {
union() {
translate([1, 6.25, 0]) cube([size_x-2.15, size_y-17.5, floorthick]);
translate([(size_x/2)-4.75, size_y-12.25, 0]) slab([10, 5, floorthick], 5);
translate([1, 6.25, floorthick-adj]) cube([size_x-2.15, 6, floorthick]);
translate([4.25, 3, floorthick]) cube([7.25, 4, 2]);
translate([size_x-12.75, 3, floorthick]) cube([7.25, 4, 2]);
if(size_x > 100) {
translate([(size_x/2)+.25, 3, floorthick]) cube([7.25, 4, 2]);
}
}
translate([(size_x/2)+.25, size_y-6.5, -floorthick-adj])
cylinder(d=3.2, h=(floorthick*2)+(adj*2));
translate([(size_x/2)+.25, size_y-6.5, -adj])
cylinder(d1=6, d2=3.2, h=floorthick);
}
}
if(orientation == "landscape") {
difference() {
union() {
translate([6.25, 0, 0]) cube([size_x-17.75, size_y-2, floorthick]);
translate([size_x-12.25, (size_y/2)-5.75, 0]) slab([5, 10, floorthick], 5);
translate([6.25, 0, floorthick-adj]) cube([6,size_y-2.15, floorthick]);
translate([3.5+adj, 3.25, floorthick]) cube([4, 7.25, 2]);
translate([3.5+adj, size_y-12.75, floorthick]) cube([4, 7.25, 2]);
if(size_y > 100) {
translate([3.5+adj, (size_y/2)-(7.75/2)-1, floorthick]) cube([4, 7.25, 2]);
}
}
translate([size_x-6.5, (size_y/2)-.75, -floorthick-adj])
cylinder(d=3.2, h=(floorthick*2)+(adj*2));
translate([size_x-6.5, (size_y/2)-.75, -adj])
cylinder(d1=6, d2=3.2, h=floorthick);
}
}
}

View File

@@ -15,7 +15,13 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
art(scale_d1, size_z, filename)
stl_model(scale_d1, filename)
*/
/*
NAME: art NAME: art
DESCRIPTION: create 2d artwork using dxf or svf DESCRIPTION: create 2d artwork using dxf or svf
TODO: none TODO: none
@@ -26,16 +32,6 @@
size_z = floor thickness size_z = floor thickness
filename = file name filename = file name
NAME: stl_model
DESCRIPTION: import 3d artwork using stl
TODO: none
USAGE: art(scale_d1, size_z, filename)
scale_d1 = amount to scale file
size_z = floor thickness
filename = file name
*/ */
module art(scale_d1, size_z, filename) { module art(scale_d1, size_z, filename) {
@@ -44,6 +40,18 @@ module art(scale_d1, size_z, filename) {
} }
/*
NAME: stl_model
DESCRIPTION: import 3d artwork using stl
TODO: none
USAGE: stl_model(scale_d1, filename)
scale_d1 = amount to scale file
filename = file name
*/
module stl_model(scale_d1, filename) { module stl_model(scale_d1, filename) {
import(file = filename, scale=scale_d1); import(file = filename, scale=scale_d1);

View File

@@ -17,10 +17,11 @@
battery(type) battery(type)
battery_clip(bat_dia = 18.4) battery_clip(bat_dia = 18.4)
module batt_holder(tolerance) batt_holder(tolerance)
*/ */
/* /*
NAME: battery NAME: battery
DESCRIPTION: creates 18650 and 21700 batteries DESCRIPTION: creates 18650 and 21700 batteries

View File

@@ -15,20 +15,21 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
button(style, diameter, height) buttons(style, diameter, height, mask)
button_assembly(style, diameter, height) button_assembly(style, diameter, height)
button_clip(style)
button_plunger(style, diameter, height) button_plunger(style, diameter, height)
button_top(style, diameter, height) button_top(style, diameter, height)
button_clip(style)
*/ */
/* /*
NAME: buttons NAME: buttons
DESCRIPTION: creates different button bodys and styles DESCRIPTION: creates different button bodys and styles
TODO: none TODO: none
USAGE: buttons(style, diameter, height, mask) USAGE: buttons(style, size, radius, post, mask)
style = "recess", "cutout" style = "recess", "cutout"
size[0] = diameter of button body size[0] = diameter of button body
@@ -125,6 +126,31 @@ $fn = 90;
} }
/*
NAME: button_clip
DESCRIPTION: creates button c-clip
TODO: none
USAGE: button_clip(style)
style = "recess", "cutout"
*/
module button_clip(style) {
adj = .01;
$fn = 90;
if(style == "recess") {
difference() {
cylinder(d=8.5, h=.8);
translate([-1.5,-1.75,-adj]) cube([2.75,3.5,1]);
translate([-.75,-.75,-adj]) cube([5,1.25,1.25]);
}
}
}
/* /*
NAME: button_plunger NAME: button_plunger
DESCRIPTION: creates button plunger DESCRIPTION: creates button plunger
@@ -178,28 +204,3 @@ $fn = 90;
} }
} }
} }
/*
NAME: button_clip
DESCRIPTION: creates button c-clip
TODO: none
USAGE: button_clip(style)
style = "recess", "cutout"
*/
module button_clip(style) {
adj = .01;
$fn = 90;
if(style == "recess") {
difference() {
cylinder(d=8.5, h=.8);
translate([-1.5,-1.75,-adj]) cube([2.75,3.5,1]);
translate([-.75,-.75,-adj]) cube([5,1.25,1.25]);
}
}
}

View File

@@ -15,8 +15,13 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
cableholder_spacer()
*/
/*
NAME: cableholder_spacer NAME: cableholder_spacer
DESCRIPTION: creates 18650 and 21700 batteries DESCRIPTION: creates spacer and cable holder for drive mounts
TODO: none TODO: none
USAGE: cableholder_spacer() USAGE: cableholder_spacer()

View File

@@ -15,11 +15,12 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
hk_h3_port_extender(style, mask = false) hk_h3_port_extender(style, mask)
hk_h3_port_extender_holder(part, offset) hk_h3_port_extender_holder(part, offset)
*/ */
/* /*
NAME: hk_h3_port_extender NAME: hk_h3_port_extender
DESCRIPTION: @mctom's odroid-h3 gpio port extender DESCRIPTION: @mctom's odroid-h3 gpio port extender
@@ -27,11 +28,11 @@
USAGE: hk_h3_port_extender(style, mask) USAGE: hk_h3_port_extender(style, mask)
style = "header", "remote" style = "header", "remote"
mask[0] = true enables component mask mask[0] = true enables component mask
mask[1] = mask length mask[1] = mask length
mask[2] = mask setback mask[2] = mask setback
mask[3] = mstyle "default" mask[3] = mstyle "default"
*/ */
module hk_h3_port_extender(style, mask) { module hk_h3_port_extender(style, mask) {
@@ -105,8 +106,8 @@ module hk_h3_port_extender(style, mask) {
USAGE: hk_h3_port_extender_holder(part, offset) USAGE: hk_h3_port_extender_holder(part, offset)
part = "top","bottom","both" part = "top","bottom","both"
offset = distance from mount face offset = distance from mount face
*/ */
module hk_h3_port_extender_holder(part,offset=2) { module hk_h3_port_extender_holder(part,offset=2) {

View File

@@ -15,6 +15,12 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
dsub(style, gender, mask)
*/
/*
NAME: dsub NAME: dsub
DESCRIPTION: creates dsub connectors DESCRIPTION: creates dsub connectors
TODO: 9db male, 25db male and female TODO: 9db male, 25db male and female
@@ -23,10 +29,10 @@
style = "db9" style = "db9"
gender = "female","male" gender = "female","male"
mask[0] = true enables component mask mask[0] = true enables component mask
mask[1] = mask length mask[1] = mask length
mask[2] = mask setback mask[2] = mask setback
mask[3] = mstyle "default" mask[3] = mstyle "default"
*/ */
module dsub(style, gender, mask) { module dsub(style, gender, mask) {

View File

@@ -15,35 +15,29 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
fans(style, size, mask) fans(style, mask)
fan_cover(size, thick) fan_cover(size, thick)
fan_mask(size, thick, style) fan_mask(size, thick, style)
*/ */
/* /*
NAME: fans NAME: fans
DESCRIPTION: creates different fan styles and sizes DESCRIPTION: creates different fan styles and sizes
TODO: add vans TODO: add efficient vanes
USAGE: fans(style, size, mask) USAGE: fans(style, mask)
style = "box", style = "box",
size[0] = size of fan mask[0] = true enables component mask
size[2] = thickness of fan mask[1] = mask length
mask[0] = true enables component mask mask[2] = mask setback
mask[1] = mask length mask[3] = mstyle "default", "fan_open", "fan_1", "fan_2", "fan_hex"
mask[2] = mask setback
mask[3] = mstyle "default"
*/ */
module fans(style, mask) { module fans(style, mask) {
enablemask = mask[0];
mlength = mask[1];
msetback = mask[2];
mstyle = mask[3];
// size, thick, hole-spacing, hole-size, hub-size // size, thick, hole-spacing, hole-size, hub-size
fan_data = [ fan_data = [
["box140x25", 140, 25, 124.5, 4.3, 40, "#353535"], ["box140x25", 140, 25, 124.5, 4.3, 40, "#353535"],
@@ -67,13 +61,27 @@ module fans(style, mask) {
hole_offset = (diameter-hole_space)/2; hole_offset = (diameter-hole_space)/2;
hub_size = fan_data[f[0]][5]; hub_size = fan_data[f[0]][5];
fan_color = fan_data[f[0]][6]; fan_color = fan_data[f[0]][6];
enablemask = mask[0];
mlength = mask[1];
msetback = mask[2];
mstyle = mask[3];
adj = .01; adj = .01;
$fn = 90; $fn = 90;
if(enablemask == true && mstyle == "default") { if(enablemask == true) {
if(style == "box") { if(mstyle == "fan_open") {
translate([0, 0, -adj-msetback]) cylinder(d = diameter-2*adj, h = mlength); translate([0, 0, -adj-msetback]) fan_mask(diameter, mlength, "fan_open");
}
if(mstyle == "default" || mstyle == "fan_1") {
translate([0, 0, -adj-msetback]) fan_mask(diameter, mlength, "fan_1");
}
if(mstyle == "fan_2") {
translate([0, 0, -adj-msetback]) fan_mask(diameter, mlength, "fan_2");
}
if(mstyle == "fan_hex") {
translate([0, 0, -adj-msetback]) fan_mask(diameter, mlength, "fan_hex");
} }
} }
if(enablemask == false) { if(enablemask == false) {
@@ -96,9 +104,8 @@ module fans(style, mask) {
color(fan_color) translate([-4,-4, -1]) cube([diameter+8, 4, thickness+2]); color(fan_color) translate([-4,-4, -1]) cube([diameter+8, 4, thickness+2]);
color(fan_color) translate([-4,diameter, -1]) cube([diameter+8, 4, thickness+2]); color(fan_color) translate([-4,diameter, -1]) cube([diameter+8, 4, thickness+2]);
} }
color(fan_color) translate([diameter/2, diameter/2, thickness/2]) rotate([0,0,30]) color(fan_color) translate([diameter/2, diameter/2, thickness/2]) rotate([0,0,30])
cylinder_fillet_inside(h=thickness, r=hub_size/2, top=1, bottom=1, $fn=90, fillet_fn=90, center=true); cylinder_fillet_inside(h=thickness, r=hub_size/2, top=1, bottom=1, $fn=90, fillet_fn=90, center=true);
} }
} }
@@ -124,14 +131,14 @@ module fan_cover(size, thick, style) {
/* /*
DESCRIPTION: creates heatsink masks for openings DESCRIPTION: creates fan masks for openings
TODO: TODO:
USAGE: heatsink_mask(size, thick, style) USAGE: fan_mask(size, thick, style)
size = size of fan size = size of fan
thick = thickness of cover thick = thickness of cover
style = "fan_open", "fan_1", "fan_2", "fan_hex" style = "fan_open", "fan_1", "fan_2", "fan_hex"
*/ */
module fan_mask(size, thick, style) { module fan_mask(size, thick, style) {
@@ -331,11 +338,11 @@ module fan_mask(size, thick, style) {
} }
} }
translate([0, 0, 2]) translate([0, 0, 11])
union() { union() {
cylinder(d=bar_size*2+0.1, thick+2); // Add a circle to prevent any tiny holes around cross bar 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([size, bar_size, thick+4], center=true);
rotate([0, 0, 45]) cube([bar_size, size, thick+2], center=true); rotate([0, 0, 45]) cube([bar_size, size, thick+4], center=true);
} }
} }
} }

View File

@@ -19,6 +19,7 @@
*/ */
/* /*
NAME: fan_cover NAME: fan_cover
DESCRIPTION: creates fan covers for fan openings DESCRIPTION: creates fan covers for fan openings

View File

@@ -15,6 +15,12 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
feet (diameter, height)
*/
/*
NAME: feet NAME: feet
DESCRIPTION: creates simple case feet DESCRIPTION: creates simple case feet
TODO: none TODO: none

View File

@@ -15,120 +15,109 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
hd_mount(hd, orientation, position, side) hd25(orientation, height, mask)
hd25_tab(side) hd25_tab(side)
hd25_vtab(side) hd25_vtab(side)
hd35(orientation, mask)
hdd35_25holder(length)
hd35_tab(side) hd35_tab(side)
hd35_vtab(side) hd35_vtab(side)
hd_bottom_holes(hd, orientation, position, side, thick) hd_bottom_holes(hd, orientation, side, thick)
hd25(height) hd_mount(hd, orientation, position, side)
hd35()
hdd35_25holder(length)
*/ */
/* /*
NAME: hd_mount NAME: hd25
DESCRIPTION: creates 2.5" and 3.5" hard drive mounts DESCRIPTION: creates 2.5" hard drive model
TODO: none TODO: none
USAGE: hd_mount(hd, orientation, position, side) USAGE: hd25(orientation, height, mask)
hd = 2.5, 3.5 orientation = "landscape", "portrait"
orientation = "portrait", "landscape" height = drive height
position = "vertical", "horizontal" mask[0] = true enables component mask
side = "left", "right" mask[1] = mask length
mask[2] = mask setback
mask[3] = mstyle "default", "bottom", "side", "both"
*/ */
module hd_mount(hd, orientation, position, side) { module hd25(orientation, height, mask) {
hd25_x = 100;
hd25_y = 69.85;
hd25_z = height;
enablemask = mask[0];
mlength = mask[1];
msetback = mask[2];
mstyle = mask[3];
adj = .01; adj = .01;
$fn = 90; $fn = 90;
if(hd == 2.5) { if(enablemask == true) {
if(orientation == "portrait") { if(orientation == "landscape" && (mstyle == "side" || mstyle == "both" || mstyle == "default")) {
if(position == "vertical") { translate([0, msetback, 0]) hd_holes(2.5, "landscape", "left", mlength);
if(side == "left") { translate([0, -msetback, 0]) hd_holes(2.5, "landscape", "right", mlength);
translate([0,14,0]) rotate([0,0,0]) hd25_vtab("right");
translate([0,90.6,0]) rotate([0,0,0]) hd25_vtab("right");
}
else { // right
translate([0,14,0]) rotate([0,0,0]) hd25_vtab("left");
translate([0,90.6,0]) rotate([0,0,0]) hd25_vtab("left");
}
}
else {
translate([-.5,14,0]) hd25_tab("left");
translate([-.5,90.6,0]) hd25_tab("left");
translate([70.35,14,0]) hd25_tab("right");
translate([70.35,90.6,0]) hd25_tab("right");
}
} }
if(orientation == "landscape") { if(orientation == "landscape" && (mstyle == "bottom" || mstyle == "both")) {
if(position == "vertical") { translate([0, 0, msetback]) hd_holes(2.5, "landscape", "bottom", mlength);
if(side == "left") { }
translate([9.4,0,0]) rotate([0,0,90]) hd25_vtab("right"); if(orientation == "portrait" && (mstyle == "side" || mstyle == "both" || mstyle == "default")) {
translate([86,0,0]) rotate([0,0,90]) hd25_vtab("right"); translate([msetback, 0, 0]) hd_holes(2.5, "portrait", "left", mlength);
} translate([-msetback, 0, 0]) hd_holes(2.5, "portrait", "right", mlength);
else { // right }
translate([9.4,0,0]) rotate([0,0,90]) hd25_vtab("left"); if(orientation == "portrait" && (mstyle == "bottom" || mstyle == "both")) {
translate([86,0,0]) rotate([0,0,90]) hd25_vtab("left"); translate([0, 0, -mlength+msetback]) hd_holes(2.5, "portrait", "bottom", mlength);
}
}
else {
translate([9.4,4.07-4.5,0]) rotate([0,0,90]) hd25_tab("left");
translate([86,4.07-4.5,0]) rotate([0,0,90]) hd25_tab("left");
translate([86,65.79+4.5,0]) rotate([0,0,90]) hd25_tab("right");
translate([9.4,65.79+4.5,0]) rotate([0,0,90]) hd25_tab("right");
}
} }
} }
if(hd == 3.5) { if(enablemask == false) {
if(orientation == "portrait") { if(orientation == "landscape") {
if(position == "vertical") { difference() {
if(side == "left") { color("LightGrey",.6) cube([hd25_x,hd25_y,hd25_z]);
translate([0,41.28,0]) rotate([0,0,0]) hd35_vtab("right");
translate([0,41.28+44.45,0]) rotate([0,0,0]) hd35_vtab("right"); // bottom screw holes
translate([0,41.28+76.20,0]) rotate([0,0,0]) hd35_vtab("right"); color("Black",.6) translate([9.4,4.07,-adj]) cylinder(d=3,h=3);
} color("Black",.6) translate([86,4.07,-adj]) cylinder(d=3,h=3);
else { // right color("Black",.6) translate([86,65.79,-adj]) cylinder(d=3,h=4);
translate([0,41.28,0]) rotate([0,0,0]) hd35_vtab("left"); color("Black",.6) translate([9.4,65.79,-adj]) cylinder(d=3,h=4);
translate([0,41.28+44.45,0]) rotate([0,0,0]) hd35_vtab("left");
translate([0,41.28+76.20,0]) rotate([0,0,0]) hd35_vtab("left"); // side screw holes
} color("Black",.6) translate([9.4,-adj,3]) rotate([-90,0,0]) cylinder(d=3,h=3);
} color("Black",.6) translate([86,-adj,3]) rotate([-90,0,0]) cylinder(d=3,h=3);
else { color("Black",.6) translate([86,hd25_y+adj,3]) rotate([90,0,0]) cylinder(d=3,h=3);
translate([-.5,28.5,0]) hd35_tab("left"); color("Black",.6) translate([9.4,hd25_y+adj,3]) rotate([90,0,0]) cylinder(d=3,h=3);
translate([-.5,69.75,0]) hd35_tab("left");
translate([-.5,130.1,0]) hd35_tab("left"); // connector opening
translate([101.6+.5,28.5,0]) hd35_tab("right"); color("LightSlateGray",.6) translate([hd25_x-5,11,-1]) cube([5+adj,32,5+adj]);
translate([101.6+.5,69.75,0]) hd35_tab("right");
translate([101.6+.5,130.1,0]) hd35_tab("right");
} }
} }
if(orientation == "landscape") { if(orientation == "portrait") {
if(position == "vertical") { translate([0,hd25_x,0]) rotate([0,0,270])
if(side == "left") { difference() {
translate([9.4,0,0]) rotate([0,0,90]) hd35_vtab("right"); color("LightGrey",.6) cube([hd25_x,hd25_y,hd25_z]);
translate([86,0,0]) rotate([0,0,90]) hd35_vtab("right");
// bottom screw holes
color("Black",.6) translate([9.4,4.07,-adj]) cylinder(d=3,h=3);
color("Black",.6) translate([86,4.07,-adj]) cylinder(d=3,h=3);
color("Black",.6) translate([86,65.79,-adj]) cylinder(d=3,h=4);
color("Black",.6) translate([9.4,65.79,-adj]) cylinder(d=3,h=4);
// side screw holes
color("Black",.6) translate([9.4,-adj,3]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([86,-adj,3]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([86,hd25_y+adj,3]) rotate([90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([9.4,hd25_y+adj,3]) rotate([90,0,0]) cylinder(d=3,h=3);
// connector opening
color("LightSlateGray",.6) translate([hd25_x-5,11,-1]) cube([5+adj,32,5+adj]);
} }
else { // right
translate([9.4,0,0]) rotate([0,0,90]) hd35_vtab("left");
translate([86,0,0]) rotate([0,0,90]) hd35_vtab("left");
}
}
else {
translate([16.9,-.5,0]) rotate([0,0,90]) hd35_tab("left");
translate([76.6,-.5,0]) rotate([0,0,90]) hd35_tab("left");
translate([118.5,-.5,0]) rotate([0,0,90]) hd35_tab("left");
translate([16.9,101.6-.5,0]) rotate([0,0,90]) hd35_tab("right");
translate([76.6,101.6-.5,0]) rotate([0,0,90]) hd35_tab("right");
translate([118.5,101.6-.5,0]) rotate([0,0,90]) hd35_tab("right");
}
} }
} }
} }
/* /*
NAME: hd25_tab NAME: hd25_tab
DESCRIPTION: creates 2.5" hard drive tabs for horizontal mounting DESCRIPTION: creates 2.5" hard drive tabs for horizontal mounting
@@ -275,6 +264,202 @@ module hd25_vtab(side) {
} }
/*
NAME: hd35
DESCRIPTION: creates 3.5" hard drive model
TODO: none
USAGE: hd35(orientation, mask)
orientation = "landscape", "portrait"
mask[0] = true enables component mask
mask[1] = mask length
mask[2] = mask setback
mask[3] = mstyle "default", "bottom", "side", "both"
*/
module hd35(orientation, mask) {
hd35_x = 147;
hd35_y = 101.6;
hd35_z = 26.1;
enablemask = mask[0];
mlength = mask[1];
msetback = mask[2];
mstyle = mask[3];
adj = .01;
$fn = 90;
if(enablemask == true) {
if(orientation == "landscape" && (mstyle == "side" || mstyle == "both" || mstyle == "default")) {
translate([0, msetback, 0]) hd_holes(3.5, "landscape", "left", mlength);
translate([0, -msetback, 0]) hd_holes(3.5, "landscape", "right", mlength);
}
if(orientation == "landscape" && (mstyle == "bottom" || mstyle == "both")) {
translate([0, 0, msetback]) hd_holes(3.5, "landscape", "bottom", mlength);
}
if(orientation == "portrait" && (mstyle == "side" || mstyle == "both" || mstyle == "default")) {
translate([msetback, 0, 0]) hd_holes(3.5, "portrait", "left", mlength);
translate([-msetback, 0, 0]) hd_holes(3.5, "portrait", "right", mlength);
}
if(orientation == "portrait" && (mstyle == "bottom" || mstyle == "both")) {
translate([0, 0, -mlength+msetback]) hd_holes(3.5, "portrait", "bottom", mlength);
}
}
if(enablemask == false) {
if(orientation == "landscape") {
difference() {
color("LightGrey",.6) cube([hd35_x,hd35_y,hd35_z]);
// bottom screw holes
color("Black",.6) translate([29.52,3.18,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([61.27,3.18,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([105.72,3.18,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([29.52,98.43,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([61.27,98.43,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([105.72,98.43,-adj]) cylinder(d=3,h=3+adj);
// side screw holes
color("Black",.6) translate([16.9,-adj,6.35]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([76.6,-adj,6.35]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([118.5,-adj,6.35]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([118.5,hd35_y+adj,6.35]) rotate([90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([76.6,hd35_y+adj,6.35]) rotate([90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([16.9,hd35_y+adj,6.35]) rotate([90,0,0]) cylinder(d=3,h=3);
// connector opening
color("LightSlateGray",.6) translate([hd35_x-5,11,-1]) cube([5+adj,32,5+adj]);
}
}
if(orientation == "portrait") {
translate([0,hd35_x,0]) rotate([0,0,270])
difference() {
color("LightGrey",.6) cube([hd35_x,hd35_y,hd35_z]);
// bottom screw holes
color("Black",.6) translate([29.52,3.18,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([61.27,3.18,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([105.72,3.18,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([29.52,98.43,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([61.27,98.43,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([105.72,98.43,-adj]) cylinder(d=3,h=3+adj);
// side screw holes
color("Black",.6) translate([16.9,-adj,6.35]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([76.6,-adj,6.35]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([118.5,-adj,6.35]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([118.5,hd35_y+adj,6.35]) rotate([90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([76.6,hd35_y+adj,6.35]) rotate([90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([16.9,hd35_y+adj,6.35]) rotate([90,0,0]) cylinder(d=3,h=3);
// connector opening
color("LightSlateGray",.6) translate([hd35_x-5,11,-1]) cube([5+adj,32,5+adj]);
}
}
}
}
/*
NAME: hd35_25holder
DESCRIPTION: 3.5" hdd to 2.5" hdd holder
TODO: none
USAGE: hdd35_25holder(length, width=101.6)
length = length of holder min. 145mm for 3.5" drive
*/
module hd35_25holder(length, width=101.6) {
wallthick = 3;
floorthick = 2;
hd35_x = length; // 145mm for 3.5" drive
hd35_y = width;
hd35_z = 12;
hd25_x = 100;
hd25_y = 69.85;
hd25_z = 9.5;
hd25_xloc = 2; // or (hd35_x-hd25_x)/2
hd25_yloc = (hd35_y-hd25_y)/2;
hd25_zloc = 9.5;
adj = .1;
$fn=90;
difference() {
union() {
difference() {
translate([(hd35_x/2),(hd35_y/2),(hd35_z/2)])
cube_fillet_inside([hd35_x,hd35_y,hd35_z],
vertical=[3,3,3,3], top=[0,0,0,0], bottom=[0,0,0,0], $fn=90);
translate([(hd35_x/2),(hd35_y/2),(hd35_z/2)+floorthick])
cube_fillet_inside([hd35_x-(wallthick*2),hd35_y-(wallthick*2),hd35_z],
vertical=[0,0,0,0], top=[0,0,0,0], bottom=[0,0,0,0], $fn=90);
// end trim
translate([-adj,5,wallthick+2]) cube([wallthick+(adj*2),hd35_y-10,10]);
translate([hd35_x-wallthick-adj,5,wallthick+2]) cube([wallthick+(adj*2),hd35_y-10,10]);
// bottom vents
for ( r=[15:40:hd35_x-40]) {
for (c=[hd35_y-76:4:75]) {
translate ([r,c,-adj]) cube([35,2,wallthick+(adj*2)]);
}
}
}
// 2.5 hdd bottom support
translate([9.4+hd25_xloc,4.07+hd25_yloc,floorthick-adj]) cylinder(d=8,h=4);
translate([86+hd25_xloc,4.07+hd25_yloc,floorthick-adj]) cylinder(d=8,h=4);
translate([86+hd25_xloc,65.79+hd25_yloc,floorthick-adj]) cylinder(d=8,h=4);
translate([9.4+hd25_xloc,65.79+hd25_yloc,floorthick-adj]) cylinder(d=8,h=4);
// side nut holder support
translate([16,wallthick-adj,7]) rotate([-90,0,0]) cylinder(d=10,h=3);
translate([76,wallthick-adj,7]) rotate([-90,0,0]) cylinder(d=10,h=3);
if(length >= 120) {
translate([117.5,wallthick-adj,7]) rotate([-90,0,0]) cylinder(d=10,h=3);
translate([117.5,hd35_y-wallthick+adj,7]) rotate([90,0,0]) cylinder(d=10,h=3);
}
translate([76,hd35_y-wallthick+adj,7]) rotate([90,0,0]) cylinder(d=10,h=3);
translate([16,hd35_y-wallthick+adj,7]) rotate([90,0,0]) cylinder(d=10,h=3);
// bottom-side support
translate([wallthick,wallthick,floorthick-2]) rotate([45,0,0]) cube([hd35_x-(wallthick*2),3,3]);
translate([wallthick,hd35_y-wallthick+adj,floorthick-2]) rotate([45,0,0]) cube([hd35_x-(wallthick*2),3,3]);
}
// bottom screw holes
translate([9.4+hd25_xloc,4.07+hd25_yloc,-adj]) cylinder(d=3,h=(floorthick*3)+(adj*2));
translate([86+hd25_xloc,4.07+hd25_yloc,-adj]) cylinder(d=3,h=(floorthick*3)+(adj*2));
translate([86+hd25_xloc,65.79+hd25_yloc,-adj]) cylinder(d=3,h=(floorthick*3)+(adj*2));
translate([9.4+hd25_xloc,65.79+hd25_yloc,-adj]) cylinder(d=3,h=(floorthick*3)+(adj*2));
// countersink holes
translate([9.4+hd25_xloc,4.07+hd25_yloc,-adj]) cylinder(d1=6.5, d2=3, h=3);
translate([86+hd25_xloc,4.07+hd25_yloc,-adj]) cylinder(d1=6.5, d2=3, h=3);
translate([86+hd25_xloc,65.79+hd25_yloc,-adj]) cylinder(d1=6.5, d2=3, h=3);
translate([9.4+hd25_xloc,65.79+hd25_yloc,-adj]) cylinder(d1=6.5, d2=3, h=3);
// side screw holes
translate([16,-adj,7]) rotate([-90,0,0]) cylinder(d=3.6,h=7);
translate([76,-adj,7]) rotate([-90,0,0]) cylinder(d=3.6,h=7);
translate([117.5,-adj,7]) rotate([-90,0,0]) cylinder(d=3.6,h=7);
translate([117.5,hd35_y+adj,7]) rotate([90,0,0]) cylinder(d=3.6,h=7);
translate([76,hd35_y+adj,7]) rotate([90,0,0]) cylinder(d=3.6,h=7);
translate([16,hd35_y+adj,7]) rotate([90,0,0]) cylinder(d=3.6,h=7);
// side nut trap
translate([16,wallthick-adj,7]) rotate([-90,0,0]) cylinder(r=3.30,h=5,$fn=6);
translate([76,wallthick-adj,7]) rotate([-90,0,0]) cylinder(r=3.30,h=5,$fn=6);
translate([117.5,wallthick-adj,7]) rotate([-90,0,0]) cylinder(r=3.30,h=5,$fn=6);
translate([117.5,hd35_y-wallthick-adj,7]) rotate([90,0,0]) cylinder(r=3.30,h=5,$fn=6);
translate([76,hd35_y-wallthick-adj,7]) rotate([90,0,0]) cylinder(r=3.30,h=5,$fn=6);
translate([16,hd35_y-wallthick-adj,7]) rotate([90,0,0]) cylinder(r=3.30,h=5,$fn=6);
}
}
/* /*
NAME: hd35_tab NAME: hd35_tab
DESCRIPTION: creates 3.5" hard drive tabs for horizontal mounting DESCRIPTION: creates 3.5" hard drive tabs for horizontal mounting
@@ -429,16 +614,123 @@ module hd35_vtab(side) {
DESCRIPTION: creates 2.5" and 3.5" hard drive hole mask for mounting DESCRIPTION: creates 2.5" and 3.5" hard drive hole mask for mounting
TODO: none TODO: none
USAGE: hd_bottom_holes(hd, orientation, position, side, thick) USAGE: hd_bottom_holes(hd, orientation, side, thick)
hd = 2.5, 3.5 hd = 2.5, 3.5
orientation = "portrait", "landscape" orientation = "portrait", "landscape"
position = "vertical", "horizontal" side = "left", "right", "both", "bottom", "all"
side = "left", "right", "none"
thick = floor thickness thick = floor thickness
*/ */
module hd_holes(hd, orientation, position, side, thick) { module hd_holes(hd, orientation, side, thick) {
hd25_x = 100;
hd25_y = 69.85;
hd35_x = 147;
hd35_y = 101.6;
hd35_z = 26.1;
adj = .01;
$fn = 90;
if(hd == 2.5) {
if(orientation == "portrait") {
translate([0,hd25_x,0]) rotate([0,0,270]) union() {
if(side == "left" || side == "both" || side == "all") {
translate([9.4,-thick,3]) rotate([270,0,0]) cylinder(d=3.6,h=thick);
translate([86,-thick,3]) rotate([270,0,0]) cylinder(d=3.6,h=thick);
}
if(side == "right" || side == "both" || side == "all") {
translate([9.4,hd25_y+thick,3]) rotate([90,0,0]) cylinder(d=3.6,h=thick);
translate([86,hd25_y+thick,3]) rotate([90,0,0]) cylinder(d=3.6,h=thick);
}
if(side == "bottom" || side == "all") {
translate([9.4,4.07,0]) cylinder(d=3.6,h=thick);
translate([86,4.07,0]) cylinder(d=3.6,h=thick);
translate([86,65.79,0]) cylinder(d=3.6,h=thick);
translate([9.4,65.79,0]) cylinder(d=3.6,h=thick);
}
}
}
if(orientation == "landscape") {
if(side == "left" || side == "both" || side == "all") {
translate([9.4,-thick,3]) rotate([270,0,0]) cylinder(d=3.6,h=thick);
translate([86,-thick,3]) rotate([270,0,0]) cylinder(d=3.6,h=thick);
}
if(side == "right" || side == "both" || side == "all") {
translate([9.4,hd25_y+thick,3]) rotate([90,0,0]) cylinder(d=3.6,h=thick);
translate([86,hd25_y+thick,3]) rotate([90,0,0]) cylinder(d=3.6,h=thick);
}
if(side == "bottom" || side == "all") {
translate([9.4,4.07,-thick]) cylinder(d=3.6,h=thick);
translate([86,4.07,-thick]) cylinder(d=3.6,h=thick);
translate([86,65.79,-thick]) cylinder(d=3.6,h=thick);
translate([9.4,65.79,-thick]) cylinder(d=3.6,h=thick);
}
}
}
if(hd == 3.5) {
if(orientation == "portrait") {
translate([0,hd35_x,0]) rotate([0,0,270]) union() {
if(side == "left" || side == "both" || side == "all") {
translate([16.9,-thick,6.35]) rotate([270,0,0]) cylinder(d=3,h=thick);
translate([76.6,-thick,6.35]) rotate([270,0,0]) cylinder(d=3,h=thick);
translate([118.5,-thick,6.35]) rotate([270,0,0]) cylinder(d=3,h=thick);
}
if(side == "right" || side == "both" || side == "all") {
translate([118.5,hd35_y+thick,6.35]) rotate([90,0,0]) cylinder(d=3,h=thick);
translate([76.6,hd35_y+thick,6.35]) rotate([90,0,0]) cylinder(d=3,h=thick);
translate([16.9,hd35_y+thick,6.35]) rotate([90,0,0]) cylinder(d=3,h=thick);
}
if(side == "bottom" || side == "all") {
// landscape 3.5" bottom screw holes
translate([29.52,3.18,0]) cylinder(d=3.6,h=thick);
translate([61.27,3.18,0]) cylinder(d=3.6,h=thick);
translate([105.72,3.18,0]) cylinder(d=3.6,h=thick);
translate([29.52,98.43,0]) cylinder(d=3.6,h=thick);
translate([61.27,98.43,0]) cylinder(d=3.6,h=thick);
translate([105.72,98.43,0]) cylinder(d=3.6,h=thick);
}
}
}
if(orientation == "landscape") {
if(side == "left" || side == "both" || side == "all") {
translate([16.9,-thick,6.35]) rotate([270,0,0]) cylinder(d=3,h=thick);
translate([76.6,-thick,6.35]) rotate([270,0,0]) cylinder(d=3,h=thick);
translate([118.5,-thick,6.35]) rotate([270,0,0]) cylinder(d=3,h=thick);
}
if(side == "right" || side == "both" || side == "all") {
translate([118.5,hd35_y+thick,6.35]) rotate([90,0,0]) cylinder(d=3,h=thick);
translate([76.6,hd35_y+thick,6.35]) rotate([90,0,0]) cylinder(d=3,h=thick);
translate([16.9,hd35_y+thick,6.35]) rotate([90,0,0]) cylinder(d=3,h=thick);
}
if(side == "bottom" || side == "all") {
// landscape 3.5" bottom screw holes
translate([29.52,3.18,-thick]) cylinder(d=3.6,h=thick);
translate([61.27,3.18,-thick]) cylinder(d=3.6,h=thick);
translate([105.72,3.18,-thick]) cylinder(d=3.6,h=thick);
translate([29.52,98.43,-thick]) cylinder(d=3.6,h=thick);
translate([61.27,98.43,-thick]) cylinder(d=3.6,h=thick);
translate([105.72,98.43,-thick]) cylinder(d=3.6,h=thick);
}
}
}
}
/*
NAME: hd_mount
DESCRIPTION: creates 2.5" and 3.5" hard drive mounts
TODO: none
USAGE: hd_mount(hd, orientation, position, side)
hd = 2.5, 3.5
orientation = "portrait", "landscape"
position = "vertical", "horizontal"
side = "left", "right"
*/
module hd_mount(hd, orientation, position, side) {
adj = .01; adj = .01;
$fn = 90; $fn = 90;
@@ -447,42 +739,37 @@ module hd_holes(hd, orientation, position, side, thick) {
if(orientation == "portrait") { if(orientation == "portrait") {
if(position == "vertical") { if(position == "vertical") {
if(side == "left") { if(side == "left") {
translate([-3,14,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([0,14,0]) rotate([0,0,0]) hd25_vtab("right");
translate([-3,90.6,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([0,90.6,0]) rotate([0,0,0]) hd25_vtab("right");
} }
else { else { // right
// portrait 2.5" bottom screw holes translate([0,14,0]) rotate([0,0,0]) hd25_vtab("left");
translate([3,14,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([0,90.6,0]) rotate([0,0,0]) hd25_vtab("left");
translate([3,90.6,0]) cylinder(d=3.6,h=thick+(adj*2));
} }
} }
else { else {
// portrait 2.5" bottom screw holes translate([-.5,14,0]) hd25_tab("left");
translate([4.07,14,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([-.5,90.6,0]) hd25_tab("left");
translate([4.07,90.6,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([70.35,14,0]) hd25_tab("right");
translate([65.79,90.6,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([70.35,90.6,0]) hd25_tab("right");
translate([65.79,14,0]) cylinder(d=3.6,h=thick+(adj*2));
} }
} }
if(orientation == "landscape") { if(orientation == "landscape") {
if(position == "vertical") { if(position == "vertical") {
if(side == "left") { if(side == "left") {
translate([9.4,-3,0]) cylinder(d=3.6,h=thick+5); translate([9.4,0,0]) rotate([0,0,90]) hd25_vtab("right");
translate([86,-3,0]) cylinder(d=3.6,h=thick+5); translate([86,0,0]) rotate([0,0,90]) hd25_vtab("right");
} }
else { else { // right
echo(side); translate([9.4,0,0]) rotate([0,0,90]) hd25_vtab("left");
translate([9.4,3,0]) cylinder(d=3.6,h=thick+5); translate([86,0,0]) rotate([0,0,90]) hd25_vtab("left");
translate([86,3,0]) cylinder(d=3.6,h=thick+5);
} }
} }
else { else {
// landscape 2.5" bottom screw holes translate([9.4,4.07-4.5,0]) rotate([0,0,90]) hd25_tab("left");
translate([9.4,4.07,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([86,4.07-4.5,0]) rotate([0,0,90]) hd25_tab("left");
translate([86,4.07,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([86,65.79+4.5,0]) rotate([0,0,90]) hd25_tab("right");
translate([86,65.79,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([9.4,65.79+4.5,0]) rotate([0,0,90]) hd25_tab("right");
translate([9.4,65.79,0]) cylinder(d=3.6,h=thick+(adj*2));
} }
} }
} }
@@ -490,217 +777,44 @@ module hd_holes(hd, orientation, position, side, thick) {
if(orientation == "portrait") { if(orientation == "portrait") {
if(position == "vertical") { if(position == "vertical") {
if(side == "left") { if(side == "left") {
translate([-6,28.5,0]) cylinder(d=3.6,h=thick+5); translate([0,41.28,0]) rotate([0,0,0]) hd35_vtab("right");
translate([-6,70.5,0]) cylinder(d=3.6,h=thick+5); translate([0,41.28+44.45,0]) rotate([0,0,0]) hd35_vtab("right");
translate([-6,28.5+101.6,0]) cylinder(d=3.6,h=thick+5); translate([0,41.28+76.20,0]) rotate([0,0,0]) hd35_vtab("right");
} }
else { else { // right
// portrait 3.5" bottom screw holes translate([0,41.28,0]) rotate([0,0,0]) hd35_vtab("left");
translate([6,28.5,0]) cylinder(d=3.6,h=thick+5); translate([0,41.28+44.45,0]) rotate([0,0,0]) hd35_vtab("left");
translate([6,70.5,0]) cylinder(d=3.6,h=thick+5); translate([0,41.28+76.20,0]) rotate([0,0,0]) hd35_vtab("left");
translate([6,28.5+101.6,0]) cylinder(d=3.6,h=thick+5);
} }
} }
else { else {
// portrait 3.5" bottom screw holes translate([-.5,28.5,0]) hd35_tab("left");
translate([3.18,41.28,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([-.5,69.75,0]) hd35_tab("left");
translate([3.18,85.73,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([-.5,130.1,0]) hd35_tab("left");
translate([3.18,117.48,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([101.6+.5,28.5,0]) hd35_tab("right");
translate([98.43,41.28,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([101.6+.5,69.75,0]) hd35_tab("right");
translate([98.43,85.73,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([101.6+.5,130.1,0]) hd35_tab("right");
translate([98.43,117.48,0]) cylinder(d=3.6,h=thick+(adj*2));
} }
} }
if(orientation == "landscape") { if(orientation == "landscape") {
// landscape 3.5" bottom screw holes if(position == "vertical") {
translate([29.52,3.18,0]) cylinder(d=3.6,h=thick+(adj*2)); if(side == "left") {
translate([61.27,3.18,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([9.4,0,0]) rotate([0,0,90]) hd35_vtab("right");
translate([105.72,3.18,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([86,0,0]) rotate([0,0,90]) hd35_vtab("right");
translate([29.52,98.43,0]) cylinder(d=3.6,h=thick+(adj*2)); }
translate([61.27,98.43,0]) cylinder(d=3.6,h=thick+(adj*2)); else { // right
translate([105.72,98.43,0]) cylinder(d=3.6,h=thick+(adj*2)); translate([9.4,0,0]) rotate([0,0,90]) hd35_vtab("left");
} translate([86,0,0]) rotate([0,0,90]) hd35_vtab("left");
}
}
/*
NAME: hd25
DESCRIPTION: creates 2.5" hard drive model
TODO: none
USAGE: hd25(height)
height = drive height
*/
module hd25(height) {
hd25_x = 100;
hd25_y = 69.85;
hd25_z = height;
adj = .01;
$fn=90;
difference() {
color("LightGrey",.6) cube([hd25_x,hd25_y,hd25_z]);
// bottom screw holes
color("Black",.6) translate([9.4,4.07,-adj]) cylinder(d=3,h=3);
color("Black",.6) translate([86,4.07,-adj]) cylinder(d=3,h=3);
color("Black",.6) translate([86,65.79,-adj]) cylinder(d=3,h=4);
color("Black",.6) translate([9.4,65.79,-adj]) cylinder(d=3,h=4);
// side screw holes
color("Black",.6) translate([9.4,-adj,3]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([86,-adj,3]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([86,hd25_y+adj,3]) rotate([90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([9.4,hd25_y+adj,3]) rotate([90,0,0]) cylinder(d=3,h=3);
// connector opening
color("LightSlateGray",.6) translate([hd25_x-5,11,-1]) cube([5+adj,32,5+adj]);
}
}
/*
NAME: hd35
DESCRIPTION: creates 3.5" hard drive model
TODO: none
USAGE: hd35()
*/
module hd35() {
hd35_x = 147;
hd35_y = 101.6;
hd35_z = 26.1;
adj = .01;
$fn=90;
difference() {
color("LightGrey",.6) cube([hd35_x,hd35_y,hd35_z]);
// bottom screw holes
color("Black",.6) translate([29.52,3.18,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([61.27,3.18,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([105.72,3.18,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([29.52,98.43,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([61.27,98.43,-adj]) cylinder(d=3,h=3+adj);
color("Black",.6) translate([105.72,98.43,-adj]) cylinder(d=3,h=3+adj);
// side screw holes
color("Black",.6) translate([16.9,-adj,6.35]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([76.6,-adj,6.35]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([118.5,-adj,6.35]) rotate([-90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([118.5,hd35_y+adj,6.35]) rotate([90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([76.6,hd35_y+adj,6.35]) rotate([90,0,0]) cylinder(d=3,h=3);
color("Black",.6) translate([16.9,hd35_y+adj,6.35]) rotate([90,0,0]) cylinder(d=3,h=3);
// connector opening
color("LightSlateGray",.6) translate([hd35_x-5,11,-1]) cube([5+adj,32,5+adj]);
}
}
/*
NAME: hd25
DESCRIPTION: 3.5" hdd to 2.5" hdd holder
TODO: none
USAGE: hdd35_25holder(length, width=101.6)
length = length of holder min. 145mm for 3.5" drive
*/
module hdd35_25holder(length, width=101.6) {
wallthick = 3;
floorthick = 2;
hd35_x = length; // 145mm for 3.5" drive
hd35_y = width;
hd35_z = 12;
hd25_x = 100;
hd25_y = 69.85;
hd25_z = 9.5;
hd25_xloc = 2; // or (hd35_x-hd25_x)/2
hd25_yloc = (hd35_y-hd25_y)/2;
hd25_zloc = 9.5;
adj = .1;
$fn=90;
difference() {
union() {
difference() {
translate([(hd35_x/2),(hd35_y/2),(hd35_z/2)])
cube_fillet_inside([hd35_x,hd35_y,hd35_z],
vertical=[3,3,3,3], top=[0,0,0,0], bottom=[0,0,0,0], $fn=90);
translate([(hd35_x/2),(hd35_y/2),(hd35_z/2)+floorthick])
cube_fillet_inside([hd35_x-(wallthick*2),hd35_y-(wallthick*2),hd35_z],
vertical=[0,0,0,0], top=[0,0,0,0], bottom=[0,0,0,0], $fn=90);
// end trim
translate([-adj,5,wallthick+2]) cube([wallthick+(adj*2),hd35_y-10,10]);
translate([hd35_x-wallthick-adj,5,wallthick+2]) cube([wallthick+(adj*2),hd35_y-10,10]);
// bottom vents
for ( r=[15:40:hd35_x-40]) {
for (c=[hd35_y-76:4:75]) {
translate ([r,c,-adj]) cube([35,2,wallthick+(adj*2)]);
}
} }
} }
// 2.5 hdd bottom support else {
translate([9.4+hd25_xloc,4.07+hd25_yloc,floorthick-adj]) cylinder(d=8,h=4); translate([16.9,-.5,0]) rotate([0,0,90]) hd35_tab("left");
translate([86+hd25_xloc,4.07+hd25_yloc,floorthick-adj]) cylinder(d=8,h=4); translate([76.6,-.5,0]) rotate([0,0,90]) hd35_tab("left");
translate([86+hd25_xloc,65.79+hd25_yloc,floorthick-adj]) cylinder(d=8,h=4); translate([118.5,-.5,0]) rotate([0,0,90]) hd35_tab("left");
translate([9.4+hd25_xloc,65.79+hd25_yloc,floorthick-adj]) cylinder(d=8,h=4); translate([16.9,101.6-.5,0]) rotate([0,0,90]) hd35_tab("right");
translate([76.6,101.6-.5,0]) rotate([0,0,90]) hd35_tab("right");
// side nut holder support translate([118.5,101.6-.5,0]) rotate([0,0,90]) hd35_tab("right");
translate([16,wallthick-adj,7]) rotate([-90,0,0]) cylinder(d=10,h=3);
translate([76,wallthick-adj,7]) rotate([-90,0,0]) cylinder(d=10,h=3);
if(length >= 120) {
translate([117.5,wallthick-adj,7]) rotate([-90,0,0]) cylinder(d=10,h=3);
translate([117.5,hd35_y-wallthick+adj,7]) rotate([90,0,0]) cylinder(d=10,h=3);
} }
translate([76,hd35_y-wallthick+adj,7]) rotate([90,0,0]) cylinder(d=10,h=3);
translate([16,hd35_y-wallthick+adj,7]) rotate([90,0,0]) cylinder(d=10,h=3);
// bottom-side support
translate([wallthick,wallthick,floorthick-2]) rotate([45,0,0]) cube([hd35_x-(wallthick*2),3,3]);
translate([wallthick,hd35_y-wallthick+adj,floorthick-2]) rotate([45,0,0]) cube([hd35_x-(wallthick*2),3,3]);
} }
// bottom screw holes
translate([9.4+hd25_xloc,4.07+hd25_yloc,-adj]) cylinder(d=3,h=(floorthick*3)+(adj*2));
translate([86+hd25_xloc,4.07+hd25_yloc,-adj]) cylinder(d=3,h=(floorthick*3)+(adj*2));
translate([86+hd25_xloc,65.79+hd25_yloc,-adj]) cylinder(d=3,h=(floorthick*3)+(adj*2));
translate([9.4+hd25_xloc,65.79+hd25_yloc,-adj]) cylinder(d=3,h=(floorthick*3)+(adj*2));
// countersink holes
translate([9.4+hd25_xloc,4.07+hd25_yloc,-adj]) cylinder(d1=6.5, d2=3, h=3);
translate([86+hd25_xloc,4.07+hd25_yloc,-adj]) cylinder(d1=6.5, d2=3, h=3);
translate([86+hd25_xloc,65.79+hd25_yloc,-adj]) cylinder(d1=6.5, d2=3, h=3);
translate([9.4+hd25_xloc,65.79+hd25_yloc,-adj]) cylinder(d1=6.5, d2=3, h=3);
// side screw holes
translate([16,-adj,7]) rotate([-90,0,0]) cylinder(d=3.6,h=7);
translate([76,-adj,7]) rotate([-90,0,0]) cylinder(d=3.6,h=7);
translate([117.5,-adj,7]) rotate([-90,0,0]) cylinder(d=3.6,h=7);
translate([117.5,hd35_y+adj,7]) rotate([90,0,0]) cylinder(d=3.6,h=7);
translate([76,hd35_y+adj,7]) rotate([90,0,0]) cylinder(d=3.6,h=7);
translate([16,hd35_y+adj,7]) rotate([90,0,0]) cylinder(d=3.6,h=7);
// side nut trap
translate([16,wallthick-adj,7]) rotate([-90,0,0]) cylinder(r=3.30,h=5,$fn=6);
translate([76,wallthick-adj,7]) rotate([-90,0,0]) cylinder(r=3.30,h=5,$fn=6);
translate([117.5,wallthick-adj,7]) rotate([-90,0,0]) cylinder(r=3.30,h=5,$fn=6);
translate([117.5,hd35_y-wallthick-adj,7]) rotate([90,0,0]) cylinder(r=3.30,h=5,$fn=6);
translate([76,hd35_y-wallthick-adj,7]) rotate([90,0,0]) cylinder(r=3.30,h=5,$fn=6);
translate([16,hd35_y-wallthick-adj,7]) rotate([90,0,0]) cylinder(r=3.30,h=5,$fn=6);
} }
} }

View File

@@ -15,12 +15,143 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
pcb_holder(size, wallthick)
nut_holder(nut, style, dia_x, dia_y, height) nut_holder(nut, style, dia_x, dia_y, height)
pcb_holder(size, wallthick)
vu_holder(vu_model, side, vesa, cheight) vu_holder(vu_model, side, vesa, cheight)
*/ */
/*
NAME: nut_holder
DESCRIPTION: creates various nut holders
TODO: none
USAGE: nut_holder(nut, style, dia_x, dia_y, height, mask)
nut = "m2", "m2.5", "m3", "m4"
style = "default", "sloped", "trap"
dia_x = top diameter or x size in mm
dia_y = bottom diameter or y size in mm
height = holder height in mm
mask[0] = true enables component mask
mask[1] = mask length
mask[2] = mask setback
mask[3] = mstyle "default"
*/
module nut_holder(nut, style, dia_x, dia_y, height, mask) {
nuts = [[2,4,1.6], // m2 size, diameter, height
[2.5,5,2], // m2.5 size, diameter, height
[3,5.5,2.4], // m3 size, diameter, height
[4,7,3.2]]; // m4 size, diameter, height
enablemask = mask[0];
mlength = mask[1];
msetback = mask[2];
mstyle = mask[3];
adj = .01;
$fn = 90;
if(enablemask == true && mstyle == "default") {
if(nut == "m2") {
translate([0, 0, -mlength+msetback]) cylinder(d = nuts[0][0], h = mlength);
}
if(nut == "m2.5") {
translate([0, 0, -mlength+msetback]) cylinder(d = nuts[1][0], h = mlength);
}
if(nut == "m3") {
translate([0, 0, -mlength+msetback]) cylinder(d = nuts[2][0], h = mlength);
}
if(nut == "m4") {
translate([0, 0, -mlength+msetback]) cylinder(d = nuts[3][0], h = mlength);
}
}
if(enablemask == false) {
if( style == "default") {
difference() {
cylinder(d=dia_x, h=height);
if(nut == "m2") {
translate([0, 0, -1]) cylinder(d=nuts[0][0]+.25, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[0][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m2.5") {
translate([0, 0, -1]) cylinder(d=nuts[1][0]+.25, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[1][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m3") {
translate([0, 0, -1]) cylinder(d=nuts[2][0]+.5, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[2][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m4") {
translate([0, 0, -1]) cylinder(d=nuts[3][0]+.5, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[3][1]*2/sqrt(3), h=height, $fn=6);
}
}
}
if( style == "sloped") {
difference() {
cylinder(d2=dia_x, d1=dia_y, h=height);
if(nut == "m2") {
translate([0, 0, -1]) cylinder(d=nuts[0][0]+.25, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[0][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m2.5") {
translate([0, 0, -1]) cylinder(d=nuts[1][0]+.25, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[1][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m3") {
translate([0, 0, -1]) cylinder(d=nuts[2][0]+.5, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[2][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m4") {
translate([0, 0, -1]) cylinder(d=nuts[3][0]+.5, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[3][1]*2/sqrt(3), h=height, $fn=6);
}
}
}
if( style == "trap") {
if(nut == "m2") {
difference() {
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
translate([0, 0, -1]) cylinder(d=nuts[0][0]+.25, h=height+2);
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[0][1]*2/sqrt(3), h=nuts[0][2], $fn=6);
translate([-nuts[0][1]/2, 0, 2]) cube([nuts[0][1], dia_x, nuts[0][2]]);
}
}
if(nut == "m2.5") {
difference() {
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
translate([0, 0, -1]) cylinder(d=nuts[1][0]+.325, h=height+2);
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[1][1]*2/sqrt(3), h=nuts[1][2], $fn=6);
translate([-nuts[1][1]/2, 0, 2]) cube([nuts[1][1], dia_x, nuts[1][2]]);
}
}
if(nut == "m3") {
difference() {
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
translate([0, 0, -1]) cylinder(d=nuts[2][0]+.5, h=height+2);
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[2][1]*2/sqrt(3), h=nuts[2][2], $fn=6);
translate([-nuts[2][1]/2, 0, 2]) cube([nuts[2][1], dia_x, nuts[2][2]]);
}
}
if(nut == "m4") {
difference() {
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
translate([0, 0, -1]) cylinder(d=nuts[3][0]+.5, h=height+2);
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[3][1]*2/sqrt(3), h=nuts[3][2], $fn=6);
translate([-nuts[3][1]/2, 0, 2]) cube([nuts[3][1], dia_x, nuts[3][2]]);
}
}
}
}
}
/* /*
NAME: pcb_holder NAME: pcb_holder
DESCRIPTION: pcb bottom edge holder DESCRIPTION: pcb bottom edge holder
@@ -60,108 +191,6 @@ module pcb_holder(size, wallthick) {
} }
/*
NAME: nut_holder
DESCRIPTION: creates various nut holders
TODO: none
USAGE: nut_holder(nut, style, dia_x, dia_y, height)
nut = "m2", "m2.5", "m3", "m4"
style = "default", "sloped", "trap"
dia_x = top diameter or x size in mm
dia_y = bottom diameter or y size in mm
height = holder height in mm
*/
module nut_holder(nut, style, dia_x, dia_y, height) {
nuts = [[2,4,1.6], // m2 size, diameter, height
[2.5,5,2], // m2.5 size, diameter, height
[3,5.5,2.4], // m3 size, diameter, height
[4,7,3.2]]; // m4 size, diameter, height
$fn = 180;
if( style == "default") {
difference() {
cylinder(d=dia_x, h=height);
if(nut == "m2") {
translate([0, 0, -1]) cylinder(d=nuts[0][0]+.25, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[0][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m2.5") {
translate([0, 0, -1]) cylinder(d=nuts[1][0]+.25, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[1][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m3") {
translate([0, 0, -1]) cylinder(d=nuts[2][0]+.5, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[2][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m4") {
translate([0, 0, -1]) cylinder(d=nuts[3][0]+.5, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[3][1]*2/sqrt(3), h=height, $fn=6);
}
}
}
if( style == "sloped") {
difference() {
cylinder(d2=dia_x, d1=dia_y, h=height);
if(nut == "m2") {
translate([0, 0, -1]) cylinder(d=nuts[0][0]+.25, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[0][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m2.5") {
translate([0, 0, -1]) cylinder(d=nuts[1][0]+.25, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[1][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m3") {
translate([0, 0, -1]) cylinder(d=nuts[2][0]+.5, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[2][1]*2/sqrt(3), h=height, $fn=6);
}
if(nut == "m4") {
translate([0, 0, -1]) cylinder(d=nuts[3][0]+.5, h=height+2);
translate([0, 0, 2]) cylinder(d=nuts[3][1]*2/sqrt(3), h=height, $fn=6);
}
}
}
if( style == "trap") {
if(nut == "m2") {
difference() {
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
translate([0, 0, -1]) cylinder(d=nuts[0][0]+.25, h=height+2);
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[0][1]*2/sqrt(3), h=nuts[0][2], $fn=6);
translate([-nuts[0][1]/2, 0, 2]) cube([nuts[0][1], dia_x, nuts[0][2]]);
}
}
if(nut == "m2.5") {
difference() {
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
translate([0, 0, -1]) cylinder(d=nuts[1][0]+.325, h=height+2);
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[1][1]*2/sqrt(3), h=nuts[1][2], $fn=6);
translate([-nuts[1][1]/2, 0, 2]) cube([nuts[1][1], dia_x, nuts[1][2]]);
}
}
if(nut == "m3") {
difference() {
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
translate([0, 0, -1]) cylinder(d=nuts[2][0]+.5, h=height+2);
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[2][1]*2/sqrt(3), h=nuts[2][2], $fn=6);
translate([-nuts[2][1]/2, 0, 2]) cube([nuts[2][1], dia_x, nuts[2][2]]);
}
}
if(nut == "m4") {
difference() {
translate([-dia_x/2, -dia_y/2, 0]) cube([dia_x, dia_y, height]);
translate([0, 0, -1]) cylinder(d=nuts[3][0]+.5, h=height+2);
translate([0, 0, 2]) rotate([0,0,30]) cylinder(d=nuts[3][1]*2/sqrt(3), h=nuts[3][2], $fn=6);
translate([-nuts[3][1]/2, 0, 2]) cube([nuts[3][1], dia_x, nuts[3][2]]);
}
}
}
}
/* /*
NAME: vu_holder NAME: vu_holder
DESCRIPTION: hk vu5,vu5a,vu7,vu7a display holder DESCRIPTION: hk vu5,vu5a,vu7,vu7a display holder

View File

@@ -15,7 +15,10 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
*/
/*
NAME: keyhole NAME: keyhole
DESCRIPTION: enclosed keyhole DESCRIPTION: enclosed keyhole
TODO: none TODO: none
@@ -39,9 +42,8 @@ module keyhole(keysize, mask) {
mstyle = mask[3]; mstyle = mask[3];
adj=.01; adj=.01;
$fn = 90; $fn = 90;
echo(keysize, mask);
if(enablemask == true && mstyle == "default") { if(enablemask == true && mstyle == "default") {
echo("THIS IS IT");
union() { union() {
translate([0, 0, -adj]) cylinder(h=keysize[3]+2*adj, d=keysize[0]); translate([0, 0, -adj]) cylinder(h=keysize[3]+2*adj, d=keysize[0]);
translate([-keysize[1]/2, 0, -adj]) cube([keysize[1], keysize[2]+keysize[0]/2, keysize[3]+2*adj]); translate([-keysize[1]/2, 0, -adj]) cube([keysize[1], keysize[2]+keysize[0]/2, keysize[3]+2*adj]);
@@ -49,7 +51,6 @@ echo("THIS IS IT");
} }
} }
else { else {
echo("THIS IS NOT IT");
difference() { difference() {
union() { union() {
translate([0, 0, -adj]) translate([0, 0, -adj])

View File

@@ -15,17 +15,22 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
adafruit_lcd(mask)
*/
/*
NAME: adafruit_lcd NAME: adafruit_lcd
DESCRIPTION: adafruit 4311 2in TFT IPS Display model DESCRIPTION: adafruit 4311 2in TFT IPS Display model
TODO: none TODO: none
USAGE: adafruit_lcd(mask[]) USAGE: adafruit_lcd(mask[])
mask[0] = true enables mask mask[0] = true enables mask
mask[1] = mask length mask[1] = mask length
mask[2] = mask setback mask[2] = mask setback
mask[3] = mstyle "default" mask[3] = mstyle "default"
*/ */
@@ -79,6 +84,3 @@ module adafruit_lcd(mask) {
[hole_size, "#fee5a6", hole_size+1], size_z, enablemask, [false, 20, 0, "default"]); [hole_size, "#fee5a6", hole_size+1], size_z, enablemask, [false, 20, 0, "default"]);
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -15,6 +15,10 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
*/
/*
NAME: standoff NAME: standoff
DESCRIPTION: create standoffs DESCRIPTION: create standoffs
TODO: none TODO: none

View File

@@ -15,12 +15,11 @@
along with this program. If not, see <http://www.gnu.org/licenses/> along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
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); vent_panel_hex(x, y, thick, cell_size, cell_spacing, border, borders);
*/ */
/* /*
NAME: vent_panel_hex NAME: vent_panel_hex
DESCRIPTION: creates hex vent panel DESCRIPTION: creates hex vent panel
@@ -62,5 +61,3 @@ module vent_panel_hex(x, y, thick, cell_size=8, cell_spacing=3, border=3, border
} }
} }
} }

View File

@@ -149,10 +149,10 @@ module add(type, loc_x, loc_y, loc_z, face, rotation, size, data, mask) {
translate([loc_x,loc_y,loc_z]) rotate(rotation) fans(data[0],mask); translate([loc_x,loc_y,loc_z]) rotate(rotation) fans(data[0],mask);
} }
if(type == "hd25") { if(type == "hd25") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd25(data[0]); translate([loc_x,loc_y,loc_z]) rotate(rotation) hd25(data[0],data[1],mask);
} }
if(type == "hd35") { if(type == "hd35") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hd35(); translate([loc_x,loc_y,loc_z]) rotate(rotation) hd35(data[0],mask);
} }
if(type == "hk_boom") { if(type == "hk_boom") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom(data[0],data[1],mask); translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_boom(data[0],data[1],mask);

View File

@@ -309,19 +309,19 @@ module case_top(case_design) {
if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_rear" && top_rear_left_enable == true && if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_rear" && top_rear_left_enable == true &&
top_standoff[5] != "blind") { top_standoff[5] != "blind") {
translate([pcbhole_x,pcbhole_y,top_height+1]) cylinder(d=6.5, h=top_height); translate([pcbhole_x,pcbhole_y,top_height+5]) cylinder(d=6.5, h=top_height);
} }
if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_front" && top_front_left_enable == true && if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "left_front" && top_front_left_enable == true &&
top_standoff[5] != "blind") { top_standoff[5] != "blind") {
translate([pcbhole_x,pcbhole_y,top_height+1]) cylinder(d=6.5, h=top_height); translate([pcbhole_x,pcbhole_y,top_height+5]) cylinder(d=6.5, h=top_height);
} }
if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_rear" && top_rear_right_enable == true && if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_rear" && top_rear_right_enable == true &&
top_standoff[5] != "blind") { top_standoff[5] != "blind") {
translate([pcbhole_x,pcbhole_y,top_height+1]) cylinder(d=6.5, h=top_height); translate([pcbhole_x,pcbhole_y,top_height+5]) cylinder(d=6.5, h=top_height);
} }
if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_front" && top_front_right_enable == true && if (class == "pcbhole" && id == pcb_id && pcbhole_pos == "right_front" && top_front_right_enable == true &&
top_standoff[5] != "blind") { top_standoff[5] != "blind") {
translate([pcbhole_x,pcbhole_y,top_height+1]) cylinder(d=6.5, h=top_height); translate([pcbhole_x,pcbhole_y,top_height+5]) cylinder(d=6.5, h=top_height);
} }
} }
} }
@@ -331,7 +331,7 @@ module case_top(case_design) {
if((width-pcb_loc_x-pcb_width-(gap+2*wallthick) >= 10 || pcb_loc_y >= 10) && if((width-pcb_loc_x-pcb_width-(gap+2*wallthick) >= 10 || pcb_loc_y >= 10) &&
ext_top_rear_right_enable == true && ext_top_standoff[5] != "blind") { ext_top_rear_right_enable == true && ext_top_standoff[5] != "blind") {
translate([width-ext_top_standoff_support_size/4-(2*(wallthick+gap))-(corner_fillet/2), translate([width-ext_top_standoff_support_size/4-(2*(wallthick+gap))-(corner_fillet/2),
(corner_fillet/2)+ext_top_standoff_support_size/4,top_height+1]) cylinder(d=6.5, h=top_height); (corner_fillet/2)+ext_top_standoff_support_size/4,top_height+5]) cylinder(d=6.5, h=top_height);
} }
// right-front standoff // right-front standoff
if(((width-pcb_loc_x-pcb_width-(gap+2*wallthick) >= 10 && depth-pcb_loc_y-pcb_depth >= 10) || if(((width-pcb_loc_x-pcb_width-(gap+2*wallthick) >= 10 && depth-pcb_loc_y-pcb_depth >= 10) ||
@@ -339,13 +339,13 @@ module case_top(case_design) {
(width-pcb_loc_x-pcb_width-(gap+2*wallthick) <= 10 && depth-pcb_loc_y-pcb_depth >= 10)) && (width-pcb_loc_x-pcb_width-(gap+2*wallthick) <= 10 && depth-pcb_loc_y-pcb_depth >= 10)) &&
ext_top_front_right_enable == true && ext_top_standoff[5] != "blind") { ext_top_front_right_enable == true && ext_top_standoff[5] != "blind") {
translate([width-ext_top_standoff_support_size/4-(corner_fillet/2)-(2*(wallthick+gap)), translate([width-ext_top_standoff_support_size/4-(corner_fillet/2)-(2*(wallthick+gap)),
depth-ext_top_standoff_support_size/4-(corner_fillet/2)-(2*(wallthick+gap)),top_height+1]) depth-ext_top_standoff_support_size/4-(corner_fillet/2)-(2*(wallthick+gap)),top_height+5])
cylinder(d=6.5, h=top_height); cylinder(d=6.5, h=top_height);
} }
// left-rear standoff // left-rear standoff
if((pcb_loc_x >= 10 || pcb_loc_y >= 10) && ext_top_rear_left_enable == true && ext_top_standoff[5] != "blind") { if((pcb_loc_x >= 10 || pcb_loc_y >= 10) && ext_top_rear_left_enable == true && ext_top_standoff[5] != "blind") {
translate([(corner_fillet/2)+ext_top_standoff_support_size/4, translate([(corner_fillet/2)+ext_top_standoff_support_size/4,
(corner_fillet/2)+ext_top_standoff_support_size/4,top_height+1]) cylinder(d=6.5, h=top_height); (corner_fillet/2)+ext_top_standoff_support_size/4,top_height+5]) cylinder(d=6.5, h=top_height);
} }
// left-front standoff // left-front standoff
if(((pcb_loc_x >= 10 && (depth-(pcb_loc_y+pcb_depth)) >= 10) || if(((pcb_loc_x >= 10 && (depth-(pcb_loc_y+pcb_depth)) >= 10) ||
@@ -353,8 +353,8 @@ module case_top(case_design) {
(pcb_loc_x >= 10 && (depth-(pcb_loc_y+pcb_depth)) <= 10)) && (pcb_loc_x >= 10 && (depth-(pcb_loc_y+pcb_depth)) <= 10)) &&
ext_top_front_left_enable == true && ext_top_standoff[5] != "blind") { ext_top_front_left_enable == true && ext_top_standoff[5] != "blind") {
translate([+(corner_fillet/2)+ext_top_standoff_support_size/4, translate([+(corner_fillet/2)+ext_top_standoff_support_size/4,
depth-ext_top_standoff_support_size/4-(corner_fillet/2)-(2*(wallthick+gap)),top_height+1]) depth-ext_top_standoff_support_size/4-(corner_fillet/2)-(2*(wallthick+gap)),top_height+5])
cylinder(d=6.5, h=top_height+1); cylinder(d=6.5, h=top_height);
} }
} }
// top cover pattern // top cover pattern

View File

@@ -55,7 +55,7 @@ module sub(type, loc_x, loc_y, loc_z, face, rotation, size, data, mask) {
translate([loc_x,loc_y,loc_z]) rotate(rotation) fan_mask(size_x, size_z, data[0]); translate([loc_x,loc_y,loc_z]) rotate(rotation) fan_mask(size_x, size_z, data[0]);
} }
if(type == "hd_holes") { 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]); translate([loc_x,loc_y,loc_z]) rotate(rotation) hd_bottom_holes(data[0],data[1],data[2],data[3]);
} }
if(type == "knockout") { 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]); translate([loc_x,loc_y,loc_z]) rotate(rotation) knockout(size_x,size_y,data[0],size_z,data[1],data[2]);

View File

@@ -1706,156 +1706,6 @@
"view": "model", "view": "model",
"wallthick": "2" "wallthick": "2"
}, },
"hc4_shell_drivebox2.5": {
"$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": "hc4_shell_drivebox2.5",
"adj": "0.01",
"bend_allowance": "1",
"bottom_access_panel_enable": "false",
"bottom_clearence": "3.5",
"bottom_cover_pattern": "solid",
"bottom_front_left_adjust": "0",
"bottom_front_left_enable": "true",
"bottom_front_left_support": "left",
"bottom_front_right_adjust": "0",
"bottom_front_right_enable": "true",
"bottom_front_right_support": "none",
"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": "true",
"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": "15",
"bottom_standoff_support_size": "10",
"bottom_standoff_type": "countersunk",
"case_design": "shell",
"case_offset_bz": "12",
"case_offset_tz": "10",
"case_offset_x": "86",
"case_offset_y": "54",
"cooling": "fan_1",
"corner_fillet": "3",
"edge_fillet": "0",
"exhaust_vent": "none",
"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": "15",
"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": "5.75",
"ext_top_standoff_hole_size": "2.75",
"ext_top_standoff_insert": "true",
"ext_top_standoff_insert_dia": "4",
"ext_top_standoff_insert_height": "5.1",
"ext_top_standoff_pillar": "hex",
"ext_top_standoff_reverse": "true",
"ext_top_standoff_support_height": "15",
"ext_top_standoff_support_size": "10",
"ext_top_standoff_type": "blind",
"ext_top_standoffs": "true",
"fan_size": "0",
"flat_blank_section": "false",
"floorthick": "2",
"gap": "1.5",
"gpio_opening": "default",
"indents": "false",
"individual_part": "bottom",
"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": "0",
"raise_top": "0",
"rear_io_plate": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_information": "false",
"sbc_model": "hc4",
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
"top_cover_pattern": "solid",
"top_front_left_adjust": "0",
"top_front_left_enable": "true",
"top_front_left_support": "left",
"top_front_right_adjust": "0",
"top_front_right_enable": "true",
"top_front_right_support": "none",
"top_rear_left_adjust": "0",
"top_rear_left_enable": "true",
"top_rear_left_support": "rear",
"top_rear_right_adjust": "0",
"top_rear_right_enable": "true",
"top_rear_right_support": "rear",
"top_sidewall_support": "true",
"top_standoff_diameter": "5.75",
"top_standoff_hole_size": "2.75",
"top_standoff_insert": "true",
"top_standoff_insert_dia": "4",
"top_standoff_insert_height": "5.1",
"top_standoff_pillar": "hex",
"top_standoff_reverse": "true",
"top_standoff_support_height": "15",
"top_standoff_support_size": "10",
"top_standoff_type": "blind",
"uart_opening": "default",
"view": "model",
"wallthick": "2.5"
},
"hc4_shell_drivebox2.5v": { "hc4_shell_drivebox2.5v": {
"$fn": "90", "$fn": "90",
"access_panel_location": "[10, 15]", "access_panel_location": "[10, 15]",
@@ -2156,156 +2006,6 @@
"view": "model", "view": "model",
"wallthick": "3" "wallthick": "3"
}, },
"hc4_tray_drivebox2.5": {
"$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": "hc4_tray_drivebox2.5",
"adj": "0.01",
"bend_allowance": "1",
"bottom_access_panel_enable": "false",
"bottom_clearence": "3.5",
"bottom_cover_pattern": "solid",
"bottom_front_left_adjust": "0",
"bottom_front_left_enable": "true",
"bottom_front_left_support": "front",
"bottom_front_right_adjust": "0",
"bottom_front_right_enable": "true",
"bottom_front_right_support": "front",
"bottom_rear_left_adjust": "0",
"bottom_rear_left_enable": "true",
"bottom_rear_left_support": "rear",
"bottom_rear_right_adjust": "0",
"bottom_rear_right_enable": "true",
"bottom_rear_right_support": "rear",
"bottom_sidewall_support": "true",
"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": "20",
"bottom_standoff_support_size": "10",
"bottom_standoff_type": "recessed",
"case_design": "tray",
"case_offset_bz": "12",
"case_offset_tz": "10",
"case_offset_x": "88",
"case_offset_y": "55",
"cooling": "fan_1",
"corner_fillet": "3",
"edge_fillet": "2",
"exhaust_vent": "none",
"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": "false",
"ext_top_front_left_adjust": "0",
"ext_top_front_left_enable": "true",
"ext_top_front_left_support": "front",
"ext_top_front_right_adjust": "0",
"ext_top_front_right_enable": "true",
"ext_top_front_right_support": "front",
"ext_top_rear_left_adjust": "0",
"ext_top_rear_left_enable": "true",
"ext_top_rear_left_support": "rear",
"ext_top_rear_right_adjust": "0",
"ext_top_rear_right_enable": "true",
"ext_top_rear_right_support": "rear",
"ext_top_sidewall_support": "true",
"ext_top_standoff_diameter": "5.75",
"ext_top_standoff_hole_size": "2.75",
"ext_top_standoff_insert": "false",
"ext_top_standoff_insert_dia": "4.2",
"ext_top_standoff_insert_height": "5.1",
"ext_top_standoff_pillar": "hex",
"ext_top_standoff_reverse": "true",
"ext_top_standoff_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": "1.5",
"gpio_opening": "default",
"indents": "false",
"individual_part": "bottom",
"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": "0",
"raise_top": "0",
"rear_io_plate": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_information": "false",
"sbc_model": "hc4",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
"top_cover_pattern": "solid",
"top_front_left_adjust": "0",
"top_front_left_enable": "true",
"top_front_left_support": "front",
"top_front_right_adjust": "0",
"top_front_right_enable": "true",
"top_front_right_support": "front",
"top_rear_left_adjust": "0",
"top_rear_left_enable": "true",
"top_rear_left_support": "rear",
"top_rear_right_adjust": "0",
"top_rear_right_enable": "true",
"top_rear_right_support": "rear",
"top_sidewall_support": "true",
"top_standoff_diameter": "5.75",
"top_standoff_hole_size": "2.75",
"top_standoff_insert": "false",
"top_standoff_insert_dia": "4.2",
"top_standoff_insert_height": "5.1",
"top_standoff_pillar": "hex",
"top_standoff_reverse": "true",
"top_standoff_support_height": "4",
"top_standoff_support_size": "10",
"top_standoff_type": "blind",
"uart_opening": "default",
"view": "model",
"wallthick": "2"
},
"m1s_shell_nvme": { "m1s_shell_nvme": {
"$fn": "90", "$fn": "90",
"access_panel_location": "[0, 28]", "access_panel_location": "[0, 28]",
@@ -8902,6 +8602,304 @@
"uart_opening": "default", "uart_opening": "default",
"view": "model", "view": "model",
"wallthick": "2" "wallthick": "2"
},
"hc4_tray_drivebox2.5": {
"$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": "hc4_tray_drivebox2.5",
"adj": "0.01",
"bend_allowance": "1",
"bottom_access_panel_enable": "false",
"bottom_clearence": "3.5",
"bottom_cover_pattern": "solid",
"bottom_front_left_adjust": "0",
"bottom_front_left_enable": "true",
"bottom_front_left_support": "front",
"bottom_front_right_adjust": "0",
"bottom_front_right_enable": "true",
"bottom_front_right_support": "front",
"bottom_rear_left_adjust": "0",
"bottom_rear_left_enable": "true",
"bottom_rear_left_support": "rear",
"bottom_rear_right_adjust": "0",
"bottom_rear_right_enable": "true",
"bottom_rear_right_support": "rear",
"bottom_sidewall_support": "true",
"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": "recessed",
"case_design": "tray",
"case_offset_bz": "12",
"case_offset_tz": "10",
"case_offset_x": "88",
"case_offset_y": "55",
"cooling": "fan_1",
"corner_fillet": "3",
"edge_fillet": "2",
"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": "false",
"ext_top_front_left_adjust": "0",
"ext_top_front_left_enable": "true",
"ext_top_front_left_support": "front",
"ext_top_front_right_adjust": "0",
"ext_top_front_right_enable": "true",
"ext_top_front_right_support": "front",
"ext_top_rear_left_adjust": "0",
"ext_top_rear_left_enable": "true",
"ext_top_rear_left_support": "rear",
"ext_top_rear_right_adjust": "0",
"ext_top_rear_right_enable": "true",
"ext_top_rear_right_support": "rear",
"ext_top_sidewall_support": "true",
"ext_top_standoff_diameter": "5.75",
"ext_top_standoff_hole_size": "2.75",
"ext_top_standoff_insert": "false",
"ext_top_standoff_insert_dia": "4.2",
"ext_top_standoff_insert_height": "5.1",
"ext_top_standoff_pillar": "hex",
"ext_top_standoff_reverse": "true",
"ext_top_standoff_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": "1",
"gpio_opening": "default",
"indents": "false",
"individual_part": "bottom",
"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": "0",
"raise_top": "0",
"rear_io_plate": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_information": "false",
"sbc_model": "hc4",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
"top_cover_pattern": "solid",
"top_front_left_adjust": "0",
"top_front_left_enable": "true",
"top_front_left_support": "front",
"top_front_right_adjust": "0",
"top_front_right_enable": "true",
"top_front_right_support": "front",
"top_rear_left_adjust": "0",
"top_rear_left_enable": "true",
"top_rear_left_support": "rear",
"top_rear_right_adjust": "0",
"top_rear_right_enable": "true",
"top_rear_right_support": "rear",
"top_sidewall_support": "true",
"top_standoff_diameter": "5.75",
"top_standoff_hole_size": "2.75",
"top_standoff_insert": "false",
"top_standoff_insert_dia": "4.2",
"top_standoff_insert_height": "5.1",
"top_standoff_pillar": "hex",
"top_standoff_reverse": "true",
"top_standoff_support_height": "4",
"top_standoff_support_size": "10",
"top_standoff_type": "blind",
"uart_opening": "default",
"view": "model",
"wallthick": "2"
},
"hc4_shell_drivebox2.5": {
"$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": "hc4_shell_drivebox2.5",
"adj": "0.01",
"bend_allowance": "1",
"bottom_access_panel_enable": "false",
"bottom_clearence": "3.5",
"bottom_cover_pattern": "solid",
"bottom_front_left_adjust": "0",
"bottom_front_left_enable": "true",
"bottom_front_left_support": "left",
"bottom_front_right_adjust": "0",
"bottom_front_right_enable": "true",
"bottom_front_right_support": "none",
"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": "true",
"bottom_standoff_diameter": "5.75",
"bottom_standoff_hole_size": "3.4",
"bottom_standoff_insert": "true",
"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": "12",
"case_offset_tz": "10",
"case_offset_x": "86",
"case_offset_y": "54",
"cooling": "fan_1",
"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": "true",
"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": "blind",
"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",
"ext_top_standoff_hole_size": "3.4",
"ext_top_standoff_insert": "true",
"ext_top_standoff_insert_dia": "4",
"ext_top_standoff_insert_height": "5.1",
"ext_top_standoff_pillar": "hex",
"ext_top_standoff_reverse": "true",
"ext_top_standoff_support_height": "17",
"ext_top_standoff_support_size": "10",
"ext_top_standoff_type": "recessed",
"ext_top_standoffs": "true",
"fan_size": "0",
"flat_blank_section": "false",
"floorthick": "2",
"gap": "1.5",
"gpio_opening": "default",
"indents": "false",
"individual_part": "bottom",
"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": "0",
"raise_top": "0",
"rear_io_plate": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_information": "false",
"sbc_model": "hc4",
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"standard_motherboard_thickness": "0",
"text_color": "Green",
"text_font": "Nimbus Mono PS",
"tol": "0.25",
"top_cover_pattern": "solid",
"top_front_left_adjust": "0",
"top_front_left_enable": "false",
"top_front_left_support": "left",
"top_front_right_adjust": "0",
"top_front_right_enable": "false",
"top_front_right_support": "none",
"top_rear_left_adjust": "0",
"top_rear_left_enable": "true",
"top_rear_left_support": "rear",
"top_rear_right_adjust": "0",
"top_rear_right_enable": "false",
"top_rear_right_support": "rear",
"top_sidewall_support": "true",
"top_standoff_diameter": "5.75",
"top_standoff_hole_size": "2.75",
"top_standoff_insert": "true",
"top_standoff_insert_dia": "4",
"top_standoff_insert_height": "5.1",
"top_standoff_pillar": "hex",
"top_standoff_reverse": "true",
"top_standoff_support_height": "17",
"top_standoff_support_size": "10",
"top_standoff_type": "recessed",
"uart_opening": "default",
"view": "model",
"wallthick": "2.5"
} }
}, },
"fileFormatVersion": "1" "fileFormatVersion": "1"

View File

@@ -201,29 +201,19 @@ accessory_data = [
// Odroid-HC4 // Odroid-HC4
["hc4_tray_drivebox2.5", ["hc4_tray_drivebox2.5",
"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","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"], "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,"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_mask",37,-.1,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_open"],[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"], "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","hk_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,82,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,-24,2,"bottom",[0,0,0],["case",true,true,false],[0,0,0],["portrait",15],[true,17,2,"both"],
"model","hd25",10,76,20,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"], "model","hd25",10,-24,20,"bottom",[0,0,0],["case",true,true,false],[0,0,0],["portrait",15],[true,17,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"], "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"]], "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", ["hc4_shell_drivebox2.5",
"add2","hk_hc4_oled_holder",20,82,1.99,"bottom",[0,0,0],["case",false,true,false],[0,0,2],[0],[true,10,2,"default"], "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"], "add2","hd_holder",12,-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,"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"], "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_mask",39,-.1,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_open"],[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",-3.5,35,34,"top",[0,0,90],["case",false,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
@@ -231,16 +221,16 @@ accessory_data = [
"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",-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"], "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","hk_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",12,-21,2,"bottom",[0,0,0],["case",true,true,false],[0,0,0],["portrait",15],[true,20,2,"both"],
"model","hd25",10,79,20,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],[15],[false,10,2,"default"], "model","hd25",12,-21,20,"bottom",[0,0,0],["case",true,true,false],[0,0,0],["portrait",15],[true,20,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"], "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"]], "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", ["hc4_shell_drivebox2.5v",
"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",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"], "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",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","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,-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","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","vent",71.85,88,30,"top",[0,0,0],["case",false,true,false],[2,13,4],[1,4,"vertical",1],[false,10,2,"default"],
@@ -248,22 +238,22 @@ accessory_data = [
"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"], "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","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","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",45.6,79,71.85,"bottom",[-90,0,-90],["case",true,true,false],[0,0,0],["portrait",15],[true,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"], "model","hd25",79.3,79,2,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],["portrait",15],[true,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"]], "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", ["hc4_shell_drivebox3.5",
"add1","hk_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"], "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,"portrait","horizontal","none",3],[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,-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,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"], "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","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_mask",5.6,-1.5,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_open"],[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","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,3,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],["portrait"],[true,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","hd35",-19.4,80,35,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],["portrait"],[true,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"], "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"]], "platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[40,0,3],["fan_1"],[false,10,2,"default"]],
@@ -307,14 +297,14 @@ accessory_data = [
// "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"], // "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_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"], // "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"], // "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"], // "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"], "model","hd25",80,122,35.5,"top",[0,180,90],["sbc-case_z",true,true,true],[0,0,0],["portrait",7],[true,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",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"]], "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", ["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"], "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,"portrait","horizontal","none",3],[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,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,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,34,23,"bottom",[0,90,0],["case",true,true,false],[3,0,3],[0],[false,10,2,"default"],
@@ -324,14 +314,14 @@ accessory_data = [
"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",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",-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"], "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,2,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],["portrait",15],[true,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","hd25",10,120,20,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],["portrait",15],[true,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"], "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"]], "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", ["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"], "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,"portrait","horizontal","none",3],[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,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,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","round",91.6,103.1,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
@@ -341,13 +331,13 @@ accessory_data = [
"sub","vent",92,60,20,"bottom",[0,0,90],["case",true,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","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_mask",5.6,-1.5,7,"bottom",[90,0,0],["case",true,false,false],[40,0,3],["fan_open"],[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,2.49,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],["portrait"],[true,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","hd35",-19.4,120,34.5,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],["portrait"],[true,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"], "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"]], "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", ["m1_fitted_pizzabox",
"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","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,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,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","round",91.6,103.1,9.35,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
@@ -355,11 +345,11 @@ accessory_data = [
"sub","vent",92,60,9,"bottom",[0,0,90],["case",true,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","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_mask",-30,60,48,"top",[0,0,0],["case",true,false,false],[80,0,3],["fan_open"],[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"]], "model","hd35",-12,120,2.5,"bottom",[0,0,-90],["case",true,true,false],[0,0,0],["portrait"],[true,10,2,"default"]],
["m1_fitted_drivebox3.5v", ["m1_fitted_drivebox3.5v",
"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"], "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","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,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,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"], "sub","round",91.6,90.1,6,"bottom",[0,90,0],["case",true,true,false],[3,0,4],[0],[false,10,2,"default"],
@@ -369,7 +359,7 @@ accessory_data = [
"sub","vent",92,60,20,"bottom",[0,0,90],["case",true,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","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_mask",5.6,-1.5,35,"bottom",[90,0,0],["case",true,false,false],[60,0,3],["fan_open"],[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","hd35",80,120,2.5,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],["portrait"],[true,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"], "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"]], "platter","fan_cover",-50,50,0,"bottom",[0,0,0],["case",false,false,false],[60,0,3],["fan_hex"],[false,10,2,"default"]],
@@ -403,8 +393,8 @@ accessory_data = [
"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,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"], "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_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"], "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"], // "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"]], "model","hd25",98,110,2,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],["portrait",7],[true,10,2,"default"]],
["h3_shell_router", ["h3_shell_router",
"sub","vent",-3.5,30,40,"top",[0,0,90],["case",false,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"], "sub","vent",-3.5,30,40,"top",[0,0,90],["case",false,false,false],[2,10,4],[1,17,"vertical",1],[false,10,2,"default"],
@@ -434,8 +424,8 @@ accessory_data = [
"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","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"], "model","hk_netcard",0,0,19,"bottom",[0,0,0],["sbc",true,true,true],[0,0,0],["portrait"],[true,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"], "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"], // "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"], "model","hd25",101,110,2,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],["portrait",7],[true,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",-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"]], "platter","button_assembly",-30,0,0,"top",[0,0,0],["case",false,false,false],[10,0,42],["recess"],[false,10,2,"default"]],
@@ -505,8 +495,8 @@ accessory_data = [
"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,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"], "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_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"], "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"], // "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"]], "model","hd25",98,110,2,"bottom",[90,0,-90],["case",true,true,false],[0,0,0],["portrait",7],[true,10,2,"default"]],
["h3_ultimate2", ["h3_ultimate2",
"suball","fan_mask",0,25,3,"top",[0,270,0],["case",false,false,false],[60,0,6],["fan_open"],[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"],
@@ -569,10 +559,10 @@ accessory_data = [
"sub","round",111,100.6,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_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",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"], "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",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"], // "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",65,110,71.85,"bottom",[-90,0,-90],["case",true,true,false],[0,0,0],["portrait",15],[true,10,2,"default"],
"model","hd25",100,110,2,"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],["portrait",15],[true,10,2,"default"]],
["show2_shell", ["show2_shell",
"model","hk_wb2",6.25,24.675,16,"bottom",[0,0,180],["sbc",true,true,true],[0,0,0],[0],[false,10,2,"default"], "model","hk_wb2",6.25,24.675,16,"bottom",[0,0,180],["sbc",true,true,true],[0,0,0],[0],[false,10,2,"default"],