/* [Case settings] */ Addons = 0; // [0:1:6] BoxThickness = 3; // [1:0.5:5] AddonHeight = 14; DistanceBetweenObjects = 10; ShowCaseAssembled = false; ShowBoards = true; ShowCase = true; ShowLid = true; ShowLargeHalf = true; ShowSmallHalf = true; // 6chan standard sizes InteriorBoxHeight = 67; SplitHeight = 18; // Do NOT change this setting or CT won't fit InteriorBoxWidth = 62; // [60:0.1:65] /* [Render quality settings] */ // Set to at least to 150 before render and save as .stl file, otherwise you can go down to 40 for quick 3D view $fn = 60; // [20:1:300] if (ShowCase) { case(); } if (ShowLid) { if(ShowCaseAssembled) { translate([InteriorBoxWidth/2+(BoxThickness*2)-0.5,InteriorBoxHeight/2+(BoxThickness/2)-0.5,24+(AddonHeight*Addons)+BoxThickness/2+DistanceBetweenObjects]) rotate([0,180,0]) lid(); } else { translate([-(InteriorBoxWidth/2+(BoxThickness)+DistanceBetweenObjects),InteriorBoxHeight/2+(BoxThickness),0]) lid(); } } module lid() { color("LightCyan",alpha = 0.5) union() { // Lid base cube([InteriorBoxHeight+(BoxThickness*2),InteriorBoxWidth+(BoxThickness*2),BoxThickness],center=true); // Lid sides translate([0,0,BoxThickness-0.001]) difference() { cube([InteriorBoxHeight,InteriorBoxWidth,6],center=true); cube([InteriorBoxHeight-4,InteriorBoxWidth-4,6+0.001],center=true); } CubePoints = [ [ -13, -2, 0 ], //0 [ 13, -2, 0 ], //1 [ 13, 2, 0 ], //2 [ -13, 2, 0 ], //3 [ -10, -0.5, 0.5 ], //4 [ 10, -0.5, 0.5 ], //5 [ 10, 0.5, 0.5 ], //6 [ -10, 0.5, 0.5 ]]; //7 CubeFaces = [ [0,1,2,3], // bottom [4,5,1,0], // front [7,6,5,4], // top [5,6,2,1], // right [6,7,3,2], // back [7,4,0,3]]; // left translate([InteriorBoxHeight/2,0,BoxThickness+1]) rotate([90,0,90]) polyhedron( CubePoints, CubeFaces); } } module case() { difference() { union() { if(ShowSmallHalf) { color("SteelBlue",alpha = 1) SmallHalf(); } if(ShowLargeHalf) { color("LightSteelBlue",alpha = 1) LargeHalf(); } } union() { // Power Hole color("Yellow") translate([-0.02,9.9,BoxThickness+4]) cube([BoxThickness+0.03,9.4,11.6]); // CT Holes color("Yellow") for (ctline=[0:Addons]) { for (ctcolumn=[0:2]) { translate([BoxThickness+24+ctcolumn*14,InteriorBoxWidth+(BoxThickness*2)+0.01,7+BoxThickness+(AddonHeight*ctline)]) rotate([90,0,0]) cylinder(h=InteriorBoxWidth+BoxThickness*2+0.02,d=6); } } } } if(ShowBoards) { color("Salmon") union() { rotate([0,0,-90]) translate([-61.4-BoxThickness,62.2+BoxThickness,2.8+BoxThickness]) import("mainboard.stl"); if(Addons>=1) { for (addon=[0:Addons]) { rotate([0,0,-90]) translate([-66+BoxThickness/2,62.7+BoxThickness,2.8+BoxThickness+(AddonHeight*addon)]) import("addon.stl"); } } rotate([0,0,-90]) translate([-66+BoxThickness/2,62.7+BoxThickness,2.8+BoxThickness+(AddonHeight*Addons)]) import("mcu.stl"); } } } module LargeHalf() { union() { difference() { // Large half cube([InteriorBoxHeight+(BoxThickness*2),InteriorBoxWidth+(BoxThickness*2),25+(AddonHeight*Addons)]); translate([BoxThickness-0.01,BoxThickness-0.01,BoxThickness-0.01]) cube([InteriorBoxHeight+0.02,InteriorBoxWidth+0.02,25+(AddonHeight*Addons)+0.02]); translate([-0.01,-0.01,-0.01]) cube([InteriorBoxHeight+(BoxThickness*2)+0.02,SplitHeight+0.01,25+(AddonHeight*Addons)+10+0.01]); translate([0-0.01,SplitHeight-0.15,-0.01]) ridge(); translate([0-0.01,SplitHeight-0.15,-0.01]) cube([InteriorBoxHeight+(BoxThickness*2),3,BoxThickness/2]); translate([InteriorBoxHeight+(BoxThickness*2)+0.01,SplitHeight-0.15,-0.01]) mirror([1,0,0]) ridge(); } } } module SmallHalf() { union() { difference() { translate([0.01,0.01,0.01]) cube([InteriorBoxHeight+(BoxThickness*2)+0.01,InteriorBoxWidth+(BoxThickness*2)+0.01,25+(AddonHeight*Addons)+0.01]); translate([BoxThickness,BoxThickness,BoxThickness]) cube([InteriorBoxHeight,InteriorBoxWidth,24+(AddonHeight*Addons)]); translate([-0.1,SplitHeight-0.1,-0.1]) cube([InteriorBoxHeight+(BoxThickness*2)+0.2,InteriorBoxWidth+(BoxThickness*2),25+(AddonHeight*Addons)+10]); } translate([0-0.01,SplitHeight-0.15,-0.01]) ridge(); translate([InteriorBoxHeight+(BoxThickness*2)+0.01,SplitHeight-0.15,-0.01]) mirror([1,0,0]) ridge(); } translate([0-0.01,SplitHeight-0.15,-0.01]) cube([InteriorBoxHeight+(BoxThickness*2),3,BoxThickness/2]); } module ridge() { linear_extrude(height = 25+(AddonHeight*Addons)+0.04, center = false, convexity = 10, twist = 0) polygon(points=[[0,0],[0,3],[BoxThickness/2+0.6,3],[BoxThickness/2+0.6,2],[BoxThickness/2+0.1,2],[BoxThickness/2+0.6,0]]); }