@inweb/viewer-three 26.9.2 → 26.9.3

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 (48) hide show
  1. package/dist/plugins/components/AxesHelperComponent.js.map +1 -1
  2. package/dist/plugins/components/AxesHelperComponent.min.js +1 -1
  3. package/dist/plugins/components/AxesHelperComponent.module.js +1 -1
  4. package/dist/plugins/components/AxesHelperComponent.module.js.map +1 -1
  5. package/dist/plugins/components/ExtentsHelperComponent.js.map +1 -1
  6. package/dist/plugins/components/ExtentsHelperComponent.min.js +1 -1
  7. package/dist/plugins/components/ExtentsHelperComponent.module.js +1 -1
  8. package/dist/plugins/components/ExtentsHelperComponent.module.js.map +1 -1
  9. package/dist/plugins/components/LightHelperComponent.js.map +1 -1
  10. package/dist/plugins/components/LightHelperComponent.min.js +1 -1
  11. package/dist/plugins/components/LightHelperComponent.module.js +7 -7
  12. package/dist/plugins/components/LightHelperComponent.module.js.map +1 -1
  13. package/dist/plugins/components/RoomEnvironmentComponent.js.map +1 -1
  14. package/dist/plugins/components/RoomEnvironmentComponent.min.js +1 -1
  15. package/dist/plugins/components/RoomEnvironmentComponent.module.js +1 -1
  16. package/dist/plugins/components/RoomEnvironmentComponent.module.js.map +1 -1
  17. package/dist/plugins/components/StatsPanelComponent.js.map +1 -1
  18. package/dist/plugins/components/StatsPanelComponent.min.js +1 -1
  19. package/dist/plugins/components/StatsPanelComponent.module.js +1 -1
  20. package/dist/plugins/components/StatsPanelComponent.module.js.map +1 -1
  21. package/dist/plugins/loaders/GLTFCloudLoader.js.map +1 -1
  22. package/dist/plugins/loaders/GLTFCloudLoader.min.js +1 -1
  23. package/dist/plugins/loaders/GLTFCloudLoader.module.js +1 -1
  24. package/dist/plugins/loaders/GLTFCloudLoader.module.js.map +1 -1
  25. package/dist/plugins/loaders/IFCXLoader.js +4 -4
  26. package/dist/plugins/loaders/IFCXLoader.js.map +1 -1
  27. package/dist/plugins/loaders/IFCXLoader.min.js +1 -1
  28. package/dist/plugins/loaders/IFCXLoader.module.js +92 -92
  29. package/dist/plugins/loaders/IFCXLoader.module.js.map +1 -1
  30. package/dist/plugins/loaders/PotreeLoader.js +1 -1
  31. package/dist/plugins/loaders/PotreeLoader.js.map +1 -1
  32. package/dist/plugins/loaders/PotreeLoader.min.js +1 -1
  33. package/dist/plugins/loaders/PotreeLoader.module.js +2 -2
  34. package/dist/plugins/loaders/PotreeLoader.module.js.map +1 -1
  35. package/dist/viewer-three.js +1210 -839
  36. package/dist/viewer-three.js.map +1 -1
  37. package/dist/viewer-three.min.js +3 -3
  38. package/dist/viewer-three.module.js +559 -270
  39. package/dist/viewer-three.module.js.map +1 -1
  40. package/lib/Viewer/controls/FlyControls.d.ts +34 -0
  41. package/lib/Viewer/controls/WalkControls.d.ts +19 -3
  42. package/lib/Viewer/draggers/FlyDragger.d.ts +14 -0
  43. package/package.json +5 -5
  44. package/src/Viewer/controls/FlyControls.ts +205 -0
  45. package/src/Viewer/controls/WalkControls.ts +129 -20
  46. package/src/Viewer/draggers/FlyDragger.ts +73 -0
  47. package/src/Viewer/draggers/WalkDragger.ts +10 -2
  48. package/src/Viewer/draggers/index.ts +2 -0
@@ -2,7 +2,7 @@ import { draggersRegistry, commandsRegistry, componentsRegistry, Loader, loaders
2
2
 
3
3
  export * from "@inweb/viewer-core";
4
4
 
5
- import { Line, Vector3, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Mesh, MeshBasicMaterial, DoubleSide, EventDispatcher, MOUSE, TOUCH, Spherical, Quaternion, Vector2, Plane, Object3D, Matrix4, Vector4, Raycaster, Controls, Clock, Sphere, MathUtils, Box3, Color, AmbientLight, DirectionalLight, HemisphereLight, MeshPhongMaterial, WebGLRenderTarget, UnsignedByteType, RGBAFormat, EdgesGeometry, OrthographicCamera, CylinderGeometry, Sprite, CanvasTexture, SRGBColorSpace, SpriteMaterial, LoadingManager, LoaderUtils, TextureLoader, BufferAttribute, PointsMaterial, Points, TriangleStripDrawMode, TriangleFanDrawMode, LineSegments, LineLoop, Group, NormalBlending, PerspectiveCamera, UniformsUtils, ShaderMaterial, AdditiveBlending, HalfFloatType, Scene, WebGLRenderer, LinearSRGBColorSpace } from "three";
5
+ import { Line, Vector3, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Mesh, MeshBasicMaterial, DoubleSide, EventDispatcher, MOUSE, TOUCH, Spherical, Quaternion, Vector2, Plane, Object3D, Matrix4, Vector4, Raycaster, Controls, Clock, MathUtils, Sphere, Box3, Color, AmbientLight, DirectionalLight, HemisphereLight, MeshPhongMaterial, WebGLRenderTarget, UnsignedByteType, RGBAFormat, EdgesGeometry, OrthographicCamera, CylinderGeometry, Sprite, CanvasTexture, SRGBColorSpace, SpriteMaterial, LoadingManager, LoaderUtils, TextureLoader, BufferAttribute, PointsMaterial, Points, TriangleStripDrawMode, TriangleFanDrawMode, LineSegments, LineLoop, Group, NormalBlending, PerspectiveCamera, UniformsUtils, ShaderMaterial, AdditiveBlending, HalfFloatType, Scene, WebGLRenderer, LinearSRGBColorSpace } from "three";
6
6
 
7
7
  import { TransformControls } from "three/examples/jsm/controls/TransformControls.js";
8
8
 
@@ -1049,7 +1049,7 @@ class MeasureSnapper {
1049
1049
  }
1050
1050
  update(scene) {
1051
1051
  this.objects = [];
1052
- scene.traverseVisible((child => this.objects.push(child)));
1052
+ scene.traverseVisible(child => this.objects.push(child));
1053
1053
  }
1054
1054
  }
1055
1055
 
@@ -1082,21 +1082,21 @@ class MeasureOverlay {
1082
1082
  this.container = undefined;
1083
1083
  }
1084
1084
  clear() {
1085
- this.lines.forEach((line => line.dispose()));
1085
+ this.lines.forEach(line => line.dispose());
1086
1086
  this.lines = [];
1087
1087
  }
1088
1088
  render() {
1089
1089
  this.projector.updateProjectionMatrix();
1090
- this.lines.forEach((line => line.render()));
1090
+ this.lines.forEach(line => line.render());
1091
1091
  }
1092
1092
  update() {
1093
- this.lines.forEach((line => line.update()));
1093
+ this.lines.forEach(line => line.update());
1094
1094
  }
1095
1095
  addLine(line) {
1096
1096
  this.lines.push(line);
1097
1097
  }
1098
1098
  removeLine(line) {
1099
- this.lines = this.lines.filter((x => x !== line));
1099
+ this.lines = this.lines.filter(x => x !== line);
1100
1100
  }
1101
1101
  }
1102
1102
 
@@ -1304,6 +1304,282 @@ class PanDragger extends OrbitDragger {
1304
1304
  }
1305
1305
 
