chiark / gitweb /
fairphone-case: led window: introduce and add AdhocMultiprintFrame
[reprap-play.git] / fairphone-case.scad
index f248e538ea4e15b234976ef39c72bfd5fa969d58..c0df34586c8f547aa319c0e852f1871676bb8ab3 100644 (file)
@@ -14,6 +14,16 @@ bumper = [ 0.250, -0.025 ];
 
 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;
@@ -29,6 +39,10 @@ camera_pos_br = [ 22.300, 37.600 ]; // tl/br as seen from back
 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
+
 noisecancelmic_pos = [ 19.54, 7.37 ];   // from rhs
 noisecancelmic_dia = 4.00;
 
@@ -76,9 +90,12 @@ catch_slop = 0.50;
 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
@@ -86,12 +103,13 @@ hingescrew_nut_across = 3.92 + 0.25; // incl. slop around recess slop
 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;
 
@@ -200,6 +218,16 @@ bppU = [ bppJ[0], lpp12[1] ];
 bppV = lpp11;
 bppW = lpp10;
 
+// notification led aperture
+
+nla_r0 = led_aperture/2;
+nla_r1 = nla_r0 + led_windowledge;
+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;
@@ -303,6 +331,26 @@ $prp_r10 = prl_r10;
 
 // ---------- 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])
+    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]);
@@ -904,6 +952,21 @@ module Lid(){ ////toplevel
       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);
+      }
+
+    }
+
+  if (led_window_style >= 3) {
+    AdhocMultiprintFrame(1, lpp13[1], -1);
   }
 }