From 248516c6c97efb6e105cb1df9d67a86e5cbe77fd Mon Sep 17 00:00:00 2001 From: Jose Ignacio Croce Busquets Date: Sun, 16 Feb 2014 15:42:36 -0300 Subject: [PATCH] Decimal point included in digit --- digit7.scad | 20 ++++++--- seg_digit.scad | 136 ++++++++++++++++++++++++++++++++------------------------- 2 files changed, 91 insertions(+), 65 deletions(-) diff --git a/digit7.scad b/digit7.scad index 89f5505..6ea3e24 100644 --- a/digit7.scad +++ b/digit7.scad @@ -64,10 +64,10 @@ module digit7_float(v, h, on = true) translate(v = [ i * digit_spacing(h), 0, 0 ]) put_digit7(s[i], h, on); } - translate(v = [ search(".", s)[0] * digit_spacing(h), 0, 0 ]) - segment_dp(h, on); + translate(v = [ (search(".", s)[0] - 1) * digit_spacing(h), 0, 0 ]) + put_digit7(s[i], h, on); for (i = [ search(".", s)[0] : len(s) ]) { - translate(v = [ (i - 1) * digit_spacing(h) + segment_length(h) * 0.5 + translate(v = [ (i - 1) * digit_spacing(h) , 0 , 0 ]) put_digit7(s[i], h, on); @@ -84,6 +84,7 @@ module digit7_float(v, h, on = true) */ module put_digit7(c, h, on = true) { + if (c == ".") digit7_P(h, on); if (c == "0") digit7_0(h, on); if (c == "1") digit7_1(h, on); if (c == "2") digit7_2(h, on); @@ -311,6 +312,15 @@ module digit7_F(h, on = true) segment_g(segment_length(h), on); } +/* Draws a decimal point in a 7 segment digit + * h digit length + * on on-relief/low-relief flag + */ +module digit7_P(h, on = true) +{ + segment_p(segment_length(h), on); +} + //--------------------------------------------------------------------------- // Examples //--------------------------------------------------------------------------- @@ -332,7 +342,7 @@ translate(v = [ digit_spacing(ex_height), 2 * ex_height, 0 ]) digit7_int(65535, ex_height); translate(v = [ digit_spacing(ex_height), 0.5 * ex_height, 0 ]) - digit7_float(123.45, ex_height); + digit7_float(1234.56, ex_height); // Low relief examples // Low relief effect is performed by substracting from the base @@ -353,7 +363,7 @@ translate(v = [ 0, -5 * ex_height, 0 ]) digit7_int(65535, 100, on = false); translate(v = [ digit_spacing(ex_height), 0.5 * ex_height, 0 ]) - digit7_float(123.45, 100, on = false); + digit7_float(1234.56, 100, on = false); } /* EOF : seg_digit.scad */ diff --git a/seg_digit.scad b/seg_digit.scad index c0f1e1f..b6083a1 100644 --- a/seg_digit.scad +++ b/seg_digit.scad @@ -35,7 +35,8 @@ function digit_height(seglen) = 2 * seglen; function segment_radius(seglen) = seglen / 10; /* Position (horiz) for next digit based on digit length */ -function digit_spacing(height) = segment_length(height) * 1.5; +function digit_spacing(height) = segment_length(height) + + 6 * segment_radius(segment_length(height)); /* Draws A segment (top) * size segment size @@ -228,50 +229,67 @@ module segment_m(size, on = true) } /* + * Place the decimal point at the end of the character + * size segment size + * on on-relief/low-relief flag + */ +module segment_p(size, on = true) +{ + radius = segment_radius(size); + translate(v = [ size + radius, 0, 0 ]) + decimal_point(size, on = on); +} + +//--------------------------------------------------------------------------- +// End of public modules - Just jump to the examples +//--------------------------------------------------------------------------- + +/* * Draws a decimal point - * digit_size whole digit size - * on on-relief/low-relief flag + * size segment size + * on on-relief/low-relief flag */ -module segment_dp(digit_size, on = true) +module decimal_point(size, on = true) { - radius = segment_radius(segment_length(digit_size)); + radius = segment_radius(size); 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 ] - ]); + translate(v = [ radius, 0, 0 ]) + polyhedron(points = [ [ -radius, -radius, 0 ] + , [ -radius, radius, 0 ] + , [ radius, radius, 0 ] + , [ radius, -radius, 0 ] + , [ 0, 0, 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); + translate(v = [ radius, 0, 0 ]) + { + polyhedron(points = [ [ -radius, -radius, 0 ] + , [ -radius, radius, 0 ] + , [ radius, radius, 0 ] + , [ radius, -radius, 0 ] + , [ 0, 0, -radius ] + ] + , triangles = [ [ 0, 4, 1 ] + , [ 1, 4, 2 ] + , [ 2, 4, 3 ] + , [ 0, 3, 4 ] + , [ 0, 1, 3 ] + , [ 1, 2, 3 ] + ]); + translate(v = [ 0, 0, radius / 2 ]) + cube(size= [ 2 * radius, 2 * radius, radius ], center = true); + } } } -//--------------------------------------------------------------------------- -// End of public modules - Just jump to the examples -//--------------------------------------------------------------------------- - /* Draws a single segment * size segment size * r segment radius (default = segment_radius(h)) @@ -351,14 +369,15 @@ module diag_segment(size, r = 0, on = true) length = (size > 2 * radius) ? size - 2 * radius : 0; if (on) { - polyhedron(points = [ [ radius, radius, 0 ] - , [ radius, 2.41 * radius, 0 ] - , [ size / 2 - 2.41 * radius, size - radius, 0 ] - , [ size / 2 - radius, size - radius, 0 ] - , [ size / 2 - radius, size - 2.41 * radius, 0 ] - , [ 2.41 * radius, radius, 0 ] - , [ 1.70 * radius, 1.70 * radius, radius ] - , [ size / 2 - 1.70 * radius, size - 1.70 * radius, radius ] + polyhedron(points = [ + [ radius, radius, 0 ] + , [ radius, 2.41 * radius, 0 ] + , [ size / 2 - 2.41 * radius, size - radius, 0 ] + , [ size / 2 - radius, size - radius, 0 ] + , [ size / 2 - radius, size - 2.41 * radius, 0 ] + , [ 2.41 * radius, radius, 0 ] + , [ 1.70 * radius, 1.70 * radius, radius ] + , [ size / 2 - 1.70 * radius, size - 1.70 * radius, radius ] ] , triangles = [ [ 0, 1, 6 ] , [ 1, 2, 6 ] @@ -374,14 +393,15 @@ module diag_segment(size, r = 0, on = true) , [ 2, 4, 3 ] ]); } else { - polyhedron(points = [ [ radius, radius, 0 ] - , [ radius, 2.41 * radius, 0 ] - , [ size / 2 - 2.41 * radius, size - radius, 0 ] - , [ size / 2 - radius, size - radius, 0 ] - , [ size / 2 - radius, size - 2.41 * radius, 0 ] - , [ 2.41 * radius, radius, 0 ] - , [ 1.70 * radius, 1.70 * radius, -radius ] - , [ size / 2 - 1.70 * radius, size - 1.70 * radius, -radius ] + polyhedron(points = [ + [ radius, radius, 0 ] + , [ radius, 2.41 * radius, 0 ] + , [ size / 2 - 2.41 * radius, size - radius, 0 ] + , [ size / 2 - radius, size - radius, 0 ] + , [ size / 2 - radius, size - 2.41 * radius, 0 ] + , [ 2.41 * radius, radius, 0 ] + , [ 1.70 * radius, 1.70 * radius, -radius ] + , [ size / 2 - 1.70 * radius, size - 1.70 * radius, -radius ] ] , triangles = [ [ 0, 1, 6 ] , [ 1, 2, 6 ] @@ -437,8 +457,7 @@ translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2 segment_e(ex_seglen); segment_f(ex_seglen); segment_g(ex_seglen); - translate(v = [ digit_spacing(digit_height(ex_seglen)), 0, 0 ]) - segment_dp(digit_height(ex_seglen)); + segment_p(ex_seglen); } // 16 segment on-relief example @@ -462,8 +481,7 @@ translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2 segment_k(ex_seglen); segment_l(ex_seglen); segment_m(ex_seglen); - translate(v = [ digit_spacing(digit_height(ex_seglen)), 0, 0 ]) - segment_dp(digit_height(ex_seglen)); + segment_p(ex_seglen); } // Low relief examples @@ -492,8 +510,7 @@ translate(v = [ 2 * digit_spacing(digit_height(ex_seglen)), 0, 0 ]) segment_e(ex_seglen, on = false); segment_f(ex_seglen, on = false); segment_g(ex_seglen, on = false); - translate(v = [ digit_spacing(digit_height(ex_seglen)), 0, 0 ]) - segment_dp(digit_height(ex_seglen)); + segment_p(ex_seglen, on = false); } // 16 segment on-relief example @@ -517,8 +534,7 @@ translate(v = [ 2 * digit_spacing(digit_height(ex_seglen)), 0, 0 ]) segment_k(ex_seglen, on = false); segment_l(ex_seglen, on = false); segment_m(ex_seglen, on = false); - translate(v = [ digit_spacing(digit_height(ex_seglen)), 0, 0 ]) - segment_dp(digit_height(ex_seglen), on = false); + segment_p(ex_seglen, on = false); } } -- 2.11.0