chiark / gitweb /
fairphone-case: one keeper
[reprap-play.git] / fairphone-case.scad
index bfa7d41242f2e5259d873e99aedfc190c2836a89..c0aae507e7a8a0cdd8cbe28e03fb50d3e9364eac 100644 (file)
@@ -1,6 +1,6 @@
 // -*- C -*-
 
-phone_height = 146.5;
+phone_height = 146.5 - .80;
 phone_width = 76.75;
 
 phone_cnr_rad = 4.0;
@@ -9,7 +9,7 @@ phone_edge_thick = 9.0;
 phone_total_thick = 12.0;
 phone_backside_slope = 1.0; // larger means shallower
 
-camera_pos_tl = [  7.5, 13.5 ]; // measured from tl corner
+camera_pos_tl = [  7.0, 13.0 ]; // measured from tl corner
 camera_pos_br = [ 24.0, 39.5 ]; // tl/br as seen from back
 
 case_th_bottom = 2;
@@ -23,7 +23,7 @@ keeper_inner_width = 1.75;
 keeper_inner_height = 1.75;
 
 keeper_gap_z_top = 0.25;
-keeper_gap_z_bot = 0.25;
+keeper_gap_z_bot = 0.75;
 keeper_gap_x     = 0.25;
 keeper_gap_x_holes = 0.75;
 
@@ -76,7 +76,7 @@ module KeeperProfile(){
 module EdgeProfile(){
   difference(){
     hull(){
-      circleat(epp3, r=case_th_bottom);
+      translate(epp3) square(case_th_bottom*2, center=true);
       circleat(epp2, r=case_th_bottom);
       circleat(epp1, r=case_th_side);
       rectfromto(epp0, epp4);
@@ -121,13 +121,13 @@ module CaseBase_botflip() {
   }
 }  
 
-module CaseBase(){
+module AroundEdges(fill_zstart, fill_th, fill_downwards=0){
   // sides
   CaseBase_rhsflip(){
     translate([0, -phone_cnr_rad, 0])
       rotate([90,0,0])
       linear_extrude(height = phone_height - phone_cnr_rad*2)
-      EdgeProfile();
+      children(0);
   }
   // corners
   CaseBase_rhsflip() CaseBase_botflip() {
@@ -137,7 +137,7 @@ module CaseBase(){
          intersection(){
            mirror([1,0,0])
              translate([-1,0] * phone_cnr_rad)
-             EdgeProfile();
+             children(0);
            rectfromto([0,-20],[10,20]);
          }
        translate([-10, 0, -20] + 0.01 * [+1,-1, 0] )
@@ -149,22 +149,36 @@ module CaseBase(){
     translate([ phone_width - phone_cnr_rad, 0,0 ])
       rotate([90,0,-90])
       linear_extrude(height = phone_width - phone_cnr_rad*2)
-      EdgeProfile();
+      children(0);
   }
   // fill
-  translate([0,0, epp3[1]])
-    mirror([0,0, 1])
-    linear_extrude(height = case_th_bottom)
+  translate([0,0, fill_zstart])
+    mirror([0,0, fill_downwards])
+    linear_extrude(height = fill_th)
     rectfromto([+1,-1] * phone_cnr_rad,
               [phone_width, -phone_height] + [-1,+1] * phone_cnr_rad);
 }
 
+module CaseBase(){
+  AroundEdges(epp3[1], case_th_bottom, 1)
+    EdgeProfile();
+}
+
 module Case(){ ////toplevel
   difference(){
-    CaseBase();
+    union(){
+      CaseBase();
+      intersection(){
+       rotate([90, 0, 0])
+         linear_extrude(height = phone_height + phone_cnr_rad * 2)
+         KeeperProfile();
+       hull()
+         CaseBase();
+      }
+    }
 
-    // slots for keeper
-    CaseBase_rhsflip()
+    // slot for keeper
+    CaseBase_rhsflip(1)
       translate([0, -phone_cnr_rad, 0])
       rotate([90, 0, 0])
       linear_extrude(height = phone_height + phone_cnr_rad * 2)
@@ -183,6 +197,11 @@ module Case(){ ////toplevel
   }
 }
 
+module Lid(){ ////toplevel
+  AroundEdges(lpp10[1], lpp13[1] - lpp10[1], 0)
+    LidEdgeProfile();
+}
+
 module TestLength(){ ////toplevel
   intersection(){
     Case();