chiark / gitweb /
poster-tube-lid: WallMountBaseFixingsTest, adjust gaps
[reprap-play.git] / laptop-sound-cable-hooks.scad
index 30a72e0015aa59bd88fe701f6a3f1bfc2081c45d..8cfd468f261a028782507be388aac9916dd3f60d 100644 (file)
@@ -3,16 +3,41 @@
 include <utils.scad>
 
 wall_th = 2;
+hook_th = 4;
+hook_hole = 4;
+hook_w_min = 6;
+hook_hook = 12;
+
+plug_entry_gap = 2.0;
 
 plug_l_d = [[ 27.78,
-             10.62 + 0.50 ],
+             10.62 + 0.75 ],
            [ 40.88,
-             8.56 + 0.50 ],
+             8.56 + 0.75 ],
            ];
 
 plug_stem = [ 2.72 + 0.50,
              5.20 + 0.50 ];
 
+palmrest_from_plug_z = 3.98;
+laptop_th = 16.31 + 0.75;
+
+tongue_len = 50;
+
+// calculated
+
+hook_th_plug_holder =
+  plug_l_d[0][1]/2 + wall_th * sin(22.5);
+
+hook_tongue_h = hook_hole + wall_th*2;
+
+plug_l_d_smallest = plug_l_d[len(plug_l_d)-1];
+plug_hook_x_min = -plug_l_d_smallest[0] - wall_th;
+plug_hook_z_start = -plug_l_d_smallest[1]/2 - wall_th;
+
+z_laptop_base = palmrest_from_plug_z - laptop_th;
+z_hook_min = z_laptop_base - hook_tongue_h;
+
 module PlugMainPlan() {
   for (l_d = plug_l_d) {
     l = l_d[0];
@@ -22,18 +47,99 @@ module PlugMainPlan() {
   }
 }
 
-module PlugBodyPlan() {
+module PlugHolderPlan() {
   intersection(){
     hull()
       offset(r= wall_th)
       PlugMainPlan();
-    rectfromto([-100,-100], [0,+100]);
+
+    rectfromto([-100,-100], [-plug_entry_gap,+100]);
   }
 }
 
-module DemoPlan() {
-  translate([0,0,-5]) color("grey") PlugBodyPlan();
-  PlugMainPlan();
+module PlugHookHookPlan(){
+  polygon([ [ plug_hook_x_min, 0 ],
+           [ plug_hook_x_min, plug_hook_z_start ],
+           [ plug_hook_x_min + (plug_hook_z_start - z_hook_min),
+             z_hook_min ],
+           [ -plug_entry_gap, z_hook_min ],
+           [ -plug_entry_gap, 0 ],
+           ]);
 }
 
-DemoPlan();
+module TonguePlan(){
+  difference(){
+    rectfromto([ -plug_entry_gap - 1, z_hook_min ],
+              [ tongue_len, z_laptop_base ]);
+    translate([ tongue_len - wall_th - hook_hole/2,
+               z_hook_min + wall_th + hook_hole/2 ])
+      circle(r = hook_hole/2);
+  }
+}
+
+module FarHookPlan(){
+  mirror([1,0,0])
+    TonguePlan();
+
+  rectfromto([ 0, z_hook_min ],
+            [ hook_w_min, palmrest_from_plug_z + 0.1]);
+
+  translate([0, palmrest_from_plug_z])
+    rectfromto([ -hook_hook, 0 ],
+              [ hook_w_min, hook_w_min ]);
+}
+
+module RotateIntersect(n=6){
+  intersection_for (r = [0:n-1]) {
+    rotate([r/n * 360,0,0])
+      linextr(-100,100) children(0);
+  }
+}
+
+module PlugHolder(){
+  difference(){
+    union(){
+      RotateIntersect(8)
+       PlugHolderPlan();
+
+      rotate([0,0,180]) {
+       linextr_y_xz(-hook_th_plug_holder/2,
+                    +hook_th_plug_holder/2)
+         PlugHookHookPlan();
+
+       linextr_y_xz(-hook_th/2,
+                    +hook_th/2)
+         TonguePlan();
+      }
+    }
+
+    RotateIntersect(6)
+      PlugMainPlan();
+
+    linextr(-plug_stem[1]/2, 100)
+      rectfromto([ -100, -plug_stem[0]/2 ],
+                [ +100, +plug_stem[0]/2 ]);
+  }
+}
+
+module PlugHolderPrint(){ ////toplevel
+  render() PlugHolder();
+}
+
+module FarHookPrint(){ ////toplevel
+  linextr(0, hook_th)
+    FarHookPlan();
+}
+
+module DemoPlan() { ////toplevel
+  translate([0,0,-10]) color("grey") PlugHolderPlan();
+  PlugMainPlan();
+  translate([0,0,-5]) color("blue") {
+    PlugHookHookPlan();
+    TonguePlan();
+  }
+
+  translate([0,40,0]) {
+    FarHookPlan();
+  }
+}