on-relief/low-relief digit generation
authorJose Ignacio Croce Busquets <jose.croce@gmail.com>
Sat, 15 Feb 2014 16:37:33 +0000 (14:37 -0200)
committerJose Ignacio Croce Busquets <jose.croce@gmail.com>
Sat, 15 Feb 2014 16:37:33 +0000 (14:37 -0200)
seg_digit.scad

index b6c21f7..4d49adb 100644 (file)
@@ -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 */