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,886 @@
1
+ /*global define*/
2
+ define([
3
+ '../Core/DeveloperError',
4
+ '../Core/defaultValue',
5
+ '../Core/Color',
6
+ '../Core/combine',
7
+ '../Core/destroyObject',
8
+ '../Core/Cartesian2',
9
+ '../Core/Math',
10
+ '../Core/Ellipsoid',
11
+ '../Core/BoundingRectangle',
12
+ '../Core/BoundingSphere',
13
+ '../Core/Cartesian3',
14
+ '../Core/Cartographic',
15
+ '../Core/ComponentDatatype',
16
+ '../Core/MeshFilters',
17
+ '../Core/PrimitiveType',
18
+ '../Core/EllipsoidTangentPlane',
19
+ '../Core/PolygonPipeline',
20
+ '../Core/WindingOrder',
21
+ '../Core/ExtentTessellator',
22
+ '../Core/Queue',
23
+ '../Core/Matrix3',
24
+ '../Core/Quaternion',
25
+ '../Renderer/BlendingState',
26
+ '../Renderer/BufferUsage',
27
+ '../Renderer/CommandLists',
28
+ '../Renderer/CullFace',
29
+ '../Renderer/DrawCommand',
30
+ '../Renderer/VertexLayout',
31
+ './Material',
32
+ './SceneMode',
33
+ '../Shaders/Noise',
34
+ '../Shaders/PolygonVS',
35
+ '../Shaders/PolygonFS',
36
+ '../Shaders/PolygonVSPick',
37
+ '../Shaders/PolygonFSPick'
38
+ ], function(
39
+ DeveloperError,
40
+ defaultValue,
41
+ Color,
42
+ combine,
43
+ destroyObject,
44
+ Cartesian2,
45
+ CesiumMath,
46
+ Ellipsoid,
47
+ BoundingRectangle,
48
+ BoundingSphere,
49
+ Cartesian3,
50
+ Cartographic,
51
+ ComponentDatatype,
52
+ MeshFilters,
53
+ PrimitiveType,
54
+ EllipsoidTangentPlane,
55
+ PolygonPipeline,
56
+ WindingOrder,
57
+ ExtentTessellator,
58
+ Queue,
59
+ Matrix3,
60
+ Quaternion,
61
+ BlendingState,
62
+ BufferUsage,
63
+ CommandLists,
64
+ CullFace,
65
+ DrawCommand,
66
+ VertexLayout,
67
+ Material,
68
+ SceneMode,
69
+ Noise,
70
+ PolygonVS,
71
+ PolygonFS,
72
+ PolygonVSPick,
73
+ PolygonFSPick) {
74
+ "use strict";
75
+
76
+ var attributeIndices = {
77
+ position3DHigh : 0,
78
+ position3DLow : 1,
79
+ position2DHigh : 2,
80
+ position2DLow : 3,
81
+ textureCoordinates : 4
82
+ };
83
+
84
+ function PositionVertices() {
85
+ this._va = undefined;
86
+ }
87
+
88
+ PositionVertices.prototype.getVertexArrays = function() {
89
+ return this._va;
90
+ };
91
+
92
+ PositionVertices.prototype.update = function(context, meshes, bufferUsage) {
93
+ if (typeof meshes !== 'undefined') {
94
+ // Initially create or recreate vertex array and buffers
95
+ this._destroyVA();
96
+
97
+ var va = [];
98
+
99
+ var length = meshes.length;
100
+ for ( var i = 0; i < length; ++i) {
101
+ va.push(context.createVertexArrayFromMesh({
102
+ mesh : meshes[i],
103
+ attributeIndices : attributeIndices,
104
+ bufferUsage : bufferUsage,
105
+ vertexLayout : VertexLayout.INTERLEAVED
106
+ }));
107
+ }
108
+
109
+ this._va = va;
110
+ } else {
111
+ this._destroyVA();
112
+ }
113
+ };
114
+
115
+ PositionVertices.prototype._destroyVA = function() {
116
+ var va = this._va;
117
+ if (typeof va !== 'undefined') {
118
+ this._va = undefined;
119
+
120
+ var length = va.length;
121
+ for ( var i = 0; i < length; ++i) {
122
+ va[i].destroy();
123
+ }
124
+ }
125
+ };
126
+
127
+ PositionVertices.prototype.isDestroyed = function() {
128
+ return false;
129
+ };
130
+
131
+ PositionVertices.prototype.destroy = function() {
132
+ this._destroyVA();
133
+ return destroyObject(this);
134
+ };
135
+
136
+ /**
137
+ * DOC_TBA
138
+ *
139
+ * @alias Polygon
140
+ * @constructor
141
+ *
142
+ * @example
143
+ * var polygon = new Polygon();
144
+ * polygon.material.uniforms.color = {
145
+ * red : 1.0,
146
+ * green : 0.0,
147
+ * blue : 0.0,
148
+ * alpha : 1.0
149
+ * };
150
+ * polygon.setPositions([
151
+ * ellipsoid.cartographicToCartesian(new Cartographic(...)),
152
+ * ellipsoid.cartographicToCartesian(new Cartographic(...)),
153
+ * ellipsoid.cartographicToCartesian(new Cartographic(...))
154
+ * ]);
155
+ */
156
+ var Polygon = function() {
157
+ this._sp = undefined;
158
+ this._rs = undefined;
159
+
160
+ this._spPick = undefined;
161
+ this._rsPick = undefined;
162
+
163
+ this._vertices = new PositionVertices();
164
+ this._pickId = undefined;
165
+
166
+ this._boundingVolume = new BoundingSphere();
167
+ this._boundingVolume2D = new BoundingSphere();
168
+
169
+ this._commandLists = new CommandLists();
170
+
171
+ /**
172
+ * DOC_TBA
173
+ */
174
+ this.ellipsoid = Ellipsoid.WGS84;
175
+ this._ellipsoid = undefined;
176
+
177
+ /**
178
+ * DOC_TBA
179
+ */
180
+ this.height = 0.0;
181
+ this._height = undefined;
182
+
183
+ /**
184
+ * DOC_TBA
185
+ */
186
+ this.granularity = CesiumMath.toRadians(1.0);
187
+ this._granularity = undefined;
188
+
189
+ /**
190
+ * DOC_TBA
191
+ */
192
+ this.scene2D = {
193
+ /**
194
+ * DOC_TBA
195
+ */
196
+ granularity : CesiumMath.toRadians(30.0)
197
+ };
198
+
199
+ /**
200
+ * DOC_TBA
201
+ */
202
+ this.scene3D = {
203
+ /**
204
+ * DOC_TBA
205
+ *
206
+ * granularity can override object-level granularity
207
+ */
208
+ };
209
+
210
+ this._positions = undefined;
211
+ this._textureRotationAngle = undefined;
212
+ this._extent = undefined;
213
+ this._polygonHierarchy = undefined;
214
+ this._createVertexArray = false;
215
+
216
+ /**
217
+ * Determines if this polygon will be shown.
218
+ *
219
+ * @type Boolean
220
+ */
221
+ this.show = true;
222
+
223
+ /**
224
+ * The usage hint for the polygon's vertex buffer.
225
+ *
226
+ * @type BufferUsage
227
+ *
228
+ * @performance If <code>bufferUsage</code> changes, the next time
229
+ * {@link Polygon#update} is called, the polygon's vertex buffer
230
+ * is rewritten - an <code>O(n)</code> operation that also incurs CPU to GPU overhead.
231
+ * For best performance, it is important to provide the proper usage hint. If the polygon
232
+ * will not change over several frames, use <code>BufferUsage.STATIC_DRAW</code>.
233
+ * If the polygon will change every frame, use <code>BufferUsage.STREAM_DRAW</code>.
234
+ */
235
+ this.bufferUsage = BufferUsage.STATIC_DRAW;
236
+ this._bufferUsage = BufferUsage.STATIC_DRAW;
237
+
238
+ /**
239
+ * The surface appearance of the polygon. This can be one of several built-in {@link Material} objects or a custom material, scripted with
240
+ * <a href='https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric'>Fabric</a>.
241
+ * <p>
242
+ * The default material is <code>Material.ColorType</code>.
243
+ * </p>
244
+ *
245
+ * @type Material
246
+ *
247
+ * @example
248
+ * // 1. Change the color of the default material to yellow
249
+ * polygon.material.uniforms.color = new Color(1.0, 1.0, 0.0, 1.0);
250
+ *
251
+ * // 2. Change material to horizontal stripes
252
+ * polygon.material = Material.fromType(scene.getContext(), Material.StripeType);
253
+ *
254
+ * @see <a href='https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric'>Fabric</a>
255
+ */
256
+ this.material = Material.fromType(undefined, Material.ColorType);
257
+ this.material.uniforms.color = new Color(1.0, 1.0, 0.0, 0.5);
258
+ this._material = undefined;
259
+
260
+ this._mode = SceneMode.SCENE3D;
261
+ this._projection = undefined;
262
+
263
+ /**
264
+ * The current morph transition time between 2D/Columbus View and 3D,
265
+ * with 0.0 being 2D or Columbus View and 1.0 being 3D.
266
+ *
267
+ * @type Number
268
+ */
269
+ this.morphTime = this._mode.morphTime;
270
+
271
+ var that = this;
272
+ this._uniforms = {
273
+ u_morphTime : function() {
274
+ return that.morphTime;
275
+ },
276
+ u_height : function() {
277
+ return (that._mode !== SceneMode.SCENE2D) ? that.height : 0.0;
278
+ }
279
+ };
280
+ this._pickUniforms = undefined;
281
+ this._drawUniforms = undefined;
282
+ };
283
+
284
+ /**
285
+ * DOC_TBA
286
+ *
287
+ * @memberof Polygon
288
+ *
289
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
290
+ *
291
+ * @see Polygon#setPositions
292
+ */
293
+ Polygon.prototype.getPositions = function() {
294
+ return this._positions;
295
+ };
296
+
297
+ /**
298
+ * DOC_TBA
299
+ *
300
+ * @memberof Polygon
301
+ *
302
+ * @exception {DeveloperError} At least three positions are required.
303
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
304
+ *
305
+ * @see Polygon#getPositions
306
+ *
307
+ * @param {Array} positions The cartesian positions of the polygon.
308
+ * @param {Number} [height=0.0] The height of the polygon.
309
+ * @param {Number} [textureRotationAngle=0.0] The angle, in radians, to rotate the texture. Positive angles are counter-clockwise.
310
+ *
311
+ * @example
312
+ * polygon.setPositions([
313
+ * ellipsoid.cartographicToCartesian(new Cartographic(...)),
314
+ * ellipsoid.cartographicToCartesian(new Cartographic(...)),
315
+ * ellipsoid.cartographicToCartesian(new Cartographic(...))
316
+ * ], 10.0);
317
+ */
318
+ Polygon.prototype.setPositions = function(positions, height, textureRotationAngle) {
319
+ // positions can be undefined
320
+ if (typeof positions !== 'undefined' && (positions.length < 3)) {
321
+ throw new DeveloperError('At least three positions are required.');
322
+ }
323
+ this.height = defaultValue(height, 0.0);
324
+ this._textureRotationAngle = defaultValue(textureRotationAngle, 0.0);
325
+ this._extent = undefined;
326
+ this._polygonHierarchy = undefined;
327
+ this._positions = positions;
328
+ this._createVertexArray = true;
329
+ };
330
+
331
+ /**
332
+ * Create a set of polygons with holes from a nested hierarchy.
333
+ *
334
+ * @memberof Polygon
335
+ *
336
+ * @param {Object} hierarchy An object defining the vertex positions of each nested polygon.
337
+ * For example, the following polygon has two holes, and one hole has a hole. <code>holes</code> is optional.
338
+ * Leaf nodes only have <code>positions</code>.
339
+ * <pre>
340
+ * <code>
341
+ * {
342
+ * positions : [ ... ], // The polygon's outer boundary
343
+ * holes : [ // The polygon's inner holes
344
+ * {
345
+ * positions : [ ... ]
346
+ * },
347
+ * {
348
+ * positions : [ ... ],
349
+ * holes : [ // A polygon within a hole
350
+ * {
351
+ * positions : [ ... ]
352
+ * }
353
+ * ]
354
+ * }
355
+ * ]
356
+ * }
357
+ * </code>
358
+ * </pre>
359
+ * @param {Number} [height=0.0] The height of the polygon.
360
+ * @param {Number} [textureRotationAngle=0.0] The angle to rotate the texture in radians.
361
+ *
362
+ * @exception {DeveloperError} At least three positions are required.
363
+ *
364
+ * @example
365
+ * // A triangle within a triangle
366
+ * var hierarchy = {
367
+ * positions : [new Cartesian3(-634066.5629045101,-4608738.034138676,4348640.761750969),
368
+ * new Cartesian3(-1321523.0597310204,-5108871.981065817,3570395.2500986718),
369
+ * new Cartesian3(46839.74837473363,-5303481.972379478,3530933.5841716)],
370
+ * holes : [{
371
+ * positions :[new Cartesian3(-646079.44483647,-4811233.11175887,4123187.2266941597),
372
+ * new Cartesian3(-1024015.4454943262,-5072141.413164587,3716492.6173834214),
373
+ * new Cartesian3(-234678.22583880965,-5189078.820849883,3688809.059214336)]
374
+ * }]
375
+ * };
376
+ */
377
+ Polygon.prototype.configureFromPolygonHierarchy = function(hierarchy, height, textureRotationAngle) {
378
+ // Algorithm adapted from http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf
379
+ var polygons = [];
380
+ var queue = new Queue();
381
+ queue.enqueue(hierarchy);
382
+
383
+ while (queue.length !== 0) {
384
+ var outerNode = queue.dequeue();
385
+ var outerRing = outerNode.positions;
386
+
387
+ if (outerRing.length < 3) {
388
+ throw new DeveloperError('At least three positions are required.');
389
+ }
390
+
391
+ var numChildren = outerNode.holes ? outerNode.holes.length : 0;
392
+ if (numChildren === 0) {
393
+ // The outer polygon is a simple polygon with no nested inner polygon.
394
+ polygons.push(outerNode.positions);
395
+ } else {
396
+ // The outer polygon contains inner polygons
397
+ var holes = [];
398
+ for ( var i = 0; i < numChildren; i++) {
399
+ var hole = outerNode.holes[i];
400
+ holes.push(hole.positions);
401
+
402
+ var numGrandchildren = 0;
403
+ if (hole.holes) {
404
+ numGrandchildren = hole.holes.length;
405
+ }
406
+
407
+ for ( var j = 0; j < numGrandchildren; j++) {
408
+ queue.enqueue(hole.holes[j]);
409
+ }
410
+ }
411
+ var combinedPolygon = PolygonPipeline.eliminateHoles(outerRing, holes);
412
+ polygons.push(combinedPolygon);
413
+ }
414
+ }
415
+
416
+ this.height = defaultValue(height, 0.0);
417
+ this._textureRotationAngle = defaultValue(textureRotationAngle, 0.0);
418
+ this._positions = undefined;
419
+ this._extent = undefined;
420
+ this._polygonHierarchy = polygons;
421
+ this._createVertexArray = true;
422
+ };
423
+
424
+ /**
425
+ * DOC_TBA
426
+ *
427
+ * @memberof Polygon
428
+ *
429
+ * @param {extent} extent. The cartographic extent of the tile, with north, south, east and
430
+ * west properties in radians.
431
+ *
432
+ * @param {double} [height=0.0]. The height of the cartographic extent.
433
+ * @example
434
+ * polygon.configureExtent(new Extent(
435
+ * CesiumMath.toRadians(0.0),
436
+ * CesiumMath.toRadians(0.0),
437
+ * CesiumMath.toRadians(10.0),
438
+ * CesiumMath.toRadians(10.0)
439
+ * ));
440
+ */
441
+ Polygon.prototype.configureExtent = function(extent, height) {
442
+ this._extent = extent;
443
+ this.height = defaultValue(height, 0.0);
444
+ this._textureRotationAngle = undefined;
445
+ this._positions = undefined;
446
+ this._polygonHierarchy = undefined;
447
+ this._createVertexArray = true;
448
+ };
449
+
450
+ var appendTextureCoordinatesCartesian2 = new Cartesian2();
451
+ var appendTextureCoordinatesCartesian3 = new Cartesian3();
452
+ var appendTextureCoordinatesQuaternion = new Quaternion();
453
+ var appendTextureCoordinatesMatrix3 = new Matrix3();
454
+
455
+ function appendTextureCoordinates(tangentPlane, boundingRectangle, mesh, angle) {
456
+ var origin = new Cartesian2(boundingRectangle.x, boundingRectangle.y);
457
+
458
+ var positions = mesh.attributes.position.values;
459
+ var length = positions.length;
460
+
461
+ var textureCoordinates = new Float32Array(2 * (length / 3));
462
+ var j = 0;
463
+
464
+ var rotation = Quaternion.fromAxisAngle(tangentPlane._normal, angle, appendTextureCoordinatesQuaternion);
465
+ var textureMatrix = Matrix3.fromQuaternion(rotation, appendTextureCoordinatesMatrix3);
466
+
467
+ // PERFORMANCE_IDEA: Instead of storing texture coordinates per-vertex, we could
468
+ // save memory by computing them in the fragment shader. However, projecting
469
+ // the point onto the plane may have precision issues.
470
+ for ( var i = 0; i < length; i += 3) {
471
+ var p = appendTextureCoordinatesCartesian3;
472
+ p.x = positions[i];
473
+ p.y = positions[i + 1];
474
+ p.z = positions[i + 2];
475
+ Matrix3.multiplyByVector(textureMatrix, p, p);
476
+ var st = tangentPlane.projectPointOntoPlane(p, appendTextureCoordinatesCartesian2);
477
+ st.subtract(origin, st);
478
+
479
+ textureCoordinates[j++] = st.x / boundingRectangle.width;
480
+ textureCoordinates[j++] = st.y / boundingRectangle.height;
481
+ }
482
+
483
+ mesh.attributes.textureCoordinates = {
484
+ componentDatatype : ComponentDatatype.FLOAT,
485
+ componentsPerAttribute : 2,
486
+ values : textureCoordinates
487
+ };
488
+
489
+ return mesh;
490
+ }
491
+
492
+ var computeBoundingRectangleCartesian2 = new Cartesian2();
493
+ var computeBoundingRectangleCartesian3 = new Cartesian3();
494
+ var computeBoundingRectangleQuaternion = new Quaternion();
495
+ var computeBoundingRectangleMatrix3 = new Matrix3();
496
+
497
+ function computeBoundingRectangle(tangentPlane, positions, angle, result) {
498
+ var rotation = Quaternion.fromAxisAngle(tangentPlane._normal, angle, computeBoundingRectangleQuaternion);
499
+ var textureMatrix = Matrix3.fromQuaternion(rotation,computeBoundingRectangleMatrix3);
500
+
501
+ var minX = Number.POSITIVE_INFINITY;
502
+ var maxX = Number.NEGATIVE_INFINITY;
503
+ var minY = Number.POSITIVE_INFINITY;
504
+ var maxY = Number.NEGATIVE_INFINITY;
505
+
506
+ var length = positions.length;
507
+ for ( var i = 0; i < length; ++i) {
508
+ var p = Cartesian3.clone(positions[i], computeBoundingRectangleCartesian3);
509
+ Matrix3.multiplyByVector(textureMatrix, p, p);
510
+ var st = tangentPlane.projectPointOntoPlane(p, computeBoundingRectangleCartesian2);
511
+
512
+ if (typeof st !== 'undefined') {
513
+ minX = Math.min(minX, st.x);
514
+ maxX = Math.max(maxX, st.x);
515
+
516
+ minY = Math.min(minY, st.y);
517
+ maxY = Math.max(maxY, st.y);
518
+ }
519
+ }
520
+
521
+ if (typeof result === 'undefined') {
522
+ result = new BoundingRectangle();
523
+ }
524
+
525
+ result.x = minX;
526
+ result.y = minY;
527
+ result.width = maxX - minX;
528
+ result.height = maxY - minY;
529
+ return result;
530
+ }
531
+
532
+ var createMeshFromPositionsPositions = [];
533
+ var createMeshFromPositionsBoundingRectangle = new BoundingRectangle();
534
+
535
+ function createMeshFromPositions(polygon, positions, angle, outerPositions) {
536
+ var cleanedPositions = PolygonPipeline.cleanUp(positions);
537
+ if (cleanedPositions.length < 3) {
538
+ // Duplicate positions result in not enough positions to form a polygon.
539
+ return undefined;
540
+ }
541
+
542
+ var tangentPlane = EllipsoidTangentPlane.fromPoints(cleanedPositions, polygon.ellipsoid);
543
+ var positions2D = tangentPlane.projectPointsOntoPlane(cleanedPositions, createMeshFromPositionsPositions);
544
+
545
+ var originalWindingOrder = PolygonPipeline.computeWindingOrder2D(positions2D);
546
+ if (originalWindingOrder === WindingOrder.CLOCKWISE) {
547
+ positions2D.reverse();
548
+ cleanedPositions.reverse();
549
+ }
550
+ var indices = PolygonPipeline.earClip2D(positions2D);
551
+ var mesh = PolygonPipeline.computeSubdivision(cleanedPositions, indices, polygon._granularity);
552
+ var boundary = outerPositions || cleanedPositions;
553
+ var boundingRectangle = computeBoundingRectangle(tangentPlane, boundary, angle, createMeshFromPositionsBoundingRectangle);
554
+ mesh = appendTextureCoordinates(tangentPlane, boundingRectangle, mesh, angle);
555
+ return mesh;
556
+ }
557
+
558
+ function createMeshes(polygon) {
559
+ // PERFORMANCE_IDEA: Move this to a web-worker.
560
+ var i;
561
+ var meshes = [];
562
+ var mesh;
563
+
564
+ if ((typeof polygon._extent !== 'undefined') && !polygon._extent.isEmpty()) {
565
+ meshes.push(ExtentTessellator.compute({extent: polygon._extent, generateTextureCoordinates:true}));
566
+
567
+ polygon._boundingVolume = BoundingSphere.fromExtent3D(polygon._extent, polygon._ellipsoid, polygon._boundingVolume);
568
+ if (polygon._mode !== SceneMode.SCENE3D) {
569
+ polygon._boundingVolume2D = BoundingSphere.fromExtent2D(polygon._extent, polygon._projection, polygon._boundingVolume2D);
570
+ var center2D = polygon._boundingVolume2D.center;
571
+ polygon._boundingVolume2D.center = new Cartesian3(0.0, center2D.x, center2D.y);
572
+ }
573
+ } else if (typeof polygon._positions !== 'undefined') {
574
+ mesh = createMeshFromPositions(polygon, polygon._positions, polygon._textureRotationAngle);
575
+ if (typeof mesh !== 'undefined') {
576
+ meshes.push(mesh);
577
+ polygon._boundingVolume = BoundingSphere.fromPoints(polygon._positions, polygon._boundingVolume);
578
+ }
579
+ } else if (typeof polygon._polygonHierarchy !== 'undefined') {
580
+ var outerPositions = polygon._polygonHierarchy[0];
581
+ for (i = 0; i < polygon._polygonHierarchy.length; i++) {
582
+ mesh = createMeshFromPositions(polygon, polygon._polygonHierarchy[i], polygon._textureRotationAngle, outerPositions);
583
+ if (typeof mesh !== 'undefined') {
584
+ meshes.push(mesh);
585
+ }
586
+ }
587
+
588
+ if (meshes.length > 0) {
589
+ // The bounding volume is just around the boundary points, so there could be cases for
590
+ // contrived polygons on contrived ellipsoids - very oblate ones - where the bounding
591
+ // volume doesn't cover the polygon.
592
+ polygon._boundingVolume = BoundingSphere.fromPoints(outerPositions, polygon._boundingVolume);
593
+ }
594
+ }
595
+
596
+ if (meshes.length === 0) {
597
+ return undefined;
598
+ }
599
+
600
+ var processedMeshes = [];
601
+ for (i = 0; i < meshes.length; i++) {
602
+ mesh = meshes[i];
603
+ mesh = PolygonPipeline.scaleToGeodeticHeight(mesh, polygon.height, polygon.ellipsoid);
604
+ mesh = MeshFilters.reorderForPostVertexCache(mesh);
605
+ mesh = MeshFilters.reorderForPreVertexCache(mesh);
606
+
607
+ if (polygon._mode === SceneMode.SCENE3D) {
608
+ mesh.attributes.position2DHigh = { // Not actually used in shader
609
+ value : [0.0, 0.0]
610
+ };
611
+ mesh.attributes.position2DLow = { // Not actually used in shader
612
+ value : [0.0, 0.0]
613
+ };
614
+ mesh = MeshFilters.encodeAttribute(mesh, 'position', 'position3DHigh', 'position3DLow');
615
+ } else {
616
+ mesh = MeshFilters.projectTo2D(mesh, polygon._projection);
617
+
618
+ if ((i === 0) && (polygon._mode !== SceneMode.SCENE3D)) {
619
+ var projectedPositions = mesh.attributes.position2D.values;
620
+ var positions = [];
621
+
622
+ for (var j = 0; j < projectedPositions.length; j += 2) {
623
+ positions.push(new Cartesian3(projectedPositions[j], projectedPositions[j + 1], 0.0));
624
+ }
625
+
626
+ polygon._boundingVolume2D = BoundingSphere.fromPoints(positions, polygon._boundingVolume2D);
627
+ var center2DPositions = polygon._boundingVolume2D.center;
628
+ polygon._boundingVolume2D.center = new Cartesian3(0.0, center2DPositions.x, center2DPositions.y);
629
+ }
630
+
631
+ mesh = MeshFilters.encodeAttribute(mesh, 'position3D', 'position3DHigh', 'position3DLow');
632
+ mesh = MeshFilters.encodeAttribute(mesh, 'position2D', 'position2DHigh', 'position2DLow');
633
+ }
634
+ processedMeshes = processedMeshes.concat(MeshFilters.fitToUnsignedShortIndices(mesh));
635
+ }
636
+
637
+ return processedMeshes;
638
+ }
639
+
640
+ function getGranularity(polygon, mode) {
641
+ if (mode === SceneMode.SCENE3D) {
642
+ return polygon.scene3D.granularity || polygon.granularity;
643
+ }
644
+
645
+ return polygon.scene2D.granularity || polygon.granularity;
646
+ }
647
+
648
+ /**
649
+ * Commits changes to properties before rendering by updating the object's WebGL resources.
650
+ *
651
+ * @memberof Polygon
652
+ *
653
+ * @exception {DeveloperError} this.ellipsoid must be defined.
654
+ * @exception {DeveloperError} this.material must be defined.
655
+ * @exception {DeveloperError} this.granularity must be greater than zero.
656
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
657
+ */
658
+ Polygon.prototype.update = function(context, frameState, commandList) {
659
+ if (typeof this.ellipsoid === 'undefined') {
660
+ throw new DeveloperError('this.ellipsoid must be defined.');
661
+ }
662
+
663
+ if (typeof this.material === 'undefined') {
664
+ throw new DeveloperError('this.material must be defined.');
665
+ }
666
+
667
+ var mode = frameState.mode;
668
+ var granularity = getGranularity(this, mode);
669
+
670
+ if (granularity < 0.0) {
671
+ throw new DeveloperError('this.granularity and scene2D/scene3D overrides must be greater than zero.');
672
+ }
673
+
674
+ if (!this.show) {
675
+ return;
676
+ }
677
+
678
+ if (this._ellipsoid !== this.ellipsoid) {
679
+ this._createVertexArray = true;
680
+ this._ellipsoid = this.ellipsoid;
681
+ }
682
+
683
+ if (this._height !== this.height) {
684
+ this._createVertexArray = true;
685
+ this._height = this.height;
686
+ }
687
+
688
+ if (this._granularity !== granularity) {
689
+ this._createVertexArray = true;
690
+ this._granularity = granularity;
691
+ }
692
+
693
+ if (this._bufferUsage !== this.bufferUsage) {
694
+ this._createVertexArray = true;
695
+ this._bufferUsage = this.bufferUsage;
696
+ }
697
+
698
+ var projection = frameState.scene2D.projection;
699
+ if (this._projection !== projection) {
700
+ this._createVertexArray = true;
701
+ this._projection = projection;
702
+ }
703
+
704
+ if (this._mode !== mode) {
705
+ // SCENE2D, COLUMBUS_VIEW, and MORPHING use the same rendering path, so a
706
+ // transition only occurs when switching from/to SCENE3D
707
+ this._createVertexArray = this._mode === SceneMode.SCENE3D || mode === SceneMode.SCENE3D;
708
+ this._mode = mode;
709
+
710
+ if (typeof mode.morphTime !== 'undefined') {
711
+ this.morphTime = mode.morphTime;
712
+ }
713
+ }
714
+
715
+ if (this._createVertexArray) {
716
+ this._createVertexArray = false;
717
+ this._vertices.update(context, createMeshes(this), this.bufferUsage);
718
+ }
719
+
720
+ if (typeof this._vertices.getVertexArrays() === 'undefined') {
721
+ return;
722
+ }
723
+
724
+ var boundingVolume;
725
+ if (mode === SceneMode.SCENE3D) {
726
+ boundingVolume = this._boundingVolume;
727
+ } else if (mode === SceneMode.COLUMBUS_VIEW || mode === SceneMode.SCENE2D) {
728
+ boundingVolume = this._boundingVolume2D;
729
+ } else {
730
+ boundingVolume = this._boundingVolume.union(this._boundingVolume2D);
731
+ }
732
+
733
+ var pass = frameState.passes;
734
+ var vas = this._vertices.getVertexArrays();
735
+ var length = vas.length;
736
+ var commands;
737
+ var command;
738
+
739
+ this._commandLists.removeAll();
740
+ if (pass.color) {
741
+ if (typeof this._rs === 'undefined') {
742
+ // TODO: Should not need this in 2D/columbus view, but is hiding a triangulation issue.
743
+ this._rs = context.createRenderState({
744
+ cull : {
745
+ enabled : true,
746
+ face : CullFace.BACK
747
+ },
748
+ blending : BlendingState.ALPHA_BLEND
749
+ });
750
+ }
751
+
752
+ var materialChanged = typeof this._material === 'undefined' ||
753
+ this._material !== this.material;
754
+
755
+ // Recompile shader when material changes
756
+ if (materialChanged) {
757
+ this._material = this.material;
758
+
759
+ var fsSource =
760
+ '#line 0\n' +
761
+ Noise +
762
+ '#line 0\n' +
763
+ this._material.shaderSource +
764
+ '#line 0\n' +
765
+ PolygonFS;
766
+
767
+ this._sp = this._sp && this._sp.release();
768
+ this._sp = context.getShaderCache().getShaderProgram(PolygonVS, fsSource, attributeIndices);
769
+
770
+ this._drawUniforms = combine([this._uniforms, this._material._uniforms], false, false);
771
+ }
772
+
773
+ commands = this._commandLists.colorList;
774
+ commands.length = length;
775
+
776
+ for (var i = 0; i < length; ++i) {
777
+ command = commands[i];
778
+ if (typeof command === 'undefined') {
779
+ command = commands[i] = new DrawCommand();
780
+ }
781
+
782
+ command.boundingVolume = boundingVolume;
783
+ command.primitiveType = PrimitiveType.TRIANGLES;
784
+ command.shaderProgram = this._sp,
785
+ command.uniformMap = this._drawUniforms;
786
+ command.vertexArray = vas[i];
787
+ command.renderState = this._rs;
788
+ }
789
+ }
790
+
791
+ if (pass.pick) {
792
+ if (typeof this._pickId === 'undefined') {
793
+ this._spPick = context.getShaderCache().getShaderProgram(PolygonVSPick, PolygonFSPick, attributeIndices);
794
+
795
+ this._rsPick = context.createRenderState({
796
+ // TODO: Should not need this in 2D/columbus view, but is hiding a triangulation issue.
797
+ cull : {
798
+ enabled : true,
799
+ face : CullFace.BACK
800
+ }
801
+ });
802
+
803
+ this._pickId = context.createPickId(this);
804
+
805
+ var that = this;
806
+ this._pickUniforms = {
807
+ u_pickColor : function() {
808
+ return that._pickId.normalizedRgba;
809
+ },
810
+ u_morphTime : function() {
811
+ return that.morphTime;
812
+ },
813
+ u_height : function() {
814
+ return that.height;
815
+ }
816
+ };
817
+ }
818
+
819
+ commands = this._commandLists.pickList;
820
+ commands.length = length;
821
+
822
+ for (var j = 0; j < length; ++j) {
823
+ command = commands[j];
824
+ if (typeof command === 'undefined') {
825
+ command = commands[j] = new DrawCommand();
826
+ }
827
+
828
+ command.boundingVolume = boundingVolume;
829
+ command.primitiveType = PrimitiveType.TRIANGLES;
830
+ command.shaderProgram = this._spPick,
831
+ command.uniformMap = this._pickUniforms;
832
+ command.vertexArray = vas[j];
833
+ command.renderState = this._rsPick;
834
+ }
835
+ }
836
+
837
+ if (!this._commandLists.empty()) {
838
+ commandList.push(this._commandLists);
839
+ }
840
+ };
841
+
842
+ /**
843
+ * Returns true if this object was destroyed; otherwise, false.
844
+ * <br /><br />
845
+ * If this object was destroyed, it should not be used; calling any function other than
846
+ * <code>isDestroyed</code> will result in a {@link DeveloperError} exception.
847
+ *
848
+ * @memberof Polygon
849
+ *
850
+ * @return {Boolean} <code>true</code> if this object was destroyed; otherwise, <code>false</code>.
851
+ *
852
+ * @see Polygon#destroy
853
+ */
854
+ Polygon.prototype.isDestroyed = function() {
855
+ return false;
856
+ };
857
+
858
+ /**
859
+ * Destroys the WebGL resources held by this object. Destroying an object allows for deterministic
860
+ * release of WebGL resources, instead of relying on the garbage collector to destroy this object.
861
+ * <br /><br />
862
+ * Once an object is destroyed, it should not be used; calling any function other than
863
+ * <code>isDestroyed</code> will result in a {@link DeveloperError} exception. Therefore,
864
+ * assign the return value (<code>undefined</code>) to the object as done in the example.
865
+ *
866
+ * @memberof Polygon
867
+ *
868
+ * @return {undefined}
869
+ *
870
+ * @exception {DeveloperError} This object was destroyed, i.e., destroy() was called.
871
+ *
872
+ * @see Polygon#isDestroyed
873
+ *
874
+ * @example
875
+ * polygon = polygon && polygon.destroy();
876
+ */
877
+ Polygon.prototype.destroy = function() {
878
+ this._sp = this._sp && this._sp.release();
879
+ this._spPick = this._spPick && this._spPick.release();
880
+ this._vertices = this._vertices.destroy();
881
+ this._pickId = this._pickId && this._pickId.destroy();
882
+ return destroyObject(this);
883
+ };
884
+
885
+ return Polygon;
886
+ });