fix stock clipping for multiple models with offset centers
This commit is contained in:
parent
94f3f0d943
commit
c01ee138e6
2 changed files with 13 additions and 5 deletions
|
|
@ -17,10 +17,11 @@ class OpOutline extends CamOp {
|
||||||
|
|
||||||
async slice(progress) {
|
async slice(progress) {
|
||||||
let { op, state } = this;
|
let { op, state } = this;
|
||||||
let { settings, slicer, addSlices, tshadow, thruHoles, unsafe, color } = state;
|
let { settings, slicer, addSlices, tshadow, thruHoles, unsafe, color, widget } = state;
|
||||||
let { updateToolDiams, tabs, cutTabs, cutPolys, workarea, zMax, shadowAt } = state;
|
let { updateToolDiams, tabs, cutTabs, cutPolys, workarea, zMax, shadowAt } = state;
|
||||||
let { process, stock } = settings;
|
let { process, stock } = settings;
|
||||||
let { controller } = settings;
|
let { controller } = settings;
|
||||||
|
let center_off = widget.track.pos ?? { x: 0, y: 0, z: 0};
|
||||||
|
|
||||||
if (op.down <= 0) {
|
if (op.down <= 0) {
|
||||||
throw `invalid step down "${op.down}"`;
|
throw `invalid step down "${op.down}"`;
|
||||||
|
|
@ -191,7 +192,10 @@ class OpOutline extends CamOp {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.camStockClipTo && stock.x && stock.y && stock.center) {
|
if (process.camStockClipTo && stock.x && stock.y && stock.center) {
|
||||||
stockClip = newPolygon().centerRectangle(stock.center, stock.x + 0.001, stock.y + 0.001);
|
let { center } = stock;
|
||||||
|
let x = center.x - center_off.x;
|
||||||
|
let y = center.y - center_off.y;
|
||||||
|
stockClip = newPolygon().centerRectangle({ x, y }, stock.x + 0.001, stock.y + 0.001);
|
||||||
offset = cutPolys([stockClip], offset, slice.z, true);
|
offset = cutPolys([stockClip], offset, slice.z, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,12 @@ class OpRough extends CamOp {
|
||||||
|
|
||||||
async slice(progress) {
|
async slice(progress) {
|
||||||
let { op, state } = this;
|
let { op, state } = this;
|
||||||
let { settings, slicer, addSlices, unsafe, color } = state;
|
let { settings, slicer, addSlices, unsafe, color, widget } = state;
|
||||||
let { updateToolDiams, thruHoles, tabs, cutTabs, cutPolys } = state;
|
let { updateToolDiams, thruHoles, tabs, cutTabs, cutPolys } = state;
|
||||||
let { ztOff, zMax, shadowAt, isIndexed} = state;
|
let { ztOff, zMax, shadowAt, isIndexed} = state;
|
||||||
let { workarea } = state;
|
let { workarea } = state;
|
||||||
let { controller, process, stock } = settings;
|
let { controller, process, stock } = settings;
|
||||||
|
let center_off = widget.track.pos ?? { x: 0, y: 0, z: 0};
|
||||||
|
|
||||||
if (op.down <= 0) {
|
if (op.down <= 0) {
|
||||||
throw `invalid step down "${op.down}"`;
|
throw `invalid step down "${op.down}"`;
|
||||||
|
|
@ -223,7 +224,10 @@ class OpRough extends CamOp {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (process.camStockClipTo && stock.x && stock.y && stock.center) {
|
if (process.camStockClipTo && stock.x && stock.y && stock.center) {
|
||||||
let rect = newPolygon().centerRectangle(stock.center, stock.x + 0.001, stock.y + 0.001);
|
let { center } = stock;
|
||||||
|
let x = center.x - center_off.x;
|
||||||
|
let y = center.y - center_off.y;
|
||||||
|
let rect = newPolygon().centerRectangle({ x, y }, stock.x + 0.001, stock.y + 0.001);
|
||||||
offset = cutPolys([rect], offset, slice.z, true);
|
offset = cutPolys([rect], offset, slice.z, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -245,7 +249,7 @@ class OpRough extends CamOp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (controller.devel) {
|
if (controller.devel) {
|
||||||
slice.output()
|
if (tabs) slice.output()
|
||||||
.setLayer("tabs clip", {line: 0xaa00aa}, true)
|
.setLayer("tabs clip", {line: 0xaa00aa}, true)
|
||||||
.addPolys(tabs.map(tab => tab.off).flat());
|
.addPolys(tabs.map(tab => tab.off).flat());
|
||||||
slice.output()
|
slice.output()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue