chiark / gitweb /
fairphone-case: prop: wip debugging, before move case instead
[reprap-play.git] / fairphone-case.scad
index 98fbe56cee7b3af2d3741fc9c8be80ecfe8cdee7..600b18f0f80840d9451677fca8b4da08162fcba4 100644 (file)
@@ -622,11 +622,12 @@ module CaseBase(){
     EdgeProfile();
 }
 
+function prop_x(gamma) = hp_k / (2 * sin(gamma/2)) - hppT[0];
+
 module PropProfile(gamma, cut=0, rot=0){ ////toplevel
   // https://en.wikipedia.org/wiki/Solution_of_triangles#Two_sides_and_the_included_angle_given_(SAS)
-  k = hp_k;
+  x = prop_x(gamma);
   p = phone_height - prlp10[0] - hppB[0];
-  x = k / (2 * sin(gamma/2)) - hppT[0];
   b = p + x;
 
   q = phone_height - hppT[0]; // prpp7[0] is 0 by definition
@@ -699,6 +700,17 @@ module PropProfile(gamma, cut=0, rot=0){ ////toplevel
   }
 }
 
+module PropAggregateProfile(){
+  for (angle = prop_angles)
+    PropProfile(angle, 0,0);
+}
+
+module Prop(){ ////toplevel
+  hw = prop_main_width/2;
+  linextr(-hw, +hw)
+    PropAggregateProfile();
+}
+
 module Case(){ ////toplevel
   difference(){
     union(){
@@ -844,6 +856,15 @@ module Lid(){ ////toplevel
 
     // screw holes in the hinge arms
     HingeScrews();
+
+    // prop recess
+    translate([prop_x_pos, -prlp10[0], prlp10[1]])
+      rotate([90,0,90])
+      linextr(-prop_recess_hw, +prop_recess_hw)
+      mirror([1,0])
+      hull()
+      for (pa = prop_angles)
+       PropProfile(pa, 1,1);
   }
 }
 
@@ -972,19 +993,6 @@ module LidPrint(){ ////toplevel
     Lid();
 }
 
-module TestSelectPropRecesses(posns){
-  linextr(-100,100){
-    translate([phone_width/2, -phone_height]){
-      square([ 3, 500 ], center=true);
-      for (y=posns)
-       hull()
-         for (dy=[ -prp5[0], -prp2[0] ])
-           translate([0,y+dy])
-             square([prop_main_width+5, 5], center=true);
-    }
-  }
-}
-
 module TestSelectFrame(){
   include = [1,-1] * (epp2i[0] + 4);
 
@@ -998,7 +1006,6 @@ module TestSelectFrame(){
 
 module TestSelectLidFrame(){
   TestSelectFrame();
-  TestSelectPropRecesses(prop_lid_posns);
 }
 
 module TestFrameCase(){ ////toplevel
@@ -1041,6 +1048,39 @@ module HingeScrews(){
   }
 }
 
+module DemoPropAngleSelect(c){
+  color(c) difference(){
+    union(){ children(); }
+    translate([ prop_x_pos, -400, -200 ])
+      cube([ 400,800,400 ]);
+  }
+}
+
+module DemoPropAngle(ang){
+  hL = [0, -(phone_height - hppT[0]), hppT[1]];
+  hC = [0, -(phone_height - hppB[0]), hppB[1] + hp_k*2];
+
+  DemoPropAngleSelect("red")  Case();
+
+  translate([0,0, -hp_k*2])
+    translate(hC)
+    rotate([-ang/2,0,0])
+    translate(-hC)
+    translate(hL)
+    rotate([-ang/2,0,0])
+    translate(-hL)
+    DemoPropAngleSelect("blue") Lid();
+
+  color("orange")
+    translate([prop_x_pos, -prlp10[0], prlp10[1]])
+    rotate([90,0,90])
+    Prop();
+}
+
+module DemoPropAngles(){ ////toplevel
+  DemoPropAngle(15);
+}
+
 module DemoFrame(){ ////toplevel
   color("red") TestFrameCase();
   color("blue") intersection(){ Lid(); TestSelectLidFrame(); }
@@ -1116,6 +1156,9 @@ module DemoProfiles(){ ////toplevel
     translate(prlp10)
       PropProfile(15, 0);
   }
+  translate([60,-30]) {
+    PropAggregateProfile();
+  }
 }
 
 //EdgeProfile();