From cf923cec6a89a5d30c421fc549d291526fa427ef Mon Sep 17 00:00:00 2001 From: ggetz Date: Wed, 19 Jul 2017 13:19:10 -0400 Subject: [PATCH 1/4] Fixed error with models when globe is undefined --- CHANGES.md | 1 + Source/Scene/Model.js | 2 +- Source/Scene/Scene.js | 16 +++++++++++++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index e06889b90fa..4db823e6355 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,6 +20,7 @@ Change Log * Fixed label positioning when height reference changes [#5609](https://github.com/AnalyticalGraphicsInc/cesium/issues/5609) * Fixed crash when using the `Cesium3DTilesInspectorViewModel` and removing a tileset [#5607](https://github.com/AnalyticalGraphicsInc/cesium/issues/5607) * Fixed polygon outline in Polygon Sandcastle demo [#5642](https://github.com/AnalyticalGraphicsInc/cesium/issues/5642) +* Fixed issue where models would throw an error if the globe is undefined [#5638](https://github.com/AnalyticalGraphicsInc/cesium/issues/5638) ### 1.35.2 - 2017-07-11 diff --git a/Source/Scene/Model.js b/Source/Scene/Model.js index 06425037b1f..06c51c34c15 100644 --- a/Source/Scene/Model.js +++ b/Source/Scene/Model.js @@ -528,7 +528,7 @@ define([ this._removeUpdateHeightCallback = undefined; var scene = options.scene; this._scene = scene; - if (defined(scene)) { + if (defined(scene) && defined(scene.terrainProviderChanged)) { scene.terrainProviderChanged.addEventListener(function() { this._heightChanged = true; }, this); diff --git a/Source/Scene/Scene.js b/Source/Scene/Scene.js index 67193b1ca03..a12916465c5 100644 --- a/Source/Scene/Scene.js +++ b/Source/Scene/Scene.js @@ -888,6 +888,10 @@ define([ */ imageryLayers : { get : function() { + if (!defined(this.globe)) { + return undefined; + } + return this.globe.imageryLayers; } }, @@ -900,10 +904,16 @@ define([ */ terrainProvider : { get : function() { + if (!defined(this.globe)) { + return undefined; + } + return this.globe.terrainProvider; }, set : function(terrainProvider) { - this.globe.terrainProvider = terrainProvider; + if (defined(this.globe)) { + this.globe.terrainProvider = terrainProvider; + } } }, @@ -916,6 +926,10 @@ define([ */ terrainProviderChanged : { get : function() { + if (!defined(this.globe)) { + return undefined; + } + return this.globe.terrainProviderChanged; } }, From 57fb858bbd2fdc9542b3adf698ba74ca78290deb Mon Sep 17 00:00:00 2001 From: ggetz Date: Wed, 19 Jul 2017 14:49:05 -0400 Subject: [PATCH 2/4] Check terrainProviderChanged event is defined --- Source/Scene/BillboardCollection.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Scene/BillboardCollection.js b/Source/Scene/BillboardCollection.js index 8e46636ec7b..ec9c06b3619 100644 --- a/Source/Scene/BillboardCollection.js +++ b/Source/Scene/BillboardCollection.js @@ -319,7 +319,7 @@ define([ }; var scene = this._scene; - if (defined(scene)) { + if (defined(scene) && defined(scene.terrainProviderChanged)) { this._removeCallbackFunc = scene.terrainProviderChanged.addEventListener(function() { var billboards = this._billboards; var length = billboards.length; From 1d1f96eadb6cc555f7fd7414eb183f4d7348202e Mon Sep 17 00:00:00 2001 From: ggetz Date: Mon, 24 Jul 2017 11:32:11 -0400 Subject: [PATCH 3/4] Add specs, clean up event listener on destroy --- Source/Scene/Model.js | 7 +++++- Specs/Scene/SceneSpec.js | 46 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/Source/Scene/Model.js b/Source/Scene/Model.js index 6751dd7b54e..60978310ea0 100644 --- a/Source/Scene/Model.js +++ b/Source/Scene/Model.js @@ -529,7 +529,7 @@ define([ var scene = options.scene; this._scene = scene; if (defined(scene) && defined(scene.terrainProviderChanged)) { - scene.terrainProviderChanged.addEventListener(function() { + this._terrainProviderChangedCallback = scene.terrainProviderChanged.addEventListener(function() { this._heightChanged = true; }, this); } @@ -4769,6 +4769,11 @@ define([ this._removeUpdateHeightCallback = undefined; } + if (defined(this._terrainProviderChangedCallback)) { + this._terrainProviderChangedCallback(); + this._terrainProviderChangedCallback = undefined; + } + this._rendererResources = undefined; this._cachedRendererResources = this._cachedRendererResources && this._cachedRendererResources.release(); diff --git a/Specs/Scene/SceneSpec.js b/Specs/Scene/SceneSpec.js index 4aefefb9da2..f8075de3b87 100644 --- a/Specs/Scene/SceneSpec.js +++ b/Specs/Scene/SceneSpec.js @@ -2,6 +2,7 @@ defineSuite([ 'Core/BoundingSphere', 'Core/Cartesian2', 'Core/Cartesian3', + 'Core/CesiumTerrainProvider', 'Core/Color', 'Core/defined', 'Core/Ellipsoid', @@ -42,6 +43,7 @@ defineSuite([ BoundingSphere, Cartesian2, Cartesian3, + CesiumTerrainProvider, Color, defined, Ellipsoid, @@ -1121,4 +1123,48 @@ defineSuite([ expect(SceneTransforms.wgs84ToWindowCoordinates).toHaveBeenCalledWith(scene, mockPosition, result); }); + it('Gets imageryLayers', function() { + var scene = createScene(); + var globe = scene.globe = new Globe(Ellipsoid.UNIT_SPHERE); + expect(scene.imageryLayers).toBe(globe.imageryLayers); + + scene.globe = undefined; + expect(scene.imageryLayers).toBeUndefined(); + }); + + it('Gets terrainProvider', function() { + var scene = createScene(); + var globe = scene.globe = new Globe(Ellipsoid.UNIT_SPHERE); + expect(scene.terrainProvider).toBe(globe.terrainProvider); + + scene.globe = undefined; + expect(scene.terrainProvider).toBeUndefined(); + }); + + it('Sets terrainProvider', function() { + var scene = createScene(); + var globe = scene.globe = new Globe(Ellipsoid.UNIT_SPHERE); + scene.terrainProvider = new CesiumTerrainProvider({ + url: '//terrain/tiles' + }); + + expect(scene.terrainProvider).toBe(globe.terrainProvider); + + scene.globe = undefined; + expect(function() { + scene.terrainProvider = new CesiumTerrainProvider({ + url: '//newTerrain/tiles' + }); + }).not.toThrow(); + }); + + it('Gets terrainProviderChanged', function() { + var scene = createScene(); + var globe = scene.globe = new Globe(Ellipsoid.UNIT_SPHERE); + expect(scene.terrainProviderChanged).toBe(globe.terrainProviderChanged); + + scene.globe = undefined; + expect(scene.terrainProviderChanged).toBeUndefined(); + }); + }, 'WebGL'); From 6489285461667ee20cc26494ecac1bdc22cdf04d Mon Sep 17 00:00:00 2001 From: Gabby Getz Date: Mon, 7 Aug 2017 10:19:08 -0400 Subject: [PATCH 4/4] Fix CHANGES.md --- CHANGES.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 646a9bbe287..afbb1c54348 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -41,8 +41,6 @@ Change Log * Updated `Billboard`, `Label` and `PointPrimitive` constructors to clone `NearFarScale` parameters [#5654](https://github.com/AnalyticalGraphicsInc/cesium/pull/5654) * Added `FrustumGeometry` and `FrustumOutlineGeometry`. [#5649](https://github.com/AnalyticalGraphicsInc/cesium/pull/5649) * Added an `options` parameter to the constructors of `PerspectiveFrustum`, `PerspectiveOffCenterFrustum`, `OrthographicFrustum`, and `OrthographicOffCenterFrustum` to set properties. [#5649](https://github.com/AnalyticalGraphicsInc/cesium/pull/5649) -* Added `ClassificationPrimitive` which defines a volume and draws the intersection of the volume and terrain or 3D Tiles. [#5625](https://github.com/AnalyticalGraphicsInc/cesium/pull/5625) -* Fix for dynamic polylines with polyline dash material [#5681](https://github.com/AnalyticalGraphicsInc/cesium/pull/5681) ### 1.35.2 - 2017-07-11