UNPKG

@metacell/geppetto-meta-ui

Version:

React components from geppetto-meta to create neuroscience applications and visualize data.

94 lines 4.16 kB
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; } function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } /* eslint-disable */ AFRAME.registerComponent('instancedmesh', { schema: { retainParent: { "default": false }, retainChildren: { "default": false }, //Not yet implemented inheritMat: { "default": true }, mergeInstances: { "default": false }, //Not yet implemented frustumCulled: { "default": true } }, init: function init() {}, update: function update() { var _this = this; var self = this; var el = this.el; var list = this.el.children; var quantity = 0; var applyMatrix = function () { var position = new THREE.Vector3(); var rotation = new THREE.Euler(); var scale = new THREE.Vector3(); var quaternion = new THREE.Quaternion(); return function (i, matrix) { position.x = el.children[i].object3D.position.x; position.y = el.children[i].object3D.position.y; position.z = el.children[i].object3D.position.z; rotation.x = el.children[i].object3D.rotation.x; rotation.y = el.children[i].object3D.rotation.y; rotation.z = el.children[i].object3D.rotation.z; quaternion.setFromEuler(rotation); scale.x = el.children[i].object3D.scale.x; scale.y = el.children[i].object3D.scale.y; scale.z = el.children[i].object3D.scale.z; matrix.compose(position, quaternion, scale); }; //High verbosity because imma N00b don´t know how to access matrix on an uninitialized object }(); var _iterator = _createForOfIteratorHelper(list), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var item = _step.value; quantity = quantity + 1; } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } var mesh = this.el.getObject3D('mesh'); if (!mesh) { this.el.addEventListener('model-loaded', function (e) { _this.update.call(_this, _this.data); }); return; } var material = mesh.material.clone(); mesh.traverse(function (node) { if (node.type != 'Mesh') return; geometry = node.geometry; }); var amesh = new THREE.InstancedMesh(geometry, material, quantity); for (i = 0; i < quantity; i++) { matrix = new THREE.Matrix4(); child = this.el.children[i]; applyMatrix(i, matrix); amesh.setMatrixAt(i, matrix); } //frustumCulled amesh.frustumCulled = this.data.frustumCulled; this.el.object3D.add(amesh); // retainParent if (!self.data.retainParent) { this.el.object3D.remove(mesh); } // inheritMat (Set material attribute to cloned material) if (self.data.inheritMat) { this.el.components.material.material = material; } } });