From d6213ffddb76837d76b3806b735495a6fa339cde Mon Sep 17 00:00:00 2001 From: Justin Lin Date: Mon, 2 Mar 2020 15:51:51 +0800 Subject: [PATCH] refactor --- .../_impl/_voronoi_lines_impl.scad | 37 ++++++++++++++++++ src/experimental/voronoi_lines.scad | 39 +------------------ 2 files changed, 38 insertions(+), 38 deletions(-) create mode 100644 src/experimental/_impl/_voronoi_lines_impl.scad diff --git a/src/experimental/_impl/_voronoi_lines_impl.scad b/src/experimental/_impl/_voronoi_lines_impl.scad new file mode 100644 index 00000000..84a46d10 --- /dev/null +++ b/src/experimental/_impl/_voronoi_lines_impl.scad @@ -0,0 +1,37 @@ +function _voronoi_lines_tri_vertex(tri, p) = + tri[0] == p || tri[1] == p || tri[2] == p; + +function _voronoi_lines_tri_same(tri1, tri2) = + _voronoi_lines_tri_vertex(tri1, tri2[0]) && _voronoi_lines_tri_vertex(tri1, tri2[1]) && _voronoi_lines_tri_vertex(tri1, tri2[2]); + +function _voronoi_lines_tri_coedge(tri1, tri2) = + let( + n1 = _voronoi_lines_tri_vertex(tri2, tri1[0]) ? 1 : 0, + n2 = _voronoi_lines_tri_vertex(tri2, tri1[1]) ? 1 : 0, + n = n1 + n2 + ) + (n > 1) || ((n + (_voronoi_lines_tri_vertex(tri2, tri1[2]) ? 1 : 0)) > 1); + +function _voronoi_lines_tri_neighbors_impl(tris, me, leng, nbrs = [], i = 0) = + len(nbrs) == 3 || i == leng ? nbrs : + !_voronoi_lines_tri_same(me, tris[i]) && _voronoi_lines_tri_coedge(me, tris[i]) ? _voronoi_lines_tri_neighbors_impl(tris, me, leng, concat(nbrs, [tris[i]]), i + 1) : + _voronoi_lines_tri_neighbors_impl(tris, me, leng, nbrs, i + 1); + +function _voronoi_lines_tri_neighbors(tris, me) = + _voronoi_lines_tri_neighbors_impl(tris, me, len(tris)); + +function _voronoi_lines_line_has(line, p) = + p == line[0] || p == line[1]; + +function _voronoi_lines_same_line(line1, line2) = + _voronoi_lines_line_has(line1, line2[0]) && _voronoi_lines_line_has(line1, line2[1]); + +function _voronoi_lines_lines_has(lines, line, leng, i = 0) = + i == leng ? false : + _voronoi_lines_same_line(lines[i], line) ? true : _voronoi_lines_lines_has(lines, line, leng, i + 1); + +function _voronoi_lines_dedup_lines_impl(src, dest, leng, i = 0) = + i == leng ? dest : + _voronoi_lines_lines_has(dest, src[i], len(dest)) ? _voronoi_lines_dedup_lines_impl(src, dest, leng, i + 1) : _voronoi_lines_dedup_lines_impl(src, concat(dest, [src[i]]), leng, i + 1); + +function _voronoi_lines_dedup_lines(lines) = _voronoi_lines_dedup_lines_impl(lines, [], len(lines)); diff --git a/src/experimental/voronoi_lines.scad b/src/experimental/voronoi_lines.scad index fe7bc623..1eafa2c0 100644 --- a/src/experimental/voronoi_lines.scad +++ b/src/experimental/voronoi_lines.scad @@ -1,44 +1,7 @@ +use ; use ; use ; -function _voronoi_lines_tri_vertex(tri, p) = - tri[0] == p || tri[1] == p || tri[2] == p; - -function _voronoi_lines_tri_same(tri1, tri2) = - _voronoi_lines_tri_vertex(tri1, tri2[0]) && _voronoi_lines_tri_vertex(tri1, tri2[1]) && _voronoi_lines_tri_vertex(tri1, tri2[2]); - -function _voronoi_lines_tri_coedge(tri1, tri2) = - let( - n1 = _voronoi_lines_tri_vertex(tri2, tri1[0]) ? 1 : 0, - n2 = _voronoi_lines_tri_vertex(tri2, tri1[1]) ? 1 : 0, - n = n1 + n2 - ) - (n > 1) || ((n + (_voronoi_lines_tri_vertex(tri2, tri1[2]) ? 1 : 0)) > 1); - -function _voronoi_lines_tri_neighbors_impl(tris, me, leng, nbrs = [], i = 0) = - len(nbrs) == 3 || i == leng ? nbrs : - !_voronoi_lines_tri_same(me, tris[i]) && _voronoi_lines_tri_coedge(me, tris[i]) ? _voronoi_lines_tri_neighbors_impl(tris, me, leng, concat(nbrs, [tris[i]]), i + 1) : - _voronoi_lines_tri_neighbors_impl(tris, me, leng, nbrs, i + 1); - -function _voronoi_lines_tri_neighbors(tris, me) = - _voronoi_lines_tri_neighbors_impl(tris, me, len(tris)); - -function _voronoi_lines_line_has(line, p) = - p == line[0] || p == line[1]; - -function _voronoi_lines_same_line(line1, line2) = - _voronoi_lines_line_has(line1, line2[0]) && _voronoi_lines_line_has(line1, line2[1]); - -function _voronoi_lines_lines_has(lines, line, leng, i = 0) = - i == leng ? false : - _voronoi_lines_same_line(lines[i], line) ? true : _voronoi_lines_lines_has(lines, line, leng, i + 1); - -function _voronoi_lines_dedup_lines_impl(src, dest, leng, i = 0) = - i == leng ? dest : - _voronoi_lines_lines_has(dest, src[i], len(dest)) ? _voronoi_lines_dedup_lines_impl(src, dest, leng, i + 1) : _voronoi_lines_dedup_lines_impl(src, concat(dest, [src[i]]), leng, i + 1); - -function _voronoi_lines_dedup_lines(lines) = _voronoi_lines_dedup_lines_impl(lines, [], len(lines)); - function voronoi_lines(points) = let( tris = [