front, top and bottom cover vent adjustments

This commit is contained in:
Edward Kisiel
2025-04-18 16:29:32 -04:00
parent 5a56f3d4fc
commit db43558f9c
5 changed files with 98 additions and 93 deletions

View File

@@ -1,63 +0,0 @@
/*
This file is part of SBC Case Builder https://github.com/hominoids/SBC_Case_Builder
Copyright 2022,2023,2024 Edward A. Kisiel hominoid@cablemi.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
Code released under GPLv3: http://www.gnu.org/licenses/gpl.html
vent_panel_hex(x, y, thick, cell_size, cell_spacing, border, borders);
*/
/*
NAME: vent_panel_hex
DESCRIPTION: creates hex vent panel
TODO: none
USAGE: vent_panel_hex(x, y, thick, cell_size=8, cell_spacing=3, border=3, borders="default")
x = #rows
y = #columns
thick = pattern thickness
cell_size = size of hex
cell_spacing = space between hex
border = size of borber
borders = "none", "default"
*/
module vent_panel_hex(x, y, thick, cell_size=8, cell_spacing=3, border=3, borders="default") {
hole = 3.2;
xb = (borders == "y" || borders == "none") ? cell_spacing : border;
yb = (borders == "x" || borders == "none") ? cell_spacing : border;
hxb = max(yb/2, cell_spacing + hole);
hyb = max(xb/2, cell_spacing + hole);
cells_x = floor((2*(x-2*xb-cell_size)/(cell_size+cell_spacing))+1);
cells_y = floor(((sqrt(12)*(y-2*yb)-4*cell_size)/(3*(cell_size+cell_spacing)))+1);
csx = cell_size + (cells_x-1)*(cell_size+cell_spacing)/2;
csy = sqrt(4/3)*cell_size + ((cell_size+cell_spacing)*sqrt(3/4)*(cells_y-1));
difference() {
color("grey",1) slab([x,y,thick],2);
color("grey",1) translate([(x-csx)/2,(y-csy)/2,-1])
vent_hex(cells_x, cells_y, thick+3, cell_size, cell_spacing, "horizontal");
if (borders != "none") {
color("grey",1) translate([ hxb, hyb, -1]) cylinder(d=hole, h=thick+3);
color("grey",1) translate([x - hxb, hyb, -1]) cylinder(d=hole, h=thick+3);
color("grey",1) translate([ hxb, y - hyb, -1]) cylinder(d=hole, h=thick+3);
color("grey",1) translate([x - hxb, y - hyb, -1]) cylinder(d=hole, h=thick+3);
}
}
}

View File

@@ -512,23 +512,56 @@ echo(pcb_depth+case_offset_y-10);
// bottom cover pattern
if(bottom_cover_pattern != "solid") {
if(bottom_cover_pattern == "hex_5mm") {
translate([1,0,-floorthick]) vent_hex(width/3.75,depth/6,floorthick+4,5,1.5,"horizontal");
if(case_design == "panel_nas") {
translate([5,5,-floorthick]) vent_hex((width-10)/3.75,(depth-10)/7,floorthick+4,5,1.5,"horizontal");
}
else {
translate([1,0,-floorthick]) vent_hex(width/3.75,depth/6,floorthick+4,5,1.5,"horizontal");
}
}
if(bottom_cover_pattern == "hex_8mm") {
translate([1,2,-floorthick]) vent_hex(width/5.5,depth/9.5,floorthick+4,8,1.5,"horizontal");
if(case_design == "panel_nas") {
translate([5,6,-floorthick]) vent_hex(width/5.5,depth/9.5,floorthick+4,8,1.5,"horizontal");
}
else {
translate([1,2,-floorthick]) vent_hex(width/5.5,depth/9.5,floorthick+4,8,1.5,"horizontal");
}
}
if(bottom_cover_pattern == "linear_vertical") {
#translate([0,-gap,-floorthick]) vent(wallthick,depth-2*wallthick-gap,floorthick+4,1,1,(width-2*wallthick-gap)/4,"horizontal");
if(case_design == "panel_nas") {
translate([6,5,-floorthick])
vent(wallthick,depth-8*wallthick-gap,floorthick+4,1,1,(width-2*wallthick-gap)/4.5,"horizontal");
}
else {
translate([0,-gap,-floorthick])
vent(wallthick,depth-2*wallthick-gap,floorthick+4,1,1,(width-2*wallthick-gap)/4,"horizontal");
}
}
if(bottom_cover_pattern == "linear_horizontal") {
translate([-gap,-gap,-floorthick]) vent(width-2*wallthick-gap,wallthick,floorthick+4,1,(depth-2*wallthick-gap)/3,1,"horizontal");
if(case_design == "panel_nas") {
translate([6,5,-floorthick])
vent(width-6*(sidethick+gap),wallthick,floorthick+4,1,(depth-2*wallthick-gap)/3.25,1,"horizontal");
}
else {
translate([-gap,-gap,-floorthick])
vent(width-2*(wallthick+gap),wallthick,floorthick+4,1,(depth-2*wallthick-gap)/3,1,"horizontal");
}
}
if(bottom_cover_pattern == "astroid") {
if(case_design == "panel_nas") {
for(c=[12:12:depth-16]) {
for(r=[12:12:width-16]) {
translate([r,c,-(2*floorthick)]) linear_extrude(floorthick+5) import("./dxf/astroid_8mm.dxf");
}
}
}
else {
for(c=[3:12:depth-8]) {
for(r=[4:12:width-8]) {
translate([r,c,-(2*floorthick)]) linear_extrude(floorthick+5) import("./dxf/astroid_8mm.dxf");
}
}
}
}
}
}
// rear io shield opening for standard form motherboards

