@inweb/viewer-three 26.12.7 → 27.1.1

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 (53) hide show
  1. package/dist/extensions/components/InfoPanelComponent.js +7 -9
  2. package/dist/extensions/components/InfoPanelComponent.js.map +1 -1
  3. package/dist/extensions/components/InfoPanelComponent.min.js +1 -1
  4. package/dist/extensions/components/InfoPanelComponent.module.js +7 -9
  5. package/dist/extensions/components/InfoPanelComponent.module.js.map +1 -1
  6. package/dist/extensions/loaders/GLTFCloudLoader.js +1 -1
  7. package/dist/extensions/loaders/GLTFCloudLoader.js.map +1 -1
  8. package/dist/extensions/loaders/GLTFCloudLoader.min.js +1 -1
  9. package/dist/extensions/loaders/GLTFCloudLoader.module.js +1 -1
  10. package/dist/extensions/loaders/GLTFCloudLoader.module.js.map +1 -1
  11. package/dist/extensions/loaders/GLTFFileLoader.js +1 -1
  12. package/dist/extensions/loaders/GLTFFileLoader.js.map +1 -1
  13. package/dist/extensions/loaders/GLTFFileLoader.min.js +1 -1
  14. package/dist/extensions/loaders/GLTFFileLoader.module.js +1 -1
  15. package/dist/extensions/loaders/GLTFFileLoader.module.js.map +1 -1
  16. package/dist/extensions/loaders/IFCXLoader.js +2 -2
  17. package/dist/extensions/loaders/IFCXLoader.js.map +1 -1
  18. package/dist/extensions/loaders/IFCXLoader.min.js +1 -1
  19. package/dist/extensions/loaders/IFCXLoader.module.js +2 -2
  20. package/dist/extensions/loaders/IFCXLoader.module.js.map +1 -1
  21. package/dist/extensions/loaders/PotreeLoader.js +1 -1
  22. package/dist/extensions/loaders/PotreeLoader.js.map +1 -1
  23. package/dist/extensions/loaders/PotreeLoader.min.js +1 -1
  24. package/dist/extensions/loaders/PotreeLoader.module.js +1 -1
  25. package/dist/extensions/loaders/PotreeLoader.module.js.map +1 -1
  26. package/dist/viewer-three.js +40 -37
  27. package/dist/viewer-three.js.map +1 -1
  28. package/dist/viewer-three.min.js +3 -3
  29. package/dist/viewer-three.module.js +40 -37
  30. package/dist/viewer-three.module.js.map +1 -1
  31. package/extensions/components/InfoPanelComponent.ts +8 -11
  32. package/extensions/loaders/GLTFCloudLoader.ts +1 -1
  33. package/extensions/loaders/GLTFFileLoader.ts +1 -1
  34. package/extensions/loaders/IFCX/IFCXCloudLoader.ts +1 -1
  35. package/extensions/loaders/IFCX/IFCXFileLoader.ts +1 -1
  36. package/extensions/loaders/Potree/PotreeFileLoader.ts +1 -1
  37. package/lib/Viewer/Viewer.d.ts +1 -0
  38. package/lib/Viewer/commands/CreatePreview.d.ts +1 -1
  39. package/lib/Viewer/components/RenderLoopComponent.d.ts +1 -1
  40. package/lib/Viewer/draggers/FlyDragger.d.ts +1 -0
  41. package/lib/Viewer/draggers/WalkDragger.d.ts +1 -0
  42. package/lib/Viewer/loaders/index.d.ts +2 -1
  43. package/package.json +5 -5
  44. package/src/Viewer/Viewer.ts +34 -25
  45. package/src/Viewer/commands/CreatePreview.ts +2 -2
  46. package/src/Viewer/components/InfoComponent.ts +4 -4
  47. package/src/Viewer/components/RenderLoopComponent.ts +2 -2
  48. package/src/Viewer/draggers/FlyDragger.ts +8 -1
  49. package/src/Viewer/draggers/WalkDragger.ts +8 -1
  50. package/src/Viewer/loaders/DynamicGltfLoader/DynamicGltfLoader.js +2 -12
  51. package/src/Viewer/loaders/GLTFCloudDynamicLoader.ts +2 -2
  52. package/src/Viewer/loaders/GLTFFileDynamicLoader.ts +2 -2
  53. package/src/Viewer/loaders/index.ts +2 -1
@@ -1910,11 +1910,13 @@ class WalkDragger {
1910
1910
  };
