1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.Geometry = undefined;
|
7 |
|
8 | 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; }; }();
|
9 |
|
10 | var _boundPoints = require('bound-points');
|
11 |
|
12 | var _boundPoints2 = _interopRequireDefault(_boundPoints);
|
13 |
|
14 | var _defined = require('defined');
|
15 |
|
16 | var _defined2 = _interopRequireDefault(_defined);
|
17 |
|
18 | var _arrayFlatten = require('array-flatten');
|
19 |
|
20 | var _arrayFlatten2 = _interopRequireDefault(_arrayFlatten);
|
21 |
|
22 | var _meshReindex = require('mesh-reindex');
|
23 |
|
24 | var _meshReindex2 = _interopRequireDefault(_meshReindex);
|
25 |
|
26 | var _unindexMesh = require('unindex-mesh');
|
27 |
|
28 | var _unindexMesh2 = _interopRequireDefault(_unindexMesh);
|
29 |
|
30 | var _normals = require('normals');
|
31 |
|
32 | var _normals2 = _interopRequireDefault(_normals);
|
33 |
|
34 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
35 |
|
36 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
37 |
|
38 | var Geometry = exports.Geometry = function () {
|
39 | function Geometry() {
|
40 | var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
41 |
|
42 | _classCallCheck(this, Geometry);
|
43 |
|
44 | var complex = {};
|
45 | if (opts.positions) {
|
46 | complex = opts;
|
47 | } else {
|
48 | complex = opts.complex;
|
49 | }
|
50 | var flatten = (0, _defined2.default)(opts.flatten, complex.flatten, false);
|
51 | Object.defineProperty(this, '_complex', { enumerable: false, value: {} });
|
52 | this.flatten = Boolean(flatten);
|
53 | this.complex = complex || null;
|
54 | }
|
55 |
|
56 | _createClass(Geometry, [{
|
57 | key: 'computeBoundingBox',
|
58 | value: function computeBoundingBox() {
|
59 | return (0, _boundPoints2.default)(this.positions);
|
60 | }
|
61 | }, {
|
62 | key: 'complex',
|
63 | set: function set(complex) {
|
64 | if (complex instanceof Geometry) {
|
65 | complex = complex.complex;
|
66 | }
|
67 | if (complex) {
|
68 | if (complex.positions) {
|
69 | ensure3D(complex.positions);
|
70 | }
|
71 | if (complex.normals) {
|
72 | ensure3D(complex.normals);
|
73 | }
|
74 | if (this.flatten && complex.cells) {
|
75 | var cells = complex.cells.map(function (cell) {
|
76 | return cell.slice();
|
77 | });
|
78 | var flattened = (0, _meshReindex2.default)((0, _unindexMesh2.default)(complex.positions, cells));
|
79 | try {
|
80 | complex.normals = _normals2.default.vertexNormals(flattened.cells, flattened.positions);
|
81 | } catch (e) {
|
82 | console.warn("Unable to compute vertex normals.");
|
83 | }
|
84 | Object.assign(complex, flattened);
|
85 | } else if (complex.positions && !complex.cells) {
|
86 | Object.assign(complex, (0, _meshReindex2.default)((0, _arrayFlatten2.default)(complex.positions)));
|
87 | }
|
88 |
|
89 | if (null == complex.normals && complex.positions && complex.cells) {
|
90 | try {
|
91 | complex.normals = _normals2.default.vertexNormals(complex.cells, complex.positions);
|
92 | } catch (e) {
|
93 | console.warn("Unable to compute vertex normals.");
|
94 | }
|
95 | }
|
96 | }
|
97 |
|
98 | function ensure3D(nodes) {
|
99 | var _iteratorNormalCompletion = true;
|
100 | var _didIteratorError = false;
|
101 | var _iteratorError = undefined;
|
102 |
|
103 | try {
|
104 | for (var _iterator = nodes[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
105 | var node = _step.value;
|
106 |
|
107 | for (var i = 0; i < 3; ++i) {
|
108 | if (null == node[i]) {
|
109 | node[i] = 0;
|
110 | }
|
111 | }
|
112 | }
|
113 | } catch (err) {
|
114 | _didIteratorError = true;
|
115 | _iteratorError = err;
|
116 | } finally {
|
117 | try {
|
118 | if (!_iteratorNormalCompletion && _iterator.return) {
|
119 | _iterator.return();
|
120 | }
|
121 | } finally {
|
122 | if (_didIteratorError) {
|
123 | throw _iteratorError;
|
124 | }
|
125 | }
|
126 | }
|
127 | }
|
128 |
|
129 | Object.assign(this._complex, complex);
|
130 | return complex;
|
131 | },
|
132 | get: function get() {
|
133 | return this._complex || null;
|
134 | }
|
135 | }, {
|
136 | key: 'positions',
|
137 | get: function get() {
|
138 | return this.complex ? this.complex.positions : null;
|
139 | }
|
140 | }, {
|
141 | key: 'normals',
|
142 | get: function get() {
|
143 | return this.complex ? this.complex.normals : null;
|
144 | }
|
145 | }, {
|
146 | key: 'uvs',
|
147 | get: function get() {
|
148 | return this.complex ? this.complex.uvs : null;
|
149 | }
|
150 | }, {
|
151 | key: 'cells',
|
152 | get: function get() {
|
153 | return this.complex ? this.complex.cells : null;
|
154 | }
|
155 | }]);
|
156 |
|
157 | return Geometry;
|
158 | }();
|
159 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlL2dlb21ldHJ5LmpzIl0sIm5hbWVzIjpbIkdlb21ldHJ5Iiwib3B0cyIsImNvbXBsZXgiLCJwb3NpdGlvbnMiLCJmbGF0dGVuIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwidmFsdWUiLCJCb29sZWFuIiwiZW5zdXJlM0QiLCJub3JtYWxzIiwiY2VsbHMiLCJtYXAiLCJjZWxsIiwic2xpY2UiLCJmbGF0dGVuZWQiLCJ2ZXJ0ZXhOb3JtYWxzIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiYXNzaWduIiwibm9kZXMiLCJub2RlIiwiaSIsIl9jb21wbGV4IiwidXZzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7Ozs7O0lBRWFBLFEsV0FBQUEsUTtBQUNYLHNCQUF1QjtBQUFBLFFBQVhDLElBQVcsdUVBQUosRUFBSTs7QUFBQTs7QUFDckIsUUFBSUMsVUFBVSxFQUFkO0FBQ0EsUUFBSUQsS0FBS0UsU0FBVCxFQUFvQjtBQUFFRCxnQkFBVUQsSUFBVjtBQUFnQixLQUF0QyxNQUNLO0FBQUVDLGdCQUFVRCxLQUFLQyxPQUFmO0FBQXdCO0FBQy9CLFFBQUlFLFVBQVUsdUJBQVNILEtBQUtHLE9BQWQsRUFBdUJGLFFBQVFFLE9BQS9CLEVBQXdDLEtBQXhDLENBQWQ7QUFDQUMsV0FBT0MsY0FBUCxDQUFzQixJQUF0QixFQUE0QixVQUE1QixFQUF3QyxFQUFDQyxZQUFZLEtBQWIsRUFBb0JDLE9BQU8sRUFBM0IsRUFBeEM7QUFDQSxTQUFLSixPQUFMLEdBQWVLLFFBQVFMLE9BQVIsQ0FBZjtBQUNBLFNBQUtGLE9BQUwsR0FBZUEsV0FBVyxJQUExQjtBQUNEOzs7O3lDQTZEb0I7QUFDbkIsYUFBTywyQkFBZSxLQUFLQyxTQUFwQixDQUFQO0FBQ0Q7OztzQkE3RFdELE8sRUFBUztBQUNuQixVQUFJQSxtQkFBbUJGLFFBQXZCLEVBQWlDO0FBQUVFLGtCQUFVQSxRQUFRQSxPQUFsQjtBQUEyQjtBQUM5RCxVQUFJQSxPQUFKLEVBQWE7QUFDWCxZQUFJQSxRQUFRQyxTQUFaLEVBQXVCO0FBQUVPLG1CQUFTUixRQUFRQyxTQUFqQjtBQUE2QjtBQUN0RCxZQUFJRCxRQUFRUyxPQUFaLEVBQXFCO0FBQUVELG1CQUFTUixRQUFRUyxPQUFqQjtBQUEyQjtBQUNsRCxZQUFJLEtBQUtQLE9BQUwsSUFBZ0JGLFFBQVFVLEtBQTVCLEVBQW1DO0FBQ2pDLGNBQU1BLFFBQVFWLFFBQVFVLEtBQVIsQ0FBY0MsR0FBZCxDQUFrQixVQUFDQyxJQUFEO0FBQUEsbUJBQVVBLEtBQUtDLEtBQUwsRUFBVjtBQUFBLFdBQWxCLENBQWQ7QUFDQSxjQUFNQyxZQUFZLDJCQUFRLDJCQUFRZCxRQUFRQyxTQUFoQixFQUEyQlMsS0FBM0IsQ0FBUixDQUFsQjtBQUNBLGNBQUk7QUFDRlYsb0JBQVFTLE9BQVIsR0FBa0Isa0JBQVFNLGFBQVIsQ0FDaEJELFVBQVVKLEtBRE0sRUFFaEJJLFVBQVViLFNBRk0sQ0FBbEI7QUFHRCxXQUpELENBSUUsT0FBT2UsQ0FBUCxFQUFVO0FBQUVDLG9CQUFRQyxJQUFSLENBQWEsbUNBQWI7QUFBbUQ7QUFDakVmLGlCQUFPZ0IsTUFBUCxDQUFjbkIsT0FBZCxFQUF1QmMsU0FBdkI7QUFDRCxTQVRELE1BU08sSUFBSWQsUUFBUUMsU0FBUixJQUFxQixDQUFDRCxRQUFRVSxLQUFsQyxFQUF5QztBQUM5Q1AsaUJBQU9nQixNQUFQLENBQWNuQixPQUFkLEVBQXVCLDJCQUFRLDRCQUFRQSxRQUFRQyxTQUFoQixDQUFSLENBQXZCO0FBQ0Q7O0FBRUQsWUFBSSxRQUFRRCxRQUFRUyxPQUFoQixJQUEyQlQsUUFBUUMsU0FBbkMsSUFBZ0RELFFBQVFVLEtBQTVELEVBQW1FO0FBQ2pFLGNBQUk7QUFDRlYsb0JBQVFTLE9BQVIsR0FBa0Isa0JBQVFNLGFBQVIsQ0FDaEJmLFFBQVFVLEtBRFEsRUFFaEJWLFFBQVFDLFNBRlEsQ0FBbEI7QUFHRCxXQUpELENBSUUsT0FBT2UsQ0FBUCxFQUFVO0FBQUVDLG9CQUFRQyxJQUFSLENBQWEsbUNBQWI7QUFBbUQ7QUFDbEU7QUFDRjs7QUFFRCxlQUFTVixRQUFULENBQWtCWSxLQUFsQixFQUF5QjtBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUN2QiwrQkFBbUJBLEtBQW5CLDhIQUEwQjtBQUFBLGdCQUFmQyxJQUFlOztBQUN4QixpQkFBSyxJQUFJQyxJQUFJLENBQWIsRUFBZ0JBLElBQUksQ0FBcEIsRUFBdUIsRUFBRUEsQ0FBekIsRUFBNEI7QUFDMUIsa0JBQUksUUFBUUQsS0FBS0MsQ0FBTCxDQUFaLEVBQXFCO0FBQUVELHFCQUFLQyxDQUFMLElBQVUsQ0FBVjtBQUFhO0FBQ3JDO0FBQ0Y7QUFMc0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQU14Qjs7QUFFRG5CLGFBQU9nQixNQUFQLENBQWMsS0FBS0ksUUFBbkIsRUFBNkJ2QixPQUE3QjtBQUNBLGFBQU9BLE9BQVA7QUFDRCxLO3dCQUVhO0FBQ1osYUFBTyxLQUFLdUIsUUFBTCxJQUFpQixJQUF4QjtBQUNEOzs7d0JBRWU7QUFDZCxhQUFPLEtBQUt2QixPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhQyxTQUE1QixHQUF3QyxJQUEvQztBQUNEOzs7d0JBRWE7QUFDWixhQUFPLEtBQUtELE9BQUwsR0FBZSxLQUFLQSxPQUFMLENBQWFTLE9BQTVCLEdBQXNDLElBQTdDO0FBQ0Q7Ozt3QkFFUztBQUNSLGFBQU8sS0FBS1QsT0FBTCxHQUFlLEtBQUtBLE9BQUwsQ0FBYXdCLEdBQTVCLEdBQWtDLElBQXpDO0FBQ0Q7Ozt3QkFFVztBQUNWLGFBQU8sS0FBS3hCLE9BQUwsR0FBZSxLQUFLQSxPQUFMLENBQWFVLEtBQTVCLEdBQW9DLElBQTNDO0FBQ0QiLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2V0Qm91bmRpbmdCb3ggZnJvbSAnYm91bmQtcG9pbnRzJ1xuaW1wb3J0IGNvYWxlc2NlIGZyb20gJ2RlZmluZWQnXG5pbXBvcnQgZmxhdHRlbiBmcm9tICdhcnJheS1mbGF0dGVuJ1xuaW1wb3J0IHJlaW5kZXggZnJvbSAnbWVzaC1yZWluZGV4J1xuaW1wb3J0IHVuaW5kZXggZnJvbSAndW5pbmRleC1tZXNoJ1xuaW1wb3J0IG5vcm1hbHMgZnJvbSAnbm9ybWFscydcblxuZXhwb3J0IGNsYXNzIEdlb21ldHJ5IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgbGV0IGNvbXBsZXggPSB7fVxuICAgIGlmIChvcHRzLnBvc2l0aW9ucykgeyBjb21wbGV4ID0gb3B0cyB9XG4gICAgZWxzZSB7IGNvbXBsZXggPSBvcHRzLmNvbXBsZXggfVxuICAgIGxldCBmbGF0dGVuID0gY29hbGVzY2Uob3B0cy5mbGF0dGVuLCBjb21wbGV4LmZsYXR0ZW4sIGZhbHNlKVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2NvbXBsZXgnLCB7ZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiB7fX0pXG4gICAgdGhpcy5mbGF0dGVuID0gQm9vbGVhbihmbGF0dGVuKVxuICAgIHRoaXMuY29tcGxleCA9IGNvbXBsZXggfHwgbnVsbFxuICB9XG5cbiAgc2V0IGNvbXBsZXgoY29tcGxleCkge1xuICAgIGlmIChjb21wbGV4IGluc3RhbmNlb2YgR2VvbWV0cnkpIHsgY29tcGxleCA9IGNvbXBsZXguY29tcGxleCB9XG4gICAgaWYgKGNvbXBsZXgpIHtcbiAgICAgIGlmIChjb21wbGV4LnBvc2l0aW9ucykgeyBlbnN1cmUzRChjb21wbGV4LnBvc2l0aW9ucykgfVxuICAgICAgaWYgKGNvbXBsZXgubm9ybWFscykgeyBlbnN1cmUzRChjb21wbGV4Lm5vcm1hbHMpIH1cbiAgICAgIGlmICh0aGlzLmZsYXR0ZW4gJiYgY29tcGxleC5jZWxscykge1xuICAgICAgICBjb25zdCBjZWxscyA9IGNvbXBsZXguY2VsbHMubWFwKChjZWxsKSA9PiBjZWxsLnNsaWNlKCkpXG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZCA9IHJlaW5kZXgodW5pbmRleChjb21wbGV4LnBvc2l0aW9ucywgY2VsbHMpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbXBsZXgubm9ybWFscyA9IG5vcm1hbHMudmVydGV4Tm9ybWFscyhcbiAgICAgICAgICAgIGZsYXR0ZW5lZC5jZWxscyxcbiAgICAgICAgICAgIGZsYXR0ZW5lZC5wb3NpdGlvbnMpXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgY29uc29sZS53YXJuKFwiVW5hYmxlIHRvIGNvbXB1dGUgdmVydGV4IG5vcm1hbHMuXCIpIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbihjb21wbGV4LCBmbGF0dGVuZWQpXG4gICAgICB9IGVsc2UgaWYgKGNvbXBsZXgucG9zaXRpb25zICYmICFjb21wbGV4LmNlbGxzKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oY29tcGxleCwgcmVpbmRleChmbGF0dGVuKGNvbXBsZXgucG9zaXRpb25zKSkpXG4gICAgICB9XG5cbiAgICAgIGlmIChudWxsID09IGNvbXBsZXgubm9ybWFscyAmJiBjb21wbGV4LnBvc2l0aW9ucyAmJiBjb21wbGV4LmNlbGxzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29tcGxleC5ub3JtYWxzID0gbm9ybWFscy52ZXJ0ZXhOb3JtYWxzKFxuICAgICAgICAgICAgY29tcGxleC5jZWxscyxcbiAgICAgICAgICAgIGNvbXBsZXgucG9zaXRpb25zKVxuICAgICAgICB9IGNhdGNoIChlKSB7IGNvbnNvbGUud2FybihcIlVuYWJsZSB0byBjb21wdXRlIHZlcnRleCBub3JtYWxzLlwiKSB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5zdXJlM0Qobm9kZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7ICsraSkge1xuICAgICAgICAgIGlmIChudWxsID09IG5vZGVbaV0pIHsgbm9kZVtpXSA9IDAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jb21wbGV4LCBjb21wbGV4KVxuICAgIHJldHVybiBjb21wbGV4XG4gIH1cblxuICBnZXQgY29tcGxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcGxleCB8fCBudWxsXG4gIH1cblxuICBnZXQgcG9zaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbXBsZXggPyB0aGlzLmNvbXBsZXgucG9zaXRpb25zIDogbnVsbFxuICB9XG5cbiAgZ2V0IG5vcm1hbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGxleCA/IHRoaXMuY29tcGxleC5ub3JtYWxzIDogbnVsbFxuICB9XG5cbiAgZ2V0IHV2cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wbGV4ID8gdGhpcy5jb21wbGV4LnV2cyA6IG51bGxcbiAgfVxuXG4gIGdldCBjZWxscygpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wbGV4ID8gdGhpcy5jb21wbGV4LmNlbGxzIDogbnVsbFxuICB9XG5cbiAgY29tcHV0ZUJvdW5kaW5nQm94KCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0JveCh0aGlzLnBvc2l0aW9ucylcbiAgfVxufVxuIl19 |
\ | No newline at end of file |