1
0
mirror of https://github.com/JustinSDK/dotSCAD.git synced 2025-08-20 05:21:38 +02:00
This commit is contained in:
Justin Lin
2022-03-25 11:32:55 +08:00
parent d2f961494b
commit 6fac123aee
4 changed files with 12 additions and 16 deletions

View File

@@ -29,7 +29,6 @@ function _nz_cell_border(cells, p) =
sorted0 = sorted[0], sorted0 = sorted[0],
sorted1 = sorted[1], sorted1 = sorted[1],
a = [for(i = [0:idx - 1]) sorted0[i]], a = [for(i = [0:idx - 1]) sorted0[i]],
b = [for(i = [0:idx - 1]) sorted1[i]], m = (a + [for(i = [0:idx - 1]) sorted1[i]]) / 2
m = (a + b) / 2
) )
(p - m) * (a - m); (p - m) * (a - m);

View File

@@ -11,7 +11,7 @@
function ptf_circle(size, point) = function ptf_circle(size, point) =
let( let(
p_offset = -size / 2, p_offset = -size / 2,
p = [point.x + p_offset.y, point.y + p_offset.x], p = point + p_offset,
n = max(abs(p.x), abs(p.y)), n = max(abs(p.x), abs(p.y)),
r = n * 1.414, r = n * 1.414,
a = atan2(p.x, p.y) a = atan2(p.x, p.y)

View File

@@ -17,7 +17,7 @@ function ptf_sphere(size, point, radius, angle = [180, 360]) =
xa = angle[1], xa = angle[1],
za_step = za / size.y, za_step = za / size.y,
rza = za_step * point.y, rza = za_step * point.y,
rzpt = [(radius + z) * cos(rza), (radius + z) * sin(rza), 0], rzpt = (radius + z) * [cos(rza), sin(rza), 0],
rxpt = ptf_rotate(rzpt, [90 - xa / size.x * point.x, 90, 0]) rxpt = ptf_rotate(rzpt, [90 - xa / size.x * point.x, 90, 0])
) )
rxpt; rxpt;

View File

@@ -8,12 +8,6 @@
* *
**/ **/
use <../util/set/hashset.scad>;
use <../util/set/hashset_has.scad>;
use <../util/set/hashset_add.scad>;
use <../util/set/hashset_del.scad>;
use <../util/set/hashset_elems.scad>;
module sf_solidifyT(points1, points2, triangles, convexity = 1) { module sf_solidifyT(points1, points2, triangles, convexity = 1) {
// triangles : counter-clockwise // triangles : counter-clockwise
leng = len(points1); leng = len(points1);
@@ -26,16 +20,19 @@ module sf_solidifyT(points1, points2, triangles, convexity = 1) {
function de_pairs(tri_edges) = function de_pairs(tri_edges) =
let( let(
leng = len(tri_edges), leng = len(tri_edges),
edges = hashset([tri_edges[0], tri_edges[1], tri_edges[2]], hash = hash, number_of_buckets = round(sqrt(leng))) edges = [tri_edges[0], tri_edges[1], tri_edges[2]]
) )
_de_pairs(tri_edges, leng, edges); _de_pairs(tri_edges, leng, edges);
function _de_pairs(tri_edges, leng, edges, i = 3) = function _de_pairs(tri_edges, leng, edges, i = 3) =
i == leng ? hashset_elems(edges) : i == leng ? edges :
let(edge = tri_edges[i], pair = [edge[1], edge[0]]) let(
hashset_has(edges, pair, hash = hash) ? edge = tri_edges[i],
_de_pairs(tri_edges, leng, hashset_del(edges, pair, hash = hash), i + 1) : pair = [edge[1], edge[0]],
_de_pairs(tri_edges, leng, hashset_add(edges, edge, hash = hash), i + 1); idx = search([pair], edges)[0],
nx_edges = idx == [] ? [each edges, edge] : [for(i = [0:len(edges) - 1]) if(i != idx) edges[i]]
)
_de_pairs(tri_edges, leng, nx_edges, i + 1);
tri_edges = [ tri_edges = [
for(tri = tris) for(tri = tris)