@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
@@ -107,9 +107,8 @@ class InfoPanelComponent implements IComponent {
107
107
  this.viewer.addEventListener("clear", this.updateSceneInfo);
108
108
  this.viewer.addEventListener("geometryend", this.updateSceneInfo);
109
109
  this.viewer.addEventListener("render", this.updateRenderInfo);
110
- this.viewer.addEventListener("animate", this.updatePreformanceInfo);
110
+ this.viewer.addEventListener("animate", this.updateViewer);
111
111
 
112
- this.updatePreformanceInfo();
113
112
  this.updateRenderInfo();
114
113
  this.updateSceneInfo();
115
114
  }
@@ -118,7 +117,7 @@ class InfoPanelComponent implements IComponent {
118
117
  this.viewer.removeEventListener("clear", this.updateSceneInfo);
119
118
  this.viewer.removeEventListener("geometryend", this.updateSceneInfo);
120
119
  this.viewer.removeEventListener("render", this.updateRenderInfo);
121
- this.viewer.removeEventListener("animate", this.updatePreformanceInfo);
120
+ this.viewer.removeEventListener("animate", this.updateViewer);
122
121
 
123
122
  this.performancePanel = undefined;
124
123
  this.renderPanel = undefined;
@@ -141,7 +140,7 @@ class InfoPanelComponent implements IComponent {
141
140
  }
142
141
  }
143
142
 
