experimental poly segment midpoint function
This commit is contained in:
parent
43d66d43e7
commit
0b0233bbf6
2 changed files with 28 additions and 3 deletions
|
|
@ -1906,6 +1906,31 @@ class Polygon {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
midpoints(dist = 0.01) {
|
||||||
|
const newp = [];
|
||||||
|
const points = this.points;
|
||||||
|
const length = points.length;
|
||||||
|
const l0 = this.open ? length - 1 : length;
|
||||||
|
let mod = 0;
|
||||||
|
for (let i=0, p=points; i<l0; i++) {
|
||||||
|
const p1 = p[i];
|
||||||
|
const p2 = p[(i + 1) % length];
|
||||||
|
const dx = p2.x - p1.x;
|
||||||
|
const dy = p2.y - p1.y;
|
||||||
|
const ln = Math.sqrt(dx * dx + dy * dy);
|
||||||
|
if (ln < dist) {
|
||||||
|
newp.push(p1.midPointTo(p2));
|
||||||
|
mod++;
|
||||||
|
} else {
|
||||||
|
newp.push(p1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mod) {
|
||||||
|
return newPolygon().addPoints(newp.map(p => p.clone())).setOpenValue(this.open);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// use Slope.angleDiff() then re-test path mitering / rendering
|
// use Slope.angleDiff() then re-test path mitering / rendering
|
||||||
|
|
|
||||||
|
|
@ -1342,16 +1342,14 @@ class OpPocket extends CamOp {
|
||||||
}
|
}
|
||||||
steps = steps * refine;
|
steps = steps * refine;
|
||||||
iter = 0;
|
iter = 0;
|
||||||
// walk points noting z deltas and smoothing sawtooth patterns
|
// walk points noting z deltas and smoothing z sawtooth patterns
|
||||||
for (let j=0; j<refine; j++) {
|
for (let j=0; j<refine; j++) {
|
||||||
for (let poly of hirez) {
|
for (let poly of hirez) {
|
||||||
const points = poly.points, length = points.length;
|
const points = poly.points, length = points.length;
|
||||||
let sn = []; // segment normals
|
let sn = []; // segment normals
|
||||||
let dz = []; // z deltas
|
|
||||||
for (let i=0; i<length; i++) {
|
for (let i=0; i<length; i++) {
|
||||||
let p1 = points[i];
|
let p1 = points[i];
|
||||||
let p2 = points[(i + 1) % length];
|
let p2 = points[(i + 1) % length];
|
||||||
dz.push(p1.z - p2.z);
|
|
||||||
sn.push(segmentNormal(p1, p2));
|
sn.push(segmentNormal(p1, p2));
|
||||||
}
|
}
|
||||||
let vn = []; // vertex normals
|
let vn = []; // vertex normals
|
||||||
|
|
@ -1371,9 +1369,11 @@ class OpPocket extends CamOp {
|
||||||
p1.z = (p0.z + p2.z + p1.z) / 3;
|
p1.z = (p0.z + p2.z + p1.z) / 3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
progress((iter++ / steps) * 0.2 + 0.8);
|
progress((iter++ / steps) * 0.2 + 0.8);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// return hirez.map(p => p.midpoints(topo.tolerance * 8));
|
||||||
return hirez;
|
return hirez;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue