diff --git a/Source/Scene/Cesium3DTileset.js b/Source/Scene/Cesium3DTileset.js index 35c1d1f63242..468ce019b128 100644 --- a/Source/Scene/Cesium3DTileset.js +++ b/Source/Scene/Cesium3DTileset.js @@ -7,6 +7,8 @@ define([ '../Core/destroyObject', '../Core/DeveloperError', '../Core/Event', + '../Core/getBaseUri', + '../Core/getExtensionFromUri', '../Core/Intersect', '../Core/loadJson', '../Core/Math', @@ -26,6 +28,8 @@ define([ destroyObject, DeveloperError, Event, + getBaseUri, + getExtensionFromUri, Intersect, loadJson, CesiumMath, @@ -68,10 +72,17 @@ define([ } //>>includeEnd('debug'); - url = appendForwardSlash(url); + var tilesJson; + if (getExtensionFromUri(url) === 'json') { + tilesJson = url; + url = getBaseUri(url); + } else { + url = appendForwardSlash(url); + tilesJson = url + 'tiles.json'; + } this._url = url; - this._tilesJson = url + 'tiles.json'; + this._tilesJson = tilesJson; this._state = Cesium3DTilesetState.UNLOADED; this._root = undefined; this._properties = undefined; // Metadata for per-model/point/etc properties diff --git a/Specs/Scene/Cesium3DTilesetSpec.js b/Specs/Scene/Cesium3DTilesetSpec.js index 7568e3b9f328..e0bab7e06a0e 100644 --- a/Specs/Scene/Cesium3DTilesetSpec.js +++ b/Specs/Scene/Cesium3DTilesetSpec.js @@ -117,6 +117,30 @@ defineSuite([ }); }); + it('url and tilesJson set up correctly given tiles.json path', function() { + var tileset = new Cesium3DTileset({ + url : './Data/Cesium3DTiles/Tilesets/TilesetOfTilesets/tiles3.json' + }); + expect(tileset._url).toEqual('./Data/Cesium3DTiles/Tilesets/TilesetOfTilesets/'); + expect(tileset._tilesJson).toEqual('./Data/Cesium3DTiles/Tilesets/TilesetOfTilesets/tiles3.json'); + }); + + it('url and tilesJson set up correctly given directory without trailing slash', function() { + var tileset = new Cesium3DTileset({ + url : './Data/Cesium3DTiles/Tilesets/TilesetOfTilesets' + }); + expect(tileset._url).toEqual('./Data/Cesium3DTiles/Tilesets/TilesetOfTilesets/'); + expect(tileset._tilesJson).toEqual('./Data/Cesium3DTiles/Tilesets/TilesetOfTilesets/tiles.json'); + }); + + it('url and tilesJson set up correctly given directory with trailing slash', function() { + var tileset = new Cesium3DTileset({ + url : './Data/Cesium3DTiles/Tilesets/TilesetOfTilesets/' + }); + expect(tileset._url).toEqual('./Data/Cesium3DTiles/Tilesets/TilesetOfTilesets/'); + expect(tileset._tilesJson).toEqual('./Data/Cesium3DTiles/Tilesets/TilesetOfTilesets/tiles.json'); + }); + it('resolves readyPromise', function() { return Cesium3DTilesTester.loadTileset(scene, tilesetUrl).then(function(tileset) { return tileset.readyPromise.then(function(tileset) {