@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.
- package/dist/extensions/components/InfoPanelComponent.js +7 -9
- package/dist/extensions/components/InfoPanelComponent.js.map +1 -1
- package/dist/extensions/components/InfoPanelComponent.min.js +1 -1
- package/dist/extensions/components/InfoPanelComponent.module.js +7 -9
- package/dist/extensions/components/InfoPanelComponent.module.js.map +1 -1
- package/dist/extensions/loaders/GLTFCloudLoader.js +1 -1
- package/dist/extensions/loaders/GLTFCloudLoader.js.map +1 -1
- package/dist/extensions/loaders/GLTFCloudLoader.min.js +1 -1
- package/dist/extensions/loaders/GLTFCloudLoader.module.js +1 -1
- package/dist/extensions/loaders/GLTFCloudLoader.module.js.map +1 -1
- package/dist/extensions/loaders/GLTFFileLoader.js +1 -1
- package/dist/extensions/loaders/GLTFFileLoader.js.map +1 -1
- package/dist/extensions/loaders/GLTFFileLoader.min.js +1 -1
- package/dist/extensions/loaders/GLTFFileLoader.module.js +1 -1
- package/dist/extensions/loaders/GLTFFileLoader.module.js.map +1 -1
- package/dist/extensions/loaders/IFCXLoader.js +2 -2
- package/dist/extensions/loaders/IFCXLoader.js.map +1 -1
- package/dist/extensions/loaders/IFCXLoader.min.js +1 -1
- package/dist/extensions/loaders/IFCXLoader.module.js +2 -2
- package/dist/extensions/loaders/IFCXLoader.module.js.map +1 -1
- package/dist/extensions/loaders/PotreeLoader.js +1 -1
- package/dist/extensions/loaders/PotreeLoader.js.map +1 -1
- package/dist/extensions/loaders/PotreeLoader.min.js +1 -1
- package/dist/extensions/loaders/PotreeLoader.module.js +1 -1
- package/dist/extensions/loaders/PotreeLoader.module.js.map +1 -1
- package/dist/viewer-three.js +40 -37
- package/dist/viewer-three.js.map +1 -1
- package/dist/viewer-three.min.js +3 -3
- package/dist/viewer-three.module.js +40 -37
- package/dist/viewer-three.module.js.map +1 -1
- package/extensions/components/InfoPanelComponent.ts +8 -11
- package/extensions/loaders/GLTFCloudLoader.ts +1 -1
- package/extensions/loaders/GLTFFileLoader.ts +1 -1
- package/extensions/loaders/IFCX/IFCXCloudLoader.ts +1 -1
- package/extensions/loaders/IFCX/IFCXFileLoader.ts +1 -1
- package/extensions/loaders/Potree/PotreeFileLoader.ts +1 -1
- package/lib/Viewer/Viewer.d.ts +1 -0
- package/lib/Viewer/commands/CreatePreview.d.ts +1 -1
- package/lib/Viewer/components/RenderLoopComponent.d.ts +1 -1
- package/lib/Viewer/draggers/FlyDragger.d.ts +1 -0
- package/lib/Viewer/draggers/WalkDragger.d.ts +1 -0
- package/lib/Viewer/loaders/index.d.ts +2 -1
- package/package.json +5 -5
- package/src/Viewer/Viewer.ts +34 -25
- package/src/Viewer/commands/CreatePreview.ts +2 -2
- package/src/Viewer/components/InfoComponent.ts +4 -4
- package/src/Viewer/components/RenderLoopComponent.ts +2 -2
- package/src/Viewer/draggers/FlyDragger.ts +8 -1
- package/src/Viewer/draggers/WalkDragger.ts +8 -1
- package/src/Viewer/loaders/DynamicGltfLoader/DynamicGltfLoader.js +2 -12
- package/src/Viewer/loaders/GLTFCloudDynamicLoader.ts +2 -2
- package/src/Viewer/loaders/GLTFFileDynamicLoader.ts +2 -2
- 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.
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|
package/lib/Viewer/Viewer.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { Viewer } from "../Viewer";
|
|
2
|
-
export declare function createPreview(viewer: Viewer, type?: string,
|
|
2
|
+
export declare function createPreview(viewer: Viewer, type?: string, quality?: number): string;
|
|
@@ -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": "
|
|
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": "~
|
|
39
|
-
"@inweb/eventemitter2": "~
|
|
40
|
-
"@inweb/markup": "~
|
|
41
|
-
"@inweb/viewer-core": "~
|
|
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",
|
package/src/Viewer/Viewer.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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",
|
|
26
|
+
export function createPreview(viewer: Viewer, type = "image/jpeg", quality = 0.25): string {
|
|
27
27
|
viewer.update(true);
|
|
28
|
-
return viewer.canvas.toDataURL(type,
|
|
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
|
|
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
|
|
163
|
-
this.viewer.info.render.viewport.width =
|
|
164
|
-
this.viewer.info.render.viewport.height =
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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", (
|
|
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", (
|
|
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
|
*
|