@inweb/viewer-three 27.1.0 → 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 +35 -26
- package/dist/viewer-three.js.map +1 -1
- package/dist/viewer-three.min.js +2 -2
- package/dist/viewer-three.module.js +35 -26
- 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 -1
- 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 +28 -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/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
|
@@ -62,7 +62,7 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
|
|
|
62
62
|
isInitialized(): boolean;
|
|
63
63
|
setSize(width: number, height: number, updateStyle?: boolean): void;
|
|
64
64
|
update(force?: boolean): void;
|
|
65
|
-
render(time?: DOMHighResTimeStamp): void;
|
|
65
|
+
render(time?: DOMHighResTimeStamp, force?: boolean): void;
|
|
66
66
|
loadReferences(model: Model | File | Assembly): Promise<this>;
|
|
67
67
|
/**
|
|
68
68
|
* Loads a file into the viewer.
|
|
@@ -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": "27.1.
|
|
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": "~27.1.
|
|
39
|
-
"@inweb/eventemitter2": "~27.1.
|
|
40
|
-
"@inweb/markup": "~27.1.
|
|
41
|
-
"@inweb/viewer-core": "~27.1.
|
|
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,
|
|
@@ -195,20 +196,16 @@ export class Viewer
|
|
|
195
196
|
});
|
|
196
197
|
this.renderer.setPixelRatio(pixelRatio);
|
|
197
198
|
this.renderer.setSize(width, height);
|
|
198
|
-
// this.renderer.toneMapping = LinearToneMapping;
|
|
199
199
|
this.renderer.outputColorSpace = LinearSRGBColorSpace;
|
|
200
|
+
// this.renderer.toneMapping = LinearToneMapping;
|
|
200
201
|
|
|
201
202
|
this.renderPass = new RenderPass(this.scene, this.camera);
|
|
202
|
-
|
|
203
203
|
this.helpersPass = new RenderPass(this.helpers, this.camera);
|
|
204
204
|
this.helpersPass.clear = false;
|
|
205
|
-
|
|
206
205
|
this.fxaaPass = new FXAAPass();
|
|
207
206
|
this.smaaPass = new SMAAPass();
|
|
208
|
-
|
|
209
207
|
this.ssaaRenderPass = new SSAARenderPass([this.scene, this.helpers], this.camera);
|
|
210
208
|
this.ssaaRenderPass.unbiased = true;
|
|
211
|
-
|
|
212
209
|
this.outputPass = new OutputPass();
|
|
213
210
|
|
|
214
211
|
this.composer = new EffectComposer(this.renderer);
|
|
@@ -233,13 +230,15 @@ export class Viewer
|
|
|
233
230
|
this.syncOverlay();
|
|
234
231
|
|
|
235
232
|
this._renderTime = performance.now();
|
|
236
|
-
this.render(this._renderTime);
|
|
237
233
|
|
|
238
|
-
if (typeof onProgress === "function")
|
|
239
|
-
|
|
234
|
+
if (typeof onProgress === "function") {
|
|
235
|
+
const event = new ProgressEvent("progress", { lengthComputable: true, loaded: 1, total: 1 });
|
|
236
|
+
onProgress(event);
|
|
237
|
+
}
|
|
240
238
|
|
|
241
239
|
this.emitEvent({ type: "initializeprogress", data: 1, loaded: 1, total: 1 });
|
|
242
240
|
this.emitEvent({ type: "initialize" });
|
|
241
|
+
this.update(true);
|
|
243
242
|
|
|
244
243
|
return Promise.resolve(this);
|
|
245
244
|
}
|
|
@@ -310,8 +309,8 @@ export class Viewer
|
|
|
310
309
|
this.renderer.setSize(width, height, updateStyle);
|
|
311
310
|
this.composer.setSize(width, height);
|
|
312
311
|
|
|
313
|
-
this.update(true);
|
|
314
312
|
this.emitEvent({ type: "resize", width, height });
|
|
313
|
+
this.update(true);
|
|
315
314
|
}
|
|
316
315
|
|
|
317
316
|
update(force = false): void {
|
|
@@ -326,9 +325,9 @@ export class Viewer
|
|
|
326
325
|
|
|
327
326
|
// Internal render routines
|
|
328
327
|
|
|
329
|
-
render(time?: DOMHighResTimeStamp): void {
|
|
328
|
+
render(time?: DOMHighResTimeStamp, force = false): void {
|
|
330
329
|
if (!this.renderer) return;
|
|
331
|
-
if (!this._renderNeeded) return;
|
|
330
|
+
if (!this._renderNeeded && !force) return;
|
|
332
331
|
|
|
333
332
|
if (!time) time = performance.now();
|
|
334
333
|
const deltaTime = (time - this._renderTime) / 1000;
|
|
@@ -479,6 +478,7 @@ export class Viewer
|
|
|
479
478
|
throw error;
|
|
480
479
|
}
|
|
481
480
|
this.emitEvent({ type: "geometryend", file, model });
|
|
481
|
+
this.update(true);
|
|
482
482
|
|
|
483
483
|
return this;
|
|
484
484
|
}
|
|
@@ -538,9 +538,9 @@ export class Viewer
|
|
|
538
538
|
|
|
539
539
|
this.syncOptions();
|
|
540
540
|
this.syncOverlay();
|
|
541
|
-
this.update(true);
|
|
542
541
|
|
|
543
542
|
this.emitEvent({ type: "clear" });
|
|
543
|
+
this.update(true);
|
|
544
544
|
|
|
545
545
|
return this;
|
|
546
546
|
}
|
|
@@ -769,10 +769,10 @@ export class Viewer
|
|
|
769
769
|
this.target.copy(getVector3FromPoint3d(viewpoint.custom_fields?.camera_target ?? this.target));
|
|
770
770
|
|
|
771
771
|
this.syncOverlay();
|
|
772
|
-
|
|
773
772
|
this.setActiveDragger(draggerName);
|
|
773
|
+
|
|
774
774
|
this.emitEvent({ type: "drawviewpoint", data: viewpoint });
|
|
775
|
-
this.update();
|
|
775
|
+
this.update(true);
|
|
776
776
|
}
|
|
777
777
|
|
|
778
778
|
createViewpoint(): IViewpoint {
|
|
@@ -842,11 +842,7 @@ export class Viewer
|
|
|
842
842
|
}
|
|
843
843
|
|
|
844
844
|
// IWorldTransform
|
|
845
|
-
|
|
846
|
-
// Source: Claude Sonnet 4.5
|
|
847
|
-
// Date: 2025-11-25
|
|
848
|
-
// Reviewer: vitaly.ivanov@opendesign.com
|
|
849
|
-
// Issue: CLOUD-5990
|
|
845
|
+
|
|
850
846
|
screenToWorld(position: { x: number; y: number }): { x: number; y: number; z: number } {
|
|
851
847
|
if (!this.renderer) return { x: position.x, y: position.y, z: 0 };
|
|
852
848
|
|
|
@@ -854,6 +850,12 @@ export class Viewer
|
|
|
854
850
|
const x = position.x / (rect.width / 2) - 1;
|
|
855
851
|
const y = -position.y / (rect.height / 2) + 1;
|
|
856
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
|
+
|
|
857
859
|
if (this.camera["isPerspectiveCamera"]) {
|
|
858
860
|
// Create a raycaster from the screen position
|
|
859
861
|
const raycaster = new Raycaster();
|
|
@@ -876,14 +878,15 @@ export class Viewer
|
|
|
876
878
|
return { x: point.x, y: point.y, z: point.z };
|
|
877
879
|
}
|
|
878
880
|
return { x: intersectionPoint.x, y: intersectionPoint.y, z: intersectionPoint.z };
|
|
879
|
-
} else {
|
|
880
|
-
const point = new Vector3(x, y, -1);
|
|
881
|
-
point.unproject(this.camera);
|
|
882
|
-
|
|
883
|
-
return { x: point.x, y: point.y, z: point.z };
|
|
884
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 };
|
|
885
889
|
}
|
|
886
|
-
// ===================== AI-CODE-END ======================
|
|
887
890
|
|
|
888
891
|
worldToScreen(position: { x: number; y: number; z: number }): { x: number; y: number } {
|
|
889
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
|
}
|
|
@@ -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
|
*
|