add workspace auto-save. add path line caps

This commit is contained in:
Stewart Allen 2020-11-18 09:11:29 -05:00
commit 23f33083c9
7 changed files with 58 additions and 21 deletions

View file

@ -1,9 +1,7 @@
# Kiri:Moto todo
## 2.3 remaining
* cap path ends
* fix ruler axis name label
* onshape mouse mapping option
## 2.4 tenative list
* cnc
@ -33,6 +31,7 @@
* `P` duplicate objects should share same slice data unless rotated or scaled
* `P` worker state cache cleanup and organization
* `P` client/worker interface normalization and cleanup
* `C` improve path line caps
# FDM

View file

@ -593,6 +593,7 @@
hoverPop: false,
zoomSpeed: 1.0,
lineType: "path",
autoSave: true,
reverseZoom: true,
showOrigin: false,
showRulers: false,

View file

@ -72,7 +72,7 @@
CATALOG.putFile("sample cube.stl", vert);
platform.compute_max_z();
SPACE.view.home();
setTimeout(API.space.save,500);
setTimeout(() => { API.space.save(true) },500);
then();
API.help.show();
});
@ -129,6 +129,7 @@
control.autoLayout = UI.autoLayout.checked;
control.freeLayout = UI.freeLayout.checked;
control.alignTop = UI.alignTop.checked;
control.autoSave = UI.autoSave.checked;
control.reverseZoom = UI.reverseZoom.checked;
control.dark = UI.dark.checked;
control.exportOcto = UI.exportOcto.checked;
@ -243,27 +244,27 @@
case 37: // left arrow
if (inputHasFocus()) return false;
if (deg) API.selection.rotate(0, 0, -deg);
if (move > 0) moveSelection(-move, 0, 0);
if (move > 0) API.selection.move(-move, 0, 0);
evt.preventDefault();
break;
case 39: // right arrow
if (inputHasFocus()) return false;
if (deg) API.selection.rotate(0, 0, deg);
if (move > 0) moveSelection(move, 0, 0);
if (move > 0) API.selection.move(move, 0, 0);
evt.preventDefault();
break;
case 38: // up arrow
if (inputHasFocus()) return false;
if (evt.metaKey) return API.show.layer(API.var.layer_at+1);
if (deg) API.selection.rotate(deg, 0, 0);
if (move > 0) moveSelection(0, move, 0);
if (move > 0) API.selection.move(0, move, 0);
evt.preventDefault();
break;
case 40: // down arrow
if (inputHasFocus()) return false;
if (evt.metaKey) return API.show.layer(API.var.layer_at-1);
if (deg) API.selection.rotate(-deg, 0, 0);
if (move > 0) moveSelection(0, -move, 0);
if (move > 0) API.selection.move(0, -move, 0);
evt.preventDefault();
break;
case 65: // 'a' for select all
@ -1383,12 +1384,13 @@
], {modes:GCODE, class:"ext-buttons f-row"}),
lprefs: UC.newGroup(LANG.op_menu, $('prefs-gen1'), {inline: true}),
expert: UC.newBoolean(LANG.op_xprt_s, booleanSave, {title:LANG.op_xprt_l}),
autoSave: UC.newBoolean(LANG.op_auto_s, booleanSave, {title:LANG.op_auto_l}),
hoverPop: UC.newBoolean(LANG.op_hopo_s, booleanSave, {title:LANG.op_hopo_l}),
dark: UC.newBoolean(LANG.op_dark_s, booleanSave, {title:LANG.op_dark_l}),
reverseZoom: UC.newBoolean(LANG.op_invr_s, booleanSave, {title:LANG.op_invr_l}),
expert: UC.newBoolean(LANG.op_xprt_s, booleanSave, {title:LANG.op_xprt_l}),
lprefs: UC.newGroup(LANG.op_menu, $('prefs-gen2'), {inline: true}),
lprefs: UC.newGroup(LANG.op_disp, $('prefs-gen2'), {inline: true}),
showOrigin: UC.newBoolean(LANG.op_shor_s, booleanSave, {title:LANG.op_shor_l}),
showRulers: UC.newBoolean(LANG.op_shru_s, booleanSave, {title:LANG.op_shru_l}),
showSpeeds: UC.newBoolean(LANG.op_sped_s, speedSave, {title:LANG.op_sped_l}),
@ -1983,6 +1985,7 @@
UI.autoLayout.checked = control.autoLayout;
UI.alignTop.checked = control.alignTop;
UI.reverseZoom.checked = control.reverseZoom;
UI.autoSave.checked = control.autoSave;
UI.decimate.checked = control.decimate;
lineTypeSave();
detailSave();

View file

