From f16d719943c2bfa1a33c0c63270ec2fe6f986256 Mon Sep 17 00:00:00 2001 From: Jose Ignacio Croce Busquets Date: Sat, 15 Feb 2014 14:37:33 -0200 Subject: [PATCH] on-relief/low-relief digit generation --- seg_digit.scad | 430 ++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 260 insertions(+), 170 deletions(-) diff --git a/seg_digit.scad b/seg_digit.scad index b6c21f7..4d49adb 100644 --- a/seg_digit.scad +++ b/seg_digit.scad @@ -8,8 +8,10 @@ * Usage * The module contains the following public methods * - * digit7_str(s, h) Writes a string from "0123456789ABCDEFabcdef" chars + * digit7_str(s, h, on) + * Writes a string from "0123456789ABCDEFabcdef" chars * as a 7 digit display of the specified height. + * on = on-relief/low-relief flag * digit7_int(v, h) Writes an integer value in decimal representation * as a 7 digit display of the specified height. * digit7_float(v, h) Writes a floating point value in decimal representation @@ -33,13 +35,14 @@ function digit_spacing(height) = segment_length(height) * 1.5; * s String to display. Characters should be within "0"-"9", "A"-"F", * "a"-"f" ranges. Otherwise nothing is shown. * h digit height + * on on-relief/low-relief flag */ -module digit7_str(s, h) +module digit7_str(s, h, on = true) { for(i = [ 0 : len(s) ]) { translate(v = [ i * digit_spacing(h), 0, 0 ]) - put_digit7(s[i], h); + put_digit7(s[i], h, on); } } @@ -47,34 +50,36 @@ module digit7_str(s, h) * Creates a 7 segment display for an integer value (decimal) * v Value to display * h digit height + * on on-relief/low-relief flag */ -module digit7_int(v, h) +module digit7_int(v, h, on = true) { - digit7_str(str(v), h); + digit7_str(str(v), h, on); } /* * Creates a 7 segment display for a float value * v Value to display * h digit height + * on on-relief/low-relief flag */ -module digit7_float(v, h) +module digit7_float(v, h, on = true) { s = str(v); if (search(".", s)[0] == undef) { - digit7_str(s, h); // integer value + digit7_str(s, h, on); // integer value } else { for (i = [ 0 : search(".", s)[0] - 1 ]) { translate(v = [ i * digit_spacing(h), 0, 0 ]) - put_digit7(s[i], h); + put_digit7(s[i], h, on); } translate(v = [ search(".", s)[0] * digit_spacing(h), 0, 0 ]) - segment_dp(h); + segment_dp(h, on); for (i = [ search(".", s)[0] : len(s) ]) { translate(v = [ (i - 1) * digit_spacing(h) + segment_length(h) * 0.5 , 0 , 0 ]) - put_digit7(s[i], h); + put_digit7(s[i], h, on); } } } @@ -84,25 +89,26 @@ module digit7_float(v, h) * c Character to display. Should be within "0"-"9", "A"-"F", "a"-"f" * ranges. Otherwise nothing is shown. * h digit height + * on on-relief/low-relief flag */ -module put_digit7(c, h) +module put_digit7(c, h, on = true) { - if (c == "0") digit7_0(h); - if (c == "1") digit7_1(h); - if (c == "2") digit7_2(h); - if (c == "3") digit7_3(h); - if (c == "4") digit7_4(h); - if (c == "5") digit7_5(h); - if (c == "6") digit7_6(h); - if (c == "7") digit7_7(h); - if (c == "8") digit7_8(h); - if (c == "9") digit7_9(h); - if (c == "A" || c == "a") digit7_A(h); - if (c == "B" || c == "b") digit7_B(h); - if (c == "C" || c == "c") digit7_C(h); - if (c == "D" || c == "d") digit7_D(h); - if (c == "E" || c == "e") digit7_E(h); - if (c == "F" || c == "f") digit7_F(h); + if (c == "0") digit7_0(h, on); + if (c == "1") digit7_1(h, on); + if (c == "2") digit7_2(h, on); + if (c == "3") digit7_3(h, on); + if (c == "4") digit7_4(h, on); + if (c == "5") digit7_5(h, on); + if (c == "6") digit7_6(h, on); + if (c == "7") digit7_7(h, on); + if (c == "8") digit7_8(h, on); + if (c == "9") digit7_9(h, on); + if (c == "A" || c == "a") digit7_A(h, on); + if (c == "B" || c == "b") digit7_B(h, on); + if (c == "C" || c == "c") digit7_C(h, on); + if (c == "D" || c == "d") digit7_D(h, on); + if (c == "E" || c == "e") digit7_E(h, on); + if (c == "F" || c == "f") digit7_F(h, on); } //--------------------------------------------------------------------------- @@ -112,307 +118,385 @@ module put_digit7(c, h) /* Draws a single segment * h segment length * r segment radius (default = segment_radius(h)) + * on on-relief/low-relief flag */ -module segment(h, r = 0) +module segment(h, r = 0, on = true) { radius = (r == 0) ? segment_radius(h) : r; length = (h > 2 * radius) ? h - 2 * radius : 0; - polyhedron(points = [ [ 0, 0, 0 ] - , [ radius , radius, 0 ] - , [ radius + length, radius, 0 ] - , [ 2 * radius + length, 0, 0 ] - , [ radius + length, -radius, 0 ] - , [ radius , -radius, 0 ] - , [ radius , 0, radius ] - , [ radius + length, 0, radius ] + if (on) + { + polyhedron(points = [ [ 0, 0, 0 ] + , [ radius , radius, 0 ] + , [ radius + length, radius, 0 ] + , [ 2 * radius + length, 0, 0 ] + , [ radius + length, -radius, 0 ] + , [ radius , -radius, 0 ] + , [ radius , 0, radius ] + , [ radius + length, 0, radius ] + ] + , triangles = [ [ 0, 1, 6 ] + , [ 1, 2, 6 ] + , [ 2, 7, 6 ] + , [ 2, 3, 7 ] + , [ 3, 4, 7 ] + , [ 4, 5, 7 ] + , [ 5, 6, 7 ] + , [ 0, 6, 5 ] + , [ 0, 5, 1 ] + , [ 1, 5, 4 ] + , [ 1, 4, 2 ] + , [ 2, 4, 3 ] + ]); + } else { + polyhedron(points = [ [ 0, 0, 0 ] + , [ radius , radius, 0 ] + , [ radius + length, radius, 0 ] + , [ 2 * radius + length, 0, 0 ] + , [ radius + length, -radius, 0 ] + , [ radius , -radius, 0 ] + , [ radius , 0, -radius ] + , [ radius + length, 0, -radius ] + ] + , triangles = [ [ 0, 1, 6 ] + , [ 1, 2, 6 ] + , [ 2, 7, 6 ] + , [ 2, 3, 7 ] + , [ 3, 4, 7 ] + , [ 4, 5, 7 ] + , [ 5, 6, 7 ] + , [ 0, 6, 5 ] + , [ 0, 5, 1 ] + , [ 1, 5, 4 ] + , [ 1, 4, 2 ] + , [ 2, 4, 3 ] + ]); + linear_extrude(height = radius) + polygon(points = [ [ 0 , 0] + , [ radius , radius ] + , [ radius + length, radius ] + , [ 2 * radius + length, 0 ] + , [ radius + length, -radius ] + , [ radius , -radius ] ] - , triangles = [ [ 0, 1, 6 ] - , [ 1, 2, 6 ] - , [ 2, 7, 6 ] - , [ 2, 3, 7 ] - , [ 3, 4, 7 ] - , [ 4, 5, 7 ] - , [ 5, 6, 7 ] - , [ 0, 6, 5 ] - , [ 0, 5, 1 ] - , [ 1, 5, 4 ] - , [ 1, 4, 2 ] - , [ 2, 4, 3 ] - ]); + , paths = [ [ 0, 1, 2, 3, 4, 5 ] ]); + } } /* * Draws a decimal point * h Digit height + * on on-relief/low-relief flag */ -module segment_dp(h) +module segment_dp(h, on = true) { radius = segment_radius(segment_length(h)); - polyhedron(points = [ [ 0, 0, 0 ] - , [ 0, 2 * radius, 0 ] - , [ 2 * radius, 2 * radius, 0 ] - , [ 2 * radius, 0, 0 ] - , [ radius, radius, radius ] - ] - , triangles = [ [ 0, 1, 4 ] - , [ 1, 2, 4 ] - , [ 2, 3, 4 ] - , [ 0, 4, 3 ] - , [ 0, 3, 1 ] - , [ 1, 3, 2 ] - ]); + if (on) + { + polyhedron(points = [ [ 0, 0, 0 ] + , [ 0, 2 * radius, 0 ] + , [ 2 * radius, 2 * radius, 0 ] + , [ 2 * radius, 0, 0 ] + , [ radius, radius, radius ] + ] + , triangles = [ [ 0, 1, 4 ] + , [ 1, 2, 4 ] + , [ 2, 3, 4 ] + , [ 0, 4, 3 ] + , [ 0, 3, 1 ] + , [ 1, 3, 2 ] + ]); + } else { + polyhedron(points = [ [ 0, 0, 0 ] + , [ 0, 2 * radius, 0 ] + , [ 2 * radius, 2 * radius, 0 ] + , [ 2 * radius, 0, 0 ] + , [ radius, radius, -radius ] + ] + , triangles = [ [ 0, 1, 4 ] + , [ 1, 2, 4 ] + , [ 2, 3, 4 ] + , [ 0, 4, 3 ] + , [ 0, 3, 1 ] + , [ 1, 3, 2 ] + ]); + cube(size= [ 2 * radius, 2 * radius, radius ], center = false); + } } /* Draws A segment (top) * h segment length + * on on-relief/low-relief flag */ -module segment_a(h) +module segment_a(h, on = true) { translate(v = [ 0, digit_height(h), 0 ]) - segment(h); + segment(h, on = on); } /* Draws B segment (right top) * h segment length + * on on-relief/low-relief flag */ -module segment_b(h) +module segment_b(h, on = true) { translate(v = [ 0, h, 0 ]) - segment_c(h); + segment_c(h, on = on); } /* Draws C segment (right bottom) * h segment length + * on on-relief/low-relief flag */ -module segment_c(h) +module segment_c(h, on = true) { translate(v = [ h, h, 0 ]) rotate(a = [ 0, 0, 270 ]) - segment(h); + segment(h, on = on); } /* Draws D segment (bottom) * h segment length + * on on-relief/low-relief flag */ -module segment_d(h) +module segment_d(h, on = true) { - segment(h); + segment(h, on = on); } /* Draws E segment (left bottom) * h segment length + * on on-relief/low-relief flag */ -module segment_e(h) +module segment_e(h, on = true) { rotate(a = [ 0, 0, 90 ]) - segment(h); + segment(h, on = on); } /* Draws F segment (left top) * h segment length + * on on-relief/low-relief flag */ -module segment_f(h) +module segment_f(h, on = true) { translate(v = [ 0, h, 0 ]) - segment_e(h); + segment_e(h, on = on); } /* Draws G segment (middle) * h segment length + * on on-relief/low-relief flag */ -module segment_g(h) +module segment_g(h, on = true) { translate(v = [ 0, h, 0 ]) - segment_d(h); + segment_d(h, on = on); } /* Draws 0 in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_0(h) +module digit7_0(h, on = true) { - segment_a(segment_length(h)); - segment_b(segment_length(h)); - segment_c(segment_length(h)); - segment_d(segment_length(h)); - segment_e(segment_length(h)); - segment_f(segment_length(h)); + segment_a(segment_length(h), on); + segment_b(segment_length(h), on); + segment_c(segment_length(h), on); + segment_d(segment_length(h), on); + segment_e(segment_length(h), on); + segment_f(segment_length(h), on); } /* Draws 1 in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_1(h) +module digit7_1(h, on = true) { - segment_b(segment_length(h)); - segment_c(segment_length(h)); + segment_b(segment_length(h), on); + segment_c(segment_length(h), on); } /* Draws 2 in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_2(h) +module digit7_2(h, on = true) { - segment_a(segment_length(h)); - segment_b(segment_length(h)); - segment_d(segment_length(h)); - segment_e(segment_length(h)); - segment_g(segment_length(h)); + segment_a(segment_length(h), on); + segment_b(segment_length(h), on); + segment_d(segment_length(h), on); + segment_e(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws 3 in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_3(h) +module digit7_3(h, on = true) { - segment_a(segment_length(h)); - segment_b(segment_length(h)); - segment_c(segment_length(h)); - segment_d(segment_length(h)); - segment_g(segment_length(h)); + segment_a(segment_length(h), on); + segment_b(segment_length(h), on); + segment_c(segment_length(h), on); + segment_d(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws 4 in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_4(h) +module digit7_4(h, on = true) { - segment_b(segment_length(h)); - segment_c(segment_length(h)); - segment_f(segment_length(h)); - segment_g(segment_length(h)); + segment_b(segment_length(h), on); + segment_c(segment_length(h), on); + segment_f(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws 5 in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_5(h) +module digit7_5(h, on = true) { - segment_a(segment_length(h)); - segment_c(segment_length(h)); - segment_d(segment_length(h)); - segment_f(segment_length(h)); - segment_g(segment_length(h)); + segment_a(segment_length(h), on); + segment_c(segment_length(h), on); + segment_d(segment_length(h), on); + segment_f(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws 6 in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_6(h) +module digit7_6(h, on = true) { - segment_a(segment_length(h)); - segment_c(segment_length(h)); - segment_d(segment_length(h)); - segment_e(segment_length(h)); - segment_f(segment_length(h)); - segment_g(segment_length(h)); + segment_a(segment_length(h), on); + segment_c(segment_length(h), on); + segment_d(segment_length(h), on); + segment_e(segment_length(h), on); + segment_f(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws 7 in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_7(h) +module digit7_7(h, on = true) { - segment_a(segment_length(h)); - segment_b(segment_length(h)); - segment_c(segment_length(h)); + segment_a(segment_length(h), on); + segment_b(segment_length(h), on); + segment_c(segment_length(h), on); } /* Draws 8 in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_8(h) +module digit7_8(h, on = true) { - segment_a(segment_length(h)); - segment_b(segment_length(h)); - segment_c(segment_length(h)); - segment_d(segment_length(h)); - segment_e(segment_length(h)); - segment_f(segment_length(h)); - segment_g(segment_length(h)); + segment_a(segment_length(h), on); + segment_b(segment_length(h), on); + segment_c(segment_length(h), on); + segment_d(segment_length(h), on); + segment_e(segment_length(h), on); + segment_f(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws 9 in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_9(h) +module digit7_9(h, on = true) { - segment_a(segment_length(h)); - segment_b(segment_length(h)); - segment_c(segment_length(h)); - segment_f(segment_length(h)); - segment_g(segment_length(h)); + segment_a(segment_length(h), on); + segment_b(segment_length(h), on); + segment_c(segment_length(h), on); + segment_f(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws A in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_A(h) +module digit7_A(h, on = true) { - segment_a(segment_length(h)); - segment_b(segment_length(h)); - segment_c(segment_length(h)); - segment_e(segment_length(h)); - segment_f(segment_length(h)); - segment_g(segment_length(h)); + segment_a(segment_length(h), on); + segment_b(segment_length(h), on); + segment_c(segment_length(h), on); + segment_e(segment_length(h), on); + segment_f(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws b in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_B(h) +module digit7_B(h, on = true) { - segment_c(segment_length(h)); - segment_d(segment_length(h)); - segment_e(segment_length(h)); - segment_f(segment_length(h)); - segment_g(segment_length(h)); + segment_c(segment_length(h), on); + segment_d(segment_length(h), on); + segment_e(segment_length(h), on); + segment_f(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws C in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_C(h) +module digit7_C(h, on = true) { - segment_a(segment_length(h)); - segment_d(segment_length(h)); - segment_e(segment_length(h)); - segment_f(segment_length(h)); + segment_a(segment_length(h), on); + segment_d(segment_length(h), on); + segment_e(segment_length(h), on); + segment_f(segment_length(h), on); } /* Draws d in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_D(h) +module digit7_D(h, on = true) { - segment_b(segment_length(h)); - segment_c(segment_length(h)); - segment_d(segment_length(h)); - segment_e(segment_length(h)); - segment_g(segment_length(h)); + segment_b(segment_length(h), on); + segment_c(segment_length(h), on); + segment_d(segment_length(h), on); + segment_e(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws E in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_E(h) +module digit7_E(h, on = true) { - segment_a(segment_length(h)); - segment_d(segment_length(h)); - segment_e(segment_length(h)); - segment_f(segment_length(h)); - segment_g(segment_length(h)); + segment_a(segment_length(h), on); + segment_d(segment_length(h), on); + segment_e(segment_length(h), on); + segment_f(segment_length(h), on); + segment_g(segment_length(h), on); } /* Draws F in a 7 segment digit * h digit length + * on on-relief/low-relief flag */ -module digit7_F(h) +module digit7_F(h, on = true) { - segment_a(segment_length(h)); - segment_e(segment_length(h)); - segment_f(segment_length(h)); - segment_g(segment_length(h)); + segment_a(segment_length(h), on); + segment_e(segment_length(h), on); + segment_f(segment_length(h), on); + segment_g(segment_length(h), on); } //--------------------------------------------------------------------------- @@ -424,5 +508,11 @@ translate(v = [ 0, 300, 0 ]) translate(v = [ 0, 150, 0 ]) digit7_int(65535, 100); digit7_float(123.45, 100); +translate(v = [ 0, -150, 0 ]) + digit7_str("0123456789ABCDEF", 100, on = false); +translate(v = [ 0, -300, 0 ]) + digit7_int(65535, 100, on = false); +translate(v = [ 0, -450, 0 ]) + digit7_float(123.45, 100, on = false); /* EOF : seg_digit.scad */ -- 2.11.0