209 lines
9.0 KiB
OpenSCAD
209 lines
9.0 KiB
OpenSCAD
/*
|
|
|
|
fan_cover(size, thick)
|
|
fan_mask(size, thick, style)
|
|
|
|
*/
|
|
|
|
/* fan cover */
|
|
module fan_cover(size, thick) {
|
|
difference() {
|
|
color("grey",1) slab([size,size,thick],3);
|
|
color("grey",1) fan_mask(size, thick, 2);
|
|
}
|
|
}
|
|
|
|
/* fan mask to create opening */
|
|
module fan_mask(size, thick, style) {
|
|
|
|
$fn=90;
|
|
|
|
if(style == 1) {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-2);
|
|
if(size == 40) {
|
|
// mount holes
|
|
translate ([size-4,size-4,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([size-4,4,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([4,size-4,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([4,4,-1]) cylinder(h=thick+2, d=3);
|
|
}
|
|
if(size == 60) {
|
|
// mount holes
|
|
translate ([size-5,size-5,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([size-5,5,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([5,size-5,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([5,5,-1]) cylinder(h=thick+2, d=3);
|
|
}
|
|
if(size >= 80) {
|
|
// mount holes
|
|
translate ([size-3.75,size-3.75,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([size-3.75,3.75,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([3.75,size-3.75,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([3.75,3.75,-1]) cylinder(h=thick+2, d=3);
|
|
}
|
|
}
|
|
if(style == 2 && size == 40) {
|
|
difference() {
|
|
union () {
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-2);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-6);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-10);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-14);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-18);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-22);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-26);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-30);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-34);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-38);
|
|
}
|
|
// mount holes
|
|
translate ([size-4,size-4,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([size-4,4,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([4,size-4,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([4,4,-1]) cylinder(h=thick+2, d=3);
|
|
}
|
|
translate([6.5,5,-2]) rotate([0,0,45]) cube([size,2,thick+4]);
|
|
translate([4.5,size-6,-2]) rotate([0,0,-45]) cube([size,2,thick+4]);
|
|
}
|
|
}
|
|
if(style == 2 && size == 60) {
|
|
difference() {
|
|
union () {
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-2);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-6);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-10);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-14);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-18);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-22);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-26);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-30);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-34);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-38);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-42);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-46);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-50);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-54);
|
|
}
|
|
// mount holes
|
|
translate ([size-5,size-5,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([size-5,5,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([5,size-5,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([5,5,-1]) cylinder(h=thick+2, d=3);
|
|
}
|
|
translate([9.5,8,-2]) rotate([0,0,45]) cube([size,2,thick+4]);
|
|
translate([8.5,size-10,-2]) rotate([0,0,-45]) cube([size,2,thick+4]);
|
|
}
|
|
}
|
|
if(style == 2 && size >= 80) {
|
|
difference() {
|
|
union () {
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-2);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-8);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-14);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-20);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-26);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-32);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-38);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-44);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-50);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-56);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-62);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-68);
|
|
}
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-74);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-79);
|
|
}
|
|
if(size == 92) {
|
|
difference() {
|
|
translate ([size/2,size/2,-1]) cylinder(h=thick+2, d=size-86);
|
|
translate ([size/2,size/2,-2]) cylinder(h=thick+4, d=size-92);
|
|
}
|
|
}
|
|
// mount holes
|
|
translate ([size-3.75,size-3.75,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([size-3.75,3.75,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([3.75,size-3.75,-1]) cylinder(h=thick+2, d=3);
|
|
translate ([3.75,3.75,-1]) cylinder(h=thick+2, d=3);
|
|
}
|
|
translate([6.5,4.25,-2]) rotate([0,0,45]) cube([size*1.2,3,thick+4]);
|
|
translate([4.25,size-6.5,-2]) rotate([0,0,-45]) cube([size*1.2,3,thick+4]);
|
|
}
|
|
}
|
|
if(style == 3) {
|
|
inner = size == 30 ? 24 :
|
|
size == 40 ? 32 :
|
|
size == 50 ? 40 :
|
|
size == 60 ? 50 :
|
|
size == 70 ? 61.9 :
|
|
size == 80 ? 71.5 :
|
|
size * 0.8; // Use 80% as default
|
|
|
|
rings = size <= 40 ? 4 : 6;
|
|
bar_size = size <= 40 ? 2 : 3;
|
|
|
|
screw_offset = inner / 2;
|
|
center_point = size * 0.5;
|
|
base_ring_size = size * 0.95;
|
|
rings_spacing = size / rings;
|
|
|
|
translate([size/2, size/2, -1])
|
|
union() {
|
|
translate([screw_offset, screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
|
|
translate([-screw_offset, screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
|
|
translate([screw_offset, -screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
|
|
translate([-screw_offset, -screw_offset, (thick+2)/2]) cylinder(d=3, h=thick+2, center=true);
|
|
|
|
difference() {
|
|
union() {
|
|
for(i=[inner:-rings_spacing:0]) {
|
|
difference() {
|
|
cylinder(d=base_ring_size - i, h=thick+2);
|
|
translate([0, 0, -1]) cylinder(d=base_ring_size - i - (rings_spacing/2), h=thick+4);
|
|
}
|
|
}
|
|
}
|
|
|
|
translate([0, 0, -1]) union() {
|
|
cylinder(d=bar_size*2+0.1, thick+6); // Add a circle to prevent any tiny holes around cross bar
|
|
rotate([0, 0, 45]) cube([size, bar_size, 12], center=true);
|
|
rotate([0, 0, 45]) cube([bar_size, size, 12], center=true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|