144
- updatePreformanceInfo = () => {
143
+ updateRenderInfo = () => {
145
144
  const info = this.viewer.info;
146
145
 
147
146
  const text = [];
@@ -149,13 +148,7 @@ class InfoPanelComponent implements IComponent {
149
148
  text.push(`Frame Time: ${info.performance.frameTime} ms`);
150
149
  this.performancePanel.update(text.join("\n"));
151
150
 
152
- this.viewer.update();
153
- };
154
-
155
- updateRenderInfo = () => {
156
- const info = this.viewer.info;
157
-
158
- const text = [];
151
+ text.length = 0;
159
152
  text.push(`Viewport: ${info.render.viewport.width} x ${info.render.viewport.height}`);
160
153
  text.push(`Antialiasing: ${info.render.antialiasing}`);
161
154
  text.push(`Draw Calls: ${info.render.drawCalls}`);
@@ -192,6 +185,10 @@ class InfoPanelComponent implements IComponent {
192
185
  text.push(`JS Heap Used: ${formatBytes(info.memory.usedJSHeapSize)}`);
193
186
  this.memoryPanel.update(text.join("\n"));
194
187
  };
188
+
189
+ updateViewer = () => {
190
+ this.viewer.update();
191
+ };
195
192
  }
196
193
 
197
194
  components.registerComponent("InfoPanelComponent", (viewer) => new InfoPanelComponent(viewer));
@@ -65,9 +65,9 @@ class GLTFCloudLoader extends Loader {
65
65
 
66
66
  this.viewer.syncOptions();
67
67
  this.viewer.syncOverlay();
68
- this.viewer.update();
69
68
 
70
69
  this.viewer.emitEvent({ type: "databasechunk", data: gltf.scene, file: model.file, model });
70
+ this.viewer.update(true);
71
71
 
72
72
  return this;
73
73
  }
@@ -76,9 +76,9 @@ export class GLTFFileLoader extends Loader {
76
76
 
77
77
  this.viewer.syncOptions();
78
78
  this.viewer.syncOverlay();
79
- this.viewer.update();
80
79
 
81
80
  this.viewer.emitEvent({ type: "databasechunk", data: gltf.scene, file });
81
+ this.viewer.update(true);
82
82
 
83
83
  return this;
84
84
  }
@@ -70,9 +70,9 @@ export class IFCXCloudLoader extends Loader {
70
70
 
71
71
  this.viewer.syncOptions();
72
72
  this.viewer.syncOverlay();
73
- this.viewer.update();
74
73
 
75
74
  this.viewer.emitEvent({ type: "databasechunk", data: scene, file });
75
+ this.viewer.update(true);
76
76
 
77
77
  return this;
78
78
  }
@@ -70,9 +70,9 @@ export class IFCXFileLoader extends Loader {
70
70
 
71
71
  this.viewer.syncOptions();
72
72
  this.viewer.syncOverlay();
73
- this.viewer.update();
74
73
 
75
74
  this.viewer.emitEvent({ type: "databasechunk", data: scene, file });
75
+ this.viewer.update(true);
76
76
 
77
77
  return this;
78
78
  }
@@ -91,9 +91,9 @@ export class PotreeFileLoader extends Loader {
91
91
 
92
92
  this.viewer.syncOptions();
93
93
  this.viewer.syncOverlay();
94
- this.viewer.update();
95
94
 
96
95
  this.viewer.emitEvent({ type: "databasechunk", data: pco, file });
96
+ this.viewer.update(true);
97
97
 
98
98
  return this;
99
99
  }
@@ -39,6 +39,7 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
39
39
  target: Vector3;
40
40
  private _activeDragger;
41
41
  private _components;
42
+ private _updateDelay;
42
43
  private _renderNeeded;
43
44
  private _renderTime;
44
45
  private _markup;
@@ -1,2 +1,2 @@
1
1
  import type { Viewer } from "../Viewer";
2
- export declare function createPreview(viewer: Viewer, type?: string, encoderOptions?: number): string;
2
+ export declare function createPreview(viewer: Viewer, type?: string, quality?: number): string;
@@ -5,5 +5,5 @@ export declare class RenderLoopComponent implements IComponent {
5
5
  protected requestId: number;
6
6
  constructor(viewer: Viewer);
7
7
  dispose(): void;
8
- animate: (time?: number) => void;
8
+ animate: (time: number) => void;
9
9
  }
@@ -13,4 +13,5 @@ export declare class FlyDragger implements IDragger {
13
13
  flyspeedChange: (event: any) => void;
14
14
  viewerRender: () => void;
15
15
  viewerZoom: () => void;
16
+ animate: () => void;
16
17
  }
@@ -13,4 +13,5 @@ export declare class WalkDragger implements IDragger {
13
13
  walkspeedChange: (event: any) => void;
14
14
  viewerRender: () => void;
15
15
  viewerZoom: () => void;
16
+ animate: () => void;
16
17
  }
@@ -59,11 +59,12 @@ import { ILoadersRegistry } from "@inweb/viewer-core";
59
59
  *
60
60
  * this.viewer.syncOptions();
61
61
  * this.viewer.syncOverlay();
62
- * this.viewer.update();
63
62
  *
64
63
  * this.viewer.emitEvent({ type: "geometryprogress", data: 1, file });
65
64
  * this.viewer.emitEvent({ type: "databasechunk", data: scene, file });
66
65
  *
66
+ * this.viewer.update(true);
67
+ *
67
68
  * return Promise.resove(this);
68
69
  * };
69
70
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inweb/viewer-three",
3
- "version": "26.12.7",
3
+ "version": "27.1.1",
4
4
  "description": "JavaScript library for rendering CAD and BIM files in a browser using Three.js",
5
5
  "homepage": "https://cloud.opendesign.com/docs/index.html",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -35,10 +35,10 @@
35
35
  "docs": "typedoc"
36
36
  },
