improve path moves in indexed mode

This commit is contained in:
Stewart Allen 2023-02-15 13:30:48 -05:00
commit 3e36f2f9ea
4 changed files with 15 additions and 9 deletions

View file

@ -1352,7 +1352,7 @@ CAM.init = function(kiri, api) {
spindle: UC.newInput(LANG.cc_spnd_s, {title:LANG.cc_spnd_l, convert:UC.toInt, show:hasSpindle}), spindle: UC.newInput(LANG.cc_spnd_s, {title:LANG.cc_spnd_l, convert:UC.toInt, show:hasSpindle}),
rate: UC.newInput(LANG.cc_feed_s, {title:LANG.cc_feed_l, convert:UC.toInt, units:true}), rate: UC.newInput(LANG.cc_feed_s, {title:LANG.cc_feed_l, convert:UC.toInt, units:true}),
step: UC.newInput(LANG.cc_sovr_s, {title:LANG.cc_sovr_l, convert:UC.toFloat, bound:UC.bound(0.01,10.0)}), step: UC.newInput(LANG.cc_sovr_s, {title:LANG.cc_sovr_l, convert:UC.toFloat, bound:UC.bound(0.01,10.0)}),
angle: UC.newInput(LANG.cc_sang_s, {title:LANG.cc_sang_l, convert:UC.toFloat, bound:UC.bound(0.01,10.0)}), angle: UC.newInput(LANG.cc_sang_s, {title:LANG.cc_sang_l, convert:UC.toFloat, bound:UC.bound(0.01,90.0)}),
tolerance: UC.newInput(LANG.ou_toll_s, {title:LANG.ou_toll_l, convert:UC.toFloat, bound:UC.bound(0,10.0), units:true, round:4}), tolerance: UC.newInput(LANG.ou_toll_s, {title:LANG.ou_toll_l, convert:UC.toFloat, bound:UC.bound(0,10.0), units:true, round:4}),
}; };

View file

@ -169,7 +169,7 @@ class OpRough extends CamOp {
let { op, state } = this; let { op, state } = this;
let { settings, widget, slicer, addSlices, unsafe, color } = state; let { settings, widget, slicer, addSlices, unsafe, color } = state;
let { updateToolDiams, thruHoles, tabs, cutTabs, cutPolys } = state; let { updateToolDiams, thruHoles, tabs, cutTabs, cutPolys } = state;
let { tshadow, shadowTop, ztOff, zBottom, zMax, shadowAt } = state; let { tshadow, shadowTop, ztOff, zBottom, zMax, shadowAt, isIndexed } = state;
let { process, stock } = settings; let { process, stock } = settings;
if (op.down <= 0) { if (op.down <= 0) {
@ -180,7 +180,7 @@ class OpRough extends CamOp {
let roughTop = op.top; let roughTop = op.top;
let roughDown = op.down; let roughDown = op.down;
let roughLeave = op.leave; let roughLeave = op.leave;
let roughStock = op.all && state.isIndexed; let roughStock = op.all && isIndexed;
let toolDiam = new CAM.Tool(settings, op.tool).fluteDiameter(); let toolDiam = new CAM.Tool(settings, op.tool).fluteDiameter();
let trueShadow = process.camTrueShadow === true; let trueShadow = process.camTrueShadow === true;
@ -188,11 +188,15 @@ class OpRough extends CamOp {
if (roughTop) { if (roughTop) {
let shadow = tshadow.clone(); let shadow = tshadow.clone();
let step = toolDiam * op.step; let step = toolDiam * op.step;
let inset = POLY.offset(shadow, roughIn ? step : step + roughLeave + toolDiam / 2); let inset = roughStock ?
POLY.offset([ newPolygon().centerRectangle(stock.center, stock.x, stock.y) ], step) :
POLY.offset(shadow, roughIn ? step : step + roughLeave + toolDiam / 2);
let facing = POLY.offset(inset, -step, { count: 999, flat: true }); let facing = POLY.offset(inset, -step, { count: 999, flat: true });
let zdiv = ztOff / roughDown; let zdiv = ztOff / roughDown;
let zstep = (zdiv % 1 > 0) ? ztOff / (Math.floor(zdiv) + 1) : roughDown; let zstep = (zdiv % 1 > 0) ? ztOff / (Math.floor(zdiv) + 1) : roughDown;
if (ztOff === 0) { if (isIndexed) {
ztOff = (stock.z / 2) - zMax;
} else if (ztOff === 0) {
// compensate for lack of z top offset in this scenario // compensate for lack of z top offset in this scenario
ztOff = zstep; ztOff = zstep;
} }
@ -308,7 +312,7 @@ class OpRough extends CamOp {
// shell = shadow expanded by half tool diameter + leave stock // shell = shadow expanded by half tool diameter + leave stock
const sadd = roughIn ? toolDiam / 2 : toolDiam / 2; const sadd = roughIn ? toolDiam / 2 : toolDiam / 2;
const shell = roughStock ? const shell = roughStock ?
[ newPolygon().centerRectangle(stock.center, stock.x, stock.y) ] : POLY.offset([ newPolygon().centerRectangle(stock.center, stock.x, stock.y) ], sadd) :
POLY.offset(shadow, sadd + roughLeave); POLY.offset(shadow, sadd + roughLeave);
slices.forEach((slice, index) => { slices.forEach((slice, index) => {

View file

@ -107,6 +107,7 @@ function prepEach(widget, settings, print, firstPoint, update) {
plungeRate = process.camFastFeedZ, plungeRate = process.camFastFeedZ,
feedRate, feedRate,
lastTool, lastTool,
lastPush,
lastPoint, lastPoint,
currentOp, currentOp,
nextIsMove = true, nextIsMove = true,
@ -279,6 +280,7 @@ function prepEach(widget, settings, print, firstPoint, update) {
} else { } else {
print.addOutput(layerOut, point, emit, speed, tool); print.addOutput(layerOut, point, emit, speed, tool);
} }
lastPush = { point, emit, speed, tool };
return point; return point;
} }
@ -378,7 +380,7 @@ function prepEach(widget, settings, print, firstPoint, update) {
} }
// up if any point between higher than start/outline, go up first // up if any point between higher than start/outline, go up first
if (mustGoUp || zIsBelow) { if (mustGoUp || zIsBelow) {
const zClearance = clearz + ztOff; const zClearance = clearz + (isIndexed ? 0 : ztOff);
if (zIsBelow) { if (zIsBelow) {
layerPush(lastPoint.clone().setZ(zClearance), 0, 0, tool.getNumber()); layerPush(lastPoint.clone().setZ(zClearance), 0, 0, tool.getNumber());
} }
@ -470,7 +472,7 @@ function prepEach(widget, settings, print, firstPoint, update) {
opSum += weight; opSum += weight;
if (tool) { if (tool) {
newLayer(); newLayer();
camOut(printPoint = printPoint.clone().setZ(zmax + zadd + ztOff)); camOut(printPoint = lastPoint.clone().setZ(zmax + zadd));
newLayer(); newLayer();
} }
} }

View file

@ -470,7 +470,7 @@ const conf = exports({
camRoughSpeed: 1000, camRoughSpeed: 1000,
camRoughPlunge: 250, camRoughPlunge: 250,
camRoughStock: 0, camRoughStock: 0,
camRoughAll: false, camRoughAll: true,
camRoughVoid: false, camRoughVoid: false,
camRoughFlat: true, camRoughFlat: true,
camRoughTop: true, camRoughTop: true,