chiark / gitweb /
c23c9367563383aa174adc6f4f827aa609449160
[reprap-play.git] / cable-splice-clamp.scad
1 // -*- C -*-
2
3 include <commitid.scad>
4
5 rnom = 9;
6
7 // alpha is slope angle, which is half of inner concave angle that
8 //  wire sits in
9 alpha = 40; // degrees
10
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;
14
15 // wall thickness, and base width as fraction of cable size
16 wall_r = 1.5 / 6.5;
17 base_r = 0.75;
18
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
26
27 sina = sin(alpha);
28 cosa = cos(alpha);
29 tana = sina/cosa;
30
31 // blah_r is blah where r=1
32 // d_AB is distance AB
33 // dy_AB is " " " vertical component
34
35 d_OT_r = tana;
36 d_OB_r = tana + mu;
37
38 d_OC_r = 1/cosa;
39
40 dy_OB_r = d_OB_r * sina;
41
42 // *0 and *1 relate to smallest and largest wire
43 // r[01] is radius
44 // r10 is radius ratio
45
46 r10 = d_OC_r / dy_OB_r;
47
48 r0 = rnom / sqrt(r10);
49 r1 = rnom * sqrt(r10);
50
51 x_B_r =   d_OB_r * cosa;
52 y_B_r = -dy_OB_r;
53
54 x_T_r =         sina;
55 y_T_r = -tana * sina;
56
57 top_r = wall_r - (d_OC_r - 1);
58
59 echo(r0,r1, "ratio",r1/r0);
60
61 module CrossSection(plus=0) {
62   difference(){
63     polygon([[-0.1,                         y_T_r * r0],
64              [x_T_r * r0,                   y_T_r * r0],
65              [x_B_r * r1,                   y_B_r * r1],
66              [x_B_r * r1 + wall_r * rnom,   y_B_r * r1],
67              [base_r * rnom,                top_r * rnom],
68              [-0.1,                         top_r * rnom]]);
69     translate([0, -d_OC_r * r0])
70       circle(r = r0);
71   }
72 }
73
74 module CrossSectionDemo(){ ////toplevel
75   CrossSection();
76   for (rc=[["red", r1],
77            ["blue",r0]]) {
78     color(rc[0]) translate([0, -d_OC_r * rc[1]]) circle(r = rc[1]);
79   }
80 }
81
82 //CrossSection();
83 CrossSectionDemo();