37
37
  "dependencies": {
38
- "@inweb/client": "~26.12.7",
39
- "@inweb/eventemitter2": "~26.12.7",
40
- "@inweb/markup": "~26.12.7",
41
- "@inweb/viewer-core": "~26.12.7"
38
+ "@inweb/client": "~27.1.1",
39
+ "@inweb/eventemitter2": "~27.1.1",
40
+ "@inweb/markup": "~27.1.1",
41
+ "@inweb/viewer-core": "~27.1.1"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@types/three": "^0.180.0",
@@ -24,6 +24,7 @@
24
24
  import {
25
25
  Box3,
26
26
  LinearSRGBColorSpace,
27
+ // LinearToneMapping,
27
28
  Object3D,
28
29
  OrthographicCamera,
29
30
  PerspectiveCamera,
@@ -109,6 +110,7 @@ export class Viewer
109
110
  private _activeDragger: IDragger | null;
110
111
  private _components: IComponent[];
111
112
 
113
+ private _updateDelay: number;
112
114
  private _renderNeeded: boolean;
113
115
  private _renderTime: DOMHighResTimeStamp;
114
116
 
@@ -137,6 +139,7 @@ export class Viewer
137
139
  this._activeDragger = null;
138
140
  this._components = [];
139
141
 
142
+ this._updateDelay = 1000;
140
143
  this._renderNeeded = false;
141
144
  this._renderTime = 0;
142
145
 
@@ -193,20 +196,16 @@ export class Viewer
193
196
  });
194
197
  this.renderer.setPixelRatio(pixelRatio);
195
198
  this.renderer.setSize(width, height);
196
- // this.renderer.toneMapping = LinearToneMapping;
197
199
  this.renderer.outputColorSpace = LinearSRGBColorSpace;
200
+ // this.renderer.toneMapping = LinearToneMapping;
198
201
 
199
202
  this.renderPass = new RenderPass(this.scene, this.camera);
200
-
201
203
  this.helpersPass = new RenderPass(this.helpers, this.camera);
202
204
  this.helpersPass.clear = false;
203
-
204
205
  this.fxaaPass = new FXAAPass();
205
206
  this.smaaPass = new SMAAPass();
206
-
207
207
  this.ssaaRenderPass = new SSAARenderPass([this.scene, this.helpers], this.camera);
208
208
  this.ssaaRenderPass.unbiased = true;
209
-
210
209
  this.outputPass = new OutputPass();
211
210
 
212
211
  this.composer = new EffectComposer(this.renderer);
@@ -231,13 +230,15 @@ export class Viewer
231
230
  this.syncOverlay();
232
231
 
233
232
  this._renderTime = performance.now();
234
- this.render(this._renderTime);
235
233
 
236
- if (typeof onProgress === "function")
237
- onProgress(new ProgressEvent("progress", { lengthComputable: true, loaded: 1, total: 1 }));
234
+ if (typeof onProgress === "function") {
235
+ const event = new ProgressEvent("progress", { lengthComputable: true, loaded: 1, total: 1 });
236
+ onProgress(event);
237
+ }
238
238
 
239
239
  this.emitEvent({ type: "initializeprogress", data: 1, loaded: 1, total: 1 });
240
240
  this.emitEvent({ type: "initialize" });
241
+ this.update(true);
241
242
 
242
243
  return Promise.resolve(this);
243
244
  }
@@ -308,14 +309,18 @@ export class Viewer
308
309
  this.renderer.setSize(width, height, updateStyle);
309
310
  this.composer.setSize(width, height);
310
311
 
311
- this.update(true);
312
312
  this.emitEvent({ type: "resize", width, height });
313
+ this.update(true);
313
314
  }
314
315
 
315
316
  update(force = false): void {
317
+ const time = performance.now();
318
+ force = force || time - this._renderTime >= this._updateDelay;
319
+
316
320
  this._renderNeeded = true;
317
- if (force) this.render();
318
- this.emitEvent({ type: "update", data: force });
321
+ if (force) this.render(time);
322
+
323
+ this.emitEvent({ type: "update", force });
319
324
  }
320
325
 
321
326
  // Internal render routines
@@ -473,6 +478,7 @@ export class Viewer
473
478
  throw error;
474
479
  }
475
480
  this.emitEvent({ type: "geometryend", file, model });
481
+ this.update(true);
476
482
 
477
483
  return this;
478
484
  }
@@ -532,9 +538,9 @@ export class Viewer
532
538
 
533
539
  this.syncOptions();
534
540
  this.syncOverlay();
535
- this.update(true);
536
541
 
537
542
  this.emitEvent({ type: "clear" });
543
+ this.update(true);
538
544
 
539
545
  return this;
540
546
  }
