the hole is not perfectly centered, but big enough that it fits…
Please don‘t just print in PLA, that could get soft at those temperatures… I used PETG. I hope that is good enough.
Since I don’t see a way to attach a file here the code from openscad:
//numbers in mm
$fn = 50;
fan_w = 30.4;
fan_l = 30.4;
fan_h = 4.6;
fan_d = 21;
shroud_l = 25;
shroud_l1 = 3;
shroud_l2 = 11;
shroud_l3 = 3;
shroud_l4 = 8;
shroud_h1 = 4.6;
shroud_h2 = 7;
shroud_h3 = 1;
shroud_h4 = 2;
shroud_thickness = 1;
wall = 2;
translate([-fan_w-wall*2,0,0])fan_enclosure();
shroud();
module fan_enclosure(){
difference(){
cube([fan_l+2*wall,fan_w+2*wall,fan_h+shroud_thickness]); //outer size
translate([wall,wall,0])cube([fan_l+wall,fan_w,fan_h]); //inner size
translate([fan_l/2+wall,fan_w/2+wall,0])cylinder(d=fan_d, h=fan_h+shroud_thickness); //fan hole
translate([0,0,0])cube([wall*2,wall*2,fan_h+wall]); //counter hole because of cable and easier mounting
translate([0,fan_w,0])cube([wall*2,wall*2,fan_h+wall]); //counter hole because of cable and easier mounting
}
}
module shroud(){
difference(){
union(){
translate([0,0,fan_h-shroud_h1])cube([shroud_l1, fan_w+wall*2, shroud_h1+shroud_thickness]); //those 4 lines are to accomodate differnt heighs
translate([shroud_l1,0,fan_h-shroud_h2])cube([shroud_l2, fan_w+wall*2, shroud_h2+shroud_thickness]);
translate([shroud_l1+shroud_l2,0,fan_h-shroud_h3])cube([shroud_l3, fan_w+wall*2, shroud_h3+shroud_thickness]);
translate([shroud_l1+shroud_l2+shroud_l3,0,fan_h-shroud_h4])cube([shroud_l4, fan_w+wall*2, shroud_h4+shroud_thickness]);
}
translate([0,wall,-fan_h])cube([shroud_l, fan_w, fan_h*2]);
translate([shroud_l1,wall,-fan_h])cube([shroud_l2, fan_w+1, fan_h*2]); //because of the assymetric pci-e slot
}
}