chiark / gitweb /
258e3e87d6389a6fdf41087a67a774b712fa89cd
[reprap-play.git] / pull-cord-keeper.scad
1 // -*- C -*-
2
3 hoopthick = 3;
4
5 hinnerrad = 15;
6 houterrad = hinnerrad + hoopthick;
7 hcentredist = 10;
8
9 blockdepth = 5;
10 blockwidth = hcentredist*2 + 6;
11
12 height = 20;
13
14 ziglen = hcentredist/2;
15
16 feedxgap = 5;
17 feedzgap = 5;
18 ribsgap = 1;
19
20 ribdepth = 3;
21 ribheight = 4;
22
23 backxgap = 1;
24
25 blockoverlapcnr = 5;
26
27 module Oval(centredist, rad) {
28   hull() {
29     translate([-centredist/2,0,0]) circle(r=rad);
30     translate([+centredist/2,0,0]) circle(r=rad);
31   }
32 }  
33
34 module Hoop(){
35   difference(){
36     hull(){
37       Oval(hcentredist, houterrad);
38       translate([0, (blockdepth + hoopthick)/2 + hinnerrad])
39         square([blockwidth,
40                 blockdepth + hoopthick],
41                center=true);
42     }
43     Oval(hcentredist, hinnerrad);
44   }
45 }
46
47 module Positive(){
48   translate([0,0, -height/2])
49     linear_extrude(height=20)
50     Hoop();
51 }
52
53 module Ribs(){
54   imax = ceil(height*2 / ribheight);
55   for (i=[-imax:imax]) {
56     hull(){
57       translate([-ribdepth/2,
58                  ribheight*i,
59                  0])
60         polygon([[0,          0],
61                  [ribdepth, -ribheight],
62                  [ribdepth, +ribheight]]);
63       translate([50, 0])
64         square([1, height*2], center=true);
65     }
66   }
67 }           
68
69 module Division(cutmore) {
70   mirror([0,0,1]) {
71     translate([0, 0, -cutmore*feedzgap/2]) {
72       translate([-ziglen + -cutmore*feedxgap/2, -100, 0])
73         cube([100, 100, 50]);
74     }
75   }
76   translate([blockwidth/2 - blockoverlapcnr + -cutmore*backxgap/2,
77              -1,
78              -50])
79     cube([100, 100, 100]);
80
81   translate([ziglen + -cutmore*feedxgap/2,
82              -50,
83              -50])
84     cube([100, 51, 100]);
85
86   translate([50,
87              hinnerrad/2 + houterrad/2 + blockdepth/2 + -cutmore*ribsgap/2,
88              0])
89     rotate([-90,0,90])
90     linear_extrude(height=100)
91     Ribs();
92 }
93
94 module SDemo(){
95   //difference(){
96   %  Positive();
97   //  Division(0);
98   //}
99   Division(-1);
100 }
101
102 module A(){
103   difference(){
104     Positive();
105     Division(+1);
106   }
107 }
108
109 module B(){
110   intersection(){
111     Positive();
112     Division(-1);
113   }
114 }
115
116 module Demo(){
117   color("red") A();
118   color("blue") B();
119 }
120
121 //Ribs();
122 //Demo();
123
124 //A();
125 //B();
126 //%Division(+1);
127
128 //Hoop();
129
130 Demo();