@inweb/viewer-three 25.3.19 → 25.3.21

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.
@@ -71,7 +71,7 @@ export class Viewer extends EventEmitter2<ViewerEventMap & OptionsEventMap> impl
71
71
 
72
72
  private components: Array<IComponent>;
73
73
 
74
- private renderNeeded: boolean;
74
+ private renderNeeded = false;
75
75
  private renderTime: DOMHighResTimeStamp;
76
76
 
77
77
  constructor(client?: Client) {
@@ -80,7 +80,7 @@ export class Viewer extends EventEmitter2<ViewerEventMap & OptionsEventMap> impl
80
80
 
81
81
  this.client = client;
82
82
 
83
- this.canvasEvents = CANVAS_EVENTS;
83
+ this.canvasEvents = CANVAS_EVENTS.slice();
84
84
  this.canvaseventlistener = (event: Event) => this.emit(event);
85
85
 
86
86
  this.draggerFactory = {
@@ -178,6 +178,8 @@ export class Viewer extends EventEmitter2<ViewerEventMap & OptionsEventMap> impl
178
178
  public render(time: DOMHighResTimeStamp): void {
179
179
  if (!this.renderNeeded) return;
180
180
  if (!this.renderer) return;
181
+ if (!this.scene) return;
182
+ if (!this.camera) return;
181
183
 
182
184
  this.renderer.render(this.scene, this.camera);
183
185
  this.renderNeeded = false;
@@ -210,8 +212,7 @@ export class Viewer extends EventEmitter2<ViewerEventMap & OptionsEventMap> impl
210
212
 
211
213
  this.emitEvent({ type: "open", file, model: file });
212
214
 
213
- let model: Model;
214
-
215
+ let model: Model | undefined = undefined;
215
216
  if (file) {
216
217
  const models = (await file.getModels()) || [];
217
218
  model = models.find((model: Model) => model.default) || models[0];
@@ -290,7 +291,7 @@ export class Viewer extends EventEmitter2<ViewerEventMap & OptionsEventMap> impl
290
291
 
291
292
  this.emitEvent({ type: "databasechunk" });
292
293
  this.emitEvent({ type: "geometryend", data: gltf.scene });
293
- } catch (error) {
294
+ } catch (error: any) {
294
295
  this.emitEvent({ type: "geometryerror", data: error });
295
296
  throw error;
296
297
  } finally {
@@ -45,7 +45,7 @@ export class BackgroundComponent implements IComponent {
45
45
  environment.dispose();
46
46
  }
47
47
 
48
- dispose() {
48
+ dispose(): void {
49
49
  this.viewer.removeEventListener("optionschange", this.syncOptions);
50
50
  this.viewer.scene.environment = undefined;
51
51
  this.viewer.scene.background = undefined;
@@ -34,7 +34,7 @@ export class DefaultCameraPositionComponent implements IComponent {
34
34
  this.viewer.addEventListener("geometryend", this.geometryEnd);
35
35
  }
36
36
 
37
- dispose() {
37
+ dispose(): void {
38
38
  this.viewer.removeEventListener("geometryend", this.geometryEnd);
39
39
  }
40
40
 
@@ -41,7 +41,7 @@ export class LightComponent implements IComponent {
41
41
  this.viewer.camera.add(this.directLight);
42
42
  }
43
43
 
44
- dispose() {
44
+ dispose(): void {
45
45
  this.ambientLight.removeFromParent();
46
46
  this.directLight.removeFromParent();
47
47
  }
@@ -41,7 +41,7 @@ export class ObjectSelectionComponent implements IComponent {
41
41
  this.viewer.addEventListener("pointerup", this.onPointerUp);
42
42
  }
43
43
 
44
- dispose() {
44
+ dispose(): void {
45
45
  this.viewer.removeEventListener("pointerdown", this.onPointerDown);
46
46
  this.viewer.removeEventListener("pointerup", this.onPointerUp);
47
47
  }
@@ -26,14 +26,14 @@ import type { Viewer } from "../Viewer";
26
26
 
27
27
  export class RenderLoopComponent implements IComponent {
28
28
  protected viewer: Viewer;
29
- protected requestID: number;
29
+ protected requestID = 0;
30
30
 
31
31
  constructor(viewer: Viewer) {
32
32
  this.viewer = viewer;
33
33
  this.animate();
34
34
  }
35
35
 
36
- dispose() {
36
+ dispose(): void {
37
37
  cancelAnimationFrame(this.requestID);
38
38
  }
39
39
 
@@ -51,7 +51,7 @@ export class ClippingPlaneDragger {
51
51
  this.viewer.scene.add(this.planeHelper);
52
52
  }
53
53
 
54
- dispose() {
54
+ dispose(): void {
55
55
  this.viewer.removeEventListener("pointerdown", this.onPointerDown);
56
56
  this.viewer.removeEventListener("pointerup", this.onPointerUp);
57
57
  this.viewer.removeEventListener("pointermove", this.onPointerMove);
@@ -96,15 +96,15 @@ export class ClippingPlaneDragger {
96
96
  plane.translate(this.delta);
97
97
  };
98
98
 
99
- update() {}
99
+ update(): void {}
100
100
 
101
- screenToWorld(v: THREE.Vector3) {
101
+ screenToWorld(v: THREE.Vector3): THREE.Vector3 {
102
102
  v.x = (2 * v.x) / this.viewer.canvas.clientWidth - 1;
103
103
  v.y = 1 - (2 * v.y) / this.viewer.canvas.clientHeight;
104
104
  return v.unproject(this.viewer.camera);
105
105
  }
106
106
 
107
- screenToPlane(v: THREE.Vector3) {
107
+ screenToPlane(v: THREE.Vector3): THREE.Vector3 {
108
108
  v = this.screenToWorld(v);
109
109
  const direction = v.sub(this.viewer.camera.position).normalize();
110
110
  const ray = new THREE.Ray(this.viewer.camera.position, direction);
@@ -40,7 +40,7 @@ export class OrbitDragger extends OrbitControls {
40
40
  this.addEventListener("change", this.updateViewer);
41
41
  }
42
42
 
43
- override dispose() {
43
+ override dispose(): void {
44
44
  this.removeEventListener("change", this.updateViewer);
45
45
  this.viewer.removeEventListener("geometryend", this.geometryEnd);
46
46
  super.dispose();
@@ -86,7 +86,7 @@ export class WalkDragger {
86
86
  document.addEventListener("keyup", this.onKeyUp);
87
87
  }
88
88
 
89
- dispose() {
89
+ dispose(): void {
90
90
  this.viewer.removeEventListener("render", this.onRender);
91
91
 
92
92
  this.viewer.removeEventListener("contextmenu", this.onContextMenu);
@@ -63,7 +63,7 @@ export class GLTFLoadingManager extends THREE.LoadingManager {
63
63
  });
64
64
  }
65
65
 
66
- dispose() {
66
+ dispose(): void {
67
67
  this.dataURLs.forEach(URL.revokeObjectURL);
68
68
  }
69
69
  }