chiark / gitweb /
1 // -*- C -*-
5 rnom = 7.5 / 2;
7 // alpha is slope angle, which is half of inner concave angle that
8 //  wire sits in
9 alpha = 40; // degrees
11 // mu is minimum number of cable radii that cable tangent point (line)
12 //  with splint ought to be away from edge of split
13 mu = 1/4;
15 // wall thickness, and base width as fraction of cable size
16 wall_r = 1.5 / 6.5;
17 base_r = 0.75;
19 // for cross-section calculations:
20 //
21 // origin O is at intersection of straight line segments forming walls
22 // C is centre of circle (wire x-section) (of radius r or radius 1)
23 //       which is tangent to lines
24 // T is said tangent points
25 // B is inner base point, which is extension of line from B by mu*r
27 sina = sin(alpha);
28 cosa = cos(alpha);
29 tana = sina/cosa;
31 // blah_r is blah where r=1
32 // d_AB is distance AB
33 // dy_AB is " " " vertical component
35 d_OT_r = tana;
36 d_OB_r = tana + mu;
38 d_OC_r = 1/cosa;
40 dy_OB_r = d_OB_r * sina;
42 // *0 and *1 relate to smallest and largest wire
44 // r10 is radius ratio
46 r10 = d_OC_r / dy_OB_r;
48 r0 = rnom / sqrt(r10);
49 r1 = rnom * sqrt(r10);
51 x_B_r =   d_OB_r * cosa;
52 y_B_r = -dy_OB_r;
54 x_T_r =         sina;
55 y_T_r = -tana * sina;
57 top_r = wall_r - (d_OC_r - 1);
59 wall_x_r = wall_r / tan(90-alpha);
61 top = top_r * r1;
62 basew = base_r * rnom;
64 echo("dias", r0*2, r1*2, "ratio",r1/r0);
66 module CrossSectionHalf(plus=0) {
67   difference(){
68     polygon([[-0.1,                                y_T_r * r0],
69              [x_T_r * r0,                          y_T_r * r0],
70              [x_B_r * r1,                          y_B_r * r1],
71              [x_B_r * r1 + wall_x_r * rnom + plus, y_B_r * r1],
72              [basew                        + plus, top],
73              [-0.1,                                top]]);
74     translate([0, -d_OC_r * r0])
75       circle(r = r0);
76   }
77 }
79 module CrossSection(plus=0) {
80   for (m=[0,1]) {
81     mirror([m,0])
82       CrossSectionHalf(plus);
83   }
84 }
86 module CrossSectionDemo(){ ////toplevel
87   color("black") CrossSection(2);
88   CrossSection();
89   for (rc=[["red", r1],
90            ["blue",r0]]) {
91     color(rc) translate([0, -d_OC_r * rc]) circle(r = rc);
92   }
93 }
95 strap_width = 4 + 0.5;
96 total_len = 70;
98 strap_count = 2;
100 strap_wall_h = 1.5;
101 strap_wall_l = 2.0;
103 writing_dx = total_len / 3;
104 writing_dy = basew*2;
106 module HalfClamp(){ ////toplevel
107   difference(){
108     rotate([90,0,0])rotate([0,90,0]){
109       linear_extrude(height=total_len)
110         CrossSection();
112       for (i=[0 : strap_count]){
113         if (i*2 != strap_count) {
114           translate([0, 0,
115                      total_len * (i + 0.5) / (strap_count + 1)])
116             for (m=[0,1]){
117               mirror([0,0,m])
118                 translate([0,0, strap_width/2])
119                 linear_extrude(height=strap_wall_l)
120                 CrossSection(strap_wall_h);
121             }
122         }
123       }
124     }
126     translate([0, -basew, top])
127       Commitid_BestCount([writing_dx, writing_dy]);
128   }
129 }
131 module HalfClampPrint(){ ////toplevel
132   rotate([180,0,0])
133     HalfClamp();
134 }
136 //CrossSection();
137 //CrossSectionDemo();
138 //HalfClamp();
139 HalfClampPrint();