1911
1911
  this.viewerRender = () => {
1912
1912
  this.joyStickControls.update();
1913
- this.controls.update();
1914
1913
  };
1915
1914
  this.viewerZoom = () => {
1916
1915
  this.controls.rotateDelta.set(0, 0);
1917
1916
  };
1917
+ this.animate = () => {
1918
+ this.controls.update();
1919
+ };
1918
1920
  const meshOnlyGround = [];
1919
1921
  viewer.models.forEach((model) => model.getVisibleObjects().forEach((obj) => {
1920
1922
  if (obj instanceof Mesh) {
@@ -1927,12 +1929,14 @@ class WalkDragger {
1927
1929
  this.joyStickControls = new JoyStickControls(viewer.camera, viewer.canvas, viewer.canvas, meshOnlyGround);
1928
1930
  this.joyStickControls.addEventListener("change", this.controlsChange);
1929
1931
  this.viewer = viewer;
1932
+ this.viewer.addEventListener("animate", this.animate);
1930
1933
  this.viewer.addEventListener("render", this.viewerRender);
1931
1934
  this.viewer.addEventListener("zoom", this.viewerZoom);
1932
1935
  this.viewer.addEventListener("changecameramode", this.updateControlsCamera);
1933
1936
  this.updateControls();
1934
1937
  }
1935
1938
  dispose() {
1939
+ this.viewer.removeEventListener("animate", this.animate);
1936
1940
  this.viewer.removeEventListener("render", this.viewerRender);
1937
1941
  this.viewer.removeEventListener("zoom", this.viewerZoom);
1938
1942
  this.viewer.removeEventListener("changecameramode", this.updateControlsCamera);
@@ -2112,23 +2116,27 @@ class FlyDragger {
2112
2116
  };
2113
2117
  this.viewerRender = () => {
2114
2118
  this.joyStickControls.update();
2115
- this.controls.update();
2116
2119
  };
2117
2120
  this.viewerZoom = () => {
2118
2121
  this.controls.rotateDelta.set(0, 0);
2119
2122
  };
2123
+ this.animate = () => {
2124
+ this.controls.update();
2125
+ };
2120
2126
  this.controls = new FlyControls(viewer.camera, viewer.canvas);
2121
2127
  this.controls.addEventListener("change", this.controlsChange);
2122
2128
  this.controls.addEventListener("flyspeedchange", this.flyspeedChange);
2123
2129
  this.joyStickControls = new JoyStickControls(viewer.camera, viewer.canvas, viewer.canvas, []);
2124
2130
  this.joyStickControls.addEventListener("change", this.controlsChange);
2125
2131
  this.viewer = viewer;
2132
+ this.viewer.addEventListener("animate", this.animate);
2126
2133
  this.viewer.addEventListener("render", this.viewerRender);
2127
2134
  this.viewer.addEventListener("zoom", this.viewerZoom);
2128
2135
  this.viewer.addEventListener("changecameramode", this.updateControlsCamera);
2129
2136
  this.updateControls();
2130
2137
  }
2131
2138
  dispose() {
2139
+ this.viewer.removeEventListener("animate", this.animate);
2132
2140
  this.viewer.removeEventListener("render", this.viewerRender);
2133
2141
  this.viewer.removeEventListener("zoom", this.viewerZoom);
2134
2142
  this.viewer.removeEventListener("changecameramode", this.updateControlsCamera);
@@ -2178,9 +2186,9 @@ function clearSlices(viewer) {
2178
2186
  viewer.clearSlices();
2179
2187
  }
2180
2188
 
2181
- function createPreview(viewer, type = "image/jpeg", encoderOptions = 0.25) {
2189
+ function createPreview(viewer, type = "image/jpeg", quality = 0.25) {
2182
2190
  viewer.update(true);
2183
- return viewer.canvas.toDataURL(type, encoderOptions);
2191
+ return viewer.canvas.toDataURL(type, quality);
2184
2192
  }
2185
2193
 
2186
2194
  function explode(viewer, index = 0) {
@@ -2727,9 +2735,9 @@ class InfoComponent {
2727
2735
  console.log("File load time:", this.viewer.info.performance.loadTime, "ms");
2728
2736
  };
2729
2737
  this.resize = () => {
2730
- const rendererSize = this.viewer.renderer.getSize(new Vector2());
2731
- this.viewer.info.render.viewport.width = rendererSize.x;
2732
- this.viewer.info.render.viewport.height = rendererSize.y;
2738
+ const { width, height } = this.viewer.canvas;
2739
+ this.viewer.info.render.viewport.width = width;
2740
+ this.viewer.info.render.viewport.height = height;
2733
2741
  };
2734
2742
  this.render = () => {
2735
2743
  this.viewer.info.render.drawCalls = this.viewer.renderer.info.render.calls;
@@ -2778,13 +2786,13 @@ class InfoComponent {
2778
2786
 
2779
2787
  class RenderLoopComponent {
2780
2788
  constructor(viewer) {
2781
- this.animate = (time = 0) => {
2789
+ this.animate = (time) => {
2782
2790
  this.requestId = requestAnimationFrame(this.animate);
2783
2791
  this.viewer.render(time);
2784
2792
  this.viewer.emitEvent({ type: "animate", time });
2785
2793
  };
2786
2794
  this.viewer = viewer;
2787
- this.animate();
2795
+ this.requestId = requestAnimationFrame(this.animate);
2788
2796
  }
2789
2797
  dispose() {
2790
2798
  cancelAnimationFrame(this.requestId);
@@ -4285,8 +4293,6 @@ class DynamicGltfLoader {
4285
4293
  this.frameDelay = 0;
4286
4294
  this.graphicsObjectLimit = 10000;
4287
4295
  this.totalLoadedObjects = 0;
4288
- this.lastUpdateTime = 0;
4289
- this.updateInterval = 1000;
4290
4296
  this.handleToObjects = new Map();
4291
4297
  this.originalObjects = new Set();
4292
4298
  this.originalObjectsToSelection = new Set();
@@ -4962,11 +4968,7 @@ class DynamicGltfLoader {
4962
4968
  loaded: loadedCount,
4963
4969
  total: totalNodes,
4964
4970
  });
4965
- const currentTime = Date.now();
4966
- if (currentTime - this.lastUpdateTime >= this.updateInterval) {
4967
- this.dispatchEvent("update");
4968
- this.lastUpdateTime = currentTime;
4969
- }
4971
+ this.dispatchEvent("update");
4970
4972
  await new Promise((resolve) => {
4971
4973
  setTimeout(resolve, 0);
4972
4974
  });
@@ -5306,7 +5308,6 @@ class DynamicGltfLoader {
5306
5308
  this.objectTransforms.clear();
5307
5309
  this.transformedGeometries.clear();
5308
5310
  this.totalLoadedObjects = 0;
5309
- this.lastUpdateTime = 0;
5310
5311
  this.currentMemoryUsage = 0;
5311
5312
  this.loadedGeometrySize = 0;
5312
5313
  this.abortController = new AbortController();
@@ -5417,9 +5418,7 @@ class DynamicGltfLoader {
5417
5418
  }
5418
5419
  yieldToUI() {
5419
5420
  return new Promise((resolve) => {
5420
- requestAnimationFrame(() => {
5421
- setTimeout(resolve, 0);
5422
- });
5421
+ setTimeout(resolve, 0);
5423
5422
  });
5424
5423
  }
5425
5424
  async optimizeScene() {
@@ -6422,13 +6421,13 @@ class GLTFFileDynamicLoader extends Loader {
6422
6421
  this.viewer.models.push(modelImpl);
6423
6422
  this.viewer.syncOptions();
6424
6423
  this.viewer.syncOverlay();
6425
- this.viewer.update();
6426
6424
  this.viewer.emitEvent({ type: "databasechunk", data: scene, file });
6425
+ this.viewer.update(true);
6427
6426
  });
6428
6427
  this.gltfLoader.addEventListener("geometryerror", (data) => {
6429
6428
  this.viewer.emitEvent({ type: "geometryerror", data, file });
6430
6429
  });
6431
- this.gltfLoader.addEventListener("update", (data) => {
6430
+ this.gltfLoader.addEventListener("update", () => {
6432
6431
  this.viewer.update();
6433
6432
  });
6434
6433
  const loadController = {
@@ -6510,13 +6509,13 @@ class GLTFCloudDynamicLoader extends Loader {
6510
6509
  this.viewer.models.push(modelImpl);
6511
6510
  this.viewer.syncOptions();
6512
6511
  this.viewer.syncOverlay();
6513
- this.viewer.update();
6514
6512
  this.viewer.emitEvent({ type: "databasechunk", data: scene, file: model.file, model });
6513
+ this.viewer.update(true);
6515
6514
  });
6516
6515
  this.gltfLoader.addEventListener("geometryerror", (data) => {
6517
6516
  this.viewer.emitEvent({ type: "geometryerror", data, file: model.file, model });
6518
6517
  });
6519
- this.gltfLoader.addEventListener("update", (data) => {
6518
+ this.gltfLoader.addEventListener("update", () => {
6520
6519
  this.viewer.update();
6521
6520
  });
6522
6521
  const loadController = {
@@ -6774,6 +6773,7 @@ class Viewer extends EventEmitter2 {
6774
6773
  this.target = new Vector3(0, 0, 0);
6775
6774
  this._activeDragger = null;
6776
6775
  this._components = [];
6776
+ this._updateDelay = 1000;
6777
6777
  this._renderNeeded = false;
6778
6778
  this._renderTime = 0;
6779
6779
  this.render = this.render.bind(this);
@@ -6839,11 +6839,13 @@ class Viewer extends EventEmitter2 {
6839
6839
  this.syncOptions();
6840
6840
  this.syncOverlay();
6841
6841
  this._renderTime = performance.now();
6842
- this.render(this._renderTime);
6843
- if (typeof onProgress === "function")
6844
- onProgress(new ProgressEvent("progress", { lengthComputable: true, loaded: 1, total: 1 }));
6842
+ if (typeof onProgress === "function") {
6843
+ const event = new ProgressEvent("progress", { lengthComputable: true, loaded: 1, total: 1 });
6844
+ onProgress(event);
6845
+ }
6845
6846
  this.emitEvent({ type: "initializeprogress", data: 1, loaded: 1, total: 1 });
6846
6847
  this.emitEvent({ type: "initialize" });
6848
+ this.update(true);
6847
6849
  return Promise.resolve(this);
6848
6850
  }
6849
6851
  dispose() {
@@ -6907,14 +6909,16 @@ class Viewer extends EventEmitter2 {
6907
6909
  }
6908
6910
  this.renderer.setSize(width, height, updateStyle);
6909
6911
  this.composer.setSize(width, height);
6910
- this.update(true);
6911
6912
  this.emitEvent({ type: "resize", width, height });
6913
+ this.update(true);
6912
6914
  }
6913
6915
  update(force = false) {
6916
+ const time = performance.now();
6917
+ force = force || time - this._renderTime >= this._updateDelay;
6914
6918
  this._renderNeeded = true;
6915
6919
  if (force)
6916
- this.render();
6917
- this.emitEvent({ type: "update", data: force });
6920
+ this.render(time);
6921
+ this.emitEvent({ type: "update", force });
6918
6922
  }
6919
6923
  render(time, force = false) {
6920
6924
  var _a, _b;
@@ -6982,6 +6986,7 @@ class Viewer extends EventEmitter2 {
6982
6986
  throw error;
6983
6987
  }
6984
6988
  this.emitEvent({ type: "geometryend", file, model });
6989
+ this.update(true);
6985
6990
  return this;
6986
6991
  }
6987
6992
  openGltfFile(file, externalFiles, params = {}) {
@@ -7014,8 +7019,8 @@ class Viewer extends EventEmitter2 {
7014
7019
  this.target.set(0, 0, 0);
7015
7020
  this.syncOptions();
7016
7021
  this.syncOverlay();
7017
- this.update(true);
7018
7022
  this.emitEvent({ type: "clear" });
7023
+ this.update(true);
7019
7024
  return this;
7020
7025
  }
7021
7026
  is3D() {
@@ -7203,7 +7208,7 @@ class Viewer extends EventEmitter2 {
7203
7208
  this.syncOverlay();
7204
7209
  this.setActiveDragger(draggerName);
7205
7210
  this.emitEvent({ type: "drawviewpoint", data: viewpoint });
7206
- this.update();
7211
+ this.update(true);
7207
7212
  }
7208
7213
  createViewpoint() {
7209
7214
  if (!this.renderer)
@@ -7284,11 +7289,9 @@ class Viewer extends EventEmitter2 {
7284
7289
  }
7285
7290
  return { x: intersectionPoint.x, y: intersectionPoint.y, z: intersectionPoint.z };
7286
7291
  }
7287
- else {
7288
- const point = new Vector3(x, y, -1);
7289
- point.unproject(this.camera);
7290
- return { x: point.x, y: point.y, z: point.z };
7291
- }
7292
+ const point = new Vector3(x, y, -1);
7293
+ point.unproject(this.camera);
7294
+ return { x: point.x, y: point.y, z: point.z };
7292
7295
  }
7293
7296
  worldToScreen(position) {
7294
7297
  if (!this.renderer)