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,680 @@
1
+ /*global define*/
2
+ define([
3
+ '../Core/defaultValue',
4
+ '../Core/DeveloperError',
5
+ '../Core/Color',
6
+ '../Core/Cartesian2',
7
+ '../Core/Cartesian3',
8
+ '../Core/Cartesian4',
9
+ '../Core/Cartographic',
10
+ '../Core/Math',
11
+ './HorizontalOrigin',
12
+ './VerticalOrigin',
13
+ './SceneMode'
14
+ ], function(
15
+ defaultValue,
16
+ DeveloperError,
17
+ Color,
18
+ Cartesian2,
19
+ Cartesian3,
20
+ Cartesian4,
21
+ Cartographic,
22
+ CesiumMath,
23
+ HorizontalOrigin,
24
+ VerticalOrigin,
25
+ SceneMode) {
26
+ "use strict";
27
+
28
+ var EMPTY_OBJECT = {};
29
+
30
+ /**
31
+ * A viewport-aligned image positioned in the 3D scene, that is created
32
+ * and rendered using a {@link BillboardCollection}. A billboard is created and its initial
33
+ * properties are set by calling {@link BillboardCollection#add}. Any of the billboard's
34
+ * properties can be changed at any time by calling the billboard's corresponding
35
+ * <code>set</code> function, e.g., {@link Billboard#setShow}.
36
+ * <br /><br />
37
+ * <div align='center'>
38
+ * <img src='images/Billboard.png' width='400' height='300' /><br />
39
+ * Example billboards
40
+ * </div>
41
+ *
42
+ * @alias Billboard
43
+ *
44
+ * @performance Calling any <code>get</code> function, e.g., {@link Billboard#getShow}, is constant time.
45
+ * Calling a <code>set</code> function, e.g., {@link Billboard#setShow}, is constant time but results in
46
+ * CPU to GPU traffic when {@link BillboardCollection#update} is called. The per-billboard traffic is
47
+ * the same regardless of how many properties were updated. If most billboards in a collection need to be
48
+ * updated, it may be more efficient to clear the collection with {@link BillboardCollection#removeAll}
49
+ * and add new billboards instead of modifying each one.
50
+ *
51
+ * @see BillboardCollection
52
+ * @see BillboardCollection#add
53
+ * @see Label
54
+ *
55
+ * @internalConstructor
56
+ */
57
+ var Billboard = function(description, billboardCollection) {
58
+ description = defaultValue(description, EMPTY_OBJECT);
59
+
60
+ this._show = defaultValue(description.show, true);
61
+
62
+ this._position = Cartesian3.clone(defaultValue(description.position, Cartesian3.ZERO));
63
+ this._actualPosition = this._position.clone(); // For columbus view and 2D
64
+
65
+ this._pixelOffset = Cartesian2.clone(defaultValue(description.pixelOffset, Cartesian2.ZERO));
66
+ this._eyeOffset = Cartesian3.clone(defaultValue(description.eyeOffset, Cartesian3.ZERO));
67
+ this._verticalOrigin = defaultValue(description.verticalOrigin, VerticalOrigin.CENTER);
68
+ this._horizontalOrigin = defaultValue(description.horizontalOrigin, HorizontalOrigin.CENTER);
69
+ this._scale = defaultValue(description.scale, 1.0);
70
+ this._imageIndex = defaultValue(description.imageIndex, -1);
71
+ this._color = Color.clone(defaultValue(description.color, Color.WHITE));
72
+
73
+ this._pickId = undefined;
74
+ this._pickIdThis = description._pickIdThis;
75
+ this._billboardCollection = billboardCollection;
76
+ this._dirty = false;
77
+ this._index = -1; //Used only by BillboardCollection
78
+ };
79
+
80
+ var SHOW_INDEX = Billboard.SHOW_INDEX = 0;
81
+ var POSITION_INDEX = Billboard.POSITION_INDEX = 1;
82
+ var PIXEL_OFFSET_INDEX = Billboard.PIXEL_OFFSET_INDEX = 2;
83
+ var EYE_OFFSET_INDEX = Billboard.EYE_OFFSET_INDEX = 3;
84
+ var HORIZONTAL_ORIGIN_INDEX = Billboard.HORIZONTAL_ORIGIN_INDEX = 4;
85
+ var VERTICAL_ORIGIN_INDEX = Billboard.VERTICAL_ORIGIN_INDEX = 5;
86
+ var SCALE_INDEX = Billboard.SCALE_INDEX = 6;
87
+ var IMAGE_INDEX_INDEX = Billboard.IMAGE_INDEX_INDEX = 7;
88
+ var COLOR_INDEX = Billboard.COLOR_INDEX = 8;
89
+ Billboard.NUMBER_OF_PROPERTIES = 9;
90
+
91
+ function makeDirty(billboard, propertyChanged) {
92
+ var billboardCollection = billboard._billboardCollection;
93
+ if (typeof billboardCollection !== 'undefined') {
94
+ billboardCollection._updateBillboard(billboard, propertyChanged);
95
+ billboard._dirty = true;
96
+ }
97
+ }
98
+
99
+ Billboard.prototype.getPickId = function(context) {
100
+ this._pickId = this._pickId || context.createPickId(this._pickIdThis || this);
101
+ return this._pickId;
102
+ };
103
+
104
+ /**
105
+ * Returns true if this billboard will be shown. Call {@link Billboard#setShow}
106
+ * to hide or show a billboard, instead of removing it and re-adding it to the collection.
107
+ *
108
+ * @memberof Billboard
109
+ *
110
+ * @return {Boolean} <code>true</code> if this billboard will be shown; otherwise, <code>false</code>.
111
+ *
112
+ * @see Billboard#setShow
113
+ */
114
+ Billboard.prototype.getShow = function() {
115
+ return this._show;
116
+ };
117
+
118
+ /**
119
+ * Determines if this billboard will be shown. Call this to hide or show a billboard, instead
120
+ * of removing it and re-adding it to the collection.
121
+ *
122
+ * @memberof Billboard
123
+ *
124
+ * @param {Boolean} value Indicates if this billboard will be shown.
125
+ *
126
+ * @exception {DeveloperError} value is required.
127
+ *
128
+ * @see Billboard#getShow
129
+ */
130
+ Billboard.prototype.setShow = function(value) {
131
+ if (typeof value === 'undefined') {
132
+ throw new DeveloperError('value is required.');
133
+ }
134
+
135
+ if (value !== this._show) {
136
+ this._show = value;
137
+ makeDirty(this, SHOW_INDEX);
138
+ }
139
+ };
140
+
141
+ /**
142
+ * Returns the Cartesian position of this billboard.
143
+ *
144
+ * @memberof Billboard
145
+ *
146
+ * @return {Cartesian3} The Cartesian position of this billboard.
147
+ *
148
+ * @see Billboard#setPosition
149
+ */
150
+ Billboard.prototype.getPosition = function() {
151
+ return this._position;
152
+ };
153
+
154
+ /**
155
+ * Sets the Cartesian position of this billboard.
156
+ * <br /><br />
157
+ * As shown in the examples, <code>value</code> can be either a {@link Cartesian3}
158
+ * or an object literal with <code>x</code>, <code>y</code>, and <code>z</code> properties.
159
+ * A copy of <code>value</code> is made, so changing it after calling <code>setPosition</code>
160
+ * does not affect the billboard's position; an explicit call to <code>setPosition</code> is required.
161
+ *
162
+ * @memberof Billboard
163
+ *
164
+ * @param {Cartesian3} value The Cartesian position.
165
+ *
166
+ * @exception {DeveloperError} value is required.
167
+ *
168
+ * @see Billboard#getPosition
169
+ *
170
+ * @example
171
+ * // Example 1. Set a billboard's position using a Cartesian3.
172
+ * b.setPosition(new Cartesian3(1.0, 2.0, 3.0));
173
+ *
174
+ * // Example 2. Set a billboard's position using an object literal.
175
+ * b.setPosition({
176
+ * x : 1.0,
177
+ * y : 2.0,
178
+ * z : 3.0
179
+ * });
180
+ */
181
+ Billboard.prototype.setPosition = function(value) {
182
+ if (typeof value === 'undefined') {
183
+ throw new DeveloperError('value is required.');
184
+ }
185
+
186
+ var position = this._position;
187
+ if (!Cartesian3.equals(position, value)) {
188
+ Cartesian3.clone(value, position);
189
+ Cartesian3.clone(value, this._actualPosition);
190
+
191
+ makeDirty(this, POSITION_INDEX);
192
+ }
193
+ };
194
+
195
+ Billboard.prototype._getActualPosition = function() {
196
+ return this._actualPosition;
197
+ };
198
+
199
+ Billboard.prototype._setActualPosition = function(value) {
200
+ Cartesian3.clone(value, this._actualPosition);
201
+ makeDirty(this, POSITION_INDEX);
202
+ };
203
+
204
+ /**
205
+ * Returns the pixel offset from the origin of this billboard.
206
+ *
207
+ * @memberof Billboard
208
+ *
209
+ * @return {Cartesian2} The pixel offset of this billboard.
210
+ *
211
+ * @see Billboard#setPixelOffset
212
+ */
213
+ Billboard.prototype.getPixelOffset = function() {
214
+ return this._pixelOffset;
215
+ };
216
+
217
+ /**
218
+ * Sets the pixel offset in screen space from the origin of this billboard. This is commonly used
219
+ * to align multiple billboards and labels at the same position, e.g., an image and text. The
220
+ * screen space origin is the bottom, left corner of the canvas; <code>x</code> increases from
221
+ * left to right, and <code>y</code> increases from bottom to top.
222
+ * <br /><br />
223
+ * <code>value</code> can be either a {@link Cartesian2} or an object literal with
224
+ * <code>x</code> and <code>y</code> properties. A copy of <code>value</code> is made, so
225
+ * changing it after calling <code>setPixelOffset</code> does not affect the billboard's pixel
226
+ * offset; an explicit call to <code>setPixelOffset</code> is required.
227
+ * <br /><br />
228
+ * <div align='center'>
229
+ * <table border='0' cellpadding='5'><tr>
230
+ * <td align='center'><code>default</code><br/><img src='images/Billboard.setPixelOffset.default.png' width='250' height='188' /></td>
231
+ * <td align='center'><code>b.setPixelOffset({ x : 50, y : -25 });</code><br/><img src='images/Billboard.setPixelOffset.x50y-25.png' width='250' height='188' /></td>
232
+ * </tr></table>
233
+ * The billboard's origin is indicated by the yellow point.
234
+ * </div>
235
+ *
236
+ * @memberof Billboard
237
+ *
238
+ * @param {Cartesian2} value The 2D Cartesian pixel offset.
239
+ *
240
+ * @exception {DeveloperError} value is required.
241
+ *
242
+ * @see Billboard#getPixelOffset
243
+ * @see Label#setPixelOffset
244
+ */
245
+ Billboard.prototype.setPixelOffset = function(value) {
246
+ if (typeof value === 'undefined') {
247
+ throw new DeveloperError('value is required.');
248
+ }
249
+
250
+ var pixelOffset = this._pixelOffset;
251
+ if (!Cartesian2.equals(pixelOffset, value)) {
252
+ Cartesian2.clone(value, pixelOffset);
253
+ makeDirty(this, PIXEL_OFFSET_INDEX);
254
+ }
255
+ };
256
+
257
+ /**
258
+ * Returns the 3D Cartesian offset applied to this billboard in eye coordinates.
259
+ *
260
+ * @memberof Billboard
261
+ *
262
+ * @return {Cartesian3} The 3D Cartesian offset applied to this billboard in eye coordinates.
263
+ *
264
+ * @see Billboard#setEyeOffset
265
+ */
266
+ Billboard.prototype.getEyeOffset = function() {
267
+ return this._eyeOffset;
268
+ };
269
+
270
+ /**
271
+ * Sets the 3D Cartesian offset applied to this billboard in eye coordinates. Eye coordinates is a left-handed
272
+ * coordinate system, where <code>x</code> points towards the viewer's right, <code>y</code> points up, and
273
+ * <code>z</code> points into the screen. Eye coordinates use the same scale as world and model coordinates,
274
+ * which is typically meters.
275
+ * <br /><br />
276
+ * An eye offset is commonly used to arrange multiple billboards or objects at the same position, e.g., to
277
+ * arrange a billboard above its corresponding 3D model.
278
+ * <br /><br />
279
+ * <code>value</code> can be either a {@link Cartesian3} or an object literal with <code>x</code>,
280
+ * <code>y</code>, and <code>z</code> properties. A copy of <code>value</code> is made, so changing it after
281
+ * calling <code>setEyeOffset</code> does not affect the billboard's eye offset; an explicit call to
282
+ * <code>setEyeOffset</code> is required.
283
+ * <br /><br />
284
+ * Below, the billboard is positioned at the center of the Earth but an eye offset makes it always
285
+ * appear on top of the Earth regardless of the viewer's or Earth's orientation.
286
+ * <br /><br />
287
+ * <div align='center'>
288
+ * <table border='0' cellpadding='5'><tr>
289
+ * <td align='center'><img src='images/Billboard.setEyeOffset.one.png' width='250' height='188' /></td>
290
+ * <td align='center'><img src='images/Billboard.setEyeOffset.two.png' width='250' height='188' /></td>
291
+ * </tr></table>
292
+ * <code>b.setEyeOffset({ x : 0.0, y : 8000000.0, z : 0.0 });</code><br /><br />
293
+ * </div>
294
+ *
295
+ * @memberof Billboard
296
+ *
297
+ * @param {Cartesian3} value The 3D Cartesian offset in eye coordinates.
298
+ *
299
+ * @exception {DeveloperError} value is required.
300
+ *
301
+ * @see Billboard#getEyeOffset
302
+ */
303
+ Billboard.prototype.setEyeOffset = function(value) {
304
+ if (typeof value === 'undefined') {
305
+ throw new DeveloperError('value is required.');
306
+ }
307
+
308
+ var eyeOffset = this._eyeOffset;
309
+ if (!Cartesian3.equals(eyeOffset, value)) {
310
+ Cartesian3.clone(value, eyeOffset);
311
+ makeDirty(this, EYE_OFFSET_INDEX);
312
+ }
313
+ };
314
+
315
+ /**
316
+ * Returns the horizontal origin of this billboard.
317
+ *
318
+ * @memberof Billboard
319
+ *
320
+ * @return {HorizontalOrigin} The horizontal origin of this billboard.
321
+ *
322
+ * @see Billboard#setHorizontalOrigin
323
+ */
324
+ Billboard.prototype.getHorizontalOrigin = function() {
325
+ return this._horizontalOrigin;
326
+ };
327
+
328
+ /**
329
+ * Sets the horizontal origin of this billboard, which determines if the billboard is
330
+ * to the left, center, or right of its position.
331
+ * <br /><br />
332
+ * <div align='center'>
333
+ * <img src='images/Billboard.setHorizontalOrigin.png' width='400' height='300' /><br />
334
+ * </div>
335
+ *
336
+ * @memberof Billboard
337
+ *
338
+ * @param {HorizontalOrigin} value The horizontal origin.
339
+ *
340
+ * @exception {DeveloperError} value is required.
341
+ *
342
+ * @see Billboard#getHorizontalOrigin
343
+ * @see Billboard#setVerticalOrigin
344
+ *
345
+ * @example
346
+ * // Use a bottom, left origin
347
+ * b.setHorizontalOrigin(HorizontalOrigin.LEFT);
348
+ * b.setVerticalOrigin(VerticalOrigin.BOTTOM);
349
+ */
350
+ Billboard.prototype.setHorizontalOrigin = function(value) {
351
+ if (typeof value === 'undefined') {
352
+ throw new DeveloperError('value is required.');
353
+ }
354
+
355
+ if (this._horizontalOrigin !== value) {
356
+ this._horizontalOrigin = value;
357
+ makeDirty(this, HORIZONTAL_ORIGIN_INDEX);
358
+ }
359
+ };
360
+
361
+ /**
362
+ * Returns the vertical origin of this billboard.
363
+ *
364
+ * @memberof Billboard
365
+ *
366
+ * @return {VerticalOrigin} The vertical origin of this billboard.
367
+ *
368
+ * @see Billboard#setVerticalOrigin
369
+ */
370
+ Billboard.prototype.getVerticalOrigin = function() {
371
+ return this._verticalOrigin;
372
+ };
373
+
374
+ /**
375
+ * Sets the vertical origin of this billboard, which determines if the billboard is
376
+ * to the above, below, or at the center of its position.
377
+ * <br /><br />
378
+ * <div align='center'>
379
+ * <img src='images/Billboard.setVerticalOrigin.png' width='400' height='300' /><br />
380
+ * </div>
381
+ *
382
+ * @memberof Billboard
383
+ *
384
+ * @param {VerticalOrigin} value The vertical origin.
385
+ *
386
+ * @exception {DeveloperError} value is required.
387
+ *
388
+ * @see Billboard#getVerticalOrigin
389
+ * @see Billboard#setHorizontalOrigin
390
+ *
391
+ * @example
392
+ * // Use a bottom, left origin
393
+ * b.setHorizontalOrigin(HorizontalOrigin.LEFT);
394
+ * b.setVerticalOrigin(VerticalOrigin.BOTTOM);
395
+ */
396
+ Billboard.prototype.setVerticalOrigin = function(value) {
397
+ if (typeof value === 'undefined') {
398
+ throw new DeveloperError('value is required.');
399
+ }
400
+
401
+ if (this._verticalOrigin !== value) {
402
+ this._verticalOrigin = value;
403
+ makeDirty(this, VERTICAL_ORIGIN_INDEX);
404
+ }
405
+ };
406
+
407
+ /**
408
+ * Returns the uniform scale that is multiplied with the billboard's image size in pixels.
409
+ *
410
+ * @memberof Billboard
411
+ *
412
+ * @return {Number} The scale used to size the billboard.
413
+ *
414
+ * @see Billboard#setScale
415
+ */
416
+ Billboard.prototype.getScale = function() {
417
+ return this._scale;
418
+ };
419
+
420
+ /**
421
+ * Sets the uniform scale that is multiplied with the billboard's image size in pixels.
422
+ * A scale of <code>1.0</code> does not change the size of the billboard; a scale greater than
423
+ * <code>1.0</code> enlarges the billboard; a positive scale less than <code>1.0</code> shrinks
424
+ * the billboard.
425
+ * <br /><br />
426
+ * <div align='center'>
427
+ * <img src='images/Billboard.setScale.png' width='400' height='300' /><br/>
428
+ * From left to right in the above image, the scales are <code>0.5</code>, <code>1.0</code>,
429
+ * and <code>2.0</code>.
430
+ * </div>
431
+ *
432
+ * @memberof Billboard
433
+ *
434
+ * @param {Number} value The scale used to size the billboard.
435
+ *
436
+ * @exception {DeveloperError} value is required.
437
+ *
438
+ * @see Billboard#getScale
439
+ * @see Billboard#setImageIndex
440
+ */
441
+ Billboard.prototype.setScale = function(value) {
442
+ if (typeof value === 'undefined') {
443
+ throw new DeveloperError('value is required.');
444
+ }
445
+
446
+ if (this._scale !== value) {
447
+ this._scale = value;
448
+ makeDirty(this, SCALE_INDEX);
449
+ }
450
+ };
451
+
452
+ /**
453
+ * DOC_TBA
454
+ *
455
+ * @memberof Billboard
456
+ *
457
+ * @see Billboard#setImageIndex
458
+ * @see BillboardCollection#setTextureAtlas
459
+ */
460
+ Billboard.prototype.getImageIndex = function() {
461
+ return this._imageIndex;
462
+ };
463
+
464
+ /**
465
+ * DOC_TBA
466
+ *
467
+ * @memberof Billboard
468
+ *
469
+ * @see Billboard#getImageIndex
470
+ * @see BillboardCollection#setTextureAtlas
471
+ */
472
+ Billboard.prototype.setImageIndex = function(value) {
473
+ if (typeof value !== 'number') {
474
+ throw new DeveloperError('value is required and must be a number.');
475
+ }
476
+
477
+ if (this._imageIndex !== value) {
478
+ this._imageIndex = value;
479
+ makeDirty(this, IMAGE_INDEX_INDEX);
480
+ }
481
+ };
482
+
483
+ /**
484
+ * Returns the color that is multiplied with the billboard's texture. The red, green, blue, and alpha values
485
+ * are indicated by the returned object's <code>red</code>, <code>green</code>, <code>blue</code>, and <code>alpha</code>
486
+ * properties, which range from <code>0</code> (no intensity) to <code>1.0</code> (full intensity).
487
+ *
488
+ * @memberof Billboard
489
+ *
490
+ * @return {Number} The color that is multiplied with the billboard's texture.
491
+ *
492
+ * @see Billboard#setColor
493
+ */
494
+ Billboard.prototype.getColor = function() {
495
+ return this._color;
496
+ };
497
+
498
+ /**
499
+ * Sets the color that is multiplied with the billboard's texture. This has two common use cases. First,
500
+ * the same white texture may be used by many different billboards, each with a different color, to create
501
+ * colored billboards. Second, the color's alpha component can be used to make the billboard translucent as shown below.
502
+ * An alpha of <code>0.0</code> makes the billboard transparent, and <code>1.0</code> makes the billboard opaque.
503
+ * <br /><br />
504
+ * <div align='center'>
505
+ * <table border='0' cellpadding='5'><tr>
506
+ * <td align='center'><code>default</code><br/><img src='images/Billboard.setColor.Alpha255.png' width='250' height='188' /></td>
507
+ * <td align='center'><code>alpha : 0.5</code><br/><img src='images/Billboard.setColor.Alpha127.png' width='250' height='188' /></td>
508
+ * </tr></table>
509
+ * </div>
510
+ * <br />
511
+ * The red, green, blue, and alpha values are indicated by <code>value</code>'s <code>red</code>, <code>green</code>,
512
+ * <code>blue</code>, and <code>alpha</code> properties as shown in Example 1. These components range from <code>0.0</code>
513
+ * (no intensity) to <code>1.0</code> (full intensity).
514
+ *
515
+ * @memberof Billboard
516
+ *
517
+ * @param {Object} value The color's red, green, blue, and alpha components.
518
+ *
519
+ * @exception {DeveloperError} value is required.
520
+ *
521
+ * @see Billboard#getColor
522
+ *
523
+ * @example
524
+ * // Example 1. Assign yellow.
525
+ * b.setColor({
526
+ * red : 1.0,
527
+ * green : 1.0,
528
+ * blue : 0.0,
529
+ * alpha : 1.0
530
+ * });
531
+ *
532
+ * // Example 2. Make a billboard 50% translucent.
533
+ * b.setColor({
534
+ * red : 1.0,
535
+ * green : 1.0,
536
+ * blue : 1.0,
537
+ * alpha : 0.5
538
+ * });
539
+ */
540
+ Billboard.prototype.setColor = function(value) {
541
+ if (typeof value === 'undefined') {
542
+ throw new DeveloperError('value is required.');
543
+ }
544
+
545
+ var color = this._color;
546
+ if (!Color.equals(color, value)) {
547
+ Color.clone(value, color);
548
+ makeDirty(this, COLOR_INDEX);
549
+ }
550
+ };
551
+
552
+ var tempCartesian4 = new Cartesian4();
553
+ var tempCartographic = new Cartographic();
554
+ Billboard._computeActualPosition = function(position, frameState, morphTime, modelMatrix) {
555
+ var mode = frameState.mode;
556
+
557
+ if (mode === SceneMode.SCENE3D) {
558
+ return position;
559
+ }
560
+
561
+ modelMatrix.multiplyByPoint(position, tempCartesian4);
562
+
563
+ var projection = frameState.scene2D.projection;
564
+ var cartographic = projection.getEllipsoid().cartesianToCartographic(tempCartesian4, tempCartographic);
565
+ if (typeof cartographic === 'undefined') {
566
+ return undefined;
567
+ }
568
+
569
+ var projectedPosition = projection.project(cartographic);
570
+ if (mode === SceneMode.MORPHING) {
571
+ var x = CesiumMath.lerp(projectedPosition.z, tempCartesian4.x, morphTime);
572
+ var y = CesiumMath.lerp(projectedPosition.x, tempCartesian4.y, morphTime);
573
+ var z = CesiumMath.lerp(projectedPosition.y, tempCartesian4.z, morphTime);
574
+ return new Cartesian3(x, y, z);
575
+ }
576
+ if (mode === SceneMode.SCENE2D) {
577
+ return new Cartesian3(0.0, projectedPosition.x, projectedPosition.y);
578
+ }
579
+ if (mode === SceneMode.COLUMBUS_VIEW) {
580
+ return new Cartesian3(projectedPosition.z, projectedPosition.x, projectedPosition.y);
581
+ }
582
+ return undefined;
583
+ };
584
+
585
+ Billboard._computeScreenSpacePosition = function(modelMatrix, position, eyeOffset, pixelOffset, clampToPixel, uniformState) {
586
+ // This function is basically a stripped-down JavaScript version of BillboardCollectionVS.glsl
587
+
588
+ // Model to eye coordinates
589
+ var mv = uniformState.getView().multiply(modelMatrix);
590
+ var positionEC = mv.multiplyByPoint(position);
591
+
592
+ // Apply eye offset, e.g., czm_eyeOffset
593
+ var zEyeOffset = eyeOffset.multiplyComponents(positionEC.normalize());
594
+ positionEC.x += eyeOffset.x + zEyeOffset.x;
595
+ positionEC.y += eyeOffset.y + zEyeOffset.y;
596
+ positionEC.z += zEyeOffset.z;
597
+
598
+ // Eye to window coordinates, e.g., czm_eyeToWindowCoordinates
599
+ var q = uniformState.getProjection().multiplyByVector(positionEC); // clip coordinates
600
+ q.x /= q.w; // normalized device coordinates
601
+ q.y /= q.w;
602
+ q.z /= q.w;
603
+ var positionWC = uniformState.getViewportTransformation().multiplyByPoint(q); // window coordinates
604
+
605
+ // Apply pixel offset
606
+ var po = pixelOffset.multiplyByScalar(uniformState.getHighResolutionSnapScale());
607
+ positionWC.x += po.x;
608
+ positionWC.y += po.y;
609
+
610
+ if (clampToPixel) {
611
+ return new Cartesian2(Math.floor(positionWC.x), Math.floor(positionWC.y));
612
+ }
613
+
614
+ return new Cartesian2(positionWC.x, positionWC.y);
615
+ };
616
+
617
+ /**
618
+ * Computes the screen-space position of the billboard's origin, taking into account eye and pixel offsets.
619
+ * The screen space origin is the bottom, left corner of the canvas; <code>x</code> increases from
620
+ * left to right, and <code>y</code> increases from bottom to top.
621
+ *
622
+ * @memberof Billboard
623
+ *
624
+ * @param {UniformState} uniformState The same state object passed to {@link BillboardCollection#update}.
625
+ *
626
+ * @return {Cartesian2} The screen-space position of the billboard.
627
+ *
628
+ * @exception {DeveloperError} Billboard must be in a collection.
629
+ * @exception {DeveloperError} uniformState is required.
630
+ *
631
+ * @see Billboard#setEyeOffset
632
+ * @see Billboard#setPixelOffset
633
+ *
634
+ * @example
635
+ * console.log(b.computeScreenSpacePosition(scene.getUniformState()).toString());
636
+ */
637
+ Billboard.prototype.computeScreenSpacePosition = function(uniformState) {
638
+ var billboardCollection = this._billboardCollection;
639
+ if (typeof billboardCollection === 'undefined') {
640
+ throw new DeveloperError('Billboard must be in a collection. Was it removed?');
641
+ }
642
+
643
+ if (!uniformState) {
644
+ throw new DeveloperError('uniformState is required.');
645
+ }
646
+
647
+ return Billboard._computeScreenSpacePosition(billboardCollection.modelMatrix, this._actualPosition, this._eyeOffset, this._pixelOffset, this.clampToPixel, uniformState);
648
+ };
649
+
650
+ /**
651
+ * Determines if this billboard equals another billboard. Billboards are equal if all their properties
652
+ * are equal. Billboards in different collections can be equal.
653
+ *
654
+ * @memberof Billboard
655
+ *
656
+ * @param {Billboard} other The billboard to compare for equality.
657
+ *
658
+ * @return {Boolean} <code>true</code> if the billboards are equal; otherwise, <code>false</code>.
659
+ */
660
+ Billboard.prototype.equals = function(other) {
661
+ return this === other ||
662
+ typeof other !== 'undefined' &&
663
+ this._show === other._show &&
664
+ this._imageIndex === other._imageIndex &&
665
+ this._scale === other._scale &&
666
+ this._verticalOrigin === other._verticalOrigin &&
667
+ this._horizontalOrigin === other._horizontalOrigin &&
668
+ Cartesian3.equals(this._position, other._position) &&
669
+ Color.equals(this._color, other._color) &&
670
+ Cartesian2.equals(this._pixelOffset, other._pixelOffset) &&
671
+ Cartesian3.equals(this._eyeOffset, other._eyeOffset);
672
+ };
673
+
674
+ Billboard.prototype._destroy = function() {
675
+ this._pickId = this._pickId && this._pickId.destroy();
676
+ this._billboardCollection = undefined;
677
+ };
678
+
679
+ return Billboard;
680
+ });