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.
- data/LICENSE.md +259 -0
- data/README.rdoc +90 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/Assets/Assets.profile.js +8 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_0.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_1.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_10.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_11.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_12.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_13.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_14.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_15.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_16.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_17.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_18.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_19.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_2.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_20.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_21.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_22.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_23.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_24.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_25.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_26.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_27.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_3.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_4.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_5.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_6.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_7.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_8.json +1 -0
- data/app/assets/javascripts/Assets/IAU2006_XYS/IAU2006_XYS_9.json +1 -0
- data/app/assets/javascripts/Assets/Textures/NE2_LR_LC_SR_W_DR_2048.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
- data/app/assets/javascripts/Assets/Textures/waterNormals.jpg +0 -0
- data/app/assets/javascripts/Assets/package.json +6 -0
- data/app/assets/javascripts/Cesium.js +320 -0
- data/app/assets/javascripts/Core/AnimationController.js +148 -0
- data/app/assets/javascripts/Core/AxisAlignedBoundingBox.js +243 -0
- data/app/assets/javascripts/Core/BoundingRectangle.js +364 -0
- data/app/assets/javascripts/Core/BoundingSphere.js +819 -0
- data/app/assets/javascripts/Core/BoxTessellator.js +93 -0
- data/app/assets/javascripts/Core/Cartesian2.js +762 -0
- data/app/assets/javascripts/Core/Cartesian3.js +861 -0
- data/app/assets/javascripts/Core/Cartesian4.js +762 -0
- data/app/assets/javascripts/Core/Cartographic.js +211 -0
- data/app/assets/javascripts/Core/CatmullRomSpline.js +232 -0
- data/app/assets/javascripts/Core/Clock.js +195 -0
- data/app/assets/javascripts/Core/ClockRange.js +37 -0
- data/app/assets/javascripts/Core/ClockStep.js +32 -0
- data/app/assets/javascripts/Core/Color.js +1629 -0
- data/app/assets/javascripts/Core/ComponentDatatype.js +119 -0
- data/app/assets/javascripts/Core/Core.profile.js +8 -0
- data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +198 -0
- data/app/assets/javascripts/Core/CubicRealPolynomial.js +251 -0
- data/app/assets/javascripts/Core/DefaultProxy.js +30 -0
- data/app/assets/javascripts/Core/DeveloperError.js +60 -0
- data/app/assets/javascripts/Core/EarthOrientationParameters.js +383 -0
- data/app/assets/javascripts/Core/EarthOrientationParametersSample.js +50 -0
- data/app/assets/javascripts/Core/Ellipsoid.js +539 -0
- data/app/assets/javascripts/Core/EllipsoidTangentPlane.js +207 -0
- data/app/assets/javascripts/Core/EllipsoidalOccluder.js +151 -0
- data/app/assets/javascripts/Core/EncodedCartesian3.js +197 -0
- data/app/assets/javascripts/Core/Enumeration.js +67 -0
- data/app/assets/javascripts/Core/Event.js +122 -0
- data/app/assets/javascripts/Core/Extent.js +383 -0
- data/app/assets/javascripts/Core/ExtentTessellator.js +384 -0
- data/app/assets/javascripts/Core/FAR.js +13 -0
- data/app/assets/javascripts/Core/FeatureDetection.js +126 -0
- data/app/assets/javascripts/Core/Fullscreen.js +235 -0
- data/app/assets/javascripts/Core/GeographicProjection.js +107 -0
- data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +176 -0
- data/app/assets/javascripts/Core/HermiteSpline.js +234 -0
- data/app/assets/javascripts/Core/Iau2006XysData.js +259 -0
- data/app/assets/javascripts/Core/Iau2006XysSample.js +36 -0
- data/app/assets/javascripts/Core/IndexDatatype.js +28 -0
- data/app/assets/javascripts/Core/Intersect.js +40 -0
- data/app/assets/javascripts/Core/IntersectionTests.js +359 -0
- data/app/assets/javascripts/Core/Interval.js +27 -0
- data/app/assets/javascripts/Core/Iso8601.js +46 -0
- data/app/assets/javascripts/Core/JulianDate.js +1228 -0
- data/app/assets/javascripts/Core/KeyboardEventModifier.js +38 -0
- data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +96 -0
- data/app/assets/javascripts/Core/LeapSecond.js +158 -0
- data/app/assets/javascripts/Core/LinearApproximation.js +98 -0
- data/app/assets/javascripts/Core/Math.js +532 -0
- data/app/assets/javascripts/Core/Matrix2.js +833 -0
- data/app/assets/javascripts/Core/Matrix3.js +1099 -0
- data/app/assets/javascripts/Core/Matrix4.js +2164 -0
- data/app/assets/javascripts/Core/MeshFilters.js +568 -0
- data/app/assets/javascripts/Core/Occluder.js +474 -0
- data/app/assets/javascripts/Core/OrientationInterpolator.js +109 -0
- data/app/assets/javascripts/Core/PlaneTessellator.js +74 -0
- data/app/assets/javascripts/Core/PolygonPipeline.js +792 -0
- data/app/assets/javascripts/Core/PolylinePipeline.js +90 -0
- data/app/assets/javascripts/Core/PrimitiveType.js +80 -0
- data/app/assets/javascripts/Core/QuadraticRealPolynomial.js +146 -0
- data/app/assets/javascripts/Core/QuarticRealPolynomial.js +339 -0
- data/app/assets/javascripts/Core/Quaternion.js +947 -0
- data/app/assets/javascripts/Core/Queue.js +95 -0
- data/app/assets/javascripts/Core/Ray.js +64 -0
- data/app/assets/javascripts/Core/ReferenceFrame.js +25 -0
- data/app/assets/javascripts/Core/RequestErrorEvent.js +35 -0
- data/app/assets/javascripts/Core/RuntimeError.js +59 -0
- data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +658 -0
- data/app/assets/javascripts/Core/ScreenSpaceEventType.js +149 -0
- data/app/assets/javascripts/Core/Shapes.js +230 -0
- data/app/assets/javascripts/Core/Spherical.js +192 -0
- data/app/assets/javascripts/Core/TaskProcessor.js +131 -0
- data/app/assets/javascripts/Core/TimeConstants.js +85 -0
- data/app/assets/javascripts/Core/TimeInterval.js +305 -0
- data/app/assets/javascripts/Core/TimeIntervalCollection.js +543 -0
- data/app/assets/javascripts/Core/TimeStandard.js +31 -0
- data/app/assets/javascripts/Core/Tipsify.js +285 -0
- data/app/assets/javascripts/Core/Transforms.js +614 -0
- data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +102 -0
- data/app/assets/javascripts/Core/Visibility.js +38 -0
- data/app/assets/javascripts/Core/WebMercatorProjection.js +154 -0
- data/app/assets/javascripts/Core/WindingOrder.js +40 -0
- data/app/assets/javascripts/Core/binarySearch.js +69 -0
- data/app/assets/javascripts/Core/buildModuleUrl.js +77 -0
- data/app/assets/javascripts/Core/clone.js +21 -0
- data/app/assets/javascripts/Core/combine.js +81 -0
- data/app/assets/javascripts/Core/computeSunPosition.js +116 -0
- data/app/assets/javascripts/Core/createGuid.js +25 -0
- data/app/assets/javascripts/Core/defaultValue.js +22 -0
- data/app/assets/javascripts/Core/destroyObject.js +61 -0
- data/app/assets/javascripts/Core/freezeObject.js +20 -0
- data/app/assets/javascripts/Core/getImagePixels.js +46 -0
- data/app/assets/javascripts/Core/isLeapYear.js +30 -0
- data/app/assets/javascripts/Core/jsonp.js +116 -0
- data/app/assets/javascripts/Core/loadArrayBuffer.js +76 -0
- data/app/assets/javascripts/Core/loadImage.js +85 -0
- data/app/assets/javascripts/Core/loadJson.js +54 -0
- data/app/assets/javascripts/Core/loadText.js +78 -0
- data/app/assets/javascripts/Core/loadXML.js +76 -0
- data/app/assets/javascripts/Core/package.json +6 -0
- data/app/assets/javascripts/Core/pointInsideTriangle2D.js +41 -0
- data/app/assets/javascripts/Core/requestAnimationFrame.js +61 -0
- data/app/assets/javascripts/Core/throttleRequestByServer.js +74 -0
- data/app/assets/javascripts/Core/writeTextToCanvas.js +92 -0
- data/app/assets/javascripts/DynamicScene/CompositeDynamicObjectCollection.js +254 -0
- data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +57 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +96 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +99 -0
- data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +125 -0
- data/app/assets/javascripts/DynamicScene/CzmlColor.js +127 -0
- data/app/assets/javascripts/DynamicScene/CzmlDefaults.js +135 -0
- data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +59 -0
- data/app/assets/javascripts/DynamicScene/CzmlImage.js +61 -0
- data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +59 -0
- data/app/assets/javascripts/DynamicScene/CzmlNumber.js +82 -0
- data/app/assets/javascripts/DynamicScene/CzmlString.js +56 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +99 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +172 -0
- data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +98 -0
- data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +59 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboard.js +245 -0
- data/app/assets/javascripts/DynamicScene/DynamicBillboardVisualizer.js +347 -0
- data/app/assets/javascripts/DynamicScene/DynamicColorMaterial.js +78 -0
- data/app/assets/javascripts/DynamicScene/DynamicCone.js +291 -0
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +350 -0
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizerUsingCustomSensor.js +389 -0
- data/app/assets/javascripts/DynamicScene/DynamicDirectionsProperty.js +163 -0
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoid.js +158 -0
- data/app/assets/javascripts/DynamicScene/DynamicEllipsoidVisualizer.js +277 -0
- data/app/assets/javascripts/DynamicScene/DynamicImageMaterial.js +136 -0
- data/app/assets/javascripts/DynamicScene/DynamicLabel.js +286 -0
- data/app/assets/javascripts/DynamicScene/DynamicLabelVisualizer.js +341 -0
- data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +125 -0
- data/app/assets/javascripts/DynamicScene/DynamicObject.js +364 -0
- data/app/assets/javascripts/DynamicScene/DynamicObjectCollection.js +137 -0
- data/app/assets/javascripts/DynamicScene/DynamicObjectView.js +299 -0
- data/app/assets/javascripts/DynamicScene/DynamicPath.js +214 -0
- data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +402 -0
- data/app/assets/javascripts/DynamicScene/DynamicPoint.js +184 -0
- data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +323 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolygon.js +138 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolygonVisualizer.js +251 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolyline.js +183 -0
- data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +268 -0
- data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +525 -0
- data/app/assets/javascripts/DynamicScene/DynamicProperty.js +352 -0
- data/app/assets/javascripts/DynamicScene/DynamicPyramid.js +204 -0
- data/app/assets/javascripts/DynamicScene/DynamicPyramidVisualizer.js +302 -0
- data/app/assets/javascripts/DynamicScene/DynamicScene.profile.js +8 -0
- data/app/assets/javascripts/DynamicScene/DynamicVertexPositionsProperty.js +199 -0
- data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +155 -0
- data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +181 -0
- data/app/assets/javascripts/DynamicScene/package.json +6 -0
- data/app/assets/javascripts/DynamicScene/processCzml.js +77 -0
- data/app/assets/javascripts/Renderer/BlendEquation.js +52 -0
- data/app/assets/javascripts/Renderer/BlendFunction.js +158 -0
- data/app/assets/javascripts/Renderer/BlendingState.js +64 -0
- data/app/assets/javascripts/Renderer/Buffer.js +141 -0
- data/app/assets/javascripts/Renderer/BufferUsage.js +48 -0
- data/app/assets/javascripts/Renderer/ClearCommand.js +40 -0
- data/app/assets/javascripts/Renderer/CommandLists.js +42 -0
- data/app/assets/javascripts/Renderer/Context.js +2805 -0
- data/app/assets/javascripts/Renderer/CubeMap.js +358 -0
- data/app/assets/javascripts/Renderer/CubeMapFace.js +202 -0
- data/app/assets/javascripts/Renderer/CullFace.js +50 -0
- data/app/assets/javascripts/Renderer/DepthFunction.js +95 -0
- data/app/assets/javascripts/Renderer/DrawCommand.js +96 -0
- data/app/assets/javascripts/Renderer/Framebuffer.js +435 -0
- data/app/assets/javascripts/Renderer/MipmapHint.js +50 -0
- data/app/assets/javascripts/Renderer/PickFramebuffer.js +178 -0
- data/app/assets/javascripts/Renderer/PixelDatatype.js +86 -0
- data/app/assets/javascripts/Renderer/PixelFormat.js +113 -0
- data/app/assets/javascripts/Renderer/Renderbuffer.js +102 -0
- data/app/assets/javascripts/Renderer/RenderbufferFormat.js +77 -0
- data/app/assets/javascripts/Renderer/Renderer.profile.js +8 -0
- data/app/assets/javascripts/Renderer/ShaderCache.js +121 -0
- data/app/assets/javascripts/Renderer/ShaderProgram.js +2402 -0
- data/app/assets/javascripts/Renderer/StencilFunction.js +95 -0
- data/app/assets/javascripts/Renderer/StencilOperation.js +95 -0
- data/app/assets/javascripts/Renderer/Texture.js +395 -0
- data/app/assets/javascripts/Renderer/TextureAtlas.js +472 -0
- data/app/assets/javascripts/Renderer/TextureAtlasBuilder.js +133 -0
- data/app/assets/javascripts/Renderer/TextureMagnificationFilter.js +41 -0
- data/app/assets/javascripts/Renderer/TextureMinificationFilter.js +77 -0
- data/app/assets/javascripts/Renderer/TextureWrap.js +50 -0
- data/app/assets/javascripts/Renderer/UniformDatatype.js +218 -0
- data/app/assets/javascripts/Renderer/UniformState.js +799 -0
- data/app/assets/javascripts/Renderer/VertexArray.js +365 -0
- data/app/assets/javascripts/Renderer/VertexArrayFacade.js +574 -0
- data/app/assets/javascripts/Renderer/VertexLayout.js +49 -0
- data/app/assets/javascripts/Renderer/loadCubeMap.js +92 -0
- data/app/assets/javascripts/Renderer/package.json +6 -0
- data/app/assets/javascripts/Scene/AnimationCollection.js +249 -0
- data/app/assets/javascripts/Scene/ArcGisMapServerImageryProvider.js +384 -0
- data/app/assets/javascripts/Scene/Billboard.js +680 -0
- data/app/assets/javascripts/Scene/BillboardCollection.js +1209 -0
- data/app/assets/javascripts/Scene/BingMapsImageryProvider.js +460 -0
- data/app/assets/javascripts/Scene/BingMapsStyle.js +55 -0
- data/app/assets/javascripts/Scene/Camera.js +358 -0
- data/app/assets/javascripts/Scene/CameraColumbusViewMode.js +30 -0
- data/app/assets/javascripts/Scene/CameraController.js +1258 -0
- data/app/assets/javascripts/Scene/CameraEventAggregator.js +270 -0
- data/app/assets/javascripts/Scene/CameraEventType.js +53 -0
- data/app/assets/javascripts/Scene/CameraFlightPath.js +495 -0
- data/app/assets/javascripts/Scene/CentralBody.js +817 -0
- data/app/assets/javascripts/Scene/CentralBodySurface.js +1120 -0
- data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +107 -0
- data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +511 -0
- data/app/assets/javascripts/Scene/CompositePrimitive.js +454 -0
- data/app/assets/javascripts/Scene/CullingVolume.js +59 -0
- data/app/assets/javascripts/Scene/CustomSensorVolume.js +440 -0
- data/app/assets/javascripts/Scene/DiscardMissingTileImagePolicy.js +134 -0
- data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +412 -0
- data/app/assets/javascripts/Scene/EllipsoidTerrainProvider.js +182 -0
- data/app/assets/javascripts/Scene/FrameState.js +86 -0
- data/app/assets/javascripts/Scene/FrustumCommands.js +32 -0
- data/app/assets/javascripts/Scene/GeographicTilingScheme.js +265 -0
- data/app/assets/javascripts/Scene/HorizontalOrigin.js +39 -0
- data/app/assets/javascripts/Scene/Imagery.js +85 -0
- data/app/assets/javascripts/Scene/ImageryLayer.js +876 -0
- data/app/assets/javascripts/Scene/ImageryLayerCollection.js +403 -0
- data/app/assets/javascripts/Scene/ImageryProvider.js +185 -0
- data/app/assets/javascripts/Scene/ImageryProviderError.js +149 -0
- data/app/assets/javascripts/Scene/ImageryState.js +20 -0
- data/app/assets/javascripts/Scene/Label.js +706 -0
- data/app/assets/javascripts/Scene/LabelCollection.js +697 -0
- data/app/assets/javascripts/Scene/LabelStyle.js +39 -0
- data/app/assets/javascripts/Scene/Material.js +1177 -0
- data/app/assets/javascripts/Scene/NeverTileDiscardPolicy.js +38 -0
- data/app/assets/javascripts/Scene/OpenStreetMapImageryProvider.js +282 -0
- data/app/assets/javascripts/Scene/OrthographicFrustum.js +345 -0
- data/app/assets/javascripts/Scene/PerformanceDisplay.js +183 -0
- data/app/assets/javascripts/Scene/PerspectiveFrustum.js +239 -0
- data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +394 -0
- data/app/assets/javascripts/Scene/Polygon.js +886 -0
- data/app/assets/javascripts/Scene/Polyline.js +441 -0
- data/app/assets/javascripts/Scene/PolylineCollection.js +1532 -0
- data/app/assets/javascripts/Scene/Projections.js +93 -0
- data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +224 -0
- data/app/assets/javascripts/Scene/Scene.js +632 -0
- data/app/assets/javascripts/Scene/Scene.profile.js +8 -0
- data/app/assets/javascripts/Scene/SceneMode.js +51 -0
- data/app/assets/javascripts/Scene/SceneTransitioner.js +776 -0
- data/app/assets/javascripts/Scene/ScreenSpaceCameraController.js +1063 -0
- data/app/assets/javascripts/Scene/SensorVolumeCollection.js +192 -0
- data/app/assets/javascripts/Scene/SingleTileImageryProvider.js +295 -0
- data/app/assets/javascripts/Scene/SkyAtmosphere.js +239 -0
- data/app/assets/javascripts/Scene/SkyBox.js +231 -0
- data/app/assets/javascripts/Scene/TerrainProvider.js +229 -0
- data/app/assets/javascripts/Scene/TexturePool.js +154 -0
- data/app/assets/javascripts/Scene/Tile.js +322 -0
- data/app/assets/javascripts/Scene/TileDiscardPolicy.js +42 -0
- data/app/assets/javascripts/Scene/TileImagery.js +36 -0
- data/app/assets/javascripts/Scene/TileLoadQueue.js +123 -0
- data/app/assets/javascripts/Scene/TileMapServiceImageryProvider.js +337 -0
- data/app/assets/javascripts/Scene/TileReplacementQueue.js +139 -0
- data/app/assets/javascripts/Scene/TileState.js +19 -0
- data/app/assets/javascripts/Scene/TilingScheme.js +213 -0
- data/app/assets/javascripts/Scene/VerticalOrigin.js +39 -0
- data/app/assets/javascripts/Scene/ViewportQuad.js +256 -0
- data/app/assets/javascripts/Scene/WebMapServiceImageryProvider.js +374 -0
- data/app/assets/javascripts/Scene/WebMercatorTilingScheme.js +291 -0
- data/app/assets/javascripts/Scene/package.json +6 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.glsl +30 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionFS.js +31 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +68 -0
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +54 -0
- data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +927 -0
- data/app/assets/javascripts/Shaders/BuiltinFunctions.js +322 -0
- data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +106 -0
- data/app/assets/javascripts/Shaders/CentralBodyFS.js +82 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.glsl +20 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSDepth.js +22 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.glsl +29 -0
- data/app/assets/javascripts/Shaders/CentralBodyFSPole.js +28 -0
- data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +88 -0
- data/app/assets/javascripts/Shaders/CentralBodyVS.js +69 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.glsl +9 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSDepth.js +13 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.glsl +12 -0
- data/app/assets/javascripts/Shaders/CentralBodyVSPole.js +15 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +448 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.js +361 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +19 -0
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.js +20 -0
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +886 -0
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.js +586 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +126 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +95 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.glsl +14 -0
- data/app/assets/javascripts/Shaders/CustomSensorVolumeVS.js +18 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +40 -0
- data/app/assets/javascripts/Shaders/EllipsoidFS.js +38 -0
- data/app/assets/javascripts/Shaders/EllipsoidVS.glsl +26 -0
- data/app/assets/javascripts/Shaders/EllipsoidVS.js +16 -0
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.glsl +25 -0
- data/app/assets/javascripts/Shaders/Materials/AsphaltMaterial.js +23 -0
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/BlobMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.glsl +42 -0
- data/app/assets/javascripts/Shaders/Materials/BrickMaterial.js +36 -0
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.glsl +29 -0
- data/app/assets/javascripts/Shaders/Materials/BumpMapMaterial.js +27 -0
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.glsl +19 -0
- data/app/assets/javascripts/Shaders/Materials/CementMaterial.js +20 -0
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +38 -0
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +32 -0
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/DotMaterial.js +18 -0
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.glsl +23 -0
- data/app/assets/javascripts/Shaders/Materials/ErosionMaterial.js +24 -0
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/FacetMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.glsl +12 -0
- data/app/assets/javascripts/Shaders/Materials/FresnelMaterial.js +15 -0
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.glsl +28 -0
- data/app/assets/javascripts/Shaders/Materials/GrassMaterial.js +26 -0
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.glsl +19 -0
- data/app/assets/javascripts/Shaders/Materials/NormalMapMaterial.js +21 -0
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.glsl +13 -0
- data/app/assets/javascripts/Shaders/Materials/ReflectionMaterial.js +16 -0
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.glsl +14 -0
- data/app/assets/javascripts/Shaders/Materials/RefractionMaterial.js +17 -0
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.glsl +18 -0
- data/app/assets/javascripts/Shaders/Materials/RimLightingMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +29 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +26 -0
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/TieDyeMaterial.js +19 -0
- data/app/assets/javascripts/Shaders/Materials/Water.glsl +91 -0
- data/app/assets/javascripts/Shaders/Materials/Water.js +60 -0
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.glsl +36 -0
- data/app/assets/javascripts/Shaders/Materials/WoodMaterial.js +31 -0
- data/app/assets/javascripts/Shaders/Noise.glsl +453 -0
- data/app/assets/javascripts/Shaders/Noise.js +242 -0
- data/app/assets/javascripts/Shaders/PolygonFS.glsl +27 -0
- data/app/assets/javascripts/Shaders/PolygonFS.js +23 -0
- data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +6 -0
- data/app/assets/javascripts/Shaders/PolygonFSPick.js +11 -0
- data/app/assets/javascripts/Shaders/PolygonVS.glsl +38 -0
- data/app/assets/javascripts/Shaders/PolygonVS.js +39 -0
- data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +30 -0
- data/app/assets/javascripts/Shaders/PolygonVSPick.js +32 -0
- data/app/assets/javascripts/Shaders/PolylineFS.glsl +6 -0
- data/app/assets/javascripts/Shaders/PolylineFS.js +11 -0
- data/app/assets/javascripts/Shaders/PolylineVS.glsl +34 -0
- data/app/assets/javascripts/Shaders/PolylineVS.js +35 -0
- data/app/assets/javascripts/Shaders/Ray.glsl +532 -0
- data/app/assets/javascripts/Shaders/Ray.js +357 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +26 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +22 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +11 -0
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +14 -0
- data/app/assets/javascripts/Shaders/SensorVolume.glsl +43 -0
- data/app/assets/javascripts/Shaders/SensorVolume.js +31 -0
- data/app/assets/javascripts/Shaders/Shaders.profile.js +8 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +70 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +62 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.glsl +131 -0
- data/app/assets/javascripts/Shaders/SkyAtmosphereVS.js +115 -0
- data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +10 -0
- data/app/assets/javascripts/Shaders/SkyBoxFS.js +14 -0
- data/app/assets/javascripts/Shaders/SkyBoxVS.glsl +10 -0
- data/app/assets/javascripts/Shaders/SkyBoxVS.js +14 -0
- data/app/assets/javascripts/Shaders/ViewportQuadFS.glsl +16 -0
- data/app/assets/javascripts/Shaders/ViewportQuadFS.js +17 -0
- data/app/assets/javascripts/Shaders/ViewportQuadVS.glsl +10 -0
- data/app/assets/javascripts/Shaders/ViewportQuadVS.js +14 -0
- data/app/assets/javascripts/Shaders/package.json +6 -0
- data/app/assets/javascripts/ThirdParty/ThirdParty.profile.js +8 -0
- data/app/assets/javascripts/ThirdParty/Tween.js +678 -0
- data/app/assets/javascripts/ThirdParty/Uri.js +277 -0
- data/app/assets/javascripts/ThirdParty/measureText.js +197 -0
- data/app/assets/javascripts/ThirdParty/package.json +6 -0
- data/app/assets/javascripts/ThirdParty/sprintf.js +319 -0
- data/app/assets/javascripts/ThirdParty/when.js +748 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.css +175 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.html +52 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +1237 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +4 -0
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +349 -0
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.css +1 -0
- data/app/assets/javascripts/Widgets/Dojo/TimelineWidget.js +47 -0
- data/app/assets/javascripts/Widgets/Dojo/checkForChromeFrame.js +71 -0
- data/app/assets/javascripts/Widgets/Images/Bing_Logo_51x19_White.png +0 -0
- data/app/assets/javascripts/Widgets/Images/Cesium_Logo_overlay.png +0 -0
- data/app/assets/javascripts/Widgets/Images/TimelineIcons.png +0 -0
- data/app/assets/javascripts/Widgets/Images/ajax-loader.gif +0 -0
- data/app/assets/javascripts/Widgets/Images/animationBar.png +0 -0
- data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
- data/app/assets/javascripts/Widgets/Timeline.css +113 -0
- data/app/assets/javascripts/Widgets/Timeline.js +629 -0
- data/app/assets/javascripts/Widgets/TimelineHighlightRange.js +51 -0
- data/app/assets/javascripts/Widgets/TimelineTrack.js +54 -0
- data/app/assets/javascripts/Widgets/Widgets.profile.js +8 -0
- data/app/assets/javascripts/Widgets/package.json +6 -0
- data/app/assets/javascripts/Workers/Workers.profile.js +8 -0
- data/app/assets/javascripts/Workers/cesiumWorkerBootstrapper.js +2015 -0
- data/app/assets/javascripts/Workers/createTaskProcessorWorker.js +55 -0
- data/app/assets/javascripts/Workers/createVerticesFromExtent.js +24 -0
- data/app/assets/javascripts/Workers/package.json +6 -0
- data/app/assets/javascripts/copyrightHeader.js +22 -0
- data/app/assets/javascripts/main.js +10 -0
- data/app/assets/stylesheets/cesium.css +4 -0
- data/app/controllers/cesium_controller.rb +4 -0
- data/app/helpers/cesium_helper.rb +2 -0
- data/app/views/cesium/index.html.erb +3 -0
- data/config/routes.rb +3 -0
- data/lib/cesium.rb +4 -0
- data/lib/cesium/engine.rb +4 -0
- data/lib/cesium/version.rb +3 -0
- data/lib/tasks/cesium_tasks.rake +4 -0
- data/test/cesium_test.rb +7 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/adapters/jquery-adapter.js.coffee +4 -0
- data/test/dummy/app/assets/javascripts/app.js.coffee +11 -0
- data/test/dummy/app/assets/javascripts/application.js.coffee +73 -0
- data/test/dummy/app/assets/stylesheets/application.css +12 -0
- data/test/dummy/app/controllers/application_controller.rb +4 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +21 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/requirejs.yml +10 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/functional/cesium_controller_test.rb +9 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- data/test/unit/helpers/cesium_helper_test.rb +4 -0
- metadata +641 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
@import url('TimelineWidget.css');
|
|
2
|
+
|
|
3
|
+
.cw-node {
|
|
4
|
+
font-family: sans-serif;
|
|
5
|
+
font-size: 16px;
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
display: block;
|
|
8
|
+
position: relative;
|
|
9
|
+
top: 0;
|
|
10
|
+
left: 0;
|
|
11
|
+
width: 100%;
|
|
12
|
+
height: 100%;
|
|
13
|
+
-moz-user-select: none;
|
|
14
|
+
-webkit-user-select: none;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.cw-canvas {
|
|
18
|
+
display: block;
|
|
19
|
+
position: absolute;
|
|
20
|
+
top: 0;
|
|
21
|
+
left: 0;
|
|
22
|
+
width: 100%;
|
|
23
|
+
height: 100%;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.cw-timelineContainer {
|
|
27
|
+
position: absolute;
|
|
28
|
+
bottom: 0;
|
|
29
|
+
width: 100%;
|
|
30
|
+
height: 27px;
|
|
31
|
+
padding: 0;
|
|
32
|
+
overflow: hidden;
|
|
33
|
+
font-size: 14px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.cw-timeline {
|
|
37
|
+
margin: 0 2px;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.cw-animationIcon {
|
|
41
|
+
background-image: url('../Images/animationBar.png');
|
|
42
|
+
background-repeat: no-repeat;
|
|
43
|
+
width: 24px;
|
|
44
|
+
height: 24px;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.cw-bingIcon {
|
|
48
|
+
background-image: url('../Images/Bing_Logo_51x19_White.png');
|
|
49
|
+
background-repeat: no-repeat;
|
|
50
|
+
background-position: center;
|
|
51
|
+
width: 51px;
|
|
52
|
+
height: 24px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.cw-animReverse {
|
|
56
|
+
background-position: -24px 0;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.cw-animPause {
|
|
60
|
+
background-position: -72px 0;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
.cw-animPlay {
|
|
64
|
+
background-position: -120px 0;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.cw-animFast {
|
|
68
|
+
background-position: -144px 0;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.cw-animSlow {
|
|
72
|
+
background-position: -168px 0;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.cw-cesiumLogo {
|
|
76
|
+
display: block;
|
|
77
|
+
position: absolute;
|
|
78
|
+
bottom: 68px;
|
|
79
|
+
left: 5px;
|
|
80
|
+
text-decoration: none;
|
|
81
|
+
background-image: url(../Images/Cesium_Logo_overlay.png);
|
|
82
|
+
width: 118px;
|
|
83
|
+
height: 26px;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.cw-cesiumLogo img {
|
|
87
|
+
border: none;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.cw-animButtons {
|
|
91
|
+
display: block;
|
|
92
|
+
position: absolute;
|
|
93
|
+
bottom: 31px;
|
|
94
|
+
left: 6px;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.cw-speedIndicator {
|
|
98
|
+
opacity: 0;
|
|
99
|
+
background: rgba(42, 42, 42, 0.8);
|
|
100
|
+
color: #eee;
|
|
101
|
+
font-size: 12px;
|
|
102
|
+
z-index: 20;
|
|
103
|
+
padding: 5px 10px;
|
|
104
|
+
border-radius: 4px;
|
|
105
|
+
-moz-transition-property: opacity;
|
|
106
|
+
-moz-transition-duration: 0.2s;
|
|
107
|
+
-webkit-transition-property: opacity;
|
|
108
|
+
-webkit-transition-duration: 0.2s;
|
|
109
|
+
transition-property: opacity;
|
|
110
|
+
transition-duration: 0.2s;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.cw-animButtons:hover .cw-speedIndicator {
|
|
114
|
+
opacity: 1;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.cw-timeLabel {
|
|
118
|
+
display: block;
|
|
119
|
+
position: absolute;
|
|
120
|
+
bottom: 31px;
|
|
121
|
+
right: 6px;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.cw-viewIcon {
|
|
125
|
+
background-image: url('../Images/viewControlBar.png');
|
|
126
|
+
background-repeat: no-repeat;
|
|
127
|
+
width: 24px;
|
|
128
|
+
height: 24px;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.cw-view2D {
|
|
132
|
+
background-position: -24px 0;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.cw-view3D {
|
|
136
|
+
background-position: -48px 0;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.cw-viewColumbus {
|
|
140
|
+
background-position: -72px 0;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.cw-viewFullscreen {
|
|
144
|
+
background-position: -120px 0;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.cw-viewButtons {
|
|
148
|
+
display: block;
|
|
149
|
+
position: absolute;
|
|
150
|
+
top: 5px;
|
|
151
|
+
right: 5px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.cw-imagerySelector {
|
|
155
|
+
display: block;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.claro .dijitToggleButtonChecked .dijitButtonNode {
|
|
159
|
+
border: 1px solid #EA0;
|
|
160
|
+
box-shadow: 0 0 5px rgba(255, 170, 42, 1);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.cw-loading {
|
|
164
|
+
display: none;
|
|
165
|
+
position: absolute;
|
|
166
|
+
top: 50%;
|
|
167
|
+
left: 50%;
|
|
168
|
+
margin-top: -33px;
|
|
169
|
+
margin-left: -33px;
|
|
170
|
+
width: 66px;
|
|
171
|
+
height: 66px;
|
|
172
|
+
background-position: center;
|
|
173
|
+
background-repeat: no-repeat;
|
|
174
|
+
background-image: url(../Images/ajax-loader.gif);
|
|
175
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<div data-dojo-attach-point="cesiumNode" class="cw-node">
|
|
2
|
+
<canvas data-dojo-attach-point="canvas" class="cw-canvas"></canvas>
|
|
3
|
+
<div data-dojo-type="dijit.form.Button" data-dojo-attach-point="timeLabel"
|
|
4
|
+
data-dojo-props="'class':'cw-timeLabel', showLabel: true, label:''"></div>
|
|
5
|
+
<div class="cw-viewButtons">
|
|
6
|
+
<div data-dojo-attach-point="viewHomeButton" data-dojo-type="dijit.form.Button"
|
|
7
|
+
data-dojo-props="iconClass: 'cw-viewIcon', showLabel: false, label:'Home View'"></div>
|
|
8
|
+
<div data-dojo-attach-point="view2D" data-dojo-type="dijit.form.ToggleButton"
|
|
9
|
+
data-dojo-props="iconClass: 'cw-viewIcon cw-view2D', showLabel: false, label:'2D View'"></div>
|
|
10
|
+
<div data-dojo-attach-point="view3D" data-dojo-type="dijit.form.ToggleButton"
|
|
11
|
+
data-dojo-props="iconClass: 'cw-viewIcon cw-view3D', showLabel: false, checked: true, label:'3D View'"></div>
|
|
12
|
+
<div data-dojo-attach-point="viewColumbus" data-dojo-type="dijit.form.ToggleButton"
|
|
13
|
+
data-dojo-props="iconClass: 'cw-viewIcon cw-viewColumbus', showLabel: false, label:'Columbus View'"></div>
|
|
14
|
+
<div data-dojo-attach-point="viewFullscreen" data-dojo-type="dijit.form.Button"
|
|
15
|
+
data-dojo-props="iconClass: 'cw-viewIcon cw-viewFullscreen', showLabel: false, label:'Toggle Full Screen'"></div>
|
|
16
|
+
<div data-dojo-attach-point="imagery" data-dojo-type="dijit.form.DropDownButton"
|
|
17
|
+
data-dojo-props="iconClass: 'cw-bingIcon', showLabel: false, label:'Bing'">
|
|
18
|
+
<div data-dojo-type="dijit.TooltipDialog">
|
|
19
|
+
<span data-dojo-type="dijit.form.ToggleButton" data-dojo-attach-point="imageryAerial"
|
|
20
|
+
data-dojo-props="'class':'cw-imagerySelector', showLabel: true, checked: true, label:'Bing Maps Aerial'">
|
|
21
|
+
</span> <span data-dojo-type="dijit.form.ToggleButton" data-dojo-attach-point="imageryAerialWithLabels"
|
|
22
|
+
data-dojo-props="'class':'cw-imagerySelector', showLabel: true, label:'Bing Maps Aerial with Labels'"></span>
|
|
23
|
+
<span data-dojo-type="dijit.form.ToggleButton" data-dojo-attach-point="imageryRoad"
|
|
24
|
+
data-dojo-props="'class':'cw-imagerySelector', showLabel: true, label:'Bing Maps Road'"></span> <span
|
|
25
|
+
data-dojo-type="dijit.form.ToggleButton" data-dojo-attach-point="imagerySingleTile"
|
|
26
|
+
data-dojo-props="'class':'cw-imagerySelector', showLabel: true, label:'No Streaming Imagery'"></span>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</div>
|
|
30
|
+
<div class="cw-timelineContainer">
|
|
31
|
+
<div data-dojo-attach-point="timelineWidget" data-dojo-type="Cesium.TimelineWidget"
|
|
32
|
+
data-dojo-props="'class':'cw-timeline'"></div>
|
|
33
|
+
</div>
|
|
34
|
+
<div class="cw-animButtons">
|
|
35
|
+
<div data-dojo-attach-point="animReset" data-dojo-type="dijit.form.Button"
|
|
36
|
+
data-dojo-props="iconClass: 'cw-animationIcon', showLabel: false, label:'Reset'"></div>
|
|
37
|
+
<div data-dojo-attach-point="animReverse" data-dojo-type="dijit.form.ToggleButton"
|
|
38
|
+
data-dojo-props="iconClass: 'cw-animationIcon cw-animReverse', showLabel: false, label:'Play Reverse'"></div>
|
|
39
|
+
<div data-dojo-attach-point="animPause" data-dojo-type="dijit.form.ToggleButton"
|
|
40
|
+
data-dojo-props="iconClass: 'cw-animationIcon cw-animPause', showLabel: false, label:'Pause'"></div>
|
|
41
|
+
<div data-dojo-attach-point="animPlay" data-dojo-type="dijit.form.ToggleButton"
|
|
42
|
+
data-dojo-props="iconClass: 'cw-animationIcon cw-animPlay', showLabel: false, checked: true, label:'Play'"></div>
|
|
43
|
+
<div data-dojo-attach-point="animSlow" data-dojo-type="dijit.form.Button"
|
|
44
|
+
data-dojo-props="iconClass: 'cw-animationIcon cw-animSlow', showLabel: false, label:'Play Slower'"></div>
|
|
45
|
+
<div data-dojo-attach-point="animFast" data-dojo-type="dijit.form.Button"
|
|
46
|
+
data-dojo-props="iconClass: 'cw-animationIcon cw-animFast', showLabel: false, label:'Play Faster'"></div>
|
|
47
|
+
<span data-dojo-attach-point="speedIndicator" class="cw-speedIndicator"></span>
|
|
48
|
+
</div>
|
|
49
|
+
<a class="cw-cesiumLogo" data-dojo-attach-point="cesiumLogo" href="http://cesium.agi.com/" target="_blank"></a> <span
|
|
50
|
+
data-dojo-attach-point="containerNode"></span>
|
|
51
|
+
<div class="cw-loading" data-dojo-attach-point="loading"></div>
|
|
52
|
+
</div>
|
|
@@ -0,0 +1,1237 @@
|
|
|
1
|
+
/*global define,console*/
|
|
2
|
+
define([
|
|
3
|
+
'require',
|
|
4
|
+
'dojo/_base/declare',
|
|
5
|
+
'dojo/ready',
|
|
6
|
+
'dojo/_base/lang',
|
|
7
|
+
'dojo/_base/event',
|
|
8
|
+
'dojo/dom-style',
|
|
9
|
+
'dojo/on',
|
|
10
|
+
'dijit/_WidgetBase',
|
|
11
|
+
'dijit/_TemplatedMixin',
|
|
12
|
+
'dijit/_WidgetsInTemplateMixin',
|
|
13
|
+
'dijit/form/Button',
|
|
14
|
+
'dijit/form/ToggleButton',
|
|
15
|
+
'dijit/form/DropDownButton',
|
|
16
|
+
'dijit/TooltipDialog',
|
|
17
|
+
'./TimelineWidget',
|
|
18
|
+
'../../Core/defaultValue',
|
|
19
|
+
'../../Core/loadJson',
|
|
20
|
+
'../../Core/BoundingRectangle',
|
|
21
|
+
'../../Core/Clock',
|
|
22
|
+
'../../Core/ClockStep',
|
|
23
|
+
'../../Core/ClockRange',
|
|
24
|
+
'../../Core/Extent',
|
|
25
|
+
'../../Core/AnimationController',
|
|
26
|
+
'../../Core/Ellipsoid',
|
|
27
|
+
'../../Core/Iso8601',
|
|
28
|
+
'../../Core/Fullscreen',
|
|
29
|
+
'../../Core/computeSunPosition',
|
|
30
|
+
'../../Core/ScreenSpaceEventHandler',
|
|
31
|
+
'../../Core/FeatureDetection',
|
|
32
|
+
'../../Core/ScreenSpaceEventType',
|
|
33
|
+
'../../Core/Cartesian2',
|
|
34
|
+
'../../Core/Cartesian3',
|
|
35
|
+
'../../Core/JulianDate',
|
|
36
|
+
'../../Core/DefaultProxy',
|
|
37
|
+
'../../Core/Transforms',
|
|
38
|
+
'../../Core/requestAnimationFrame',
|
|
39
|
+
'../../Core/Color',
|
|
40
|
+
'../../Core/Matrix4',
|
|
41
|
+
'../../Core/Math',
|
|
42
|
+
'../../Scene/PerspectiveFrustum',
|
|
43
|
+
'../../Scene/Material',
|
|
44
|
+
'../../Scene/Scene',
|
|
45
|
+
'../../Scene/CameraColumbusViewMode',
|
|
46
|
+
'../../Scene/CentralBody',
|
|
47
|
+
'../../Scene/BingMapsImageryProvider',
|
|
48
|
+
'../../Scene/BingMapsStyle',
|
|
49
|
+
'../../Scene/SceneTransitioner',
|
|
50
|
+
'../../Scene/SingleTileImageryProvider',
|
|
51
|
+
'../../Scene/PerformanceDisplay',
|
|
52
|
+
'../../Scene/SceneMode',
|
|
53
|
+
'../../Scene/SkyBox',
|
|
54
|
+
'../../Scene/SkyAtmosphere',
|
|
55
|
+
'../../DynamicScene/processCzml',
|
|
56
|
+
'../../DynamicScene/DynamicObjectView',
|
|
57
|
+
'../../DynamicScene/DynamicObjectCollection',
|
|
58
|
+
'../../DynamicScene/VisualizerCollection',
|
|
59
|
+
'dojo/text!./CesiumViewerWidget.html'
|
|
60
|
+
], function (
|
|
61
|
+
require,
|
|
62
|
+
declare,
|
|
63
|
+
ready,
|
|
64
|
+
lang,
|
|
65
|
+
event,
|
|
66
|
+
domStyle,
|
|
67
|
+
on,
|
|
68
|
+
_WidgetBase,
|
|
69
|
+
_TemplatedMixin,
|
|
70
|
+
_WidgetsInTemplateMixin,
|
|
71
|
+
Button,
|
|
72
|
+
ToggleButton,
|
|
73
|
+
DropDownButton,
|
|
74
|
+
TooltipDialog,
|
|
75
|
+
TimelineWidget,
|
|
76
|
+
defaultValue,
|
|
77
|
+
loadJson,
|
|
78
|
+
BoundingRectangle,
|
|
79
|
+
Clock,
|
|
80
|
+
ClockStep,
|
|
81
|
+
ClockRange,
|
|
82
|
+
Extent,
|
|
83
|
+
AnimationController,
|
|
84
|
+
Ellipsoid,
|
|
85
|
+
Iso8601,
|
|
86
|
+
Fullscreen,
|
|
87
|
+
computeSunPosition,
|
|
88
|
+
ScreenSpaceEventHandler,
|
|
89
|
+
FeatureDetection,
|
|
90
|
+
ScreenSpaceEventType,
|
|
91
|
+
Cartesian2,
|
|
92
|
+
Cartesian3,
|
|
93
|
+
JulianDate,
|
|
94
|
+
DefaultProxy,
|
|
95
|
+
Transforms,
|
|
96
|
+
requestAnimationFrame,
|
|
97
|
+
Color,
|
|
98
|
+
Matrix4,
|
|
99
|
+
CesiumMath,
|
|
100
|
+
PerspectiveFrustum,
|
|
101
|
+
Material,
|
|
102
|
+
Scene,
|
|
103
|
+
CameraColumbusViewMode,
|
|
104
|
+
CentralBody,
|
|
105
|
+
BingMapsImageryProvider,
|
|
106
|
+
BingMapsStyle,
|
|
107
|
+
SceneTransitioner,
|
|
108
|
+
SingleTileImageryProvider,
|
|
109
|
+
PerformanceDisplay,
|
|
110
|
+
SceneMode,
|
|
111
|
+
SkyBox,
|
|
112
|
+
SkyAtmosphere,
|
|
113
|
+
processCzml,
|
|
114
|
+
DynamicObjectView,
|
|
115
|
+
DynamicObjectCollection,
|
|
116
|
+
VisualizerCollection,
|
|
117
|
+
template) {
|
|
118
|
+
"use strict";
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* This Dojo widget wraps the full functionality of Cesium Viewer.
|
|
122
|
+
*
|
|
123
|
+
* @class CesiumViewerWidget
|
|
124
|
+
* @param {Object} options - A list of options to pre-configure the widget. Names matching member fields/functions will override the default values.
|
|
125
|
+
*/
|
|
126
|
+
return declare('Cesium.CesiumViewerWidget', [_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin],
|
|
127
|
+
/** @lends CesiumViewerWidget */
|
|
128
|
+
{
|
|
129
|
+
// for Dojo use only
|
|
130
|
+
templateString : template,
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Enable streaming Imagery. This is read-only after construction.
|
|
134
|
+
*
|
|
135
|
+
* @type {Boolean}
|
|
136
|
+
* @memberof CesiumViewerWidget.prototype
|
|
137
|
+
* @default true
|
|
138
|
+
* @see CesiumViewerWidget#enableStreamingImagery
|
|
139
|
+
*/
|
|
140
|
+
useStreamingImagery : true,
|
|
141
|
+
/**
|
|
142
|
+
* The map style for streaming imagery. This is read-only after construction.
|
|
143
|
+
*
|
|
144
|
+
* @type {BingMapsStyle}
|
|
145
|
+
* @memberof CesiumViewerWidget.prototype
|
|
146
|
+
* @default {@link BingMapsStyle.AERIAL}
|
|
147
|
+
* @see CesiumViewerWidget#setStreamingImageryMapStyle
|
|
148
|
+
*/
|
|
149
|
+
mapStyle : BingMapsStyle.AERIAL,
|
|
150
|
+
/**
|
|
151
|
+
* The URL for a daytime image on the globe.
|
|
152
|
+
*
|
|
153
|
+
* @type {String}
|
|
154
|
+
* @memberof CesiumViewerWidget.prototype
|
|
155
|
+
*/
|
|
156
|
+
dayImageUrl : undefined,
|
|
157
|
+
/**
|
|
158
|
+
* The base URL for the sky box.
|
|
159
|
+
*
|
|
160
|
+
* @type {String}
|
|
161
|
+
* @memberof CesiumViewerWidget.prototype
|
|
162
|
+
*/
|
|
163
|
+
skyBoxBaseUrl : undefined,
|
|
164
|
+
/**
|
|
165
|
+
* Determines if a sky box with stars is drawn around the globe. This is read-only after construction.
|
|
166
|
+
*
|
|
167
|
+
* @type {Boolean}
|
|
168
|
+
* @memberof CesiumViewerWidget.prototype
|
|
169
|
+
* @default true
|
|
170
|
+
* @see SkyBox
|
|
171
|
+
*/
|
|
172
|
+
showSkyBox : true,
|
|
173
|
+
/**
|
|
174
|
+
* An object containing settings supplied by the end user, typically from the query string
|
|
175
|
+
* of the URL of the page with the widget.
|
|
176
|
+
*
|
|
177
|
+
* @type {Object}
|
|
178
|
+
* @memberof CesiumViewerWidget.prototype
|
|
179
|
+
* @example
|
|
180
|
+
* var ioQuery = require('dojo/io-query');
|
|
181
|
+
* var endUserOptions = {};
|
|
182
|
+
* if (window.location.search) {
|
|
183
|
+
* endUserOptions = ioQuery.queryToObject(window.location.search.substring(1));
|
|
184
|
+
* }
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* var endUserOptions = {
|
|
188
|
+
* 'source' : 'file.czml', // The relative URL of the CZML file to load at startup.
|
|
189
|
+
* 'lookAt' : '123abc', // The CZML ID of the object to track at startup.
|
|
190
|
+
* 'stats' : 1, // Enable the FPS performance display.
|
|
191
|
+
* 'debug' : 1, // Full WebGL error reporting at substantial performance cost.
|
|
192
|
+
* };
|
|
193
|
+
*/
|
|
194
|
+
endUserOptions : {},
|
|
195
|
+
/**
|
|
196
|
+
* Check for WebGL errors after every WebGL API call. Enabling this debugging feature
|
|
197
|
+
* comes at a substantial performance cost, halting and restarting the graphics
|
|
198
|
+
* pipeline hundreds of times per frame. But it can uncover problems that are otherwise
|
|
199
|
+
* very difficult to diagnose.
|
|
200
|
+
* This property is read-only after construction.
|
|
201
|
+
*
|
|
202
|
+
* @type {Boolean}
|
|
203
|
+
* @memberof CesiumViewerWidget.prototype
|
|
204
|
+
* @default false
|
|
205
|
+
*/
|
|
206
|
+
enableWebGLDebugging: false,
|
|
207
|
+
/**
|
|
208
|
+
* Allow the user to drag-and-drop CZML files into this widget.
|
|
209
|
+
* This is read-only after construction.
|
|
210
|
+
*
|
|
211
|
+
* @type {Boolean}
|
|
212
|
+
* @memberof CesiumViewerWidget.prototype
|
|
213
|
+
* @default false
|
|
214
|
+
*/
|
|
215
|
+
enableDragDrop: false,
|
|
216
|
+
/**
|
|
217
|
+
* Register this widget's resize handler to get called every time the browser window
|
|
218
|
+
* resize event fires. This is read-only after construction. Generally this should
|
|
219
|
+
* be true for full-screen widgets, and true for
|
|
220
|
+
* fluid layouts where the widget is likely to change size at the same time as the
|
|
221
|
+
* window. The exception is, if you use a Dojo layout where this widget exists inside
|
|
222
|
+
* a Dojo ContentPane or similar, you should set this to false, because Dojo will perform
|
|
223
|
+
* its own layout calculations and call this widget's resize handler automatically.
|
|
224
|
+
* This can also be false for a fixed-size widget.
|
|
225
|
+
*
|
|
226
|
+
* If unsure, test the widget with this set to false, and if window resizes cause the
|
|
227
|
+
* globe to stretch, change this to true.
|
|
228
|
+
*
|
|
229
|
+
* @type {Boolean}
|
|
230
|
+
* @memberof CesiumViewerWidget.prototype
|
|
231
|
+
* @default true
|
|
232
|
+
* @see CesiumViewerWidget#resize
|
|
233
|
+
*/
|
|
234
|
+
resizeWidgetOnWindowResize: true,
|
|
235
|
+
/**
|
|
236
|
+
* The HTML element to place into fullscreen mode when the corresponding
|
|
237
|
+
* button is pressed. If undefined, only the widget itself will
|
|
238
|
+
* go into fullscreen mode. By specifying another container, such
|
|
239
|
+
* as document.body, this property allows an application to retain
|
|
240
|
+
* any overlaid or surrounding elements when in fullscreen.
|
|
241
|
+
*
|
|
242
|
+
* @type {Object}
|
|
243
|
+
* @memberof CesiumViewerWidget.prototype
|
|
244
|
+
* @default undefined
|
|
245
|
+
*/
|
|
246
|
+
fullscreenElement : undefined,
|
|
247
|
+
|
|
248
|
+
// for Dojo use only
|
|
249
|
+
constructor : function() {
|
|
250
|
+
this.ellipsoid = Ellipsoid.WGS84;
|
|
251
|
+
},
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* This function will get a callback in the event of setup failure, likely indicating
|
|
255
|
+
* a problem with WebGL support or the availability of a GL context.
|
|
256
|
+
*
|
|
257
|
+
* @function
|
|
258
|
+
* @memberof CesiumViewerWidget.prototype
|
|
259
|
+
* @param {Object} widget - A reference to this widget
|
|
260
|
+
* @param {Object} error - The exception that was thrown during setup
|
|
261
|
+
*/
|
|
262
|
+
onSetupError : function(widget, error) {
|
|
263
|
+
console.error(error);
|
|
264
|
+
},
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* This function must be called when the widget changes size. It updates the canvas
|
|
268
|
+
* size, camera aspect ratio, and viewport size.
|
|
269
|
+
*
|
|
270
|
+
* @function
|
|
271
|
+
* @memberof CesiumViewerWidget.prototype
|
|
272
|
+
* @see CesiumViewerWidget#resizeWidgetOnWindowResize
|
|
273
|
+
*/
|
|
274
|
+
resize : function() {
|
|
275
|
+
var width = this.canvas.clientWidth, height = this.canvas.clientHeight;
|
|
276
|
+
|
|
277
|
+
if (typeof this.scene === 'undefined' || (this.canvas.width === width && this.canvas.height === height)) {
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
this.canvas.width = width;
|
|
282
|
+
this.canvas.height = height;
|
|
283
|
+
|
|
284
|
+
var frustum = this.scene.getCamera().frustum;
|
|
285
|
+
if (typeof frustum.aspectRatio !== 'undefined') {
|
|
286
|
+
frustum.aspectRatio = width / height;
|
|
287
|
+
} else {
|
|
288
|
+
frustum.top = frustum.right * (height / width);
|
|
289
|
+
frustum.bottom = -frustum.top;
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Have the camera track a particular object based on the result of a pick.
|
|
295
|
+
*
|
|
296
|
+
* @function
|
|
297
|
+
* @memberof CesiumViewerWidget.prototype
|
|
298
|
+
* @param {Object} selectedObject - The object to track, or <code>undefined</code> to stop tracking.
|
|
299
|
+
*/
|
|
300
|
+
centerCameraOnPick : function(selectedObject) {
|
|
301
|
+
this.centerCameraOnObject(typeof selectedObject !== 'undefined' ? selectedObject.dynamicObject : undefined);
|
|
302
|
+
},
|
|
303
|
+
|
|
304
|
+
_viewFromTo : undefined,
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* Have the camera track a particular object.
|
|
308
|
+
*
|
|
309
|
+
* @function
|
|
310
|
+
* @memberof CesiumViewerWidget.prototype
|
|
311
|
+
* @param {Object} selectedObject - The object to track, or <code>undefined</code> to stop tracking.
|
|
312
|
+
*/
|
|
313
|
+
centerCameraOnObject : function(selectedObject) {
|
|
314
|
+
if (typeof selectedObject !== 'undefined' && typeof selectedObject.position !== 'undefined') {
|
|
315
|
+
var viewFromTo = this._viewFromTo;
|
|
316
|
+
if (typeof viewFromTo === 'undefined') {
|
|
317
|
+
this._viewFromTo = viewFromTo = new DynamicObjectView(selectedObject, this.scene, this.ellipsoid);
|
|
318
|
+
} else {
|
|
319
|
+
viewFromTo.dynamicObject = selectedObject;
|
|
320
|
+
}
|
|
321
|
+
} else {
|
|
322
|
+
this._viewFromTo = undefined;
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Override this function to be notified when an object is selected (left-click).
|
|
328
|
+
*
|
|
329
|
+
* @function
|
|
330
|
+
* @memberof CesiumViewerWidget.prototype
|
|
331
|
+
* @param {Object} selectedObject - The object that was selected, or <code>undefined</code> to de-select.
|
|
332
|
+
*/
|
|
333
|
+
onObjectSelected : undefined,
|
|
334
|
+
/**
|
|
335
|
+
* Override this function to be notified when an object is right-clicked.
|
|
336
|
+
*
|
|
337
|
+
* @function
|
|
338
|
+
* @memberof CesiumViewerWidget.prototype
|
|
339
|
+
* @param {Object} selectedObject - The object that was selected, or <code>undefined</code> to de-select.
|
|
340
|
+
*/
|
|
341
|
+
onObjectRightClickSelected : undefined,
|
|
342
|
+
/**
|
|
343
|
+
* Override this function to be notified when an object is left-double-clicked.
|
|
344
|
+
*
|
|
345
|
+
* @function
|
|
346
|
+
* @memberof CesiumViewerWidget.prototype
|
|
347
|
+
* @param {Object} selectedObject - The object that was selected, or <code>undefined</code> to de-select.
|
|
348
|
+
*/
|
|
349
|
+
onObjectLeftDoubleClickSelected : undefined,
|
|
350
|
+
/**
|
|
351
|
+
* Override this function to be notified when an object hovered by the mouse.
|
|
352
|
+
*
|
|
353
|
+
* @function
|
|
354
|
+
* @memberof CesiumViewerWidget.prototype
|
|
355
|
+
* @param {Object} selectedObject - The object that was hovered, or <code>undefined</code> if the mouse moved off.
|
|
356
|
+
*/
|
|
357
|
+
onObjectMousedOver : undefined,
|
|
358
|
+
/**
|
|
359
|
+
* Override this function to be notified when the left mouse button is pressed down.
|
|
360
|
+
*
|
|
361
|
+
* @function
|
|
362
|
+
* @memberof CesiumViewerWidget.prototype
|
|
363
|
+
* @param {Object} The object with the position of the mouse.
|
|
364
|
+
*/
|
|
365
|
+
onLeftMouseDown : undefined,
|
|
366
|
+
/**
|
|
367
|
+
* Override this function to be notified when the left mouse button is released.
|
|
368
|
+
*
|
|
369
|
+
* @function
|
|
370
|
+
* @memberof CesiumViewerWidget.prototype
|
|
371
|
+
* @param {Object} The object with the position of the mouse.
|
|
372
|
+
*/
|
|
373
|
+
onLeftMouseUp : undefined,
|
|
374
|
+
/**
|
|
375
|
+
* Override this function to be notified when the right mouse button is pressed down.
|
|
376
|
+
*
|
|
377
|
+
* @function
|
|
378
|
+
* @memberof CesiumViewerWidget.prototype
|
|
379
|
+
* @param {Object} The object with the position of the mouse.
|
|
380
|
+
*/
|
|
381
|
+
onRightMouseDown : undefined,
|
|
382
|
+
/**
|
|
383
|
+
* Override this function to be notified when the right mouse button is released.
|
|
384
|
+
*
|
|
385
|
+
* @function
|
|
386
|
+
* @memberof CesiumViewerWidget.prototype
|
|
387
|
+
* @param {Object} The object with the position of the mouse.
|
|
388
|
+
*/
|
|
389
|
+
onRightMouseUp : undefined,
|
|
390
|
+
/**
|
|
391
|
+
* Override this function to be notified when the left mouse button is dragged.
|
|
392
|
+
*
|
|
393
|
+
* @function
|
|
394
|
+
* @memberof CesiumViewerWidget.prototype
|
|
395
|
+
* @param {Object} The object with the start and end position of the mouse.
|
|
396
|
+
*/
|
|
397
|
+
onLeftDrag : undefined,
|
|
398
|
+
/**
|
|
399
|
+
* Override this function to be notified when the right mouse button is dragged or mouse wheel is zoomed.
|
|
400
|
+
*
|
|
401
|
+
* @function
|
|
402
|
+
* @memberof CesiumViewerWidget.prototype
|
|
403
|
+
* @param {Object} The object with the start and end position of the mouse.
|
|
404
|
+
*/
|
|
405
|
+
onZoom : undefined,
|
|
406
|
+
|
|
407
|
+
_camera3D : undefined,
|
|
408
|
+
|
|
409
|
+
_handleLeftClick : function(e) {
|
|
410
|
+
if (typeof this.onObjectSelected !== 'undefined') {
|
|
411
|
+
// Fire the selection event, regardless if it's a duplicate,
|
|
412
|
+
// because the client may want to react to re-selection in some way.
|
|
413
|
+
this.selectedObject = this.scene.pick(e.position);
|
|
414
|
+
this.onObjectSelected(this.selectedObject);
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
|
|
418
|
+
_handleRightClick : function(e) {
|
|
419
|
+
if (typeof this.onObjectRightClickSelected !== 'undefined') {
|
|
420
|
+
// Fire the selection event, regardless if it's a duplicate,
|
|
421
|
+
// because the client may want to react to re-selection in some way.
|
|
422
|
+
this.selectedObject = this.scene.pick(e.position);
|
|
423
|
+
this.onObjectRightClickSelected(this.selectedObject);
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
|
|
427
|
+
_handleLeftDoubleClick : function(e) {
|
|
428
|
+
if (typeof this.onObjectLeftDoubleClickSelected !== 'undefined') {
|
|
429
|
+
// Fire the selection event, regardless if it's a duplicate,
|
|
430
|
+
// because the client may want to react to re-selection in some way.
|
|
431
|
+
this.selectedObject = this.scene.pick(e.position);
|
|
432
|
+
this.onObjectLeftDoubleClickSelected(this.selectedObject);
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
|
|
436
|
+
_handleMouseMove : function(movement) {
|
|
437
|
+
if (typeof this.onObjectMousedOver !== 'undefined') {
|
|
438
|
+
// Don't fire multiple times for the same object as the mouse travels around the screen.
|
|
439
|
+
var mousedOverObject = this.scene.pick(movement.endPosition);
|
|
440
|
+
if (this.mousedOverObject !== mousedOverObject) {
|
|
441
|
+
this.mousedOverObject = mousedOverObject;
|
|
442
|
+
this.onObjectMousedOver(mousedOverObject);
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
if (true === this.leftDown && typeof this.onLeftDrag !== 'undefined') {
|
|
446
|
+
this.onLeftDrag(movement);
|
|
447
|
+
} else if (true === this.rightDown && typeof this.onZoom !== 'undefined') {
|
|
448
|
+
this.onZoom(movement);
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
|
|
452
|
+
_handleRightDown : function(e) {
|
|
453
|
+
this.rightDown = true;
|
|
454
|
+
if (typeof this.onRightMouseDown !== 'undefined') {
|
|
455
|
+
this.onRightMouseDown(e);
|
|
456
|
+
}
|
|
457
|
+
},
|
|
458
|
+
|
|
459
|
+
_handleRightUp : function(e) {
|
|
460
|
+
this.rightDown = false;
|
|
461
|
+
if (typeof this.onRightMouseUp !== 'undefined') {
|
|
462
|
+
this.onRightMouseUp(e);
|
|
463
|
+
}
|
|
464
|
+
},
|
|
465
|
+
|
|
466
|
+
_handleLeftDown : function(e) {
|
|
467
|
+
this.leftDown = true;
|
|
468
|
+
if (typeof this.onLeftMouseDown !== 'undefined') {
|
|
469
|
+
this.onLeftMouseDown(e);
|
|
470
|
+
}
|
|
471
|
+
},
|
|
472
|
+
|
|
473
|
+
_handleLeftUp : function(e) {
|
|
474
|
+
this.leftDown = false;
|
|
475
|
+
if (typeof this.onLeftMouseUp !== 'undefined') {
|
|
476
|
+
this.onLeftMouseUp(e);
|
|
477
|
+
}
|
|
478
|
+
},
|
|
479
|
+
|
|
480
|
+
_handleWheel : function(e) {
|
|
481
|
+
if (typeof this.onZoom !== 'undefined') {
|
|
482
|
+
this.onZoom(e);
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
|
|
486
|
+
_updateSpeedIndicator : function() {
|
|
487
|
+
if (this.animationController.isAnimating()) {
|
|
488
|
+
this.speedIndicator.innerHTML = this.clock.multiplier + 'x realtime';
|
|
489
|
+
} else {
|
|
490
|
+
this.speedIndicator.innerHTML = this.clock.multiplier + 'x realtime (paused)';
|
|
491
|
+
}
|
|
492
|
+
},
|
|
493
|
+
|
|
494
|
+
/**
|
|
495
|
+
* Apply the animation settings from a CZML buffer.
|
|
496
|
+
* @function
|
|
497
|
+
* @memberof CesiumViewerWidget.prototype
|
|
498
|
+
*/
|
|
499
|
+
setTimeFromBuffer : function() {
|
|
500
|
+
var clock = this.clock;
|
|
501
|
+
|
|
502
|
+
this.animReverse.set('checked', false);
|
|
503
|
+
this.animPause.set('checked', true);
|
|
504
|
+
this.animPlay.set('checked', false);
|
|
505
|
+
|
|
506
|
+
var availability = this.dynamicObjectCollection.computeAvailability();
|
|
507
|
+
if (availability.start.equals(Iso8601.MINIMUM_VALUE)) {
|
|
508
|
+
clock.startTime = new JulianDate();
|
|
509
|
+
clock.stopTime = clock.startTime.addDays(1);
|
|
510
|
+
clock.clockRange = ClockRange.UNBOUNDED;
|
|
511
|
+
} else {
|
|
512
|
+
clock.startTime = availability.start;
|
|
513
|
+
clock.stopTime = availability.stop;
|
|
514
|
+
clock.clockRange = ClockRange.LOOP;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
clock.multiplier = 60;
|
|
518
|
+
clock.currentTime = clock.startTime;
|
|
519
|
+
this.timelineControl.zoomTo(clock.startTime, clock.stopTime);
|
|
520
|
+
},
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* Removes all CZML data from the viewer.
|
|
524
|
+
*
|
|
525
|
+
* @function
|
|
526
|
+
* @memberof CesiumViewerWidget.prototype
|
|
527
|
+
*/
|
|
528
|
+
removeAllCzml : function() {
|
|
529
|
+
this.centerCameraOnObject(undefined);
|
|
530
|
+
//CZML_TODO visualizers.removeAllPrimitives(); is not really needed here, but right now visualizers
|
|
531
|
+
//cache data indefinitely and removeAll is the only way to get rid of it.
|
|
532
|
+
//while there are no visual differences, removeAll cleans the cache and improves performance
|
|
533
|
+
this.visualizers.removeAllPrimitives();
|
|
534
|
+
this.dynamicObjectCollection.clear();
|
|
535
|
+
},
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Add CZML data to the viewer.
|
|
539
|
+
*
|
|
540
|
+
* @function
|
|
541
|
+
* @memberof CesiumViewerWidget.prototype
|
|
542
|
+
* @param {CZML} czml - The CZML (as objects) to be processed and added to the viewer.
|
|
543
|
+
* @param {string} source - The filename or URI that was the source of the CZML collection.
|
|
544
|
+
* @param {string} lookAt - Optional. The ID of the object to center the camera on.
|
|
545
|
+
* @see CesiumViewerWidget#loadCzml
|
|
546
|
+
*/
|
|
547
|
+
addCzml : function(czml, source, lookAt) {
|
|
548
|
+
processCzml(czml, this.dynamicObjectCollection, source);
|
|
549
|
+
this.setTimeFromBuffer();
|
|
550
|
+
if (typeof lookAt !== 'undefined') {
|
|
551
|
+
var lookAtObject = this.dynamicObjectCollection.getObject(lookAt);
|
|
552
|
+
this.centerCameraOnObject(lookAtObject);
|
|
553
|
+
}
|
|
554
|
+
},
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* Asynchronously load and add CZML data to the viewer.
|
|
558
|
+
*
|
|
559
|
+
* @function
|
|
560
|
+
* @memberof CesiumViewerWidget.prototype
|
|
561
|
+
* @param {string} source - The URI to load the CZML from.
|
|
562
|
+
* @param {string} lookAt - Optional. The ID of the object to center the camera on.
|
|
563
|
+
* @see CesiumViewerWidget#addCzml
|
|
564
|
+
*/
|
|
565
|
+
loadCzml : function(source, lookAt) {
|
|
566
|
+
var widget = this;
|
|
567
|
+
widget._setLoading(true);
|
|
568
|
+
loadJson(source).then(function(czml) {
|
|
569
|
+
widget.addCzml(czml, source, lookAt);
|
|
570
|
+
widget._setLoading(false);
|
|
571
|
+
},
|
|
572
|
+
function(error) {
|
|
573
|
+
widget._setLoading(false);
|
|
574
|
+
console.error(error);
|
|
575
|
+
window.alert(error);
|
|
576
|
+
});
|
|
577
|
+
},
|
|
578
|
+
|
|
579
|
+
/**
|
|
580
|
+
* This function is called when files are dropped on the widget, if drag-and-drop is enabled.
|
|
581
|
+
*
|
|
582
|
+
* @function
|
|
583
|
+
* @memberof CesiumViewerWidget.prototype
|
|
584
|
+
* @param {Object} event - The drag-and-drop event containing the dropped file(s).
|
|
585
|
+
*/
|
|
586
|
+
handleDrop : function(event) {
|
|
587
|
+
event.stopPropagation(); // Stops some browsers from redirecting.
|
|
588
|
+
event.preventDefault();
|
|
589
|
+
|
|
590
|
+
var widget = this;
|
|
591
|
+
widget._setLoading(true);
|
|
592
|
+
widget.removeAllCzml();
|
|
593
|
+
|
|
594
|
+
var files = event.dataTransfer.files;
|
|
595
|
+
var f = files[0];
|
|
596
|
+
var reader = new FileReader();
|
|
597
|
+
reader.onload = function(evt) {
|
|
598
|
+
widget.addCzml(JSON.parse(evt.target.result), f.name);
|
|
599
|
+
widget._setLoading(false);
|
|
600
|
+
};
|
|
601
|
+
reader.readAsText(f);
|
|
602
|
+
},
|
|
603
|
+
|
|
604
|
+
_started : false,
|
|
605
|
+
|
|
606
|
+
/**
|
|
607
|
+
* Call this after placing the widget in the DOM, to initialize the WebGL context,
|
|
608
|
+
* wire up event callbacks, begin requesting CZML, imagery, etc.
|
|
609
|
+
*
|
|
610
|
+
* @function
|
|
611
|
+
* @memberof CesiumViewerWidget.prototype
|
|
612
|
+
* @see CesiumViewerWidget#autoStartRenderLoop
|
|
613
|
+
*/
|
|
614
|
+
startup : function() {
|
|
615
|
+
if (this._started) {
|
|
616
|
+
return;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
var canvas = this.canvas, ellipsoid = this.ellipsoid, scene, widget = this;
|
|
620
|
+
|
|
621
|
+
try {
|
|
622
|
+
scene = this.scene = new Scene(canvas);
|
|
623
|
+
} catch (ex) {
|
|
624
|
+
if (typeof this.onSetupError !== 'undefined') {
|
|
625
|
+
this.onSetupError(this, ex);
|
|
626
|
+
}
|
|
627
|
+
return;
|
|
628
|
+
}
|
|
629
|
+
this._started = true;
|
|
630
|
+
|
|
631
|
+
this.resize();
|
|
632
|
+
|
|
633
|
+
on(canvas, 'contextmenu', event.stop);
|
|
634
|
+
on(canvas, 'selectstart', event.stop);
|
|
635
|
+
|
|
636
|
+
if (typeof widget.endUserOptions.debug !== 'undefined' && widget.endUserOptions.debug) {
|
|
637
|
+
this.enableWebGLDebugging = true;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
var context = scene.getContext();
|
|
641
|
+
if (this.enableWebGLDebugging) {
|
|
642
|
+
context.setValidateShaderProgram(true);
|
|
643
|
+
context.setValidateFramebuffer(true);
|
|
644
|
+
context.setLogShaderCompilation(true);
|
|
645
|
+
context.setThrowOnWebGLError(true);
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
var imageryUrl = require.toUrl('../../Assets/Textures/');
|
|
649
|
+
this.dayImageUrl = defaultValue(this.dayImageUrl, imageryUrl + 'NE2_LR_LC_SR_W_DR_2048.jpg');
|
|
650
|
+
this.skyBoxBaseUrl = defaultValue(this.skyBoxBaseUrl, imageryUrl + 'SkyBox/tycho2t3_80');
|
|
651
|
+
|
|
652
|
+
var centralBody = this.centralBody = new CentralBody(ellipsoid);
|
|
653
|
+
|
|
654
|
+
// This logo is replicated by the imagery selector button, so it's hidden here.
|
|
655
|
+
centralBody.logoOffset = new Cartesian2(-100, -100);
|
|
656
|
+
|
|
657
|
+
this._configureCentralBodyImagery();
|
|
658
|
+
|
|
659
|
+
scene.getPrimitives().setCentralBody(centralBody);
|
|
660
|
+
|
|
661
|
+
if (this.showSkyBox) {
|
|
662
|
+
scene.skyBox = new SkyBox({
|
|
663
|
+
positiveX: this.skyBoxBaseUrl + '_px.jpg',
|
|
664
|
+
negativeX: this.skyBoxBaseUrl + '_mx.jpg',
|
|
665
|
+
positiveY: this.skyBoxBaseUrl + '_py.jpg',
|
|
666
|
+
negativeY: this.skyBoxBaseUrl + '_my.jpg',
|
|
667
|
+
positiveZ: this.skyBoxBaseUrl + '_pz.jpg',
|
|
668
|
+
negativeZ: this.skyBoxBaseUrl + '_mz.jpg'
|
|
669
|
+
});
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
scene.skyAtmosphere = new SkyAtmosphere(ellipsoid);
|
|
673
|
+
|
|
674
|
+
var camera = scene.getCamera();
|
|
675
|
+
camera.position = camera.position.multiplyByScalar(1.5);
|
|
676
|
+
camera.controller.constrainedAxis = Cartesian3.UNIT_Z;
|
|
677
|
+
|
|
678
|
+
var handler = new ScreenSpaceEventHandler(canvas);
|
|
679
|
+
handler.setInputAction(lang.hitch(this, '_handleLeftClick'), ScreenSpaceEventType.LEFT_CLICK);
|
|
680
|
+
handler.setInputAction(lang.hitch(this, '_handleRightClick'), ScreenSpaceEventType.RIGHT_CLICK);
|
|
681
|
+
handler.setInputAction(lang.hitch(this, '_handleLeftDoubleClick'), ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
|
|
682
|
+
handler.setInputAction(lang.hitch(this, '_handleMouseMove'), ScreenSpaceEventType.MOUSE_MOVE);
|
|
683
|
+
handler.setInputAction(lang.hitch(this, '_handleLeftDown'), ScreenSpaceEventType.LEFT_DOWN);
|
|
684
|
+
handler.setInputAction(lang.hitch(this, '_handleLeftUp'), ScreenSpaceEventType.LEFT_UP);
|
|
685
|
+
handler.setInputAction(lang.hitch(this, '_handleWheel'), ScreenSpaceEventType.WHEEL);
|
|
686
|
+
handler.setInputAction(lang.hitch(this, '_handleRightDown'), ScreenSpaceEventType.RIGHT_DOWN);
|
|
687
|
+
handler.setInputAction(lang.hitch(this, '_handleRightUp'), ScreenSpaceEventType.RIGHT_UP);
|
|
688
|
+
|
|
689
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
690
|
+
|
|
691
|
+
if (typeof this.highlightColor === 'undefined') {
|
|
692
|
+
this.highlightColor = new Color(0.0, 1.0, 0.0);
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
if (typeof this.highlightMaterial === 'undefined') {
|
|
696
|
+
this.highlightMaterial = Material.fromType(scene.getContext(), Material.ColorType);
|
|
697
|
+
this.highlightMaterial.uniforms.color = this.highlightColor;
|
|
698
|
+
}
|
|
699
|
+
|
|
700
|
+
if (typeof this.onObjectSelected === 'undefined') {
|
|
701
|
+
this.onObjectSelected = function(selectedObject) {
|
|
702
|
+
if (typeof selectedObject !== 'undefined' && typeof selectedObject.dynamicObject !== 'undefined') {
|
|
703
|
+
this.centerCameraOnPick(selectedObject);
|
|
704
|
+
}
|
|
705
|
+
};
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
if (this.enableDragDrop) {
|
|
709
|
+
var dropBox = this.cesiumNode;
|
|
710
|
+
on(dropBox, 'drop', lang.hitch(widget, 'handleDrop'));
|
|
711
|
+
on(dropBox, 'dragenter', event.stop);
|
|
712
|
+
on(dropBox, 'dragover', event.stop);
|
|
713
|
+
on(dropBox, 'dragexit', event.stop);
|
|
714
|
+
}
|
|
715
|
+
|
|
716
|
+
var currentTime = new JulianDate();
|
|
717
|
+
if (typeof this.animationController === 'undefined') {
|
|
718
|
+
if (typeof this.clock === 'undefined') {
|
|
719
|
+
this.clock = new Clock({
|
|
720
|
+
startTime : currentTime.addDays(-0.5),
|
|
721
|
+
stopTime : currentTime.addDays(0.5),
|
|
722
|
+
currentTime : currentTime,
|
|
723
|
+
clockStep : ClockStep.SYSTEM_CLOCK_DEPENDENT,
|
|
724
|
+
multiplier : 1
|
|
725
|
+
});
|
|
726
|
+
}
|
|
727
|
+
this.animationController = new AnimationController(this.clock);
|
|
728
|
+
} else {
|
|
729
|
+
this.clock = this.animationController.clock;
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
var animationController = this.animationController;
|
|
733
|
+
var dynamicObjectCollection = this.dynamicObjectCollection = new DynamicObjectCollection();
|
|
734
|
+
var clock = this.clock;
|
|
735
|
+
var transitioner = this.sceneTransitioner = new SceneTransitioner(scene);
|
|
736
|
+
this.visualizers = VisualizerCollection.createCzmlStandardCollection(scene, dynamicObjectCollection);
|
|
737
|
+
|
|
738
|
+
if (typeof widget.endUserOptions.source !== 'undefined') {
|
|
739
|
+
widget.loadCzml(widget.endUserOptions.source, widget.endUserOptions.lookAt);
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
if (typeof widget.endUserOptions.stats !== 'undefined' && widget.endUserOptions.stats) {
|
|
743
|
+
widget.enableStatistics(true);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
this._lastTimeLabelClock = clock.currentTime;
|
|
747
|
+
this._lastTimeLabelDate = Date.now();
|
|
748
|
+
this.timeLabelElement = this.timeLabel.containerNode;
|
|
749
|
+
this.timeLabelElement.innerHTML = clock.currentTime.toDate().toUTCString();
|
|
750
|
+
|
|
751
|
+
var animReverse = this.animReverse;
|
|
752
|
+
var animPause = this.animPause;
|
|
753
|
+
var animPlay = this.animPlay;
|
|
754
|
+
|
|
755
|
+
on(this.animReset, 'Click', function() {
|
|
756
|
+
animationController.reset();
|
|
757
|
+
animReverse.set('checked', false);
|
|
758
|
+
animPause.set('checked', true);
|
|
759
|
+
animPlay.set('checked', false);
|
|
760
|
+
});
|
|
761
|
+
|
|
762
|
+
function onAnimPause() {
|
|
763
|
+
animationController.pause();
|
|
764
|
+
animReverse.set('checked', false);
|
|
765
|
+
animPause.set('checked', true);
|
|
766
|
+
animPlay.set('checked', false);
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
on(animPause, 'Click', onAnimPause);
|
|
770
|
+
|
|
771
|
+
on(animReverse, 'Click', function() {
|
|
772
|
+
animationController.playReverse();
|
|
773
|
+
animReverse.set('checked', true);
|
|
774
|
+
animPause.set('checked', false);
|
|
775
|
+
animPlay.set('checked', false);
|
|
776
|
+
});
|
|
777
|
+
|
|
778
|
+
on(animPlay, 'Click', function() {
|
|
779
|
+
animationController.play();
|
|
780
|
+
animReverse.set('checked', false);
|
|
781
|
+
animPause.set('checked', false);
|
|
782
|
+
animPlay.set('checked', true);
|
|
783
|
+
});
|
|
784
|
+
|
|
785
|
+
on(widget.animSlow, 'Click', function() {
|
|
786
|
+
animationController.slower();
|
|
787
|
+
});
|
|
788
|
+
|
|
789
|
+
on(widget.animFast, 'Click', function() {
|
|
790
|
+
animationController.faster();
|
|
791
|
+
});
|
|
792
|
+
|
|
793
|
+
function onTimelineScrub(e) {
|
|
794
|
+
widget.clock.currentTime = e.timeJulian;
|
|
795
|
+
onAnimPause();
|
|
796
|
+
}
|
|
797
|
+
|
|
798
|
+
var timelineWidget = widget.timelineWidget;
|
|
799
|
+
timelineWidget.clock = widget.clock;
|
|
800
|
+
timelineWidget.setupCallback = function(t) {
|
|
801
|
+
widget.timelineControl = t;
|
|
802
|
+
t.addEventListener('settime', onTimelineScrub, false);
|
|
803
|
+
t.zoomTo(clock.startTime, clock.stopTime);
|
|
804
|
+
};
|
|
805
|
+
timelineWidget.setupTimeline();
|
|
806
|
+
|
|
807
|
+
var viewHomeButton = widget.viewHomeButton;
|
|
808
|
+
var view2D = widget.view2D;
|
|
809
|
+
var view3D = widget.view3D;
|
|
810
|
+
var viewColumbus = widget.viewColumbus;
|
|
811
|
+
var viewFullscreen = widget.viewFullscreen;
|
|
812
|
+
|
|
813
|
+
view2D.set('checked', false);
|
|
814
|
+
view3D.set('checked', true);
|
|
815
|
+
viewColumbus.set('checked', false);
|
|
816
|
+
|
|
817
|
+
if (Fullscreen.isFullscreenEnabled()) {
|
|
818
|
+
on(document, Fullscreen.getFullscreenChangeEventName(), function() {
|
|
819
|
+
widget.resize();
|
|
820
|
+
});
|
|
821
|
+
|
|
822
|
+
on(viewFullscreen, 'Click', function() {
|
|
823
|
+
if (Fullscreen.isFullscreen()) {
|
|
824
|
+
Fullscreen.exitFullscreen();
|
|
825
|
+
} else {
|
|
826
|
+
Fullscreen.requestFullscreen(defaultValue(widget.fullscreenElement, widget.cesiumNode));
|
|
827
|
+
}
|
|
828
|
+
});
|
|
829
|
+
} else {
|
|
830
|
+
domStyle.set(viewFullscreen.domNode, 'display', 'none');
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
on(viewHomeButton, 'Click', function() {
|
|
834
|
+
widget.viewHome();
|
|
835
|
+
});
|
|
836
|
+
on(view2D, 'Click', function() {
|
|
837
|
+
view2D.set('checked', true);
|
|
838
|
+
view3D.set('checked', false);
|
|
839
|
+
viewColumbus.set('checked', false);
|
|
840
|
+
transitioner.morphTo2D();
|
|
841
|
+
});
|
|
842
|
+
on(view3D, 'Click', function() {
|
|
843
|
+
view2D.set('checked', false);
|
|
844
|
+
view3D.set('checked', true);
|
|
845
|
+
viewColumbus.set('checked', false);
|
|
846
|
+
transitioner.morphTo3D();
|
|
847
|
+
});
|
|
848
|
+
on(viewColumbus, 'Click', function() {
|
|
849
|
+
view2D.set('checked', false);
|
|
850
|
+
view3D.set('checked', false);
|
|
851
|
+
viewColumbus.set('checked', true);
|
|
852
|
+
transitioner.morphToColumbusView();
|
|
853
|
+
});
|
|
854
|
+
|
|
855
|
+
var imagery = widget.imagery;
|
|
856
|
+
var imageryAerial = widget.imageryAerial;
|
|
857
|
+
var imageryAerialWithLabels = widget.imageryAerialWithLabels;
|
|
858
|
+
var imageryRoad = widget.imageryRoad;
|
|
859
|
+
var imagerySingleTile = widget.imagerySingleTile;
|
|
860
|
+
var imageryOptions = [imageryAerial, imageryAerialWithLabels, imageryRoad, imagerySingleTile];
|
|
861
|
+
var bingHtml = imagery.containerNode.innerHTML;
|
|
862
|
+
|
|
863
|
+
imagery.startup();
|
|
864
|
+
|
|
865
|
+
function createImageryClickFunction(control, style) {
|
|
866
|
+
return function() {
|
|
867
|
+
if (style) {
|
|
868
|
+
widget.setStreamingImageryMapStyle(style);
|
|
869
|
+
imagery.containerNode.innerHTML = bingHtml;
|
|
870
|
+
} else {
|
|
871
|
+
widget.enableStreamingImagery(false);
|
|
872
|
+
imagery.containerNode.innerHTML = 'Imagery';
|
|
873
|
+
}
|
|
874
|
+
|
|
875
|
+
imageryOptions.forEach(function(o) {
|
|
876
|
+
o.set('checked', o === control);
|
|
877
|
+
});
|
|
878
|
+
};
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
on(imageryAerial, 'Click', createImageryClickFunction(imageryAerial, BingMapsStyle.AERIAL));
|
|
882
|
+
on(imageryAerialWithLabels, 'Click', createImageryClickFunction(imageryAerialWithLabels, BingMapsStyle.AERIAL_WITH_LABELS));
|
|
883
|
+
on(imageryRoad, 'Click', createImageryClickFunction(imageryRoad, BingMapsStyle.ROAD));
|
|
884
|
+
on(imagerySingleTile, 'Click', createImageryClickFunction(imagerySingleTile, undefined));
|
|
885
|
+
|
|
886
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
887
|
+
|
|
888
|
+
if (widget.resizeWidgetOnWindowResize) {
|
|
889
|
+
on(window, 'resize', function() {
|
|
890
|
+
widget.resize();
|
|
891
|
+
});
|
|
892
|
+
}
|
|
893
|
+
|
|
894
|
+
this._camera3D = this.scene.getCamera().clone();
|
|
895
|
+
|
|
896
|
+
if (this.autoStartRenderLoop) {
|
|
897
|
+
this.startRenderLoop();
|
|
898
|
+
}
|
|
899
|
+
},
|
|
900
|
+
|
|
901
|
+
/**
|
|
902
|
+
* Reset the camera to the home view for the current scene mode.
|
|
903
|
+
* @function
|
|
904
|
+
* @memberof CesiumViewerWidget.prototype
|
|
905
|
+
*/
|
|
906
|
+
viewHome : function() {
|
|
907
|
+
this._viewFromTo = undefined;
|
|
908
|
+
|
|
909
|
+
var scene = this.scene;
|
|
910
|
+
var mode = scene.mode;
|
|
911
|
+
|
|
912
|
+
var camera = scene.getCamera();
|
|
913
|
+
camera.controller.constrainedAxis = Cartesian3.UNIT_Z;
|
|
914
|
+
|
|
915
|
+
var controller = scene.getScreenSpaceCameraController();
|
|
916
|
+
controller.enableTranslate = true;
|
|
917
|
+
controller.enableTilt = true;
|
|
918
|
+
controller.setEllipsoid(Ellipsoid.WGS84);
|
|
919
|
+
controller.columbusViewMode = CameraColumbusViewMode.FREE;
|
|
920
|
+
|
|
921
|
+
if (mode === SceneMode.SCENE2D) {
|
|
922
|
+
camera.controller.viewExtent(Extent.MAX_VALUE);
|
|
923
|
+
} else if (mode === SceneMode.SCENE3D) {
|
|
924
|
+
var camera3D = this._camera3D;
|
|
925
|
+
camera3D.position.clone(camera.position);
|
|
926
|
+
camera3D.direction.clone(camera.direction);
|
|
927
|
+
camera3D.up.clone(camera.up);
|
|
928
|
+
camera3D.right.clone(camera.right);
|
|
929
|
+
camera3D.transform.clone(camera.transform);
|
|
930
|
+
camera3D.frustum.clone(camera.frustum);
|
|
931
|
+
} else if (mode === SceneMode.COLUMBUS_VIEW) {
|
|
932
|
+
var transform = new Matrix4(0.0, 0.0, 1.0, 0.0,
|
|
933
|
+
1.0, 0.0, 0.0, 0.0,
|
|
934
|
+
0.0, 1.0, 0.0, 0.0,
|
|
935
|
+
0.0, 0.0, 0.0, 1.0);
|
|
936
|
+
|
|
937
|
+
var maxRadii = Ellipsoid.WGS84.getMaximumRadius();
|
|
938
|
+
var position = new Cartesian3(0.0, -1.0, 1.0).normalize().multiplyByScalar(5.0 * maxRadii);
|
|
939
|
+
var direction = Cartesian3.ZERO.subtract(position).normalize();
|
|
940
|
+
var right = direction.cross(Cartesian3.UNIT_Z);
|
|
941
|
+
var up = right.cross(direction);
|
|
942
|
+
right = direction.cross(up);
|
|
943
|
+
direction = up.cross(right);
|
|
944
|
+
|
|
945
|
+
var frustum = new PerspectiveFrustum();
|
|
946
|
+
frustum.fovy = CesiumMath.toRadians(60.0);
|
|
947
|
+
frustum.aspectRatio = this.canvas.clientWidth / this.canvas.clientHeight;
|
|
948
|
+
|
|
949
|
+
camera.position = position;
|
|
950
|
+
camera.direction = direction;
|
|
951
|
+
camera.up = up;
|
|
952
|
+
camera.right = right;
|
|
953
|
+
camera.frustum = frustum;
|
|
954
|
+
camera.transform = transform;
|
|
955
|
+
}
|
|
956
|
+
},
|
|
957
|
+
|
|
958
|
+
/**
|
|
959
|
+
* Enable or disable the FPS (Frames Per Second) perfomance display.
|
|
960
|
+
*
|
|
961
|
+
* @function
|
|
962
|
+
* @memberof CesiumViewerWidget.prototype
|
|
963
|
+
* @param {Boolean} showStatistics - <code>true</code> to enable it.
|
|
964
|
+
*/
|
|
965
|
+
enableStatistics : function(showStatistics) {
|
|
966
|
+
if (typeof this._performanceDisplay === 'undefined' && showStatistics) {
|
|
967
|
+
this._performanceDisplay = new PerformanceDisplay();
|
|
968
|
+
this.scene.getPrimitives().add(this._performanceDisplay);
|
|
969
|
+
} else if (typeof this._performanceDisplay !== 'undefined' && !showStatistics) {
|
|
970
|
+
this.scene.getPrimitives().remove(this._performanceDisplay);
|
|
971
|
+
this._performanceDisplay = undefined;
|
|
972
|
+
}
|
|
973
|
+
},
|
|
974
|
+
|
|
975
|
+
/**
|
|
976
|
+
* Enable or disable the "sky atmosphere" effect, which displays the limb
|
|
977
|
+
* of the Earth (seen from space) or blue sky (seen from inside the atmosphere).
|
|
978
|
+
*
|
|
979
|
+
* @function
|
|
980
|
+
* @memberof CesiumViewerWidget.prototype
|
|
981
|
+
* @param {Boolean} show - <code>true</code> to enable the effect.
|
|
982
|
+
*/
|
|
983
|
+
showSkyAtmosphere : function(show) {
|
|
984
|
+
this.scene.skyAtmosphere.show = show;
|
|
985
|
+
},
|
|
986
|
+
|
|
987
|
+
/**
|
|
988
|
+
* Enable or disable streaming imagery, and update the globe.
|
|
989
|
+
*
|
|
990
|
+
* @function
|
|
991
|
+
* @memberof CesiumViewerWidget.prototype
|
|
992
|
+
* @param {Boolean} value - <code>true</code> to enable streaming imagery.
|
|
993
|
+
* @see CesiumViewerWidget#useStreamingImagery
|
|
994
|
+
*/
|
|
995
|
+
enableStreamingImagery : function(value) {
|
|
996
|
+
this.useStreamingImagery = value;
|
|
997
|
+
this._configureCentralBodyImagery();
|
|
998
|
+
},
|
|
999
|
+
|
|
1000
|
+
/**
|
|
1001
|
+
* Change the streaming imagery type, and update the globe.
|
|
1002
|
+
*
|
|
1003
|
+
* @function
|
|
1004
|
+
* @memberof CesiumViewerWidget.prototype
|
|
1005
|
+
* @param {BingMapsStyle} value - the new map style to use.
|
|
1006
|
+
* @see CesiumViewerWidget#mapStyle
|
|
1007
|
+
*/
|
|
1008
|
+
setStreamingImageryMapStyle : function(value) {
|
|
1009
|
+
if (!this.useStreamingImagery || this.mapStyle !== value) {
|
|
1010
|
+
this.useStreamingImagery = true;
|
|
1011
|
+
this.mapStyle = value;
|
|
1012
|
+
this._configureCentralBodyImagery();
|
|
1013
|
+
}
|
|
1014
|
+
},
|
|
1015
|
+
|
|
1016
|
+
/**
|
|
1017
|
+
* Set the positional offset of the logo of the streaming imagery provider.
|
|
1018
|
+
*
|
|
1019
|
+
* @function
|
|
1020
|
+
* @memberof CesiumViewerWidget.prototype
|
|
1021
|
+
* @param {Integer} logoOffsetX - The horizontal offset in screen space
|
|
1022
|
+
* @param {Integer} logoOffsetY - The vertical offset in screen space
|
|
1023
|
+
*/
|
|
1024
|
+
setLogoOffset : function(logoOffsetX, logoOffsetY) {
|
|
1025
|
+
var logoOffset = this.centralBody.logoOffset;
|
|
1026
|
+
if ((logoOffsetX !== logoOffset.x) || (logoOffsetY !== logoOffset.y)) {
|
|
1027
|
+
this.centralBody.logoOffset = new Cartesian2(logoOffsetX, logoOffsetY);
|
|
1028
|
+
}
|
|
1029
|
+
},
|
|
1030
|
+
|
|
1031
|
+
/**
|
|
1032
|
+
* Highlight an object in the scene, usually in response to a click or hover.
|
|
1033
|
+
*
|
|
1034
|
+
* @function
|
|
1035
|
+
* @memberof CesiumViewerWidget.prototype
|
|
1036
|
+
* @param {Object} selectedObject - The object to highlight, or <code>undefined</code> to un-highlight.
|
|
1037
|
+
*/
|
|
1038
|
+
highlightObject : function(selectedObject) {
|
|
1039
|
+
if (this.highlightedObject !== selectedObject) {
|
|
1040
|
+
if (typeof this.highlightedObject !== 'undefined' &&
|
|
1041
|
+
(typeof this.highlightedObject.isDestroyed !== 'function' || !this.highlightedObject.isDestroyed())) {
|
|
1042
|
+
if (typeof this.highlightedObject.material !== 'undefined') {
|
|
1043
|
+
this.highlightedObject.material = this._originalMaterial;
|
|
1044
|
+
} else if (typeof this.highlightedObject.outerMaterial !== 'undefined') {
|
|
1045
|
+
this.highlightedObject.outerMaterial = this._originalMaterial;
|
|
1046
|
+
} else if (typeof this.highlightedObject.setColor !== 'undefined') {
|
|
1047
|
+
this.highlightedObject.setColor(this._originalColor);
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
this.highlightedObject = selectedObject;
|
|
1051
|
+
if (typeof selectedObject !== 'undefined') {
|
|
1052
|
+
if (typeof selectedObject.material !== 'undefined') {
|
|
1053
|
+
this._originalMaterial = selectedObject.material;
|
|
1054
|
+
selectedObject.material = this.highlightMaterial;
|
|
1055
|
+
} else if (typeof selectedObject.outerMaterial !== 'undefined') {
|
|
1056
|
+
this._originalMaterial = selectedObject.outerMaterial;
|
|
1057
|
+
selectedObject.outerMaterial = this.highlightMaterial;
|
|
1058
|
+
} else if (typeof this.highlightedObject.setColor !== 'undefined') {
|
|
1059
|
+
this._originalColor = Color.clone(selectedObject.getColor(), this._originalColor);
|
|
1060
|
+
selectedObject.setColor(this.highlightColor);
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
},
|
|
1065
|
+
|
|
1066
|
+
/**
|
|
1067
|
+
* Initialize the current frame.
|
|
1068
|
+
* @function
|
|
1069
|
+
* @memberof CesiumViewerWidget.prototype
|
|
1070
|
+
*/
|
|
1071
|
+
initializeFrame : function() {
|
|
1072
|
+
this.scene.initializeFrame();
|
|
1073
|
+
},
|
|
1074
|
+
|
|
1075
|
+
/**
|
|
1076
|
+
* Call this function prior to rendering each animation frame, to prepare
|
|
1077
|
+
* all CZML objects and other settings for the next frame.
|
|
1078
|
+
*
|
|
1079
|
+
* @function
|
|
1080
|
+
* @memberof CesiumViewerWidget.prototype
|
|
1081
|
+
* @param {JulianDate} currentTime - The date and time in the scene of the frame to be rendered
|
|
1082
|
+
*/
|
|
1083
|
+
update : function(currentTime) {
|
|
1084
|
+
|
|
1085
|
+
this._updateSpeedIndicator();
|
|
1086
|
+
this.timelineControl.updateFromClock();
|
|
1087
|
+
this.visualizers.update(currentTime);
|
|
1088
|
+
|
|
1089
|
+
if ((Math.abs(currentTime.getSecondsDifference(this._lastTimeLabelClock)) >= 1.0) ||
|
|
1090
|
+
((Date.now() - this._lastTimeLabelDate) > 200)) {
|
|
1091
|
+
this.timeLabelElement.innerHTML = currentTime.toDate().toUTCString();
|
|
1092
|
+
this._lastTimeLabelClock = currentTime;
|
|
1093
|
+
this._lastTimeLabelDate = Date.now();
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
// Update the camera to stay centered on the selected object, if any.
|
|
1097
|
+
var viewFromTo = this._viewFromTo;
|
|
1098
|
+
if (typeof viewFromTo !== 'undefined') {
|
|
1099
|
+
viewFromTo.update(currentTime);
|
|
1100
|
+
}
|
|
1101
|
+
},
|
|
1102
|
+
|
|
1103
|
+
/**
|
|
1104
|
+
* Render the widget's scene.
|
|
1105
|
+
* @function
|
|
1106
|
+
* @memberof CesiumViewerWidget.prototype
|
|
1107
|
+
* @param {JulianDate} currentTime - The date and time in the scene of the frame to be rendered
|
|
1108
|
+
*/
|
|
1109
|
+
render : function(currentTime) {
|
|
1110
|
+
this.scene.render(currentTime);
|
|
1111
|
+
},
|
|
1112
|
+
|
|
1113
|
+
_setLoading : function(isLoading) {
|
|
1114
|
+
this.loading.style.display = isLoading ? 'block' : 'none';
|
|
1115
|
+
},
|
|
1116
|
+
|
|
1117
|
+
_configureCentralBodyImagery : function() {
|
|
1118
|
+
var centralBody = this.centralBody;
|
|
1119
|
+
|
|
1120
|
+
var imageLayers = centralBody.getImageryLayers();
|
|
1121
|
+
|
|
1122
|
+
var existingImagery;
|
|
1123
|
+
if (imageLayers.getLength() !== 0) {
|
|
1124
|
+
existingImagery = imageLayers.get(0).imageryProvider;
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
var newLayer;
|
|
1128
|
+
|
|
1129
|
+
if (this.useStreamingImagery) {
|
|
1130
|
+
if (!(existingImagery instanceof BingMapsImageryProvider) ||
|
|
1131
|
+
existingImagery.getMapStyle() !== this.mapStyle) {
|
|
1132
|
+
|
|
1133
|
+
newLayer = imageLayers.addImageryProvider(new BingMapsImageryProvider({
|
|
1134
|
+
url : 'http://dev.virtualearth.net',
|
|
1135
|
+
mapStyle : this.mapStyle,
|
|
1136
|
+
// Some versions of Safari support WebGL, but don't correctly implement
|
|
1137
|
+
// cross-origin image loading, so we need to load Bing imagery using a proxy.
|
|
1138
|
+
proxy : FeatureDetection.supportsCrossOriginImagery() ? undefined : new DefaultProxy('/proxy/')
|
|
1139
|
+
}));
|
|
1140
|
+
if (imageLayers.getLength() > 1) {
|
|
1141
|
+
imageLayers.remove(imageLayers.get(0));
|
|
1142
|
+
}
|
|
1143
|
+
imageLayers.lowerToBottom(newLayer);
|
|
1144
|
+
}
|
|
1145
|
+
} else {
|
|
1146
|
+
if (!(existingImagery instanceof SingleTileImageryProvider) ||
|
|
1147
|
+
existingImagery.getUrl() !== this.dayImageUrl) {
|
|
1148
|
+
|
|
1149
|
+
newLayer = imageLayers.addImageryProvider(new SingleTileImageryProvider({url : this.dayImageUrl}));
|
|
1150
|
+
if (imageLayers.getLength() > 1) {
|
|
1151
|
+
imageLayers.remove(imageLayers.get(0));
|
|
1152
|
+
}
|
|
1153
|
+
imageLayers.lowerToBottom(newLayer);
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
},
|
|
1157
|
+
|
|
1158
|
+
/**
|
|
1159
|
+
* If true, {@link CesiumViewerWidget#startRenderLoop} will be called automatically
|
|
1160
|
+
* at the end of {@link CesiumViewerWidget#startup}.
|
|
1161
|
+
*
|
|
1162
|
+
* @type {Boolean}
|
|
1163
|
+
* @memberof CesiumViewerWidget.prototype
|
|
1164
|
+
* @default true
|
|
1165
|
+
*/
|
|
1166
|
+
autoStartRenderLoop : true,
|
|
1167
|
+
|
|
1168
|
+
/**
|
|
1169
|
+
* This is a simple render loop that can be started if there is only one <code>CesiumViewerWidget</code>
|
|
1170
|
+
* on your page. If you wish to customize your render loop, avoid this function and instead
|
|
1171
|
+
* use code similar to one of the following examples.
|
|
1172
|
+
*
|
|
1173
|
+
* @function
|
|
1174
|
+
* @memberof CesiumViewerWidget.prototype
|
|
1175
|
+
* @see requestAnimationFrame
|
|
1176
|
+
* @see CesiumViewerWidget#autoStartRenderLoop
|
|
1177
|
+
* @example
|
|
1178
|
+
* // This takes the place of startRenderLoop for a single widget.
|
|
1179
|
+
*
|
|
1180
|
+
* var animationController = widget.animationController;
|
|
1181
|
+
* function updateAndRender() {
|
|
1182
|
+
* var currentTime = animationController.update();
|
|
1183
|
+
* widget.initializeFrame();
|
|
1184
|
+
* widget.update(currentTime);
|
|
1185
|
+
* widget.render(currentTime);
|
|
1186
|
+
* requestAnimationFrame(updateAndRender);
|
|
1187
|
+
* }
|
|
1188
|
+
* requestAnimationFrame(updateAndRender);
|
|
1189
|
+
* @example
|
|
1190
|
+
* // This example requires widget1 and widget2 to share an animationController
|
|
1191
|
+
* // (for example, widget2's constructor was called with a copy of widget1's
|
|
1192
|
+
* // animationController).
|
|
1193
|
+
*
|
|
1194
|
+
* function updateAndRender() {
|
|
1195
|
+
* var currentTime = animationController.update();
|
|
1196
|
+
* widget1.initializeFrame();
|
|
1197
|
+
* widget2.initializeFrame();
|
|
1198
|
+
* widget1.update(currentTime);
|
|
1199
|
+
* widget2.update(currentTime);
|
|
1200
|
+
* widget1.render(currentTime);
|
|
1201
|
+
* widget2.render(currentTime);
|
|
1202
|
+
* requestAnimationFrame(updateAndRender);
|
|
1203
|
+
* }
|
|
1204
|
+
* requestAnimationFrame(updateAndRender);
|
|
1205
|
+
* @example
|
|
1206
|
+
* // This example uses separate animationControllers for widget1 and widget2.
|
|
1207
|
+
* // These widgets can animate at different rates and pause individually.
|
|
1208
|
+
*
|
|
1209
|
+
* function updateAndRender() {
|
|
1210
|
+
* var time1 = widget1.animationController.update();
|
|
1211
|
+
* var time2 = widget2.animationController.update();
|
|
1212
|
+
* widget1.initializeFrame();
|
|
1213
|
+
* widget2.initializeFrame();
|
|
1214
|
+
* widget1.update(time1);
|
|
1215
|
+
* widget2.update(time2);
|
|
1216
|
+
* widget1.render(time1);
|
|
1217
|
+
* widget2.render(time2);
|
|
1218
|
+
* requestAnimationFrame(updateAndRender);
|
|
1219
|
+
* }
|
|
1220
|
+
* requestAnimationFrame(updateAndRender);
|
|
1221
|
+
*/
|
|
1222
|
+
startRenderLoop : function() {
|
|
1223
|
+
var widget = this;
|
|
1224
|
+
var animationController = widget.animationController;
|
|
1225
|
+
|
|
1226
|
+
function updateAndRender() {
|
|
1227
|
+
var currentTime = animationController.update();
|
|
1228
|
+
widget.initializeFrame();
|
|
1229
|
+
widget.update(currentTime);
|
|
1230
|
+
widget.render(currentTime);
|
|
1231
|
+
requestAnimationFrame(updateAndRender);
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
requestAnimationFrame(updateAndRender);
|
|
1235
|
+
}
|
|
1236
|
+
});
|
|
1237
|
+
});
|