/*
* seg_digit.scad : 7 segment and 16 segment digit generation library
*
- * Author : Jose Ignacio Croce Busquets <jose.croce@gmail.com>
+ * Author : Jose Ignacio Croce Busquets <jose@crossforests.com>
*
- * Date : 08-DEC-2013
+ * Date : 15-FEB-2014
+ *
+ * Copyright 2014, 2015 Jose Ignacio Croce Busquets
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Usage
* The module contains the following public methods
*
- * 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
- * as a 7 digit display of the specified height.
+ * segment_a(size, on = true)
+ * segment_b(size, on = true)
+ * segment_c(size, on = true)
+ * segment_d(size, on = true)
+ * segment_e(size, on = true)
+ * segment_f(size, on = true)
+ * segment_g(size, on = true) Write the corresponding segment for a 7
+ * segment display
+ * size = segment size
+ * on = on-relief/low-relief flag
+ *
+ * segment_a1(size, on = true)
+ * segment_a2(size, on = true)
+ * segment_d1(size, on = true)
+ * segment_d2(size, on = true)
+ * segment_g1(size, on = true)
+ * segment_g2(size, on = true)
+ * segment_h(size, on = true)
+ * segment_i(size, on = true)
+ * segment_j(size, on = true)
+ * segment_k(size, on = true)
+ * segment_l(size, on = true)
+ * segment_m(size, on = true) Write the aditional segments for a 16
+ * segment display
+ * size = segment size
+ * on = on-relief/low-relief flag
+ *
+ * segment_dp(digit_size, on = true)
+ * Write the decimal point for a 7 segment display
+ * digit_size = whole digit size
+ * on = on-relief/low-relief flag
*/
/* Segment length based on digit height */
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));
-/*
- * Creates a 7 segment display for the given string
- * s String to display. Characters should be within "0"-"9", "A"-"F",
- * "a"-"f" ranges. Otherwise nothing is shown.
- * h digit height
+/* Draws A segment (top)
+ * size segment size
* on on-relief/low-relief flag
*/
-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, on);
- }
-}
-
-/*
- * 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, on = true)
+module segment_a(size, on = true)
{
- digit7_str(str(v), h, on);
+ translate(v = [ 0, digit_height(size), 0 ])
+ segment(size, on = 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, on = true)
-{
- s = str(v);
- if (search(".", s)[0] == undef) {
- 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, on);
- }
- translate(v = [ search(".", s)[0] * digit_spacing(h), 0, 0 ])
- 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, on);
- }
- }
-}
-
-/*
- * Creates a 7 segment display for the given character
- * 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, on = true)
-{
- 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);
-}
-
-//---------------------------------------------------------------------------
-// End of public modules - Just jump to the examples
-//---------------------------------------------------------------------------
-
-/* Draws a single segment
- * h segment length
- * r segment radius (default = segment_radius(h))
+/* Draws A1 segment (top)
+ * size segment size
* on on-relief/low-relief flag
*/
-module segment(h, r = 0, on = true)
+module segment_a1(size, on = true)
{
- radius = (r == 0) ? segment_radius(h) : r;
- length = (h > 2 * radius) ? h - 2 * radius : 0;
- 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 ]
- ]
- , paths = [ [ 0, 1, 2, 3, 4, 5 ] ]);
- }
+ translate(v = [ 0, digit_height(size), 0 ])
+ segment(size /2 , r = segment_radius(size), on = on);
}
-/*
- * Draws a decimal point
- * h Digit height
+/* Draws A2 segment (top)
+ * size segment size
* on on-relief/low-relief flag
*/
-module segment_dp(h, on = true)
+module segment_a2(size, on = true)
{
- radius = segment_radius(segment_length(h));
- 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, on = true)
-{
- translate(v = [ 0, digit_height(h), 0 ])
- segment(h, on = on);
+ translate(v = [ size / 2, digit_height(size), 0 ])
+ segment(size /2 , r = segment_radius(size), on = on);
}
/* Draws B segment (right top)
- * h segment length
+ * size segment size
* on on-relief/low-relief flag
*/
-module segment_b(h, on = true)
+module segment_b(size, on = true)
{
- translate(v = [ 0, h, 0 ])
- segment_c(h, on = on);
+ translate(v = [ 0, size, 0 ])
+ segment_c(size, on = on);
}
/* Draws C segment (right bottom)
- * h segment length
+ * size segment size
* on on-relief/low-relief flag
*/
-module segment_c(h, on = true)
+module segment_c(size, on = true)
{
- translate(v = [ h, h, 0 ])
+ translate(v = [ size, size, 0 ])
rotate(a = [ 0, 0, 270 ])
- segment(h, on = on);
+ segment(size, on = on);
}
/* Draws D segment (bottom)
- * h segment length
- * on on-relief/low-relief flag
- */
-module segment_d(h, on = true)
-{
- segment(h, on = on);
-}
-
-/* Draws E segment (left bottom)
- * h segment length
+ * size segment size
* on on-relief/low-relief flag
*/
-module segment_e(h, on = true)
+module segment_d(size, on = true)
{
- rotate(a = [ 0, 0, 90 ])
- segment(h, on = on);
+ segment(size, on = on);
}
-/* Draws F segment (left top)
- * h segment length
+/* Draws D1 segment (top)
+ * size segment size
* on on-relief/low-relief flag
*/
-module segment_f(h, on = true)
+module segment_d1(size, on = true)
{
- translate(v = [ 0, h, 0 ])
- segment_e(h, on = on);
+ segment(size /2 , r = segment_radius(size), on = on);
}
-/* Draws G segment (middle)
- * h segment length
+/* Draws D2 segment (top)
+ * size segment size
* on on-relief/low-relief flag
*/
-module segment_g(h, on = true)
+module segment_d2(size, on = true)
{
- translate(v = [ 0, h, 0 ])
- segment_d(h, on = on);
+ translate(v = [ size / 2, 0, 0 ])
+ segment(size /2 , r = segment_radius(size), on = on);
}
-/* Draws 0 in a 7 segment digit
- * h digit length
+/* Draws E segment (left bottom)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_0(h, on = true)
+module segment_e(size, on = true)
{
- 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);
+ rotate(a = [ 0, 0, 90 ])
+ segment(size, on = on);
}
-/* Draws 1 in a 7 segment digit
- * h digit length
+/* Draws F segment (left top)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_1(h, on = true)
+module segment_f(size, on = true)
{
- segment_b(segment_length(h), on);
- segment_c(segment_length(h), on);
+ translate(v = [ 0, size, 0 ])
+ segment_e(size, on = on);
}
-/* Draws 2 in a 7 segment digit
- * h digit length
+/* Draws G segment (middle)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_2(h, on = true)
+module segment_g(size, on = true)
{
- 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);
+ translate(v = [ 0, size, 0 ])
+ segment_d(size, on = on);
}
-/* Draws 3 in a 7 segment digit
- * h digit length
+/* Draws G1 segment (top)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_3(h, on = true)
+module segment_g1(size, on = true)
{
- 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);
+ translate(v = [ 0, size, 0 ])
+ segment(size /2 , r = segment_radius(size), on = on);
}
-/* Draws 4 in a 7 segment digit
- * h digit length
+/* Draws G2 segment (top)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_4(h, on = true)
+module segment_g2(size, on = true)
{
- segment_b(segment_length(h), on);
- segment_c(segment_length(h), on);
- segment_f(segment_length(h), on);
- segment_g(segment_length(h), on);
+ translate(v = [ size / 2, size, 0 ])
+ segment(size /2 , r = segment_radius(size), on = on);
}
-/* Draws 5 in a 7 segment digit
- * h digit length
+/* Draws H segment (upper left diagonal)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_5(h, on = true)
+module segment_h(size, on = true)
{
- 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);
+ translate(v = [ size / 2, size, 0 ])
+ mirror([ 1, 0, 0 ])
+ diag_segment(size, on = on);
}
-/* Draws 6 in a 7 segment digit
- * h digit length
+/* Draws I segment (middle top)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_6(h, on = true)
+module segment_i(size, on = true)
{
- 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);
+ translate(v = [ -size / 2, 0, 0 ])
+ segment_b(size, on = on);
}
-/* Draws 7 in a 7 segment digit
- * h digit length
+/* Draws J segment (upper right diagonal)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_7(h, on = true)
+module segment_j(size, on = true)
{
- segment_a(segment_length(h), on);
- segment_b(segment_length(h), on);
- segment_c(segment_length(h), on);
+ translate(v = [ size / 2, size, 0 ])
+ diag_segment(size, on = on);
}
-/* Draws 8 in a 7 segment digit
- * h digit length
+/* Draws K segment (lower right diagonal)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_8(h, on = true)
+module segment_k(size, on = true)
{
- 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);
+ translate(v = [ size, 0, 0 ])
+ mirror([ 1, 0, 0 ])
+ diag_segment(size, on = on);
}
-/* Draws 9 in a 7 segment digit
- * h digit length
+/* Draws L segment (middle bottom)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_9(h, on = true)
+module segment_l(size, on = true)
{
- 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);
+ translate(v = [ -size / 2, 0, 0 ])
+ segment_c(size, on = on);
}
-/* Draws A in a 7 segment digit
- * h digit length
+/* Draws M segment (lower left diagonal)
+ * size segment size
* on on-relief/low-relief flag
*/
-module digit7_A(h, on = true)
+module segment_m(size, on = true)
{
- 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);
+ diag_segment(size, on = on);
}
-/* Draws b in a 7 segment digit
- * h digit length
- * on on-relief/low-relief flag
+/*
+ * Place the decimal point at the end of the character
+ * size segment size
+ * on on-relief/low-relief flag
*/
-module digit7_B(h, on = true)
+module segment_p(size, on = true)
{
- 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);
+ radius = segment_radius(size);
+ translate(v = [ size + radius, 0, 0 ])
+ decimal_point(size, on = on);
}
-/* Draws C in a 7 segment digit
- * h digit length
- * on on-relief/low-relief flag
- */
-module digit7_C(h, on = true)
-{
- segment_a(segment_length(h), on);
- segment_d(segment_length(h), on);
- segment_e(segment_length(h), on);
- segment_f(segment_length(h), on);
-}
+//---------------------------------------------------------------------------
+// End of public modules - Just jump to the examples
+//---------------------------------------------------------------------------
-/* Draws d in a 7 segment digit
- * h digit length
- * on on-relief/low-relief flag
+/*
+ * Draws a decimal point
+ * size segment size
+ * on on-relief/low-relief flag
*/
-module digit7_D(h, on = true)
+module decimal_point(size, on = true)
{
- 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);
+ radius = segment_radius(size);
+ if (on)
+ {
+ 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 {
+ 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);
+ }
+ }
}
-/* Draws E in a 7 segment digit
- * h digit length
+/* Draws a single segment
+ * size segment size
+ * r segment radius (default = segment_radius(h))
* on on-relief/low-relief flag
*/
-module digit7_E(h, on = true)
+module segment(size, r = 0, on = true)
{
- 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);
+ radius = (r == 0) ? segment_radius(size) : r;
+ length = (size > 2 * radius) ? size - 2 * radius : 0;
+ 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, 6, 1 ]
+ , [ 1, 6, 2 ]
+ , [ 2, 6, 7 ]
+ , [ 2, 7, 3 ]
+ , [ 3, 7, 4 ]
+ , [ 4, 7, 5 ]
+ , [ 5, 7, 6 ]
+ , [ 0, 5, 6 ]
+ , [ 0, 1, 5 ]
+ , [ 1, 4, 5 ]
+ , [ 1, 2, 4 ]
+ , [ 2, 3, 4 ]
+ ]);
+ linear_extrude(height = radius)
+ polygon(points = [ [ 0 , 0]
+ , [ radius , radius ]
+ , [ radius + length, radius ]
+ , [ 2 * radius + length, 0 ]
+ , [ radius + length, -radius ]
+ , [ radius , -radius ]
+ ]
+ , paths = [ [ 0, 1, 2, 3, 4, 5 ] ]);
+ }
}
-/* Draws F in a 7 segment digit
- * h digit length
+/* Draws a diagonal segment
+ * size segment size
+ * r segment radius (default = segment_radius(h))
* on on-relief/low-relief flag
*/
-module digit7_F(h, on = true)
+module diag_segment(size, r = 0, on = true)
{
- segment_a(segment_length(h), on);
- segment_e(segment_length(h), on);
- segment_f(segment_length(h), on);
- segment_g(segment_length(h), on);
+ radius = (r == 0) ? segment_radius(size) : r;
+ 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 ]
+ ]
+ , 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 = [
+ [ 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 ]
+ , [ 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 = [ [ radius, radius ]
+ , [ radius, 2.41 * radius ]
+ , [ size / 2 - 2.41 * radius, size - radius ]
+ , [ size / 2 - radius, size - radius ]
+ , [ size / 2 - radius, size - 2.41 * radius ]
+ , [ 2.41 * radius, radius ]
+ ]
+ , paths = [ [ 0, 1, 2, 3, 4, 5 ] ]);
+ }
}
//---------------------------------------------------------------------------
// Examples
//---------------------------------------------------------------------------
-ex_height = 100; // Digit height for all examples
+ex_seglen = 100; // segment length for all examples
// Base for on-relief examples
-translate(v = [ 0, 0, -2 * segment_radius(ex_height) ])
- cube(size = [ (len("0123456789ABCDEF") + 2) * digit_spacing(ex_height)
- , 5 * ex_height
- , 2 * segment_radius(ex_height)
+translate(v = [ 0
+ , -2 * digit_height(ex_seglen)
+ , -2 * segment_radius(digit_height(ex_seglen)) ])
+ cube(size = [ 2 * digit_spacing(digit_height(ex_seglen))
+ , 4 * digit_height(ex_seglen)
+ , 2 * segment_radius(digit_height(ex_seglen))
]);
// On relief examples
-translate(v = [ digit_spacing(ex_height), 3.5 * ex_height, 0 ])
- digit7_str("0123456789ABCDEF", ex_height);
-translate(v = [ digit_spacing(ex_height), 2 * ex_height, 0 ])
- digit7_int(65535, ex_height);
+// 7 segment on-relief example
+translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2
+ , digit_height(ex_seglen) / 2
+ , 0 ])
+{
+ segment_a(ex_seglen);
+ segment_b(ex_seglen);
+ segment_c(ex_seglen);
+ segment_d(ex_seglen);
+ segment_e(ex_seglen);
+ segment_f(ex_seglen);
+ segment_g(ex_seglen);
+ segment_p(ex_seglen);
+}
-translate(v = [ digit_spacing(ex_height), 0.5 * ex_height, 0 ])
- digit7_float(123.45, ex_height);
+// 16 segment on-relief example
+translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2
+ , -1.5 * digit_height(ex_seglen)
+ , 0 ])
+{
+ segment_a1(ex_seglen);
+ segment_a2(ex_seglen);
+ segment_b(ex_seglen);
+ segment_c(ex_seglen);
+ segment_d1(ex_seglen);
+ segment_d2(ex_seglen);
+ segment_e(ex_seglen);
+ segment_f(ex_seglen);
+ segment_g1(ex_seglen);
+ segment_g2(ex_seglen);
+ segment_h(ex_seglen);
+ segment_i(ex_seglen);
+ segment_j(ex_seglen);
+ segment_k(ex_seglen);
+ segment_l(ex_seglen);
+ segment_m(ex_seglen);
+ segment_p(ex_seglen);
+}
// Low relief examples
// Low relief effect is performed by substracting from the base
-translate(v = [ 0, -5 * ex_height, 0 ])
+translate(v = [ 2 * digit_spacing(digit_height(ex_seglen)), 0, 0 ])
difference()
{
// Base for low-relief examples
- translate(v = [ 0, 0, -2 * segment_radius(ex_height) ])
- cube(size = [ (len("0123456789ABCDEF") + 2) * digit_spacing(ex_height)
- , 5 * ex_height
- , 2 * segment_radius(ex_height)
+ translate(v = [ 0
+ , -2 * digit_height(ex_seglen)
+ , -2 * segment_radius(digit_height(ex_seglen)) ])
+ cube(size = [ 2 * digit_spacing(digit_height(ex_seglen))
+ , 4 * digit_height(ex_seglen)
+ , 2 * segment_radius(digit_height(ex_seglen))
]);
- translate(v = [ digit_spacing(ex_height), 3.5 * ex_height, 0 ])
- digit7_str("0123456789ABCDEF", ex_height, on = false);
+ // 7 segment low-relief example
+ translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2
+ , digit_height(ex_seglen) / 2
+ , 0 ])
+ {
+ segment_a(ex_seglen, on = false);
+ segment_b(ex_seglen, on = false);
+ segment_c(ex_seglen, on = false);
+ segment_d(ex_seglen, on = false);
+ segment_e(ex_seglen, on = false);
+ segment_f(ex_seglen, on = false);
+ segment_g(ex_seglen, on = false);
+ segment_p(ex_seglen, on = false);
+ }
- translate(v = [ digit_spacing(ex_height), 2 * ex_height, 0 ])
- digit7_int(65535, 100, on = false);
+ // 16 segment on-relief example
+ translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2
+ , -1.5 * digit_height(ex_seglen)
+ , 0 ])
+ {
+ segment_a1(ex_seglen, on = false);
+ segment_a2(ex_seglen, on = false);
+ segment_b(ex_seglen, on = false);
+ segment_c(ex_seglen, on = false);
+ segment_d1(ex_seglen, on = false);
+ segment_d2(ex_seglen, on = false);
+ segment_e(ex_seglen, on = false);
+ segment_f(ex_seglen, on = false);
+ segment_g1(ex_seglen, on = false);
+ segment_g2(ex_seglen, on = false);
+ segment_h(ex_seglen, on = false);
+ segment_i(ex_seglen, on = false);
+ segment_j(ex_seglen, on = false);
+ segment_k(ex_seglen, on = false);
+ segment_l(ex_seglen, on = false);
+ segment_m(ex_seglen, on = false);
+ segment_p(ex_seglen, on = false);
+ }
- translate(v = [ digit_spacing(ex_height), 0.5 * ex_height, 0 ])
- digit7_float(123.45, 100, on = false);
}
/* EOF : seg_digit.scad */