@@ -763,10 +769,10 @@ export class Viewer
763
769
  this.target.copy(getVector3FromPoint3d(viewpoint.custom_fields?.camera_target ?? this.target));
764
770
 
765
771
  this.syncOverlay();
766
-
767
772
  this.setActiveDragger(draggerName);
773
+
768
774
  this.emitEvent({ type: "drawviewpoint", data: viewpoint });
769
- this.update();
775
+ this.update(true);
770
776
  }
771
777
 
772
778
  createViewpoint(): IViewpoint {
@@ -836,11 +842,7 @@ export class Viewer
836
842
  }
837
843
 
838
844
  // IWorldTransform
839
- // ===================== AI-CODE-START ======================
840
- // Source: Claude Sonnet 4.5
841
- // Date: 2025-11-25
842
- // Reviewer: vitaly.ivanov@opendesign.com
843
- // Issue: CLOUD-5990
845
+
844
846
  screenToWorld(position: { x: number; y: number }): { x: number; y: number; z: number } {
845
847
  if (!this.renderer) return { x: position.x, y: position.y, z: 0 };
846
848
 
@@ -848,6 +850,12 @@ export class Viewer
848
850
  const x = position.x / (rect.width / 2) - 1;
849
851
  const y = -position.y / (rect.height / 2) + 1;
850
852
 
853
+ // ===================== AI-CODE-START ======================
854
+ // Source: Claude Sonnet 4.5
855
+ // Date: 2025-11-25
856
+ // Reviewer: vitaly.ivanov@opendesign.com
857
+ // Issue: CLOUD-5990
858
+
851
859
  if (this.camera["isPerspectiveCamera"]) {
852
860
  // Create a raycaster from the screen position
853
861
  const raycaster = new Raycaster();
@@ -870,14 +878,15 @@ export class Viewer
870
878
  return { x: point.x, y: point.y, z: point.z };
871
879
  }
872
880
  return { x: intersectionPoint.x, y: intersectionPoint.y, z: intersectionPoint.z };
873
- } else {
874
- const point = new Vector3(x, y, -1);
875
- point.unproject(this.camera);
876
-
877
- return { x: point.x, y: point.y, z: point.z };
878
881
  }
882
+
883
+ // ===================== AI-CODE-END ======================
884
+
885
+ const point = new Vector3(x, y, -1);
886
+ point.unproject(this.camera);
887
+
888
+ return { x: point.x, y: point.y, z: point.z };
879
889
  }
880
- // ===================== AI-CODE-END ======================
881
890
 
