diff --git a/src/kiri/init.js b/src/kiri/init.js
index e2578e08..10d4eae6 100644
--- a/src/kiri/init.js
+++ b/src/kiri/init.js
@@ -289,9 +289,9 @@
API.help.show();
break;
case cca('Z'): // reset stored state
- if (confirm('clear all settings?')) {
- SDB.clear();
- }
+ UC.confirm('clear all settings and preferences?').then(yes => {
+ if (yes) SDB.clear();
+ });
break;
case cca('C'): // refresh catalog
CATALOG.refresh();
@@ -303,7 +303,9 @@
storeSettingsToServer(true);
break;
case cca('u'): // full settings url
- loadSettingsFromServer(prompt("settings id to load"));
+ UC.prompt("settings id to load", "").then(id => {
+ if (id) loadSettingsFromServer(id);
+ });
break;
case cca('s'): // complete slice
API.function.slice();
@@ -460,7 +462,9 @@
let res = JSON.parse(reply);
if (res && res.ver) {
LOC.hash = res.space + "/" + res.ver;
- if (display) alert("unique settings id is: " + res.space + "/" + res.ver);
+ if (display) {
+ UC.alert(`unique settings id is: ${res.space}/${res.ver}`);
+ }
}
} else {
updateSpaceState();
@@ -469,13 +473,15 @@
}
function profileExport() {
- let name = WIN.prompt("Export Profile Filename", "kiriconf");
- if (!name) return;
- let json = API.conf.export(),
- blob = new Blob([json], {type: "octet/stream"}),
- url = WIN.URL.createObjectURL(blob);
- $('mod-any').innerHTML = `x`;
- $('sexport').click();
+ UC.prompt("Export Profile Filename", "kiriconf").then(name => {
+ if (name) {
+ let json = API.conf.export(),
+ blob = new Blob([json], {type: "octet/stream"}),
+ url = WIN.URL.createObjectURL(blob);
+ $('mod-any').innerHTML = `x`;
+ $('sexport').click();
+ }
+ });
}
function settingsSave(ev) {
@@ -483,25 +489,27 @@
ev.stopPropagation();
ev.preventDefault();
}
+
API.dialog.hide();
let mode = API.mode.get(),
s = settings(),
def = "default",
cp = s.process,
- pl = s.sproc[mode],
- // pt = sf[mode.toLowerCase()].p, // process field mask
- name = WIN.prompt("Save Settings As", cp ? cp.processName || def : def);
- if (!name) return;
- let np = pl[name] = {};
- cp.processName = name;
- for (let k in cp) {
- if (!cp.hasOwnProperty(k)) continue;
- // if (!pt.hasOwnProperty(k)) continue; // mask out invalid fields
- np[k] = cp[k];
- }
- s.cproc[API.mode.get()] = name;
- API.conf.save();
- API.event.settings();
+ pl = s.sproc[mode];
+
+ UC.prompt("Save Settings As", cp ? cp.processName || def : def).then(name => {
+ if (name) {
+ let np = pl[name] = {};
+ cp.processName = name;
+ for (let k in cp) {
+ if (!cp.hasOwnProperty(k)) continue;
+ np[k] = cp[k];
+ }
+ s.cproc[API.mode.get()] = name;
+ API.conf.save();
+ API.event.settings();
+ }
+ });
}
function settingsLoad() {
@@ -996,11 +1004,25 @@
SPACE.platform.setColor(platformColor);
- let files = evt.dataTransfer.files,
- plate = files.length < 5 || confirm(`add ${files.length} objects to workspace?`),
- group = files.length < 2 ? undefined : confirm('group files?') ? [] : undefined;
+ let files = evt.dataTransfer.files;
- if (plate) API.platform.load_files(files,group);
+ function ck_group() {
+ if (files.length === 1) {
+ API.platform.load_files(files);
+ } else {
+ UC.confirm(`group ${files.length} files?`).then(yes => {
+ API.platform.load_files(files, yes ? [] : undefined);
+ });
+ }
+ }
+
+ if (files.length > 5) {
+ UC.confirm(`add ${files.length} objects to workspace?`).then(yes => {
+ if (yes) ck_group();
+ });
+ } else {
+ ck_group();
+ }
}
function loadCatalogFile(e) {
@@ -1504,7 +1526,7 @@
API.var.layer_hi = Math.round((1 - start) * API.var.layer_max);
API.var.layer_lo = Math.round((1 - end) * API.var.layer_max);
API.show.layer();
- SPACE.mouse.active();
+ SPACE.scene.active();
}
function dragit(el, delta) {
diff --git a/src/kiri/layer.js b/src/kiri/layer.js
index 27604201..6085da32 100644
--- a/src/kiri/layer.js
+++ b/src/kiri/layer.js
@@ -41,7 +41,8 @@
let shift = Math.tan(hA - Math.PI * .5);
let shiftMatrix = new THREE.Matrix4().set(
- 1, 0, 0, 0, -shift, 1, 0, 0,
+ 1, 0, 0, 0,
+ -shift, 1, 0, 0,
0, 0, 1, 0,
0, 0, 0, 1
);
diff --git a/src/kiri/main.js b/src/kiri/main.js
index 76e539b3..91ce716c 100644
--- a/src/kiri/main.js
+++ b/src/kiri/main.js
@@ -683,7 +683,9 @@
clearPrint();
API.conf.save();
- if (MODE === MODES.CAM) {
+ let isCam = MODE === MODES.CAM;
+
+ if (isCam) {
setOpacity(color.cam_preview_opacity);
forAllWidgets(function(widget) {
widget.setColor(color.cam_preview);
@@ -701,7 +703,7 @@
}
setProgress(0);
- setOpacity(0);
+ if (!isCam) setOpacity(0);
currentPrint.render();
@@ -778,6 +780,7 @@
preserveLayer = API.var.layer_hi,
totalProgress,
track = {},
+ mode = settings.mode,
now = UTIL.time();
// require topo be sent back from worker for local printing
@@ -791,7 +794,8 @@
segNumber = 0,
errored = false,
startTime,
- lastMsg;
+ lastMsg,
+ camOrLaser = mode === 'CAM' || mode === 'LASER';
widget.stats.progress = 0;
widget.setColor(color.slicing);
@@ -801,7 +805,7 @@
widget.render();
// clear wireframe
widget.setWireframe(false, color.wireframe, color.wireframe_opacity);
- widget.setOpacity(settings.mode === 'CAM' ? color.cam_sliced_opacity : color.sliced_opacity);
+ widget.setOpacity(camOrLaser ? color.cam_sliced_opacity : color.sliced_opacity);
widget.setColor(color.deselected);
// update UI info
if (sliced) {
@@ -820,7 +824,7 @@
if (--countdown === 0 || error || errored) {
setProgress(0);
showSlices(preserveLayer);
- setOpacity(settings.mode === 'CAM' ? color.cam_sliced_opacity : color.sliced_opacity);
+ SPACE.scene.active();
if (callback && typeof callback === 'function') {
callback();
}
@@ -1483,22 +1487,28 @@
try {
data = JSON.parse(atob(data));
} catch (e) {
- alert('invalid settings format');
+ UC.alert('invalid settings format');
console.log('data',data);
return;
}
}
if (!(data.settings && data.version && data.time)) {
- alert('invalid settings format');
+ UC.alert('invalid settings format');
console.log('data',data);
return;
}
- if (ask && !confirm(`Import settings made on ${new Date(data.time)} from Kiri:Moto version ${data.version}?`)) {
- return;
+ function doit() {
+ settings = CONF.normalize(data.settings);
+ API.conf.save();
+ API.space.reload();
+ }
+ if (ask) {
+ UC.confirm(`Import settings made in Kiri:Moto version ${data.version} on
${new Date(data.time)}?`).then((yes) => {
+ if (yes) doit();
+ });
+ } else {
+ doit();
}
- settings = CONF.normalize(data.settings);
- API.conf.save();
- API.space.reload();
}
function settingsExport() {
@@ -1732,7 +1742,7 @@
}
API.conf.save();
} catch (e) {
- alert('malformed settings object');
+ UC.alert('malformed settings object');
}
}
}
diff --git a/src/kiri/ui.js b/src/kiri/ui.js
index c63105e0..4e5a4e9a 100644
--- a/src/kiri/ui.js
+++ b/src/kiri/ui.js
@@ -54,10 +54,73 @@
newGroup: newGroup,
setGroup: setGroup,
hidePoppers: hidePoppers,
+ confirm: confirm,
+ prompt: prompt,
+ alert: alert,
checkpoint,
restore
};
+ function alert(message) {
+ return confirm(message, {ok:true});
+ }
+
+ function prompt(message, value) {
+ return confirm(message, {ok:true, cancel:false}, value);
+ }
+
+ function confirm(message, buttons, input) {
+ return new Promise((resolve, reject) => {
+ let btns = buttons || {
+ "yes": true,
+ "no": false
+ };
+ let rnd = Date.now().toString(36);
+ let any = $('mod-any');
+ let html = [
+ `