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" chars
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.
15 * digit7_float(v, h) Writes a floating point value in decimal representation
16 * as a 7 digit display of the specified height.
19 /* Segment length based on digit height */
20 function segment_length(height) = height / 2;
22 /* digit height based on segment length */
23 function digit_height(seglen) = 2 * seglen;
25 /* Segment radius based on segment length */
26 function segment_radius(seglen) = seglen / 10;
28 /* Position (horiz) for next digit based on digit length */
29 function digit_spacing(height) = segment_length(height) * 1.5;
32 * Creates a 7 segment display for the given string
33 * s String to display. Characters should be within "0"-"9", "A"-"F",
34 * "a"-"f" ranges. Otherwise nothing is shown.
37 module digit7_str(s, h)
39 for(i = [ 0 : len(s) ])
41 translate(v = [ i * digit_spacing(h), 0, 0 ])
47 * Creates a 7 segment display for an integer value (decimal)
51 module digit7_int(v, h)
53 digit7_str(str(v), h);
57 * Creates a 7 segment display for a float value
61 module digit7_float(v, h)
64 if (search(".", s)[0] == undef) {
65 digit7_str(s, h); // integer value
67 for (i = [ 0 : search(".", s)[0] - 1 ]) {
68 translate(v = [ i * digit_spacing(h), 0, 0 ])
71 translate(v = [ search(".", s)[0] * digit_spacing(h), 0, 0 ])
73 for (i = [ search(".", s)[0] : len(s) ]) {
74 translate(v = [ (i - 1) * digit_spacing(h) + segment_length(h) * 0.5
83 * Creates a 7 segment display for the given character
84 * c Character to display. Should be within "0"-"9", "A"-"F", "a"-"f"
85 * ranges. Otherwise nothing is shown.
88 module put_digit7(c, h)
90 if (c == "0") digit7_0(h);
91 if (c == "1") digit7_1(h);
92 if (c == "2") digit7_2(h);
93 if (c == "3") digit7_3(h);
94 if (c == "4") digit7_4(h);
95 if (c == "5") digit7_5(h);
96 if (c == "6") digit7_6(h);
97 if (c == "7") digit7_7(h);
98 if (c == "8") digit7_8(h);
99 if (c == "9") digit7_9(h);
100 if (c == "A" || c == "a") digit7_A(h);
101 if (c == "B" || c == "b") digit7_B(h);
102 if (c == "C" || c == "c") digit7_C(h);
103 if (c == "D" || c == "d") digit7_D(h);
104 if (c == "E" || c == "e") digit7_E(h);
105 if (c == "F" || c == "f") digit7_F(h);
108 //---------------------------------------------------------------------------
109 // End of public modules - Just jump to the examples
110 //---------------------------------------------------------------------------
112 /* Draws a single segment
114 * r segment radius (default = segment_radius(h))
116 module segment(h, r = 0)
118 radius = (r == 0) ? segment_radius(h) : r;
119 length = (h > 2 * radius) ? h - 2 * radius : 0;
120 polyhedron(points = [ [ 0, 0, 0 ]
121 , [ radius , radius, 0 ]
122 , [ radius + length, radius, 0 ]
123 , [ 2 * radius + length, 0, 0 ]
124 , [ radius + length, -radius, 0 ]
125 , [ radius , -radius, 0 ]
126 , [ radius , 0, radius ]
127 , [ radius + length, 0, radius ]
129 , triangles = [ [ 0, 1, 6 ]
145 * Draws a decimal point
150 radius = segment_radius(segment_length(h));
151 polyhedron(points = [ [ 0, 0, 0 ]
152 , [ 0, 2 * radius, 0 ]
153 , [ 2 * radius, 2 * radius, 0 ]
154 , [ 2 * radius, 0, 0 ]
155 , [ radius, radius, radius ]
157 , triangles = [ [ 0, 1, 4 ]
166 /* Draws A segment (top)
171 translate(v = [ 0, digit_height(h), 0 ])
175 /* Draws B segment (right top)
180 translate(v = [ 0, h, 0 ])
184 /* Draws C segment (right bottom)
189 translate(v = [ h, h, 0 ])
190 rotate(a = [ 0, 0, 270 ])
194 /* Draws D segment (bottom)
202 /* Draws E segment (left bottom)
207 rotate(a = [ 0, 0, 90 ])
211 /* Draws F segment (left top)
216 translate(v = [ 0, h, 0 ])
220 /* Draws G segment (middle)
225 translate(v = [ 0, h, 0 ])
229 /* Draws 0 in a 7 segment digit
234 segment_a(segment_length(h));
235 segment_b(segment_length(h));
236 segment_c(segment_length(h));
237 segment_d(segment_length(h));
238 segment_e(segment_length(h));
239 segment_f(segment_length(h));
242 /* Draws 1 in a 7 segment digit
247 segment_b(segment_length(h));
248 segment_c(segment_length(h));
251 /* Draws 2 in a 7 segment digit
256 segment_a(segment_length(h));
257 segment_b(segment_length(h));
258 segment_d(segment_length(h));
259 segment_e(segment_length(h));
260 segment_g(segment_length(h));
263 /* Draws 3 in a 7 segment digit
268 segment_a(segment_length(h));
269 segment_b(segment_length(h));
270 segment_c(segment_length(h));
271 segment_d(segment_length(h));
272 segment_g(segment_length(h));
275 /* Draws 4 in a 7 segment digit
280 segment_b(segment_length(h));
281 segment_c(segment_length(h));
282 segment_f(segment_length(h));
283 segment_g(segment_length(h));
286 /* Draws 5 in a 7 segment digit
291 segment_a(segment_length(h));
292 segment_c(segment_length(h));
293 segment_d(segment_length(h));
294 segment_f(segment_length(h));
295 segment_g(segment_length(h));
298 /* Draws 6 in a 7 segment digit
303 segment_a(segment_length(h));
304 segment_c(segment_length(h));
305 segment_d(segment_length(h));
306 segment_e(segment_length(h));
307 segment_f(segment_length(h));
308 segment_g(segment_length(h));
311 /* Draws 7 in a 7 segment digit
316 segment_a(segment_length(h));
317 segment_b(segment_length(h));
318 segment_c(segment_length(h));
321 /* Draws 8 in a 7 segment digit
326 segment_a(segment_length(h));
327 segment_b(segment_length(h));
328 segment_c(segment_length(h));
329 segment_d(segment_length(h));
330 segment_e(segment_length(h));
331 segment_f(segment_length(h));
332 segment_g(segment_length(h));
335 /* Draws 9 in a 7 segment digit
340 segment_a(segment_length(h));
341 segment_b(segment_length(h));
342 segment_c(segment_length(h));
343 segment_f(segment_length(h));
344 segment_g(segment_length(h));
347 /* Draws A in a 7 segment digit
352 segment_a(segment_length(h));
353 segment_b(segment_length(h));
354 segment_c(segment_length(h));
355 segment_e(segment_length(h));
356 segment_f(segment_length(h));
357 segment_g(segment_length(h));
360 /* Draws b in a 7 segment digit
365 segment_c(segment_length(h));
366 segment_d(segment_length(h));
367 segment_e(segment_length(h));
368 segment_f(segment_length(h));
369 segment_g(segment_length(h));
372 /* Draws C in a 7 segment digit
377 segment_a(segment_length(h));
378 segment_d(segment_length(h));
379 segment_e(segment_length(h));
380 segment_f(segment_length(h));
383 /* Draws d in a 7 segment digit
388 segment_b(segment_length(h));
389 segment_c(segment_length(h));
390 segment_d(segment_length(h));
391 segment_e(segment_length(h));
392 segment_g(segment_length(h));
395 /* Draws E in a 7 segment digit
400 segment_a(segment_length(h));
401 segment_d(segment_length(h));
402 segment_e(segment_length(h));
403 segment_f(segment_length(h));
404 segment_g(segment_length(h));
407 /* Draws F in a 7 segment digit
412 segment_a(segment_length(h));
413 segment_e(segment_length(h));
414 segment_f(segment_length(h));
415 segment_g(segment_length(h));
418 //---------------------------------------------------------------------------
420 //---------------------------------------------------------------------------
422 translate(v = [ 0, 400, 0 ])
423 digit7_str("0123456789ABCDEF", 100);
424 translate(v = [ 0, 200, 0 ])
425 digit7_int(65535, 100);
426 digit7_float(123.45, 100);
428 /* EOF : seg_digit.scad */