more efficient shortest-distance pocket routing
This commit is contained in:
parent
ad53e78e7e
commit
f08319efe7
3 changed files with 40 additions and 9 deletions
|
|
@ -1383,7 +1383,7 @@ class OpPocket extends CamOp {
|
|||
|
||||
prepare(ops, progress) {
|
||||
let { op, state, pockets } = this;
|
||||
let { setTool, setSpindle, setTolerance, sliceOutput } = ops;
|
||||
let { setTool, setSpindle, setTolerance, sliceOutput, getPrintPoint } = ops;
|
||||
let { process } = state.settings;
|
||||
|
||||
setTool(op.tool, op.rate);
|
||||
|
|
@ -1393,13 +1393,37 @@ class OpPocket extends CamOp {
|
|||
setTolerance(this.topo.tolerance);
|
||||
}
|
||||
|
||||
for (let sliceOut of pockets) {
|
||||
sliceOutput(sliceOut, {
|
||||
cutdir: process.camConventional,
|
||||
depthFirst: process.camDepthFirst && !state.isIndexed,
|
||||
easeDown: op.down && process.easeDown ? op.down : 0,
|
||||
progress: (n,m) => progress(n/m, "pocket")
|
||||
});
|
||||
// eliminate empty pockets
|
||||
pockets = pockets.filter(p => p.length);
|
||||
|
||||
// pockets is an [ array of an [ array of slices ] ]
|
||||
// each top level array is a pocket containing a [ z layer array of slices ]
|
||||
// follow each pocket to the next closest one from previous exit
|
||||
for (;;) {
|
||||
let printPoint = getPrintPoint();
|
||||
let min = {
|
||||
dist: Infinity,
|
||||
pocket: undefined
|
||||
};
|
||||
for (let pocket of pockets.filter(p => !p.used)) {
|
||||
let poly = pocket[0].camLines.slice().sort((a,b) => b.area() - a.area())[0];
|
||||
let find = poly.findClosestPointTo(printPoint);
|
||||
if (find.distance < min.dist) {
|
||||
min.pocket = pocket;
|
||||
min.dist = find.distance;
|
||||
}
|
||||
}
|
||||
if (min.pocket) {
|
||||
min.pocket.used = true;
|
||||
sliceOutput(min.pocket, {
|
||||
cutdir: process.camConventional,
|
||||
depthFirst: process.camDepthFirst && !state.isIndexed,
|
||||
easeDown: op.down && process.easeDown ? op.down : 0,
|
||||
progress: (n,m) => progress(n/m, "pocket")
|
||||
});
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue