Doodle3D-Slicer/src/slicerworker.js
2015-06-01 12:06:11 +02:00

73 lines
1.7 KiB
JavaScript

D3D.SlicerWorker = function () {
"use strict";
this.worker = new Worker('webworker/worker.js');
var progressBar = document.getElementById("progress-bar");
var scope = this;
this.worker.addEventListener('message', function (event) {
switch (event.data["cmd"]) {
case "PROGRESS":
var progress = event.data["progress"];
var procent = (progress.sliceLayer + progress.dataLayer + progress.gcodeLayer) / (progress.totalLayers * 3 - 5);
progressBar.style.width = procent * 100 + "%";
break;
case "GCODE":
gcode = event.data["gcode"];
break;
}
}, false);
}
D3D.SlicerWorker.prototype.setSettings = function (USER_SETTINGS, PRINTER_SETTINGS) {
"use strict";
this.worker.postMessage({
"cmd": "SET_SETTINGS",
"USER_SETTINGS": USER_SETTINGS,
"PRINTER_SETTINGS": PRINTER_SETTINGS
});
};
D3D.SlicerWorker.prototype.setMesh = function (mesh) {
"use strict";
if (mesh.geometry instanceof THREE.Geometry) {
var geometry = new THREE.BufferGeometry().fromGeometry(mesh.geometry);
}
else {
var geometry = mesh.geometry.clone();
}
var buffers = [];
for (var i = 0; i < geometry.attributesKeys.length; i ++) {
var key = geometry.attributesKeys[i];
buffers.push(geometry.attributes[key].array.buffer);
}
mesh.updateMatrix();
this.worker.postMessage({
"cmd": "SET_MESH",
"geometry": {
"attributes": geometry.attributes,
"attributesKeys": geometry.attributesKeys
},
"matrix": mesh.matrix.toArray()
}, buffers);
};
D3D.SlicerWorker.prototype.slice = function () {
"use strict";
this.worker.postMessage({
"cmd": "SLICE"
});
};
D3D.SlicerWorker.prototype.close = function () {
"use strict";
this.worker.postMessage({
"cmd": "CLOSE"
});
};