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);
*/
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);
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
//---------------------------------------------------------------------------
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
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 */
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
}
/*
+ * 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))
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 ]
, [ 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 ]
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
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
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
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);
}
}