// 3: like 2 but one-layer window for ad-hoc multi-colour
initial_layer_thick = 0.400; // ^ needed for mode 3 only
-initial_layer_width = 0.125; // ^ needed for mode 3 only
+initial_layer_width = 0.750; // ^ needed for mode 3 only
multicolour_gap = 0.15; // each side
phone_cnr_rad = 6.0;
+phone_rim_depth = 0.80; // includes allowance for a screen protector
button_cutout_depth = 9;
jack_pos = [ 13.83, 8.485 ];
jack_dia = 10.64 + .5; // some jack I had lying around
-led_pos = [ 12.50, 8.00 ];
-led_aperture = 5;
-led_windowledge = 0.75; // each side
+led_pos = [ 13.98, 10.00 ];
+led_aperture = 8;
+led_window_ledge = 0.75; // each side
noisecancelmic_pos = [ 19.54, 7.37 ]; // from rhs
noisecancelmic_dia = 4.00;
microusb_width = 16.12 + 1.25;
case_th_bottom = 2.5;
-case_th_lid = 2.5;
+case_th_lid = 3.0;
case_th_side = 2;
case_th_lip = 1.2;
+lid_screen_gap_extra = .66;
+
case_struts_count = 6;
case_struts_solid_below = 1.00;
case_struts_solid_above = 0.75;
lpp10 = [ epp5[0] + lid_gap_x, kppc[1] + lid_gap_z ];
lpp11 = [ lpp10[0], epp5[1] + lid_gap_z ];
-lp_r12 = case_th_lid - (lpp11[1] - lpp10[1]);
+lpp14 = lpp10 + [1,0] * keeper_inner_width;
+// exact x posn not very important; must extend past end of keeper
+
+lpp15 = [ lpp14[0],
+ epp0[1] - phone_rim_depth + 1/2.5 * case_th_lid
+ + lid_screen_gap_extra ];
+// ^ beam theory says to maximise force before contact,
+// the gap below the `beam' (the lid) must be 1/3
+// the thickness (ie the lid thickness) if the beam
+// is solid, or 1/2 if it has a top and bottom only.
+// ours is mostly solid.
+
+lp_r12 = max(case_th_lid - (lpp11[1] - lpp15[1]),
+ case_th_lip);
lpp12 = [ epp4[0] + lp_r12, lpp11[1] ];
lpp13 = [ lpp12[0], lpp12[1] + lp_r12 ];
// notification led aperture
nla_r0 = led_aperture/2;
-nla_r1 = nla_r0 + led_windowledge;
+nla_r1 = nla_r0 + led_window_ledge;
nla_r2 = nla_r1 + multicolour_gap;
nla_t =
led_window_style >= 3 ? initial_layer_thick :
xextra = extra + -epp4[0];
xrange = [ 0, phone_width ] + [-1,+1] * xextra;
yextra = extra + -epp4[0];
- yrange = [ -phone_height + -hppB[0] + hp_r2, 0 ] + [-1,+1] * yextra;
+ yrange = [ -phone_height + +hppB[0] - hp_r2, 0 ] + [-1,+1] * yextra;
p0 = [ xrange[0], yrange[0] ];
p1 = [ xrange[1], yrange[1] ];
echo(p0, p1);
translate([0,0, z0])
- mirror([0,0, zs<0])
+ mirror([0,0, zs<0 ? 1 : 0])
linear_extrude(height= initial_layer_thick)
difference(){
rectfromto(p0 - [1,1] * initial_layer_width,
lpp12,
lpp13,
lpp13 + [10, 0],
- lpp10 + [10, 0]
+ lpp15 + [10, 0],
+ lpp15,
+ lpp14,
]);
intersection(){
circleat(lpp12, r=lp_r12);
module ButtonCoverProfile(){
intersection(){
polygon(concat([ bppM, bppP, bppO, bppJ ],
- (enable_support ? [ bppU, bppV, bppW ] : []),
+ (enable_support && !$button_suppress_over_keeper
+ ? [ bppU, bppV, bppW ] : []),
[ bppL, bppK ]));
hull(){
EdgeProfile();
h = 60);
}
-module SideButton(y, y_ref_sign, l){
+module SideButton(y, y_ref_sign, l, suppress_over_keeper=0){
// y_ref_sign:
// +1 measured from top of actual phone to top of button
// -1 measured from bottom of actual phone to bottom of button
// 0 y is centre of button in coordinate system
$button_l= l;
+ $button_suppress_over_keeper= suppress_over_keeper;
eff_y = y_ref_sign > 0 ? -bumper [1] -y -l/2 :
y_ref_sign < 0 ? (-phone -bumper)[1] +y +l/2 :
y;
}
module Buttons(){
- Flip_rhs(1) SideButton(15.580, +1, 8.9) children(); // power
- Flip_rhs(1) SideButton(48.700, -1, 8.920) children(); // camera
- Flip_rhs(0) SideButton(30.800, +1, 21.96) children(); // volume
+ Flip_rhs(1) SideButton(15.580, +1, 8.9 ) children(); // power
+ Flip_rhs(1) SideButton(48.700, -1, 8.920 ) children(); // camera
+ Flip_rhs(0) SideButton(30.800, +1, 21.96, 1) children(); // volume
Flip_rhs( ) LidButtonishLeg(14, -1) children();
// Flip_rhs(0) LidButtonishLeg(20, +1, 20) children();
}
translate([phone_width/2, -400, kppe[1]])
mirror([1-abs($rhsflip - keeper_side),0,0])
cube([400, 800, 50]);
- if (enable_support)
+ if (enable_support && !$button_suppress_over_keeper)
rotate([-90,90,0])
translate([-400, -400, kppd[1]])
mirror([0,0,1])
}
}
+module LidAdhocMultiprintFrame(phase){
+ if (led_window_style >= 3) {
+ AdhocMultiprintFrame(phase, lpp13[1], -1);
+ }
+}
+
module Lid(){ ////toplevel
difference(){
union(){
}
- if (led_window_style >= 3) {
- AdhocMultiprintFrame(1, lpp13[1], -1);
- }
+ LidAdhocMultiprintFrame(1);
}
module HingeLever(){ ////toplevel
}
}
+module LidWindow(){ ////toplevel
+ translate([led_pos[0], -led_pos[1], lpp13[1]])
+ mirror([0,0,1])
+ cylinder(r= nla_r1, h=nla_t);
+ LidAdhocMultiprintFrame(0, lpp13[1], -1);
+}
+
+module LidWindowPrint(){ ////toplevel
+ rotate([0,180,0])
+ LidWindow();
+}
+
+module DemoLidWindowSelect(){
+ translate([led_pos[0], led_pos[1], -100]) {
+ translate([0, -30, 0]) cube([400, 400, 200]);
+ }
+}
+
+module DemoLidWindow(){ ////toplevel
+ %Lid();
+ LidWindow();
+ translate([0,40,0]){
+ color("blue") intersection(){ Lid(); DemoLidWindowSelect(); }
+ color("red") intersection(){ LidWindow(); DemoLidWindowSelect(); }
+ }
+}
+
module HingeLeverPrint(){ ////toplevel
rotate([-90,0,0])
translate([-phone_width/2, phone_height, 0])
module TestSelectLidFrame(){
TestSelectFrame();
+ translate([led_pos[0], -led_pos[1], -50])
+ cylinder(r= nla_r2+2, h=100);
}
module TestFrameCase(){ ////toplevel
}
}
+module TestSelectTopApertures(){
+ translate([-100, -35, -100])
+ cube([400, 100, 200]);
+}
+
module TestTopApertures(){ ////toplevel
intersection(){
Case();
TestSelectFrame();
- translate([-100, -35, -100])
- cube([400, 100, 200]);
+ TestSelectTopApertures();
+ }
+}
+
+module TestLidTopAperturesPrint(){ ////toplevel
+ rotate([0,180,0]) intersection(){
+ Lid();
+ TestSelectTopApertures();
+ }
+}
+
+module TestLidWindowTopAperturesPrint(){ ////toplevel
+ rotate([0,180,0]) intersection(){
+ LidWindow();
+ TestSelectTopApertures();
}
}
DemoPropAngle(prop_angles[i]);
}
+module DemoSelectAdhocLeftRight(right=0) {
+ translate([phone_width/2, -400, -100]) // , -15, -100 to cross-section
+ mirror([1-right, 0,0])
+ cube([400, 800, 200]);
+}
+
+module DemoLeft(){ ////toplevel
+ color("red") intersection(){ Case(); DemoSelectAdhocLeftRight(); }
+ color("blue") intersection(){ Lid(); DemoSelectAdhocLeftRight(); }
+}
+
module DemoFrame(){ ////toplevel
color("red") TestFrameCase();
color("blue") intersection(){ Lid(); TestSelectLidFrame(); }