2 * seg_digit.scad : 7 segment and 16 segment digit generation library
4 * Author : Jose Ignacio Croce Busquets <jose.croce@gmail.com>
9 * The module contains the following public methods
11 * digit7_str(s, h) Writes a string from "0123456789ABCDEFabcdef" characters
12 * as a 7 digit display of the specified height.
13 * digit7_int(v, h) Writes an integer value in decimal representation
14 * as a 7 digit display of the specified height.
17 /* Segment length based on digit height */
18 function segment_length(height) = height / 2;
20 /* digit height based on segment length */
21 function digit_height(seglen) = 2 * seglen;
23 /* Segment radius based on segment length */
24 function segment_radius(seglen) = seglen / 10;
26 /* Position (horiz) for next digit based on digit length */
27 function digit_spacing(height) = segment_length(height) * 1.5;
30 * Creates a 7 segment display for the given string
31 * s String to display. Characters should be within "0"-"9", "A"-"F",
32 * "a"-"f" ranges. Otherwise nothing is shown.
35 module digit7_str(s, h)
37 for(i = [ 0 : len(s) ])
39 translate(v = [ i * digit_spacing(100), 0, 0 ])
45 * Creates a 7 segment display for an integer value (decimal)
49 module digit7_int(v, h)
51 digit7_str(str(v), h);
55 * Creates a 7 segment display for the given character
56 * c Character to display. Should be within "0"-"9", "A"-"F", "a"-"f"
57 * ranges. Otherwise nothing is shown.
60 module put_digit7(c, h)
62 if (c == "0") digit7_0(h);
63 if (c == "1") digit7_1(h);
64 if (c == "2") digit7_2(h);
65 if (c == "3") digit7_3(h);
66 if (c == "4") digit7_4(h);
67 if (c == "5") digit7_5(h);
68 if (c == "6") digit7_6(h);
69 if (c == "7") digit7_7(h);
70 if (c == "8") digit7_8(h);
71 if (c == "9") digit7_9(h);
72 if (c == "A" || c == "a") digit7_A(h);
73 if (c == "B" || c == "b") digit7_B(h);
74 if (c == "C" || c == "c") digit7_C(h);
75 if (c == "D" || c == "d") digit7_D(h);
76 if (c == "E" || c == "e") digit7_E(h);
77 if (c == "F" || c == "f") digit7_F(h);
80 //---------------------------------------------------------------------------
81 // End of public modules - Just jump to the examples
82 //---------------------------------------------------------------------------
84 /* Draws a single segment
86 * r segment radius (default = segment_radius(h))
88 module segment(h, r = 0)
90 radius = (r == 0) ? segment_radius(h) : r;
91 length = (h > 2 * radius) ? h - 2 * radius : 0;
92 polyhedron(points = [ [ 0, 0, 0 ]
93 , [ radius , radius, 0 ]
94 , [ radius + length, radius, 0 ]
95 , [ 2 * radius + length, 0, 0 ]
96 , [ radius + length, -radius, 0 ]
97 , [ radius , -radius, 0 ]
98 , [ radius , 0, radius ]
99 , [ radius + length, 0, radius ]
101 , triangles = [ [ 0, 1, 6 ]
116 /* Draws A segment (top)
121 translate(v = [ 0, digit_height(h), 0 ])
125 /* Draws B segment (right top)
130 translate(v = [ 0, h, 0 ])
134 /* Draws C segment (right bottom)
139 translate(v = [ h, h, 0 ])
140 rotate(a = [ 0, 0, 270 ])
144 /* Draws D segment (bottom)
152 /* Draws E segment (left bottom)
157 rotate(a = [ 0, 0, 90 ])
161 /* Draws F segment (left top)
166 translate(v = [ 0, h, 0 ])
170 /* Draws G segment (middle)
175 translate(v = [ 0, h, 0 ])
179 /* Draws 0 in a 7 segment digit
184 segment_a(segment_length(h));
185 segment_b(segment_length(h));
186 segment_c(segment_length(h));
187 segment_d(segment_length(h));
188 segment_e(segment_length(h));
189 segment_f(segment_length(h));
192 /* Draws 1 in a 7 segment digit
197 segment_b(segment_length(h));
198 segment_c(segment_length(h));
201 /* Draws 2 in a 7 segment digit
206 segment_a(segment_length(h));
207 segment_b(segment_length(h));
208 segment_d(segment_length(h));
209 segment_e(segment_length(h));
210 segment_g(segment_length(h));
213 /* Draws 3 in a 7 segment digit
218 segment_a(segment_length(h));
219 segment_b(segment_length(h));
220 segment_c(segment_length(h));
221 segment_d(segment_length(h));
222 segment_g(segment_length(h));
225 /* Draws 4 in a 7 segment digit
230 segment_b(segment_length(h));
231 segment_c(segment_length(h));
232 segment_f(segment_length(h));
233 segment_g(segment_length(h));
236 /* Draws 5 in a 7 segment digit
241 segment_a(segment_length(h));
242 segment_c(segment_length(h));
243 segment_d(segment_length(h));
244 segment_f(segment_length(h));
245 segment_g(segment_length(h));
248 /* Draws 6 in a 7 segment digit
253 segment_a(segment_length(h));
254 segment_c(segment_length(h));
255 segment_d(segment_length(h));
256 segment_e(segment_length(h));
257 segment_f(segment_length(h));
258 segment_g(segment_length(h));
261 /* Draws 7 in a 7 segment digit
266 segment_a(segment_length(h));
267 segment_b(segment_length(h));
268 segment_c(segment_length(h));
271 /* Draws 8 in a 7 segment digit
276 segment_a(segment_length(h));
277 segment_b(segment_length(h));
278 segment_c(segment_length(h));
279 segment_d(segment_length(h));
280 segment_e(segment_length(h));
281 segment_f(segment_length(h));
282 segment_g(segment_length(h));
285 /* Draws 9 in a 7 segment digit
290 segment_a(segment_length(h));
291 segment_b(segment_length(h));
292 segment_c(segment_length(h));
293 segment_f(segment_length(h));
294 segment_g(segment_length(h));
297 /* Draws A in a 7 segment digit
302 segment_a(segment_length(h));
303 segment_b(segment_length(h));
304 segment_c(segment_length(h));
305 segment_e(segment_length(h));
306 segment_f(segment_length(h));
307 segment_g(segment_length(h));
310 /* Draws b in a 7 segment digit
315 segment_c(segment_length(h));
316 segment_d(segment_length(h));
317 segment_e(segment_length(h));
318 segment_f(segment_length(h));
319 segment_g(segment_length(h));
322 /* Draws C in a 7 segment digit
327 segment_a(segment_length(h));
328 segment_d(segment_length(h));
329 segment_e(segment_length(h));
330 segment_f(segment_length(h));
333 /* Draws d in a 7 segment digit
338 segment_b(segment_length(h));
339 segment_c(segment_length(h));
340 segment_d(segment_length(h));
341 segment_e(segment_length(h));
342 segment_g(segment_length(h));
345 /* Draws E in a 7 segment digit
350 segment_a(segment_length(h));
351 segment_d(segment_length(h));
352 segment_e(segment_length(h));
353 segment_f(segment_length(h));
354 segment_g(segment_length(h));
357 /* Draws F in a 7 segment digit
362 segment_a(segment_length(h));
363 segment_e(segment_length(h));
364 segment_f(segment_length(h));
365 segment_g(segment_length(h));
368 //---------------------------------------------------------------------------
370 //---------------------------------------------------------------------------
372 translate(v = [ 0, 200, 0 ])
373 digit7_str("0123456789ABCDEF", 100);
374 digit7_int(65535, 100);
378 /* EOF : seg_digit.sca.scad d */