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