chiark / gitweb /
39b063ddacad0bb1c08197d3a7fd11bd62916ed4
[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 blockoverlapcnr = 5;
24
25 module Oval(centredist, rad) {
26   hull() {
27     translate([-centredist/2,0,0]) circle(r=rad);
28     translate([+centredist/2,0,0]) circle(r=rad);
29   }
30 }  
31
32 module Hoop(){
33   difference(){
34     hull(){
35       Oval(hcentredist, houterrad);
36       translate([0, (blockdepth + hoopthick)/2 + hinnerrad])
37         square([blockwidth,
38                 blockdepth + hoopthick],
39                center=true);
40     }
41     Oval(hcentredist, hinnerrad);
42   }
43 }
44
45 module Positive(){
46   translate([0,0, -height/2])
47     linear_extrude(height=20)
48     Hoop();
49 }
50
51 module Ribs(){
52   imax = ceil(height*2 / ribheight);
53   for (i=[-imax:imax]) {
54     hull(){
55       translate([-ribdepth/2,
56                  ribheight*i,
57                  0])
58         polygon([[0,          0],
59                  [ribdepth, -ribheight],
60                  [ribdepth, +ribheight]]);
61       translate([50, 0])
62         square([1, height*2], center=true);
63     }
64   }
65 }           
66
67 module Division(biggerpi) {
68   xgap = feedxgap * biggerpi;
69   zgap = feedzgap * biggerpi;
70
71   mirror([0,0,1]) {
72     translate([0, 0, zgap/2 * (1 - 2*biggerpi)]) {
73       translate([-ziglen + xgap/2, -100, 0])
74         cube([100, 100, 50]);
75     }
76   }
77   translate([blockwidth/2 - blockoverlapcnr, -50, -50])
78     cube([100, 100, 100]);
79
80   translate([50, houterrad + blockdepth/2 + ribsgap * biggerpi, 0])
81     rotate([-90,0,90])
82     linear_extrude(height=100)
83     Ribs();
84 }
85
86 module SDemo(){
87   //difference(){
88   %  Positive();
89   //  Division(0);
90   //}
91   Division(0);
92 }
93
94 module A(){
95   difference(){
96     Positive();
97     Division(1);
98   }
99 }
100
101 module B(){
102   intersection(){
103     Positive();
104     Division(0);
105   }
106 }
107
108 module Demo(){
109   color("red") A();
110 //  color("blue") B();
111 }
112
113 //Ribs();
114 //Demo();
115
116 //A();
117 B();
118 %Division(0);
119
120 //Demo();