19 plug_stem = [ 2.72 + 0.50,
22 palmrest_from_plug_z = 3.98;
23 laptop_th = 16.31 + 0.75;
30 plug_l_d[0][1]/2 + wall_th * sin(22.5);
32 hook_tongue_h = hook_hole + wall_th*2;
34 plug_l_d_smallest = plug_l_d[len(plug_l_d)-1];
35 plug_hook_x_min = -plug_l_d_smallest[0] - wall_th;
36 plug_hook_z_start = -plug_l_d_smallest[1]/2 - wall_th;
38 z_laptop_base = palmrest_from_plug_z - laptop_th;
39 z_hook_min = z_laptop_base - hook_tongue_h;
41 module PlugMainPlan() {
42 for (l_d = plug_l_d) {
45 rectfromto([ -l, -d/2 ],
50 module PlugHolderPlan() {
56 rectfromto([-100,-100], [-plug_entry_gap,+100]);
60 module PlugHookHookPlan(){
61 polygon([ [ plug_hook_x_min, 0 ],
62 [ plug_hook_x_min, plug_hook_z_start ],
63 [ plug_hook_x_min + (plug_hook_z_start - z_hook_min),
65 [ -plug_entry_gap, z_hook_min ],
66 [ -plug_entry_gap, 0 ],
72 rectfromto([ -plug_entry_gap - 1, z_hook_min ],
73 [ tongue_len, z_laptop_base ]);
74 translate([ tongue_len - wall_th - hook_hole/2,
75 z_hook_min + wall_th + hook_hole/2 ])
76 circle(r = hook_hole/2);
84 rectfromto([ 0, z_hook_min ],
85 [ hook_w_min, palmrest_from_plug_z + 0.1]);
87 translate([0, palmrest_from_plug_z])
88 rectfromto([ -hook_hook, 0 ],
89 [ hook_w_min, hook_w_min ]);
92 module RotateIntersect(n=6){
93 intersection_for (r = [0:n-1]) {
94 rotate([r/n * 360,0,0])
95 linextr(-100,100) children(0);
106 linextr_y_xz(-hook_th_plug_holder/2,
107 +hook_th_plug_holder/2)
110 linextr_y_xz(-hook_th/2,
119 linextr(-plug_stem[1]/2, 100)
120 rectfromto([ -100, -plug_stem[0]/2 ],
121 [ +100, +plug_stem[0]/2 ]);
125 module PlugHolderPrint(){ ////toplevel
126 render() PlugHolder();
129 module FarHookPrint(){ ////toplevel
134 module DemoPlan() { ////toplevel
135 translate([0,0,-10]) color("grey") PlugHolderPlan();
137 translate([0,0,-5]) color("blue") {
142 translate([0,40,0]) {