include include $fn = 128; screen_cutout_length = 155;//[20:1:200] screen_cutout_height = 88;//[10:1:200] screen_cutout_depth = 10;//[1:1:200] cutout_y_position = 20;//[-50:1:50] Box_Width = 200;//[10:1:250] Box_Length = 201;//[10:1:250] Box_Height = 150;//[10:1:250] Front_Vertical = 15;//[1:1:50] Wall = 3;//[1:1:10] Text_X = -178;//[-250:1:250] Text_Y = 52;//[-250:1:250] Text_Z = 185;//[-250:1:500] //Start is bottom left corner when //looking down z axis, then going //clockwise around the shape. //Box outer shell outer_start = [0.00,0.00]; outer_top_left = [0.00,Box_Height]; outer_top_right = [Box_Length-71.33,Box_Height]; outer_slope_bottom = [Box_Length,Front_Vertical]; outer_bottom_right = [Box_Length,0.00]; /*Box inner shell. Defaults assume a 3mm wall thickness.*/ inner_start = [-1.00,-2.00]; inner_top_left = [-1,(Box_Height-3)]; inner_top_right = [Box_Length-74.33,Box_Height-3]; inner_slope_bottom = [Box_Length-3,Front_Vertical-3]; inner_bottom_right = [Box_Length-3,-2.00]; /*screen cutout position vertical (y), more positive= =up horizontal (z), more positive = left */ cutout_x_position = Box_Length-40;//[50:1:250] // by default the display cutout // is centered on the z axis- cutout_z_position = (Box_Width - screen_cutout_length)/2; //Define box outer shell first module box_outer() color("red") { //color ([0,1,0]) { linear_extrude( Box_Width, center=false, convexity = 10, twist = 0, $fn = 10) polygon(points = [ outer_start, outer_top_left, outer_top_right, outer_slope_bottom, outer_bottom_right ]); paths = [ [0,1,2,3,4]] ; } } //Then define box inner shell module box_inner() { color ([1,0,0]) { linear_extrude( Box_Width - 6, center=false, convexity = 10, twist = 0, $fn = 10) polygon(points = [ inner_start, inner_top_left, inner_top_right, inner_slope_bottom, inner_bottom_right, ] ,paths = [ [0,1,2,3,4]] ); } } //Display mounting posts module 3mm_short_mounting_post() { difference(){ cube ([6,6,8]); translate([3,3,-1]) // cylinder(7, d=2.6); threaded_rod(3, 11, 0.5, $fn = 128); } } //Case lid securing posts module mounting_posts() { difference(){ cube ([6,6,10]); translate([3,3,4]) // cylinder(14, d=2.5, $fn=128); threaded_rod(3, 14, 0.5, $fn = 128); } } //Define display cutout module screen_mounting_cutout() { { color ([0,0,1]) cube([screen_cutout_depth,screen_cutout_height,screen_cutout_length]); } { translate([-5,-9,-7.5]) color([1,0,0]) cube([screen_cutout_depth,screen_cutout_height+14,screen_cutout_length+10]); } { translate([-1,-14,2]) color([0,0,1]) cube([6,6,20]); } } module cooling_slots() { rotate([0,0,90]) union() { translate([3,3,-1]) cylinder(12, d=3); translate([3,1.5,-1]) cube([6,3,12]); translate([9,3,-1]) cylinder(12, d=3); } } //define dish decoration module module dish_decoration() color ("silver") { rotate([0,45,0]) { rotate([0,0,0]) translate([-0.5,0,-8.5]) cube([1, 0.3, 2]); difference() { rotate([90,0,0]) translate([0,0,-0.3]) cylinder(0.3, d=15); translate([-8,-1,-1]) cube([16,2,10]); } //color ([0,1,0]) rotate([0,-45,0]) translate([-6.4,0,-10.7]) cube([1,0.3,5]); //color ([0,0,1]) rotate([0,45,0]) translate([10,0,-10.7]) cube([1,0.3,15]); //color ([1,0,0]) rotate([90,0,0]) translate([3,-15,-0.3]) cylinder(0.3, d=3); //color ("silver") rotate([90,0,0]) translate([11,-7,-0.3]) cylinder(0.3, d=3); } } //Crescent moon module module crescent_moon() color("white") { rotate([90,0,0]) translate ([0,0,0]) difference() { translate([0,0,-0.5]) cylinder(0.3, d=15); translate([-3,-1,-0.6]) cylinder(0.8, d=15); } } //Difference the two shells and //rotate & difference out the display hole. difference(){ translate([0,0,0]) box_outer(); translate([0,0,3]) box_inner(); /*To see where the hidden display cutout cube is, put a % in front of "screen_mounting_cutout"*/ // union() rotate([0,0,28]) translate([178,-60,35]) screen_mounting_cutout(); //Cut the side cooling slots rotate([0,0,0]) translate ([180,25,195]) for(i=[0:16]) translate ([i*-10,-19,-3]) cooling_slots(); //Place the text on the front color("silver") rotate([0,90,27.4]) translate([Text_X+37,Text_Y+8.2,Text_Z-1]) { linear_extrude(height = .3) text("VK7ZBX", font = "Liberation Sans:style=Bold"); } color("silver") rotate([0,90,27.4]) translate([Text_X+17,Text_Y-10,Text_Z-0.84]) { linear_extrude(height = .3) text("EME Controller",font = "Liberation Sans:style=Bold"); } //place the dish decoration color("silver") rotate ([-62.37,-90,0]) translate([21,184.6,-30]) dish_decoration(); //Place the crescent moon rotate ([-62.37,-90,0]) translate([175,184.1,62]) crescent_moon(); } union() rotate([0,0,27.3]) translate([178,-58,25]) { translate([-3,-21,10]) rotate([0,90,0]) 3mm_short_mounting_post(); translate([-3,-21,167]) rotate([0,90,0]) 3mm_short_mounting_post(); translate([-3,94,167]) rotate([0,90,0]) 3mm_short_mounting_post(); translate([-3,94,10]) rotate([0,90,0]) 3mm_short_mounting_post(); } //Put on the mounting posts //First 4 on the bottom, // last two on the upper back //color ([0,0,1]) rotate([90,0,0]) translate([3,3,-13]) translate([outer_start,0]) mounting_posts(); //color ([0,1,1]) rotate([90,0,0]) translate([Box_Length-9,3,-13]) mounting_posts(); //color ([0,1,1]) rotate([90,0,0]) translate([Box_Length-9,(Box_Width)-9,-13]) mounting_posts(); //color ([1,0,1]) rotate([90,0,0]) translate([3,(Box_Width)-9,-13]) translate([outer_start,-10]) mounting_posts(); //Upper back mounting posts color ([0,1,0]) rotate([0,90,0]) translate([-(Box_Width-3),Box_Height-15,3]) mounting_posts(); color ([0,0,1]) rotate([0,90,0]) translate([-9,Box_Height-15,3]) mounting_posts(); color ([0,0,1]) rotate ([0,90,0]) translate([-(Box_Width-3),Box_Height-9,3]) cube([(Box_Width-6),6,3]); color ([0,1,1]) rotate ([0,90,0]) translate([-(Box_Width-3),Box_Height-6,0]) cube([(Box_Width-6),3,3]);