diff --git a/src/kiri-mode/cam/client.js b/src/kiri-mode/cam/client.js index ccb10065..1262ee7f 100644 --- a/src/kiri-mode/cam/client.js +++ b/src/kiri-mode/cam/client.js @@ -905,7 +905,7 @@ CAM.init = function(kiri, api) { let radians = poppedRec.follow * DEG2RAD; CAM.surface_prep(currentIndex * RAD2DEG, () => { api.hide.alert(alert); - alert = api.show.alert("[esc] cancels surface editing"); + alert = api.show.alert("[esc] cancels surface selection"); for (let [wid, arr] of Object.entries(surfaces)) { let widget = api.widgets.forid(wid); if (widget && arr.length) diff --git a/src/kiri-mode/laser/driver.js b/src/kiri-mode/laser/driver.js index 8f5dd3fd..e24d0553 100644 --- a/src/kiri-mode/laser/driver.js +++ b/src/kiri-mode/laser/driver.js @@ -15,6 +15,7 @@ const { polygons, newPoint } = base; const POLY = polygons; const DRIVER = driver.LASER = { + name: 'Laser', init, slice, prepare, @@ -24,7 +25,7 @@ const DRIVER = driver.LASER = { exportDXF }; -function init(kiri, api) { +function init(kiri, api, driver) { api.event.on("settings.saved", settings => { let ui = kiri.api.ui; }); diff --git a/src/kiri-mode/wedm/driver.js b/src/kiri-mode/wedm/driver.js index 4202b49d..eac58dc7 100644 --- a/src/kiri-mode/wedm/driver.js +++ b/src/kiri-mode/wedm/driver.js @@ -5,7 +5,105 @@ // dep: kiri-mode.laser.driver gapp.register("kiri-mode.wedm.driver", [], (root, exports) => { -root.kiri.driver.WEDM = root.kiri.driver.LASER; +const { kiri, moto } = root; +const DRIVERS = kiri.driver; +const { CAM, LASER } = DRIVERS; +const WEDM = DRIVERS.WEDM = Object.assign({}, LASER, { name: "WireEDM" }); +const DEG2RAD = Math.PI / 180; + +const state = { + api: undefined, + alert: undefined, + radians: 0, + surfaces: [], + selecting: false +}; + +function faceAdd() { + if (state.selecting) return faceDone(); + + const { api, radians, surfaces } = state; + CAM.surface_prep(radians, () => { + api.hide.alert(alert); + state.alert = api.show.alert("[esc] cancels surface selection"); + for (let [wid, arr] of Object.entries(surfaces)) { + let widget = api.widgets.forid(wid); + if (widget && arr.length) + for (let faceid of arr) { + CAM.surface_toggle(widget, faceid, radians, faceids => { + // surfaces[widget.id] = faceids; + }); + } + } + api.feature.on_mouse_up = (obj, ev) => { + let { face } = obj; + let min = Math.min(face.a, face.b, face.c); + let faceid = min / 3; + let widget = obj.object.widget; + CAM.surface_toggle(widget, faceid, radians, faceids => { + surfaces[widget.id] = faceids; + }); + }; + state.selecting = true; + }); +} + +function faceDone() { + if (!state.selecting) return; + + const { api, alert, surfaces } = state; + for (let wid of Object.keys(surfaces)) { + let widget = api.widgets.forid(wid); + if (widget) { + CAM.surface_clear(widget); + } else { + delete surfaces[wid]; + } + } + api.hide.alert(alert); + api.feature.on_mouse_up = undefined; + api.ui.faceAdd.classList.remove('editing') + state.selecting = false; +} + +WEDM.init = (kiri, api, driver) => { + LASER.init(kiri, api, driver); + + state.api = api; + + api.event.on("key.esc", () => { + if (state.selecting) { + faceDone(); + } + }); + + api.event.on("mode.set", (mode) => { + console.log({ dev_mode: mode }); + }); + + api.event.on("view.set", (mode) => { + console.log({ view_mode: mode }); + }); + + // Surface Selection Buttons + api.event.on("button.click", target => { + let process = api.conf.get().process; + switch (target) { + case api.ui.faceAdd: + target.classList.add('editing'); + return faceAdd(); + case api.ui.faceDun: + return faceDone(); + case api.ui.faceClr: + api.uc.confirm("clear surface selection?").then(ok => { + // todo + }); + break; + } + }); + +}; + }); diff --git a/src/kiri-mode/wjet/driver.js b/src/kiri-mode/wjet/driver.js index 271e9cb2..67592224 100644 --- a/src/kiri-mode/wjet/driver.js +++ b/src/kiri-mode/wjet/driver.js @@ -5,7 +5,8 @@ // dep: kiri-mode.laser.driver gapp.register("kiri-mode.wjet.driver", [], (root, exports) => { -root.kiri.driver.WJET = root.kiri.driver.LASER; +const DRIVERS = root.kiri.driver; +DRIVERS.WJET = Object.assign({}, DRIVERS.LASER, { name: 'WaterJet' }); }); diff --git a/src/kiri/init.js b/src/kiri/init.js index 5657f7fe..8d7424e3 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -26,6 +26,7 @@ gapp.register("kiri.init", [], (root, exports) => { STARTMODE = SETUP.sm && SETUP.sm.length === 1 ? SETUP.sm[0] : null, { CAM, SLA, FDM, LASER, DRAG, WJET, WEDM } = MODES, TWOD = [LASER, DRAG, WJET, WEDM], + TWONED= [LASER, DRAG, WJET], THREED = [FDM, CAM, SLA], GCODE = [FDM, CAM, ...TWOD], CAM_LZR = [CAM, ...TWOD], @@ -1941,28 +1942,34 @@ gapp.register("kiri.init", [], (root, exports) => { _____: newGroup(LANG.sl_menu, $('lzr-slice'), { modes:TWOD, driven, separator }), ctSliceKerf: newInput(LANG.ls_offs_s, {title:LANG.ls_offs_l, convert:toFloat}), - ctSliceHeight: newInput(LANG.ls_lahi_s, {title:LANG.ls_lahi_l, convert:toFloat, trigger: true}), - ctSliceHeightMin: newInput(LANG.ls_lahm_s, {title:LANG.ls_lahm_l, convert:toFloat, show:() => ui.ctSliceHeight.value == 0 && !ui.ctSliceSingle.checked }), - separator: newBlank({ class:"set-sep", driven }), - ctSliceSingle: newBoolean(LANG.ls_sngl_s, onBooleanClick, {title:LANG.ls_sngl_l}), - knife: newGroup(LANG.dk_menu, $('lzr-knife'), { modes:DRAG, marker:true, driven, separator }), + ctSliceHeight: newInput(LANG.ls_lahi_s, {title:LANG.ls_lahi_l, convert:toFloat, trigger: true, modes:TWONED}), + ctSliceHeightMin: newInput(LANG.ls_lahm_s, {title:LANG.ls_lahm_l, convert:toFloat, modes:TWONED, show:() => ui.ctSliceHeight.value == 0 && !ui.ctSliceSingle.checked }), + separator: newBlank({ class:"set-sep", driven, modes:TWONED }), + ctSliceSingle: newBoolean(LANG.ls_sngl_s, onBooleanClick, {title:LANG.ls_sngl_l, modes:TWONED}), + _____: newGroup('surfaces', $('lzr-surface'), { modes:WEDM, driven, separator }), + ctSurfaces: newRow([ + (ui.faceAdd = newButton(undefined, onButtonClick, {icon:''})), + (ui.faceDun = newButton(undefined, onButtonClick, {icon:''})), + (ui.faceClr = newButton(undefined, onButtonClick, {icon:''})) + ], {class:"ext-buttons f-row", modes:WEDM}), + _____: newGroup(LANG.dk_menu, $('lzr-knife'), { modes:DRAG, marker:true, driven, separator }), ctOutKnifeDepth: newInput(LANG.dk_dpth_s, {title:LANG.dk_dpth_l, convert:toFloat, bound:bound(0.0,5.0) }), ctOutKnifePasses: newInput(LANG.dk_pass_s, {title:LANG.dk_pass_l, convert:toInt, bound:bound(0,5) }), ctOutKnifeTip: newInput(LANG.dk_offs_s, {title:LANG.dk_offs_l, convert:toFloat, bound:bound(0.0,10.0) }), - laserLayout: newGroup(LANG.lo_menu, $('lzr-layout'), { modes:TWOD, driven, separator }), + _____: newGroup(LANG.lo_menu, $('lzr-layout'), { modes:TWONED, driven, separator }), ctOutTileSpacing: newInput(LANG.ou_spac_s, {title:LANG.ou_spac_l, convert:toInt}), ctOutMerged: newBoolean(LANG.ou_mrgd_s, onBooleanClick, {title:LANG.ou_mrgd_l}), ctOutGroup: newBoolean(LANG.ou_grpd_s, onBooleanClick, {title:LANG.ou_grpd_l, show:() => !ui.ctOutStack.checked}), - laserOutput: newGroup(LANG.ou_menu, $('lzr-output'), { modes:TWOD, driven, separator }), + _____: newGroup(LANG.ou_menu, $('lzr-output'), { modes:TWOD, driven, separator }), ctOutPower: newInput(LANG.ou_powr_s, {title:LANG.ou_powr_l, convert:toInt, bound:bound(1,100)}), ctOutSpeed: newInput(LANG.ou_sped_s, {title:LANG.ou_sped_l, convert:toInt}), separator: newBlank({ class:"set-sep", driven }), ctOriginBounds: newBoolean(LANG.or_bnds_s, onBooleanClick, {title:LANG.or_bnds_l}), - ctOriginCenter: newBoolean(LANG.or_cntr_s, onBooleanClick, {title:LANG.or_cntr_l}), - separator: newBlank({ class:"set-sep", driven }), - ctOutZColor: newBoolean(LANG.ou_layo_s, onBooleanClick, {title:LANG.ou_layo_l, show:() => { return ui.ctOutMerged.checked === false }}), - ctOutLayer: newBoolean(LANG.ou_layr_s, onBooleanClick, {title:LANG.ou_layr_l}), - ctOutStack: newBoolean(LANG.ou_lays_s, onBooleanClick, {title:LANG.ou_lays_l}), + ctOriginCenter: newBoolean(LANG.or_cntr_s, onBooleanClick, {title:LANG.or_cntr_l}), + separator: newBlank({ class:"set-sep", driven, modes:TWONED }), + ctOutZColor: newBoolean(LANG.ou_layo_s, onBooleanClick, {title:LANG.ou_layo_l, modes:TWONED, show:() => { return ui.ctOutMerged.checked === false }}), + ctOutLayer: newBoolean(LANG.ou_layr_s, onBooleanClick, {title:LANG.ou_layr_l, modes:TWONED}), + ctOutStack: newBoolean(LANG.ou_lays_s, onBooleanClick, {title:LANG.ou_lays_l, modes:TWONED}), /** SLA SETTINGS */ @@ -2481,7 +2488,7 @@ gapp.register("kiri.init", [], (root, exports) => { // call driver initializations, if present Object.values(kiri.driver).forEach(driver => { if (driver.init) try { - driver.init(kiri, api); + driver.init(kiri, api, driver); } catch (error) { console.log({driver_init_fail: driver, error}) } diff --git a/web/kiri/index.css b/web/kiri/index.css index 549857b6..c60ace79 100644 --- a/web/kiri/index.css +++ b/web/kiri/index.css @@ -1314,7 +1314,7 @@ th, tr, td, label { #oplist > div:hover, #op-add:hover { background-color: var(--blue-4); } -#oplist > div.editing { +#oplist > div.editing, #lzr-surface button.editing { background-color: rgba(190,230,190,0.85); } #oplist .drag { diff --git a/web/kiri/index.html b/web/kiri/index.html index d10066e2..27fa3678 100644 --- a/web/kiri/index.html +++ b/web/kiri/index.html @@ -331,8 +331,9 @@
- + + diff --git a/web/kiri/lang/en.js b/web/kiri/lang/en.js index 21a55f59..f683c9b3 100644 --- a/web/kiri/lang/en.js +++ b/web/kiri/lang/en.js @@ -315,7 +315,7 @@ self.kiri.lang['en-us'] = { se_save: "save", // FDM LAYERS - sl_menu: "layers", + sl_menu: "paths", sl_lahi_s: "layer height", sl_lahi_l: ["height of each slice","layer in millimeters"], ad_minl_s: "layer minimum",