hart-estate-widget 0.0.66 → 0.0.69

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +3 -0
  2. package/build/assets/css/index.css +2 -0
  3. package/build/assets/img/floor-dark.jpg +0 -0
  4. package/build/assets/img/floor-white.jpg +0 -0
  5. package/build/assets/img/grass.jpg +0 -0
  6. package/build/bundle.js +2 -0
  7. package/build/components/Application.js +2 -135
  8. package/build/components/Buttons/FullScreenButton.js +2 -50
  9. package/build/components/Buttons/TabButton.js +2 -24
  10. package/build/components/Instructions.js +2 -54
  11. package/build/components/Loader.js +2 -22
  12. package/build/components/ModelTab.js +2 -213
  13. package/build/components/PanoramaTab.js +2 -620
  14. package/build/components/RotationTab/DefaultView.js +2 -124
  15. package/build/components/RotationTab/ThreesixtyView.js +2 -45
  16. package/build/components/RotationTab/index.js +2 -194
  17. package/build/components/Widget.js +2 -110
  18. package/build/config/defaultConfig.js +2 -32
  19. package/build/enums/deviceOrientationStatuses.js +2 -11
  20. package/build/enums/deviceWidth.js +2 -21
  21. package/build/enums/imageExtentions.js +2 -16
  22. package/build/enums/rotationModes.js +2 -11
  23. package/build/index.css +1 -1
  24. package/build/index.js +2 -75
  25. package/build/locale/index.js +2 -71
  26. package/build/store/apiStore.js +2 -231
  27. package/build/store/deviceStore.js +2 -60
  28. package/build/store/fullScreenStore.js +2 -159
  29. package/build/store/houseStore.js +2 -952
  30. package/build/store/index.js +2 -124
  31. package/build/store/modelStore.js +2 -338
  32. package/build/threesixty/events.js +2 -220
  33. package/build/threesixty/index.js +2 -264
  34. package/build/utils/csg/csg-lib.js +2 -472
  35. package/build/utils/csg/csg-worker.js +2 -84
  36. package/build/utils/csg/three-csg.js +2 -277
  37. package/build/utils/helpers.js +2 -12
  38. package/build/utils/modelHelpers.js +2 -161
  39. package/build/utils/panoramaHelpers.js +2 -117
  40. package/package.json +17 -5
  41. package/build/assets/css/app.css +0 -1
  42. package/build/assets/css/app.css.map +0 -1
  43. package/build/assets/img/floor-dark.png +0 -0
  44. package/build/assets/img/floor-white.png +0 -0
  45. package/build/assets/img/grass.png +0 -0
