add another level of point filtering/reduction
This commit is contained in:
parent
29ae84380c
commit
ab2e2f7987
2 changed files with 36 additions and 3 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in a new issue