X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=fairphone-case.scad;h=20b809b15be6245a0c20d18593c5e0fbbe6eae40;hp=238abba51865f76367ccbe737b284ce737b53890;hb=20a6094b95900dcd75bd5867ffcd84b85f8b252a;hpb=555e3de4e88b79d27ad06f6c0476a0726110d322;ds=sidebyside diff --git a/fairphone-case.scad b/fairphone-case.scad index 238abba..20b809b 100644 --- a/fairphone-case.scad +++ b/fairphone-case.scad @@ -22,6 +22,10 @@ jack_pos = [ 13.92, 7.96 ]; jack_dia = 9.1 + .5; // some jack I had lying around noisecancelmic_pos = [ 19.54, 7.37 ]; // from rhs +noisecancelmic_dia = 1.75; + +rearspeaker_pos_bl = [ 14.92, 18.72 ]; +rearspeaker_size = [ 3.76, 7.36 ]; case_th_bottom = 2.5; case_th_lid = 2.5; @@ -58,6 +62,8 @@ buttonishleg_default_l_is_fudge = 10; strut_min_at_end = 1.5; +rearspeaker_gap = [ 1.0, 1.0 ]; // each side + // ---------- calculated ---------- phone_width = (phone + bumper*2)[0]; @@ -118,6 +124,11 @@ module rectfromto(a,b) { square([abs(ab[0]), abs(ab[1])]); } module circleat(c,r) { translate(c) circle(r); } +module linextr(z0,z1) { + translate([0,0,z0]) + linear_extrude(height=z1-z0) + children(); +} module KeeperProfile(slant=0){ use_e = kppe + [0,-1] * slant * keeper_inner_width / keeper_slant_slope; @@ -219,10 +230,10 @@ module CaseBase_rhsflip(yn=[0,1]) { } } -module CaseBase_botflip() { - for (bot=[0,1]) { +module CaseBase_botflip(yn=[0,1]) { + for ($botflip=yn) { translate([0, -phone_height/2, 0]) - mirror([0, bot, 0]) + mirror([0, $botflip, 0]) translate([0, phone_height/2, 0]) children(); } @@ -321,6 +332,24 @@ module Struts(x_start, z_min, th){ } } +module RearSpeakerAperture(){ + CaseBase_rhsflip([1]) CaseBase_botflip([1]) + linextr(-20, 20) + mirror([0,1]) + translate(rearspeaker_pos_bl + bumper) + rectfromto(-rearspeaker_gap, + rearspeaker_size + rearspeaker_gap); +} + +module RearCameraAperture(){ + CaseBase_rhsflip([1]) + mirror([0, 0, 1]) + linear_extrude(height = 20) + mirror([0, 1, 0]) + translate(bumper) + rectfromto(camera_pos_tl, camera_pos_br); +} + module CaseBase(){ AroundEdges(epp3[1], case_th_bottom, 1) EdgeProfile(); @@ -359,12 +388,7 @@ module Case(){ ////toplevel } // front camera - CaseBase_rhsflip([1]) - mirror([0, 0, 1]) - linear_extrude(height = 20) - mirror([0, 1, 0]) - translate(bumper) - rectfromto(camera_pos_tl, camera_pos_br); + RearCameraAperture(); // struts (invisible, because they're buried in the case) Struts(epp2i[0], epp2i[1] - case_th_bottom, case_th_bottom); @@ -389,6 +413,10 @@ module Case(){ ////toplevel // apertures along top edge CaseAperture(jack_pos, jack_dia, 8); + CaseBase_rhsflip([1]) + CaseAperture(noisecancelmic_pos, noisecancelmic_dia, 20); + + RearSpeakerAperture(); } } @@ -450,7 +478,20 @@ module TestSelectCamera(){ linear_extrude(height = 50) mirror([0, 1, 0]) rectfromto([-20, -20], - camera_pos_br + bumper + [ 5, 5 ]); + camera_pos_br + bumper + [ 2, 2 ]); +} + +module TestSelectRearAperture(){ + minkowski(){ + union() children(); + translate([20, 0,0]) + cube([42, 2, 1], center=true); + } +} + +module TestSelectRearSpeaker(){ + TestSelectRearAperture() + RearSpeakerAperture(); } module TestCamera(){ ////toplevel @@ -510,6 +551,7 @@ module TestFrameCase(){ ////toplevel union(){ TestSelectFrame(); TestSelectCamera(); + TestSelectRearSpeaker(); } } }