From fe66e2effaa266b1a2e6d3237a9c018f548bfb3d Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Mon, 29 Apr 2019 15:28:06 +0800 Subject: [PATCH] I deleted wrong file XD --- src/rounded_extrude.scad | 73 ++++++++++++++++++++++++++++++++++ test/test_rounded_extrude.scad | 46 --------------------- 2 files changed, 73 insertions(+), 46 deletions(-) create mode 100644 src/rounded_extrude.scad delete mode 100644 test/test_rounded_extrude.scad diff --git a/src/rounded_extrude.scad b/src/rounded_extrude.scad new file mode 100644 index 00000000..3616be48 --- /dev/null +++ b/src/rounded_extrude.scad @@ -0,0 +1,73 @@ +/** +* rounded_extrude.scad +* +* Extrudes a 2D object roundly from 0 to 180 degrees. +* +* @copyright Justin Lin, 2017 +* @license https://opensource.org/licenses/lgpl-3.0.html +* +* @see https://openhome.cc/eGossip/OpenSCAD/lib-rounded_extrude.html +* +**/ + +include <__private__/__frags.scad>; +include <__private__/__is_vector.scad>; + +module rounded_extrude(size, round_r, angle = 90, twist = 0, convexity = 10) { + + is_vt = __is_vector(size); + x = is_vt ? size[0] : size; + y = is_vt ? size[1] : size; + + q_corner_frags = __frags(round_r) / 4; + + step_a = angle / q_corner_frags; + twist_step = twist / q_corner_frags; + + module layers(pre_x, pre_y, pre_h = 0, i = 1) { + module one_layer(current_a) { + wx = pre_x; + wy = pre_y; + + h = (round_r - pre_h) - round_r * cos(current_a); + + d_leng = + round_r * (sin(current_a) - sin(step_a * (i - 1))); + + sx = (d_leng * 2 + wx) / wx; + sy = (d_leng * 2 + wy) / wy; + + translate([0, 0, pre_h]) + rotate(-twist_step * (i - 1)) + linear_extrude( + h, + slices = 1, + scale = [sx, sy], + convexity = convexity, + twist = twist_step + ) scale([wx / x, wy / y]) + children(); + + test_rounded_extrude_data(i, wx, wy, pre_h, sx, sy); + + layers(wx * sx, wy * sy, h + pre_h, i + 1) + children(); + + } + + if(i <= q_corner_frags) { + one_layer(i * step_a) + children(); + } else if(i - q_corner_frags < 1) { + one_layer(q_corner_frags * step_a) + children(); + } + } + + layers(x, y) + children(); +} + +module test_rounded_extrude_data(i, wx, wy, pre_h, sx, sy) { + +} \ No newline at end of file diff --git a/test/test_rounded_extrude.scad b/test/test_rounded_extrude.scad deleted file mode 100644 index 27894f9e..00000000 --- a/test/test_rounded_extrude.scad +++ /dev/null @@ -1,46 +0,0 @@ -include ; - -module test_rounded_extrude() { - echo("==== test_rounded_extrude ===="); - - include ; - - expected_data = - [ - [], - [20, 20, 0, 1.06526, 1.06526], - [21.3053, 21.3053, 0.0427757, 1.06022, 1.06022], - [22.5882, 22.5882, 0.170371, 1.05484, 1.05484], - [23.8268, 23.8268, 0.380602, 1.04924, 1.04924], - [25, 25, 0.669873, 1.0435, 1.0435], - [26.0876, 26.0876, 1.03323, 1.0377, 1.0377], - [27.0711, 27.0711, 1.46447, 1.03186, 1.03186], - [27.9335, 27.9335, 1.95619, 1.02602, 1.02602], - [28.6603, 28.6603, 2.5, 1.02019, 1.02019], - [29.2388, 29.2388, 3.08658, 1.01438, 1.01438], - [29.6593, 29.6593, 3.7059, 1.0086, 1.0086], - [29.9144, 29.9144, 4.34737, 1.00286, 1.00286] - ]; - - module test_rounded_extrude_data(i, wx, wy, pre_h, sx, sy) { - data = [wx, wy, pre_h, sx, sy]; - - for(j = [0:4]) { - expected = round_n(expected_data[i][j]); - actual = round_n(data[j]); - assertEqual(expected, actual); - } - } - - $fn = 48; - - circle_r = 10; - round_r = 5; - - rounded_extrude(circle_r * 2, round_r) - circle(circle_r); -} - -test_rounded_extrude(); - -