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,819 @@
|
|
1
|
+
/*global define*/
|
2
|
+
define([
|
3
|
+
'./defaultValue',
|
4
|
+
'./DeveloperError',
|
5
|
+
'./Cartesian2',
|
6
|
+
'./Cartesian3',
|
7
|
+
'./Cartesian4',
|
8
|
+
'./Cartographic',
|
9
|
+
'./Ellipsoid',
|
10
|
+
'./GeographicProjection',
|
11
|
+
'./Extent',
|
12
|
+
'./Intersect',
|
13
|
+
'./Interval',
|
14
|
+
'./Matrix4'
|
15
|
+
], function(
|
16
|
+
defaultValue,
|
17
|
+
DeveloperError,
|
18
|
+
Cartesian2,
|
19
|
+
Cartesian3,
|
20
|
+
Cartesian4,
|
21
|
+
Cartographic,
|
22
|
+
Ellipsoid,
|
23
|
+
GeographicProjection,
|
24
|
+
Extent,
|
25
|
+
Intersect,
|
26
|
+
Interval,
|
27
|
+
Matrix4) {
|
28
|
+
"use strict";
|
29
|
+
|
30
|
+
/**
|
31
|
+
* A bounding sphere with a center and a radius.
|
32
|
+
* @alias BoundingSphere
|
33
|
+
* @constructor
|
34
|
+
*
|
35
|
+
* @param {Cartesian3} [center=Cartesian3.ZERO] The center of the bounding sphere.
|
36
|
+
* @param {Number} [radius=0.0] The radius of the bounding sphere.
|
37
|
+
*
|
38
|
+
* @see AxisAlignedBoundingBox
|
39
|
+
* @see BoundingRectangle
|
40
|
+
*/
|
41
|
+
var BoundingSphere = function(center, radius) {
|
42
|
+
/**
|
43
|
+
* The center point of the sphere.
|
44
|
+
* @type {Cartesian3}
|
45
|
+
*/
|
46
|
+
this.center = (typeof center !== 'undefined') ? Cartesian3.clone(center) : Cartesian3.ZERO.clone();
|
47
|
+
/**
|
48
|
+
* The radius of the sphere.
|
49
|
+
* @type {Number}
|
50
|
+
*/
|
51
|
+
this.radius = defaultValue(radius, 0.0);
|
52
|
+
};
|
53
|
+
|
54
|
+
var fromPointsXMin = new Cartesian3();
|
55
|
+
var fromPointsYMin = new Cartesian3();
|
56
|
+
var fromPointsZMin = new Cartesian3();
|
57
|
+
var fromPointsXMax = new Cartesian3();
|
58
|
+
var fromPointsYMax = new Cartesian3();
|
59
|
+
var fromPointsZMax = new Cartesian3();
|
60
|
+
var fromPointsCurrentPos = new Cartesian3();
|
61
|
+
var fromPointsScratch = new Cartesian3();
|
62
|
+
var fromPointsRitterCenter = new Cartesian3();
|
63
|
+
var fromPointsMinBoxPt = new Cartesian3();
|
64
|
+
var fromPointsMaxBoxPt = new Cartesian3();
|
65
|
+
|
66
|
+
/**
|
67
|
+
* Computes a tight-fitting bounding sphere enclosing a list of 3D Cartesian points.
|
68
|
+
* The bounding sphere is computed by running two algorithms, a naive algorithm and
|
69
|
+
* Ritter's algorithm. The smaller of the two spheres is used to ensure a tight fit.
|
70
|
+
* @memberof BoundingSphere
|
71
|
+
*
|
72
|
+
* @param {Array} positions An array of points that the bounding sphere will enclose. Each point must have <code>x</code>, <code>y</code>, and <code>z</code> properties.
|
73
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
74
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.
|
75
|
+
*
|
76
|
+
* @see <a href='http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/'>Bounding Sphere computation article</a>
|
77
|
+
*/
|
78
|
+
BoundingSphere.fromPoints = function(positions, result) {
|
79
|
+
if (typeof result === 'undefined') {
|
80
|
+
result = new BoundingSphere();
|
81
|
+
}
|
82
|
+
|
83
|
+
if (typeof positions === 'undefined' || positions.length === 0) {
|
84
|
+
result.center = Cartesian3.ZERO.clone(result.center);
|
85
|
+
result.radius = 0.0;
|
86
|
+
return result;
|
87
|
+
}
|
88
|
+
|
89
|
+
var currentPos = Cartesian3.clone(positions[0], fromPointsCurrentPos);
|
90
|
+
|
91
|
+
var xMin = Cartesian3.clone(currentPos, fromPointsXMin);
|
92
|
+
var yMin = Cartesian3.clone(currentPos, fromPointsYMin);
|
93
|
+
var zMin = Cartesian3.clone(currentPos, fromPointsZMin);
|
94
|
+
|
95
|
+
var xMax = Cartesian3.clone(currentPos, fromPointsXMax);
|
96
|
+
var yMax = Cartesian3.clone(currentPos, fromPointsYMax);
|
97
|
+
var zMax = Cartesian3.clone(currentPos, fromPointsZMax);
|
98
|
+
|
99
|
+
var numPositions = positions.length;
|
100
|
+
for ( var i = 1; i < numPositions; i++) {
|
101
|
+
Cartesian3.clone(positions[i], currentPos);
|
102
|
+
|
103
|
+
var x = currentPos.x;
|
104
|
+
var y = currentPos.y;
|
105
|
+
var z = currentPos.z;
|
106
|
+
|
107
|
+
// Store points containing the the smallest and largest components
|
108
|
+
if (x < xMin.x) {
|
109
|
+
Cartesian3.clone(currentPos, xMin);
|
110
|
+
}
|
111
|
+
|
112
|
+
if (x > xMax.x) {
|
113
|
+
Cartesian3.clone(currentPos, xMax);
|
114
|
+
}
|
115
|
+
|
116
|
+
if (y < yMin.y) {
|
117
|
+
Cartesian3.clone(currentPos, yMin);
|
118
|
+
}
|
119
|
+
|
120
|
+
if (y > yMax.y) {
|
121
|
+
Cartesian3.clone(currentPos, yMax);
|
122
|
+
}
|
123
|
+
|
124
|
+
if (z < zMin.z) {
|
125
|
+
Cartesian3.clone(currentPos, zMin);
|
126
|
+
}
|
127
|
+
|
128
|
+
if (z > zMax.z) {
|
129
|
+
Cartesian3.clone(currentPos, zMax);
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
// Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).
|
134
|
+
var xSpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(xMax, xMin, fromPointsScratch));
|
135
|
+
var ySpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(yMax, yMin, fromPointsScratch));
|
136
|
+
var zSpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(zMax, zMin, fromPointsScratch));
|
137
|
+
|
138
|
+
// Set the diameter endpoints to the largest span.
|
139
|
+
var diameter1 = xMin;
|
140
|
+
var diameter2 = xMax;
|
141
|
+
var maxSpan = xSpan;
|
142
|
+
if (ySpan > maxSpan) {
|
143
|
+
maxSpan = ySpan;
|
144
|
+
diameter1 = yMin;
|
145
|
+
diameter2 = yMax;
|
146
|
+
}
|
147
|
+
if (zSpan > maxSpan) {
|
148
|
+
maxSpan = zSpan;
|
149
|
+
diameter1 = zMin;
|
150
|
+
diameter2 = zMax;
|
151
|
+
}
|
152
|
+
|
153
|
+
// Calculate the center of the initial sphere found by Ritter's algorithm
|
154
|
+
var ritterCenter = fromPointsRitterCenter;
|
155
|
+
ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;
|
156
|
+
ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;
|
157
|
+
ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;
|
158
|
+
|
159
|
+
// Calculate the radius of the initial sphere found by Ritter's algorithm
|
160
|
+
var radiusSquared = Cartesian3.magnitudeSquared(Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch));
|
161
|
+
var ritterRadius = Math.sqrt(radiusSquared);
|
162
|
+
|
163
|
+
// Find the center of the sphere found using the Naive method.
|
164
|
+
var minBoxPt = fromPointsMinBoxPt;
|
165
|
+
minBoxPt.x = xMin.x;
|
166
|
+
minBoxPt.y = yMin.y;
|
167
|
+
minBoxPt.z = zMin.z;
|
168
|
+
|
169
|
+
var maxBoxPt = fromPointsMaxBoxPt;
|
170
|
+
maxBoxPt.x = xMax.x;
|
171
|
+
maxBoxPt.y = yMax.y;
|
172
|
+
maxBoxPt.z = zMax.z;
|
173
|
+
|
174
|
+
var naiveCenter = Cartesian3.multiplyByScalar(Cartesian3.add(minBoxPt, maxBoxPt, fromPointsScratch), 0.5);
|
175
|
+
|
176
|
+
// Begin 2nd pass to find naive radius and modify the ritter sphere.
|
177
|
+
var naiveRadius = 0;
|
178
|
+
for (i = 0; i < numPositions; i++) {
|
179
|
+
Cartesian3.clone(positions[i], currentPos);
|
180
|
+
|
181
|
+
// Find the furthest point from the naive center to calculate the naive radius.
|
182
|
+
var r = Cartesian3.magnitude(Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch));
|
183
|
+
if (r > naiveRadius) {
|
184
|
+
naiveRadius = r;
|
185
|
+
}
|
186
|
+
|
187
|
+
// Make adjustments to the Ritter Sphere to include all points.
|
188
|
+
var oldCenterToPointSquared = Cartesian3.magnitudeSquared(Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch));
|
189
|
+
if (oldCenterToPointSquared > radiusSquared) {
|
190
|
+
var oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);
|
191
|
+
// Calculate new radius to include the point that lies outside
|
192
|
+
ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;
|
193
|
+
radiusSquared = ritterRadius * ritterRadius;
|
194
|
+
// Calculate center of new Ritter sphere
|
195
|
+
var oldToNew = oldCenterToPoint - ritterRadius;
|
196
|
+
ritterCenter.x = (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / oldCenterToPoint;
|
197
|
+
ritterCenter.y = (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / oldCenterToPoint;
|
198
|
+
ritterCenter.z = (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / oldCenterToPoint;
|
199
|
+
}
|
200
|
+
}
|
201
|
+
|
202
|
+
if (ritterRadius < naiveRadius) {
|
203
|
+
Cartesian3.clone(ritterCenter, result.center);
|
204
|
+
result.radius = ritterRadius;
|
205
|
+
} else {
|
206
|
+
Cartesian3.clone(naiveCenter, result.center);
|
207
|
+
result.radius = naiveRadius;
|
208
|
+
}
|
209
|
+
|
210
|
+
return result;
|
211
|
+
};
|
212
|
+
|
213
|
+
var defaultProjection = new GeographicProjection();
|
214
|
+
var fromExtent2DLowerLeft = new Cartesian3(0.0, 0.0, 0.0);
|
215
|
+
var fromExtent2DUpperRight = new Cartesian3(0.0, 0.0, 0.0);
|
216
|
+
var fromExtent2DSouthwest = new Cartographic(0.0, 0.0, 0.0);
|
217
|
+
var fromExtent2DNortheast = new Cartographic(0.0, 0.0, 0.0);
|
218
|
+
|
219
|
+
/**
|
220
|
+
* Computes a bounding sphere from an extent projected in 2D.
|
221
|
+
*
|
222
|
+
* @memberof BoundingSphere
|
223
|
+
*
|
224
|
+
* @param {Extent} extent The extent around which to create a bounding sphere.
|
225
|
+
* @param {Object} [projection=GeographicProjection] The projection used to project the extent into 2D.
|
226
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
227
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
|
228
|
+
*/
|
229
|
+
BoundingSphere.fromExtent2D = function(extent, projection, result) {
|
230
|
+
return BoundingSphere.fromExtentWithHeights2D(extent, projection, 0.0, 0.0, result);
|
231
|
+
};
|
232
|
+
|
233
|
+
/**
|
234
|
+
* Computes a bounding sphere from an extent projected in 2D. The bounding sphere accounts for the
|
235
|
+
* object's minimum and maximum heights over the extent.
|
236
|
+
*
|
237
|
+
* @memberof BoundingSphere
|
238
|
+
*
|
239
|
+
* @param {Extent} extent The extent around which to create a bounding sphere.
|
240
|
+
* @param {Object} [projection=GeographicProjection] The projection used to project the extent into 2D.
|
241
|
+
* @param {Number} [minimumHeight=0.0] The minimum height over the extent.
|
242
|
+
* @param {Number} [maximumHeight=0.0] The maximum height over the extent.
|
243
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
244
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
|
245
|
+
*/
|
246
|
+
BoundingSphere.fromExtentWithHeights2D = function(extent, projection, minimumHeight, maximumHeight, result) {
|
247
|
+
if (typeof result === 'undefined') {
|
248
|
+
result = new BoundingSphere();
|
249
|
+
}
|
250
|
+
|
251
|
+
if (typeof extent === 'undefined') {
|
252
|
+
result.center = Cartesian3.ZERO.clone(result.center);
|
253
|
+
result.radius = 0.0;
|
254
|
+
return result;
|
255
|
+
}
|
256
|
+
|
257
|
+
projection = (typeof projection !== 'undefined') ? projection : defaultProjection;
|
258
|
+
|
259
|
+
extent.getSouthwest(fromExtent2DSouthwest);
|
260
|
+
fromExtent2DSouthwest.height = minimumHeight;
|
261
|
+
extent.getNortheast(fromExtent2DNortheast);
|
262
|
+
fromExtent2DNortheast.height = maximumHeight;
|
263
|
+
|
264
|
+
var lowerLeft = projection.project(fromExtent2DSouthwest, fromExtent2DLowerLeft);
|
265
|
+
var upperRight = projection.project(fromExtent2DNortheast, fromExtent2DUpperRight);
|
266
|
+
|
267
|
+
var width = upperRight.x - lowerLeft.x;
|
268
|
+
var height = upperRight.y - lowerLeft.y;
|
269
|
+
var elevation = upperRight.z - lowerLeft.z;
|
270
|
+
|
271
|
+
result.radius = Math.sqrt(width * width + height * height + elevation * elevation) * 0.5;
|
272
|
+
var center = result.center;
|
273
|
+
center.x = lowerLeft.x + width * 0.5;
|
274
|
+
center.y = lowerLeft.y + height * 0.5;
|
275
|
+
center.z = lowerLeft.z + elevation * 0.5;
|
276
|
+
return result;
|
277
|
+
};
|
278
|
+
|
279
|
+
var fromExtent3DScratch = [];
|
280
|
+
|
281
|
+
/**
|
282
|
+
* Computes a bounding sphere from an extent in 3D. The bounding sphere is created using a subsample of points
|
283
|
+
* on the ellipsoid and contained in the extent. It may not be accurate for all extents on all types of ellipsoids.
|
284
|
+
* @memberof BoundingSphere
|
285
|
+
*
|
286
|
+
* @param {Extent} extent The valid extent used to create a bounding sphere.
|
287
|
+
* @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid used to determine positions of the extent.
|
288
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
289
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
|
290
|
+
*/
|
291
|
+
BoundingSphere.fromExtent3D = function(extent, ellipsoid, result) {
|
292
|
+
ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);
|
293
|
+
var positions = typeof extent !== 'undefined' ? extent.subsample(ellipsoid, fromExtent3DScratch) : undefined;
|
294
|
+
return BoundingSphere.fromPoints(positions, result);
|
295
|
+
};
|
296
|
+
|
297
|
+
/**
|
298
|
+
* Computes a tight-fitting bounding sphere enclosing a list of 3D points, where the points are
|
299
|
+
* stored in a flat array in X, Y, Z, order. The bounding sphere is computed by running two
|
300
|
+
* algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to
|
301
|
+
* ensure a tight fit.
|
302
|
+
*
|
303
|
+
* @memberof BoundingSphere
|
304
|
+
*
|
305
|
+
* @param {Array} positions An array of points that the bounding sphere will enclose. Each point
|
306
|
+
* is formed from three elements in the array in the order X, Y, Z.
|
307
|
+
* @param {Cartesian3} [center=Cartesian3.ZERO] The position to which the positions are relative, which need not be the
|
308
|
+
* origin of the coordinate system. This is useful when the positions are to be used for
|
309
|
+
* relative-to-center (RTC) rendering.
|
310
|
+
* @param {Number} [stride=3] The number of array elements per vertex. It must be at least 3, but it may
|
311
|
+
* be higher. Regardless of the value of this parameter, the X coordinate of the first position
|
312
|
+
* is at array index 0, the Y coordinate is at array index 1, and the Z coordinate is at array index
|
313
|
+
* 2. When stride is 3, the X coordinate of the next position then begins at array index 3. If
|
314
|
+
* the stride is 5, however, two array elements are skipped and the next position begins at array
|
315
|
+
* index 5.
|
316
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
317
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.
|
318
|
+
*
|
319
|
+
* @see <a href='http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/'>Bounding Sphere computation article</a>
|
320
|
+
*
|
321
|
+
* @example
|
322
|
+
* // Compute the bounding sphere from 3 positions, each specified relative to a center.
|
323
|
+
* // In addition to the X, Y, and Z coordinates, the points array contains two additional
|
324
|
+
* // elements per point which are ignored for the purpose of computing the bounding sphere.
|
325
|
+
* var center = new Cartesian3(1.0, 2.0, 3.0);
|
326
|
+
* var points = [1.0, 2.0, 3.0, 0.1, 0.2,
|
327
|
+
* 4.0, 5.0, 6.0, 0.1, 0.2,
|
328
|
+
* 7.0, 8.0, 9.0, 0.1, 0.2];
|
329
|
+
* var sphere = BoundingSphere.fromVertices(points, center, 5);
|
330
|
+
*/
|
331
|
+
BoundingSphere.fromVertices = function(positions, center, stride, result) {
|
332
|
+
if (typeof result === 'undefined') {
|
333
|
+
result = new BoundingSphere();
|
334
|
+
}
|
335
|
+
|
336
|
+
if (typeof positions === 'undefined' || positions.length === 0) {
|
337
|
+
result.center = Cartesian3.ZERO.clone(result.center);
|
338
|
+
result.radius = 0.0;
|
339
|
+
return result;
|
340
|
+
}
|
341
|
+
|
342
|
+
if (typeof center === 'undefined') {
|
343
|
+
center = Cartesian3.ZERO;
|
344
|
+
}
|
345
|
+
|
346
|
+
if (typeof stride === 'undefined') {
|
347
|
+
stride = 3;
|
348
|
+
}
|
349
|
+
|
350
|
+
if (stride < 3) {
|
351
|
+
throw new DeveloperError('stride must be 3 or greater.');
|
352
|
+
}
|
353
|
+
|
354
|
+
var currentPos = fromPointsCurrentPos;
|
355
|
+
currentPos.x = positions[0] + center.x;
|
356
|
+
currentPos.y = positions[1] + center.y;
|
357
|
+
currentPos.z = positions[2] + center.z;
|
358
|
+
|
359
|
+
var xMin = Cartesian3.clone(currentPos, fromPointsXMin);
|
360
|
+
var yMin = Cartesian3.clone(currentPos, fromPointsYMin);
|
361
|
+
var zMin = Cartesian3.clone(currentPos, fromPointsZMin);
|
362
|
+
|
363
|
+
var xMax = Cartesian3.clone(currentPos, fromPointsXMax);
|
364
|
+
var yMax = Cartesian3.clone(currentPos, fromPointsYMax);
|
365
|
+
var zMax = Cartesian3.clone(currentPos, fromPointsZMax);
|
366
|
+
|
367
|
+
var numElements = positions.length;
|
368
|
+
for (var i = 0; i < numElements; i += stride) {
|
369
|
+
var x = positions[i] + center.x;
|
370
|
+
var y = positions[i + 1] + center.y;
|
371
|
+
var z = positions[i + 2] + center.z;
|
372
|
+
|
373
|
+
currentPos.x = x;
|
374
|
+
currentPos.y = y;
|
375
|
+
currentPos.z = z;
|
376
|
+
|
377
|
+
// Store points containing the the smallest and largest components
|
378
|
+
if (x < xMin.x) {
|
379
|
+
Cartesian3.clone(currentPos, xMin);
|
380
|
+
}
|
381
|
+
|
382
|
+
if (x > xMax.x) {
|
383
|
+
Cartesian3.clone(currentPos, xMax);
|
384
|
+
}
|
385
|
+
|
386
|
+
if (y < yMin.y) {
|
387
|
+
Cartesian3.clone(currentPos, yMin);
|
388
|
+
}
|
389
|
+
|
390
|
+
if (y > yMax.y) {
|
391
|
+
Cartesian3.clone(currentPos, yMax);
|
392
|
+
}
|
393
|
+
|
394
|
+
if (z < zMin.z) {
|
395
|
+
Cartesian3.clone(currentPos, zMin);
|
396
|
+
}
|
397
|
+
|
398
|
+
if (z > zMax.z) {
|
399
|
+
Cartesian3.clone(currentPos, zMax);
|
400
|
+
}
|
401
|
+
}
|
402
|
+
|
403
|
+
// Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).
|
404
|
+
var xSpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(xMax, xMin, fromPointsScratch));
|
405
|
+
var ySpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(yMax, yMin, fromPointsScratch));
|
406
|
+
var zSpan = Cartesian3.magnitudeSquared(Cartesian3.subtract(zMax, zMin, fromPointsScratch));
|
407
|
+
|
408
|
+
// Set the diameter endpoints to the largest span.
|
409
|
+
var diameter1 = xMin;
|
410
|
+
var diameter2 = xMax;
|
411
|
+
var maxSpan = xSpan;
|
412
|
+
if (ySpan > maxSpan) {
|
413
|
+
maxSpan = ySpan;
|
414
|
+
diameter1 = yMin;
|
415
|
+
diameter2 = yMax;
|
416
|
+
}
|
417
|
+
if (zSpan > maxSpan) {
|
418
|
+
maxSpan = zSpan;
|
419
|
+
diameter1 = zMin;
|
420
|
+
diameter2 = zMax;
|
421
|
+
}
|
422
|
+
|
423
|
+
// Calculate the center of the initial sphere found by Ritter's algorithm
|
424
|
+
var ritterCenter = fromPointsRitterCenter;
|
425
|
+
ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;
|
426
|
+
ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;
|
427
|
+
ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;
|
428
|
+
|
429
|
+
// Calculate the radius of the initial sphere found by Ritter's algorithm
|
430
|
+
var radiusSquared = Cartesian3.magnitudeSquared(Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch));
|
431
|
+
var ritterRadius = Math.sqrt(radiusSquared);
|
432
|
+
|
433
|
+
// Find the center of the sphere found using the Naive method.
|
434
|
+
var minBoxPt = fromPointsMinBoxPt;
|
435
|
+
minBoxPt.x = xMin.x;
|
436
|
+
minBoxPt.y = yMin.y;
|
437
|
+
minBoxPt.z = zMin.z;
|
438
|
+
|
439
|
+
var maxBoxPt = fromPointsMaxBoxPt;
|
440
|
+
maxBoxPt.x = xMax.x;
|
441
|
+
maxBoxPt.y = yMax.y;
|
442
|
+
maxBoxPt.z = zMax.z;
|
443
|
+
|
444
|
+
var naiveCenter = Cartesian3.multiplyByScalar(Cartesian3.add(minBoxPt, maxBoxPt, fromPointsScratch), 0.5);
|
445
|
+
|
446
|
+
// Begin 2nd pass to find naive radius and modify the ritter sphere.
|
447
|
+
var naiveRadius = 0;
|
448
|
+
for (i = 0; i < numElements; i += stride) {
|
449
|
+
currentPos.x = positions[i] + center.x;
|
450
|
+
currentPos.y = positions[i + 1] + center.y;
|
451
|
+
currentPos.z = positions[i + 2] + center.z;
|
452
|
+
|
453
|
+
// Find the furthest point from the naive center to calculate the naive radius.
|
454
|
+
var r = Cartesian3.magnitude(Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch));
|
455
|
+
if (r > naiveRadius) {
|
456
|
+
naiveRadius = r;
|
457
|
+
}
|
458
|
+
|
459
|
+
// Make adjustments to the Ritter Sphere to include all points.
|
460
|
+
var oldCenterToPointSquared = Cartesian3.magnitudeSquared(Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch));
|
461
|
+
if (oldCenterToPointSquared > radiusSquared) {
|
462
|
+
var oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);
|
463
|
+
// Calculate new radius to include the point that lies outside
|
464
|
+
ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;
|
465
|
+
radiusSquared = ritterRadius * ritterRadius;
|
466
|
+
// Calculate center of new Ritter sphere
|
467
|
+
var oldToNew = oldCenterToPoint - ritterRadius;
|
468
|
+
ritterCenter.x = (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / oldCenterToPoint;
|
469
|
+
ritterCenter.y = (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / oldCenterToPoint;
|
470
|
+
ritterCenter.z = (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / oldCenterToPoint;
|
471
|
+
}
|
472
|
+
}
|
473
|
+
|
474
|
+
if (ritterRadius < naiveRadius) {
|
475
|
+
Cartesian3.clone(ritterCenter, result.center);
|
476
|
+
result.radius = ritterRadius;
|
477
|
+
} else {
|
478
|
+
Cartesian3.clone(naiveCenter, result.center);
|
479
|
+
result.radius = naiveRadius;
|
480
|
+
}
|
481
|
+
|
482
|
+
return result;
|
483
|
+
};
|
484
|
+
|
485
|
+
/**
|
486
|
+
* Duplicates a BoundingSphere instance.
|
487
|
+
* @memberof BoundingSphere
|
488
|
+
*
|
489
|
+
* @param {BoundingSphere} sphere The bounding sphere to duplicate.
|
490
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
491
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
|
492
|
+
*
|
493
|
+
* @exception {DeveloperError} sphere is required.
|
494
|
+
*/
|
495
|
+
BoundingSphere.clone = function(sphere, result) {
|
496
|
+
if (typeof sphere === 'undefined') {
|
497
|
+
throw new DeveloperError('sphere is required');
|
498
|
+
}
|
499
|
+
|
500
|
+
if (typeof result === 'undefined') {
|
501
|
+
return new BoundingSphere(sphere.center, sphere.radius);
|
502
|
+
}
|
503
|
+
|
504
|
+
result.center = Cartesian3.clone(sphere.center, result.center);
|
505
|
+
result.radius = sphere.radius;
|
506
|
+
return result;
|
507
|
+
};
|
508
|
+
|
509
|
+
var unionScratch = new Cartesian3();
|
510
|
+
var unionScratchCenter = new Cartesian3();
|
511
|
+
/**
|
512
|
+
* Computes a bounding sphere that contains both the left and right bounding spheres.
|
513
|
+
* @memberof BoundingSphere
|
514
|
+
*
|
515
|
+
* @param {BoundingSphere} left A sphere to enclose in a bounding sphere.
|
516
|
+
* @param {BoundingSphere} right A sphere to enclose in a bounding sphere.
|
517
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
518
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
|
519
|
+
*
|
520
|
+
* @exception {DeveloperError} left is required.
|
521
|
+
* @exception {DeveloperError} right is required.
|
522
|
+
*/
|
523
|
+
BoundingSphere.union = function(left, right, result) {
|
524
|
+
if (typeof left === 'undefined') {
|
525
|
+
throw new DeveloperError('left is required.');
|
526
|
+
}
|
527
|
+
|
528
|
+
if (typeof right === 'undefined') {
|
529
|
+
throw new DeveloperError('right is required.');
|
530
|
+
}
|
531
|
+
|
532
|
+
if (typeof result === 'undefined') {
|
533
|
+
result = new BoundingSphere();
|
534
|
+
}
|
535
|
+
|
536
|
+
var leftCenter = left.center;
|
537
|
+
var rightCenter = right.center;
|
538
|
+
|
539
|
+
Cartesian3.add(leftCenter, rightCenter, unionScratchCenter);
|
540
|
+
var center = Cartesian3.multiplyByScalar(unionScratchCenter, 0.5, unionScratchCenter);
|
541
|
+
|
542
|
+
var radius1 = Cartesian3.subtract(leftCenter, center, unionScratch).magnitude() + left.radius;
|
543
|
+
var radius2 = Cartesian3.subtract(rightCenter, center, unionScratch).magnitude() + right.radius;
|
544
|
+
|
545
|
+
result.radius = Math.max(radius1, radius2);
|
546
|
+
Cartesian3.clone(center, result.center);
|
547
|
+
|
548
|
+
return result;
|
549
|
+
};
|
550
|
+
|
551
|
+
var expandScratch = new Cartesian3();
|
552
|
+
/**
|
553
|
+
* Computes a bounding sphere by enlarging the provided sphere to contain the provided point.
|
554
|
+
* @memberof BoundingSphere
|
555
|
+
*
|
556
|
+
* @param {BoundingSphere} sphere A sphere to expand.
|
557
|
+
* @param {Cartesian3} point A point to enclose in a bounding sphere.
|
558
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
559
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
|
560
|
+
*
|
561
|
+
* @exception {DeveloperError} sphere is required.
|
562
|
+
* @exception {DeveloperError} point is required.
|
563
|
+
*/
|
564
|
+
BoundingSphere.expand = function(sphere, point, result) {
|
565
|
+
if (typeof sphere === 'undefined') {
|
566
|
+
throw new DeveloperError('sphere is required.');
|
567
|
+
}
|
568
|
+
|
569
|
+
if (typeof point === 'undefined') {
|
570
|
+
throw new DeveloperError('point is required.');
|
571
|
+
}
|
572
|
+
|
573
|
+
result = BoundingSphere.clone(sphere, result);
|
574
|
+
|
575
|
+
var radius = Cartesian3.subtract(point, result.center, expandScratch).magnitude();
|
576
|
+
if (radius > result.radius) {
|
577
|
+
result.radius = radius;
|
578
|
+
}
|
579
|
+
|
580
|
+
return result;
|
581
|
+
};
|
582
|
+
|
583
|
+
/**
|
584
|
+
* Determines which side of a plane a sphere is located.
|
585
|
+
* @memberof BoundingSphere
|
586
|
+
*
|
587
|
+
* @param {BoundingSphere} sphere The bounding sphere to test.
|
588
|
+
* @param {Cartesian4} plane The coefficients of the plane in the for ax + by + cz + d = 0
|
589
|
+
* where the coefficients a, b, c, and d are the components x, y, z,
|
590
|
+
* and w of the {Cartesian4}, respectively.
|
591
|
+
* @return {Intersect} {Intersect.INSIDE} if the entire sphere is on the side of the plane the normal
|
592
|
+
* is pointing, {Intersect.OUTSIDE} if the entire sphere is on the opposite side,
|
593
|
+
* and {Intersect.INTERSETING} if the sphere intersects the plane.
|
594
|
+
*
|
595
|
+
* @exception {DeveloperError} sphere is required.
|
596
|
+
* @exception {DeveloperError} plane is required.
|
597
|
+
*/
|
598
|
+
BoundingSphere.intersect = function(sphere, plane) {
|
599
|
+
if (typeof sphere === 'undefined') {
|
600
|
+
throw new DeveloperError('sphere is required.');
|
601
|
+
}
|
602
|
+
|
603
|
+
if (typeof plane === 'undefined') {
|
604
|
+
throw new DeveloperError('plane is required.');
|
605
|
+
}
|
606
|
+
|
607
|
+
var center = sphere.center;
|
608
|
+
var radius = sphere.radius;
|
609
|
+
var distanceToPlane = Cartesian3.dot(plane, center) + plane.w;
|
610
|
+
|
611
|
+
if (distanceToPlane < -radius) {
|
612
|
+
// The center point is negative side of the plane normal
|
613
|
+
return Intersect.OUTSIDE;
|
614
|
+
} else if (distanceToPlane < radius) {
|
615
|
+
// The center point is positive side of the plane, but radius extends beyond it; partial overlap
|
616
|
+
return Intersect.INTERSECTING;
|
617
|
+
}
|
618
|
+
return Intersect.INSIDE;
|
619
|
+
};
|
620
|
+
|
621
|
+
var transformCart4 = Cartesian4.UNIT_W.clone();
|
622
|
+
/**
|
623
|
+
* Applies a 4x4 affine transformation matrix to a bounding sphere.
|
624
|
+
* @memberof BoundingSphere
|
625
|
+
*
|
626
|
+
* @param {BoundingSphere} sphere The bounding sphere to apply the transformation to.
|
627
|
+
* @param {Matrix4} transform The transformation matrix to apply to the bounding sphere.
|
628
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
629
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
|
630
|
+
*
|
631
|
+
* @exception {DeveloperError} sphere is required.
|
632
|
+
* @exception {DeveloperError} transform is required.
|
633
|
+
*/
|
634
|
+
BoundingSphere.transform = function(sphere, transform, result) {
|
635
|
+
if (typeof sphere === 'undefined') {
|
636
|
+
throw new DeveloperError('sphere is required.');
|
637
|
+
}
|
638
|
+
|
639
|
+
if (typeof transform === 'undefined') {
|
640
|
+
throw new DeveloperError('transform is required.');
|
641
|
+
}
|
642
|
+
|
643
|
+
if (typeof result === 'undefined') {
|
644
|
+
result = new BoundingSphere();
|
645
|
+
}
|
646
|
+
|
647
|
+
Matrix4.multiplyByPoint(transform, sphere.center, transformCart4);
|
648
|
+
|
649
|
+
Cartesian3.clone(transformCart4, result.center);
|
650
|
+
result.radius = sphere.radius;
|
651
|
+
return result;
|
652
|
+
};
|
653
|
+
|
654
|
+
var scratchCartesian3 = new Cartesian3();
|
655
|
+
/**
|
656
|
+
* The distances calculated by the vector from the center of the bounding sphere to position projected onto direction
|
657
|
+
* plus/minus the radius of the bounding sphere.
|
658
|
+
* <br>
|
659
|
+
* If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the
|
660
|
+
* closest and farthest planes from position that intersect the bounding sphere.
|
661
|
+
* @memberof BoundingSphere
|
662
|
+
*
|
663
|
+
* @param {BoundingSphere} sphere The bounding sphere to calculate the distance to.
|
664
|
+
* @param {Cartesian3} position The position to calculate the distance from.
|
665
|
+
* @param {Cartesian3} direction The direction from position.
|
666
|
+
* @param {Cartesian2} [result] A Cartesian2 to store the nearest and farthest distances.
|
667
|
+
* @return {Interval} The nearest and farthest distances on the bounding sphere from position in direction.
|
668
|
+
*
|
669
|
+
* @exception {DeveloperError} sphere is required.
|
670
|
+
* @exception {DeveloperError} position is required.
|
671
|
+
* @exception {DeveloperError} direction is required.
|
672
|
+
*/
|
673
|
+
BoundingSphere.getPlaneDistances = function(sphere, position, direction, result) {
|
674
|
+
if (typeof sphere === 'undefined') {
|
675
|
+
throw new DeveloperError('sphere is required.');
|
676
|
+
}
|
677
|
+
|
678
|
+
if (typeof position === 'undefined') {
|
679
|
+
throw new DeveloperError('position is required.');
|
680
|
+
}
|
681
|
+
|
682
|
+
if (typeof direction === 'undefined') {
|
683
|
+
throw new DeveloperError('direction is required.');
|
684
|
+
}
|
685
|
+
|
686
|
+
if (typeof result === 'undefined') {
|
687
|
+
result = new Interval();
|
688
|
+
}
|
689
|
+
|
690
|
+
var toCenter = Cartesian3.subtract(sphere.center, position, scratchCartesian3);
|
691
|
+
var proj = Cartesian3.multiplyByScalar(direction, direction.dot(toCenter), scratchCartesian3);
|
692
|
+
var mag = proj.magnitude();
|
693
|
+
|
694
|
+
result.start = mag - sphere.radius;
|
695
|
+
result.stop = mag + sphere.radius;
|
696
|
+
return result;
|
697
|
+
};
|
698
|
+
|
699
|
+
/**
|
700
|
+
* Compares the provided BoundingSphere componentwise and returns
|
701
|
+
* <code>true</code> if they are equal, <code>false</code> otherwise.
|
702
|
+
* @memberof BoundingSphere
|
703
|
+
*
|
704
|
+
* @param {BoundingSphere} [left] The first BoundingSphere.
|
705
|
+
* @param {BoundingSphere} [right] The second BoundingSphere.
|
706
|
+
* @return {Boolean} <code>true</code> if left and right are equal, <code>false</code> otherwise.
|
707
|
+
*/
|
708
|
+
BoundingSphere.equals = function(left, right) {
|
709
|
+
return (left === right) ||
|
710
|
+
((typeof left !== 'undefined') &&
|
711
|
+
(typeof right !== 'undefined') &&
|
712
|
+
Cartesian3.equals(left.center, right.center) &&
|
713
|
+
left.radius === right.radius);
|
714
|
+
};
|
715
|
+
|
716
|
+
/**
|
717
|
+
* Duplicates this BoundingSphere instance.
|
718
|
+
* @memberof BoundingSphere
|
719
|
+
*
|
720
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
721
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
|
722
|
+
*/
|
723
|
+
BoundingSphere.prototype.clone = function(result) {
|
724
|
+
return BoundingSphere.clone(this, result);
|
725
|
+
};
|
726
|
+
|
727
|
+
/**
|
728
|
+
* Computes a bounding sphere that contains both this bounding sphere and the argument sphere.
|
729
|
+
* @memberof BoundingSphere
|
730
|
+
*
|
731
|
+
* @param {BoundingSphere} right The sphere to enclose in this bounding sphere.
|
732
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
733
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
|
734
|
+
*
|
735
|
+
* @exception {DeveloperError} sphere is required.
|
736
|
+
*/
|
737
|
+
BoundingSphere.prototype.union = function(right, result) {
|
738
|
+
return BoundingSphere.union(this, right, result);
|
739
|
+
};
|
740
|
+
|
741
|
+
/**
|
742
|
+
* Computes a bounding sphere that is sphere expanded to contain point.
|
743
|
+
* @memberof BoundingSphere
|
744
|
+
*
|
745
|
+
* @param {Cartesian3} point A point to enclose in a bounding sphere.
|
746
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
747
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.
|
748
|
+
*
|
749
|
+
* @exception {DeveloperError} point is required.
|
750
|
+
*/
|
751
|
+
BoundingSphere.prototype.expand = function(point, result) {
|
752
|
+
return BoundingSphere.expand(this, point, result);
|
753
|
+
};
|
754
|
+
|
755
|
+
/**
|
756
|
+
* Determines which side of a plane the sphere is located.
|
757
|
+
* @memberof BoundingSphere
|
758
|
+
*
|
759
|
+
* @param {Cartesian4} plane The coefficients of the plane in the for ax + by + cz + d = 0
|
760
|
+
* where the coefficients a, b, c, and d are the components x, y, z,
|
761
|
+
* and w of the {Cartesian4}, respectively.
|
762
|
+
* @return {Intersect} {Intersect.INSIDE} if the entire sphere is on the side of the plane the normal
|
763
|
+
* is pointing, {Intersect.OUTSIDE} if the entire sphere is on the opposite side,
|
764
|
+
* and {Intersect.INTERSETING} if the sphere intersects the plane.
|
765
|
+
*
|
766
|
+
* @exception {DeveloperError} plane is required.
|
767
|
+
*/
|
768
|
+
BoundingSphere.prototype.intersect = function(plane) {
|
769
|
+
return BoundingSphere.intersect(this, plane);
|
770
|
+
};
|
771
|
+
|
772
|
+
/**
|
773
|
+
* Applies a 4x4 affine transformation matrix to this bounding sphere.
|
774
|
+
* @memberof BoundingSphere
|
775
|
+
*
|
776
|
+
* @param {Matrix4} transform The transformation matrix to apply to the bounding sphere.
|
777
|
+
* @param {BoundingSphere} [result] The object onto which to store the result.
|
778
|
+
* @return {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.
|
779
|
+
*
|
780
|
+
* @exception {DeveloperError} transform is required.
|
781
|
+
*/
|
782
|
+
BoundingSphere.prototype.transform = function(transform, result) {
|
783
|
+
return BoundingSphere.transform(this, transform, result);
|
784
|
+
};
|
785
|
+
|
786
|
+
/**
|
787
|
+
* The distances calculated by the vector from the center of the bounding sphere to position projected onto direction
|
788
|
+
* plus/minus the radius of the bounding sphere.
|
789
|
+
* <br>
|
790
|
+
* If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the
|
791
|
+
* closest and farthest planes from position that intersect the bounding sphere.
|
792
|
+
* @memberof BoundingSphere
|
793
|
+
*
|
794
|
+
* @param {Cartesian3} position The position to calculate the distance from.
|
795
|
+
* @param {Cartesian3} direction The direction from position.
|
796
|
+
* @param {Cartesian2} [result] A Cartesian2 to store the nearest and farthest distances.
|
797
|
+
* @return {Interval} The nearest and farthest distances on the bounding sphere from position in direction.
|
798
|
+
*
|
799
|
+
* @exception {DeveloperError} position is required.
|
800
|
+
* @exception {DeveloperError} direction is required.
|
801
|
+
*/
|
802
|
+
BoundingSphere.prototype.getPlaneDistances = function(position, direction, result) {
|
803
|
+
return BoundingSphere.getPlaneDistances(this, position, direction, result);
|
804
|
+
};
|
805
|
+
|
806
|
+
/**
|
807
|
+
* Compares this BoundingSphere against the provided BoundingSphere componentwise and returns
|
808
|
+
* <code>true</code> if they are equal, <code>false</code> otherwise.
|
809
|
+
* @memberof BoundingSphere
|
810
|
+
*
|
811
|
+
* @param {BoundingSphere} [right] The right hand side BoundingSphere.
|
812
|
+
* @return {Boolean} <code>true</code> if they are equal, <code>false</code> otherwise.
|
813
|
+
*/
|
814
|
+
BoundingSphere.prototype.equals = function(right) {
|
815
|
+
return BoundingSphere.equals(this, right);
|
816
|
+
};
|
817
|
+
|
818
|
+
return BoundingSphere;
|
819
|
+
});
|