progress on cam pocketing op
This commit is contained in:
parent
de0c224f6d
commit
5274ed6ae7
5 changed files with 55 additions and 38 deletions
|
|
@ -233,6 +233,7 @@ function setWinding(array, CW, recurse) {
|
||||||
if (poly.isClockwise() !== CW) poly.reverse();
|
if (poly.isClockwise() !== CW) poly.reverse();
|
||||||
if (recurse && poly.inner) setWinding(poly.inner, !CW, false);
|
if (recurse && poly.inner) setWinding(poly.inner, !CW, false);
|
||||||
}
|
}
|
||||||
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -562,13 +562,10 @@ CAM.init = function(kiri, api) {
|
||||||
// SURFACE FUNCS
|
// SURFACE FUNCS
|
||||||
let surfaceOn = false, lastWidget;
|
let surfaceOn = false, lastWidget;
|
||||||
func.surfaceAdd = (ev) => {
|
func.surfaceAdd = (ev) => {
|
||||||
func.unpop();
|
func.clearPops();
|
||||||
func.tabDone();
|
|
||||||
func.traceDone();
|
|
||||||
func.surfaceDone();
|
|
||||||
alert = api.show.alert("analyzing surfaces...", 1000);
|
alert = api.show.alert("analyzing surfaces...", 1000);
|
||||||
let surfaces = poppedRec.surfaces;
|
let surfaces = poppedRec.surfaces;
|
||||||
CAM.surfaces(() => {
|
CAM.surface_prep(() => {
|
||||||
api.hide.alert(alert);
|
api.hide.alert(alert);
|
||||||
alert = api.show.alert("[esc] cancels surface editing");
|
alert = api.show.alert("[esc] cancels surface editing");
|
||||||
for (let [wid, arr] of Object.entries(surfaces)) {
|
for (let [wid, arr] of Object.entries(surfaces)) {
|
||||||
|
|
@ -597,10 +594,13 @@ CAM.init = function(kiri, api) {
|
||||||
if (!surfaceOn) {
|
if (!surfaceOn) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (lastWidget) {
|
let surfaces = poppedRec.surfaces;
|
||||||
let surfaces = poppedRec.surfaces;
|
for (let wid of Object.keys(surfaces)) {
|
||||||
for (let wid of Object.keys(surfaces)) {
|
let widget = api.widgets.forid(wid);
|
||||||
CAM.surface_clear(api.widgets.forid(wid));
|
if (widget) {
|
||||||
|
CAM.surface_clear(widget);
|
||||||
|
} else {
|
||||||
|
delete surfaces[wid];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
api.hide.alert(alert);
|
api.hide.alert(alert);
|
||||||
|
|
@ -612,10 +612,7 @@ CAM.init = function(kiri, api) {
|
||||||
// TRACE FUNCS
|
// TRACE FUNCS
|
||||||
let traceOn = false, lastTrace;
|
let traceOn = false, lastTrace;
|
||||||
func.traceAdd = (ev) => {
|
func.traceAdd = (ev) => {
|
||||||
func.unpop();
|
func.clearPops();
|
||||||
func.tabDone();
|
|
||||||
func.traceDone();
|
|
||||||
func.surfaceDone();
|
|
||||||
alert = api.show.alert("analyzing parts...", 1000);
|
alert = api.show.alert("analyzing parts...", 1000);
|
||||||
traceOn = hoveredOp;
|
traceOn = hoveredOp;
|
||||||
traceOn.classList.add("editing");
|
traceOn.classList.add("editing");
|
||||||
|
|
@ -693,6 +690,12 @@ CAM.init = function(kiri, api) {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
func.clearPops = () => {
|
||||||
|
if (func.unpop) func.unpop();
|
||||||
|
func.tabDone();
|
||||||
|
func.traceDone();
|
||||||
|
func.surfaceDone();
|
||||||
|
};
|
||||||
api.event.on("cam.trace.clear", func.traceClear = () => {
|
api.event.on("cam.trace.clear", func.traceClear = () => {
|
||||||
func.traceDone();
|
func.traceDone();
|
||||||
API.widgets.all().forEach(widget => {
|
API.widgets.all().forEach(widget => {
|
||||||
|
|
@ -781,22 +784,17 @@ CAM.init = function(kiri, api) {
|
||||||
// COMMON TAB/TRACE EVENT HANDLERS
|
// COMMON TAB/TRACE EVENT HANDLERS
|
||||||
api.event.on("slice.begin", () => {
|
api.event.on("slice.begin", () => {
|
||||||
if (isCamMode) {
|
if (isCamMode) {
|
||||||
func.tabDone();
|
func.clearPops();
|
||||||
func.traceDone();
|
|
||||||
func.surfaceDone();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
api.event.on("key.esc", () => {
|
api.event.on("key.esc", () => {
|
||||||
if (isCamMode) {
|
if (isCamMode) {
|
||||||
func.tabDone();
|
func.clearPops();
|
||||||
func.traceDone();
|
|
||||||
func.surfaceDone();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
api.event.on("selection.scale", () => {
|
api.event.on("selection.scale", () => {
|
||||||
if (isCamMode) {
|
if (isCamMode) {
|
||||||
func.tabClear();
|
func.clearPops();
|
||||||
func.traceClear();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
api.event.on("widget.duplicate", (widget, oldwidget) => {
|
api.event.on("widget.duplicate", (widget, oldwidget) => {
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ CAM.process = {
|
||||||
kiri.load(api => {
|
kiri.load(api => {
|
||||||
|
|
||||||
if (kiri.client) {
|
if (kiri.client) {
|
||||||
CAM.surfaces = function(ondone) {
|
CAM.surface_prep = function(ondone) {
|
||||||
kiri.client.sync();
|
kiri.client.sync();
|
||||||
const settings = api.conf.get();
|
const settings = api.conf.get();
|
||||||
kiri.client.send("cam_surfaces", { settings }, output => {
|
kiri.client.send("cam_surfaces", { settings }, output => {
|
||||||
|
|
@ -33,7 +33,7 @@ kiri.load(api => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
function select_face_groups(widget) {
|
CAM.surface_show = function(widget) {
|
||||||
widget.selectFaces(Object.values(widget._surfaces).flat());
|
widget.selectFaces(Object.values(widget._surfaces).flat());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -43,14 +43,16 @@ kiri.load(api => {
|
||||||
if (faces.contains(face)) {
|
if (faces.contains(face)) {
|
||||||
// delete this face group
|
// delete this face group
|
||||||
delete surfaces[root];
|
delete surfaces[root];
|
||||||
select_face_groups(widget);
|
CAM.surface_show(widget);
|
||||||
ondone(Object.keys(surfaces));
|
ondone(Object.keys(surfaces));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
kiri.client.send("cam_surface_find", { id: widget.id, face }, faces => {
|
kiri.client.send("cam_surface_find", { id: widget.id, face }, faces => {
|
||||||
surfaces[face] = faces;
|
if (faces.length) {
|
||||||
select_face_groups(widget);
|
surfaces[face] = faces;
|
||||||
|
CAM.surface_show(widget);
|
||||||
|
}
|
||||||
ondone(Object.keys(surfaces));
|
ondone(Object.keys(surfaces));
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
@ -76,14 +78,23 @@ kiri.load(api => {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kiri.worker) {
|
if (kiri.worker) {
|
||||||
|
CAM.surface_prep = function(widget) {
|
||||||
|
if (!widget.tool) {
|
||||||
|
let tool = widget.tool = new mesh.tool();
|
||||||
|
tool.generateFaceMap(widget.getVertices().array);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
CAM.surface_find = function(widget, faces) {
|
||||||
|
CAM.surface_prep(widget);
|
||||||
|
return widget.tool.findConnectedSurface(faces, 0.1, 0.001);
|
||||||
|
};
|
||||||
|
|
||||||
kiri.worker.cam_surfaces = function(data, send) {
|
kiri.worker.cam_surfaces = function(data, send) {
|
||||||
const { settings } = data;
|
const { settings } = data;
|
||||||
const widgets = Object.values(kiri.worker.cache);
|
const widgets = Object.values(kiri.worker.cache);
|
||||||
for (let widget of widgets) {
|
for (let widget of widgets) {
|
||||||
if (!widget.tool) {
|
CAM.surface_prep(widget);
|
||||||
let tool = widget.tool = new mesh.tool();
|
|
||||||
tool.generateFaceMap(widget.getVertices().array);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
send.done({});
|
send.done({});
|
||||||
};
|
};
|
||||||
|
|
@ -91,7 +102,7 @@ kiri.load(api => {
|
||||||
kiri.worker.cam_surface_find = function(data, send) {
|
kiri.worker.cam_surface_find = function(data, send) {
|
||||||
const { id, face } = data;
|
const { id, face } = data;
|
||||||
const widget = kiri.worker.cache[id];
|
const widget = kiri.worker.cache[id];
|
||||||
const faces = widget.tool.findConnectedSurface([face], 0.1, 0.001);
|
const faces = CAM.surface_find(widget, [face]);
|
||||||
send.done(faces);
|
send.done(faces);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -930,22 +930,29 @@ class OpPocket extends CamOp {
|
||||||
let { process, stock } = settings;
|
let { process, stock } = settings;
|
||||||
// generate tracing offsets from chosen features
|
// generate tracing offsets from chosen features
|
||||||
let sliceOut = this.sliceOut = [];
|
let sliceOut = this.sliceOut = [];
|
||||||
let areas = op.areas[widget.id] || [];
|
let surface = op.surfaces[widget.id] || [];
|
||||||
|
let faces = CAM.surface_find(widget, surface);
|
||||||
let toolDiam = new CAM.Tool(settings, tool).fluteDiameter();
|
let toolDiam = new CAM.Tool(settings, tool).fluteDiameter();
|
||||||
let toolOver = toolDiam * op.step;
|
let toolOver = toolDiam * op.step;
|
||||||
let cutdir = process.camConventional;
|
let cutdir = process.camConventional;
|
||||||
let polys = [];
|
|
||||||
updateToolDiams(toolDiam);
|
updateToolDiams(toolDiam);
|
||||||
if (tabs) {
|
if (tabs) {
|
||||||
tabs.forEach(tab => {
|
tabs.forEach(tab => {
|
||||||
tab.off = POLY.expand([tab.poly], toolDiam / 2).flat();
|
tab.off = POLY.expand([tab.poly], toolDiam / 2).flat();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
for (let arr of areas) {
|
let vert = widget.getVertices().array;
|
||||||
let poly = newPolygon().fromArray(arr);
|
let polys = [];
|
||||||
POLY.setWinding([ poly ], cutdir, false);
|
for (let face of faces) {
|
||||||
polys.push(poly);
|
let i = face * 9;
|
||||||
|
polys.push(newPolygon()
|
||||||
|
.add(vert[i++], vert[i++], vert[i++])
|
||||||
|
.add(vert[i++], vert[i++], vert[i++])
|
||||||
|
.add(vert[i++], vert[i++], vert[i++])
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
polys = POLY.union(polys, undefined, true);
|
||||||
|
polys = POLY.setWinding(polys, cutdir, false);
|
||||||
function newSliceOut(z) {
|
function newSliceOut(z) {
|
||||||
let slice = newSlice(z);
|
let slice = newSlice(z);
|
||||||
sliceAll.push(slice);
|
sliceAll.push(slice);
|
||||||
|
|
@ -1423,6 +1430,7 @@ CAM.OPS = CamOp.MAP = {
|
||||||
"rough": OpRough,
|
"rough": OpRough,
|
||||||
"outline": OpOutline,
|
"outline": OpOutline,
|
||||||
"contour": OpContour,
|
"contour": OpContour,
|
||||||
|
"pocket": OpPocket,
|
||||||
"trace": OpTrace,
|
"trace": OpTrace,
|
||||||
"drill": OpDrill,
|
"drill": OpDrill,
|
||||||
"register": OpRegister,
|
"register": OpRegister,
|
||||||
|
|
|
||||||
|
|
@ -413,7 +413,6 @@ function platformAdd(widget, shift, nolayout, defer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function platformAddDeferred() {
|
function platformAddDeferred() {
|
||||||
console.log('platform_add_deferred');
|
|
||||||
for (let rec of deferred) {
|
for (let rec of deferred) {
|
||||||
let { widget, shift, nolayout } = rec;
|
let { widget, shift, nolayout } = rec;
|
||||||
// platform.select(widget, shift);
|
// platform.select(widget, shift);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue