chiark / gitweb /
2c54245561f4bf16380f93ba731c53078e5f2856
[reprap-play.git] / filamenttrestle.scad
1 // -*- C -*-
2
3 spoolwidth = 80; // fixme needs to be measured
4 trestleheight = 80; // fixme needs to be checked
5 trestlebase = 80; // fixme needs to be checked
6
7 include <doveclip.scad>
8 include <axlepin.scad>
9
10 spoolinnerslop = 2;
11
12 barrad = 7;
13 barwasherrad = 17;
14
15 legw = 12;
16 plugl = 20;
17 plugwmin = 3;
18 plugh = 10;
19 plugslope = 0.5;
20 plugwmax = plugwmin + plugh * plugslope * 2;
21
22 trestlelegw = 10;
23 trestlebaseh = 10;
24 trestleplugd = 1;
25
26 topblockthick = 4;
27 topblockbasedepth = 5;
28
29 pinbasew = 5.0;
30 pinminh = 1.5;
31 pinmaxh = 4.5;
32 pindh = 0.50;
33 pindwidth = 0.75;
34
35 pintaperlen = plugwmax * 0.85;
36 pinstraightlen = 10;
37
38 spoolouterpad = AxlePin_holerad()*2 * 1.5;
39 spoolbarlen = spoolwidth +
40   2*(Washer_thick() + AxlePin_holerad() + spoolinnerslop + spoolouterpad);
41   barz = barrad * 0.5;
42 axlepin_x = spoolwidth/2 + Washer_thick() + spoolinnerslop +
43   AxlePin_holerad()*0.5;
44
45 module Plug(d=0){
46   dw = d;
47   dh = d;
48   dhb = d*2;
49   a = atan(plugslope);
50   bdy = -dhb;
51   bdx = dw / cos(a) + bdy * plugslope;
52   tdy = dh;
53   tdx = bdx + tdy * plugslope;
54   translate([-d,0,0]) rotate([90,0,90]) linear_extrude(height=plugl+0.1+d*2){
55     polygon([[-(plugwmin/2 + bdx),  bdy],
56              [-(plugwmax/2 + tdx),  plugh + tdy],
57              [+(plugwmax/2 + tdx),  plugh + tdy],
58              [+(plugwmin/2 + bdx),  bdy]]);
59   }
60 }
61
62 module Bar(){ ////toplevel
63   spoolw = spoolbarlen;
64   biggestw = spoolw + 50;
65
66   intersection(){
67     for (mir=[0,1]) {
68       mirror([mir,0,0]) {
69         translate([spoolw/2, 0, 0])
70           Plug();
71         translate([-1, -50, -50])
72           cube([spoolw/2+1.1, 100, 100]);
73       }
74     }
75     difference(){
76       translate([-biggestw/2, -50, 0])
77         cube([biggestw, 100, 100]);
78       for (mir=[0,1]) {
79         mirror([mir,0,0])
80           translate([axlepin_x, 0, -50])
81           cylinder(r=AxlePin_holerad(), 100, $fn=15);
82       }
83     }
84     translate([0,0,barz]) {
85       translate([-100,0,0])
86         rotate([0,90,0]) cylinder(r=barrad, h=200, $fn=30);
87     }
88   }
89 }
90
91 module FtAxlePin(){ ////toplevel
92   AxlePin(barrad, (barrad + barwasherrad*2)/3 * 2);
93 }
94
95 module AxleWasher(){ ////toplevel
96   Washer(barrad, barwasherrad);
97 }
98
99 module Trestle(){ ////toplevel
100   legang = atan2(trestlebase/2, trestleheight);
101   eplen = sqrt(trestleheight*trestleheight + trestlebase*trestlebase*0.25);
102   topblockw = plugwmax + trestleplugd*2 + topblockthick*2;
103
104   pinholebasew = pinbasew + pindwidth*2;
105   pinholeh =     pinmaxh +  pindh;
106
107   difference(){
108     union(){
109       for (mir=[0,1]) {
110         mirror([mir,0,0]) {
111           rotate([0,0, -90-legang])
112             ExtenderPillars(length=eplen+trestlelegw,
113                             width=trestlelegw,
114                             height=legw,
115                             baseweb=true);
116
117           translate([-trestlebase/2, -trestleheight, 0])
118             cylinder(r=trestlelegw/2*1.2, h=plugl);
119         }
120       }
121       translate([-topblockw/2, -topblockbasedepth, 0])
122         cube([topblockw,
123               topblockbasedepth + plugh + topblockthick
124               + (pinmaxh - pinminh)*0.6 + pindh,
125               plugl]);
126
127       translate([-trestlebase/2, -trestleheight, 0])
128         ExtenderPillars(length=trestlebase, width=trestlebaseh*2, height=legw);
129     }
130     translate([-300, -trestleheight-50, -1])
131       cube([600, 50, plugl+2]);
132
133     rotate([-90,-90,0])
134       Plug(d=trestleplugd);
135
136     for (rot=[0,180]) {
137       translate([0,0,plugl/2]) rotate([0,rot,0]) translate([0,0,-plugl/2]) {
138         translate([-(topblockw*0.25+1),
139                    plugh + pindh - (pinmaxh - pinminh)*0.75,
140                    (plugl - pinholebasew*2)/3]) {
141           translate([0,0,pinholebasew/2]) rotate([-90,0,0]) %Pin();
142           rotate([0,90,0]) {
143             linear_extrude(height = topblockw*1.0+2) {
144               polygon([[-1.0 * pinholebasew, -0.01],
145                        [-0.5 * pinholebasew, pinholeh],
146                        [ 0                 , -0.01]]);
147             }
148           }
149         }
150       }
151     }
152   }
153 }
154
155 module Pin(){ ////toplevel
156   rotate([90,0,90]) {
157     hull(){
158       for (mir=[0,1]) {
159         mirror([mir,0,0]) {
160           linear_extrude(height=0.1) {
161             polygon([[-0.01, 0],
162                      [-0.01, pinminh],
163                      [pinbasew*0.5*(pinminh/pinmaxh), 0]]);
164           }
165           translate([0,0,pintaperlen])
166             linear_extrude(height=pinstraightlen) {
167             polygon([[-0.01, 0],
168                      [-0.01, pinmaxh],
169                      [pinbasew*0.5, 0]]);
170           }
171         }
172       }
173     }
174   }
175 }
176
177 module TestKit(){ ////toplevel
178   translate([30,0,0]) Pin();
179   translate([30,30,0]) Pin();
180   translate([0,40,0]) intersection(){
181     Trestle();
182     translate([-50,-10,-1]) cube([100,100,100]);
183   }
184   intersection(){
185     translate([-60,0,0]) Bar();
186     cube(50,center=true);
187   }
188 }
189
190 module Demo(){
191   %Bar();
192   for (mir=[0,1]) {
193     mirror([mir,0,0]) {
194       %translate([spoolbarlen/2,0,0]) rotate([90,0,90]) Trestle();
195       translate([spoolwidth/2 + spoolinnerslop/4, 0, barz])
196         rotate([0,90,0]) AxleWasher();
197       translate([axlepin_x, 0, barz]) rotate([90,0,90]) FtAxlePin();
198     }
199   }
200 }
201
202 //Bar();
203 //FtAxlePin();
204 //AxleWasher();
205 //Trestle();
206 //Pin();
207 //TestKit();
208 //Plug(d=1);
209 //ExtenderPillars(80,12,8, baseweb=true);
210 Demo();