re-introduce preview mode. optimize preview / export. prevent multiple calls to those modes
This commit is contained in:
parent
bb8be37b21
commit
6ced99522d
6 changed files with 64 additions and 104 deletions
|
|
@ -528,21 +528,32 @@ let gs_kiri_sla = exports;
|
|||
* @param {Function} update incremental callback
|
||||
*/
|
||||
function printSetup(print, update) {
|
||||
update(1);
|
||||
};
|
||||
|
||||
/**
|
||||
* DRIVER PRINT CONTRACT - runs in worker
|
||||
* @param {Object} print state object
|
||||
* @param {Function} online streaming reply
|
||||
* @param {Function} ondone last reply
|
||||
*/
|
||||
function printExport(print, online, ondone) {
|
||||
let widgets = print.widgets,
|
||||
settings = print.settings,
|
||||
device = settings.device,
|
||||
process = settings.process,
|
||||
output = print.images = [],
|
||||
output = print.output,
|
||||
images = [],
|
||||
layermax = 0,
|
||||
width = 2560,
|
||||
height = 1440,
|
||||
width2 = width/2,
|
||||
height2 = height/2,
|
||||
scaleX = width / device.bedWidth,
|
||||
scaleY = height / device.bedDepth;
|
||||
|
||||
let mark = Date.now();
|
||||
scaleY = height / device.bedDepth,
|
||||
mark = Date.now();
|
||||
|
||||
// find max layer count
|
||||
widgets.forEach(widget => {
|
||||
layermax = Math.max(widget.slices.length);
|
||||
});
|
||||
|
|
@ -558,6 +569,7 @@ let gs_kiri_sla = exports;
|
|||
ctx.closePath();
|
||||
}
|
||||
|
||||
// generate layer 8-bit bitaps using canvas
|
||||
for (let index=0; index < layermax; index++) {
|
||||
let layer = new OffscreenCanvas(height,width);
|
||||
let ctx = layer.getContext('2d');
|
||||
|
|
@ -588,42 +600,21 @@ let gs_kiri_sla = exports;
|
|||
}
|
||||
});
|
||||
let data = ctx.getImageData(0,0,height,width).data;
|
||||
// reduce RGBA to R
|
||||
let red = new Uint8ClampedArray(data.length / 4);
|
||||
for (let i=0; i<red.length; i++) {
|
||||
red[i] = data[i*4];
|
||||
}
|
||||
output.push(red);
|
||||
update(index / layermax);
|
||||
images.push(red);
|
||||
// transfer images to browser main
|
||||
online({
|
||||
progress: (index / layermax) * 0.25,
|
||||
message: "image_gen",
|
||||
data: red
|
||||
});
|
||||
if (count === 0) break;
|
||||
}
|
||||
|
||||
update(1);
|
||||
|
||||
console.log('print.setup', Date.now() - mark);
|
||||
};
|
||||
|
||||
/**
|
||||
* DRIVER PRINT CONTRACT - runs in worker
|
||||
* @param {Object} print state object
|
||||
* @param {Function} online streaming reply
|
||||
* @param {Function} ondone last reply
|
||||
*/
|
||||
function printExport(print, online, ondone) {
|
||||
let widgets = print.widgets,
|
||||
settings = print.settings,
|
||||
device = settings.device,
|
||||
process = settings.process,
|
||||
output = print.output,
|
||||
mark = Date.now();
|
||||
|
||||
print.images.forEach((image,index) => {
|
||||
online({
|
||||
progress: (index / print.images.length) * 0.25,
|
||||
message: "image_xfer",
|
||||
data: image
|
||||
});
|
||||
});
|
||||
|
||||
let exp_func;
|
||||
|
||||
switch (device.deviceName) {
|
||||
|
|
@ -636,9 +627,9 @@ let gs_kiri_sla = exports;
|
|||
}
|
||||
|
||||
let file = exp_func(print, {
|
||||
width: 2560,
|
||||
height: 1440,
|
||||
lines: print.images,
|
||||
width: width,
|
||||
height: height,
|
||||
lines: images,
|
||||
small: previewSmall.data,
|
||||
large: previewLarge.data
|
||||
}, (progress, message) => {
|
||||
|
|
@ -646,13 +637,11 @@ let gs_kiri_sla = exports;
|
|||
});
|
||||
|
||||
ondone({
|
||||
width: 2560,
|
||||
height: 1440,
|
||||
width: width,
|
||||
height: height,
|
||||
file: file
|
||||
},[file]);
|
||||
|
||||
// release memory
|
||||
print.images = null;
|
||||
console.log('print.export', Date.now() - mark);
|
||||
};
|
||||
|
||||
|
|
@ -729,7 +718,7 @@ let gs_kiri_sla = exports;
|
|||
if (count === 0) {
|
||||
// TODO fix with contract for exposing layer count
|
||||
// hack uses expected gcode output array in print object
|
||||
print.output = print.printView;
|
||||
// print.output = print.printView;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,19 +32,16 @@ let gs_kiri_export = exports;
|
|||
case 'SLA': return exportPrintSLA(currentPrint);
|
||||
}
|
||||
} else {
|
||||
switch (API.mode.get()) {
|
||||
case 'SLA':
|
||||
API.function.slice(exportPrint);
|
||||
break;
|
||||
default:
|
||||
API.function.print(exportPrint);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function exportPrintSLA(currentPrint) {
|
||||
if (currentPrint) {
|
||||
if (currentPrint.exported) {
|
||||
KIRI.driver.SLA.printDownload(currentPrint);
|
||||
return;
|
||||
}
|
||||
let lines = [];
|
||||
let times = {};
|
||||
let mark = Date.now();
|
||||
|
|
@ -62,6 +59,7 @@ let gs_kiri_export = exports;
|
|||
if (line.progress) API.show.progress(line.progress, "exporting");
|
||||
if (line.data) lines.push(line.data);
|
||||
}, function(done) {
|
||||
currentPrint.exported = true;
|
||||
times[`${seq++}_${segment}`] = Date.now() - mark;
|
||||
console.log(times);
|
||||
API.show.progress(0);
|
||||
|
|
|
|||
|
|
@ -314,9 +314,7 @@ var gs_kiri_init = exports;
|
|||
API.function.slice();
|
||||
break;
|
||||
case cca('p'): // prepare print
|
||||
if (!API.conf.isSliceSkipped()) {
|
||||
API.function.print();
|
||||
}
|
||||
break;
|
||||
case cca('P'): // position widget
|
||||
positionSelection();
|
||||
|
|
@ -1278,7 +1276,7 @@ var gs_kiri_init = exports;
|
|||
expert: UC.newBoolean(LANG.op_xprt_s, booleanSave, {title:LANG.op_xprt_l}),
|
||||
compact: UC.newBoolean(LANG.op_comp_s, booleanSave, {title:LANG.op_comp_l}),
|
||||
dark: UC.newBoolean(LANG.op_dark_s, booleanSave, {title:LANG.op_dark_l}),
|
||||
showOrigin: UC.newBoolean(LANG.op_show_s, booleanSave, {title:LANG.op_show_l}),
|
||||
showOrigin: UC.newBoolean(LANG.op_show_s, booleanSave, {title:LANG.op_show_l, modes:GCODE}),
|
||||
alignTop: UC.newBoolean(LANG.op_alig_s, booleanSave, {title:LANG.op_alig_l, modes:CAM}),
|
||||
autoLayout: UC.newBoolean(LANG.op_auto_s, booleanSave, {title:LANG.op_auto_l}),
|
||||
freeLayout: UC.newBoolean(LANG.op_free_s, booleanSave, {title:LANG.op_free_l, modes:ALL, expert:true}),
|
||||
|
|
|
|||
44
js/kiri.js
44
js/kiri.js
|
|
@ -60,8 +60,7 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
topZ = 0,
|
||||
showFavorites = SDB.getItem('dev-favorites') === 'true',
|
||||
alerts = [],
|
||||
grouping = false,
|
||||
skipSliceView = false;
|
||||
grouping = false;
|
||||
|
||||
if (SETUP.rm) renderMode = parseInt(SETUP.rm[0]);
|
||||
DBUG.enable();
|
||||
|
|
@ -165,8 +164,7 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
update: updateSettings,
|
||||
restore: restoreSettings,
|
||||
export: settingsExport,
|
||||
import: settingsImport,
|
||||
isSliceSkipped: () => { return skipSliceView }
|
||||
import: settingsImport
|
||||
},
|
||||
color,
|
||||
const: {
|
||||
|
|
@ -648,8 +646,7 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
}
|
||||
|
||||
function preparePrint(callback) {
|
||||
let tpFactor = skipSliceView ? 0.5 : 1,
|
||||
tpBase = skipSliceView ? 0.5 : 0;
|
||||
if (viewMode === VIEWS.PREVIEW) return;
|
||||
|
||||
// kick off slicing it hasn't been done already
|
||||
for (let i=0; i < WIDGETS.length; i++) {
|
||||
|
|
@ -674,23 +671,20 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
forAllWidgets(function(widget) {
|
||||
widget.setColor(color.cam_preview);
|
||||
});
|
||||
} else if (!skipSliceView) {
|
||||
} else {
|
||||
setOpacity(color.preview_opacity);
|
||||
}
|
||||
|
||||
currentPrint = kiri.newPrint(settings, WIDGETS);
|
||||
currentPrint.setup(true, function(update, status) {
|
||||
setProgress(tpBase + update * tpFactor, status);
|
||||
setProgress(update, status);
|
||||
}, function() {
|
||||
if (!currentPrint) {
|
||||
return setViewMode(VIEWS.ARRANGE);
|
||||
}
|
||||
|
||||
setProgress(0);
|
||||
|
||||
if (skipSliceView) {
|
||||
setOpacity(0);
|
||||
}
|
||||
|
||||
currentPrint.render();
|
||||
|
||||
|
|
@ -749,7 +743,6 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
countdown = WIDGETS.length,
|
||||
preserveMax = API.var.layer_max,
|
||||
preserveLayer = API.var.layer_at,
|
||||
tpFactor = skipSliceView ? 0.5 : 1,
|
||||
totalProgress,
|
||||
track = {};
|
||||
|
||||
|
|
@ -770,14 +763,12 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
widget.setColor(color.slicing);
|
||||
widget.slice(settings, function(sliced, error) {
|
||||
let mark = UTIL.time();
|
||||
if (!skipSliceView) {
|
||||
// on done
|
||||
widget.render(renderMode, MODE === MODES.CAM);
|
||||
// clear wireframe
|
||||
widget.setWireframe(false, color.wireframe, color.wireframe_opacity);
|
||||
widget.setOpacity(settings.mode === 'CAM' ? color.cam_sliced_opacity : color.sliced_opacity);
|
||||
widget.setColor(color.deselected);
|
||||
}
|
||||
// update UI info
|
||||
if (sliced) {
|
||||
// update segment time
|
||||
|
|
@ -792,13 +783,6 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
}
|
||||
// on the last exit, update ui and call the callback
|
||||
if (--countdown === 0 || error || errored) {
|
||||
if (skipSliceView) {
|
||||
if (!(error || errored)) {
|
||||
preparePrint(callback);
|
||||
} else {
|
||||
setProgress(0);
|
||||
}
|
||||
} else {
|
||||
setProgress(0);
|
||||
showSlices(preserveLayer);
|
||||
setOpacity(settings.mode === 'CAM' ? color.cam_sliced_opacity : color.sliced_opacity);
|
||||
|
|
@ -806,7 +790,6 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
callback();
|
||||
}
|
||||
}
|
||||
}
|
||||
// update slider window
|
||||
API.dialog.update();
|
||||
// handle slicing errors
|
||||
|
|
@ -831,7 +814,7 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
forAllWidgets(function(w) {
|
||||
totalProgress += (track[w.id] || 0);
|
||||
});
|
||||
setProgress((totalProgress / WIDGETS.length) * tpFactor, msg);
|
||||
setProgress((totalProgress / WIDGETS.length), msg);
|
||||
}, true);
|
||||
});
|
||||
}
|
||||
|
|
@ -942,7 +925,7 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
y = -camStock.position.y;
|
||||
}
|
||||
settings.origin = {x, y, z};
|
||||
if (settings.controller.showOrigin) {
|
||||
if (settings.controller.showOrigin && MODE !== MODES.SLA) {
|
||||
SPACE.platform.setOrigin(x,y,z);
|
||||
} else {
|
||||
SPACE.platform.setOrigin();
|
||||
|
|
@ -970,7 +953,6 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
height = parseFloat(dev.bedHeight)
|
||||
);
|
||||
SPACE.platform.setGZOff(height/2 - 0.1);
|
||||
// SPACE.platform.setHidden(width > 500 || depth > 500);
|
||||
platform.update_origin();
|
||||
SPACE.scene.freeze(frozen);
|
||||
}
|
||||
|
|
@ -1845,10 +1827,8 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
showModeActive(UI.modeSlice);
|
||||
break;
|
||||
case VIEWS.PREVIEW:
|
||||
// if (MODE !== MODES.SLA) {
|
||||
showLayerView(true);
|
||||
showModeActive(UI.modePreview);
|
||||
// }
|
||||
break;
|
||||
default:
|
||||
DBUG.log("invalid view mode: "+mode);
|
||||
|
|
@ -1873,7 +1853,6 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
|
||||
function setExpert(bool) {
|
||||
UC.setExpert(UI.expert.checked = control.expert = bool);
|
||||
updateSkipSliceView();
|
||||
}
|
||||
|
||||
function getMode() {
|
||||
|
|
@ -1908,6 +1887,7 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
}
|
||||
MODE = MODES[mode];
|
||||
// updates right-hand menu by enabling/disabling fields
|
||||
setViewMode(VIEWS.ARRANGE);
|
||||
UC.setMode(MODE);
|
||||
API.conf.load();
|
||||
API.conf.save();
|
||||
|
|
@ -1919,6 +1899,7 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
UI.modeLASER.setAttribute('class', MODE === MODES.LASER ? 'buton' : '');
|
||||
UI.mode.style.display = lock ? 'none' : '';
|
||||
UI.modeTable.style.display = lock ? 'none' : '';
|
||||
UI.modelOpacity.style.display = MODE === MODES.SLA ? 'none' : '';
|
||||
if (camStock) {
|
||||
camStock.material.visible = settings.mode === 'CAM';
|
||||
}
|
||||
|
|
@ -1927,19 +1908,12 @@ self.kiri.copyright = exports.COPYRIGHT;
|
|||
triggerSettingsEvent();
|
||||
platformUpdateSelected();
|
||||
updateFields();
|
||||
updateSkipSliceView();
|
||||
if (settings.device.new) {
|
||||
API.show.devices();
|
||||
}
|
||||
API.event.emit("mode.set", mode);
|
||||
}
|
||||
|
||||
function updateSkipSliceView() {
|
||||
skipSliceView = MODE === MODES.SLA &&
|
||||
(!LOCAL || settings.controller.expert !== LOCAL);
|
||||
UI.modePreview.style.display = skipSliceView ? 'none' : '';
|
||||
}
|
||||
|
||||
function currentDeviceName() {
|
||||
return settings.filter[getMode()];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
var exports = {
|
||||
COPYRIGHT:"Copyright (C) Stewart Allen <sa@grid.space> - All Rights Reserved",
|
||||
LICENSE:"See the license.md file included with the source distribution",
|
||||
VERSION:"1.9.4"
|
||||
VERSION:"1.9.5"
|
||||
};
|
||||
if (!module) var module = {};
|
||||
module.exports = exports;
|
||||
|
|
|
|||
|
|
@ -633,7 +633,8 @@ var MOTO = window.moto = window.moto || {};
|
|||
|
||||
SCENE.remove(current);
|
||||
SCENE.add(platform);
|
||||
}
|
||||
},
|
||||
world: WORLD
|
||||
},
|
||||
|
||||
view: {
|
||||
|
|
|
|||
Loading…
Reference in a new issue