-
-
Save groovenectar/292db1688b79efd6ce11 to your computer and use it in GitHub Desktop.
// More information: https://danielupshaw.com/openscad-rounded-corners/ | |
module roundedcube_simple(size = [1, 1, 1], center = false, radius = 0.5) { | |
// If single value, convert to [x, y, z] vector | |
size = (size[0] == undef) ? [size, size, size] : size; | |
translate = (center == false) ? | |
[radius, radius, radius] : | |
[ | |
radius - (size[0] / 2), | |
radius - (size[1] / 2), | |
radius - (size[2] / 2) | |
]; | |
translate(v = translate) | |
minkowski() { | |
cube(size = [ | |
size[0] - (radius * 2), | |
size[1] - (radius * 2), | |
size[2] - (radius * 2) | |
]); | |
sphere(r = radius); | |
} | |
} |
I am wondering about how to convert this to roundedcylinder_simple.
Thoughts?
I am wondering about how to convert this to roundedcylinder_simple.
Thoughts?
It's been a long while since I've worked on this...
I would think that a rounded cylinder could also involve the minkowski
transform:
https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#minkowski
So I guess you would take a cylinder, and then add another cylinder (or perhaps a sphere) on a perpendicular axis along the edge, then apply a minkowski
transformation to the whole thing? Actually I wonder if I could have used a cylinder or two for this rather than a sphere, now that I'm digging back in a little bit... I hope/wish I can get back into printing and designing within the next few years!
Thank you for sharing!!
Thanks to grovenectar for the roundedcube_simple() and roundedcube() modules - they helped me a lot, and enabled me to understand the minkowski operation!
Thanks to daSpud46 for the roundedcylinder_simple() module. However, I think that there is a mistake in the code.
Because he copied the translate part from grovenectar's roundedcube_simple() module, he assumed that the true/false choice affects cylinder in exactly the same way as it affects the position of cube(). But it doesn't!
In cube(), "true" locates the center of the cube at [0,0,0], and "false" locates the lower bottom corner at [0,0,0]. But with cylinder(), "true" only affects the z-position of the cylinder; Whether "true" or "false", the x-center and y-center of the cylinder() is always at [0,0].
So here is my modified code:
module roundedcylinder_simple(size = [1, 1, 1], center = false, radius = 0.5) {
// If single value, convert to [x, y, z] vector
size = (size[0] == undef) ? [size, size, size] : size;
// roundedcylinder_simple(size = [height, bottom_radius, top_radius], center = false, radius);
translate = (center == false) ?
[0, 0, radius] :
[0, 0, radius-size[0]/2];
translate(v = translate)
minkowski() {
cylinder(h = size[0] - (radius * 2),
r1= size[1] - (radius * 2),
r2 = size[2] - (radius * 2)
);
sphere(r = radius);
}
}
$fs = 0.01;
$fn = 60;
roundedcylinder_simple(size=[8,5,5], center=false, radius=1);
Usage:
Examples:
Output: