1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-11 01:04:07 +02:00

rewrote to support cone

This commit is contained in:
Justin Lin
2017-05-06 20:11:57 +08:00
parent d912e645a0
commit 7ee9256b9b

View File

@@ -12,33 +12,25 @@
*
**/
function helix(radius, levels, level_dist,
vt_dir = "SPI_DOWN", rt_dir = "CT_CLK") =
function helix(radius, levels, level_dist, vt_dir = "SPI_DOWN", rt_dir = "CT_CLK") =
let(
points = circle_path(radius),
leng = len(points),
r1 = len(radius) == undef ? radius : radius[0],
r2 = len(radius) == undef ? radius : radius[1],
_frags = $fn > 0 ?
($fn >= 3 ? $fn : 3) :
max(min(360 / $fa, radius * 6.28318 / $fs), 5),
offset_z = level_dist / _frags,
v_dir = (vt_dir == "SPI_DOWN" ? -1 : 1),
r_dir = (rt_dir == "CT_CLK" ? 1 : -1)
) [
for(l = [0:levels - 1])
for(i = [0:leng - 1])
r_dir == 1 ? [ // COUNT_CLOCKWISE
points[i][0],
points[i][1],
v_dir * (l * level_dist + offset_z * i)
] : ( // CLOCKWISE
i == 0 ? [
points[0][0],
points[0][1],
v_dir * l * level_dist
] : [
points[leng - i][0],
points[leng - i][1],
v_dir * (l * level_dist + offset_z * i)
]
)
max(min(360 / $fa, r1 * 6.28318 / $fs), 5),
h = level_dist * levels,
vt_d = vt_dir == "SPI_DOWN" ? 1 : -1,
rt_d = rt_dir == "CT_CLK" ? 1 : -1,
r_diff = (r1 - r2) * vt_d,
h_step = level_dist / _frags * vt_d,
r_step = r_diff / (levels * _frags),
a_step = 360 / _frags * rt_d,
begin_r = vt_dir == "SPI_DOWN" ? r2 : r1,
begin_h = vt_dir == "SPI_DOWN" ? h : 0
)
[
for(i = [0:_frags * levels])
let(r = begin_r + r_step * i, a = a_step * i)
[r * cos(a), r * sin(a), begin_h - h_step * i]
];