From: Jose Ignacio Croce Busquets Date: Sun, 16 Feb 2014 02:00:35 +0000 (-0300) Subject: 16 digit segment drawing X-Git-Url: http://crossforests.com/gitweb?a=commitdiff_plain;h=d1892307152abcc3135662ff0f63fbd21a2d8838;p=3dmodels%2Fseg_digit.git 16 digit segment drawing --- diff --git a/seg_digit.scad b/seg_digit.scad index 7f9b2d1..c0f1e1f 100644 --- a/seg_digit.scad +++ b/seg_digit.scad @@ -47,6 +47,26 @@ module segment_a(size, on = true) segment(size, on = on); } +/* Draws A1 segment (top) + * size segment size + * on on-relief/low-relief flag + */ +module segment_a1(size, on = true) +{ + translate(v = [ 0, digit_height(size), 0 ]) + segment(size /2 , r = segment_radius(size), on = on); +} + +/* Draws A2 segment (top) + * size segment size + * on on-relief/low-relief flag + */ +module segment_a2(size, on = true) +{ + translate(v = [ size / 2, digit_height(size), 0 ]) + segment(size /2 , r = segment_radius(size), on = on); +} + /* Draws B segment (right top) * size segment size * on on-relief/low-relief flag @@ -77,6 +97,25 @@ module segment_d(size, on = true) segment(size, on = on); } +/* Draws D1 segment (top) + * size segment size + * on on-relief/low-relief flag + */ +module segment_d1(size, on = true) +{ + segment(size /2 , r = segment_radius(size), on = on); +} + +/* Draws D2 segment (top) + * size segment size + * on on-relief/low-relief flag + */ +module segment_d2(size, on = true) +{ + translate(v = [ size / 2, 0, 0 ]) + segment(size /2 , r = segment_radius(size), on = on); +} + /* Draws E segment (left bottom) * size segment size * on on-relief/low-relief flag @@ -107,6 +146,87 @@ module segment_g(size, on = true) segment_d(size, on = on); } +/* Draws G1 segment (top) + * size segment size + * on on-relief/low-relief flag + */ +module segment_g1(size, on = true) +{ + translate(v = [ 0, size, 0 ]) + segment(size /2 , r = segment_radius(size), on = on); +} + +/* Draws G2 segment (top) + * size segment size + * on on-relief/low-relief flag + */ +module segment_g2(size, on = true) +{ + translate(v = [ size / 2, size, 0 ]) + segment(size /2 , r = segment_radius(size), on = on); +} + +/* Draws H segment (upper left diagonal) + * size segment size + * on on-relief/low-relief flag + */ +module segment_h(size, on = true) +{ + translate(v = [ size / 2, size, 0 ]) + mirror([ 1, 0, 0 ]) + diag_segment(size, on = on); +} + +/* Draws I segment (middle top) + * size segment size + * on on-relief/low-relief flag + */ +module segment_i(size, on = true) +{ + translate(v = [ -size / 2, 0, 0 ]) + segment_b(size, on = on); +} + +/* Draws J segment (upper right diagonal) + * size segment size + * on on-relief/low-relief flag + */ +module segment_j(size, on = true) +{ + translate(v = [ size / 2, size, 0 ]) + diag_segment(size, on = on); +} + +/* Draws K segment (lower right diagonal) + * size segment size + * on on-relief/low-relief flag + */ +module segment_k(size, on = true) +{ + translate(v = [ size, 0, 0 ]) + mirror([ 1, 0, 0 ]) + diag_segment(size, on = on); +} + +/* Draws L segment (middle bottom) + * size segment size + * on on-relief/low-relief flag + */ +module segment_l(size, on = true) +{ + translate(v = [ -size / 2, 0, 0 ]) + segment_c(size, on = on); +} + +/* Draws M segment (lower left diagonal) + * size segment size + * on on-relief/low-relief flag + */ +module segment_m(size, on = true) +{ + diag_segment(size, on = on); +} + /* * Draws a decimal point * digit_size whole digit size @@ -220,6 +340,74 @@ module segment(size, r = 0, on = true) } } +/* Draws a diagonal segment + * size segment size + * r segment radius (default = segment_radius(h)) + * on on-relief/low-relief flag + */ +module diag_segment(size, r = 0, on = true) +{ + 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 //--------------------------------------------------------------------------- @@ -227,13 +415,17 @@ module segment(size, r = 0, on = true) ex_seglen = 100; // segment length for all examples // Base for on-relief examples -translate(v = [ 0, 0, -2 * segment_radius(digit_height(ex_seglen)) ]) +translate(v = [ 0 + , -2 * digit_height(ex_seglen) + , -2 * segment_radius(digit_height(ex_seglen)) ]) cube(size = [ 2 * digit_spacing(digit_height(ex_seglen)) - , 2 * digit_height(ex_seglen) + , 4 * digit_height(ex_seglen) , 2 * segment_radius(digit_height(ex_seglen)) ]); // On relief examples + +// 7 segment on-relief example translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2 , digit_height(ex_seglen) / 2 , 0 ]) @@ -249,18 +441,46 @@ translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2 segment_dp(digit_height(ex_seglen)); } +// 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); + translate(v = [ digit_spacing(digit_height(ex_seglen)), 0, 0 ]) + segment_dp(digit_height(ex_seglen)); +} + // Low relief examples // Low relief effect is performed by substracting from the base translate(v = [ 2 * digit_spacing(digit_height(ex_seglen)), 0, 0 ]) difference() { // Base for low-relief examples - translate(v = [ 0, 0, -2 * segment_radius(digit_height(ex_seglen)) ]) + translate(v = [ 0 + , -2 * digit_height(ex_seglen) + , -2 * segment_radius(digit_height(ex_seglen)) ]) cube(size = [ 2 * digit_spacing(digit_height(ex_seglen)) - , 2 * digit_height(ex_seglen) + , 4 * digit_height(ex_seglen) , 2 * segment_radius(digit_height(ex_seglen)) ]); + // 7 segment low-relief example translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2 , digit_height(ex_seglen) / 2 , 0 ]) @@ -275,6 +495,32 @@ translate(v = [ 2 * digit_spacing(digit_height(ex_seglen)), 0, 0 ]) translate(v = [ digit_spacing(digit_height(ex_seglen)), 0, 0 ]) segment_dp(digit_height(ex_seglen)); } + + // 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); + translate(v = [ digit_spacing(digit_height(ex_seglen)), 0, 0 ]) + segment_dp(digit_height(ex_seglen), on = false); + } + } /* EOF : seg_digit.scad */