1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-09 08:16:50 +02:00

keep hash code

This commit is contained in:
Justin Lin
2021-05-07 08:50:40 +08:00
parent a42f758f35
commit c59b35fd81
2 changed files with 9 additions and 7 deletions

View File

@@ -8,6 +8,8 @@ use <../../util/some.scad>;
use <../../util/has.scad>; use <../../util/has.scad>;
use <../../util/find_index.scad>; use <../../util/find_index.scad>;
function ihash(a, b, c) = a * 961 + b * 31 + c;
function _tri_circumcircle(shape_pts) = function _tri_circumcircle(shape_pts) =
let( let(
p0 = shape_pts[0], p0 = shape_pts[0],
@@ -42,8 +44,8 @@ function delaunay_init(center, width, height, leng_points, _indices_hash) =
center + [ halfW, halfH], center + [ halfW, halfH],
center + [ halfW, -halfH], center + [ halfW, -halfH],
], ],
t1 = [0, 1, 3], // indices t1 = [0, 1, 3, ihash(0, 1, 3)], // indices
t2 = [2, 3, 1], t2 = [2, 3, 1, ihash(2, 3, 1)],
number_of_buckets = ceil(leng_points * 0.5), number_of_buckets = ceil(leng_points * 0.5),
triangles = hashmap([ triangles = hashmap([
[t1, [t2, undef, undef]], [t1, [t2, undef, undef]],
@@ -53,8 +55,8 @@ function delaunay_init(center, width, height, leng_points, _indices_hash) =
number_of_buckets = number_of_buckets number_of_buckets = number_of_buckets
), ),
circles = hashmap([ circles = hashmap([
[t1, _tri_circumcircle([for(i = t1) coords[i]])], [t1, _tri_circumcircle([for(i = [0:2]) coords[t1[i]]])],
[t2, _tri_circumcircle([for(i = t2) coords[i]])] [t2, _tri_circumcircle([for(i = [0:2]) coords[t2[i]]])]
], ],
hash = _indices_hash, hash = _indices_hash,
number_of_buckets = number_of_buckets number_of_buckets = number_of_buckets
@@ -71,7 +73,7 @@ function delaunay_addpoint(d, p, _indices_hash) =
ndelaunay2 = delBadTriangles(ndelaunay, badTriangles, _indices_hash), ndelaunay2 = delBadTriangles(ndelaunay, badTriangles, _indices_hash),
newTriangles = [ newTriangles = [
for(b = boundaries) [ for(b = boundaries) [
[idx, b[0][0], b[0][1]], // t [idx, b[0][0], b[0][1], ihash(idx, b[0][0], b[0][1])], // t
b[0], // edge b[0], // edge
b[1] // delaunayTri b[1] // delaunayTri
] ]
@@ -88,7 +90,7 @@ function adjustNeighbors(d, newTriangles, _indices_hash) =
], ],
ncs = [ ncs = [
for(nt = newTriangles) for(nt = newTriangles)
[nt[0], _tri_circumcircle([for(i = nt[0]) coords[i]])] [nt[0], _tri_circumcircle([for(i = [0:2]) coords[nt[0][i]]])]
], ],
nd = [ nd = [
coords, coords,

View File

@@ -6,7 +6,7 @@ use <tri_delaunay_voronoi.scad>;
// ret: "TRI_SHAPES", "TRI_INDICES", "VORONOI_CELLS", "DELAUNAY" // ret: "TRI_SHAPES", "TRI_INDICES", "VORONOI_CELLS", "DELAUNAY"
function tri_delaunay(points, ret = "TRI_INDICES") = function tri_delaunay(points, ret = "TRI_INDICES") =
let( let(
_indices_hash = function(indices) indices[0] * 961 + indices[1] * 31 + indices[2], _indices_hash = function(indices) indices[3],
xs = [for(p = points) p[0]], xs = [for(p = points) p[0]],
ys = [for(p = points) p[1]], ys = [for(p = points) p[1]],
max_x = max(xs), max_x = max(xs),