cesium 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (491) hide show
  1. data/LICENSE.md +259 -0
  2. data/README.rdoc +90 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/Assets/Assets.profile.js +8 -0
  5. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
  6. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
  7. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
  8. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
  9. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
  10. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
  11. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
  12. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
  13. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
  14. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
  15. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
  16. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
  17. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
  18. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
  19. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
  20. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
  21. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
  22. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
  23. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
  24. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
  25. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
  26. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
  27. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
  28. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
  29. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
  30. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
  31. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
  32. data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
  33. data/app/assets/javascripts/Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg +0 -0
  34. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  35. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  36. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  37. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  38. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  39. data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  40. data/app/assets/javascripts/Assets/Textures/waterNormals.jpg +0 -0
  41. data/app/assets/javascripts/Assets/package.json +6 -0
  42. data/app/assets/javascripts/Cesium.js +320 -0
  43. data/app/assets/javascripts/Core/AnimationController.js +148 -0
  44. data/app/assets/javascripts/Core/AxisAlignedBoundingBox.js +243 -0
  45. data/app/assets/javascripts/Core/BoundingRectangle.js +364 -0
  46. data/app/assets/javascripts/Core/BoundingSphere.js +819 -0
  47. data/app/assets/javascripts/Core/BoxTessellator.js +93 -0
  48. data/app/assets/javascripts/Core/Cartesian2.js +762 -0
  49. data/app/assets/javascripts/Core/Cartesian3.js +861 -0
  50. data/app/assets/javascripts/Core/Cartesian4.js +762 -0
  51. data/app/assets/javascripts/Core/Cartographic.js +211 -0
  52. data/app/assets/javascripts/Core/CatmullRomSpline.js +232 -0
  53. data/app/assets/javascripts/Core/Clock.js +195 -0
  54. data/app/assets/javascripts/Core/ClockRange.js +37 -0
  55. data/app/assets/javascripts/Core/ClockStep.js +32 -0
  56. data/app/assets/javascripts/Core/Color.js +1629 -0
  57. data/app/assets/javascripts/Core/ComponentDatatype.js +119 -0
  58. data/app/assets/javascripts/Core/Core.profile.js +8 -0
  59. data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +198 -0
  60. data/app/assets/javascripts/Core/CubicRealPolynomial.js +251 -0
  61. data/app/assets/javascripts/Core/DefaultProxy.js +30 -0
  62. data/app/assets/javascripts/Core/DeveloperError.js +60 -0
  63. data/app/assets/javascripts/Core/EarthOrientationParameters.js +383 -0
  64. data/app/assets/javascripts/Core/EarthOrientationParametersSample.js +50 -0
  65. data/app/assets/javascripts/Core/Ellipsoid.js +539 -0
  66. data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +207 -0
  67. data/app/assets/javascripts/Core/EllipsoidalOccluder.js +151 -0
  68. data/app/assets/javascripts/Core/EncodedCartesian3.js +197 -0
  69. data/app/assets/javascripts/Core/Enumeration.js +67 -0
  70. data/app/assets/javascripts/Core/Event.js +122 -0
  71. data/app/assets/javascripts/Core/Extent.js +383 -0
  72. data/app/assets/javascripts/Core/ExtentTessellator.js +384 -0
  73. data/app/assets/javascripts/Core/FAR.js +13 -0
  74. data/app/assets/javascripts/Core/FeatureDetection.js +126 -0
  75. data/app/assets/javascripts/Core/Fullscreen.js +235 -0
  76. data/app/assets/javascripts/Core/GeographicProjection.js +107 -0
  77. data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +176 -0
  78. data/app/assets/javascripts/Core/HermiteSpline.js +234 -0
  79. data/app/assets/javascripts/Core/Iau2006XysData.js +259 -0
  80. data/app/assets/javascripts/Core/Iau2006XysSample.js +36 -0
  81. data/app/assets/javascripts/Core/IndexDatatype.js +28 -0
  82. data/app/assets/javascripts/Core/Intersect.js +40 -0
  83. data/app/assets/javascripts/Core/IntersectionTests.js +359 -0
  84. data/app/assets/javascripts/Core/Interval.js +27 -0
  85. data/app/assets/javascripts/Core/Iso8601.js +46 -0
  86. data/app/assets/javascripts/Core/JulianDate.js +1228 -0
  87. data/app/assets/javascripts/Core/KeyboardEventModifier.js +38 -0
  88. data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +96 -0
  89. data/app/assets/javascripts/Core/LeapSecond.js +158 -0
  90. data/app/assets/javascripts/Core/LinearApproximation.js +98 -0
  91. data/app/assets/javascripts/Core/Math.js +532 -0
  92. data/app/assets/javascripts/Core/Matrix2.js +833 -0
  93. data/app/assets/javascripts/Core/Matrix3.js +1099 -0
  94. data/app/assets/javascripts/Core/Matrix4.js +2164 -0
  95. data/app/assets/javascripts/Core/MeshFilters.js +568 -0
  96. data/app/assets/javascripts/Core/Occluder.js +474 -0
  97. data/app/assets/javascripts/Core/OrientationInterpolator.js +109 -0
  98. data/app/assets/javascripts/Core/PlaneTessellator.js +74 -0
  99. data/app/assets/javascripts/Core/PolygonPipeline.js +792 -0
  100. data/app/assets/javascripts/Core/PolylinePipeline.js +90 -0
  101. data/app/assets/javascripts/Core/PrimitiveType.js +80 -0
  102. data/app/assets/javascripts/Core/QuadraticRealPolynomial.js +146 -0
  103. data/app/assets/javascripts/Core/QuarticRealPolynomial.js +339 -0
  104. data/app/assets/javascripts/Core/Quaternion.js +947 -0
  105. data/app/assets/javascripts/Core/Queue.js +95 -0
  106. data/app/assets/javascripts/Core/Ray.js +64 -0
  107. data/app/assets/javascripts/Core/ReferenceFrame.js +25 -0
  108. data/app/assets/javascripts/Core/RequestErrorEvent.js +35 -0
  109. data/app/assets/javascripts/Core/RuntimeError.js +59 -0
  110. data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +658 -0
  111. data/app/assets/javascripts/Core/ScreenSpaceEventType.js +149 -0
  112. data/app/assets/javascripts/Core/Shapes.js +230 -0
  113. data/app/assets/javascripts/Core/Spherical.js +192 -0
  114. data/app/assets/javascripts/Core/TaskProcessor.js +131 -0
  115. data/app/assets/javascripts/Core/TimeConstants.js +85 -0
  116. data/app/assets/javascripts/Core/TimeInterval.js +305 -0
  117. data/app/assets/javascripts/Core/TimeIntervalCollection.js +543 -0
  118. data/app/assets/javascripts/Core/TimeStandard.js +31 -0
  119. data/app/assets/javascripts/Core/Tipsify.js +285 -0
  120. data/app/assets/javascripts/Core/Transforms.js +614 -0
  121. data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +102 -0
  122. data/app/assets/javascripts/Core/Visibility.js +38 -0
  123. data/app/assets/javascripts/Core/WebMercatorProjection.js +154 -0
  124. data/app/assets/javascripts/Core/WindingOrder.js +40 -0
  125. data/app/assets/javascripts/Core/binarySearch.js +69 -0
  126. data/app/assets/javascripts/Core/buildModuleUrl.js +77 -0
  127. data/app/assets/javascripts/Core/clone.js +21 -0
  128. data/app/assets/javascripts/Core/combine.js +81 -0
  129. data/app/assets/javascripts/Core/computeSunPosition.js +116 -0
  130. data/app/assets/javascripts/Core/createGuid.js +25 -0
  131. data/app/assets/javascripts/Core/defaultValue.js +22 -0
  132. data/app/assets/javascripts/Core/destroyObject.js +61 -0
  133. data/app/assets/javascripts/Core/freezeObject.js +20 -0
  134. data/app/assets/javascripts/Core/getImagePixels.js +46 -0
  135. data/app/assets/javascripts/Core/isLeapYear.js +30 -0
  136. data/app/assets/javascripts/Core/jsonp.js +116 -0
  137. data/app/assets/javascripts/Core/loadArrayBuffer.js +76 -0
  138. data/app/assets/javascripts/Core/loadImage.js +85 -0
  139. data/app/assets/javascripts/Core/loadJson.js +54 -0
  140. data/app/assets/javascripts/Core/loadText.js +78 -0
  141. data/app/assets/javascripts/Core/loadXML.js +76 -0
  142. data/app/assets/javascripts/Core/package.json +6 -0
  143. data/app/assets/javascripts/Core/pointInsideTriangle2D.js +41 -0
  144. data/app/assets/javascripts/Core/requestAnimationFrame.js +61 -0
  145. data/app/assets/javascripts/Core/throttleRequestByServer.js +74 -0
  146. data/app/assets/javascripts/Core/writeTextToCanvas.js +92 -0
  147. data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +254 -0
  148. data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +57 -0
  149. data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +96 -0
  150. data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +99 -0
  151. data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +125 -0
  152. data/app/assets/javascripts/DynamicScene/CzmlColor.js +127 -0
  153. data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +135 -0
  154. data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +59 -0
  155. data/app/assets/javascripts/DynamicScene/CzmlImage.js +61 -0
  156. data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +59 -0
  157. data/app/assets/javascripts/DynamicScene/CzmlNumber.js +82 -0
  158. data/app/assets/javascripts/DynamicScene/CzmlString.js +56 -0
  159. data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +99 -0
  160. data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +172 -0
  161. data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +98 -0
  162. data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +59 -0
  163. data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +245 -0
  164. data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +347 -0
  165. data/app/assets/javascripts/DynamicScene/DynamicColorMaterial.js +78 -0
  166. data/app/assets/javascripts/DynamicScene/DynamicCone.js +291 -0
  167. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +350 -0
  168. data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +389 -0
  169. data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +163 -0
  170. data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +158 -0
  171. data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +277 -0
  172. data/app/assets/javascripts/DynamicScene/DynamicImageMaterial.js +136 -0
  173. data/app/assets/javascripts/DynamicScene/DynamicLabel.js +286 -0
  174. data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +341 -0
  175. data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +125 -0
  176. data/app/assets/javascripts/DynamicScene/DynamicObject.js +364 -0
  177. data/app/assets/javascripts/DynamicScene/DynamicObjectCollection.js +137 -0
  178. data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +299 -0
  179. data/app/assets/javascripts/DynamicScene/DynamicPath.js +214 -0
  180. data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +402 -0
  181. data/app/assets/javascripts/DynamicScene/DynamicPoint.js +184 -0
  182. data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +323 -0
  183. data/app/assets/javascripts/DynamicScene/DynamicPolygon.js +138 -0
  184. data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +251 -0
  185. data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +183 -0
  186. data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +268 -0
  187. data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +525 -0
  188. data/app/assets/javascripts/DynamicScene/DynamicProperty.js +352 -0
  189. data/app/assets/javascripts/DynamicScene/DynamicPyramid.js +204 -0
  190. data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +302 -0
  191. data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +8 -0
  192. data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +199 -0
  193. data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +155 -0
  194. data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +181 -0
  195. data/app/assets/javascripts/DynamicScene/package.json +6 -0
  196. data/app/assets/javascripts/DynamicScene/processCzml.js +77 -0
  197. data/app/assets/javascripts/Renderer/BlendEquation.js +52 -0
  198. data/app/assets/javascripts/Renderer/BlendFunction.js +158 -0
  199. data/app/assets/javascripts/Renderer/BlendingState.js +64 -0
  200. data/app/assets/javascripts/Renderer/Buffer.js +141 -0
  201. data/app/assets/javascripts/Renderer/BufferUsage.js +48 -0
  202. data/app/assets/javascripts/Renderer/ClearCommand.js +40 -0
  203. data/app/assets/javascripts/Renderer/CommandLists.js +42 -0
  204. data/app/assets/javascripts/Renderer/Context.js +2805 -0
  205. data/app/assets/javascripts/Renderer/CubeMap.js +358 -0
  206. data/app/assets/javascripts/Renderer/CubeMapFace.js +202 -0
  207. data/app/assets/javascripts/Renderer/CullFace.js +50 -0
  208. data/app/assets/javascripts/Renderer/DepthFunction.js +95 -0
  209. data/app/assets/javascripts/Renderer/DrawCommand.js +96 -0
  210. data/app/assets/javascripts/Renderer/Framebuffer.js +435 -0
  211. data/app/assets/javascripts/Renderer/MipmapHint.js +50 -0
  212. data/app/assets/javascripts/Renderer/PickFramebuffer.js +178 -0
  213. data/app/assets/javascripts/Renderer/PixelDatatype.js +86 -0
  214. data/app/assets/javascripts/Renderer/PixelFormat.js +113 -0
  215. data/app/assets/javascripts/Renderer/Renderbuffer.js +102 -0
  216. data/app/assets/javascripts/Renderer/RenderbufferFormat.js +77 -0
  217. data/app/assets/javascripts/Renderer/Renderer.profile.js +8 -0
  218. data/app/assets/javascripts/Renderer/ShaderCache.js +121 -0
  219. data/app/assets/javascripts/Renderer/ShaderProgram.js +2402 -0
  220. data/app/assets/javascripts/Renderer/StencilFunction.js +95 -0
  221. data/app/assets/javascripts/Renderer/StencilOperation.js +95 -0
  222. data/app/assets/javascripts/Renderer/Texture.js +395 -0
  223. data/app/assets/javascripts/Renderer/TextureAtlas.js +472 -0
  224. data/app/assets/javascripts/Renderer/TextureAtlasBuilder.js +133 -0
  225. data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +41 -0
  226. data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +77 -0
  227. data/app/assets/javascripts/Renderer/TextureWrap.js +50 -0
  228. data/app/assets/javascripts/Renderer/UniformDatatype.js +218 -0
  229. data/app/assets/javascripts/Renderer/UniformState.js +799 -0
  230. data/app/assets/javascripts/Renderer/VertexArray.js +365 -0
  231. data/app/assets/javascripts/Renderer/VertexArrayFacade.js +574 -0
  232. data/app/assets/javascripts/Renderer/VertexLayout.js +49 -0
  233. data/app/assets/javascripts/Renderer/loadCubeMap.js +92 -0
  234. data/app/assets/javascripts/Renderer/package.json +6 -0
  235. data/app/assets/javascripts/Scene/AnimationCollection.js +249 -0
  236. data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +384 -0
  237. data/app/assets/javascripts/Scene/Billboard.js +680 -0
  238. data/app/assets/javascripts/Scene/BillboardCollection.js +1209 -0
  239. data/app/assets/javascripts/Scene/BingMapsImageryProvider.js +460 -0
  240. data/app/assets/javascripts/Scene/BingMapsStyle.js +55 -0
  241. data/app/assets/javascripts/Scene/Camera.js +358 -0
  242. data/app/assets/javascripts/Scene/CameraColumbusViewMode.js +30 -0
  243. data/app/assets/javascripts/Scene/CameraController.js +1258 -0
  244. data/app/assets/javascripts/Scene/CameraEventAggregator.js +270 -0
  245. data/app/assets/javascripts/Scene/CameraEventType.js +53 -0
  246. data/app/assets/javascripts/Scene/CameraFlightPath.js +495 -0
  247. data/app/assets/javascripts/Scene/CentralBody.js +817 -0
  248. data/app/assets/javascripts/Scene/CentralBodySurface.js +1120 -0
  249. data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +107 -0
  250. data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +511 -0
  251. data/app/assets/javascripts/Scene/CompositePrimitive.js +454 -0
  252. data/app/assets/javascripts/Scene/CullingVolume.js +59 -0
  253. data/app/assets/javascripts/Scene/CustomSensorVolume.js +440 -0
  254. data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +134 -0
  255. data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +412 -0
  256. data/app/assets/javascripts/Scene/EllipsoidTerrainProvider.js +182 -0
  257. data/app/assets/javascripts/Scene/FrameState.js +86 -0
  258. data/app/assets/javascripts/Scene/FrustumCommands.js +32 -0
  259. data/app/assets/javascripts/Scene/GeographicTilingScheme.js +265 -0
  260. data/app/assets/javascripts/Scene/HorizontalOrigin.js +39 -0
  261. data/app/assets/javascripts/Scene/Imagery.js +85 -0
  262. data/app/assets/javascripts/Scene/ImageryLayer.js +876 -0
  263. data/app/assets/javascripts/Scene/ImageryLayerCollection.js +403 -0
  264. data/app/assets/javascripts/Scene/ImageryProvider.js +185 -0
  265. data/app/assets/javascripts/Scene/ImageryProviderError.js +149 -0
  266. data/app/assets/javascripts/Scene/ImageryState.js +20 -0
  267. data/app/assets/javascripts/Scene/Label.js +706 -0
  268. data/app/assets/javascripts/Scene/LabelCollection.js +697 -0
  269. data/app/assets/javascripts/Scene/LabelStyle.js +39 -0
  270. data/app/assets/javascripts/Scene/Material.js +1177 -0
  271. data/app/assets/javascripts/Scene/NeverTileDiscardPolicy.js +38 -0
  272. data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +282 -0
  273. data/app/assets/javascripts/Scene/OrthographicFrustum.js +345 -0
  274. data/app/assets/javascripts/Scene/PerformanceDisplay.js +183 -0
  275. data/app/assets/javascripts/Scene/PerspectiveFrustum.js +239 -0
  276. data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +394 -0
  277. data/app/assets/javascripts/Scene/Polygon.js +886 -0
  278. data/app/assets/javascripts/Scene/Polyline.js +441 -0
  279. data/app/assets/javascripts/Scene/PolylineCollection.js +1532 -0
  280. data/app/assets/javascripts/Scene/Projections.js +93 -0
  281. data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +224 -0
  282. data/app/assets/javascripts/Scene/Scene.js +632 -0
  283. data/app/assets/javascripts/Scene/Scene.profile.js +8 -0
  284. data/app/assets/javascripts/Scene/SceneMode.js +51 -0
  285. data/app/assets/javascripts/Scene/SceneTransitioner.js +776 -0
  286. data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1063 -0
  287. data/app/assets/javascripts/Scene/SensorVolumeCollection.js +192 -0
  288. data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +295 -0
  289. data/app/assets/javascripts/Scene/SkyAtmosphere.js +239 -0
  290. data/app/assets/javascripts/Scene/SkyBox.js +231 -0
  291. data/app/assets/javascripts/Scene/TerrainProvider.js +229 -0
  292. data/app/assets/javascripts/Scene/TexturePool.js +154 -0
  293. data/app/assets/javascripts/Scene/Tile.js +322 -0
  294. data/app/assets/javascripts/Scene/TileDiscardPolicy.js +42 -0
  295. data/app/assets/javascripts/Scene/TileImagery.js +36 -0
  296. data/app/assets/javascripts/Scene/TileLoadQueue.js +123 -0
  297. data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +337 -0
  298. data/app/assets/javascripts/Scene/TileReplacementQueue.js +139 -0
  299. data/app/assets/javascripts/Scene/TileState.js +19 -0
  300. data/app/assets/javascripts/Scene/TilingScheme.js +213 -0
  301. data/app/assets/javascripts/Scene/VerticalOrigin.js +39 -0
  302. data/app/assets/javascripts/Scene/ViewportQuad.js +256 -0
  303. data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +374 -0
  304. data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +291 -0
  305. data/app/assets/javascripts/Scene/package.json +6 -0
  306. data/app/assets/javascripts/Shaders/BillboardCollectionFS.glsl +30 -0
  307. data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +31 -0
  308. data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +68 -0
  309. data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +54 -0
  310. data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +927 -0
  311. data/app/assets/javascripts/Shaders/BuiltinFunctions.js +322 -0
  312. data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +106 -0
  313. data/app/assets/javascripts/Shaders/CentralBodyFS.js +82 -0
  314. data/app/assets/javascripts/Shaders/CentralBodyFSDepth.glsl +20 -0
  315. data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +22 -0
  316. data/app/assets/javascripts/Shaders/CentralBodyFSPole.glsl +29 -0
  317. data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +28 -0
  318. data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +88 -0
  319. data/app/assets/javascripts/Shaders/CentralBodyVS.js +69 -0
  320. data/app/assets/javascripts/Shaders/CentralBodyVSDepth.glsl +9 -0
  321. data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +13 -0
  322. data/app/assets/javascripts/Shaders/CentralBodyVSPole.glsl +12 -0
  323. data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +15 -0
  324. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +448 -0
  325. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +361 -0
  326. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +19 -0
  327. data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +20 -0
  328. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +886 -0
  329. data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +586 -0
  330. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +126 -0
  331. data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -0
  332. data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.glsl +14 -0
  333. data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +18 -0
  334. data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +40 -0
  335. data/app/assets/javascripts/Shaders/EllipsoidFS.js +38 -0
  336. data/app/assets/javascripts/Shaders/EllipsoidVS.glsl +26 -0
  337. data/app/assets/javascripts/Shaders/EllipsoidVS.js +16 -0
  338. data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.glsl +25 -0
  339. data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +23 -0
  340. data/app/assets/javascripts/Shaders/Materials/BlobMaterial.glsl +18 -0
  341. data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +19 -0
  342. data/app/assets/javascripts/Shaders/Materials/BrickMaterial.glsl +42 -0
  343. data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +36 -0
  344. data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.glsl +29 -0
  345. data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +27 -0
  346. data/app/assets/javascripts/Shaders/Materials/CementMaterial.glsl +19 -0
  347. data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +20 -0
  348. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +38 -0
  349. data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -0
  350. data/app/assets/javascripts/Shaders/Materials/DotMaterial.glsl +17 -0
  351. data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +18 -0
  352. data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.glsl +23 -0
  353. data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +24 -0
  354. data/app/assets/javascripts/Shaders/Materials/FacetMaterial.glsl +18 -0
  355. data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +19 -0
  356. data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.glsl +12 -0
  357. data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +15 -0
  358. data/app/assets/javascripts/Shaders/Materials/GrassMaterial.glsl +28 -0
  359. data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +26 -0
  360. data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.glsl +19 -0
  361. data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +21 -0
  362. data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.glsl +13 -0
  363. data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +16 -0
  364. data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.glsl +14 -0
  365. data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +17 -0
  366. data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.glsl +18 -0
  367. data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +19 -0
  368. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +29 -0
  369. data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +26 -0
  370. data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.glsl +17 -0
  371. data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +19 -0
  372. data/app/assets/javascripts/Shaders/Materials/Water.glsl +91 -0
  373. data/app/assets/javascripts/Shaders/Materials/Water.js +60 -0
  374. data/app/assets/javascripts/Shaders/Materials/WoodMaterial.glsl +36 -0
  375. data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +31 -0
  376. data/app/assets/javascripts/Shaders/Noise.glsl +453 -0
  377. data/app/assets/javascripts/Shaders/Noise.js +242 -0
  378. data/app/assets/javascripts/Shaders/PolygonFS.glsl +27 -0
  379. data/app/assets/javascripts/Shaders/PolygonFS.js +23 -0
  380. data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +6 -0
  381. data/app/assets/javascripts/Shaders/PolygonFSPick.js +11 -0
  382. data/app/assets/javascripts/Shaders/PolygonVS.glsl +38 -0
  383. data/app/assets/javascripts/Shaders/PolygonVS.js +39 -0
  384. data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +30 -0
  385. data/app/assets/javascripts/Shaders/PolygonVSPick.js +32 -0
  386. data/app/assets/javascripts/Shaders/PolylineFS.glsl +6 -0
  387. data/app/assets/javascripts/Shaders/PolylineFS.js +11 -0
  388. data/app/assets/javascripts/Shaders/PolylineVS.glsl +34 -0
  389. data/app/assets/javascripts/Shaders/PolylineVS.js +35 -0
  390. data/app/assets/javascripts/Shaders/Ray.glsl +532 -0
  391. data/app/assets/javascripts/Shaders/Ray.js +357 -0
  392. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +26 -0
  393. data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +22 -0
  394. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +11 -0
  395. data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +14 -0
  396. data/app/assets/javascripts/Shaders/SensorVolume.glsl +43 -0
  397. data/app/assets/javascripts/Shaders/SensorVolume.js +31 -0
  398. data/app/assets/javascripts/Shaders/Shaders.profile.js +8 -0
  399. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +70 -0
  400. data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +62 -0
  401. data/app/assets/javascripts/Shaders/SkyAtmosphereVS.glsl +131 -0
  402. data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +115 -0
  403. data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +10 -0
  404. data/app/assets/javascripts/Shaders/SkyBoxFS.js +14 -0
  405. data/app/assets/javascripts/Shaders/SkyBoxVS.glsl +10 -0
  406. data/app/assets/javascripts/Shaders/SkyBoxVS.js +14 -0
  407. data/app/assets/javascripts/Shaders/ViewportQuadFS.glsl +16 -0
  408. data/app/assets/javascripts/Shaders/ViewportQuadFS.js +17 -0
  409. data/app/assets/javascripts/Shaders/ViewportQuadVS.glsl +10 -0
  410. data/app/assets/javascripts/Shaders/ViewportQuadVS.js +14 -0
  411. data/app/assets/javascripts/Shaders/package.json +6 -0
  412. data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +8 -0
  413. data/app/assets/javascripts/ThirdParty/Tween.js +678 -0
  414. data/app/assets/javascripts/ThirdParty/Uri.js +277 -0
  415. data/app/assets/javascripts/ThirdParty/measureText.js +197 -0
  416. data/app/assets/javascripts/ThirdParty/package.json +6 -0
  417. data/app/assets/javascripts/ThirdParty/sprintf.js +319 -0
  418. data/app/assets/javascripts/ThirdParty/when.js +748 -0
  419. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +175 -0
  420. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +52 -0
  421. data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +1237 -0
  422. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +4 -0
  423. data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +349 -0
  424. data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +1 -0
  425. data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +47 -0
  426. data/app/assets/javascripts/Widgets/Dojo/checkForChromeFrame.js +71 -0
  427. data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
  428. data/app/assets/javascripts/Widgets/Images/Cesium_Logo_overlay.png +0 -0
  429. data/app/assets/javascripts/Widgets/Images/TimelineIcons.png +0 -0
  430. data/app/assets/javascripts/Widgets/Images/ajax-loader.gif +0 -0
  431. data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
  432. data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
  433. data/app/assets/javascripts/Widgets/Timeline.css +113 -0
  434. data/app/assets/javascripts/Widgets/Timeline.js +629 -0
  435. data/app/assets/javascripts/Widgets/TimelineHighlightRange.js +51 -0
  436. data/app/assets/javascripts/Widgets/TimelineTrack.js +54 -0
  437. data/app/assets/javascripts/Widgets/Widgets.profile.js +8 -0
  438. data/app/assets/javascripts/Widgets/package.json +6 -0
  439. data/app/assets/javascripts/Workers/Workers.profile.js +8 -0
  440. data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +2015 -0
  441. data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +55 -0
  442. data/app/assets/javascripts/Workers/createVerticesFromExtent.js +24 -0
  443. data/app/assets/javascripts/Workers/package.json +6 -0
  444. data/app/assets/javascripts/copyrightHeader.js +22 -0
  445. data/app/assets/javascripts/main.js +10 -0
  446. data/app/assets/stylesheets/cesium.css +4 -0
  447. data/app/controllers/cesium_controller.rb +4 -0
  448. data/app/helpers/cesium_helper.rb +2 -0
  449. data/app/views/cesium/index.html.erb +3 -0
  450. data/config/routes.rb +3 -0
  451. data/lib/cesium.rb +4 -0
  452. data/lib/cesium/engine.rb +4 -0
  453. data/lib/cesium/version.rb +3 -0
  454. data/lib/tasks/cesium_tasks.rake +4 -0
  455. data/test/cesium_test.rb +7 -0
  456. data/test/dummy/README.rdoc +261 -0
  457. data/test/dummy/Rakefile +7 -0
  458. data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js.coffee +4 -0
  459. data/test/dummy/app/assets/javascripts/app.js.coffee +11 -0
  460. data/test/dummy/app/assets/javascripts/application.js.coffee +73 -0
  461. data/test/dummy/app/assets/stylesheets/application.css +12 -0
  462. data/test/dummy/app/controllers/application_controller.rb +4 -0
  463. data/test/dummy/app/helpers/application_helper.rb +2 -0
  464. data/test/dummy/app/views/layouts/application.html.erb +21 -0
  465. data/test/dummy/config.ru +4 -0
  466. data/test/dummy/config/application.rb +59 -0
  467. data/test/dummy/config/boot.rb +10 -0
  468. data/test/dummy/config/database.yml +25 -0
  469. data/test/dummy/config/environment.rb +5 -0
  470. data/test/dummy/config/environments/development.rb +37 -0
  471. data/test/dummy/config/environments/production.rb +67 -0
  472. data/test/dummy/config/environments/test.rb +37 -0
  473. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  474. data/test/dummy/config/initializers/inflections.rb +15 -0
  475. data/test/dummy/config/initializers/mime_types.rb +5 -0
  476. data/test/dummy/config/initializers/secret_token.rb +7 -0
  477. data/test/dummy/config/initializers/session_store.rb +8 -0
  478. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  479. data/test/dummy/config/locales/en.yml +5 -0
  480. data/test/dummy/config/requirejs.yml +10 -0
  481. data/test/dummy/config/routes.rb +3 -0
  482. data/test/dummy/public/404.html +26 -0
  483. data/test/dummy/public/422.html +26 -0
  484. data/test/dummy/public/500.html +25 -0
  485. data/test/dummy/public/favicon.ico +0 -0
  486. data/test/dummy/script/rails +6 -0
  487. data/test/functional/cesium_controller_test.rb +9 -0
  488. data/test/integration/navigation_test.rb +10 -0
  489. data/test/test_helper.rb +15 -0
  490. data/test/unit/helpers/cesium_helper_test.rb +4 -0
  491. metadata +641 -0
