David Catuhe 7 rokov pred
rodič
commit
c51eacb53a

+ 3 - 2
Viewer/src/model/modelAnimation.ts

@@ -1,4 +1,4 @@
-import { AnimationGroup, Animatable, Skeleton, IDisposable } from "babylonjs";
+import { AnimationGroup, Animatable, Skeleton } from "babylonjs";
 
 export enum AnimationPlayMode {
     ONCE,
@@ -13,7 +13,7 @@ export enum AnimationState {
     ENDED
 }
 
-export interface IModelAnimation extends IDisposable {
+export interface IModelAnimation {
     readonly state: AnimationState;
     readonly name: string;
     readonly frames: number;
@@ -27,6 +27,7 @@ export interface IModelAnimation extends IDisposable {
     reset();
     restart();
     goToFrame(frameNumber: number);
+    dispose();
 }
 
 export class GroupModelAnimation implements IModelAnimation {

+ 1 - 1
Viewer/src/model/viewerModel.ts

@@ -100,7 +100,7 @@ export class ViewerModel implements IDisposable {
                 })
             } else {
                 skeletons.forEach((skeleton, idx) => {
-                    let ag = new BABYLON.AnimationGroup("animation-" + idx, this._scene);
+                    let ag = new AnimationGroup("animation-" + idx, this._scene);
                     skeleton.getAnimatables().forEach(a => {
                         if (a.animations[0]) {
                             ag.addTargetedAnimation(a.animations[0], a);

+ 1 - 1
Viewer/src/viewer/defaultViewer.ts

@@ -246,7 +246,7 @@ export class DefaultViewer extends AbstractViewer {
         super.configureLights(lightsConfiguration, model);
         // labs feature - flashlight
         if (this.configuration.lab && this.configuration.lab.flashlight) {
-            let pointerPosition = BABYLON.Vector3.Zero();
+            let pointerPosition = Vector3.Zero();
             let lightTarget;
             let angle = 0.5;
             let exponent = Math.PI / 2;

+ 2 - 1
Viewer/src/viewer/viewer.ts

@@ -33,7 +33,7 @@ export abstract class AbstractViewer {
     protected maxShadows: number;
     private _hdrSupport: boolean;
 
-    private _isDisposed: boolean;
+    protected _isDisposed: boolean = false;
 
     public get isHdrSupported() {
         return this._hdrSupport;
@@ -664,6 +664,7 @@ export abstract class AbstractViewer {
         this.engine.dispose();
 
         this.templateManager.dispose();
+        viewerManager.removeViewer(this);
         this._isDisposed = true;
     }
 

+ 8 - 2
Viewer/src/viewer/viewerManager.ts

@@ -1,5 +1,3 @@
-/// <reference path="../../../dist/preview release/babylon.d.ts"/>
-
 import { Observable } from 'babylonjs';
 import { AbstractViewer } from './viewer';
 
@@ -9,10 +7,12 @@ export class ViewerManager {
 
     public onViewerAdded: (viewer: AbstractViewer) => void;
     public onViewerAddedObservable: Observable<AbstractViewer>;
+    public onViewerRemovedObservable: Observable<string>;
 
     constructor() {
         this.viewers = {};
         this.onViewerAddedObservable = new Observable();
+        this.onViewerRemovedObservable = new Observable();
     }
 
     public addViewer(viewer: AbstractViewer) {
@@ -20,6 +20,12 @@ export class ViewerManager {
         this._onViewerAdded(viewer);
     }
 
+    public removeViewer(viewer: AbstractViewer) {
+        let id = viewer.getBaseId();
+        delete this.viewers[id];
+        this.onViewerRemovedObservable.notifyObservers(id);
+    }
+
     public getViewerById(id: string): AbstractViewer {
         return this.viewers[id];
     }

+ 3 - 0
dist/preview release/viewer/babylon.viewer.d.ts

@@ -91,7 +91,9 @@ declare module BabylonViewer {
     interface ViewerManager {
         onViewerAdded: (viewer: AbstractViewer) => void;
         onViewerAddedObservable: BABYLON.Observable<AbstractViewer>;
+        onViewerRemovedObservable: BABYLON.Observable<string>;
         addViewer(viewer: AbstractViewer): void;
+        removeViewer(viewer: AbstractViewer): void;
         getViewerById(id: string): AbstractViewer;
         getViewerByHTMLElement(element: HTMLElement): AbstractViewer | undefined;
         getViewerPromiseById(id: string): Promise<AbstractViewer>;
@@ -462,6 +464,7 @@ declare module BabylonViewer {
         protected defaultPipelineTextureType: number;
         protected maxShadows: number;
         readonly isHdrSupported: boolean;
+        protected _isDisposed: boolean;
         onSceneInitObservable: BABYLON.Observable<BABYLON.Scene>;
         onEngineInitObservable: BABYLON.Observable<BABYLON.Engine>;
         onModelLoadedObservable: BABYLON.Observable<ViewerModel>;

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 20 - 16
dist/preview release/viewer/babylon.viewer.js


+ 10 - 2
dist/preview release/viewer/babylon.viewer.max.js

@@ -93315,11 +93315,17 @@ var ViewerManager = (function () {
     function ViewerManager() {
         this.viewers = {};
         this.onViewerAddedObservable = new babylonjs_1.Observable();
+        this.onViewerRemovedObservable = new babylonjs_1.Observable();
     }
     ViewerManager.prototype.addViewer = function (viewer) {
         this.viewers[viewer.getBaseId()] = viewer;
         this._onViewerAdded(viewer);
     };
+    ViewerManager.prototype.removeViewer = function (viewer) {
+        var id = viewer.getBaseId();
+        delete this.viewers[id];
+        this.onViewerRemovedObservable.notifyObservers(id);
+    };
     ViewerManager.prototype.getViewerById = function (id) {
         return this.viewers[id];
     };
@@ -93582,7 +93588,7 @@ var DefaultViewer = (function (_super) {
         if (lightsConfiguration === void 0) { lightsConfiguration = {}; }
         _super.prototype.configureLights.call(this, lightsConfiguration, model);
         if (this.configuration.lab && this.configuration.lab.flashlight) {
-            var pointerPosition = BABYLON.Vector3.Zero();
+            var pointerPosition = babylonjs_1.Vector3.Zero();
             var lightTarget_1;
             var angle = 0.5;
             var exponent = Math.PI / 2;
@@ -93648,6 +93654,7 @@ var AbstractViewer = (function () {
         if (initialConfiguration === void 0) { initialConfiguration = {}; }
         var _this = this;
         this.containerElement = containerElement;
+        this._isDisposed = false;
         this.resize = function () {
             if (!_this.isCanvasInDOM()) {
                 return;
@@ -94172,6 +94179,7 @@ var AbstractViewer = (function () {
         this.scene.dispose();
         this.engine.dispose();
         this.templateManager.dispose();
+        viewerManager_1.viewerManager.removeViewer(this);
         this._isDisposed = true;
     };
     AbstractViewer.prototype.onTemplatesLoaded = function () {
@@ -95407,7 +95415,7 @@ var ViewerModel = (function () {
             }
             else {
                 skeletons.forEach(function (skeleton, idx) {
-                    var ag = new BABYLON.AnimationGroup("animation-" + idx, _this._scene);
+                    var ag = new babylonjs_1.AnimationGroup("animation-" + idx, _this._scene);
                     skeleton.getAnimatables().forEach(function (a) {
                         if (a.animations[0]) {
                             ag.addTargetedAnimation(a.animations[0], a);