From 22664ba0f83112edb93888aeda7b6635cf79c549 Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Sun, 1 Mar 2020 16:48:04 +0800 Subject: [PATCH] add slices param --- src/experimental/demo/loft_demo.scad | 11 ++++++----- src/experimental/loft.scad | 20 ++++++++++++++++++-- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/experimental/demo/loft_demo.scad b/src/experimental/demo/loft_demo.scad index efec5411..5f232e1f 100644 --- a/src/experimental/demo/loft_demo.scad +++ b/src/experimental/demo/loft_demo.scad @@ -1,12 +1,13 @@ use ; use ; +use ; use ; sects = [ - for(i = [4:20]) - [ - for(p = shape_starburst(15, 12, i % 2 == 1 ? i : i - 1)) rotate_p([p[0], p[1], 3 * (i - 4)], i * 10) - ] + for(i = [4:10]) + reverse([ + for(p = shape_starburst(15, 12, i % 2 == 1 ? i : i - 1)) rotate_p([p[0], p[1], 5 * (i - 4)], i * 10) + ]) ]; -loft(sects); \ No newline at end of file +loft(sects, slices = 3); \ No newline at end of file diff --git a/src/experimental/loft.scad b/src/experimental/loft.scad index 1cedb51d..82bb3c2b 100644 --- a/src/experimental/loft.scad +++ b/src/experimental/loft.scad @@ -1,6 +1,6 @@ use ; -module loft(sections) { +module loft(sections, slices = 1) { function gcd(m, n) = n == 0 ? m : gcd(n, m % n); function lcm(m, n) = m * n / gcd(m, n); @@ -30,11 +30,27 @@ module loft(sections) { n <= 1 ? sect : _interpolate(sect, len(sect), n); module _loft(sect1, sect2) { + function inter_sects(s1, s2, s_leng, slices) = + slices == 1 ? [] : + let( + dps = [ + for(i = [0:lcm_n - 1]) + (s2[i] - s1[i]) / slices + ] + ) + [for(i = [1:slices - 1]) s1 + dps * i]; + lcm_n = lcm(len(sect1), len(sect2)); new_sect1 = interpolate(sect1, lcm_n / len(sect1)); new_sect2 = interpolate(sect2, lcm_n / len(sect2)); - sweep([new_sect1, new_sect2]); + sweep( + concat( + [new_sect1], + inter_sects(new_sect1, new_sect2, lcm_n, slices), + [new_sect2] + ) + ); } for(i = [0:len(sections) - 2]) {