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