fix cam tools dialog

This commit is contained in:
Stewart Allen 2025-07-06 00:56:49 -04:00
commit a87e0c937f
5 changed files with 324 additions and 344 deletions

View file

@ -1,36 +1,25 @@
/** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */ /** Copyright Stewart Allen <sa@grid.space> -- All Rights Reserved */
import { api } from '../kiri/api.js';
import { consts } from '../kiri/consts.js';
import { settings } from '../kiri/settings.js';
// Convert root destructuring to imports
import { kiri } from '../kiri.js';
import { $ } from '../../moto/webui.js';
import { api } from '../../kiri/api.js';
import { consts } from '../../kiri/consts.js';
import { settings as setconf } from '../../kiri/settings.js';
const DEG2RAD = Math.PI / 180; const DEG2RAD = Math.PI / 180;
let { kiri } = root,
{ api, consts } = kiri, let { MODES } = consts,
{ uc, ui } = api,
{ MODES } = consts,
DOC = document, DOC = document,
selectedTool = null, selectedTool = null,
editTools = null, editTools = null,
maxTool = 0, maxTool = 0,
toolNames = ['endmill','ballmill','tapermill','drill']; toolNames = ['endmill','ballmill','tapermill','drill'];
api.show.tools = showTools;
// extend API
Object.assign(api.tool, {
update: updateTool
});
function settings() { function settings() {
return api.conf.get(); return api.conf.get();
} }
function renderTools() { function renderTools() {
ui.toolSelect.innerHTML = ''; api.ui.toolSelect.innerHTML = '';
maxTool = 0; maxTool = 0;
editTools.forEach(function(tool, index) { editTools.forEach(function(tool, index) {
maxTool = Math.max(maxTool, tool.number); maxTool = Math.max(maxTool, tool.number);
@ -38,13 +27,12 @@ import { kiri } from '../kiri.js';
let opt = DOC.createElement('option'); let opt = DOC.createElement('option');
opt.appendChild(DOC.createTextNode(tool.name)); opt.appendChild(DOC.createTextNode(tool.name));
opt.onclick = function() { selectTool(tool) }; opt.onclick = function() { selectTool(tool) };
ui.toolSelect.appendChild(opt); api.ui.toolSelect.appendChild(opt);
}); });
} }
function selectTool(tool) { function selectTool(tool) {
const { ui } = api;
selectedTool = tool; selectedTool = tool;
ui.toolName.value = tool.name; ui.toolName.value = tool.name;
ui.toolNum.value = tool.number; ui.toolNum.value = tool.number;
@ -61,7 +49,6 @@ import { kiri } from '../kiri.js';
).round(1); ).round(1);
} else if(tool === 'drill'){ } else if(tool === 'drill'){
ui.toolTaperAngle.value = 118; ui.toolTaperAngle.value = 118;
} else { } else {
ui.toolTaperAngle.value = 0; ui.toolTaperAngle.value = 0;
} }
@ -88,6 +75,7 @@ import { kiri } from '../kiri.js';
} }
function renderTool(tool) { function renderTool(tool) {
const { ui } = api;
let type = selectedTool.type; let type = selectedTool.type;
let taper = type=== 'tapermill' let taper = type=== 'tapermill'
let drill = type === 'drill' let drill = type === 'drill'
@ -144,7 +132,6 @@ import { kiri } from '../kiri.js';
`z` `z`
].join('\n')}}); ].join('\n')}});
} else if(drill){ } else if(drill){
const x1 = off.x + flute_off, const x1 = off.x + flute_off,
y1 = off.y + shaft_len, y1 = off.y + shaft_len,
x2 = dim.w - off.x - flute_off, x2 = dim.w - off.x - flute_off,
@ -209,7 +196,8 @@ import { kiri } from '../kiri.js';
}, 10); }, 10);
} }
function updateTool(ev) { export function updateTool(ev) {
const { ui } = api;
selectedTool.name = ui.toolName.value; selectedTool.name = ui.toolName.value;
selectedTool.number = parseInt(ui.toolNum.value); selectedTool.number = parseInt(ui.toolNum.value);
selectedTool.flute_diam = parseFloat(ui.toolFluteDiam.value); selectedTool.flute_diam = parseFloat(ui.toolFluteDiam.value);
@ -242,16 +230,16 @@ import { kiri } from '../kiri.js';
function setToolChanged(changed) { function setToolChanged(changed) {
editTools.changed = changed; editTools.changed = changed;
ui.toolsSave.disabled = !changed; api.ui.toolsSave.disabled = !changed;
} }
function showTools() { export function showTools() {
if (api.mode.get_id() !== MODES.CAM) return; if (api.mode.get_id() !== MODES.CAM) return;
api.settings.sync.get().then(_showTools); setconf.sync.get().then(_showTools);
} }
function _showTools() { function _showTools() {
let selectedIndex = null; const { ui } = api;
editTools = settings().tools.slice().sort((a,b) => { editTools = settings().tools.slice().sort((a,b) => {
return a.name > b.name ? 1 : -1; return a.name > b.name ? 1 : -1;
@ -321,11 +309,11 @@ import { kiri } from '../kiri.js';
api.conf.save(); api.conf.save();
api.conf.update_fields(); api.conf.update_fields();
api.event.settings(); api.event.settings();
api.settings.sync.put(); setconf.sync.put();
}; };
ui.toolsImport.onclick = (ev) => api.event.import(ev); ui.toolsImport.onclick = (ev) => api.event.import(ev);
ui.toolsExport.onclick = () => { ui.toolsExport.onclick = () => {
uc.prompt("Export Tools Filename", "tools").then(name => { api.uc.prompt("Export Tools Filename", "tools").then(name => {
if (!name) { if (!name) {
return; return;
} }
@ -350,5 +338,7 @@ import { kiri } from '../kiri.js';
ui.toolSelect.focus(); ui.toolSelect.focus();
} }
export const tools = {
export { settings, renderTools, selectTool, otag, renderTool, updateTool, setToolChanged, showTools, DEG2RAD, opt, out, tags, att, tv, type, taper, drill, drillAngleRad, svg, yoff, mid, x1, fl, y1, x2, y2, rad, xend, CAM, angle, len, selectedIndex, metric, clone, split, endv, record }; updateTool,
showTools
};

View file

@ -429,21 +429,3 @@ CXDLP.render = function(params) {
} }
return { lines, area }; return { lines, area };
} }
if (!self.navigator && self.process && self.process.env) {
let fs = require('fs');
eval(fs.readFileSync("src/add/class.js").toString());
let args = process.argv.slice(2);
let file = args.shift();
// let fpos = 0;
let view = new DataView(fs.readFileSync(file).buffer);
let read = new DataReader(view, 0);
let cxdlp = new CXDLP().read(view);
console.log({
cxdlp,
layers5: cxdlp.layers.slice(0,5),
lines1: cxdlp.get_layer_lines(1)
});
} else if (self.navigator) {
self.CXDLP = CXDLP;
}

View file

@ -16,6 +16,7 @@ import { platform } from './platform.js';
import { selection } from './selection.js'; import { selection } from './selection.js';
import { stats } from '../kiri/stats.js'; import { stats } from '../kiri/stats.js';
import { widgets } from './widgets.js'; import { widgets } from './widgets.js';
import { updateTool } from '../kiri-mode/cam/tools.js';
import { LANG } from './lang.js'; import { LANG } from './lang.js';
import { LOCAL, SETUP, SECURE } from './main.js'; import { LOCAL, SETUP, SECURE } from './main.js';
@ -153,7 +154,9 @@ export const api = {
space, space,
stacks: STACKS, stacks: STACKS,
stats, stats,
tool: {}, // kiri-mode/cam/tools.js tool: {
update: updateTool
},
tweak, tweak,
uc: UC, uc: UC,
ui: {}, // init.js ui: {}, // init.js

View file

@ -19,6 +19,7 @@ import { stats } from '../kiri/stats.js';
import { noop, utils } from '../kiri/utils.js'; import { noop, utils } from '../kiri/utils.js';
import { version } from '../moto/license.js'; import { version } from '../moto/license.js';
import { Widget } from './widget.js'; import { Widget } from './widget.js';
import { showTools } from '../kiri-mode/cam/tools.js';
let { parseOpt, o2js, js2o, ls2o } = utils, let { parseOpt, o2js, js2o, ls2o } = utils,
{ COLOR, MODES, VIEWS } = consts, { COLOR, MODES, VIEWS } = consts,
@ -119,13 +120,14 @@ export const process = {
export const show = { export const show = {
alert() { return api.alerts.show(...arguments) }, alert() { return api.alerts.show(...arguments) },
devices: showDevices,
progress: setProgress,
controls: setControlsVisible, controls: setControlsVisible,
slices: showSlices, devices: showDevices,
import() { api.ui.import.style.display = '' },
layer: setVisibleLayer, layer: setVisibleLayer,
local: showLocal, local: showLocal,
import: function() { api.ui.import.style.display = '' } progress: setProgress,
slices: showSlices,
tools: showTools
}; };
export const space = { export const space = {

View file

@ -251,6 +251,9 @@ details[open] summary::after {
background-color: #333; background-color: #333;
color: #fff; color: #fff;
} }
.dark option:checked {
background-color: var(--blue-1);
}
.dark hr { .dark hr {
border-color: #555; border-color: #555;
} }