Prototype 3D Printable Fully Parametric Case

nrp

Trash Compacter
Original poster
Sep 8, 2018
35
91
This is now ready for the first release, with a fully customizable, 3d printable traditional shoebox layout. Other layouts may come later.

The layout below (that I have personally printed and am using) is 7.15L with a Noctua NH-L12S, an SFX PSU, a 140mm intake fan, and a Zotac 1080 Mini. There are other power supply and cooling options to choose from (including an AIO). The case will automatically resize to match the chosen components. Everything else in the case is fully customizable too with more effort using OpenSCAD.

Full instructions and files for download are up on GitHub. The license is 2-clause BSD (a common open source software license): https://github.com/eclecticc/ParametricCase






Original Post


I've kicked off a project to build a parametric 3D printed Mini-ITX case. The goal is to create a couple of architectures that are programmatic to the point that CPU cooler height and GPU length can be input as numbers, and a case to fit those perfectly is outputted.

I'm holding a few constraints for this project:
  1. I want the entire case (minus side panels and some accessory pieces) to be printable in one print on the 3D printer I have. This is a Prusa i3 MK3 with a 250x210x210 print volume. Parameters larger than that can still be used if you have access to a bigger printer, but the architectures I'm picking are designed within these bounds.
  2. I'm architecting for the 250mm axis to be along the length of the video card. This again constrains the possible layouts, and you can adjust the parameters differently if you choose to.
  3. The PSU is going in the case with AC in. This means either FlexATX in the architecture shown above, or trading off against CPU cooler height in an architecture with it above the motherboard and using SFX or SFX-L.
The image shown above is the one I'm most interested in trying first. It allows for separate zones for the CPU, GPU, and PSU, and since the case is parametric to fit the components, all three of them can take air intake directly from outside.

I'm doing this using OpenSCAD, which is a fully parametric CAD program where you create models basically by writing code. As an example, here is a Mini-ITX motherboard with keepouts:
Code:
// Base PCB dimensions
miniitx = [170, 170, 1.57];

// Motherboard mounting hold diameter and offsets (relative to hole c)
miniitx_hole = 3.96;
miniitx_hole_c = [10.16, 6.35];
miniitx_hole_f = [22.86, 157.48];
miniitx_hole_h = [154.94, 0];
miniitx_hole_j = [154.94, 157.48];
extra = 1.0;

// Keepouts on top and bottom of board
miniitx_bottom_keepout = 0.25 * 25.4;

module motherboard(keepouts) {
    area_a_keepout = [27, 15, 170-27-30, 170-15, 57];
    area_b_keepout = [0, 0, 170, 15, 16];
    area_c_keepout = [170-30, 15, 30, 170-15, 38];
    area_d_keepout = [0, 15, 27, 170-15, 39];
 
    color("Green", 1.0) {
        difference() {
            cube(miniitx);
            translate([miniitx_hole_c[0], miniitx_hole_c[1], -extra/2]) {
                cylinder(r = miniitx_hole/2, h = miniitx[2]+extra);
                for (hole = [miniitx_hole_f, miniitx_hole_h, miniitx_hole_j]) {
                    translate([hole[0], hole[1], 0]) cylinder(r = miniitx_hole/2, h = miniitx[2]+extra);
                }
            }
        }
    }
    color("GreenYellow", 0.25) {
        if (keepouts == true) {
            translate([0, 0, -miniitx_bottom_keepout]) cube([miniitx[0], miniitx[1], miniitx_bottom_keepout]);
      
            for (keepout = [area_a_keepout, area_b_keepout, area_c_keepout, area_d_keepout]) {
                translate([keepout[0], keepout[1], miniitx[2]]) {
                    cube([keepout[2], keepout[3], keepout[4]]);
                }
            }
        }
    }
}
 
Last edited:

nrp

Trash Compacter
Original poster
Sep 8, 2018
35
91
A progress update with correct dimensions on the GPU. Most of the effort went into parametric modeling of the PCI-e bracket. Also, you can't really see it in this view, but the heatsink fins are also parametrically generated.
 
  • Like
