chiark / gitweb /
cable-splice-clamp: make right way up (!)
[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 delta_shift = 1 - delta_ellipse;
20
21 roundoff_rad = cable_maxdia/2 * sqrt(delta_shift)
22               + cable_mindia/2 * (1-sqrt(delta_shift));
23
24 outerdia = 2*(roundoff_rad / cos(30) + wallmin);
25
26 delta_shift_gap = (cable_maxdia-cable_mindia) * delta_shift;
27
28 module CrossSection(plus=0) {
29   difference(){
30     for (dx = [-plus, 0, plus])
31       translate([dx, 0])
32       circle(r= outerdia/2, $fn=6);
33
34     intersection(){
35       scale([cable_maxdia,
36              cable_maxdia * delta_shift + cable_mindia * delta_ellipse])
37         circle(r= sqrt(0.5) * delta_shift + 0.5 * delta_ellipse, $fn=4);
38       circle(r= roundoff_rad, $fn=20);
39     }
40
41     square(center=true, [40, delta_shift_gap]);
42   }
43 }
44
45 module CrossSectionDemo(){ ////toplevel
46   color("blue"){
47     translate([0, delta_shift_gap/2, 0]){
48       difference(){
49         circle(r = cable_maxdia/2, $fn=20);
50         circle(r = cable_mindia/2, $fn=20);
51       }
52     }
53   }
54   
55   linear_extrude(height=20)
56     CrossSection(0);
57
58   color("red")
59     linear_extrude(height=1)
60     CrossSection(2);
61 }
62
63 module CompleteClamp(){ ////toplevel
64   linear_extrude(height=total_len)
65     CrossSection();
66
67   for (i=[0 : strap_count]){
68     if (i*2 != strap_count) {
69       translate([0, 0,
70                  total_len * (i + 0.5) / (strap_count + 1)])
71         for (m=[0,1]){
72           mirror([0,0,m])
73             translate([0,0, strap_width/2])
74             linear_extrude(height=strap_wall_l)
75             CrossSection(strap_wall_h);
76         }
77     }
78   }
79 }
80
81 module HalfPrint(){ ////toplevel
82   rotate([0,180,0]){
83     intersection(){
84       rotate([-90,0,-90])
85         CompleteClamp();
86       translate([-100,-100,0]) cube([1000,200,200]);
87     }
88   }
89 }
90
91 //CrossSectionDemo();
92 //CompleteClamp();
93 HalfPrint();