@ -54,7 +54,8 @@
busy = 0,
showFavorites = SDB.getItem('dev-favorites') === 'true',
alerts = [],
grouping = false;
grouping = false,
saveTimer = null;
DBUG.enable();
@ -108,7 +109,7 @@
set_axes: SPACE.platform.setAxes,
set_volume: SPACE.platform.setVolume,
top_z: () => { return topZ },
clear: () => { platform.delete(WIDGETS.slice()) }
clear: () => { clearWorkspace(); saveWorkspace(true) }
};
const color = {
@ -327,6 +328,16 @@
}, time || 100);
}
function auto_save() {
if (!settings.controller.autoSave) {
return;
}
clearTimeout(saveTimer);
saveTimer = setTimeout(() => {
API.space.save(true);
}, 1000);
}
/** ******************************************************************
* Stats accumulator
******************************************************************* */
@ -924,8 +935,8 @@
w.move(x, y, z, abs);
});
API.event.emit('selection.move', {x, y, z, abs});
// platform.update_stock();
SPACE.update();
auto_save();
}
function scaleSelection() {
@ -940,8 +951,8 @@
return;
}
updateSelectedInfo();
// platform.update_stock(true);
SPACE.update();
auto_save();
}
function rotateSelection(x, y, z) {
@ -951,8 +962,8 @@
platform.compute_max_z();
API.event.emit('selection.rotate', {x, y, z});
updateSelectedInfo();
// platform.update_stock(true);
SPACE.update();
auto_save();
}
/** ******************************************************************
@ -1204,6 +1215,7 @@
platform.select(widget, shift);
platform.compute_max_z();
API.event.emit('widget.add', widget);
auto_save();
if (nolayout) {
return;
}
@ -1240,6 +1252,7 @@
platformUpdateSelected();
if (feature.drop_layout) platform.layout();
API.event.emit('widget.delete', widget);
auto_save();
}
function platformSelectAll() {
@ -1267,6 +1280,7 @@
setViewMode(VIEWS.ARRANGE);
hideSlices();
auto_save();
// only auto-layout when in arrange mode
if (oldmode !== VIEWS.ARRANGE) {
@ -1622,7 +1636,7 @@
// alert2("drag/drop STL files onto platform to import\nreload page to return to last saved state");
}
function saveWorkspace() {
function saveWorkspace(quiet) {
API.conf.save();
let newWidgets = [],
oldWidgets = js2o(SDB.getItem('ws-widgets'), []);
@ -1643,7 +1657,9 @@
}
})
}, "ws-save-" ,"ws-savf");
alert2("workspace saved", 1);
if (!quiet) {
alert2("workspace saved", 1);
}
}
function restoreSettings(save) {

View file

@ -311,6 +311,23 @@
}
}
if (!contourClosed) {
// cheating because we know the profile length is 4 (for now)
const p1 = 0 + profile.count * 0;
const p2 = 1 + profile.count * 0;
const p3 = 2 + profile.count * 0;
const p4 = 3 + profile.count * 0;
index.push(p1, p2, p3);
index.push(p1, p3, p4);
const lc = lastCorner;
const p5 = 0 + profile.count * lc;
const p6 = 1 + profile.count * lc;
const p7 = 2 + profile.count * lc;
const p8 = 3 + profile.count * lc;
index.push(p7, p6, p5);
index.push(p8, p7, p5);
}
return {index, faces};
}

View file

@ -65,14 +65,14 @@ MOTO.CTRL = function (object, domElement, notify, slider) {
// default mouse buttons
this.mouseDefault = {
ORBIT: THREE.MOUSE.LEFT,
// ZOOM: THREE.MOUSE.MIDDLE,
ZOOM: THREE.MOUSE.MIDDLE,
PAN: THREE.MOUSE.RIGHT
};
// Onshape
this.mouseOnshape = {
ORBIT: THREE.MOUSE.RIGHT,
// ZOOM: THREE.MOUSE.MIDDLE,
ZOOM: THREE.MOUSE.LEFT,
PAN: THREE.MOUSE.MIDDLE
};

View file

@ -115,8 +115,9 @@ kiri.lang['en-us'] = {
// OPTIONS
op_menu: "interface",
op_disp: "display",
op_xprt_s: "expert",
op_xprt_l: "enable expert options",
op_xprt_l: "show more settings options",
op_hopo_s: "hover pop",
op_hopo_l: "enable menu hover\nto activate",
op_dark_s: "dark mode",
@ -137,8 +138,8 @@ kiri.lang['en-us'] = {
op_free_l: "permit dragable layout\nno effect in laser mode",
op_invr_s: "invert zoom",
op_invr_l: "invert mouse wheel\nscroll zoom",
op_thin_s: "thin lines",
op_thin_l: "faster part visualization\nsacrificing visual quality",
op_auto_s: "auto save",
op_auto_l: "preserve objects in workspace\nbetween application reloads",
op_line_s: "line type",
op_line_l: "line style for path rendering\nimpacts 3d performance\npath: 3d best\nflat: 2d good\nline = 1d fast",
op_unit_s: "units",