1306
1306
  class WalkControls extends Controls {
1307
+ constructor(camera, canvas, groundObjects, viewer) {
1308
+ super(camera, canvas);
1309
+ this.EYE_HEIGHT = 1.7;
1310
+ this.FAILING_DISTANCE = 2;
1311
+ this.GROUND_FOLLOWING_SPEED = .05;
1312
+ this.LOOK_SPEED = .1;
1313
+ this.WALK_SPEED_DELIMITER = 4;
1314
+ this.WHEEL_SPEED_DELIMITER = 15e3;
1315
+ this.movementSpeed = .1;
1316
+ this.multiplier = 3;
1317
+ this.moveWheel = 0;
1318
+ this.mouseDragOn = false;
1319
+ this.onPointerDown = event => {
1320
+ if (event.button !== 0) return;
1321
+ this.domElement.setPointerCapture(event.pointerId);
1322
+ this.downPosition.set(event.clientX, event.clientY);
1323
+ this.quaternion.copy(this.object.quaternion);
1324
+ this.mouseDragOn = true;
1325
+ };
1326
+ this.onPointerMove = event => {
1327
+ if (!this.mouseDragOn) return;
1328
+ const movePosition = new Vector2(event.clientX, event.clientY);
1329
+ if (this.downPosition.distanceTo(movePosition) === 0) return;
1330
+ this.rotateDelta.copy(this.downPosition).sub(movePosition);
1331
+ this.rotateCamera(this.rotateDelta);
1332
+ this.dispatchEvent({
1333
+ type: "change"
1334
+ });
1335
+ };
1336
+ this.onPointerUp = event => {
1337
+ this.domElement.releasePointerCapture(event.pointerId);
1338
+ this.mouseDragOn = false;
1339
+ };
1340
+ this.onPointerCancel = event => {
1341
+ this.domElement.dispatchEvent(new PointerEvent("pointerup", event));
1342
+ };
1343
+ this.onWheel = event => {
1344
+ this.moveWheel = event.deltaY;
1345
+ this.update();
1346
+ };
1347
+ this.onKeyDown = event => {
1348
+ switch (event.code) {
1349
+ case "NumpadSubtract":
1350
+ case "Minus":
1351
+ if (this.multiplier > 1) {
1352
+ this.multiplier = this.multiplier - 1;
1353
+ this.dispatchEvent({
1354
+ type: "walkspeedchange",
1355
+ data: this.multiplier
1356
+ });
1357
+ }
1358
+ break;
1359
+
1360
+ case "NumpadAdd":
1361
+ case "Equal":
1362
+ if (this.multiplier < 10) {
1363
+ this.multiplier = this.multiplier + 1;
1364
+ this.dispatchEvent({
1365
+ type: "walkspeedchange",
1366
+ data: this.multiplier
1367
+ });
1368
+ }
1369
+ break;
1370
+
1371
+ case "ArrowLeft":
1372
+ case "ArrowRight":
1373
+ case "ArrowUp":
1374
+ case "ArrowDown":
1375
+ case "KeyW":
1376
+ case "KeyS":
1377
+ case "KeyA":
1378
+ case "KeyD":
1379
+ case "KeyQ":
1380
+ case "KeyE":
1381
+ this.moveKeys.add(event.code);
1382
+ this.update();
1383
+ break;
1384
+ }
1385
+ };
1386
+ this.onKeyUp = event => {
1387
+ if (this.moveKeys.delete(event.code)) this.update();
1388
+ };
1389
+ this.initHighlighter = () => {
1390
+ this.highlighter = this.viewer.getComponent("HighlighterComponent");
1391
+ };
1392
+ this.camera = camera;
1393
+ this.viewer = viewer;
1394
+ this.groundObjects = groundObjects;
1395
+ this.raycaster = new Raycaster;
1396
+ this.raycaster.near = 0;
1397
+ this.raycaster.far = this.EYE_HEIGHT + this.FAILING_DISTANCE;
1398
+ this.moveKeys = new Set;
1399
+ this.moveClock = new Clock;
1400
+ this.quaternion = camera.quaternion.clone();
1401
+ this.downPosition = new Vector2(0, 0);
1402
+ this.rotateDelta = new Vector2(0, 0);
1403
+ this.domElement.addEventListener("pointerdown", this.onPointerDown);
1404
+ this.domElement.addEventListener("pointermove", this.onPointerMove);
1405
+ this.domElement.addEventListener("pointerup", this.onPointerUp);
1406
+ this.domElement.addEventListener("pointercancel", this.onPointerCancel);
1407
+ this.domElement.addEventListener("wheel", this.onWheel);
1408
+ window.addEventListener("keydown", this.onKeyDown);
1409
+ window.addEventListener("keyup", this.onKeyUp);
1410
+ }
1411
+ dispose() {
1412
+ this.domElement.removeEventListener("pointerdown", this.onPointerDown);
1413
+ this.domElement.removeEventListener("pointermove", this.onPointerMove);
1414
+ this.domElement.removeEventListener("pointerup", this.onPointerUp);
1415
+ this.domElement.removeEventListener("pointercancel", this.onPointerCancel);
1416
+ this.domElement.removeEventListener("wheel", this.onWheel);
1417
+ window.removeEventListener("keydown", this.onKeyDown);
1418
+ window.removeEventListener("keyup", this.onKeyUp);
1419
+ super.dispose();
1420
+ }
1421
+ updateGroundFollowing() {
1422
+ this.raycaster.set(this.object.position, new Vector3(0, -1, 0));
1423
+ this.raycaster.params = this.raycaster.params = {
1424
+ Mesh: {},
1425
+ Line: {
1426
+ threshold: 0
1427
+ },
1428
+ Line2: {
1429
+ threshold: 0
1430
+ },
1431
+ LOD: {
1432
+ threshold: 0
1433
+ },
1434
+ Points: {
1435
+ threshold: 0
1436
+ },
1437
+ Sprite: {
1438
+ threshold: 0
1439
+ }
1440
+ };
1441
+ let intersects = this.raycaster.intersectObjects(this.groundObjects, false);
1442
+ if (intersects.length > 0) {
1443
+ const groundY = intersects[0].point.y;
1444
+ const targetY = groundY + this.EYE_HEIGHT;
1445
+ this.object.position.y = MathUtils.lerp(this.object.position.y, targetY, this.GROUND_FOLLOWING_SPEED);
1446
+ }
1447
+ }
1448
+ select(objects, model) {
1449
+ if (!model) {
1450
+ this.viewer.models.forEach(model => this.select(objects, model));
1451
+ return;
1452
+ }
1453
+ if (!Array.isArray(objects)) objects = [ objects ];
1454
+ if (!objects.length) return;
1455
+ model.showOriginalObjects(objects);
1456
+ this.highlighter.highlight(objects);
1457
+ objects.forEach(object => this.viewer.selected.push(object));
1458
+ objects.forEach(object => object.isSelected = true);
1459
+ }
1460
+ update() {
1461
+ let moved = false;
1462
+ let upgradeGroundFollowing = false;
1463
+ const forward = new Vector3;
1464
+ const sideways = new Vector3;
1465
+ if (this.moveKeys.size > 0) {
1466
+ upgradeGroundFollowing = true;
1467
+ const timeDelta = this.moveClock.getDelta();
1468
+ const moveDelta = timeDelta * this.multiplier * this.movementSpeed / this.WALK_SPEED_DELIMITER;
1469
+ this.object.getWorldDirection(forward);
1470
+ forward.y = 0;
1471
+ forward.normalize();
1472
+ sideways.setFromMatrixColumn(this.object.matrix, 0);
1473
+ sideways.y = 0;
1474
+ sideways.normalize();
1475
+ if (this.moveKeys.has("KeyW")) {
1476
+ this.object.position.addScaledVector(forward, moveDelta);
1477
+ }
1478
+ if (this.moveKeys.has("KeyS")) {
1479
+ this.object.position.addScaledVector(forward, -moveDelta);
1480
+ }
1481
+ if (this.moveKeys.has("KeyA")) {
1482
+ this.object.position.addScaledVector(sideways, -moveDelta);
1483
+ }
1484
+ if (this.moveKeys.has("KeyD")) {
1485
+ this.object.position.addScaledVector(sideways, moveDelta);
1486
+ }
1487
+ if (this.moveKeys.has("KeyQ")) {
1488
+ this.object.translateY(moveDelta);
1489
+ upgradeGroundFollowing = false;
1490
+ }
1491
+ if (this.moveKeys.has("KeyE")) {
1492
+ this.object.translateY(-moveDelta);
1493
+ upgradeGroundFollowing = false;
1494
+ }
1495
+ const lookDelta = this.LOOK_SPEED + (this.multiplier - 1);
1496
+ if (this.moveKeys.has("ArrowUp")) this.rotateCamera(this.rotateDelta.add(new Vector2(0, -lookDelta / 2)));
1497
+ if (this.moveKeys.has("ArrowDown")) this.rotateCamera(this.rotateDelta.add(new Vector2(0, lookDelta / 2)));
1498
+ if (this.moveKeys.has("ArrowLeft")) this.rotateCamera(this.rotateDelta.add(new Vector2(lookDelta, 0)));
1499
+ if (this.moveKeys.has("ArrowRight")) this.rotateCamera(this.rotateDelta.add(new Vector2(-lookDelta, 0)));
1500
+ this.moveWheel = 0;
1501
+ moved = true;
1502
+ }
1503
+ if (this.moveWheel !== 0) {
1504
+ const moveDelta = this.moveWheel * this.multiplier * this.movementSpeed / this.WHEEL_SPEED_DELIMITER;
1505
+ this.object.getWorldDirection(forward);
1506
+ forward.y = 0;
1507
+ forward.normalize();
1508
+ this.object.position.addScaledVector(forward, -moveDelta);
1509
+ this.moveWheel += -1 * Math.sign(this.moveWheel);
1510
+ moved = true;
1511
+ }
1512
+ if (upgradeGroundFollowing) this.updateGroundFollowing();
1513
+ if (moved) {
1514
+ this.dispatchEvent({
1515
+ type: "change"
1516
+ });
1517
+ }
1518
+ if (this.moveKeys.size === 0 && this.moveWheel === 0) {
1519
+ this.moveClock.stop();
1520
+ this.moveClock.autoStart = true;
1521
+ }
1522
+ }
1523
+ rotateCamera(delta) {
1524
+ const rotateX = Math.PI * delta.x / this.domElement.clientWidth;
1525
+ const rotateY = Math.PI * delta.y / this.domElement.clientHeight;
1526
+ const xRotation = new Quaternion;
1527
+ xRotation.setFromAxisAngle(this.object.up, rotateX);
1528
+ const yRotation = new Quaternion;
1529
+ yRotation.setFromAxisAngle(new Vector3(1, 0, 0), rotateY);
1530
+ const quaternion = this.quaternion.clone();
1531
+ quaternion.premultiply(xRotation).multiply(yRotation).normalize();
1532
+ this.object.setRotationFromQuaternion(quaternion);
1533
+ }
1534
+ }
1535
+
1536
+ class WalkDragger {
1537
+ constructor(viewer) {
1538
+ this.updateControls = () => {
1539
+ const size = this.viewer.extents.getSize(new Vector3);
1540
+ this.controls.movementSpeed = Math.min(size.x, size.y, size.z) / 2;
1541
+ };
1542
+ this.controlsChange = () => {
1543
+ this.viewer.update();
1544
+ this.viewer.emitEvent({
1545
+ type: "changecamera"
1546
+ });
1547
+ };
1548
+ this.walkspeedChange = event => {
1549
+ this.viewer.emitEvent(event);
1550
+ };
1551
+ this.viewerRender = () => {
1552
+ this.controls.update();
1553
+ };
1554
+ this.viewerZoom = () => {
1555
+ this.controls.rotateDelta.set(0, 0);
1556
+ };
1557
+ const meshOnlyGround = [];
1558
+ viewer.models[0].getObjects().forEach(obj => {
1559
+ obj.traverse(child => {
1560
+ if (child instanceof Mesh) {
1561
+ meshOnlyGround.push(child);
1562
+ }
1563
+ });
1564
+ });
1565
+ this.controls = new WalkControls(viewer.camera, viewer.canvas, meshOnlyGround, viewer);
1566
+ this.controls.addEventListener("change", this.controlsChange);
1567
+ this.controls.addEventListener("walkspeedchange", this.walkspeedChange);
1568
+ this.viewer = viewer;
1569
+ this.viewer.on("render", this.viewerRender);
1570
+ this.viewer.on("zoom", this.viewerZoom);
1571
+ this.updateControls();
1572
+ }
1573
+ dispose() {
1574
+ this.viewer.off("render", this.viewerRender);
1575
+ this.viewer.off("zoom", this.viewerZoom);
1576
+ this.controls.removeEventListener("walkspeedchange", this.walkspeedChange);
1577
+ this.controls.removeEventListener("change", this.controlsChange);
1578
+ this.controls.dispose();
1579
+ }
1580
+ }
1581
+
1582
+ class FlyControls extends Controls {
1307
1583
  constructor(camera, canvas) {
1308
1584
  super(camera, canvas);
1309
1585
  this.movementSpeed = .2;
@@ -1346,7 +1622,7 @@ class WalkControls extends Controls {
1346
1622
  if (this.multiplier > 1) {
1347
1623
  this.multiplier = this.multiplier - 1;
1348
1624
  this.dispatchEvent({
1349
- type: "walkspeedchange",
1625
+ type: "flyspeedchange",
1350
1626
  data: this.multiplier
1351
1627
  });
1352
1628
  }
@@ -1357,7 +1633,7 @@ class WalkControls extends Controls {
1357
1633
  if (this.multiplier < 10) {
1358
1634
  this.multiplier = this.multiplier + 1;
1359
1635
  this.dispatchEvent({
1360
- type: "walkspeedchange",
1636
+ type: "flyspeedchange",
1361
1637
  data: this.multiplier
1362
1638
  });
1363
1639
  }
@@ -1450,7 +1726,7 @@ class WalkControls extends Controls {
1450
1726
  }
1451
1727
  }
1452
1728
 
1453
- class WalkDragger {
1729
+ class FlyDragger {
1454
1730
  constructor(viewer) {
1455
1731
  this.updateControls = () => {
1456
1732
  const size = this.viewer.extents.getSize(new Vector3);
@@ -1462,7 +1738,7 @@ class WalkDragger {
1462
1738
  type: "changecamera"
1463
1739
  });
1464
1740
  };
1465
- this.walkspeedChange = event => {
1741
+ this.flyspeedChange = event => {
1466
1742
  this.viewer.emitEvent(event);
1467
1743
  };
1468
1744
  this.viewerRender = () => {
@@ -1471,9 +1747,9 @@ class WalkDragger {
1471
1747
  this.viewerZoom = () => {
1472
1748
  this.controls.rotateDelta.set(0, 0);
1473
1749
  };
1474
- this.controls = new WalkControls(viewer.camera, viewer.canvas);
1750
+ this.controls = new FlyControls(viewer.camera, viewer.canvas);
1475
1751
  this.controls.addEventListener("change", this.controlsChange);
1476
- this.controls.addEventListener("walkspeedchange", this.walkspeedChange);
1752
+ this.controls.addEventListener("flyspeedchange", this.flyspeedChange);
1477
1753
  this.viewer = viewer;
1478
1754
  this.viewer.on("render", this.viewerRender);
1479
1755
  this.viewer.on("zoom", this.viewerZoom);
@@ -1482,7 +1758,7 @@ class WalkDragger {
1482
1758
  dispose() {
1483
1759
  this.viewer.off("render", this.viewerRender);
1484
1760
  this.viewer.off("zoom", this.viewerZoom);
1485
- this.controls.removeEventListener("walkspeedchange", this.walkspeedChange);
1761
+ this.controls.removeEventListener("flyspeedchange", this.flyspeedChange);
1486
1762
  this.controls.removeEventListener("change", this.controlsChange);
1487
1763
  this.controls.dispose();
1488
1764
  }
@@ -1501,21 +1777,23 @@ class ZoomDragger extends OrbitDragger {
1501
1777
 
1502
1778
  const draggers = draggersRegistry("threejs");
1503
1779
 
1504
- draggers.registerDragger("Pan", (viewer => new PanDragger(viewer)));
1780
+ draggers.registerDragger("Pan", viewer => new PanDragger(viewer));
1781
+
1782
+ draggers.registerDragger("Orbit", viewer => new OrbitDragger(viewer));
1505
1783
 
1506
- draggers.registerDragger("Orbit", (viewer => new OrbitDragger(viewer)));
1784
+ draggers.registerDragger("Zoom", viewer => new ZoomDragger(viewer));
1507
1785
 
1508
- draggers.registerDragger("Zoom", (viewer => new ZoomDragger(viewer)));
1786
+ draggers.registerDragger("MeasureLine", viewer => new MeasureLineDragger(viewer));
1509
1787
 
1510
- draggers.registerDragger("MeasureLine", (viewer => new MeasureLineDragger(viewer)));
1788
+ draggers.registerDragger("CuttingPlaneXAxis", viewer => new CuttingPlaneXAxisDragger(viewer));
1511
1789
 
1512
- draggers.registerDragger("CuttingPlaneXAxis", (viewer => new CuttingPlaneXAxisDragger(viewer)));
1790
+ draggers.registerDragger("CuttingPlaneYAxis", viewer => new CuttingPlaneYAxisDragger(viewer));
1513
1791
 
1514
- draggers.registerDragger("CuttingPlaneYAxis", (viewer => new CuttingPlaneYAxisDragger(viewer)));
1792
+ draggers.registerDragger("CuttingPlaneZAxis", viewer => new CuttingPlaneZAxisDragger(viewer));
1515
1793
 
1516
- draggers.registerDragger("CuttingPlaneZAxis", (viewer => new CuttingPlaneZAxisDragger(viewer)));
1794
+ draggers.registerDragger("Walk", viewer => new WalkDragger(viewer));
1517
1795
 
1518
- draggers.registerDragger("Walk", (viewer => new WalkDragger(viewer)));
1796
+ draggers.registerDragger("Fly", viewer => new FlyDragger(viewer));
1519
1797
 
1520
1798
  function applyModelTransform(viewer, model) {
1521
1799
  console.warn("applyModelTransform not implemented");
@@ -1546,7 +1824,7 @@ function createPreview(viewer, type = "image/jpeg", encoderOptions = .25) {
1546
1824
  }
1547
1825
 
1548
1826
  function explode(viewer, index = 0) {
1549
- viewer.models.forEach((model => model.explode(index)));
1827
+ viewer.models.forEach(model => model.explode(index));
1550
1828
  viewer.update();
1551
1829
  viewer.emitEvent({
1552
1830
  type: "explode",
@@ -1627,17 +1905,17 @@ function getDefaultViewPositions() {
1627
1905
  }
1628
1906
 
1629
1907
  function getModels(viewer) {
1630
- return viewer.models.map((model => model.handle));
1908
+ return viewer.models.map(model => model.handle);
1631
1909
  }
1632
1910
 
1633
1911
  function getSelected(viewer) {
1634
1912
  const handles = [];
1635
- viewer.models.forEach((model => handles.push(...model.getHandlesByObjects(viewer.selected))));
1913
+ viewer.models.forEach(model => handles.push(...model.getHandlesByObjects(viewer.selected)));
1636
1914
  return handles;
1637
1915
  }
1638
1916
 
1639
1917
  function hideSelected(viewer) {
1640
- viewer.models.forEach((model => model.hideObjects(viewer.selected)));
1918
+ viewer.models.forEach(model => model.hideObjects(viewer.selected));
1641
1919
  const selection = viewer.getComponent("SelectionComponent");
1642
1920
  selection.clearSelection();
1643
1921
  viewer.update();
@@ -1652,7 +1930,7 @@ function hideSelected(viewer) {
1652
1930
  }
1653
1931
 
1654
1932
  function isolateSelected(viewer) {
1655
- viewer.models.forEach((model => model.isolateObjects(viewer.selected)));
1933
+ viewer.models.forEach(model => model.isolateObjects(viewer.selected));
1656
1934
  viewer.update();
1657
1935
  viewer.emitEvent({
1658
1936
  type: "isolate"
@@ -1683,7 +1961,7 @@ function resetView(viewer) {
1683
1961
  function selectModel(viewer, handle) {
1684
1962
  const selection = viewer.getComponent("SelectionComponent");
1685
1963
  selection.clearSelection();
1686
- viewer.models.filter((model => model.handle === handle)).forEach((model => selection.select(model.getObjects(), model)));
1964
+ viewer.models.filter(model => model.handle === handle).forEach(model => selection.select(model.getObjects(), model));
1687
1965
  viewer.update();
1688
1966
  viewer.emit({
1689
1967
  type: "select",
@@ -1702,11 +1980,11 @@ function setMarkupColor(viewer, r = 255, g = 0, b = 0) {
1702
1980
  function setSelected(viewer, handles = []) {
1703
1981
  const selection = viewer.getComponent("SelectionComponent");
1704
1982
  selection.clearSelection();
1705
- viewer.models.forEach((model => {
1983
+ viewer.models.forEach(model => {
1706
1984
  const objects = model.getObjectsByHandles(handles);
1707
1985
  model.showObjects(objects);
1708
1986
  selection.select(objects, model);
1709
- }));
1987
+ });
1710
1988
  viewer.update();
1711
1989
  viewer.emitEvent({
1712
1990
  type: "show"
@@ -1719,7 +1997,7 @@ function setSelected(viewer, handles = []) {
1719
1997
  }
1720
1998
 
1721
1999
  function showAll(viewer) {
1722
- viewer.models.forEach((model => model.showAllObjects()));
2000
+ viewer.models.forEach(model => model.showAllObjects());
1723
2001
  viewer.update();
1724
2002
  viewer.emitEvent({
1725
2003
  type: "showall"
@@ -1733,17 +2011,17 @@ function zoomToExtents(viewer) {
1733
2011
  function zoomToObjects(viewer, handles = []) {
1734
2012
  const handleSet = new Set(handles);
1735
2013
  const objects = [];
1736
- viewer.scene.traverseVisible((child => {
2014
+ viewer.scene.traverseVisible(child => {
1737
2015
  var _a;
1738
- if (handleSet.has((_a = child.userData) === null || _a === undefined ? undefined : _a.handle)) objects.push(child);
1739
- }));
1740
- const extents = objects.reduce(((result, object) => result.expandByObject(object)), new Box3);
2016
+ if (handleSet.has((_a = child.userData) === null || _a === void 0 ? void 0 : _a.handle)) objects.push(child);
2017
+ });
2018
+ const extents = objects.reduce((result, object) => result.expandByObject(object), new Box3);
1741
2019
  if (extents.isEmpty()) extents.copy(viewer.extents);
1742
2020
  zoomTo(viewer, extents);
1743
2021
  }
1744
2022
 
1745
2023
  function zoomToSelected(viewer) {
1746
- const extents = viewer.selected.reduce(((result, object) => result.expandByObject(object)), new Box3);
2024
+ const extents = viewer.selected.reduce((result, object) => result.expandByObject(object), new Box3);
1747
2025
  if (extents.isEmpty()) extents.copy(viewer.extents);
1748
2026
  zoomTo(viewer, extents);
1749
2027
  }
@@ -1796,25 +2074,25 @@ commands.registerCommand("zoomToObjects", zoomToObjects);
1796
2074
 
1797
2075
  commands.registerCommand("zoomToSelected", zoomToSelected);
1798
2076
 
1799
- commands.registerCommand("top", (viewer => setDefaultViewPosition(viewer, "top")));
2077
+ commands.registerCommand("top", viewer => setDefaultViewPosition(viewer, "top"));
1800
2078
 
1801
- commands.registerCommand("bottom", (viewer => setDefaultViewPosition(viewer, "bottom")));
2079
+ commands.registerCommand("bottom", viewer => setDefaultViewPosition(viewer, "bottom"));
1802
2080
 
1803
- commands.registerCommand("left", (viewer => setDefaultViewPosition(viewer, "left")));
2081
+ commands.registerCommand("left", viewer => setDefaultViewPosition(viewer, "left"));
1804
2082
 
1805
- commands.registerCommand("right", (viewer => setDefaultViewPosition(viewer, "right")));
2083
+ commands.registerCommand("right", viewer => setDefaultViewPosition(viewer, "right"));
1806
2084
 
1807
- commands.registerCommand("front", (viewer => setDefaultViewPosition(viewer, "front")));
2085
+ commands.registerCommand("front", viewer => setDefaultViewPosition(viewer, "front"));
1808
2086
 
1809
- commands.registerCommand("back", (viewer => setDefaultViewPosition(viewer, "back")));
2087
+ commands.registerCommand("back", viewer => setDefaultViewPosition(viewer, "back"));
1810
2088
 
1811
- commands.registerCommand("sw", (viewer => setDefaultViewPosition(viewer, "sw")));
2089
+ commands.registerCommand("sw", viewer => setDefaultViewPosition(viewer, "sw"));
1812
2090
 
1813
- commands.registerCommand("se", (viewer => setDefaultViewPosition(viewer, "se")));
2091
+ commands.registerCommand("se", viewer => setDefaultViewPosition(viewer, "se"));
1814
2092
 
1815
- commands.registerCommand("ne", (viewer => setDefaultViewPosition(viewer, "ne")));
2093
+ commands.registerCommand("ne", viewer => setDefaultViewPosition(viewer, "ne"));
1816
2094
 
1817
- commands.registerCommand("nw", (viewer => setDefaultViewPosition(viewer, "nw")));
2095
+ commands.registerCommand("nw", viewer => setDefaultViewPosition(viewer, "nw"));
1818
2096
 
1819
2097
  commands.registerCommandAlias("clearMarkup", "clearOverlay");
1820
2098
 
@@ -1867,9 +2145,9 @@ class CameraComponent {
1867
2145
  const rendererSize = this.viewer.renderer.getSize(new Vector2);
1868
2146
  const aspect = rendererSize.x / rendererSize.y;
1869
2147
  let camera;
1870
- this.viewer.scene.traverse((object => {
2148
+ this.viewer.scene.traverse(object => {
1871
2149
  if (object.isCamera) if (!camera) camera = object; else if (object.isPerspectiveCamera && camera.isOrthographicCamera) camera = object;
1872
- }));
2150
+ });
1873
2151
  if (camera) {
1874
2152
  camera.isDefaultCamera = true;
1875
2153
  camera.scale.set(1, 1, 1);
@@ -1909,7 +2187,7 @@ class ExtentsComponent {
1909
2187
  constructor(viewer) {
1910
2188
  this.syncExtents = () => {
1911
2189
  const extents = new Box3;
1912
- this.viewer.models.forEach((model => model.getExtents(extents)));
2190
+ this.viewer.models.forEach(model => model.getExtents(extents));
1913
2191
  this.viewer.extents.copy(extents);
1914
2192
  this.viewer.extents.getCenter(this.viewer.target);
1915
2193
  };
@@ -2119,7 +2397,7 @@ class HighlighterComponent {
2119
2397
  const {edgesVisibility: edgesVisibility} = this.viewer.options;
2120
2398
  if (!Array.isArray(objects)) objects = [ objects ];
2121
2399
  if (!objects.length) return;
2122
- objects.filter((object => !object.userData.isEdge)).forEach((object => {
2400
+ objects.filter(object => !object.userData.isEdge).forEach(object => {
2123
2401
  if (object.isHighlighted) return;
2124
2402
  if (object.isLine || object.isLineSegments) {
2125
2403
  const positions = object.geometry.attributes.position.array;
@@ -2149,19 +2427,19 @@ class HighlighterComponent {
2149
2427
  object.material = this.facesMaterial;
2150
2428
  object.isHighlighted = true;
2151
2429
  }
2152
- }));
2430
+ });
2153
2431
  }
2154
2432
  unhighlight(objects) {
2155
2433
  if (!Array.isArray(objects)) objects = [ objects ];
2156
2434
  if (!objects.length) return;
2157
- objects.forEach((object => {
2435
+ objects.forEach(object => {
2158
2436
  if (!object.isHighlighted) return;
2159
2437
  object.isHighlighted = false;
2160
2438
  object.material = object.userData.originalMaterial;
2161
2439
  object.userData.highlightWireframe.removeFromParent();
2162
2440
  delete object.userData.originalMaterial;
2163
2441
  delete object.userData.highlightWireframe;
2164
- }));
2442
+ });
2165
2443
  }
2166
2444
  syncHighlightColors() {
2167
2445
  const {facesColor: facesColor, facesTransparancy: facesTransparancy, facesOverlap: facesOverlap} = this.viewer.options;
@@ -2177,16 +2455,16 @@ class HighlighterComponent {
2177
2455
  this.lineGlowMaterial.color.setRGB(edgesColor.r / 255, edgesColor.g / 255, edgesColor.b / 255);
2178
2456
  this.lineGlowMaterial.depthTest = !edgesOverlap;
2179
2457
  this.lineGlowMaterial.depthWrite = !edgesOverlap;
2180
- this.viewer.selected.forEach((selected => {
2458
+ this.viewer.selected.forEach(selected => {
2181
2459
  const wireframe = selected.userData.highlightWireframe;
2182
2460
  if (wireframe) wireframe.visible = edgesVisibility;
2183
- }));
2461
+ });
2184
2462
  }
2185
2463
  viewerResize(event) {
2186
2464
  var _a, _b, _c;
2187
- (_a = this.renderTarget) === null || _a === undefined ? undefined : _a.setSize(event.width, event.height);
2188
- (_b = this.edgesMaterial) === null || _b === undefined ? undefined : _b.resolution.set(event.width, event.height);
2189
- (_c = this.lineGlowMaterial) === null || _c === undefined ? undefined : _c.resolution.set(event.width, event.height);
2465
+ (_a = this.renderTarget) === null || _a === void 0 ? void 0 : _a.setSize(event.width, event.height);
2466
+ (_b = this.edgesMaterial) === null || _b === void 0 ? void 0 : _b.resolution.set(event.width, event.height);
2467
+ (_c = this.lineGlowMaterial) === null || _c === void 0 ? void 0 : _c.resolution.set(event.width, event.height);
2190
2468
  }
2191
2469
  }
2192
2470
 
@@ -2201,15 +2479,15 @@ class SelectionComponent {
2201
2479
  const upPosition = this.getMousePosition(event, new Vector2);
2202
2480
  if (upPosition.distanceTo(this.downPosition) !== 0) return;
2203
2481
  let intersections = [];
2204
- this.viewer.models.forEach((model => {
2482
+ this.viewer.models.forEach(model => {
2205
2483
  const objects = model.getVisibleObjects();
2206
2484
  const intersects = this.getPointerIntersects(upPosition, objects);
2207
2485
  if (intersects.length > 0) intersections.push({
2208
2486
  ...intersects[0],
2209
2487
  model: model
2210
2488
  });
2211
- }));
2212
- intersections = intersections.sort(((a, b) => a.distance - b.distance));
2489
+ });
2490
+ intersections = intersections.sort((a, b) => a.distance - b.distance);
2213
2491
  if (!event.shiftKey) this.clearSelection();
2214
2492
  if (intersections.length > 0) {
2215
2493
  const model = intersections[0].model;
@@ -2272,27 +2550,27 @@ class SelectionComponent {
2272
2550
  }
2273
2551
  select(objects, model) {
2274
2552
  if (!model) {
2275
- this.viewer.models.forEach((model => this.select(objects, model)));
2553
+ this.viewer.models.forEach(model => this.select(objects, model));
2276
2554
  return;
2277
2555
  }
2278
2556
  if (!Array.isArray(objects)) objects = [ objects ];
2279
2557
  if (!objects.length) return;
2280
2558
  model.showOriginalObjects(objects);
2281
2559
  this.highlighter.highlight(objects);
2282
- objects.forEach((object => this.viewer.selected.push(object)));
2283
- objects.forEach((object => object.isSelected = true));
2560
+ objects.forEach(object => this.viewer.selected.push(object));
2561
+ objects.forEach(object => object.isSelected = true);
2284
2562
  }
2285
2563
  deselect(objects, model) {
2286
2564
  if (!model) {
2287
- this.viewer.models.forEach((model => this.select(objects, model)));
2565
+ this.viewer.models.forEach(model => this.select(objects, model));
2288
2566
  return;
2289
2567
  }
2290
2568
  if (!Array.isArray(objects)) objects = [ objects ];
2291
2569
  if (!objects.length) return;
2292
2570
  this.highlighter.unhighlight(objects);
2293
2571
  model.hideOriginalObjects(objects);
2294
- this.viewer.selected = this.viewer.selected.filter((x => !objects.includes(x)));
2295
- objects.forEach((object => object.isSelected = false));
2572
+ this.viewer.selected = this.viewer.selected.filter(x => !objects.includes(x));
2573
+ objects.forEach(object => object.isSelected = false);
2296
2574
  }
2297
2575
  toggleSelection(objects, model) {
2298
2576
  if (!Array.isArray(objects)) objects = [ objects ];
@@ -2302,8 +2580,8 @@ class SelectionComponent {
2302
2580
  clearSelection() {
2303
2581
  if (!this.viewer.selected.length) return;
2304
2582
  this.highlighter.unhighlight(this.viewer.selected);
2305
- this.viewer.models.forEach((model => model.hideOriginalObjects(this.viewer.selected)));
2306
- this.viewer.selected.forEach((object => object.isSelected = false));
2583
+ this.viewer.models.forEach(model => model.hideOriginalObjects(this.viewer.selected));
2584
+ this.viewer.selected.forEach(object => object.isSelected = false);
2307
2585
  this.viewer.selected.length = 0;
2308
2586
  }
2309
2587
  }
@@ -2339,8 +2617,8 @@ class WCSHelper extends Object3D {
2339
2617
  Y: [ [ new Mesh(arrowGeometry, matGreen), [ 0, .5, 0 ], null ], [ new Mesh(lineGeometry, matGreen), null, null ], [ new Sprite(spriteGreen), [ 0, 1.55, 0 ] ] ],
2340
2618
  Z: [ [ new Mesh(arrowGeometry, matBlue), [ 0, 0, .5 ], [ Math.PI / 2, 0, 0 ] ], [ new Mesh(lineGeometry, matBlue), null, [ Math.PI / 2, 0, 0 ] ], [ new Sprite(spriteBlue), [ 0, 0, 1.55 ] ] ]
2341
2619
  };
2342
- Object.keys(axesMap).forEach((key => {
2343
- axesMap[key].forEach((objects => {
2620
+ Object.keys(axesMap).forEach(key => {
2621
+ axesMap[key].forEach(objects => {
2344
2622
  const object = objects[0];
2345
2623
  const position = objects[1];
2346
2624
  const rotation = objects[2];
@@ -2349,14 +2627,14 @@ class WCSHelper extends Object3D {
2349
2627
  if (rotation) object.rotation.set(rotation[0], rotation[1], rotation[2]);
2350
2628
  object.updateMatrixWorld();
2351
2629
  this.add(object);
2352
- }));
2353
- }));
2630
+ });
2631
+ });
2354
2632
  }
2355
2633
  dispose() {
2356
- this.traverse((object => {
2634
+ this.traverse(object => {
2357
2635
  if (object.geometry) object.geometry.dispose();
2358
2636
  if (object.material) object.material.dispose();
2359
- }));
2637
+ });
2360
2638
  }
2361
2639
  getSpriteMaterial(color, text) {
2362
2640
  const canvas = document.createElement("canvas");
@@ -2418,23 +2696,23 @@ class WCSHelperComponent {
2418
2696
 
2419
2697
  const components = componentsRegistry("threejs");
2420
2698
 
2421
- components.registerComponent("ExtentsComponent", (viewer => new ExtentsComponent(viewer)));
2699
+ components.registerComponent("ExtentsComponent", viewer => new ExtentsComponent(viewer));
2422
2700
 
2423
- components.registerComponent("CameraComponent", (viewer => new CameraComponent(viewer)));
2701
+ components.registerComponent("CameraComponent", viewer => new CameraComponent(viewer));
2424
2702
 
2425
- components.registerComponent("BackgroundComponent", (viewer => new BackgroundComponent(viewer)));
2703
+ components.registerComponent("BackgroundComponent", viewer => new BackgroundComponent(viewer));
2426
2704
 
2427
- components.registerComponent("LightComponent", (viewer => new LightComponent(viewer)));
2705
+ components.registerComponent("LightComponent", viewer => new LightComponent(viewer));
2428
2706
 
2429
- components.registerComponent("ResizeCanvasComponent", (viewer => new ResizeCanvasComponent(viewer)));
2707
+ components.registerComponent("ResizeCanvasComponent", viewer => new ResizeCanvasComponent(viewer));
2430
2708
 
2431
- components.registerComponent("RenderLoopComponent", (viewer => new RenderLoopComponent(viewer)));
2709
+ components.registerComponent("RenderLoopComponent", viewer => new RenderLoopComponent(viewer));
2432
2710
 
2433
- components.registerComponent("HighlighterComponent", (viewer => new HighlighterComponent(viewer)));
2711
+ components.registerComponent("HighlighterComponent", viewer => new HighlighterComponent(viewer));
2434
2712
 
2435
- components.registerComponent("SelectionComponent", (viewer => new SelectionComponent(viewer)));
2713
+ components.registerComponent("SelectionComponent", viewer => new SelectionComponent(viewer));
2436
2714
 
2437
- components.registerComponent("WCSHelperComponent", (viewer => new WCSHelperComponent(viewer)));
2715
+ components.registerComponent("WCSHelperComponent", viewer => new WCSHelperComponent(viewer));
2438
2716
 
2439
2717
  class GLTFLoadingManager extends LoadingManager {
2440
2718
  constructor(file, params = {}) {
@@ -2449,19 +2727,19 @@ class GLTFLoadingManager extends LoadingManager {
2449
2727
  this.fileURL = file;
2450
2728
  this.resourcePath = LoaderUtils.extractUrlBase(file);
2451
2729
  } else {
2452
- externalFiles.forEach(((value, key) => this.fileURL = value === file ? key : this.fileURL));
2730
+ externalFiles.forEach((value, key) => this.fileURL = value === file ? key : this.fileURL);
2453
2731
  externalFiles.set(this.fileURL, file);
2454
2732
  }
2455
- externalFiles.forEach(((value, key) => {
2733
+ externalFiles.forEach((value, key) => {
2456
2734
  let dataURL;
2457
2735
  if (typeof value === "string") dataURL = value; else dataURL = URL.createObjectURL(new Blob([ value ]));
2458
2736
  this.dataURLs.set(key, dataURL);
2459
- }));
2460
- this.setURLModifier((url => {
2737
+ });
2738
+ this.setURLModifier(url => {
2461
2739
  const key = decodeURI(url).replace(this.path, "").replace(this.resourcePath, "").replace(/^(\.?\/)/, "");
2462
2740
  const dataURL = this.dataURLs.get(key);
2463
- return dataURL !== null && dataURL !== undefined ? dataURL : url;
2464
- }));
2741
+ return dataURL !== null && dataURL !== void 0 ? dataURL : url;
2742
+ });
2465
2743
  }
2466
2744
  dispose() {
2467
2745
  this.dataURLs.forEach(URL.revokeObjectURL);
@@ -2479,7 +2757,7 @@ class ModelImpl {
2479
2757
  }
2480
2758
  function disposeMaterials(material) {
2481
2759
  const materials = Array.isArray(material) ? material : [ material ];
2482
- materials.forEach((material => disposeMaterial(material)));
2760
+ materials.forEach(material => disposeMaterial(material));
2483
2761
  }
2484
2762
  function disposeObject(object) {
2485
2763
  if (object.geometry) object.geometry.dispose();
@@ -2489,17 +2767,17 @@ class ModelImpl {
2489
2767
  this.scene.clear();
2490
2768
  }
2491
2769
  getExtents(target) {
2492
- this.scene.traverseVisible((object => !object.children.length && target.expandByObject(object)));
2770
+ this.scene.traverseVisible(object => !object.children.length && target.expandByObject(object));
2493
2771
  return target;
2494
2772
  }
2495
2773
  getObjects() {
2496
2774
  const objects = [];
2497
- this.scene.traverse((object => objects.push(object)));
2775
+ this.scene.traverse(object => objects.push(object));
2498
2776
  return objects;
2499
2777
  }
2500
2778
  getVisibleObjects() {
2501
2779
  const objects = [];
2502
- this.scene.traverseVisible((object => objects.push(object)));
2780
+ this.scene.traverseVisible(object => objects.push(object));
2503
2781
  return objects;
2504
2782
  }
2505
2783
  hasObject(object) {
@@ -2511,23 +2789,23 @@ class ModelImpl {
2511
2789
  }
2512
2790
  getOwnObjects(objects) {
2513
2791
  if (!Array.isArray(objects)) objects = [ objects ];
2514
- return objects.filter((object => this.hasObject(object)));
2792
+ return objects.filter(object => this.hasObject(object));
2515
2793
  }
2516
2794
  getObjectsByHandles(handles) {
2517
2795
  const handleSet = new Set(handles);
2518
2796
  const objects = [];
2519
- this.scene.traverse((object => handleSet.has(object.userData.handle) && objects.push(object)));
2797
+ this.scene.traverse(object => handleSet.has(object.userData.handle) && objects.push(object));
2520
2798
  return objects;
2521
2799
  }
2522
2800
  getHandlesByObjects(objects) {
2523
2801
  if (!Array.isArray(objects)) objects = [ objects ];
2524
2802
  const handlesSet = new Set;
2525
- this.getOwnObjects(objects).forEach((object => handlesSet.add(object.userData.handle)));
2803
+ this.getOwnObjects(objects).forEach(object => handlesSet.add(object.userData.handle));
2526
2804
  return Array.from(handlesSet);
2527
2805
  }
2528
2806
  hideObjects(objects) {
2529
2807
  if (!Array.isArray(objects)) objects = [ objects ];
2530
- this.getOwnObjects(objects).forEach((object => object.visible = false));
2808
+ this.getOwnObjects(objects).forEach(object => object.visible = false);
2531
2809
  return this;
2532
2810
  }
2533
2811
  hideAllObjects() {
@@ -2536,20 +2814,20 @@ class ModelImpl {
2536
2814
  isolateObjects(objects) {
2537
2815
  if (!Array.isArray(objects)) objects = [ objects ];
2538
2816
  const visibleSet = new Set(objects);
2539
- this.getOwnObjects(objects).forEach((object => object.traverseAncestors((parent => visibleSet.add(parent)))));
2540
- this.scene.traverse((object => object.visible = visibleSet.has(object)));
2817
+ this.getOwnObjects(objects).forEach(object => object.traverseAncestors(parent => visibleSet.add(parent)));
2818
+ this.scene.traverse(object => object.visible = visibleSet.has(object));
2541
2819
  return this;
2542
2820
  }
2543
2821
  showObjects(objects) {
2544
2822
  if (!Array.isArray(objects)) objects = [ objects ];
2545
- this.getOwnObjects(objects).forEach((object => {
2823
+ this.getOwnObjects(objects).forEach(object => {
2546
2824
  object.visible = true;
2547
- object.traverseAncestors((parent => parent.visible = true));
2548
- }));
2825
+ object.traverseAncestors(parent => parent.visible = true);
2826
+ });
2549
2827
  return this;
2550
2828
  }
2551
2829
  showAllObjects() {
2552
- this.scene.traverse((object => object.visible = true));
2830
+ this.scene.traverse(object => object.visible = true);
2553
2831
  return this;
2554
2832
  }
2555
2833
  showOriginalObjects(objects) {
@@ -2561,10 +2839,10 @@ class ModelImpl {
2561
2839
  explode(scale = 0, coeff = 4) {
2562
2840
  function calcExplodeDepth(object, depth) {
2563
2841
  let res = depth;
2564
- object.children.forEach((x => {
2842
+ object.children.forEach(x => {
2565
2843
  const objectDepth = calcExplodeDepth(x, depth + 1);
2566
2844
  if (res < objectDepth) res = objectDepth;
2567
- }));
2845
+ });
2568
2846
  object.userData.originalPosition = object.position.clone();
2569
2847
  object.userData.originalCenter = (new Box3).setFromObject(object).getCenter(new Vector3);
2570
2848
  object.userData.isExplodeLocked = depth > 2 && object.children.length === 0;
@@ -2586,7 +2864,7 @@ class ModelImpl {
2586
2864
  const objectOffset = objectCenter.clone().sub(parentCenter).multiplyScalar(objectScale);
2587
2865
  object.position.add(objectOffset);
2588
2866
  }
2589
- object.children.forEach((x => explodeObject(x, depth + 1)));
2867
+ object.children.forEach(x => explodeObject(x, depth + 1));
2590
2868
  }
2591
2869
  explodeObject(this.scene, 0);
2592
2870
  this.scene.updateMatrixWorld();
@@ -2642,9 +2920,9 @@ class DynamicModelImpl extends ModelImpl {
2642
2920
  }
2643
2921
  getObjects() {
2644
2922
  const objects = [];
2645
- this.gltfLoader.originalObjects.forEach((object => {
2923
+ this.gltfLoader.originalObjects.forEach(object => {
2646
2924
  objects.push(object);
2647
- }));
2925
+ });
2648
2926
  return objects;
2649
2927
  }
2650
2928
  getVisibleObjects() {
@@ -2656,16 +2934,16 @@ class DynamicModelImpl extends ModelImpl {
2656
2934
  getObjectsByHandles(handles) {
2657
2935
  const handlesSet = new Set(handles);
2658
2936
  const objects = [];
2659
- handlesSet.forEach((handle => {
2937
+ handlesSet.forEach(handle => {
2660
2938
  const handle2 = `${this.modelId}_${handle}`;
2661
2939
  const handles = this.gltfLoader.handleToObjects.get(handle2) || [];
2662
2940
  objects.push(...Array.from(handles));
2663
- }));
2941
+ });
2664
2942
  return objects;
2665
2943
  }
2666
2944
  getHandlesByObjects(objects) {
2667
2945
  const handles = super.getHandlesByObjects(objects);
2668
- return handles.map((x => x.split("_").pop()));
2946
+ return handles.map(x => x.split("_").pop());
2669
2947
  }
2670
2948
  hideObjects(objects) {
2671
2949
  const handles = super.getHandlesByObjects(objects);
@@ -2706,13 +2984,24 @@ const GL_COMPONENT_TYPES = {
2706
2984
  };
2707
2985
 
2708
2986
  const GL_CONSTANTS = {
2987
+ FLOAT: 5126,
2988
+ FLOAT_MAT3: 35675,
2989
+ FLOAT_MAT4: 35676,
2990
+ FLOAT_VEC2: 35664,
2991
+ FLOAT_VEC3: 35665,
2992
+ FLOAT_VEC4: 35666,
2993
+ LINEAR: 9729,
2994
+ REPEAT: 10497,
2995
+ SAMPLER_2D: 35678,
2709
2996
  POINTS: 0,
2710
2997
  LINES: 1,
2711
2998
  LINE_LOOP: 2,
2712
2999
  LINE_STRIP: 3,
2713
3000
  TRIANGLES: 4,
2714
3001
  TRIANGLE_STRIP: 5,
2715
- TRIANGLE_FAN: 6
3002
+ TRIANGLE_FAN: 6,
3003
+ UNSIGNED_BYTE: 5121,
3004
+ UNSIGNED_SHORT: 5123
2716
3005
  };
2717
3006
 
2718
3007
  const MAX_GAP = 128 * 1024;
@@ -2760,19 +3049,19 @@ class GltfStructure {
2760
3049
  return this.json;
2761
3050
  }
2762
3051
  scheduleRequest(request) {
2763
- return new Promise(((resolve, reject) => {
3052
+ return new Promise((resolve, reject) => {
2764
3053
  this.pendingRequests.push({
2765
3054
  ...request,
2766
3055
  _resolve: resolve,
2767
3056
  _reject: reject
2768
3057
  });
2769
- }));
3058
+ });
2770
3059
  }
2771
3060
  async flushBufferRequests() {
2772
3061
  if (!this.pendingRequests || this.pendingRequests.length === 0) return;
2773
3062
  const requests = [ ...this.pendingRequests ];
2774
3063
  this.pendingRequests = [];
2775
- requests.sort(((a, b) => a.offset - b.offset));
3064
+ requests.sort((a, b) => a.offset - b.offset);
2776
3065
  const mergedRanges = [];
2777
3066
  let current = {
2778
3067
  start: requests[0].offset,
@@ -2832,7 +3121,7 @@ class GltfStructure {
2832
3121
  });
2833
3122
  }
2834
3123
  }
2835
- const promises = finalRanges.map((async (range, index) => {
3124
+ const promises = finalRanges.map(async (range, index) => {
2836
3125
  await this.loader.waitForChunkSlot();
2837
3126
  try {
2838
3127
  const length = range.end - range.start;
@@ -2860,7 +3149,7 @@ class GltfStructure {
2860
3149
  } finally {
2861
3150
  this.loader.releaseChunkSlot();
2862
3151
  }
2863
- }));
3152
+ });
2864
3153
  await Promise.all(promises);
2865
3154
  this.pendingRequests = [];
2866
3155
  }
@@ -3017,7 +3306,7 @@ class GltfStructure {
3017
3306
  };
3018
3307
  const texturePromises = [];
3019
3308
  for (let i = 0; i < this.json.textures.length; i++) {
3020
- texturePromises.push(loadTexture(this.json.textures[i].source).then((texture => this.textureCache.set(i, texture))));
3309
+ texturePromises.push(loadTexture(this.json.textures[i].source).then(texture => this.textureCache.set(i, texture)));
3021
3310
  }
3022
3311
  await Promise.all(texturePromises);
3023
3312
  }
@@ -3096,9 +3385,9 @@ class GltfStructure {
3096
3385
  return null;
3097
3386
  }
3098
3387
  disposeMaterials() {
3099
- this.textureCache.forEach((texture => texture.dispose()));
3388
+ this.textureCache.forEach(texture => texture.dispose());
3100
3389
  this.textureCache.clear();
3101
- this.materials.forEach((material => {
3390
+ this.materials.forEach(material => {
3102
3391
  if (material.map) material.map.dispose();
3103
3392
  if (material.lightMap) material.lightMap.dispose();
3104
3393
  if (material.bumpMap) material.bumpMap.dispose();
@@ -3110,9 +3399,9 @@ class GltfStructure {
3110
3399
  if (material.roughnessMap) material.roughnessMap.dispose();
3111
3400
  if (material.emissiveMap) material.emissiveMap.dispose();
3112
3401
  material.dispose();
3113
- }));
3402
+ });
3114
3403
  this.materials.clear();
3115
- this.materialCache.forEach((materialCache => {
3404
+ this.materialCache.forEach(materialCache => {
3116
3405
  if (materialCache.mesh) {
3117
3406
  if (materialCache.mesh.map) materialCache.mesh.map.dispose();
3118
3407
  if (materialCache.mesh.lightMap) materialCache.mesh.lightMap.dispose();
@@ -3134,7 +3423,7 @@ class GltfStructure {
3134
3423
  if (materialCache.lines.map) materialCache.lines.map.dispose();
3135
3424
  materialCache.lines.dispose();
3136
3425
  }
3137
- }));
3426
+ });
3138
3427
  this.materialCache.clear();
3139
3428
  }
3140
3429
  estimateNodeSize(meshIndex) {
@@ -3259,29 +3548,29 @@ class DynamicGltfLoader {
3259
3548
  setMemoryLimit(bytesLimit) {}
3260
3549
  estimateGeometrySize(nodeGroup) {
3261
3550
  let totalSize = 0;
3262
- nodeGroup.traverse((child => {
3551
+ nodeGroup.traverse(child => {
3263
3552
  if (child.geometry) {
3264
3553
  if (this.abortController.signal.aborted) {
3265
3554
  throw new DOMException("Loading aborted", "AbortError");
3266
3555
  }
3267
3556
  const geometry = child.geometry;
3268
3557
  if (geometry.attributes) {
3269
- Object.values(geometry.attributes).forEach((attribute => {
3558
+ Object.values(geometry.attributes).forEach(attribute => {
3270
3559
  if (attribute && attribute.array) {
3271
3560
  totalSize += attribute.array.byteLength;
3272
3561
  }
3273
- }));
3562
+ });
3274
3563
  }
3275
3564
  if (geometry.index && geometry.index.array) {
3276
3565
  totalSize += geometry.index.array.byteLength;
3277
3566
  }
3278
3567
  }
3279
- }));
3568
+ });
3280
3569
  return totalSize;
3281
3570
  }
3282
3571
  recalculateScene() {
3283
3572
  const geometries = [];
3284
- this.scene.traverse((object => {
3573
+ this.scene.traverse(object => {
3285
3574
  if (this.abortController.signal.aborted) {
3286
3575
  throw new DOMException("Loading aborted", "AbortError");
3287
3576
  }
@@ -3294,11 +3583,11 @@ class DynamicGltfLoader {
3294
3583
  distance: object.position.distanceTo(this.camera.position)
3295
3584
  });
3296
3585
  }
3297
- }));
3586
+ });
3298
3587
  if (this.abortController.signal.aborted) {
3299
3588
  throw new DOMException("Loading aborted", "AbortError");
3300
3589
  }
3301
- geometries.sort(((a, b) => b.distance - a.distance));
3590
+ geometries.sort((a, b) => b.distance - a.distance);
3302
3591
  let currentMemoryUsage = 0;
3303
3592
  for (const geo of geometries) {
3304
3593
  currentMemoryUsage += geo.size;
@@ -3410,9 +3699,9 @@ class DynamicGltfLoader {
3410
3699
  node.loading = false;
3411
3700
  return;
3412
3701
  }
3413
- bufferRequests.sort(((a, b) => a.offset - b.offset));
3702
+ bufferRequests.sort((a, b) => a.offset - b.offset);
3414
3703
  const minOffset = bufferRequests[0].offset;
3415
- const maxOffset = Math.max(...bufferRequests.map((r => r.offset + r.length)));
3704
+ const maxOffset = Math.max(...bufferRequests.map(r => r.offset + r.length));
3416
3705
  const totalLength = maxOffset - minOffset;
3417
3706
  const {buffer: buffer, relOffset: baseRelOffset} = await node.structure.scheduleRequest({
3418
3707
  offset: minOffset,
@@ -3428,25 +3717,25 @@ class DynamicGltfLoader {
3428
3717
  const geometry = new BufferGeometry;
3429
3718
  const reqs = primitiveReqMap.get(primIdx);
3430
3719
  if (primitive.attributes.POSITION !== undefined) {
3431
- const req = reqs.find((r => r.type === "position" && r.accessorIndex === primitive.attributes.POSITION));
3720
+ const req = reqs.find(r => r.type === "position" && r.accessorIndex === primitive.attributes.POSITION);
3432
3721
  const accessor = node.structure.json.accessors[primitive.attributes.POSITION];
3433
3722
  const components = node.structure.getNumComponents(accessor.type);
3434
3723
  geometry.setAttribute("position", new BufferAttribute(req.data, components));
3435
3724
  }
3436
3725
  if (primitive.attributes.NORMAL !== undefined) {
3437
- const req = reqs.find((r => r.type === "normal" && r.accessorIndex === primitive.attributes.NORMAL));
3726
+ const req = reqs.find(r => r.type === "normal" && r.accessorIndex === primitive.attributes.NORMAL);
3438
3727
  const accessor = node.structure.json.accessors[primitive.attributes.NORMAL];
3439
3728
  const components = node.structure.getNumComponents(accessor.type);
3440
3729
  geometry.setAttribute("normal", new BufferAttribute(req.data, components));
3441
3730
  }
3442
3731
  if (primitive.attributes.TEXCOORD_0 !== undefined) {
3443
- const req = reqs.find((r => r.type === "uv" && r.accessorIndex === primitive.attributes.TEXCOORD_0));
3732
+ const req = reqs.find(r => r.type === "uv" && r.accessorIndex === primitive.attributes.TEXCOORD_0);
3444
3733
  const accessor = node.structure.json.accessors[primitive.attributes.TEXCOORD_0];
3445
3734
  const components = node.structure.getNumComponents(accessor.type);
3446
3735
  geometry.setAttribute("uv", new BufferAttribute(req.data, components));
3447
3736
  }
3448
3737
  if (primitive.indices !== undefined) {
3449
- const req = reqs.find((r => r.type === "index" && r.accessorIndex === primitive.indices));
3738
+ const req = reqs.find(r => r.type === "index" && r.accessorIndex === primitive.indices);
3450
3739
  geometry.setIndex(new BufferAttribute(req.data, 1));
3451
3740
  }
3452
3741
  let material;
@@ -3545,14 +3834,14 @@ class DynamicGltfLoader {
3545
3834
  } else {
3546
3835
  this.scene.remove(node.object);
3547
3836
  }
3548
- node.object.traverse((child => {
3837
+ node.object.traverse(child => {
3549
3838
  if (child.geometry) {
3550
3839
  const geometrySize = this.geometryCache.get(child.geometry.uuid) || 0;
3551
3840
  this.currentMemoryUsage -= geometrySize;
3552
3841
  this.geometryCache.delete(child.geometry.uuid);
3553
3842
  child.geometry.dispose();
3554
3843
  }
3555
- }));
3844
+ });
3556
3845
  node.object = null;
3557
3846
  node.loaded = false;
3558
3847
  this.updateMemoryIndicator();
@@ -3561,7 +3850,7 @@ class DynamicGltfLoader {
3561
3850
  }
3562
3851
  checkDistances() {
3563
3852
  const cameraPosition = this.camera.position;
3564
- this.nodes.forEach(((node, nodeId) => {
3853
+ this.nodes.forEach((node, nodeId) => {
3565
3854
  const distance = cameraPosition.distanceTo(node.position);
3566
3855
  if (node.loaded) {
3567
3856
  if (distance > this.unloadDistance) {
@@ -3572,7 +3861,7 @@ class DynamicGltfLoader {
3572
3861
  this.loadNode(nodeId);
3573
3862
  }
3574
3863
  }
3575
- }));
3864
+ });
3576
3865
  }
3577
3866
  async loadStructure(structures) {
3578
3867
  this.clear();
@@ -3615,7 +3904,7 @@ class DynamicGltfLoader {
3615
3904
  }
3616
3905
  }
3617
3906
  const ignoreEdges = estimatedSize * 2 > this.memoryLimit;
3618
- this.nodesToLoad.sort(((a, b) => {
3907
+ this.nodesToLoad.sort((a, b) => {
3619
3908
  const nodeA = this.nodes.get(a);
3620
3909
  const nodeB = this.nodes.get(b);
3621
3910
  if (!nodeA?.geometryExtents || !nodeB?.geometryExtents) {
@@ -3626,16 +3915,16 @@ class DynamicGltfLoader {
3626
3915
  const volumeA = sizeA.x * sizeA.y * sizeA.z;
3627
3916
  const volumeB = sizeB.x * sizeB.y * sizeB.z;
3628
3917
  return volumeB - volumeA;
3629
- }));
3918
+ });
3630
3919
  if (!ignoreEdges && this.visibleEdges) {
3631
3920
  this.nodesToLoad.push(...this.edgeNodes);
3632
3921
  }
3633
3922
  this.dispatchEvent("databasechunk", {
3634
3923
  totalNodes: this.nodesToLoad.length,
3635
- structures: this.structures.map((s => ({
3924
+ structures: this.structures.map(s => ({
3636
3925
  id: s.id,
3637
- nodeCount: this.nodesToLoad.filter((nodeId => nodeId.startsWith(s.id))).length
3638
- })))
3926
+ nodeCount: this.nodesToLoad.filter(nodeId => nodeId.startsWith(s.id)).length
3927
+ }))
3639
3928
  });
3640
3929
  }
3641
3930
  async processNodeHierarchy(structure, nodeId, parentGroup) {
@@ -3755,9 +4044,9 @@ class DynamicGltfLoader {
3755
4044
  this.dispatchEvent("update");
3756
4045
  this.lastUpdateTime = currentTime;
3757
4046
  }
3758
- await new Promise((resolve => {
4047
+ await new Promise(resolve => {
3759
4048
  setTimeout(resolve, 0);
3760
- }));
4049
+ });
3761
4050
  }
3762
4051
  };
3763
4052
  try {
@@ -3802,12 +4091,12 @@ class DynamicGltfLoader {
3802
4091
  console.timeEnd("optimize scene");
3803
4092
  }
3804
4093
  cleanupPartialLoad() {
3805
- this.nodesToLoad.forEach((nodeId => {
4094
+ this.nodesToLoad.forEach(nodeId => {
3806
4095
  const node = this.nodes.get(nodeId);
3807
4096
  if (node && node.loading) {
3808
4097
  this.unloadNode(nodeId);
3809
4098
  }
3810
- }));
4099
+ });
3811
4100
  }
3812
4101
  createDefaultMaterial(primitiveMode = undefined) {
3813
4102
  if (primitiveMode === GL_CONSTANTS.POINTS) {
@@ -3891,7 +4180,7 @@ class DynamicGltfLoader {
3891
4180
  this.nodesToLoad = [];
3892
4181
  }
3893
4182
  removeOptimization() {
3894
- this.originalObjects.forEach((obj => obj.visible = true));
4183
+ this.originalObjects.forEach(obj => obj.visible = true);
3895
4184
  const disposeMerged = obj => {
3896
4185
  if (obj.parent) {
3897
4186
  obj.parent.remove(obj);
@@ -3919,13 +4208,13 @@ class DynamicGltfLoader {
3919
4208
  }
3920
4209
  clear() {
3921
4210
  this.chunkQueue = [];
3922
- this.structures.forEach((structure => {
4211
+ this.structures.forEach(structure => {
3923
4212
  if (structure) {
3924
4213
  structure.clear();
3925
4214
  }
3926
- }));
4215
+ });
3927
4216
  this.structures = [];
3928
- this.nodes.forEach((node => {
4217
+ this.nodes.forEach(node => {
3929
4218
  if (node.object) {
3930
4219
  if (node.object.parent) {
3931
4220
  node.object.parent.remove(node.object);
@@ -3935,72 +4224,72 @@ class DynamicGltfLoader {
3935
4224
  }
3936
4225
  if (node.object.material) {
3937
4226
  if (Array.isArray(node.object.material)) {
3938
- node.object.material.forEach((material => material.dispose()));
4227
+ node.object.material.forEach(material => material.dispose());
3939
4228
  } else {
3940
4229
  node.object.material.dispose();
3941
4230
  }
3942
4231
  }
3943
4232
  }
3944
- }));
4233
+ });
3945
4234
  this.nodes.clear();
3946
- this.loadedMeshes.forEach((mesh => {
4235
+ this.loadedMeshes.forEach(mesh => {
3947
4236
  if (mesh.geometry) mesh.geometry.dispose();
3948
4237
  if (mesh.material) {
3949
4238
  if (Array.isArray(mesh.material)) {
3950
- mesh.material.forEach((material => material.dispose()));
4239
+ mesh.material.forEach(material => material.dispose());
3951
4240
  } else {
3952
4241
  mesh.material.dispose();
3953
4242
  }
3954
4243
  }
3955
- }));
4244
+ });
3956
4245
  this.loadedMeshes.clear();
3957
- this.structureRoots.forEach((rootGroup => {
4246
+ this.structureRoots.forEach(rootGroup => {
3958
4247
  if (rootGroup) {
3959
- rootGroup.traverse((child => {
4248
+ rootGroup.traverse(child => {
3960
4249
  if (child.geometry) child.geometry.dispose();
3961
4250
  if (child.material) {
3962
4251
  if (Array.isArray(child.material)) {
3963
- child.material.forEach((material => material.dispose()));
4252
+ child.material.forEach(material => material.dispose());
3964
4253
  } else {
3965
4254
  child.material.dispose();
3966
4255
  }
3967
4256
  }
3968
- }));
4257
+ });
3969
4258
  if (rootGroup.parent) {
3970
4259
  rootGroup.parent.remove(rootGroup);
3971
4260
  }
3972
4261
  }
3973
- }));
4262
+ });
3974
4263
  this.structureRoots.clear();
3975
- this.mergedMesh.forEach((mesh => {
4264
+ this.mergedMesh.forEach(mesh => {
3976
4265
  if (mesh.geometry) mesh.geometry.dispose();
3977
4266
  if (mesh.material) {
3978
4267
  if (Array.isArray(mesh.material)) {
3979
- mesh.material.forEach((material => material.dispose()));
4268
+ mesh.material.forEach(material => material.dispose());
3980
4269
  } else {
3981
4270
  mesh.material.dispose();
3982
4271
  }
3983
4272
  }
3984
4273
  if (mesh.parent) mesh.parent.remove(mesh);
3985
- }));
4274
+ });
3986
4275
  this.mergedMesh.clear();
3987
- this.mergedLines.forEach((line => {
4276
+ this.mergedLines.forEach(line => {
3988
4277
  if (line.geometry) line.geometry.dispose();
3989
4278
  if (line.material) line.material.dispose();
3990
4279
  if (line.parent) line.parent.remove(line);
3991
- }));
4280
+ });
3992
4281
  this.mergedLines.clear();
3993
- this.mergedLineSegments.forEach((lineSegment => {
4282
+ this.mergedLineSegments.forEach(lineSegment => {
3994
4283
  if (lineSegment.geometry) lineSegment.geometry.dispose();
3995
4284
  if (lineSegment.material) lineSegment.material.dispose();
3996
4285
  if (lineSegment.parent) lineSegment.parent.remove(lineSegment);
3997
- }));
4286
+ });
3998
4287
  this.mergedLineSegments.clear();
3999
- this.mergedPoints.forEach((points => {
4288
+ this.mergedPoints.forEach(points => {
4000
4289
  if (points.geometry) points.geometry.dispose();
4001
4290
  if (points.material) points.material.dispose();
4002
4291
  if (points.parent) points.parent.remove(points);
4003
- }));
4292
+ });
4004
4293
  this.mergedPoints.clear();
4005
4294
  this.geometryCache.clear();
4006
4295
  this.materialCache.clear();
@@ -4042,12 +4331,12 @@ class DynamicGltfLoader {
4042
4331
  }
4043
4332
  removeEventListener(event, handler) {
4044
4333
  if (this.eventHandlers[event]) {
4045
- this.eventHandlers[event] = this.eventHandlers[event].filter((h => h !== handler));
4334
+ this.eventHandlers[event] = this.eventHandlers[event].filter(h => h !== handler);
4046
4335
  }
4047
4336
  }
4048
4337
  dispatchEvent(event, data) {
4049
4338
  if (this.eventHandlers[event]) {
4050
- this.eventHandlers[event].forEach((handler => handler(data)));
4339
+ this.eventHandlers[event].forEach(handler => handler(data));
4051
4340
  }
4052
4341
  }
4053
4342
  registerObjectWithHandle(object, handle) {
@@ -4066,9 +4355,9 @@ class DynamicGltfLoader {
4066
4355
  getHandlesByObjects(objects) {
4067
4356
  if (!objects.length) return [];
4068
4357
  const handles = new Set;
4069
- objects.forEach((obj => {
4358
+ objects.forEach(obj => {
4070
4359
  if (this.originalObjects.has(obj)) handles.add(obj.userData.handle);
4071
- }));
4360
+ });
4072
4361
  return Array.from(handles);
4073
4362
  }
4074
4363
  getMaterialId(material, index) {
@@ -4124,7 +4413,7 @@ class DynamicGltfLoader {
4124
4413
  this.originalObjects.clear();
4125
4414
  this.originalObjectsToSelection.clear();
4126
4415
  const structureGroups = new Map;
4127
- this.scene.traverse((object => {
4416
+ this.scene.traverse(object => {
4128
4417
  if (object.userData.structureId) {
4129
4418
  const structureId = object.userData.structureId;
4130
4419
  if (!structureGroups.has(structureId)) {
@@ -4151,7 +4440,7 @@ class DynamicGltfLoader {
4151
4440
  this.addToMaterialGroup(object, group.mapPoints, group.points);
4152
4441
  }
4153
4442
  }
4154
- }));
4443
+ });
4155
4444
  for (const group of structureGroups.values()) {
4156
4445
  group.mapMeshes.clear();
4157
4446
  group.mapLines.clear();
@@ -4162,12 +4451,12 @@ class DynamicGltfLoader {
4162
4451
  this.mergeLineSegmentGroups(group.lineSegments, group.rootGroup);
4163
4452
  this.mergePointsGroups(group.points, group.rootGroup);
4164
4453
  }
4165
- this.originalObjects.forEach((obj => {
4454
+ this.originalObjects.forEach(obj => {
4166
4455
  obj.visible = false;
4167
4456
  if (!(obj instanceof Points) && !obj.userData.isEdge) {
4168
4457
  this.originalObjectsToSelection.add(obj);
4169
4458
  }
4170
- }));
4459
+ });
4171
4460
  this.dispatchEvent("update");
4172
4461
  }
4173
4462
  mergeMeshGroups(materialGroups, rootGroup) {
@@ -4195,11 +4484,11 @@ class DynamicGltfLoader {
4195
4484
  this.mergedMesh.add(mergedMesh);
4196
4485
  this.optimizedOriginalMap.set(mergedMesh, optimizedObjects);
4197
4486
  mergedObjects.push(mergedMesh);
4198
- geometries.forEach((geometry => {
4487
+ geometries.forEach(geometry => {
4199
4488
  geometry.dispose();
4200
- }));
4489
+ });
4201
4490
  }
4202
- handles.forEach((handle => {
4491
+ handles.forEach(handle => {
4203
4492
  if (this.handleToOptimizedObjects.has(handle)) {
4204
4493
  const existingObjects = this.handleToOptimizedObjects.get(handle);
4205
4494
  existingObjects.push(...mergedObjects);
@@ -4207,12 +4496,12 @@ class DynamicGltfLoader {
4207
4496
  } else {
4208
4497
  this.handleToOptimizedObjects.set(handle, mergedObjects);
4209
4498
  }
4210
- }));
4499
+ });
4211
4500
  } catch (error) {
4212
4501
  console.error("Failed to merge meshes for material:", error);
4213
- group.objects.forEach((mesh => {
4502
+ group.objects.forEach(mesh => {
4214
4503
  mesh.visible = true;
4215
- }));
4504
+ });
4216
4505
  }
4217
4506
  }
4218
4507
  }
@@ -4221,15 +4510,15 @@ class DynamicGltfLoader {
4221
4510
  if (group.objects.length === 0) continue;
4222
4511
  const handles = new Set;
4223
4512
  let totalVertices = 0;
4224
- group.objects.map((line => {
4513
+ group.objects.map(line => {
4225
4514
  handles.add(line.userData.handle);
4226
4515
  totalVertices += line.geometry.attributes.position.count;
4227
- }));
4516
+ });
4228
4517
  const positions = new Float32Array(totalVertices * 3);
4229
4518
  let posOffset = 0;
4230
4519
  const indices = [];
4231
4520
  let vertexOffset = 0;
4232
- group.objects.forEach((line => {
4521
+ group.objects.forEach(line => {
4233
4522
  const geometry = line.geometry;
4234
4523
  const positionAttr = geometry.attributes.position;
4235
4524
  const vertexCount = positionAttr.count;
@@ -4247,7 +4536,7 @@ class DynamicGltfLoader {
4247
4536
  indices.push(vertexOffset + i, vertexOffset + i + 1);
4248
4537
  }
4249
4538
  vertexOffset += vertexCount;
4250
- }));
4539
+ });
4251
4540
  const geometry = new BufferGeometry;
4252
4541
  geometry.setAttribute("position", new BufferAttribute(positions, 3));
4253
4542
  geometry.setIndex(indices);
@@ -4261,7 +4550,7 @@ class DynamicGltfLoader {
4261
4550
  rootGroup.add(mergedLine);
4262
4551
  this.mergedLines.add(mergedLine);
4263
4552
  this.optimizedOriginalMap.set(mergedLine, group.objects);
4264
- handles.forEach((handle => {
4553
+ handles.forEach(handle => {
4265
4554
  if (this.handleToOptimizedObjects.has(handle)) {
4266
4555
  const existingObjects = this.handleToOptimizedObjects.get(handle);
4267
4556
  existingObjects.push(...mergedObjects);
@@ -4269,7 +4558,7 @@ class DynamicGltfLoader {
4269
4558
  } else {
4270
4559
  this.handleToOptimizedObjects.set(handle, mergedObjects);
4271
4560
  }
4272
- }));
4561
+ });
4273
4562
  }
4274
4563
  }
4275
4564
  mergeLineSegmentGroups(materialGroups, rootGroup) {
@@ -4297,11 +4586,11 @@ class DynamicGltfLoader {
4297
4586
  this.mergedLineSegments.add(mergedLine);
4298
4587
  this.optimizedOriginalMap.set(mergedLine, optimizedObjects);
4299
4588
  mergedObjects.push(mergedLine);
4300
- geometries.forEach((geometry => {
4589
+ geometries.forEach(geometry => {
4301
4590
  geometry.dispose();
4302
- }));
4591
+ });
4303
4592
  }
4304
- handles.forEach((handle => {
4593
+ handles.forEach(handle => {
4305
4594
  if (this.handleToOptimizedObjects.has(handle)) {
4306
4595
  const existingObjects = this.handleToOptimizedObjects.get(handle);
4307
4596
  existingObjects.push(...mergedObjects);
@@ -4309,12 +4598,12 @@ class DynamicGltfLoader {
4309
4598
  } else {
4310
4599
  this.handleToOptimizedObjects.set(handle, mergedObjects);
4311
4600
  }
4312
- }));
4601
+ });
4313
4602
  } catch (error) {
4314
4603
  console.warn("Failed to merge line segments for material:", error);
4315
- group.objects.forEach((line => {
4604
+ group.objects.forEach(line => {
4316
4605
  line.visible = true;
4317
- }));
4606
+ });
4318
4607
  }
4319
4608
  }
4320
4609
  }
@@ -4343,11 +4632,11 @@ class DynamicGltfLoader {
4343
4632
  this.mergedPoints.add(mergedPoints);
4344
4633
  this.optimizedOriginalMap.set(mergedPoints, optimizedObjects);
4345
4634
  mergedObjects.push(mergedPoints);
4346
- geometries.forEach((geometry => {
4635
+ geometries.forEach(geometry => {
4347
4636
  geometry.dispose();
4348
- }));
4637
+ });
4349
4638
  }
4350
- handles.forEach((handle => {
4639
+ handles.forEach(handle => {
4351
4640
  if (this.handleToOptimizedObjects.has(handle)) {
4352
4641
  const existingObjects = this.handleToOptimizedObjects.get(handle);
4353
4642
  existingObjects.push(...mergedObjects);
@@ -4355,22 +4644,22 @@ class DynamicGltfLoader {
4355
4644
  } else {
4356
4645
  this.handleToOptimizedObjects.set(handle, mergedObjects);
4357
4646
  }
4358
- }));
4647
+ });
4359
4648
  } catch (error) {
4360
4649
  console.warn("Failed to merge points for material:", error);
4361
- group.objects.forEach((points => {
4650
+ group.objects.forEach(points => {
4362
4651
  points.visible = true;
4363
- }));
4652
+ });
4364
4653
  }
4365
4654
  }
4366
4655
  }
4367
4656
  mergeInSingleSegment(structureId, rootGroup) {
4368
- const lineSegmentsArray = [ ...this.mergedLineSegments, ...this.mergedLines ].filter((obj => obj.userData.structureId === structureId));
4657
+ const lineSegmentsArray = [ ...this.mergedLineSegments, ...this.mergedLines ].filter(obj => obj.userData.structureId === structureId);
4369
4658
  if (lineSegmentsArray.length === 0) return;
4370
4659
  try {
4371
4660
  const geometriesWithIndex = [];
4372
- const hasNormals = lineSegmentsArray.some((segment => segment.geometry.attributes.normal !== undefined));
4373
- lineSegmentsArray.forEach((segment => {
4661
+ const hasNormals = lineSegmentsArray.some(segment => segment.geometry.attributes.normal !== undefined);
4662
+ lineSegmentsArray.forEach(segment => {
4374
4663
  const clonedGeometry = segment.geometry.clone();
4375
4664
  segment.updateWorldMatrix(true, false);
4376
4665
  clonedGeometry.applyMatrix4(segment.matrixWorld);
@@ -4396,7 +4685,7 @@ class DynamicGltfLoader {
4396
4685
  clonedGeometry.setIndex(indices);
4397
4686
  }
4398
4687
  geometriesWithIndex.push(clonedGeometry);
4399
- }));
4688
+ });
4400
4689
  const finalGeometry = mergeGeometries(geometriesWithIndex, false);
4401
4690
  const material = new LineBasicMaterial({
4402
4691
  vertexColors: true
@@ -4408,33 +4697,33 @@ class DynamicGltfLoader {
4408
4697
  mergedLine.userData.structureId = structureId;
4409
4698
  rootGroup.add(mergedLine);
4410
4699
  this.mergedLineSegments.add(mergedLine);
4411
- lineSegmentsArray.forEach((obj => {
4700
+ lineSegmentsArray.forEach(obj => {
4412
4701
  if (obj.parent) {
4413
4702
  obj.parent.remove(obj);
4414
4703
  }
4415
4704
  obj.geometry.dispose();
4416
- }));
4705
+ });
4417
4706
  } catch (error) {
4418
4707
  console.error("Failed to merge geometries:", error);
4419
- lineSegmentsArray.forEach((obj => {
4708
+ lineSegmentsArray.forEach(obj => {
4420
4709
  obj.visible = true;
4421
4710
  rootGroup.add(obj);
4422
- }));
4711
+ });
4423
4712
  }
4424
4713
  }
4425
4714
  showOriginalObjects(objects) {
4426
- objects.forEach((obj => {
4715
+ objects.forEach(obj => {
4427
4716
  if (this.originalObjects.has(obj)) {
4428
4717
  obj.visible = true;
4429
4718
  }
4430
- }));
4719
+ });
4431
4720
  }
4432
4721
  hideOriginalObjects(objects) {
4433
- objects.forEach((obj => {
4722
+ objects.forEach(obj => {
4434
4723
  if (this.originalObjects.has(obj)) {
4435
4724
  obj.visible = false;
4436
4725
  }
4437
- }));
4726
+ });
4438
4727
  }
4439
4728
  createVAO(geometry) {
4440
4729
  if (!this.useVAO) {
@@ -4489,15 +4778,15 @@ class DynamicGltfLoader {
4489
4778
  this.syncHiddenObjects();
4490
4779
  }
4491
4780
  hideObjects(handles) {
4492
- handles.forEach((handle => {
4781
+ handles.forEach(handle => {
4493
4782
  this.hiddenHandles.add(handle);
4494
- }));
4783
+ });
4495
4784
  this.syncHiddenObjects();
4496
4785
  }
4497
4786
  showObjects(handles) {
4498
- handles.forEach((handle => {
4787
+ handles.forEach(handle => {
4499
4788
  this.hiddenHandles.delete(handle);
4500
- }));
4789
+ });
4501
4790
  this.syncHiddenObjects();
4502
4791
  }
4503
4792
  syncHiddenObjects() {
@@ -4518,47 +4807,47 @@ class DynamicGltfLoader {
4518
4807
  if (this.hiddenHandles.size === 0) {
4519
4808
  return;
4520
4809
  }
4521
- this.hiddenHandles.forEach((handle => {
4810
+ this.hiddenHandles.forEach(handle => {
4522
4811
  const objects = this.handleToOptimizedObjects.get(handle);
4523
4812
  if (objects) {
4524
- objects.forEach((x => this.oldOptimizeObjects.add(x)));
4813
+ objects.forEach(x => this.oldOptimizeObjects.add(x));
4525
4814
  }
4526
- }));
4527
- this.oldOptimizeObjects.forEach((optimizedObject => {
4815
+ });
4816
+ this.oldOptimizeObjects.forEach(optimizedObject => {
4528
4817
  optimizedObject.visible = false;
4529
4818
  const originObjects = this.optimizedOriginalMap.get(optimizedObject);
4530
4819
  const updateListToOptimize = [];
4531
- originObjects.forEach((obj => {
4820
+ originObjects.forEach(obj => {
4532
4821
  if (!this.hiddenHandles.has(obj.userData.handle)) {
4533
4822
  updateListToOptimize.push(obj);
4534
4823
  }
4535
- }));
4824
+ });
4536
4825
  const firstObject = updateListToOptimize[0];
4537
4826
  if (firstObject instanceof Mesh || firstObject instanceof LineSegments) {
4538
- const geometries = updateListToOptimize.map((obj => {
4827
+ const geometries = updateListToOptimize.map(obj => {
4539
4828
  const geometry = obj.geometry.clone();
4540
4829
  obj.updateWorldMatrix(true, false);
4541
4830
  geometry.applyMatrix4(obj.matrixWorld);
4542
4831
  return geometry;
4543
- }));
4832
+ });
4544
4833
  const newMergedGeometry = mergeGeometries(geometries);
4545
4834
  const mergedObject = firstObject instanceof Mesh ? new Mesh(newMergedGeometry, optimizedObject.material) : new LineSegments(newMergedGeometry, optimizedObject.material);
4546
4835
  mergedObject.visible = true;
4547
4836
  optimizedObject.parent.add(mergedObject);
4548
4837
  this.newOptimizedObjects.add(mergedObject);
4549
- geometries.forEach((geometry => {
4838
+ geometries.forEach(geometry => {
4550
4839
  geometry.dispose();
4551
- }));
4840
+ });
4552
4841
  } else if (firstObject instanceof Line) {
4553
4842
  let totalVertices = 0;
4554
- updateListToOptimize.map((line => {
4843
+ updateListToOptimize.map(line => {
4555
4844
  totalVertices += line.geometry.attributes.position.count;
4556
- }));
4845
+ });
4557
4846
  const positions = new Float32Array(totalVertices * 3);
4558
4847
  let posOffset = 0;
4559
4848
  const indices = [];
4560
4849
  let vertexOffset = 0;
4561
- updateListToOptimize.forEach((line => {
4850
+ updateListToOptimize.forEach(line => {
4562
4851
  const geometry = line.geometry;
4563
4852
  const positionAttr = geometry.attributes.position;
4564
4853
  const vertexCount = positionAttr.count;
@@ -4576,7 +4865,7 @@ class DynamicGltfLoader {
4576
4865
  indices.push(vertexOffset + i, vertexOffset + i + 1);
4577
4866
  }
4578
4867
  vertexOffset += vertexCount;
4579
- }));
4868
+ });
4580
4869
  const geometry = new BufferGeometry;
4581
4870
  geometry.setAttribute("position", new BufferAttribute(positions, 3));
4582
4871
  geometry.setIndex(indices);
@@ -4587,7 +4876,7 @@ class DynamicGltfLoader {
4587
4876
  optimizedObject.parent.add(mergedLine);
4588
4877
  this.newOptimizedObjects.add(mergedLine);
4589
4878
  }
4590
- }));
4879
+ });
4591
4880
  }
4592
4881
  getStructureGeometryExtent(structureId) {
4593
4882
  const extent = new Box3;
@@ -4618,9 +4907,9 @@ class DynamicGltfLoader {
4618
4907
  this.activeChunkLoads++;
4619
4908
  return Promise.resolve();
4620
4909
  }
4621
- return new Promise((resolve => {
4910
+ return new Promise(resolve => {
4622
4911
  this.chunkQueue.push(resolve);
4623
- }));
4912
+ });
4624
4913
  }
4625
4914
  releaseChunkSlot() {
4626
4915
  this.activeChunkLoads--;
@@ -4648,7 +4937,7 @@ class GLTFCloudDynamicLoader {
4648
4937
  this.gltfLoader = new DynamicGltfLoader(this.viewer.camera, scene, this.viewer.renderer);
4649
4938
  this.gltfLoader.memoryLimit = this.viewer.options.memoryLimit;
4650
4939
  this.gltfLoader.setVisibleEdges(this.viewer.options.edgeModel);
4651
- this.gltfLoader.addEventListener("databasechunk", (data => {
4940
+ this.gltfLoader.addEventListener("databasechunk", data => {
4652
4941
  const modelImpl = new DynamicModelImpl(scene);
4653
4942
  modelImpl.loader = this;
4654
4943
  modelImpl.viewer = this.viewer;
@@ -4665,8 +4954,8 @@ class GLTFCloudDynamicLoader {
4665
4954
  file: model.file,
4666
4955
  model: model
4667
4956
  });
4668
- }));
4669
- this.gltfLoader.addEventListener("geometryprogress", (data => {
4957
+ });
4958
+ this.gltfLoader.addEventListener("geometryprogress", data => {
4670
4959
  const progress = data.loaded / data.total;
4671
4960
  this.viewer.emitEvent({
4672
4961
  type: "geometryprogress",
@@ -4674,18 +4963,18 @@ class GLTFCloudDynamicLoader {
4674
4963
  file: model.file,
4675
4964
  model: model
4676
4965
  });
4677
- }));
4678
- this.gltfLoader.addEventListener("geometryerror", (data => {
4966
+ });
4967
+ this.gltfLoader.addEventListener("geometryerror", data => {
4679
4968
  this.viewer.emitEvent({
4680
4969
  type: "geometryerror",
4681
4970
  data: data,
4682
4971
  file: model.file,
4683
4972
  model: model
4684
4973
  });
4685
- }));
4686
- this.gltfLoader.addEventListener("update", (data => {
4974
+ });
4975
+ this.gltfLoader.addEventListener("update", data => {
4687
4976
  this.viewer.update();
4688
- }));
4977
+ });
4689
4978
  const loadController = {
4690
4979
  loadJson: async () => {
4691
4980
  const progress = progress => {
@@ -4701,11 +4990,11 @@ class GLTFCloudDynamicLoader {
4701
4990
  return json;
4702
4991
  },
4703
4992
  loadBinaryData: requests => {
4704
- const ranges = requests.map((request => ({
4993
+ const ranges = requests.map(request => ({
4705
4994
  begin: request.offset,
4706
4995
  end: request.offset + request.length - 1,
4707
4996
  requestId: this.requestId++
4708
- })));
4997
+ }));
4709
4998
  return model.downloadResourceRange(model.geometry[0], undefined, ranges, undefined, this.gltfLoader.getAbortController().signal);
4710
4999
  },
4711
5000
  baseUrl: () => Promise.resolve(`${model.httpClient.serverUrl}${model.path}/`)
@@ -4722,9 +5011,9 @@ class GLTFCloudDynamicLoader {
4722
5011
 
4723
5012
  const loaders = loadersRegistry("threejs");
4724
5013
 
4725
- loaders.registerLoader("gltf-file", (viewer => new GLTFFileLoader(viewer)));
5014
+ loaders.registerLoader("gltf-file", viewer => new GLTFFileLoader(viewer));
4726
5015
 
4727
- loaders.registerLoader("gltf-cloud", (viewer => new GLTFCloudDynamicLoader(viewer)));
5016
+ loaders.registerLoader("gltf-cloud", viewer => new GLTFCloudDynamicLoader(viewer));
4728
5017
 
4729
5018
  class SSAARenderPass extends Pass {
4730
5019
  constructor(scenes, camera, clearColor = 0, clearAlpha = 0) {
@@ -4802,7 +5091,7 @@ class SSAARenderPass extends Pass {
4802
5091
  renderer.setClearColor(this.clearColor, this.clearAlpha);
4803
5092
  renderer.setRenderTarget(this._sampleRenderTarget);
4804
5093
  renderer.clear();
4805
- this.scenes.forEach((scene => renderer.render(scene, this.camera)));
5094
+ this.scenes.forEach(scene => renderer.render(scene, this.camera));
4806
5095
  renderer.setRenderTarget(this.renderToScreen ? null : writeBuffer);
4807
5096
  if (i === 0) {
4808
5097
  renderer.setClearColor(0, 0);
@@ -4872,7 +5161,7 @@ class Viewer extends EventEmitter2 {
4872
5161
  return this._markup;
4873
5162
  }
4874
5163
  initialize(canvas, onProgress) {
4875
- this.addEventListener("optionschange", (event => this.syncOptions(event.data)));
5164
+ this.addEventListener("optionschange", event => this.syncOptions(event.data));
4876
5165
  this.scene = new Scene;
4877
5166
  this.helpers = new Helpers;
4878
5167
  this.target = new Vector3(0, 0, 0);
@@ -4914,7 +5203,7 @@ class Viewer extends EventEmitter2 {
4914
5203
  this.composer.addPass(this.outputPass);
4915
5204
  this.composer.setSize(width, height);
4916
5205
  this.canvas = canvas;
4917
- this.canvasEvents.forEach((x => canvas.addEventListener(x, this.canvaseventlistener)));
5206
+ this.canvasEvents.forEach(x => canvas.addEventListener(x, this.canvaseventlistener));
4918
5207
  this._markup.initialize(this.canvas, this.canvasEvents, this, this);
4919
5208
  for (const name of components.getComponents().keys()) {
4920
5209
  this._components.push(components.createComponent(name, this));
@@ -4947,11 +5236,11 @@ class Viewer extends EventEmitter2 {
4947
5236
  });
4948
5237
  this.removeAllListeners();
4949
5238
  this.setActiveDragger();
4950
- this._components.forEach((component => component.dispose()));
5239
+ this._components.forEach(component => component.dispose());
4951
5240
  this._components = [];
4952
5241
  this._markup.dispose();
4953
5242
  if (this.canvas) {
4954
- this.canvasEvents.forEach((x => this.canvas.removeEventListener(x, this.canvaseventlistener)));
5243
+ this.canvasEvents.forEach(x => this.canvas.removeEventListener(x, this.canvaseventlistener));
4955
5244
  this.canvas = undefined;
4956
5245
  }
4957
5246
  if (this.composer) this.composer.dispose();
@@ -5022,7 +5311,7 @@ class Viewer extends EventEmitter2 {
5022
5311
  } else {
5023
5312
  this.composer.render(deltaTime);
5024
5313
  }
5025
- (_b = (_a = this._activeDragger) === null || _a === undefined ? undefined : _a.updatePreview) === null || _b === undefined ? undefined : _b.call(_a);
5314
+ (_b = (_a = this._activeDragger) === null || _a === void 0 ? void 0 : _a.updatePreview) === null || _b === void 0 ? void 0 : _b.call(_a);
5026
5315
  this.emitEvent({
5027
5316
  type: "render",
5028
5317
  time: time,
@@ -5045,7 +5334,7 @@ class Viewer extends EventEmitter2 {
5045
5334
  let model = file;
5046
5335
  if (model && typeof model.getModels === "function") {
5047
5336
  const models = await model.getModels();
5048
- model = models.find((model => model.default)) || models[0] || file;
5337
+ model = models.find(model => model.default) || models[0] || file;
5049
5338
  }
5050
5339
  if (!model) throw new Error(`Format not supported`);
5051
5340
  let format = params.format;
@@ -5097,7 +5386,7 @@ class Viewer extends EventEmitter2 {
5097
5386
  });
5098
5387
  }
5099
5388
  cancel() {
5100
- this.loaders.forEach((loader => loader.cancel()));
5389
+ this.loaders.forEach(loader => loader.cancel());
5101
5390
  this.emitEvent({
5102
5391
  type: "cancel"
5103
5392
  });
@@ -5109,9 +5398,9 @@ class Viewer extends EventEmitter2 {
5109
5398
  this.clearSlices();
5110
5399
  this.clearOverlay();
5111
5400
  this.clearSelected();
5112
- this.loaders.forEach((loader => loader.dispose()));
5401
+ this.loaders.forEach(loader => loader.dispose());
5113
5402
  this.loaders = [];
5114
- this.models.forEach((model => model.dispose()));
5403
+ this.models.forEach(model => model.dispose());
5115
5404
  this.models = [];
5116
5405
  this.scene.clear();
5117
5406
  this.helpers.clear();
@@ -5187,7 +5476,7 @@ class Viewer extends EventEmitter2 {
5187
5476
  newDragger = draggers.createDragger(name, this);
5188
5477
  if (newDragger) {
5189
5478
  this._activeDragger = newDragger;
5190
- (_b = (_a = this._activeDragger).initialize) === null || _b === undefined ? undefined : _b.call(_a);
5479
+ (_b = (_a = this._activeDragger).initialize) === null || _b === void 0 ? void 0 : _b.call(_a);
5191
5480
  }
5192
5481
  }
5193
5482
  const canvas = this.canvas;
@@ -5211,7 +5500,7 @@ class Viewer extends EventEmitter2 {
5211
5500
  }
5212
5501
  }
5213
5502
  getComponent(name) {
5214
- return this._components.find((component => component.name === name));
5503
+ return this._components.find(component => component.name === name);
5215
5504
  }
5216
5505
  is3D() {
5217
5506
  return true;
@@ -5308,16 +5597,16 @@ class Viewer extends EventEmitter2 {
5308
5597
  }
5309
5598
  };
5310
5599
  const setClippingPlanes = clipping_planes => {
5311
- clipping_planes === null || clipping_planes === undefined ? undefined : clipping_planes.forEach((clipping_plane => {
5600
+ clipping_planes === null || clipping_planes === void 0 ? void 0 : clipping_planes.forEach(clipping_plane => {
5312
5601
  const plane = new Plane;
5313
5602
  plane.setFromNormalAndCoplanarPoint(getVector3FromPoint3d(clipping_plane.direction), getVector3FromPoint3d(clipping_plane.location));
5314
5603
  this.renderer.clippingPlanes.push(plane);
5315
- }));
5604
+ });
5316
5605
  };
5317
5606
  const setSelection = selection => {
5318
- if (selection) this.setSelected(selection.map((component => component.handle)));
5607
+ if (selection) this.setSelected(selection.map(component => component.handle));
5319
5608
  };
5320
- const draggerName = (_a = this._activeDragger) === null || _a === undefined ? undefined : _a.name;
5609
+ const draggerName = (_a = this._activeDragger) === null || _a === void 0 ? void 0 : _a.name;
5321
5610
  this.setActiveDragger();
5322
5611
  this.clearSlices();
5323
5612
  this.clearOverlay();
@@ -5329,7 +5618,7 @@ class Viewer extends EventEmitter2 {
5329
5618
  setClippingPlanes(viewpoint.clipping_planes);
5330
5619
  setSelection(viewpoint.selection);
5331
5620
  this._markup.setViewpoint(viewpoint);
5332
- this.target = getVector3FromPoint3d((_c = (_b = viewpoint.custom_fields) === null || _b === undefined ? undefined : _b.camera_target) !== null && _c !== undefined ? _c : this.target);
5621
+ this.target = getVector3FromPoint3d((_c = (_b = viewpoint.custom_fields) === null || _b === void 0 ? void 0 : _b.camera_target) !== null && _c !== void 0 ? _c : this.target);
5333
5622
  this.setActiveDragger(draggerName);
5334
5623
  this.emitEvent({
5335
5624
  type: "drawviewpoint",
@@ -5364,18 +5653,18 @@ class Viewer extends EventEmitter2 {
5364
5653
  };
5365
5654
  const getClippingPlanes = () => {
5366
5655
  const clipping_planes = [];
5367
- this.renderer.clippingPlanes.forEach((plane => {
5656
+ this.renderer.clippingPlanes.forEach(plane => {
5368
5657
  const clipping_plane = {
5369
5658
  location: getPoint3dFromVector3(plane.coplanarPoint(new Vector3)),
5370
5659
  direction: getPoint3dFromVector3(plane.normal)
5371
5660
  };
5372
5661
  clipping_planes.push(clipping_plane);
5373
- }));
5662
+ });
5374
5663
  return clipping_planes;
5375
5664
  };
5376
- const getSelection = () => this.getSelected().map((handle => ({
5665
+ const getSelection = () => this.getSelected().map(handle => ({
5377
5666
  handle: handle
5378
- })));
5667
+ }));
5379
5668
  const viewpoint = {
5380
5669
  custom_fields: {}
5381
5670
  };