diff --git a/src/kiri/core/conf.js b/src/kiri/core/conf.js index 2e9aa772..23ae1477 100644 --- a/src/kiri/core/conf.js +++ b/src/kiri/core/conf.js @@ -556,6 +556,7 @@ export const conf = { camTabsDepth: 5, camTabsMidline: false, camDepthFirst: false, + camInnerFirst: false, camEaseDown: false, camEaseAngle: 10, camOriginTop: true, diff --git a/src/kiri/mode/cam/init-menu.js b/src/kiri/mode/cam/init-menu.js index 69becf60..9cc96073 100644 --- a/src/kiri/mode/cam/init-menu.js +++ b/src/kiri/mode/cam/init-menu.js @@ -97,6 +97,7 @@ export function menu() { camConventional: newBoolean(LANG.ou_conv_s, onBooleanClick, {title:LANG.ou_conv_l}), camEaseDown: newBoolean(LANG.cr_ease_s, onBooleanClick, {title:LANG.cr_ease_l}), camDepthFirst: newBoolean(LANG.ou_depf_s, onBooleanClick, {title:LANG.ou_depf_l}), + camInnerFirst: newBoolean(LANG.ou_inrf_s, onBooleanClick, {title:LANG.ou_inrf_l}), camToolInit: newBoolean(LANG.ou_toin_s, onBooleanClick, {title:LANG.ou_toin_l}), separator: newBlank({ class:"set-sep", driven }), camFirstZMax: newBoolean(LANG.ou_z1st_s, onBooleanClick, {title:LANG.ou_z1st_l}), diff --git a/src/kiri/mode/cam/prepare.js b/src/kiri/mode/cam/prepare.js index d57bf66e..df6ec5f3 100644 --- a/src/kiri/mode/cam/prepare.js +++ b/src/kiri/mode/cam/prepare.js @@ -85,6 +85,7 @@ export function prepEach(widget, settings, print, firstPoint, update) { easeDown = process.camEaseDown, easeAngle = process.camEaseAngle, depthFirst = process.camDepthFirst, + innerFirst = process.camInnerFirst, engageFactor = process.camFullEngage, arcTolerance = process.camArcTolerance, arcRes = toRadians(process.camArcResolution), @@ -719,7 +720,10 @@ export function prepEach(widget, settings, print, firstPoint, update) { setTool(tool, rate, plunge); let traceTool = new Tool(settings, tool); let traceToolDiam = traceTool.fluteDiameter(); - printPoint = poly2polyEmit(slice.camLines, printPoint, polyEmit, { swapdir: false }); + printPoint = poly2polyEmit(slice.camLines, printPoint, polyEmit, { + swapdir: false, + weight: innerFirst + }); newLayer(); } diff --git a/src/kiri/mode/cam/slice.js b/src/kiri/mode/cam/slice.js index 6a7dfd71..ba06f5d6 100644 --- a/src/kiri/mode/cam/slice.js +++ b/src/kiri/mode/cam/slice.js @@ -87,6 +87,8 @@ export async function cam_slice(settings, widget, onupdate, ondone) { bottom_z, bottom_cut }, 3); + console.log({ track, bounds, stock, workarea }); + return structuredClone(workarea); }; diff --git a/src/kiri/run/engine.js b/src/kiri/run/engine.js index abd69b2a..00824cbe 100644 --- a/src/kiri/run/engine.js +++ b/src/kiri/run/engine.js @@ -126,6 +126,10 @@ class Engine { return this; } + setTopOffset(offset = 0) { + this.topOffset = offset; + } + setOrigin(x, y, z) { this.settings.origin = { x, y, z }; return this; @@ -152,6 +156,7 @@ class Engine { } slice() { + this.widget.setTopZ(this.settings.stock.z - (this.topOffset || 0)); return new Promise((accept, reject) => { client.clear(); client.sync([this.widget]); diff --git a/web/kiri/engine.html b/web/kiri/engine.html index da417539..40b62df6 100644 --- a/web/kiri/engine.html +++ b/web/kiri/engine.html @@ -99,7 +99,11 @@ }); edit.session.setTabSize(4); edit.session.setUseSoftTabs(true); - let FDMExample = loadExample(demoFDM) + if (localStorage.engineCode) { + edit.session.setValue(localStorage.engineCode); + } else { + loadExample(demoFDM); + } } function display_message(msg) { $('gfoot').innerText = msg ? Object.keys(msg).join(' - ') : ''; @@ -110,7 +114,7 @@ $('dfoot').style.display = 'block'; $('gfoot').style.display = ''; } - function loadExample(func){ + function loadExample(func) { let fnstr = func.toString().split("\n"); edit.session.setValue( fnstr @@ -124,6 +128,7 @@ $('gfoot').style.display = 'block'; let code = edit.session.getValue(); eval(`(function(){${code}})()`); + localStorage.engineCode = code; } function demoFDM() { new Engine() diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index bc713531..fdaa35b3 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -790,6 +790,8 @@ self.lang['en-us'] = { ou_conv_l: ["milling direction","uncheck for 'climb'"], ou_depf_s: "depth first", ou_depf_l: ["optimize pocket cuts","with depth priority"], + ou_inrf_s: "inner first", + ou_inrf_l: ["always cut inner to outer"], ou_toin_s: "tool init", ou_toin_l: "add tool change with first operation. when disabled, the gcode assumes the first tool is loaded and offset probed", ou_forz_s: "force z max",