summaryrefslogtreecommitdiff
path: root/pushfittery.scad
blob: ee3bbd02892c6f7650c3e9a5d4fbed0ac5f1a751 (plain)
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