forked from InsightSoftwareConsortium/itk-wasm
/
readPolyDataFile.js
66 lines (61 loc) · 2.22 KB
/
readPolyDataFile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import createWebworkerPromise from './createWebworkerPromise'
import PromiseFileReader from 'promise-file-reader'
import mimeToIO from './MimeToPolyDataIO'
import getFileExtension from './getFileExtension'
import extensionToIO from './extensionToPolyDataIO'
import IOTypes from './IOTypes'
import config from './itkConfig'
const readPolyDataFile = (webWorker, file) => {
let worker = webWorker
return createWebworkerPromise('Pipeline', worker)
.then(({ webworkerPromise, worker: usedWorker }) => {
worker = usedWorker
return PromiseFileReader.readAsArrayBuffer(file)
.then(arrayBuffer => {
const filePath = file.name
const mimeType = file.type
const extension = getFileExtension(filePath)
let pipelinePath = null
if (mimeToIO.has(mimeType)) {
pipelinePath = mimeToIO.get(mimeType)
} else if (extensionToIO.has(extension)) {
pipelinePath = extensionToIO.get(extension)
}
if (pipelinePath === null) {
Promise.reject(Error('Could not find IO for: ' + filePath))
}
const args = [file.name, file.name + '.output.json']
const outputs = [
{ path: args[1], type: IOTypes.vtkPolyData }
]
const inputs = [
{ path: args[0], type: IOTypes.Binary, data: new Uint8Array(arrayBuffer) }
]
const transferables = []
inputs.forEach(function (input) {
// Binary data
if (input.type === IOTypes.Binary) {
if (input.data.buffer) {
transferables.push(input.data.buffer)
} else if (input.data.byteLength) {
transferables.push(input.data)
}
}
})
return webworkerPromise.postMessage(
{
operation: 'runPolyDataIOPipeline',
config: config,
pipelinePath,
args,
outputs,
inputs
},
transferables
).then(function ({ stdout, stderr, outputs }) {
return Promise.resolve({ polyData: outputs[0].data, webWorker: worker })
})
})
})
}
export default readPolyDataFile