omdl  v0.6.1
OpenSCAD Mechanical Design Library
shapes2de.scad
Go to the documentation of this file.
1 //! Linearly extruded two-dimensional basic shapes.
2 /***************************************************************************//**
3  \file shapes2de.scad
4  \author Roy Allen Sutton
5  \date 2015-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  \ingroup shapes shapes_2de
31 *******************************************************************************/
32 
33 include <shapes2d.scad>;
34 
35 //----------------------------------------------------------------------------//
36 /***************************************************************************//**
37  \addtogroup shapes
38 
39  \amu_define caption (2d Extrusions)
40 
41  \amu_make png_files (append=dim extension=png)
42  \amu_make eps_files (append=dim extension=png2eps)
43  \amu_shell file_cnt ("echo ${png_files} | wc -w")
44  \amu_shell cell_num ("seq -f '(%g)' -s '^' ${file_cnt}")
45 
46  \htmlonly
47  \amu_image_table
48  (
49  type=html columns=4 image_width="200" cell_files="${png_files}"
50  table_caption="${caption}" cell_captions="${cell_num}"
51  )
52  \endhtmlonly
53  \latexonly
54  \amu_image_table
55  (
56  type=latex columns=4 image_width="1.25in" cell_files="${eps_files}"
57  table_caption="${caption}" cell_captions="${cell_num}"
58  )
59  \endlatexonly
60 *******************************************************************************/
61 
62 /***************************************************************************//**
63  \addtogroup shapes
64  @{
65 
66  \defgroup shapes_2de 2d Extrusions
67  \brief Extruded two-dimensional geometric shapes.
68  @{
69 *******************************************************************************/
70 //----------------------------------------------------------------------------//
71 
72 //----------------------------------------------------------------------------//
73 // openscad-amu macros
74 //----------------------------------------------------------------------------//
75 /***************************************************************************//**
76  \amu_define scope (shapes2de_dim)
77  \amu_define tuple (qvga_diag)
78 
79  \amu_define example_dim
80  (
81  \image html ${scope}_${tuple}_${function}.png "${function}"
82  \image latex ${scope}_${tuple}_${function}.eps "${function}" width=2.5in
83  \dontinclude ${scope}.scad \skipline ${function}(
84  )
85 *******************************************************************************/
86 //----------------------------------------------------------------------------//
87 
88 //! An extruded rectangle with edge, fillet, and/or chamfer corners.
89 /***************************************************************************//**
90  \param size <decimal-list-2|decimal> A list [x, y] of decimals
91  or a single decimal for (x=y).
92 
93  \param h <decimal-list-3:9|decimal> A list of decimals or a single
94  decimal to specify simple extrusion height.
95 
96  \param vr <decimal-list-4|decimal> The corner rounding radius.
97  A list [v1r, v2r, v3r, v4r] of decimals or a single decimal
98  for (v1r=v2r=v3r=v4r). Unspecified corners are not rounded.
99 
100  \param vrm <integer> The corner radius mode.
101  A 4-bit encoded integer that indicates each corner finish.
102  Use bit value \b 0 for \em fillet and \b 1 for \em chamfer.
103 
104  \param center <boolean> Center about origin.
105 
106  \details
107 
108  \sa linear_extrude_uls for a description on specifying \p h.
109 
110  \b Example
111  \amu_eval ( function=erectangle ${example_dim} )
112 *******************************************************************************/
113 module erectangle
114 (
115  size,
116  h,
117  vr,
118  vrm = 0,
119  center = false
120 )
121 {
122  linear_extrude_uls(h=h, center=center)
123  rectangle(size=size, vr=vr, vrm=vrm, center=center);
124 }
125 
126 //! An extruded rectangle with a removed rectangular core.
127 /***************************************************************************//**
128  \param size <decimal-list-2|decimal> A list [x, y] of decimals
129  or a single decimal for (x=y).
130  \param core <decimal-list-2|decimal> A list [x, y] of decimals
131  or a single decimal for (x=y).
132 
133  \param h <decimal-list-3:9|decimal> A list of decimals or a single
134  decimal to specify simple extrusion height.
135 
136  \param t <decimal-list-2|decimal> A list [x, y] of decimals
137  or a single decimal for (x=y).
138 
139  \param co <decimal-list-2> Core offset. A list [x, y] of decimals.
140  \param cr <decimal> Core z-rotation.
141 
142  \param vr <decimal-list-4|decimal> The default corner rounding radius.
143  A list [v1r, v2r, v3r, v4r] of decimals or a single decimal
144  for (v1r=v2r=v3r=v4r). Unspecified corners are not rounded.
145  \param vr1 <decimal-list-4|decimal> The outer corner rounding radius.
146  \param vr2 <decimal-list-4|decimal> The core corner rounding radius.
147 
148  \param vrm <integer> The default corner radius mode.
149  A 4-bit encoded integer that indicates each corner finish.
150  Use bit value \b 0 for \em fillet and \b 1 for \em chamfer.
151  \param vrm1 <integer> The outer corner radius mode.
152  \param vrm2 <integer> The core corner radius mode.
153 
154  \param center <boolean> Center about origin.
155 
156  \details
157 
158  \sa linear_extrude_uls for a description on specifying \p h.
159 
160  Thickness \p t
161  \li <tt>core = size - t</tt>; when \p t and \p size are given.
162  \li <tt>size = core + t</tt>; when \p t and \p core are given.
163 
164  \b Example
165  \amu_eval ( function=erectangle_c ${example_dim} )
166 *******************************************************************************/
167 module erectangle_c
168 (
169  size,
170  core,
171  h,
172  t,
173  co,
174  cr = 0,
175  vr,
176  vr1,
177  vr2,
178  vrm = 0,
179  vrm1,
180  vrm2,
181  center = false
182 )
183 {
184  linear_extrude_uls(h=h, center=center)
186  (
187  size=size, core=core, t=t,
188  co=co, cr=cr,
189  vr=vr, vr1=vr1, vr2=vr2,
190  vrm=vrm, vrm1=vrm1, vrm2=vrm2,
191  center=center
192  );
193 }
194 
195 //! An extruded rhombus.
196 /***************************************************************************//**
197  \param size <decimal-list-2|decimal> A list [w, h] of decimals
198  or a single decimal for (w=h).
199 
200  \param h <decimal-list-3:9|decimal> A list of decimals or a single
201  decimal to specify simple extrusion height.
202 
203  \param vr <decimal-list-4|decimal> The corner rounding radius.
204  A list [v1r, v2r, v3r, v4r] of decimals or a single decimal
205  for (v1r=v2r=v3r=v4r). Unspecified corners are not rounded.
206 
207  \param center <boolean> Center about origin.
208 
209  \details
210 
211  \sa linear_extrude_uls for a description on specifying \p h.
212 
213  \b Example
214  \amu_eval ( function=erhombus ${example_dim} )
215 *******************************************************************************/
216 module erhombus
217 (
218  size,
219  h,
220  vr,
221  center = false
222 )
223 {
224  linear_extrude_uls(h=h, center=center)
225  rhombus(size=size, vr=vr, center=center);
226 }
227 
228 //! An extruded general triangle specified by three vertices.
229 /***************************************************************************//**
230  \param v1 <point-2d> A point [x, y] for vertex 1.
231  \param v2 <point-2d> A point [x, y] for vertex 2.
232  \param v3 <point-2d> A point [x, y] for vertex 3.
233 
234  \param h <decimal-list-3:9|decimal> A list of decimals or a single
235  decimal to specify simple extrusion height.
236 
237  \param vr <decimal> The default vertex rounding radius.
238  \param v1r <decimal> Vertex 1 rounding radius.
239  \param v2r <decimal> Vertex 2 rounding radius.
240  \param v3r <decimal> Vertex 3 rounding radius.
241 
242  \param centroid <boolean> Center centroid at origin.
243  \param incenter <boolean> Center incenter at origin.
244  \param center <boolean> Center about origin.
245 
246  \details
247 
248  \sa linear_extrude_uls for a description on specifying \p h.
249 
250  \b Example
251  \amu_eval ( function=etriangle_ppp ${example_dim} )
252 *******************************************************************************/
253 module etriangle_ppp
254 (
255  v1,
256  v2,
257  v3,
258  h,
259  vr,
260  v1r,
261  v2r,
262  v3r,
263  centroid = false,
264  incenter = false,
265  center = false
266 )
267 {
268  linear_extrude_uls(h=h, center=center)
270  (
271  v1=v1, v2=v2, v3=v3,
272  vr=vr, v1r=v1r, v2r=v2r, v3r=v3r,
273  centroid=centroid, incenter=incenter
274  );
275 }
276 
277 //! An extruded general triangle specified by a list of its three vertices.
278 /***************************************************************************//**
279  \param v <point-2d-list-3> A list [v1, v2, v3] of points [x, y].
280 
281  \param h <decimal-list-3:9|decimal> A list of decimals or a single
282  decimal to specify simple extrusion height.
283 
284  \param vr <decimal-list-3|decimal> The vertex rounding radius. A
285  list [v1r, v2r, v3r] of decimals or a single decimal for
286  (v1r=v2r=v3r).
287 
288  \param centroid <boolean> Center centroid at origin.
289  \param incenter <boolean> Center incenter at origin.
290  \param center <boolean> Center about origin.
291 
292  \details
293 
294  \sa linear_extrude_uls for a description on specifying \p h.
295 
296  \b Example
297  \code{.C}
298  t = triangle_sss2lp( 30, 40, 50 );
299  r = [2, 4, 6];
300  etriangle_lp( v=t, h=5, vr=r );
301  \endcode
302 *******************************************************************************/
303 module etriangle_lp
304 (
305  v,
306  h,
307  vr,
308  centroid = false,
309  incenter = false,
310  center = false
311 )
312 {
313  linear_extrude_uls(h=h, center=center)
314  triangle_lp(v=v, vr=vr, centroid=centroid, incenter=incenter);
315 }
316 
317 //! An extruded general triangle specified by its three side lengths.
318 /***************************************************************************//**
319  \param s1 <decimal> The length of the side 1 (along the x-axis).
320  \param s2 <decimal> The length of the side 2.
321  \param s3 <decimal> The length of the side 3.
322 
323  \param h <decimal-list-3:9|decimal> A list of decimals or a single
324  decimal to specify simple extrusion height.
325 
326  \param vr <decimal> The default vertex rounding radius.
327  \param v1r <decimal> Vertex 1 rounding radius.
328  \param v2r <decimal> Vertex 2 rounding radius.
329  \param v3r <decimal> Vertex 3 rounding radius.
330 
331  \param centroid <boolean> Center centroid at origin.
332  \param incenter <boolean> Center incenter at origin.
333  \param center <boolean> Center about origin.
334 
335  \details
336 
337  \sa linear_extrude_uls for a description on specifying \p h.
338 
339  \b Example
340  \amu_eval ( function=etriangle_sss ${example_dim} )
341 *******************************************************************************/
342 module etriangle_sss
343 (
344  s1,
345  s2,
346  s3,
347  h,
348  vr,
349  v1r,
350  v2r,
351  v3r,
352  centroid = false,
353  incenter = false,
354  center = false
355 )
356 {
357  linear_extrude_uls(h=h, center=center)
359  (
360  s1=s1, s2=s2, s3=s3,
361  vr=vr, v1r=v1r, v2r=v2r, v3r=v3r,
362  centroid=centroid, incenter=incenter
363  );
364 }
365 
366 //! An extruded general triangle specified by a list of its three side lengths.
367 /***************************************************************************//**
368  \param v <decimal-list-3> A list [s1, s2, s3] of decimals.
369 
370  \param h <decimal-list-3:9|decimal> A list of decimals or a single
371  decimal to specify simple extrusion height.
372 
373  \param vr <decimal-list-3|decimal> The vertex rounding radius. A
374  list [v1r, v2r, v3r] of decimals or a single decimal for
375  (v1r=v2r=v3r).
376 
377  \param centroid <boolean> Center centroid at origin.
378  \param incenter <boolean> Center incenter at origin.
379  \param center <boolean> Center about origin.
380 
381  \details
382 
383  \sa linear_extrude_uls for a description on specifying \p h.
384 
385  \b Example
386  \code{.C}
387  t = triangle_sss2lp( 3, 4, 5 );
388  s = triangle_lp2ls( t );
389  etriangle_ls( v=s, h=5, vr=2 );
390  \endcode
391 *******************************************************************************/
392 module etriangle_ls
393 (
394  v,
395  h,
396  vr,
397  centroid = false,
398  incenter = false,
399  center = false
400 )
401 {
402  linear_extrude_uls(h=h, center=center)
403  triangle_ls(v=v, vr=vr, centroid=centroid, incenter=incenter);
404 }
405 
406 //! A general triangle specified by its sides with a removed triangular core.
407 /***************************************************************************//**
408  \param vs <decimal-list-3|decimal> The size. A list [s1, s2, s3] of
409  decimals or a single decimal for (s1=s2=s3).
410  \param vc <decimal-list-3|decimal> The core. A list [s1, s2, s3] of
411  decimals or a single decimal for (s1=s2=s3).
412 
413  \param h <decimal-list-3:9|decimal> A list of decimals or a single
414  decimal to specify simple extrusion height.
415 
416  \param co <decimal-list-2> Core offset. A list [x, y] of decimals.
417  \param cr <decimal> Core z-rotation.
418 
419  \param vr <decimal-list-3|decimal> The default vertex rounding radius.
420  A list [v1r, v2r, v3r] of decimals or a single decimal for
421  (v1r=v2r=v3r).
422  \param vr1 <decimal-list-3|decimal> The outer vertex rounding radius.
423  \param vr2 <decimal-list-3|decimal> The core vertex rounding radius.
424 
425  \param centroid <boolean> Center centroid at origin.
426  \param incenter <boolean> Center incenter at origin.
427  \param center <boolean> Center about origin.
428 
429  \details
430 
431  \sa linear_extrude_uls for a description on specifying \p h.
432 
433  \b Example
434  \amu_eval ( function=etriangle_ls_c ${example_dim} )
435 
436  \note The outer and inner triangles centroids are aligned prior to the
437  core removal.
438 *******************************************************************************/
439 module etriangle_ls_c
440 (
441  vs,
442  vc,
443  h,
444  co,
445  cr = 0,
446  vr,
447  vr1,
448  vr2,
449  centroid = false,
450  incenter = false,
451  center = false
452 )
453 {
454  linear_extrude_uls(h=h, center=center)
456  (
457  vs=vs, vc=vc,
458  co=co, cr=cr,
459  vr=vr, vr1=vr1, vr2=vr2,
460  centroid=centroid, incenter=incenter
461  );
462 }
463 
464 //! An extruded general triangle specified by two sides and the included angle.
465 /***************************************************************************//**
466  \param s1 <decimal> The length of the side 1.
467  \param a <decimal> The included angle in degrees.
468  \param s2 <decimal> The length of the side 2.
469 
470  \param h <decimal-list-3:9|decimal> A list of decimals or a single
471  decimal to specify simple extrusion height.
472 
473  \param x <decimal> The side to draw on the positive x-axis
474  (\p x=1 for \p s1).
475 
476  \param vr <decimal> The default vertex rounding radius.
477  \param v1r <decimal> Vertex 1 rounding radius.
478  \param v2r <decimal> Vertex 2 rounding radius.
479  \param v3r <decimal> Vertex 3 rounding radius.
480 
481  \param centroid <boolean> Center centroid at origin.
482  \param incenter <boolean> Center incenter at origin.
483  \param center <boolean> Center about origin.
484 
485  \details
486 
487  \sa linear_extrude_uls for a description on specifying \p h.
488 
489  \b Example
490  \amu_eval ( function=etriangle_sas ${example_dim} )
491 *******************************************************************************/
492 module etriangle_sas
493 (
494  s1,
495  a,
496  s2,
497  h,
498  x = 1,
499  vr,
500  v1r,
501  v2r,
502  v3r,
503  centroid = false,
504  incenter = false,
505  center = false
506 )
507 {
508  linear_extrude_uls(h=h, center=center)
510  (
511  s1=s1, a=a, s2=s2, x=x,
512  vr=vr, v1r=v1r, v2r=v2r, v3r=v3r,
513  centroid=centroid, incenter=incenter
514  );
515 }
516 
517 //! An extruded general triangle specified by a side and two adjacent angles.
518 /***************************************************************************//**
519  \param a1 <decimal> The adjacent angle 1 in degrees.
520  \param s <decimal> The side length adjacent to the angles.
521  \param a2 <decimal> The adjacent angle 2 in degrees.
522 
523  \param h <decimal-list-3:9|decimal> A list of decimals or a single
524  decimal to specify simple extrusion height.
525 
526  \param x <decimal> The side to draw on the positive x-axis
527  (\p x=1 for \p s).
528 
529  \param vr <decimal> The default vertex rounding radius.
530  \param v1r <decimal> Vertex 1 rounding radius.
531  \param v2r <decimal> Vertex 2 rounding radius.
532  \param v3r <decimal> Vertex 3 rounding radius.
533 
534  \param centroid <boolean> Center centroid at origin.
535  \param incenter <boolean> Center incenter at origin.
536  \param center <boolean> Center about origin.
537 
538  \details
539 
540  \sa linear_extrude_uls for a description on specifying \p h.
541 
542  \b Example
543  \amu_eval ( function=etriangle_asa ${example_dim} )
544 *******************************************************************************/
545 module etriangle_asa
546 (
547  a1,
548  s,
549  a2,
550  h,
551  x = 1,
552  vr,
553  v1r,
554  v2r,
555  v3r,
556  centroid = false,
557  incenter = false,
558  center = false
559 )
560 {
561  linear_extrude_uls(h=h, center=center)
563  (
564  a1=a1, s=s, a2=a2, x=x,
565  vr=vr, v1r=v1r, v2r=v2r, v3r=v3r,
566  centroid=centroid, incenter=incenter
567  );
568 }
569 
570 //! An extruded general triangle specified by a side, one adjacent angle and the opposite angle.
571 /***************************************************************************//**
572  \param a1 <decimal> The opposite angle 1 in degrees.
573  \param a2 <decimal> The adjacent angle 2 in degrees.
574  \param s <decimal> The side length.
575 
576  \param h <decimal-list-3:9|decimal> A list of decimals or a single
577  decimal to specify simple extrusion height.
578 
579  \param x <decimal> The side to draw on the positive x-axis
580  (\p x=1 for \p s).
581 
582  \param vr <decimal> The default vertex rounding radius.
583  \param v1r <decimal> Vertex 1 rounding radius.
584  \param v2r <decimal> Vertex 2 rounding radius.
585  \param v3r <decimal> Vertex 3 rounding radius.
586 
587  \param centroid <boolean> Center centroid at origin.
588  \param incenter <boolean> Center incenter at origin.
589  \param center <boolean> Center about origin.
590 
591  \details
592 
593  \sa linear_extrude_uls for a description on specifying \p h.
594 
595  \b Example
596  \amu_eval ( function=etriangle_aas ${example_dim} )
597 *******************************************************************************/
598 module etriangle_aas
599 (
600  a1,
601  a2,
602  s,
603  h,
604  x = 1,
605  vr,
606  v1r,
607  v2r,
608  v3r,
609  centroid = false,
610  incenter = false,
611  center = false
612 )
613 {
614  linear_extrude_uls(h=h, center=center)
616  (
617  a1=a1, a2=a2, s=s, x=x,
618  vr=vr, v1r=v1r, v2r=v2r, v3r=v3r,
619  centroid=centroid, incenter=incenter
620  );
621 }
622 
623 //! An extruded right-angled triangle specified by its opposite and adjacent side lengths.
624 /***************************************************************************//**
625  \param x <decimal> The length of the side along the x-axis.
626  \param y <decimal> The length of the side along the y-axis.
627 
628  \param h <decimal-list-3:9|decimal> A list of decimals or a single
629  decimal to specify simple extrusion height.
630 
631  \param vr <decimal> The default vertex rounding radius.
632  \param v1r <decimal> Vertex 1 rounding radius.
633  \param v2r <decimal> Vertex 2 rounding radius.
634  \param v3r <decimal> Vertex 3 rounding radius.
635 
636  \param centroid <boolean> Center centroid at origin.
637  \param incenter <boolean> Center incenter at origin.
638  \param center <boolean> Center about origin.
639 
640  \details
641 
642  \sa linear_extrude_uls for a description on specifying \p h.
643 
644  \b Example
645  \amu_eval ( function=etriangle_ss ${example_dim} )
646 *******************************************************************************/
647 module etriangle_ss
648 (
649  x,
650  y,
651  h,
652  vr,
653  v1r,
654  v2r,
655  v3r,
656  centroid = false,
657  incenter = false,
658  center = false
659 )
660 {
661  linear_extrude_uls(h=h, center=center)
663  (
664  x=x, y=y,
665  vr=vr, v1r=v1r, v2r=v2r, v3r=v3r,
666  centroid=centroid, incenter=incenter
667  );
668 }
669 
670 //! An extruded right-angled triangle specified by a side length and an angle.
671 /***************************************************************************//**
672  \param x <decimal> The length of the side along the x-axis.
673  \param y <decimal> The length of the side along the y-axis.
674  \param aa <decimal> The adjacent angle in degrees.
675  \param oa <decimal> The opposite angle in degrees.
676 
677  \param h <decimal-list-3:9|decimal> A list of decimals or a single
678  decimal to specify simple extrusion height.
679 
680  \param vr <decimal> The default vertex rounding radius.
681  \param v1r <decimal> Vertex 1 rounding radius.
682  \param v2r <decimal> Vertex 2 rounding radius.
683  \param v3r <decimal> Vertex 3 rounding radius.
684 
685  \param centroid <boolean> Center centroid at origin.
686  \param incenter <boolean> Center incenter at origin.
687  \param center <boolean> Center about origin.
688 
689  \details
690 
691  \sa linear_extrude_uls for a description on specifying \p h.
692 
693  \b Example
694  \amu_eval ( function=etriangle_sa ${example_dim} )
695 
696  \note When both \p x and \p y are given, both triangles are rendered.
697  \note When both \p aa and \p oa are given, \p aa is used.
698 *******************************************************************************/
699 module etriangle_sa
700 (
701  x,
702  y,
703  aa,
704  oa,
705  h,
706  vr,
707  v1r,
708  v2r,
709  v3r,
710  centroid = false,
711  incenter = false,
712  center = false
713 )
714 {
715  linear_extrude_uls(h=h, center=center)
717  (
718  x=x, y=y, aa=aa, oa=oa,
719  vr=vr, v1r=v1r, v2r=v2r, v3r=v3r,
720  centroid=centroid, incenter=incenter
721  );
722 }
723 
724 //! An extruded n-sided equiangular/equilateral regular polygon.
725 /***************************************************************************//**
726  \param n <decimal> The number of sides.
727  \param r <decimal> The ngon vertex radius.
728 
729  \param h <decimal-list-3:9|decimal> A list of decimals or a single
730  decimal to specify simple extrusion height.
731 
732  \param vr <decimal> The vertex rounding radius.
733 
734  \param center <boolean> Center about origin.
735 
736  \details
737 
738  \sa linear_extrude_uls for a description on specifying \p h.
739 
740  \b Example
741  \amu_eval ( function=engon ${example_dim} )
742 
743  See [Wikipedia](https://en.wikipedia.org/wiki/Regular_polygon)
744  for more information.
745 *******************************************************************************/
746 module engon
747 (
748  n,
749  r,
750  h,
751  vr,
752  center = false
753 )
754 {
755  linear_extrude_uls(h=h, center=center)
756  ngon(n=n, r=r, vr=vr);
757 }
758 
759 //! An extruded ellipse.
760 /***************************************************************************//**
761  \param size <decimal-list-2|decimal> A list [rx, ry] of decimals
762  or a single decimal for (rx=ry).
763 
764  \param h <decimal-list-3:9|decimal> A list of decimals or a single
765  decimal to specify simple extrusion height.
766 
767  \param center <boolean> Center about origin.
768 
769  \details
770 
771  \sa linear_extrude_uls for a description on specifying \p h.
772 
773  \b Example
774  \amu_eval ( function=eellipse ${example_dim} )
775 *******************************************************************************/
776 module eellipse
777 (
778  size,
779  h,
780  center = false
781 )
782 {
783  linear_extrude_uls(h=h, center=center)
784  ellipse(size=size);
785 }
786 
787 //! An extruded ellipse with a removed elliptical core.
788 /***************************************************************************//**
789  \param size <decimal-list-2|decimal> A list [rx, ry] of decimals
790  or a single decimal for (rx=ry).
791  \param core <decimal-list-2|decimal> A list [rx, ry] of decimals
792  or a single decimal for (rx=ry).
793 
794  \param h <decimal-list-3:9|decimal> A list of decimals or a single
795  decimal to specify simple extrusion height.
796 
797  \param t <decimal-list-2|decimal> A list [x, y] of decimals
798  or a single decimal for (x=y).
799 
800  \param co <decimal-list-2> Core offset. A list [x, y] of decimals.
801  \param cr <decimal> Core z-rotation.
802 
803  \param center <boolean> Center about origin.
804 
805  \details
806 
807  \sa linear_extrude_uls for a description on specifying \p h.
808 
809  Thickness \p t
810  \li <tt>core = size - t</tt>; when \p t and \p size are given.
811  \li <tt>size = core + t</tt>; when \p t and \p core are given.
812 
813  \b Example
814  \amu_eval ( function=eellipse_c ${example_dim} )
815 *******************************************************************************/
816 module eellipse_c
817 (
818  size,
819  core,
820  h,
821  t,
822  co,
823  cr = 0,
824  center = false
825 )
826 {
827  linear_extrude_uls(h=h, center=center)
828  ellipse_c(size=size, core=core, t=t, co=co, cr=cr);
829 }
830 
831 //! An extruded ellipse sector.
832 /***************************************************************************//**
833  \param size <decimal-list-2|decimal> A list [rx, ry] of decimals
834  or a single decimal for (rx=ry).
835 
836  \param h <decimal-list-3:9|decimal> A list of decimals or a single
837  decimal to specify simple extrusion height.
838 
839  \param a1 <decimal> The start angle in degrees.
840  \param a2 <decimal> The stop angle in degrees.
841 
842  \param center <boolean> Center about origin.
843 
844  \details
845 
846  \sa linear_extrude_uls for a description on specifying \p h.
847 
848  \b Example
849  \amu_eval ( function=eellipse_s ${example_dim} )
850 *******************************************************************************/
851 module eellipse_s
852 (
853  size,
854  h,
855  a1 = 0,
856  a2 = 0,
857  center = false
858 )
859 {
860  linear_extrude_uls(h=h, center=center)
861  ellipse_s(size=size, a1=a1, a2=a2);
862 }
863 
864 //! An extruded sector of an ellipse with a removed elliptical core.
865 /***************************************************************************//**
866  \param size <decimal-list-2|decimal> A list [rx, ry] of decimals
867  or a single decimal for (rx=ry).
868  \param core <decimal-list-2|decimal> A list [rx, ry] of decimals
869  or a single decimal for (rx=ry).
870 
871  \param h <decimal-list-3:9|decimal> A list of decimals or a single
872  decimal to specify simple extrusion height.
873 
874  \param t <decimal-list-2|decimal> A list [x, y] of decimals
875  or a single decimal for (x=y).
876 
877  \param a1 <decimal> The start angle in degrees.
878  \param a2 <decimal> The stop angle in degrees.
879 
880  \param co <decimal-list-2> Core offset. A list [x, y] of decimals.
881  \param cr <decimal> Core z-rotation.
882 
883  \param center <boolean> Center about origin.
884 
885  \details
886 
887  \sa linear_extrude_uls for a description on specifying \p h.
888 
889  Thickness \p t
890  \li <tt>core = size - t</tt>; when \p t and \p size are given.
891  \li <tt>size = core + t</tt>; when \p t and \p core are given.
892 
893  \b Example
894  \amu_eval ( function=eellipse_cs ${example_dim} )
895 *******************************************************************************/
896 module eellipse_cs
897 (
898  size,
899  core,
900  h,
901  t,
902  a1 = 0,
903  a2 = 0,
904  co,
905  cr = 0,
906  center = false
907 )
908 {
909  linear_extrude_uls(h=h, center=center)
910  ellipse_cs(a1=a1, a2=a2, size=size, core=core, t=t, co=co, cr=cr);
911 }
912 
913 //! An extruded two-dimensional star.
914 /***************************************************************************//**
915  \param size <decimal-list-2|decimal> A list [l, w] of decimals
916  or a single decimal for (size=l=2*w).
917 
918  \param h <decimal-list-3:9|decimal> A list of decimals or a single
919  decimal to specify simple extrusion height.
920 
921  \param n <decimal> The number of points.
922 
923  \param vr <decimal-list-3|decimal> The vertex rounding radius.
924  A list [v1r, v2r, v3r] of decimals or a single decimal for
925  (v1r=v2r=v3r).
926 
927  \param center <boolean> Center about origin.
928 
929  \details
930 
931  \sa linear_extrude_uls for a description on specifying \p h.
932 
933  \b Example
934  \amu_eval ( function=estar2d ${example_dim} )
935 *******************************************************************************/
936 module estar2d
937 (
938  size,
939  h,
940  n = 5,
941  vr,
942  center = false
943 )
944 {
945  linear_extrude_uls(h=h, center=center)
946  star2d(size=size, n=n, vr=vr);
947 }
948 
949 //! @}
950 //! @}
951 
952 //----------------------------------------------------------------------------//
953 // openscad-amu auxiliary scripts
954 //----------------------------------------------------------------------------//
955 
956 /*
957 BEGIN_SCOPE dim;
958  BEGIN_OPENSCAD;
959  include <shapes/shapes2de.scad>;
960 
961  shape = "eellipse_cs";
962  $fn = 72;
963 
964  if (shape == "erectangle")
965  erectangle( size=[25,40], vr=5, vrm=3, h=20, center=true );
966  else if (shape == "erectangle_c")
967  erectangle_c( size=[40,20], t=[10,1], co=[0,-6], cr=10, vr=5, vrm1=12, h=30, center=true );
968  else if (shape == "erhombus")
969  erhombus( size=[40,25], h=10, vr=[3,0,3,9], center=true );
970  else if (shape == "etriangle_ppp")
971  etriangle_ppp( v1=[0,0], v2=[5,25], v3=[40,5], h=20, vr=2, centroid=true, center=true );
972  else if (shape == "etriangle_sss")
973  etriangle_sss( s1=30, s2=40, s3=50, h=20, vr=2, centroid=true, center=true );
974  else if (shape == "etriangle_ls_c")
975  etriangle_ls_c(vs=50, vc=30, h=15, co=[0,-10], cr=180, vr=[2,2,8], centroid=true, center=true);
976  else if (shape == "etriangle_sas")
977  etriangle_sas( s1=50, a=60, s2=30, h=20, vr=2, centroid=true, center=true );
978  else if (shape == "etriangle_asa")
979  etriangle_asa( a1=30, s=50, a2=60, h=20, vr=2, centroid=true, center=true );
980  else if (shape == "etriangle_aas")
981  etriangle_aas( a1=60, a2=30, s=40, h=20, vr=2, centroid=true, center=true );
982  else if (shape == "etriangle_ss")
983  etriangle_ss( x=30, y=40, h=20, vr=2, centroid=true, center=true );
984  else if (shape == "etriangle_sa")
985  etriangle_sa( x=40, aa=30, h=20, vr=2, centroid=true, center=true );
986  else if (shape == "engon")
987  engon( n=6, r=25, h=20, vr=6, center=true );
988  else if (shape == "eellipse")
989  eellipse( size=[25, 40], h=20, center=true );
990  else if (shape == "eellipse_c")
991  eellipse_c( size=[25,40], core=[16,10], co=[0,10], cr=45, h=20, center=true );
992  else if (shape == "eellipse_s")
993  eellipse_s( size=[25,40], h=20, a1=90, a2=180, center=true );
994  else if (shape == "eellipse_cs")
995  eellipse_cs( size=[25,40], t=[10,5], a1=90, a2=180, co=[10,0], cr=45, h=20, center=true );
996  else if (shape == "estar2d")
997  estar2d( size=[40, 15], h=15, n=5, vr=2, center=true );
998  END_OPENSCAD;
999 
1000  BEGIN_MFSCRIPT;
1001  include --path "${INCLUDE_PATH}" {config_base,config_png}.mfs;
1002 
1003  views name "views" views "diag";
1004  defines name "shapes" define "shape"
1005  strings "
1006  erectangle
1007  erectangle_c
1008  erhombus
1009  etriangle_ppp
1010  etriangle_sss
1011  etriangle_ls_c
1012  etriangle_sas
1013  etriangle_asa
1014  etriangle_aas
1015  etriangle_ss
1016  etriangle_sa
1017  engon
1018  eellipse
1019  eellipse_c
1020  eellipse_s
1021  eellipse_cs
1022  estar2d
1023  ";
1024  variables add_opts_combine "views shapes";
1025  variables add_opts "--viewall --autocenter";
1026 
1027  include --path "${INCLUDE_PATH}" script_std.mfs;
1028  END_MFSCRIPT;
1029 END_SCOPE;
1030 
1031 BEGIN_SCOPE manifest;
1032  BEGIN_OPENSCAD;
1033  include <shapes/shapes2de.scad>;
1034 
1035  $fn = 72;
1036 
1037  grid_repeat( g=5, i=60, center=true )
1038  {
1039  erectangle( size=[25,40], vr=5, vrm=3, h=20, center=true );
1040  erectangle_c( size=[40,20], t=[10,1], co=[0,-6], cr=10, vr=5, vrm1=12, h=30, center=true );
1041  erhombus( size=[40,25], h=10, vr=[3,0,3,9], center=true );
1042  etriangle_ppp( v1=[0,0], v2=[5,25], v3=[40,5], h=20, vr=2, centroid=true, center=true );
1043  etriangle_sss( s1=30, s2=40, s3=50, h=20, vr=2, centroid=true, center=true );
1044  etriangle_ls_c( vs=50, vc=30, h=15, co=[0,-10], cr=180, vr=[2,2,8], centroid=true, center=true );
1045  etriangle_sas( s1=50, a=60, s2=30, h=20, vr=2, centroid=true, center=true );
1046  etriangle_asa( a1=30, s=50, a2=60, h=20, vr=2, centroid=true, center=true );
1047  etriangle_aas( a1=60, a2=30, s=40, h=20, vr=2, centroid=true, center=true );
1048  etriangle_ss( x=30, y=40, h=20, vr=2, centroid=true, center=true );
1049  etriangle_sa( x=40, aa=30, h=20, vr=2, centroid=true, center=true );
1050  engon( n=6, r=25, h=20, vr=6, center=true );
1051  eellipse( size=[25, 40], h=20, center=true );
1052  eellipse_c( size=[25,40], core=[16,10], co=[0,10], cr=45, h=20, center=true );
1053  eellipse_s( size=[25,40], h=20, a1=90, a2=180, center=true );
1054  eellipse_cs( size=[25,40], t=[10,5], a1=90, a2=180, co=[10,0], cr=45, h=20, center=true );
1055  estar2d( size=[40, 15], h=15, n=5, vr=2, center=true );
1056  }
1057  END_OPENSCAD;
1058 
1059  BEGIN_MFSCRIPT;
1060  include --path "${INCLUDE_PATH}" {config_base,config_stl}.mfs;
1061  include --path "${INCLUDE_PATH}" script_std.mfs;
1062  END_MFSCRIPT;
1063 END_SCOPE;
1064 */
1065 
1066 //----------------------------------------------------------------------------//
1067 // end of file
1068 //----------------------------------------------------------------------------//
module etriangle_aas(a1, a2, s, h, x=1, vr, v1r, v2r, v3r, centroid=false, incenter=false, center=false)
An extruded general triangle specified by a side, one adjacent angle and the opposite angle...
Definition: shapes2de.scad:599
module rectangle(size, vr, vrm=0, center=false)
A rectangle with edge, fillet, and/or chamfer corners.
Definition: shapes2d.scad:117
module etriangle_ss(x, y, h, vr, v1r, v2r, v3r, centroid=false, incenter=false, center=false)
An extruded right-angled triangle specified by its opposite and adjacent side lengths.
Definition: shapes2de.scad:648
module eellipse(size, h, center=false)
An extruded ellipse.
Definition: shapes2de.scad:777
module triangle_sa(x, y, aa, oa, vr, v1r, v2r, v3r, centroid=false, incenter=false)
A right-angled triangle specified by a side length and an angle.
Definition: shapes2d.scad:1016
module ellipse_cs(size, core, t, a1=0, a2=0, co, cr=0)
A sector of an ellipse with a removed elliptical core.
Definition: shapes2d.scad:1254
module ngon(n, r, vr)
An n-sided equiangular/equilateral regular polygon.
Definition: shapes2d.scad:1069
module rectangle_c(size, core, t, co, cr=0, vr, vr1, vr2, vrm=0, vrm1, vrm2, center=false)
A rectangle with a removed rectangular core.
Definition: shapes2d.scad:237
module erectangle(size, h, vr, vrm=0, center=false)
An extruded rectangle with edge, fillet, and/or chamfer corners.
Definition: shapes2de.scad:114
module ellipse_c(size, core, t, co, cr=0)
An ellipse with a removed elliptical core.
Definition: shapes2d.scad:1144
module ellipse_s(size, a1=0, a2=0)
An ellipse sector.
Definition: shapes2d.scad:1186
module etriangle_asa(a1, s, a2, h, x=1, vr, v1r, v2r, v3r, centroid=false, incenter=false, center=false)
An extruded general triangle specified by a side and two adjacent angles.
Definition: shapes2de.scad:546
module estar2d(size, h, n=5, vr, center=false)
An extruded two-dimensional star.
Definition: shapes2de.scad:937
module etriangle_sas(s1, a, s2, h, x=1, vr, v1r, v2r, v3r, centroid=false, incenter=false, center=false)
An extruded general triangle specified by two sides and the included angle.
Definition: shapes2de.scad:493
module triangle_lp(v, vr, centroid=false, incenter=false)
A general triangle specified by a list of its three vertices.
Definition: shapes2d.scad:480
module triangle_ss(x, y, vr, v1r, v2r, v3r, centroid=false, incenter=false)
A right-angled triangle specified by its opposite and adjacent side lengths.
Definition: shapes2d.scad:973
module eellipse_cs(size, core, h, t, a1=0, a2=0, co, cr=0, center=false)
An extruded sector of an ellipse with a removed elliptical core.
Definition: shapes2de.scad:897
module triangle_ls(v, vr, centroid=false, incenter=false)
A general triangle specified by a list of its three side lengths.
Definition: shapes2d.scad:591
module etriangle_lp(v, h, vr, centroid=false, incenter=false, center=false)
An extruded general triangle specified by a list of its three vertices.
Definition: shapes2de.scad:304
module triangle_sss(s1, s2, s3, vr, v1r, v2r, v3r, centroid=false, incenter=false)
A general triangle specified by its three side lengths.
Definition: shapes2d.scad:530
module triangle_aas(a1, a2, s, x=1, vr, v1r, v2r, v3r, centroid=false, incenter=false)
A general triangle specified by a side, one adjacent angle and the opposite angle.
Definition: shapes2d.scad:896
module etriangle_sa(x, y, aa, oa, h, vr, v1r, v2r, v3r, centroid=false, incenter=false, center=false)
An extruded right-angled triangle specified by a side length and an angle.
Definition: shapes2de.scad:700
module triangle_sas(s1, a, s2, x=1, vr, v1r, v2r, v3r, centroid=false, incenter=false)
A general triangle specified by two sides and the included angle.
Definition: shapes2d.scad:740
module triangle_ls_c(vs, vc, co, cr=0, vr, vr1, vr2, centroid=false, incenter=false)
A general triangle specified by its sides with a removed triangular core.
Definition: shapes2d.scad:646
module eellipse_c(size, core, h, t, co, cr=0, center=false)
An extruded ellipse with a removed elliptical core.
Definition: shapes2de.scad:817
module triangle_ppp(v1, v2, v3, vr, v1r, v2r, v3r, centroid=false, incenter=false)
A general triangle specified by three vertices.
Definition: shapes2d.scad:403
module etriangle_ls(v, h, vr, centroid=false, incenter=false, center=false)
An extruded general triangle specified by a list of its three side lengths.
Definition: shapes2de.scad:393
module linear_extrude_uls(h, center=false)
Linearly extrude 2d shape with extrusion upper and lower scaling.
module eellipse_s(size, h, a1=0, a2=0, center=false)
An extruded ellipse sector.
Definition: shapes2de.scad:852
module star2d(size, n=5, vr)
A two-dimensional star.
Definition: shapes2d.scad:1301
module etriangle_ppp(v1, v2, v3, h, vr, v1r, v2r, v3r, centroid=false, incenter=false, center=false)
An extruded general triangle specified by three vertices.
Definition: shapes2de.scad:254
module rhombus(size, vr, center=false)
A rhombus.
Definition: shapes2d.scad:302
module ellipse(size)
An ellipse.
Definition: shapes2d.scad:1103
module etriangle_sss(s1, s2, s3, h, vr, v1r, v2r, v3r, centroid=false, incenter=false, center=false)
An extruded general triangle specified by its three side lengths.
Definition: shapes2de.scad:343
module etriangle_ls_c(vs, vc, h, co, cr=0, vr, vr1, vr2, centroid=false, incenter=false, center=false)
A general triangle specified by its sides with a removed triangular core.
Definition: shapes2de.scad:440
module erhombus(size, h, vr, center=false)
An extruded rhombus.
Definition: shapes2de.scad:217
module triangle_asa(a1, s, a2, x=1, vr, v1r, v2r, v3r, centroid=false, incenter=false)
A general triangle specified by a side and two adjacent angles.
Definition: shapes2d.scad:811
module engon(n, r, h, vr, center=false)
An extruded n-sided equiangular/equilateral regular polygon.
Definition: shapes2de.scad:747
module erectangle_c(size, core, h, t, co, cr=0, vr, vr1, vr2, vrm=0, vrm1, vrm2, center=false)
An extruded rectangle with a removed rectangular core.
Definition: shapes2de.scad:168