add trace support for taper tip diameter and offset override

This commit is contained in:
Stewart Allen 2023-01-17 19:10:39 -05:00
commit 0dc3f190e4
7 changed files with 24 additions and 6 deletions

View file

@ -25,6 +25,8 @@ Full docs @ https://docs.grid.space/projects/kiri-moto
* CAM update traces to async slicing, fix use with flip
* CAM add threading support for all slicing ops
* CAM add omit pocket option to outline op
* CAM add trace support for taper tip diameter
* CAM add trace offset override
# Release 3.7 (2022-11-12)

View file

@ -1313,6 +1313,7 @@ CAM.init = function(kiri, api) {
rate: 'camTraceSpeed',
plunge: 'camTracePlunge',
bottom: 'camTraceBottom',
offover: 'camTraceOffOver',
select: 'camTraceMode'
}).inputs = {
tool: UC.newSelect(LANG.cc_tool, {}, "tools"),
@ -1327,6 +1328,7 @@ CAM.init = function(kiri, api) {
step: UC.newInput(LANG.cc_sovr_s, {title:LANG.cc_sovr_l, convert:UC.toFloat, bound:UC.bound(0.01,1.0), show:(op) => popOp.trace.rec.mode === "clear"}),
down: UC.newInput(LANG.cc_sdwn_s, {title:LANG.cc_sdwn_l, convert:UC.toFloat, units:true}),
thru: UC.newInput(LANG.cc_thru_s, {title:LANG.cc_thru_l, convert:UC.toFloat, units:true}),
offover: UC.newInput(LANG.cc_offd_s, {title:LANG.cc_offd_l, convert:UC.toFloat, units:true, show:() => poppedRec.offset !== "none"}),
sep: UC.newBlank({class:"pop-sep", modes:MCAM, show:zBottom, poop:true }),
bottom: UC.newBoolean(LANG.cf_botm_s, undefined, {title:LANG.cf_botm_l, show:(op,conf) => conf.process.camZBottom}),
sep: UC.newBlank({class:"pop-sep"}),

View file

@ -837,7 +837,7 @@ class OpTrace extends CamOp {
async slice(progress) {
let { op, state } = this;
let { tool, rate, down, plunge, offset, thru } = op;
let { tool, rate, down, plunge, offset, offover, thru } = op;
let { settings, widget, addSlices, zMax, zTop, zThru, tabs } = state;
let { updateToolDiams, cutTabs, cutPolys, healPolys, color } = state;
let { process, stock } = settings;
@ -848,8 +848,10 @@ class OpTrace extends CamOp {
// generate tracing offsets from chosen features
let sliceOut = this.sliceOut = [];
let areas = op.areas[widget.id] || [];
let toolDiam = new CAM.Tool(settings, tool).fluteDiameter();
let camTool = new CAM.Tool(settings, tool);
let toolDiam = camTool.fluteDiameter();
let toolOver = toolDiam * op.step;
let traceOffset = camTool.traceOffset()
let cutdir = process.camConventional;
let polys = [];
let stockRect = stock.center && stock.x && stock.y ?
@ -975,11 +977,13 @@ class OpTrace extends CamOp {
routed.push(poly);
});
for (let poly of POLY.nest(routed)) {
let offdist = 0;
let offdist = offover;
if (!offdist)
switch (offset) {
case "outside": offdist = toolDiam / 2; break;
case "inside": offdist = -toolDiam / 2; break;
case "outside": offdist = traceOffset; break;
case "inside": offdist = -traceOffset; break;
}
console.log({ offdist });
if (offdist) {
let pnew = POLY.offset([poly], offdist, { minArea: 0 });
if (pnew) {
@ -1000,6 +1004,9 @@ class OpTrace extends CamOp {
followZ(pi.clone().setZ(z));
}
} else {
if (thru) {
pi.setZ(pi.getZ() - thru);
}
followZ(pi);
}
}

View file

@ -61,6 +61,10 @@ class Tool {
return this.unitScale() * this.tool.taper_tip;
}
traceOffset() {
return (this.isTaperMill() ? this.tipDiameter() : this.fluteDiameter()) / 2;
}
shaftLength() {
return this.unitScale() * this.tool.shaft_len;
}

View file

@ -506,6 +506,7 @@ const conf = exports({
camTraceThru: 0,
camTraceSpeed: 250,
camTracePlunge: 200,
camTraceOffOver: 0,
camTraceLines: false,
camTraceBottom: false,
camPocketSpindle: 1000,

View file

@ -92,7 +92,7 @@ const LISTS = {
{ name: "clear" }
],
traceoff: [
{ name: "center" },
{ name: "none" },
{ name: "inside" },
{ name: "outside" }
],

View file

@ -448,6 +448,8 @@ self.kiri.lang['en-us'] = {
cc_sdwn_l: ["step down depth","for each pass","in workspace units","0 to disable"],
cc_thru_s: "cut thru",
cc_thru_l: ["additional cut depth below trace bottom"],
cc_offd_s: "offset",
cc_offd_l: ["overrides default offset distance (which is the tool radius) when set to any value but zero"],
cc_feed_s: "feed rate",
cc_feed_l: ["max cutting speed in","workspace units / minute"],
cc_plng_s: "plunge rate",