// this case will meet your needs.
include <utils.scad>
+include <funcs.scad>
phone = [ 75.0, 145.0 ];
//fingerpushhole_dias = [ 15, 18 ];
fingerpushhole_dias = [];
+lanyard_half_dia = 1.15;
+
rearspeaker_pos_bl = [ 12.64, 18.72 ];
rearspeaker_size = [ 3.76, 7.36 ];
case_th_bottom = 2.5;
case_th_lid = 3.0;
-case_th_side = 2;
+case_th_side = 2.3;
case_th_lip = 1.2;
lid_screen_gap_extra = .66;
lid_gap_x = 0.25;
lid_gap_z = 0.25;
lid_lip = 1.75;
+lid_edgepart_width = 5.0;
+lid_buttoncover_thick = 1.3;
catch_slop = 0.50;
catch_finger_height = 1.5;
catch_finger_depth = 2.5;
+catch_topcurve_r = 5.0;
+
prop_recess_under = 0.50;
prop_recess_slop = 0.200; // each side
prop_end_dia = 0.5;
prop_prop_gap = 0.5;
prop_prong_heel_slope = 0.5;
+lid_fold_clearance_antislop = 0.5;
+
// ---------- calculated ----------
phone_width = (phone + bumper*2)[0];
lpp10 = [ epp5[0] + lid_gap_x, kppc[1] + lid_gap_z ];
lpp11 = [ lpp10[0], epp5[1] + lid_gap_z ];
-lpp14 = lpp10 + [1,0] * keeper_inner_width;
+lpp14 = lpp10 + [1,0] * max(keeper_inner_width, lid_edgepart_width);
// exact x posn not very important; must extend past end of keeper
lpp15 = [ lpp14[0],
// button profile
bppM = epp4 + [0,5];
-bppN = [ 0.5 * (epp0[0] + epp4[0]), bppM[1] ];
+bppN = [ bppM[0] + lid_buttoncover_thick, bppM[1] ];
bppR = [ bppN[0] + lid_buttoncover_gap, -button_cutout_depth ];
bppS = [ epp1[0], bppR[1] ];
bppQ = [ bppM[0], bppR[1] - lid_buttoncover_overlap ];
bppV = lpp11;
bppW = lpp10;
+echo("BUTTON COVER TH", bppO[0] - bppP[0]);
+
// notification led aperture
nla_r0 = led_aperture/2;
chk(hex23, 13.74);
chk(hex24, 18.75);
+lid_fold_clearance_skew =
+ (lpp10[1] - hppB[1]) /
+ (lpp10[0] - hppB[0]);
+
+echo("SK",lid_fold_clearance_skew);
+
// catch
cppJ = [ epp4[0] + catch_thickness, lpp10[1] ];
}
}
+module LanyardLanyardProfile(entry=false){
+ hull(){
+ for (xs=[-1,+1] * (entry ? 2 : 1))
+ translate(xs * 0.5 * lanyard_half_dia * [1,0])
+ circle(r= lanyard_half_dia/2);
+ }
+}
+
module LidEdgeProfile(){
polygon([ lpp10,
lpp11,
}
}
+module LidEdgeFoldClearanceProfile(){
+ translate([-lid_fold_clearance_antislop, 0])
+ polygon([ lpp10,
+ lpp11,
+ lpp11 + [-20, 0],
+ lpp11 + [-20, 20],
+ lpp11 + [+20, 20],
+ lpp10 + [+20, 0] ]);
+}
+
module ButtonCoverProfile(){
intersection(){
polygon(concat([ bppM, bppP, bppO, bppJ ],
mirror([1,0,0])
rotate([90,0,-90])
linear_extrude(height=x1-x0)
- children(0);
+ children();
}
-module CatchPortion(width){
- translate([phone_width/2, 0,0])
- rotate([90,0,-90])
- linextr(-width/2, width/2)
- children(0);
+module CatchPortion(xwidth, ztop){
+ width = catch_width + xwidth;
+ w = width + catch_topcurve_r*2 + 1;
+ translate([phone_width/2, 0,0]){
+ difference(){
+ rotate([90,0,-90])
+ linextr(-w/2, w/2)
+ children(0);
+ translate([0, 50, 0])
+ rotate([90,0,0])
+ linear_extrude(height=100){
+ for (m=[0,1]) mirror([m,0,0]) {
+ hull(){
+ translate([w/2, ztop - catch_topcurve_r])
+ circle(catch_topcurve_r);
+ translate([w/2, -50])
+ square(catch_topcurve_r*2, center=true);
+ }
+ }
+ }
+ }
+ }
}
module CaseBase(){
HingeScrews();
// catch striker
- CatchPortion(catch_width + catch_side_gap*2)
+ CatchPortion(catch_side_gap*2, epp4[1])
CatchCutProfile();
// prop recess
}
}
+module LidAroundEdges(){
+ AroundEdges(lpp15[1], lpp13[1] - lpp15[1], 0)
+ children();
+}
+
module Lid(){ ////toplevel
+ skew_centre = [0, lpp11[0], lpp11[1]];
difference(){
union(){
- AroundEdges(lpp10[1], lpp13[1] - lpp10[1], 0)
- LidEdgeProfile();
+ intersection(){
+ LidAroundEdges()
+ LidEdgeProfile();
+
+ translate(skew_centre)
+ multmatrix([[ 1, 0, 0, 0 ],
+ [ 0, 1, -lid_fold_clearance_skew, 0 ],
+ [ 0, 0, 1, 0 ],
+ [ 0, 0, 0, 1 ]])
+ translate(-skew_centre)
+ LidAroundEdges()
+ LidEdgeFoldClearanceProfile();
+ }
// button covers
Buttons(){
}
// hinge arms
- HingePortion(hex20, hex21) HingeLidProfile();
+ HingePortion(hex20, hex21) {
+ LidEdgeProfile();
+ HingeLidProfile();
+ }
// catch
- CatchPortion(catch_width)
+ CatchPortion(0, lpp12[1])
CatchCatchProfile();
}
Struts(lpp10[0] + strut_min_at_end, lpp13[1], -case_th_lid);
}
module DemoHingeAngles(){ ////toplevel
- angles = [ 0, 6, 12, 16, 24, 36 ];
+ angles = [ 0, 4, 8, 12 ];
echo("angles",angles);
for (i=[0 : len(angles)-1]) {
translate(i * [0, 0, 30]) {
%EdgeProfile();
KeeperProfile();
translate([0,0,-1]) color("black") KeeperProfile(1);
+ color("purple") translate(epp2i)
+ rotate(atan2vector(epp2i - epp1)) {
+ translate(lanyard_half_dia * 0.5 * [-3,-1])
+ LanyardLanyardProfile();
+ translate(lanyard_half_dia * 0.5 * [-3,+1])
+ translate([0,-1] * case_th_side)
+ LanyardLanyardProfile(true);
+ }
translate([20,0]) {
LidEdgeProfile();