2 * seg_digit.scad : 7 segment and 16 segment digit generation library
4 * Author : Jose Ignacio Croce Busquets <jose.croce@gmail.com>
9 * The module contains the following public methods
11 * segment_a(size, on = true)
12 * segment_b(size, on = true)
13 * segment_c(size, on = true)
14 * segment_d(size, on = true)
15 * segment_e(size, on = true)
16 * segment_f(size, on = true)
17 * segment_g(size, on = true) Write the corresponding segment from a 7
20 * on = on-relief/low-relief flag
22 * segment_dp(digit_size, on = true)
23 * Write the decimal point for a 7 segment display
24 * digit_size = whole digit size
25 * on = on-relief/low-relief flag
28 /* Segment length based on digit height */
29 function segment_length(height) = height / 2;
31 /* digit height based on segment length */
32 function digit_height(seglen) = 2 * seglen;
34 /* Segment radius based on segment length */
35 function segment_radius(seglen) = seglen / 10;
37 /* Position (horiz) for next digit based on digit length */
38 function digit_spacing(height) = segment_length(height) * 1.5;
40 /* Draws A segment (top)
42 * on on-relief/low-relief flag
44 module segment_a(size, on = true)
46 translate(v = [ 0, digit_height(size), 0 ])
47 segment(size, on = on);
50 /* Draws B segment (right top)
52 * on on-relief/low-relief flag
54 module segment_b(size, on = true)
56 translate(v = [ 0, size, 0 ])
57 segment_c(size, on = on);
60 /* Draws C segment (right bottom)
62 * on on-relief/low-relief flag
64 module segment_c(size, on = true)
66 translate(v = [ size, size, 0 ])
67 rotate(a = [ 0, 0, 270 ])
68 segment(size, on = on);
71 /* Draws D segment (bottom)
73 * on on-relief/low-relief flag
75 module segment_d(size, on = true)
77 segment(size, on = on);
80 /* Draws E segment (left bottom)
82 * on on-relief/low-relief flag
84 module segment_e(size, on = true)
86 rotate(a = [ 0, 0, 90 ])
87 segment(size, on = on);
90 /* Draws F segment (left top)
92 * on on-relief/low-relief flag
94 module segment_f(size, on = true)
96 translate(v = [ 0, size, 0 ])
97 segment_e(size, on = on);
100 /* Draws G segment (middle)
102 * on on-relief/low-relief flag
104 module segment_g(size, on = true)
106 translate(v = [ 0, size, 0 ])
107 segment_d(size, on = on);
111 * Draws a decimal point
112 * digit_size whole digit size
113 * on on-relief/low-relief flag
115 module segment_dp(digit_size, on = true)
117 radius = segment_radius(segment_length(digit_size));
120 polyhedron(points = [ [ 0, 0, 0 ]
121 , [ 0, 2 * radius, 0 ]
122 , [ 2 * radius, 2 * radius, 0 ]
123 , [ 2 * radius, 0, 0 ]
124 , [ radius, radius, radius ]
126 , triangles = [ [ 0, 1, 4 ]
134 polyhedron(points = [ [ 0, 0, 0 ]
135 , [ 0, 2 * radius, 0 ]
136 , [ 2 * radius, 2 * radius, 0 ]
137 , [ 2 * radius, 0, 0 ]
138 , [ radius, radius, -radius ]
140 , triangles = [ [ 0, 1, 4 ]
147 cube(size= [ 2 * radius, 2 * radius, radius ], center = false);
151 //---------------------------------------------------------------------------
152 // End of public modules - Just jump to the examples
153 //---------------------------------------------------------------------------
155 /* Draws a single segment
157 * r segment radius (default = segment_radius(h))
158 * on on-relief/low-relief flag
160 module segment(size, r = 0, on = true)
162 radius = (r == 0) ? segment_radius(size) : r;
163 length = (size > 2 * radius) ? size - 2 * radius : 0;
166 polyhedron(points = [ [ 0, 0, 0 ]
167 , [ radius , radius, 0 ]
168 , [ radius + length, radius, 0 ]
169 , [ 2 * radius + length, 0, 0 ]
170 , [ radius + length, -radius, 0 ]
171 , [ radius , -radius, 0 ]
172 , [ radius , 0, radius ]
173 , [ radius + length, 0, radius ]
175 , triangles = [ [ 0, 1, 6 ]
189 polyhedron(points = [ [ 0, 0, 0 ]
190 , [ radius , radius, 0 ]
191 , [ radius + length, radius, 0 ]
192 , [ 2 * radius + length, 0, 0 ]
193 , [ radius + length, -radius, 0 ]
194 , [ radius , -radius, 0 ]
195 , [ radius , 0, -radius ]
196 , [ radius + length, 0, -radius ]
198 , triangles = [ [ 0, 1, 6 ]
211 linear_extrude(height = radius)
212 polygon(points = [ [ 0 , 0]
213 , [ radius , radius ]
214 , [ radius + length, radius ]
215 , [ 2 * radius + length, 0 ]
216 , [ radius + length, -radius ]
217 , [ radius , -radius ]
219 , paths = [ [ 0, 1, 2, 3, 4, 5 ] ]);
223 //---------------------------------------------------------------------------
225 //---------------------------------------------------------------------------
227 ex_seglen = 100; // segment length for all examples
229 // Base for on-relief examples
230 translate(v = [ 0, 0, -2 * segment_radius(digit_height(ex_seglen)) ])
231 cube(size = [ 2 * digit_spacing(digit_height(ex_seglen))
232 , 2 * digit_height(ex_seglen)
233 , 2 * segment_radius(digit_height(ex_seglen))
236 // On relief examples
237 translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2
238 , digit_height(ex_seglen) / 2
241 segment_a(ex_seglen);
242 segment_b(ex_seglen);
243 segment_c(ex_seglen);
244 segment_d(ex_seglen);
245 segment_e(ex_seglen);
246 segment_f(ex_seglen);
247 segment_g(ex_seglen);
248 translate(v = [ digit_spacing(digit_height(ex_seglen)), 0, 0 ])
249 segment_dp(digit_height(ex_seglen));
252 // Low relief examples
253 // Low relief effect is performed by substracting from the base
254 translate(v = [ 2 * digit_spacing(digit_height(ex_seglen)), 0, 0 ])
257 // Base for low-relief examples
258 translate(v = [ 0, 0, -2 * segment_radius(digit_height(ex_seglen)) ])
259 cube(size = [ 2 * digit_spacing(digit_height(ex_seglen))
260 , 2 * digit_height(ex_seglen)
261 , 2 * segment_radius(digit_height(ex_seglen))
264 translate(v = [ digit_spacing(digit_height(ex_seglen)) / 2
265 , digit_height(ex_seglen) / 2
268 segment_a(ex_seglen, on = false);
269 segment_b(ex_seglen, on = false);
270 segment_c(ex_seglen, on = false);
271 segment_d(ex_seglen, on = false);
272 segment_e(ex_seglen, on = false);
273 segment_f(ex_seglen, on = false);
274 segment_g(ex_seglen, on = false);
275 translate(v = [ digit_spacing(digit_height(ex_seglen)), 0, 0 ])
276 segment_dp(digit_height(ex_seglen));
280 /* EOF : seg_digit.scad */