chiark / gitweb /
851b5f615f257f8718d1250ce53cdd546b1b7aba
[reprap-play.git] / cable-splice-clamp.scad
1 // -*- C -*-
2
3 cable_maxdia = 12;
4 cable_mindia = 6;
5 strap_width = 4 + 0.5;
6 total_len = 70;
7
8 wallmin = 1.5;
9
10 strap_count = 2;
11
12 strap_wall_h = 1.5;
13 strap_wall_l = 2.0;
14
15 delta_ellipse = 0.45;
16
17 // calculated
18
19 outerdia = cable_maxdia / cos(30) + wallmin*2;
20 delta_shift = 1 - delta_ellipse;
21
22 delta_shift_gap = (cable_maxdia-cable_mindia) * delta_shift;
23
24 module CrossSection(plus=0) {
25   difference(){
26     for (dx = [-plus, 0, plus])
27       translate([dx, 0])
28       circle(r= outerdia/2, $fn=6);
29
30     intersection(){
31       scale([cable_maxdia,
32              cable_maxdia * delta_shift + cable_mindia * delta_ellipse])
33         circle(r= sqrt(0.5) * delta_shift + 0.5 * delta_ellipse, $fn=4);
34       circle(r= cable_maxdia/2 * sqrt(delta_shift)
35               + cable_mindia/2 * (1-sqrt(delta_shift)),
36              $fn=20);
37     }
38
39     square(center=true, [40, delta_shift_gap]);
40   }
41 }
42
43 module CrossSectionDemo(){ ////toplevel
44   color("blue"){
45     translate([0, delta_shift_gap/2, 0]){
46       difference(){
47         circle(r = cable_maxdia/2, $fn=20);
48         circle(r = cable_mindia/2, $fn=20);
49       }
50     }
51   }
52   
53   linear_extrude(height=20)
54     CrossSection(0);
55
56   color("red")
57     linear_extrude(height=1)
58     CrossSection(2);
59 }
60
61 module CompleteClamp(){ ////toplevel
62   linear_extrude(height=total_len)
63     CrossSection();
64
65   for (i=[0 : strap_count]){
66     if (i*2 != strap_count) {
67       translate([0, 0,
68                  total_len * (i + 0.5) / (strap_count + 1)])
69         for (m=[0,1]){
70           mirror([0,0,m])
71             translate([0,0, strap_width/2])
72             linear_extrude(height=strap_wall_l)
73             CrossSection(strap_wall_h);
74         }
75     }
76   }
77 }
78
79 CrossSectionDemo();
80 //CompleteClamp();