add lathe step down line reversal

This commit is contained in:
Stewart Allen 2025-12-30 13:38:39 -05:00
commit d5062880e6
2 changed files with 13 additions and 6 deletions

View file

@ -134,7 +134,7 @@ class Slice {
* @param {Object | Polygon} data * @param {Object | Polygon} data
* @returns Slice.Top * @returns Slice.Top
*/ */
addTop(data, opt) { addTop(data, opt = {}) {
let minArea = opt.minArea ?? 0; let minArea = opt.minArea ?? 0;
if (data.length) { if (data.length) {
// standard legacy polygon // standard legacy polygon

View file

@ -228,7 +228,7 @@ export class Topo {
let slice = newSlice(i); let slice = newSlice(i);
slice.index = i; slice.index = i;
slice.camLines = [ newPolygon(rows[i]).setOpen() ]; slice.camLines = [ newPolygon(rows[i]).setOpen() ];
if (i % 2 === 1) slice.camLines[0].reverse(); if (!down && i % 2 === 1) slice.camLines[0].reverse();
slices.push(slice); slices.push(slice);
} }
} else { } else {
@ -237,7 +237,7 @@ export class Topo {
let slice = newSlice(i); let slice = newSlice(i);
let points = rows.map(row => row[i]); let points = rows.map(row => row[i]);
points.push(points[0].clone().setA(-360)); points.push(points[0].clone().setA(-360));
if (i % 2 === 1) points.reverse(); if (!down && i % 2 === 1) points.reverse();
slice.index = i; slice.index = i;
slice.camLines = [ newPolygon(points).setOpen() ]; slice.camLines = [ newPolygon(points).setOpen() ];
slices.push(slice); slices.push(slice);
@ -249,10 +249,12 @@ export class Topo {
for (let p of r) { for (let p of r) {
maxZ = Math.max(maxZ, p.z); maxZ = Math.max(maxZ, p.z);
} }
console.log({ maxZ, down, expand });
maxZ += expand; maxZ += expand;
} }
if (down) { if (down) {
// step "up" points on trace until they max out
// then reverse the stack to cut top down
let reverse = 0;
for (let slice of slices) { for (let slice of slices) {
let z = slice.z; let z = slice.z;
let poly = slice.camLines[0].clone(); let poly = slice.camLines[0].clone();
@ -267,12 +269,17 @@ export class Topo {
} }
stack.reverse(); stack.reverse();
slice.stack = stack.map(poly => { slice.stack = stack.map(poly => {
if (reverse++ % 2 === 1) poly.reverse();
let slice = newSlice(z); let slice = newSlice(z);
slice.camLines = [ poly ]; slice.camLines = [ poly ];
return slice; return slice;
}); });
// todo: add line to line reversals // first move of new stack is to maxZ (problematic)
// todo: add move to maxZ after stack is run // let first = stack[0].points;
// first.splice(0,0,first[0].clone().setZ(maxZ));
// last move of stack is to maxZ
let last = stack.peek();
last.push(last.last().clone().setZ(maxZ));
} }
slices = this.gpu_slices = slices.map(slice => slice.stack).flat(); slices = this.gpu_slices = slices.map(slice => slice.stack).flat();
slices.forEach((slice,index) => slice.index = index); slices.forEach((slice,index) => slice.index = index);