mirror of
https://github.com/Doodle3D/Doodle3D-Slicer.git
synced 2024-12-23 11:33:49 +01:00
implement async slicing
This commit is contained in:
parent
ce1a0b760f
commit
bf9d98611a
@ -11,6 +11,6 @@ const geometry = new THREE.TorusGeometry(20, 10, 30, 30);
|
||||
const slicer = new SLICER.Slicer();
|
||||
|
||||
slicer.setGeometry(geometry);
|
||||
const gcode = slicer.slice(settings).then(gcode => {
|
||||
slicer.slice(settings, false).then(gcode => {
|
||||
document.getElementById('gcode').innerHTML = gcode.replace(/(?:\r\n|\r|\n)/g, '<br />');
|
||||
});
|
||||
|
248
jspm.config.js
248
jspm.config.js
@ -11,8 +11,6 @@ SystemJS.config({
|
||||
"map": {
|
||||
"babel-runtime": "npm:babel-runtime@5.8.38",
|
||||
"core-js": "npm:core-js@0.9.18",
|
||||
"process": "github:jspm/nodelibs-process@0.2.0-alpha",
|
||||
"fs": "github:jspm/nodelibs-fs@0.2.0-alpha",
|
||||
"plugin-babel": "npm:systemjs-plugin-babel@0.0.12"
|
||||
},
|
||||
"packages": {
|
||||
@ -47,9 +45,28 @@ SystemJS.config({
|
||||
"github:*/*.json"
|
||||
],
|
||||
map: {
|
||||
"assert": "github:jspm/nodelibs-assert@0.2.0-alpha",
|
||||
"buffer": "github:jspm/nodelibs-buffer@0.2.0-alpha",
|
||||
"child_process": "github:jspm/nodelibs-child_process@0.2.0-alpha",
|
||||
"constants": "github:jspm/nodelibs-constants@0.2.0-alpha",
|
||||
"crypto": "github:jspm/nodelibs-crypto@0.2.0-alpha",
|
||||
"events": "github:jspm/nodelibs-events@0.2.0-alpha",
|
||||
"fs": "github:jspm/nodelibs-fs@0.2.0-alpha",
|
||||
"http": "github:jspm/nodelibs-http@0.2.0-alpha",
|
||||
"json": "github:systemjs/plugin-json@0.1.2",
|
||||
"Doodle3D/clipper-js": "github:Doodle3D/clipper-js@master",
|
||||
"three.js": "github:mrdoob/three.js@r72"
|
||||
"module": "github:jspm/nodelibs-module@0.2.0-alpha",
|
||||
"os": "github:jspm/nodelibs-os@0.2.0-alpha",
|
||||
"path": "github:jspm/nodelibs-path@0.2.0-alpha",
|
||||
"process": "github:jspm/nodelibs-process@0.2.0-alpha",
|
||||
"stream": "github:jspm/nodelibs-stream@0.2.0-alpha",
|
||||
"string_decoder": "github:jspm/nodelibs-string_decoder@0.2.0-alpha",
|
||||
"three.js": "github:mrdoob/three.js@r75",
|
||||
"tty": "github:jspm/nodelibs-tty@0.2.0-alpha",
|
||||
"url": "github:jspm/nodelibs-url@0.2.0-alpha",
|
||||
"util": "github:jspm/nodelibs-util@0.2.0-alpha",
|
||||
"vm": "github:jspm/nodelibs-vm@0.2.0-alpha",
|
||||
"worker": "github:casperlamboo/plugin-worker@master"
|
||||
},
|
||||
packages: {
|
||||
"github:Doodle3D/clipper-js@master": {
|
||||
@ -59,6 +76,231 @@ SystemJS.config({
|
||||
},
|
||||
"npm:clipper-lib@1.0.0": {
|
||||
"map": {}
|
||||
},
|
||||
"github:jspm/nodelibs-stream@0.2.0-alpha": {
|
||||
"map": {
|
||||
"stream-browserify": "npm:stream-browserify@2.0.1"
|
||||
}
|
||||
},
|
||||
"github:jspm/nodelibs-buffer@0.2.0-alpha": {
|
||||
"map": {
|
||||
"buffer-browserify": "npm:buffer@4.9.1"
|
||||
}
|
||||
},
|
||||
"github:jspm/nodelibs-string_decoder@0.2.0-alpha": {
|
||||
"map": {
|
||||
"string_decoder-browserify": "npm:string_decoder@0.10.31"
|
||||
}
|
||||
},
|
||||
"github:jspm/nodelibs-url@0.2.0-alpha": {
|
||||
"map": {
|
||||
"url-browserify": "npm:url@0.11.0"
|
||||
}
|
||||
},
|
||||
"github:jspm/nodelibs-http@0.2.0-alpha": {
|
||||
"map": {
|
||||
"http-browserify": "npm:stream-http@2.3.1"
|
||||
}
|
||||
},
|
||||
"npm:stream-browserify@2.0.1": {
|
||||
"map": {
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"readable-stream": "npm:readable-stream@2.1.5"
|
||||
}
|
||||
},
|
||||
"github:jspm/nodelibs-crypto@0.2.0-alpha": {
|
||||
"map": {
|
||||
"crypto-browserify": "npm:crypto-browserify@3.11.0"
|
||||
}
|
||||
},
|
||||
"npm:buffer@4.9.1": {
|
||||
"map": {
|
||||
"base64-js": "npm:base64-js@1.1.2",
|
||||
"isarray": "npm:isarray@1.0.0",
|
||||
"ieee754": "npm:ieee754@1.1.6"
|
||||
}
|
||||
},
|
||||
"npm:stream-http@2.3.1": {
|
||||
"map": {
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"readable-stream": "npm:readable-stream@2.1.5",
|
||||
"builtin-status-codes": "npm:builtin-status-codes@2.0.0",
|
||||
"to-arraybuffer": "npm:to-arraybuffer@1.0.1",
|
||||
"xtend": "npm:xtend@4.0.1"
|
||||
}
|
||||
},
|
||||
"npm:url@0.11.0": {
|
||||
"map": {
|
||||
"querystring": "npm:querystring@0.2.0",
|
||||
"punycode": "npm:punycode@1.3.2"
|
||||
}
|
||||
},
|
||||
"npm:readable-stream@2.1.5": {
|
||||
"map": {
|
||||
"string_decoder": "npm:string_decoder@0.10.31",
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"isarray": "npm:isarray@1.0.0",
|
||||
"buffer-shims": "npm:buffer-shims@1.0.0",
|
||||
"core-util-is": "npm:core-util-is@1.0.2",
|
||||
"process-nextick-args": "npm:process-nextick-args@1.0.7",
|
||||
"util-deprecate": "npm:util-deprecate@1.0.2"
|
||||
}
|
||||
},
|
||||
"npm:crypto-browserify@3.11.0": {
|
||||
"map": {
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"browserify-cipher": "npm:browserify-cipher@1.0.0",
|
||||
"create-hash": "npm:create-hash@1.1.2",
|
||||
"browserify-sign": "npm:browserify-sign@4.0.0",
|
||||
"pbkdf2": "npm:pbkdf2@3.0.4",
|
||||
"public-encrypt": "npm:public-encrypt@4.0.0",
|
||||
"randombytes": "npm:randombytes@2.0.3",
|
||||
"diffie-hellman": "npm:diffie-hellman@5.0.2",
|
||||
"create-ecdh": "npm:create-ecdh@4.0.0",
|
||||
"create-hmac": "npm:create-hmac@1.1.4"
|
||||
}
|
||||
},
|
||||
"npm:browserify-sign@4.0.0": {
|
||||
"map": {
|
||||
"create-hash": "npm:create-hash@1.1.2",
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"create-hmac": "npm:create-hmac@1.1.4",
|
||||
"parse-asn1": "npm:parse-asn1@5.0.0",
|
||||
"elliptic": "npm:elliptic@6.3.1",
|
||||
"bn.js": "npm:bn.js@4.11.6",
|
||||
"browserify-rsa": "npm:browserify-rsa@4.0.1"
|
||||
}
|
||||
},
|
||||
"npm:create-hash@1.1.2": {
|
||||
"map": {
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"ripemd160": "npm:ripemd160@1.0.1",
|
||||
"cipher-base": "npm:cipher-base@1.0.2",
|
||||
"sha.js": "npm:sha.js@2.4.5"
|
||||
}
|
||||
},
|
||||
"npm:public-encrypt@4.0.0": {
|
||||
"map": {
|
||||
"randombytes": "npm:randombytes@2.0.3",
|
||||
"create-hash": "npm:create-hash@1.1.2",
|
||||
"parse-asn1": "npm:parse-asn1@5.0.0",
|
||||
"bn.js": "npm:bn.js@4.11.6",
|
||||
"browserify-rsa": "npm:browserify-rsa@4.0.1"
|
||||
}
|
||||
},
|
||||
"npm:pbkdf2@3.0.4": {
|
||||
"map": {
|
||||
"create-hmac": "npm:create-hmac@1.1.4"
|
||||
}
|
||||
},
|
||||
"npm:diffie-hellman@5.0.2": {
|
||||
"map": {
|
||||
"randombytes": "npm:randombytes@2.0.3",
|
||||
"bn.js": "npm:bn.js@4.11.6",
|
||||
"miller-rabin": "npm:miller-rabin@4.0.0"
|
||||
}
|
||||
},
|
||||
"npm:create-hmac@1.1.4": {
|
||||
"map": {
|
||||
"create-hash": "npm:create-hash@1.1.2",
|
||||
"inherits": "npm:inherits@2.0.1"
|
||||
}
|
||||
},
|
||||
"npm:browserify-cipher@1.0.0": {
|
||||
"map": {
|
||||
"browserify-des": "npm:browserify-des@1.0.0",
|
||||
"evp_bytestokey": "npm:evp_bytestokey@1.0.0",
|
||||
"browserify-aes": "npm:browserify-aes@1.0.6"
|
||||
}
|
||||
},
|
||||
"npm:create-ecdh@4.0.0": {
|
||||
"map": {
|
||||
"elliptic": "npm:elliptic@6.3.1",
|
||||
"bn.js": "npm:bn.js@4.11.6"
|
||||
}
|
||||
},
|
||||
"npm:parse-asn1@5.0.0": {
|
||||
"map": {
|
||||
"create-hash": "npm:create-hash@1.1.2",
|
||||
"pbkdf2": "npm:pbkdf2@3.0.4",
|
||||
"browserify-aes": "npm:browserify-aes@1.0.6",
|
||||
"evp_bytestokey": "npm:evp_bytestokey@1.0.0",
|
||||
"asn1.js": "npm:asn1.js@4.8.0"
|
||||
}
|
||||
},
|
||||
"npm:browserify-des@1.0.0": {
|
||||
"map": {
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"cipher-base": "npm:cipher-base@1.0.2",
|
||||
"des.js": "npm:des.js@1.0.0"
|
||||
}
|
||||
},
|
||||
"npm:evp_bytestokey@1.0.0": {
|
||||
"map": {
|
||||
"create-hash": "npm:create-hash@1.1.2"
|
||||
}
|
||||
},
|
||||
"npm:browserify-aes@1.0.6": {
|
||||
"map": {
|
||||
"create-hash": "npm:create-hash@1.1.2",
|
||||
"evp_bytestokey": "npm:evp_bytestokey@1.0.0",
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"cipher-base": "npm:cipher-base@1.0.2",
|
||||
"buffer-xor": "npm:buffer-xor@1.0.3"
|
||||
}
|
||||
},
|
||||
"npm:elliptic@6.3.1": {
|
||||
"map": {
|
||||
"bn.js": "npm:bn.js@4.11.6",
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"hash.js": "npm:hash.js@1.0.3",
|
||||
"brorand": "npm:brorand@1.0.5"
|
||||
}
|
||||
},
|
||||
"npm:cipher-base@1.0.2": {
|
||||
"map": {
|
||||
"inherits": "npm:inherits@2.0.1"
|
||||
}
|
||||
},
|
||||
"npm:sha.js@2.4.5": {
|
||||
"map": {
|
||||
"inherits": "npm:inherits@2.0.1"
|
||||
}
|
||||
},
|
||||
"npm:browserify-rsa@4.0.1": {
|
||||
"map": {
|
||||
"bn.js": "npm:bn.js@4.11.6",
|
||||
"randombytes": "npm:randombytes@2.0.3"
|
||||
}
|
||||
},
|
||||
"npm:miller-rabin@4.0.0": {
|
||||
"map": {
|
||||
"bn.js": "npm:bn.js@4.11.6",
|
||||
"brorand": "npm:brorand@1.0.5"
|
||||
}
|
||||
},
|
||||
"npm:des.js@1.0.0": {
|
||||
"map": {
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"minimalistic-assert": "npm:minimalistic-assert@1.0.0"
|
||||
}
|
||||
},
|
||||
"npm:asn1.js@4.8.0": {
|
||||
"map": {
|
||||
"bn.js": "npm:bn.js@4.11.6",
|
||||
"inherits": "npm:inherits@2.0.1",
|
||||
"minimalistic-assert": "npm:minimalistic-assert@1.0.0"
|
||||
}
|
||||
},
|
||||
"npm:hash.js@1.0.3": {
|
||||
"map": {
|
||||
"inherits": "npm:inherits@2.0.1"
|
||||
}
|
||||
},
|
||||
"github:jspm/nodelibs-os@0.2.0-alpha": {
|
||||
"map": {
|
||||
"os-browserify": "npm:os-browserify@0.2.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
30
package.json
30
package.json
@ -8,14 +8,33 @@
|
||||
"dependencies": {
|
||||
"Doodle3D/clipper-js": "github:Doodle3D/clipper-js@master",
|
||||
"json": "github:systemjs/plugin-json@^0.1.2",
|
||||
"three.js": "github:mrdoob/three.js@r72"
|
||||
"three.js": "github:mrdoob/three.js@r75",
|
||||
"worker": "github:casperlamboo/plugin-worker@master"
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-runtime": "npm:babel-runtime@^5.1.13",
|
||||
"core-js": "npm:core-js@^0.9.4",
|
||||
"plugin-babel": "npm:systemjs-plugin-babel@^0.0.12"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"assert": "github:jspm/nodelibs-assert@^0.2.0-alpha",
|
||||
"buffer": "github:jspm/nodelibs-buffer@^0.2.0-alpha",
|
||||
"child_process": "github:jspm/nodelibs-child_process@^0.2.0-alpha",
|
||||
"constants": "github:jspm/nodelibs-constants@^0.2.0-alpha",
|
||||
"crypto": "github:jspm/nodelibs-crypto@^0.2.0-alpha",
|
||||
"events": "github:jspm/nodelibs-events@^0.2.0-alpha",
|
||||
"fs": "github:jspm/nodelibs-fs@^0.2.0-alpha",
|
||||
"plugin-babel": "npm:systemjs-plugin-babel@^0.0.12",
|
||||
"process": "github:jspm/nodelibs-process@^0.2.0-alpha"
|
||||
"http": "github:jspm/nodelibs-http@^0.2.0-alpha",
|
||||
"module": "github:jspm/nodelibs-module@^0.2.0-alpha",
|
||||
"os": "github:jspm/nodelibs-os@^0.2.0-alpha",
|
||||
"path": "github:jspm/nodelibs-path@^0.2.0-alpha",
|
||||
"process": "github:jspm/nodelibs-process@^0.2.0-alpha",
|
||||
"stream": "github:jspm/nodelibs-stream@^0.2.0-alpha",
|
||||
"string_decoder": "github:jspm/nodelibs-string_decoder@^0.2.0-alpha",
|
||||
"tty": "github:jspm/nodelibs-tty@^0.2.0-alpha",
|
||||
"url": "github:jspm/nodelibs-url@^0.2.0-alpha",
|
||||
"util": "github:jspm/nodelibs-util@^0.2.0-alpha",
|
||||
"vm": "github:jspm/nodelibs-vm@^0.2.0-alpha"
|
||||
},
|
||||
"overrides": {
|
||||
"npm:babel-runtime@5.8.38": {
|
||||
@ -24,6 +43,11 @@
|
||||
"optionalDependencies": {
|
||||
"core-js": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"npm:inherits@2.0.1": {
|
||||
"ignore": [
|
||||
"test.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -1,5 +1,6 @@
|
||||
import THREE from 'three.js';
|
||||
import slice from './sliceActions/index.js';
|
||||
import slice from './sliceActions/slice.js';
|
||||
import SliceWorker from './sliceActions/sliceWorker.js!worker';
|
||||
|
||||
export default class {
|
||||
setMesh(mesh) {
|
||||
@ -29,7 +30,34 @@ export default class {
|
||||
|
||||
return this;
|
||||
}
|
||||
async slice(settings) {
|
||||
return slice(this.geometry, settings);
|
||||
async slice(settings, async = false) {
|
||||
let gcode;
|
||||
|
||||
if (async) {
|
||||
const sliceWorker = new SliceWorker();
|
||||
|
||||
const geometry = this.geometry.toJSON();
|
||||
const { config } = settings;
|
||||
|
||||
gcode = await new Promise((resolve) => {
|
||||
sliceWorker.addEventListener('message', (event) => {
|
||||
const { message, data } = event.data;
|
||||
switch (message) {
|
||||
case 'SLICE': {
|
||||
sliceWorker.terminate();
|
||||
resolve(data.gcode);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
sliceWorker.postMessage({
|
||||
message: 'SLICE',
|
||||
data: { geometry, config }
|
||||
});
|
||||
});
|
||||
} else {
|
||||
gcode = slice(this.geometry, settings);
|
||||
}
|
||||
return gcode;
|
||||
}
|
||||
}
|
||||
|
25
src/sliceActions/sliceWorker.js
Normal file
25
src/sliceActions/sliceWorker.js
Normal file
@ -0,0 +1,25 @@
|
||||
import Settings from '../Settings.js';
|
||||
import slice from './slice.js';
|
||||
import THREE from 'three.js';
|
||||
|
||||
const loader = new THREE.JSONLoader();
|
||||
|
||||
self.addEventListener('message', (event) => {
|
||||
const { message, data } = event.data;
|
||||
switch (message) {
|
||||
case 'SLICE': {
|
||||
const { geometry: JSONGeometry, config } = data;
|
||||
|
||||
const { geometry } = new loader.parse(JSONGeometry.data);
|
||||
const settings = new Settings(config);
|
||||
|
||||
const gcode = slice(geometry, settings);
|
||||
|
||||
self.postMessage({
|
||||
message: 'SLICE',
|
||||
data: { gcode }
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}, false);
|
Loading…
Reference in New Issue
Block a user