From c6ca52aba8b89df5bf1002e05c4bc0c02bc6c949 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Fri, 3 Sep 2021 11:18:03 +0800 Subject: [PATCH] add r_union2 --- src/experimental/r_union2.scad | 145 +++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 src/experimental/r_union2.scad diff --git a/src/experimental/r_union2.scad b/src/experimental/r_union2.scad new file mode 100644 index 00000000..0fc67dfc --- /dev/null +++ b/src/experimental/r_union2.scad @@ -0,0 +1,145 @@ +use <__comm__/__frags.scad>; + +module r_union2(r = 1) { + module _r_union2(r = 1) { + fn = __frags(r); + step = 90 / fn; + rx = is_list(r) ? r[1] : r; + ry = is_list(r) ? r[0] : r; + + for(i = [0:fn - 1]) { + x = rx - sin(i * step) * rx; + y = ry - cos(i * step) * ry; + xi = rx - sin(i * step + step) * rx; + yi = ry - cos(i * step + step) * ry; + hull() { + intersection() { + offset(x) children(0); + offset(y) children(1); + } + intersection() { + offset(xi) children(0); + offset(yi) children(1); + } + } + } + + children(0); + children(1); + } + + if($children == 0) { + // nope + } + else if($children == 1) { + children(0); + } + else if($children == 2) { + _r_union2(r) { + children(0); + children(1); + }; + } + // OpenSCAD have to enumerate children explicitly. + // Currently, this module allow 10 children. + else if($children == 3) { + r_union2(r) { + _r_union2(r) { + children(0); + children(1); + }; + children(2); + } + } + else if($children == 4) { + r_union2(r) { + _r_union2(r) { + children(0); + children(1); + }; + children(2); + children(3); + } + } + else if($children == 5) { + r_union2(r) { + _r_union2(r) { + children(0); + children(1); + }; + children(2); + children(3); + children(4); + } + } + else if($children == 6) { + r_union2(r) { + _r_union2(r) { + children(0); + children(1); + }; + children(2); + children(3); + children(4); + children(5); + } + } + else if($children == 7) { + r_union2(r) { + _r_union2(r) { + children(0); + children(1); + }; + children(2); + children(3); + children(4); + children(5); + children(6); + } + } + else if($children == 8) { + r_union2(r) { + _r_union2(r) { + children(0); + children(1); + }; + children(2); + children(3); + children(4); + children(5); + children(6); + children(7); + } + } + else if($children == 9) { + r_union2(r) { + _r_union2(r) { + children(0); + children(1); + }; + children(2); + children(3); + children(4); + children(5); + children(6); + children(7); + children(8); + } + } + else if($children == 10) { + r_union2(r) { + _r_union2(r) { + children(0); + children(1); + }; + children(2); + children(3); + children(4); + children(5); + children(6); + children(7); + children(8); + children(9); + } + } +} \ No newline at end of file