phone_edge_thick = 11.25;
-// xxx this is all wrong
-camera_pos_tl = [ 6.450, 12.750 ]; // measured from tl corner
-camera_pos_br = [ 22.300, 37.600 ]; // tl/br as seen from back
+camera_pos_tl = [ 6.600, 6.750 ]; // from tl corner (as seen from back)
+camera_edge_rad = 9.750;
+camera_sz = 32.920 + .750;
// this is disabled, FP4 doesn't have one
jack_pos = [ 13.83, 8.485 ];
jack_dia = 10.64 + .5; // some jack I had lying around
// this led stuff, is irrelevant, we have disabled it as it doesn't have one
-led_pos = [ 13.98, 10.00 ];
+led_pos = []; // [ 13.98, 10.00 ];
led_aperture = 9;
led_window_ledge = 0.75; // each side
-noisecancelmic_pos = [ 15.08, 4.35 ]; // from rhs, from top edge
+noisecancelmic_pos = [ 15.08 + .720, 4.35 ]; // from rhs, from top edge
noisecancelmic_dia = 4.00;
-lhshole_pos = [ phone[1]/2, 4.35 ];
+mainmic_pos = [ 20.5, 4.65 ]; // from lhs, from top edge
+mainmic_dia = 4.00;
-// fingerpushhole_dias = []; xxx what was this
-fingerpushhole_dias = [ 15, 18 ];
+lhshole_pos = [ phone[1]/2 + 0.40, 4.35 ];
+
+// fingerpushhole_dias = [];
+fingerpushhole_dias = [ 15, 18 ]; // this is for testing
lanyard_half_dia = 1.15;
lanyard_entry_rel_breadth = 2;
lanyard_channel_len = 8;
-rearspeaker_pos_bl = [ 12.64, 18.72 ];
-rearspeaker_size = [ 3.76, 7.36 ];
+//rearspeaker_pos_bl = [ 12.64, 18.72 ];
+//rearspeaker_size = [ 3.76, 7.36 ];
-bottomspeaker_size = [ 11.35, 1.40 ] + [1,1] * 1.0;
-bottomspeaker_pos = [ 19.45, 4.82 ];
+bottomspeaker_size = [ 12.35, 1.40 ] + [1,1] * 0.5;
+bottomspeaker_pos = [ 18.05, 5.52 ]; // from rhs, from top
microusb_above = 1.64 - 0.25;
microusb_below = 2.42;
keeper_gap_z_bot = 0.75;
keeper_gap_x = 0.25;
keeper_gap_x_holes = 0.75;
+keeper_fatter = 0.30;
+keeper_fatter_hole = 1.20;
keeper_side = 0; // 0 = lhs; 1 = rhs
foldover_gap = 0.50;
foldover_lever_gap = 0.50;
-// xxx replace hinge screw with nail plan
-
// properties of the hinge fasteners
-hingescrew_shaft_dia = 2.0 + 0.25; // M2 x 12mm machine screw
-hingescrew_shaft_len = 12;
+hingescrew_shaft_dia = 1.600 + 0.45; // beading wire
+hingescrew_shaft_len = 10;
hingescrew_fasteners_extra_thick = 0.40;
// ^ amount of thread protruding if everything was completely nominal
// and we are using two nuts
hinge_x_postscrew_gap = 0.75;
hinge_x_arms_gap = 0.35;
hinge_r_arms_gap = 0.55;
-hinge_over_nut_plate = 1.0;
+hinge_over_nut_plate = -0.50; // bodge apropos slope
-// xxx there isn't one of these, speaker is by hinge
-rearspeaker_gap = [ 2.0, 2.0 ]; // each side
+// there isn't one of these, speaker is by hinge
+// rearspeaker_gap = [ 2.0, 2.0 ]; // each side
thumbrecess_depth = 1.3;
thumbrecess_width = 16.5;
//prop_recess_width = prop_main_th / cos(prop_max_angle) + prop_backfwd_gap;
-//lid_lip_overlap_width xxx bad name = ;
-//lid_lip_inner_slope = [ 5, 5 ]; // xxx
-
epp0 = [0,0];
epp1 = [0, -phone_edge_thick];
epp2i = epp1; // conflated for FP4
+ hingescrew_fasteners_extra_thick);
hex26 = hex23 + hingescrew_nut_thick * 2/3;
-echo(hex20, hex21, hex22, hex23, hex24);
-// 6, 10.8725, 10.9975, 13.74, 18.75
-module chk(act,exp) {
- if (abs(act-exp) > 1e-9) echo("WRONG", act, exp);
- else echo("ok", act);
-}
-chk(hex20, 6);
-chk(hex21, 10.8725);
-chk(hex22, 10.9975);
-chk(hex23, 13.74);
-chk(hex24, 18.75);
+//echo(hex20, hex21, hex22, hex23, hex24);
+//// 6, 10.8725, 10.9975, 13.74, 18.75
+//module chk(act,exp) {
+// if (abs(act-exp) > 1e-9) echo("WRONG", act, exp);
+// else echo("ok", act);
+//}
+//chk(hex20, 6);
+//chk(hex21, 10.8725);
+//chk(hex22, 10.9975);
+//chk(hex23, 13.74);
+//chk(hex24, 18.75);
lid_fold_clearance_skew =
(lpp10[1] - hppB[1]) /
}
}
-module KeeperProfile(slant=0){
+module KeeperProfile(fatter, slant=0){
use_e = kppe + [0,-1] * slant * keeper_inner_width / keeper_slant_slope;
- polygon([use_e, kppd, kppc, kppb, kppa, kppf]);
+ polygon([use_e + [+1,-1] * fatter,
+ kppd + [ 0,-1] * fatter,
+ kppc,
+ kppb,
+ kppa,
+ kppf + [+1, 0] * fatter
+ ]);
}
module EdgeProfile(){
Flip_rhs(1) SideButton(64.220, +1, 14.500 ) children(); // power
Flip_rhs(1) LidButtonishLeg(14, -1) children();
Flip_rhs(0) LidButtonishLeg(21, -1) children();
- Flip_rhs(0) LidButtonishLeg(14, +1) children();
- // xxx need hole for whatever that hole is on lhs
+ Flip_rhs(0) LidButtonishLeg(21, +1) children();
}
module Struts(x_start, z_min, th){
}
module OrdinaryBottomEdgeApertures(){
+ Flip_bot(1)
+ CaseAperture(mainmic_pos, mainmic_dia, 8);
+
Flip_bot(1) Flip_rhs(1) {
linextr_y_xz(-epp2i[0], 60)
hull()
module OrdinaryRearApertures(){
// rear speaker
- OrdinaryRearAperture(1,1, rearspeaker_pos_bl)
- rectfromto(-rearspeaker_gap,
- rearspeaker_size + rearspeaker_gap);
+ // OrdinaryRearAperture(1,1, rearspeaker_pos_bl)
+ // rectfromto(-rearspeaker_gap,
+ // rearspeaker_size + rearspeaker_gap);
+}
+module NotInTestFrameRearApertures(){
// finger hole to remove phone
if (len(fingerpushhole_dias))
- OrdinaryRearAperture(1,0, [ fingerpushhole_dias[0]/2 + epp2i[0],
+ OrdinaryRearAperture(0,0, [ fingerpushhole_dias[0] + epp2i[0],
phone[1]/2 ])
scale(fingerpushhole_dias)
circle(r= 0.5 );
module RearCameraAperture(){
Flip_rhs(1)
mirror([0, 0, 1])
+ translate([0,0,0])
+ hull() // there is some kind of bug if hull() is done in 2D here!
linear_extrude(height = 20)
mirror([0, 1, 0])
translate(bumper)
- rectfromto(camera_pos_tl, camera_pos_br);
+ translate(camera_pos_tl)
+ for (xy = [ [0,0], [0,1], [1,0] ]) {
+ translate(
+ camera_edge_rad * [1,1] +
+ xy * (camera_sz - camera_edge_rad * 2)
+ )
+ circle(r = camera_edge_rad);
+ }
}
module HingeLidProfile(){
Flip_rhs(1-keeper_side) intersection(){
rotate([90, 0, 0])
linear_extrude(height = phone_height + phone_cnr_rad * 2)
- KeeperProfile(1);
+ KeeperProfile(fatter=0, slant=1);
// outline of the whole case, to stop it protruding
translate([0,0, -25])
rotate([90, 0, 0])
linear_extrude(height = phone_height + phone_cnr_rad * 2)
minkowski(){
- KeeperProfile();
+ KeeperProfile(fatter=keeper_fatter_hole);
rectfromto([ -keeper_gap_x, -keeper_gap_z_bot ],
[ keeper_gap_x_holes, +keeper_gap_z_top ]);
}
OrdinaryBottomEdgeApertures();
OrdinaryRearApertures();
+ NotInTestFrameRearApertures();
MicroUSBEtc();
HingeLeverOuterProfile();
// space for the screws
- HingePortion(hex26, hex24)
- HingeLeverInnerProfile();
+// HingePortion(hex26, hex24)
+// HingeLeverInnerProfile();
// recesses for the nuts
- HingePortion(hex23, hex26+1)
- HingeLeverNutProfile();
+// HingePortion(hex23, hex26+1)
+// HingeLeverNutProfile();
// bores for the screws
HingeScrews();
translate([0, -phone_cnr_rad, 0])
rotate([90, 0, 0])
linear_extrude(height = phone_height - phone_cnr_rad * 2)
- KeeperProfile();
+ KeeperProfile(fatter=keeper_fatter);
}
module OneKeeperPrint(){ ////toplevel
linear_extrude(height=200)
rectfromto(include, inside_br - include);
}
+
+ for (i= [1,2]) {
+ translate([ 0, -phone[1] * i/3, 0 ])
+ cube(center=true, [1000, 4, 100]);
+ }
}
module TestSelectLidFrame(){
TestSelectFrame();
- translate([led_pos[0], -led_pos[1], -50])
+ if (len(led_pos))
+ translate([led_pos[0], -led_pos[1], -50])
cylinder(r= nla_r2+3, h=100);
}