allow z top/bottom visual select in left menu. double select cancels

This commit is contained in:
Stewart Allen 2026-01-04 15:31:38 -05:00
commit 96577c4b7b
3 changed files with 42 additions and 9 deletions

View file

@ -10,24 +10,32 @@ let ondone;
let lastY; let lastY;
export function zPlaneStart(which, onselect) { export function zPlaneStart(which, onselect) {
alert = api.show.alert("[esc] cancels z plane selection");
plane = which; plane = which;
ondone = onselect; ondone = onselect;
hoverStart(onHover, onHoverUp); hoverStart(onHover, onHoverUp);
alert = api.show.alert("[esc] cancels z plane selection", 1000);
} }
export function zPlaneDone() { export function zPlaneDone() {
api.hide.alert(alert); api.hide.alert(alert);
updateStock(); updateStock();
alert = undefined;
}
export function zPlaneSelecting() {
return alert ? true : false;
} }
function onHover(data) { function onHover(data) {
const { int, type, point } = data; const { int, point } = data;
if (!int) return;
if (plane === 'top') showZTop(lastY = point.y); else if (plane === 'top') showZTop(lastY = point.y); else
if (plane === 'bottom') showZBottom(lastY = point.y); if (plane === 'bottom') showZBottom(lastY = point.y);
} }
function onHoverUp(int) { function onHoverUp(int) {
ondone(lastY); if (int) {
clearPops(); ondone(lastY);
clearPops();
}
} }

View file

@ -30,6 +30,30 @@ function zAnchorSave() {
api.platform.update_top_z(); api.platform.update_top_z();
} }
const bottom = true;
const top = true;
function selector(type, { input, event, opt }) {
let which = opt?.top ? 'top' : opt?.bottom ? 'bottom' : 'unknown';
let value = parseFloat(input.value);
switch (type) {
case 'click':
api.event.emit('cam.zplane.select', { which, onselect(value) {
input.focus();
input.value = value;
input.blur();
} } );
break;
case 'enter':
api.event.emit('cam.zplane.show', { which, value });
break;
case 'leave':
api.event.emit('cam.zplane.hide', { which });
break;
}
}
export function menu() { export function menu() {
let anim = ui.anim = {}; let anim = ui.anim = {};
@ -121,8 +145,8 @@ export function menu() {
_____: newGroup(LANG.cc_menu, $('cam-limits'), { modes:CAM, driven, separator }), _____: newGroup(LANG.cc_menu, $('cam-limits'), { modes:CAM, driven, separator }),
camZAnchor: newSelect(LANG.ou_zanc_s, {title: LANG.ou_zanc_l, action:zAnchorSave, show:() => !ui.camStockIndexed.checked}, "zanchor"), camZAnchor: newSelect(LANG.ou_zanc_s, {title: LANG.ou_zanc_l, action:zAnchorSave, show:() => !ui.camStockIndexed.checked}, "zanchor"),
camZOffset: newInput(LANG.ou_ztof_s, {title:LANG.ou_ztof_l, convert:toFloat, units}), camZOffset: newInput(LANG.ou_ztof_s, {title:LANG.ou_ztof_l, convert:toFloat, units}),
camZTop: newInput(LANG.ou_ztop_s, {title:LANG.ou_ztop_l, convert:toFloat, units, trigger}), camZTop: newInput(LANG.ou_ztop_s, {title:LANG.ou_ztop_l, convert:toFloat, units, trigger, selector, top }),
camZBottom: newInput(LANG.ou_zbot_s, {title:LANG.ou_zbot_l, convert:toFloat, units, trigger}), camZBottom: newInput(LANG.ou_zbot_s, {title:LANG.ou_zbot_l, convert:toFloat, units, trigger, selector, bottom }),
camZClearance: newInput(LANG.ou_zclr_s, {title:LANG.ou_zclr_l, convert:toFloat, bound:bound(0.01,100), units }), camZClearance: newInput(LANG.ou_zclr_s, {title:LANG.ou_zclr_l, convert:toFloat, bound:bound(0.01,100), units }),
separator: newBlank({ class:"set-sep", driven }), separator: newBlank({ class:"set-sep", driven }),
camFastFeed: newInput(LANG.cc_rapd_s, {title:LANG.cc_rapd_l, convert:toFloat, units}), camFastFeed: newInput(LANG.cc_rapd_s, {title:LANG.cc_rapd_l, convert:toFloat, units}),

View file

@ -19,7 +19,7 @@ import { surfaceOn, surfaceDone } from './cl-surface.js';
import { tabAdd, tabDone, tabClear, restoreTabs, rotateTabs, updateTabs, clearTabs, mirrorTabs } from './cl-tab.js'; import { tabAdd, tabDone, tabClear, restoreTabs, rotateTabs, updateTabs, clearTabs, mirrorTabs } from './cl-tab.js';
import { traceOn, traceDone, unselectTraces } from './cl-trace.js'; import { traceOn, traceDone, unselectTraces } from './cl-trace.js';
import { Widget, newWidget } from '../../app/widget.js'; import { Widget, newWidget } from '../../app/widget.js';
import { zPlaneStart, zPlaneDone } from './cl-zplane.js'; import { zPlaneStart, zPlaneDone, zPlaneSelecting } from './cl-zplane.js';
const { BufferGeometryUtils } = THREE; const { BufferGeometryUtils } = THREE;
@ -582,6 +582,9 @@ export function zPlaneHide({ which }) {
} }
export function zPlaneSelect({ which, onselect }) { export function zPlaneSelect({ which, onselect }) {
if (zPlaneSelecting()) {
return zPlaneDone();
}
clearPops(); clearPops();
zPlaneStart(which, value => { zPlaneStart(which, value => {
onselect(parseFloat(value)); onselect(parseFloat(value));
@ -805,8 +808,6 @@ export function init() {
}; };
$('op-add-list').onclick = (ev) => { $('op-add-list').onclick = (ev) => {
let settings = api.conf.get();
let { process, device } = settings;
switch (ev.target.innerText.toLowerCase()) { switch (ev.target.innerText.toLowerCase()) {
case "index": return opAddIndex(); case "index": return opAddIndex();
case "laser on": return opAddLaserOn(); case "laser on": return opAddLaserOn();