From 090e9dbe097d16fd1b734e3888e7248efe171469 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Sat, 22 Apr 2017 17:11:41 +0800 Subject: [PATCH] added ellipse --- docs/images/lib-ellipse-1.JPG | Bin 0 -> 20164 bytes docs/images/lib-ellipse-2.JPG | Bin 0 -> 14290 bytes docs/lib-ellipse.md | 24 ++++++++++++++++++++++++ src/ellipse.scad | 26 ++++++++++++++++++++++++++ 4 files changed, 50 insertions(+) create mode 100644 docs/images/lib-ellipse-1.JPG create mode 100644 docs/images/lib-ellipse-2.JPG create mode 100644 docs/lib-ellipse.md create mode 100644 src/ellipse.scad diff --git a/docs/images/lib-ellipse-1.JPG b/docs/images/lib-ellipse-1.JPG new file mode 100644 index 0000000000000000000000000000000000000000..1926ea2eac425f9b13bbab30e547deb9dd97f736 GIT binary patch literal 20164 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 literal 0 HcmV?d00001 diff --git a/docs/images/lib-ellipse-2.JPG b/docs/images/lib-ellipse-2.JPG new file mode 100644 index 0000000000000000000000000000000000000000..c4297ba2e31b64dca790585f0b390c2bf7d3fa3b GIT binary patch literal 14290 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Μ+!+ABE237ST zphF8G@?|O2PO8ATDZzpmOGd}fa20k|dtj#;1?51WRAj<)5+lYVA&ShelocRj1}~DGdu#gwegUzAg|9&DSd#t>M^kmN7)&GmKBDmyF4X;bNx&E zDFW{c&`RvMEW)()hRnTJrOp%H>+4C28EtY;AODAH^>2n_Dw~@NWs;A#(5{w?LS3aU zlI`k(ToJ7rA_hGQtuR7ti%7?ATbj~z$z=yhVf(jOrl!v)S;i&h z)|$z2^wN_A!b(*PvU@zSniO=`aC(5MO+quf#)jtBMw~#!2=r+~&esp+^K1+H6vA; + + ellipse([40, 20]); + +![ellipse](images/lib-ellipse-1.JPG) + + include ; + + $fn = 8; + ellipse([20, 40]); + +![ellipse](images/lib-ellipse-2.JPG) + diff --git a/src/ellipse.scad b/src/ellipse.scad new file mode 100644 index 00000000..4a26ef21 --- /dev/null +++ b/src/ellipse.scad @@ -0,0 +1,26 @@ + +/** +* ellipse.scad +* +* Creates an ellipse. +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-ellipse.html +* +**/ + +module ellipse(axes) { + frags = $fn > 0 ? + ($fn >= 3 ? $fn : 3) : + max(min(360 / $fa, axes[0] * 2 * 3.14159 / $fs), 5); + + step_a = 360 / frags; + polygon( + [ + for(a = [0:step_a:360 - step_a]) + [axes[0] * cos(a), axes[1] * sin(a)] + ] + ); +} \ No newline at end of file