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,95 @@
1
+ /*global define*/
2
+ define(function() {
3
+ "use strict";
4
+
5
+ /**
6
+ * A queue that can enqueue items at the end, and dequeue items from the front.
7
+ *
8
+ * @alias Queue
9
+ * @constructor
10
+ */
11
+ var Queue = function() {
12
+ this._array = [];
13
+ this._offset = 0;
14
+
15
+ /**
16
+ * The length of the queue.
17
+ */
18
+ this.length = 0;
19
+ };
20
+
21
+ /**
22
+ * Enqueues the specified item.
23
+ *
24
+ * @param {Object} item The item to enqueue.
25
+ * @memberof Queue
26
+ */
27
+ Queue.prototype.enqueue = function(item) {
28
+ this._array.push(item);
29
+ this.length++;
30
+ };
31
+
32
+ /**
33
+ * Dequeues an item. Returns undefined if the queue is empty.
34
+ *
35
+ * @memberof Queue
36
+ */
37
+ Queue.prototype.dequeue = function() {
38
+ if (this.length === 0) {
39
+ return undefined;
40
+ }
41
+
42
+ var array = this._array;
43
+ var offset = this._offset;
44
+ var item = array[offset];
45
+ array[offset] = undefined;
46
+
47
+ offset++;
48
+ if (offset > 10 && offset * 2 > array.length) {
49
+ //compact array
50
+ this._array = array.slice(offset);
51
+ offset = 0;
52
+ }
53
+
54
+ this._offset = offset;
55
+ this.length--;
56
+
57
+ return item;
58
+ };
59
+
60
+ /**
61
+ * Check whether this queue contains the specified item.
62
+ *
63
+ * @param {Object} the item to search for.
64
+ * @memberof Queue
65
+ */
66
+ Queue.prototype.contains = function(item) {
67
+ return this._array.indexOf(item) !== -1;
68
+ };
69
+
70
+ /**
71
+ * Remove all items from the queue.
72
+ * @memberof Queue
73
+ */
74
+ Queue.prototype.clear = function() {
75
+ this._array.length = this._offset = this.length = 0;
76
+ };
77
+
78
+ /**
79
+ * Sort the items in the queue in-place.
80
+ *
81
+ * @param {Function} compareFunction a function that defines the sort order.
82
+ * @memberof Queue
83
+ */
84
+ Queue.prototype.sort = function(compareFunction) {
85
+ if (this._offset > 0) {
86
+ //compact array
87
+ this._array = this._array.slice(this._offset);
88
+ this._offset = 0;
89
+ }
90
+
91
+ this._array.sort(compareFunction);
92
+ };
93
+
94
+ return Queue;
95
+ });
@@ -0,0 +1,64 @@
1
+ /*global define*/
2
+ define([
3
+ './DeveloperError',
4
+ './defaultValue',
5
+ './Cartesian3'
6
+ ], function(
7
+ DeveloperError,
8
+ defaultValue,
9
+ Cartesian3) {
10
+ "use strict";
11
+
12
+ /**
13
+ * Represents a ray that extends infinitely from the provided origin in the provided direction.
14
+ * @alias Ray
15
+ * @constructor
16
+ *
17
+ * @param {Cartesian3} [origin=Cartesian3.ZERO] The origin of the ray.
18
+ * @param {Cartesian3} [direction=Cartesian3.ZERO] The direction of the ray.
19
+ */
20
+ var Ray = function(origin, direction) {
21
+ direction = Cartesian3.clone(defaultValue(direction, Cartesian3.ZERO));
22
+ if (!direction.equals(Cartesian3.ZERO)) {
23
+ Cartesian3.normalize(direction, direction);
24
+ }
25
+
26
+ /**
27
+ * The origin of the ray.
28
+ * @type {Cartesian3}
29
+ */
30
+ this.origin = Cartesian3.clone(defaultValue(origin, Cartesian3.ZERO));
31
+
32
+ /**
33
+ * The direction of the ray.
34
+ * @type {Cartesian3}
35
+ */
36
+ this.direction = direction;
37
+ };
38
+
39
+ /**
40
+ * Computes the point along the ray given by r(t) = o + t*d,
41
+ * where o is the origin of the ray and d is the direction.
42
+ * @memberof Ray
43
+ *
44
+ * @param {Number} t A scalar value.
45
+ * @param {Cartesian3} [result] The object in which the result will be stored.
46
+ * @returns The modified result parameter, or a new instance if none was provided.
47
+ *
48
+ * @exception {DeveloperError} t is a required number
49
+ *
50
+ * @example
51
+ * //Get the first intersection point of a ray and an ellipsoid.
52
+ * var intersection = IntersectionTests.rayEllipsoid(ray, ellipsoid);
53
+ * var point = ray.getPoint(intersection.start);
54
+ */
55
+ Ray.prototype.getPoint = function(t, result) {
56
+ if (typeof t !== 'number') {
57
+ throw new DeveloperError('t is a required number');
58
+ }
59
+ result = Cartesian3.multiplyByScalar(this.direction, t, result);
60
+ return Cartesian3.add(this.origin, result, result);
61
+ };
62
+
63
+ return Ray;
64
+ });
@@ -0,0 +1,25 @@
1
+ /*global define*/
2
+ define([
3
+ './Enumeration'
4
+ ], function(
5
+ Enumeration) {
6
+ "use strict";
7
+
8
+ /**
9
+ * Constants for identifying well-known reference frames.
10
+ *
11
+ * @exports ReferenceFrame
12
+ */
13
+ var ReferenceFrame = {
14
+ /**
15
+ * The fixed frame.
16
+ */
17
+ FIXED : new Enumeration(0, 'FIXED'),
18
+ /**
19
+ * The inertial frame.
20
+ */
21
+ INERTIAL : new Enumeration(1, 'INERTIAL')
22
+ };
23
+
24
+ return ReferenceFrame;
25
+ });
@@ -0,0 +1,35 @@
1
+ /*global define*/
2
+ define([
3
+ ], function(
4
+ ) {
5
+ "use strict";
6
+
7
+ /**
8
+ * An event that is raised when a request encounters an error.
9
+ *
10
+ * @constructor
11
+ * @alias RequestErrorEvent
12
+ *
13
+ * @param {Number} [statusCode] The HTTP error status code, such as 404.
14
+ * @param {Object} [response] The response included along with the error.
15
+ */
16
+ var RequestErrorEvent = function RequestErrorEvent(statusCode, response) {
17
+ /**
18
+ * The HTTP error status code, such as 404. If the error does not have a particular
19
+ * HTTP code, this property will be undefined.
20
+ *
21
+ * @type {Number}
22
+ */
23
+ this.statusCode = statusCode;
24
+
25
+ /**
26
+ * The response included along with the error. If the error does not include a response,
27
+ * this property will be undefined.
28
+ *
29
+ * @type {Object}
30
+ */
31
+ this.response = response;
32
+ };
33
+
34
+ return RequestErrorEvent;
35
+ });
@@ -0,0 +1,59 @@
1
+ /*global define*/
2
+ define(function() {
3
+ "use strict";
4
+
5
+ /**
6
+ * Constructs an exception object that is thrown due to an error that can occur at runtime, e.g.,
7
+ * out of memory, could not compile shader, etc. If a function may throw this
8
+ * exception, the calling code should be prepared to catch it.
9
+ * <br /><br />
10
+ * On the other hand, a {@link DeveloperError} indicates an exception due
11
+ * to a developer error, e.g., invalid argument, that usually indicates a bug in the
12
+ * calling code.
13
+ *
14
+ * @alias RuntimeError
15
+ *
16
+ * @param {String} [message=undefined] The error message for this exception.
17
+ *
18
+ * @see DeveloperError
19
+ * @constructor
20
+ */
21
+ var RuntimeError = function(message) {
22
+ /**
23
+ * 'RuntimeError' indicating that this exception was thrown due to a runtime error.
24
+ * @type String
25
+ * @constant
26
+ */
27
+ this.name = 'RuntimeError';
28
+
29
+ /**
30
+ * The explanation for why this exception was thrown.
31
+ * @type String
32
+ * @constant
33
+ */
34
+ this.message = message;
35
+
36
+ /**
37
+ * The Error object containing the stack trace.
38
+ * @type Error
39
+ * @constant
40
+ *
41
+ * @see <a href='https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error'>Error object on Mozilla Developer Network</a>.
42
+ */
43
+ this.error = new Error();
44
+ };
45
+
46
+ RuntimeError.prototype.toString = function () {
47
+ var str = this.name + ': ' + this.message;
48
+ if (typeof this.error !== 'undefined') {
49
+ if (typeof this.error.stack !== 'undefined') {
50
+ str += '\n' + this.error.stack.toString();
51
+ } else {
52
+ str += '\n' + this.error.toString();
53
+ }
54
+ }
55
+ return str;
56
+ };
57
+
58
+ return RuntimeError;
59
+ });
@@ -0,0 +1,658 @@
1
+ /*global define*/
2
+ define([
3
+ './DeveloperError',
4
+ './destroyObject',
5
+ './Cartesian2',
6
+ './JulianDate',
7
+ './ScreenSpaceEventType',
8
+ './KeyboardEventModifier'
9
+ ], function(
10
+ DeveloperError,
11
+ destroyObject,
12
+ Cartesian2,
13
+ JulianDate,
14
+ ScreenSpaceEventType,
15
+ KeyboardEventModifier) {
16
+ "use strict";
17
+
18
+ /**
19
+ * Handles user input events. Custom functions can be added to be executed on
20
+ * when the user enters input.
21
+ *
22
+ * @alias ScreenSpaceEventHandler
23
+ *
24
+ * @param {DOC_TBA} element The element to add events to. Defaults to document.
25
+ * @constructor
26
+ */
27
+ var ScreenSpaceEventHandler = function(element) {
28
+ this._mouseEvents = {};
29
+ for ( var button in ScreenSpaceEventType) {
30
+ if (ScreenSpaceEventType.hasOwnProperty(button)) {
31
+ this._mouseEvents[button] = 0;
32
+ }
33
+ }
34
+
35
+ this._modifiedMouseEvents = {};
36
+ for ( var modifier in KeyboardEventModifier) {
37
+ if (KeyboardEventModifier.hasOwnProperty(modifier)) {
38
+ this._modifiedMouseEvents[modifier] = {};
39
+ for (button in ScreenSpaceEventType) {
40
+ if (ScreenSpaceEventType.hasOwnProperty(button)) {
41
+ this._modifiedMouseEvents[modifier][button] = 0;
42
+ }
43
+ }
44
+ }
45
+ }
46
+
47
+ this._leftMouseButtonDown = false;
48
+ this._middleMouseButtonDown = false;
49
+ this._rightMouseButtonDown = false;
50
+ this._isPinching = false;
51
+ this._seenAnyTouchEvents = false;
52
+ this._lastMouseX = 0;
53
+ this._lastMouseY = 0;
54
+ this._lastTouch2X = 0;
55
+ this._lastTouch2Y = 0;
56
+ this._totalPixels = 0;
57
+ this._touchID1 = 0;
58
+ this._touchID2 = 0;
59
+
60
+ // TODO: Revisit when doing mobile development. May need to be configurable
61
+ // or determined based on the platform?
62
+ this._clickPixelTolerance = 5;
63
+
64
+ this._element = element || document;
65
+
66
+ this._register();
67
+ };
68
+
69
+ ScreenSpaceEventHandler.prototype._getPosition = function(event) {
70
+ if (this._element === document) {
71
+ return {
72
+ x : event.clientX,
73
+ y : event.clientY
74
+ };
75
+ }
76
+
77
+ var rect = this._element.getBoundingClientRect();
78
+ return {
79
+ x : event.clientX - rect.left,
80
+ y : event.clientY - rect.top
81
+ };
82
+ };
83
+
84
+ /**
85
+ * Set a function to be executed on an input event.
86
+ *
87
+ * @memberof ScreenSpaceEventHandler
88
+ *
89
+ * @param {Function} action Function to be executed when the input event occurs.
90
+ * @param {Enumeration} type The ScreenSpaceEventType of input event.
91
+ * @param {Enumeration} modifier A KeyboardEventModifier key that is held when a <code>type</code>
92
+ * event occurs.
93
+ *
94
+ * @exception {DeveloperError} action is required.
95
+ * @exception {DeveloperError} type is required.
96
+ *
97
+ * @see ScreenSpaceEventHandler#getInputAction
98
+ * @see ScreenSpaceEventHandler#removeInputAction
99
+ */
100
+ ScreenSpaceEventHandler.prototype.setInputAction = function(action, type, modifier) {
101
+ if (!action) {
102
+ throw new DeveloperError('action is required.');
103
+ }
104
+
105
+ if (!type) {
106
+ throw new DeveloperError('type is required.');
107
+ }
108
+
109
+ var mouseEvents;
110
+ if (modifier && modifier.name) {
111
+ mouseEvents = this._modifiedMouseEvents[modifier.name];
112
+ } else {
113
+ mouseEvents = this._mouseEvents;
114
+ }
115
+
116
+ if (type && type.name && mouseEvents) {
117
+ mouseEvents[type.name] = action;
118
+ }
119
+ };
120
+
121
+ /**
122
+ * Returns the function to be executed on an input event.
123
+ *
124
+ * @memberof ScreenSpaceEventHandler
125
+ *
126
+ * @param {Enumeration} type The ScreenSpaceEventType of input event.
127
+ * @param {Enumeration} modifier A KeyboardEventModifier key that is held when a <code>type</code>
128
+ * event occurs.
129
+ *
130
+ * @exception {DeveloperError} type is required.
131
+ *
132
+ * @see ScreenSpaceEventHandler#setInputAction
133
+ * @see ScreenSpaceEventHandler#removeInputAction
134
+ */
135
+ ScreenSpaceEventHandler.prototype.getInputAction = function(type, modifier) {
136
+ if (!type) {
137
+ throw new DeveloperError('type is required.');
138
+ }
139
+
140
+ var mouseEvents;
141
+ if (modifier && modifier.name) {
142
+ mouseEvents = this._modifiedMouseEvents[modifier.name];
143
+ } else {
144
+ mouseEvents = this._mouseEvents;
145
+ }
146
+
147
+ if (type && type.name && mouseEvents) {
148
+ return mouseEvents[type.name];
149
+ }
150
+
151
+ return undefined;
152
+ };
153
+
154
+ /**
155
+ * Removes the function to be executed on an input event.
156
+ *
157
+ * @memberof ScreenSpaceEventHandler
158
+ *
159
+ * @param {Enumeration} type The ScreenSpaceEventType of input event.
160
+ * @param {Enumeration} modifier A KeyboardEventModifier key that is held when a <code>type</code>
161
+ * event occurs.
162
+ *
163
+ * @exception {DeveloperError} type is required.
164
+ *
165
+ * @see ScreenSpaceEventHandler#getInputAction
166
+ * @see ScreenSpaceEventHandler#setInputAction
167
+ */
168
+ ScreenSpaceEventHandler.prototype.removeInputAction = function(type, modifier) {
169
+ if (!type) {
170
+ throw new DeveloperError('type is required.');
171
+ }
172
+
173
+ var mouseEvents;
174
+ if (modifier && modifier.name) {
175
+ mouseEvents = this._modifiedMouseEvents[modifier.name];
176
+ } else {
177
+ mouseEvents = this._mouseEvents;
178
+ }
179
+
180
+ if (type && type.name && mouseEvents && mouseEvents[type.name]) {
181
+ delete mouseEvents[type.name];
182
+ }
183
+ };
184
+
185
+ ScreenSpaceEventHandler.prototype._getModifier = function(event) {
186
+ if (event.shiftKey) {
187
+ return KeyboardEventModifier.SHIFT;
188
+ } else if (event.ctrlKey) {
189
+ return KeyboardEventModifier.CTRL;
190
+ } else if (event.altKey) {
191
+ return KeyboardEventModifier.ALT;
192
+ }
193
+
194
+ return undefined;
195
+ };
196
+
197
+ ScreenSpaceEventHandler.prototype._handleMouseDown = function(event) {
198
+ var pos = this._getPosition(event);
199
+ this._lastMouseX = pos.x;
200
+ this._lastMouseY = pos.y;
201
+ this._totalPixels = 0;
202
+ if (this._seenAnyTouchEvents) {
203
+ return;
204
+ }
205
+
206
+ var modifier = this._getModifier(event);
207
+ var action;
208
+
209
+ // IE_TODO: On some versions of IE, the left-button is 1, and the right-button is 4.
210
+ // See: http://www.unixpapa.com/js/mouse.html
211
+ // This is not the case in Chrome Frame, so we are OK for now, but are there
212
+ // constants somewhere?
213
+ if (event.button === 0) {
214
+ this._leftMouseButtonDown = true;
215
+ action = this.getInputAction(ScreenSpaceEventType.LEFT_DOWN, modifier);
216
+ } else if (event.button === 1) {
217
+ this._middleMouseButtonDown = true;
218
+ action = this.getInputAction(ScreenSpaceEventType.MIDDLE_DOWN, modifier);
219
+ } else if (event.button === 2) {
220
+ this._rightMouseButtonDown = true;
221
+ action = this.getInputAction(ScreenSpaceEventType.RIGHT_DOWN, modifier);
222
+ }
223
+
224
+ if (action) {
225
+ action({
226
+ position : new Cartesian2(pos.x, pos.y)
227
+ });
228
+ }
229
+ event.preventDefault();
230
+ };
231
+
232
+ ScreenSpaceEventHandler.prototype._handleMouseUp = function(event) {
233
+ var modifier = this._getModifier(event);
234
+ var action, clickAction;
235
+ if (this._seenAnyTouchEvents) {
236
+ return;
237
+ }
238
+
239
+ // IE_TODO: On some versions of IE, the left-button is 1, and the right-button is 4.
240
+ // See: http://www.unixpapa.com/js/mouse.html
241
+ // This is not the case in Chrome Frame, so we are OK for now, but are there
242
+ // constants somewhere?
243
+ if (event.button === 0) {
244
+ this._leftMouseButtonDown = false;
245
+ action = this.getInputAction(ScreenSpaceEventType.LEFT_UP, modifier);
246
+ clickAction = this.getInputAction(ScreenSpaceEventType.LEFT_CLICK, modifier);
247
+ } else if (event.button === 1) {
248
+ this._middleMouseButtonDown = false;
249
+ action = this.getInputAction(ScreenSpaceEventType.MIDDLE_UP, modifier);
250
+ clickAction = this.getInputAction(ScreenSpaceEventType.MIDDLE_CLICK, modifier);
251
+ } else if (event.button === 2) {
252
+ this._rightMouseButtonDown = false;
253
+ action = this.getInputAction(ScreenSpaceEventType.RIGHT_UP, modifier);
254
+ clickAction = this.getInputAction(ScreenSpaceEventType.RIGHT_CLICK, modifier);
255
+ }
256
+
257
+ var pos = this._getPosition(event);
258
+
259
+ var xDiff = this._lastMouseX - pos.x;
260
+ var yDiff = this._lastMouseY - pos.y;
261
+ this._totalPixels += Math.sqrt(xDiff * xDiff + yDiff * yDiff);
262
+
263
+ if (action) {
264
+ action({
265
+ position : new Cartesian2(pos.x, pos.y)
266
+ });
267
+ }
268
+
269
+ if (clickAction && this._totalPixels < this._clickPixelTolerance) {
270
+ clickAction({
271
+ position : new Cartesian2(pos.x, pos.y)
272
+ });
273
+ }
274
+ };
275
+
276
+ ScreenSpaceEventHandler.prototype._handleMouseMove = function(event) {
277
+ var pos = this._getPosition(event);
278
+ if (this._seenAnyTouchEvents) {
279
+ return;
280
+ }
281
+
282
+ var xDiff = this._lastMouseX - pos.x;
283
+ var yDiff = this._lastMouseY - pos.y;
284
+ this._totalPixels += Math.sqrt(xDiff * xDiff + yDiff * yDiff);
285
+
286
+ var movement = {
287
+ startPosition : new Cartesian2(this._lastMouseX, this._lastMouseY),
288
+ endPosition : new Cartesian2(pos.x, pos.y),
289
+ motion : new Cartesian2(0.0, 0.0)
290
+ };
291
+
292
+ var modifier = this._getModifier(event);
293
+ var action = this.getInputAction(ScreenSpaceEventType.MOUSE_MOVE, modifier);
294
+ if (action) {
295
+ action(movement);
296
+ }
297
+
298
+ this._lastMouseX = movement.endPosition.x;
299
+ this._lastMouseY = movement.endPosition.y;
300
+
301
+ if (this._leftMouseButtonDown || this._middleMouseButtonDown || this._rightMouseButtonDown) {
302
+ event.preventDefault();
303
+ }
304
+ };
305
+
306
+ ScreenSpaceEventHandler.prototype._handleTouchStart = function(event) {
307
+ var pos, pos2, numberOfTouches = event.touches.length;
308
+ this._seenAnyTouchEvents = true;
309
+ var modifier = this._getModifier(event);
310
+ var action;
311
+
312
+ pos = this._getPosition(event.touches[0]);
313
+
314
+ if (numberOfTouches === 1) {
315
+ this._lastMouseX = pos.x;
316
+ this._lastMouseY = pos.y;
317
+ this._totalPixels = 0;
318
+
319
+ this._leftMouseButtonDown = true;
320
+ action = this.getInputAction(ScreenSpaceEventType.LEFT_DOWN, modifier);
321
+
322
+ if (action) {
323
+ action({
324
+ position : new Cartesian2(pos.x, pos.y)
325
+ });
326
+ }
327
+ event.preventDefault();
328
+ } else if (this._leftMouseButtonDown) {
329
+ // Release "mouse" without clicking, because we are adding more touches.
330
+ this._leftMouseButtonDown = false;
331
+ action = this.getInputAction(ScreenSpaceEventType.LEFT_UP, modifier);
332
+ if (action) {
333
+ action({
334
+ position : new Cartesian2(pos.x, pos.y)
335
+ });
336
+ }
337
+ }
338
+
339
+ if (numberOfTouches === 2) {
340
+ this._isPinching = true;
341
+ pos2 = this._getPosition(event.touches[1]);
342
+ this._touchID1 = event.touches[0].identifier;
343
+ this._touchID2 = event.touches[1].identifier;
344
+ this._lastMouseX = pos.x;
345
+ this._lastMouseY = pos.y;
346
+ this._lastTouch2X = pos2.x;
347
+ this._lastTouch2Y = pos2.y;
348
+ action = this.getInputAction(ScreenSpaceEventType.PINCH_START, modifier);
349
+ if (action) {
350
+ action({
351
+ position1 : new Cartesian2(pos.x, pos.y),
352
+ position2 : new Cartesian2(pos2.x, pos2.y)
353
+ });
354
+ }
355
+ } else if (this._isPinching) {
356
+ this._isPinching = false;
357
+ action = this.getInputAction(ScreenSpaceEventType.PINCH_END, modifier);
358
+ if (action) {
359
+ action();
360
+ }
361
+ }
362
+ };
363
+
364
+ ScreenSpaceEventHandler.prototype._handleTouchEnd = function(event) {
365
+ var numberOfTouches = event.touches.length;
366
+ var numberOfChangedTouches = event.changedTouches.length;
367
+ var modifier = this._getModifier(event);
368
+ var action, clickAction;
369
+
370
+ if (this._leftMouseButtonDown) {
371
+ this._leftMouseButtonDown = false;
372
+ action = this.getInputAction(ScreenSpaceEventType.LEFT_UP, modifier);
373
+ clickAction = this.getInputAction(ScreenSpaceEventType.LEFT_CLICK, modifier);
374
+
375
+ if (numberOfChangedTouches > 0) {
376
+ var pos = this._getPosition(event.changedTouches[0]);
377
+
378
+ var xDiff = this._lastMouseX - pos.x;
379
+ var yDiff = this._lastMouseY - pos.y;
380
+ this._totalPixels += Math.sqrt(xDiff * xDiff + yDiff * yDiff);
381
+
382
+ if (action) {
383
+ action({
384
+ position : new Cartesian2(pos.x, pos.y)
385
+ });
386
+ }
387
+
388
+ if (clickAction && this._totalPixels < this._clickPixelTolerance) {
389
+ clickAction({
390
+ position : new Cartesian2(pos.x, pos.y)
391
+ });
392
+ }
393
+ }
394
+ }
395
+
396
+ if (this._isPinching) {
397
+ this._isPinching = false;
398
+ action = this.getInputAction(ScreenSpaceEventType.PINCH_END, modifier);
399
+ if (action) {
400
+ action();
401
+ }
402
+ }
403
+
404
+ if (numberOfTouches === 1 || numberOfTouches === 2) {
405
+ this._handleTouchStart(event);
406
+ }
407
+ };
408
+
409
+ ScreenSpaceEventHandler.prototype._handleTouchMove = function(event) {
410
+ var modifier = this._getModifier(event);
411
+ var pos, pos2, action, movement;
412
+
413
+ if (this._leftMouseButtonDown && (event.touches.length === 1)) {
414
+ pos = this._getPosition(event.touches[0]);
415
+
416
+ var xDiff = this._lastMouseX - pos.x;
417
+ var yDiff = this._lastMouseY - pos.y;
418
+ this._totalPixels += Math.sqrt(xDiff * xDiff + yDiff * yDiff);
419
+
420
+ movement = {
421
+ startPosition : new Cartesian2(this._lastMouseX, this._lastMouseY),
422
+ endPosition : new Cartesian2(pos.x, pos.y),
423
+ motion : new Cartesian2(0.0, 0.0)
424
+ };
425
+
426
+ action = this.getInputAction(ScreenSpaceEventType.MOUSE_MOVE, modifier);
427
+ if (action) {
428
+ action(movement);
429
+ }
430
+
431
+ this._lastMouseX = movement.endPosition.x;
432
+ this._lastMouseY = movement.endPosition.y;
433
+
434
+ if (this._leftMouseButtonDown || this._middleMouseButtonDown || this._rightMouseButtonDown) {
435
+ event.preventDefault();
436
+ }
437
+ }
438
+
439
+ if (this._isPinching && (event.touches.length === 2)) {
440
+ // Check the touch identifier to make sure the order is correct.
441
+ if (event.touches[0].identifier === this._touchID2) {
442
+ pos = this._getPosition(event.touches[1]);
443
+ pos2 = this._getPosition(event.touches[0]);
444
+ } else {
445
+ pos = this._getPosition(event.touches[0]);
446
+ pos2 = this._getPosition(event.touches[1]);
447
+ }
448
+
449
+ action = this.getInputAction(ScreenSpaceEventType.PINCH_MOVE, modifier);
450
+ if (action) {
451
+ var dX = pos2.x - pos.x;
452
+ var dY = pos2.y - pos.y;
453
+ var dist = Math.sqrt(dX * dX + dY * dY) * 0.25;
454
+ var prevDX = this._lastTouch2X - this._lastMouseX;
455
+ var prevDY = this._lastTouch2Y - this._lastMouseY;
456
+ var prevDist = Math.sqrt(prevDX * prevDX + prevDY * prevDY) * 0.25;
457
+ var cY = (pos2.y + pos.y) * 0.125;
458
+ var prevCY = (this._lastTouch2Y + this._lastMouseY) * 0.125;
459
+ var angle = Math.atan2(dY, dX);
460
+ var prevAngle = Math.atan2(prevDY, prevDX);
461
+ movement = {
462
+ 'distance' : {
463
+ startPosition : new Cartesian2(0, prevDist),
464
+ endPosition : new Cartesian2(0, dist),
465
+ motion : new Cartesian2(0.0, 0.0)
466
+ },
467
+ 'angleAndHeight' : {
468
+ startPosition : new Cartesian2(prevAngle, prevCY),
469
+ endPosition : new Cartesian2(angle, cY),
470
+ motion : new Cartesian2(0.0, 0.0)
471
+ }
472
+ };
473
+ action(movement);
474
+ }
475
+
476
+ this._lastMouseX = pos.x;
477
+ this._lastMouseY = pos.y;
478
+ this._lastTouch2X = pos2.x;
479
+ this._lastTouch2Y = pos2.y;
480
+ }
481
+ };
482
+
483
+ ScreenSpaceEventHandler.prototype._handleMouseWheel = function(event) {
484
+ // Some browsers use event.detail to count the number of clicks. The sign
485
+ // of the integer is the direction the wheel is scrolled. In that case, convert
486
+ // to the angle it was rotated in degrees.
487
+ var delta = event.detail ? event.detail * -120 : event.wheelDelta;
488
+
489
+ var modifier = this._getModifier(event);
490
+ var type = ScreenSpaceEventType.WHEEL;
491
+ var action = this.getInputAction(type, modifier);
492
+
493
+ if (action) {
494
+ event.preventDefault();
495
+ action(delta);
496
+ }
497
+ };
498
+
499
+ ScreenSpaceEventHandler.prototype._handleMouseDblClick = function(event) {
500
+ var modifier = this._getModifier(event);
501
+ var action;
502
+ var pos = this._getPosition(event);
503
+
504
+ // IE_TODO: On some versions of IE, the left-button is 1, and the right-button is 4.
505
+ // See: http://www.unixpapa.com/js/mouse.html
506
+ // This is not the case in Chrome Frame, so we are OK for now, but are there
507
+ // constants somewhere?
508
+ if (event.button === 0) {
509
+ action = this.getInputAction(ScreenSpaceEventType.LEFT_DOUBLE_CLICK, modifier);
510
+ } else if (event.button === 1) {
511
+ action = this.getInputAction(ScreenSpaceEventType.MIDDLE_DOUBLE_CLICK, modifier);
512
+ } else if (event.button === 2) {
513
+ action = this.getInputAction(ScreenSpaceEventType.RIGHT_DOUBLE_CLICK, modifier);
514
+ }
515
+
516
+ if (action) {
517
+ action({
518
+ position : new Cartesian2(pos.x, pos.y)
519
+ });
520
+ }
521
+ };
522
+
523
+ ScreenSpaceEventHandler.prototype._register = function() {
524
+ var that = this, useDoc = true;
525
+
526
+ this._callbacks = [];
527
+ if (typeof this._element.disableRootEvents !== 'undefined') {
528
+ useDoc = false;
529
+ }
530
+
531
+ this._callbacks.push({
532
+ name : 'mousedown',
533
+ onDoc : false,
534
+ action : function(e) {
535
+ that._handleMouseDown(e);
536
+ }
537
+ });
538
+ this._callbacks.push({
539
+ name : 'mouseup',
540
+ onDoc : useDoc,
541
+ action : function(e) {
542
+ that._handleMouseUp(e);
543
+ }
544
+ });
545
+ this._callbacks.push({
546
+ name : 'mousemove',
547
+ onDoc : useDoc,
548
+ action : function(e) {
549
+ that._handleMouseMove(e);
550
+ }
551
+ });
552
+ this._callbacks.push({
553
+ name : 'dblclick',
554
+ onDoc : false,
555
+ action : function(e) {
556
+ that._handleMouseDblClick(e);
557
+ }
558
+ });
559
+ this._callbacks.push({
560
+ name : 'touchstart',
561
+ onDoc : false,
562
+ action : function(e) {
563
+ that._handleTouchStart(e);
564
+ }
565
+ });
566
+ this._callbacks.push({
567
+ name : 'touchend',
568
+ onDoc : useDoc,
569
+ action : function(e) {
570
+ that._handleTouchEnd(e);
571
+ }
572
+ });
573
+ this._callbacks.push({
574
+ name : 'touchmove',
575
+ onDoc : useDoc,
576
+ action : function(e) {
577
+ that._handleTouchMove(e);
578
+ }
579
+ });
580
+
581
+ // Firefox calls the mouse wheel event 'DOMMouseScroll', all others use 'mousewheel'
582
+ this._callbacks.push({
583
+ name : 'mousewheel',
584
+ onDoc : false,
585
+ action : function(e) {
586
+ that._handleMouseWheel(e);
587
+ }
588
+ });
589
+ this._callbacks.push({
590
+ name : 'DOMMouseScroll',
591
+ onDoc : false,
592
+ action : function(e) {
593
+ that._handleMouseWheel(e);
594
+ }
595
+ });
596
+
597
+ for ( var i = 0; i < this._callbacks.length; i++) {
598
+ var cback = this._callbacks[i];
599
+ if (cback.onDoc) {
600
+ document.addEventListener(cback.name, cback.action, false);
601
+ } else {
602
+ this._element.addEventListener(cback.name, cback.action, false);
603
+ }
604
+ }
605
+ };
606
+
607
+ ScreenSpaceEventHandler.prototype._unregister = function() {
608
+ for ( var i = 0; i < this._callbacks.length; i++) {
609
+ var cback = this._callbacks[i];
610
+ if (cback.onDoc) {
611
+ document.removeEventListener(cback.name, cback.action, false);
612
+ } else {
613
+ this._element.removeEventListener(cback.name, cback.action, false);
614
+ }
615
+ }
616
+ };
617
+
618
+ /**
619
+ * Returns true if this object was destroyed; otherwise, false.
620
+ * <br /><br />
621
+ * If this object was destroyed, it should not be used; calling any function other than
622
+ * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
623
+ *
624
+ * @memberof ScreenSpaceEventHandler
625
+ *
626
+ * @return {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.
627
+ *
628
+ * @see ScreenSpaceEventHandler#destroy
629
+ */
630
+ ScreenSpaceEventHandler.prototype.isDestroyed = function() {
631
+ return false;
632
+ };
633
+
634
+ /**
635
+ * Removes listeners held by this object.
636
+ * <br /><br />
637
+ * Once an object is destroyed, it should not be used; calling any function other than
638
+ * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,
639
+ * assign the return value (<code>undefined</code>) to the object as done in the example.
640
+ *
641
+ * @memberof ScreenSpaceEventHandler
642
+ *
643
+ * @return {undefined}
644
+ *
645
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
646
+ *
647
+ * @see ScreenSpaceEventHandler#isDestroyed
648
+ *
649
+ * @example
650
+ * handler = handler && handler.destroy();
651
+ */
652
+ ScreenSpaceEventHandler.prototype.destroy = function() {
653
+ this._unregister();
654
+ return destroyObject(this);
655
+ };
656
+
657
+ return ScreenSpaceEventHandler;
658
+ });