Bladeren bron

Exposing a viewer manager
The viewer manager will provide access to already-existing viewer instances. This way a programmer has access to the viewer and the underlining engine, cene, camera and observers.

Raanan Weber 7 jaren geleden
bovenliggende
commit
5dba8a1f38
3 gewijzigde bestanden met toevoegingen van 35 en 1 verwijderingen
  1. 2 1
      Viewer/src/index.ts
  2. 5 0
      Viewer/src/viewer/viewer.ts
  3. 28 0
      Viewer/src/viewer/viewerManager.ts

+ 2 - 1
Viewer/src/index.ts

@@ -1,3 +1,4 @@
+import { viewerManager } from './viewer/viewerManager';
 import { DefaultViewer } from './viewer/defaultViewer';
 import { AbstractViewer } from './viewer/viewer';
 
@@ -26,4 +27,4 @@ setTimeout(() => {
 });
 
 // public API for initialization
-export { InitTags, DefaultViewer, AbstractViewer };
+export { InitTags, DefaultViewer, AbstractViewer, viewerManager };

+ 5 - 0
Viewer/src/viewer/viewer.ts

@@ -1,3 +1,4 @@
+import { viewerManager } from './viewerManager';
 import { TemplateManager } from './../templateManager';
 import configurationLoader from './../configuration/loader';
 import { Observable, Engine, Scene, ArcRotateCamera, Vector3, SceneLoader, AbstractMesh, Mesh, HemisphericLight } from 'babylonjs';
@@ -21,6 +22,10 @@ export abstract class AbstractViewer {
             this.baseId = containerElement.id = 'bjs' + Math.random().toString(32).substr(2, 8);
         }
 
+        // add this viewer to the viewer manager
+        viewerManager.addViewer(this);
+
+        // create a new template manager. TODO - singleton?
         this.templateManager = new TemplateManager(containerElement);
 
         this.prepareContainerElement();

+ 28 - 0
Viewer/src/viewer/viewerManager.ts

@@ -0,0 +1,28 @@
+import { AbstractViewer } from './viewer';
+
+class ViewerManager {
+
+    private viewers: { [key: string]: AbstractViewer };
+
+    constructor() {
+        this.viewers = {};
+    }
+
+    public addViewer(viewer: AbstractViewer) {
+        this.viewers[viewer.getBaseId()] = viewer;
+    }
+
+    public getViewerById(id: string): AbstractViewer {
+        return this.viewers[id];
+    }
+
+    public getViewerByHTMLElement(element: HTMLElement) {
+        for (let id in this.viewers) {
+            if (this.viewers[id].containerElement === element) {
+                return this.getViewerById(id);
+            }
+        }
+    }
+}
+
+export let viewerManager = new ViewerManager();