webgl-3d-viewer
Version:
A WebGL ThreeJS STL viewer implementation written in ES6
143 lines (106 loc) • 4.49 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', {
value: true
});
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
var _lodashArrayFirst = require('lodash/array/first');
var _lodashArrayFirst2 = _interopRequireDefault(_lodashArrayFirst);
var _lodashCollectionFilter = require('lodash/collection/filter');
var _lodashCollectionFilter2 = _interopRequireDefault(_lodashCollectionFilter);
var _blueimpMd5 = require('blueimp-md5');
var _blueimpMd52 = _interopRequireDefault(_blueimpMd5);
var _STLLoader = require('./STLLoader');
var _STLLoader2 = _interopRequireDefault(_STLLoader);
var ModelLoaderRegistry = (function () {
function ModelLoaderRegistry() {
_classCallCheck(this, ModelLoaderRegistry);
}
_createClass(ModelLoaderRegistry, [{
key: 'load',
value: function load(url) {
var onLoad = arguments.length <= 1 || arguments[1] === undefined ? function () {} : arguments[1];
var onProgress = arguments.length <= 2 || arguments[2] === undefined ? function () {} : arguments[2];
var onError = arguments.length <= 3 || arguments[3] === undefined ? function () {} : arguments[3];
var _this = this;
var onParseStart = arguments.length <= 4 || arguments[4] === undefined ? function () {} : arguments[4];
var onParseEnd = arguments.length <= 5 || arguments[5] === undefined ? function () {} : arguments[5];
var id = this._genId(url);
var regEntry = this._findEntryById(id);
if (regEntry) {
var geometry = regEntry.geometry;
geometry.registry = true;
onParseStart();
onLoad(regEntry.geometry);
onParseEnd();
onProgress({ loaded: 100, total: 100 });
} else {
var loader = new _STLLoader2['default']();
loader.load(url, function (geometry) {
geometry.registry = false;
var RegistryItem = {
id: id,
geometry: geometry
};
_this.registry.push(RegistryItem);
onLoad(geometry);
}, onProgress, onError, onParseStart, onParseEnd);
}
}
}, {
key: 'parse',
value: function parse(model) {
var id = this._genId(model);
var regEntry = this._findEntryById(id);
var geometry = null;
if (regEntry) {
geometry = regEntry.geometry;
geometry.registry = true;
} else {
var loader = new _STLLoader2['default']();
var content = loader.parse(model);
var RegistryItem = {
id: id,
geometry: content
};
this.registry.push(RegistryItem);
geometry = content;
geometry.registry = true;
}
return geometry;
}
}, {
key: '_findEntryById',
value: function _findEntryById(id) {
var entry = (0, _lodashArrayFirst2['default'])((0, _lodashCollectionFilter2['default'])(this.registry, { id: id }));
if (entry) {
return Object.assign({}, entry);
}
}
}, {
key: '_genId',
value: function _genId(base) {
var id = '';
if (base instanceof ArrayBuffer) {
// ConvertBufferToBase64
var bufferBase64 = btoa([].reduce.call(new Uint8Array(base), function (p, c) {
return p + String.fromCharCode(c);
}, ''));
id = (0, _blueimpMd52['default'])(bufferBase64, 'arraybuffer');
} else {
id = (0, _blueimpMd52['default'])(base, 'url');
}
return id;
}
}, {
key: 'registry',
get: function get() {
return ModelLoaderRegistry.modelRegistry;
}
}]);
return ModelLoaderRegistry;
})();
exports['default'] = ModelLoaderRegistry;
ModelLoaderRegistry.modelRegistry = [];
module.exports = exports['default'];