@@ -0,0 +1,543 @@
1
+ /*global define*/
2
+ define([
3
+ './DeveloperError',
4
+ './binarySearch',
5
+ './TimeInterval',
6
+ './JulianDate'
7
+ ], function(
8
+ DeveloperError,
9
+ binarySearch,
10
+ TimeInterval,
11
+ JulianDate) {
12
+ "use strict";
13
+
14
+ function compareIntervalStartTimes(left, right) {
15
+ return JulianDate.compare(left.start, right.start);
16
+ }
17
+
18
+ /**
19
+ * A non-overlapping collection of TimeIntervals sorted by start date.
20
+ *
21
+ * @alias TimeIntervalCollection
22
+ * @constructor
23
+ *
24
+ * @see TimeInterval
25
+ * @see JulianDate
26
+ *
27
+ */
28
+ var TimeIntervalCollection = function() {
29
+ this._intervals = [];
30
+ };
31
+
32
+ /**
33
+ * Gets the interval at the specified index.
34
+ *
35
+ * @memberof TimeIntervalCollection
36
+ * @param {Number} index The index of the interval to retrieve.
37
+ * @return {TimeInterval} The TimeInterval at the specified index, or undefined if no such index exists.
38
+ * @exception {DeveloperError} index must be a number.
39
+ */
40
+ TimeIntervalCollection.prototype.get = function(index) {
41
+ if (isNaN(index)) {
42
+ throw new DeveloperError('index must be a number.');
43
+ }
44
+ return this._intervals[index];
45
+ };
46
+
47
+ /**
48
+ * Gets the start date of the collection.
49
+ *
50
+ * @memberof TimeIntervalCollection
51
+ * @return {JulianDate} The start date of the collection or undefined if the collection is empty.
52
+ */
53
+ TimeIntervalCollection.prototype.getStart = function() {
54
+ var thisIntervals = this._intervals;
55
+ return thisIntervals.length === 0 ? undefined : thisIntervals[0].start;
56
+ };
57
+
58
+ /**
59
+ * Gets the stop date of the collection.
60
+ *
61
+ * @memberof TimeIntervalCollection
62
+ * @return {JulianDate} The stop date of the collection or undefined if the collection is empty.
63
+ */
64
+ TimeIntervalCollection.prototype.getStop = function() {
65
+ var thisIntervals = this._intervals;
66
+ var length = thisIntervals.length;
67
+ return length === 0 ? undefined : thisIntervals[length - 1].stop;
68
+ };
69
+
70
+ /**
71
+ * Gets the number of intervals in the collection.
72
+ *
73
+ * @memberof TimeIntervalCollection
74
+ * @return {Number} The number of intervals in the collection.
75
+ */
76
+ TimeIntervalCollection.prototype.getLength = function() {
77
+ return this._intervals.length;
78
+ };
79
+
80
+ /**
81
+ * Clears the collection.
82
+ *
83
+ * @memberof TimeIntervalCollection
84
+ */
85
+ TimeIntervalCollection.prototype.clear = function() {
86
+ this._intervals = [];
87
+ };
88
+
89
+ /**
90
+ * Returns true if the collection is empty, false otherwise.
91
+ *
92
+ * @memberof TimeIntervalCollection
93
+ *
94
+ * @returns true if the collection is empty, false otherwise.
95
+ */
96
+ TimeIntervalCollection.prototype.isEmpty = function() {
97
+ return this._intervals.length === 0;
98
+ };
99
+
100
+ /**
101
+ * Returns the interval which contains the specified date.
102
+ *
103
+ * @param {JulianDate} date The date to search for.
104
+ *
105
+ * @memberof TimeIntervalCollection
106
+ *
107
+ * @returns The interval containing the specified date, undefined if no such interval exists.
108
+ *
109
+ * @exception {DeveloperError} date is required.
110
+ */
111
+ TimeIntervalCollection.prototype.findIntervalContainingDate = function(date) {
112
+ var index = this.indexOf(date);
113
+ return index >= 0 ? this._intervals[index] : undefined;
114
+ };
115
+
116
+ /**
117
+ * Returns true if the specified date is contained in the interval collection.
118
+ *
119
+ * @param {JulianDate} date The date to search for.
120
+ *
121
+ * @memberof TimeIntervalCollection
122
+ *
123
+ * @returns True if the specified date is contained in the interval collection, undefined otherwise.
124
+ *
125
+ * @exception {DeveloperError} date is required.
126
+ */
127
+ TimeIntervalCollection.prototype.contains = function(date) {
128
+ return this.indexOf(date) >= 0;
129
+ };
130
+
131
+ /**
132
+ * Returns the index of the interval in the collection that contains the specified date.
133
+ *
134
+ * @param {JulianDate} date The date to search for.
135
+ *
136
+ * @memberof TimeIntervalCollection
137
+ *
138
+ * @returns The index of the interval which contains the specified date, if no such interval exists,
139
+ * it returns a negative number which is the bitwise complement of the index of the next interval that
140
+ * starts after the date, or if no interval starts after the specified date, the bitwise complement of
141
+ * the length of the collection.
142
+ *
143
+ * @exception {DeveloperError} date is required.
144
+ */
145
+ TimeIntervalCollection.prototype.indexOf = function(date) {
146
+ if (typeof date === 'undefined') {
147
+ throw new DeveloperError('date required');
148
+ }
149
+ var thisIntervals = this._intervals;
150
+ var index = binarySearch(thisIntervals, new TimeInterval(date, date, true, true), compareIntervalStartTimes);
151
+ if (index >= 0) {
152
+ if (thisIntervals[index].isStartIncluded) {
153
+ return index;
154
+ }
155
+
156
+ if (index > 0 &&
157
+ thisIntervals[index - 1].stop.equals(date) &&
158
+ thisIntervals[index - 1].isStopIncluded) {
159
+ return index - 1;
160
+ }
161
+ return ~index;
162
+ }
163
+
164
+ index = ~index;
165
+ if (index > 0 && (index - 1) < thisIntervals.length && thisIntervals[index - 1].contains(date)) {
166
+ return index - 1;
167
+ }
168
+ return ~index;
169
+ };
170
+
171
+ /**
172
+ * Returns the first interval in the collection that matches the specified parameters.
173
+ * All parameters are optional and undefined parameters are treated as a don't care condition.
174
+ *
175
+ * @param {JulianDate} [start] The start of the interval.
176
+ * @param {JulianDate} [stop] The end of the interval.
177
+ * @param {JulianDate} [isStartIncluded] True if the start date is included.
178
+ * @param {JulianDate} [isStopIncluded] True if the stop date is included.
179
+ *
180
+ * @memberof TimeIntervalCollection
181
+ *
182
+ * @returns The first interval in the collection that matches the specified parameters.
183
+ */
184
+ TimeIntervalCollection.prototype.findInterval = function(start, stop, isStartIncluded, isStopIncluded) {
185
+ var thisIntervals = this._intervals, interval;
186
+ for ( var i = 0, len = thisIntervals.length; i < len; i++) {
187
+ interval = thisIntervals[i];
188
+ if ((typeof start === 'undefined' || interval.start.equals(start)) &&
189
+ (typeof stop === 'undefined' || interval.stop.equals(stop)) &&
190
+ (typeof isStartIncluded === 'undefined' || interval.isStartIncluded === isStartIncluded) &&
191
+ (typeof isStopIncluded === 'undefined' || interval.isStopIncluded === isStopIncluded)) {
192
+ return thisIntervals[i];
193
+ }
194
+ }
195
+ return undefined;
196
+ };
197
+
198
+ /**
199
+ * Adds an interval to the collection, merging intervals that contain the same data and
200
+ * splitting intervals of different data as needed in order to maintain a non-overlapping collection.
201
+ * The data in the new interval takes precedence over any existing intervals in the collection.
202
+ *
203
+ * @param {TimeInterval} interval The interval to add.
204
+ * @param {Function} [equalsCallback] An optional function which takes the data from two
205
+ * TimeIntervals and returns true if they are equal, false otherwise. If this function
206
+ * is not provided, the Javascript equality operator is used.
207
+ *
208
+ * @memberof TimeIntervalCollection
209
+ *
210
+ * @exception {DeveloperError} interval is required.
211
+ */
212
+ TimeIntervalCollection.prototype.addInterval = function(interval, equalsCallback) {
213
+ if (typeof interval === 'undefined') {
214
+ throw new DeveloperError("interval is required");
215
+ }
216
+ if (!interval.isEmpty) {
217
+ var comparison, index;
218
+ var thisIntervals = this._intervals;
219
+
220
+ // Handle the common case quickly: we're adding a new interval which is after all existing intervals.
221
+ if (thisIntervals.length === 0 ||
222
+ interval.start.greaterThan(thisIntervals[thisIntervals.length - 1].stop)) {
223
+ thisIntervals.push(interval);
224
+ return;
225
+ }
226
+
227
+ // Keep the list sorted by the start date
228
+ index = binarySearch(thisIntervals, interval, compareIntervalStartTimes);
229
+ if (index < 0) {
230
+ index = ~index;
231
+ } else {
232
+ // interval's start date exactly equals the start date of at least one interval in the collection.
233
+ // It could actually equal the start date of two intervals if one of them does not actually
234
+ // include the date. In that case, the binary search could have found either. We need to
235
+ // look at the surrounding intervals and their IsStartIncluded properties in order to make sure
236
+ // we're working with the correct interval.
237
+ if (index > 0 &&
238
+ interval.isStartIncluded &&
239
+ thisIntervals[index - 1].isStartIncluded &&
240
+ thisIntervals[index - 1].start.equals(interval.start)) {
241
+ --index;
242
+ } else if (index < thisIntervals.length &&
243
+ !interval.isStartIncluded &&
244
+ thisIntervals[index].isStartIncluded &&
245
+ thisIntervals[index].start.equals(interval.start)) {
246
+ ++index;
247
+ }
248
+ }
249
+
250
+ if (index > 0) {
251
+ // Not the first thing in the list, so see if the interval before this one
252
+ // overlaps this one.
253
+ comparison = JulianDate.compare(thisIntervals[index - 1].stop, interval.start);
254
+ if (comparison > 0 || (comparison === 0 && (thisIntervals[index - 1].isStopIncluded || interval.isStartIncluded))) {
255
+ // There is an overlap
256
+ if (typeof equalsCallback !== 'undefined' ? equalsCallback(thisIntervals[index - 1].data, interval.data) : (thisIntervals[index - 1].data === interval.data)) {
257
+ // Overlapping intervals have the same data, so combine them
258
+ if (interval.stop.greaterThan(thisIntervals[index - 1].stop)) {
259
+ interval = new TimeInterval(thisIntervals[index - 1].start,
260
+ interval.stop,
261
+ thisIntervals[index - 1].isStartIncluded,
262
+ interval.isStopIncluded,
263
+ interval.data);
264
+ } else {
265
+ interval = new TimeInterval(thisIntervals[index - 1].start,
266
+ thisIntervals[index - 1].stop,
267
+ thisIntervals[index - 1].isStartIncluded,
268
+ thisIntervals[index - 1].isStopIncluded || (interval.stop.equals(thisIntervals[index - 1].stop) && interval.isStopIncluded),
269
+ interval.data);
270
+ }
271
+ thisIntervals.splice(index - 1, 1);
272
+ --index;
273
+ } else {
274
+ // Overlapping intervals have different data. The new interval
275
+ // being added 'wins' so truncate the previous interval.
276
+ // If the existing interval extends past the end of the new one,
277
+ // split the existing interval into two intervals.
278
+ comparison = JulianDate.compare(thisIntervals[index - 1].stop, interval.stop);
279
+ if (comparison > 0 || (comparison === 0 && thisIntervals[index - 1].isStopIncluded && !interval.isStopIncluded)) {
280
+ thisIntervals.splice(index - 1, 1,
281
+ new TimeInterval(thisIntervals[index - 1].start,
282
+ interval.start,
283
+ thisIntervals[index - 1].isStartIncluded,
284
+ !interval.isStartIncluded,
285
+ thisIntervals[index - 1].data),
286
+ new TimeInterval(interval.stop,
287
+ thisIntervals[index - 1].stop,
288
+ !interval.isStopIncluded,
289
+ thisIntervals[index - 1].isStopIncluded,
290
+ thisIntervals[index - 1].data));
291
+ } else {
292
+ thisIntervals[index - 1] = new TimeInterval(thisIntervals[index - 1].start,
293
+ interval.start,
294
+ thisIntervals[index - 1].isStartIncluded,
295
+ !interval.isStartIncluded, thisIntervals[index - 1].data);
296
+ }
297
+ }
298
+ }
299
+ }
300
+
301
+ while (index < thisIntervals.length) {
302
+ // Not the last thing in the list, so see if the intervals after this one overlap this one.
303
+ comparison = JulianDate.compare(interval.stop, thisIntervals[index].start);
304
+ if (comparison > 0 ||
305
+ (comparison === 0 && (interval.isStopIncluded || thisIntervals[index].isStartIncluded))) {
306
+ // There is an overlap
307
+ if (typeof equalsCallback !== 'undefined' ? equalsCallback(thisIntervals[index].data, interval.data) : thisIntervals[index].data === interval.data) {
308
+ // Overlapping intervals have the same data, so combine them
309
+ interval = new TimeInterval(interval.start,
310
+ thisIntervals[index].stop.greaterThan(interval.stop) ? thisIntervals[index].stop : interval.stop,
311
+ interval.isStartIncluded,
312
+ thisIntervals[index].stop.greaterThan(interval.stop) ? thisIntervals[index].isStopIncluded : interval.isStopIncluded,
313
+ interval.data);
314
+ thisIntervals.splice(index, 1);
315
+ } else {
316
+ // Overlapping intervals have different data. The new interval
317
+ // being added 'wins' so truncate the next interval.
318
+ thisIntervals[index] = new TimeInterval(interval.stop,
319
+ thisIntervals[index].stop,
320
+ !interval.isStopIncluded,
321
+ thisIntervals[index].isStopIncluded,
322
+ thisIntervals[index].data);
323
+ if (thisIntervals[index].isEmpty) {
324
+ thisIntervals.splice(index, 1);
325
+ } else {
326
+ // Found a partial span, so it is not possible for the next
327
+ // interval to be spanned at all. Stop looking.
328
+ break;
329
+ }
330
+ }
331
+ } else {
332
+ // Found the last one we're spanning, so stop looking.
333
+ break;
334
+ }
335
+ }
336
+
337
+ // Add the new interval
338
+ thisIntervals.splice(index, 0, interval);
339
+ }
340
+ };
341
+
342
+ /**
343
+ * Removes the specified interval from this interval collection, creating a hole over the specified interval.
344
+ * The Data property of the input interval is ignored.
345
+ *
346
+ * @param {TimeInterval} interval The interval to remove.
347
+ *
348
+ * @memberof TimeIntervalCollection
349
+ *
350
+ * @returns true if the interval was removed, false if no part of the interval was in the collection.
351
+ *
352
+ * @exception {DeveloperError} interval is required.
353
+ */
354
+ TimeIntervalCollection.prototype.removeInterval = function(interval) {
355
+ if (typeof interval === 'undefined') {
356
+ throw new DeveloperError("interval is required");
357
+ }
358
+
359
+ if (interval.isEmpty) {
360
+ return false;
361
+ }
362
+
363
+ var result = false;
364
+ var thisIntervals = this._intervals;
365
+
366
+ var index = binarySearch(thisIntervals, interval, compareIntervalStartTimes);
367
+ if (index < 0) {
368
+ index = ~index;
369
+ }
370
+
371
+ var intervalStart = interval.start;
372
+ var intervalStop = interval.stop;
373
+ var intervalIsStartIncluded = interval.isStartIncluded;
374
+ var intervalIsStopIncluded = interval.isStopIncluded;
375
+
376
+ // Check for truncation of the end of the previous interval.
377
+ if (index > 0) {
378
+ var indexMinus1 = thisIntervals[index - 1];
379
+ var indexMinus1Stop = indexMinus1.stop;
380
+ if (indexMinus1Stop.greaterThan(intervalStart) ||
381
+ (indexMinus1Stop.equals(intervalStart) &&
382
+ indexMinus1.isStopIncluded && intervalIsStartIncluded)) {
383
+ result = true;
384
+
385
+ if (indexMinus1Stop.greaterThan(intervalStop) ||
386
+ (indexMinus1.isStopIncluded && !intervalIsStopIncluded && indexMinus1Stop.equals(intervalStop))) {
387
+ // Break the existing interval into two pieces
388
+ thisIntervals.splice(index, 0, new TimeInterval(intervalStop, indexMinus1Stop, !intervalIsStopIncluded, indexMinus1.isStopIncluded, indexMinus1.data));
389
+ }
390
+ thisIntervals[index - 1] = new TimeInterval(indexMinus1.start, intervalStart, indexMinus1.isStartIncluded, !intervalIsStartIncluded, indexMinus1.data);
391
+ }
392
+ }
393
+
394
+ // Check if the Start of the current interval should remain because interval.start is the same but
395
+ // it is not included.
396
+ var indexInterval = thisIntervals[index];
397
+ if (index < thisIntervals.length &&
398
+ !intervalIsStartIncluded &&
399
+ indexInterval.isStartIncluded &&
400
+ intervalStart.equals(indexInterval.start)) {
401
+ result = true;
402
+
403
+ thisIntervals.splice(index, 0, new TimeInterval(indexInterval.start, indexInterval.start, true, true, indexInterval.data));
404
+ ++index;
405
+ indexInterval = thisIntervals[index];
406
+ }
407
+
408
+ // Remove any intervals that are completely overlapped by the input interval.
409
+ while (index < thisIntervals.length &&
410
+ intervalStop.greaterThan(indexInterval.stop)) {
411
+ result = true;
412
+ thisIntervals.splice(index, 1);
413
+ }
414
+
415
+ // Check for the case where the input interval ends on the same date
416
+ // as an existing interval.
417
+ if (index < thisIntervals.length && intervalStop.equals(indexInterval.stop)) {
418
+ result = true;
419
+
420
+ if (!intervalIsStopIncluded && indexInterval.isStopIncluded) {
421
+ // Last point of interval should remain because the stop date is included in
422
+ // the existing interval but is not included in the input interval.
423
+ if ((index + 1) < thisIntervals.length && thisIntervals[index + 1].start.equals(intervalStop) && indexInterval.data === thisIntervals[index + 1].data) {
424
+ // Combine single point with the next interval
425
+ thisIntervals.splice(index, 1);
426
+ thisIntervals[index] = indexInterval = new TimeInterval(indexInterval.start, indexInterval.stop, true, indexInterval.isStopIncluded, indexInterval.data);
427
+ } else {
428
+ thisIntervals[index] = indexInterval = new TimeInterval(intervalStop, intervalStop, true, true, indexInterval.data);
429
+ }
430
+ } else {
431
+ // Interval is completely overlapped
432
+ thisIntervals.splice(index, 1);
433
+ }
434
+ }
435
+
436
+ // Truncate any partially-overlapped intervals.
437
+ if (index < thisIntervals.length &&
438
+ (intervalStop.greaterThan(indexInterval.start) ||
439
+ (intervalStop.equals(indexInterval.start) &&
440
+ intervalIsStopIncluded &&
441
+ indexInterval.isStartIncluded))) {
442
+ result = true;
443
+ thisIntervals[index] = new TimeInterval(intervalStop, indexInterval.stop, !intervalIsStopIncluded, indexInterval.isStopIncluded, indexInterval.data);
444
+ }
445
+
446
+ return result;
447
+ };
448
+
449
+ /**
450
+ * Creates a new TimeIntervalCollection which is the intersection of this collection
451
+ * and the provided collection.
452
+ *
453
+ * @param {TimeIntervalCollection} timeIntervalCollection The collection to intersect with.
454
+ * @param {Function} [equalsCallback] An optional function which takes the data from two
455
+ * TimeIntervals and returns true if they are equal, false otherwise. If this function
456
+ * is not provided, the Javascript equality operator is used.
457
+ * @param {Function} [mergeCallback] An optional function which takes the data from two
458
+ * TimeIntervals and returns a merged version of the data. If this parameter is omitted,
459
+ * the interval data from <code>this</code> collection will be used.
460
+ *
461
+ * @returns A new TimeIntervalCollection which is the intersection of this collection and the provided collection.
462
+ *
463
+ * @memberof TimeIntervalCollection
464
+ *
465
+ * @exception {DeveloperError} timeIntervalCollection is required.
466
+ */
467
+ TimeIntervalCollection.prototype.intersect = function(timeIntervalCollection, equalsCallback, mergeCallback) {
468
+ if (typeof timeIntervalCollection === 'undefined') {
469
+ throw new DeveloperError('timeIntervalCollection is required.');
470
+ }
471
+ return this._intersectInternal(timeIntervalCollection, equalsCallback, mergeCallback);
472
+ };
473
+
474
+ /**
475
+ * Creates a new TimeIntervalCollection which is the intersection of this collection
476
+ * and the provided interval.
477
+ *
478
+ * @param {TimeInterval} interval The interval to intersect with.
479
+ * @param {Function} [equalsCallback] An optional function which takes the data from two
480
+ * TimeIntervals and returns true if they are equal, false otherwise. If this function
481
+ * is not provided, the equality operator will be used.
482
+ * @param {Function} [mergeCallback] An optional function which takes the data from two
483
+ * TimeIntervals and returns a merged version of the data. If this parameter is omitted,
484
+ * the interval data from <code>this</code> collection will be used.
485
+ *
486
+ * @returns A new TimeIntervalCollection which is the intersection of this collection and the provided collection.
487
+ *
488
+ * @memberof TimeIntervalCollection
489
+ *
490
+ * @exception {DeveloperError} timeIntervalCollection is required.
491
+ */
492
+ TimeIntervalCollection.prototype.intersectInterval = function(interval, equalsCallback, mergeCallback) {
493
+ if (typeof interval === 'undefined') {
494
+ throw new DeveloperError('interval is required.');
495
+ }
496
+ var intervals = new TimeIntervalCollection();
497
+ intervals.addInterval(interval);
498
+ return this._intersectInternal(intervals, equalsCallback, mergeCallback);
499
+ };
500
+
501
+ TimeIntervalCollection.prototype._intersectInternal = function(intervals, equalsCallback, mergeCallback) {
502
+ var left = 0;
503
+ var right = 0;
504
+ var result = new TimeIntervalCollection();
505
+ var thisIntervals = this._intervals;
506
+ var otherIntervals = intervals._intervals;
507
+
508
+ while (left < thisIntervals.length && right < otherIntervals.length) {
509
+ var leftInterval = thisIntervals[left];
510
+ var rightInterval = otherIntervals[right];
511
+ if (leftInterval.stop.lessThan(rightInterval.start)) {
512
+ ++left;
513
+ } else if (rightInterval.stop.lessThan(leftInterval.start)) {
514
+ ++right;
515
+ } else {
516
+ // The following will return an intersection whose data is 'merged' if the callback is defined
517
+ if (typeof mergeCallback !== 'undefined' ||
518
+ ((typeof equalsCallback !== 'undefined' && equalsCallback(leftInterval, rightInterval)) ||
519
+ (typeof equalsCallback === 'undefined' && rightInterval.data === leftInterval.data))) {
520
+
521
+ var intersection = leftInterval.intersect(rightInterval, mergeCallback);
522
+ if (!intersection.isEmpty) {
523
+ // Since we start with an empty collection for 'result', and there are no overlapping intervals in 'this' (as a rule),
524
+ // the 'intersection' will never overlap with a previous interval in 'result'. So, no need to do any additional 'merging'.
525
+ result.addInterval(intersection, equalsCallback);
526
+ }
527
+ }
528
+
529
+ if (leftInterval.stop.lessThan(rightInterval.stop) ||
530
+ (leftInterval.stop.equals(rightInterval.stop) &&
531
+ !leftInterval.isStopIncluded &&
532
+ rightInterval.isStopIncluded)) {
533
+ ++left;
534
+ } else {
535
+ ++right;
536
+ }
537
+ }
538
+ }
539
+ return result;
540
+ };
541
+
542
+ return TimeIntervalCollection;
543
+ });