1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
layer_height=.2;
draft = true;
use <threads.scad>;
function pf_(d,k) = d[search([k],d)[0]][1];
function pf_d(pf) = pf_(pf,"d");
function pf_h(pf) = pf_(pf,"h");
module pushfit(pf,draft=draft) {
fnd = 2*PI; epsilon=.01;
type = pf_(pf,"type");
h = pf_h(pf);
if(type=="threaded") {
minch = 25.4;
d = (pf_d(pf) + pf_(pf,"d_tolerance"))/minch;
tpi = pf_(pf,"tpi");
if(draft) cylinder(d=d*minch,h=h+epsilon);
else english_thread(diameter=d,threads_per_inch=tpi,length=h/minch+epsilon,internal=true);
slitl = d*minch+layer_height;
slitw = 0.8*d*minch/2;
echo(slitw,slitl);
translate([-slitw/2,-slitl/2,0]) cube([slitw,slitl,h+epsilon]);
}else if(type=="embedded") {
d = pf_d(pf);
h_ring = pf_(pf,"h_ring");
d_insert = pf_(pf,"d_insert");
$fn = d*fnd;
translate([0,0,h-h_ring]) cylinder(d=d,h=h_ring+epsilon);
cylinder(d=d_insert,h=h);
}else if(type=="embeddest") {
d = pf_d(pf);
id = pf_(pf,"id");
h_legspace = pf_(pf,"h_legspace");
ch = pf_(pf,"ch");
$fn = d*fnd;
cylinder(d=id,h=h+1);
cylinder(d=d,h=h_legspace);
dd = (d-id)/2;
translate([0,0,h_legspace-epsilon])
cylinder(d1=d,d2=id-2*epsilon,h=dd+epsilon);
translate([0,0,h-ch-epsilon])
cylinder(d1=id-2*epsilon,d2=id+2*ch+2,h=ch+epsilon+1);
}
}//pushfit module
|