Cosmetic changes
[3dmodels/seg_digit.git] / seg_digit.scad
1 /*
2  * seg_digit.scad : 7 segment and 16 segment digit generation library
3  * 
4  * Author : Jose Ignacio Croce Busquets <jose.croce@gmail.com>
5  *
6  * Date : 08-DEC-2013
7  *
8  */
9
10 /* Segment length based on digit height */
11 function segment_length(height) = height / 2;
12
13 /* digit height based on segment length */
14 function digit_height(seglen) = 2 * seglen;
15
16 /* Segment radius based on segment length */
17 function segment_radius(seglen) = seglen / 10;
18
19 /* Position (horiz) for next digit based on digit length */
20 function digit_spacing(height) = segment_length(height) * 1.5;
21
22 /* Draws a single segment
23  *  h    segment length
24  *  r    segment radius (default = segment_radius(h))
25  */
26 module segment(h, r = 0)
27 {
28  radius = (r == 0) ? segment_radius(h) : r;
29  length = (h > 2 * radius) ? h - 2 * radius : 0;
30  polyhedron(points = [ [                   0,       0,      0 ]
31                      , [     radius         ,  radius,      0 ]
32                      , [     radius + length,  radius,      0 ]
33                      , [ 2 * radius + length,       0,      0 ]
34                      , [     radius + length, -radius,      0 ]
35                      , [     radius         , -radius,      0 ]
36                      , [     radius         ,       0, radius ]
37                      , [     radius + length,       0, radius ]
38                      ]
39        , triangles = [ [ 0, 1, 6 ]
40                      , [ 1, 2, 6 ]
41                      , [ 2, 7, 6 ]
42                      , [ 2, 3, 7 ]
43                      , [ 3, 4, 7 ]
44                      , [ 4, 5, 7 ]
45                      , [ 5, 6, 7 ]
46                      , [ 0, 6, 5 ]
47                      , [ 0, 5, 1 ]
48                      , [ 1, 5, 4 ]
49                      , [ 1, 4, 2 ]
50                      , [ 2, 4, 3 ]
51                      ]);
52 }
53
54 /* Draws A segment (top)
55  *  h    segment length
56  */
57 module segment_a(h)
58 {
59  translate(v = [ 0, digit_height(h), 0 ])
60    segment(h);
61 }
62
63 /* Draws B segment (right top)
64  *  h    segment length
65  */
66 module segment_b(h)
67 {
68  translate(v = [ 0, h, 0 ])
69    segment_c(h);
70 }
71
72 /* Draws C segment (right bottom)
73  *  h    segment length
74  */
75 module segment_c(h)
76 {
77  translate(v = [ h, h, 0 ])
78    rotate(a = [ 0, 0, 270 ])
79      segment(h);
80 }
81
82 /* Draws D segment (bottom)
83  *  h    segment length
84  */
85 module segment_d(h)
86 {
87  segment(h);
88 }
89
90 /* Draws E segment (left bottom)
91  *  h    segment length
92  */
93 module segment_e(h)
94 {
95  rotate(a = [ 0, 0, 90 ])
96    segment(h);
97 }
98
99 /* Draws F segment (left top)
100  *  h    segment length
101  */
102 module segment_f(h)
103 {
104  translate(v = [ 0, h, 0 ])
105    segment_e(h);
106 }
107
108 /* Draws G segment (middle)
109  *  h    segment length
110  */
111 module segment_g(h)
112 {
113  translate(v = [ 0, h, 0 ])
114    segment_d(h);
115 }
116
117 /* Draws 0 in a 7 segment digit
118  *  h    digit length
119  */
120 module digit7_0(h)
121 {
122  segment_a(segment_length(h));
123  segment_b(segment_length(h));
124  segment_c(segment_length(h));
125  segment_d(segment_length(h));
126  segment_e(segment_length(h));
127  segment_f(segment_length(h));
128 }
129
130 /* Draws 1 in a 7 segment digit
131  *  h    digit length
132  */
133 module digit7_1(h)
134 {
135  segment_b(segment_length(h));
136  segment_c(segment_length(h));
137 }
138
139 /* Draws 2 in a 7 segment digit
140  *  h    digit length
141  */
142 module digit7_2(h)
143 {
144  segment_a(segment_length(h));
145  segment_b(segment_length(h));
146  segment_d(segment_length(h));
147  segment_e(segment_length(h));
148  segment_g(segment_length(h));
149 }
150
151 /* Draws 3 in a 7 segment digit
152  *  h    digit length
153  */
154 module digit7_3(h)
155 {
156  segment_a(segment_length(h));
157  segment_b(segment_length(h));
158  segment_c(segment_length(h));
159  segment_d(segment_length(h));
160  segment_g(segment_length(h));
161 }
162
163 /* Draws 4 in a 7 segment digit
164  *  h    digit length
165  */
166 module digit7_4(h)
167 {
168  segment_b(segment_length(h));
169  segment_c(segment_length(h));
170  segment_f(segment_length(h));
171  segment_g(segment_length(h));
172 }
173
174 /* Draws 5 in a 7 segment digit
175  *  h    digit length
176  */
177 module digit7_5(h)
178 {
179  segment_a(segment_length(h));
180  segment_c(segment_length(h));
181  segment_d(segment_length(h));
182  segment_f(segment_length(h));
183  segment_g(segment_length(h));
184 }
185
186 /* Draws 6 in a 7 segment digit
187  *  h    digit length
188  */
189 module digit7_6(h)
190 {
191  segment_a(segment_length(h));
192  segment_c(segment_length(h));
193  segment_d(segment_length(h));
194  segment_e(segment_length(h));
195  segment_f(segment_length(h));
196  segment_g(segment_length(h));
197 }
198
199 /* Draws 7 in a 7 segment digit
200  *  h    digit length
201  */
202 module digit7_7(h)
203 {
204  segment_a(segment_length(h));
205  segment_b(segment_length(h));
206  segment_c(segment_length(h));
207 }
208
209 /* Draws 8 in a 7 segment digit
210  *  h    digit length
211  */
212 module digit7_8(h)
213 {
214  segment_a(segment_length(h));
215  segment_b(segment_length(h));
216  segment_c(segment_length(h));
217  segment_d(segment_length(h));
218  segment_e(segment_length(h));
219  segment_f(segment_length(h));
220  segment_g(segment_length(h));
221 }
222
223 /* Draws 9 in a 7 segment digit
224  *  h    digit length
225  */
226 module digit7_9(h)
227 {
228  segment_a(segment_length(h));
229  segment_b(segment_length(h));
230  segment_c(segment_length(h));
231  segment_f(segment_length(h));
232  segment_g(segment_length(h));
233 }
234
235 /* Draws A in a 7 segment digit
236  *  h    digit length
237  */
238 module digit7_A(h)
239 {
240  segment_a(segment_length(h));
241  segment_b(segment_length(h));
242  segment_c(segment_length(h));
243  segment_e(segment_length(h));
244  segment_f(segment_length(h));
245  segment_g(segment_length(h));
246 }
247
248 /* Draws b in a 7 segment digit
249  *  h    digit length
250  */
251 module digit7_B(h)
252 {
253  segment_c(segment_length(h));
254  segment_d(segment_length(h));
255  segment_e(segment_length(h));
256  segment_f(segment_length(h));
257  segment_g(segment_length(h));
258 }
259
260 /* Draws C in a 7 segment digit
261  *  h    digit length
262  */
263 module digit7_C(h)
264 {
265  segment_a(segment_length(h));
266  segment_d(segment_length(h));
267  segment_e(segment_length(h));
268  segment_f(segment_length(h));
269 }
270
271 /* Draws d in a 7 segment digit
272  *  h    digit length
273  */
274 module digit7_D(h)
275 {
276  segment_b(segment_length(h));
277  segment_c(segment_length(h));
278  segment_d(segment_length(h));
279  segment_e(segment_length(h));
280  segment_g(segment_length(h));
281 }
282
283 /* Draws E in a 7 segment digit
284  *  h    digit length
285  */
286 module digit7_E(h)
287 {
288  segment_a(segment_length(h));
289  segment_d(segment_length(h));
290  segment_e(segment_length(h));
291  segment_f(segment_length(h));
292  segment_g(segment_length(h));
293 }
294
295 /* Draws F in a 7 segment digit
296  *  h    digit length
297  */
298 module digit7_F(h)
299 {
300  segment_a(segment_length(h));
301  segment_e(segment_length(h));
302  segment_f(segment_length(h));
303  segment_g(segment_length(h));
304 }
305
306 digit7_0(100);
307 translate(v = [ digit_spacing(100), 0, 0 ])
308   digit7_1(100);
309 translate(v = [ 2 * digit_spacing(100), 0, 0 ])
310   digit7_2(100);
311 translate(v = [ 3 * digit_spacing(100), 0, 0 ])
312   digit7_3(100);
313 translate(v = [ 4 * digit_spacing(100), 0, 0 ])
314   digit7_4(100);
315 translate(v = [ 5 * digit_spacing(100), 0, 0 ])
316   digit7_5(100);
317 translate(v = [ 6 * digit_spacing(100), 0, 0 ])
318   digit7_6(100);
319 translate(v = [ 7 * digit_spacing(100), 0, 0 ])
320   digit7_7(100);
321 translate(v = [ 8 * digit_spacing(100), 0, 0 ])
322   digit7_8(100);
323 translate(v = [ 9 * digit_spacing(100), 0, 0 ])
324   digit7_9(100);
325 translate(v = [ 10 * digit_spacing(100), 0, 0 ])
326   digit7_A(100);
327 translate(v = [ 11 * digit_spacing(100), 0, 0 ])
328   digit7_B(100);
329 translate(v = [ 12 * digit_spacing(100), 0, 0 ])
330   digit7_C(100);
331 translate(v = [ 13 * digit_spacing(100), 0, 0 ])
332   digit7_D(100);
333 translate(v = [ 14 * digit_spacing(100), 0, 0 ])
334   digit7_E(100);
335 translate(v = [ 15 * digit_spacing(100), 0, 0 ])
336   digit7_F(100);
337
338 /* EOF : seg_digit.sca.scad d */