View File

@@ -207,27 +207,39 @@ module case_side(case_design, side) {
// front cover pattern
if(front_cover_pattern != "solid" && case_design == "panel_nas") {
if(front_cover_pattern == "hex_5mm") {
translate([-gap+4,depth-3*(wallthick)+gap,5])
vent_hex(width/3.85,(case_z-6)/6,wallthick+4,5,1.5,"vertical");
if(front_cover_pattern == "hex_5mm" && hd_bays < 6) {
translate([-gap+4,depth-3*(wallthick)+gap,hd_z_position])
vent_hex(width/3.85,hd_bays*(27.1+hd_space)/5.75,wallthick+4,5,1.5,"vertical");
}
if(front_cover_pattern == "hex_5mm" && hd_bays == 6) {
translate([-gap+4,depth-3*(wallthick)+gap,hd_z_position])
vent_hex(width/3.85,hd_bays*(27.1+hd_space)/7,wallthick+4,5,1.5,"vertical");
}
if(front_cover_pattern == "hex_8mm") {
translate([-gap+5,depth-3*(wallthick)+gap,5])
vent_hex(width/5.5,(case_z-6)/9,floorthick+4,8,1.5,"vertical");
vent_hex(width/5.5,(case_z-6)/10,floorthick+4,8,1.5,"vertical");
}
// vent(width, length, height, gap, rows, columns, orientation)
if(front_cover_pattern == "linear_vertical") {
translate([-gap+4,depth-3*(wallthick)+gap,5])
vent(wallthick,(case_z-2*(wallthick+gap)-20)/2,floorthick+4,1,2,(width-2*(wallthick+gap+sidethick))/4.2,"vertical");
translate([-gap+4,depth-3*(wallthick)+gap,hd_z_position])
vent(wallthick,(case_z-2*(wallthick+gap)-20)/8,floorthick+4,1,1,
(width-2*(wallthick+gap+sidethick))/4.2,"vertical");
translate([-gap+4,depth-3*(wallthick)+gap,case_z-(top_height+bottom_height+4*floorthick)])
vent(wallthick,(case_z-2*(wallthick+gap)-20)/8,floorthick+4,1,1,
(width-2*(wallthick+gap+sidethick))/4.2,"vertical");
}
if(front_cover_pattern == "linear_horizontal") {
translate([-gap+4,depth-3*(wallthick)+gap,5])
vent(width-2*(wallthick+gap+sidethick)-4,wallthick,floorthick+4,1,(case_z-2*(wallthick+gap)-10)/3,1,"vertical");
translate([-gap+4,depth-3*(wallthick)+gap,hd_z_position])
vent(width-2*(wallthick+gap+sidethick)-4,wallthick,floorthick+4,2,
(case_z-2*(wallthick+gap)-20)/20,1,"vertical");
translate([-gap+4,depth-3*(wallthick)+gap,case_z-(top_height+bottom_height+4*floorthick)-20])
vent(width-2*(wallthick+gap+sidethick)-4,wallthick,floorthick+4,2,
(case_z-2*(wallthick+gap)-20)/20,1,"vertical");
}
if(front_cover_pattern == "astroid") {
for(c=[3:12:depth-8]) {
for(r=[4:12:width-8]) {
translate([r,c,case_z-(2*floorthick)]) linear_extrude(floorthick+5) import("./dxf/astroid_8mm.dxf");
for(c=[10:12:case_z-20]) {
for(r=[6:12:width-8]) {
translate([r,depth-wallthick,c]) rotate([90,0,0])
linear_extrude(wallthick+5) import("./dxf/astroid_8mm.dxf");
}
}
}

View File

@@ -461,35 +461,59 @@ module case_top(case_design) {
if(top_cover_pattern != "solid") {
if(top_cover_pattern == "hex_5mm") {
if(case_design == "panel_nas") {
translate([6,5,case_z-(2*floorthick)]) vent_hex((width-10)/3.75,(depth-10)/6,floorthick+4,5,1.5,"horizontal");
translate([6,5,case_z-(2*floorthick)])
vent_hex((width-10)/3.75,(depth-10)/7,floorthick+4,5,1.5,"horizontal");
}
else {
translate([1,0,case_z-(2*floorthick)]) vent_hex(width/3.75,depth/6,floorthick+4,5,1.5,"horizontal");
}
}
if(top_cover_pattern == "hex_8mm") {
if(top_cover_pattern == "hex_8mm") {
if(case_design == "panel_nas") {
translate([2,5,case_z-(2*floorthick)]) vent_hex(width/5.5,depth/9.5,floorthick+4,8,1.5,"horizontal");
translate([5,6,case_z-(2*floorthick)]) vent_hex(width/5.5,depth/9.5,floorthick+4,8,1.5,"horizontal");
}
else {
translate([1,2,case_z-(2*floorthick)]) vent_hex(width/5.5,depth/9.5,floorthick+4,8,1.5,"horizontal");
}
}
if(top_cover_pattern == "linear_vertical") {
translate([0,-gap,case_z-(2*floorthick)])
vent(wallthick,depth-2*wallthick-gap,floorthick+4,1,1,(width-2*wallthick-gap)/4,"horizontal");
if(case_design == "panel_nas") {
translate([wallthick+gap,wallthick,case_z-(2*floorthick)])
vent(wallthick,depth-6*wallthick-gap,floorthick+4,1,1,(width-2*(sidethick+gap))/4.25,"horizontal");
}
else {
translate([0,-gap,case_z-(2*floorthick)])
vent(wallthick,depth-2*wallthick-gap,floorthick+4,1,1,(width-2*wallthick-gap)/4,"horizontal");
}
}
if(top_cover_pattern == "linear_horizontal") {
translate([-gap,-gap,case_z-(2*floorthick)])
vent(width-2*wallthick-gap,wallthick,floorthick+4,1,(depth-2*wallthick-gap)/3,1,"horizontal");
if(case_design == "panel_nas") {
translate([wallthick+gap,wallthick,case_z-(2*floorthick)])
vent((width-4*(sidethick+gap)),wallthick,floorthick+4,1,
(depth-2*(wallthick-gap))/3.25,1,"horizontal");
}
else {
translate([-gap,-gap,case_z-(2*floorthick)])
vent(width-2*wallthick-gap,wallthick,floorthick+4,1,(depth-2*wallthick-gap)/3,1,"horizontal");
}
}
if(top_cover_pattern == "astroid") {
for(c=[3:12:depth-8]) {
for(r=[4:12:width-8]) {
translate([r,c,case_z-(2*floorthick)]) linear_extrude(floorthick+5) import("./dxf/astroid_8mm.dxf");
if(case_design == "panel_nas") {
for(c=[12:12:depth-16]) {
for(r=[12:12:width-16]) {
translate([r,c,case_z-(2*floorthick)-adj])
linear_extrude(floorthick+5) import("./dxf/astroid_8mm.dxf");
}
}
}
}
else {
for(c=[3:12:depth-8]) {
for(r=[4:12:width-8]) {
translate([r,c,case_z-(2*floorthick)-adj])
linear_extrude(floorthick+5) import("./dxf/astroid_8mm.dxf");
}
}
}
}
}
// rear io shield opening for standard form motherboards

View File

@@ -51,4 +51,3 @@ include <./lib/oem_adafruit.scad>;
include <./lib/oem_hk.scad>;
include <./lib/oem_rpi.scad>;
include <./lib/standoff.scad>;
include <./lib/vent.scad>;