add another level of point filtering/reduction

This commit is contained in:
Stewart Allen 2019-01-21 17:26:58 -05:00
commit ab2e2f7987
2 changed files with 36 additions and 3 deletions

View file

@ -139,10 +139,11 @@ var gs_base_gyroid = exports;
} while (added);
} while (cleared < sparse.length);
return {edge, points, dir, polys: polys.map(poly => filter(poly))};
return {edge, points, dir, polys: polys.map(poly => filter(poly,inc))};
}
function filter(poly) {
// merge x/y co-linear
function filter(poly,inc) {
if (poly.length === 1) {
return poly;
}
@ -169,6 +170,38 @@ var gs_base_gyroid = exports;
}
e1 = el;
}
return filter2(nuchain,inc);
}
// merge points within radius
function filter2(poly,inc) {
if (poly.length === 1) {
return poly;
}
let nuchain = [];
let e1 = poly[0];
let e2 = null;
let last = poly.length - 1;
let merge = inc;
for (let i=1; i<poly.length; i++) {
let el = poly[i];
if (dist(e1, el) <= merge) {
e2 = el;
if (i < last) {
continue;
}
}
if (e2) {
nuchain.push({x:(e1.x + e2.x)/2, y:(e1.y + e2.y)/2});
e2 = null;
} else {
nuchain.push(e1);
if (i === last) {
nuchain.push(el);
}
}
e1 = el;
}
return nuchain;
}

View file

@ -1,7 +1,7 @@
var exports = {
COPYRIGHT:"Copyright (C) 2014-2019 Stewart Allen <sa@grid.space> - All Rights Reserved",
LICENSE:"See the license.md file included with the source distribution",
VERSION:"1.2.6a"
VERSION:"1.2.6b"
};
if (!module) var module = {};
module.exports = exports;