three-render-objects 1.42.0 → 1.43.0

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.
@@ -1,4 +1,4 @@
1
- import { SphereGeometry, Color, TextureLoader, SRGBColorSpace, MeshBasicMaterial, BackSide, Vector2, WebGLRenderer, Mesh, Timer, PerspectiveCamera, Scene, Raycaster, Vector3, Box3 } from 'three';
1
+ import { Timer, PerspectiveCamera, Scene, SphereGeometry, Color, TextureLoader, SRGBColorSpace, MeshBasicMaterial, BackSide, Vector2, WebGLRenderer, Mesh, Raycaster, Vector3, Box3 } from 'three';
2
2
  import { WebGPURenderer } from 'three/webgpu';
3
3
  import { TrackballControls } from 'three/examples/jsm/controls/TrackballControls.js';
4
4
  import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
@@ -39,89 +39,9 @@ function styleInject(css, ref) {
39
39
  var css_248z = ".scene-nav-info {\n position: absolute;\n bottom: 5px;\n width: 100%;\n text-align: center;\n color: slategrey;\n opacity: 0.7;\n font-size: 10px;\n font-family: sans-serif;\n pointer-events: none;\n user-select: none;\n}\n\n.scene-container canvas:focus {\n outline: none;\n}";
40
40
  styleInject(css_248z);
41
41
 
42
- function _arrayLikeToArray(r, a) {
43
- (null == a || a > r.length) && (a = r.length);
44
- for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
45
- return n;
46
- }
47
- function _arrayWithHoles(r) {
48
- if (Array.isArray(r)) return r;
49
- }
50
- function _arrayWithoutHoles(r) {
51
- if (Array.isArray(r)) return _arrayLikeToArray(r);
52
- }
53
- function _defineProperty(e, r, t) {
54
- return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
55
- value: t,
56
- enumerable: true,
57
- configurable: true,
58
- writable: true
59
- }) : e[r] = t, e;
60
- }
61
- function _iterableToArray(r) {
62
- if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
63
- }
64
- function _iterableToArrayLimit(r, l) {
65
- var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
66
- if (null != t) {
67
- var e,
68
- n,
69
- i,
70
- u,
71
- a = [],
72
- f = true,
73
- o = false;
74
- try {
75
- if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
76
- } catch (r) {
77
- o = true, n = r;
78
- } finally {
79
- try {
80
- if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
81
- } finally {
82
- if (o) throw n;
83
- }
84
- }
85
- return a;
86
- }
87
- }
88
- function _nonIterableRest() {
89
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
90
- }
91
- function _nonIterableSpread() {
92
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
93
- }
94
- function _slicedToArray(r, e) {
95
- return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
96
- }
97
- function _toConsumableArray(r) {
98
- return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
99
- }
100
- function _toPrimitive(t, r) {
101
- if ("object" != typeof t || !t) return t;
102
- var e = t[Symbol.toPrimitive];
103
- if (void 0 !== e) {
104
- var i = e.call(t, r);
105
- if ("object" != typeof i) return i;
106
- throw new TypeError("@@toPrimitive must return a primitive value.");
107
- }
108
- return ("string" === r ? String : Number)(t);
109
- }
110
- function _toPropertyKey(t) {
111
- var i = _toPrimitive(t, "string");
112
- return "symbol" == typeof i ? i : i + "";
113
- }
114
- function _unsupportedIterableToArray(r, a) {
115
- if (r) {
116
- if ("string" == typeof r) return _arrayLikeToArray(r, a);
117
- var t = {}.toString.call(r).slice(8, -1);
118
- 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;
119
- }
120
- }
121
-
122
- var _materialDispose = function materialDispose(material) {
42
+ const materialDispose = material => {
123
43
  if (material instanceof Array) {
124
- material.forEach(_materialDispose);
44
+ material.forEach(materialDispose);
125
45
  } else {
126
46
  if (material.map) {
127
47
  material.map.dispose();
@@ -129,83 +49,83 @@ var _materialDispose = function materialDispose(material) {
129
49
  material.dispose();
130
50
  }
131
51
  };
132
- var _deallocate = function deallocate(obj) {
52
+ const deallocate = obj => {
133
53
  if (obj.geometry) {
134
54
  obj.geometry.dispose();
135
55
  }
136
56
  if (obj.material) {
137
- _materialDispose(obj.material);
57
+ materialDispose(obj.material);
138
58
  }
139
59
  if (obj.texture) {
140
60
  obj.texture.dispose();
141
61
  }
142
62
  if (obj.children) {
143
- obj.children.forEach(_deallocate);
63
+ obj.children.forEach(deallocate);
144
64
  }
145
65
  };
146
- var emptyObject = function emptyObject(obj) {
66
+ const emptyObject = obj => {
147
67
  while (obj.children.length) {
148
- var childObj = obj.children[0];
68
+ const childObj = obj.children[0];
149
69
  obj.remove(childObj);
150
- _deallocate(childObj);
70
+ deallocate(childObj);
151
71
  }
152
72
  };
153
73
 
154
- var three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists
74
+ const three = window.THREE ? window.THREE // Prefer consumption from global THREE, if exists
155
75
  : {
156
- WebGLRenderer: WebGLRenderer,
157
- Scene: Scene,
158
- PerspectiveCamera: PerspectiveCamera,
159
- Raycaster: Raycaster,
160
- SRGBColorSpace: SRGBColorSpace,
161
- TextureLoader: TextureLoader,
162
- Vector2: Vector2,
163
- Vector3: Vector3,
164
- Box3: Box3,
165
- Color: Color,
166
- Mesh: Mesh,
167
- SphereGeometry: SphereGeometry,
168
- MeshBasicMaterial: MeshBasicMaterial,
169
- BackSide: BackSide,
170
- Timer: Timer
76
+ WebGLRenderer,
77
+ Scene,
78
+ PerspectiveCamera,
79
+ Raycaster,
80
+ SRGBColorSpace,
81
+ TextureLoader,
82
+ Vector2,
83
+ Vector3,
84
+ Box3,
85
+ Color,
86
+ Mesh,
87
+ SphereGeometry,
88
+ MeshBasicMaterial,
89
+ BackSide,
90
+ Timer
171
91
  };
172
92
  var threeRenderObjects = Kapsule({
173
93
  props: {
174
94
  width: {
175
- "default": window.innerWidth,
176
- onChange: function onChange(width, state, prevWidth) {
95
+ default: window.innerWidth,
96
+ onChange(width, state, prevWidth) {
177
97
  isNaN(width) && (state.width = prevWidth);
178
98
  }
179
99
  },
180
100
  height: {
181
- "default": window.innerHeight,
182
- onChange: function onChange(height, state, prevHeight) {
101
+ default: window.innerHeight,
102
+ onChange(height, state, prevHeight) {
183
103
  isNaN(height) && (state.height = prevHeight);
184
104
  }
185
105
  },
186
106
  viewOffset: {
187
- "default": [0, 0]
107
+ default: [0, 0]
188
108
  },
189
109
  backgroundColor: {
190
- "default": '#000011'
110
+ default: '#000011'
191
111
  },
192
112
  backgroundImageUrl: {},
193
113
  onBackgroundImageLoaded: {},
194
114
  showNavInfo: {
195
- "default": true
115
+ default: true
196
116
  },
197
117
  skyRadius: {
198
- "default": 50000
118
+ default: 50000
199
119
  },
200
120
  objects: {
201
- "default": []
121
+ default: []
202
122
  },
203
123
  lights: {
204
- "default": []
124
+ default: []
205
125
  },
206
126
  enablePointerInteraction: {
207
- "default": true,
208
- onChange: function onChange(_, state) {
127
+ default: true,
128
+ onChange(_, state) {
209
129
  // Reset hover state
210
130
  state.hoverObj = null;
211
131
  state.tooltip && state.tooltip.content(null);
@@ -213,15 +133,15 @@ var threeRenderObjects = Kapsule({
213
133
  triggerUpdate: false
214
134
  },
215
135
  pointerRaycasterThrottleMs: {
216
- "default": 50,
136
+ default: 50,
217
137
  triggerUpdate: false
218
138
  },
219
139
  lineHoverPrecision: {
220
- "default": 1,
140
+ default: 1,
221
141
  triggerUpdate: false
222
142
  },
223
143
  pointsHoverPrecision: {
224
- "default": 1,
144
+ default: 1,
225
145
  triggerUpdate: false
226
146
  },
227
147
  hoverOrderComparator: {
@@ -229,9 +149,7 @@ var threeRenderObjects = Kapsule({
229
149
  },
230
150
  // keep existing order by default
231
151
  hoverFilter: {
232
- "default": function _default() {
233
- return true;
234
- },
152
+ default: () => true,
235
153
  triggerUpdate: false
236
154
  },
237
155
  // exclude objects from interaction
@@ -239,19 +157,19 @@ var threeRenderObjects = Kapsule({
239
157
  triggerUpdate: false
240
158
  },
241
159
  hoverDuringDrag: {
242
- "default": false,
160
+ default: false,
243
161
  triggerUpdate: false
244
162
  },
245
163
  clickAfterDrag: {
246
- "default": false,
164
+ default: false,
247
165
  triggerUpdate: false
248
166
  },
249
167
  onHover: {
250
- "default": function _default() {},
168
+ default: () => {},
251
169
  triggerUpdate: false
252
170
  },
253
171
  onClick: {
254
- "default": function _default() {},
172
+ default: () => {},
255
173
  triggerUpdate: false
256
174
  },
257
175
  onRightClick: {
@@ -259,28 +177,22 @@ var threeRenderObjects = Kapsule({
259
177
  }
260
178
  },
261
179
  methods: {
262
- tick: function tick(state) {
180
+ tick: function (state) {
263
181
  if (state.initialised) {
264
182
  state.controls.enabled && state.controls.update && state.controls.update(Math.min(1, state.timer.update().getDelta())); // timedelta is required for fly controls
265
183
 
266
184
  state.postProcessingComposer ? state.postProcessingComposer.render() // if using postprocessing, switch the output to it
267
185
  : state.renderer.render(state.scene, state.camera);
268
- state.extraRenderers.forEach(function (r) {
269
- return r.render(state.scene, state.camera);
270
- });
271
- var now = +new Date();
186
+ state.extraRenderers.forEach(r => r.render(state.scene, state.camera));
187
+ const now = +new Date();
272
188
  if (state.enablePointerInteraction && now - state.lastRaycasterCheck >= state.pointerRaycasterThrottleMs) {
273
189
  state.lastRaycasterCheck = now;
274
190
  // Update tooltip and trigger onHover events
275
- var topObject = null;
191
+ let topObject = null;
276
192
  if (state.hoverDuringDrag || !state.isPointerDragging) {
277
- var intersects = this.intersectingObjects(state.pointerPos.x, state.pointerPos.y);
278
- state.hoverOrderComparator && intersects.sort(function (a, b) {
279
- return state.hoverOrderComparator(a.object, b.object);
280
- });
281
- var topIntersect = intersects.find(function (d) {
282
- return state.hoverFilter(d.object);
283
- }) || null;
193
+ const intersects = this.intersectingObjects(state.pointerPos.x, state.pointerPos.y);
194
+ state.hoverOrderComparator && intersects.sort((a, b) => state.hoverOrderComparator(a.object, b.object));
195
+ const topIntersect = intersects.find(d => state.hoverFilter(d.object)) || null;
284
196
  topObject = topIntersect ? topIntersect.object : null;
285
197
  state.intersection = topIntersect || null;
286
198
  }
@@ -294,38 +206,38 @@ var threeRenderObjects = Kapsule({
294
206
  }
295
207
  return this;
296
208
  },
297
- getPointerPos: function getPointerPos(state) {
298
- var _state$pointerPos = state.pointerPos,
299
- x = _state$pointerPos.x,
300
- y = _state$pointerPos.y;
209
+ getPointerPos: function (state) {
210
+ const {
211
+ x,
212
+ y
213
+ } = state.pointerPos;
301
214
  return {
302
- x: x,
303
- y: y
215
+ x,
216
+ y
304
217
  };
305
218
  },
306
- cameraPosition: function cameraPosition(state, position, lookAt, transitionDuration) {
307
- var camera = state.camera;
219
+ cameraPosition: function (state, position, lookAt, transitionDuration) {
220
+ const camera = state.camera;
308
221
 
309
222
  // Setter
310
223
  if (position && state.initialised) {
311
- var _state$povPosTween, _state$povTgtTween;
312
- var finalPos = position;
313
- var finalLookAt = lookAt || {
224
+ const finalPos = position;
225
+ const finalLookAt = lookAt || {
314
226
  x: 0,
315
227
  y: 0,
316
228
  z: 0
317
229
  };
318
230
 
319
231
  // cancel any ongoing pov animation
320
- (_state$povPosTween = state.povPosTween) === null || _state$povPosTween === void 0 || _state$povPosTween.end();
321
- (_state$povTgtTween = state.povTgtTween) === null || _state$povTgtTween === void 0 || _state$povTgtTween.end();
232
+ state.povPosTween?.end();
233
+ state.povTgtTween?.end();
322
234
  if (!transitionDuration) {
323
235
  // no animation
324
236
  setCameraPos(finalPos);
325
237
  setLookAt(finalLookAt);
326
238
  } else {
327
- var camPos = Object.assign({}, camera.position);
328
- var camLookAt = getLookAt();
239
+ const camPos = Object.assign({}, camera.position);
240
+ const camLookAt = getLookAt();
329
241
  state.tweenGroup.add(state.povPosTween = new Tween(camPos).to(finalPos, transitionDuration).easing(Easing.Quadratic.Out).onUpdate(setCameraPos).onComplete(function () {
330
242
  state.povPosTween = undefined;
331
243
  state.tweenGroup.remove(this);
@@ -348,15 +260,17 @@ var threeRenderObjects = Kapsule({
348
260
  //
349
261
 
350
262
  function setCameraPos(pos) {
351
- var x = pos.x,
352
- y = pos.y,
353
- z = pos.z;
263
+ const {
264
+ x,
265
+ y,
266
+ z
267
+ } = pos;
354
268
  if (x !== undefined) camera.position.x = x;
355
269
  if (y !== undefined) camera.position.y = y;
356
270
  if (z !== undefined) camera.position.z = z;
357
271
  }
358
272
  function setLookAt(lookAt) {
359
- var lookAtVect = new three.Vector3(lookAt.x, lookAt.y, lookAt.z);
273
+ const lookAtVect = new three.Vector3(lookAt.x, lookAt.y, lookAt.z);
360
274
  if (state.controls.enabled && state.controls.target) {
361
275
  state.controls.target = lookAtVect;
362
276
  } else {
@@ -368,60 +282,53 @@ var threeRenderObjects = Kapsule({
368
282
  return Object.assign(new three.Vector3(0, 0, -1e3).applyQuaternion(camera.quaternion).add(camera.position));
369
283
  }
370
284
  },
371
- zoomToFit: function zoomToFit(state) {
372
- var transitionDuration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
373
- var padding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10;
374
- for (var _len = arguments.length, bboxArgs = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {
375
- bboxArgs[_key - 3] = arguments[_key];
376
- }
377
- return this.fitToBbox(this.getBbox.apply(this, bboxArgs), transitionDuration, padding);
285
+ zoomToFit: function (state, transitionDuration = 0, padding = 10, bboxArg, preserveLookDirection) {
286
+ return this.fitToBbox(this.getBbox(bboxArg), transitionDuration, padding, preserveLookDirection);
378
287
  },
379
- fitToBbox: function fitToBbox(state, bbox) {
380
- var transitionDuration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
381
- var padding = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 10;
382
- // based on https://discourse.threejs.org/t/camera-zoom-to-fit-object/936/24
383
- var camera = state.camera;
288
+ fitToBbox: function (state, bbox, transitionDuration = 0, padding = 10, preserveLookDirection = false) {
289
+ const camera = state.camera;
384
290
  if (bbox) {
385
- var center = new three.Vector3(0, 0, 0); // reset camera aim to center
386
- var maxBoxSide = Math.max.apply(Math, _toConsumableArray(Object.entries(bbox).map(function (_ref) {
387
- var _ref2 = _slicedToArray(_ref, 2),
388
- coordType = _ref2[0],
389
- coords = _ref2[1];
390
- return Math.max.apply(Math, _toConsumableArray(coords.map(function (c) {
391
- return Math.abs(center[coordType] - c);
392
- })));
393
- }))) * 2;
394
-
395
- // find distance that fits whole bbox within padded fov
396
- var paddedFov = (1 - padding * 2 / state.height) * camera.fov;
397
- var fitHeightDistance = maxBoxSide / Math.atan(paddedFov * Math.PI / 180);
398
- var fitWidthDistance = fitHeightDistance / camera.aspect;
399
- var distance = Math.max(fitHeightDistance, fitWidthDistance);
400
- if (distance > 0) {
401
- var newCameraPosition = center.clone().sub(camera.position).normalize().multiplyScalar(-distance);
402
- this.cameraPosition(newCameraPosition, center, transitionDuration);
403
- }
291
+ camera.updateMatrixWorld();
292
+ const camRight = new three.Vector3();
293
+ const camUp = new three.Vector3();
294
+ const camForward = new three.Vector3();
295
+ const camPos = new three.Vector3();
296
+ camera.getWorldPosition(camPos);
297
+ camera.getWorldDirection(camForward);
298
+ camRight.crossVectors(camForward, camera.up).normalize();
299
+ camUp.crossVectors(camRight, camForward).normalize();
300
+ const paddedFov = (1 - padding * 2 / state.height) * camera.fov;
301
+ const vFovHalf = paddedFov / 2 * (Math.PI / 180);
302
+ const hFovHalf = Math.atan(Math.tan(vFovHalf) * camera.aspect);
303
+ const bboxCenter = new three.Vector3((bbox.x[0] + bbox.x[1]) / 2, (bbox.y[0] + bbox.y[1]) / 2, (bbox.z[0] + bbox.z[1]) / 2);
304
+ const center = preserveLookDirection ? camForward.clone().multiplyScalar(camPos.distanceTo(bboxCenter)).add(camPos) : bboxCenter;
305
+ const distance = Math.max(0, ...[new three.Vector3(bbox.x[0], bbox.y[0], bbox.z[0]), new three.Vector3(bbox.x[0], bbox.y[0], bbox.z[1]), new three.Vector3(bbox.x[0], bbox.y[1], bbox.z[0]), new three.Vector3(bbox.x[0], bbox.y[1], bbox.z[1]), new three.Vector3(bbox.x[1], bbox.y[0], bbox.z[0]), new three.Vector3(bbox.x[1], bbox.y[0], bbox.z[1]), new three.Vector3(bbox.x[1], bbox.y[1], bbox.z[0]), new three.Vector3(bbox.x[1], bbox.y[1], bbox.z[1])].map(corner => {
306
+ const localPos = corner.clone().sub(center);
307
+ return Math.max(Math.abs(localPos.dot(camUp)) / Math.tan(vFovHalf), Math.abs(localPos.dot(camRight)) / Math.tan(hFovHalf)) - localPos.dot(camForward);
308
+ }));
309
+ const dir = camForward.clone().negate();
310
+ const newCameraPos = {
311
+ x: center.x + dir.x * distance,
312
+ y: center.y + dir.y * distance,
313
+ z: center.z + dir.z * distance
314
+ };
315
+ this.cameraPosition(newCameraPos, center, transitionDuration);
404
316
  }
405
317
  return this;
406
318
  },
407
- getBbox: function getBbox(state) {
408
- var objFilter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function () {
409
- return true;
410
- };
411
- var box = new three.Box3(new three.Vector3(0, 0, 0), new three.Vector3(0, 0, 0));
412
- var objs = state.objects.filter(objFilter);
319
+ getBbox: function (state, objFilter = () => true) {
320
+ const box = new three.Box3();
321
+ const objs = state.objects.filter(objFilter);
413
322
  if (!objs.length) return null;
414
- objs.forEach(function (obj) {
415
- return box.expandByObject(obj);
416
- });
323
+ objs.forEach(obj => box.expandByObject(obj));
417
324
 
418
325
  // extract global x,y,z min/max
419
- return Object.assign.apply(Object, _toConsumableArray(['x', 'y', 'z'].map(function (c) {
420
- return _defineProperty({}, c, [box.min[c], box.max[c]]);
326
+ return Object.assign(...['x', 'y', 'z'].map(c => ({
327
+ [c]: [box.min[c], box.max[c]]
421
328
  })));
422
329
  },
423
- getScreenCoords: function getScreenCoords(state, x, y, z) {
424
- var vec = new three.Vector3(x, y, z);
330
+ getScreenCoords: function (state, x, y, z) {
331
+ const vec = new three.Vector3(x, y, z);
425
332
  vec.project(this.camera()); // project to the camera plane
426
333
  return {
427
334
  // align relative pos to canvas dimensions
@@ -429,69 +336,48 @@ var threeRenderObjects = Kapsule({
429
336
  y: -(vec.y - 1) * state.height / 2
430
337
  };
431
338
  },
432
- getSceneCoords: function getSceneCoords(state, screenX, screenY) {
433
- var distance = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
434
- var relCoords = new three.Vector2(screenX / state.width * 2 - 1, -(screenY / state.height) * 2 + 1);
435
- var raycaster = new three.Raycaster();
339
+ getSceneCoords: function (state, screenX, screenY, distance = 0) {
340
+ const relCoords = new three.Vector2(screenX / state.width * 2 - 1, -(screenY / state.height) * 2 + 1);
341
+ const raycaster = new three.Raycaster();
436
342
  raycaster.setFromCamera(relCoords, state.camera);
437
343
  return Object.assign({}, raycaster.ray.at(distance, new three.Vector3()));
438
344
  },
439
- intersectingObjects: function intersectingObjects(state, x, y) {
440
- var relCoords = new three.Vector2(x / state.width * 2 - 1, -(y / state.height) * 2 + 1);
441
- var raycaster = new three.Raycaster();
345
+ intersectingObjects: function (state, x, y) {
346
+ const relCoords = new three.Vector2(x / state.width * 2 - 1, -(y / state.height) * 2 + 1);
347
+ const raycaster = new three.Raycaster();
442
348
  raycaster.params.Line.threshold = state.lineHoverPrecision; // set linePrecision
443
349
  raycaster.params.Points.threshold = state.pointsHoverPrecision; // set pointsPrecision
444
350
  raycaster.setFromCamera(relCoords, state.camera);
445
351
  return raycaster.intersectObjects(state.objects, true);
446
352
  },
447
- renderer: function renderer(state) {
448
- return state.renderer;
449
- },
450
- scene: function scene(state) {
451
- return state.scene;
452
- },
453
- camera: function camera(state) {
454
- return state.camera;
455
- },
456
- postProcessingComposer: function postProcessingComposer(state) {
457
- return state.postProcessingComposer;
458
- },
459
- controls: function controls(state) {
460
- return state.controls;
461
- },
462
- tbControls: function tbControls(state) {
463
- return state.controls;
464
- },
353
+ renderer: state => state.renderer,
354
+ scene: state => state.scene,
355
+ camera: state => state.camera,
356
+ postProcessingComposer: state => state.postProcessingComposer,
357
+ controls: state => state.controls,
358
+ tbControls: state => state.controls,
465
359
  // to be deprecated
466
- _destructor: function _destructor(state) {
467
- var _state$controls, _state$renderer, _state$postProcessing;
360
+ _destructor: function (state) {
468
361
  emptyObject(state.scene);
469
- (_state$controls = state.controls) === null || _state$controls === void 0 || _state$controls.dispose();
470
- (_state$renderer = state.renderer) === null || _state$renderer === void 0 || _state$renderer.dispose();
471
- (_state$postProcessing = state.postProcessingComposer) === null || _state$postProcessing === void 0 || _state$postProcessing.dispose();
362
+ state.controls?.dispose();
363
+ state.renderer?.dispose();
364
+ state.postProcessingComposer?.dispose();
472
365
  }
473
366
  },
474
- stateInit: function stateInit() {
475
- return {
476
- scene: new three.Scene(),
477
- camera: new three.PerspectiveCamera(),
478
- timer: new three.Timer(),
479
- tweenGroup: new Group(),
480
- lastRaycasterCheck: 0
481
- };
482
- },
483
- init: function init(domNode, state) {
484
- var _ref4 = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
485
- _ref4$controlType = _ref4.controlType,
486
- controlType = _ref4$controlType === void 0 ? 'trackball' : _ref4$controlType,
487
- _ref4$useWebGPU = _ref4.useWebGPU,
488
- useWebGPU = _ref4$useWebGPU === void 0 ? false : _ref4$useWebGPU,
489
- _ref4$rendererConfig = _ref4.rendererConfig,
490
- rendererConfig = _ref4$rendererConfig === void 0 ? {} : _ref4$rendererConfig,
491
- _ref4$extraRenderers = _ref4.extraRenderers,
492
- extraRenderers = _ref4$extraRenderers === void 0 ? [] : _ref4$extraRenderers,
493
- _ref4$waitForLoadComp = _ref4.waitForLoadComplete,
494
- waitForLoadComplete = _ref4$waitForLoadComp === void 0 ? true : _ref4$waitForLoadComp;
367
+ stateInit: () => ({
368
+ scene: new three.Scene(),
369
+ camera: new three.PerspectiveCamera(),
370
+ timer: new three.Timer(),
371
+ tweenGroup: new Group(),
372
+ lastRaycasterCheck: 0
373
+ }),
374
+ init(domNode, state, {
375
+ controlType = 'trackball',
376
+ useWebGPU = false,
377
+ rendererConfig = {},
378
+ extraRenderers = [],
379
+ waitForLoadComplete = true
380
+ } = {}) {
495
381
  // Wipe DOM
496
382
  domNode.innerHTML = '';
497
383
 
@@ -517,39 +403,35 @@ var threeRenderObjects = Kapsule({
517
403
  state.pointerPos = new three.Vector2();
518
404
  state.pointerPos.x = -2; // Initialize off canvas
519
405
  state.pointerPos.y = -2;
520
- ['pointermove', 'pointerdown'].forEach(function (evType) {
521
- return state.container.addEventListener(evType, function (ev) {
522
- // track click state
523
- evType === 'pointerdown' && (state.isPointerPressed = true);
406
+ ['pointermove', 'pointerdown'].forEach(evType => state.container.addEventListener(evType, ev => {
407
+ // track click state
408
+ evType === 'pointerdown' && (state.isPointerPressed = true);
524
409
 
525
- // detect point drag
526
- !state.isPointerDragging && ev.type === 'pointermove' && (ev.pressure > 0 || state.isPointerPressed) // ev.pressure always 0 on Safari, so we used the isPointerPressed tracker
527
- && (ev.pointerType === 'mouse' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(function (m) {
528
- return Math.abs(m) > 1;
529
- })) // relax drag trigger sensitivity on non-mouse (touch/pen) events
530
- && (state.isPointerDragging = true);
531
- if (state.enablePointerInteraction) {
532
- // update the pointer pos
533
- var offset = getOffset(state.container);
534
- state.pointerPos.x = ev.pageX - offset.left;
535
- state.pointerPos.y = ev.pageY - offset.top;
536
- }
537
- function getOffset(el) {
538
- var rect = el.getBoundingClientRect(),
539
- scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,
540
- scrollTop = window.pageYOffset || document.documentElement.scrollTop;
541
- return {
542
- top: rect.top + scrollTop,
543
- left: rect.left + scrollLeft
544
- };
545
- }
546
- }, {
547
- passive: true
548
- });
549
- });
410
+ // detect point drag
411
+ !state.isPointerDragging && ev.type === 'pointermove' && (ev.pressure > 0 || state.isPointerPressed) // ev.pressure always 0 on Safari, so we used the isPointerPressed tracker
412
+ && (ev.pointerType === 'mouse' || ev.movementX === undefined || [ev.movementX, ev.movementY].some(m => Math.abs(m) > 1)) // relax drag trigger sensitivity on non-mouse (touch/pen) events
413
+ && (state.isPointerDragging = true);
414
+ if (state.enablePointerInteraction) {
415
+ // update the pointer pos
416
+ const offset = getOffset(state.container);
417
+ state.pointerPos.x = ev.pageX - offset.left;
418
+ state.pointerPos.y = ev.pageY - offset.top;
419
+ }
420
+ function getOffset(el) {
421
+ const rect = el.getBoundingClientRect(),
422
+ scrollLeft = window.pageXOffset || document.documentElement.scrollLeft,
423
+ scrollTop = window.pageYOffset || document.documentElement.scrollTop;
424
+ return {
425
+ top: rect.top + scrollTop,
426
+ left: rect.left + scrollLeft
427
+ };
428
+ }
429
+ }, {
430
+ passive: true
431
+ }));
550
432
 
551
433
  // Handle click events on objs
552
- state.container.addEventListener('pointerup', function (ev) {
434
+ state.container.addEventListener('pointerup', ev => {
553
435
  if (!state.isPointerPressed) return; // don't trigger click events if pointer is not pressed on the canvas
554
436
 
555
437
  state.isPointerPressed = false;
@@ -557,7 +439,7 @@ var threeRenderObjects = Kapsule({
557
439
  state.isPointerDragging = false;
558
440
  if (!state.clickAfterDrag) return; // don't trigger onClick after pointer drag (camera motion via controls)
559
441
  }
560
- requestAnimationFrame(function () {
442
+ requestAnimationFrame(() => {
561
443
  // trigger click events asynchronously, to allow hoverObj to be set (on frame)
562
444
  if (ev.button === 0) {
563
445
  // left-click
@@ -573,7 +455,7 @@ var threeRenderObjects = Kapsule({
573
455
  capture: true
574
456
  }); // use capture phase to prevent propagation blocking from controls (specifically for fly)
575
457
 
576
- state.container.addEventListener('contextmenu', function (ev) {
458
+ state.container.addEventListener('contextmenu', ev => {
577
459
  if (state.onRightClick) ev.preventDefault(); // prevent default contextmenu behavior and allow pointerup to fire instead
578
460
  });
579
461
 
@@ -587,7 +469,7 @@ var threeRenderObjects = Kapsule({
587
469
 
588
470
  // Setup extra renderers
589
471
  state.extraRenderers = extraRenderers;
590
- state.extraRenderers.forEach(function (r) {
472
+ state.extraRenderers.forEach(r => {
591
473
  // overlay them on top of main renderer
592
474
  r.domElement.style.position = 'absolute';
593
475
  r.domElement.style.top = '0px';
@@ -613,22 +495,20 @@ var threeRenderObjects = Kapsule({
613
495
  if (controlType === 'trackball' || controlType === 'orbit') {
614
496
  state.controls.minDistance = 0.1;
615
497
  state.controls.maxDistance = state.skyRadius;
616
- state.controls.addEventListener('start', function () {
498
+ state.controls.addEventListener('start', () => {
617
499
  state.controlsEngaged = true;
618
500
  });
619
- state.controls.addEventListener('change', function () {
501
+ state.controls.addEventListener('change', () => {
620
502
  if (state.controlsEngaged) {
621
503
  state.controlsDragging = true;
622
504
  }
623
505
  });
624
- state.controls.addEventListener('end', function () {
506
+ state.controls.addEventListener('end', () => {
625
507
  state.controlsEngaged = false;
626
508
  state.controlsDragging = false;
627
509
  });
628
510
  }
629
- [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) {
630
- return r.setSize(state.width, state.height);
631
- });
511
+ [state.renderer, state.postProcessingComposer, ...state.extraRenderers].forEach(r => r.setSize(state.width, state.height));
632
512
  state.camera.aspect = state.width / state.height;
633
513
  state.camera.updateProjectionMatrix();
634
514
  state.camera.position.z = 1000;
@@ -639,32 +519,24 @@ var threeRenderObjects = Kapsule({
639
519
  state.loadComplete = state.scene.visible = !waitForLoadComplete;
640
520
  window.scene = state.scene;
641
521
  },
642
- update: function update(state, changedProps) {
522
+ update(state, changedProps) {
643
523
  // resize canvas
644
524
  if (state.width && state.height && (changedProps.hasOwnProperty('width') || changedProps.hasOwnProperty('height'))) {
645
- var _state$camera;
646
- var w = state.width;
647
- var h = state.height;
648
- state.container.style.width = "".concat(w, "px");
649
- state.container.style.height = "".concat(h, "px");
650
- [state.renderer, state.postProcessingComposer].concat(_toConsumableArray(state.extraRenderers)).forEach(function (r) {
651
- return r.setSize(w, h);
652
- });
525
+ const w = state.width;
526
+ const h = state.height;
527
+ state.container.style.width = `${w}px`;
528
+ state.container.style.height = `${h}px`;
529
+ [state.renderer, state.postProcessingComposer, ...state.extraRenderers].forEach(r => r.setSize(w, h));
653
530
  state.camera.aspect = w / h;
654
- var o = state.viewOffset.slice(0, 2);
655
- o.some(function (n) {
656
- return n;
657
- }) && (_state$camera = state.camera).setViewOffset.apply(_state$camera, [w, h].concat(_toConsumableArray(o), [w, h]));
531
+ const o = state.viewOffset.slice(0, 2);
532
+ o.some(n => n) && state.camera.setViewOffset(w, h, ...o, w, h);
658
533
  state.camera.updateProjectionMatrix();
659
534
  }
660
535
  if (changedProps.hasOwnProperty('viewOffset')) {
661
- var _state$camera2;
662
- var _w = state.width;
663
- var _h = state.height;
664
- var _o = state.viewOffset.slice(0, 2);
665
- _o.some(function (n) {
666
- return n;
667
- }) ? (_state$camera2 = state.camera).setViewOffset.apply(_state$camera2, [_w, _h].concat(_toConsumableArray(_o), [_w, _h])) : state.camera.clearViewOffset();
536
+ const w = state.width;
537
+ const h = state.height;
538
+ const o = state.viewOffset.slice(0, 2);
539
+ o.some(n => n) ? state.camera.setViewOffset(w, h, ...o, w, h) : state.camera.clearViewOffset();
668
540
  }
669
541
  if (changedProps.hasOwnProperty('skyRadius') && state.skyRadius) {
670
542
  state.controls.hasOwnProperty('maxDistance') && changedProps.skyRadius && (state.controls.maxDistance = Math.min(state.controls.maxDistance, state.skyRadius));
@@ -673,7 +545,7 @@ var threeRenderObjects = Kapsule({
673
545
  state.skysphere.geometry = new three.SphereGeometry(state.skyRadius);
674
546
  }
675
547
  if (changedProps.hasOwnProperty('backgroundColor')) {
676
- var alpha = parseToRgb(state.backgroundColor).alpha;
548
+ let alpha = parseToRgb(state.backgroundColor).alpha;
677
549
  if (alpha === undefined) alpha = 1;
678
550
  state.renderer.setClearColor(new three.Color(opacify(1, state.backgroundColor)), alpha);
679
551
  }
@@ -683,7 +555,7 @@ var threeRenderObjects = Kapsule({
683
555
  state.skysphere.material.map = null;
684
556
  !state.loadComplete && finishLoad();
685
557
  } else {
686
- new three.TextureLoader().load(state.backgroundImageUrl, function (texture) {
558
+ new three.TextureLoader().load(state.backgroundImageUrl, texture => {
687
559
  texture.colorSpace = three.SRGBColorSpace;
688
560
  state.skysphere.material = new three.MeshBasicMaterial({
689
561
  map: texture,
@@ -699,20 +571,12 @@ var threeRenderObjects = Kapsule({
699
571
  }
700
572
  changedProps.hasOwnProperty('showNavInfo') && (state.navInfo.style.display = state.showNavInfo ? null : 'none');
701
573
  if (changedProps.hasOwnProperty('lights')) {
702
- (changedProps.lights || []).forEach(function (light) {
703
- return state.scene.remove(light);
704
- }); // Clear the place
705
- state.lights.forEach(function (light) {
706
- return state.scene.add(light);
707
- }); // Add to scene
574
+ (changedProps.lights || []).forEach(light => state.scene.remove(light)); // Clear the place
575
+ state.lights.forEach(light => state.scene.add(light)); // Add to scene
708
576
  }
709
577
  if (changedProps.hasOwnProperty('objects')) {
710
- (changedProps.objects || []).forEach(function (obj) {
711
- return state.scene.remove(obj);
712
- }); // Clear the place
713
- state.objects.forEach(function (obj) {
714
- return state.scene.add(obj);
715
- }); // Add to scene
578
+ (changedProps.objects || []).forEach(obj => state.scene.remove(obj)); // Clear the place
579
+ state.objects.forEach(obj => state.scene.add(obj)); // Add to scene
716
580
  }
717
581
 
718
582
  //