chiark / gitweb /
fairphone-case: TestLidTopAperturesPrint: make frameish
[reprap-play.git] / fairphone-case.scad
index 8ab38ee25b1420d3f48c758720c0cac4e5071d45..678ea67cea016a48739b4046521647cdbf232690 100644 (file)
@@ -21,7 +21,7 @@ led_window_style = 3;
 // 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;
@@ -40,8 +40,8 @@ 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_pos = [ 13.98, 10.00 ];
+led_aperture = 9;
 led_window_ledge = 0.75; // each side
 
 noisecancelmic_pos = [ 19.54, 7.37 ];   // from rhs
@@ -62,6 +62,8 @@ 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;
@@ -201,7 +203,8 @@ 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 ];
+         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
@@ -346,11 +349,11 @@ $prp_r10 = prl_r10;
 
 module AdhocMultiprintFrame(phase, z0, zs) {
   // from z0 to z0 + zs*layer
-  extra = phase * 0.65 + 5;
+  extra = phase * (initial_layer_width + multicolour_gap) + 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;
+  yrange = [ -phone_height + +hppB[0] - hp_r2, 0 ] + [-1,+1] * yextra;
   p0 = [ xrange[0], yrange[0] ];
   p1 = [ xrange[1], yrange[1] ];
   echo(p0, p1);
@@ -404,7 +407,8 @@ module LidEdgeProfile(){
 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();
@@ -550,12 +554,13 @@ module CaseAperture(pos, dia, $fn) {
             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;
@@ -570,9 +575,9 @@ module LidButtonishLeg(y, y_ref_sign, l=buttonishleg_default_l_is_fudge) {
 }
 
 module Buttons(){
-  Flip_rhs(1) SideButton(15.580, +1, 8.9) children(); // power
-  Flip_rhs(1) SideButton(48.700, -1, 8.920) children(); // camera
-  Flip_rhs(0) SideButton(30.800, +1, 21.96) children(); // volume
+  Flip_rhs(1) SideButton(15.580, +1, 8.9     ) children(); // power
+  Flip_rhs(1) SideButton(48.700, -1, 8.920   ) children(); // camera
+  Flip_rhs(0) SideButton(30.800, +1, 21.96, 1) children(); // volume
   Flip_rhs(   ) LidButtonishLeg(14, -1) children();
 //  Flip_rhs(0) LidButtonishLeg(20, +1, 20) children();
 }
@@ -876,7 +881,7 @@ module Case(){ ////toplevel
                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])
@@ -1016,7 +1021,7 @@ 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);
+  LidAdhocMultiprintFrame(0);
 }
 
 module LidWindowPrint(){ ////toplevel
@@ -1159,6 +1164,8 @@ module TestSelectFrame(){
 
 module TestSelectLidFrame(){
   TestSelectFrame();
+  translate([led_pos[0], -led_pos[1], -50])
+    cylinder(r= nla_r2+3, h=100);
 }
 
 module TestFrameCase(){ ////toplevel
@@ -1172,12 +1179,33 @@ module TestFrameCase(){ ////toplevel
   }
 }
 
+module TestSelectTopApertures(){
+  translate([-100, -35, -100])
+    cube([400, 100, 200]);
+  LidAdhocMultiprintFrame(0);
+  LidAdhocMultiprintFrame(1);
+}
+
 module TestTopApertures(){ ////toplevel
   intersection(){
     Case();
     TestSelectFrame();
-    translate([-100, -35, -100])
-      cube([400, 100, 200]);
+    TestSelectTopApertures();
+  }
+}
+
+module TestLidTopAperturesPrint(){ ////toplevel
+  rotate([0,180,0]) intersection(){
+    Lid();
+    TestSelectLidFrame();
+    TestSelectTopApertures();
+  }
+}
+
+module TestLidWindowTopAperturesPrint(){ ////toplevel
+  rotate([0,180,0]) intersection(){
+    LidWindow();
+    TestSelectTopApertures();
   }
 }
 
@@ -1252,6 +1280,17 @@ module DemoPropAngles(){ ////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(); }