/* * Fursuit Hanger Fan Mount * Copyright © 2025, by Jörg Reuter * * Licensed under CC BY-SA 4.0. * To view a copy of this license, visit https://creativecommons.org/licenses/by-sa/4.0/ * */ // uses the BOSL2 library available at https://github.com/BelfrySCAD/BOSL2 // works without it too, but then the base won't have rounded corners... #include // render settings e=0.01; $fn=200; /* * Parameters. Adjust to your fan and hanger bracket. * */ // hanger rod d_rod=6.1; // depends on how you bent the rod, measure! w_rod=58; // size of fan l_fan=120; // blade diameter d_blades=116; // distance of mounting holes // may depend on fan, measure actual value l_holes=105; // diameter of mounting holes d_hole=4.5; // height of base plate h_base=d_rod+1; // height of funnel (measured from bottom of base) h_funnel=h_base*3; // length of base plate l_base=l_fan; // length of hanger rod guides l_rod_guide=l_base+2*e; /* * Render instructions * */ // notch for the rod module rod_guide() { d=d_rod; l=l_rod_guide; rotate([0, 90, 0]) cylinder(h=l, d=d, center=true); translate([-l/2, -d/2, -d/2]) cube([l, d, d/2]); } // mount before "drilling" the holes module solid_mount() { if (is_undef(BOSL_VERSION)) { // base plate without BOSL2, but also without rounded corners. translate([-l_base/2, -l_fan/2, 0]) cube([l_base, l_fan, h_base]); } else { // base plate with BOSL2 and nifty rounded corners. translate([0, 0, h_base/2]) cuboid([l_base, l_fan, h_base], rounding=5, edges="Z"); } cylinder(h=h_funnel, d=l_fan); d=l_holes/2; translate([d, -d, 0]) cylinder(h=h_funnel, d=2*d_hole); translate([-d, -d, 0]) cylinder(h=h_funnel, d=2*d_hole); translate([-d, d, 0]) cylinder(h=h_funnel, d=2*d_hole); translate([d, d, 0]) cylinder(h=h_funnel, d=2*d_hole); } // mount with holes and notches module fan_mount() { difference() { solid_mount(); translate([0, 0, -e]) cylinder(h=h_funnel+e*2, d=d_blades); d=l_holes/2; translate([d, -d, -e]) cylinder(h=h_funnel+e*2, d=d_hole); translate([d, d, -e]) cylinder(h=h_funnel+e*2, d=d_hole); translate([-d, -d, -e]) cylinder(h=h_funnel+e*2, d=d_hole); translate([-d, d, -e]) cylinder(h=h_funnel+e*2, d=d_hole); translate([0, -w_rod/2, d_rod/2-e]) rod_guide(); translate([0, w_rod/2, d_rod/2-e]) rod_guide(); } } fan_mount();