chiark / gitweb /
fairphone-case: Struts: support negative thickness for inverted objects (nfc)
[reprap-play.git] / fairphone-case.scad
index 532d6982e72a59ef2bf52734d953a67f78e240ac..52a9b31f4dd5c6c029aa803148e98792f3942d53 100644 (file)
@@ -21,8 +21,8 @@ case_th_side = 2;
 case_th_lip = 1.2;
 
 case_struts_count = 6;
-case_struts_solid_below = 0.75;
-case_struts_solid_above = 1.00;
+case_struts_solid_below = 1.00;
+case_struts_solid_above = 0.75;
 case_struts_width = 0.10;
 
 keeper_th_z = 0.75;
@@ -75,8 +75,13 @@ kppa = [ kppb[0], kppf[1] ];
 
 lpp10 = [ epp5[0] + lid_gap_x, kppc[1] + lid_gap_z ];
 lpp11 = [ lpp10[0],            epp5[1] + lid_gap_z ];
-lpp12 = [ epp4[0] + lid_lip,   lpp11[1] ];
-lpp13 = [ lpp12[0],            lpp12[1] + lid_lip ];
+
+lp_r12 = case_th_lid - (lpp11[1] - lpp10[1]);
+
+lpp12 = [ epp4[0] + lp_r12,    lpp11[1] ];
+lpp13 = [ lpp12[0],            lpp12[1] + lp_r12 ];
+
+echo(lpp13 - lpp10);
 
 // button profile
 bppM = epp4 + [0,5];
@@ -126,7 +131,7 @@ module LidEdgeProfile(){
            lpp10 + [10, 0]
            ]);
   intersection(){
-    circleat(lpp12, r=lid_lip);
+    circleat(lpp12, r=lp_r12);
     rectfromto( lpp12 + [-10,   0],
                lpp12 + [+10, +10] );
   }
@@ -240,6 +245,24 @@ module AroundEdges(fill_zstart, fill_th, fill_downwards=0){
               [phone_width, -phone_height] + [-1,+1] * phone_cnr_rad);
 }
 
+module Struts(z_min, th){
+  // if th is negative, starts at z_min and works towards -ve z
+  // and object should then be printed other way up
+  for (i= [1 : 1 : case_struts_count]) {
+    translate([0,
+              0,
+              z_min])
+      mirror([0,0, th<0 ? 1 : 0])
+      translate([0,
+              -phone_height * i / (case_struts_count+1),
+              case_struts_solid_below])
+      linear_extrude(height= abs(th)
+                    -(case_struts_solid_below+case_struts_solid_above))
+      rectfromto([               epp2i[0], -0.5 * case_struts_width ],
+                [ phone_width - epp2i[0], +0.5 * case_struts_width ]);
+  }
+}
+
 module CaseBase(){
   AroundEdges(epp3[1], case_th_bottom, 1)
     EdgeProfile();
@@ -285,15 +308,7 @@ module Case(){ ////toplevel
       rectfromto(camera_pos_tl, camera_pos_br);
 
     // struts (invisible, because they're buried in the case)
-    for (i= [1 : 1 : case_struts_count]) {
-      translate([0,
-                -phone_height * i / (case_struts_count+1),
-                epp2i[1] - case_th_bottom + case_struts_solid_below])
-       linear_extrude(height= case_th_bottom
-                      -(case_struts_solid_below+case_struts_solid_above))
-       rectfromto([               epp2i[0], -0.5 * case_struts_width ],
-                  [ phone_width - epp2i[0], +0.5 * case_struts_width ]);
-    }
+    Struts(epp2i[1] - case_th_bottom, case_th_bottom);
   }
 }