From 1ff54374ae4b2347bcf6fa1c3c525ef2d903b0c2 Mon Sep 17 00:00:00 2001 From: mmcwilliams Date: Wed, 27 May 2020 09:51:37 -0400 Subject: [PATCH] v3 work. Almost there! --- libraries/gnal_v3.scad | 66 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 libraries/gnal_v3.scad diff --git a/libraries/gnal_v3.scad b/libraries/gnal_v3.scad new file mode 100644 index 0000000..2a2401d --- /dev/null +++ b/libraries/gnal_v3.scad @@ -0,0 +1,66 @@ + + +D=47; // start diameter +N=40; // number of spirals +FN=500; +$fn=FN; + +include <../libraries/path_extrude.scad>; + + + + bottom = -7.1; + w = 1.2; + top_w = .4; + top_offset = (w - top_w); + h = 2.2; + + facetProfile = [ + [w, -bottom], + [0, -bottom], + [0, 0], + [top_offset, -h], + [w, -h], + [w, 0] + ]; + + +function X (start_r, spacing, fn, r, i) = (start_r + (r * spacing) + (i * calcIncrement(spacing, fn))) * cos(i * calcAngle(fn)); +function Y (start_r, spacing, fn, r, i) = (start_r + (r * spacing) + (i * calcIncrement(spacing, fn))) * sin(i * calcAngle(fn)); + +function circ (d) = PI * d; +function calcFacetSize (end_d, fn) = circ( end_d ) / fn; +//function calcSteps(rotations, fn) = fn * rotations; +function calcAngle (fn) = 360 / fn; +function calcFn(start_d, start_fn, end_d, spacing, r) = start_fn + +( ((circ(calcR(start_d, spacing, r) * 2) - circ(start_d) ) + / (circ(end_d) - circ(start_d))) * ($fn - start_fn)); +function calcR(start_d, spacing, r) = (start_d / 2) + (spacing * r); +function calcIncrement(spacing, fn) = spacing / fn; + +/** + * spiral_7 - Combination of spiral_3 and spiral_4 that doesn't sacrifice + * performance. Hits an overflow when $fn is higher than 245 which creates + * 8418 vectors at 60 rotations. It's an edge casem + **/ +module spiral (rotations = 40, start_d = 48, spacing = 2.075, fn) { + + end_d = start_d + (spacing * 2 * rotations); + end_r = end_d / 2; + start_r = start_d / 2; + + facetSize = calcFacetSize(end_d, fn); + start_fn = round(circ(start_d) / facetSize); + + + spiralPath = [ for (r = [0 : rotations - 1]) for (i = [0 : round(calcFn(start_d, start_fn, end_d, spacing, r )) - 1 ]) + [ + X(start_r, spacing, round(calcFn(start_d, start_fn, end_d, spacing, r )), r, i), + Y(start_r, spacing, round(calcFn(start_d, start_fn, end_d, spacing, r )), r, i), + 0] + ]; + path_extrude(exShape=facetProfile, exPath=spiralPath); +} + + +spiral(N, D, 2.075, $fn); \ No newline at end of file