From be87196286b62f444fdfd91c39124fd3a5092aa1 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Thu, 11 May 2017 15:24:02 +0800 Subject: [PATCH] added rounded_cylinder --- README.md | 1 + docs/images/lib-rounded_cylinder-1.JPG | Bin 0 -> 17358 bytes docs/lib-rounded_cylinder.md | 26 ++++++++++++ src/rounded_cylinder.scad | 54 +++++++++++++++++++++++++ 4 files changed, 81 insertions(+) create mode 100644 docs/images/lib-rounded_cylinder-1.JPG create mode 100644 docs/lib-rounded_cylinder.md create mode 100644 src/rounded_cylinder.scad diff --git a/README.md b/README.md index 24e6aed4..121b4a0c 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,7 @@ Too many dependencies? Because OpenSCAD doesn't provide namespace management, I - 3D - [rounded_cube](https://openhome.cc/eGossip/OpenSCAD/lib-rounded_cube.html) + - [rounded_cylinder](https://openhome.cc/eGossip/OpenSCAD/lib-rounded_cylinder.html) - [line3d](https://openhome.cc/eGossip/OpenSCAD/lib-line3d.html) - [polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-polyline3d.html) - [hull_polyline3d](https://openhome.cc/eGossip/OpenSCAD/lib-hull_polyline3d.html) diff --git a/docs/images/lib-rounded_cylinder-1.JPG b/docs/images/lib-rounded_cylinder-1.JPG new file mode 100644 index 0000000000000000000000000000000000000000..25f4cd09a5c1ccf7a6a23ee8d114911297c3373d GIT binary patch literal 17358 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 literal 0 HcmV?d00001 diff --git a/docs/lib-rounded_cylinder.md b/docs/lib-rounded_cylinder.md new file mode 100644 index 00000000..4824a9b3 --- /dev/null +++ b/docs/lib-rounded_cylinder.md @@ -0,0 +1,26 @@ +# rounded_cylinder + +Creates a rounded cylinder. + +## Parameters + +- `radius` : The radius of the cylinder. It also accepts a vector `[r1, r2]`. `r1` is the bottom radius and `r2` is the top radius of a cone. +- `h` : The height of the cylinder or cone. + +- `round_r` : The sphere radius which fits the edges of the bottom and the top. +- `center` : `false` (default), z ranges from 0 to h. `true`, z ranges from -h/2 to +h/2 +- `convexity` : See [Rotate Extrude](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_the_2D_Subsystem#Rotate_Extrude) for details. +- `slices` : The fragments of the rounded edge. +- `$fa`, `$fs`, `$fn` : Used to control the eight quadrants. Check [the circle module](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Using_the_2D_Subsystem#circle) for more details. The final fragments of a sphere will be a multiple of 4 to fit edges. + +## Examples + + include ; + + rounded_cylinder( + radius = [20, 10], + h = 25, + round_r = 3 + ); + +![rounded_cylinder](images/lib-rounded_cylinder-1.JPG) \ No newline at end of file diff --git a/src/rounded_cylinder.scad b/src/rounded_cylinder.scad new file mode 100644 index 00000000..00ca3f29 --- /dev/null +++ b/src/rounded_cylinder.scad @@ -0,0 +1,54 @@ +/** +* rounded_cylinder.scad +* +* Creates a rounded cylinder. +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_cylinder.html +* +**/ + +include <__private__/__is_vector.scad>; +include <__private__/__frags.scad>; + +module rounded_cylinder(radius, h, round_r, convexity = 2, center = false, slices = undef) { + is_vt = __is_vector(radius); + r1 = is_vt ? radius[0] : radius; + r2 = is_vt ? radius[1] : radius; + + frags = __frags(round_r); + + function step_a(sector_angle) = + sector_angle / (slices == undef ? frags * sector_angle / 360 : slices); + + b_ang = atan2(h, r1 - r2); + b_sector_angle = 180 - b_ang; + b_leng = r1 - round_r / tan(b_ang / 2); + + t_sector_angle = b_ang; + t_leng = r2 - round_r * tan(t_sector_angle / 2); + + translate(center ? [0, 0, -h/2] : [0, 0, 0]) rotate_extrude(convexity = convexity) + polygon( + concat( + [[0, 0], [b_leng, 0]], + [ + for(ang = [-90:step_a(b_sector_angle):-90 + b_sector_angle]) + [ + round_r * cos(ang) + b_leng, + round_r * sin(ang) + round_r + ] + ], + [ + for(ang = [90 - t_sector_angle:step_a(t_sector_angle):90]) + [ + round_r * cos(ang) + t_leng, + round_r * sin(ang) + h - round_r + ] + ], + [[t_leng, h], [0, h]] + ) + ); +} \ No newline at end of file