add CAM tools export / import parity with devices and settings
This commit is contained in:
parent
bbbcb7b5d1
commit
889dce3051
7 changed files with 37 additions and 7 deletions
|
|
@ -5,9 +5,10 @@ Full docs @ https://docs.grid.space/projects/kiri-moto
|
||||||
# Release 3.7
|
# Release 3.7
|
||||||
|
|
||||||
* replace jscad/modeling with Manifold project for faster mesh boolean
|
* replace jscad/modeling with Manifold project for faster mesh boolean
|
||||||
* various CAM gcode, preview, animation fixes
|
* various CAM gcode, preview, animation fixes (3 axis)
|
||||||
* various mobile touch, file load fixes
|
* various mobile touch, file load fixes
|
||||||
* add FDM slice support growth option to help merging pillars
|
* add FDM slice support growth option to help merging pillars
|
||||||
|
* add CAM tools export / import parity with devices and settings
|
||||||
|
|
||||||
|
|
||||||
# Release 3.6 (2022-10-22)
|
# Release 3.6 (2022-10-22)
|
||||||
|
|
|
||||||
|
|
@ -1404,7 +1404,6 @@ function slicePrintPath(print, slice, startPoint, offset, output, opt = {}) {
|
||||||
break;
|
break;
|
||||||
case "position":
|
case "position":
|
||||||
startPoint = newPoint(-bedOffset.x+process.sliceLayerStartX, -bedOffset.y+process.sliceLayerStartY, startPoint.z);
|
startPoint = newPoint(-bedOffset.x+process.sliceLayerStartX, -bedOffset.y+process.sliceLayerStartY, startPoint.z);
|
||||||
console.log("startPoint", top);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1286,7 +1286,6 @@ gapp.register("kiri.init", [], (root, exports) => {
|
||||||
|
|
||||||
function showTools() {
|
function showTools() {
|
||||||
if (api.mode.get_id() !== MODES.CAM) return;
|
if (api.mode.get_id() !== MODES.CAM) return;
|
||||||
|
|
||||||
let selectedIndex = null;
|
let selectedIndex = null;
|
||||||
|
|
||||||
editTools = settings().tools.slice().sort((a,b) => {
|
editTools = settings().tools.slice().sort((a,b) => {
|
||||||
|
|
@ -1333,6 +1332,19 @@ gapp.register("kiri.init", [], (root, exports) => {
|
||||||
api.conf.update_fields();
|
api.conf.update_fields();
|
||||||
api.event.settings();
|
api.event.settings();
|
||||||
};
|
};
|
||||||
|
ui.toolsExport.onclick = () => {
|
||||||
|
uc.prompt("Export Tools Filename", "tools").then(name => {
|
||||||
|
if (!name) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const record = {
|
||||||
|
version: kiri.version,
|
||||||
|
tools: api.conf.get().tools,
|
||||||
|
time: Date.now()
|
||||||
|
};
|
||||||
|
api.util.download(api.util.b64enc(record), `${name}.km`);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
renderTools();
|
renderTools();
|
||||||
if (editTools.length > 0) {
|
if (editTools.length > 0) {
|
||||||
|
|
@ -1346,6 +1358,9 @@ gapp.register("kiri.init", [], (root, exports) => {
|
||||||
ui.toolSelect.focus();
|
ui.toolSelect.focus();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// not the best way to do this, but main decl of api.show is broken
|
||||||
|
api.show.tools = showTools;
|
||||||
|
|
||||||
function updateDeviceList() {
|
function updateDeviceList() {
|
||||||
renderDevices(Object.keys(devices[api.mode.get_lower()]).sort());
|
renderDevices(Object.keys(devices[api.mode.get_lower()]).sort());
|
||||||
}
|
}
|
||||||
|
|
@ -1638,6 +1653,7 @@ gapp.register("kiri.init", [], (root, exports) => {
|
||||||
|
|
||||||
toolsSave: $('tools-save'),
|
toolsSave: $('tools-save'),
|
||||||
toolsClose: $('tools-close'),
|
toolsClose: $('tools-close'),
|
||||||
|
toolsExport: $('tools-export'),
|
||||||
toolSelect: $('tool-select'),
|
toolSelect: $('tool-select'),
|
||||||
toolAdd: $('tool-add'),
|
toolAdd: $('tool-add'),
|
||||||
toolDelete: $('tool-del'),
|
toolDelete: $('tool-del'),
|
||||||
|
|
@ -1904,6 +1920,7 @@ gapp.register("kiri.init", [], (root, exports) => {
|
||||||
camStockX: uc.newInput(LANG.cs_wdth_s, {title:LANG.cs_wdth_l, convert:uc.toFloat, bound:uc.bound(0,9999), modes:CAM, units:true}),
|
camStockX: uc.newInput(LANG.cs_wdth_s, {title:LANG.cs_wdth_l, convert:uc.toFloat, bound:uc.bound(0,9999), modes:CAM, units:true}),
|
||||||
camStockY: uc.newInput(LANG.cs_dpth_s, {title:LANG.cs_dpth_l, convert:uc.toFloat, bound:uc.bound(0,9999), modes:CAM, units:true}),
|
camStockY: uc.newInput(LANG.cs_dpth_s, {title:LANG.cs_dpth_l, convert:uc.toFloat, bound:uc.bound(0,9999), modes:CAM, units:true}),
|
||||||
camStockZ: uc.newInput(LANG.cs_hght_s, {title:LANG.cs_hght_l, convert:uc.toFloat, bound:uc.bound(0,9999), modes:CAM, units:true}),
|
camStockZ: uc.newInput(LANG.cs_hght_s, {title:LANG.cs_hght_l, convert:uc.toFloat, bound:uc.bound(0,9999), modes:CAM, units:true}),
|
||||||
|
camSep: uc.newBlank({class:"pop-sep"}),
|
||||||
camStockOffset: uc.newBoolean(LANG.cs_offs_s, onBooleanClick, {title:LANG.cs_offs_l, modes:CAM}),
|
camStockOffset: uc.newBoolean(LANG.cs_offs_s, onBooleanClick, {title:LANG.cs_offs_l, modes:CAM}),
|
||||||
camStockClipTo: uc.newBoolean(LANG.cs_clip_s, onBooleanClick, {title:LANG.cs_clip_l, modes:CAM}),
|
camStockClipTo: uc.newBoolean(LANG.cs_clip_s, onBooleanClick, {title:LANG.cs_clip_l, modes:CAM}),
|
||||||
camStockIndexed: uc.newBoolean(LANG.cs_indx_s, onBooleanClick, {title:LANG.cs_indx_l, modes:CAM}),
|
camStockIndexed: uc.newBoolean(LANG.cs_indx_s, onBooleanClick, {title:LANG.cs_indx_l, modes:CAM}),
|
||||||
|
|
@ -1912,6 +1929,7 @@ gapp.register("kiri.init", [], (root, exports) => {
|
||||||
|
|
||||||
camCommon: uc.newGroup(LANG.cc_menu, null, {modes:CAM}),
|
camCommon: uc.newGroup(LANG.cc_menu, null, {modes:CAM}),
|
||||||
camZAnchor: uc.newSelect(LANG.ou_zanc_s, {title: LANG.ou_zanc_l, action:zAnchorSave, modes:CAM, trace:true}, "zanchor"),
|
camZAnchor: uc.newSelect(LANG.ou_zanc_s, {title: LANG.ou_zanc_l, action:zAnchorSave, modes:CAM, trace:true}, "zanchor"),
|
||||||
|
camSep: uc.newBlank({class:"pop-sep"}),
|
||||||
camZOffset: uc.newInput(LANG.ou_ztof_s, {title:LANG.ou_ztof_l, convert:uc.toFloat, modes:CAM, units:true}),
|
camZOffset: uc.newInput(LANG.ou_ztof_s, {title:LANG.ou_ztof_l, convert:uc.toFloat, modes:CAM, units:true}),
|
||||||
camZBottom: uc.newInput(LANG.ou_zbot_s, {title:LANG.ou_zbot_l, convert:uc.toFloat, modes:CAM, units:true, trigger: true}),
|
camZBottom: uc.newInput(LANG.ou_zbot_s, {title:LANG.ou_zbot_l, convert:uc.toFloat, modes:CAM, units:true, trigger: true}),
|
||||||
camZThru: uc.newInput(LANG.ou_ztru_s, {title:LANG.ou_ztru_l, convert:uc.toFloat, bound:uc.bound(0.0,100), modes:CAM, units:true, show:() => { return ui.camZBottom.value == 0 }}),
|
camZThru: uc.newInput(LANG.ou_ztru_s, {title:LANG.ou_ztru_l, convert:uc.toFloat, bound:uc.bound(0.0,100), modes:CAM, units:true, show:() => { return ui.camZBottom.value == 0 }}),
|
||||||
|
|
|
||||||
|
|
@ -159,6 +159,7 @@ gapp.register("kiri.main", [], (root, exports) => {
|
||||||
slices: showSlices,
|
slices: showSlices,
|
||||||
layer: setVisibleLayer,
|
layer: setVisibleLayer,
|
||||||
local: showLocal,
|
local: showLocal,
|
||||||
|
tools: noop, // set during init
|
||||||
import: function() { UI.import.style.display = '' }
|
import: function() { UI.import.style.display = '' }
|
||||||
},
|
},
|
||||||
space: {
|
space: {
|
||||||
|
|
@ -234,8 +235,10 @@ gapp.register("kiri.main", [], (root, exports) => {
|
||||||
pos.y /= sel.length;
|
pos.y /= sel.length;
|
||||||
pos.z /= sel.length;
|
pos.z /= sel.length;
|
||||||
}
|
}
|
||||||
SPACE.platform.setCenter(pos.x, -pos.y, platform.top_z() / 2);
|
let cam_index = api.conf.get().process.camStockIndexed || false;
|
||||||
SPACE.view.setFocus(new THREE.Vector3(pos.x, platform.top_z() / 2, -pos.y));
|
let focus_z = cam_index ? 0 : platform.top_z() / 2;
|
||||||
|
SPACE.platform.setCenter(pos.x, -pos.y, focus_z);
|
||||||
|
SPACE.view.setFocus(new THREE.Vector3(pos.x, focus_z, -pos.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
function reload() {
|
function reload() {
|
||||||
|
|
|
||||||
|
|
@ -186,6 +186,7 @@ function rotate(x, y, z) {
|
||||||
selection.update_bounds();
|
selection.update_bounds();
|
||||||
api.platform.update_bounds();
|
api.platform.update_bounds();
|
||||||
api.platform.compute_max_z();
|
api.platform.compute_max_z();
|
||||||
|
api.platform.update_top_z();
|
||||||
api.event.emit('selection.rotate', {x, y, z});
|
api.event.emit('selection.rotate', {x, y, z});
|
||||||
selection.update_info();
|
selection.update_info();
|
||||||
api.space.auto_save();
|
api.space.auto_save();
|
||||||
|
|
|
||||||
|
|
@ -516,8 +516,9 @@ function settingsImport(data, ask) {
|
||||||
let isSettings = (data.settings && data.version && data.time);
|
let isSettings = (data.settings && data.version && data.time);
|
||||||
let isProcess = (data.process && data.version && data.time && data.mode && data.name);
|
let isProcess = (data.process && data.version && data.time && data.mode && data.name);
|
||||||
let isDevice = (data.device && data.version && data.time);
|
let isDevice = (data.device && data.version && data.time);
|
||||||
|
let isTools = (data.tools && data.version && data.time)
|
||||||
let isWork = (data.work);
|
let isWork = (data.work);
|
||||||
if (!isSettings && !isDevice && !isProcess) {
|
if (!isSettings && !isDevice && !isProcess && !isTools) {
|
||||||
uc.alert('invalid settings or device format');
|
uc.alert('invalid settings or device format');
|
||||||
console.log('data',data);
|
console.log('data',data);
|
||||||
return;
|
return;
|
||||||
|
|
@ -574,12 +575,17 @@ function settingsImport(data, ask) {
|
||||||
restoreSettings();
|
restoreSettings();
|
||||||
api.space.restore(() => { ui.sync() }, true);
|
api.space.restore(() => { ui.sync() }, true);
|
||||||
}
|
}
|
||||||
|
if (isTools && Array.isArray(data.tools)) {
|
||||||
|
settings.tools = data.tools;
|
||||||
|
api.show.tools();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (ask) {
|
if (ask) {
|
||||||
let opt = {};
|
let opt = {};
|
||||||
let prompt = isDevice ?
|
let prompt = isDevice ?
|
||||||
`Import device "${data.device}"?` : isProcess ?
|
`Import device "${data.device}"?` : isProcess ?
|
||||||
`Import process "${data.name}"?` :
|
`Import process "${data.name}"?` : isTools ?
|
||||||
|
`Import tool definitions?`:
|
||||||
`Import settings made in Kiri:Moto version ${data.version} on<br>${new Date(data.time)}?`;
|
`Import settings made in Kiri:Moto version ${data.version} on<br>${new Date(data.time)}?`;
|
||||||
if (data.screen) {
|
if (data.screen) {
|
||||||
opt.pre = [
|
opt.pre = [
|
||||||
|
|
|
||||||
|
|
@ -420,6 +420,8 @@
|
||||||
<div class="t-pad2"></div>
|
<div class="t-pad2"></div>
|
||||||
<button id="tools-save" lk="save">save</button>
|
<button id="tools-save" lk="save">save</button>
|
||||||
<button id="tools-close" lk="done">done</button>
|
<button id="tools-close" lk="done">done</button>
|
||||||
|
<div class="t-pad2"></div>
|
||||||
|
<button id="tools-export" lk="export">export</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue