// -*- C -*- wall = 0.75 * [1,1,1]; phone = [ 76.40, 30.96, 6.26 ]; phone_button_z = 6.58; minwall = 0.25; button_dy_outer = 28.42; button_dy_inner = 19.05; button_dy_centre = 5.65; phone_slop = [1,1,1] * 0.5; led = [25.9, 9.44]; // y is from edge led_dia = 4.4; // calculated top_z = max( phone[2] + wall[2], phone_button_z + minwall ) + phone_slop[2]; module MainProfileInnerHalf(){ p = phone + phone_slop; pb = phone_button_z + phone_slop[2]; polygon([[ -2, 0 ], [ p[1]/2, 0 ], [ p[1]/2, p[2] ], [ button_dy_outer/2, p[2] ], [ button_dy_outer/2, pb ], [ button_dy_inner/2, pb ], [ button_dy_inner/2, p[2] ], [ button_dy_centre/2, p[2] ], [ button_dy_centre/2, pb ], [ -2, pb ]]); } module MainProfile(){ p = phone + phone_slop; for (m=[0,1]) mirror([m,0]) { difference(){ translate([-1, -wall[2] ]) square([ p[1]/2 + wall[1] + 1, top_z + wall[2] ]); MainProfileInnerHalf(); } } } module BoxMain(){ rotate([0,0,90]) rotate([90,0,0]) { linear_extrude(height = phone[0] + wall[0], convexity=20) MainProfile(); translate([0,0, phone[0]]) linear_extrude(height = wall[0], convexity=20) hull() MainProfile(); } } module Box(){ difference(){ BoxMain(); translate([ led[0], phone[1]/2 - led[1], 1 ]) cylinder(r = led_dia/2, h= phone[2]*2, $fn=20); } } //MainProfileInner(); Box();