omdl  v0.6.1
OpenSCAD Mechanical Design Library
prisms.scad
Go to the documentation of this file.
1 //! Table of polyhedra data group: \c prisms
2 /***************************************************************************//**
3  \file prisms.scad
4  \author Roy Allen Sutton
5  \date 2017
6 
7  \copyright
8 
9  This file is part of [omdl] (https://github.com/royasutton/omdl),
10  an OpenSCAD mechanical design library.
11 
12  The \em omdl is free software; you can redistribute it and/or modify
13  it under the terms of the [GNU Lesser General Public License]
14  (http://www.gnu.org/licenses/lgpl.html) as published by the Free
15  Software Foundation; either version 2.1 of the License, or (at
16  your option) any later version.
17 
18  The \em omdl is distributed in the hope that it will be useful,
19  but WITHOUT ANY WARRANTY; without even the implied warranty of
20  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21  Lesser General Public License for more details.
22 
23  You should have received a copy of the GNU Lesser General Public
24  License along with the \em omdl; if not, write to the Free Software
25  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
26  02110-1301, USA; or see <http://www.gnu.org/licenses/>.
27 
28  \details
29 
30  This [omdl] formatted data table has been assembled using a script
31  that converts the polyhedra data obtained from [Anthony Thyssen]'s
32  [Studies into Polyhedra]. The vertices are tabulated in both their
33  original Cartesian as well as their converted spherical coordinate
34  form, which is convenient when scaling. The data originates from
35  one of three sources:
36 
37  \li [Exact Mathematics] as presented by [Anthony Thyssen],
38  \li the [Polyhedron Database] maintained by [Netlib], and
39  \li an [Encyclopedia of Polyhedra] by [George W. Hart].
40 
41  \note Include this library file using the \b include statement.
42 
43  [omdl]: https://github.com/royasutton/omdl
44 
45  [Anthony Thyssen]: http://www.ict.griffith.edu.au/anthony/anthony.html
46  [Studies into Polyhedra]: http://www.ict.griffith.edu.au/anthony/graphics/polyhedra
47  [Exact Mathematics]: http://www.ict.griffith.edu.au/anthony/graphics/polyhedra/maths.shtml
48 
49  [George W. Hart]: http://www.georgehart.com
50  [Encyclopedia of Polyhedra]: http://www.georgehart.com/virtual-polyhedra/vp.html
51 
52  [Netlib]: http://www.netlib.org
53  [Polyhedron Database]: http://www.netlib.org/polyhedra
54 
55  \ingroup database_polyhedra
56 *******************************************************************************/
57 
58 //----------------------------------------------------------------------------//
59 /***************************************************************************//**
60  \addtogroup database_polyhedra
61  @{
62  <br>
63  ### Group: prisms ###
64 
65  \amu_define caption (prisms)
66  \amu_make png_files (append=db_dim extension=png)
67  \amu_make stl_files (append=db_dim extension=stl)
68 
69  \amu_shell file_cnt ("echo ${png_files} | wc -w")
70  \amu_shell cell_num ("seq -f '(%g)' -s '^' ${file_cnt}")
71 
72  \amu_shell html_cell_titles
73  (
74  "echo ${stl_files} | grep -Po 'db_dim_\K[^.]*' | tr '\n' '^'"
75  )
76 
77  \htmlonly
78  \amu_image_table
79  (
80  type=html columns=4 image_width="200" cell_files="${png_files}"
81  table_caption="${caption}" cell_captions="${cell_num}"
82  cell_titles="${html_cell_titles}" cell_urls="${stl_files}"
83  )
84  \endhtmlonly
85 
86  \amu_define caption (prisms)
87  \amu_make eps_files (append=db_dim extension=png2eps)
88 
89  \latexonly
90  \amu_image_table
91  (
92  type=latex columns=4 image_width="1.25in" cell_files="${eps_files}"
93  table_caption="${caption}" cell_captions="${cell_num}"
94  )
95  \endlatexonly
96 
97  \amu_shell data
98  (
99  "grep -Po 'ECHO: \"\K[^\"]*' build/csg/prisms_db_autostat.log" --rmnl
100  )
101  \amu_shell columns ("echo '${data}' | awk -F '^' 'NR==1 {print NF;exit}'")
102  \amu_shell heading ("echo '${data}' | awk -F '^' 'NR==1 {print;exit}'")
103  \amu_shell texts ("echo '${data}' | awk -F '^' 'NR>1 {print}'")
104 
105  \amu_table
106  (
107  columns=${columns} column_headings="${heading}" cell_texts="${texts}"
108  )
109 *******************************************************************************/
110 //----------------------------------------------------------------------------//
111 
112 //! <matrix-2x9> \c prisms polyhedra data table columns definition.
113 //! \hideinitializer
115 [
116  ["id", "identifier"],
117  ["n", "name"],
118  ["o", "other name"],
119  ["g", "group"],
120  ["d", "data source"],
121  ["c", "cartesian vertices"],
122  ["s", "spherical vertices"],
123  ["f", "faces"],
124  ["e", "edges"]
125 ];
126 
127 //! <matrix-9xR> \c prisms polyhedra data table rows.
128 //! \hideinitializer
130 [
131  [
132  "decagonal_prism",
133  "Decagonal Prism",
134  empty_str,
135  "prisms",
136  "Polyhedron Database #26",
137  [
138  [-0.95542256321, 0.29524180884, -0.00000000000],
139  [-0.77295309045, 0.29524180884, 0.56158329236],
140  [-0.77295309045, 0.29524180884, -0.56158329236],
141  [-0.95542256321, -0.29524180884, -0.00000000000],
142  [-0.77295309045, -0.29524180884, 0.56158329236],
143  [-0.77295309045, -0.29524180884, -0.56158329236],
144  [-0.29524180884, 0.29524180884, 0.90866085456],
145  [-0.29524180884, 0.29524180884, -0.90866085456],
146  [-0.29524180884, -0.29524180884, 0.90866085456],
147  [-0.29524180884, -0.29524180884, -0.90866085456],
148  [ 0.29524180884, 0.29524180884, 0.90866085456],
149  [ 0.29524180884, 0.29524180884, -0.90866085456],
150  [ 0.29524180884, -0.29524180884, 0.90866085456],
151  [ 0.29524180884, -0.29524180884, -0.90866085456],
152  [ 0.77295309045, 0.29524180884, 0.56158329236],
153  [ 0.77295309045, 0.29524180884, -0.56158329236],
154  [ 0.95542256321, 0.29524180884, -0.00000000000],
155  [ 0.77295309045, -0.29524180884, 0.56158329236],
156  [ 0.77295309045, -0.29524180884, -0.56158329236],
157  [ 0.95542256321, -0.29524180884, -0.00000000000]
158  ],
159  [
160  [0.99999999999, 162.82796214954, 89.99999999999],
161  [0.99999999999, 159.09484255227, 55.83463617203],
162  [0.99999999999, 159.09484255227, 124.16536382795],
163  [0.99999999999, -162.82796214954, 89.99999999999],
164  [0.99999999999, -159.09484255227, 55.83463617203],
165  [0.99999999999, -159.09484255227, 124.16536382795],
166  [0.99999999999, 134.99999999999, 24.67905738915],
167  [0.99999999999, 134.99999999999, 155.32094261084],
168  [0.99999999999, -134.99999999999, 24.67905738915],
169  [0.99999999999, -134.99999999999, 155.32094261084],
170  [0.99999999999, 45.00000000000, 24.67905738915],
171  [0.99999999999, 45.00000000000, 155.32094261084],
172  [0.99999999999, -45.00000000000, 24.67905738915],
173  [0.99999999999, -45.00000000000, 155.32094261084],
174  [0.99999999999, 20.90515744772, 55.83463617203],
175  [0.99999999999, 20.90515744772, 124.16536382795],
176  [0.99999999999, 17.17203785045, 89.99999999999],
177  [0.99999999999, -20.90515744772, 55.83463617203],
178  [0.99999999999, -20.90515744772, 124.16536382795],
179  [0.99999999999, -17.17203785045, 89.99999999999]
180  ],
181  [
182  [17,19,18,13,9,5,3,4,8,12],
183  [1,0,2,7,11,15,16,14,10,6],
184  [2,5,9,7],
185  [0,3,5,2],
186  [1,4,3,0],
187  [6,8,4,1],
188  [10,12,8,6],
189  [14,17,12,10],
190  [16,19,17,14],
191  [15,18,19,16],
192  [11,13,18,15],
193  [7,9,13,11]
194  ],
195  [
196  [0,1],
197  [0,2],
198  [0,3],
199  [1,4],
200  [1,6],
201  [2,5],
202  [2,7],
203  [3,4],
204  [3,5],
205  [4,8],
206  [5,9],
207  [6,8],
208  [6,10],
209  [7,9],
210  [7,11],
211  [8,12],
212  [9,13],
213  [10,12],
214  [10,14],
215  [11,13],
216  [11,15],
217  [12,17],
218  [13,18],
219  [14,16],
220  [14,17],
221  [15,16],
222  [15,18],
223  [16,19],
224  [17,19],
225  [18,19]
226  ]
227  ],
228  [
229  "hexagonal_prism",
230  "Hexagonal Prism",
231  empty_str,
232  "prisms",
233  "Polyhedron Database #24",
234  [
235  [-0.89442719100, 0.44721359550, 0.00000000000],
236  [-0.44721359550, 0.44721359550, 0.77459666924],
237  [-0.44721359550, 0.44721359550, -0.77459666924],
238  [ 0.44721359550, 0.44721359550, 0.77459666924],
239  [ 0.44721359550, 0.44721359550, -0.77459666924],
240  [-0.89442719100, -0.44721359550, 0.00000000000],
241  [ 0.89442719100, 0.44721359550, 0.00000000000],
242  [-0.44721359550, -0.44721359550, 0.77459666924],
243  [-0.44721359550, -0.44721359550, -0.77459666924],
244  [ 0.44721359550, -0.44721359550, 0.77459666924],
245  [ 0.44721359550, -0.44721359550, -0.77459666924],
246  [ 0.89442719100, -0.44721359550, 0.00000000000]
247  ],
248  [
249  [1.00000000000, 153.43494882291, 89.99999999994],
250  [1.00000000000, 135.00000000000, 39.23152048360],
251  [1.00000000000, 135.00000000000, 140.76847951642],
252  [1.00000000000, 45.00000000000, 39.23152048360],
253  [1.00000000000, 45.00000000000, 140.76847951642],
254  [1.00000000000, -153.43494882291, 89.99999999994],
255  [1.00000000000, 26.56505117708, 89.99999999994],
256  [1.00000000000, -134.99999999998, 39.23152048360],
257  [1.00000000000, -134.99999999998, 140.76847951642],
258  [1.00000000000, -44.99999999999, 39.23152048360],
259  [1.00000000000, -44.99999999999, 140.76847951642],
260  [1.00000000000, -26.56505117707, 89.99999999994]
261  ],
262  [
263  [11,10,8,5,7,9],
264  [0,2,4,6,3,1],
265  [0,5,8,2],
266  [1,7,5,0],
267  [3,9,7,1],
268  [6,11,9,3],
269  [4,10,11,6],
270  [2,8,10,4]
271  ],
272  [
273  [0,1],
274  [0,2],
275  [0,5],
276  [1,3],
277  [1,7],
278  [2,4],
279  [2,8],
280  [3,6],
281  [3,9],
282  [4,6],
283  [4,10],
284  [5,7],
285  [5,8],
286  [6,11],
287  [7,9],
288  [8,10],
289  [9,11],
290  [10,11]
291  ]
292  ],
293  [
294  "octagonal_prism",
295  "Octagonal Prism",
296  empty_str,
297  "prisms",
298  "Polyhedron Database #25",
299  [
300  [-0.86285620946, 0.35740674434, 0.35740674434],
301  [-0.86285620946, 0.35740674434, -0.35740674434],
302  [-0.35740674434, 0.35740674434, 0.86285620946],
303  [-0.35740674434, 0.35740674434, -0.86285620946],
304  [-0.86285620946, -0.35740674434, 0.35740674434],
305  [-0.86285620946, -0.35740674434, -0.35740674434],
306  [-0.35740674434, -0.35740674434, 0.86285620946],
307  [ 0.35740674434, 0.35740674434, 0.86285620946],
308  [-0.35740674434, -0.35740674434, -0.86285620946],
309  [ 0.35740674434, 0.35740674434, -0.86285620946],
310  [ 0.86285620946, 0.35740674434, 0.35740674434],
311  [ 0.86285620946, 0.35740674434, -0.35740674434],
312  [ 0.35740674434, -0.35740674434, 0.86285620946],
313  [ 0.35740674434, -0.35740674434, -0.86285620946],
314  [ 0.86285620946, -0.35740674434, 0.35740674434],
315  [ 0.86285620946, -0.35740674434, -0.35740674434]
316  ],
317  [
318  [1.00000000000, 157.50000000001, 69.05897952780],
319  [1.00000000000, 157.50000000001, 110.94102047226],
320  [1.00000000000, 134.99999999999, 30.36119340482],
321  [1.00000000000, 134.99999999999, 149.63880659514],
322  [1.00000000000, -157.50000000001, 69.05897952780],
323  [1.00000000000, -157.50000000001, 110.94102047226],
324  [1.00000000000, -134.99999999999, 30.36119340482],
325  [1.00000000000, 45.00000000000, 30.36119340482],
326  [1.00000000000, -134.99999999999, 149.63880659514],
327  [1.00000000000, 45.00000000000, 149.63880659514],
328  [1.00000000000, 22.49999999998, 69.05897952780],
329  [1.00000000000, 22.49999999998, 110.94102047226],
330  [1.00000000000, -45.00000000000, 30.36119340482],
331  [1.00000000000, -45.00000000000, 149.63880659514],
332  [1.00000000000, -22.49999999998, 69.05897952780],
333  [1.00000000000, -22.49999999998, 110.94102047226]
334  ],
335  [
336  [14,15,13,8,5,4,6,12],
337  [0,1,3,9,11,10,7,2],
338  [1,5,8,3],
339  [0,4,5,1],
340  [2,6,4,0],
341  [7,12,6,2],
342  [10,14,12,7],
343  [11,15,14,10],
344  [9,13,15,11],
345  [3,8,13,9]
346  ],
347  [
348  [0,1],
349  [0,2],
350  [0,4],
351  [1,3],
352  [1,5],
353  [2,6],
354  [2,7],
355  [3,8],
356  [3,9],
357  [4,5],
358  [4,6],
359  [5,8],
360  [6,12],
361  [7,10],
362  [7,12],
363  [8,13],
364  [9,11],
365  [9,13],
366  [10,11],
367  [10,14],
368  [11,15],
369  [12,14],
370  [13,15],
371  [14,15]
372  ]
373  ],
374  [
375  "pentagonal_prism",
376  "Pentagonal Prism",
377  empty_str,
378  "prisms",
379  "Polyhedron Database #23",
380  [
381  [-0.81990936291, -0.50673185397, -0.26640470114],
382  [-0.81990936291, 0.50673185397, -0.26640470114],
383  [-0.50673185397, -0.50673185397, 0.69745656233],
384  [-0.50673185397, 0.50673185397, 0.69745656233],
385  [ 0.00000000000, -0.50673185397, -0.86210372240],
386  [ 0.00000000000, 0.50673185397, -0.86210372240],
387  [ 0.50673185397, -0.50673185397, 0.69745656233],
388  [ 0.50673185397, 0.50673185397, 0.69745656233],
389  [ 0.81990936291, -0.50673185397, -0.26640470114],
390  [ 0.81990936291, 0.50673185397, -0.26640470114]
391  ],
392  [
393  [1.00000000000, -148.28252558848, 105.45043708638],
394  [1.00000000000, 148.28252558848, 105.45043708638],
395  [1.00000000000, -134.99999999999, 45.77670183604],
396  [1.00000000000, 134.99999999999, 45.77670183604],
397  [1.00000000000, -89.99999999999, 149.55361568293],
398  [1.00000000000, 89.99999999999, 149.55361568293],
399  [1.00000000000, -45.00000000000, 45.77670183604],
400  [1.00000000000, 45.00000000000, 45.77670183604],
401  [1.00000000000, -31.71747441151, 105.45043708638],
402  [1.00000000000, 31.71747441151, 105.45043708638]
403  ],
404  [
405  [8,4,0,2,6],
406  [1,5,9,7,3],
407  [1,0,4,5],
408  [3,2,0,1],
409  [7,6,2,3],
410  [9,8,6,7],
411  [5,4,8,9]
412  ],
413  [
414  [0,1],
415  [0,2],
416  [0,4],
417  [1,3],
418  [1,5],
419  [2,3],
420  [2,6],
421  [3,7],
422  [4,5],
423  [4,8],
424  [5,9],
425  [6,7],
426  [6,8],
427  [7,9],
428  [8,9]
429  ]
430  ],
431  [
432  "square_prism",
433  "Square Prism",
434  "Cube",
435  "prisms",
436  "Polyhedron Database #1",
437  [
438  [-0.57735026919, -0.57735026919, -0.57735026919],
439  [-0.57735026919, -0.57735026919, 0.57735026919],
440  [-0.57735026919, 0.57735026919, -0.57735026919],
441  [-0.57735026919, 0.57735026919, 0.57735026919],
442  [ 0.57735026919, -0.57735026919, -0.57735026919],
443  [ 0.57735026919, -0.57735026919, 0.57735026919],
444  [ 0.57735026919, 0.57735026919, -0.57735026919],
445  [ 0.57735026919, 0.57735026919, 0.57735026919]
446  ],
447  [
448  [1.00000000000, -134.99999999999, 125.26438968275],
449  [1.00000000000, -134.99999999999, 54.73561031724],
450  [1.00000000000, 134.99999999999, 125.26438968275],
451  [1.00000000000, 134.99999999999, 54.73561031724],
452  [1.00000000000, -45.00000000000, 125.26438968275],
453  [1.00000000000, -45.00000000000, 54.73561031724],
454  [1.00000000000, 45.00000000000, 125.26438968275],
455  [1.00000000000, 45.00000000000, 54.73561031724]
456  ],
457  [
458  [5,4,0,1],
459  [7,5,1,3],
460  [1,0,2,3],
461  [4,6,2,0],
462  [7,6,4,5],
463  [3,2,6,7]
464  ],
465  [
466  [0,1],
467  [0,2],
468  [0,4],
469  [1,3],
470  [1,5],
471  [2,3],
472  [2,6],
473  [3,7],
474  [4,5],
475  [4,6],
476  [5,7],
477  [6,7]
478  ]
479  ],
480  [
481  "triangular_prism",
482  "Triangular Prism",
483  empty_str,
484  "prisms",
485  "Polyhedron Database #22",
486  [
487  [-0.65465367071, -0.65465367071, 0.37796447301],
488  [-0.65465367071, 0.65465367071, 0.37796447301],
489  [ 0.00000000000, -0.65465367071, -0.75592894602],
490  [ 0.00000000000, 0.65465367071, -0.75592894602],
491  [ 0.65465367071, -0.65465367071, 0.37796447301],
492  [ 0.65465367071, 0.65465367071, 0.37796447301]
493  ],
494  [
495  [1.00000000000, -134.99999999999, 67.79234570143],
496  [1.00000000000, 134.99999999999, 67.79234570143],
497  [1.00000000000, -89.99999999999, 139.10660535081],
498  [1.00000000000, 89.99999999999, 139.10660535081],
499  [1.00000000000, -45.00000000000, 67.79234570143],
500  [1.00000000000, 45.00000000000, 67.79234570143]
501  ],
502  [
503  [2,0,4],
504  [3,5,1],
505  [1,0,2,3],
506  [5,4,0,1],
507  [3,2,4,5]
508  ],
509  [
510  [0,1],
511  [0,2],
512  [0,4],
513  [1,3],
514  [1,5],
515  [2,3],
516  [2,4],
517  [3,5],
518  [4,5]
519  ]
520  ]
521 ];
522 
523 //! @}
524 
525 //----------------------------------------------------------------------------//
526 // openscad-amu auxiliary scripts
527 //----------------------------------------------------------------------------//
528 
529 /*
530 BEGIN_SCOPE db;
531 BEGIN_SCOPE autostat;
532  BEGIN_OPENSCAD;
533  include <math/math_polytope.scad>;
534  include <math/math_utility.scad>;
535  include <datatypes/datatypes_table.scad>;
536  include <database/geometry/polyhedra/prisms.scad>;
537 
538  fs = "^";
539 
540  tc = dtc_polyhedra_prisms;
541  tr = dtr_polyhedra_prisms;
542 
543  ids = get_table_ridl(tr);
544 
545  echo
546  (
547  str
548  (
549  "no.", fs, "table id", fs, "other name", fs,
550  "vertices", fs, "faces", fs, "edges",
551 
552  fs, "face-verticies",
553  fs, "face-angles",
554  fs, "edge-lengths",
555  fs, "edge-angles"
556  )
557  );
558 
559  for ( id = ids )
560  {
561  i = first(find(id, ids, c=1))+1;
562 
563  n = get_table_v(tr, tc, id, "n");
564  o = get_table_v(tr, tc, id, "o");
565  g = get_table_v(tr, tc, id, "g");
566  d = get_table_v(tr, tc, id, "d");
567 
568  c = get_table_v(tr, tc, id, "c");
569  s = get_table_v(tr, tc, id, "s");
570  f = get_table_v(tr, tc, id, "f");
571  e = get_table_v(tr, tc, id, "e");
572 
573  fo = is_empty(o) ? "-" : o;
574 
575  echo
576  (
577  str
578  (
579  i, fs, id, fs, fo, fs,
580  len(c), fs, len(f), fs, len(e),
581 
582  fs, hist(qsort(polytope_face_vcounts(f)), m=9),
583  fs, hist(qsort(dround(polytope_face_angles(c, f), d=1)), m=9),
584  fs, hist(qsort(sround(polytope_edge_lengths(c, e), d=3)), m=9),
585  fs, hist(qsort(dround(polytope_edge_angles(c, f), d=1)), m=9),
586 
587  fs
588  )
589  );
590  }
591  END_OPENSCAD;
592 
593  BEGIN_MFSCRIPT;
594  include --path "${INCLUDE_PATH}" {config_base,config_csg}.mfs;
595  include --path "${INCLUDE_PATH}" script_std.mfs;
596  END_MFSCRIPT;
597 END_SCOPE;
598 END_SCOPE;
599 */
600 
601 /*
602 BEGIN_SCOPE db;
603 BEGIN_SCOPE dim;
604  BEGIN_OPENSCAD;
605  include <units/units_coordinate.scad>;
606  include <tools/tools_polytope.scad>;
607  include <datatypes/datatypes_table.scad>;
608  include <database/geometry/polyhedra/prisms.scad>;
609 
610  config = 0;
611 
612  tc = dtc_polyhedra_prisms;
613  tr = dtr_polyhedra_prisms;
614 
615  id = "default";
616  sr = 100;
617 
618  pv = get_table_v(tr, tc, id, "c");
619  pf = get_table_v(tr, tc, id, "f");
620  pe = get_table_v(tr, tc, id, "e");
621 
622  sv = coordinates_csc(pv, sr);
623 
624  if (config == 0) // png preview
625  {
626  $fn = 25;
627 
628  %polyhedron(sv, pf);
629 
630  polytope_frame(sv, pf, pe)
631  {
632  circle(r = sr / 25);
633  color("lightblue")
634  sphere(r = sr / 25 * (1 + 1/2));
635  }
636  }
637 
638  if (config == 1) // stl model
639  {
640  polyhedron(sv, pf);
641  }
642  END_OPENSCAD;
643 
644  BEGIN_MFSCRIPT;
645  include --path "${INCLUDE_PATH}" {config_base,config_png}.mfs;
646 
647  views name "views" views "diag";
648  defines name "ids" define "id"
649  strings
650  "
651  decagonal_prism
652  hexagonal_prism
653  octagonal_prism
654  pentagonal_prism
655  square_prism
656  triangular_prism
657  ";
658  variables add_opts_combine "views ids";
659  variables add_opts "-D config=0 --viewall --autocenter";
660 
661  include --path "${INCLUDE_PATH}" script_new.mfs;
662 
663  include --path "${INCLUDE_PATH}" config_stl.mfs;
664  variables add_opts_combine "ids";
665  variables add_opts "-D config=1";
666 
667  include --path "${INCLUDE_PATH}" script_app.mfs;
668  END_MFSCRIPT;
669 END_SCOPE;
670 END_SCOPE;
671 */
672 
673 //----------------------------------------------------------------------------//
674 // end of file
675 //----------------------------------------------------------------------------//
empty_str
A string with no characters (the empty string).
Definition: constants.scad:77
dtr_polyhedra_prisms
Definition: prisms.scad:129
dtc_polyhedra_prisms
Definition: prisms.scad:114