add roughing flat passes option
This commit is contained in:
parent
f097829e34
commit
367bf32b0a
6 changed files with 48 additions and 9 deletions
|
|
@ -565,6 +565,7 @@ export const conf = {
|
||||||
camRegisterThru: 5,
|
camRegisterThru: 5,
|
||||||
camRoughAll: true,
|
camRoughAll: true,
|
||||||
camRoughDown: 2,
|
camRoughDown: 2,
|
||||||
|
camRoughFlat: false,
|
||||||
camRoughIn: true,
|
camRoughIn: true,
|
||||||
camRoughOmitThru: false,
|
camRoughOmitThru: false,
|
||||||
camRoughOmitVoid: false,
|
camRoughOmitVoid: false,
|
||||||
|
|
|
||||||
|
|
@ -227,6 +227,7 @@ export function createPopOps() {
|
||||||
leave: 'camRoughStock',
|
leave: 'camRoughStock',
|
||||||
leavez: 'camRoughStockZ',
|
leavez: 'camRoughStockZ',
|
||||||
all: 'camRoughAll',
|
all: 'camRoughAll',
|
||||||
|
flats: 'camRoughFlat',
|
||||||
inside: 'camRoughIn',
|
inside: 'camRoughIn',
|
||||||
omitthru: 'camRoughOmitThru',
|
omitthru: 'camRoughOmitThru',
|
||||||
ov_topz: 0,
|
ov_topz: 0,
|
||||||
|
|
@ -246,6 +247,7 @@ export function createPopOps() {
|
||||||
sep: UC.newBlank({ class: "pop-sep" }),
|
sep: UC.newBlank({ class: "pop-sep" }),
|
||||||
all: UC.newBoolean(LANG.cr_clst_s, undefined, { title: LANG.cr_clst_l, show: () => !env.poppedRec.inside || env.poppedRec.all }),
|
all: UC.newBoolean(LANG.cr_clst_s, undefined, { title: LANG.cr_clst_l, show: () => !env.poppedRec.inside || env.poppedRec.all }),
|
||||||
inside: UC.newBoolean(LANG.cr_olin_s, undefined, { title: LANG.cr_olin_l, show: () => !env.poppedRec.all || env.poppedRec.inside }),
|
inside: UC.newBoolean(LANG.cr_olin_s, undefined, { title: LANG.cr_olin_l, show: () => !env.poppedRec.all || env.poppedRec.inside }),
|
||||||
|
flats: UC.newBoolean(LANG.cr_clrf_s, undefined, { title: LANG.cr_clrf_l }),
|
||||||
omitthru: UC.newBoolean(LANG.co_omit_s, undefined, { title: LANG.co_omit_l }),
|
omitthru: UC.newBoolean(LANG.co_omit_s, undefined, { title: LANG.co_omit_l }),
|
||||||
sep: UC.newBlank({ class: "pop-sep" }),
|
sep: UC.newBlank({ class: "pop-sep" }),
|
||||||
exp: UC.newExpand("overrides"),
|
exp: UC.newExpand("overrides"),
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,8 @@ class OpArea extends CamOp {
|
||||||
|
|
||||||
async slice(progress) {
|
async slice(progress) {
|
||||||
let { op, state } = this;
|
let { op, state } = this;
|
||||||
let { direction, down, expand, follow, mode, outline, over, rename, smooth, tool } = op;
|
let { direction, down, expand, flats, flatOff, follow } = op;
|
||||||
|
let { mode, outline, over, rename, smooth, tool } = op;
|
||||||
let { addSlices, color, cutTabs, settings } = state;
|
let { addSlices, color, cutTabs, settings } = state;
|
||||||
let { shadowAt, setToolDiam, tabs, widget, workarea } = state;
|
let { shadowAt, setToolDiam, tabs, widget, workarea } = state;
|
||||||
|
|
||||||
|
|
@ -129,7 +130,10 @@ class OpArea extends CamOp {
|
||||||
newArea();
|
newArea();
|
||||||
|
|
||||||
if (mode === 'clear') {
|
if (mode === 'clear') {
|
||||||
let zs = down ? base_util.lerp(zTop, zBottom, down) : [ bounds.min.z ];
|
let zMov = flatOff ?? 0;
|
||||||
|
let zs = flats ?
|
||||||
|
flats.filter(z => z <= zTop && z >= zBottom).map(v => v + zMov ?? 0) :
|
||||||
|
down ? base_util.lerp(zTop, zBottom, down) : [ bounds.min.z ];
|
||||||
let zroc = 0;
|
let zroc = 0;
|
||||||
let zinc = 1 / zs.length;
|
let zinc = 1 / zs.length;
|
||||||
let lzo;
|
let lzo;
|
||||||
|
|
@ -152,7 +156,7 @@ class OpArea extends CamOp {
|
||||||
let firstOff = -(toolDiam / 2 + (op.leave_xy ?? 0));
|
let firstOff = -(toolDiam / 2 + (op.leave_xy ?? 0));
|
||||||
POLY.subtract([ area ], shadow, clip, undefined, undefined, 0);
|
POLY.subtract([ area ], shadow, clip, undefined, undefined, 0);
|
||||||
POLY.offset(clip, [ firstOff, -toolOver ], {
|
POLY.offset(clip, [ firstOff, -toolOver ], {
|
||||||
count: op.steps ?? 999, outs, flat: true, z, minArea: 0
|
count: op.steps ?? 999, outs, flat: true, z: z - zMov, minArea: 0
|
||||||
});
|
});
|
||||||
// if we see no offsets, re-check the mesh bottom Z then exit
|
// if we see no offsets, re-check the mesh bottom Z then exit
|
||||||
if (outs.length === 0) {
|
if (outs.length === 0) {
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,8 @@ class OpRough extends CamOp {
|
||||||
|
|
||||||
async slice(progress) {
|
async slice(progress) {
|
||||||
let { op, state } = this;
|
let { op, state } = this;
|
||||||
let { shadow, stock, tool, widget } = state;
|
let { newSlicer, shadow, stock, tool, widget } = state;
|
||||||
let { workarea } = state;
|
|
||||||
|
|
||||||
let cutThruBypass = op.down > workarea.top_stock - workarea.bottom_part;
|
|
||||||
let cutOutside = !op.inside;
|
let cutOutside = !op.inside;
|
||||||
let shadowBase = shadow.base;
|
let shadowBase = shadow.base;
|
||||||
|
|
||||||
|
|
@ -54,9 +52,36 @@ class OpRough extends CamOp {
|
||||||
surfaces: {}
|
surfaces: {}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
if (op.flats) {
|
||||||
|
let slicer = newSlicer();
|
||||||
|
ops_list.push(new OpArea(state, {
|
||||||
|
rename: op.rename ?? "flats",
|
||||||
|
spindle: op.spindle,
|
||||||
|
direction: op.direction,
|
||||||
|
tool: op.tool,
|
||||||
|
rate: op.rate,
|
||||||
|
plunge: op.plunge,
|
||||||
|
mode: 'clear',
|
||||||
|
over: op.step,
|
||||||
|
down: op.down,
|
||||||
|
expand: 0,
|
||||||
|
smooth: 0,
|
||||||
|
outline: true,
|
||||||
|
omitthru: op.omitthru,
|
||||||
|
leave_xy: op.leave,
|
||||||
|
leave_z: op.leavez,
|
||||||
|
ov_botz: op.ov_botz,
|
||||||
|
ov_topz: op.ov_topz,
|
||||||
|
areas: { [widget.id]: areas.map(p => p.toArray()) },
|
||||||
|
surfaces: {},
|
||||||
|
flats: Object.keys(slicer.zFlat).map(v => parseFloat(v)).sort((a,b) => b-a),
|
||||||
|
flatOff: 0.01
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
if (cutOutside) {
|
if (cutOutside) {
|
||||||
ops_list.push(new OpArea(state, {
|
ops_list.push(new OpArea(state, {
|
||||||
rename: op.rename ?? "rough",
|
rename: op.rename ?? "cutout",
|
||||||
spindle: op.spindle,
|
spindle: op.spindle,
|
||||||
direction: op.direction === 'climb' ? 'conventional' : 'climb',
|
direction: op.direction === 'climb' ? 'conventional' : 'climb',
|
||||||
tool: op.tool,
|
tool: op.tool,
|
||||||
|
|
|
||||||
|
|
@ -173,6 +173,7 @@ export async function cam_slice(settings, widget, onupdate, ondone) {
|
||||||
cutTabs,
|
cutTabs,
|
||||||
dark,
|
dark,
|
||||||
isIndexed,
|
isIndexed,
|
||||||
|
newSlicer,
|
||||||
ops: opList,
|
ops: opList,
|
||||||
setAxisIndex,
|
setAxisIndex,
|
||||||
setToolDiam,
|
setToolDiam,
|
||||||
|
|
@ -218,8 +219,12 @@ export async function cam_slice(settings, widget, onupdate, ondone) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateSlicer() {
|
function newSlicer(opts) {
|
||||||
slicer = state.slicer = new cam_slicer(widget);
|
return new cam_slicer(widget, opts);
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateSlicer(opts) {
|
||||||
|
return slicer = state.slicer = new cam_slicer(widget, opts);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function computeShadows() {
|
async function computeShadows() {
|
||||||
|
|
|
||||||
|
|
@ -544,6 +544,8 @@ self.lang['en-us'] = {
|
||||||
cr_clrt_l: ["run a clearing pass over","the bounding area of the part","at z = 0"],
|
cr_clrt_l: ["run a clearing pass over","the bounding area of the part","at z = 0"],
|
||||||
cr_olin_s: "inside only",
|
cr_olin_s: "inside only",
|
||||||
cr_olin_l: ["limit cutting to","inside part boundaries"],
|
cr_olin_l: ["limit cutting to","inside part boundaries"],
|
||||||
|
cr_clrf_s: "clear faces",
|
||||||
|
cr_clrf_l: ["add additional clearing passes","for detected z planar flat areas"],
|
||||||
|
|
||||||
// CNC OUTLINE
|
// CNC OUTLINE
|
||||||
co_menu: "outline",
|
co_menu: "outline",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue