]> www.fi.muni.cz Git - things.git/blob - toothbrush-holder-9x3.scad
toothbrush-holder-9x3.scad: published version
[things.git] / toothbrush-holder-9x3.scad
1 epsilon=0.01;
2 infty=400;
3
4 module cut_ellipse(height, dist, x) {
5         difference() {
6                 translate([0, dist, height/2-x])
7                         rotate([90, 0, 0])
8                         scale([0.6, 1, 1])
9                         cylinder(r=height/2, h=2);
10                 translate([0, 0, -infty/2])
11                         cube(infty, center=true);
12         };
13 };
14
15 module stem() {
16         hull() {
17                 cut_ellipse(25, 31, 4);
18                 cut_ellipse(10, 24, 6);
19         };
20         difference() {
21         union() {
22         translate([3.75, 31-epsilon, 0])
23                 rotate([0, 15, 0]) {
24                         cube([1.5, 8, 8]);
25                         difference() {
26                                 translate([1, 8, 0])
27                                         cylinder(r=2, h=8);
28                                 translate([infty/2+1.5-epsilon, 0, 0])
29                                         cube(infty, center=true);
30                         };
31                 };
32         translate([-3.75, 31-epsilon, 0])
33                 rotate([0, -15, 0]) {
34                         translate([-1.5, 0, 0])
35                         cube([1.5, 8, 8]);
36                         difference() {
37                                 translate([-1, 8, 0])
38                                         cylinder(r=2, h=8);
39                                 translate([-infty/2-1.5+epsilon, 0, 0])
40                                         cube(infty, center=true);
41                         };
42                 };
43         };
44         translate([0, 0, -infty/2])
45                 cube(infty, center=true);
46         };
47
48 /*
49         hull() {
50                 cut_ellipse(12, 40, 0.5);
51                 cut_ellipse( 8, 35, 2);
52         };
53         hull() {
54                 cut_ellipse(12, 35, 2);
55                 cut_ellipse(10, 25, 5);
56         };
57         hull() {
58                 cut_ellipse(10, 25, 5);
59                 cut_ellipse(12, 10, 4);
60         };
61 */
62         for (dist=[0:9.5:19])
63                 translate([0, dist, 0])
64                         interdental_cylinder();
65 };
66
67 module stem_minus() {
68         for (dist=[0:9.5:19])
69                 translate([0, dist, 0])
70                         interdental_hole();
71 }
72
73 module body() {
74         difference() { union() {
75         for (angle=[-24:6:24]) {
76                 translate([0, -112, 0])
77                 rotate([0, 0, angle])
78                 translate([0, 130, 0])
79                 difference() {
80                         stem();
81                         stem_minus();
82                 }
83         };
84                         
85         translate([0, -112, 0]) difference() {
86                 union() {
87                         cylinder(r=126, h=11);
88                         translate([0, 0, 11-epsilon])
89                         scale([1, 1, 0.07])
90                         sphere(r=126);
91                         difference() {
92                                 union() {
93                                         difference() {
94                                         cylinder(r=159, h=11);
95                                         translate([0,0,-infty/2])
96                                                 cylinder(r=158, h=infty);
97                                         };
98                                 };
99                         
100                 rotate([0, 0, -24])
101                         translate([infty/2, 0, 0])
102                                 cube(infty, center=true);
103                 rotate([0, 0, 24])
104                         translate([-infty/2, 0, 0])
105                                 cube(infty, center=true);
106                         };
107                 };
108                 translate([0, 112-infty/2-epsilon, 0])
109                         cube(infty, center=true);
110 /*
111                 translate([0, 0, -infty/2-epsilon])
112                         cube(infty, center=true);
113                 rotate([0, 0, -28])
114                         translate([infty/2, 0, 0])
115                                 cube(infty, center=true);
116                 rotate([0, 0, 28])
117                         translate([-infty/2, 0, 0])
118                                 cube(infty, center=true);
119 */
120         };
121         translate([-50, 1, 6])
122         rotate([0, 90, 0])
123                 cylinder(r=2.5, h=100, $fn=4);
124         };
125         rotate([-90, 0, 0])
126                 translate([0,-6,3])
127                 cylinder(r=3.5, h=55);
128         rotate([-90, 0, 0])
129                 translate([0,-6,-infty/2])
130                 cylinder(r=1.75, h=infty, $fn=6);
131         };
132 };
133
134 module interdental_hole() {
135         translate([0, 0, -infty/2])
136                 cylinder(r=4, h=infty);
137 }
138
139 module interdental_cylinder() {
140         // translate([-5.5, -5.5, 0]) cube([11, 11, 8]);
141         difference() {
142                 cylinder(r=5.5, h=11);
143                 translate([-infty/2, 0, 19])
144                         rotate([0, 90, 0])
145                                 cylinder(r=9, h=infty);
146         }
147 /*
148         difference() {
149                 translate([0, -5.50, 3])
150                 rotate([-90, 0, 0])
151                         cylinder(r=5, h=11);
152                 translate([0, 0, -infty/2-epsilon])
153                         cube(infty, center=true);
154         };
155 */
156 };
157
158
159 /*
160 for (angle=[-45:18:45]) {
161         rotate([0, 0, angle])
162                 for (dist=[30:10:60])
163                         translate([dist, 0, 0])
164                                 difference() {
165                                         interdental_cylinder();
166                                         interdental_hole();
167                                 }
168 };
169
170
171 difference() {
172         body();
173
174         rotate([-90, 0, 0])
175                 translate([0,-4,3])
176                 cylinder(r=3, h=infty);
177         rotate([-90, 0, 0])
178                 translate([0,-4,-epsilon])
179                 cylinder(r=1.5, h=infty);
180 };
181 */
182
183 body($fn=128);
184 /* 
185 difference() {
186         stem();
187         stem_minus();
188 };
189 */