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,347 @@
1
+ /*global define*/
2
+ define([
3
+ '../Core/DeveloperError',
4
+ '../Core/destroyObject',
5
+ '../Core/Color',
6
+ '../Core/Cartesian2',
7
+ '../Core/Cartesian3',
8
+ '../Scene/BillboardCollection',
9
+ '../Scene/HorizontalOrigin',
10
+ '../Scene/VerticalOrigin',
11
+ '../Renderer/TextureAtlasBuilder'
12
+ ], function(
13
+ DeveloperError,
14
+ destroyObject,
15
+ Color,
16
+ Cartesian2,
17
+ Cartesian3,
18
+ BillboardCollection,
19
+ HorizontalOrigin,
20
+ VerticalOrigin,
21
+ TextureAtlasBuilder) {
22
+ "use strict";
23
+
24
+ //Callback to create a callback so that we close over all of the proper values.
25
+ function textureReady(dynamicObject, billboardCollection, textureValue) {
26
+ return function(imageIndex) {
27
+ //By the time the texture was loaded, the billboard might already be
28
+ //gone or have been assigned a different texture. Look it up again
29
+ //and check.
30
+ var currentIndex = dynamicObject._billboardVisualizerIndex;
31
+ if (typeof currentIndex !== 'undefined') {
32
+ var cbBillboard = billboardCollection.get(currentIndex);
33
+ if (cbBillboard._visualizerUrl === textureValue) {
34
+ cbBillboard._visualizerTextureAvailable = true;
35
+ cbBillboard.setImageIndex(imageIndex);
36
+ }
37
+ }
38
+ };
39
+ }
40
+
41
+ /**
42
+ * A DynamicObject visualizer which maps the DynamicBillboard instance
43
+ * in DynamicObject.billboard to a Billboard primitive.
44
+ * @alias DynamicBillboardVisualizer
45
+ * @constructor
46
+ *
47
+ * @param {Scene} scene The scene the primitives will be rendered in.
48
+ * @param {DynamicObjectCollection} [dynamicObjectCollection] The dynamicObjectCollection to visualize.
49
+ *
50
+ * @exception {DeveloperError} scene is required.
51
+ *
52
+ * @see DynamicBillboard
53
+ * @see Scene
54
+ * @see DynamicObject
55
+ * @see DynamicObjectCollection
56
+ * @see CompositeDynamicObjectCollection
57
+ * @see VisualizerCollection
58
+ * @see DynamicConeVisualizer
59
+ * @see DynamicConeVisualizerUsingCustomSensor
60
+ * @see DynamicLabelVisualizer
61
+ * @see DynamicPointVisualizer
62
+ * @see DynamicPolygonVisualizer
63
+ * @see DynamicPolylineVisualizer
64
+ * @see DynamicPyramidVisualizer
65
+ *
66
+ */
67
+ var DynamicBillboardVisualizer = function(scene, dynamicObjectCollection) {
68
+ if (typeof scene === 'undefined') {
69
+ throw new DeveloperError('scene is required.');
70
+ }
71
+
72
+ this._scene = scene;
73
+ this._unusedIndexes = [];
74
+ this._dynamicObjectCollection = undefined;
75
+
76
+ var billboardCollection = this._billboardCollection = new BillboardCollection();
77
+ var atlas = this._textureAtlas = scene.getContext().createTextureAtlas();
78
+ this._textureAtlasBuilder = new TextureAtlasBuilder(atlas);
79
+ billboardCollection.setTextureAtlas(atlas);
80
+ scene.getPrimitives().add(billboardCollection);
81
+ this.setDynamicObjectCollection(dynamicObjectCollection);
82
+ };
83
+
84
+ /**
85
+ * Returns the scene being used by this visualizer.
86
+ *
87
+ * @returns {Scene} The scene being used by this visualizer.
88
+ */
89
+ DynamicBillboardVisualizer.prototype.getScene = function() {
90
+ return this._scene;
91
+ };
92
+
93
+ /**
94
+ * Gets the DynamicObjectCollection being visualized.
95
+ *
96
+ * @returns {DynamicObjectCollection} The DynamicObjectCollection being visualized.
97
+ */
98
+ DynamicBillboardVisualizer.prototype.getDynamicObjectCollection = function() {
99
+ return this._dynamicObjectCollection;
100
+ };
101
+
102
+ /**
103
+ * Sets the DynamicObjectCollection to visualize.
104
+ *
105
+ * @param dynamicObjectCollection The DynamicObjectCollection to visualizer.
106
+ */
107
+ DynamicBillboardVisualizer.prototype.setDynamicObjectCollection = function(dynamicObjectCollection) {
108
+ var oldCollection = this._dynamicObjectCollection;
109
+ if (oldCollection !== dynamicObjectCollection) {
110
+ if (typeof oldCollection !== 'undefined') {
111
+ oldCollection.objectsRemoved.removeEventListener(DynamicBillboardVisualizer.prototype._onObjectsRemoved);
112
+ this.removeAllPrimitives();
113
+ }
114
+ this._dynamicObjectCollection = dynamicObjectCollection;
115
+ if (typeof dynamicObjectCollection !== 'undefined') {
116
+ dynamicObjectCollection.objectsRemoved.addEventListener(DynamicBillboardVisualizer.prototype._onObjectsRemoved, this);
117
+ }
118
+ }
119
+ };
120
+
121
+ /**
122
+ * Updates all of the primitives created by this visualizer to match their
123
+ * DynamicObject counterpart at the given time.
124
+ *
125
+ * @param {JulianDate} time The time to update to.
126
+ *
127
+ * @exception {DeveloperError} time is required.
128
+ */
129
+ DynamicBillboardVisualizer.prototype.update = function(time) {
130
+ if (typeof time === 'undefined') {
131
+ throw new DeveloperError('time is requied.');
132
+ }
133
+ if (typeof this._dynamicObjectCollection !== 'undefined') {
134
+ var dynamicObjects = this._dynamicObjectCollection.getObjects();
135
+ for ( var i = 0, len = dynamicObjects.length; i < len; i++) {
136
+ this._updateObject(time, dynamicObjects[i]);
137
+ }
138
+ }
139
+ };
140
+
141
+ /**
142
+ * Removes all primitives from the scene.
143
+ */
144
+ DynamicBillboardVisualizer.prototype.removeAllPrimitives = function() {
145
+ if (typeof this._dynamicObjectCollection !== 'undefined') {
146
+ this._unusedIndexes = [];
147
+ this._billboardCollection.removeAll();
148
+ var dynamicObjects = this._dynamicObjectCollection.getObjects();
149
+ for ( var i = dynamicObjects.length - 1; i > -1; i--) {
150
+ dynamicObjects[i]._billboardVisualizerIndex = undefined;
151
+ }
152
+ }
153
+ };
154
+
155
+ /**
156
+ * Returns true if this object was destroyed; otherwise, false.
157
+ * <br /><br />
158
+ * If this object was destroyed, it should not be used; calling any function other than
159
+ * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
160
+ *
161
+ * @memberof DynamicBillboardVisualizer
162
+ *
163
+ * @return {Boolean} True if this object was destroyed; otherwise, false.
164
+ *
165
+ * @see DynamicBillboardVisualizer#destroy
166
+ */
167
+ DynamicBillboardVisualizer.prototype.isDestroyed = function() {
168
+ return false;
169
+ };
170
+
171
+ /**
172
+ * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic
173
+ * release of WebGL resources, instead of relying on the garbage collector to destroy this object.
174
+ * <br /><br />
175
+ * Once an object is destroyed, it should not be used; calling any function other than
176
+ * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,
177
+ * assign the return value (<code>undefined</code>) to the object as done in the example.
178
+ *
179
+ * @memberof DynamicBillboardVisualizer
180
+ *
181
+ * @return {undefined}
182
+ *
183
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
184
+ *
185
+ * @see DynamicBillboardVisualizer#isDestroyed
186
+ *
187
+ * @example
188
+ * visualizer = visualizer && visualizer.destroy();
189
+ */
190
+ DynamicBillboardVisualizer.prototype.destroy = function() {
191
+ this.removeAllPrimitives();
192
+ this._scene.getPrimitives().remove(this._billboardCollection);
193
+ return destroyObject(this);
194
+ };
195
+
196
+ var position;
197
+ var color;
198
+ var eyeOffset;
199
+ var pixelOffset;
200
+ DynamicBillboardVisualizer.prototype._updateObject = function(time, dynamicObject) {
201
+ var dynamicBillboard = dynamicObject.billboard;
202
+ if (typeof dynamicBillboard === 'undefined') {
203
+ return;
204
+ }
205
+
206
+ var positionProperty = dynamicObject.position;
207
+ if (typeof positionProperty === 'undefined') {
208
+ return;
209
+ }
210
+
211
+ var textureProperty = dynamicBillboard.image;
212
+ if (typeof textureProperty === 'undefined') {
213
+ return;
214
+ }
215
+
216
+ var billboard;
217
+ var showProperty = dynamicBillboard.show;
218
+ var billboardVisualizerIndex = dynamicObject._billboardVisualizerIndex;
219
+ var show = dynamicObject.isAvailable(time) && (typeof showProperty === 'undefined' || showProperty.getValue(time));
220
+
221
+ if (!show) {
222
+ //don't bother creating or updating anything else
223
+ if (typeof billboardVisualizerIndex !== 'undefined') {
224
+ billboard = this._billboardCollection.get(billboardVisualizerIndex);
225
+ billboard.setShow(false);
226
+ billboard.setImageIndex(-1);
227
+ billboard._visualizerUrl = undefined;
228
+ billboard._visualizerTextureAvailable = false;
229
+ dynamicObject._billboardVisualizerIndex = undefined;
230
+ this._unusedIndexes.push(billboardVisualizerIndex);
231
+ }
232
+ return;
233
+ }
234
+
235
+ if (typeof billboardVisualizerIndex === 'undefined') {
236
+ var unusedIndexes = this._unusedIndexes;
237
+ var length = unusedIndexes.length;
238
+ if (length > 0) {
239
+ billboardVisualizerIndex = unusedIndexes.pop();
240
+ billboard = this._billboardCollection.get(billboardVisualizerIndex);
241
+ } else {
242
+ billboardVisualizerIndex = this._billboardCollection.getLength();
243
+ billboard = this._billboardCollection.add();
244
+ }
245
+ dynamicObject._billboardVisualizerIndex = billboardVisualizerIndex;
246
+ billboard.dynamicObject = dynamicObject;
247
+ billboard._visualizerUrl = undefined;
248
+ billboard._visualizerTextureAvailable = false;
249
+
250
+ // CZML_TODO Determine official defaults
251
+ billboard.setColor(Color.WHITE);
252
+ billboard.setEyeOffset(Cartesian3.ZERO);
253
+ billboard.setPixelOffset(Cartesian2.ZERO);
254
+ billboard.setScale(1.0);
255
+ billboard.setHorizontalOrigin(HorizontalOrigin.CENTER);
256
+ billboard.setVerticalOrigin(VerticalOrigin.CENTER);
257
+ } else {
258
+ billboard = this._billboardCollection.get(billboardVisualizerIndex);
259
+ }
260
+
261
+ var textureValue = textureProperty.getValue(time);
262
+ if (textureValue !== billboard._visualizerUrl) {
263
+ billboard._visualizerUrl = textureValue;
264
+ billboard._visualizerTextureAvailable = false;
265
+ this._textureAtlasBuilder.addTextureFromUrl(textureValue, textureReady(dynamicObject, this._billboardCollection, textureValue));
266
+ }
267
+
268
+ billboard.setShow(billboard._visualizerTextureAvailable);
269
+ if (!billboard._visualizerTextureAvailable) {
270
+ return;
271
+ }
272
+
273
+ position = positionProperty.getValueCartesian(time, position);
274
+ if (typeof position !== 'undefined') {
275
+ billboard.setPosition(position);
276
+ }
277
+
278
+ var property = dynamicBillboard.color;
279
+
280
+ if (typeof property !== 'undefined') {
281
+ color = property.getValue(time, color);
282
+ if (typeof color !== 'undefined') {
283
+ billboard.setColor(color);
284
+ }
285
+ }
286
+
287
+ property = dynamicBillboard.eyeOffset;
288
+ if (typeof property !== 'undefined') {
289
+ eyeOffset = property.getValue(time, eyeOffset);
290
+ if (typeof eyeOffset !== 'undefined') {
291
+ billboard.setEyeOffset(eyeOffset);
292
+ }
293
+ }
294
+
295
+ property = dynamicBillboard.pixelOffset;
296
+ if (typeof property !== 'undefined') {
297
+ pixelOffset = property.getValue(time, pixelOffset);
298
+ if (typeof pixelOffset !== 'undefined') {
299
+ billboard.setPixelOffset(pixelOffset);
300
+ }
301
+ }
302
+
303
+ property = dynamicBillboard.scale;
304
+ if (typeof property !== 'undefined') {
305
+ var scale = property.getValue(time);
306
+ if (typeof scale !== 'undefined') {
307
+ billboard.setScale(scale);
308
+ }
309
+ }
310
+
311
+ property = dynamicBillboard.horizontalOrigin;
312
+ if (typeof property !== 'undefined') {
313
+ var horizontalOrigin = property.getValue(time);
314
+ if (typeof horizontalOrigin !== 'undefined') {
315
+ billboard.setHorizontalOrigin(horizontalOrigin);
316
+ }
317
+ }
318
+
319
+ property = dynamicBillboard.verticalOrigin;
320
+ if (typeof property !== 'undefined') {
321
+ var verticalOrigin = property.getValue(time);
322
+ if (typeof verticalOrigin !== 'undefined') {
323
+ billboard.setVerticalOrigin(verticalOrigin);
324
+ }
325
+ }
326
+ };
327
+
328
+ DynamicBillboardVisualizer.prototype._onObjectsRemoved = function(dynamicObjectCollection, dynamicObjects) {
329
+ var thisBillboardCollection = this._billboardCollection;
330
+ var thisUnusedIndexes = this._unusedIndexes;
331
+ for ( var i = dynamicObjects.length - 1; i > -1; i--) {
332
+ var dynamicObject = dynamicObjects[i];
333
+ var billboardVisualizerIndex = dynamicObject._billboardVisualizerIndex;
334
+ if (typeof billboardVisualizerIndex !== 'undefined') {
335
+ var billboard = thisBillboardCollection.get(billboardVisualizerIndex);
336
+ billboard.setShow(false);
337
+ billboard.setImageIndex(-1);
338
+ billboard._visualizerUrl = undefined;
339
+ billboard._visualizerTextureAvailable = false;
340
+ dynamicObject._billboardVisualizerIndex = undefined;
341
+ thisUnusedIndexes.push(billboardVisualizerIndex);
342
+ }
343
+ }
344
+ };
345
+
346
+ return DynamicBillboardVisualizer;
347
+ });
@@ -0,0 +1,78 @@
1
+ /*global define*/
2
+ define([
3
+ './DynamicProperty',
4
+ './CzmlColor',
5
+ '../Scene/Material'
6
+ ], function(
7
+ DynamicProperty,
8
+ CzmlColor,
9
+ Material) {
10
+ "use strict";
11
+
12
+ /**
13
+ * A utility class for processing CZML color materials.
14
+ * @alias DynamicColorMaterial
15
+ * @constructor
16
+ */
17
+ var DynamicColorMaterial = function() {
18
+ /**
19
+ * A DynamicProperty of type CzmlColor which determines the material's color.
20
+ * @type DynamicProperty
21
+ */
22
+ this.color = undefined;
23
+ };
24
+
25
+ /**
26
+ * Returns true if the provided CZML interval contains color material data.
27
+ * @param czmlInterval The CZML interval to check.
28
+ * @returns {Boolean} true if the interval contains CZML color material data, false otherwise.
29
+ */
30
+ DynamicColorMaterial.isMaterial = function(czmlInterval) {
31
+ return typeof czmlInterval !== 'undefined' && typeof czmlInterval.solidColor !== 'undefined';
32
+ };
33
+
34
+ /**
35
+ * Returns true if the provided CZML interval contains color material data.
36
+ * @param czmlInterval The CZML interval to check.
37
+ * @returns {Boolean} true if the interval contains CZML color material data, false otherwise.
38
+ */
39
+ DynamicColorMaterial.prototype.isMaterial = DynamicColorMaterial.isMaterial;
40
+
41
+ /**
42
+ * Provided a CZML interval containing color material data, processes the
43
+ * interval into a new or existing instance of this class.
44
+ *
45
+ * @param {Object} czmlInterval The interval to process.
46
+ * @param {DynamicColorMaterial} [existingMaterial] The DynamicColorMaterial to modify.
47
+ */
48
+ DynamicColorMaterial.prototype.processCzmlIntervals = function(czmlInterval) {
49
+ var materialData = czmlInterval.solidColor;
50
+ if (typeof materialData !== 'undefined') {
51
+ if (typeof materialData.color !== 'undefined') {
52
+ var color = this.color;
53
+ if (typeof color === 'undefined') {
54
+ this.color = color = new DynamicProperty(CzmlColor);
55
+ }
56
+ color.processCzmlIntervals(materialData.color);
57
+ }
58
+ }
59
+ };
60
+
61
+ /**
62
+ * Gets a Color Material that represents this dynamic material at the provided time.
63
+ *
64
+ * @param {JulianDate} time The desired time.
65
+ * @param {Context} context The context in which this material exists.
66
+ * @param {Material} [existingMaterial] An existing material to be modified. If the material is undefined or not a Color Material, a new instance is created.
67
+ * @returns The modified existingMaterial parameter or a new Color Material instance if existingMaterial was undefined or not a Color Material.
68
+ */
69
+ DynamicColorMaterial.prototype.getValue = function(time, context, existingMaterial) {
70
+ if (typeof existingMaterial === 'undefined' || (existingMaterial.type !== Material.ColorType)) {
71
+ existingMaterial = Material.fromType(context, Material.ColorType);
72
+ }
73
+ existingMaterial.uniforms.color = this.color.getValue(time, existingMaterial.uniforms.color);
74
+ return existingMaterial;
75
+ };
76
+
77
+ return DynamicColorMaterial;
78
+ });
@@ -0,0 +1,291 @@
1
+ /*global define*/
2
+ define([
3
+ '../Core/TimeInterval',
4
+ '../Core/defaultValue',
5
+ './CzmlBoolean',
6
+ './CzmlNumber',
7
+ './CzmlColor',
8
+ './DynamicProperty',
9
+ './DynamicMaterialProperty'
10
+ ], function(
11
+ TimeInterval,
12
+ defaultValue,
13
+ CzmlBoolean,
14
+ CzmlNumber,
15
+ CzmlColor,
16
+ DynamicProperty,
17
+ DynamicMaterialProperty) {
18
+ "use strict";
19
+
20
+ /**
21
+ * Represents a time-dynamic cone, typically used in conjunction with DynamicConeVisualizer and
22
+ * DynamicObjectCollection to visualize CZML.
23
+ *
24
+ * @alias DynamicCone
25
+ * @constructor
26
+ *
27
+ * @see DynamicObject
28
+ * @see DynamicProperty
29
+ * @see DynamicObjectCollection
30
+ * @see DynamicConeVisualizer
31
+ * @see VisualizerCollection
32
+ * @see ComplexConicSensor
33
+ * @see CzmlDefaults
34
+ */
35
+ var DynamicCone = function() {
36
+ /**
37
+ * A DynamicProperty of type CzmlNumber which determines the cone's minimum clock-angle.
38
+ * @type DynamicProperty
39
+ */
40
+ this.minimumClockAngle = undefined;
41
+ /**
42
+ * A DynamicProperty of type CzmlNumber which determines the cone's maximum clock-angle.
43
+ * @type DynamicProperty
44
+ */
45
+ this.maximumClockAngle = undefined;
46
+ /**
47
+ * A DynamicProperty of type CzmlNumber which determines the cone's inner half-angle.
48
+ * @type DynamicProperty
49
+ */
50
+ this.innerHalfAngle = undefined;
51
+ /**
52
+ * A DynamicProperty of type CzmlNumber which determines the cone's outer half-angle.
53
+ * @type DynamicProperty
54
+ */
55
+ this.outerHalfAngle = undefined;
56
+ /**
57
+ * A DynamicMaterialProperty which determines the cone's cap material.
58
+ * @type DynamicMaterialProperty
59
+ */
60
+ this.capMaterial = undefined;
61
+ /**
62
+ * A DynamicMaterialProperty which determines the cone's inner material.
63
+ * @type DynamicMaterialProperty
64
+ */
65
+ this.innerMaterial = undefined;
66
+ /**
67
+ * A DynamicMaterialProperty which determines the cone's outer material.
68
+ * @type DynamicMaterialProperty
69
+ */
70
+ this.outerMaterial = undefined;
71
+ /**
72
+ * A DynamicMaterialProperty which determines the cone's silhouette material.
73
+ * @type DynamicMaterialProperty
74
+ */
75
+ this.silhouetteMaterial = undefined;
76
+ /**
77
+ * A DynamicProperty of type CzmlColor which determines the color of the line formed by the intersection of the cone and other central bodies.
78
+ * @type DynamicProperty
79
+ */
80
+ this.intersectionColor = undefined;
81
+ /**
82
+ * A DynamicProperty of type CzmlBoolean which determines the cone's intersection visibility
83
+ * @type DynamicProperty
84
+ */
85
+ this.showIntersection = undefined;
86
+ /**
87
+ * A DynamicProperty of type CzmlNumber which determines the cone's radius.
88
+ * @type DynamicProperty
89
+ */
90
+ this.radius = undefined;
91
+ /**
92
+ * A DynamicProperty of type CzmlBoolean which determines the cone's visibility
93
+ * @type DynamicProperty
94
+ */
95
+ this.show = undefined;
96
+ };
97
+
98
+ /**
99
+ * Processes a single CZML packet and merges its data into the provided DynamicObject's cone.
100
+ * If the DynamicObject does not have a cone, one is created. This method is not
101
+ * normally called directly, but is part of the array of CZML processing functions that is
102
+ * passed into the DynamicObjectCollection constructor.
103
+ *
104
+ * @param {DynamicObject} dynamicObject The DynamicObject which will contain the cone data.
105
+ * @param {Object} packet The CZML packet to process.
106
+ * @returns {Boolean} true if any new properties were created while processing the packet, false otherwise.
107
+ *
108
+ * @see DynamicObject
109
+ * @see DynamicProperty
110
+ * @see DynamicObjectCollection
111
+ * @see CzmlDefaults#updaters
112
+ */
113
+ DynamicCone.processCzmlPacket = function(dynamicObject, packet) {
114
+ var coneData = packet.cone;
115
+ if (typeof coneData === 'undefined') {
116
+ return false;
117
+ }
118
+
119
+ var coneUpdated = false;
120
+ var cone = dynamicObject.cone;
121
+ coneUpdated = typeof cone === 'undefined';
122
+ if (coneUpdated) {
123
+ dynamicObject.cone = cone = new DynamicCone();
124
+ }
125
+
126
+ var interval = coneData.interval;
127
+ if (typeof interval !== 'undefined') {
128
+ interval = TimeInterval.fromIso8601(interval);
129
+ }
130
+
131
+ if (typeof coneData.show !== 'undefined') {
132
+ var show = cone.show;
133
+ if (typeof show === 'undefined') {
134
+ cone.show = show = new DynamicProperty(CzmlBoolean);
135
+ coneUpdated = true;
136
+ }
137
+ show.processCzmlIntervals(coneData.show, interval);
138
+ }
139
+
140
+ if (typeof coneData.innerHalfAngle !== 'undefined') {
141
+ var innerHalfAngle = cone.innerHalfAngle;
142
+ if (typeof innerHalfAngle === 'undefined') {
143
+ cone.innerHalfAngle = innerHalfAngle = new DynamicProperty(CzmlNumber);
144
+ coneUpdated = true;
145
+ }
146
+ innerHalfAngle.processCzmlIntervals(coneData.innerHalfAngle, interval);
147
+ }
148
+
149
+ if (typeof coneData.outerHalfAngle !== 'undefined') {
150
+ var outerHalfAngle = cone.outerHalfAngle;
151
+ if (typeof outerHalfAngle === 'undefined') {
152
+ cone.outerHalfAngle = outerHalfAngle = new DynamicProperty(CzmlNumber);
153
+ coneUpdated = true;
154
+ }
155
+ outerHalfAngle.processCzmlIntervals(coneData.outerHalfAngle, interval);
156
+ }
157
+
158
+ if (typeof coneData.minimumClockAngle !== 'undefined') {
159
+ var minimumClockAngle = cone.minimumClockAngle;
160
+ if (typeof minimumClockAngle === 'undefined') {
161
+ cone.minimumClockAngle = minimumClockAngle = new DynamicProperty(CzmlNumber);
162
+ coneUpdated = true;
163
+ }
164
+ minimumClockAngle.processCzmlIntervals(coneData.minimumClockAngle, interval);
165
+ }
166
+
167
+ if (typeof coneData.maximumClockAngle !== 'undefined') {
168
+ var maximumClockAngle = cone.maximumClockAngle;
169
+ if (typeof maximumClockAngle === 'undefined') {
170
+ cone.maximumClockAngle = maximumClockAngle = new DynamicProperty(CzmlNumber);
171
+ coneUpdated = true;
172
+ }
173
+ maximumClockAngle.processCzmlIntervals(coneData.maximumClockAngle, interval);
174
+ }
175
+
176
+ if (typeof coneData.radius !== 'undefined') {
177
+ var radius = cone.radius;
178
+ if (typeof radius === 'undefined') {
179
+ cone.radius = radius = new DynamicProperty(CzmlNumber);
180
+ coneUpdated = true;
181
+ }
182
+ radius.processCzmlIntervals(coneData.radius, interval);
183
+ }
184
+
185
+ if (typeof coneData.showIntersection !== 'undefined') {
186
+ var showIntersection = cone.showIntersection;
187
+ if (typeof showIntersection === 'undefined') {
188
+ cone.showIntersection = showIntersection = new DynamicProperty(CzmlBoolean);
189
+ coneUpdated = true;
190
+ }
191
+ showIntersection.processCzmlIntervals(coneData.showIntersection, interval);
192
+ }
193
+
194
+ if (typeof coneData.intersectionColor !== 'undefined') {
195
+ var intersectionColor = cone.intersectionColor;
196
+ if (typeof intersectionColor === 'undefined') {
197
+ cone.intersectionColor = intersectionColor = new DynamicProperty(CzmlColor);
198
+ coneUpdated = true;
199
+ }
200
+ intersectionColor.processCzmlIntervals(coneData.intersectionColor, interval);
201
+ }
202
+
203
+ if (typeof coneData.capMaterial !== 'undefined') {
204
+ var capMaterial = cone.capMaterial;
205
+ if (typeof capMaterial === 'undefined') {
206
+ cone.capMaterial = capMaterial = new DynamicMaterialProperty();
207
+ coneUpdated = true;
208
+ }
209
+ capMaterial.processCzmlIntervals(coneData.capMaterial, interval);
210
+ }
211
+
212
+ if (typeof coneData.innerMaterial !== 'undefined') {
213
+ var innerMaterial = cone.innerMaterial;
214
+ if (typeof innerMaterial === 'undefined') {
215
+ cone.innerMaterial = innerMaterial = new DynamicMaterialProperty();
216
+ coneUpdated = true;
217
+ }
218
+ innerMaterial.processCzmlIntervals(coneData.innerMaterial, interval);
219
+ }
220
+
221
+ if (typeof coneData.outerMaterial !== 'undefined') {
222
+ var outerMaterial = cone.outerMaterial;
223
+ if (typeof outerMaterial === 'undefined') {
224
+ cone.outerMaterial = outerMaterial = new DynamicMaterialProperty();
225
+ coneUpdated = true;
226
+ }
227
+ outerMaterial.processCzmlIntervals(coneData.outerMaterial, interval);
228
+ }
229
+
230
+ if (typeof coneData.silhouetteMaterial !== 'undefined') {
231
+ var silhouetteMaterial = cone.silhouetteMaterial;
232
+ if (typeof silhouetteMaterial === 'undefined') {
233
+ cone.silhouetteMaterial = silhouetteMaterial = new DynamicMaterialProperty();
234
+ coneUpdated = true;
235
+ }
236
+ silhouetteMaterial.processCzmlIntervals(coneData.silhouetteMaterial, interval);
237
+ }
238
+
239
+ return coneUpdated;
240
+ };
241
+
242
+ /**
243
+ * Given two DynamicObjects, takes the cone properties from the second
244
+ * and assigns them to the first, assuming such a property did not already exist.
245
+ * This method is not normally called directly, but is part of the array of CZML processing
246
+ * functions that is passed into the CompositeDynamicObjectCollection constructor.
247
+ *
248
+ * @param {DynamicObject} targetObject The DynamicObject which will have properties merged onto it.
249
+ * @param {DynamicObject} objectToMerge The DynamicObject containing properties to be merged.
250
+ *
251
+ * @see CzmlDefaults
252
+ */
253
+ DynamicCone.mergeProperties = function(targetObject, objectToMerge) {
254
+ var coneToMerge = objectToMerge.cone;
255
+ if (typeof coneToMerge !== 'undefined') {
256
+
257
+ var targetCone = targetObject.cone;
258
+ if (typeof targetCone === 'undefined') {
259
+ targetObject.cone = targetCone = new DynamicCone();
260
+ }
261
+
262
+ targetCone.show = defaultValue(targetCone.show, coneToMerge.show);
263
+ targetCone.innerHalfAngle = defaultValue(targetCone.innerHalfAngle, coneToMerge.innerHalfAngle);
264
+ targetCone.outerHalfAngle = defaultValue(targetCone.outerHalfAngle, coneToMerge.outerHalfAngle);
265
+ targetCone.minimumClockAngle = defaultValue(targetCone.minimumClockAngle, coneToMerge.minimumClockAngle);
266
+ targetCone.maximumClockAngle = defaultValue(targetCone.maximumClockAngle, coneToMerge.maximumClockAngle);
267
+ targetCone.radius = defaultValue(targetCone.radius, coneToMerge.radius);
268
+ targetCone.showIntersection = defaultValue(targetCone.showIntersection, coneToMerge.showIntersection);
269
+ targetCone.intersectionColor = defaultValue(targetCone.intersectionColor, coneToMerge.intersectionColor);
270
+ targetCone.capMaterial = defaultValue(targetCone.capMaterial, coneToMerge.capMaterial);
271
+ targetCone.innerMaterial = defaultValue(targetCone.innerMaterial, coneToMerge.innerMaterial);
272
+ targetCone.outerMaterial = defaultValue(targetCone.outerMaterial, coneToMerge.outerMaterial);
273
+ targetCone.silhouetteMaterial = defaultValue(targetCone.silhouetteMaterial, coneToMerge.silhouetteMaterial);
274
+ }
275
+ };
276
+
277
+ /**
278
+ * Given a DynamicObject, undefines the cone associated with it.
279
+ * This method is not normally called directly, but is part of the array of CZML processing
280
+ * functions that is passed into the CompositeDynamicObjectCollection constructor.
281
+ *
282
+ * @param {DynamicObject} dynamicObject The DynamicObject to remove the cone from.
283
+ *
284
+ * @see CzmlDefaults
285
+ */
286
+ DynamicCone.undefineProperties = function(dynamicObject) {
287
+ dynamicObject.cone = undefined;
288
+ };
289
+
290
+ return DynamicCone;
291
+ });