diff --git a/ui5/eve7/controller/GL.controller.js b/ui5/eve7/controller/GL.controller.js index 5fdda58eea1832219d9e2ab6fcbb612e358bcf3f..1e122e5191e3aef286c07a79b196b0c6dc32deef 100644 --- a/ui5/eve7/controller/GL.controller.js +++ b/ui5/eve7/controller/GL.controller.js @@ -49,11 +49,9 @@ sap.ui.define([ { let args = oEvent.getParameter("arguments"); - console.log('ON MATCHED', args.viewName); - - console.log('MORE DATA', JSROOT.$eve7tmp); - - console.log('COMPONENT DATA', Component.getOwnerComponentFor(this.getView()).getComponentData()); + // console.log('ON MATCHED', args.viewName); + // console.log('MORE DATA', JSROOT.$eve7tmp); + // console.log('COMPONENT DATA', Component.getOwnerComponentFor(this.getView()).getComponentData()); this.setupManagerAndViewType(Component.getOwnerComponentFor(this.getView()).getComponentData(), args.viewName, JSROOT.$eve7tmp); @@ -66,6 +64,13 @@ sap.ui.define([ // Initialization that can be done immediately onInit or later through UI5 bootstrap callbacks. setupManagerAndViewType: function(data, viewName, moredata) { + delete this.standalone; + delete this.viewer_class; + if (this.viewer) { + this.viewer.cleanup(); + delete this.viewer; + } + if (viewName) { data.standalone = viewName; @@ -80,7 +85,6 @@ sap.ui.define([ this.eveViewerId = moredata.eveViewerId; this.kind = moredata.kind; this.standalone = viewName; - this.checkViewReady(); } else if (data.standalone && data.conn_handle) @@ -212,10 +216,18 @@ sap.ui.define([ redrawScenes: function() { + if (!this.created_scenes) return; + for (let s of this.created_scenes) - { s.redrawScene(); - } + }, + + removeScenes: function() { + if (!this.created_scenes) return; + + for (let s of this.created_scenes) + s.removeScene(); + delete this.created_scenes; }, /// invoked from ResizeHandler diff --git a/ui5/eve7/lib/EveScene.js b/ui5/eve7/lib/EveScene.js index c34ed893ba7b10543b29c6b0b6e22ea05cb88a0c..b310911dbe58ef336ca19bff47ff819d1e5e3960 100644 --- a/ui5/eve7/lib/EveScene.js +++ b/ui5/eve7/lib/EveScene.js @@ -122,7 +122,7 @@ sap.ui.define(['rootui5/eve7/lib/EveManager'], function(EveManager) { /** method insert all objects into three.js container */ EveScene.prototype.redrawScene = function() { - if ( ! this.glctrl) return; + if (!this.glctrl) return; let res3d = this.create3DObjects(true); if ( ! res3d.length && this.first_time) return; @@ -140,6 +140,17 @@ sap.ui.define(['rootui5/eve7/lib/EveManager'], function(EveManager) { this.first_time = false; } + EveScene.prototype.removeScene = function() + { + if (!this.glctrl) return; + + let cont = this.glctrl.getSceneContainer("scene" + this.id); + while (cont.children.length > 0) + cont.remove(cont.children[0]); + + this.first_time = true; + } + EveScene.prototype.update3DObjectsVisibility = function(arr, all_ancestor_children_visible) { if (!arr) return; diff --git a/ui5/eve7/lib/GlViewer.js b/ui5/eve7/lib/GlViewer.js index 2a0a6dfff640e125633c8414f94ebcb271109648..c8c504af203b8e22bec62d0a1b055b348345dd2f 100644 --- a/ui5/eve7/lib/GlViewer.js +++ b/ui5/eve7/lib/GlViewer.js @@ -6,20 +6,26 @@ sap.ui.define([], function() { { this.viewer_class = viewer_class; - console.log(this.get_name() + " - constructor"); + // console.log(this.get_name() + " - constructor"); }; GlViewer.prototype = { init: function(controller) { - console.log(this.get_name() + ".init()"); + // console.log(this.get_name() + ".init()"); if (this.controller) throw new Error(this.get_name() + "already initialized."); this.controller = controller; }, + cleanup: function() + { + // console.log(this.get_name() + ".cleanup()"); + delete this.controller; + }, + //============================================================================== get_name: function() { return "EVE.GlViewer" + this.viewer_class; }, diff --git a/ui5/eve7/lib/GlViewerThree.js b/ui5/eve7/lib/GlViewerThree.js index 3f16fbb78d7c35488cb5dae9a357dc196d7354bd..5fbb18c0f4eb2eb9929f9a2a777c34d14e6fffa5 100644 --- a/ui5/eve7/lib/GlViewerThree.js +++ b/ui5/eve7/lib/GlViewerThree.js @@ -55,6 +55,13 @@ sap.ui.define([ this.controller.glViewerInitDone(); }, + cleanup: function() { + if (this.controller) this.controller.removeScenes(); + this.destroyThreejsRenderer(); + GlViewer.prototype.cleanup.call(this); + }, + + //============================================================================== make_object: function(name) { @@ -70,10 +77,9 @@ sap.ui.define([ //============================================================================== createThreejsRenderer: function() { - var w = this.get_width(); - var h = this.get_height(); + var w = this.get_width(), h = this.get_height(); - // console.log("createThreejsRenderer", this.kind, "w=", w, "h=", h); + // console.log("createThreejsRenderer", this.controller.kind, "w=", w, "h=", h); this.scene = new THREE.Scene(); // this.scene.fog = new THREE.FogExp2( 0xaaaaaa, 0.05 ); @@ -137,6 +143,15 @@ sap.ui.define([ this.composer.addPass(this.fxaa_pass); }, + destroyThreejsRenderer: function() { + if (this.renderer) + this.get_view().getDomRef().removeChild(this.renderer.domElement); + + delete this.renderer; + delete this.scene; + delete this.composer; + }, + setupThreejsDomAndEventHandlers: function() { this.get_view().getDomRef().appendChild(this.renderer.domElement); @@ -449,8 +464,7 @@ sap.ui.define([ this.ttip.style.top = null; } - // show tooltip only in static mode - if (this.handle.kind != "file") this.ttip.style.display = "block"; + this.ttip.style.display = "block"; }, remoteToolTip: function(msg) { this.ttip_text.innerHTML = msg;