chiark / gitweb /
d225fb1846376e6337bc2a3920afcfa8519ff515
[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 screwholedia = 4 + 0.5;
28
29 module Oval(centredist, rad) {
30   hull() {
31     translate([-centredist/2,0,0]) circle(r=rad);
32     translate([+centredist/2,0,0]) circle(r=rad);
33   }
34 }  
35
36 module VExtrude(){
37   translate([0,0, -height/2])
38     linear_extrude(height=20)
39     children(0);
40 }
41
42 module OuterOval(){
43   Oval(hcentredist, houterrad);
44 }
45
46 module Hoop(){
47   difference(){
48     hull(){
49       OuterOval();
50       translate([0, (blockdepth + hoopthick)/2 + hinnerrad])
51         square([blockwidth,
52                 blockdepth + hoopthick],
53                center=true);
54     }
55     Oval(hcentredist, hinnerrad);
56   }
57 }
58
59 module Positive(){
60   difference(){
61     VExtrude()
62       Hoop();
63
64     rotate([90,0,0])
65       translate([0,0,-50])
66       cylinder(r=screwholedia/2, h=100);
67   }
68 }
69
70 module Ribs(){
71   imax = ceil(height*2 / ribheight);
72   for (i=[-imax:imax]) {
73     hull(){
74       translate([-ribdepth/2,
75                  ribheight*i,
76                  0])
77         polygon([[0,          0],
78                  [ribdepth, -ribheight],
79                  [ribdepth, +ribheight]]);
80       translate([50, 0])
81         square([1, height*2], center=true);
82     }
83   }
84 }           
85
86 module Division(cutmore) {
87   mirror([0,0,1]) {
88     translate([0, 0, -cutmore*feedzgap/2]) {
89       translate([-ziglen + -cutmore*feedxgap/2, -100, 0])
90         cube([100, 100, 50]);
91     }
92   }
93   translate([blockwidth/2 - blockoverlapcnr + -cutmore*backxgap/2,
94              -1,
95              -50])
96     cube([100, 100, 100]);
97
98   translate([ziglen + -cutmore*feedxgap/2,
99              -50,
100              -50])
101     cube([100, 51, 100]);
102
103   translate([50,
104              hinnerrad/2 + houterrad/2 + blockdepth/2 + -cutmore*ribsgap/2,
105              0])
106     rotate([-90,0,90])
107     linear_extrude(height=100)
108     Ribs();
109 }
110
111 module SDemo(){
112   //difference(){
113   %  Positive();
114   //  Division(0);
115   //}
116   Division(-1);
117 }
118
119 module A(){
120   difference(){
121     Positive();
122     Division(+1);
123   }
124 }
125
126 module B(){
127   intersection(){
128     Positive();
129     Division(-1);
130   }
131 }
132
133 module Demo(){
134   color("red") A();
135   color("blue") B();
136 }
137
138 //Ribs();
139 //Demo();
140
141 //A();
142 //B();
143 //%Division(+1);
144
145 //Hoop();
146
147 Demo();