diff --git a/src/kiri/conf.js b/src/kiri/conf.js
index 6499fb5a..31223651 100644
--- a/src/kiri/conf.js
+++ b/src/kiri/conf.js
@@ -465,6 +465,7 @@
camTraceDown: 0,
camTraceSpeed: 250,
camTracePlunge: 200,
+ camTraceLines: false,
camDrillTool: 1000,
camDrillSpindle: 1000,
camDrillDownSpeed: 250,
diff --git a/src/mode/cam/client.js b/src/mode/cam/client.js
index 84e24f68..f7f6b10e 100644
--- a/src/mode/cam/client.js
+++ b/src/mode/cam/client.js
@@ -578,7 +578,7 @@
}
});
});
- });
+ }, poppedRec.single);
api.feature.hover = true;
api.feature.hoverAdds = true;
func.hover = func.traceHover;
@@ -867,7 +867,8 @@
step: 'camTraceOver',
down: 'camTraceDown',
rate: 'camTraceSpeed',
- plunge: 'camTracePlunge'
+ plunge: 'camTracePlunge',
+ single: 'camTraceLines',
}).inputs = {
tool: UC.newSelect(LANG.cc_tool, {}, "tools"),
sep: UC.newBlank({class:"pop-sep"}),
@@ -879,6 +880,7 @@
rate: UC.newInput(LANG.cc_feed_s, {title:LANG.cc_feed_l, convert:UC.toInt, units:true}),
plunge: UC.newInput(LANG.cc_plng_s, {title:LANG.cc_plng_l, convert:UC.toInt, units:true}),
sep: UC.newBlank({class:"pop-sep"}),
+ single: UC.newBoolean(LANG.cc_sngl_s, undefined, {title:LANG.cc_sngl_l}),
select: UC.newRow([
UC.newButton(undefined, func.traceAdd, {icon:''}),
UC.newButton(undefined, func.traceDone, {icon:''}),
diff --git a/src/mode/cam/driver.js b/src/mode/cam/driver.js
index 27560cbe..6629f311 100644
--- a/src/mode/cam/driver.js
+++ b/src/mode/cam/driver.js
@@ -25,11 +25,11 @@
KIRI.loader.push(function(API) {
if (KIRI.client)
- CAM.traces = function(ondone) {
+ CAM.traces = function(ondone, single) {
KIRI.client.sync();
let settings = API.conf.get();
let widgets = API.widgets.map();
- KIRI.client.send("cam_traces", { settings }, output => {
+ KIRI.client.send("cam_traces", { settings, single }, output => {
let ids = [];
KIRI.codec.decode(output).forEach(rec => {
ids.push(rec.id);
@@ -41,9 +41,9 @@
if (KIRI.worker)
KIRI.worker.cam_traces = function(data, send) {
- const { settings } = data;
+ const { settings, single } = data;
const widgets = Object.values(wcache);
- const fresh = widgets.filter(widget => CAM.traces(settings, widget));
+ const fresh = widgets.filter(widget => CAM.traces(settings, widget, single));
send.done(KIRI.codec.encode(fresh.map(widget => { return {
id: widget.id,
traces: widget.traces,
diff --git a/src/mode/cam/slice.js b/src/mode/cam/slice.js
index 25e1ee25..4a8600db 100644
--- a/src/mode/cam/slice.js
+++ b/src/mode/cam/slice.js
@@ -221,8 +221,8 @@
}
};
- CAM.traces = function(settings, widget) {
- if (widget.traces) {
+ CAM.traces = function(settings, widget, single) {
+ if (widget.traces && widget.trace_single === single) {
// do no work if cached
return false;
}
@@ -257,7 +257,13 @@
return;
}
}
- traces.push(poly);
+ if (single) {
+ poly.forEachSegment((p1, p2) => {
+ traces.push(newPolygon().append(p1).append(p2).setOpen());
+ }, poly.open);
+ } else {
+ traces.push(poly);
+ }
});
};
let opts = { each: oneach, over: false, flatoff: 0, edges: true, openok: true };
@@ -265,6 +271,7 @@
opts.over = true;
slicer.slice(indices, opts);
widget.traces = traces;
+ widget.trace_single = single;
return true;
};
diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js
index 632b8a26..68714f46 100644
--- a/web/kiri/lang/en.js
+++ b/web/kiri/lang/en.js
@@ -357,6 +357,8 @@ kiri.lang['en-us'] = {
cc_feed_l: ["max cutting speed in","workspace units / minute"],
cc_plng_s: "plunge rate",
cc_plng_l: ["max z axis speed in","workspace units / minute"],
+ cc_sngl_s: "select lines only",
+ cc_sngl_l: ["select only single edges","instead of connected polylines"],
// CNC COMMON
cc_menu: "limits",