paraview-glance
Version:
Web application for Visualizing Scientific and Medical datasets
65 lines (50 loc) • 1.86 kB
JavaScript
;
const path = require('path');
const mime = require('mime-types');
const fs = require('fs');
const mimeToIO = require('./MimeToPolyDataIO.js');
const getFileExtension = require('./getFileExtension.js');
const extensionToIO = require('./extensionToPolyDataIO.js');
const IOTypes = require('./IOTypes.js');
const loadEmscriptenModule = require('./loadEmscriptenModuleNode.js');
const runPipelineEmscripten = require('./runPipelineEmscripten.js');
const readPolyDataLocalFile = filePath => {
return new Promise(function (resolve, reject) {
const polyDataIOsPath = path.resolve(__dirname, 'PolyDataIOs');
const absoluteFilePath = path.resolve(filePath);
const filePathBasename = path.basename(filePath);
try {
const mimeType = mime.lookup(absoluteFilePath);
const extension = getFileExtension(absoluteFilePath);
let io = null;
if (mimeToIO.has(mimeType)) {
io = mimeToIO.get(mimeType);
} else if (extensionToIO.has(extension)) {
io = extensionToIO.get(extension);
}
if (io === null) {
reject(Error('Could not find IO for: ' + absoluteFilePath));
}
const modulePath = path.join(polyDataIOsPath, io);
const Module = loadEmscriptenModule(modulePath);
const fileContents = new Uint8Array(fs.readFileSync(absoluteFilePath));
const args = [filePathBasename, filePathBasename + '.output.json'];
const desiredOutputs = [{
path: args[1],
type: IOTypes.vtkPolyData
}];
const inputs = [{
path: args[0],
type: IOTypes.Binary,
data: fileContents
}];
const {
outputs
} = runPipelineEmscripten(Module, args, desiredOutputs, inputs);
resolve(outputs[0].data);
} catch (err) {
reject(err);
}
});
};
module.exports = readPolyDataLocalFile;