Reactions: Biowarejak

nrp

Trash Compacter
Original poster
Sep 8, 2018
35
91
Rotate the psu 90degree on the left side and use an 92mm tower cooler and an front fan. This should be so much better airflow.
I played around with this a bit. I'm not sure there are 92mm tower coolers narrow enough to fit unless I push the PSU another 12mm or so past the edge of the motherboard.
 
  • Like
Reactions: Biowarejak

Biowarejak

Maker of Awesome | User 1615
Platinum Supporter
Mar 6, 2017
1,744
2,262
I like this idea, I think there was a similar project in the past but I'm not certain how far it got :)
 

nrp

Trash Compacter
Original poster
Sep 8, 2018
35
91

Starting to build actual structure. The goal is to get the right parameters first, then account for cooling and wire routing, then make it assemble-able, and lastly make it look good.
 

CC Ricers

Shrink Ray Wielder
Bronze Supporter
Nov 1, 2015
2,233
2,556
As a programmer this software looks interesting to me. At least I hope I am able to do boolean shape operations much more painlessly than Sketchup Make (which is lacking in the free version).
 

nrp

Trash Compacter
Original poster
Sep 8, 2018
35
91

Now up to about 450 lines of code with all 6 sides in place.

I thought it would be neat to automatically generate the case volume and emboss it into one of the sides. Right now I have it at 6.4L for a Mini-ITX spec compliant traditional layout with a Zotac 1080 Mini, though I'll probably need to grow it a bit to account for wiring and assembly.
 

nrp

Trash Compacter
Original poster
Sep 8, 2018
35
91
Also, right now my plan is to print this thing as a "bucket" with the four sides and the bottom as one part and just the top removeable. This leverages the advantages of 3D printing vs what makes sense with sheet metal.
 

el01

King of Cable Management
Jun 4, 2018
770
588
Also, right now my plan is to print this thing as a "bucket" with the four sides and the bottom as one part and just the top removeable. This leverages the advantages of 3D printing vs what makes sense with sheet metal.
I think that modular side panels would be great and more sustainable, since if you fail one part of the printing, everything goes downhill. Also, it would be easier to add fan holes. Finally, it would make the case more modular and more adaptable. Just my two cents.
 
  • Like
Reactions: Biowarejak

nrp

Trash Compacter
Original poster
Sep 8, 2018
35
91
I think that modular side panels would be great and more sustainable, since if you fail one part of the printing, everything goes downhill. Also, it would be easier to add fan holes. Finally, it would make the case more modular and more adaptable. Just my two cents.
That is true, and probably something I'll do at a later stage. Designing this case for modular assembly will end up adding a decent amount of overall volume though, so I'm going to try to go the bucket route first. I've done 24+ hour prints, so I'm not worried about that. The fan grids will be challenging though. Especially the giant one for the GPU:
 
  • Like
Reactions: el01 and Biowarejak

el01

King of Cable Management
Jun 4, 2018
770
588
That is true, and probably something I'll do at a later stage. Designing this case for modular assembly will end up adding a decent amount of overall volume though, so I'm going to try to go the bucket route first. I've done 24+ hour prints, so I'm not worried about that. The fan grids will be challenging though. Especially the giant one for the GPU:
Or, you could ask users to buy a tube of superglue and some duct tape ;)
 
  • Like
Reactions: Biowarejak

nrp

Trash Compacter
Original poster
Sep 8, 2018
35
91


It doesn't look like there are a lot of great options for FlexATX PSUs out there, so I'm also putting together an option that can take an SFX or SFX-L PSU. This results in insufficient height for a conventional CPU cooler, but a 120mm AIO fits really well (with some added length to the case).
 

nrp

Trash Compacter
Original poster
Sep 8, 2018
35
91
The model is now basically fully built out as parametric. I can specify the heatsink and power supply type and the case is automatically generated to the right size to fit the largest component dimensions:
Code:
traditional(show_internals = true, heatsink_type = "noctua_nh_l12s", psu_type = "flexatx");
//traditional(show_internals = true, heatsink_type = "aio", psu_type = "sfx");