From 5c8e5d10cb5c24874ff44cecfcce48c5efb3e9e0 Mon Sep 17 00:00:00 2001 From: Matthew Amato Date: Wed, 4 Mar 2015 11:57:46 -0500 Subject: [PATCH 001/103] Font kerning support for LabelCollection `writeTextToCanvas` now always draws individual letters more reliably and keeps them completely in the canvas. `LabelCollection` now uses the `dimensions` object returned by `writeTextToCanvas` to perform accurate kerning, producing much more legible and visually appealing text. --- CHANGES.md | 1 + Source/Core/writeTextToCanvas.js | 26 +++++++++++++++++++------- Source/Scene/LabelCollection.js | 15 +++++++++++++-- Specs/Core/writeTextToCanvasSpec.js | 10 ++++++---- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4acf539447a6..10549901661a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ Change Log * * Deprecated * +* Added font kerning support to labels, improving visual quality and legibility. * Improved KML compatibility to work with non-specification compliant KML files that still happen to load in Google Earth. * Fixed a crash when loading KML features that have no description and an empty `ExtendedData` node. * Added support for KML `TimeStamp` nodes. diff --git a/Source/Core/writeTextToCanvas.js b/Source/Core/writeTextToCanvas.js index 6178d708075b..5ff707ea566b 100644 --- a/Source/Core/writeTextToCanvas.js +++ b/Source/Core/writeTextToCanvas.js @@ -82,16 +82,28 @@ define([ document.body.appendChild(canvas); var dimensions = measureText(context2D, text, stroke, fill); - dimensions.computedWidth = Math.max(dimensions.width, dimensions.bounds.maxx - dimensions.bounds.minx); canvas.dimensions = dimensions; document.body.removeChild(canvas); canvas.style.visibility = ''; - var baseline = dimensions.height - dimensions.ascent; - canvas.width = dimensions.computedWidth; - canvas.height = dimensions.height; - var y = canvas.height - baseline; + //Some characters, such as the letter j, have a non-zero starting position. + //This value is used for kering later, but we need to take it into account + //now in order to draw the text completely on the canvas + var x = -dimensions.bounds.minx; + + //Expand the width to include the starting position. + var width = Math.ceil(dimensions.width) + x; + + //While the height of the letter is correct, we need to adjust + //where we start drawing it so that letters like j and y properly dip + //below the line. + var height = dimensions.height; + var baseline = height - dimensions.ascent; + var y = height - baseline; + + canvas.width = width; + canvas.height = height; // Properties must be explicitly set again after changing width and height context2D.font = font; @@ -102,13 +114,13 @@ define([ if (stroke) { var strokeColor = defaultValue(options.strokeColor, Color.BLACK); context2D.strokeStyle = strokeColor.toCssColorString(); - context2D.strokeText(text, 0, y); + context2D.strokeText(text, x, y); } if (fill) { var fillColor = defaultValue(options.fillColor, Color.WHITE); context2D.fillStyle = fillColor.toCssColorString(); - context2D.fillText(text, 0, y); + context2D.fillText(text, x, y); } return canvas; diff --git a/Source/Scene/LabelCollection.js b/Source/Scene/LabelCollection.js index 287bb0398801..f071da62a2c0 100644 --- a/Source/Scene/LabelCollection.js +++ b/Source/Scene/LabelCollection.js @@ -223,8 +223,13 @@ define([ for (glyphIndex = 0; glyphIndex < glyphLength; ++glyphIndex) { glyph = glyphs[glyphIndex]; dimensions = glyph.dimensions; - totalWidth += dimensions.computedWidth; maxHeight = Math.max(maxHeight, dimensions.height); + + //Computing the total width must also account for the kering that occurs between letters. + totalWidth += dimensions.width - dimensions.bounds.minx; + if (glyphIndex < glyphLength - 1) { + totalWidth += glyphs[glyphIndex + 1].dimensions.bounds.minx; + } } var scale = label._scale; @@ -258,7 +263,13 @@ define([ glyph.billboard._setTranslate(glyphPixelOffset); } - glyphPixelOffset.x += dimensions.computedWidth * scale * resolutionScale; + //Compute the next x offset taking into acocunt the kerning performed + //on both the current letter as well as the next letter to be drawn + //as well as any applied scale. + if (glyphIndex < glyphLength - 1) { + var nextGlyph = glyphs[glyphIndex + 1]; + glyphPixelOffset.x += ((dimensions.width - dimensions.bounds.minx) + nextGlyph.dimensions.bounds.minx) * scale * resolutionScale; + } } } diff --git a/Specs/Core/writeTextToCanvasSpec.js b/Specs/Core/writeTextToCanvasSpec.js index b8ddf14e0a59..c6c11313b559 100644 --- a/Specs/Core/writeTextToCanvasSpec.js +++ b/Specs/Core/writeTextToCanvasSpec.js @@ -81,8 +81,10 @@ defineSuite([ stroke : false }); - // canvas1 is filled, so there should only be two "edges" - expect(getColorChangeCount(canvas1)).toEqual(2); + // canvas1 is filled, completely by the I on the left + // and then has empty space on the right, so there + // should only be one "edge": fill -> outside + expect(getColorChangeCount(canvas1)).toEqual(1); var canvas2 = writeTextToCanvas('I', { font : '90px "Open Sans"', @@ -91,7 +93,7 @@ defineSuite([ strokeColor : Color.BLUE }); - // canvas2 is stroked, so there should be four "edges" - expect(getColorChangeCount(canvas2)).toEqual(4); + // canvas2 is stroked, so there should be three "edges": outline -> inside -> outline -> outside + expect(getColorChangeCount(canvas2)).toEqual(3); }); }); \ No newline at end of file From 934b8a05fd3b5c23d217fd48fc41a71ff0471e89 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Fri, 28 Oct 2016 21:46:52 -0400 Subject: [PATCH 002/103] Save html with gist --- Apps/Sandcastle/CesiumSandcastle.js | 30 ++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/Apps/Sandcastle/CesiumSandcastle.js b/Apps/Sandcastle/CesiumSandcastle.js index a6456aa1b240..757607a31ac8 100644 --- a/Apps/Sandcastle/CesiumSandcastle.js +++ b/Apps/Sandcastle/CesiumSandcastle.js @@ -160,10 +160,12 @@ require({ var currentTab = ''; var newDemo; var demoHtml = ''; - var demoJs = ''; + var demoCode = ''; var previousCode = ''; + var previousHtml = ''; var runGist = false; var gistCode; + var gistHtml; var sandcastleUrl = ''; var galleryErrorMsg = document.createElement('span'); @@ -504,7 +506,7 @@ require({ window.onbeforeunload = function (e) { var htmlText = (htmlEditor.getValue()).replace(/\s/g, ''); var jsText = (jsEditor.getValue()).replace(/\s/g, ''); - if (demoHtml !== htmlText || demoJs !== jsText) { + if (demoHtml !== htmlText || demoCode !== jsText) { return 'Be sure to save a copy of any important edits before leaving this page.'; } }; @@ -695,7 +697,7 @@ require({ if (demo.name === 'Gist Import') { jsEditor.setValue(gistCode); - htmlEditor.setValue('\n
\n

Loading...

\n
'); + htmlEditor.setValue(gistHtml); document.title = 'Gist Import - Cesium Sandcastle'; CodeMirror.commands.runCesium(jsEditor); return; @@ -719,17 +721,22 @@ require({ } var scriptCode = scriptMatch[1]; - demoJs = scriptCode.replace(/\s/g, ''); + demoCode = scriptCode.replace(/\s/g, ''); if (Cesium.defined(queryObject.gistId)) { Cesium.loadJsonp('https://api.github.com/gists/' + queryObject.gistId + '?access_token=dd8f755c2e5d9bbb26806bb93eaa2291f2047c60') .then(function(data) { var files = data.data.files; - var code = files[Object.keys(files)[0]].content; + var code = files['Cesium-Sandcastle.js'].content; + var html = files['Cesium-Sandcastle.html'].content; jsEditor.setValue(code); - demoJs = code.replace(/\s/g, ''); + htmlEditor.setValue(html); + demoCode = code.replace(/\s/g, ''); + demoHtml = html.replace(/\s/g, ''); gistCode = code; + gistHtml = html; previousCode = code; + previousHtml = html; sandcastleUrl = Cesium.getBaseUri(window.location.href) + '?src=Hello%20World.html&label=Showcases&gist=' + gistId; CodeMirror.commands.runCesium(jsEditor); clearRun(); @@ -885,17 +892,22 @@ require({ var textArea = document.getElementById('link'); textArea.value = '\n\n'; var code = jsEditor.getValue(); - if (code === previousCode) { + var html = htmlEditor.getValue(); + if (code === previousCode && html === previousHtml) { textArea.value = sandcastleUrl; textArea.select(); return; } previousCode = code; + previousHtml = html; var data = { public : true, files : { 'Cesium-Sandcastle.js' : { content : code + }, + 'Cesium-Sandcastle.html' : { + content : html } } }; @@ -926,7 +938,7 @@ require({ var htmlText = (htmlEditor.getValue()).replace(/\s/g, ''); var jsText = (jsEditor.getValue()).replace(/\s/g, ''); var confirmChange = true; - if (demoHtml !== htmlText || demoJs !== jsText) { + if (demoHtml !== htmlText || demoCode !== jsText) { confirmChange = window.confirm('You have unsaved changes. Are you sure you want to navigate away from this demo?'); } if (confirmChange) { @@ -1169,7 +1181,7 @@ require({ var htmlText = (htmlEditor.getValue()).replace(/\s/g, ''); var jsText = (jsEditor.getValue()).replace(/\s/g, ''); var confirmChange = true; - if (demoHtml !== htmlText || demoJs !== jsText) { + if (demoHtml !== htmlText || demoCode !== jsText) { confirmChange = window.confirm('You have unsaved changes. Are you sure you want to navigate away from this demo?'); } if (confirmChange) { From 72c4ddd95e5405f779d0f306191a049de5454dea Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Fri, 28 Oct 2016 21:49:15 -0400 Subject: [PATCH 003/103] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index c2d7354f028f..3a640333c1c9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -41,6 +41,7 @@ Change Log * Fix warning when using Webpack. [#4467](https://github.com/AnalyticalGraphicsInc/cesium/pull/4467) * Fix primitive bounding sphere bug that would cause a crash when loading data sources. [#4431](https://github.com/AnalyticalGraphicsInc/cesium/issues/4431) * Fix a crash when clustering is enabled, an entity has a label graphics defined, but the label isn't visible. [#4414](https://github.com/AnalyticalGraphicsInc/cesium/issues/4414) +* Added support for saving html and css in Github Gists [#4125](https://github.com/AnalyticalGraphicsInc/cesium/issues/4125) ### 1.26 - 2016-10-03 From 6bc6ed38f475978354ae746cf0ebb055cbbb72ab Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Fri, 28 Oct 2016 22:04:34 -0400 Subject: [PATCH 004/103] Fix import button for urls --- Apps/Sandcastle/CesiumSandcastle.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Apps/Sandcastle/CesiumSandcastle.js b/Apps/Sandcastle/CesiumSandcastle.js index 757607a31ac8..90f0a0878cfe 100644 --- a/Apps/Sandcastle/CesiumSandcastle.js +++ b/Apps/Sandcastle/CesiumSandcastle.js @@ -927,9 +927,10 @@ require({ registry.byId('buttonImport').on('click', function() { gistId = document.getElementById("gistId").value; - if (gistId.indexOf('/') !== -1) { - var index = gistId.lastIndexOf('/'); - gistId = gistId.substring(index + 1); + var gistParameter = '&gist='; + var gistIndex = gistId.indexOf(gistParameter); + if (gistIndex !== -1) { + gistId = gistId.substring(gistIndex + gistParameter.length); } window.location.href = Cesium.getBaseUri(window.location.href) + '?src=Hello%20World.html&label=Showcases&gist=' + gistId; }); From a8cd4c4f017f37336a8df1f35768254777cdd6d1 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Sun, 30 Oct 2016 10:15:09 -0400 Subject: [PATCH 005/103] Support old gists --- Apps/Sandcastle/CesiumSandcastle.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Apps/Sandcastle/CesiumSandcastle.js b/Apps/Sandcastle/CesiumSandcastle.js index 90f0a0878cfe..585947073935 100644 --- a/Apps/Sandcastle/CesiumSandcastle.js +++ b/Apps/Sandcastle/CesiumSandcastle.js @@ -168,6 +168,8 @@ require({ var gistHtml; var sandcastleUrl = ''; + var defaultHtml = '\n
\n

Loading...

\n
'; + var galleryErrorMsg = document.createElement('span'); galleryErrorMsg.className = 'galleryError'; galleryErrorMsg.style.display = 'none'; @@ -728,7 +730,8 @@ require({ .then(function(data) { var files = data.data.files; var code = files['Cesium-Sandcastle.js'].content; - var html = files['Cesium-Sandcastle.html'].content; + var htmlFile = files['Cesium-Sandcastle.html']; + var html = Cesium.defined(htmlFile) ? htmlFile.content : defaultHtml; // Use the default html for old gists jsEditor.setValue(code); htmlEditor.setValue(html); demoCode = code.replace(/\s/g, ''); From f583887e3cc48867ffb07037227401b59db6a903 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 31 Oct 2016 08:49:02 +0100 Subject: [PATCH 006/103] Remove extra SceneTransitioner instantiation --- Source/Scene/Scene.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/Source/Scene/Scene.js b/Source/Scene/Scene.js index 29e04d1548d8..68247624c332 100644 --- a/Source/Scene/Scene.js +++ b/Source/Scene/Scene.js @@ -389,8 +389,6 @@ define([ this._mapProjection = defined(options.mapProjection) ? options.mapProjection : new GeographicProjection(); - this._transitioner = new SceneTransitioner(this, this._mapProjection.ellipsoid); - /** * The current morph transition time between 2D/Columbus View and 3D, * with 0.0 being 2D or Columbus View and 1.0 being 3D. From 8a64c705177ef08af8ca13451b8bbf3e73be1e01 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 31 Oct 2016 08:50:21 +0100 Subject: [PATCH 007/103] Remove unused ellipsoid param in SceneTransitioner constructor --- Source/Scene/SceneTransitioner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Scene/SceneTransitioner.js b/Source/Scene/SceneTransitioner.js index 1951dfb99d34..f625f2f0e368 100644 --- a/Source/Scene/SceneTransitioner.js +++ b/Source/Scene/SceneTransitioner.js @@ -42,7 +42,7 @@ define([ /** * @private */ - function SceneTransitioner(scene, ellipsoid) { + function SceneTransitioner(scene) { //>>includeStart('debug', pragmas.debug); if (!defined(scene)) { throw new DeveloperError('scene is required.'); From 6e4b282df16d35cde06bbe8ce60f2f48952f8a15 Mon Sep 17 00:00:00 2001 From: Erik Andersson Date: Mon, 31 Oct 2016 10:28:07 +0100 Subject: [PATCH 008/103] Fixes #4377 --- Source/Scene/ImageryLayer.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Source/Scene/ImageryLayer.js b/Source/Scene/ImageryLayer.js index 1aa9d3c1aed6..3d0e2640286c 100644 --- a/Source/Scene/ImageryLayer.js +++ b/Source/Scene/ImageryLayer.js @@ -567,6 +567,10 @@ define([ imageryRectangle = imageryTileXYToRectangle(i, northwestTileCoordinates.y, imageryLevel); clippedImageryRectangle = Rectangle.simpleIntersection(imageryRectangle, imageryBounds, clippedRectangleScratch); + if (!defined(clippedImageryRectangle)) { + continue; + } + maxU = Math.min(1.0, (clippedImageryRectangle.east - terrainRectangle.west) / terrainRectangle.width); // If this is the eastern-most imagery tile mapped to this terrain tile, @@ -584,6 +588,11 @@ define([ imageryRectangle = imageryTileXYToRectangle(i, j, imageryLevel); clippedImageryRectangle = Rectangle.simpleIntersection(imageryRectangle, imageryBounds, clippedRectangleScratch); + + if (!defined(clippedImageryRectangle)) { + continue; + } + minV = Math.max(0.0, (clippedImageryRectangle.south - terrainRectangle.south) / terrainRectangle.height); // If this is the southern-most imagery tile mapped to this terrain tile, From 7b2d2d78f24b8a922c286bb5c3b2b0941980a24b Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 31 Oct 2016 16:06:26 +0100 Subject: [PATCH 009/103] Use isArray instead of Array.isArray --- Source/Scene/UrlTemplateImageryProvider.js | 4 +++- Source/Scene/WebMapTileServiceImageryProvider.js | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/Scene/UrlTemplateImageryProvider.js b/Source/Scene/UrlTemplateImageryProvider.js index 0e875b23de87..f5901822eb9d 100644 --- a/Source/Scene/UrlTemplateImageryProvider.js +++ b/Source/Scene/UrlTemplateImageryProvider.js @@ -12,6 +12,7 @@ define([ '../Core/Event', '../Core/freezeObject', '../Core/GeographicTilingScheme', + '../Core/isArray', '../Core/loadJson', '../Core/loadText', '../Core/loadWithXhr', @@ -35,6 +36,7 @@ define([ Event, freezeObject, GeographicTilingScheme, + isArray, loadJson, loadText, loadWithXhr, @@ -548,7 +550,7 @@ define([ that._getFeatureInfoFormats = properties.getFeatureInfoFormats; that._subdomains = properties.subdomains; - if (Array.isArray(that._subdomains)) { + if (isArray(that._subdomains)) { that._subdomains = that._subdomains.slice(); } else if (defined(that._subdomains) && that._subdomains.length > 0) { that._subdomains = that._subdomains.split(''); diff --git a/Source/Scene/WebMapTileServiceImageryProvider.js b/Source/Scene/WebMapTileServiceImageryProvider.js index 2a3bd4df5c33..af3b17a23279 100644 --- a/Source/Scene/WebMapTileServiceImageryProvider.js +++ b/Source/Scene/WebMapTileServiceImageryProvider.js @@ -8,6 +8,7 @@ define([ '../Core/DeveloperError', '../Core/Event', '../Core/freezeObject', + '../Core/isArray', '../Core/objectToQuery', '../Core/queryToObject', '../Core/Rectangle', @@ -24,6 +25,7 @@ define([ DeveloperError, Event, freezeObject, + isArray, objectToQuery, queryToObject, Rectangle, @@ -153,7 +155,7 @@ define([ this._credit = typeof credit === 'string' ? new Credit(credit) : credit; this._subdomains = options.subdomains; - if (Array.isArray(this._subdomains)) { + if (isArray(this._subdomains)) { this._subdomains = this._subdomains.slice(); } else if (defined(this._subdomains) && this._subdomains.length > 0) { this._subdomains = this._subdomains.split(''); From 2ad1780cc996258012b43c7ea6ac64210c188929 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Mon, 31 Oct 2016 14:52:16 -0400 Subject: [PATCH 010/103] Correctly check for polygon offset --- Source/Scene/ShadowMap.js | 2 +- Source/Scene/ShadowMapShader.js | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Source/Scene/ShadowMap.js b/Source/Scene/ShadowMap.js index 0ef5677758ee..43688260d1fe 100644 --- a/Source/Scene/ShadowMap.js +++ b/Source/Scene/ShadowMap.js @@ -186,7 +186,7 @@ define([ // In IE11 polygon offset is not functional. var polygonOffsetSupported = true; - if (FeatureDetection.isInternetExplorer) { + if (FeatureDetection.isInternetExplorer()) { polygonOffsetSupported = false; } this._polygonOffsetSupported = polygonOffsetSupported; diff --git a/Source/Scene/ShadowMapShader.js b/Source/Scene/ShadowMapShader.js index 61d4c851313e..7884e2cadf4f 100644 --- a/Source/Scene/ShadowMapShader.js +++ b/Source/Scene/ShadowMapShader.js @@ -134,6 +134,7 @@ define([ var hasPositionVarying = defined(positionVaryingName); var usesDepthTexture = shadowMap._usesDepthTexture; + var polygonOffsetSupported = shadowMap._polygonOffsetSupported; var isPointLight = shadowMap._isPointLight; var isSpotLight = shadowMap._isSpotLight; var hasCascades = shadowMap._numberOfCascades > 1; @@ -230,7 +231,9 @@ define([ if (isTerrain) { // Scale depth bias based on view distance to reduce z-fighting in distant terrain fsSource += ' shadowParameters.depthBias *= max(depth * 0.01, 1.0); \n'; - } else { + } else if (!polygonOffsetSupported) { + // If polygon offset isn't supported push the depth back based on view, however this + // causing light leaking at further away views fsSource += ' shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); \n'; } From 8b812ebfe990987399d8d4d77247fa30bf8edd84 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Mon, 31 Oct 2016 15:06:47 -0400 Subject: [PATCH 011/103] Typo --- Source/Scene/ShadowMapShader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Scene/ShadowMapShader.js b/Source/Scene/ShadowMapShader.js index 7884e2cadf4f..dcb70bd245b3 100644 --- a/Source/Scene/ShadowMapShader.js +++ b/Source/Scene/ShadowMapShader.js @@ -233,7 +233,7 @@ define([ fsSource += ' shadowParameters.depthBias *= max(depth * 0.01, 1.0); \n'; } else if (!polygonOffsetSupported) { // If polygon offset isn't supported push the depth back based on view, however this - // causing light leaking at further away views + // causes light leaking at further away views fsSource += ' shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); \n'; } From d0619b0c026596e950272f089216aa553d86618b Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Mon, 31 Oct 2016 15:16:23 -0400 Subject: [PATCH 012/103] Update CHANGES.md --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index c2d7354f028f..fd0e595f714a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -41,6 +41,7 @@ Change Log * Fix warning when using Webpack. [#4467](https://github.com/AnalyticalGraphicsInc/cesium/pull/4467) * Fix primitive bounding sphere bug that would cause a crash when loading data sources. [#4431](https://github.com/AnalyticalGraphicsInc/cesium/issues/4431) * Fix a crash when clustering is enabled, an entity has a label graphics defined, but the label isn't visible. [#4414](https://github.com/AnalyticalGraphicsInc/cesium/issues/4414) +* Fixed a shadow aliasing issue where polygon offset was not being applied. [#4559](https://github.com/AnalyticalGraphicsInc/cesium/pull/4559) ### 1.26 - 2016-10-03 From 300191df3c99cc976264a70da55750e4fa977884 Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Mon, 31 Oct 2016 15:30:12 -0400 Subject: [PATCH 013/103] Turn off polygon offset from Chrome temporarily --- Source/Scene/ShadowMap.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Source/Scene/ShadowMap.js b/Source/Scene/ShadowMap.js index 43688260d1fe..dadcf4c83bfb 100644 --- a/Source/Scene/ShadowMap.js +++ b/Source/Scene/ShadowMap.js @@ -185,8 +185,9 @@ define([ this._needsUpdate = true; // In IE11 polygon offset is not functional. + // TODO : Also disabled for Chrome temporarily. Re-enable once https://groups.google.com/forum/#!topic/webgl-dev-list/E1dAG65QBhg is resolved. var polygonOffsetSupported = true; - if (FeatureDetection.isInternetExplorer()) { + if (FeatureDetection.isInternetExplorer() || FeatureDetection.isChrome()) { polygonOffsetSupported = false; } this._polygonOffsetSupported = polygonOffsetSupported; From 9964fc9ae9301903e36b9a393b26b7e912a44f1e Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Mon, 31 Oct 2016 15:43:27 -0400 Subject: [PATCH 014/103] Change url --- Source/Scene/ShadowMap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Scene/ShadowMap.js b/Source/Scene/ShadowMap.js index dadcf4c83bfb..a1a8bc089c21 100644 --- a/Source/Scene/ShadowMap.js +++ b/Source/Scene/ShadowMap.js @@ -185,7 +185,7 @@ define([ this._needsUpdate = true; // In IE11 polygon offset is not functional. - // TODO : Also disabled for Chrome temporarily. Re-enable once https://groups.google.com/forum/#!topic/webgl-dev-list/E1dAG65QBhg is resolved. + // TODO : Also disabled for Chrome temporarily. Re-enable once https://github.com/AnalyticalGraphicsInc/cesium/issues/4560 is resolved. var polygonOffsetSupported = true; if (FeatureDetection.isInternetExplorer() || FeatureDetection.isChrome()) { polygonOffsetSupported = false; From d491fa8f2e52e4168e8be01be4f502082672c61f Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Mon, 31 Oct 2016 20:19:33 -0400 Subject: [PATCH 015/103] More specific test --- Source/Scene/ShadowMap.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Scene/ShadowMap.js b/Source/Scene/ShadowMap.js index a1a8bc089c21..bf51dcd9d6af 100644 --- a/Source/Scene/ShadowMap.js +++ b/Source/Scene/ShadowMap.js @@ -185,9 +185,9 @@ define([ this._needsUpdate = true; // In IE11 polygon offset is not functional. - // TODO : Also disabled for Chrome temporarily. Re-enable once https://github.com/AnalyticalGraphicsInc/cesium/issues/4560 is resolved. + // TODO : Also disabled for Chrome (ANGLE) temporarily. Re-enable once https://github.com/AnalyticalGraphicsInc/cesium/issues/4560 is resolved. var polygonOffsetSupported = true; - if (FeatureDetection.isInternetExplorer() || FeatureDetection.isChrome()) { + if (FeatureDetection.isInternetExplorer() || (FeatureDetection.isChrome() && FeatureDetection.isWindows())) { polygonOffsetSupported = false; } this._polygonOffsetSupported = polygonOffsetSupported; From c0d05676dc3a1dcda54013c8d77df82b51d5c5d2 Mon Sep 17 00:00:00 2001 From: Erik Andersson Date: Tue, 1 Nov 2016 10:29:09 +0100 Subject: [PATCH 016/103] Support creating empty PolylineGeometry when line width is invalid --- Source/Core/PolylineGeometry.js | 10 ++++++---- Specs/Core/PolylineGeometrySpec.js | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Source/Core/PolylineGeometry.js b/Source/Core/PolylineGeometry.js index 228ff63ce286..5179398f2cb1 100644 --- a/Source/Core/PolylineGeometry.js +++ b/Source/Core/PolylineGeometry.js @@ -124,8 +124,8 @@ define([ if ((!defined(positions)) || (positions.length < 2)) { throw new DeveloperError('At least two positions are required.'); } - if (width < 1.0) { - throw new DeveloperError('width must be greater than or equal to one.'); + if (typeof width !== 'number') { + throw new DeveloperError('width must be a number'); } if (defined(colors) && ((colorsPerVertex && colors.length < positions.length) || (!colorsPerVertex && colors.length < positions.length - 1))) { throw new DeveloperError('colors has an invalid length.'); @@ -309,9 +309,11 @@ define([ var k; var positions = arrayRemoveDuplicates(polylineGeometry._positions, Cartesian3.equalsEpsilon); - var positionsLength = positions.length; - if (positionsLength < 2) { + + // A width of 0.0 or less is not a valid geometry, but in order to support external data + // that may have errors we treat this as an empty geometry. + if (positionsLength < 2 || width < 0.0) { return undefined; } diff --git a/Specs/Core/PolylineGeometrySpec.js b/Specs/Core/PolylineGeometrySpec.js index 63dfbb325331..27cabe2ce842 100644 --- a/Specs/Core/PolylineGeometrySpec.js +++ b/Specs/Core/PolylineGeometrySpec.js @@ -31,13 +31,13 @@ defineSuite([ }).toThrowDeveloperError(); }); - it('constructor throws with invalid width', function() { + it('constructor does not throw with invalid width', function() { expect(function() { return new PolylineGeometry({ positions : [Cartesian3.ZERO, Cartesian3.UNIT_X], width : -1 }); - }).toThrowDeveloperError(); + }).not.toThrowDeveloperError(); }); it('constructor throws with invalid number of colors', function() { From 690061b771cbe4411cfba4692a6930a47eafd1a7 Mon Sep 17 00:00:00 2001 From: Erik Andersson Date: Tue, 1 Nov 2016 15:24:19 +0100 Subject: [PATCH 017/103] Correct minimum pixel width check --- Source/Core/PolylineGeometry.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Core/PolylineGeometry.js b/Source/Core/PolylineGeometry.js index 5179398f2cb1..9bde56e19933 100644 --- a/Source/Core/PolylineGeometry.js +++ b/Source/Core/PolylineGeometry.js @@ -311,9 +311,9 @@ define([ var positions = arrayRemoveDuplicates(polylineGeometry._positions, Cartesian3.equalsEpsilon); var positionsLength = positions.length; - // A width of 0.0 or less is not a valid geometry, but in order to support external data + // A width of a pixel or less is not a valid geometry, but in order to support external data // that may have errors we treat this as an empty geometry. - if (positionsLength < 2 || width < 0.0) { + if (positionsLength < 2 || width < 1.0) { return undefined; } From 11200ea9cd2f1ad66989681fca9d89ba76810e62 Mon Sep 17 00:00:00 2001 From: Matthew Amato Date: Tue, 1 Nov 2016 10:24:50 -0400 Subject: [PATCH 018/103] Clean up CHANGES and bump version. --- CHANGES.md | 59 ++++++++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 30 insertions(+), 31 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index fd0e595f714a..d0d3c642ca21 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,46 +2,45 @@ Change Log ========== ### 1.27 - 2016-11-01 - * Deprecated - * + * Individual heading, pitch, and roll options to `Transforms.headingPitchRollToFixedFrame` and `Transforms.headingPitchRollQuaternion` have been deprecated and will be removed in 1.30. Pass the new `HeadingPitchRoll` object instead. [#4498](https://github.com/AnalyticalGraphicsInc/cesium/pull/4498) * Breaking changes - * The `scene` parameter for creating `BillboardVisualizer`, `LabelVisualizer`, and `PointVisualizer` has been removed. Instead, pass an instance of `EntityCluster`. + * The `scene` parameter for creating `BillboardVisualizer`, `LabelVisualizer`, and `PointVisualizer` has been removed. Instead, pass an instance of `EntityCluster`. [#4514](https://github.com/AnalyticalGraphicsInc/cesium/pull/4514) +* Fixed an issue where a billboard entity would not render after toggling the show property. [#4408](https://github.com/AnalyticalGraphicsInc/cesium/issues/4408) +* Fixed a crash when zooming from touch input on viewer initialization. [#4177](https://github.com/AnalyticalGraphicsInc/cesium/issues/4177) +* Fixed a crash when clustering is enabled, an entity has a label graphics defined, but the label isn't visible. [#4414](https://github.com/AnalyticalGraphicsInc/cesium/issues/4414) +* Added the ability for KML files to load network links to other KML files within the same KMZ archive. [#4477](https://github.com/AnalyticalGraphicsInc/cesium/issues/4477) +* `KmlDataSource` and `GeoJsonDataSource` were not honoring the `clampToGround` option for billboards and labels and was instead always clamping, reducing performance in cases when it was unneeded. [#4459](https://github.com/AnalyticalGraphicsInc/cesium/pull/4459) +* Fixed `KmlDataSource` features to respect `timespan` and `timestamp` properties of its parents (e.g. Folders or NetworkLinks). [#4041](https://github.com/AnalyticalGraphicsInc/cesium/issues/4041) +* Fixed a `KmlDataSource` bug where features had duplicate IDs and only one was drawn. [#3941](https://github.com/AnalyticalGraphicsInc/cesium/issues/3941) +* `GeoJsonDataSource` now treats null crs values as a no-op instead of failing to load. [#4456](https://github.com/AnalyticalGraphicsInc/cesium/pull/4456) +* `GeoJsonDataSource` now gracefully handles missing style icons instead of failing to load. [#4452](https://github.com/AnalyticalGraphicsInc/cesium/pull/4452) +* Added `HeadingPitchRoll` [#4047](https://github.com/AnalyticalGraphicsInc/cesium/pull/4047) + * `HeadingPitchRoll.fromQuaternion` function for retrieving heading-pitch-roll angles from a quaternion. + * `HeadingPitchRoll.fromDegrees` function that returns a new HeadingPitchRoll instance from angles given in degrees. + * `HeadingPitchRoll.clone` function to duplicate HeadingPitchRoll instance. + * `HeadingPitchRoll.equals` and `HeadingPitchRoll.equalsEpsilon` functions for comparing two instances. + * Added `Matrix3.fromHeadingPitchRoll` Computes a 3x3 rotation matrix from the provided headingPitchRoll. +* Fixed primitive bounding sphere bug that would cause a crash when loading data sources. [#4431](https://github.com/AnalyticalGraphicsInc/cesium/issues/4431) +* Fixed `BoundingSphere` computation for `Primitive` instances with a modelMatrix. [#4428](https://github.com/AnalyticalGraphicsInc/cesium/issues/4428) +* Fixed a bug with rotated, textured rectangles. [#4430](https://github.com/AnalyticalGraphicsInc/cesium/pull/4430) +* Added the ability to specify retina options, such as `@2x.png`, via the `MapboxImageryProvider` `format` option. [#4453](https://github.com/AnalyticalGraphicsInc/cesium/pull/4453). +* Fixed a crash that could occur when specifying an imagery provider's `rectangle` option. [https://github.com/AnalyticalGraphicsInc/cesium/issues/4377](https://github.com/AnalyticalGraphicsInc/cesium/issues/4377) * Fixed a crash that would occur when using dynamic `distanceDisplayCondition` properties. [#4403](https://github.com/AnalyticalGraphicsInc/cesium/pull/4403) * Fixed several bugs that lead to billboards and labels being improperly clamped to terrain. [#4396](https://github.com/AnalyticalGraphicsInc/cesium/issues/4396), [#4062](https://github.com/AnalyticalGraphicsInc/cesium/issues/4062) * Fixed a bug affected models with multiple meshes without indices. [#4237](https://github.com/AnalyticalGraphicsInc/cesium/issues/4237) -* Fixed `BoundingSphere` computation for `Primitive` instances with a modelMatrix. [#4428](https://github.com/AnalyticalGraphicsInc/cesium/issues/4428) * Fixed a glTF transparency bug where `blendFuncSeparate` parameters were loaded in the wrong order. [#4435](https://github.com/AnalyticalGraphicsInc/cesium/pull/4435) * Fixed a bug where creating a custom geometry with attributes and indices that have values that are not a typed array would cause a crash. [#4419](https://github.com/AnalyticalGraphicsInc/cesium/pull/4419) -* `KmlDataSource` and `GeoJsonDataSource` were not honoring the `clampToGround` option for billboards and labels and was instead always clamping, reducing performance in cases when it was unneeded. -* Fixed a bug with rotated, textured rectangles. [#4430](https://github.com/AnalyticalGraphicsInc/cesium/pull/4430) * Fixed a bug when morphing from 2D to 3D. [#4388](https://github.com/AnalyticalGraphicsInc/cesium/pull/4388) -* Fixed a bug where when KML features had duplicate IDs, only one was drawn. [#3941](https://github.com/AnalyticalGraphicsInc/cesium/issues/3941) -* Fixed `KmlDataSource` features to respect `timespan` and `timestamp` properties of it's parents (eg. Folders or NetworkLinks). [#4041](https://github.com/AnalyticalGraphicsInc/cesium/issues/4041) -* Added the ability for KML files to load network links to other KML files within the same KMZ archive. [#4477](https://github.com/AnalyticalGraphicsInc/cesium/issues/4477) -* `GeoJsonDataSource` now treats null crs values as a no-op instead of failing to load. -* `GeoJsonDataSource` now gracefully handles missing style icons instead of failing to load. -* Improve `Geocoder` usability by selecting text on click [#4464](https://github.com/AnalyticalGraphicsInc/cesium/pull/4464) -* Added `Rectangle.simpleIntersection`. -* Added the ability to specify retina options, such as `@2x.png`, via the `MapboxImageryProvider` `format` option. -* Removed an unnecessary reprojection of Web Mercator imagery tiles to the Geographic projection on load. This should improve both visual quality and load performance slightly. -* Add `clusterBillboards`, `clusterLabels`, and `cluserPoints` properties to `EntityCluster` to selectively cluster screen space entities. -* Fix a issue where a billboard entity would not render after toggling the show propery. [#4408](https://github.com/AnalyticalGraphicsInc/cesium/issues/4408) -* Added `Transforms.northUpEastToFixedFrame` to compute a 4x4 local transformation matrix from a reference frame with an north-west-up axes. * Fixed `RectangleGeometry` rotation when the rectangle is close to the international date line [#3874](https://github.com/AnalyticalGraphicsInc/cesium/issues/3874) -* Added `HeadingPitchRoll` : - * `HeadingPitchRoll.fromQuaternion` function for retrieving heading-pitch-roll angles from a quaternion. - * `HeadingPitchRoll.fromDegrees` function that returns a new HeadingPitchRoll instance from angles given in degrees. - * `HeadingPitchRoll.clone` function to duplicate HeadingPitchRoll instance. - * `HeadingPitchRoll.equals` and `HeadingPitchRoll.equalsEpsilon` functions for comparing two instances. -* Added `Matrix3.fromHeadingPitchRoll` Computes a 3x3 rotation matrix from the provided headingPitchRoll. -* `Transforms.headingPitchRollToFixedFrame` and `Transforms.headingPitchRollQuaternion` now take a `HeadingPitchRoll` object in addition to separate heading, pitch, and roll values. Separate values will be deprecated in 1.30. -* Prevent execution of default device/browser behaviour when handling "pinch" touch event/gesture. -* Fixed a crash when zooming from touch input on viewer initialization. [#4177](https://github.com/AnalyticalGraphicsInc/cesium/issues/4177) -* Fix warning when using Webpack. [#4467](https://github.com/AnalyticalGraphicsInc/cesium/pull/4467) -* Fix primitive bounding sphere bug that would cause a crash when loading data sources. [#4431](https://github.com/AnalyticalGraphicsInc/cesium/issues/4431) -* Fix a crash when clustering is enabled, an entity has a label graphics defined, but the label isn't visible. [#4414](https://github.com/AnalyticalGraphicsInc/cesium/issues/4414) +* Added `clusterBillboards`, `clusterLabels`, and `cluserPoints` properties to `EntityCluster` to selectively cluster screen space entities. +* Prevent execution of default device/browser behavior when handling "pinch" touch event/gesture. [#4518](https://github.com/AnalyticalGraphicsInc/cesium/pull/4518). * Fixed a shadow aliasing issue where polygon offset was not being applied. [#4559](https://github.com/AnalyticalGraphicsInc/cesium/pull/4559) +* Removed an unnecessary reprojection of Web Mercator imagery tiles to the Geographic projection on load. This should improve both visual quality and load performance slightly. [#4339](https://github.com/AnalyticalGraphicsInc/cesium/pull/4339) +* Added `Transforms.northUpEastToFixedFrame` to compute a 4x4 local transformation matrix from a reference frame with a north-west-up axes. +* Improved `Geocoder` usability by selecting text on click [#4464](https://github.com/AnalyticalGraphicsInc/cesium/pull/4464) +* Added `Rectangle.simpleIntersection` which is an optimized version of `Rectangle.intersection` for more constrained input. [#4339](https://github.com/AnalyticalGraphicsInc/cesium/pull/4339) +* Fixed warning when using Webpack. [#4467](https://github.com/AnalyticalGraphicsInc/cesium/pull/4467) ### 1.26 - 2016-10-03 diff --git a/package.json b/package.json index 2c6008a9ef7f..259a46bc7bf1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cesium", - "version": "1.26.0", + "version": "1.27.0", "description": "Cesium is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.", "homepage": "http://cesiumjs.org", "license": "Apache-2.0", From b1f2a63fe9d77fd38ad2fa40764b47d038abbcbc Mon Sep 17 00:00:00 2001 From: Erik Andersson Date: Tue, 1 Nov 2016 15:25:07 +0100 Subject: [PATCH 019/103] Fix check for empty geometry --- Source/Core/CorridorGeometry.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Source/Core/CorridorGeometry.js b/Source/Core/CorridorGeometry.js index 29aeb0c86b91..4fd13ea735a9 100644 --- a/Source/Core/CorridorGeometry.js +++ b/Source/Core/CorridorGeometry.js @@ -679,8 +679,8 @@ define([ function computeRectangle(positions, ellipsoid, width, cornerType) { var cleanPositions = arrayRemoveDuplicates(positions, Cartesian3.equalsEpsilon); - var length = cleanPositions.length - 1; - if (length === 0 || width === 0) { + var length = cleanPositions.length; + if (length < 2 || width <= 0) { return new Rectangle(); } var halfWidth = width * 0.5; @@ -709,14 +709,14 @@ define([ } // Compute the rest - for (var i = 0; i < length; ++i) { + for (var i = 0; i < length-1; ++i) { computeOffsetPoints(cleanPositions[i], cleanPositions[i+1], ellipsoid, halfWidth, scratchCartographicMin, scratchCartographicMax); } // Compute ending point - var last = cleanPositions[length]; - Cartesian3.subtract(last, cleanPositions[length-1], scratchCartesianOffset); + var last = cleanPositions[length-1]; + Cartesian3.subtract(last, cleanPositions[length-2], scratchCartesianOffset); Cartesian3.normalize(scratchCartesianOffset, scratchCartesianOffset); Cartesian3.multiplyByScalar(scratchCartesianOffset, halfWidth, scratchCartesianOffset); Cartesian3.add(last, scratchCartesianOffset, scratchCartesianEnds); From 65c5c19faaa081dcd7efacf2100bcef132684b00 Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Wed, 2 Nov 2016 15:56:58 -0400 Subject: [PATCH 020/103] Add the new outline to the Cesium logo. --- Source/Widgets/CesiumWidget/CesiumWidget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Widgets/CesiumWidget/CesiumWidget.js b/Source/Widgets/CesiumWidget/CesiumWidget.js index 9be63bd4cb24..df22bdfa1342 100644 --- a/Source/Widgets/CesiumWidget/CesiumWidget.js +++ b/Source/Widgets/CesiumWidget/CesiumWidget.js @@ -134,7 +134,7 @@ define([ } } - var cesiumLogoData = 'data:image/png;base64,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'; + var cesiumLogoData = 'data:image/png;base64,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'; /** * A widget containing a Cesium scene. From 1deec3d34f5eb52ad88753388c26282846654b82 Mon Sep 17 00:00:00 2001 From: hpinkos Date: Wed, 2 Nov 2016 16:00:58 -0400 Subject: [PATCH 021/103] Widgets section --- .../Contributors/CodingGuide/README.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/Documentation/Contributors/CodingGuide/README.md b/Documentation/Contributors/CodingGuide/README.md index f56041866a22..bbd389e582cb 100644 --- a/Documentation/Contributors/CodingGuide/README.md +++ b/Documentation/Contributors/CodingGuide/README.md @@ -762,6 +762,31 @@ function Foo() { * Not pollute the global namespace. * Provide enough value to justify adding a third-party library whose integration needs to be maintained and has the potential to slightly count against Cesium when some users evaluate it (generally, fewer third-parties is better). +## Widgets + +Cesium includes a handful of standard widgets that are used in the Viewer, including animation and timeline controls, a base layer picker, and a geocoder. These widgets are all built using [Knockout](http://knockoutjs.com/)) for automatic UI refreshing. Knockout uses a Model View ViewModel (MVVM) design pattern. You can learn more about this design pattern in [Understanding MVVM - A Guide For JavaScript Developers](https://addyosmani.com/blog/understanding-mvvm-a-guide-for-javascript-developers/) + +To learn about using the Knockout library, see the [Get started](http://knockoutjs.com/) section of their home page. They also have a great [interative tutorial](http://learn.knockoutjs.com/) with step by step instructions. + +Cesium also uses the [Knockout-ES5](http://blog.stevensanderson.com/2013/05/20/knockout-es5-a-plugin-to-simplify-your-syntax/) plugin to simplify knockout syntax. This lets us use knockout observables the same way we use other variables. Call `knockout.track` to create the observables. Here is an example from [BaseLayerPickerViewModel](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/BaseLayerPicker/BaseLayerPickerViewModel.js#L73) +``` javascript +knockout.track(this, ['tooltip', 'showInstructions', '_touch']); +``` + +**Knockout subscriptions** + +Use a knockout subscription only when you are unable to accomplish what you need to do with a standard binding. For [example](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/Viewer/Viewer.js#L588), the `Viewer` subscribes to `FullscreenButtonViewModel.isFullscreenEnabled` because it needs to change the width of the timelne widget when that value changes. This cannot be done with binding because the value from `FullscreenButtonViewModel` is effecting a value not contained within that widget. + +Cesium includes a [`subscribeAndEvaluate`](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/subscribeAndEvaluate.js) helper function for subscribing to knockout observable. + +When using a subscription, always be sure to [dispose the subscription](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/Viewer/Viewer.js#L1413) when the viewmodel is no longer using it. Otherwise the listener will continue to be notified for the lifetime of the observable. + +``` +fullscreenSubscription = subscribeAndEvaluate(fullscreenButton.viewModel, 'isFullscreenEnabled', function(isFullscreenEnabled) { ... }); +// ...then later... +fullscreenSubscription.dispose(); +``` + ## GLSL ### Naming From 02a546661f51b1e294b2ac3e6bc01bff8ce79171 Mon Sep 17 00:00:00 2001 From: hpinkos Date: Wed, 2 Nov 2016 16:03:19 -0400 Subject: [PATCH 022/103] spelling --- Documentation/Contributors/CodingGuide/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/Contributors/CodingGuide/README.md b/Documentation/Contributors/CodingGuide/README.md index bbd389e582cb..471bd293961a 100644 --- a/Documentation/Contributors/CodingGuide/README.md +++ b/Documentation/Contributors/CodingGuide/README.md @@ -766,7 +766,7 @@ function Foo() { Cesium includes a handful of standard widgets that are used in the Viewer, including animation and timeline controls, a base layer picker, and a geocoder. These widgets are all built using [Knockout](http://knockoutjs.com/)) for automatic UI refreshing. Knockout uses a Model View ViewModel (MVVM) design pattern. You can learn more about this design pattern in [Understanding MVVM - A Guide For JavaScript Developers](https://addyosmani.com/blog/understanding-mvvm-a-guide-for-javascript-developers/) -To learn about using the Knockout library, see the [Get started](http://knockoutjs.com/) section of their home page. They also have a great [interative tutorial](http://learn.knockoutjs.com/) with step by step instructions. +To learn about using the Knockout library, see the [Get started](http://knockoutjs.com/) section of their home page. They also have a great [interactive tutorial](http://learn.knockoutjs.com/) with step by step instructions. Cesium also uses the [Knockout-ES5](http://blog.stevensanderson.com/2013/05/20/knockout-es5-a-plugin-to-simplify-your-syntax/) plugin to simplify knockout syntax. This lets us use knockout observables the same way we use other variables. Call `knockout.track` to create the observables. Here is an example from [BaseLayerPickerViewModel](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/BaseLayerPicker/BaseLayerPickerViewModel.js#L73) ``` javascript @@ -775,7 +775,7 @@ knockout.track(this, ['tooltip', 'showInstructions', '_touch']); **Knockout subscriptions** -Use a knockout subscription only when you are unable to accomplish what you need to do with a standard binding. For [example](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/Viewer/Viewer.js#L588), the `Viewer` subscribes to `FullscreenButtonViewModel.isFullscreenEnabled` because it needs to change the width of the timelne widget when that value changes. This cannot be done with binding because the value from `FullscreenButtonViewModel` is effecting a value not contained within that widget. +Use a knockout subscription only when you are unable to accomplish what you need to do with a standard binding. For [example](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/Viewer/Viewer.js#L588), the `Viewer` subscribes to `FullscreenButtonViewModel.isFullscreenEnabled` because it needs to change the width of the timeline widget when that value changes. This cannot be done with binding because the value from `FullscreenButtonViewModel` is effecting a value not contained within that widget. Cesium includes a [`subscribeAndEvaluate`](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/subscribeAndEvaluate.js) helper function for subscribing to knockout observable. From 30e911e381e54a77335e0cf61316c2bf93e50d37 Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Wed, 2 Nov 2016 16:17:11 -0400 Subject: [PATCH 023/103] Update favicon. --- Apps/CesiumViewer/favicon.ico | Bin 49334 -> 49334 bytes favicon.ico | Bin 49334 -> 49334 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Apps/CesiumViewer/favicon.ico b/Apps/CesiumViewer/favicon.ico index e28d548f0701996d89e91b1bc3616cf9a91a5f71..0b05a3cda16b655ae428dbf24792a802d3a8277e 100644 GIT binary patch literal 49334 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 Date: Wed, 2 Nov 2016 16:26:18 -0400 Subject: [PATCH 024/103] Update three more images. --- Apps/Sandcastle/images/Cesium_Logo_Color.jpg | Bin 38666 -> 49939 bytes .../images/Cesium_Logo_Color_Overlay.png | Bin 41429 -> 21985 bytes .../Sandcastle/images/Cesium_Logo_overlay.png | Bin 5109 -> 4664 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Apps/Sandcastle/images/Cesium_Logo_Color.jpg b/Apps/Sandcastle/images/Cesium_Logo_Color.jpg index 3cb934494e9751baa9c421f4fc80d8b76c3e8fc0..26d622e522bd4057507a6a1082b304cb21ad8704 100644 GIT binary patch literal 49939 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 literal 38666 zcmeFZcU+T8w<3@~9H+lF2LO&n86_M&J>3;0C6VYG4{hCS>~6r_ zTqS)Ux=TvkxG4!xR`qp%2zR#gyl7+R;DiJTEmu?vU39Vq2|>Qo$`lIZO z{q@0ce`mOYt&pn9MP*+_UsrcmJI{v~eO+CUXhmO;(C^3<>G_|pC50~jUd7WHBy{H| z)r+Qj_b;lsq3kXKZ`_oC-;|TOC?|VEO7^CLtitt+(l@1UN=ivf-jtV+x~T}1SG*~8 z@lOzD;lY5{z;4e3ncWXP(D6BH+*DnxS<>*r4$qtByUPfN=r-7Ye=B|ke&~H zC6H+0zc8rVq2VYecTXob{#RRdH@KIp9n$l!wzmIl``f>4`_mX)-RYFo?NCnM zcD9-*H`j~53$5t%uX(xkFY*1^*7jfXqVO-*~K=(e3AF_8*2z|M3sg zw?oqH9Yr_nqb0z(-^~?Z`-wh)7>))3&j1YnfMfLBv19a&J5#8CU_wSQ!{u8IHaJsPs{O zj1j;{$Ntw8aQY0>$y3Kq{KEK?QF`G|%72vsm`?sta_UzA!%v|EGq*Y(J>~*QzuR^9cTPWn2wkA_$8@3h9`budgyWfaopSD z&mBU)vHg%X5@xqSWnJbNjW7AqDPz3ygzF?64dgr;0Gy?_JjTk%3Qz@Pe)0|m)r0JGJ3gNm+hMg9BYuCxiCYs+ocLzt*cH&2YH@5`fB6y zhf`M75;6jnd=$6Lj}oy}$;1hq2sKim8(k3r?xb+bKa2^GrFQhMo-!K?qp(CgZnc*D zfE|l@g=RL4GCdSi?e2n7DOOnb)FVKRCVsURQpgwQ%+dqBHtmaCxRtUK z@-}6@4}!rJ@h2LA}-+Ahy>S?B=%eF9lEUuS_I*?_|G_MzXpl z!6eGB@oIENu8Rqjbk83FPThO)bp6#6J7K-*e3RX2LCuJuljtZfbd3G9MtiRQoG^<% zrb@z)V(WKK&vZWKUeNo78!S|77z_fkY$}+fu923G08@7rEE7`Mw_T0d>t@2j)`f?9 zyf=0$p$H6aL`Fs>2`ioa1^@`rLnlvF#h8F1B6@{p^76+bB3?|?N%kdrekRFR2cWjA zPxxprp17{)X^z8jj;n{`ap4B;_p*_cCPH4WXf28BnFD;yrAvk)T%+Reo@DmLZ#i-z zceMz@N_MCfKop0rE#`VEW1c(Z`8XWQtu_|Xv9C6>D)VyeUL|!?Zv+}C1V6QnKA9ck z$y4h~eO)2jHdj`kAzP0zsy{YQ+r619j}VJqpUIS+$y8P}C>u)Yht1x7@OjPL&kZG? z-&g2xz|ldzidTOU#Ho((gPpI+U%#uC?8h77UM0WS{&YnX6Sz{){47@hHcjEGl{F;^ zsMaWot?5@^z1glMH2>+p!!(&9VK6o4Y~0780wJQs4BV4ISZio_7};|BJbILmP4p#UeRW-febaS09StgtDhS~kPpLc@$xp^R7Z4ph5n&5qVS#rDh(~{_ zS=H1YgK@-(PI_|us!;UATfux2RM6cEZ0#^KGzNoJ5LmG&5nY`*3^t`sR#%asnE#89 zv1?9t2~vE5c2-U$QBgZZw#ukj85mKxyXy+1TBsToJrN#wrrKJ?JGwK2Ssi)hQ@Ye1 z=(3!9ZdTVar^o72TynO|PESSfx(|d%ejhM8An|Uvl{mcMN8%iwkfI6M0B@M&9%xcR zH4NV6J#OxG>Wp2Dv$`8|ib^o~$m9TzZ2jj+50)JB% zQ_m>(@Wb*Q{&N;jZ8%r0>$QyrdRQD*82mL(pfFr9D?$ zcWuZbwtI44H|r9cpL+zhY3^GUgF7r;W08$9jU6|ZR*X~o+O`V?*f476u8{R?{7rvB@;%L8+vD__Uy^EiXEZo&Uh-$%S zafa(hw$wf_cxm<^WmR{!Cg^0eGUE3S7kbw3h%iYp+bjIJK?>whUK;I!cmh0{y*8rq5=E`u?sBhTR(3?k){O1MxR` zk6Q!Tiko_i7p<@)JTf980+aQ24I%}8sAyvirpmTSWj!2h<3QVId(1h?#d;%zV`XAE zOW9j8g-r*))Mp2^8^wYovFdxF7WDhCTDKO*~7*ZEy+KGq|e z?c5RI$BTr|Xts2(Zi7@(3|}7saOo*9-wq4lGuD|?*J78At0{6jn=P6Ltf&76*8VM{|KI;& z-JX7Nx!1Rp`dP~P1$Ho~Ixj$U!e*YoX`$`o)dH$AU!Bl<_o4`=?g^OSsQa!?qhJ>* z(`q3&sPAx5aV%q}SLJSBF34g!cFwQ;Eh0py`v~A)Xbkm4#9m)?ymKS#ZydWaao?&) zLa7NCJPFPH;dA;!LCC3+9U(Id-eF8hMh3`Y*1_L*7AMR*tq^G5>mIn#PC}ltxtg~^ zD_H7UOz9UOb@19N4XaP^wewX=>26CHZ{arSQ#jZuJq~34Zn2==(be^Be#Q~N0@l%W zWfFP6#LhoA5>sdV?%w!>hRqS+Moti^_Z(1O*^pfw`J+vsGD!TC+uKS`iEVr5l##Kh zAX9(7!AWc85`86d>eW(9+vf6~NwGWpiyh^P6<%r^CTb=P`&6wgzj&f1E-Nb=Vjh#~ zAJW~-=fDf8f3mN6%LOOjMJpFEaGCw`>l}-2(GSZT9jZoO+b%3(eIO$xa4lQMdhL4} zoR0tu8@_VRajreE*y#)DsKF9GL{5U-z&ol%H_dzsl$THCi-y1lC(sbXK=$4hD=r76 zL|koOUBvjQJ-28NvV{O!t)y+K>`3V?sQS2|YZngga(TYkq8dITQBp5|x+yw0s7X~L zsElwJ*Ufd!kk?Ru5{xL)Niq?mFEHkdY)0W|2MOA!+1%>JYz=rB>t#^wInK*f^O_Xj z%h_O#4oHz$7pD1RpAXTiLNKT9uN1phM#~VdN}lFGZU3du>nGGgxK7)oB{Lb zD-F_@#RaG66+zjZGA);{3tGM;oYmiiIIr~G4%6i{HbpaVjt;-F(yKT~Q1ge_7kIV# z`-mq{nz_%w57iNuv=xaM5;~R^L9sroW$SAbRH_0QnB_E~Q5X=8JC(+u(y`=CbwA!v z%|?k(602?5gc3_7XY-ItP*vaLun$E)BRS_?Ry>|NaQV3DyYM0nYoWJYD0{?YhJ+1H zWvd&jyv8au8UDEijW?k!u?Axfm%DI*9Wrba$>AEw)!N7CJTq@E9#A@6gBNO_S~-IR zxXCP`G4@p>#yJ&21&-5tfoz=$!_Rk}ii{z_aVI0+E9Y__@^8$kk zukILjO?$z*%h5h*^+gG{LciXEn2v_iC=LEMtw)IR#sql95$C zE*gc_`GpefG0szN9qVi26B=Ds2?)uTl_1&4kE3Z zD~S2eUFutsw#Mc8-RVoTUd$0z=T^^{rBk6H+gyB zdk^x~9dUiO-mxwi$9i#cC6)R?%f#O!Bn--3`Q8_={t%*MFAT1CLDaZB3{6M3-&2f( zzvxiV?cR268P~HAa4tQ78i_+V41;6@ z-go#z>#ZNW_qm0%iOkf;iA8KZytPAkzd;d6#E*1i$@bCPbpk>9X6U38)97|q@@{aC7c^_2yC%0LJB{{iW!1-s zrlXanP_f zElK2sk>!k`P{LgJ_l%S(86lB4fiOdrkjeJhK%>dz*eAhaA>LkoW%Y3ZyCE%^)LW2> zE>*rjVDP&0+DxYS!x*W7zxv64kTBK$;BEYL5V_0D^+SP?^K;7;c~`eOXnzNy z-+m7SWDb(BjEc?Y?VkFyg_DPxj&CwF`+SrFC(Gu?ApjkSvheT^1V` zRwXu-qt=HDqwu^Di2YBKLi!KAGkvP|Dksa6738mesxO8J)K*%=85+|4FSE)wA*%mU zp}XP&kSN=Q{8u~;Gt!)f1xAJIz}Fj2=c_o(W6gc4bD$bs)^C_7j9nAl%um@$Em6wY z9j$11PgsvLVRzJ+nV;kO-MomM+E_9o~LX#oJ9Bfz1{$KoGJgGYeo>*$3~f>X_rf~SJ2_e<(kS{VLqnY1Pg zY0#BaMxYM5el!7nc}r;MLqZaj2qy-_{H%t{OQ7F$#H5-suEl_1fW1e`O3&*?oU-yr zFz2`B7BhprP-{c+OZ2eI3*!-?Z1c<}98>M#|Dh!^Y_TVJ64uM8-9V|HZ#{L5dGnV7 zY$F`sAwaS4K3t45z4z$d$Jp?fz<{$M|FI$auWg)Z$OzKe+t~%Z-(7E^X2E+k`~CC9 zc+sr5yiE{&tSaC&=+JSW<>EhR(ld;(9WzqV04#LqEIvMWs5d`9xECI)0rrOuS-y^| z!Z=N<$9h&DJ}sR+0vtQcu3a=wu1gDq_!wgYcPsIdd6xdZJ|`=@MNa?t(KTWcw&uJl zeBO$B?spObW6d!W+*gdgjh8DnA0Vz4Xldwxz+}nLs$YT4M}UU9RtJ~9+*(u~JqGdB zzu(L({!Q9lE;u=MN2fzyDJeDo;L#+nHG|<hii2z$m9*%UZ_96+i(Vd~H%G$^>D2#118Jm~##j`HIUuxDAA8s+m zeZ97YVng*bwDiqFVDqBj>hoc}Y%^XB_(;B=Ec1Zc+QyY{FIEwvX~AYow5yD+AK!O8 z?2D4{3ceRd{nAD>9$0)m(5i^di;XiZ*6OClYYJsO{zczmcTPFF1?i*f^Tg8Y!$KWD z^*Y!hGDCRP1)FuF&?ZAXh~gjMbrvI%&K^_f_RXi{c!>Oq>JZjYP1CQ@H@kj-&u#$|0q^3PwyGdj8xT5BA&{V#sz28n#$nUdz@!U_ zek+xs6#^Ogc}*#Kh&fR~VOIY*ytz*?gf-Cfz8v)AG*Mx*aWTnt=WT^jkT9F(J@}Bz zm(B_G*bc|YJMNK()AUmk7M6?rg8eLJGL@UPJw_`1t-O?p{?QPKl~S7df|(0Yuh%ME z48M+oN~s>;5+zq>jz@jenlCK08)yypVH#%!;`&Xt$MD0^#h4tkyAk1nIeGPN1h%Th z-nO_O&$6WVeld*g|Ib|lGjj^T00iRgs|S@%0!R6Y`21577gWE&0Om|3az=$rBrDMCTHPK zv4XDfUq*Hqb~MYLzxwF6fLFt%^}ZR}LwJ?(iQFBZuegbXbzl8K3sH}cvt~jw(ROX> zxC*5lWi}ikI410k$25urZwi{qz!v!WNqpojf>=oB-unCPrZz~ zL4iSM@^}va;GJ!uloN<3vjY&_ghf+;3ol=o`skm+i2qIi)8TDSs!LE z*`=6j{;!FbpX>x`JT_dpH#4QJD8C^!jDaLXETgLc`CotHsF*HWZnPUTIH+D2S(^Ly z%MswwU#NdRQEFs+)OKM2th~E(hfr!_h5s>^KdS#VE618eOsrY;Aj}m1*gY>bsZ^#! zD0y`@6CyU*dnh4=Y%`Z@=~dBVozJg7)+~POCoZqSNLb}8(!0Vwq@aL|oHziQi3;=sGTFyHXf9GGmU+2Lr7%|CXcd9F@XsTP+W&en<8K77_1 zJ8>?`7&T;n>zRJKl$%NHAl;2{c_>xxQ72q@t4B2IVfjawux=23_x;kIx^ZpOPg+H2m1(wg^5WTgzV8KtDwT?S!^Gpbd_P zw!6VN)D`Lk4J3L@#2+-xUTD%OJ426r5TuCt4Ky#!yD<(Oh;-{4YsB-TUg~`$6~P)s zr%aLZn;E?#ErD@0w+dyr7V9HdG$XQ`7t-LxpD6|&7ElnS|2mWIA!A5d%iYO1 z6<|iInCBBraBz?uYB2*gvZZDUTN1K2CY{uM5xC?o`IX`3!g1rFh_WnD$2d=ZjuX_*U) zUg}(_AnGgFyd~OIY#g&yxZdjW;rrQC3)j>57hKeltpB1`qJYH9h73c^|C5{6tKpZU)3U)Yx#k=n{_9$ofa?XWL1m00gd zWyWC|5!w0}9lOh{#>QVq-ZYFlo71CePkz;RkU?#rVNFb@ zV7LU!_wTZD*CXP-eC>juhwyRB0Z&aH{UrMboJ-xrEu}W-cc;B7UAAuV~x5 zhhe2F%zMn_nVzPygpSJ@5#Cbm>*z0sdAZRLNIbCBn*F}aO~5rRT4pD9^6;ir&`R>z zzi<9^x4M�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ύ`GstnHFr_Ia}?4BwRlR9Sqtnfl}XmXX;ZfhH(_eE2s%Aur`ETw1)Ut-HKd? zD$5%?-d2R~yj2-F5cK&DT3J24KXUxP@9Qa*ZmR3icJL<0R;$vhrQaAZ*6f1(xArQL zs5E%@fX;xnlU4P2!7>=*lI<279XI)=nQv=4>)P&}S1R60eAF8A-PufO4DSmG+Gq*+ z-fuJ78~2o_ze9*)&WovNh2zXq1xApTU(fNOXAO;e1Sq*OB$vRP+xnAOw@@dhWHK2vCzMPqO zdA6@JdZtf()64y$uVQfpE^WiuR|J=GI{)oy0BUqx$=yp-iLXiZ>8>4b)uQZB2FBTe zJ}%3fw3=XOIv`!pIzTr$jd$4POhSYIWLzs3{=V0mx#E59O!0tp$b1g>56IWQU9JmQ`BlF|h*lR=Rjf#H$Q6nC7<>*=?z zHu6o_ed#>9;=a0h@AMiZaB#;jGRj)z(Cql&Shy=~cQE$sGCgdeAPSJB>($k-sx{G6 z_E!@!N}Df@&hv^33$elC3uxyGPOB(g8O_S7tE!?~>|XDX`Y_gETa`0rq1`81bHu9F zL$n!`!ecE8LJ}?F=<{eg8@m635U_3Tz3g0&a^qS|U$+Xj#oiIt9Xd+AF^~g9`C&b5 zpjzV!QFe(P4F>#K-Gh4TBzoHCp{K$wQw&N7!uX|=U;7JNd*70{6z;{}djwP4;*C$N zU-SR{A6f80KR0dCLaiertLN-j08U9eG7uG4QFw>;bDuVlfiRF!IOiW@J`F^^uDTG? zob5ynRm-XExrVnTZvU98K~{`~l7OnnQ@7Mu1*(jBtzCtJGf&b0`JMd27)#6h?}xd& z?a4%2lEqBs3uRiKJc^9HmFs18=0r9SANW=M|0Q}GbgZ>&!RBWpGmn>{@l^@|hV|C= zh62Mmjwa=HOC9ijLw8>?fs{=0%gr5p&rfoFmIoIC4_pKss1|MEp=<}81wH#_i`dYu zKE`v8#;$Lt&m3ykb819n8F+4A?~#{-8cL~Y89mNEt@PsE77@Vbhu92)N5sX&-3s!q z64GKmpmTJe%|-x0zrQVLO>*;zg%oP1fnVcwm9Ot*z5Zd5&meUhS?5|S zdftnns1MVRU!{%pYY0z8p<%=a^XoUnCXUaeuJXW`nm$k4Pwb&StwI#_$Ie^5G3r`f zJ~iilan5C5wr)qe!DHJPkXju1<}Skg>AkgA@uRR=HQJ5Y8qTY{&tZ;3#i6{wXHA}m zKW_SG;ZbSmy6QEj5`6rzPk#K6)-G+v6*}KC65GZDqlqex!Byga10-cI$)tr8c%+~e zCKNk(@)I8=NTW)Pa?7VI1H!P37-m$q0b;K+N{%^q@%7VzXAuZ=P0N@~@wT>EiN8Bs zrKh=vTRi9I3yi-bcKov)0HqYSm-HR9xR^Xqx~qXtxh+`>I&nJON1AS_U?>8BE}hqy zUK~U8vS(Z~9@#01x>8_H$)l)FKxPkSt{`+YN$?GlEzS?XhCr^td;jIKAW$nqw%j_a zC4AsrfTr`?wy_UmhTS!NR=j=3t4As^V-b#ZqEfURN}d50KAGon3zmawe8 zl8MW^s>>;F%4B*BETjmLp}^5bpBtL3v2YYEbpdqxn#w^~JoQ7Q>t>`~?;`_XNwVHt zs6Kegd*!GvGR)F~?+BO}^^+V^Sep6j9h4B*bb-cotT@qAH(}tnwpitbbMt(LCdR6! z+2pl$p3!Dq_pGSE6RE<^FH#O$8Zy#9-!m?{Z z#Ggs!Tup4FBa3_SoEt@7;iioyy#>?AM_zrGTZV?Fkh0IUbYubd51YJ})@_Z~AkcHx z;+b`Y*{li{_C@A90}f^*`?WuM4ImfPX~H-ykbFBeGNg z!6sBP?opfbbOnvd*h~uTBp}u1nhDlu$3VD=fi| zO9`gG`94U&`q|8b_M!X+&*%?=43$}Q$EseMJNZ&Utk`pbE7wNU-u=bwi|X5kO9>xH zi#s3vR*mEoPSR4&DVp97OK2K4Hcq;y^)YlZuUOZr)W*$PkV5Ughb424N8PpAR{HHH z-u_L!+UzwfjTtz!$eDw+b~PaEsjOUwUMLa5WHo|`&8vQZzzSVsV?Lh<5P~Dpa|Orh zR1wov{6wS_W3#z#!Ws3zZhkJmZOwXCy~J^L?-kOy9WFMrM@SoJS1N8GRhbN-gVT&xoGh7*r+% z6}+KynOTY;j|m#FhopxskMkr0eBh4G_su&A4>z@i+b?Ao=5>72ouUJCVN{PYLu?Po z1FN?;%-bAn?i?kVmxwLX|#a7t4U8XhnStF?$zIUrf z5V-@SB)j$6VPUoj0~dd$4J^g~R`Tet!{kJFxNhX;X4~q}K~|sswM&SH$LSN20XEq7 zz@~M5ZRtChX$~@n;{HjrD$F0&5A#tz%UrmYS%R_1i(hCiod=XkfMglBA8Vk!ptLyo zmi6M57;C|7^EfGOjbI z#nV5)`Xm9r8(a-&y^gqjPQl}YIl)ZK4Xe4Dael4aDjpw7;QEwp1MG+#gX^!6UYhhu3G>DdwtBw(lryV$4kBUV3`_iGP)MAf*U@>m^7-#^uK!L5?D(U@ z;c#0cj&0-cW?xUU^|jTPtB(?)zU(|XQSdP}mWbF(cFSI2KaXOYvcW=&v2VBs$RhK| zU(axU6Qn;_>1kBSY$|6N9#ZnCGF#X-aoP8PZuOFTnEg$i_C2@GyjhPB z0($Q=ZEmS@Z7F&6D=K&^U1UTx0f-#Eb=u;|dtB9t;9B6axc1_G7!BkI%+Egx{|EX5 z%7iCJWt?zX_BS*sP@A(X<%+ntNJQ*P3gnzp7lIA0bz3>I3D=6C*El2YT>SL)iLx`6 z+A-hhi-Nwb{Yh)asLYZKocZwBzoQ8KZ)hr!4*{hs z|3l}l!Ly@|j}(jQJ&ORY%ET|jKJAsk0`Ye6AaZCXrryG`mqHkT_T6;jj)$SORSk?@ zhQ2)a{2l1{uw~JKKFdZ?#yp-L0@qmAEP{ zpbSUy{qTLTJ=(0J>5TSmJ$f7-ev9)rz)AR@2x9)|Ou_cioQn3cm=d1NMi!S_>sPq? z=F%lJIqpFapNYaAczN^E^8K5pWcJ=5iUuJ#$=s9R@49F(cMGj?iBjA&J`x((SLKq) z-sIDTSc`Ce)mN!DKJB)^6fY1bxS)?0WGqZ? z9_!-Zc=p+O*(c3EsA2z7j)(84yyNSi4X|y#cSoJCd`ma62FElunuC&|T~>Oh>hr{r zqd0SNh@&>-ZXuC-mnZ*FvCD_CC!5`<5mF}~2&I*n*9>E(e*YSpMyP^v&y9_wxwNB#Kd+xQb0h^giS^fG;@&8($<&S z-uERtOSNk^vs~pcMp5i#l}mJX^oQ#yoqfQ$?ay+0%EZ{%(pXK{hJ}zvaLg&hCl-hK z>TCgrJ%HX@4Dg1y+D?_YhH-rnVX6}hJHHIjS0t0Ew#(uBUOp0(&Orga6>{}GeL69b zm$I*Z4b{mg*LaXl_fI|7HOeE!vYuno)9W!Vd*>%X?s&uNZ*rp)N}k2$guxrbZg1BA zSB3kIt%(IB?A8QCuJgApgPfjwk?q_KwEIn`!YNw{eU_dHJ*GBOBN?11li04O19@AG zX>A1*C7Vsymf3}zca<_u0fi2TlHm@x$H19kj`R1Mi!Vh)=fvAP@@!FXeB1-#WHwbc zRn>>iw|}(K>6^q_nXUAifdLy5Uu|V<8SRVYi$QbU--i)G<$9Zmt9~hbur6N$;nC#5 z|FhWO-`cD$EZy@Rq$u5eq&cki`t--V5slfIVIVhAsAvUf=VdMAV6;|am(^+O;nn}1 zM*5F#c0Nxu{$;7UM2k68i4T&HkK}ie%UKD}$_CRsKj6C7fZB=y4<(8a5{59y73*d7^EZ zw~2sS%9eS1iZWI!x0ObP>v|V0zc2gLEe_`66B(Q0_*p=rE$Cx`%$Jm4Q$ zt^cN<|D!7Wm)q_U<9e%bl6WeU9-xNX)!B_*-B$eW-Lzn4nT{yP3i%sm&NteLnjZeFVD`g+ z&24K#!tNb4!nS*UowYb6yw8&mr5r6ZA98oRU={-Q_XBdDe>KxS4!hYk5q7TI+O%Wt z_fSpj&C=4c;#3cEgS42$^$=Yi+vF6cav}*SVGEv0@2W0(}YiSZo=nv@| zNu%S5_$*BG6(rT4wtFuL~TR#ID)HT=_|iKbCE647Sbc0k|-z*c}j zJ8In{%ark=<6E0=(3r+bKu1bTI@M#f}B=y*?@ab;~yV# ziuEo5P`91s%IfhhccW3utyJV&Ak$#Pd5_Jp~c3p@pzO)w>}gqS<<6w zyDh#`aOL(7%Vv}3%Hc@Ks5Nx`cx})!XVbT^LR{Ih_lq;7MKAjM+n9NYBe!vWxEa{- zf&XBVIllOozvu96Ww}CQprB_pJK4fB^a;EV@#|9M6PB{~2=^Kjy%&9SsNN75V}a`r z<)64z!v@v9tt{}v2z%<*R9BO4B&cA7q~)RZEJR_PM8H<&pKe+1AGCH#e(4E+FZY^& zdQ}1>`XJ^%-;TRT3X5)qRbM zzBM=PS`g&#v>Y%Hu`jwY5~6-f<5wczxG$#RTmMYxzOrQ z!%LOSmF>`sqQ?wWUX)%eHfF|GHnEWd;83o>dbs;xFg3|x(u|3rten|Gbl=TAd|KKE za4qwLZM!AE#lF$hII-*Mn6oLrpyCvW6T@Y;2dcAbvGJ_!b{t zeYn2bkvjC(n*PsyP*+i7ba45XhNf^<4<*+tG)ga<4-R>nmBOG@e=|sqvovmBn)Zi-7?%K){H_yAQkyK;{Jm(yrL#F*X}7F|h=I=p-jM{cP;g z0-%cCgz%e6a3<+{R&4DLd^I$FTW!`h*nPoEJ3?DkkHX|UsnU}O5MpWb$r#T9>cw?- zV~GvH*f|mLjxP=qp4hsVO(l{ao0$H={P21|!$_8pu2j{<6_tU5-svM-lHf|Qj5bOwXa0tBSxxG8hu+~?BxSlOCNN(Fsxc#MsW zIx>Ar`+3z^yvm#%qo#V!d-%@^|IZDlf4Y;Z-hTMWfmi~=KRas1ljN9P{JJ3ig{Hih zA#Zb;mU#^UXJ+E4; ze33+W`G?>JBFQ{=DtvRFZZL8>rL<(Q}`|KhK%@86!*+jVlqOho~*Y7)zJ2PX< zv9`|q=&G^#9fVt2Z=3w+wL#%$}@aHEQeMNWQv!uQgT#Oo)l~w9_4xK@)h2CZpG-pF{na<(A6${ zvTJYSTOFI)Xv#}Ew2k)Rki7^<{IfTMBSfknavUug+SZ>}9~2$SqMAVhviu?{^UFlp z-o}V6mMMY>m#6$!sIV8~sUU{=t`m9gw4bmXp(p{I91_9~r?(Vv@NO!}frAxZL$G3j|hv$dq zti@uj%RPJc%$|8oZo)n(NTMMVB11tzp-D@LD?>rS6+l5jGrd9pKEdLLdIWwU*-L3T z0e_$W^8@{XF3lbI5Ybs$UIGz<0)vB(2t}Z90tNLJN?QEAs{7K>s+&9UPRq^t>6cm0 z8s?jD2fJniYyQF;(N{v4GFS?0ao^#7NW)Nx`c05;*!u-e2n322BLuLYpe;kz+NiZ- zXA2TIPsupY5v=nT7c(*zpS&w&lT1B}Rxgi^#)QV5MBY;T|L6Zb2}~N$!NoGkO*27( z7DY(>m9w!Yx}QA}9|}rD*M!xT5IL8-G@u3iGDKURJPE3i77XwQSR{1B|9ebc;^Sij zjZ)1J*zoZ!Ur@Kp#8q=b+LTeOq2{2={8|0`!OFdCmM(>VzfQGCPfzV{nrg6ay8gLlVsA7}gKVu|!`u`luQSnKTa zb!7HPXWr%apN4En&fcBn8{!Y+qW@b74p@mbxiBRnz+l!eWIc5@Pl8gOa0?i3ZOT>*pcf4rxO&s zC(#RnAVHLR*?!{uqlN@SUC_r-XhDklh}<07m&`S8*8`3K>joQo<=BV*eX;;)v74vv zVnXJ@L87e`SWY%zBJgUk;fONtUow5sfQ*vaW+Q2yWcwC9OCj;! zvVDrcs>K}gPH^@__LhRn$w;a*4b=qL~Fv2Obf1Ze^OuV zX$?2yR_ClUbxW>j>s68$lwe>snV=SlJPDdp%tGIH9*UODEk$!jx{Wl%Cz>_-yFsc< zK)UmC(<5*`0ct!y<6w4as!M89b_7y2o61sL+EPpGY*FM!-YKJj@QS9Zj1d9^%qQ~L zNP64cjPc#!nuplFty*^f)eI~Q;Mf@pEi#c;P*6j!8VP%BnARuzrj8?-R@bEDjkSCF z*m)>}{0mZ0k7I|j#|TUcJe2b+QPkg^^YyaHHJJU?p7YpPWvtiJoSuePjeLBG%NCaG zTD1-SL1{#qjU8c$jeX-8fy$`p2j9o4E498IWJ>6njbN*C_?Myf-YPR||2@w3-28Z6 zz?xoJC9lbgx-vCRn)Lu18PU=oPg*8IYND~D&BTF4a2qqRuCfkx9in2!scW*vZ^pO{ zFvO3v-2casm5hvZ8(Zpn)CGv{}^!J@Mv7cw79yMJXa5>K***ut}y zQFg)I#u(yX;yC z0e~gegt8;2R5ZGrL;xFSE{uP&lEbtbFr)$T&pW&qD zdg7{~-isGc+0Qhb72bW7*s(=Qut%?ROGfb#t?mg^Ry8UubwB)xvz~?3`IgzvI7@*Ag`UWcyZxtNZVaZhh3qF{e3w zkpL<0ExOFHr^tY9HIn4 zZaPeDtI5>BJ1HbzDFh>k`# zD^;GxioKRPq3D%H%vbEQihzC@}uwy?@;qTDB=FcSSZ@`4YTZ zF^eY)_*UP?UjK@^|HCr<^Gjmt%!^aHS{zmhhLN57NzcBW$PQ#ET!(b zRYQ2r?yKYPW4Iv+-;*{<$7U!X_`PflxJrMIY!M)bm2Qz*0v-l0##9=cYGEsmlxBBo z)g4ktJdR*$D9{zU)s*q8aMT1}%rg9=b|DW?_f%hD#aW~#LBE7rYq?t(;&RN*(SL^l=R

voo!aGT3sX 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 diff --git a/Apps/Sandcastle/images/Cesium_Logo_overlay.png b/Apps/Sandcastle/images/Cesium_Logo_overlay.png index fb156163effa0300d3431522e3fa18a7ac542b7c..42a43316bd276090df2d5b13cb7991d2ceeb24c5 100644 GIT binary patch delta 4658 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 oXmA2(m>jPihU@<{9 delta 5106 zcmV5(BGf7}Kc6fzfn^+8(z z027BvL_t(&-tAg>a8$>c|8>7(X5Nejor5kALP9tggp4_C48{UF%((qOxqTQ?ZM}-mQ4E#6gt3Ya+bdaU5`v@n!*GA#<5S0ts{@X-1L4R!_FKdEam z67e1YK>&RK!T_Rzfbo@Z|NjK*2vq^#0gwqG0HCmR>byJ3fA3y&PiE2BFN{_b+#mTex3^yWAWAg#b$C z|KMle8C7-f3~zQIlQHM7Oh7RxD@#w9;qKPX3-7;uuzv5h_W)c2&n#FMzVx4e^IXZ4xp%2rhDQ`6 zAryoFL?A^ag?jwi{y=%v1bl^Yoe+sQfBHcv0U;#4x-kYyDI~?E*V;;=#tGCJPO7A6(i8x zm&ECgf7l>0)vZpLzj9Gm)0wMRPabv>DP3Sx6*gEAm=txz0$>Oh&jbZjh0HvaGn+3x z1y)WGAW4ZQB28y8L5L*91rq*$ohz;(Q~@+aiIkN6b_4?sm*lxfQV3b8d*$YzDSsys zX2>JTX-XRnKz44)Z50)>zd4@)poIQur`ewrf5Wj_%VxMO;KA1`MxZ}#;#6AepiK!6$NYX|HnAIEeJ>wl*Zvz=QJGUWr7m9`8$r_pQ)fIE=4fGiP61c;k96gnte zi4rvSByi|bKic|rNK}Af1Y@Vpn^s>qW=vPp*)~BqegJ_do_JzvMMXua*X#AWTrPD` zUk0g~rfDUU$wVj=3LZOl?BaXxy>|tGe_mc*p1En$rp3`{R5MLeVT=*3Xg0qyN~tZ& zvgz~rjJmqIQ$PRt&re&HMN3Lb@>Z{2Jv}!!H=wGjn^Jm{8zY1;(=?NPeSLku|NZaJ z*4EZu17JS%&_l(`mMxpEX`1%I2OnJ8x^?TNr=EJM?7;^goWK~1y#D&@`wt#GfA|Sk z3eh`g0CEo;IIuREOnTbe+XvRKUw>@*^5vuNzyJP8T-dN}d!VMKruNXGLuUk!qjR|o zC9*HS{PL2_%*;aDwyDSCF`Ap3PjA?;;kSZ!u>lY{O^Kt)iYq&NR7E+JC({TpF>~h3yVk5(vyf6cL^nS_zxdFhL;oTuhvP*v0pu@RwrtkAb?g4x z=ksX}zxDO?r5iSEIL<9Lf68Hz&SE{K)4pD=xHT_hgBdRaP~cba__TcZq!3IiiAeCIB#M)Tr#t%uG*td3o7Se)5w? zYier#JroLMBoYbJ=kv+IV9)~~KNJdS0ALt~84ib?uAGv_-DX&pWlNGoqtPe;6a<4o ze=HU=eLkP;gth6@f2ZHMV#SIXJ9qAkaL?wr;T!-(&p!L?Qm@ymi3-@?-!JohbqPt_ zO)<^U4%L@akS8gs;vjI#6c10zgI5aT)!l!K%WbFd58v621>+~aDAw$ zsp+h#f2ldhU0W0YWsK1j;VAs>c$(C*hX|F1EVz0CK;eo@0HC_Mx^LC0Rhd~?S@Hu9 zJaEUtg$pZdYHGqs$Bu{eCxN44XD>y1sey=8_a|OK(-~IGLoCj7Q?k zGHsgyWjQV^t<1)W3-980CwG7n0zxSIV}01Nf9nVM`&GZjLld*{pY=U3>_K-rr*s6W zid5`6`b(U=dl`^)*5kJEEwl zsDN)U=FXj)%NYCSaB=q8XP@1?b?eqECr_Siaa{haS+nx$>+2UdF3q-WmPjN_UDwTM ze>7_J^z=jz9XfRRg%@5p9*@UOQHYKqID+8`SS5{UQ{P2fAym#BSZSw(mY}=NHQy%UT-9kC##9YnEdeZ|7WsJeLZM^Wp3m>^$uCSw^TshcqLx7>W z@5)DiXq+*U^*=Pb*sqcZst^4Xe{DUDaI4;w#)O4;>#9+jKLHOEY9_2#>WE7j7=EKX3Akj8@6c0?fB2M8 z9m|izgQz~V8H;9gU|eA(PMp7r-`4#aoqf$vrd{SD%Q*VjYqs<)!e#QU?O*EH((qsL1N+>FFhe7?e`R%N@0}v@|ejf6}Begb*YW36l^aJBEJaZgKA$g9UtfQ5*REa7^XJbm`~LU8zf#wAYvsz7U3>QI zxe|-T45!qwEK6pLdFIWVSM2loWX2dQ%d!9@6h+a8Hcggw00T`;O&yMcZQ8VH&a7Fp z^18aZx+O`{e+ePXFbrAKw5-L87gthB31bWc0|PMtVO3R=j@3GXy>jJ>wRi8{kH(D~ zm#b--`ph%WjP-at5@QUtwYBGV?b`J*fS9VPLvoWO$r2h9ES<$VF*XLEueZ0i<-~hR z&BXa5p7>MFb8F!y^e7VgVDCYq@=%=>>9snVJ_`N8e=_V203l98uCA^=x_tTa`!!7) z<@fv5xpU{1F~-IUvBP1U5;E8%xp3jamD8tBcTSr&jX3znk00;fwr$%q(Y1+gN>x>5 z|Ni}Z4jeepym#;3%g;RXjI1b%eCM5aj+#7qa$(w$*Wg76Avk&R8GE5)3)t4pU>CH7-Obs+Ke$K%QBH9 ziKbhOF=(1*5JJMWwY80}yzXu2Uly5T?~V)r*5i@wuvxP2dh zs{p!qth0G68^IHc902}_6DQ^c0s$|jRHBrEF~$Z41`?MpT?+N}^@X`YL;#pRpU-pe zz4w;JVll5_7#^WlJQQmvrIsW~hS%$jwY9Z%H8eEb;Lp4O{N?54xdjCUeqP29f5BQ= zGMO}vA3xs7=|upTqehMLPM9zu*X452YuBy?8yXsV_$GRI=f^v7;>2vP*Xt7bF$}|O zXlMx9wjJZRVgOiKS((40q9R9CRkXCUbT>3KbPB_ftT}V$jHQ%%7-M>Uef{-tINZ(Q zp=nyik|j$@4a1PTySw{7{P4pTe|{7x;#e*j<^Y?Hebt>bE!<^ zTUo9iw_}lBtM$SM{WVw4^d9F;hb}((ND8esx6q052qQR}CZW@X(UdJ5+wll3Jfs=h znZhAEo#S*4=B0LuQbUqhYB6D^ij;=CB8=10;S>3A#(EIOh7d+?rqh@af8NdJ{5vC0 z2=pZWn{#+@sGKC9agfa;SXM!HfmU92=ZIOEBh_*43@Jx(5f7Cl$<%GbNLZ0*$n5BA zO`bV@r28m8@6^RLX&`0DPEv;6;_y1%Y}68JSh2623WGEwI5Xv>Buzt)q-)fqp-Ba$ z5%CQ-aJN(N*(s+XAUtD&e__eOh|m(UeUievEes8Y#&+a$oKkdgt8!+6S&AxW<`jF1 zTwdyzBq|%am57C`-rn|ThcF*>=889IlED0MM@CX-tEsh`2shlZ6eb9YrFp+}$4b~R zG}Ga})$tY#!#~oztDS<6rcpL_i+%bO4e~k86-$D<@d(`%$CVLbP<9v>&K7@as(*`v zSD$re=!+gI`*Xp5nUj>{&xmU{JfC@(j(ko=MRy~oaf70(F$K3_r?Hl=uD`(bzhVpe U-ZR`E%>V!Z07*qoM6N<$f?VI-0ssI2 From 5bf7b809c908160ee0978f9c52de274da43c7fc8 Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Wed, 2 Nov 2016 16:45:31 -0400 Subject: [PATCH 025/103] Update jsDoc logo --- .../static/images/CesiumLogo.png | Bin 3175 -> 4011 bytes .../static/styles/jsdoc-default.css | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/jsdoc/cesium_template/static/images/CesiumLogo.png b/Tools/jsdoc/cesium_template/static/images/CesiumLogo.png index 90b5ccde9ce0311ed9b8c906fecbb7f39be1f6e8..ef8d4ccc669ca11322e081531ab7760737ce65c7 100644 GIT binary patch literal 4011 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 Ro3Q`@002ovPDHLkV1jrNw`%|Z literal 3175 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 N002ovPDHLkV1jP;3aS7A diff --git a/Tools/jsdoc/cesium_template/static/styles/jsdoc-default.css b/Tools/jsdoc/cesium_template/static/styles/jsdoc-default.css index 23f3a31438ef..41b376ef127c 100644 --- a/Tools/jsdoc/cesium_template/static/styles/jsdoc-default.css +++ b/Tools/jsdoc/cesium_template/static/styles/jsdoc-default.css @@ -149,7 +149,7 @@ div.menu top: -7px; left: -2px; width: 187px; - height: 35px; + height: 40px; margin: 0; } From b9eab832765240851f90c8e5f27067e2fd4bd16c Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Wed, 2 Nov 2016 16:53:35 -0400 Subject: [PATCH 026/103] Fix ® symbol on jsDoc. --- .../static/images/CesiumLogo.png | Bin 4011 -> 4121 bytes .../static/styles/jsdoc-default.css | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/jsdoc/cesium_template/static/images/CesiumLogo.png b/Tools/jsdoc/cesium_template/static/images/CesiumLogo.png index ef8d4ccc669ca11322e081531ab7760737ce65c7..507d4b766e8afbc05cb5e054828304458965378d 100644 GIT binary patch literal 4121 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 X0ZLT2gXY(@00000NkvXXu0mjfTeb*T literal 4011 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 Ro3Q`@002ovPDHLkV1jrNw`%|Z diff --git a/Tools/jsdoc/cesium_template/static/styles/jsdoc-default.css b/Tools/jsdoc/cesium_template/static/styles/jsdoc-default.css index 41b376ef127c..abce268cff35 100644 --- a/Tools/jsdoc/cesium_template/static/styles/jsdoc-default.css +++ b/Tools/jsdoc/cesium_template/static/styles/jsdoc-default.css @@ -148,7 +148,7 @@ div.menu position: relative; top: -7px; left: -2px; - width: 187px; + width: 191px; height: 40px; margin: 0; } From 6e08eeefcf78328e5dea0a49f9b03593d08f069a Mon Sep 17 00:00:00 2001 From: hpinkos Date: Wed, 2 Nov 2016 17:22:24 -0400 Subject: [PATCH 027/103] delete unused png file --- Source/Widgets/Images/Cesium_Logo_overlay.png | Bin 5109 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 Source/Widgets/Images/Cesium_Logo_overlay.png diff --git a/Source/Widgets/Images/Cesium_Logo_overlay.png b/Source/Widgets/Images/Cesium_Logo_overlay.png deleted file mode 100644 index fb156163effa0300d3431522e3fa18a7ac542b7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5109 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 XVhj4-Gu$7|00000NkvXXu0mjf@`uk> From 5a752b0c5573b5a44d53e3383825baa46121e05c Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Wed, 2 Nov 2016 18:24:02 -0400 Subject: [PATCH 028/103] chore(package): update aws-sdk to version 2.6.14 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 259a46bc7bf1..93e446634f52 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "devDependencies": { "almond": "0.3.3", - "aws-sdk": "2.6.12", + "aws-sdk": "2.6.14", "bluebird": "3.4.6", "compressible": "2.0.8", "compression": "1.6.2", From 29953dd9a6905570d75a7d2e8847d29fe80a6ab6 Mon Sep 17 00:00:00 2001 From: Abhishek Potnis Date: Thu, 3 Nov 2016 13:45:00 +0530 Subject: [PATCH 029/103] Sandcastle terrain example cleaned up --- Apps/Sandcastle/gallery/Terrain.html | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/Apps/Sandcastle/gallery/Terrain.html b/Apps/Sandcastle/gallery/Terrain.html index fe69c7355ad8..386dd406d6fe 100644 --- a/Apps/Sandcastle/gallery/Terrain.html +++ b/Apps/Sandcastle/gallery/Terrain.html @@ -25,9 +25,12 @@

-
+ + + + @@ -40,6 +43,9 @@ //Sandcastle_Begin var viewer = new Cesium.Viewer('cesiumContainer'); +// set lighting to true +viewer.scene.globe.enableLighting = true; + var cesiumTerrainProviderMeshes = new Cesium.CesiumTerrainProvider({ url : 'https://assets.agi.com/stk-terrain/world', requestWaterMask : true, @@ -159,11 +165,6 @@ viewer.entities.resumeEvents(); } -Sandcastle.addToolbarButton('Toggle Lighting', function() { - viewer.scene.globe.enableLighting = !viewer.scene.globe.enableLighting; -}, 'toggleLighting'); - - Sandcastle.addToolbarButton('Sample Everest Terrain', function() { var gridWidth = 41; var gridHeight = 41; @@ -182,17 +183,25 @@ } Cesium.when(Cesium.sampleTerrain(viewer.terrainProvider, 9, terrainSamplePositions), sampleTerrainSuccess); + + var target = new Cesium.Cartesian3(300770.50872389384, 5634912.131394585, 2978152.2865545116); + var offset = new Cesium.Cartesian3(6344.974098678562, -793.3419798081741, 2499.9508860763162); + viewer.camera.lookAt(target, offset); + viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY); }, 'sampleButtons'); -var viewModel = { fogEnabled : true }; + +var viewModel = { fogEnabled : true, lightingEnabled: true }; Cesium.knockout.track(viewModel); var toolbar = document.getElementById('toolbar'); Cesium.knockout.applyBindings(viewModel, toolbar); +Cesium.knockout.getObservable(viewModel, 'lightingEnabled').subscribe(function(newValue) { + viewer.scene.globe.enableLighting = newValue; +}); Cesium.knockout.getObservable(viewModel, 'fogEnabled').subscribe(function(newValue) { viewer.scene.fog.enabled = newValue; }); -viewModel.enabled = viewer.scene.fog.enabled; //Sandcastle_End Sandcastle.finishedLoading(); } From 120fbc3a84ac4eb4620909ebae7c036e6ecdab7b Mon Sep 17 00:00:00 2001 From: Abhishek Potnis Date: Thu, 3 Nov 2016 14:31:00 +0530 Subject: [PATCH 030/103] Disabled scene mode picker in Atmosphere demo --- Apps/Sandcastle/gallery/Atmosphere Color.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Apps/Sandcastle/gallery/Atmosphere Color.html b/Apps/Sandcastle/gallery/Atmosphere Color.html index f58f0517dec1..3fe499bcfea6 100644 --- a/Apps/Sandcastle/gallery/Atmosphere Color.html +++ b/Apps/Sandcastle/gallery/Atmosphere Color.html @@ -63,7 +63,9 @@ function startup(Cesium) { 'use strict'; //Sandcastle_Begin -var viewer = new Cesium.Viewer('cesiumContainer'); +var viewer = new Cesium.Viewer('cesiumContainer',{ +sceneModePicker:false +}); var scene = viewer.scene; var skyAtmosphere = scene.skyAtmosphere; From 735b15b97c922872d2074b590cdc3ff4b53ff295 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 3 Nov 2016 09:48:10 -0400 Subject: [PATCH 031/103] chore(package): update request to version 2.78.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 259a46bc7bf1..47620ba2a32d 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "karma-spec-reporter": "0.0.26", "mime": "1.3.4", "mkdirp": "0.5.1", - "request": "2.76.0", + "request": "2.78.0", "rimraf": "2.5.4", "strip-comments": "0.3.2", "yargs": "6.3.0" From 0d18f3fb5cb097169f2741d0dec2744424ebc400 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 3 Nov 2016 10:36:26 -0400 Subject: [PATCH 032/103] chore(package): update electron to version 1.4.5 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2fbcb5832138..c84863d4876d 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "bluebird": "3.4.6", "compressible": "2.0.8", "compression": "1.6.2", - "electron": "1.4.4", + "electron": "1.4.5", "event-stream": "3.3.4", "express": "4.14.0", "globby": "6.0.0", From a85706181300077b91dec1b5e7dccffe7300a883 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 3 Nov 2016 10:36:37 -0400 Subject: [PATCH 033/103] chore(package): update compressible to version 2.0.9 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c84863d4876d..aadf27194d11 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "almond": "0.3.3", "aws-sdk": "2.6.14", "bluebird": "3.4.6", - "compressible": "2.0.8", + "compressible": "2.0.9", "compression": "1.6.2", "electron": "1.4.5", "event-stream": "3.3.4", From 75d395c86d3ab9da9f227a2503ad29d4da8baf44 Mon Sep 17 00:00:00 2001 From: Abhishek Potnis Date: Thu, 3 Nov 2016 14:31:00 +0530 Subject: [PATCH 034/103] Revert "Sandcastle terrain example cleaned up" This reverts commit 29953dd9a6905570d75a7d2e8847d29fe80a6ab6. --- Apps/Sandcastle/gallery/Terrain.html | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/Apps/Sandcastle/gallery/Terrain.html b/Apps/Sandcastle/gallery/Terrain.html index 386dd406d6fe..fe69c7355ad8 100644 --- a/Apps/Sandcastle/gallery/Terrain.html +++ b/Apps/Sandcastle/gallery/Terrain.html @@ -25,12 +25,9 @@
+
Toggle Lighting
Enable fog
- - - - @@ -43,9 +40,6 @@ //Sandcastle_Begin var viewer = new Cesium.Viewer('cesiumContainer'); -// set lighting to true -viewer.scene.globe.enableLighting = true; - var cesiumTerrainProviderMeshes = new Cesium.CesiumTerrainProvider({ url : 'https://assets.agi.com/stk-terrain/world', requestWaterMask : true, @@ -165,6 +159,11 @@ viewer.entities.resumeEvents(); } +Sandcastle.addToolbarButton('Toggle Lighting', function() { + viewer.scene.globe.enableLighting = !viewer.scene.globe.enableLighting; +}, 'toggleLighting'); + + Sandcastle.addToolbarButton('Sample Everest Terrain', function() { var gridWidth = 41; var gridHeight = 41; @@ -183,25 +182,17 @@ } Cesium.when(Cesium.sampleTerrain(viewer.terrainProvider, 9, terrainSamplePositions), sampleTerrainSuccess); - - var target = new Cesium.Cartesian3(300770.50872389384, 5634912.131394585, 2978152.2865545116); - var offset = new Cesium.Cartesian3(6344.974098678562, -793.3419798081741, 2499.9508860763162); - viewer.camera.lookAt(target, offset); - viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY); }, 'sampleButtons'); - -var viewModel = { fogEnabled : true, lightingEnabled: true }; +var viewModel = { fogEnabled : true }; Cesium.knockout.track(viewModel); var toolbar = document.getElementById('toolbar'); Cesium.knockout.applyBindings(viewModel, toolbar); -Cesium.knockout.getObservable(viewModel, 'lightingEnabled').subscribe(function(newValue) { - viewer.scene.globe.enableLighting = newValue; -}); Cesium.knockout.getObservable(viewModel, 'fogEnabled').subscribe(function(newValue) { viewer.scene.fog.enabled = newValue; }); +viewModel.enabled = viewer.scene.fog.enabled; //Sandcastle_End Sandcastle.finishedLoading(); } From 7c51626888db4a0a3cd537f9db2b4971c2f9f9e6 Mon Sep 17 00:00:00 2001 From: Matthew Amato Date: Thu, 3 Nov 2016 10:48:14 -0400 Subject: [PATCH 035/103] Fix electron tests on windows Running the tests via Electron on Windows was broken because `karma-electron-launcher` is unmaintained and no longer compatible with the newer `electron` package. This uses `karma-electron` instead, which is maintained and up to date. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index aadf27194d11..d6dae07d8493 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "karma": "1.3.0", "karma-chrome-launcher": "2.0.0", "karma-detect-browsers": "2.1.0", - "karma-electron-launcher": "0.1.0", + "karma-electron": "5.1.1", "karma-firefox-launcher": "1.0.0", "karma-ie-launcher": "1.0.0", "karma-jasmine": "1.0.2", From a9278bea0357caa2aa5c1bc7f02f6f91dc5a183b Mon Sep 17 00:00:00 2001 From: Abhishek Potnis Date: Thu, 3 Nov 2016 20:18:46 +0530 Subject: [PATCH 036/103] Fixed indentation and added space --- Apps/Sandcastle/gallery/Atmosphere Color.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Apps/Sandcastle/gallery/Atmosphere Color.html b/Apps/Sandcastle/gallery/Atmosphere Color.html index 3fe499bcfea6..ac03a9a1bc53 100644 --- a/Apps/Sandcastle/gallery/Atmosphere Color.html +++ b/Apps/Sandcastle/gallery/Atmosphere Color.html @@ -63,8 +63,8 @@ function startup(Cesium) { 'use strict'; //Sandcastle_Begin -var viewer = new Cesium.Viewer('cesiumContainer',{ -sceneModePicker:false +var viewer = new Cesium.Viewer('cesiumContainer', { + sceneModePicker:false }); var scene = viewer.scene; var skyAtmosphere = scene.skyAtmosphere; From b8395acb82c38aa2a5a28c7f26b44d862868907f Mon Sep 17 00:00:00 2001 From: hpinkos Date: Thu, 3 Nov 2016 11:32:51 -0400 Subject: [PATCH 037/103] tweaks --- Documentation/Contributors/CodingGuide/README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Documentation/Contributors/CodingGuide/README.md b/Documentation/Contributors/CodingGuide/README.md index 471bd293961a..1cef08276fd8 100644 --- a/Documentation/Contributors/CodingGuide/README.md +++ b/Documentation/Contributors/CodingGuide/README.md @@ -34,6 +34,7 @@ To some extent, this guide can be summarized as _make new code similar to existi * [Design](#design) * [Deprecation and Breaking Changes](#deprecation-and-breaking-changes) * [Third-Party Libraries](#third-party-libraries) +* [Widgets](#widgets) * [GLSL](#glsl) * [Naming](#naming-1) * [Formatting](#formatting-1) @@ -768,14 +769,15 @@ Cesium includes a handful of standard widgets that are used in the Viewer, inclu To learn about using the Knockout library, see the [Get started](http://knockoutjs.com/) section of their home page. They also have a great [interactive tutorial](http://learn.knockoutjs.com/) with step by step instructions. -Cesium also uses the [Knockout-ES5](http://blog.stevensanderson.com/2013/05/20/knockout-es5-a-plugin-to-simplify-your-syntax/) plugin to simplify knockout syntax. This lets us use knockout observables the same way we use other variables. Call `knockout.track` to create the observables. Here is an example from [BaseLayerPickerViewModel](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/BaseLayerPicker/BaseLayerPickerViewModel.js#L73) +Cesium also uses the [Knockout-ES5](http://blog.stevensanderson.com/2013/05/20/knockout-es5-a-plugin-to-simplify-your-syntax/) plugin to simplify knockout syntax. This lets us use knockout observables the same way we use other variables. Call `knockout.track` to create the observables. Here is an example from [BaseLayerPickerViewModel](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/BaseLayerPicker/BaseLayerPickerViewModel.js#L73) that makes observables for tooltip, showInstructions and _touch. + ``` javascript knockout.track(this, ['tooltip', 'showInstructions', '_touch']); ``` -**Knockout subscriptions** +### Knockout subscriptions -Use a knockout subscription only when you are unable to accomplish what you need to do with a standard binding. For [example](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/Viewer/Viewer.js#L588), the `Viewer` subscribes to `FullscreenButtonViewModel.isFullscreenEnabled` because it needs to change the width of the timeline widget when that value changes. This cannot be done with binding because the value from `FullscreenButtonViewModel` is effecting a value not contained within that widget. +Use a knockout subscription only when you are unable to accomplish what you need to do with a standard binding. For [example](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/Viewer/Viewer.js#L588), the `Viewer` subscribes to `FullscreenButtonViewModel.isFullscreenEnabled` because it needs to change the width of the timeline widget when that value changes. This cannot be done with binding because the value from `FullscreenButtonViewModel` is affecting a value not contained within that widget. Cesium includes a [`subscribeAndEvaluate`](https://github.com/AnalyticalGraphicsInc/cesium/blob/master/Source/Widgets/subscribeAndEvaluate.js) helper function for subscribing to knockout observable. From 71853394985ebee64e30f78051bda717f4321165 Mon Sep 17 00:00:00 2001 From: hpinkos Date: Thu, 3 Nov 2016 12:05:48 -0400 Subject: [PATCH 038/103] delete other logo.png --- logo.png | Bin 17710 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 logo.png diff --git a/logo.png b/logo.png deleted file mode 100644 index d69058e0c8ec8317316eabb0eb16ada7cbb62fe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17710 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 From 4c021aa39dc43218a4e430fd0e346bb8e2b3ec06 Mon Sep 17 00:00:00 2001 From: Abhishek Potnis Date: Thu, 3 Nov 2016 22:48:09 +0530 Subject: [PATCH 039/103] Changed Toggle to Enable Lighting --- Apps/Sandcastle/gallery/Terrain.html | 25 +++++++++++++++++-------- CONTRIBUTORS.md | 1 + 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/Apps/Sandcastle/gallery/Terrain.html b/Apps/Sandcastle/gallery/Terrain.html index fe69c7355ad8..b1b5ce1d3be8 100644 --- a/Apps/Sandcastle/gallery/Terrain.html +++ b/Apps/Sandcastle/gallery/Terrain.html @@ -25,9 +25,12 @@
-
Toggle Lighting
Enable fog
+ + + + @@ -40,6 +43,9 @@ //Sandcastle_Begin var viewer = new Cesium.Viewer('cesiumContainer'); +// set lighting to true +viewer.scene.globe.enableLighting = true; + var cesiumTerrainProviderMeshes = new Cesium.CesiumTerrainProvider({ url : 'https://assets.agi.com/stk-terrain/world', requestWaterMask : true, @@ -159,11 +165,6 @@ viewer.entities.resumeEvents(); } -Sandcastle.addToolbarButton('Toggle Lighting', function() { - viewer.scene.globe.enableLighting = !viewer.scene.globe.enableLighting; -}, 'toggleLighting'); - - Sandcastle.addToolbarButton('Sample Everest Terrain', function() { var gridWidth = 41; var gridHeight = 41; @@ -182,17 +183,25 @@ } Cesium.when(Cesium.sampleTerrain(viewer.terrainProvider, 9, terrainSamplePositions), sampleTerrainSuccess); + + var target = new Cesium.Cartesian3(300770.50872389384, 5634912.131394585, 2978152.2865545116); + var offset = new Cesium.Cartesian3(6344.974098678562, -793.3419798081741, 2499.9508860763162); + viewer.camera.lookAt(target, offset); + viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY); }, 'sampleButtons'); -var viewModel = { fogEnabled : true }; + +var viewModel = { fogEnabled : true, lightingEnabled: true }; Cesium.knockout.track(viewModel); var toolbar = document.getElementById('toolbar'); Cesium.knockout.applyBindings(viewModel, toolbar); +Cesium.knockout.getObservable(viewModel, 'lightingEnabled').subscribe(function(newValue) { + viewer.scene.globe.enableLighting = newValue; +}); Cesium.knockout.getObservable(viewModel, 'fogEnabled').subscribe(function(newValue) { viewer.scene.fog.enabled = newValue; }); -viewModel.enabled = viewer.scene.fog.enabled; //Sandcastle_End Sandcastle.finishedLoading(); } diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 774adf62b504..68ac0c73cef6 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -110,3 +110,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute to Cesiu * [Tom Payne](https://github.com/twpayne) * [Leesa Fini](https://github.com/leesafini) * [Victor Malaret](https://github.com/malaretv) +* [Abhishek Potnis](https://github.com/abhishekvp) From c5c7be91337eb8e7e92d841a98c99da430b98c3f Mon Sep 17 00:00:00 2001 From: Matthew Amato Date: Thu, 3 Nov 2016 13:26:59 -0400 Subject: [PATCH 040/103] Timeline should not use ISO8601 as an intermediate format. This fixes #4544 and replaces #4553. Basically, makeTics was using ISO8601 and JavaScript dates as an intermediate format for computing it's Julian epoch. This lead to all kinds of problems for very early or late dates. This fixes the crash and everything works, but there are still labeling problems when you go before 4713 BCE, but I'll write up a new issue to deal with that separately since it's a mode widespread Cesium problem. --- Source/Widgets/Timeline/Timeline.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Source/Widgets/Timeline/Timeline.js b/Source/Widgets/Timeline/Timeline.js index 64c1ad99464a..29b5dfd0715a 100644 --- a/Source/Widgets/Timeline/Timeline.js +++ b/Source/Widgets/Timeline/Timeline.js @@ -378,15 +378,17 @@ define([ // epochJulian: a nearby time to be considered "zero seconds", should be a round-ish number by human standards. var epochJulian; + var gregorianDate = JulianDate.toGregorianDate(startJulian); if (duration > 315360000) { // 3650+ days visible, epoch is start of the first visible century. - epochJulian = JulianDate.fromIso8601(JulianDate.toDate(startJulian).toISOString().substring(0, 2) + '00-01-01T00:00:00Z'); + epochJulian = JulianDate.fromDate(new Date(Date.UTC(Math.floor(gregorianDate.year / 100) * 100, 0))); } else if (duration > 31536000) { // 365+ days visible, epoch is start of the first visible decade. - epochJulian = JulianDate.fromIso8601(JulianDate.toDate(startJulian).toISOString().substring(0, 3) + '0-01-01T00:00:00Z'); + epochJulian = JulianDate.fromDate(new Date(Date.UTC(Math.floor(gregorianDate.year / 10) * 10, 0))); } else if (duration > 86400) { // 1+ day(s) visible, epoch is start of the year. - epochJulian = JulianDate.fromIso8601(JulianDate.toDate(startJulian).toISOString().substring(0, 4) + '-01-01T00:00:00Z'); + epochJulian = JulianDate.fromDate(new Date(Date.UTC(gregorianDate.year, 0))); } else { // Less than a day on timeline, epoch is midnight of the visible day. - epochJulian = JulianDate.fromIso8601(JulianDate.toDate(startJulian).toISOString().substring(0, 10) + 'T00:00:00Z'); + epochJulian = JulianDate.fromDate(new Date(Date.UTC(gregorianDate.year, gregorianDate.month, gregorianDate.day))); } + // startTime: Seconds offset of the left side of the timeline from epochJulian. var startTime = JulianDate.secondsDifference(this._startJulian, JulianDate.addSeconds(epochJulian, epsilonTime, new JulianDate())); // endTime: Seconds offset of the right side of the timeline from epochJulian. From e857a14383a51771db2d3bb3d2114f277b8e8f39 Mon Sep 17 00:00:00 2001 From: Erik Andersson Date: Thu, 3 Nov 2016 20:25:30 +0100 Subject: [PATCH 041/103] Allow polyline widths >= 0 --- Source/Core/PolylineGeometry.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Core/PolylineGeometry.js b/Source/Core/PolylineGeometry.js index 9bde56e19933..4e652fde7efe 100644 --- a/Source/Core/PolylineGeometry.js +++ b/Source/Core/PolylineGeometry.js @@ -313,7 +313,7 @@ define([ // A width of a pixel or less is not a valid geometry, but in order to support external data // that may have errors we treat this as an empty geometry. - if (positionsLength < 2 || width < 1.0) { + if (positionsLength < 2 || width <= 0.0) { return undefined; } From bf0b5db650e71da447368e96ca5c396cfd5fef87 Mon Sep 17 00:00:00 2001 From: Erik Andersson Date: Thu, 3 Nov 2016 20:32:17 +0100 Subject: [PATCH 042/103] Replace non-throw test when width is invalid with a test that expects return value to be undefined --- Specs/Core/PolylineGeometrySpec.js | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/Specs/Core/PolylineGeometrySpec.js b/Specs/Core/PolylineGeometrySpec.js index 27cabe2ce842..1d02cc1284ec 100644 --- a/Specs/Core/PolylineGeometrySpec.js +++ b/Specs/Core/PolylineGeometrySpec.js @@ -31,15 +31,6 @@ defineSuite([ }).toThrowDeveloperError(); }); - it('constructor does not throw with invalid width', function() { - expect(function() { - return new PolylineGeometry({ - positions : [Cartesian3.ZERO, Cartesian3.UNIT_X], - width : -1 - }); - }).not.toThrowDeveloperError(); - }); - it('constructor throws with invalid number of colors', function() { expect(function() { return new PolylineGeometry({ @@ -49,6 +40,19 @@ defineSuite([ }).toThrowDeveloperError(); }); + it('constructor returns undefined when line width is negative', function() { + var positions = [new Cartesian3(1.0, 0.0, 0.0), new Cartesian3(0.0, 1.0, 0.0), new Cartesian3(0.0, 0.0, 1.0)]; + var line = PolylineGeometry.createGeometry(new PolylineGeometry({ + positions : positions, + width : -1.0, + vertexFormat : VertexFormat.ALL, + granularity : Math.PI, + ellipsoid: Ellipsoid.UNIT_SPHERE + })); + + expect(line).toBeUndefined(); + }); + it('constructor computes all vertex attributes', function() { var positions = [new Cartesian3(1.0, 0.0, 0.0), new Cartesian3(0.0, 1.0, 0.0), new Cartesian3(0.0, 0.0, 1.0)]; var line = PolylineGeometry.createGeometry(new PolylineGeometry({ From 21222fe1e4c3e7a2fcaf584413f97fab41ddc5b1 Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Thu, 3 Nov 2016 15:43:08 -0400 Subject: [PATCH 043/103] Fix logo on index.release.html --- .npmignore | 1 - gulpfile.js | 2 -- index.release.html | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.npmignore b/.npmignore index 462e805a67f3..d9e2e3bb2e65 100644 --- a/.npmignore +++ b/.npmignore @@ -19,7 +19,6 @@ /index.release.html /Instrumented /launches -/logo.png /server.js /Source/copyrightHeader.js /Source/main.js diff --git a/gulpfile.js b/gulpfile.js index 9ac3c301a40f..177bb2dd4d79 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -272,7 +272,6 @@ gulp.task('makeZipFile', ['release'], function() { 'Source/**', 'Specs/**', 'ThirdParty/**', - 'logo.png', 'favicon.ico', 'gulpfile.js', 'server.js', @@ -385,7 +384,6 @@ function deployCesium(bucketName, uploadDirectory, cacheControl, done) { 'favicon.ico', 'gulpfile.js', 'index.html', - 'logo.png', 'package.json', 'server.js', 'web.config', diff --git a/index.release.html b/index.release.html index a8db9870dfaf..1d26baa058b4 100644 --- a/index.release.html +++ b/index.release.html @@ -27,7 +27,7 @@
- +
Enable Lighting
Enable fog
-
-
- - - - - -
-

Loading...

-
- - - From 7f522840d0427298e42a2353b38e74fbdcdd664f Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 11 Nov 2016 10:21:34 -0500 Subject: [PATCH 085/103] chore(package): update electron to version 1.4.6 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cfc0592139e9..7637e1301336 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "bluebird": "3.4.6", "compressible": "2.0.9", "compression": "1.6.2", - "electron": "1.4.5", + "electron": "1.4.6", "event-stream": "3.3.4", "express": "4.14.0", "globby": "6.1.0", From d9332c47f6be60c736b808925ca6110e464ef06f Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 11 Nov 2016 10:21:34 -0500 Subject: [PATCH 086/103] chore(package): update karma-detect-browsers to version 2.2.3 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cfc0592139e9..188c39c1a6fd 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "jshint-stylish": "2.2.1", "karma": "1.3.0", "karma-chrome-launcher": "2.0.0", - "karma-detect-browsers": "2.2.1", + "karma-detect-browsers": "2.2.3", "karma-electron": "5.1.1", "karma-firefox-launcher": "1.0.0", "karma-ie-launcher": "1.0.0", From a1df7ad73232d6958553a13d79e456cb15e90930 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 11 Nov 2016 10:26:30 -0500 Subject: [PATCH 087/103] chore(package): update jsdoc to version 3.4.3 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e97cfa9585b1..e9d26247c3b8 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "gulp-replace": "0.5.4", "gulp-zip": "3.0.2", "jasmine-core": "2.5.2", - "jsdoc": "3.4.2", + "jsdoc": "3.4.3", "jshint": "2.9.4", "jshint-stylish": "2.2.1", "karma": "1.3.0", From c60b44886b696e99b21bacd22e79a1c2291a6b2a Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Mon, 14 Nov 2016 15:38:58 -0500 Subject: [PATCH 088/103] chore(package): update yargs to version 6.4.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e9d26247c3b8..d01d30da0a05 100644 --- a/package.json +++ b/package.json @@ -67,7 +67,7 @@ "request": "2.78.0", "rimraf": "2.5.4", "strip-comments": "0.3.2", - "yargs": "6.3.0" + "yargs": "6.4.0" }, "scripts": { "start": "node server.js", From 547d277fae79ea12d092f420aa479e1072463050 Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Tue, 15 Nov 2016 19:18:55 -0500 Subject: [PATCH 089/103] Result after running sortRequires. --- Source/Core/HeadingPitchRoll.js | 18 ++-- Source/Core/HeightmapTessellator.js | 1 + Source/Core/PolylineVolumeGeometry.js | 4 +- Source/Core/TrustedServers.js | 18 ++-- Source/Core/loadImage.js | 8 +- Source/Core/loadWithXhr.js | 8 +- Source/DataSources/EntityCluster.js | 102 +++++++++--------- Specs/Core/HeadingPitchRollSpec.js | 14 +-- Specs/Core/Matrix3Spec.js | 22 ++-- Specs/Core/TransformsSpec.js | 82 +++++++------- Specs/Core/TrustedServersSpec.js | 6 +- Specs/DataSources/EntityClusterSpec.js | 1 + .../PolylineVolumeGeometryUpdaterSpec.js | 4 +- Specs/Scene/BatchTableSpec.js | 26 ++--- Specs/Scene/LabelCollectionSpec.js | 4 +- Specs/Scene/PrimitiveSpec.js | 4 +- Specs/Scene/QuadtreePrimitiveSpec.js | 8 +- Specs/Scene/SceneTransformsSpec.js | 4 +- 18 files changed, 168 insertions(+), 166 deletions(-) diff --git a/Source/Core/HeadingPitchRoll.js b/Source/Core/HeadingPitchRoll.js index 32229a9880f7..6428fc73a83b 100644 --- a/Source/Core/HeadingPitchRoll.js +++ b/Source/Core/HeadingPitchRoll.js @@ -1,14 +1,14 @@ /*global define*/ define([ - './defaultValue', - './defined', - './DeveloperError', - './Math' -], function( - defaultValue, - defined, - DeveloperError, - CesiumMath) { + './defaultValue', + './defined', + './DeveloperError', + './Math' + ], function( + defaultValue, + defined, + DeveloperError, + CesiumMath) { "use strict"; /** diff --git a/Source/Core/HeightmapTessellator.js b/Source/Core/HeightmapTessellator.js index 9454338ff0da..40406b0fa194 100644 --- a/Source/Core/HeightmapTessellator.js +++ b/Source/Core/HeightmapTessellator.js @@ -17,6 +17,7 @@ define([ './TerrainEncoding', './Transforms', './WebMercatorProjection', + ], function( AxisAlignedBoundingBox, BoundingSphere, diff --git a/Source/Core/PolylineVolumeGeometry.js b/Source/Core/PolylineVolumeGeometry.js index 4cf9b5cf04f9..4f65fbd941a6 100644 --- a/Source/Core/PolylineVolumeGeometry.js +++ b/Source/Core/PolylineVolumeGeometry.js @@ -9,7 +9,6 @@ define([ './CornerType', './defaultValue', './defined', - './oneTimeWarning', './DeveloperError', './Ellipsoid', './Geometry', @@ -18,6 +17,7 @@ define([ './GeometryPipeline', './IndexDatatype', './Math', + './oneTimeWarning', './PolygonPipeline', './PolylineVolumeGeometryLibrary', './PrimitiveType', @@ -33,7 +33,6 @@ define([ CornerType, defaultValue, defined, - oneTimeWarning, DeveloperError, Ellipsoid, Geometry, @@ -42,6 +41,7 @@ define([ GeometryPipeline, IndexDatatype, CesiumMath, + oneTimeWarning, PolygonPipeline, PolylineVolumeGeometryLibrary, PrimitiveType, diff --git a/Source/Core/TrustedServers.js b/Source/Core/TrustedServers.js index cc538ad2241c..fcd08d380188 100644 --- a/Source/Core/TrustedServers.js +++ b/Source/Core/TrustedServers.js @@ -1,14 +1,14 @@ /*global define*/ define([ - './defined', - './defineProperties', - './DeveloperError', - '../ThirdParty/Uri' -], function( - defined, - defineProperties, - DeveloperError, - Uri) { + '../ThirdParty/Uri', + './defined', + './defineProperties', + './DeveloperError' + ], function( + Uri, + defined, + defineProperties, + DeveloperError) { 'use strict'; /** diff --git a/Source/Core/loadImage.js b/Source/Core/loadImage.js index 861e29343feb..ba299a24c860 100644 --- a/Source/Core/loadImage.js +++ b/Source/Core/loadImage.js @@ -1,18 +1,18 @@ /*global define*/ define([ '../ThirdParty/when', - './TrustedServers', './defaultValue', './defined', './DeveloperError', - './isCrossOriginUrl' + './isCrossOriginUrl', + './TrustedServers' ], function( when, - TrustedServers, defaultValue, defined, DeveloperError, - isCrossOriginUrl) { + isCrossOriginUrl, + TrustedServers) { 'use strict'; var dataUriRegex = /^data:/; diff --git a/Source/Core/loadWithXhr.js b/Source/Core/loadWithXhr.js index 01066b2341ec..a44debf511db 100644 --- a/Source/Core/loadWithXhr.js +++ b/Source/Core/loadWithXhr.js @@ -1,20 +1,20 @@ /*global define*/ define([ '../ThirdParty/when', - './TrustedServers', './defaultValue', './defined', './DeveloperError', './RequestErrorEvent', - './RuntimeError' + './RuntimeError', + './TrustedServers' ], function( when, - TrustedServers, defaultValue, defined, DeveloperError, RequestErrorEvent, - RuntimeError) { + RuntimeError, + TrustedServers) { 'use strict'; /** diff --git a/Source/DataSources/EntityCluster.js b/Source/DataSources/EntityCluster.js index e652c41c257a..9db3ae94b549 100644 --- a/Source/DataSources/EntityCluster.js +++ b/Source/DataSources/EntityCluster.js @@ -1,56 +1,56 @@ /*global define*/ define([ - '../Core/BoundingRectangle', - '../Core/Cartesian2', - '../Core/Cartesian3', - '../Core/Color', - '../Core/defaultValue', - '../Core/defined', - '../Core/defineProperties', - '../Core/destroyObject', - '../Core/EllipsoidalOccluder', - '../Core/Event', - '../Core/Matrix4', - '../Scene/Billboard', - '../Scene/BillboardCollection', - '../Scene/HeightReference', - '../Scene/HorizontalOrigin', - '../Scene/Label', - '../Scene/LabelCollection', - '../Scene/LabelStyle', - '../Scene/PointPrimitive', - '../Scene/PointPrimitiveCollection', - '../Scene/SceneTransforms', - '../Scene/VerticalOrigin', - '../ThirdParty/kdbush', - './Entity', - './Property' -], function( - BoundingRectangle, - Cartesian2, - Cartesian3, - Color, - defaultValue, - defined, - defineProperties, - destroyObject, - EllipsoidalOccluder, - Event, - Matrix4, - Billboard, - BillboardCollection, - HeightReference, - HorizontalOrigin, - Label, - LabelCollection, - LabelStyle, - PointPrimitive, - PointPrimitiveCollection, - SceneTransforms, - VerticalOrigin, - kdbush, - Entity, - Property) { + '../Core/BoundingRectangle', + '../Core/Cartesian2', + '../Core/Cartesian3', + '../Core/Color', + '../Core/defaultValue', + '../Core/defined', + '../Core/defineProperties', + '../Core/destroyObject', + '../Core/EllipsoidalOccluder', + '../Core/Event', + '../Core/Matrix4', + '../Scene/Billboard', + '../Scene/BillboardCollection', + '../Scene/HeightReference', + '../Scene/HorizontalOrigin', + '../Scene/Label', + '../Scene/LabelCollection', + '../Scene/LabelStyle', + '../Scene/PointPrimitive', + '../Scene/PointPrimitiveCollection', + '../Scene/SceneTransforms', + '../Scene/VerticalOrigin', + '../ThirdParty/kdbush', + './Entity', + './Property' + ], function( + BoundingRectangle, + Cartesian2, + Cartesian3, + Color, + defaultValue, + defined, + defineProperties, + destroyObject, + EllipsoidalOccluder, + Event, + Matrix4, + Billboard, + BillboardCollection, + HeightReference, + HorizontalOrigin, + Label, + LabelCollection, + LabelStyle, + PointPrimitive, + PointPrimitiveCollection, + SceneTransforms, + VerticalOrigin, + kdbush, + Entity, + Property) { 'use strict'; /** diff --git a/Specs/Core/HeadingPitchRollSpec.js b/Specs/Core/HeadingPitchRollSpec.js index cb0212267adf..93c150ea666e 100644 --- a/Specs/Core/HeadingPitchRollSpec.js +++ b/Specs/Core/HeadingPitchRollSpec.js @@ -1,12 +1,12 @@ /*global defineSuite*/ defineSuite([ - 'Core/HeadingPitchRoll', - 'Core/Math', - 'Core/Quaternion' -], function( - HeadingPitchRoll, - CesiumMath, - Quaternion) { + 'Core/HeadingPitchRoll', + 'Core/Math', + 'Core/Quaternion' + ], function( + HeadingPitchRoll, + CesiumMath, + Quaternion) { "use strict"; /*global it,expect*/ diff --git a/Specs/Core/Matrix3Spec.js b/Specs/Core/Matrix3Spec.js index 213593f49e66..df3c4c009bc3 100644 --- a/Specs/Core/Matrix3Spec.js +++ b/Specs/Core/Matrix3Spec.js @@ -1,16 +1,16 @@ /*global defineSuite*/ defineSuite([ - 'Core/Matrix3', - 'Core/Cartesian3', - 'Core/Math', - 'Core/HeadingPitchRoll', - 'Core/Quaternion' -], function( - Matrix3, - Cartesian3, - CesiumMath, - HeadingPitchRoll, - Quaternion) { + 'Core/Matrix3', + 'Core/Cartesian3', + 'Core/HeadingPitchRoll', + 'Core/Math', + 'Core/Quaternion' + ], function( + Matrix3, + Cartesian3, + HeadingPitchRoll, + CesiumMath, + Quaternion) { 'use strict'; it('default constructor creates values array with all zeros.', function() { diff --git a/Specs/Core/TransformsSpec.js b/Specs/Core/TransformsSpec.js index 40221fc9bc1f..f6be7aa1abf8 100644 --- a/Specs/Core/TransformsSpec.js +++ b/Specs/Core/TransformsSpec.js @@ -1,46 +1,46 @@ /*global defineSuite*/ defineSuite([ - 'Core/Transforms', - 'Core/Cartesian2', - 'Core/Cartesian3', - 'Core/Cartesian4', - 'Core/defined', - 'Core/DeveloperError', - 'Core/EarthOrientationParameters', - 'Core/Ellipsoid', - 'Core/GeographicProjection', - 'Core/HeadingPitchRoll', - 'Core/Iau2006XysData', - 'Core/JulianDate', - 'Core/loadJson', - 'Core/Math', - 'Core/Matrix3', - 'Core/Matrix4', - 'Core/Quaternion', - 'Core/TimeConstants', - 'Core/TimeInterval', - 'ThirdParty/when' -], function( - Transforms, - Cartesian2, - Cartesian3, - Cartesian4, - defined, - DeveloperError, - EarthOrientationParameters, - Ellipsoid, - GeographicProjection, - HeadingPitchRoll, - Iau2006XysData, - JulianDate, - loadJson, - CesiumMath, - Matrix3, - Matrix4, - Quaternion, - TimeConstants, - TimeInterval, - when) { + 'Core/Transforms', + 'Core/Cartesian2', + 'Core/Cartesian3', + 'Core/Cartesian4', + 'Core/defined', + 'Core/DeveloperError', + 'Core/EarthOrientationParameters', + 'Core/Ellipsoid', + 'Core/GeographicProjection', + 'Core/HeadingPitchRoll', + 'Core/Iau2006XysData', + 'Core/JulianDate', + 'Core/loadJson', + 'Core/Math', + 'Core/Matrix3', + 'Core/Matrix4', + 'Core/Quaternion', + 'Core/TimeConstants', + 'Core/TimeInterval', + 'ThirdParty/when' + ], function( + Transforms, + Cartesian2, + Cartesian3, + Cartesian4, + defined, + DeveloperError, + EarthOrientationParameters, + Ellipsoid, + GeographicProjection, + HeadingPitchRoll, + Iau2006XysData, + JulianDate, + loadJson, + CesiumMath, + Matrix3, + Matrix4, + Quaternion, + TimeConstants, + TimeInterval, + when) { 'use strict'; var negativeX = new Cartesian4(-1, 0, 0, 0); diff --git a/Specs/Core/TrustedServersSpec.js b/Specs/Core/TrustedServersSpec.js index 0eee872ec672..164b9b0340aa 100644 --- a/Specs/Core/TrustedServersSpec.js +++ b/Specs/Core/TrustedServersSpec.js @@ -1,8 +1,8 @@ /*global defineSuite*/ defineSuite([ - 'Core/TrustedServers' -], function( - TrustedServers) { + 'Core/TrustedServers' + ], function( + TrustedServers) { 'use strict'; afterEach(function() { diff --git a/Specs/DataSources/EntityClusterSpec.js b/Specs/DataSources/EntityClusterSpec.js index 665343f1c236..21e3a2a1272a 100644 --- a/Specs/DataSources/EntityClusterSpec.js +++ b/Specs/DataSources/EntityClusterSpec.js @@ -14,6 +14,7 @@ defineSuite([ 'Specs/createCanvas', 'Specs/createGlobe', 'Specs/createScene', + ], function( EntityCluster, Cartesian2, diff --git a/Specs/DataSources/PolylineVolumeGeometryUpdaterSpec.js b/Specs/DataSources/PolylineVolumeGeometryUpdaterSpec.js index 27618dda0ddf..b577d0a96abe 100644 --- a/Specs/DataSources/PolylineVolumeGeometryUpdaterSpec.js +++ b/Specs/DataSources/PolylineVolumeGeometryUpdaterSpec.js @@ -5,9 +5,9 @@ defineSuite([ 'Core/Cartesian3', 'Core/Color', 'Core/ColorGeometryInstanceAttribute', + 'Core/CornerType', 'Core/DistanceDisplayCondition', 'Core/DistanceDisplayConditionGeometryInstanceAttribute', - 'Core/CornerType', 'Core/JulianDate', 'Core/ShowGeometryInstanceAttribute', 'Core/TimeInterval', @@ -31,9 +31,9 @@ defineSuite([ Cartesian3, Color, ColorGeometryInstanceAttribute, + CornerType, DistanceDisplayCondition, DistanceDisplayConditionGeometryInstanceAttribute, - CornerType, JulianDate, ShowGeometryInstanceAttribute, TimeInterval, diff --git a/Specs/Scene/BatchTableSpec.js b/Specs/Scene/BatchTableSpec.js index 87b1fdaeffff..015fa808b21d 100644 --- a/Specs/Scene/BatchTableSpec.js +++ b/Specs/Scene/BatchTableSpec.js @@ -1,18 +1,18 @@ /*global defineSuite*/ defineSuite([ - 'Scene/BatchTable', - 'Core/Cartesian4', - 'Core/ComponentDatatype', - 'Renderer/PixelDatatype', - 'Renderer/Texture', - 'Specs/createScene' -], function( - BatchTable, - Cartesian4, - ComponentDatatype, - PixelDatatype, - Texture, - createScene) { + 'Scene/BatchTable', + 'Core/Cartesian4', + 'Core/ComponentDatatype', + 'Renderer/PixelDatatype', + 'Renderer/Texture', + 'Specs/createScene' + ], function( + BatchTable, + Cartesian4, + ComponentDatatype, + PixelDatatype, + Texture, + createScene) { 'use strict'; var unsignedByteAttributes = [{ diff --git a/Specs/Scene/LabelCollectionSpec.js b/Specs/Scene/LabelCollectionSpec.js index 81a460109812..3b61582483be 100644 --- a/Specs/Scene/LabelCollectionSpec.js +++ b/Specs/Scene/LabelCollectionSpec.js @@ -13,9 +13,9 @@ defineSuite([ 'Core/NearFarScalar', 'Core/Rectangle', 'Renderer/ContextLimits', + 'Scene/Globe', 'Scene/HeightReference', 'Scene/HorizontalOrigin', - 'Scene/Globe', 'Scene/Label', 'Scene/LabelStyle', 'Scene/OrthographicFrustum', @@ -36,9 +36,9 @@ defineSuite([ NearFarScalar, Rectangle, ContextLimits, + Globe, HeightReference, HorizontalOrigin, - Globe, Label, LabelStyle, OrthographicFrustum, diff --git a/Specs/Scene/PrimitiveSpec.js b/Specs/Scene/PrimitiveSpec.js index dc3ded46321b..6d491c2c00ea 100644 --- a/Specs/Scene/PrimitiveSpec.js +++ b/Specs/Scene/PrimitiveSpec.js @@ -6,6 +6,7 @@ defineSuite([ 'Core/Cartesian3', 'Core/ColorGeometryInstanceAttribute', 'Core/ComponentDatatype', + 'Core/CylinderGeometry', 'Core/defined', 'Core/DistanceDisplayConditionGeometryInstanceAttribute', 'Core/Ellipsoid', @@ -17,7 +18,6 @@ defineSuite([ 'Core/Math', 'Core/Matrix4', 'Core/PolygonGeometry', - 'Core/CylinderGeometry', 'Core/PrimitiveType', 'Core/Rectangle', 'Core/RectangleGeometry', @@ -39,6 +39,7 @@ defineSuite([ Cartesian3, ColorGeometryInstanceAttribute, ComponentDatatype, + CylinderGeometry, defined, DistanceDisplayConditionGeometryInstanceAttribute, Ellipsoid, @@ -50,7 +51,6 @@ defineSuite([ CesiumMath, Matrix4, PolygonGeometry, - CylinderGeometry, PrimitiveType, Rectangle, RectangleGeometry, diff --git a/Specs/Scene/QuadtreePrimitiveSpec.js b/Specs/Scene/QuadtreePrimitiveSpec.js index 3a5641b3939b..03647b5f9b03 100644 --- a/Specs/Scene/QuadtreePrimitiveSpec.js +++ b/Specs/Scene/QuadtreePrimitiveSpec.js @@ -9,8 +9,8 @@ defineSuite([ 'Core/Visibility', 'Scene/QuadtreeTile', 'Scene/QuadtreeTileLoadState', - 'Specs/pollToPromise', - 'Specs/createScene' + 'Specs/createScene', + 'Specs/pollToPromise' ], function( QuadtreePrimitive, Cartesian3, @@ -21,8 +21,8 @@ defineSuite([ Visibility, QuadtreeTile, QuadtreeTileLoadState, - pollToPromise, - createScene) { + createScene, + pollToPromise) { 'use strict'; var scene; diff --git a/Specs/Scene/SceneTransformsSpec.js b/Specs/Scene/SceneTransformsSpec.js index de674888cb81..3592c301d076 100644 --- a/Specs/Scene/SceneTransformsSpec.js +++ b/Specs/Scene/SceneTransformsSpec.js @@ -1,23 +1,23 @@ /*global defineSuite*/ defineSuite([ 'Scene/SceneTransforms', - 'Scene/SceneMode', 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Ellipsoid', 'Core/Math', 'Core/Rectangle', 'Scene/Camera', + 'Scene/SceneMode', 'Specs/createScene' ], function( SceneTransforms, - SceneMode, Cartesian2, Cartesian3, Ellipsoid, CesiumMath, Rectangle, Camera, + SceneMode, createScene) { 'use strict'; From 772583067ed2011897eec9ab77fa03c394e71ecd Mon Sep 17 00:00:00 2001 From: Dan Bagnell Date: Tue, 15 Nov 2016 19:25:11 -0500 Subject: [PATCH 090/103] Remove inserted whitespace because of extra commas. --- Source/Core/HeightmapTessellator.js | 3 +-- Specs/DataSources/EntityClusterSpec.js | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Source/Core/HeightmapTessellator.js b/Source/Core/HeightmapTessellator.js index 40406b0fa194..fa222bf44dde 100644 --- a/Source/Core/HeightmapTessellator.js +++ b/Source/Core/HeightmapTessellator.js @@ -16,8 +16,7 @@ define([ './Rectangle', './TerrainEncoding', './Transforms', - './WebMercatorProjection', - + './WebMercatorProjection' ], function( AxisAlignedBoundingBox, BoundingSphere, diff --git a/Specs/DataSources/EntityClusterSpec.js b/Specs/DataSources/EntityClusterSpec.js index 21e3a2a1272a..466323b543a4 100644 --- a/Specs/DataSources/EntityClusterSpec.js +++ b/Specs/DataSources/EntityClusterSpec.js @@ -13,8 +13,7 @@ defineSuite([ 'Scene/SceneTransforms', 'Specs/createCanvas', 'Specs/createGlobe', - 'Specs/createScene', - + 'Specs/createScene' ], function( EntityCluster, Cartesian2, From 999fea8481964d71350c2e3200f6b6fdacd8bf4f Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Thu, 17 Nov 2016 19:39:15 -0500 Subject: [PATCH 091/103] chore(package): update aws-sdk to version 2.7.4 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e9d26247c3b8..87caf0f7d491 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "devDependencies": { "almond": "0.3.3", - "aws-sdk": "2.7.0", + "aws-sdk": "2.7.4", "bluebird": "3.4.6", "compressible": "2.0.9", "compression": "1.6.2", From 3cf0309a377d410e44fc94c14f1419bc87e9d0f3 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 18 Nov 2016 12:30:41 -0500 Subject: [PATCH 092/103] chore(package): update request to version 2.79.0 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e9d26247c3b8..d6b2c2ca91f5 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "karma-spec-reporter": "0.0.26", "mime": "1.3.4", "mkdirp": "0.5.1", - "request": "2.78.0", + "request": "2.79.0", "rimraf": "2.5.4", "strip-comments": "0.3.2", "yargs": "6.3.0" From 5034a2a4d5965b7a799e9d5743792857a3d7cfd9 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 18 Nov 2016 13:37:33 -0500 Subject: [PATCH 093/103] chore(package): update electron to version 1.4.7 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d6b2c2ca91f5..f8194d4969a1 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "bluebird": "3.4.6", "compressible": "2.0.9", "compression": "1.6.2", - "electron": "1.4.6", + "electron": "1.4.7", "event-stream": "3.3.4", "express": "4.14.0", "globby": "6.1.0", From 97012d838614ec97de17c70449b20021df909e36 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Fri, 18 Nov 2016 13:37:55 -0500 Subject: [PATCH 094/103] chore(package): update gulp-jshint to version 2.0.3 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bc3b6d5ae69c..1d46905f063a 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "globby": "6.1.0", "gulp": "3.9.1", "gulp-insert": "0.5.0", - "gulp-jshint": "2.0.2", + "gulp-jshint": "2.0.3", "gulp-rename": "1.2.2", "gulp-replace": "0.5.4", "gulp-zip": "3.0.2", From 0684fdca02fd482d78fb9a141f72cc233244cf97 Mon Sep 17 00:00:00 2001 From: greenkeeperio-bot Date: Mon, 21 Nov 2016 18:35:37 -0500 Subject: [PATCH 095/103] chore(package): update aws-sdk to version 2.7.6 https://greenkeeper.io/ --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bc120682b606..6c6c0e004d41 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ }, "devDependencies": { "almond": "0.3.3", - "aws-sdk": "2.7.4", + "aws-sdk": "2.7.6", "bluebird": "3.4.6", "compressible": "2.0.9", "compression": "1.6.2", From 8ba5ce179717e887a8bea1dc148ed2432f00efd3 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Fri, 28 Oct 2016 14:37:31 +0200 Subject: [PATCH 096/103] Remove unused require --- Apps/CesiumViewer/CesiumViewer.js | 2 -- Source/Core/AttributeCompression.js | 2 -- Source/Core/BoundingSphere.js | 2 -- Source/Core/CesiumTerrainProvider.js | 4 --- Source/Core/CircleGeometry.js | 2 -- Source/Core/CorridorGeometryLibrary.js | 2 -- Source/Core/DistanceDisplayCondition.js | 2 -- Source/Core/EllipsoidTangentPlane.js | 2 -- Source/Core/GeometryPipeline.js | 2 -- Source/Core/Matrix3.js | 2 -- Source/Core/PolygonGeometry.js | 2 -- Source/Core/PolygonGeometryLibrary.js | 4 --- Source/Core/PolygonPipeline.js | 6 ----- Source/Core/TaskProcessor.js | 2 -- Source/Core/TerrainEncoding.js | 2 -- Source/Core/TranslationRotationScale.js | 2 -- Source/Core/TrustedServers.js | 2 -- Source/Core/VideoSynchronizer.js | 4 --- Source/DataSources/BillboardVisualizer.js | 4 --- Source/DataSources/ColorMaterialProperty.js | 2 -- Source/DataSources/ConstantProperty.js | 4 --- Source/DataSources/CylinderGeometryUpdater.js | 2 -- Source/DataSources/DataSourceDisplay.js | 2 -- Source/DataSources/EntityCluster.js | 22 ++-------------- Source/DataSources/EntityView.js | 4 --- Source/DataSources/KmlDataSource.js | 2 -- Source/DataSources/LabelVisualizer.js | 2 -- Source/DataSources/PointVisualizer.js | 4 --- .../PolylineArrowMaterialProperty.js | 2 -- Source/DataSources/PolylineGeometryUpdater.js | 2 -- Source/DataSources/Property.js | 6 ++--- .../StaticGroundGeometryColorBatch.js | 2 -- .../VelocityOrientationProperty.js | 2 -- Source/Renderer/ComputeCommand.js | 2 -- Source/Renderer/ComputeEngine.js | 12 --------- Source/Renderer/Context.js | 8 ------ Source/Renderer/CubeMap.js | 6 ++--- Source/Renderer/PassState.js | 5 +--- Source/Renderer/RenderState.js | 2 -- Source/Renderer/Texture.js | 2 -- Source/Renderer/createUniformArray.js | 2 -- .../Scene/ArcGisMapServerImageryProvider.js | 2 -- Source/Scene/DebugCameraPrimitive.js | 2 -- .../DeviceOrientationCameraController.js | 2 -- Source/Scene/GetFeatureInfoFormat.js | 2 -- Source/Scene/Globe.js | 2 -- Source/Scene/GlobeDepth.js | 2 -- Source/Scene/GlobeSurfaceTile.js | 6 ----- Source/Scene/GlobeSurfaceTileProvider.js | 6 ----- Source/Scene/GroundPrimitive.js | 8 ------ Source/Scene/ImageryLayer.js | 16 ------------ Source/Scene/LabelCollection.js | 2 -- Source/Scene/Model.js | 2 -- Source/Scene/ModelNode.js | 2 -- Source/Scene/OrthographicFrustum.js | 2 -- Source/Scene/PerformanceDisplay.js | 2 -- Source/Scene/PerspectiveOffCenterFrustum.js | 4 --- Source/Scene/PickDepth.js | 8 ++---- Source/Scene/PointAppearance.js | 2 -- Source/Scene/PointPrimitiveCollection.js | 4 --- Source/Scene/Primitive.js | 6 ----- Source/Scene/PrimitivePipeline.js | 4 --- Source/Scene/SceneTransitioner.js | 4 --- Source/Scene/ShadowMap.js | 4 --- Source/Scene/ShadowMapShader.js | 2 -- Source/Scene/Sun.js | 8 ------ Source/Scene/TextureAtlas.js | 2 -- Source/Scene/TileTerrain.js | 2 -- Source/Scene/UrlTemplateImageryProvider.js | 4 --- .../createTileMapServiceImageryProvider.js | 6 ----- .../CesiumInspectorViewModel.js | 2 -- Source/Widgets/Geocoder/GeocoderViewModel.js | 2 -- .../Widgets/HomeButton/HomeButtonViewModel.js | 12 --------- Source/Widgets/Viewer/Viewer.js | 4 --- Source/Widgets/Viewer/viewerDragDropMixin.js | 2 -- Source/Workers/createGeometry.js | 2 -- .../createVerticesFromQuantizedTerrainMesh.js | 2 -- Specs/Core/AxisAlignedBoundingBoxSpec.js | 2 -- Specs/Core/BoundingSphereSpec.js | 2 -- Specs/Core/CesiumTerrainProviderSpec.js | 4 --- Specs/Core/ClockSpec.js | 6 ++--- Specs/Core/DistanceDisplayConditionSpec.js | 8 ++---- Specs/Core/EllipsoidTangentPlaneSpec.js | 10 ++----- Specs/Core/HeightmapTerrainDataSpec.js | 8 ++---- Specs/Core/OrientedBoundingBoxSpec.js | 4 --- Specs/Core/PinBuilderSpec.js | 2 -- Specs/Core/PolylineGeometrySpec.js | 2 -- Specs/Core/QuantizedMeshTerrainDataSpec.js | 2 -- Specs/Core/TerrainEncodingSpec.js | 2 -- Specs/Core/TransformsSpec.js | 12 ++------- Specs/Core/TranslationRotationScaleSpec.js | 2 -- Specs/Core/VRTheWorldTerrainProviderSpec.js | 2 -- Specs/Core/loadImageFromTypedArraySpec.js | 8 ++---- Specs/Core/loadImageSpec.js | 2 -- Specs/Core/loadImageViaBlobSpec.js | 2 -- Specs/Core/loadJsonpSpec.js | 6 ++--- Specs/Core/loadWithXhrSpec.js | 6 ++--- Specs/Core/sampleTerrainSpec.js | 6 ++--- Specs/DataSources/BillboardVisualizerSpec.js | 2 -- Specs/DataSources/CallbackPropertySpec.js | 2 -- Specs/DataSources/CzmlDataSourceSpec.js | 4 --- Specs/DataSources/LabelVisualizerSpec.js | 2 -- .../PolylineGeometryUpdaterSpec.js | 2 -- .../PolylineVolumeGeometryUpdaterSpec.js | 2 -- Specs/Renderer/SamplerSpec.js | 2 -- Specs/Renderer/ShaderProgramSpec.js | 14 ---------- Specs/Renderer/loadCubeMapSpec.js | 8 ++---- .../ArcGisMapServerImageryProviderSpec.js | 2 -- Specs/Scene/BillboardCollectionSpec.js | 10 ------- Specs/Scene/CameraEventAggregatorSpec.js | 2 -- Specs/Scene/CameraFlightPathSpec.js | 4 --- Specs/Scene/DebugAppearanceSpec.js | 2 -- Specs/Scene/DebugModelMatrixPrimitiveSpec.js | 2 -- .../DiscardMissingTileImagePolicySpec.js | 2 -- Specs/Scene/EllipsoidPrimitiveSpec.js | 2 -- Specs/Scene/EllipsoidSurfaceAppearanceSpec.js | 2 -- Specs/Scene/GeometryRenderingSpec.js | 6 ----- Specs/Scene/GlobeSpec.js | 4 --- Specs/Scene/GlobeSurfaceTileProviderSpec.js | 4 --- Specs/Scene/GoogleEarthImageryProviderSpec.js | 2 -- Specs/Scene/GroundPrimitiveSpec.js | 24 ----------------- Specs/Scene/ImageryLayerSpec.js | 2 -- Specs/Scene/LabelCollectionSpec.js | 6 ----- Specs/Scene/MaterialAppearanceSpec.js | 2 -- Specs/Scene/MaterialSpec.js | 12 --------- Specs/Scene/ModelSpec.js | 2 -- Specs/Scene/MoonSpec.js | 4 --- Specs/Scene/PerInstanceColorAppearanceSpec.js | 2 -- Specs/Scene/PickSpec.js | 8 ------ Specs/Scene/PointPrimitiveCollectionSpec.js | 2 -- Specs/Scene/PrimitiveCollectionSpec.js | 6 ----- Specs/Scene/PrimitiveCullingSpec.js | 26 ------------------- Specs/Scene/PrimitiveSpec.js | 4 --- .../Scene/ScreenSpaceCameraControllerSpec.js | 2 -- Specs/Scene/SkyAtmosphereSpec.js | 2 -- Specs/Scene/SkyBoxSpec.js | 4 --- Specs/Scene/SunSpec.js | 6 ----- .../TileCoordinatesImageryProviderSpec.js | 2 -- Specs/Scene/ViewportQuadSpec.js | 2 -- .../Scene/WebMapServiceImageryProviderSpec.js | 8 ++---- .../WebMapTileServiceImageryProviderSpec.js | 2 -- .../createOpenStreetMapImageryProviderSpec.js | 2 -- .../CesiumInspectorViewModelSpec.js | 2 -- Specs/Widgets/InfoBox/InfoBoxViewModelSpec.js | 6 ++--- Specs/Widgets/SvgPathBindingHandlerSpec.js | 2 -- Specs/Widgets/Viewer/ViewerSpec.js | 2 -- Specs/createPackableArraySpecs.js | 6 ++--- Specs/createScene.js | 2 -- Specs/render.js | 2 -- 149 files changed, 35 insertions(+), 588 deletions(-) diff --git a/Apps/CesiumViewer/CesiumViewer.js b/Apps/CesiumViewer/CesiumViewer.js index 1f3880728728..9d0cbfeb9ff5 100644 --- a/Apps/CesiumViewer/CesiumViewer.js +++ b/Apps/CesiumViewer/CesiumViewer.js @@ -3,7 +3,6 @@ define([ 'Cesium/Core/Cartesian3', 'Cesium/Core/defined', 'Cesium/Core/formatError', - 'Cesium/Core/getFilenameFromUri', 'Cesium/Core/Math', 'Cesium/Core/objectToQuery', 'Cesium/Core/queryToObject', @@ -19,7 +18,6 @@ define([ Cartesian3, defined, formatError, - getFilenameFromUri, CesiumMath, objectToQuery, queryToObject, diff --git a/Source/Core/AttributeCompression.js b/Source/Core/AttributeCompression.js index d5e6973d29cf..0d943901ceec 100644 --- a/Source/Core/AttributeCompression.js +++ b/Source/Core/AttributeCompression.js @@ -2,14 +2,12 @@ define([ './Cartesian2', './Cartesian3', - './defaultValue', './defined', './DeveloperError', './Math' ], function( Cartesian2, Cartesian3, - defaultValue, defined, DeveloperError, CesiumMath) { diff --git a/Source/Core/BoundingSphere.js b/Source/Core/BoundingSphere.js index 78f7ddf1abba..5c729fd38142 100644 --- a/Source/Core/BoundingSphere.js +++ b/Source/Core/BoundingSphere.js @@ -11,7 +11,6 @@ define([ './Interval', './Matrix3', './Matrix4', - './Plane', './Rectangle' ], function( Cartesian3, @@ -25,7 +24,6 @@ define([ Interval, Matrix3, Matrix4, - Plane, Rectangle) { 'use strict'; diff --git a/Source/Core/CesiumTerrainProvider.js b/Source/Core/CesiumTerrainProvider.js index 61955ae9bd01..ef6f4e3e9f9b 100644 --- a/Source/Core/CesiumTerrainProvider.js +++ b/Source/Core/CesiumTerrainProvider.js @@ -17,10 +17,8 @@ define([ './loadArrayBuffer', './loadJson', './Math', - './Matrix3', './OrientedBoundingBox', './QuantizedMeshTerrainData', - './RuntimeError', './TerrainProvider', './throttleRequestByServer', './TileProviderError' @@ -42,10 +40,8 @@ define([ loadArrayBuffer, loadJson, CesiumMath, - Matrix3, OrientedBoundingBox, QuantizedMeshTerrainData, - RuntimeError, TerrainProvider, throttleRequestByServer, TileProviderError) { diff --git a/Source/Core/CircleGeometry.js b/Source/Core/CircleGeometry.js index bd225683229b..8aa557d4c33b 100644 --- a/Source/Core/CircleGeometry.js +++ b/Source/Core/CircleGeometry.js @@ -7,7 +7,6 @@ define([ './DeveloperError', './EllipseGeometry', './Ellipsoid', - './Math', './VertexFormat' ], function( Cartesian3, @@ -17,7 +16,6 @@ define([ DeveloperError, EllipseGeometry, Ellipsoid, - CesiumMath, VertexFormat) { 'use strict'; diff --git a/Source/Core/CorridorGeometryLibrary.js b/Source/Core/CorridorGeometryLibrary.js index 5631968ee32b..7ffd2953ded6 100644 --- a/Source/Core/CorridorGeometryLibrary.js +++ b/Source/Core/CorridorGeometryLibrary.js @@ -3,7 +3,6 @@ define([ './Cartesian3', './CornerType', './defined', - './isArray', './Math', './Matrix3', './PolylinePipeline', @@ -13,7 +12,6 @@ define([ Cartesian3, CornerType, defined, - isArray, CesiumMath, Matrix3, PolylinePipeline, diff --git a/Source/Core/DistanceDisplayCondition.js b/Source/Core/DistanceDisplayCondition.js index 87ae8d9b8204..6c0a1df9e36c 100644 --- a/Source/Core/DistanceDisplayCondition.js +++ b/Source/Core/DistanceDisplayCondition.js @@ -1,11 +1,9 @@ /*global define*/ define([ - './Cartesian3', './defaultValue', './defined', './defineProperties' ], function( - Cartesian3, defaultValue, defined, defineProperties) { diff --git a/Source/Core/EllipsoidTangentPlane.js b/Source/Core/EllipsoidTangentPlane.js index 1533ca94f703..c2c178566c18 100644 --- a/Source/Core/EllipsoidTangentPlane.js +++ b/Source/Core/EllipsoidTangentPlane.js @@ -10,7 +10,6 @@ define([ './DeveloperError', './Ellipsoid', './IntersectionTests', - './Matrix3', './Matrix4', './Plane', './Ray', @@ -26,7 +25,6 @@ define([ DeveloperError, Ellipsoid, IntersectionTests, - Matrix3, Matrix4, Plane, Ray, diff --git a/Source/Core/GeometryPipeline.js b/Source/Core/GeometryPipeline.js index 6252e4d763ed..c27a9dda80cd 100644 --- a/Source/Core/GeometryPipeline.js +++ b/Source/Core/GeometryPipeline.js @@ -15,7 +15,6 @@ define([ './GeographicProjection', './Geometry', './GeometryAttribute', - './GeometryInstance', './GeometryType', './IndexDatatype', './Intersect', @@ -42,7 +41,6 @@ define([ GeographicProjection, Geometry, GeometryAttribute, - GeometryInstance, GeometryType, IndexDatatype, Intersect, diff --git a/Source/Core/Matrix3.js b/Source/Core/Matrix3.js index e896df174256..2faff37a7283 100644 --- a/Source/Core/Matrix3.js +++ b/Source/Core/Matrix3.js @@ -6,7 +6,6 @@ define([ './defineProperties', './DeveloperError', './freezeObject', - './HeadingPitchRoll', './Math' ], function( Cartesian3, @@ -15,7 +14,6 @@ define([ defineProperties, DeveloperError, freezeObject, - HeadingPitchRoll, CesiumMath) { 'use strict'; diff --git a/Source/Core/PolygonGeometry.js b/Source/Core/PolygonGeometry.js index 0b2d7dbca180..f8276fa5880b 100644 --- a/Source/Core/PolygonGeometry.js +++ b/Source/Core/PolygonGeometry.js @@ -14,7 +14,6 @@ define([ './EllipsoidTangentPlane', './Geometry', './GeometryAttribute', - './GeometryAttributes', './GeometryInstance', './GeometryPipeline', './IndexDatatype', @@ -41,7 +40,6 @@ define([ EllipsoidTangentPlane, Geometry, GeometryAttribute, - GeometryAttributes, GeometryInstance, GeometryPipeline, IndexDatatype, diff --git a/Source/Core/PolygonGeometryLibrary.js b/Source/Core/PolygonGeometryLibrary.js index 1a08ae5e9955..f36e24764715 100644 --- a/Source/Core/PolygonGeometryLibrary.js +++ b/Source/Core/PolygonGeometryLibrary.js @@ -1,13 +1,11 @@ /*global define*/ define([ './arrayRemoveDuplicates', - './Cartesian2', './Cartesian3', './ComponentDatatype', './defaultValue', './defined', './Ellipsoid', - './EllipsoidTangentPlane', './Geometry', './GeometryAttribute', './GeometryAttributes', @@ -20,13 +18,11 @@ define([ './WindingOrder' ], function( arrayRemoveDuplicates, - Cartesian2, Cartesian3, ComponentDatatype, defaultValue, defined, Ellipsoid, - EllipsoidTangentPlane, Geometry, GeometryAttribute, GeometryAttributes, diff --git a/Source/Core/PolygonPipeline.js b/Source/Core/PolygonPipeline.js index 3f3bb509e9dc..6ed1a3e0a33b 100644 --- a/Source/Core/PolygonPipeline.js +++ b/Source/Core/PolygonPipeline.js @@ -8,13 +8,10 @@ define([ './defined', './DeveloperError', './Ellipsoid', - './EllipsoidTangentPlane', './Geometry', './GeometryAttribute', './Math', - './pointInsideTriangle', './PrimitiveType', - './Queue', './WindingOrder' ], function( earcut, @@ -25,13 +22,10 @@ define([ defined, DeveloperError, Ellipsoid, - EllipsoidTangentPlane, Geometry, GeometryAttribute, CesiumMath, - pointInsideTriangle, PrimitiveType, - Queue, WindingOrder) { 'use strict'; diff --git a/Source/Core/TaskProcessor.js b/Source/Core/TaskProcessor.js index 2beefbcac620..0a7edeb4220c 100644 --- a/Source/Core/TaskProcessor.js +++ b/Source/Core/TaskProcessor.js @@ -1,6 +1,5 @@ /*global define*/ define([ - '../ThirdParty/Uri', '../ThirdParty/when', './buildModuleUrl', './defaultValue', @@ -12,7 +11,6 @@ define([ './RuntimeError', 'require' ], function( - Uri, when, buildModuleUrl, defaultValue, diff --git a/Source/Core/TerrainEncoding.js b/Source/Core/TerrainEncoding.js index 9241995d44e0..9b91b0f1c9e9 100644 --- a/Source/Core/TerrainEncoding.js +++ b/Source/Core/TerrainEncoding.js @@ -7,7 +7,6 @@ define([ './defaultValue', './defined', './Math', - './Matrix3', './Matrix4', './TerrainQuantization' ], function( @@ -18,7 +17,6 @@ define([ defaultValue, defined, CesiumMath, - Matrix3, Matrix4, TerrainQuantization) { 'use strict'; diff --git a/Source/Core/TranslationRotationScale.js b/Source/Core/TranslationRotationScale.js index bfbaff72d63a..dea95c42570e 100644 --- a/Source/Core/TranslationRotationScale.js +++ b/Source/Core/TranslationRotationScale.js @@ -3,13 +3,11 @@ define([ './Cartesian3', './defaultValue', './defined', - './Matrix4', './Quaternion' ], function( Cartesian3, defaultValue, defined, - Matrix4, Quaternion) { 'use strict'; diff --git a/Source/Core/TrustedServers.js b/Source/Core/TrustedServers.js index fcd08d380188..027903d86a2b 100644 --- a/Source/Core/TrustedServers.js +++ b/Source/Core/TrustedServers.js @@ -2,12 +2,10 @@ define([ '../ThirdParty/Uri', './defined', - './defineProperties', './DeveloperError' ], function( Uri, defined, - defineProperties, DeveloperError) { 'use strict'; diff --git a/Source/Core/VideoSynchronizer.js b/Source/Core/VideoSynchronizer.js index 764753983f14..0f16ff61dbc6 100644 --- a/Source/Core/VideoSynchronizer.js +++ b/Source/Core/VideoSynchronizer.js @@ -4,8 +4,6 @@ define([ './defined', './defineProperties', './destroyObject', - './DeveloperError', - './Event', './Iso8601', './JulianDate' ], function( @@ -13,8 +11,6 @@ define([ defined, defineProperties, destroyObject, - DeveloperError, - Event, Iso8601, JulianDate) { 'use strict'; diff --git a/Source/DataSources/BillboardVisualizer.js b/Source/DataSources/BillboardVisualizer.js index fdd03d1c4f08..b1595fd5dca5 100644 --- a/Source/DataSources/BillboardVisualizer.js +++ b/Source/DataSources/BillboardVisualizer.js @@ -5,7 +5,6 @@ define([ '../Core/Cartesian2', '../Core/Cartesian3', '../Core/Color', - '../Core/defaultValue', '../Core/defined', '../Core/destroyObject', '../Core/DeveloperError', @@ -15,7 +14,6 @@ define([ '../Scene/HorizontalOrigin', '../Scene/VerticalOrigin', './BoundingSphereState', - './EntityCluster', './Property' ], function( AssociativeArray, @@ -23,7 +21,6 @@ define([ Cartesian2, Cartesian3, Color, - defaultValue, defined, destroyObject, DeveloperError, @@ -33,7 +30,6 @@ define([ HorizontalOrigin, VerticalOrigin, BoundingSphereState, - EntityCluster, Property) { 'use strict'; diff --git a/Source/DataSources/ColorMaterialProperty.js b/Source/DataSources/ColorMaterialProperty.js index 2f3103a90687..dd034ef0ad6f 100644 --- a/Source/DataSources/ColorMaterialProperty.js +++ b/Source/DataSources/ColorMaterialProperty.js @@ -4,7 +4,6 @@ define([ '../Core/defined', '../Core/defineProperties', '../Core/Event', - './ConstantProperty', './createPropertyDescriptor', './Property' ], function( @@ -12,7 +11,6 @@ define([ defined, defineProperties, Event, - ConstantProperty, createPropertyDescriptor, Property) { 'use strict'; diff --git a/Source/DataSources/ConstantProperty.js b/Source/DataSources/ConstantProperty.js index 905a46007dde..39dd1257fbd0 100644 --- a/Source/DataSources/ConstantProperty.js +++ b/Source/DataSources/ConstantProperty.js @@ -1,15 +1,11 @@ /*global define*/ define([ - '../Core/defaultValue', '../Core/defined', '../Core/defineProperties', - '../Core/DeveloperError', '../Core/Event' ], function( - defaultValue, defined, defineProperties, - DeveloperError, Event) { 'use strict'; diff --git a/Source/DataSources/CylinderGeometryUpdater.js b/Source/DataSources/CylinderGeometryUpdater.js index 6556de373db0..669606b4c4bb 100644 --- a/Source/DataSources/CylinderGeometryUpdater.js +++ b/Source/DataSources/CylinderGeometryUpdater.js @@ -1,6 +1,5 @@ /*global define*/ define([ - '../Core/Cartesian3', '../Core/Color', '../Core/ColorGeometryInstanceAttribute', '../Core/CylinderGeometry', @@ -26,7 +25,6 @@ define([ './MaterialProperty', './Property' ], function( - Cartesian3, Color, ColorGeometryInstanceAttribute, CylinderGeometry, diff --git a/Source/DataSources/DataSourceDisplay.js b/Source/DataSources/DataSourceDisplay.js index edc756aa425b..3ca8cef027f0 100644 --- a/Source/DataSources/DataSourceDisplay.js +++ b/Source/DataSources/DataSourceDisplay.js @@ -16,7 +16,6 @@ define([ './CylinderGeometryUpdater', './EllipseGeometryUpdater', './EllipsoidGeometryUpdater', - './EntityCluster', './GeometryVisualizer', './LabelVisualizer', './ModelVisualizer', @@ -44,7 +43,6 @@ define([ CylinderGeometryUpdater, EllipseGeometryUpdater, EllipsoidGeometryUpdater, - EntityCluster, GeometryVisualizer, LabelVisualizer, ModelVisualizer, diff --git a/Source/DataSources/EntityCluster.js b/Source/DataSources/EntityCluster.js index 9db3ae94b549..e3d4641b965d 100644 --- a/Source/DataSources/EntityCluster.js +++ b/Source/DataSources/EntityCluster.js @@ -3,54 +3,36 @@ define([ '../Core/BoundingRectangle', '../Core/Cartesian2', '../Core/Cartesian3', - '../Core/Color', '../Core/defaultValue', '../Core/defined', '../Core/defineProperties', - '../Core/destroyObject', '../Core/EllipsoidalOccluder', '../Core/Event', '../Core/Matrix4', '../Scene/Billboard', '../Scene/BillboardCollection', - '../Scene/HeightReference', - '../Scene/HorizontalOrigin', '../Scene/Label', '../Scene/LabelCollection', - '../Scene/LabelStyle', '../Scene/PointPrimitive', '../Scene/PointPrimitiveCollection', - '../Scene/SceneTransforms', - '../Scene/VerticalOrigin', - '../ThirdParty/kdbush', - './Entity', - './Property' + '../ThirdParty/kdbush' ], function( BoundingRectangle, Cartesian2, Cartesian3, - Color, defaultValue, defined, defineProperties, - destroyObject, EllipsoidalOccluder, Event, Matrix4, Billboard, BillboardCollection, - HeightReference, - HorizontalOrigin, Label, LabelCollection, - LabelStyle, PointPrimitive, PointPrimitiveCollection, - SceneTransforms, - VerticalOrigin, - kdbush, - Entity, - Property) { + kdbush) { 'use strict'; /** diff --git a/Source/DataSources/EntityView.js b/Source/DataSources/EntityView.js index f8f07f593871..e6653e3fa8d9 100644 --- a/Source/DataSources/EntityView.js +++ b/Source/DataSources/EntityView.js @@ -1,8 +1,6 @@ /*global define*/ define([ - '../Core/BoundingSphere', '../Core/Cartesian3', - '../Core/Cartesian4', '../Core/defaultValue', '../Core/defined', '../Core/defineProperties', @@ -16,9 +14,7 @@ define([ '../Core/Transforms', '../Scene/SceneMode' ], function( - BoundingSphere, Cartesian3, - Cartesian4, defaultValue, defined, defineProperties, diff --git a/Source/DataSources/KmlDataSource.js b/Source/DataSources/KmlDataSource.js index 8f9342107d32..0df12a27e333 100644 --- a/Source/DataSources/KmlDataSource.js +++ b/Source/DataSources/KmlDataSource.js @@ -41,7 +41,6 @@ define([ '../ThirdParty/zip', './BillboardGraphics', './CompositePositionProperty', - './ConstantPositionProperty', './CorridorGraphics', './DataSource', './DataSourceClock', @@ -101,7 +100,6 @@ define([ zip, BillboardGraphics, CompositePositionProperty, - ConstantPositionProperty, CorridorGraphics, DataSource, DataSourceClock, diff --git a/Source/DataSources/LabelVisualizer.js b/Source/DataSources/LabelVisualizer.js index 0042865047ca..7689eeff192b 100644 --- a/Source/DataSources/LabelVisualizer.js +++ b/Source/DataSources/LabelVisualizer.js @@ -15,7 +15,6 @@ define([ '../Scene/LabelStyle', '../Scene/VerticalOrigin', './BoundingSphereState', - './EntityCluster', './Property' ], function( AssociativeArray, @@ -33,7 +32,6 @@ define([ LabelStyle, VerticalOrigin, BoundingSphereState, - EntityCluster, Property) { 'use strict'; diff --git a/Source/DataSources/PointVisualizer.js b/Source/DataSources/PointVisualizer.js index 72cd7a7e3a90..f287439389dc 100644 --- a/Source/DataSources/PointVisualizer.js +++ b/Source/DataSources/PointVisualizer.js @@ -3,7 +3,6 @@ define([ '../Core/AssociativeArray', '../Core/Cartesian3', '../Core/Color', - '../Core/defaultValue', '../Core/defined', '../Core/destroyObject', '../Core/DeveloperError', @@ -11,13 +10,11 @@ define([ '../Core/NearFarScalar', '../Scene/HeightReference', './BoundingSphereState', - './EntityCluster', './Property' ], function( AssociativeArray, Cartesian3, Color, - defaultValue, defined, destroyObject, DeveloperError, @@ -25,7 +22,6 @@ define([ NearFarScalar, HeightReference, BoundingSphereState, - EntityCluster, Property) { 'use strict'; diff --git a/Source/DataSources/PolylineArrowMaterialProperty.js b/Source/DataSources/PolylineArrowMaterialProperty.js index 53c31faae493..5dba53c76041 100644 --- a/Source/DataSources/PolylineArrowMaterialProperty.js +++ b/Source/DataSources/PolylineArrowMaterialProperty.js @@ -4,7 +4,6 @@ define([ '../Core/defined', '../Core/defineProperties', '../Core/Event', - './ConstantProperty', './createPropertyDescriptor', './Property' ], function( @@ -12,7 +11,6 @@ define([ defined, defineProperties, Event, - ConstantProperty, createPropertyDescriptor, Property) { 'use strict'; diff --git a/Source/DataSources/PolylineGeometryUpdater.js b/Source/DataSources/PolylineGeometryUpdater.js index f0b600e34dc2..f4714c250878 100644 --- a/Source/DataSources/PolylineGeometryUpdater.js +++ b/Source/DataSources/PolylineGeometryUpdater.js @@ -10,7 +10,6 @@ define([ '../Core/DeveloperError', '../Core/DistanceDisplayCondition', '../Core/DistanceDisplayConditionGeometryInstanceAttribute', - '../Core/Ellipsoid', '../Core/Event', '../Core/GeometryInstance', '../Core/Iso8601', @@ -37,7 +36,6 @@ define([ DeveloperError, DistanceDisplayCondition, DistanceDisplayConditionGeometryInstanceAttribute, - Ellipsoid, Event, GeometryInstance, Iso8601, diff --git a/Source/DataSources/Property.js b/Source/DataSources/Property.js index 5183f79d46b8..3f201ddcda0a 100644 --- a/Source/DataSources/Property.js +++ b/Source/DataSources/Property.js @@ -3,14 +3,12 @@ define([ '../Core/defaultValue', '../Core/defined', '../Core/defineProperties', - '../Core/DeveloperError', - '../Core/Iso8601' + '../Core/DeveloperError' ], function( defaultValue, defined, defineProperties, - DeveloperError, - Iso8601) { + DeveloperError) { 'use strict'; /** diff --git a/Source/DataSources/StaticGroundGeometryColorBatch.js b/Source/DataSources/StaticGroundGeometryColorBatch.js index aa19dc270bba..bc0bda478422 100644 --- a/Source/DataSources/StaticGroundGeometryColorBatch.js +++ b/Source/DataSources/StaticGroundGeometryColorBatch.js @@ -2,7 +2,6 @@ define([ '../Core/AssociativeArray', '../Core/Color', - '../Core/ColorGeometryInstanceAttribute', '../Core/defined', '../Core/DistanceDisplayCondition', '../Core/DistanceDisplayConditionGeometryInstanceAttribute', @@ -13,7 +12,6 @@ define([ ], function( AssociativeArray, Color, - ColorGeometryInstanceAttribute, defined, DistanceDisplayCondition, DistanceDisplayConditionGeometryInstanceAttribute, diff --git a/Source/DataSources/VelocityOrientationProperty.js b/Source/DataSources/VelocityOrientationProperty.js index 08022a1b6277..5a23864f1b61 100644 --- a/Source/DataSources/VelocityOrientationProperty.js +++ b/Source/DataSources/VelocityOrientationProperty.js @@ -6,7 +6,6 @@ define([ '../Core/defineProperties', '../Core/Ellipsoid', '../Core/Event', - '../Core/JulianDate', '../Core/Matrix3', '../Core/Quaternion', '../Core/Transforms', @@ -19,7 +18,6 @@ define([ defineProperties, Ellipsoid, Event, - JulianDate, Matrix3, Quaternion, Transforms, diff --git a/Source/Renderer/ComputeCommand.js b/Source/Renderer/ComputeCommand.js index 0c7f29085be8..2e7678276f76 100644 --- a/Source/Renderer/ComputeCommand.js +++ b/Source/Renderer/ComputeCommand.js @@ -1,11 +1,9 @@ /*global define*/ define([ '../Core/defaultValue', - '../Core/PrimitiveType', '../Scene/Pass' ], function( defaultValue, - PrimitiveType, Pass) { 'use strict'; diff --git a/Source/Renderer/ComputeEngine.js b/Source/Renderer/ComputeEngine.js index 0a04d4a176a3..13235334a893 100644 --- a/Source/Renderer/ComputeEngine.js +++ b/Source/Renderer/ComputeEngine.js @@ -2,17 +2,11 @@ define([ '../Core/BoundingRectangle', '../Core/Color', - '../Core/ComponentDatatype', - '../Core/defaultValue', '../Core/defined', - '../Core/defineProperties', '../Core/destroyObject', '../Core/DeveloperError', - '../Core/Geometry', - '../Core/GeometryAttribute', '../Core/PrimitiveType', '../Shaders/ViewportQuadVS', - './BufferUsage', './ClearCommand', './DrawCommand', './Framebuffer', @@ -21,17 +15,11 @@ define([ ], function( BoundingRectangle, Color, - ComponentDatatype, - defaultValue, defined, - defineProperties, destroyObject, DeveloperError, - Geometry, - GeometryAttribute, PrimitiveType, ViewportQuadVS, - BufferUsage, ClearCommand, DrawCommand, Framebuffer, diff --git a/Source/Renderer/Context.js b/Source/Renderer/Context.js index 760b0d718346..ca41b53f505f 100644 --- a/Source/Renderer/Context.js +++ b/Source/Renderer/Context.js @@ -9,10 +9,8 @@ define([ '../Core/defineProperties', '../Core/destroyObject', '../Core/DeveloperError', - '../Core/FeatureDetection', '../Core/Geometry', '../Core/GeometryAttribute', - '../Core/Math', '../Core/Matrix4', '../Core/PrimitiveType', '../Core/RuntimeError', @@ -24,8 +22,6 @@ define([ './DrawCommand', './PassState', './PickFramebuffer', - './PixelDatatype', - './RenderbufferFormat', './RenderState', './ShaderCache', './ShaderProgram', @@ -43,10 +39,8 @@ define([ defineProperties, destroyObject, DeveloperError, - FeatureDetection, Geometry, GeometryAttribute, - CesiumMath, Matrix4, PrimitiveType, RuntimeError, @@ -58,8 +52,6 @@ define([ DrawCommand, PassState, PickFramebuffer, - PixelDatatype, - RenderbufferFormat, RenderState, ShaderCache, ShaderProgram, diff --git a/Source/Renderer/CubeMap.js b/Source/Renderer/CubeMap.js index 3f033e3391d8..4947d22d9e72 100644 --- a/Source/Renderer/CubeMap.js +++ b/Source/Renderer/CubeMap.js @@ -13,8 +13,7 @@ define([ './PixelDatatype', './Sampler', './TextureMagnificationFilter', - './TextureMinificationFilter', - './TextureWrap' + './TextureMinificationFilter' ], function( defaultValue, defined, @@ -29,8 +28,7 @@ define([ PixelDatatype, Sampler, TextureMagnificationFilter, - TextureMinificationFilter, - TextureWrap) { + TextureMinificationFilter) { 'use strict'; function CubeMap(options) { diff --git a/Source/Renderer/PassState.js b/Source/Renderer/PassState.js index 62d8c25c50d3..4a0e5515143a 100644 --- a/Source/Renderer/PassState.js +++ b/Source/Renderer/PassState.js @@ -1,8 +1,5 @@ /*global define*/ -define([ - '../Core/BoundingRectangle' - ], function( - BoundingRectangle) { +define([], function() { 'use strict'; /** diff --git a/Source/Renderer/RenderState.js b/Source/Renderer/RenderState.js index 523b8711e247..92aea5c35a45 100644 --- a/Source/Renderer/RenderState.js +++ b/Source/Renderer/RenderState.js @@ -5,7 +5,6 @@ define([ '../Core/defaultValue', '../Core/defined', '../Core/DeveloperError', - '../Core/RuntimeError', '../Core/WindingOrder', './ContextLimits', './WebGLConstants' @@ -15,7 +14,6 @@ define([ defaultValue, defined, DeveloperError, - RuntimeError, WindingOrder, ContextLimits, WebGLConstants) { diff --git a/Source/Renderer/Texture.js b/Source/Renderer/Texture.js index aa13b97ef5b6..bc2876a82f65 100644 --- a/Source/Renderer/Texture.js +++ b/Source/Renderer/Texture.js @@ -14,7 +14,6 @@ define([ './Sampler', './TextureMagnificationFilter', './TextureMinificationFilter', - './TextureWrap', './WebGLConstants' ], function( Cartesian2, @@ -31,7 +30,6 @@ define([ Sampler, TextureMagnificationFilter, TextureMinificationFilter, - TextureWrap, WebGLConstants) { 'use strict'; diff --git a/Source/Renderer/createUniformArray.js b/Source/Renderer/createUniformArray.js index 843aeb77060b..0a55769997ab 100644 --- a/Source/Renderer/createUniformArray.js +++ b/Source/Renderer/createUniformArray.js @@ -5,7 +5,6 @@ define([ '../Core/Cartesian4', '../Core/Color', '../Core/defined', - '../Core/defineProperties', '../Core/DeveloperError', '../Core/Matrix2', '../Core/Matrix3', @@ -17,7 +16,6 @@ define([ Cartesian4, Color, defined, - defineProperties, DeveloperError, Matrix2, Matrix3, diff --git a/Source/Scene/ArcGisMapServerImageryProvider.js b/Source/Scene/ArcGisMapServerImageryProvider.js index ac00c0c1d7c0..e8d4f067347e 100644 --- a/Source/Scene/ArcGisMapServerImageryProvider.js +++ b/Source/Scene/ArcGisMapServerImageryProvider.js @@ -9,7 +9,6 @@ define([ '../Core/defineProperties', '../Core/DeveloperError', '../Core/Event', - '../Core/GeographicProjection', '../Core/GeographicTilingScheme', '../Core/loadJson', '../Core/loadJsonp', @@ -33,7 +32,6 @@ define([ defineProperties, DeveloperError, Event, - GeographicProjection, GeographicTilingScheme, loadJson, loadJsonp, diff --git a/Source/Scene/DebugCameraPrimitive.js b/Source/Scene/DebugCameraPrimitive.js index 12df3e1ddb1b..ffcf283e6cf1 100644 --- a/Source/Scene/DebugCameraPrimitive.js +++ b/Source/Scene/DebugCameraPrimitive.js @@ -10,7 +10,6 @@ define([ '../Core/defined', '../Core/destroyObject', '../Core/DeveloperError', - '../Core/Geometry', '../Core/GeometryAttribute', '../Core/GeometryAttributes', '../Core/GeometryInstance', @@ -29,7 +28,6 @@ define([ defined, destroyObject, DeveloperError, - Geometry, GeometryAttribute, GeometryAttributes, GeometryInstance, diff --git a/Source/Scene/DeviceOrientationCameraController.js b/Source/Scene/DeviceOrientationCameraController.js index 189c125f42b9..0b026cdc0a38 100644 --- a/Source/Scene/DeviceOrientationCameraController.js +++ b/Source/Scene/DeviceOrientationCameraController.js @@ -1,6 +1,5 @@ /*global define*/ define([ - '../Core/defaultValue', '../Core/defined', '../Core/destroyObject', '../Core/DeveloperError', @@ -8,7 +7,6 @@ define([ '../Core/Matrix3', '../Core/Quaternion' ], function( - defaultValue, defined, destroyObject, DeveloperError, diff --git a/Source/Scene/GetFeatureInfoFormat.js b/Source/Scene/GetFeatureInfoFormat.js index 8c370b3ae868..c5fac1744df5 100644 --- a/Source/Scene/GetFeatureInfoFormat.js +++ b/Source/Scene/GetFeatureInfoFormat.js @@ -1,14 +1,12 @@ /*global define*/ define([ '../Core/Cartographic', - '../Core/defaultValue', '../Core/defined', '../Core/DeveloperError', '../Core/RuntimeError', './ImageryLayerFeatureInfo' ], function( Cartographic, - defaultValue, defined, DeveloperError, RuntimeError, diff --git a/Source/Scene/Globe.js b/Source/Scene/Globe.js index a3ea4f6ddd3f..ee15de74b801 100644 --- a/Source/Scene/Globe.js +++ b/Source/Scene/Globe.js @@ -12,7 +12,6 @@ define([ '../Core/Ellipsoid', '../Core/EllipsoidTerrainProvider', '../Core/Event', - '../Core/GeographicProjection', '../Core/IntersectionTests', '../Core/loadImage', '../Core/Ray', @@ -42,7 +41,6 @@ define([ Ellipsoid, EllipsoidTerrainProvider, Event, - GeographicProjection, IntersectionTests, loadImage, Ray, diff --git a/Source/Scene/GlobeDepth.js b/Source/Scene/GlobeDepth.js index e2a28db927aa..20fa390c0bdf 100644 --- a/Source/Scene/GlobeDepth.js +++ b/Source/Scene/GlobeDepth.js @@ -3,7 +3,6 @@ define([ '../Core/BoundingRectangle', '../Core/Color', '../Core/defined', - '../Core/defineProperties', '../Core/destroyObject', '../Core/PixelFormat', '../Renderer/ClearCommand', @@ -16,7 +15,6 @@ define([ BoundingRectangle, Color, defined, - defineProperties, destroyObject, PixelFormat, ClearCommand, diff --git a/Source/Scene/GlobeSurfaceTile.js b/Source/Scene/GlobeSurfaceTile.js index e88ae7e81be6..3d0a226758ac 100644 --- a/Source/Scene/GlobeSurfaceTile.js +++ b/Source/Scene/GlobeSurfaceTile.js @@ -3,13 +3,11 @@ define([ '../Core/BoundingSphere', '../Core/Cartesian3', '../Core/Cartesian4', - '../Core/Cartographic', '../Core/defaultValue', '../Core/defined', '../Core/defineProperties', '../Core/IntersectionTests', '../Core/PixelFormat', - '../Core/Rectangle', '../Renderer/PixelDatatype', '../Renderer/Sampler', '../Renderer/Texture', @@ -20,19 +18,16 @@ define([ './QuadtreeTileLoadState', './SceneMode', './TerrainState', - './TileBoundingBox', './TileTerrain' ], function( BoundingSphere, Cartesian3, Cartesian4, - Cartographic, defaultValue, defined, defineProperties, IntersectionTests, PixelFormat, - Rectangle, PixelDatatype, Sampler, Texture, @@ -43,7 +38,6 @@ define([ QuadtreeTileLoadState, SceneMode, TerrainState, - TileBoundingBox, TileTerrain) { 'use strict'; diff --git a/Source/Scene/GlobeSurfaceTileProvider.js b/Source/Scene/GlobeSurfaceTileProvider.js index ee3685490408..20f3a40ecb2f 100644 --- a/Source/Scene/GlobeSurfaceTileProvider.js +++ b/Source/Scene/GlobeSurfaceTileProvider.js @@ -13,7 +13,6 @@ define([ '../Core/destroyObject', '../Core/DeveloperError', '../Core/Event', - '../Core/FeatureDetection', '../Core/GeometryInstance', '../Core/GeometryPipeline', '../Core/IndexDatatype', @@ -38,10 +37,8 @@ define([ '../Scene/Pass', '../Scene/PerInstanceColorAppearance', '../Scene/Primitive', - '../ThirdParty/when', './GlobeSurfaceTile', './ImageryLayer', - './ImageryState', './QuadtreeTileLoadState', './SceneMode', './ShadowMode' @@ -59,7 +56,6 @@ define([ destroyObject, DeveloperError, Event, - FeatureDetection, GeometryInstance, GeometryPipeline, IndexDatatype, @@ -84,10 +80,8 @@ define([ Pass, PerInstanceColorAppearance, Primitive, - when, GlobeSurfaceTile, ImageryLayer, - ImageryState, QuadtreeTileLoadState, SceneMode, ShadowMode) { diff --git a/Source/Scene/GroundPrimitive.js b/Source/Scene/GroundPrimitive.js index 3704f14a5c6a..c35c4b1828c5 100644 --- a/Source/Scene/GroundPrimitive.js +++ b/Source/Scene/GroundPrimitive.js @@ -1,6 +1,5 @@ /*global define*/ define([ - '../Core/AssociativeArray', '../Core/BoundingSphere', '../Core/buildModuleUrl', '../Core/Cartesian2', @@ -18,10 +17,7 @@ define([ '../Core/isArray', '../Core/loadJson', '../Core/Math', - '../Core/Matrix3', - '../Core/Matrix4', '../Core/OrientedBoundingBox', - '../Core/PolygonGeometry', '../Core/Rectangle', '../Renderer/DrawCommand', '../Renderer/RenderState', @@ -39,7 +35,6 @@ define([ './StencilFunction', './StencilOperation' ], function( - AssociativeArray, BoundingSphere, buildModuleUrl, Cartesian2, @@ -57,10 +52,7 @@ define([ isArray, loadJson, CesiumMath, - Matrix3, - Matrix4, OrientedBoundingBox, - PolygonGeometry, Rectangle, DrawCommand, RenderState, diff --git a/Source/Scene/ImageryLayer.js b/Source/Scene/ImageryLayer.js index 3d0e2640286c..3a0a04d7f99e 100644 --- a/Source/Scene/ImageryLayer.js +++ b/Source/Scene/ImageryLayer.js @@ -1,10 +1,7 @@ /*global define*/ define([ - '../Core/BoundingRectangle', '../Core/Cartesian2', '../Core/Cartesian4', - '../Core/Color', - '../Core/ComponentDatatype', '../Core/defaultValue', '../Core/defined', '../Core/defineProperties', @@ -14,7 +11,6 @@ define([ '../Core/IndexDatatype', '../Core/Math', '../Core/PixelFormat', - '../Core/PrimitiveType', '../Core/Rectangle', '../Core/TerrainProvider', '../Core/TileProviderError', @@ -22,13 +18,9 @@ define([ '../Core/WebMercatorTilingScheme', '../Renderer/Buffer', '../Renderer/BufferUsage', - '../Renderer/ClearCommand', '../Renderer/ComputeCommand', '../Renderer/ContextLimits', - '../Renderer/DrawCommand', - '../Renderer/Framebuffer', '../Renderer/MipmapHint', - '../Renderer/RenderState', '../Renderer/Sampler', '../Renderer/ShaderProgram', '../Renderer/ShaderSource', @@ -44,11 +36,8 @@ define([ './ImageryState', './TileImagery' ], function( - BoundingRectangle, Cartesian2, Cartesian4, - Color, - ComponentDatatype, defaultValue, defined, defineProperties, @@ -58,7 +47,6 @@ define([ IndexDatatype, CesiumMath, PixelFormat, - PrimitiveType, Rectangle, TerrainProvider, TileProviderError, @@ -66,13 +54,9 @@ define([ WebMercatorTilingScheme, Buffer, BufferUsage, - ClearCommand, ComputeCommand, ContextLimits, - DrawCommand, - Framebuffer, MipmapHint, - RenderState, Sampler, ShaderProgram, ShaderSource, diff --git a/Source/Scene/LabelCollection.js b/Source/Scene/LabelCollection.js index bbaa96c887a8..7bcfdefc419a 100644 --- a/Source/Scene/LabelCollection.js +++ b/Source/Scene/LabelCollection.js @@ -9,7 +9,6 @@ define([ '../Core/Matrix4', '../Core/writeTextToCanvas', './BillboardCollection', - './HeightReference', './HorizontalOrigin', './Label', './LabelStyle', @@ -25,7 +24,6 @@ define([ Matrix4, writeTextToCanvas, BillboardCollection, - HeightReference, HorizontalOrigin, Label, LabelStyle, diff --git a/Source/Scene/Model.js b/Source/Scene/Model.js index 0d70dce0f32a..697013a61d5a 100644 --- a/Source/Scene/Model.js +++ b/Source/Scene/Model.js @@ -7,7 +7,6 @@ define([ '../Core/Cartographic', '../Core/clone', '../Core/combine', - '../Core/ComponentDatatype', '../Core/defaultValue', '../Core/defined', '../Core/defineProperties', @@ -67,7 +66,6 @@ define([ Cartographic, clone, combine, - ComponentDatatype, defaultValue, defined, defineProperties, diff --git a/Source/Scene/ModelNode.js b/Source/Scene/ModelNode.js index bf377a3b26c5..0f2503564c80 100644 --- a/Source/Scene/ModelNode.js +++ b/Source/Scene/ModelNode.js @@ -1,10 +1,8 @@ /*global define*/ define([ - '../Core/defaultValue', '../Core/defineProperties', '../Core/Matrix4' ], function( - defaultValue, defineProperties, Matrix4) { 'use strict'; diff --git a/Source/Scene/OrthographicFrustum.js b/Source/Scene/OrthographicFrustum.js index 4bf7cc0264dc..9c709b191809 100644 --- a/Source/Scene/OrthographicFrustum.js +++ b/Source/Scene/OrthographicFrustum.js @@ -1,6 +1,5 @@ /*global define*/ define([ - '../Core/Cartesian2', '../Core/Cartesian3', '../Core/Cartesian4', '../Core/defined', @@ -9,7 +8,6 @@ define([ '../Core/Matrix4', './CullingVolume' ], function( - Cartesian2, Cartesian3, Cartesian4, defined, diff --git a/Source/Scene/PerformanceDisplay.js b/Source/Scene/PerformanceDisplay.js index c27a6c4e48c6..d624d002b561 100644 --- a/Source/Scene/PerformanceDisplay.js +++ b/Source/Scene/PerformanceDisplay.js @@ -1,6 +1,5 @@ /*global define*/ define([ - '../Core/Color', '../Core/defaultValue', '../Core/defined', '../Core/destroyObject', @@ -8,7 +7,6 @@ define([ '../Core/getTimestamp', '../Widgets/getElement' ], function( - Color, defaultValue, defined, destroyObject, diff --git a/Source/Scene/PerspectiveOffCenterFrustum.js b/Source/Scene/PerspectiveOffCenterFrustum.js index 32b2001c8555..fdb5322fe548 100644 --- a/Source/Scene/PerspectiveOffCenterFrustum.js +++ b/Source/Scene/PerspectiveOffCenterFrustum.js @@ -1,19 +1,15 @@ /*global define*/ define([ - '../Core/Cartesian2', '../Core/Cartesian3', '../Core/Cartesian4', - '../Core/defaultValue', '../Core/defined', '../Core/defineProperties', '../Core/DeveloperError', '../Core/Matrix4', './CullingVolume' ], function( - Cartesian2, Cartesian3, Cartesian4, - defaultValue, defined, defineProperties, DeveloperError, diff --git a/Source/Scene/PickDepth.js b/Source/Scene/PickDepth.js index 38598d1d0fba..5e1f85e3e510 100644 --- a/Source/Scene/PickDepth.js +++ b/Source/Scene/PickDepth.js @@ -1,24 +1,20 @@ /*global define*/ define([ '../Core/defined', - '../Core/defineProperties', '../Core/destroyObject', '../Core/PixelFormat', '../Renderer/Framebuffer', '../Renderer/PixelDatatype', '../Renderer/RenderState', - '../Renderer/Texture', - '../Shaders/PostProcessFilters/PassThrough' + '../Renderer/Texture' ], function( defined, - defineProperties, destroyObject, PixelFormat, Framebuffer, PixelDatatype, RenderState, - Texture, - PassThrough) { + Texture) { 'use strict'; /** diff --git a/Source/Scene/PointAppearance.js b/Source/Scene/PointAppearance.js index a8e88aac6e2d..ee481d512c1c 100644 --- a/Source/Scene/PointAppearance.js +++ b/Source/Scene/PointAppearance.js @@ -1,6 +1,5 @@ /*global define*/ define([ - '../Core/clone', '../Core/Color', '../Core/combine', '../Core/defaultValue', @@ -11,7 +10,6 @@ define([ '../Shaders/Appearances/PointAppearanceVS', './Appearance' ], function( - clone, Color, combine, defaultValue, diff --git a/Source/Scene/PointPrimitiveCollection.js b/Source/Scene/PointPrimitiveCollection.js index 1d4a241b7dc4..988d7fb3f9f7 100644 --- a/Source/Scene/PointPrimitiveCollection.js +++ b/Source/Scene/PointPrimitiveCollection.js @@ -1,8 +1,6 @@ /*global define*/ define([ '../Core/BoundingSphere', - '../Core/Cartesian2', - '../Core/Cartesian3', '../Core/Color', '../Core/ComponentDatatype', '../Core/defaultValue', @@ -29,8 +27,6 @@ define([ './SceneMode' ], function( BoundingSphere, - Cartesian2, - Cartesian3, Color, ComponentDatatype, defaultValue, diff --git a/Source/Scene/Primitive.js b/Source/Scene/Primitive.js index ad03055caeec..51205cf09503 100644 --- a/Source/Scene/Primitive.js +++ b/Source/Scene/Primitive.js @@ -19,14 +19,11 @@ define([ '../Core/Geometry', '../Core/GeometryAttribute', '../Core/GeometryAttributes', - '../Core/GeometryInstance', - '../Core/GeometryInstanceAttribute', '../Core/isArray', '../Core/Matrix4', '../Core/RuntimeError', '../Core/subdivideArray', '../Core/TaskProcessor', - '../Renderer/Buffer', '../Renderer/BufferUsage', '../Renderer/ContextLimits', '../Renderer/DrawCommand', @@ -62,14 +59,11 @@ define([ Geometry, GeometryAttribute, GeometryAttributes, - GeometryInstance, - GeometryInstanceAttribute, isArray, Matrix4, RuntimeError, subdivideArray, TaskProcessor, - Buffer, BufferUsage, ContextLimits, DrawCommand, diff --git a/Source/Scene/PrimitivePipeline.js b/Source/Scene/PrimitivePipeline.js index aa50aab5f3db..dfffa094a7f5 100644 --- a/Source/Scene/PrimitivePipeline.js +++ b/Source/Scene/PrimitivePipeline.js @@ -1,9 +1,7 @@ /*global define*/ define([ '../Core/BoundingSphere', - '../Core/Color', '../Core/ComponentDatatype', - '../Core/defaultValue', '../Core/defined', '../Core/DeveloperError', '../Core/Ellipsoid', @@ -18,9 +16,7 @@ define([ '../Core/WebMercatorProjection' ], function( BoundingSphere, - Color, ComponentDatatype, - defaultValue, defined, DeveloperError, Ellipsoid, diff --git a/Source/Scene/SceneTransitioner.js b/Source/Scene/SceneTransitioner.js index f625f2f0e368..59ccefbd81bb 100644 --- a/Source/Scene/SceneTransitioner.js +++ b/Source/Scene/SceneTransitioner.js @@ -2,12 +2,10 @@ define([ '../Core/Cartesian3', '../Core/Cartographic', - '../Core/defaultValue', '../Core/defined', '../Core/destroyObject', '../Core/DeveloperError', '../Core/EasingFunction', - '../Core/Ellipsoid', '../Core/Math', '../Core/Matrix4', '../Core/Ray', @@ -21,12 +19,10 @@ define([ ], function( Cartesian3, Cartographic, - defaultValue, defined, destroyObject, DeveloperError, EasingFunction, - Ellipsoid, CesiumMath, Matrix4, Ray, diff --git a/Source/Scene/ShadowMap.js b/Source/Scene/ShadowMap.js index 85fa22cbcf09..e9f35afb74cb 100644 --- a/Source/Scene/ShadowMap.js +++ b/Source/Scene/ShadowMap.js @@ -22,7 +22,6 @@ define([ '../Core/Math', '../Core/Matrix4', '../Core/PixelFormat', - '../Core/PrimitiveType', '../Core/Quaternion', '../Core/SphereOutlineGeometry', '../Renderer/ClearCommand', @@ -37,7 +36,6 @@ define([ '../Renderer/RenderState', '../Renderer/Sampler', '../Renderer/ShaderProgram', - '../Renderer/ShaderSource', '../Renderer/Texture', '../Renderer/TextureMagnificationFilter', '../Renderer/TextureMinificationFilter', @@ -76,7 +74,6 @@ define([ CesiumMath, Matrix4, PixelFormat, - PrimitiveType, Quaternion, SphereOutlineGeometry, ClearCommand, @@ -91,7 +88,6 @@ define([ RenderState, Sampler, ShaderProgram, - ShaderSource, Texture, TextureMagnificationFilter, TextureMinificationFilter, diff --git a/Source/Scene/ShadowMapShader.js b/Source/Scene/ShadowMapShader.js index 5214d86a8f3e..555b61b8e0ad 100644 --- a/Source/Scene/ShadowMapShader.js +++ b/Source/Scene/ShadowMapShader.js @@ -1,10 +1,8 @@ /*global define*/ define([ - '../Core/defaultValue', '../Core/defined', '../Renderer/ShaderSource' ], function( - defaultValue, defined, ShaderSource) { 'use strict'; diff --git a/Source/Scene/Sun.js b/Source/Scene/Sun.js index f1dfe1e0d18b..78d22a8b40b1 100644 --- a/Source/Scene/Sun.js +++ b/Source/Scene/Sun.js @@ -1,11 +1,9 @@ /*global define*/ define([ - '../Core/BoundingRectangle', '../Core/BoundingSphere', '../Core/Cartesian2', '../Core/Cartesian3', '../Core/Cartesian4', - '../Core/Color', '../Core/ComponentDatatype', '../Core/defined', '../Core/defineProperties', @@ -17,10 +15,8 @@ define([ '../Core/PrimitiveType', '../Renderer/Buffer', '../Renderer/BufferUsage', - '../Renderer/ClearCommand', '../Renderer/ComputeCommand', '../Renderer/DrawCommand', - '../Renderer/Framebuffer', '../Renderer/RenderState', '../Renderer/ShaderProgram', '../Renderer/Texture', @@ -32,12 +28,10 @@ define([ './SceneMode', './SceneTransforms' ], function( - BoundingRectangle, BoundingSphere, Cartesian2, Cartesian3, Cartesian4, - Color, ComponentDatatype, defined, defineProperties, @@ -49,10 +43,8 @@ define([ PrimitiveType, Buffer, BufferUsage, - ClearCommand, ComputeCommand, DrawCommand, - Framebuffer, RenderState, ShaderProgram, Texture, diff --git a/Source/Scene/TextureAtlas.js b/Source/Scene/TextureAtlas.js index adf579f2c555..427c687c7dba 100644 --- a/Source/Scene/TextureAtlas.js +++ b/Source/Scene/TextureAtlas.js @@ -12,7 +12,6 @@ define([ '../Core/PixelFormat', '../Core/RuntimeError', '../Renderer/Framebuffer', - '../Renderer/RenderState', '../Renderer/Texture', '../ThirdParty/when' ], function( @@ -28,7 +27,6 @@ define([ PixelFormat, RuntimeError, Framebuffer, - RenderState, Texture, when) { 'use strict'; diff --git a/Source/Scene/TileTerrain.js b/Source/Scene/TileTerrain.js index fa039c3a29d3..f152e32cdbb7 100644 --- a/Source/Scene/TileTerrain.js +++ b/Source/Scene/TileTerrain.js @@ -2,7 +2,6 @@ define([ '../Core/BoundingSphere', '../Core/Cartesian3', - '../Core/ComponentDatatype', '../Core/defined', '../Core/DeveloperError', '../Core/IndexDatatype', @@ -17,7 +16,6 @@ define([ ], function( BoundingSphere, Cartesian3, - ComponentDatatype, defined, DeveloperError, IndexDatatype, diff --git a/Source/Scene/UrlTemplateImageryProvider.js b/Source/Scene/UrlTemplateImageryProvider.js index f5901822eb9d..9e39944102c6 100644 --- a/Source/Scene/UrlTemplateImageryProvider.js +++ b/Source/Scene/UrlTemplateImageryProvider.js @@ -10,7 +10,6 @@ define([ '../Core/defineProperties', '../Core/DeveloperError', '../Core/Event', - '../Core/freezeObject', '../Core/GeographicTilingScheme', '../Core/isArray', '../Core/loadJson', @@ -19,7 +18,6 @@ define([ '../Core/loadXML', '../Core/Math', '../Core/Rectangle', - '../Core/TileProviderError', '../Core/WebMercatorTilingScheme', '../ThirdParty/when', './ImageryProvider' @@ -34,7 +32,6 @@ define([ defineProperties, DeveloperError, Event, - freezeObject, GeographicTilingScheme, isArray, loadJson, @@ -43,7 +40,6 @@ define([ loadXML, CesiumMath, Rectangle, - TileProviderError, WebMercatorTilingScheme, when, ImageryProvider) { diff --git a/Source/Scene/createTileMapServiceImageryProvider.js b/Source/Scene/createTileMapServiceImageryProvider.js index 87f93461a71f..bc71467d1d25 100644 --- a/Source/Scene/createTileMapServiceImageryProvider.js +++ b/Source/Scene/createTileMapServiceImageryProvider.js @@ -2,12 +2,9 @@ define([ '../Core/Cartesian2', '../Core/Cartographic', - '../Core/Credit', '../Core/defaultValue', '../Core/defined', - '../Core/defineProperties', '../Core/DeveloperError', - '../Core/Event', '../Core/GeographicTilingScheme', '../Core/joinUrls', '../Core/loadXML', @@ -20,12 +17,9 @@ define([ ], function( Cartesian2, Cartographic, - Credit, defaultValue, defined, - defineProperties, DeveloperError, - Event, GeographicTilingScheme, joinUrls, loadXML, diff --git a/Source/Widgets/CesiumInspector/CesiumInspectorViewModel.js b/Source/Widgets/CesiumInspector/CesiumInspectorViewModel.js index 34cdfe968807..cf787930de7b 100644 --- a/Source/Widgets/CesiumInspector/CesiumInspectorViewModel.js +++ b/Source/Widgets/CesiumInspector/CesiumInspectorViewModel.js @@ -1,6 +1,5 @@ /*global define*/ define([ - '../../Core/Color', '../../Core/defined', '../../Core/defineProperties', '../../Core/destroyObject', @@ -14,7 +13,6 @@ define([ '../../ThirdParty/knockout', '../createCommand' ], function( - Color, defined, defineProperties, destroyObject, diff --git a/Source/Widgets/Geocoder/GeocoderViewModel.js b/Source/Widgets/Geocoder/GeocoderViewModel.js index c7d13cc633b4..d6227719787e 100644 --- a/Source/Widgets/Geocoder/GeocoderViewModel.js +++ b/Source/Widgets/Geocoder/GeocoderViewModel.js @@ -10,7 +10,6 @@ define([ '../../Core/loadJsonp', '../../Core/Matrix4', '../../Core/Rectangle', - '../../Scene/SceneMode', '../../ThirdParty/knockout', '../../ThirdParty/when', '../createCommand' @@ -25,7 +24,6 @@ define([ loadJsonp, Matrix4, Rectangle, - SceneMode, knockout, when, createCommand) { diff --git a/Source/Widgets/HomeButton/HomeButtonViewModel.js b/Source/Widgets/HomeButton/HomeButtonViewModel.js index 46c569ed5bbe..1c869d24bcb9 100644 --- a/Source/Widgets/HomeButton/HomeButtonViewModel.js +++ b/Source/Widgets/HomeButton/HomeButtonViewModel.js @@ -1,26 +1,14 @@ /*global define*/ define([ - '../../Core/Cartesian3', - '../../Core/defaultValue', '../../Core/defined', '../../Core/defineProperties', '../../Core/DeveloperError', - '../../Core/Matrix4', - '../../Core/Rectangle', - '../../Scene/Camera', - '../../Scene/SceneMode', '../../ThirdParty/knockout', '../createCommand' ], function( - Cartesian3, - defaultValue, defined, defineProperties, DeveloperError, - Matrix4, - Rectangle, - Camera, - SceneMode, knockout, createCommand) { 'use strict'; diff --git a/Source/Widgets/Viewer/Viewer.js b/Source/Widgets/Viewer/Viewer.js index aa067441d541..aa66497dd207 100644 --- a/Source/Widgets/Viewer/Viewer.js +++ b/Source/Widgets/Viewer/Viewer.js @@ -8,7 +8,6 @@ define([ '../../Core/destroyObject', '../../Core/DeveloperError', '../../Core/EventHelper', - '../../Core/Fullscreen', '../../Core/isArray', '../../Core/Matrix4', '../../Core/Rectangle', @@ -22,7 +21,6 @@ define([ '../../DataSources/Property', '../../Scene/ImageryLayer', '../../Scene/SceneMode', - '../../Scene/ShadowMode', '../../ThirdParty/knockout', '../../ThirdParty/when', '../Animation/Animation', @@ -52,7 +50,6 @@ define([ destroyObject, DeveloperError, EventHelper, - Fullscreen, isArray, Matrix4, Rectangle, @@ -66,7 +63,6 @@ define([ Property, ImageryLayer, SceneMode, - ShadowMode, knockout, when, Animation, diff --git a/Source/Widgets/Viewer/viewerDragDropMixin.js b/Source/Widgets/Viewer/viewerDragDropMixin.js index bfb21466cda1..183424f9fe21 100644 --- a/Source/Widgets/Viewer/viewerDragDropMixin.js +++ b/Source/Widgets/Viewer/viewerDragDropMixin.js @@ -9,7 +9,6 @@ define([ '../../DataSources/CzmlDataSource', '../../DataSources/GeoJsonDataSource', '../../DataSources/KmlDataSource', - '../../Scene/GroundPrimitive', '../getElement' ], function( defaultValue, @@ -21,7 +20,6 @@ define([ CzmlDataSource, GeoJsonDataSource, KmlDataSource, - GroundPrimitive, getElement) { 'use strict'; diff --git a/Source/Workers/createGeometry.js b/Source/Workers/createGeometry.js index 1b0871fcfcec..7afe0f2c4f1b 100644 --- a/Source/Workers/createGeometry.js +++ b/Source/Workers/createGeometry.js @@ -2,13 +2,11 @@ define([ '../Core/defined', '../Scene/PrimitivePipeline', - '../ThirdParty/when', './createTaskProcessorWorker', 'require' ], function( defined, PrimitivePipeline, - when, createTaskProcessorWorker, require) { 'use strict'; diff --git a/Source/Workers/createVerticesFromQuantizedTerrainMesh.js b/Source/Workers/createVerticesFromQuantizedTerrainMesh.js index 2dcd5d9d5cb5..3a9d5118dad0 100644 --- a/Source/Workers/createVerticesFromQuantizedTerrainMesh.js +++ b/Source/Workers/createVerticesFromQuantizedTerrainMesh.js @@ -10,7 +10,6 @@ define([ '../Core/Ellipsoid', '../Core/IndexDatatype', '../Core/Math', - '../Core/Matrix3', '../Core/Matrix4', '../Core/OrientedBoundingBox', '../Core/TerrainEncoding', @@ -28,7 +27,6 @@ define([ Ellipsoid, IndexDatatype, CesiumMath, - Matrix3, Matrix4, OrientedBoundingBox, TerrainEncoding, diff --git a/Specs/Core/AxisAlignedBoundingBoxSpec.js b/Specs/Core/AxisAlignedBoundingBoxSpec.js index 25662097d1e6..07ea32ac8b1a 100644 --- a/Specs/Core/AxisAlignedBoundingBoxSpec.js +++ b/Specs/Core/AxisAlignedBoundingBoxSpec.js @@ -2,13 +2,11 @@ defineSuite([ 'Core/AxisAlignedBoundingBox', 'Core/Cartesian3', - 'Core/Cartesian4', 'Core/Intersect', 'Core/Plane' ], function( AxisAlignedBoundingBox, Cartesian3, - Cartesian4, Intersect, Plane) { 'use strict'; diff --git a/Specs/Core/BoundingSphereSpec.js b/Specs/Core/BoundingSphereSpec.js index b5d0d9c0f891..849ba66278c7 100644 --- a/Specs/Core/BoundingSphereSpec.js +++ b/Specs/Core/BoundingSphereSpec.js @@ -2,7 +2,6 @@ defineSuite([ 'Core/BoundingSphere', 'Core/Cartesian3', - 'Core/Cartesian4', 'Core/Cartographic', 'Core/Ellipsoid', 'Core/EncodedCartesian3', @@ -18,7 +17,6 @@ defineSuite([ ], function( BoundingSphere, Cartesian3, - Cartesian4, Cartographic, Ellipsoid, EncodedCartesian3, diff --git a/Specs/Core/CesiumTerrainProviderSpec.js b/Specs/Core/CesiumTerrainProviderSpec.js index d9c50157ad3d..e479b6011e0d 100644 --- a/Specs/Core/CesiumTerrainProviderSpec.js +++ b/Specs/Core/CesiumTerrainProviderSpec.js @@ -2,7 +2,6 @@ defineSuite([ 'Core/CesiumTerrainProvider', 'Core/DefaultProxy', - 'Core/defined', 'Core/Ellipsoid', 'Core/GeographicTilingScheme', 'Core/getAbsoluteUri', @@ -12,12 +11,10 @@ defineSuite([ 'Core/QuantizedMeshTerrainData', 'Core/TerrainProvider', 'Specs/pollToPromise', - 'ThirdParty/Uri', 'ThirdParty/when' ], function( CesiumTerrainProvider, DefaultProxy, - defined, Ellipsoid, GeographicTilingScheme, getAbsoluteUri, @@ -27,7 +24,6 @@ defineSuite([ QuantizedMeshTerrainData, TerrainProvider, pollToPromise, - Uri, when) { 'use strict'; diff --git a/Specs/Core/ClockSpec.js b/Specs/Core/ClockSpec.js index b7ba51e50e97..5bc6e164a8f2 100644 --- a/Specs/Core/ClockSpec.js +++ b/Specs/Core/ClockSpec.js @@ -4,15 +4,13 @@ defineSuite([ 'Core/ClockRange', 'Core/ClockStep', 'Core/defined', - 'Core/JulianDate', - 'Specs/pollToPromise' + 'Core/JulianDate' ], function( Clock, ClockRange, ClockStep, defined, - JulianDate, - pollToPromise) { + JulianDate) { 'use strict'; it('sets default parameters when constructed', function() { diff --git a/Specs/Core/DistanceDisplayConditionSpec.js b/Specs/Core/DistanceDisplayConditionSpec.js index 0a0b3fc5c44c..22b35a8ae8d2 100644 --- a/Specs/Core/DistanceDisplayConditionSpec.js +++ b/Specs/Core/DistanceDisplayConditionSpec.js @@ -1,12 +1,8 @@ /*global defineSuite*/ defineSuite([ - 'Core/DistanceDisplayCondition', - 'Core/Cartesian3', - 'Core/Matrix4' + 'Core/DistanceDisplayCondition' ], function( - DistanceDisplayCondition, - Cartesian3, - Matrix4) { + DistanceDisplayCondition) { 'use strict'; it('default constructs', function() { diff --git a/Specs/Core/EllipsoidTangentPlaneSpec.js b/Specs/Core/EllipsoidTangentPlaneSpec.js index 1768014b2f6d..54e34c0e8641 100644 --- a/Specs/Core/EllipsoidTangentPlaneSpec.js +++ b/Specs/Core/EllipsoidTangentPlaneSpec.js @@ -3,18 +3,12 @@ defineSuite([ 'Core/EllipsoidTangentPlane', 'Core/Cartesian2', 'Core/Cartesian3', - 'Core/Ellipsoid', - 'Core/Math', - 'Core/Matrix3', - 'Core/OrientedBoundingBox' + 'Core/Ellipsoid' ], function( EllipsoidTangentPlane, Cartesian2, Cartesian3, - Ellipsoid, - CesiumMath, - Matrix3, - OrientedBoundingBox) { + Ellipsoid) { 'use strict'; it('constructor defaults to WGS84', function() { diff --git a/Specs/Core/HeightmapTerrainDataSpec.js b/Specs/Core/HeightmapTerrainDataSpec.js index 809ba6b61585..d0c64e8053ca 100644 --- a/Specs/Core/HeightmapTerrainDataSpec.js +++ b/Specs/Core/HeightmapTerrainDataSpec.js @@ -1,16 +1,12 @@ /*global defineSuite*/ defineSuite([ 'Core/HeightmapTerrainData', - 'Core/defined', 'Core/GeographicTilingScheme', - 'Core/TerrainData', - 'ThirdParty/when' + 'Core/TerrainData' ], function( HeightmapTerrainData, - defined, GeographicTilingScheme, - TerrainData, - when) { + TerrainData) { 'use strict'; it('conforms to TerrainData interface', function() { diff --git a/Specs/Core/OrientedBoundingBoxSpec.js b/Specs/Core/OrientedBoundingBoxSpec.js index 9845c0dc700e..38f1a6855cb5 100644 --- a/Specs/Core/OrientedBoundingBoxSpec.js +++ b/Specs/Core/OrientedBoundingBoxSpec.js @@ -1,12 +1,10 @@ /*global defineSuite*/ defineSuite([ 'Core/OrientedBoundingBox', - 'Core/BoundingRectangle', 'Core/BoundingSphere', 'Core/Cartesian3', 'Core/Cartesian4', 'Core/Ellipsoid', - 'Core/EllipsoidTangentPlane', 'Core/Intersect', 'Core/Math', 'Core/Matrix3', @@ -16,12 +14,10 @@ defineSuite([ 'Core/Rectangle' ], function( OrientedBoundingBox, - BoundingRectangle, BoundingSphere, Cartesian3, Cartesian4, Ellipsoid, - EllipsoidTangentPlane, Intersect, CesiumMath, Matrix3, diff --git a/Specs/Core/PinBuilderSpec.js b/Specs/Core/PinBuilderSpec.js index 2895c3d66100..33d6b8ba4f99 100644 --- a/Specs/Core/PinBuilderSpec.js +++ b/Specs/Core/PinBuilderSpec.js @@ -3,13 +3,11 @@ defineSuite([ 'Core/PinBuilder', 'Core/buildModuleUrl', 'Core/Color', - 'Core/defined', 'ThirdParty/when' ], function( PinBuilder, buildModuleUrl, Color, - defined, when) { 'use strict'; diff --git a/Specs/Core/PolylineGeometrySpec.js b/Specs/Core/PolylineGeometrySpec.js index 1d02cc1284ec..4f7b6d3a27e8 100644 --- a/Specs/Core/PolylineGeometrySpec.js +++ b/Specs/Core/PolylineGeometrySpec.js @@ -4,7 +4,6 @@ defineSuite([ 'Core/Cartesian3', 'Core/Color', 'Core/Ellipsoid', - 'Core/Math', 'Core/VertexFormat', 'Specs/createPackableSpecs' ], function( @@ -12,7 +11,6 @@ defineSuite([ Cartesian3, Color, Ellipsoid, - CesiumMath, VertexFormat, createPackableSpecs) { 'use strict'; diff --git a/Specs/Core/QuantizedMeshTerrainDataSpec.js b/Specs/Core/QuantizedMeshTerrainDataSpec.js index b2981728f2fd..c66692cc7b95 100644 --- a/Specs/Core/QuantizedMeshTerrainDataSpec.js +++ b/Specs/Core/QuantizedMeshTerrainDataSpec.js @@ -3,7 +3,6 @@ defineSuite([ 'Core/QuantizedMeshTerrainData', 'Core/BoundingSphere', 'Core/Cartesian3', - 'Core/defined', 'Core/GeographicTilingScheme', 'Core/Math', 'Core/TerrainData', @@ -13,7 +12,6 @@ defineSuite([ QuantizedMeshTerrainData, BoundingSphere, Cartesian3, - defined, GeographicTilingScheme, CesiumMath, TerrainData, diff --git a/Specs/Core/TerrainEncodingSpec.js b/Specs/Core/TerrainEncodingSpec.js index 8b511b1bbee1..de33f7b07687 100644 --- a/Specs/Core/TerrainEncodingSpec.js +++ b/Specs/Core/TerrainEncodingSpec.js @@ -5,7 +5,6 @@ defineSuite([ 'Core/AxisAlignedBoundingBox', 'Core/Cartesian2', 'Core/Cartesian3', - 'Core/Math', 'Core/Matrix4', 'Core/TerrainQuantization', 'Core/Transforms' @@ -15,7 +14,6 @@ defineSuite([ AxisAlignedBoundingBox, Cartesian2, Cartesian3, - CesiumMath, Matrix4, TerrainQuantization, Transforms) { diff --git a/Specs/Core/TransformsSpec.js b/Specs/Core/TransformsSpec.js index f6be7aa1abf8..de42f2f68270 100644 --- a/Specs/Core/TransformsSpec.js +++ b/Specs/Core/TransformsSpec.js @@ -4,8 +4,6 @@ defineSuite([ 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Cartesian4', - 'Core/defined', - 'Core/DeveloperError', 'Core/EarthOrientationParameters', 'Core/Ellipsoid', 'Core/GeographicProjection', @@ -17,16 +15,12 @@ defineSuite([ 'Core/Matrix3', 'Core/Matrix4', 'Core/Quaternion', - 'Core/TimeConstants', - 'Core/TimeInterval', - 'ThirdParty/when' + 'Core/TimeInterval' ], function( Transforms, Cartesian2, Cartesian3, Cartesian4, - defined, - DeveloperError, EarthOrientationParameters, Ellipsoid, GeographicProjection, @@ -38,9 +32,7 @@ defineSuite([ Matrix3, Matrix4, Quaternion, - TimeConstants, - TimeInterval, - when) { + TimeInterval) { 'use strict'; var negativeX = new Cartesian4(-1, 0, 0, 0); diff --git a/Specs/Core/TranslationRotationScaleSpec.js b/Specs/Core/TranslationRotationScaleSpec.js index 1b2b14344b13..ab51f2e833f1 100644 --- a/Specs/Core/TranslationRotationScaleSpec.js +++ b/Specs/Core/TranslationRotationScaleSpec.js @@ -2,12 +2,10 @@ defineSuite([ 'Core/TranslationRotationScale', 'Core/Cartesian3', - 'Core/Matrix4', 'Core/Quaternion' ], function( TranslationRotationScale, Cartesian3, - Matrix4, Quaternion) { 'use strict'; diff --git a/Specs/Core/VRTheWorldTerrainProviderSpec.js b/Specs/Core/VRTheWorldTerrainProviderSpec.js index 1b367b597952..f04ccee3a016 100644 --- a/Specs/Core/VRTheWorldTerrainProviderSpec.js +++ b/Specs/Core/VRTheWorldTerrainProviderSpec.js @@ -2,7 +2,6 @@ defineSuite([ 'Core/VRTheWorldTerrainProvider', 'Core/DefaultProxy', - 'Core/defined', 'Core/GeographicTilingScheme', 'Core/HeightmapTerrainData', 'Core/loadImage', @@ -14,7 +13,6 @@ defineSuite([ ], function( VRTheWorldTerrainProvider, DefaultProxy, - defined, GeographicTilingScheme, HeightmapTerrainData, loadImage, diff --git a/Specs/Core/loadImageFromTypedArraySpec.js b/Specs/Core/loadImageFromTypedArraySpec.js index 8231513950b1..d16e6468ab4f 100644 --- a/Specs/Core/loadImageFromTypedArraySpec.js +++ b/Specs/Core/loadImageFromTypedArraySpec.js @@ -1,14 +1,10 @@ /*global defineSuite*/ defineSuite([ 'Core/loadImageFromTypedArray', - 'Core/defined', - 'Core/loadArrayBuffer', - 'ThirdParty/when' + 'Core/loadArrayBuffer' ], function( loadImageFromTypedArray, - defined, - loadArrayBuffer, - when) { + loadArrayBuffer) { 'use strict'; it('can load an image', function() { diff --git a/Specs/Core/loadImageSpec.js b/Specs/Core/loadImageSpec.js index b396a886f61d..2a31f4cb2bdb 100644 --- a/Specs/Core/loadImageSpec.js +++ b/Specs/Core/loadImageSpec.js @@ -1,11 +1,9 @@ /*global defineSuite*/ defineSuite([ 'Core/loadImage', - 'Core/defined', 'ThirdParty/when' ], function( loadImage, - defined, when) { 'use strict'; diff --git a/Specs/Core/loadImageViaBlobSpec.js b/Specs/Core/loadImageViaBlobSpec.js index 372d61c4fdf8..bfbe82e5b965 100644 --- a/Specs/Core/loadImageViaBlobSpec.js +++ b/Specs/Core/loadImageViaBlobSpec.js @@ -1,11 +1,9 @@ /*global defineSuite*/ defineSuite([ 'Core/loadImageViaBlob', - 'Core/defined', 'ThirdParty/when' ], function( loadImageViaBlob, - defined, when) { 'use strict'; diff --git a/Specs/Core/loadJsonpSpec.js b/Specs/Core/loadJsonpSpec.js index 066ce79e0a6c..9b735b692178 100644 --- a/Specs/Core/loadJsonpSpec.js +++ b/Specs/Core/loadJsonpSpec.js @@ -1,12 +1,10 @@ /*global defineSuite*/ defineSuite([ 'Core/loadJsonp', - 'Core/DefaultProxy', - 'Core/RequestErrorEvent' + 'Core/DefaultProxy' ], function( loadJsonp, - DefaultProxy, - RequestErrorEvent) { + DefaultProxy) { 'use strict'; it('throws with no url', function() { diff --git a/Specs/Core/loadWithXhrSpec.js b/Specs/Core/loadWithXhrSpec.js index 44cc1799f33a..6b2b5a5742ec 100644 --- a/Specs/Core/loadWithXhrSpec.js +++ b/Specs/Core/loadWithXhrSpec.js @@ -2,13 +2,11 @@ defineSuite([ 'Core/loadWithXhr', 'Core/loadImage', - 'Core/RequestErrorEvent', - 'Core/RuntimeError' + 'Core/RequestErrorEvent' ], function( loadWithXhr, loadImage, - RequestErrorEvent, - RuntimeError) { + RequestErrorEvent) { 'use strict'; it('throws with no url', function() { diff --git a/Specs/Core/sampleTerrainSpec.js b/Specs/Core/sampleTerrainSpec.js index 1cf13884d8c7..3ab1971a23f4 100644 --- a/Specs/Core/sampleTerrainSpec.js +++ b/Specs/Core/sampleTerrainSpec.js @@ -2,13 +2,11 @@ defineSuite([ 'Core/sampleTerrain', 'Core/Cartographic', - 'Core/CesiumTerrainProvider', - 'ThirdParty/when' + 'Core/CesiumTerrainProvider' ], function( sampleTerrain, Cartographic, - CesiumTerrainProvider, - when) { + CesiumTerrainProvider) { 'use strict'; var terrainProvider = new CesiumTerrainProvider({ diff --git a/Specs/DataSources/BillboardVisualizerSpec.js b/Specs/DataSources/BillboardVisualizerSpec.js index df82126feca4..d802621455e7 100644 --- a/Specs/DataSources/BillboardVisualizerSpec.js +++ b/Specs/DataSources/BillboardVisualizerSpec.js @@ -14,7 +14,6 @@ defineSuite([ 'DataSources/ConstantProperty', 'DataSources/EntityCluster', 'DataSources/EntityCollection', - 'Scene/BillboardCollection', 'Scene/HeightReference', 'Scene/HorizontalOrigin', 'Scene/VerticalOrigin', @@ -36,7 +35,6 @@ defineSuite([ ConstantProperty, EntityCluster, EntityCollection, - BillboardCollection, HeightReference, HorizontalOrigin, VerticalOrigin, diff --git a/Specs/DataSources/CallbackPropertySpec.js b/Specs/DataSources/CallbackPropertySpec.js index 759b39c17be5..96c992d8c23f 100644 --- a/Specs/DataSources/CallbackPropertySpec.js +++ b/Specs/DataSources/CallbackPropertySpec.js @@ -1,11 +1,9 @@ /*global defineSuite*/ defineSuite([ 'DataSources/CallbackProperty', - 'Core/Cartesian3', 'Core/JulianDate' ], function( CallbackProperty, - Cartesian3, JulianDate) { 'use strict'; diff --git a/Specs/DataSources/CzmlDataSourceSpec.js b/Specs/DataSources/CzmlDataSourceSpec.js index 4e96c76e68fe..5a6cbbe0fa81 100644 --- a/Specs/DataSources/CzmlDataSourceSpec.js +++ b/Specs/DataSources/CzmlDataSourceSpec.js @@ -9,7 +9,6 @@ defineSuite([ 'Core/ClockStep', 'Core/Color', 'Core/CornerType', - 'Core/defined', 'Core/Ellipsoid', 'Core/Event', 'Core/ExtrapolationType', @@ -33,7 +32,6 @@ defineSuite([ 'Scene/LabelStyle', 'Scene/ShadowMode', 'Scene/VerticalOrigin', - 'Specs/pollToPromise', 'ThirdParty/when' ], function( CzmlDataSource, @@ -45,7 +43,6 @@ defineSuite([ ClockStep, Color, CornerType, - defined, Ellipsoid, Event, ExtrapolationType, @@ -69,7 +66,6 @@ defineSuite([ LabelStyle, ShadowMode, VerticalOrigin, - pollToPromise, when) { 'use strict'; diff --git a/Specs/DataSources/LabelVisualizerSpec.js b/Specs/DataSources/LabelVisualizerSpec.js index 5da3bf985806..55021d652b94 100644 --- a/Specs/DataSources/LabelVisualizerSpec.js +++ b/Specs/DataSources/LabelVisualizerSpec.js @@ -14,7 +14,6 @@ defineSuite([ 'DataSources/EntityCollection', 'DataSources/LabelGraphics', 'Scene/HorizontalOrigin', - 'Scene/LabelCollection', 'Scene/LabelStyle', 'Scene/VerticalOrigin', 'Specs/createGlobe', @@ -34,7 +33,6 @@ defineSuite([ EntityCollection, LabelGraphics, HorizontalOrigin, - LabelCollection, LabelStyle, VerticalOrigin, createGlobe, diff --git a/Specs/DataSources/PolylineGeometryUpdaterSpec.js b/Specs/DataSources/PolylineGeometryUpdaterSpec.js index 080f71c3cbd5..5dc3db3d66ef 100644 --- a/Specs/DataSources/PolylineGeometryUpdaterSpec.js +++ b/Specs/DataSources/PolylineGeometryUpdaterSpec.js @@ -22,7 +22,6 @@ defineSuite([ 'DataSources/SampledProperty', 'DataSources/TimeIntervalCollectionProperty', 'Scene/Globe', - 'Scene/PrimitiveCollection', 'Scene/ShadowMode', 'Specs/createDynamicProperty', 'Specs/createScene' @@ -49,7 +48,6 @@ defineSuite([ SampledProperty, TimeIntervalCollectionProperty, Globe, - PrimitiveCollection, ShadowMode, createDynamicProperty, createScene) { diff --git a/Specs/DataSources/PolylineVolumeGeometryUpdaterSpec.js b/Specs/DataSources/PolylineVolumeGeometryUpdaterSpec.js index b577d0a96abe..811ef935437e 100644 --- a/Specs/DataSources/PolylineVolumeGeometryUpdaterSpec.js +++ b/Specs/DataSources/PolylineVolumeGeometryUpdaterSpec.js @@ -17,7 +17,6 @@ defineSuite([ 'DataSources/Entity', 'DataSources/GridMaterialProperty', 'DataSources/PolylineVolumeGraphics', - 'DataSources/PropertyArray', 'DataSources/SampledProperty', 'DataSources/TimeIntervalCollectionProperty', 'Scene/PrimitiveCollection', @@ -43,7 +42,6 @@ defineSuite([ Entity, GridMaterialProperty, PolylineVolumeGraphics, - PropertyArray, SampledProperty, TimeIntervalCollectionProperty, PrimitiveCollection, diff --git a/Specs/Renderer/SamplerSpec.js b/Specs/Renderer/SamplerSpec.js index f0c2860e1d81..42ed448636fd 100644 --- a/Specs/Renderer/SamplerSpec.js +++ b/Specs/Renderer/SamplerSpec.js @@ -1,13 +1,11 @@ /*global defineSuite*/ defineSuite([ 'Renderer/Sampler', - 'Renderer/TextureMagnificationFilter', 'Renderer/TextureMinificationFilter', 'Renderer/TextureWrap', 'Specs/createContext' ], function( Sampler, - TextureMagnificationFilter, TextureMinificationFilter, TextureWrap, createContext) { diff --git a/Specs/Renderer/ShaderProgramSpec.js b/Specs/Renderer/ShaderProgramSpec.js index c99c5d9e270f..c5528a195c65 100644 --- a/Specs/Renderer/ShaderProgramSpec.js +++ b/Specs/Renderer/ShaderProgramSpec.js @@ -1,13 +1,6 @@ /*global defineSuite*/ defineSuite([ 'Renderer/ShaderProgram', - 'Core/Cartesian2', - 'Core/Cartesian3', - 'Core/Cartesian4', - 'Core/Color', - 'Core/Matrix2', - 'Core/Matrix3', - 'Core/Matrix4', 'Core/PrimitiveType', 'Renderer/Buffer', 'Renderer/BufferUsage', @@ -19,13 +12,6 @@ defineSuite([ 'Specs/createContext' ], function( ShaderProgram, - Cartesian2, - Cartesian3, - Cartesian4, - Color, - Matrix2, - Matrix3, - Matrix4, PrimitiveType, Buffer, BufferUsage, diff --git a/Specs/Renderer/loadCubeMapSpec.js b/Specs/Renderer/loadCubeMapSpec.js index a23dd4b5f748..4968b19082ce 100644 --- a/Specs/Renderer/loadCubeMapSpec.js +++ b/Specs/Renderer/loadCubeMapSpec.js @@ -2,27 +2,23 @@ defineSuite([ 'Renderer/loadCubeMap', 'Core/Cartesian3', - 'Core/defined', 'Core/PrimitiveType', 'Renderer/Buffer', 'Renderer/BufferUsage', 'Renderer/DrawCommand', 'Renderer/ShaderProgram', 'Renderer/VertexArray', - 'Specs/createContext', - 'ThirdParty/when' + 'Specs/createContext' ], function( loadCubeMap, Cartesian3, - defined, PrimitiveType, Buffer, BufferUsage, DrawCommand, ShaderProgram, VertexArray, - createContext, - when) { + createContext) { 'use strict'; var context; diff --git a/Specs/Scene/ArcGisMapServerImageryProviderSpec.js b/Specs/Scene/ArcGisMapServerImageryProviderSpec.js index b2d9de777c58..14276f52a1f7 100644 --- a/Specs/Scene/ArcGisMapServerImageryProviderSpec.js +++ b/Specs/Scene/ArcGisMapServerImageryProviderSpec.js @@ -6,7 +6,6 @@ defineSuite([ 'Core/Cartographic', 'Core/DefaultProxy', 'Core/defined', - 'Core/GeographicProjection', 'Core/GeographicTilingScheme', 'Core/loadImage', 'Core/loadJsonp', @@ -30,7 +29,6 @@ defineSuite([ Cartographic, DefaultProxy, defined, - GeographicProjection, GeographicTilingScheme, loadImage, loadJsonp, diff --git a/Specs/Scene/BillboardCollectionSpec.js b/Specs/Scene/BillboardCollectionSpec.js index c953eb6e1625..6bd1cd3af55c 100644 --- a/Specs/Scene/BillboardCollectionSpec.js +++ b/Specs/Scene/BillboardCollectionSpec.js @@ -7,16 +7,11 @@ defineSuite([ 'Core/Cartesian3', 'Core/CesiumTerrainProvider', 'Core/Color', - 'Core/defined', - 'Core/defineProperties', 'Core/DistanceDisplayCondition', - 'Core/Ellipsoid', - 'Core/Event', 'Core/loadImage', 'Core/Math', 'Core/NearFarScalar', 'Core/Rectangle', - 'Renderer/ContextLimits', 'Scene/Billboard', 'Scene/HeightReference', 'Scene/HorizontalOrigin', @@ -35,16 +30,11 @@ defineSuite([ Cartesian3, CesiumTerrainProvider, Color, - defined, - defineProperties, DistanceDisplayCondition, - Ellipsoid, - Event, loadImage, CesiumMath, NearFarScalar, Rectangle, - ContextLimits, Billboard, HeightReference, HorizontalOrigin, diff --git a/Specs/Scene/CameraEventAggregatorSpec.js b/Specs/Scene/CameraEventAggregatorSpec.js index 6e61c0bba0ec..17ee047fdf8d 100644 --- a/Specs/Scene/CameraEventAggregatorSpec.js +++ b/Specs/Scene/CameraEventAggregatorSpec.js @@ -3,7 +3,6 @@ defineSuite([ 'Scene/CameraEventAggregator', 'Core/Cartesian2', 'Core/combine', - 'Core/defined', 'Core/FeatureDetection', 'Core/KeyboardEventModifier', 'Scene/CameraEventType', @@ -14,7 +13,6 @@ defineSuite([ CameraEventAggregator, Cartesian2, combine, - defined, FeatureDetection, KeyboardEventModifier, CameraEventType, diff --git a/Specs/Scene/CameraFlightPathSpec.js b/Specs/Scene/CameraFlightPathSpec.js index 38bf6a6f2dbb..2b5ecc5dff4e 100644 --- a/Specs/Scene/CameraFlightPathSpec.js +++ b/Specs/Scene/CameraFlightPathSpec.js @@ -2,18 +2,14 @@ defineSuite([ 'Scene/CameraFlightPath', 'Core/Cartesian3', - 'Core/Cartographic', 'Core/Math', - 'Core/Rectangle', 'Scene/OrthographicFrustum', 'Scene/SceneMode', 'Specs/createScene' ], function( CameraFlightPath, Cartesian3, - Cartographic, CesiumMath, - Rectangle, OrthographicFrustum, SceneMode, createScene) { diff --git a/Specs/Scene/DebugAppearanceSpec.js b/Specs/Scene/DebugAppearanceSpec.js index 229e31d72582..ce9f5d1cd096 100644 --- a/Specs/Scene/DebugAppearanceSpec.js +++ b/Specs/Scene/DebugAppearanceSpec.js @@ -8,7 +8,6 @@ defineSuite([ 'Core/Rectangle', 'Core/RectangleGeometry', 'Core/VertexFormat', - 'Renderer/ClearCommand', 'Scene/Appearance', 'Scene/Primitive', 'Specs/createScene' @@ -21,7 +20,6 @@ defineSuite([ Rectangle, RectangleGeometry, VertexFormat, - ClearCommand, Appearance, Primitive, createScene) { diff --git a/Specs/Scene/DebugModelMatrixPrimitiveSpec.js b/Specs/Scene/DebugModelMatrixPrimitiveSpec.js index 8f95c8f24a4d..7210ab1fc002 100644 --- a/Specs/Scene/DebugModelMatrixPrimitiveSpec.js +++ b/Specs/Scene/DebugModelMatrixPrimitiveSpec.js @@ -1,13 +1,11 @@ /*global defineSuite*/ defineSuite([ 'Scene/DebugModelMatrixPrimitive', - 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Matrix4', 'Specs/createScene' ], function( DebugModelMatrixPrimitive, - Cartesian2, Cartesian3, Matrix4, createScene) { diff --git a/Specs/Scene/DiscardMissingTileImagePolicySpec.js b/Specs/Scene/DiscardMissingTileImagePolicySpec.js index 63857e64dcaa..bf1281142743 100644 --- a/Specs/Scene/DiscardMissingTileImagePolicySpec.js +++ b/Specs/Scene/DiscardMissingTileImagePolicySpec.js @@ -2,7 +2,6 @@ defineSuite([ 'Scene/DiscardMissingTileImagePolicy', 'Core/Cartesian2', - 'Core/defined', 'Core/loadImage', 'Core/loadWithXhr', 'Specs/pollToPromise', @@ -10,7 +9,6 @@ defineSuite([ ], function( DiscardMissingTileImagePolicy, Cartesian2, - defined, loadImage, loadWithXhr, pollToPromise, diff --git a/Specs/Scene/EllipsoidPrimitiveSpec.js b/Specs/Scene/EllipsoidPrimitiveSpec.js index 96431a7a6162..764ea7575424 100644 --- a/Specs/Scene/EllipsoidPrimitiveSpec.js +++ b/Specs/Scene/EllipsoidPrimitiveSpec.js @@ -4,7 +4,6 @@ defineSuite([ 'Core/Cartesian3', 'Core/defined', 'Core/Matrix4', - 'Renderer/ClearCommand', 'Scene/Material', 'Specs/createScene' ], function( @@ -12,7 +11,6 @@ defineSuite([ Cartesian3, defined, Matrix4, - ClearCommand, Material, createScene) { 'use strict'; diff --git a/Specs/Scene/EllipsoidSurfaceAppearanceSpec.js b/Specs/Scene/EllipsoidSurfaceAppearanceSpec.js index 1919c32b5dc3..eb3815022919 100644 --- a/Specs/Scene/EllipsoidSurfaceAppearanceSpec.js +++ b/Specs/Scene/EllipsoidSurfaceAppearanceSpec.js @@ -5,7 +5,6 @@ defineSuite([ 'Core/GeometryInstance', 'Core/Rectangle', 'Core/RectangleGeometry', - 'Renderer/ClearCommand', 'Scene/Appearance', 'Scene/Material', 'Scene/Primitive', @@ -16,7 +15,6 @@ defineSuite([ GeometryInstance, Rectangle, RectangleGeometry, - ClearCommand, Appearance, Material, Primitive, diff --git a/Specs/Scene/GeometryRenderingSpec.js b/Specs/Scene/GeometryRenderingSpec.js index e732ef84f9d6..9b1e7effa501 100644 --- a/Specs/Scene/GeometryRenderingSpec.js +++ b/Specs/Scene/GeometryRenderingSpec.js @@ -15,7 +15,6 @@ defineSuite([ 'Core/EllipseGeometry', 'Core/Ellipsoid', 'Core/EllipsoidGeometry', - 'Core/GeographicProjection', 'Core/Geometry', 'Core/GeometryAttribute', 'Core/GeometryInstance', @@ -31,10 +30,8 @@ defineSuite([ 'Core/SphereGeometry', 'Core/Transforms', 'Core/WallGeometry', - 'Renderer/ClearCommand', 'Scene/EllipsoidSurfaceAppearance', 'Scene/Material', - 'Scene/OrthographicFrustum', 'Scene/PerInstanceColorAppearance', 'Scene/PolylineColorAppearance', 'Scene/Primitive', @@ -57,7 +54,6 @@ defineSuite([ EllipseGeometry, Ellipsoid, EllipsoidGeometry, - GeographicProjection, Geometry, GeometryAttribute, GeometryInstance, @@ -73,10 +69,8 @@ defineSuite([ SphereGeometry, Transforms, WallGeometry, - ClearCommand, EllipsoidSurfaceAppearance, Material, - OrthographicFrustum, PerInstanceColorAppearance, PolylineColorAppearance, Primitive, diff --git a/Specs/Scene/GlobeSpec.js b/Specs/Scene/GlobeSpec.js index 466b18231e9a..78de4c934908 100644 --- a/Specs/Scene/GlobeSpec.js +++ b/Specs/Scene/GlobeSpec.js @@ -3,10 +3,8 @@ defineSuite([ 'Scene/Globe', 'Core/CesiumTerrainProvider', 'Core/defined', - 'Core/Ellipsoid', 'Core/loadWithXhr', 'Core/Rectangle', - 'Renderer/ClearCommand', 'Scene/SingleTileImageryProvider', 'Specs/createScene', 'Specs/pollToPromise' @@ -14,10 +12,8 @@ defineSuite([ Globe, CesiumTerrainProvider, defined, - Ellipsoid, loadWithXhr, Rectangle, - ClearCommand, SingleTileImageryProvider, createScene, pollToPromise) { diff --git a/Specs/Scene/GlobeSurfaceTileProviderSpec.js b/Specs/Scene/GlobeSurfaceTileProviderSpec.js index b4685e66e783..91ae16b315eb 100644 --- a/Specs/Scene/GlobeSurfaceTileProviderSpec.js +++ b/Specs/Scene/GlobeSurfaceTileProviderSpec.js @@ -9,7 +9,6 @@ defineSuite([ 'Core/Ellipsoid', 'Core/EllipsoidTerrainProvider', 'Core/GeographicProjection', - 'Core/Math', 'Core/Rectangle', 'Core/WebMercatorProjection', 'Renderer/ContextLimits', @@ -19,7 +18,6 @@ defineSuite([ 'Scene/Globe', 'Scene/GlobeSurfaceShaderSet', 'Scene/ImageryLayerCollection', - 'Scene/OrthographicFrustum', 'Scene/QuadtreeTile', 'Scene/QuadtreeTileProvider', 'Scene/SceneMode', @@ -37,7 +35,6 @@ defineSuite([ Ellipsoid, EllipsoidTerrainProvider, GeographicProjection, - CesiumMath, Rectangle, WebMercatorProjection, ContextLimits, @@ -47,7 +44,6 @@ defineSuite([ Globe, GlobeSurfaceShaderSet, ImageryLayerCollection, - OrthographicFrustum, QuadtreeTile, QuadtreeTileProvider, SceneMode, diff --git a/Specs/Scene/GoogleEarthImageryProviderSpec.js b/Specs/Scene/GoogleEarthImageryProviderSpec.js index b642eed65e88..7df3ce2e74ea 100644 --- a/Specs/Scene/GoogleEarthImageryProviderSpec.js +++ b/Specs/Scene/GoogleEarthImageryProviderSpec.js @@ -2,7 +2,6 @@ defineSuite([ 'Scene/GoogleEarthImageryProvider', 'Core/DefaultProxy', - 'Core/defined', 'Core/GeographicTilingScheme', 'Core/loadImage', 'Core/loadWithXhr', @@ -16,7 +15,6 @@ defineSuite([ ], function( GoogleEarthImageryProvider, DefaultProxy, - defined, GeographicTilingScheme, loadImage, loadWithXhr, diff --git a/Specs/Scene/GroundPrimitiveSpec.js b/Specs/Scene/GroundPrimitiveSpec.js index a09afbb7360e..a64916d714dc 100644 --- a/Specs/Scene/GroundPrimitiveSpec.js +++ b/Specs/Scene/GroundPrimitiveSpec.js @@ -1,64 +1,40 @@ /*global defineSuite*/ defineSuite([ 'Scene/GroundPrimitive', - 'Core/Cartesian3', 'Core/Color', 'Core/ColorGeometryInstanceAttribute', - 'Core/ComponentDatatype', 'Core/destroyObject', 'Core/DistanceDisplayConditionGeometryInstanceAttribute', 'Core/Ellipsoid', - 'Core/Geometry', - 'Core/GeometryAttribute', 'Core/GeometryInstance', - 'Core/GeometryInstanceAttribute', 'Core/HeadingPitchRange', 'Core/Math', 'Core/PolygonGeometry', - 'Core/PrimitiveType', 'Core/Rectangle', 'Core/RectangleGeometry', - 'Core/RuntimeError', 'Core/ShowGeometryInstanceAttribute', - 'Core/Transforms', - 'Scene/MaterialAppearance', - 'Scene/OrthographicFrustum', 'Scene/Pass', 'Scene/PerInstanceColorAppearance', 'Scene/Primitive', - 'Scene/SceneMode', - 'Specs/BadGeometry', 'Specs/createScene', 'Specs/pollToPromise' ], function( GroundPrimitive, - Cartesian3, Color, ColorGeometryInstanceAttribute, - ComponentDatatype, destroyObject, DistanceDisplayConditionGeometryInstanceAttribute, Ellipsoid, - Geometry, - GeometryAttribute, GeometryInstance, - GeometryInstanceAttribute, HeadingPitchRange, CesiumMath, PolygonGeometry, - PrimitiveType, Rectangle, RectangleGeometry, - RuntimeError, ShowGeometryInstanceAttribute, - Transforms, - MaterialAppearance, - OrthographicFrustum, Pass, PerInstanceColorAppearance, Primitive, - SceneMode, - BadGeometry, createScene, pollToPromise) { 'use strict'; diff --git a/Specs/Scene/ImageryLayerSpec.js b/Specs/Scene/ImageryLayerSpec.js index 94ddc52ac0a2..88a8804b12fd 100644 --- a/Specs/Scene/ImageryLayerSpec.js +++ b/Specs/Scene/ImageryLayerSpec.js @@ -10,7 +10,6 @@ defineSuite([ 'Scene/ArcGisMapServerImageryProvider', 'Scene/BingMapsImageryProvider', 'Scene/createTileMapServiceImageryProvider', - 'Scene/Globe', 'Scene/GlobeSurfaceTile', 'Scene/Imagery', 'Scene/ImageryLayerCollection', @@ -32,7 +31,6 @@ defineSuite([ ArcGisMapServerImageryProvider, BingMapsImageryProvider, createTileMapServiceImageryProvider, - Globe, GlobeSurfaceTile, Imagery, ImageryLayerCollection, diff --git a/Specs/Scene/LabelCollectionSpec.js b/Specs/Scene/LabelCollectionSpec.js index 3b61582483be..b23b9f579169 100644 --- a/Specs/Scene/LabelCollectionSpec.js +++ b/Specs/Scene/LabelCollectionSpec.js @@ -8,17 +8,14 @@ defineSuite([ 'Core/Color', 'Core/defined', 'Core/DistanceDisplayCondition', - 'Core/Ellipsoid', 'Core/Math', 'Core/NearFarScalar', 'Core/Rectangle', - 'Renderer/ContextLimits', 'Scene/Globe', 'Scene/HeightReference', 'Scene/HorizontalOrigin', 'Scene/Label', 'Scene/LabelStyle', - 'Scene/OrthographicFrustum', 'Scene/VerticalOrigin', 'Specs/createGlobe', 'Specs/createScene' @@ -31,17 +28,14 @@ defineSuite([ Color, defined, DistanceDisplayCondition, - Ellipsoid, CesiumMath, NearFarScalar, Rectangle, - ContextLimits, Globe, HeightReference, HorizontalOrigin, Label, LabelStyle, - OrthographicFrustum, VerticalOrigin, createGlobe, createScene) { diff --git a/Specs/Scene/MaterialAppearanceSpec.js b/Specs/Scene/MaterialAppearanceSpec.js index 28a305b88217..d2d535827b5a 100644 --- a/Specs/Scene/MaterialAppearanceSpec.js +++ b/Specs/Scene/MaterialAppearanceSpec.js @@ -7,7 +7,6 @@ defineSuite([ 'Core/GeometryInstance', 'Core/Rectangle', 'Core/RectangleGeometry', - 'Renderer/ClearCommand', 'Scene/Appearance', 'Scene/Material', 'Scene/Primitive', @@ -20,7 +19,6 @@ defineSuite([ GeometryInstance, Rectangle, RectangleGeometry, - ClearCommand, Appearance, Material, Primitive, diff --git a/Specs/Scene/MaterialSpec.js b/Specs/Scene/MaterialSpec.js index e6c3b44b71ca..0be40157f399 100644 --- a/Specs/Scene/MaterialSpec.js +++ b/Specs/Scene/MaterialSpec.js @@ -3,17 +3,11 @@ defineSuite([ 'Scene/Material', 'Core/Cartesian3', 'Core/Color', - 'Core/ColorGeometryInstanceAttribute', 'Core/defaultValue', 'Core/Ellipsoid', 'Core/GeometryInstance', - 'Core/Math', - 'Core/Matrix4', - 'Core/PolygonGeometry', 'Core/Rectangle', 'Core/RectangleGeometry', - 'Renderer/ClearCommand', - 'Scene/EllipsoidSurfaceAppearance', 'Scene/MaterialAppearance', 'Scene/PolylineCollection', 'Scene/Primitive', @@ -23,17 +17,11 @@ defineSuite([ Material, Cartesian3, Color, - ColorGeometryInstanceAttribute, defaultValue, Ellipsoid, GeometryInstance, - CesiumMath, - Matrix4, - PolygonGeometry, Rectangle, RectangleGeometry, - ClearCommand, - EllipsoidSurfaceAppearance, MaterialAppearance, PolylineCollection, Primitive, diff --git a/Specs/Scene/ModelSpec.js b/Specs/Scene/ModelSpec.js index 444c9a9d1137..a7ad11f11fa2 100644 --- a/Specs/Scene/ModelSpec.js +++ b/Specs/Scene/ModelSpec.js @@ -7,7 +7,6 @@ defineSuite([ 'Core/CesiumTerrainProvider', 'Core/clone', 'Core/combine', - 'Core/defaultValue', 'Core/defined', 'Core/defineProperties', 'Core/DistanceDisplayCondition', @@ -39,7 +38,6 @@ defineSuite([ CesiumTerrainProvider, clone, combine, - defaultValue, defined, defineProperties, DistanceDisplayCondition, diff --git a/Specs/Scene/MoonSpec.js b/Specs/Scene/MoonSpec.js index e38e521411c5..a743dfe7ec6c 100644 --- a/Specs/Scene/MoonSpec.js +++ b/Specs/Scene/MoonSpec.js @@ -2,24 +2,20 @@ defineSuite([ 'Scene/Moon', 'Core/BoundingSphere', - 'Core/Cartesian3', 'Core/Color', 'Core/defined', 'Core/Ellipsoid', 'Core/Matrix3', - 'Core/Matrix4', 'Core/Simon1994PlanetaryPositions', 'Core/Transforms', 'Specs/createScene' ], function( Moon, BoundingSphere, - Cartesian3, Color, defined, Ellipsoid, Matrix3, - Matrix4, Simon1994PlanetaryPositions, Transforms, createScene) { diff --git a/Specs/Scene/PerInstanceColorAppearanceSpec.js b/Specs/Scene/PerInstanceColorAppearanceSpec.js index db0352c87045..4c87261aa69d 100644 --- a/Specs/Scene/PerInstanceColorAppearanceSpec.js +++ b/Specs/Scene/PerInstanceColorAppearanceSpec.js @@ -5,7 +5,6 @@ defineSuite([ 'Core/GeometryInstance', 'Core/Rectangle', 'Core/RectangleGeometry', - 'Renderer/ClearCommand', 'Scene/Appearance', 'Scene/Primitive', 'Specs/createScene' @@ -15,7 +14,6 @@ defineSuite([ GeometryInstance, Rectangle, RectangleGeometry, - ClearCommand, Appearance, Primitive, createScene) { diff --git a/Specs/Scene/PickSpec.js b/Specs/Scene/PickSpec.js index ee2e62e6d99f..4f462a08243f 100644 --- a/Specs/Scene/PickSpec.js +++ b/Specs/Scene/PickSpec.js @@ -1,34 +1,26 @@ /*global defineSuite*/ defineSuite([ 'Core/Cartesian2', - 'Core/Cartesian3', - 'Core/Ellipsoid', 'Core/FeatureDetection', 'Core/GeometryInstance', 'Core/Math', - 'Core/Matrix4', 'Core/Rectangle', 'Core/RectangleGeometry', 'Core/ShowGeometryInstanceAttribute', 'Scene/EllipsoidSurfaceAppearance', - 'Scene/OrthographicFrustum', 'Scene/PerspectiveFrustum', 'Scene/Primitive', 'Scene/SceneMode', 'Specs/createScene' ], 'Scene/Pick', function( Cartesian2, - Cartesian3, - Ellipsoid, FeatureDetection, GeometryInstance, CesiumMath, - Matrix4, Rectangle, RectangleGeometry, ShowGeometryInstanceAttribute, EllipsoidSurfaceAppearance, - OrthographicFrustum, PerspectiveFrustum, Primitive, SceneMode, diff --git a/Specs/Scene/PointPrimitiveCollectionSpec.js b/Specs/Scene/PointPrimitiveCollectionSpec.js index ef8f95a99aaa..521c33a6d4d4 100644 --- a/Specs/Scene/PointPrimitiveCollectionSpec.js +++ b/Specs/Scene/PointPrimitiveCollectionSpec.js @@ -10,7 +10,6 @@ defineSuite([ 'Core/Math', 'Core/NearFarScalar', 'Core/Rectangle', - 'Scene/OrthographicFrustum', 'Scene/PointPrimitive', 'Specs/createScene' ], function( @@ -24,7 +23,6 @@ defineSuite([ CesiumMath, NearFarScalar, Rectangle, - OrthographicFrustum, PointPrimitive, createScene) { 'use strict'; diff --git a/Specs/Scene/PrimitiveCollectionSpec.js b/Specs/Scene/PrimitiveCollectionSpec.js index 5f68ce96c6ee..d1495de85684 100644 --- a/Specs/Scene/PrimitiveCollectionSpec.js +++ b/Specs/Scene/PrimitiveCollectionSpec.js @@ -1,13 +1,10 @@ /*global defineSuite*/ defineSuite([ 'Scene/PrimitiveCollection', - 'Core/Cartesian3', 'Core/ColorGeometryInstanceAttribute', 'Core/defaultValue', 'Core/defined', 'Core/GeometryInstance', - 'Core/Math', - 'Core/Matrix4', 'Core/Rectangle', 'Core/RectangleGeometry', 'Scene/HorizontalOrigin', @@ -18,13 +15,10 @@ defineSuite([ 'Specs/createScene' ], function( PrimitiveCollection, - Cartesian3, ColorGeometryInstanceAttribute, defaultValue, defined, GeometryInstance, - CesiumMath, - Matrix4, Rectangle, RectangleGeometry, HorizontalOrigin, diff --git a/Specs/Scene/PrimitiveCullingSpec.js b/Specs/Scene/PrimitiveCullingSpec.js index f295209e315e..0adeeeaf5b9c 100644 --- a/Specs/Scene/PrimitiveCullingSpec.js +++ b/Specs/Scene/PrimitiveCullingSpec.js @@ -1,70 +1,44 @@ /*global defineSuite*/ defineSuite([ - 'Core/BoundingSphere', - 'Core/Cartesian2', 'Core/Cartesian3', 'Core/Color', 'Core/ColorGeometryInstanceAttribute', 'Core/defaultValue', - 'Core/Ellipsoid', 'Core/GeometryInstance', 'Core/loadImage', - 'Core/Math', - 'Core/Occluder', - 'Core/PolygonGeometry', 'Core/Rectangle', 'Core/RectangleGeometry', 'Core/Transforms', - 'Renderer/Sampler', - 'Renderer/TextureMagnificationFilter', - 'Renderer/TextureMinificationFilter', 'Scene/BillboardCollection', - 'Scene/EllipsoidSurfaceAppearance', 'Scene/Globe', 'Scene/HorizontalOrigin', 'Scene/LabelCollection', 'Scene/Material', - 'Scene/OrthographicFrustum', 'Scene/PerInstanceColorAppearance', 'Scene/PolylineCollection', 'Scene/Primitive', - 'Scene/PrimitiveCollection', 'Scene/SceneMode', - 'Scene/TextureAtlas', 'Scene/VerticalOrigin', 'Specs/createScene' ], 'Scene/PrimitiveCulling', function( - BoundingSphere, - Cartesian2, Cartesian3, Color, ColorGeometryInstanceAttribute, defaultValue, - Ellipsoid, GeometryInstance, loadImage, - CesiumMath, - Occluder, - PolygonGeometry, Rectangle, RectangleGeometry, Transforms, - Sampler, - TextureMagnificationFilter, - TextureMinificationFilter, BillboardCollection, - EllipsoidSurfaceAppearance, Globe, HorizontalOrigin, LabelCollection, Material, - OrthographicFrustum, PerInstanceColorAppearance, PolylineCollection, Primitive, - PrimitiveCollection, SceneMode, - TextureAtlas, VerticalOrigin, createScene) { 'use strict'; diff --git a/Specs/Scene/PrimitiveSpec.js b/Specs/Scene/PrimitiveSpec.js index 6d491c2c00ea..10819409f2f6 100644 --- a/Specs/Scene/PrimitiveSpec.js +++ b/Specs/Scene/PrimitiveSpec.js @@ -21,12 +21,10 @@ defineSuite([ 'Core/PrimitiveType', 'Core/Rectangle', 'Core/RectangleGeometry', - 'Core/RuntimeError', 'Core/ShowGeometryInstanceAttribute', 'Core/Transforms', 'Scene/Camera', 'Scene/MaterialAppearance', - 'Scene/OrthographicFrustum', 'Scene/PerInstanceColorAppearance', 'Scene/SceneMode', 'Specs/BadGeometry', @@ -54,12 +52,10 @@ defineSuite([ PrimitiveType, Rectangle, RectangleGeometry, - RuntimeError, ShowGeometryInstanceAttribute, Transforms, Camera, MaterialAppearance, - OrthographicFrustum, PerInstanceColorAppearance, SceneMode, BadGeometry, diff --git a/Specs/Scene/ScreenSpaceCameraControllerSpec.js b/Specs/Scene/ScreenSpaceCameraControllerSpec.js index e1c42abae3fd..e5cca443b05d 100644 --- a/Specs/Scene/ScreenSpaceCameraControllerSpec.js +++ b/Specs/Scene/ScreenSpaceCameraControllerSpec.js @@ -4,7 +4,6 @@ defineSuite([ 'Core/Cartesian2', 'Core/Cartesian3', 'Core/combine', - 'Core/defined', 'Core/Ellipsoid', 'Core/FeatureDetection', 'Core/GeographicProjection', @@ -26,7 +25,6 @@ defineSuite([ Cartesian2, Cartesian3, combine, - defined, Ellipsoid, FeatureDetection, GeographicProjection, diff --git a/Specs/Scene/SkyAtmosphereSpec.js b/Specs/Scene/SkyAtmosphereSpec.js index d2b61728dc20..6e6121e261a8 100644 --- a/Specs/Scene/SkyAtmosphereSpec.js +++ b/Specs/Scene/SkyAtmosphereSpec.js @@ -4,7 +4,6 @@ defineSuite([ 'Core/Cartesian3', 'Core/Ellipsoid', 'Core/Math', - 'Renderer/ClearCommand', 'Scene/SceneMode', 'Specs/createScene' ], function( @@ -12,7 +11,6 @@ defineSuite([ Cartesian3, Ellipsoid, CesiumMath, - ClearCommand, SceneMode, createScene) { 'use strict'; diff --git a/Specs/Scene/SkyBoxSpec.js b/Specs/Scene/SkyBoxSpec.js index a109d5ed20d0..de55582f714f 100644 --- a/Specs/Scene/SkyBoxSpec.js +++ b/Specs/Scene/SkyBoxSpec.js @@ -1,16 +1,12 @@ /*global defineSuite*/ defineSuite([ 'Scene/SkyBox', - 'Core/Cartesian3', 'Core/loadImage', - 'Renderer/ClearCommand', 'Scene/SceneMode', 'Specs/createScene' ], function( SkyBox, - Cartesian3, loadImage, - ClearCommand, SceneMode, createScene) { 'use strict'; diff --git a/Specs/Scene/SunSpec.js b/Specs/Scene/SunSpec.js index 135e892f63dc..06b2a5693047 100644 --- a/Specs/Scene/SunSpec.js +++ b/Specs/Scene/SunSpec.js @@ -2,21 +2,15 @@ defineSuite([ 'Scene/Sun', 'Core/BoundingSphere', - 'Core/Cartesian3', 'Core/Color', - 'Core/Ellipsoid', 'Core/Math', - 'Core/Matrix4', 'Scene/SceneMode', 'Specs/createScene' ], function( Sun, BoundingSphere, - Cartesian3, Color, - Ellipsoid, CesiumMath, - Matrix4, SceneMode, createScene) { 'use strict'; diff --git a/Specs/Scene/TileCoordinatesImageryProviderSpec.js b/Specs/Scene/TileCoordinatesImageryProviderSpec.js index 82bfeea7559c..e6f4b954cf34 100644 --- a/Specs/Scene/TileCoordinatesImageryProviderSpec.js +++ b/Specs/Scene/TileCoordinatesImageryProviderSpec.js @@ -1,7 +1,6 @@ /*global defineSuite*/ defineSuite([ 'Scene/TileCoordinatesImageryProvider', - 'Core/defined', 'Core/Ellipsoid', 'Core/GeographicTilingScheme', 'Core/WebMercatorTilingScheme', @@ -10,7 +9,6 @@ defineSuite([ 'ThirdParty/when' ], function( TileCoordinatesImageryProvider, - defined, Ellipsoid, GeographicTilingScheme, WebMercatorTilingScheme, diff --git a/Specs/Scene/ViewportQuadSpec.js b/Specs/Scene/ViewportQuadSpec.js index ba5311e8fa3e..7184e72cf57f 100644 --- a/Specs/Scene/ViewportQuadSpec.js +++ b/Specs/Scene/ViewportQuadSpec.js @@ -4,7 +4,6 @@ defineSuite([ 'Core/BoundingRectangle', 'Core/Color', 'Core/loadImage', - 'Renderer/ClearCommand', 'Renderer/Texture', 'Scene/Material', 'Specs/createScene', @@ -14,7 +13,6 @@ defineSuite([ BoundingRectangle, Color, loadImage, - ClearCommand, Texture, Material, createScene, diff --git a/Specs/Scene/WebMapServiceImageryProviderSpec.js b/Specs/Scene/WebMapServiceImageryProviderSpec.js index b5f30a7ddb34..462499999dbc 100644 --- a/Specs/Scene/WebMapServiceImageryProviderSpec.js +++ b/Specs/Scene/WebMapServiceImageryProviderSpec.js @@ -3,7 +3,6 @@ defineSuite([ 'Scene/WebMapServiceImageryProvider', 'Core/Cartographic', 'Core/DefaultProxy', - 'Core/defined', 'Core/Ellipsoid', 'Core/GeographicTilingScheme', 'Core/loadImage', @@ -19,13 +18,11 @@ defineSuite([ 'Scene/ImageryProvider', 'Scene/ImageryState', 'Specs/pollToPromise', - 'ThirdParty/Uri', - 'ThirdParty/when' + 'ThirdParty/Uri' ], function( WebMapServiceImageryProvider, Cartographic, DefaultProxy, - defined, Ellipsoid, GeographicTilingScheme, loadImage, @@ -41,8 +38,7 @@ defineSuite([ ImageryProvider, ImageryState, pollToPromise, - Uri, - when) { + Uri) { 'use strict'; afterEach(function() { diff --git a/Specs/Scene/WebMapTileServiceImageryProviderSpec.js b/Specs/Scene/WebMapTileServiceImageryProviderSpec.js index 8dea133eea30..078a18542a65 100644 --- a/Specs/Scene/WebMapTileServiceImageryProviderSpec.js +++ b/Specs/Scene/WebMapTileServiceImageryProviderSpec.js @@ -3,7 +3,6 @@ defineSuite([ 'Scene/WebMapTileServiceImageryProvider', 'Core/Credit', 'Core/DefaultProxy', - 'Core/defined', 'Core/GeographicTilingScheme', 'Core/loadImage', 'Core/queryToObject', @@ -18,7 +17,6 @@ defineSuite([ WebMapTileServiceImageryProvider, Credit, DefaultProxy, - defined, GeographicTilingScheme, loadImage, queryToObject, diff --git a/Specs/Scene/createOpenStreetMapImageryProviderSpec.js b/Specs/Scene/createOpenStreetMapImageryProviderSpec.js index 94c79e28f307..77800b4d2983 100644 --- a/Specs/Scene/createOpenStreetMapImageryProviderSpec.js +++ b/Specs/Scene/createOpenStreetMapImageryProviderSpec.js @@ -8,7 +8,6 @@ defineSuite([ 'Core/WebMercatorTilingScheme', 'Scene/Imagery', 'Scene/ImageryLayer', - 'Scene/ImageryProvider', 'Scene/ImageryState', 'Scene/UrlTemplateImageryProvider', 'Specs/pollToPromise' @@ -21,7 +20,6 @@ defineSuite([ WebMercatorTilingScheme, Imagery, ImageryLayer, - ImageryProvider, ImageryState, UrlTemplateImageryProvider, pollToPromise) { diff --git a/Specs/Widgets/CesiumInspector/CesiumInspectorViewModelSpec.js b/Specs/Widgets/CesiumInspector/CesiumInspectorViewModelSpec.js index b74b124d4166..943895de0fc1 100644 --- a/Specs/Widgets/CesiumInspector/CesiumInspectorViewModelSpec.js +++ b/Specs/Widgets/CesiumInspector/CesiumInspectorViewModelSpec.js @@ -10,7 +10,6 @@ defineSuite([ 'Scene/EllipsoidSurfaceAppearance', 'Scene/Globe', 'Scene/GlobeSurfaceTile', - 'Scene/Material', 'Scene/Primitive', 'Scene/QuadtreeTile', 'Specs/createScene' @@ -25,7 +24,6 @@ defineSuite([ EllipsoidSurfaceAppearance, Globe, GlobeSurfaceTile, - Material, Primitive, QuadtreeTile, createScene) { diff --git a/Specs/Widgets/InfoBox/InfoBoxViewModelSpec.js b/Specs/Widgets/InfoBox/InfoBoxViewModelSpec.js index 2b4add7e8474..e269a982f702 100644 --- a/Specs/Widgets/InfoBox/InfoBoxViewModelSpec.js +++ b/Specs/Widgets/InfoBox/InfoBoxViewModelSpec.js @@ -1,10 +1,8 @@ /*global defineSuite*/ defineSuite([ - 'Widgets/InfoBox/InfoBoxViewModel', - 'Specs/pollToPromise' + 'Widgets/InfoBox/InfoBoxViewModel' ], function( - InfoBoxViewModel, - pollToPromise) { + InfoBoxViewModel) { 'use strict'; it('constructor sets expected values', function() { diff --git a/Specs/Widgets/SvgPathBindingHandlerSpec.js b/Specs/Widgets/SvgPathBindingHandlerSpec.js index e84f49cb8367..b1014541e0c8 100644 --- a/Specs/Widgets/SvgPathBindingHandlerSpec.js +++ b/Specs/Widgets/SvgPathBindingHandlerSpec.js @@ -1,9 +1,7 @@ /*global defineSuite*/ defineSuite([ - 'Widgets/SvgPathBindingHandler', 'ThirdParty/knockout' ], function( - SvgPathBindingHandler, knockout) { 'use strict'; diff --git a/Specs/Widgets/Viewer/ViewerSpec.js b/Specs/Widgets/Viewer/ViewerSpec.js index 5fd773162693..a5fbed70cfa6 100644 --- a/Specs/Widgets/Viewer/ViewerSpec.js +++ b/Specs/Widgets/Viewer/ViewerSpec.js @@ -1,6 +1,5 @@ /*global defineSuite*/ defineSuite([ - 'Widgets/Viewer/Viewer', 'Core/Cartesian3', 'Core/ClockRange', 'Core/ClockStep', @@ -35,7 +34,6 @@ defineSuite([ 'Widgets/SelectionIndicator/SelectionIndicator', 'Widgets/Timeline/Timeline' ], function( - Viewer, Cartesian3, ClockRange, ClockStep, diff --git a/Specs/createPackableArraySpecs.js b/Specs/createPackableArraySpecs.js index 47cd53a4c88e..2ea31b3fedc9 100644 --- a/Specs/createPackableArraySpecs.js +++ b/Specs/createPackableArraySpecs.js @@ -1,10 +1,8 @@ /*global define*/ define([ - 'Core/defaultValue', - 'Core/defined' + 'Core/defaultValue' ], function( - defaultValue, - defined) { + defaultValue) { 'use strict'; function createPackableArraySpecs(packable, unpackedArray, packedArray, namePrefix) { diff --git a/Specs/createScene.js b/Specs/createScene.js index 09111123dfbf..bbb1d7e7009f 100644 --- a/Specs/createScene.js +++ b/Specs/createScene.js @@ -4,7 +4,6 @@ define([ 'Core/clone', 'Core/defaultValue', 'Core/defined', - 'Core/queryToObject', 'Scene/Scene', 'Specs/createCanvas', 'Specs/destroyCanvas' @@ -13,7 +12,6 @@ define([ clone, defaultValue, defined, - queryToObject, Scene, createCanvas, destroyCanvas) { diff --git a/Specs/render.js b/Specs/render.js index b769b1e485ec..ed2caf3d0346 100644 --- a/Specs/render.js +++ b/Specs/render.js @@ -1,12 +1,10 @@ /*global define*/ define([ - 'Core/defaultValue', 'Core/defined', 'Core/Intersect', 'Scene/Pass', 'Scene/SceneMode' ], function( - defaultValue, defined, Intersect, Pass, From 3550a1fa150dddd2e47040835f80e339efe27cd8 Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Tue, 22 Nov 2016 12:07:56 -0500 Subject: [PATCH 097/103] Billboard halfsize must be computed after compressedAttributes. Compressed vertex attributes must be integers. Billboard halfSize is needed for computing the distance from the center of the billboard out to one of the corners. But the half-size can have a .5 fractional component, from the least significant bit of the original billboard size. So this 0.5 must be computed after the compressed vertex attribute has already been unpacked. --- Source/Scene/BillboardCollection.js | 4 ++-- Source/Shaders/BillboardCollectionVS.glsl | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/Scene/BillboardCollection.js b/Source/Scene/BillboardCollection.js index 78836da2f652..6a09335c9654 100644 --- a/Source/Scene/BillboardCollection.js +++ b/Source/Scene/BillboardCollection.js @@ -915,7 +915,7 @@ define([ } var textureWidth = billboardCollection._textureAtlas.texture.width; - var imageWidth = Math.ceil(defaultValue(billboard.width, textureWidth * width) * 0.5); + var imageWidth = Math.round(defaultValue(billboard.width, textureWidth * width)); billboardCollection._maxSize = Math.max(billboardCollection._maxSize, imageWidth); var compressed0 = CesiumMath.clamp(imageWidth, 0.0, LEFT_SHIFT16); @@ -970,7 +970,7 @@ define([ } var dimensions = billboardCollection._textureAtlas.texture.dimensions; - var imageHeight = Math.ceil(defaultValue(billboard.height, dimensions.y * height) * 0.5); + var imageHeight = Math.round(defaultValue(billboard.height, dimensions.y * height)); billboardCollection._maxSize = Math.max(billboardCollection._maxSize, imageHeight); var red = Color.floatToByte(color.red); diff --git a/Source/Shaders/BillboardCollectionVS.glsl b/Source/Shaders/BillboardCollectionVS.glsl index 232661ddb6eb..3469a2165be4 100644 --- a/Source/Shaders/BillboardCollectionVS.glsl +++ b/Source/Shaders/BillboardCollectionVS.glsl @@ -38,7 +38,7 @@ const float SHIFT_RIGHT1 = 1.0 / 2.0; vec4 computePositionWindowCoordinates(vec4 positionEC, vec2 imageSize, float scale, vec2 direction, vec2 origin, vec2 translate, vec2 pixelOffset, vec3 alignedAxis, bool validAlignedAxis, float rotation, bool sizeInMeters) { - vec2 halfSize = imageSize * scale * czm_resolutionScale; + vec2 halfSize = imageSize * scale * czm_resolutionScale * 0.5; halfSize *= ((direction * 2.0) - 1.0); vec2 originTranslate = origin * abs(halfSize); From 79a196297c357520ecee6c8f791a10826f893af2 Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Mon, 21 Nov 2016 13:09:00 -0500 Subject: [PATCH 098/103] Change Billboard depth function from LESS to LEQUAL. --- CHANGES.md | 1 + Source/Scene/BillboardCollection.js | 5 ++++- Source/Scene/PointPrimitiveCollection.js | 5 ++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b6b5b82dd5a3..c7beedadb6b5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,7 @@ Change Log * Breaking changes * * Improved terrain/imagery load ordering, especially when the terrain is already fully loaded and we add a new imagery layer. This results in a 25% reduction in load times in many cases. +* Billboard depth testing changed from `LESS` to `LEQUAL`, allowing label glyphs of equal depths to overlap. * Added support for saving html and css in Github Gists. [#4125](https://github.com/AnalyticalGraphicsInc/cesium/issues/4125) * Fixed `Cartographic.fromCartesian` when the cartesian is not on the ellipsoid surface. [#4611](https://github.com/AnalyticalGraphicsInc/cesium/issues/4611) diff --git a/Source/Scene/BillboardCollection.js b/Source/Scene/BillboardCollection.js index 6a09335c9654..34370f8819de 100644 --- a/Source/Scene/BillboardCollection.js +++ b/Source/Scene/BillboardCollection.js @@ -22,6 +22,7 @@ define([ '../Renderer/ShaderProgram', '../Renderer/ShaderSource', '../Renderer/VertexArrayFacade', + '../Renderer/WebGLConstants', '../Shaders/BillboardCollectionFS', '../Shaders/BillboardCollectionVS', './Billboard', @@ -55,6 +56,7 @@ define([ ShaderProgram, ShaderSource, VertexArrayFacade, + WebGLConstants, BillboardCollectionFS, BillboardCollectionVS, Billboard, @@ -1424,7 +1426,8 @@ define([ if (!defined(this._rs)) { this._rs = RenderState.fromCache({ depthTest : { - enabled : true + enabled : true, + func : WebGLConstants.LEQUAL // Allows label glyphs and billboards to overlap. }, blending : BlendingState.ALPHA_BLEND }); diff --git a/Source/Scene/PointPrimitiveCollection.js b/Source/Scene/PointPrimitiveCollection.js index 1d4a241b7dc4..e241049c4b3c 100644 --- a/Source/Scene/PointPrimitiveCollection.js +++ b/Source/Scene/PointPrimitiveCollection.js @@ -21,6 +21,7 @@ define([ '../Renderer/ShaderProgram', '../Renderer/ShaderSource', '../Renderer/VertexArrayFacade', + '../Renderer/WebGLConstants', '../Shaders/PointPrimitiveCollectionFS', '../Shaders/PointPrimitiveCollectionVS', './BlendingState', @@ -49,6 +50,7 @@ define([ ShaderProgram, ShaderSource, VertexArrayFacade, + WebGLConstants, PointPrimitiveCollectionFS, PointPrimitiveCollectionVS, BlendingState, @@ -852,7 +854,8 @@ define([ if (!defined(this._rs)) { this._rs = RenderState.fromCache({ depthTest : { - enabled : true + enabled : true, + func : WebGLConstants.LEQUAL }, blending : BlendingState.ALPHA_BLEND }); From eeb284c149a81a7b80bde28117ca17a0328afde1 Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Tue, 22 Nov 2016 12:11:15 -0500 Subject: [PATCH 099/103] Apply textureAtlas border to the outer edges of atlas. Previously, it was only applied between textures within the interior of the atlas, not on the lower and left sides. It was effectively applied on the upper and right sides, since each interior texture has its own border on the upper and right sides. --- Source/Scene/TextureAtlas.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Source/Scene/TextureAtlas.js b/Source/Scene/TextureAtlas.js index adf579f2c555..5fc494f86d91 100644 --- a/Source/Scene/TextureAtlas.js +++ b/Source/Scene/TextureAtlas.js @@ -171,18 +171,19 @@ define([ var context = textureAtlas._context; var numImages = textureAtlas.numberOfImages; var scalingFactor = 2.0; + var borderWidthInPixels = textureAtlas._borderWidthInPixels; if (numImages > 0) { var oldAtlasWidth = textureAtlas._texture.width; var oldAtlasHeight = textureAtlas._texture.height; - var atlasWidth = scalingFactor * (oldAtlasWidth + image.width + textureAtlas._borderWidthInPixels); - var atlasHeight = scalingFactor * (oldAtlasHeight + image.height + textureAtlas._borderWidthInPixels); + var atlasWidth = scalingFactor * (oldAtlasWidth + image.width + borderWidthInPixels); + var atlasHeight = scalingFactor * (oldAtlasHeight + image.height + borderWidthInPixels); var widthRatio = oldAtlasWidth / atlasWidth; var heightRatio = oldAtlasHeight / atlasHeight; // Create new node structure, putting the old root node in the bottom left. - var nodeBottomRight = new TextureAtlasNode(new Cartesian2(oldAtlasWidth + textureAtlas._borderWidthInPixels, 0.0), new Cartesian2(atlasWidth, oldAtlasHeight)); + var nodeBottomRight = new TextureAtlasNode(new Cartesian2(oldAtlasWidth + borderWidthInPixels, borderWidthInPixels), new Cartesian2(atlasWidth, oldAtlasHeight)); var nodeBottomHalf = new TextureAtlasNode(new Cartesian2(), new Cartesian2(atlasWidth, oldAtlasHeight), textureAtlas._root, nodeBottomRight); - var nodeTopHalf = new TextureAtlasNode(new Cartesian2(0.0, oldAtlasHeight + textureAtlas._borderWidthInPixels), new Cartesian2(atlasWidth, atlasHeight)); + var nodeTopHalf = new TextureAtlasNode(new Cartesian2(borderWidthInPixels, oldAtlasHeight + borderWidthInPixels), new Cartesian2(atlasWidth, atlasHeight)); var nodeMain = new TextureAtlasNode(new Cartesian2(), new Cartesian2(atlasWidth, atlasHeight), nodeBottomHalf, nodeTopHalf); // Resize texture coordinates. @@ -219,8 +220,8 @@ define([ textureAtlas._root = nodeMain; } else { // First image exceeds initialSize - var initialWidth = scalingFactor * (image.width + textureAtlas._borderWidthInPixels); - var initialHeight = scalingFactor * (image.height + textureAtlas._borderWidthInPixels); + var initialWidth = scalingFactor * (image.width + 2 * borderWidthInPixels); + var initialHeight = scalingFactor * (image.height + 2 * borderWidthInPixels); if(initialWidth < textureAtlas._initialSize.x) { initialWidth = textureAtlas._initialSize.x; } @@ -234,7 +235,8 @@ define([ height : initialHeight, pixelFormat : textureAtlas._pixelFormat }); - textureAtlas._root = new TextureAtlasNode(new Cartesian2(), new Cartesian2(initialWidth, initialHeight)); + textureAtlas._root = new TextureAtlasNode(new Cartesian2(borderWidthInPixels, borderWidthInPixels), + new Cartesian2(initialWidth, initialHeight)); } } @@ -457,7 +459,7 @@ define([ * * @example * atlas = atlas && atlas.destroy(); - * + * * @see TextureAtlas#isDestroyed */ TextureAtlas.prototype.destroy = function() { From 3703161da5421848e2c04a97ac864e35dce9150b Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Tue, 22 Nov 2016 14:47:39 -0500 Subject: [PATCH 100/103] Update tests to account for new padding in TextureAtlas. --- Specs/Data/Images/Blue2x2.png | Bin 0 -> 888 bytes Specs/Data/Images/Green2x2.png | Bin 0 -> 119 bytes Specs/Data/Images/White2x2.png | Bin 0 -> 119 bytes Specs/Scene/BillboardCollectionSpec.js | 18 +++++++------- Specs/Scene/TextureAtlasSpec.js | 32 ++++++++++++------------- 5 files changed, 25 insertions(+), 25 deletions(-) create mode 100644 Specs/Data/Images/Blue2x2.png create mode 100644 Specs/Data/Images/Green2x2.png create mode 100644 Specs/Data/Images/White2x2.png diff --git a/Specs/Data/Images/Blue2x2.png b/Specs/Data/Images/Blue2x2.png new file mode 100644 index 0000000000000000000000000000000000000000..e604f8cbee004d7f9bd12deedd42c6c5a29bbc87 GIT binary patch literal 888 zcmeAS@N?(olHy`uVBq!ia0vp^Od!m`3?yAM{)#a$Ff#=Bgt#&={0EARg3%BdnIUl8 zI4cV1bIt;f$YKTtZeb8+WSBKa0w~B{;_2(k{(xIdm`%-zb-NN!h}+Y}F@)oKasmS* Y0|OfaW7?OKIY40sPgg&ebxsLQ0I|#$&j0`b literal 0 HcmV?d00001 diff --git a/Specs/Data/Images/Green2x2.png b/Specs/Data/Images/Green2x2.png new file mode 100644 index 0000000000000000000000000000000000000000..2247add0559e909a0711f09cbf954b4e68b6d161 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^Od!kwBL7~QRScv!3p^r$G`BDaGcwGYBLNg-FY)ws zWq-geCd_IvS^Z`cP)N+v#W95AdUDE-^9O+72#7eqz`!HN$n3fzW)n~agQu&X%Q~lo FCIHSE9_au8 literal 0 HcmV?d00001 diff --git a/Specs/Data/Images/White2x2.png b/Specs/Data/Images/White2x2.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea0256ddd340f0b4e373d92a7fa9dabd0e5003f GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^Od!kwBL7~QRScv!3p^r$G`BDaGcwGYBLNg-FY)ws zWq-geCd|dXI)6ztP)N+v#W95Adh(zD|LvKXnT3HE2pCk@m>KuVJ>CUW!QkoY=d#Wz Gp$Pye#2ESj literal 0 HcmV?d00001 diff --git a/Specs/Scene/BillboardCollectionSpec.js b/Specs/Scene/BillboardCollectionSpec.js index c953eb6e1625..cf768ef2b629 100644 --- a/Specs/Scene/BillboardCollectionSpec.js +++ b/Specs/Scene/BillboardCollectionSpec.js @@ -73,13 +73,13 @@ defineSuite([ camera = scene.camera; return when.join( - loadImage('./Data/Images/Green.png').then(function(result) { + loadImage('./Data/Images/Green2x2.png').then(function(result) { greenImage = result; }), - loadImage('./Data/Images/Blue.png').then(function(result) { + loadImage('./Data/Images/Blue2x2.png').then(function(result) { blueImage = result; }), - loadImage('./Data/Images/White.png').then(function(result) { + loadImage('./Data/Images/White2x2.png').then(function(result) { whiteImage = result; }), loadImage('./Data/Images/Blue10x10.png').then(function(result) { @@ -1438,11 +1438,11 @@ defineSuite([ scene.renderForSpecs(); var one = billboards.add({ - image : './Data/Images/Green.png' + image : './Data/Images/Green2x2.png' }); expect(one.ready).toEqual(false); - expect(one.image).toEqual('./Data/Images/Green.png'); + expect(one.image).toEqual('./Data/Images/Green2x2.png'); return pollToPromise(function() { return one.ready; @@ -1501,18 +1501,18 @@ defineSuite([ scene.renderForSpecs(); var one = billboards.add({ - image : './Data/Images/Green.png' + image : './Data/Images/Green2x2.png' }); expect(one.ready).toEqual(false); - expect(one.image).toEqual('./Data/Images/Green.png'); + expect(one.image).toEqual('./Data/Images/Green2x2.png'); return pollToPromise(function() { return one.ready; }).then(function() { expect(scene.renderForSpecs()).toEqual([0, 255, 0, 255]); - one.image = './Data/Images/Green.png'; + one.image = './Data/Images/Green2x2.png'; expect(one.ready).toEqual(true); expect(scene.renderForSpecs()).toEqual([0, 255, 0, 255]); @@ -1571,7 +1571,7 @@ defineSuite([ var one = billboards.add({ image : './Data/Images/Red16x16.png', - imageSubRegion : new BoundingRectangle(0.0, 0.0, 1.0, 2.0) + imageSubRegion : new BoundingRectangle(0.0, 0.0, 2.0, 3.0) }); expect(one.ready).toEqual(false); diff --git a/Specs/Scene/TextureAtlasSpec.js b/Specs/Scene/TextureAtlasSpec.js index 2d2a81c164aa..d4bff44d253d 100644 --- a/Specs/Scene/TextureAtlasSpec.js +++ b/Specs/Scene/TextureAtlasSpec.js @@ -194,8 +194,8 @@ void main() {\n\ expect(texture.height).toEqual(atlasHeight); var coords = atlas.textureCoordinates[index]; - expect(coords.x).toEqual(0.0 / atlasWidth); - expect(coords.y).toEqual(0.0 / atlasHeight); + expect(coords.x).toEqual(1.0 / atlasWidth); + expect(coords.y).toEqual(1.0 / atlasHeight); expect(coords.width).toEqual(1.0 / atlasWidth); expect(coords.height).toEqual(1.0 / atlasHeight); }); @@ -383,23 +383,23 @@ void main() {\n\ expect(texture.width).toEqual(atlasWidth); expect(texture.height).toEqual(atlasHeight); - expect(c0.x).toEqualEpsilon(0.0 / atlasWidth, CesiumMath.EPSILON16); - expect(c0.y).toEqualEpsilon(0.0 / atlasHeight, CesiumMath.EPSILON16); + expect(c0.x).toEqualEpsilon(2.0 / atlasWidth, CesiumMath.EPSILON16); + expect(c0.y).toEqualEpsilon(2.0 / atlasHeight, CesiumMath.EPSILON16); expect(c0.width).toEqualEpsilon(greenImage.width / atlasWidth, CesiumMath.EPSILON16); expect(c0.height).toEqualEpsilon(greenImage.height / atlasHeight, CesiumMath.EPSILON16); - expect(c1.x).toEqualEpsilon((greenImage.width + atlas.borderWidthInPixels) / atlasWidth, CesiumMath.EPSILON16); - expect(c1.y).toEqualEpsilon(0.0 / atlasHeight, CesiumMath.EPSILON16); + expect(c1.x).toEqualEpsilon((greenImage.width + 2 * atlas.borderWidthInPixels) / atlasWidth, CesiumMath.EPSILON16); + expect(c1.y).toEqualEpsilon(2.0 / atlasHeight, CesiumMath.EPSILON16); expect(c1.width).toEqualEpsilon(blueImage.width / atlasWidth, CesiumMath.EPSILON16); expect(c1.height).toEqualEpsilon(blueImage.width / atlasHeight, CesiumMath.EPSILON16); - expect(c2.x).toEqualEpsilon((bigRedImage.width + atlas.borderWidthInPixels) / atlasWidth, CesiumMath.EPSILON16); - expect(c2.y).toEqualEpsilon(0.0 / atlasHeight, CesiumMath.EPSILON16); + expect(c2.x).toEqualEpsilon(2.0 / atlasWidth, CesiumMath.EPSILON16); + expect(c2.y).toEqualEpsilon((bigRedImage.height + atlas.borderWidthInPixels) / atlasHeight, CesiumMath.EPSILON16); expect(c2.width).toEqualEpsilon(bigRedImage.width / atlasWidth, CesiumMath.EPSILON16); expect(c2.height).toEqualEpsilon(bigRedImage.height / atlasHeight, CesiumMath.EPSILON16); - expect(c3.x).toEqualEpsilon(0.0 / atlasWidth, CesiumMath.EPSILON16); - expect(c3.y).toEqualEpsilon((greenImage.height + atlas.borderWidthInPixels) / atlasHeight, CesiumMath.EPSILON16); + expect(c3.x).toEqualEpsilon(2.0 / atlasWidth, CesiumMath.EPSILON16); + expect(c3.y).toEqualEpsilon((greenImage.height + 2 * atlas.borderWidthInPixels) / atlasHeight, CesiumMath.EPSILON16); expect(c3.width).toEqualEpsilon(bigBlueImage.width / atlasWidth, CesiumMath.EPSILON16); expect(c3.height).toEqualEpsilon(bigBlueImage.height / atlasHeight, CesiumMath.EPSILON16); }); @@ -577,20 +577,20 @@ void main() {\n\ var texture = atlas.texture; var coordinates = atlas.textureCoordinates; - var atlasWidth = 6.0; - var atlasHeight = 6.0; + var atlasWidth = 10.0; + var atlasHeight = 10.0; expect(atlas.borderWidthInPixels).toEqual(2); expect(atlas.numberOfImages).toEqual(2); expect(texture.width).toEqual(atlasWidth); expect(texture.height).toEqual(atlasHeight); - expect(coordinates[greenIndex].x).toEqual(0.0 / atlasWidth); - expect(coordinates[greenIndex].y).toEqual(0.0 / atlasHeight); + expect(coordinates[greenIndex].x).toEqual(atlas.borderWidthInPixels / atlasWidth); + expect(coordinates[greenIndex].y).toEqual(atlas.borderWidthInPixels / atlasHeight); expect(coordinates[greenIndex].width).toEqual(1.0 / atlasWidth); expect(coordinates[greenIndex].height).toEqual(1.0 / atlasHeight); - expect(coordinates[blueIndex].x).toEqual(3.0 / atlasWidth); - expect(coordinates[blueIndex].y).toEqual(0.0 / atlasHeight); + expect(coordinates[blueIndex].x).toEqual(5.0 / atlasWidth); + expect(coordinates[blueIndex].y).toEqual(2.0 / atlasHeight); expect(coordinates[blueIndex].width).toEqual(1.0 / atlasWidth); expect(coordinates[blueIndex].height).toEqual(1.0 / atlasHeight); }); From 0ac1c5ddc5b803a9ed4816f37fe3afdbf8236079 Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Tue, 22 Nov 2016 15:06:37 -0500 Subject: [PATCH 101/103] CHANGES.md and a typo. --- CHANGES.md | 3 +++ Source/Core/writeTextToCanvas.js | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index c7beedadb6b5..74abd62cc376 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,9 @@ Change Log * * Improved terrain/imagery load ordering, especially when the terrain is already fully loaded and we add a new imagery layer. This results in a 25% reduction in load times in many cases. * Billboard depth testing changed from `LESS` to `LEQUAL`, allowing label glyphs of equal depths to overlap. +* Billboard sizes were incorrectly rounded up from odd values to even values. This has been corrected, and as a result, odd-width and odd-height billboards will appear one pixel smaller than before. +* Label glyph positions have been adjusted and corrected. +* `TextureAtlas.borderWidthInPixels` has always been applied to the upper and right edges of each internal texture, but is now also applied to the bottom and left edges of the entire TextureAtlas, guaranteeing borders on all sides regardless of position within the atlas. * Added support for saving html and css in Github Gists. [#4125](https://github.com/AnalyticalGraphicsInc/cesium/issues/4125) * Fixed `Cartographic.fromCartesian` when the cartesian is not on the ellipsoid surface. [#4611](https://github.com/AnalyticalGraphicsInc/cesium/issues/4611) diff --git a/Source/Core/writeTextToCanvas.js b/Source/Core/writeTextToCanvas.js index 581757904556..16645a18a30f 100644 --- a/Source/Core/writeTextToCanvas.js +++ b/Source/Core/writeTextToCanvas.js @@ -93,7 +93,7 @@ define([ canvas.style.visibility = ''; //Some characters, such as the letter j, have a non-zero starting position. - //This value is used for kering later, but we need to take it into account + //This value is used for kerning later, but we need to take it into account //now in order to draw the text completely on the canvas var x = -dimensions.bounds.minx; From 455a04dac0ded863c1201f4726821e7072bc1a51 Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Tue, 22 Nov 2016 15:23:16 -0500 Subject: [PATCH 102/103] Fix missing padding caught by unit test. --- Source/Core/writeTextToCanvas.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Core/writeTextToCanvas.js b/Source/Core/writeTextToCanvas.js index 16645a18a30f..c54ee0feaf90 100644 --- a/Source/Core/writeTextToCanvas.js +++ b/Source/Core/writeTextToCanvas.js @@ -98,12 +98,12 @@ define([ var x = -dimensions.bounds.minx; //Expand the width to include the starting position. - var width = Math.ceil(dimensions.width) + x; + var width = Math.ceil(dimensions.width) + x + doublePadding; //While the height of the letter is correct, we need to adjust //where we start drawing it so that letters like j and y properly dip //below the line. - var height = dimensions.height + padding; + var height = dimensions.height + doublePadding; var baseline = height - dimensions.ascent + doublePadding; var y = height - baseline + doublePadding; From 8a8799cd138c0ff91f715c30ceab92614d6c6ff4 Mon Sep 17 00:00:00 2001 From: Ed Mackey Date: Wed, 23 Nov 2016 15:14:52 -0500 Subject: [PATCH 103/103] Changes per review. --- CHANGES.md | 2 +- Source/Shaders/BillboardCollectionVS.glsl | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 74abd62cc376..4e0d169780ac 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,7 +7,7 @@ Change Log * Breaking changes * * Improved terrain/imagery load ordering, especially when the terrain is already fully loaded and we add a new imagery layer. This results in a 25% reduction in load times in many cases. -* Billboard depth testing changed from `LESS` to `LEQUAL`, allowing label glyphs of equal depths to overlap. +* Billboard, Label, and PointPrimitive depth testing changed from `LESS` to `LEQUAL`, allowing label glyphs of equal depths to overlap. * Billboard sizes were incorrectly rounded up from odd values to even values. This has been corrected, and as a result, odd-width and odd-height billboards will appear one pixel smaller than before. * Label glyph positions have been adjusted and corrected. * `TextureAtlas.borderWidthInPixels` has always been applied to the upper and right edges of each internal texture, but is now also applied to the bottom and left edges of the entire TextureAtlas, guaranteeing borders on all sides regardless of position within the atlas. diff --git a/Source/Shaders/BillboardCollectionVS.glsl b/Source/Shaders/BillboardCollectionVS.glsl index 3469a2165be4..c56ebd30516c 100644 --- a/Source/Shaders/BillboardCollectionVS.glsl +++ b/Source/Shaders/BillboardCollectionVS.glsl @@ -38,6 +38,8 @@ const float SHIFT_RIGHT1 = 1.0 / 2.0; vec4 computePositionWindowCoordinates(vec4 positionEC, vec2 imageSize, float scale, vec2 direction, vec2 origin, vec2 translate, vec2 pixelOffset, vec3 alignedAxis, bool validAlignedAxis, float rotation, bool sizeInMeters) { + // Note the halfSize cannot be computed in JavaScript because it is sent via + // compressed vertex attributes that coerce it to an integer. vec2 halfSize = imageSize * scale * czm_resolutionScale * 0.5; halfSize *= ((direction * 2.0) - 1.0);