// 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_pos = [ 13.98, 10.00 ];
+led_aperture = 8;
led_window_ledge = 0.75; // each side
noisecancelmic_pos = [ 19.54, 7.37 ]; // from rhs
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 ];
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);
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;
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 TestSelectLidFrame(){
TestSelectFrame();
+ translate([led_pos[0], -led_pos[1], -50])
+ cylinder(r= nla_r2+2, h=100);
}
module TestFrameCase(){ ////toplevel
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(); }