882
891
  worldToScreen(position: { x: number; y: number; z: number }): { x: number; y: number } {
883
892
  if (!this.renderer) return { x: position.x, y: position.y };
@@ -23,7 +23,7 @@
23
23
 
24
24
  import type { Viewer } from "../Viewer";
25
25
 
26
- export function createPreview(viewer: Viewer, type = "image/jpeg", encoderOptions = 0.25): string {
26
+ export function createPreview(viewer: Viewer, type = "image/jpeg", quality = 0.25): string {
27
27
  viewer.update(true);
28
- return viewer.canvas.toDataURL(type, encoderOptions);
28
+ return viewer.canvas.toDataURL(type, quality);
29
29
  }
@@ -21,7 +21,7 @@
21
21
  // acknowledge and accept the above terms.
22
22
  ///////////////////////////////////////////////////////////////////////////////
23
23
 
24
- import { REVISION, Vector2 } from "three";
24
+ import { REVISION } from "three";
25
25
  import { IComponent } from "@inweb/viewer-core";
26
26
  import type { Viewer } from "../Viewer";
27
27
 
@@ -159,9 +159,9 @@ export class InfoComponent implements IComponent {
159
159
  };
160
160
 
161
161
  resize = () => {
162
- const rendererSize = this.viewer.renderer.getSize(new Vector2());
163
- this.viewer.info.render.viewport.width = rendererSize.x;
164
- this.viewer.info.render.viewport.height = rendererSize.y;
162
+ const { width, height } = this.viewer.canvas;
163
+ this.viewer.info.render.viewport.width = width;
164
+ this.viewer.info.render.viewport.height = height;
165
165
  };
166
166
 
167
167
  render = () => {
@@ -30,14 +30,14 @@ export class RenderLoopComponent implements IComponent {
30
30
 
31
31
  constructor(viewer: Viewer) {
32
32
  this.viewer = viewer;
33
- this.animate();
33
+ this.requestId = requestAnimationFrame(this.animate);
34
34
  }
35
35
 
36
36
  dispose() {
37
37
  cancelAnimationFrame(this.requestId);
38
38
  }
39
39
 
40
- animate = (time = 0) => {
40
+ animate = (time: number) => {
41
41
  this.requestId = requestAnimationFrame(this.animate);
42
42
 
43
43
  this.viewer.render(time);
@@ -42,16 +42,20 @@ export class FlyDragger implements IDragger {
42
42
  this.joyStickControls.addEventListener("change", this.controlsChange);
43
43
 
44
44
  this.viewer = viewer;
45
+ this.viewer.addEventListener("animate", this.animate);
45
46
  this.viewer.addEventListener("render", this.viewerRender);
46
47
  this.viewer.addEventListener("zoom", this.viewerZoom);
47
48
  this.viewer.addEventListener("changecameramode", this.updateControlsCamera);
49
+
48
50
  this.updateControls();
49
51
  }
50
52
 
51
53
  dispose() {
54
+ this.viewer.removeEventListener("animate", this.animate);
52
55
  this.viewer.removeEventListener("render", this.viewerRender);
53
56
  this.viewer.removeEventListener("zoom", this.viewerZoom);
54
57
  this.viewer.removeEventListener("changecameramode", this.updateControlsCamera);
58
+
55
59
  this.controls.removeEventListener("flyspeedchange", this.flyspeedChange);
56
60
  this.controls.removeEventListener("change", this.controlsChange);
57
61
  this.controls.dispose();
@@ -83,10 +87,13 @@ export class FlyDragger implements IDragger {
83
87
 
84
88
  viewerRender = () => {
85
89
  this.joyStickControls.update();
86
- this.controls.update();
87
90
  };
88
91
 
89
92
  viewerZoom = () => {
90
93
  this.controls.rotateDelta.set(0, 0);
91
94
  };
95
+
96
+ animate = () => {
97
+ this.controls.update();
98
+ };
92
99
  }
@@ -50,16 +50,20 @@ export class WalkDragger implements IDragger {
50
50
  this.joyStickControls.addEventListener("change", this.controlsChange);
51
51
 
52
52
  this.viewer = viewer;
53
+ this.viewer.addEventListener("animate", this.animate);
53
54
  this.viewer.addEventListener("render", this.viewerRender);
54
55
  this.viewer.addEventListener("zoom", this.viewerZoom);
55
56
  this.viewer.addEventListener("changecameramode", this.updateControlsCamera);
57
+
56
58
  this.updateControls();
57
59
  }
58
60
 
59
61
  dispose() {
62
+ this.viewer.removeEventListener("animate", this.animate);
60
63
  this.viewer.removeEventListener("render", this.viewerRender);
61
64
  this.viewer.removeEventListener("zoom", this.viewerZoom);
62
65
  this.viewer.removeEventListener("changecameramode", this.updateControlsCamera);
66
+
63
67
  this.controls.removeEventListener("walkspeedchange", this.walkspeedChange);
64
68
  this.controls.removeEventListener("change", this.controlsChange);
65
69
  this.controls.dispose();
@@ -91,10 +95,13 @@ export class WalkDragger implements IDragger {
91
95
 
92
96
  viewerRender = () => {
93
97
  this.joyStickControls.update();
94
- this.controls.update();
95
98
  };
96
99
 
97
100
  viewerZoom = () => {
98
101
  this.controls.rotateDelta.set(0, 0);
99
102
  };
103
+
104
+ animate = () => {
105
+ this.controls.update();
106
+ };
100
107
  }
@@ -77,9 +77,6 @@ export class DynamicGltfLoader {
77
77
  this.graphicsObjectLimit = 10000;
78
78
  this.totalLoadedObjects = 0;
79
79
 
80
- this.lastUpdateTime = 0;
81
- this.updateInterval = 1000;
82
-
83
80
  this.handleToObjects = new Map();
84
81
 
85
82
  this.originalObjects = new Set();
@@ -887,11 +884,7 @@ export class DynamicGltfLoader {
887
884
  total: totalNodes,
888
885
  });
889
886
 
890
- const currentTime = Date.now();
891
- if (currentTime - this.lastUpdateTime >= this.updateInterval) {
892
- this.dispatchEvent("update");
893
- this.lastUpdateTime = currentTime;
894
- }
887
+ this.dispatchEvent("update");
895
888
 
896
889
  await new Promise((resolve) => {
897
890
  setTimeout(resolve, 0);
@@ -1284,7 +1277,6 @@ export class DynamicGltfLoader {
1284
1277
  this.transformedGeometries.clear();
1285
1278
 
1286
1279
  this.totalLoadedObjects = 0;
1287
- this.lastUpdateTime = 0;
1288
1280
  this.currentMemoryUsage = 0;
1289
1281
  this.loadedGeometrySize = 0;
1290
1282
 
@@ -1414,9 +1406,7 @@ export class DynamicGltfLoader {
1414
1406
 
1415
1407
  yieldToUI() {
1416
1408
  return new Promise((resolve) => {
1417
- requestAnimationFrame(() => {
1418
- setTimeout(resolve, 0);
1419
- });
1409
+ setTimeout(resolve, 0);
1420
1410
  });
1421
1411
  }
1422
1412
 
@@ -71,16 +71,16 @@ export class GLTFCloudDynamicLoader extends Loader {
71
71
 
72
72
  this.viewer.syncOptions();
73
73
  this.viewer.syncOverlay();
74
- this.viewer.update();
75
74
 
76
75
  this.viewer.emitEvent({ type: "databasechunk", data: scene, file: model.file, model });
76
+ this.viewer.update(true);
77
77
  });
78
78
 
79
79
  this.gltfLoader.addEventListener("geometryerror", (data) => {
80
80
  this.viewer.emitEvent({ type: "geometryerror", data, file: model.file, model });
81
81
  });
82
82
 
83
- this.gltfLoader.addEventListener("update", (data) => {
83
+ this.gltfLoader.addEventListener("update", () => {
84
84
  this.viewer.update();
85
85
  });
86
86
 
@@ -75,16 +75,16 @@ export class GLTFFileDynamicLoader extends Loader {
75
75
 
76
76
  this.viewer.syncOptions();
77
77
  this.viewer.syncOverlay();
78
- this.viewer.update();
79
78
 
80
79
  this.viewer.emitEvent({ type: "databasechunk", data: scene, file });
80
+ this.viewer.update(true);
81
81
  });
82
82
 
83
83
  this.gltfLoader.addEventListener("geometryerror", (data) => {
84
84
  this.viewer.emitEvent({ type: "geometryerror", data, file });
85
85
  });
86
86
 
87
- this.gltfLoader.addEventListener("update", (data) => {
87
+ this.gltfLoader.addEventListener("update", () => {
88
88
  this.viewer.update();
89
89
  });
90
90
 
@@ -86,11 +86,12 @@ import { GLTFCloudDynamicLoader } from "./GLTFCloudDynamicLoader";
86
86
  *
87
87
  * this.viewer.syncOptions();
88
88
  * this.viewer.syncOverlay();
89
- * this.viewer.update();
90
89
  *
91
90
  * this.viewer.emitEvent({ type: "geometryprogress", data: 1, file });
92
91
  * this.viewer.emitEvent({ type: "databasechunk", data: scene, file });
93
92
  *
93
+ * this.viewer.update(true);
94
+ *
94
95
  * return Promise.resove(this);
95
96
  * };
96
97
  *