@@ -1,472 +1,2 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.Vertex = exports.Vector = exports.Polygon = exports.Plane = exports.CSG = void 0;
7
-
8
- var _react = _interopRequireDefault(require("react"));
9
-
10
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
-
12
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
13
-
14
- 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); } }
15
-
16
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
17
-
18
- var CSG = /*#__PURE__*/function () {
19
- function CSG() {
20
- _classCallCheck(this, CSG);
21
-
22
- this.polygons = [];
23
- }
24
-
25
- _createClass(CSG, [{
26
- key: "clone",
27
- value: function clone() {
28
- var csg = new CSG();
29
- csg.polygons = this.polygons.map(function (p) {
30
- return p.clone();
31
- });
32
- return csg;
33
- }
34
- }, {
35
- key: "toPolygons",
36
- value: function toPolygons() {
37
- return this.polygons;
38
- }
39
- }, {
40
- key: "union",
41
- value: function union(csg) {
42
- var a = new Node(this.clone().polygons);
43
- var b = new Node(csg.clone().polygons);
44
- a.clipTo(b);
45
- b.clipTo(a);
46
- b.invert();
47
- b.clipTo(a);
48
- b.invert();
49
- a.build(b.allPolygons());
50
- return CSG.fromPolygons(a.allPolygons());
51
- }
52
- }, {
53
- key: "subtract",
54
- value: function subtract(csg) {
55
- var a = new Node(this.clone().polygons);
56
- var b = new Node(csg.clone().polygons);
57
- a.invert();
58
- a.clipTo(b);
59
- b.clipTo(a);
60
- b.invert();
61
- b.clipTo(a);
62
- b.invert();
63
- a.build(b.allPolygons());
64
- a.invert();
65
- return CSG.fromPolygons(a.allPolygons());
66
- }
67
- }, {
68
- key: "intersect",
69
- value: function intersect(csg) {
70
- var a = new Node(this.clone().polygons);
71
- var b = new Node(csg.clone().polygons);
72
- a.invert();
73
- b.clipTo(a);
74
- b.invert();
75
- a.clipTo(b);
76
- b.clipTo(a);
77
- a.build(b.allPolygons());
78
- a.invert();
79
- return CSG.fromPolygons(a.allPolygons());
80
- } // Return a new CSG solid with solid and empty space switched. This solid is
81
- // not modified.
82
-
83
- }, {
84
- key: "inverse",
85
- value: function inverse() {
86
- var csg = this.clone();
87
- csg.polygons.forEach(function (p) {
88
- return p.flip();
89
- });
90
- return csg;
91
- }
92
- }]);
93
-
94
- return CSG;
95
- }();
96
-
97
- exports.CSG = CSG;
98
-
99
- CSG.fromPolygons = function (polygons) {
100
- var csg = new CSG();
101
- csg.polygons = polygons;
102
- return csg;
103
- };
104
-
105
- var Vector = /*#__PURE__*/function () {
106
- function Vector() {
107
- var x = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
108
- var y = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
109
- var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
110
-
111
- _classCallCheck(this, Vector);
112
-
113
- this.x = x;
114
- this.y = y;
115
- this.z = z;
116
- }
117
-
118
- _createClass(Vector, [{
119
- key: "copy",
120
- value: function copy(v) {
121
- this.x = v.x;
122
- this.y = v.y;
123
- this.z = v.z;
124
- return this;
125
- }
126
- }, {
127
- key: "clone",
128
- value: function clone() {
129
- return new Vector(this.x, this.y, this.z);
130
- }
131
- }, {
132
- key: "negate",
133
- value: function negate() {
134
- this.x *= -1;
135
- this.y *= -1;
136
- this.z *= -1;
137
- return this;
138
- }
139
- }, {
140
- key: "add",
141
- value: function add(a) {
142
- this.x += a.x;
143
- this.y += a.y;
144
- this.z += a.z;
145
- return this;
146
- }
147
- }, {
148
- key: "sub",
149
- value: function sub(a) {
150
- this.x -= a.x;
151
- this.y -= a.y;
152
- this.z -= a.z;
153
- return this;
154
- }
155
- }, {
156
- key: "times",
157
- value: function times(a) {
158
- this.x *= a;
159
- this.y *= a;
160
- this.z *= a;
161
- return this;
162
- }
163
- }, {
164
- key: "dividedBy",
165
- value: function dividedBy(a) {
166
- this.x /= a;
167
- this.y /= a;
168
- this.z /= a;
169
- return this;
170
- }
171
- }, {
172
- key: "lerp",
173
- value: function lerp(a, t) {
174
- return this.add(tv0.copy(a).sub(this).times(t));
175
- }
176
- }, {
177
- key: "unit",
178
- value: function unit() {
179
- return this.dividedBy(this.length());
180
- }
181
- }, {
182
- key: "length",
183
- value: function length() {
184
- return Math.sqrt(Math.pow(this.x, 2) + Math.pow(this.y, 2) + Math.pow(this.z, 2));
185
- }
186
- }, {
187
- key: "normalize",
188
- value: function normalize() {
189
- return this.unit();
190
- }
191
- }, {
192
- key: "cross",
193
- value: function cross(b) {
194
- var a = this;
195
- var ax = a.x,
196
- ay = a.y,
197
- az = a.z;
198
- var bx = b.x,
199
- by = b.y,
200
- bz = b.z;
201
- this.x = ay * bz - az * by;
202
- this.y = az * bx - ax * bz;
203
- this.z = ax * by - ay * bx;
204
- return this;
205
- }
206
- }, {
207
- key: "dot",
208
- value: function dot(b) {
209
- return this.x * b.x + this.y * b.y + this.z * b.z;
210
- }
211
- }]);
212
-
213
- return Vector;
214
- }();
215
-
216
- exports.Vector = Vector;
217
- var tv0 = new Vector();
218
- var tv1 = new Vector();
219
-
220
- var Vertex = /*#__PURE__*/function () {
221
- function Vertex(pos, normal, uv, color) {
222
- _classCallCheck(this, Vertex);
223
-
224
- this.pos = new Vector().copy(pos);
225
- this.normal = new Vector().copy(normal);
226
- uv && (this.uv = new Vector().copy(uv)) && (this.uv.z = 0);
227
- color && (this.color = new Vector().copy(color));
228
- }
229
-
230
- _createClass(Vertex, [{
231
- key: "clone",
232
- value: function clone() {
233
- return new Vertex(this.pos, this.normal, this.uv, this.color);
234
- }
235
- }, {
236
- key: "flip",
237
- value: function flip() {
238
- this.normal.negate();
239
- }
240
- }, {
241
- key: "interpolate",
242
- value: function interpolate(other, t) {
243
- return new Vertex(this.pos.clone().lerp(other.pos, t), this.normal.clone().lerp(other.normal, t), this.uv && other.uv && this.uv.clone().lerp(other.uv, t), this.color && other.color && this.color.clone().lerp(other.color, t));
244
- }
245
- }]);
246
-
247
- return Vertex;
248
- }();
249
-
250
- exports.Vertex = Vertex;
251
-
252
- var Plane = /*#__PURE__*/function () {
253
- function Plane(normal, w) {
254
- _classCallCheck(this, Plane);
255
-
256
- this.normal = normal;
257
- this.w = w;
258
- }
259
-
260
- _createClass(Plane, [{
261
- key: "clone",
262
- value: function clone() {
263
- return new Plane(this.normal.clone(), this.w);
264
- }
265
- }, {
266
- key: "flip",
267
- value: function flip() {
268
- this.normal.negate();
269
- this.w = -this.w;
270
- }
271
- }, {
272
- key: "splitPolygon",
273
- value: function splitPolygon(polygon, coplanarFront, coplanarBack, front, back) {
274
- var COPLANAR = 0;
275
- var FRONT = 1;
276
- var BACK = 2;
277
- var SPANNING = 3;
278
- var polygonType = 0;
279
- var types = [];
280
-
281
- for (var i = 0; i < polygon.vertices.length; i++) {
282
- var t = this.normal.dot(polygon.vertices[i].pos) - this.w;
283
- var type = t < -Plane.EPSILON ? BACK : t > Plane.EPSILON ? FRONT : COPLANAR;
284
- polygonType |= type;
285
- types.push(type);
286
- }
287
-
288
- switch (polygonType) {
289
- case COPLANAR:
290
- (this.normal.dot(polygon.plane.normal) > 0 ? coplanarFront : coplanarBack).push(polygon);
291
- break;
292
-
293
- case FRONT:
294
- front.push(polygon);
295
- break;
296
-
297
- case BACK:
298
- back.push(polygon);
299
- break;
300
-
301
- case SPANNING:
302
- var f = [];
303
- var b = [];
304
-
305
- for (var _i = 0; _i < polygon.vertices.length; _i++) {
306
- var j = (_i + 1) % polygon.vertices.length;
307
- var ti = types[_i],
308
- tj = types[j];
309
- var vi = polygon.vertices[_i],
310
- vj = polygon.vertices[j];
311
- if (ti != BACK) f.push(vi);
312
- if (ti != FRONT) b.push(ti != BACK ? vi.clone() : vi);
313
-
314
- if ((ti | tj) == SPANNING) {
315
- var _t = (this.w - this.normal.dot(vi.pos)) / this.normal.dot(tv0.copy(vj.pos).sub(vi.pos));
316
-
317
- var v = vi.interpolate(vj, _t);
318
- f.push(v);
319
- b.push(v.clone());
320
- }
321
- }
322
-
323
- if (f.length >= 3) front.push(new Polygon(f, polygon.shared));
324
- if (b.length >= 3) back.push(new Polygon(b, polygon.shared));
325
- break;
326
- }
327
- }
328
- }]);
329
-
330
- return Plane;
331
- }();
332
-
333
- exports.Plane = Plane;
334
- Plane.EPSILON = 1e-5;
335
-
336
- Plane.fromPoints = function (a, b, c) {
337
- var n = tv0.copy(b).sub(a).cross(tv1.copy(c).sub(a)).normalize();
338
- return new Plane(n.clone(), n.dot(a));
339
- };
340
-
341
- var Polygon = /*#__PURE__*/function () {
342
- function Polygon(vertices, shared) {
343
- _classCallCheck(this, Polygon);
344
-
345
- this.vertices = vertices;
346
- this.shared = shared;
347
- this.plane = Plane.fromPoints(vertices[0].pos, vertices[1].pos, vertices[2].pos);
348
- }
349
-
350
- _createClass(Polygon, [{
351
- key: "clone",
352
- value: function clone() {
353
- return new Polygon(this.vertices.map(function (v) {
354
- return v.clone();
355
- }), this.shared);
356
- }
357
- }, {
358
- key: "flip",
359
- value: function flip() {
360
- this.vertices.reverse().forEach(function (v) {
361
- return v.flip();
362
- });
363
- this.plane.flip();
364
- }
365
- }]);
366
-
367
- return Polygon;
368
- }();
369
-
370
- exports.Polygon = Polygon;
371
-
372
- var Node = /*#__PURE__*/function () {
373
- function Node(polygons) {
374
- _classCallCheck(this, Node);
375
-
376
- this.plane = null;
377
- this.front = null;
378
- this.back = null;
379
- this.polygons = [];
380
- if (polygons) this.build(polygons);
381
- }
382
-
383
- _createClass(Node, [{
384
- key: "clone",
385
- value: function clone() {
386
- var node = new Node();
387
- node.plane = this.plane && this.plane.clone();
388
- node.front = this.front && this.front.clone();
389
- node.back = this.back && this.back.clone();
390
- node.polygons = this.polygons.map(function (p) {
391
- return p.clone();
392
- });
393
- return node;
394
- }
395
- }, {
396
- key: "invert",
397
- value: function invert() {
398
- for (var i = 0; i < this.polygons.length; i++) {
399
- this.polygons[i].flip();
400
- }
401
-
402
- this.plane && this.plane.flip();
403
- this.front && this.front.invert();
404
- this.back && this.back.invert();
405
- var temp = this.front;
406
- this.front = this.back;
407
- this.back = temp;
408
- }
409
- }, {
410
- key: "clipPolygons",
411
- value: function clipPolygons(polygons) {
412
- if (!this.plane) return polygons.slice();
413
- var front = [],
414
- back = [];
415
-
416
- for (var i = 0; i < polygons.length; i++) {
417
- this.plane.splitPolygon(polygons[i], front, back, front, back);
418
- }
419
-
420
- if (this.front) front = this.front.clipPolygons(front);
421
- if (this.back) back = this.back.clipPolygons(back);else back = [];
422
- return front.concat(back);
423
- }
424
- }, {
425
- key: "clipTo",
426
- value: function clipTo(bsp) {
427
- this.polygons = bsp.clipPolygons(this.polygons);
428
- if (this.front) this.front.clipTo(bsp);
429
- if (this.back) this.back.clipTo(bsp);
430
- }
431
- }, {
432
- key: "allPolygons",
433
- value: function allPolygons() {
434
- var polygons = this.polygons.slice();
435
- if (this.front) polygons = polygons.concat(this.front.allPolygons());
436
- if (this.back) polygons = polygons.concat(this.back.allPolygons());
437
- return polygons;
438
- }
439
- }, {
440
- key: "build",
441
- value: function build(polygons) {
442
- if (!polygons.length) return;
443
- if (!this.plane) this.plane = polygons[0].plane.clone();
444
- var front = [],
445
- back = [];
446
-
447
- for (var i = 0; i < polygons.length; i++) {
448
- this.plane.splitPolygon(polygons[i], this.polygons, this.polygons, front, back);
449
- }
450
-
451
- if (front.length) {
452
- if (!this.front) this.front = new Node();
453
- this.front.build(front);
454
- }
455
-
456
- if (back.length) {
457
- if (!this.back) this.back = new Node();
458
- this.back.build(back);
459
- }
460
- }
461
- }]);
462
-
463
- return Node;
464
- }();
465
-
466
- CSG.fromJSON = function (json) {
467
- return CSG.fromPolygons(json.polygons.map(function (p) {
468
- return new Polygon(p.vertices.map(function (v) {
469
- return new Vertex(v.pos, v.normal, v.uv);
470
- }), p.shared);
471
- }));
472
- };
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Vertex=exports.Vector=exports.Polygon=exports.Plane=exports.CSG=void 0;var _react=_interopRequireDefault(require("react"));function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}function _classCallCheck(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function _defineProperties(t,e){for(var n=0;n<e.length;n++){var o=e[n];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,o.key,o)}}function _createClass(t,e,n){return e&&_defineProperties(t.prototype,e),n&&_defineProperties(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}var CSG=function(){function n(){_classCallCheck(this,n),this.polygons=[]}return _createClass(n,[{key:"clone",value:function(){var t=new n;return t.polygons=this.polygons.map(function(t){return t.clone()}),t}},{key:"toPolygons",value:function(){return this.polygons}},{key:"union",value:function(t){var e=new Node(this.clone().polygons),t=new Node(t.clone().polygons);return e.clipTo(t),t.clipTo(e),t.invert(),t.clipTo(e),t.invert(),e.build(t.allPolygons()),n.fromPolygons(e.allPolygons())}},{key:"subtract",value:function(t){var e=new Node(this.clone().polygons),t=new Node(t.clone().polygons);return e.invert(),e.clipTo(t),t.clipTo(e),t.invert(),t.clipTo(e),t.invert(),e.build(t.allPolygons()),e.invert(),n.fromPolygons(e.allPolygons())}},{key:"intersect",value:function(t){var e=new Node(this.clone().polygons),t=new Node(t.clone().polygons);return e.invert(),t.clipTo(e),t.invert(),e.clipTo(t),t.clipTo(e),e.build(t.allPolygons()),e.invert(),n.fromPolygons(e.allPolygons())}},{key:"inverse",value:function(){var t=this.clone();return t.polygons.forEach(function(t){return t.flip()}),t}}]),n}(),Vector=((exports.CSG=CSG).fromPolygons=function(t){var e=new CSG;return e.polygons=t,e},function(){function o(){var t=0<arguments.length&&void 0!==arguments[0]?arguments[0]:0,e=1<arguments.length&&void 0!==arguments[1]?arguments[1]:0,n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:0;_classCallCheck(this,o),this.x=t,this.y=e,this.z=n}return _createClass(o,[{key:"copy",value:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}},{key:"clone",value:function(){return new o(this.x,this.y,this.z)}},{key:"negate",value:function(){return this.x*=-1,this.y*=-1,this.z*=-1,this}},{key:"add",value:function(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}},{key:"sub",value:function(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}},{key:"times",value:function(t){return this.x*=t,this.y*=t,this.z*=t,this}},{key:"dividedBy",value:function(t){return this.x/=t,this.y/=t,this.z/=t,this}},{key:"lerp",value:function(t,e){return this.add(tv0.copy(t).sub(this).times(e))}},{key:"unit",value:function(){return this.dividedBy(this.length())}},{key:"length",value:function(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2)+Math.pow(this.z,2))}},{key:"normalize",value:function(){return this.unit()}},{key:"cross",value:function(t){var e=this.x,n=this.y,o=this.z,i=t.x,s=t.y,t=t.z;return this.x=n*t-o*s,this.y=o*i-e*t,this.z=e*s-n*i,this}},{key:"dot",value:function(t){return this.x*t.x+this.y*t.y+this.z*t.z}}]),o}()),tv0=new(exports.Vector=Vector),tv1=new Vector,Vertex=function(){function i(t,e,n,o){_classCallCheck(this,i),this.pos=(new Vector).copy(t),this.normal=(new Vector).copy(e),n&&(this.uv=(new Vector).copy(n))&&(this.uv.z=0),o&&(this.color=(new Vector).copy(o))}return _createClass(i,[{key:"clone",value:function(){return new i(this.pos,this.normal,this.uv,this.color)}},{key:"flip",value:function(){this.normal.negate()}},{key:"interpolate",value:function(t,e){return new i(this.pos.clone().lerp(t.pos,e),this.normal.clone().lerp(t.normal,e),this.uv&&t.uv&&this.uv.clone().lerp(t.uv,e),this.color&&t.color&&this.color.clone().lerp(t.color,e))}}]),i}(),Plane=(exports.Vertex=Vertex,function(){function g(t,e){_classCallCheck(this,g),this.normal=t,this.w=e}return _createClass(g,[{key:"clone",value:function(){return new g(this.normal.clone(),this.w)}},{key:"flip",value:function(){this.normal.negate(),this.w=-this.w}},{key:"splitPolygon",value:function(t,e,n,o,i){for(var s=0,l=[],r=0;r<t.vertices.length;r++){var c=this.normal.dot(t.vertices[r].pos)-this.w,c=c<-g.EPSILON?2:g.EPSILON<c?1:0;s|=c,l.push(c)}switch(s){case 0:(0<this.normal.dot(t.plane.normal)?e:n).push(t);break;case 1:o.push(t);break;case 2:i.push(t);break;case 3:for(var a=[],h=[],u=0;u<t.vertices.length;u++){var p=(u+1)%t.vertices.length,y=l[u],f=l[p],v=t.vertices[u],p=t.vertices[p];2!=y&&a.push(v),1!=y&&h.push(2!=y?v.clone():v),3==(y|f)&&(y=(this.w-this.normal.dot(v.pos))/this.normal.dot(tv0.copy(p.pos).sub(v.pos)),f=v.interpolate(p,y),a.push(f),h.push(f.clone()))}3<=a.length&&o.push(new Polygon(a,t.shared)),3<=h.length&&i.push(new Polygon(h,t.shared))}}}]),g}()),Polygon=((exports.Plane=Plane).EPSILON=1e-5,Plane.fromPoints=function(t,e,n){e=tv0.copy(e).sub(t).cross(tv1.copy(n).sub(t)).normalize();return new Plane(e.clone(),e.dot(t))},function(){function n(t,e){_classCallCheck(this,n),this.vertices=t,this.shared=e,this.plane=Plane.fromPoints(t[0].pos,t[1].pos,t[2].pos)}return _createClass(n,[{key:"clone",value:function(){return new n(this.vertices.map(function(t){return t.clone()}),this.shared)}},{key:"flip",value:function(){this.vertices.reverse().forEach(function(t){return t.flip()}),this.plane.flip()}}]),n}()),Node=(exports.Polygon=Polygon,function(){function i(t){_classCallCheck(this,i),this.plane=null,this.front=null,this.back=null,this.polygons=[],t&&this.build(t)}return _createClass(i,[{key:"clone",value:function(){var t=new i;return t.plane=this.plane&&this.plane.clone(),t.front=this.front&&this.front.clone(),t.back=this.back&&this.back.clone(),t.polygons=this.polygons.map(function(t){return t.clone()}),t}},{key:"invert",value:function(){for(var t=0;t<this.polygons.length;t++)this.polygons[t].flip();this.plane&&this.plane.flip(),this.front&&this.front.invert(),this.back&&this.back.invert();var e=this.front;this.front=this.back,this.back=e}},{key:"clipPolygons",value:function(t){if(!this.plane)return t.slice();for(var e=[],n=[],o=0;o<t.length;o++)this.plane.splitPolygon(t[o],e,n,e,n);return this.front&&(e=this.front.clipPolygons(e)),n=this.back?this.back.clipPolygons(n):[],e.concat(n)}},{key:"clipTo",value:function(t){this.polygons=t.clipPolygons(this.polygons),this.front&&this.front.clipTo(t),this.back&&this.back.clipTo(t)}},{key:"allPolygons",value:function(){var t=this.polygons.slice();return this.front&&(t=t.concat(this.front.allPolygons())),t=this.back?t.concat(this.back.allPolygons()):t}},{key:"build",value:function(t){if(t.length){this.plane||(this.plane=t[0].plane.clone());for(var e=[],n=[],o=0;o<t.length;o++)this.plane.splitPolygon(t[o],this.polygons,this.polygons,e,n);e.length&&(this.front||(this.front=new i),this.front.build(e)),n.length&&(this.back||(this.back=new i),this.back.build(n))}}}]),i}());CSG.fromJSON=function(t){return CSG.fromPolygons(t.polygons.map(function(t){return new Polygon(t.vertices.map(function(t){return new Vertex(t.pos,t.normal,t.uv)}),t.shared)}))};
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWxzL2NzZy9jc2ctbGliLmpzIl0sIm5hbWVzIjpbIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiQ1NHIiwiX2NsYXNzQ2FsbENoZWNrIiwidGhpcyIsInBvbHlnb25zIiwiY3NnIiwibWFwIiwicCIsImNsb25lIiwiYSIsIk5vZGUiLCJiIiwiY2xpcFRvIiwiaW52ZXJ0IiwiYnVpbGQiLCJhbGxQb2x5Z29ucyIsImZyb21Qb2x5Z29ucyIsImZvckVhY2giLCJmbGlwIiwiVmVjdG9yIiwieCIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsInkiLCJ6IiwidiIsInQiLCJhZGQiLCJ0djAiLCJjb3B5Iiwic3ViIiwidGltZXMiLCJkaXZpZGVkQnkiLCJzcXJ0IiwiTWF0aCIsInBvdyIsInVuaXQiLCJheCIsImF5IiwiYXoiLCJieCIsImJ5IiwiYnoiLCJ0djEiLCJWZXJ0ZXgiLCJwb3MiLCJub3JtYWwiLCJ1diIsImNvbG9yIiwibmVnYXRlIiwib3RoZXIiLCJsZXJwIiwiUGxhbmUiLCJ3IiwicG9seWdvbiIsImNvcGxhbmFyRnJvbnQiLCJjb3BsYW5hckJhY2siLCJmcm9udCIsImJhY2siLCJwb2x5Z29uVHlwZSIsInR5cGVzIiwiaSIsInZlcnRpY2VzIiwiZG90IiwidHlwZSIsIkVQU0lMT04iLCJwdXNoIiwicGxhbmUiLCJmIiwiaiIsInRpIiwidGoiLCJ2aSIsInZqIiwiUG9seWdvbiIsInNoYXJlZCIsImZyb21Qb2ludHMiLCJjIiwibiIsImNyb3NzIiwibm9ybWFsaXplIiwibm9kZSIsIkNPUExBTkFSIiwiRlJPTlQiLCJ0ZW1wIiwic2xpY2UiLCJzcGxpdFBvbHlnb24iLCJjbGlwUG9seWdvbnMiLCJTUEFOTklORyIsImNvbmNhdCIsImJzcCIsIkJBQ0siLCJpbnRlcnBvbGF0ZSIsImZyb21KU09OIiwianNvbiJdLCJtYXBwaW5ncyI6Im1KQUFBLElBQUFBLE9BQUFDLHVCQUFBQyxRQUFBLFUscWdC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Yi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmNsYXNzIENTRyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucG9seWdvbnMgPSBbXTtcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIGxldCBjc2cgPSBuZXcgQ1NHKCk7XG4gICAgICAgIGNzZy5wb2x5Z29ucyA9IHRoaXMucG9seWdvbnMubWFwKHA9PnAuY2xvbmUoKSk7XG4gICAgICAgIHJldHVybiBjc2c7XG4gICAgfVxuXG4gICAgdG9Qb2x5Z29ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9seWdvbnM7XG4gICAgfVxuXG4gICAgdW5pb24oY3NnKSB7XG4gICAgICAgIGxldCBhID0gbmV3IE5vZGUodGhpcy5jbG9uZSgpLnBvbHlnb25zKTtcbiAgICAgICAgbGV0IGIgPSBuZXcgTm9kZShjc2cuY2xvbmUoKS5wb2x5Z29ucyk7XG4gICAgICAgIGEuY2xpcFRvKGIpO1xuICAgICAgICBiLmNsaXBUbyhhKTtcbiAgICAgICAgYi5pbnZlcnQoKTtcbiAgICAgICAgYi5jbGlwVG8oYSk7XG4gICAgICAgIGIuaW52ZXJ0KCk7XG4gICAgICAgIGEuYnVpbGQoYi5hbGxQb2x5Z29ucygpKTtcbiAgICAgICAgcmV0dXJuIENTRy5mcm9tUG9seWdvbnMoYS5hbGxQb2x5Z29ucygpKTtcbiAgICB9XG5cbiAgICBzdWJ0cmFjdChjc2cpIHtcbiAgICAgICAgbGV0IGEgPSBuZXcgTm9kZSh0aGlzLmNsb25lKCkucG9seWdvbnMpO1xuICAgICAgICBsZXQgYiA9IG5ldyBOb2RlKGNzZy5jbG9uZSgpLnBvbHlnb25zKTtcbiAgICAgICAgYS5pbnZlcnQoKTtcbiAgICAgICAgYS5jbGlwVG8oYik7XG4gICAgICAgIGIuY2xpcFRvKGEpO1xuICAgICAgICBiLmludmVydCgpO1xuICAgICAgICBiLmNsaXBUbyhhKTtcbiAgICAgICAgYi5pbnZlcnQoKTtcbiAgICAgICAgYS5idWlsZChiLmFsbFBvbHlnb25zKCkpO1xuICAgICAgICBhLmludmVydCgpO1xuICAgICAgICByZXR1cm4gQ1NHLmZyb21Qb2x5Z29ucyhhLmFsbFBvbHlnb25zKCkpO1xuICAgIH1cblxuICAgIGludGVyc2VjdChjc2cpIHtcbiAgICAgICAgbGV0IGEgPSBuZXcgTm9kZSh0aGlzLmNsb25lKCkucG9seWdvbnMpO1xuICAgICAgICBsZXQgYiA9IG5ldyBOb2RlKGNzZy5jbG9uZSgpLnBvbHlnb25zKTtcbiAgICAgICAgYS5pbnZlcnQoKTtcbiAgICAgICAgYi5jbGlwVG8oYSk7XG4gICAgICAgIGIuaW52ZXJ0KCk7XG4gICAgICAgIGEuY2xpcFRvKGIpO1xuICAgICAgICBiLmNsaXBUbyhhKTtcbiAgICAgICAgYS5idWlsZChiLmFsbFBvbHlnb25zKCkpO1xuICAgICAgICBhLmludmVydCgpO1xuICAgICAgICByZXR1cm4gQ1NHLmZyb21Qb2x5Z29ucyhhLmFsbFBvbHlnb25zKCkpO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG5ldyBDU0cgc29saWQgd2l0aCBzb2xpZCBhbmQgZW1wdHkgc3BhY2Ugc3dpdGNoZWQuIFRoaXMgc29saWQgaXNcbiAgICAvLyBub3QgbW9kaWZpZWQuXG4gICAgaW52ZXJzZSgpIHtcbiAgICAgICAgbGV0IGNzZyA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgY3NnLnBvbHlnb25zLmZvckVhY2gocD0+cC5mbGlwKCkpO1xuICAgICAgICByZXR1cm4gY3NnO1xuICAgIH1cbn1cblxuQ1NHLmZyb21Qb2x5Z29ucz1mdW5jdGlvbihwb2x5Z29ucykge1xuICAgIGxldCBjc2cgPSBuZXcgQ1NHKCk7XG4gICAgY3NnLnBvbHlnb25zID0gcG9seWdvbnM7XG4gICAgcmV0dXJuIGNzZztcbn07XG5cbmNsYXNzIFZlY3RvciB7XG4gICAgY29uc3RydWN0b3IoeD0wLCB5PTAsIHo9MCkge1xuICAgICAgICB0aGlzLng9eDtcbiAgICAgICAgdGhpcy55PXk7XG4gICAgICAgIHRoaXMuej16O1xuICAgIH1cbiAgICBjb3B5KHYpe1xuICAgICAgICB0aGlzLng9di54O1xuICAgICAgICB0aGlzLnk9di55O1xuICAgICAgICB0aGlzLno9di56O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmVjdG9yKHRoaXMueCx0aGlzLnksdGhpcy56KTtcbiAgICB9XG4gICAgbmVnYXRlKCkge1xuICAgICAgICB0aGlzLngqPS0xO1xuICAgICAgICB0aGlzLnkqPS0xO1xuICAgICAgICB0aGlzLnoqPS0xO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgYWRkKGEpIHtcbiAgICAgICAgdGhpcy54Kz1hLng7XG4gICAgICAgIHRoaXMueSs9YS55O1xuICAgICAgICB0aGlzLnorPWEuejtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN1YihhKSB7XG4gICAgICAgIHRoaXMueC09YS54O1xuICAgICAgICB0aGlzLnktPWEueTtcbiAgICAgICAgdGhpcy56LT1hLno7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB0aW1lcyhhKSB7XG4gICAgICAgIHRoaXMueCo9YTtcbiAgICAgICAgdGhpcy55Kj1hO1xuICAgICAgICB0aGlzLnoqPWE7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkaXZpZGVkQnkoYSkge1xuICAgICAgICB0aGlzLngvPWE7XG4gICAgICAgIHRoaXMueS89YTtcbiAgICAgICAgdGhpcy56Lz1hO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbGVycChhLCB0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZCh0djAuY29weShhKS5zdWIodGhpcykudGltZXModCkpO1xuICAgIH1cbiAgICB1bml0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXZpZGVkQnkodGhpcy5sZW5ndGgoKSk7XG4gICAgfVxuICAgIGxlbmd0aCgpe1xuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KCh0aGlzLngqKjIpKyh0aGlzLnkqKjIpKyh0aGlzLnoqKjIpKTtcbiAgICB9XG4gICAgbm9ybWFsaXplKCl7XG4gICAgICAgIHJldHVybiB0aGlzLnVuaXQoKTtcbiAgICB9XG4gICAgY3Jvc3MoYikge1xuICAgICAgICBsZXQgYSA9IHRoaXM7XG5cdFx0Y29uc3QgYXggPSBhLngsIGF5ID0gYS55LCBheiA9IGEuejtcblx0XHRjb25zdCBieCA9IGIueCwgYnkgPSBiLnksIGJ6ID0gYi56O1xuXG5cdFx0dGhpcy54ID0gYXkgKiBieiAtIGF6ICogYnk7XG5cdFx0dGhpcy55ID0gYXogKiBieCAtIGF4ICogYno7XG5cdFx0dGhpcy56ID0gYXggKiBieSAtIGF5ICogYng7XG5cblx0XHRyZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZG90KGIpe1xuICAgICAgICByZXR1cm4gKHRoaXMueCpiLngpKyh0aGlzLnkqYi55KSsodGhpcy56KmIueik7XG4gICAgfVxufVxuXG5sZXQgdHYwPW5ldyBWZWN0b3IoKTtcbmxldCB0djE9bmV3IFZlY3RvcigpO1xuXG5jbGFzcyBWZXJ0ZXgge1xuXG4gICAgY29uc3RydWN0b3IocG9zLCBub3JtYWwsIHV2LCBjb2xvcikge1xuICAgICAgICB0aGlzLnBvcyA9IG5ldyBWZWN0b3IoKS5jb3B5KHBvcyk7XG4gICAgICAgIHRoaXMubm9ybWFsID0gbmV3IFZlY3RvcigpLmNvcHkobm9ybWFsKTtcbiAgICAgICAgdXYgJiYgKHRoaXMudXYgPSBuZXcgVmVjdG9yKCkuY29weSh1dikpICYmICh0aGlzLnV2Lno9MCk7XG4gICAgICAgIGNvbG9yICYmICh0aGlzLmNvbG9yID0gbmV3IFZlY3RvcigpLmNvcHkoY29sb3IpKTtcbiAgICB9XG5cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBWZXJ0ZXgodGhpcy5wb3MsdGhpcy5ub3JtYWwsdGhpcy51dix0aGlzLmNvbG9yKTtcbiAgICB9XG5cbiAgICBmbGlwKCkge1xuICAgICAgICB0aGlzLm5vcm1hbC5uZWdhdGUoKTtcbiAgICB9XG5cbiAgICBpbnRlcnBvbGF0ZShvdGhlciwgdCkge1xuICAgICAgICByZXR1cm4gbmV3IFZlcnRleCh0aGlzLnBvcy5jbG9uZSgpLmxlcnAob3RoZXIucG9zLCB0KSx0aGlzLm5vcm1hbC5jbG9uZSgpLmxlcnAob3RoZXIubm9ybWFsLCB0KSx0aGlzLnV2JiZvdGhlci51diYmdGhpcy51di5jbG9uZSgpLmxlcnAob3RoZXIudXYsIHQpLCB0aGlzLmNvbG9yJiZvdGhlci5jb2xvciYmdGhpcy5jb2xvci5jbG9uZSgpLmxlcnAob3RoZXIuY29sb3IsdCkpO1xuICAgIH1cbn1cblxuY2xhc3MgUGxhbmUge1xuICAgIGNvbnN0cnVjdG9yKG5vcm1hbCwgdykge1xuICAgICAgICB0aGlzLm5vcm1hbCA9IG5vcm1hbDtcbiAgICAgICAgdGhpcy53ID0gdztcbiAgICB9XG5cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQbGFuZSh0aGlzLm5vcm1hbC5jbG9uZSgpLHRoaXMudyk7XG4gICAgfVxuXG4gICAgZmxpcCgpIHtcbiAgICAgICAgdGhpcy5ub3JtYWwubmVnYXRlKCk7XG4gICAgICAgIHRoaXMudyA9IC10aGlzLnc7XG4gICAgfVxuXG4gICAgc3BsaXRQb2x5Z29uKHBvbHlnb24sIGNvcGxhbmFyRnJvbnQsIGNvcGxhbmFyQmFjaywgZnJvbnQsIGJhY2spIHtcbiAgICAgICAgY29uc3QgQ09QTEFOQVIgPSAwO1xuICAgICAgICBjb25zdCBGUk9OVCA9IDE7XG4gICAgICAgIGNvbnN0IEJBQ0sgPSAyO1xuICAgICAgICBjb25zdCBTUEFOTklORyA9IDM7XG5cbiAgICAgICAgbGV0IHBvbHlnb25UeXBlID0gMDtcbiAgICAgICAgbGV0IHR5cGVzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9seWdvbi52ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IHQgPSB0aGlzLm5vcm1hbC5kb3QocG9seWdvbi52ZXJ0aWNlc1tpXS5wb3MpIC0gdGhpcy53O1xuICAgICAgICAgICAgbGV0IHR5cGUgPSAodCA8IC1QbGFuZS5FUFNJTE9OKSA/IEJBQ0sgOiAodCA+IFBsYW5lLkVQU0lMT04pID8gRlJPTlQgOiBDT1BMQU5BUjtcbiAgICAgICAgICAgIHBvbHlnb25UeXBlIHw9IHR5cGU7XG4gICAgICAgICAgICB0eXBlcy5wdXNoKHR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChwb2x5Z29uVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDT1BMQU5BUjpcbiAgICAgICAgICAgICAgICAodGhpcy5ub3JtYWwuZG90KHBvbHlnb24ucGxhbmUubm9ybWFsKSA+IDAgPyBjb3BsYW5hckZyb250IDogY29wbGFuYXJCYWNrKS5wdXNoKHBvbHlnb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGUk9OVDpcbiAgICAgICAgICAgICAgICBmcm9udC5wdXNoKHBvbHlnb24pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBCQUNLOlxuICAgICAgICAgICAgICAgIGJhY2sucHVzaChwb2x5Z29uKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU1BBTk5JTkc6XG4gICAgICAgICAgICAgICAgbGV0IGYgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgYiA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9seWdvbi52ZXJ0aWNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaiA9IChpICsgMSkgJSBwb2x5Z29uLnZlcnRpY2VzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpID0gdHlwZXNbaV1cbiAgICAgICAgICAgICAgICAgICAgLCB0aiA9IHR5cGVzW2pdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmkgPSBwb2x5Z29uLnZlcnRpY2VzW2ldXG4gICAgICAgICAgICAgICAgICAgICwgdmogPSBwb2x5Z29uLnZlcnRpY2VzW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGkgIT0gQkFDSylcbiAgICAgICAgICAgICAgICAgICAgICAgIGYucHVzaCh2aSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aSAhPSBGUk9OVClcbiAgICAgICAgICAgICAgICAgICAgICAgIGIucHVzaCh0aSAhPSBCQUNLID8gdmkuY2xvbmUoKSA6IHZpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0aSB8IHRqKSA9PSBTUEFOTklORykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSAodGhpcy53IC0gdGhpcy5ub3JtYWwuZG90KHZpLnBvcykpIC8gdGhpcy5ub3JtYWwuZG90KHR2MC5jb3B5KHZqLnBvcykuc3ViKHZpLnBvcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSB2aS5pbnRlcnBvbGF0ZSh2aiwgdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmLnB1c2godik7XG4gICAgICAgICAgICAgICAgICAgICAgICBiLnB1c2godi5jbG9uZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZi5sZW5ndGggPj0gMylcbiAgICAgICAgICAgICAgICAgICAgZnJvbnQucHVzaChuZXcgUG9seWdvbihmLHBvbHlnb24uc2hhcmVkKSk7XG4gICAgICAgICAgICAgICAgaWYgKGIubGVuZ3RoID49IDMpXG4gICAgICAgICAgICAgICAgICAgIGJhY2sucHVzaChuZXcgUG9seWdvbihiLHBvbHlnb24uc2hhcmVkKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cblxuUGxhbmUuRVBTSUxPTiA9IDFlLTU7XG5cblBsYW5lLmZyb21Qb2ludHMgPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgbGV0IG4gPSB0djAuY29weShiKS5zdWIoYSkuY3Jvc3ModHYxLmNvcHkoYykuc3ViKGEpKS5ub3JtYWxpemUoKTtcbiAgICByZXR1cm4gbmV3IFBsYW5lKG4uY2xvbmUoKSxuLmRvdChhKSk7XG59O1xuXG5jbGFzcyBQb2x5Z29uIHtcbiAgICBjb25zdHJ1Y3Rvcih2ZXJ0aWNlcywgc2hhcmVkKSB7XG4gICAgICAgIHRoaXMudmVydGljZXMgPSB2ZXJ0aWNlcztcbiAgICAgICAgdGhpcy5zaGFyZWQgPSBzaGFyZWQ7XG4gICAgICAgIHRoaXMucGxhbmUgPSBQbGFuZS5mcm9tUG9pbnRzKHZlcnRpY2VzWzBdLnBvcywgdmVydGljZXNbMV0ucG9zLCB2ZXJ0aWNlc1syXS5wb3MpO1xuICAgIH1cbiAgICBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2x5Z29uKHRoaXMudmVydGljZXMubWFwKHY9PnYuY2xvbmUoKSksdGhpcy5zaGFyZWQpO1xuICAgIH1cbiAgICBmbGlwKCkge1xuICAgICAgICB0aGlzLnZlcnRpY2VzLnJldmVyc2UoKS5mb3JFYWNoKHY9PnYuZmxpcCgpKTtcbiAgICAgICAgdGhpcy5wbGFuZS5mbGlwKCk7XG4gICAgfVxufVxuXG5jbGFzcyBOb2RlIHtcbiAgICBjb25zdHJ1Y3Rvcihwb2x5Z29ucykge1xuICAgICAgICB0aGlzLnBsYW5lID0gbnVsbDtcbiAgICAgICAgdGhpcy5mcm9udCA9IG51bGw7XG4gICAgICAgIHRoaXMuYmFjayA9IG51bGw7XG4gICAgICAgIHRoaXMucG9seWdvbnMgPSBbXTtcbiAgICAgICAgaWYgKHBvbHlnb25zKVxuICAgICAgICAgICAgdGhpcy5idWlsZChwb2x5Z29ucyk7XG4gICAgfVxuICAgIGNsb25lKCkge1xuICAgICAgICBsZXQgbm9kZSA9IG5ldyBOb2RlKCk7XG4gICAgICAgIG5vZGUucGxhbmUgPSB0aGlzLnBsYW5lICYmIHRoaXMucGxhbmUuY2xvbmUoKTtcbiAgICAgICAgbm9kZS5mcm9udCA9IHRoaXMuZnJvbnQgJiYgdGhpcy5mcm9udC5jbG9uZSgpO1xuICAgICAgICBub2RlLmJhY2sgPSB0aGlzLmJhY2sgJiYgdGhpcy5iYWNrLmNsb25lKCk7XG4gICAgICAgIG5vZGUucG9seWdvbnMgPSB0aGlzLnBvbHlnb25zLm1hcChwPT5wLmNsb25lKCkpO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBpbnZlcnQoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb2x5Z29ucy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMucG9seWdvbnNbaV0uZmxpcCgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5wbGFuZSAmJiB0aGlzLnBsYW5lLmZsaXAoKTtcbiAgICAgICAgdGhpcy5mcm9udCAmJiB0aGlzLmZyb250LmludmVydCgpO1xuICAgICAgICB0aGlzLmJhY2sgJiYgdGhpcy5iYWNrLmludmVydCgpO1xuICAgICAgICBsZXQgdGVtcCA9IHRoaXMuZnJvbnQ7XG4gICAgICAgIHRoaXMuZnJvbnQgPSB0aGlzLmJhY2s7XG4gICAgICAgIHRoaXMuYmFjayA9IHRlbXA7XG4gICAgfVxuXG4gICAgY2xpcFBvbHlnb25zKHBvbHlnb25zKSB7XG4gICAgICAgIGlmICghdGhpcy5wbGFuZSlcbiAgICAgICAgICAgIHJldHVybiBwb2x5Z29ucy5zbGljZSgpO1xuICAgICAgICBsZXQgZnJvbnQgPSBbXVxuICAgICAgICAgICwgYmFjayA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvbHlnb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnBsYW5lLnNwbGl0UG9seWdvbihwb2x5Z29uc1tpXSwgZnJvbnQsIGJhY2ssIGZyb250LCBiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mcm9udClcbiAgICAgICAgICAgIGZyb250ID0gdGhpcy5mcm9udC5jbGlwUG9seWdvbnMoZnJvbnQpO1xuICAgICAgICBpZiAodGhpcy5iYWNrKVxuICAgICAgICAgICAgYmFjayA9IHRoaXMuYmFjay5jbGlwUG9seWdvbnMoYmFjayk7XG4gICAgICAgIGVsc2UgXG4gICAgICAgICAgICBiYWNrID0gW107XG4gICAgICAgIHJldHVybiBmcm9udC5jb25jYXQoYmFjayk7XG4gICAgfVxuXG4gICAgY2xpcFRvKGJzcCkge1xuICAgICAgICB0aGlzLnBvbHlnb25zID0gYnNwLmNsaXBQb2x5Z29ucyh0aGlzLnBvbHlnb25zKTtcbiAgICAgICAgaWYgKHRoaXMuZnJvbnQpXG4gICAgICAgICAgICB0aGlzLmZyb250LmNsaXBUbyhic3ApO1xuICAgICAgICBpZiAodGhpcy5iYWNrKVxuICAgICAgICAgICAgdGhpcy5iYWNrLmNsaXBUbyhic3ApO1xuICAgIH1cblxuICAgIGFsbFBvbHlnb25zKCkge1xuICAgICAgICBsZXQgcG9seWdvbnMgPSB0aGlzLnBvbHlnb25zLnNsaWNlKCk7XG4gICAgICAgIGlmICh0aGlzLmZyb250KVxuICAgICAgICAgICAgcG9seWdvbnMgPSBwb2x5Z29ucy5jb25jYXQodGhpcy5mcm9udC5hbGxQb2x5Z29ucygpKTtcbiAgICAgICAgaWYgKHRoaXMuYmFjaylcbiAgICAgICAgICAgIHBvbHlnb25zID0gcG9seWdvbnMuY29uY2F0KHRoaXMuYmFjay5hbGxQb2x5Z29ucygpKTtcbiAgICAgICAgcmV0dXJuIHBvbHlnb25zO1xuICAgIH1cblxuICAgIGJ1aWxkKHBvbHlnb25zKSB7XG4gICAgICAgIGlmICghcG9seWdvbnMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoIXRoaXMucGxhbmUpXG4gICAgICAgICAgICB0aGlzLnBsYW5lID0gcG9seWdvbnNbMF0ucGxhbmUuY2xvbmUoKTtcbiAgICAgICAgbGV0IGZyb250ID0gW11cbiAgICAgICAgICAsIGJhY2sgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2x5Z29ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wbGFuZS5zcGxpdFBvbHlnb24ocG9seWdvbnNbaV0sIHRoaXMucG9seWdvbnMsIHRoaXMucG9seWdvbnMsIGZyb250LCBiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbnQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZnJvbnQpXG4gICAgICAgICAgICAgICAgdGhpcy5mcm9udCA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICB0aGlzLmZyb250LmJ1aWxkKGZyb250KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmFjay5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5iYWNrKVxuICAgICAgICAgICAgICAgIHRoaXMuYmFjayA9IG5ldyBOb2RlKCk7XG4gICAgICAgICAgICB0aGlzLmJhY2suYnVpbGQoYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkNTRy5mcm9tSlNPTj1mdW5jdGlvbihqc29uKXtcbiAgICByZXR1cm4gQ1NHLmZyb21Qb2x5Z29ucyhqc29uLnBvbHlnb25zLm1hcChwPT5uZXcgUG9seWdvbihwLnZlcnRpY2VzLm1hcCh2PT4gbmV3IFZlcnRleCh2LnBvcyx2Lm5vcm1hbCx2LnV2KSkscC5zaGFyZWQpKSk7XG59O1xuXG5leHBvcnQgeyBDU0csIFZlcnRleCwgVmVjdG9yLCBQb2x5Z29uLCBQbGFuZSB9O1xuIl19
@@ -1,84 +1,2 @@
1
- "use strict";
2
-
3
- var _react = _interopRequireDefault(require("react"));
4
-
5
- var _csgLib = require("./csg-lib.js");
6
-
7
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
8
-
9
- var gWorkersStarted = false;
10
- var gWorker;
11
- var gWorkerUrl;
12
- var taskId = 0;
13
- var tasks = {};
14
-
15
- var spawnWorker = function spawnWorker() {
16
- var worker = new Worker(gWorkerUrl);
17
-
18
- worker.onmessage = function (e) {
19
- var rslt = JSON.parse(e.data);
20
- var task = tasks[rslt.taskId];
21
- delete tasks[rslt.taskId];
22
- task.resolve(_csgLib.CSG.fromJSON(rslt.result)); //console.log('Message received from worker');
23
-
24
- gWorker.busy = false;
25
- };
26
-
27
- return gWorker = {
28
- worker: worker,
29
- busy: false
30
- };
31
- };
32
-
33
- var getWorker = function getWorker() {
34
- if (!gWorkersStarted) {
35
- gWorkersStarted = true;
36
- return fetch('../csg-lib.js').then(function (response) {
37
- return response.text().then(function (text) {
38
- text = text.slice(0, text.lastIndexOf('export'));
39
- var code = text + "\n self.onmessage=(message)=>{\n let task = JSON.parse(message.data)\n //console.log(\"Got task:\"+task.op+' '+task.taskId)\n postMessage(JSON.stringify({\n taskId:task.taskId,\n result : CSG.fromJSON(task.a)[task.op](CSG.fromJSON(task.b))\n }))\n }\n console.log('CSG worker started!')";
40
- var blob = new Blob([code], {
41
- type: 'application/javascript'
42
- });
43
- gWorkerUrl = URL.createObjectURL(blob);
44
- }).then(function () {
45
- return spawnWorker();
46
- });
47
- });
48
- }
49
-
50
- if (gWorker && !gWorker.busy) {
51
- gWorker.busy = true;
52
- return {
53
- then: function then(fn) {
54
- return fn(gWorker);
55
- }
56
- };
57
- }
58
-
59
- return {
60
- then: function then() {
61
- return this;
62
- }
63
- };
64
- };
65
-
66
- _csgLib.CSG.doAsync = function (a, op, b) {
67
- return getWorker().then(function (worker) {
68
- var task = {
69
- a: a,
70
- op: op,
71
- b: b,
72
- taskId: taskId
73
- };
74
- tasks[taskId] = task;
75
- taskId++;
76
- task.result = new Promise(function (resolve, reject) {
77
- task.resolve = resolve; //console.log("posting to worker:")
78
-
79
- worker.busy = true;
80
- worker.worker.postMessage(JSON.stringify(task));
81
- });
82
- return task.result;
83
- });
84
- };
1
+ "use strict";var _react=_interopRequireDefault(require("react")),_csgLib=require("./csg-lib.js");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var gWorker,gWorkerUrl,gWorkersStarted=!1,taskId=0,tasks={},spawnWorker=function(){var e=new Worker(gWorkerUrl);return e.onmessage=function(e){var e=JSON.parse(e.data),r=tasks[e.taskId];delete tasks[e.taskId],r.resolve(_csgLib.CSG.fromJSON(e.result)),gWorker.busy=!1},gWorker={worker:e,busy:!1}},getWorker=function(){return gWorkersStarted?gWorker&&!gWorker.busy?(gWorker.busy=!0,{then:function(e){return e(gWorker)}}):{then:function(){return this}}:(gWorkersStarted=!0,fetch("../csg-lib.js").then(function(e){return e.text().then(function(e){e=e.slice(0,e.lastIndexOf("export"));e=new Blob([e+"\n self.onmessage=(message)=>{\n let task = JSON.parse(message.data)\n //console.log(\"Got task:\"+task.op+' '+task.taskId)\n postMessage(JSON.stringify({\n taskId:task.taskId,\n result : CSG.fromJSON(task.a)[task.op](CSG.fromJSON(task.b))\n }))\n }\n console.log('CSG worker started!')"],{type:"application/javascript"});gWorkerUrl=URL.createObjectURL(e)}).then(function(){return spawnWorker()})}))};_csgLib.CSG.doAsync=function(e,r,n){return getWorker().then(function(t){var s={a:e,op:r,b:n,taskId:taskId};return tasks[taskId]=s,taskId++,s.result=new Promise(function(e,r){s.resolve=e,t.busy=!0,t.worker.postMessage(JSON.stringify(s))}),s.result})};
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInV0aWxzL2NzZy9jc2ctd29ya2VyLmpzIl0sIm5hbWVzIjpbIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NzZ0xpYiIsImdXb3JrZXIiLCJnV29ya2VyVXJsIiwiZ1dvcmtlcnNTdGFydGVkIiwidGFza0lkIiwiV29ya2VyIiwidGFza3MiLCJvbm1lc3NhZ2UiLCJlIiwicnNsdCIsIkpTT04iLCJwYXJzZSIsImRhdGEiLCJzcGF3bldvcmtlciIsInRhc2siLCJyZXNvbHZlIiwiQ1NHIiwiZnJvbUpTT04iLCJyZXN1bHQiLCJidXN5IiwiZm4iLCJ0aGVuIiwidGhpcyIsInJlc3BvbnNlIiwid29ya2VyIiwidGV4dCIsInNsaWNlIiwibGFzdEluZGV4T2YiLCJibG9iIiwiY29kZSIsIkJsb2IiLCJ0eXBlIiwiY3JlYXRlT2JqZWN0VVJMIiwiZG9Bc3luYyIsImEiLCJvcCIsImIiLCJnZXRXb3JrZXIiLCJQcm9taXNlIiwicmVqZWN0IiwicG9zdE1lc3NhZ2UiLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiJhQUFBLElBQUFBLE9BQUFDLHVCQUFBQyxRQUFBLFVBQ0FDLFFBQUFELFFBQUEsZ0Isd0VBRUEsSUFGQUUsUUFJSUMsV0FGQUMsaUJBQWtCLEVBSWxCQyxPQUFTLEVBSlRELE1BQUFBLEdBQ0FGLFlBQUosV0FDSUMsSUFBQUEsRUFBSixJQUFBRyxPQUFBSCxZQVVPLE9BUEhJLEVBQUtDLFVBQVQsU0FBQUMsR0FLTyxJQUFJQyxFQUFPQyxLQUFLQyxNQUFNSCxFQUFFSSxNQUozQkMsRUFBWVAsTUFBQUcsRUFBWkksZUFDWVAsTUFBT0QsRUFBSkQsUUFNWlUsRUFBS0MsUUFBUUMsUUFBQUEsSUFBSUMsU0FBU1IsRUFBS1MsU0FIL0JqQixRQUFXUyxNQUFLQyxHQUVUTCxRQUFVLENBQUNGLE9BQUFBLEVBQWxCZSxNQUFBLElBR0FsQixVQUFRa0IsV0FOWCxPQUFBaEIsZ0JBdUNJRixVQUFlQSxRQUFma0IsTUFFQWxCLFFBQU9rQixNQUFBLEVBQW9CQyxDQUFBQSxLQUFHbkIsU0FBQUEsR0FBVixPQUFBbUIsRUFBQW5CLFlBQXBCLENBQ0hvQixLQUFBLFdBQUEsT0FBQUMsUUE3QkduQixpQkFBa0IsRUFMZkYsTUFBVSxpQkFBQW9CLEtBQUEsU0FBQUUsR0FBQ0MsT0FBREQsRUFBQUUsT0FBQUosS0FBQSxTQUFBSSxHQUFhQSxFQUFBQSxFQUFBQyxNQUFBLEVBQUFELEVBQUFFLFlBQUEsV0FtQkxDLEVBQVVDLElBQURDLEtBQU8sQ0FuQnpDTCxFQUFBLDZjQW1CeUMsQ0FDbkJNLEtBQUEsMkJBRVY3QixXQUFpQjhCLElBQUFBLGdCQUFqQkosS0FmSlAsS0FBQSxXQURKLE9BQUFSLG9CQWtDUkcsUUFBQUEsSUFBSWlCLFFBSm9CLFNBQU9DLEVBQUFDLEVBQVBDLEdBQWEsT0FBQUMsWUFBQWhCLEtBQUEsU0FBQUcsR0FEakMsSUFBQVYsRUFBQSxDQUFBb0IsRUFBQUEsRUFBQUMsR0FBQUEsRUFBQUMsRUFBQUEsRUFBQWhDLE9BQUFBLFFBT3FCQSxPQXZDekJFLE1BQUFGLFFBQUFVLEVBeUNRVixTQUpSWSxFQUFJaUIsT0FBUSxJQUFBSyxRQUFBLFNBQUdILEVBQU9JLEdBQ1hGLEVBQUFBLFFBQWlCdEIsRUFDWFMsRUFBQUwsTUFBQSxFQUFBSyxFQUFBQSxPQUFBZ0IsWUFBQTlCLEtBQUErQixVQUFBM0IsTUFBUVYsRUFBQUEiLCJmaWxlIjoidXRpbHMvY3NnL2NzZy13b3JrZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQ1NHIH0gZnJvbSAnLi9jc2ctbGliLmpzJztcblxubGV0IGdXb3JrZXJzU3RhcnRlZCA9IGZhbHNlO1xubGV0IGdXb3JrZXI7XG5sZXQgZ1dvcmtlclVybDtcblxubGV0IHRhc2tJZCA9IDA7XG5sZXQgdGFza3M9e307XG5sZXQgc3Bhd25Xb3JrZXI9KCk9PntcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKGdXb3JrZXJVcmwpO1xuXG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICBsZXQgcnNsdCA9IEpTT04ucGFyc2UoZS5kYXRhKTtcbiAgICAgICBsZXQgdGFzayA9IHRhc2tzW3JzbHQudGFza0lkXTtcbiAgICAgICBkZWxldGUgdGFza3NbcnNsdC50YXNrSWRdO1xuICAgICAgIHRhc2sucmVzb2x2ZShDU0cuZnJvbUpTT04ocnNsdC5yZXN1bHQpKTtcbiAgICAgICAvL2NvbnNvbGUubG9nKCdNZXNzYWdlIHJlY2VpdmVkIGZyb20gd29ya2VyJyk7XG4gICAgICAgZ1dvcmtlci5idXN5ID0gZmFsc2U7XG4gICAgfTtcbiAgICByZXR1cm4gZ1dvcmtlciA9IHt3b3JrZXIsYnVzeTpmYWxzZX07XG59O1xuXG5sZXQgZ2V0V29ya2VyPSgpPT57XG4gICAgaWYoIWdXb3JrZXJzU3RhcnRlZCl7XG4gICAgICAgIGdXb3JrZXJzU3RhcnRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBmZXRjaCgnLi4vY3NnLWxpYi5qcycpLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KCkudGhlbihmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgICAgICAgICAgdGV4dCA9IHRleHQuc2xpY2UoMCwgdGV4dC5sYXN0SW5kZXhPZignZXhwb3J0JykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvZGUgPSB0ZXh0ICsgYFxuICAgICAgICAgICAgICAgICAgICBzZWxmLm9ubWVzc2FnZT0obWVzc2FnZSk9PntcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRhc2sgPSBKU09OLnBhcnNlKG1lc3NhZ2UuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIkdvdCB0YXNrOlwiK3Rhc2sub3ArJyAnK3Rhc2sudGFza0lkKVxuICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrSWQ6dGFzay50YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgOiBDU0cuZnJvbUpTT04odGFzay5hKVt0YXNrLm9wXShDU0cuZnJvbUpTT04odGFzay5iKSlcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDU0cgd29ya2VyIHN0YXJ0ZWQhJylgO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbY29kZV0se1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCdcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBnV29ya2VyVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXG4gICAgICAgICAgICB9KS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwYXduV29ya2VyKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmKGdXb3JrZXIgJiYgKCFnV29ya2VyLmJ1c3kpKXtcbiAgICAgICAgZ1dvcmtlci5idXN5ID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4ge3RoZW46KGZuKT0+e3JldHVybiBmbihnV29ya2VyKTt9fTtcbiAgICB9XG4gICAgcmV0dXJue1xuICAgICAgICB0aGVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXM7fVxuICAgIH07XG59O1xuXG5DU0cuZG9Bc3luYz0oYSxvcCxiKT0+e1xuICAgIHJldHVybiBnZXRXb3JrZXIoKS50aGVuKCh3b3JrZXIpPT57XG4gICAgICAgIGxldCB0YXNrPXthLG9wLGIsdGFza0lkfTtcbiAgICAgICAgdGFza3NbdGFza0lkXT10YXNrO1xuICAgICAgICB0YXNrSWQrKztcbiAgICAgICAgdGFzay5yZXN1bHQgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpPT57XG4gICAgICAgICAgICB0YXNrLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInBvc3RpbmcgdG8gd29ya2VyOlwiKVxuICAgICAgICAgICAgd29ya2VyLmJ1c3kgPSB0cnVlO1xuICAgICAgICAgICAgd29ya2VyLndvcmtlci5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh0YXNrKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGFzay5yZXN1bHQ7ICAgICAgICBcbiAgICB9KTtcbn07XG4iXX0=