From 046c071333b1bc5d9eb487b669371264b0393b55 Mon Sep 17 00:00:00 2001 From: Stewart Allen Date: Mon, 15 Sep 2025 00:38:16 -0400 Subject: [PATCH] mark closed chains --- src/kiri/mode/fdm/post.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/kiri/mode/fdm/post.js b/src/kiri/mode/fdm/post.js index 951ff447..568b793b 100644 --- a/src/kiri/mode/fdm/post.js +++ b/src/kiri/mode/fdm/post.js @@ -191,6 +191,10 @@ function thin_type_3(params) { let pointMap = new Map(); let lineMap = new Map(); + function pointDist(p0, p1) { + return Math.hypot(p0.x-p1.x, p0.y-p1.y); + } + function point2key(point) { return `${(point.x*100)|0}|${(point.y*100)|0}`; } @@ -256,7 +260,7 @@ function thin_type_3(params) { // connect segments into chains for (let seg of lineMap.values()) { let { p0, p1 } = seg; - let len = seg.len = Math.hypot(p0.x-p1.x, p0.y-p1.y); + let len = seg.len = pointDist(p0, p1); // filter out lines where both points' radii are under the // minR threshold. shorten and fixup lines where minR falls // somewhere along the gradient between ends. @@ -427,6 +431,11 @@ function thin_type_3(params) { chains = chains.filter(chain => chain); console.log({ chains }); + // mark closed chains + for (let chain of chains) { + chain.closed = pointDist(chain[0], chain.peek()) <= offsetN; + } + // gather point offsets into shells // todo: order outer shell innersection to inner for (let chain of chains) { @@ -444,7 +453,7 @@ function thin_type_3(params) { // compute medial axis segment cross section let p0 = chain[i]; let p1 = chain[i+1]; - let len = Math.hypot(p0.x-p1.x, p0.y-p1.y); + let len = pointDist(p0, p1); let dr = (p1.r - p0.r); let dx = (p1.x - p0.x); let dy = (p1.y - p0.y);