enable_support = 1;
+led_window_style = 3;
+// 0: no window
+// 1: simply an opening
+// 2: opening with separate cover model, for printing in clear (two colour)
+// 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
+multicolour_gap = 0.15; // each side
+
phone_cnr_rad = 6.0;
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_window_ledge = 0.75; // each side
+
noisecancelmic_pos = [ 19.54, 7.37 ]; // from rhs
noisecancelmic_dia = 4.00;
foldover_gap = 0.50;
foldover_lever_gap = 0.50;
+// properties of the hinge fasteners
hingescrew_shaft_dia = 2.0 + 0.25; // M2 x 12mm machine screw
hingescrew_shaft_len = 12;
hingescrew_fasteners_extra_thick = 0.40;
+// ^ amount of thread protruding if everything was completely nominal
+// and we are using two nuts
hingescrew_nut_access_dia = 4.72 + 0.50;
// ^ washer is 4.72 dia
// also, want to get pliers or tiny spanner in to do up locknut
hingescrew_nut_across = 3.92 + 0.25; // incl. slop around recess slop
-hingescrew_nut_thick_real = 1.93;
+hingescrew_nut_thick = 1.93;
hingescrew_head_th = 1.38 + 0.75;
hingescrew_head_dia = 3.92;
+
+hingescrew_nut_recess_portion = 2/3; // portion of nut in recess
+
lever_cover_th = 0.75;
hingemount_th = 2.5;
hingemount_wd = 4.8725;
-hingescrew_nut_recess_portion = 2/3; // portion of nut in recess
-
$fa = 5;
$fs = 0.1;
bppV = lpp11;
bppW = lpp10;
+// notification led aperture
+
+nla_r0 = led_aperture/2;
+nla_r1 = nla_r0 + led_window_ledge;
+nla_r2 = nla_r1 + multicolour_gap;
+nla_t =
+ led_window_style >= 3 ? initial_layer_thick :
+ led_window_style >= 2 ? led_window_ledge : 0;
+
+
// hinge plan
hp_rn = hingescrew_nut_access_dia/2;
hp_r2_min = hp_rn + lever_cover_th;
hex22 = hex21 + hinge_x_gap;
hex27 = hex20 + hingescrew_shaft_len;
hex24 = hex27 + hinge_x_postscrew_gap;
-hex23 = hex27 - (hingescrew_nut_thick_real*2
+hex23 = hex27 - (hingescrew_nut_thick*2
+ hingescrew_fasteners_extra_thick);
-hex26 = hex23 + hingescrew_nut_thick_real * 2/3;
+hex26 = hex23 + hingescrew_nut_thick * 2/3;
echo(hex20, hex21, hex22, hex23, hex24);
// 6, 10.8725, 10.9975, 13.74, 18.75
// ---------- modules ----------
+module AdhocMultiprintFrame(phase, z0, zs) {
+ // from z0 to z0 + zs*layer
+ extra = phase * 0.65 + 5;
+ 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;
+ p0 = [ xrange[0], yrange[0] ];
+ p1 = [ xrange[1], yrange[1] ];
+ echo(p0, p1);
+ translate([0,0, z0])
+ mirror([0,0, zs<0 ? 1 : 0])
+ linear_extrude(height= initial_layer_thick)
+ difference(){
+ rectfromto(p0 - [1,1] * initial_layer_width,
+ p1 + [1,1] * initial_layer_width);
+ rectfromto(p0, p1);
+ }
+}
+
module KeeperProfile(slant=0){
use_e = kppe + [0,-1] * slant * keeper_inner_width / keeper_slant_slope;
polygon([use_e, kppd, kppc, kppb, kppa, kppf]);
}
}
+module LidAdhocMultiprintFrame(phase){
+ if (led_window_style >= 3) {
+ AdhocMultiprintFrame(phase, lpp13[1], -1);
+ }
+}
+
module Lid(){ ////toplevel
difference(){
union(){
hull()
for (pa = prop_angles)
PropProfile(pa, 1,1);
- }
+
+ // notification led aperture
+ if (led_window_style)
+ translate([led_pos[0], -led_pos[1], lpp13[1]]) {
+ translate([0,0,-10])
+ cylinder(r=nla_r0, h=20);
+ if (led_window_style >= 2)
+ translate([0,0, -nla_t])
+ cylinder(r=nla_r2, height=20);
+ }
+
+ }
+
+ 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])