cesium 0.15.0 → 0.16.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/app/assets/javascripts/Cesium.js +7 -7
- data/app/assets/javascripts/Core/BoundingRectangle.js +1 -1
- data/app/assets/javascripts/Core/BoundingSphere.js +12 -5
- data/app/assets/javascripts/Core/BoxTessellator.js +11 -8
- data/app/assets/javascripts/Core/CatmullRomSpline.js +23 -21
- data/app/assets/javascripts/Core/Clock.js +1 -1
- data/app/assets/javascripts/Core/Color.js +51 -0
- data/app/assets/javascripts/Core/CubeMapEllipsoidTessellator.js +3 -1
- data/app/assets/javascripts/Core/EarthOrientationParameters.js +1 -1
- data/app/assets/javascripts/Core/EllipsoidalOccluder.js +15 -12
- data/app/assets/javascripts/Core/Extent.js +37 -0
- data/app/assets/javascripts/Core/ExtentTessellator.js +33 -25
- data/app/assets/javascripts/Core/HermitePolynomialApproximation.js +18 -19
- data/app/assets/javascripts/Core/HermiteSpline.js +49 -49
- data/app/assets/javascripts/Core/Iau2006XysData.js +4 -5
- data/app/assets/javascripts/Core/LagrangePolynomialApproximation.js +10 -20
- data/app/assets/javascripts/Core/LinearApproximation.js +19 -23
- data/app/assets/javascripts/Core/Math.js +15 -3
- data/app/assets/javascripts/Core/Matrix4.js +186 -2
- data/app/assets/javascripts/Core/MeshFilters.js +13 -13
- data/app/assets/javascripts/Core/OrientationInterpolator.js +19 -19
- data/app/assets/javascripts/Core/PlaneTessellator.js +8 -6
- data/app/assets/javascripts/Core/PolygonPipeline.js +21 -21
- data/app/assets/javascripts/Core/PolylinePipeline.js +17 -25
- data/app/assets/javascripts/Core/ScreenSpaceEventHandler.js +187 -185
- data/app/assets/javascripts/Core/Shapes.js +8 -4
- data/app/assets/javascripts/Core/Simon1994PlanetaryPositions.js +521 -0
- data/app/assets/javascripts/Core/Spherical.js +36 -9
- data/app/assets/javascripts/Core/TaskProcessor.js +42 -5
- data/app/assets/javascripts/Core/TimeIntervalCollection.js +5 -5
- data/app/assets/javascripts/Core/Tipsify.js +21 -16
- data/app/assets/javascripts/Core/Transforms.js +11 -11
- data/app/assets/javascripts/Core/TridiagonalSystemSolver.js +4 -4
- data/app/assets/javascripts/Core/clone.js +25 -8
- data/app/assets/javascripts/Core/defaultValue.js +10 -1
- data/app/assets/javascripts/Core/isCrossOriginUrl.js +32 -0
- data/app/assets/javascripts/Core/jsonp.js +2 -2
- data/app/assets/javascripts/Core/loadImage.js +13 -6
- data/app/assets/javascripts/Core/loadJson.js +4 -1
- data/app/assets/javascripts/Core/pointInsideTriangle2D.js +1 -1
- data/app/assets/javascripts/Core/writeTextToCanvas.js +1 -3
- data/app/assets/javascripts/DynamicScene/CzmlBoolean.js +7 -4
- data/app/assets/javascripts/DynamicScene/CzmlCartesian2.js +1 -1
- data/app/assets/javascripts/DynamicScene/CzmlCartesian3.js +1 -1
- data/app/assets/javascripts/DynamicScene/CzmlColor.js +1 -1
- data/app/assets/javascripts/DynamicScene/CzmlHorizontalOrigin.js +6 -5
- data/app/assets/javascripts/DynamicScene/CzmlImage.js +8 -3
- data/app/assets/javascripts/DynamicScene/CzmlLabelStyle.js +6 -5
- data/app/assets/javascripts/DynamicScene/CzmlNumber.js +6 -4
- data/app/assets/javascripts/DynamicScene/CzmlPosition.js +166 -0
- data/app/assets/javascripts/DynamicScene/CzmlString.js +6 -4
- data/app/assets/javascripts/DynamicScene/CzmlUnitCartesian3.js +1 -1
- data/app/assets/javascripts/DynamicScene/CzmlUnitQuaternion.js +1 -1
- data/app/assets/javascripts/DynamicScene/CzmlUnitSpherical.js +1 -1
- data/app/assets/javascripts/DynamicScene/CzmlVerticalOrigin.js +6 -5
- data/app/assets/javascripts/DynamicScene/DynamicGridMaterial.js +202 -0
- data/app/assets/javascripts/DynamicScene/DynamicMaterialProperty.js +5 -3
- data/app/assets/javascripts/DynamicScene/DynamicObject.js +1 -2
- data/app/assets/javascripts/DynamicScene/DynamicPathVisualizer.js +19 -15
- data/app/assets/javascripts/DynamicScene/DynamicPointVisualizer.js +12 -10
- data/app/assets/javascripts/DynamicScene/DynamicPolylineVisualizer.js +17 -10
- data/app/assets/javascripts/DynamicScene/DynamicPositionProperty.js +39 -90
- data/app/assets/javascripts/DynamicScene/DynamicProperty.js +19 -6
- data/app/assets/javascripts/DynamicScene/ReferenceProperty.js +6 -4
- data/app/assets/javascripts/DynamicScene/VisualizerCollection.js +10 -11
- data/app/assets/javascripts/Renderer/ClearCommand.js +60 -9
- data/app/assets/javascripts/Renderer/Context.js +234 -575
- data/app/assets/javascripts/Renderer/DrawCommand.js +15 -3
- data/app/assets/javascripts/Renderer/PassState.js +55 -0
- data/app/assets/javascripts/Renderer/PickFramebuffer.js +47 -77
- data/app/assets/javascripts/Renderer/RenderState.js +541 -0
- data/app/assets/javascripts/Renderer/ShaderCache.js +34 -1
- data/app/assets/javascripts/Renderer/ShaderProgram.js +112 -6
- data/app/assets/javascripts/Renderer/TextureAtlas.js +63 -67
- data/app/assets/javascripts/Renderer/UniformState.js +59 -30
- data/app/assets/javascripts/Renderer/VertexArray.js +9 -7
- data/app/assets/javascripts/Renderer/VertexArrayFacade.js +28 -27
- data/app/assets/javascripts/Renderer/createPickFragmentShaderSource.js +53 -0
- data/app/assets/javascripts/Renderer/loadCubeMap.js +10 -11
- data/app/assets/javascripts/Scene/AnimationCollection.js +48 -44
- data/app/assets/javascripts/Scene/Billboard.js +8 -2
- data/app/assets/javascripts/Scene/BillboardCollection.js +66 -62
- data/app/assets/javascripts/Scene/Camera.js +3 -0
- data/app/assets/javascripts/Scene/CameraController.js +3 -3
- data/app/assets/javascripts/Scene/CameraFlightPath.js +9 -6
- data/app/assets/javascripts/Scene/CentralBody.js +47 -65
- data/app/assets/javascripts/Scene/CentralBodySurface.js +9 -6
- data/app/assets/javascripts/Scene/CentralBodySurfaceShaderSet.js +5 -9
- data/app/assets/javascripts/Scene/CompositePrimitive.js +8 -8
- data/app/assets/javascripts/Scene/CustomSensorVolume.js +66 -55
- data/app/assets/javascripts/Scene/EllipsoidPrimitive.js +26 -27
- data/app/assets/javascripts/Scene/FrameState.js +15 -4
- data/app/assets/javascripts/Scene/GridImageryProvider.js +266 -0
- data/app/assets/javascripts/Scene/ImageryLayer.js +44 -19
- data/app/assets/javascripts/Scene/ImageryLayerCollection.js +3 -0
- data/app/assets/javascripts/Scene/ImageryProvider.js +3 -0
- data/app/assets/javascripts/Scene/Label.js +4 -4
- data/app/assets/javascripts/Scene/LabelCollection.js +2 -9
- data/app/assets/javascripts/Scene/Material.js +97 -8
- data/app/assets/javascripts/Scene/OrthographicFrustum.js +2 -2
- data/app/assets/javascripts/Scene/PerformanceDisplay.js +17 -10
- data/app/assets/javascripts/Scene/PerspectiveOffCenterFrustum.js +2 -2
- data/app/assets/javascripts/Scene/Polygon.js +30 -56
- data/app/assets/javascripts/Scene/Polyline.js +93 -227
- data/app/assets/javascripts/Scene/PolylineCollection.js +685 -757
- data/app/assets/javascripts/Scene/Projections.js +2 -2
- data/app/assets/javascripts/Scene/RectangularPyramidSensorVolume.js +21 -16
- data/app/assets/javascripts/Scene/Scene.js +40 -32
- data/app/assets/javascripts/Scene/SceneTransitioner.js +8 -56
- data/app/assets/javascripts/Scene/SensorVolumeCollection.js +6 -20
- data/app/assets/javascripts/Scene/SkyAtmosphere.js +0 -11
- data/app/assets/javascripts/Scene/SkyBox.js +0 -11
- data/app/assets/javascripts/Scene/VRTheWorldTerrainProvider.js +3 -2
- data/app/assets/javascripts/Scene/ViewportQuad.js +8 -8
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.glsl +0 -2
- data/app/assets/javascripts/Shaders/BillboardCollectionVS.js +0 -2
- data/app/assets/javascripts/Shaders/BuiltinFunctions.glsl +517 -3
- data/app/assets/javascripts/Shaders/BuiltinFunctions.js +535 -4
- data/app/assets/javascripts/Shaders/CentralBodyFS.glsl +11 -24
- data/app/assets/javascripts/Shaders/CentralBodyFS.js +11 -24
- data/app/assets/javascripts/Shaders/CentralBodyVS.glsl +1 -3
- data/app/assets/javascripts/Shaders/CentralBodyVS.js +1 -3
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.glsl +14 -33
- data/app/assets/javascripts/Shaders/CustomSensorVolumeFS.js +14 -33
- data/app/assets/javascripts/Shaders/EllipsoidFS.glsl +0 -1
- data/app/assets/javascripts/Shaders/EllipsoidFS.js +0 -1
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.glsl +1 -11
- data/app/assets/javascripts/Shaders/Materials/CheckerboardMaterial.js +1 -11
- data/app/assets/javascripts/Shaders/Materials/FadeMaterial.glsl +36 -0
- data/app/assets/javascripts/Shaders/Materials/FadeMaterial.js +42 -0
- data/app/assets/javascripts/Shaders/Materials/GridMaterial.glsl +9 -1
- data/app/assets/javascripts/Shaders/Materials/GridMaterial.js +9 -1
- data/app/assets/javascripts/Shaders/Materials/PolylineArrowMaterial.glsl +60 -0
- data/app/assets/javascripts/Shaders/Materials/PolylineArrowMaterial.js +66 -0
- data/app/assets/javascripts/Shaders/Materials/PolylineGlowMaterial.glsl +17 -0
- data/app/assets/javascripts/Shaders/Materials/PolylineGlowMaterial.js +23 -0
- data/app/assets/javascripts/Shaders/Materials/PolylineOutlineMaterial.glsl +28 -0
- data/app/assets/javascripts/Shaders/Materials/PolylineOutlineMaterial.js +34 -0
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.glsl +4 -10
- data/app/assets/javascripts/Shaders/Materials/StripeMaterial.js +4 -10
- data/app/assets/javascripts/Shaders/PolygonFS.glsl +0 -3
- data/app/assets/javascripts/Shaders/PolygonFS.js +1 -4
- data/app/assets/javascripts/Shaders/PolygonVS.glsl +3 -4
- data/app/assets/javascripts/Shaders/PolygonVS.js +3 -4
- data/app/assets/javascripts/Shaders/PolylineFS.glsl +9 -2
- data/app/assets/javascripts/Shaders/PolylineFS.js +9 -2
- data/app/assets/javascripts/Shaders/PolylineVS.glsl +131 -14
- data/app/assets/javascripts/Shaders/PolylineVS.js +131 -14
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.glsl +1 -19
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorFS.js +1 -19
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.glsl +9 -1
- data/app/assets/javascripts/Shaders/ReprojectWebMercatorVS.js +9 -1
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.glsl +1 -3
- data/app/assets/javascripts/Shaders/SkyAtmosphereFS.js +1 -3
- data/app/assets/javascripts/Shaders/SkyBoxFS.glsl +1 -2
- data/app/assets/javascripts/Shaders/SkyBoxFS.js +1 -2
- data/app/assets/javascripts/Widgets/Animation/Animation.js +8 -5
- data/app/assets/javascripts/Widgets/Dojo/CesiumViewerWidget.js +19 -1
- data/app/assets/javascripts/Widgets/Timeline/Timeline.js +19 -2
- data/lib/cesium/version.rb +1 -1
- data/test/dummy/app/assets/javascripts/application.js.coffee +10 -10
- data/test/dummy/log/development.log +28285 -0
- data/test/dummy/tmp/cache/assets/BAF/370/sprockets%2F799a74598087f7719313562f44828061 +0 -0
- data/test/dummy/tmp/cache/assets/BF8/BC0/sprockets%2F1982805b53487d15554f20955019b8c4 +0 -0
- data/test/dummy/tmp/cache/assets/C12/030/sprockets%2Fbd84b00d783150a219825433401a7946 +0 -0
- data/test/dummy/tmp/cache/assets/C1F/BE0/sprockets%2F9ff195723d3a539023420682a372f561 +0 -0
- data/test/dummy/tmp/cache/assets/C23/060/sprockets%2F0844038b70e644bef4539389305680a3 +0 -0
- data/test/dummy/tmp/cache/assets/C27/DA0/sprockets%2Fe49200d07769d24f54f721d890142818 +0 -0
- data/test/dummy/tmp/cache/assets/C37/EB0/sprockets%2F410166e528f769c35999d061f6552d57 +0 -0
- data/test/dummy/tmp/cache/assets/C38/870/sprockets%2F3c244a5393086f3b95954f4675f29458 +0 -0
- data/test/dummy/tmp/cache/assets/C44/870/sprockets%2Fc7607e52811e723312c83d096c611c32 +0 -0
- data/test/dummy/tmp/cache/assets/C46/770/sprockets%2F9b6c82d0454ab5ba8727173860060324 +0 -0
- data/test/dummy/tmp/cache/assets/C46/E60/sprockets%2F151028e967f13248ca6121c9407242cf +0 -0
- data/test/dummy/tmp/cache/assets/C48/360/sprockets%2Fc966013651008025255f5b53b1d63f9e +0 -0
- data/test/dummy/tmp/cache/assets/C49/6B0/sprockets%2Ff15d3a84028c48073d820c51575157a4 +0 -0
- data/test/dummy/tmp/cache/assets/C4A/020/sprockets%2F162d504e77459f0304b964139300cfe3 +0 -0
- data/test/dummy/tmp/cache/assets/C4A/2B0/sprockets%2F821c1d08482a9b936b661a56444551b3 +0 -0
- data/test/dummy/tmp/cache/assets/C4F/630/sprockets%2F8935f51ad832c341c838751031a827f2 +0 -0
- data/test/dummy/tmp/cache/assets/C51/170/sprockets%2F7121148c53e447e867b886592e11ad00 +0 -0
- data/test/dummy/tmp/cache/assets/C53/040/sprockets%2F52411d26c4863636c7ae5b5090690f94 +0 -0
- data/test/dummy/tmp/cache/assets/C57/D10/sprockets%2F784e21cb5b634a598629115ef4685213 +0 -0
- data/test/dummy/tmp/cache/assets/C59/810/sprockets%2Fc37183f61d9511d324983656cd9375a1 +0 -0
- data/test/dummy/tmp/cache/assets/C61/2F0/sprockets%2Fe7f511982b4799474ab391f714d39630 +0 -0
- data/test/dummy/tmp/cache/assets/C64/730/sprockets%2F78fd706ba991f21a399070866616c297 +0 -0
- data/test/dummy/tmp/cache/assets/C65/0E0/sprockets%2F8303e4555c14f5f62cd2979665f50578 +0 -0
- data/test/dummy/tmp/cache/assets/C6C/C90/sprockets%2Fad7947b2492467a62388859219a92de9 +0 -0
- data/test/dummy/tmp/cache/assets/C70/900/sprockets%2F8dc34820f1167ed79c121111a0696c03 +0 -0
- data/test/dummy/tmp/cache/assets/C72/450/sprockets%2F12725ceae78656537003a1240f640ed4 +0 -0
- data/test/dummy/tmp/cache/assets/C73/0F0/sprockets%2F8a6a50d9b866140c720b6a48307c4116 +0 -0
- data/test/dummy/tmp/cache/assets/C75/F50/sprockets%2F52991c5c131fb0049279124ef17047ba +0 -0
- data/test/dummy/tmp/cache/assets/C76/F10/sprockets%2F536e031c5d9a257b602d38f8711480a2 +0 -0
- data/test/dummy/tmp/cache/assets/C7E/EA0/sprockets%2F2504a119ab66f79d8d296032e957a023 +0 -0
- data/test/dummy/tmp/cache/assets/C7F/860/sprockets%2F7646acf5464f211440d12d09847e7c43 +0 -0
- data/test/dummy/tmp/cache/assets/C80/150/sprockets%2F0d3881005b0646df783d5c24683d34f5 +0 -0
- data/test/dummy/tmp/cache/assets/C80/780/sprockets%2F49930c35001a30c38745b89a6a86cf74 +0 -0
- data/test/dummy/tmp/cache/assets/C82/060/sprockets%2Fb043f48276a50489714f9ec04525e26a +0 -0
- data/test/dummy/tmp/cache/assets/C82/580/sprockets%2F8118f4526088ba8fd441f20317475d6b +0 -0
- data/test/dummy/tmp/cache/assets/C82/AA0/sprockets%2Fd83006c52345d7fe51216f1e577a8185 +0 -0
- data/test/dummy/tmp/cache/assets/C83/A50/sprockets%2F26b151f7490286ff7059ff9a411e1027 +0 -0
- data/test/dummy/tmp/cache/assets/C84/E00/sprockets%2F49d13d786c17ba7650b374646455a6b3 +0 -0
- data/test/dummy/tmp/cache/assets/C85/310/sprockets%2Fc638d86c720815e5b635e0a3646e2186 +0 -0
- data/test/dummy/tmp/cache/assets/C87/1B0/sprockets%2F58524f16545fa54ea39c3c1270d06799 +0 -0
- data/test/dummy/tmp/cache/assets/C88/960/sprockets%2F50655bc2c86c7c3007756af818375e64 +0 -0
- data/test/dummy/tmp/cache/assets/C89/9E0/sprockets%2Fbc5d891273e7d61e56762000337868bf +0 -0
- data/test/dummy/tmp/cache/assets/C8A/680/sprockets%2F401d94c3b6643cb7764590d5765197ea +0 -0
- data/test/dummy/tmp/cache/assets/C8B/0F0/sprockets%2F3317c35ce7597681091ac91985d08bb5 +0 -0
- data/test/dummy/tmp/cache/assets/C8B/A30/sprockets%2Fe20153c26552232703d0f4a5a60b10ed +0 -0
- data/test/dummy/tmp/cache/assets/C8D/FC0/sprockets%2Fab1b1b654d968822069892e844f5244f +0 -0
- data/test/dummy/tmp/cache/assets/C8E/1A0/sprockets%2F7937090f77385164f68c0ee252b26be5 +0 -0
- data/test/dummy/tmp/cache/assets/C8E/1B0/sprockets%2F3309cd849788a2b736f12369ad4e4851 +0 -0
- data/test/dummy/tmp/cache/assets/C8E/D50/sprockets%2F687d2438d13763a733287fc4a2e5f746 +0 -0
- data/test/dummy/tmp/cache/assets/C8E/E40/sprockets%2F96aaf9af5e7906347880902610773bc5 +0 -0
- data/test/dummy/tmp/cache/assets/C8F/370/sprockets%2Ff794170ec844d49b57216a088c0297d7 +0 -0
- data/test/dummy/tmp/cache/assets/C91/F00/sprockets%2F0f611f4f95811990472ff1b6f95383d5 +0 -0
- data/test/dummy/tmp/cache/assets/C98/D30/sprockets%2F3f2411651caa9b4fd0833085b001f490 +0 -0
- data/test/dummy/tmp/cache/assets/CA9/5A0/sprockets%2F8282351dd11504a68cbc8500b7786cf2 +0 -0
- data/test/dummy/tmp/cache/assets/CA9/E20/sprockets%2F1ca84c82be52603a0c947256a38a0598 +0 -0
- data/test/dummy/tmp/cache/assets/CAA/3C0/sprockets%2F75ce813900f222ce7892711f61db04d3 +0 -0
- data/test/dummy/tmp/cache/assets/CAA/400/sprockets%2F5c330e413aa8e6769050215b5366c7ef +0 -0
- data/test/dummy/tmp/cache/assets/CAA/A60/sprockets%2F76b467bc7a2344e208653c4261f8ab15 +0 -0
- data/test/dummy/tmp/cache/assets/CAA/D90/sprockets%2Fd477a5c2046351a0c462bb945e3954e5 +0 -0
- data/test/dummy/tmp/cache/assets/CAB/670/sprockets%2F678e67cae28828b42b010381be1f1247 +0 -0
- data/test/dummy/tmp/cache/assets/CAC/000/sprockets%2F39720f0080e70a954d9956acd571d0b2 +0 -0
- data/test/dummy/tmp/cache/assets/CAC/220/sprockets%2Fe9d921c5251a11d0a6296974975dbb20 +0 -0
- data/test/dummy/tmp/cache/assets/CAD/B20/sprockets%2F4c087829240d4b69e0a47e39bb8124d0 +0 -0
- data/test/dummy/tmp/cache/assets/CAD/CF0/sprockets%2F25811882cd57a31606348eb7b16f4f0d +0 -0
- data/test/dummy/tmp/cache/assets/CAE/0D0/sprockets%2F02345f5b06f3a25b588ed66b8e167034 +0 -0
- data/test/dummy/tmp/cache/assets/CAF/AD0/sprockets%2Fec228a94364d0d686876d02550ed15c1 +0 -0
- data/test/dummy/tmp/cache/assets/CB4/D20/sprockets%2F94c251de5c21293f227709479c4f32be +0 -0
- data/test/dummy/tmp/cache/assets/CB5/4C0/sprockets%2F446522846ac4ed6619268b3e00fd497a +0 -0
- data/test/dummy/tmp/cache/assets/CB7/FA0/sprockets%2F62d364e38ba9b500f8b1633367f782b9 +0 -0
- data/test/dummy/tmp/cache/assets/CB8/180/sprockets%2Fe66eae8997e04c4bf70531e166511662 +0 -0
- data/test/dummy/tmp/cache/assets/CB8/E20/sprockets%2Fcb0a5df9573576546972b95a14d8f112 +0 -0
- data/test/dummy/tmp/cache/assets/CB8/EA0/sprockets%2F9e63d365e2159c725d111698cc04a7e7 +0 -0
- data/test/dummy/tmp/cache/assets/CB9/680/sprockets%2F9bad6dc04875e04891351521b9795f5a +0 -0
- data/test/dummy/tmp/cache/assets/CBA/250/sprockets%2F39bb3860405888c9f3b4b35c738b940c +0 -0
- data/test/dummy/tmp/cache/assets/CBB/E80/sprockets%2F43b17645e39f018bc195bc9828f4b357 +0 -0
- data/test/dummy/tmp/cache/assets/CBC/6C0/sprockets%2F6f494cff47ee245d30168217542c66d6 +0 -0
- data/test/dummy/tmp/cache/assets/CBE/6B0/sprockets%2F285b1ec717d1c4c725758951c8785b2f +0 -0
- data/test/dummy/tmp/cache/assets/CBE/F20/sprockets%2F7610efc00f29935606275944978fbabf +0 -0
- data/test/dummy/tmp/cache/assets/CBF/3A0/sprockets%2Fc7b6a2891626c77607ea2881dc84d475 +0 -0
- data/test/dummy/tmp/cache/assets/CBF/8B0/sprockets%2F5c98534d57c1e7f7d2926173d27e4d14 +0 -0
- data/test/dummy/tmp/cache/assets/CC0/E60/sprockets%2F9731b0739ec7356b2e484cb427d6955f +0 -0
- data/test/dummy/tmp/cache/assets/CC1/600/sprockets%2F322629f082c9e743f47a32edd58874b8 +0 -0
- data/test/dummy/tmp/cache/assets/CC4/950/sprockets%2F697670d712a9a24f564f9e62b5ed1389 +0 -0
- data/test/dummy/tmp/cache/assets/CC4/B10/sprockets%2F55b1a4137e59cad5520e1f012eb29021 +0 -0
- data/test/dummy/tmp/cache/assets/CC4/B80/sprockets%2F5b090557c9468f93cc1ab77898ba2629 +0 -0
- data/test/dummy/tmp/cache/assets/CC7/0B0/sprockets%2Fa26009e31f9e68672f4fc7f873909a64 +0 -0
- data/test/dummy/tmp/cache/assets/CC9/D20/sprockets%2F372172a3ef18b8cac40a5c410f748021 +0 -0
- data/test/dummy/tmp/cache/assets/CCD/9B0/sprockets%2F0b3845e705c1a2c20c80b56c9c8a2246 +0 -0
- data/test/dummy/tmp/cache/assets/CCF/7E0/sprockets%2F3d478e2550d0140a8da13a229735bcd7 +0 -0
- data/test/dummy/tmp/cache/assets/CD0/990/sprockets%2F3027964ce732931bb70c158aa61ab08d +0 -0
- data/test/dummy/tmp/cache/assets/CD1/590/sprockets%2F2f99067423113c4aebb30a4dd3643b85 +0 -0
- data/test/dummy/tmp/cache/assets/CD3/250/sprockets%2F9982c13eacaf46622739beab50120614 +0 -0
- data/test/dummy/tmp/cache/assets/CD3/DB0/sprockets%2F38ec8b4912b23f2b31322570d56c9c2b +0 -0
- data/test/dummy/tmp/cache/assets/CD8/5E0/sprockets%2Ffd127b418d9dc4cc3d196672811a6112 +0 -0
- data/test/dummy/tmp/cache/assets/CD8/D40/sprockets%2F73570572f17300ebf2dda1ef2635149e +0 -0
- data/test/dummy/tmp/cache/assets/CD9/B20/sprockets%2F65698070c3bce81f5ee4eb101722b741 +0 -0
- data/test/dummy/tmp/cache/assets/CD9/D90/sprockets%2F87979893cfde1b28afc60797a9948345 +0 -0
- data/test/dummy/tmp/cache/assets/CDA/DA0/sprockets%2F13e6789dd595b2b5033b335bbd1472f2 +0 -0
- data/test/dummy/tmp/cache/assets/CDB/4D0/sprockets%2Ffb9182b4d13b796b245db8153324f4d2 +0 -0
- data/test/dummy/tmp/cache/assets/CDB/630/sprockets%2Fc48aca3d09504ff1811d9234c8267f50 +0 -0
- data/test/dummy/tmp/cache/assets/CDC/B50/sprockets%2F0f1e213595a02089df9735ec41c3ee80 +0 -0
- data/test/dummy/tmp/cache/assets/CDF/380/sprockets%2F39695e0a1726566c80281aab8d9a51cc +0 -0
- data/test/dummy/tmp/cache/assets/CDF/710/sprockets%2F16d775d6707a066df80d10cd1528ff33 +0 -0
- data/test/dummy/tmp/cache/assets/CDF/CA0/sprockets%2F3d5b2c400b7877c15ec29575d95b613b +0 -0
- data/test/dummy/tmp/cache/assets/CE0/420/sprockets%2F5b3a1508216cb6b968313beae256f788 +0 -0
- data/test/dummy/tmp/cache/assets/CE1/A00/sprockets%2F168b4bf7364dfd883a5930302e0f554c +0 -0
- data/test/dummy/tmp/cache/assets/CE4/F60/sprockets%2Fbc3490162e3489bf88aab055d19397f0 +0 -0
- data/test/dummy/tmp/cache/assets/CE5/F10/sprockets%2Fe9cf045465025d8527c83c3b93625fca +0 -0
- data/test/dummy/tmp/cache/assets/CE5/F90/sprockets%2F31557450886bf9c124f2fdb42704ce8e +0 -0
- data/test/dummy/tmp/cache/assets/CE5/FE0/sprockets%2F627e4127557531a3f8471cfbc718ed2f +0 -0
- data/test/dummy/tmp/cache/assets/CE6/4A0/sprockets%2F9c04b8b8df7217a708732da4982a5f61 +0 -0
- data/test/dummy/tmp/cache/assets/CE7/650/sprockets%2F834b60044436456eefb9ce5cf7144d38 +0 -0
- data/test/dummy/tmp/cache/assets/CE7/A40/sprockets%2F2974c4aef7a04f06738c8f6a2066e292 +0 -0
- data/test/dummy/tmp/cache/assets/CE7/C70/sprockets%2F8627e999f207ce7214e0ab06afe86412 +0 -0
- data/test/dummy/tmp/cache/assets/CE8/AA0/sprockets%2Fd569f5f91016b77401782ef3b42de6a6 +0 -0
- data/test/dummy/tmp/cache/assets/CE8/DC0/sprockets%2F49324064376deb60c942b7d85a3e7d9b +0 -0
- data/test/dummy/tmp/cache/assets/CEA/6D0/sprockets%2F1da842257a051a9e871c739d29b7d77f +0 -0
- data/test/dummy/tmp/cache/assets/CEA/E10/sprockets%2F888c18a6b36ca5e51363b7b21c29f877 +0 -0
- data/test/dummy/tmp/cache/assets/CEB/520/sprockets%2Fe99130a4204fac5e0b886885339af7c8 +0 -0
- data/test/dummy/tmp/cache/assets/CEB/C10/sprockets%2F6cadb28080126992d76e5e35ba79088e +0 -0
- data/test/dummy/tmp/cache/assets/CEC/2B0/sprockets%2F917af8a56c884b3d5c6a03593d95a365 +0 -0
- data/test/dummy/tmp/cache/assets/CEC/7A0/sprockets%2F1ccee406d881875c559b82932a25e7d4 +0 -0
- data/test/dummy/tmp/cache/assets/CEE/920/sprockets%2F97c97b08d42738b583ed92b55c540a4f +0 -0
- data/test/dummy/tmp/cache/assets/CEF/F00/sprockets%2F8ac77338a1dc57bb32999653c561e74e +0 -0
- data/test/dummy/tmp/cache/assets/CF0/950/sprockets%2Fd08f99c34c161881adb05d342e8984f9 +0 -0
- data/test/dummy/tmp/cache/assets/CF1/000/sprockets%2Fa779ae7d9f80d3098529264b91dd405d +0 -0
- data/test/dummy/tmp/cache/assets/CF1/5B0/sprockets%2F46e4886602bb924fc5c638865b6bf4f2 +0 -0
- data/test/dummy/tmp/cache/assets/CF5/2E0/sprockets%2F14513ab2f3a0311abd083e70c99bd293 +0 -0
- data/test/dummy/tmp/cache/assets/CF5/5C0/sprockets%2F64a4190014fe00d17e708fc02dfc2a32 +0 -0
- data/test/dummy/tmp/cache/assets/CF6/4E0/sprockets%2Ff9c27df89c8173d41850b9c40e766a85 +0 -0
- data/test/dummy/tmp/cache/assets/CF6/710/sprockets%2Fe53fe9369ad5f26285ab27754a943c88 +0 -0
- data/test/dummy/tmp/cache/assets/CF9/B70/sprockets%2F8144ebf49f85b18c46d90b897239b56e +0 -0
- data/test/dummy/tmp/cache/assets/CFB/540/sprockets%2Fc40fe1438edc416788894df8b834f944 +0 -0
- data/test/dummy/tmp/cache/assets/CFC/7F0/sprockets%2F6158d3ff6993e4c114a894dd371999ec +0 -0
- data/test/dummy/tmp/cache/assets/CFD/EA0/sprockets%2Fe43051fb1f2752c010e292ccbc53399b +0 -0
- data/test/dummy/tmp/cache/assets/CFD/F60/sprockets%2Fb5776671dd7cf557332f7720f49c9c9f +0 -0
- data/test/dummy/tmp/cache/assets/CFD/F80/sprockets%2Fe2b02979764013ad04e2f2b23d28e2ca +0 -0
- data/test/dummy/tmp/cache/assets/D00/690/sprockets%2F488324fb426a1e3cb3ca16488caf4004 +0 -0
- data/test/dummy/tmp/cache/assets/D01/A00/sprockets%2F5704bfb588da51f6053f30abd310b458 +0 -0
- data/test/dummy/tmp/cache/assets/D02/4C0/sprockets%2F6386d72b2c51c911a7fd84ba612430cc +0 -0
- data/test/dummy/tmp/cache/assets/D02/6E0/sprockets%2F886e897f07ee48ec4e9f640643440dd9 +0 -0
- data/test/dummy/tmp/cache/assets/D03/EF0/sprockets%2F4799db40f9cc57f50689f6da487464f5 +0 -0
- data/test/dummy/tmp/cache/assets/D04/530/sprockets%2Fc14ce481964a025c2501a5c907c65fce +0 -0
- data/test/dummy/tmp/cache/assets/D06/590/sprockets%2F19c899c20cf5d9b8629878e3add89708 +0 -0
- data/test/dummy/tmp/cache/assets/D06/A70/sprockets%2Ff5da4e04222a35db9d267255424bf5c6 +0 -0
- data/test/dummy/tmp/cache/assets/D07/330/sprockets%2F3b24c0c589b1004b399d108ae5d6ef81 +0 -0
- data/test/dummy/tmp/cache/assets/D07/7F0/sprockets%2F3fb0ed6b32aa83a6878d12a209c38824 +0 -0
- data/test/dummy/tmp/cache/assets/D08/530/sprockets%2F311d9ba15b34718d1e60ddc95a84194d +0 -0
- data/test/dummy/tmp/cache/assets/D08/D80/sprockets%2F388df4f82d11657bb0b4024448b6af2b +0 -0
- data/test/dummy/tmp/cache/assets/D09/7F0/sprockets%2Fa2d67c31222348f16a9812df26da3e8d +0 -0
- data/test/dummy/tmp/cache/assets/D09/E40/sprockets%2Fc2693927bc52084b4d2b89373aaa0ac9 +0 -0
- data/test/dummy/tmp/cache/assets/D0A/830/sprockets%2F3155dcf93a62cf601a0d48b2806b599b +0 -0
- data/test/dummy/tmp/cache/assets/D0A/830/sprockets%2F830cdfb33202453675d55d8de703fa2f +0 -0
- data/test/dummy/tmp/cache/assets/D0B/3E0/sprockets%2F66c11f02337c8851bfab67bbb3b94916 +0 -0
- data/test/dummy/tmp/cache/assets/D0C/2E0/sprockets%2Fecb35ec370e250a63784c2f508b76a38 +0 -0
- data/test/dummy/tmp/cache/assets/D0E/010/sprockets%2F797b9e08c55a2106f8e2dace455710d0 +0 -0
- data/test/dummy/tmp/cache/assets/D0E/180/sprockets%2F045e183281dfc37485db513d585c5bdb +0 -0
- data/test/dummy/tmp/cache/assets/D0E/EA0/sprockets%2F1d36a1420cf4558fb3c793316ae89ca7 +0 -0
- data/test/dummy/tmp/cache/assets/D0F/7E0/sprockets%2F45f0d1bae6783a949cd01767d4c7e212 +0 -0
- data/test/dummy/tmp/cache/assets/D0F/9E0/sprockets%2F1536c04e487ca1a768d90a68513c3cff +0 -0
- data/test/dummy/tmp/cache/assets/D10/750/sprockets%2F4c4a696e3e0b905d75ed60f9042cd227 +0 -0
- data/test/dummy/tmp/cache/assets/D11/FC0/sprockets%2F9bd6c83d367423fe05ef6c3338143aa6 +0 -0
- data/test/dummy/tmp/cache/assets/D11/FD0/sprockets%2Fa7872e06fd015c19f48f4c350d63cc19 +0 -0
- data/test/dummy/tmp/cache/assets/D12/1C0/sprockets%2F5901cb9faf1725dd2e472ca2965b4287 +0 -0
- data/test/dummy/tmp/cache/assets/D12/BE0/sprockets%2Ff01aaa83ff0f19584cb671837a7d7444 +0 -0
- data/test/dummy/tmp/cache/assets/D13/6B0/sprockets%2F0975ed2a9d299bf1c719b3b1137e581b +0 -0
- data/test/dummy/tmp/cache/assets/D14/340/sprockets%2F4d057c80e80694c2c4d637ecd538bc08 +0 -0
- data/test/dummy/tmp/cache/assets/D14/BD0/sprockets%2Ffc2255112852fb55d96d41a92f8fb6b6 +0 -0
- data/test/dummy/tmp/cache/assets/D14/DA0/sprockets%2F54a7d7c2a544df07d57173cda79e9700 +0 -0
- data/test/dummy/tmp/cache/assets/D15/A20/sprockets%2F46b5881e463b09c7f61736e5ec2aeb16 +0 -0
- data/test/dummy/tmp/cache/assets/D15/A20/sprockets%2F9e52b9b230f4aa1d0e1a74699d82e983 +0 -0
- data/test/dummy/tmp/cache/assets/D16/2A0/sprockets%2F3739709cf73c9a32b521b45677cd4bde +0 -0
- data/test/dummy/tmp/cache/assets/D17/6C0/sprockets%2F69144d8b21e495ac17e4994fdfa3a803 +0 -0
- data/test/dummy/tmp/cache/assets/D19/680/sprockets%2Fcd3a545b89d274cfd328f4d341f96272 +0 -0
- data/test/dummy/tmp/cache/assets/D19/E90/sprockets%2F16cd7e58935dd8d1d376f10be6b50368 +0 -0
- data/test/dummy/tmp/cache/assets/D1A/0C0/sprockets%2Fa606399c0ce2e298b58fec46777024ad +0 -0
- data/test/dummy/tmp/cache/assets/D1B/C80/sprockets%2F835147dfca8c918a99182e9e2e600f1c +0 -0
- data/test/dummy/tmp/cache/assets/D1C/070/sprockets%2F19aa6be16056890e435d65d4c84cf69e +0 -0
- data/test/dummy/tmp/cache/assets/D1D/700/sprockets%2F72d9824da671eff2338d52de93b83a56 +0 -0
- data/test/dummy/tmp/cache/assets/D1D/C60/sprockets%2F54364ea078190fbd4168336feef963fc +0 -0
- data/test/dummy/tmp/cache/assets/D1F/5F0/sprockets%2Ff8cb248d9fc90758124cd284e17e3b66 +0 -0
- data/test/dummy/tmp/cache/assets/D21/EF0/sprockets%2F935d9ee3ec37515493a293c3785dadc8 +0 -0
- data/test/dummy/tmp/cache/assets/D22/0B0/sprockets%2F9dfda36b032e59892637b875d7af392b +0 -0
- data/test/dummy/tmp/cache/assets/D22/2C0/sprockets%2Fe42d5d90d467a803999bdec116955f8b +0 -0
- data/test/dummy/tmp/cache/assets/D23/610/sprockets%2F0e51cca080cc65e62e080941b232a1ed +0 -0
- data/test/dummy/tmp/cache/assets/D23/EB0/sprockets%2Fe26ee953fe7e3172d737e6e67a96332a +0 -0
- data/test/dummy/tmp/cache/assets/D25/C00/sprockets%2Ff63d097054df34bc660bdf98f7661b99 +0 -0
- data/test/dummy/tmp/cache/assets/D26/470/sprockets%2F1e9b32c11057bc537b0021de4f1f1fc6 +0 -0
- data/test/dummy/tmp/cache/assets/D29/910/sprockets%2Fe51f36e9fde73e3928070a96fcf77571 +0 -0
- data/test/dummy/tmp/cache/assets/D2A/E10/sprockets%2F2d2a1cfcc28a38330d30434fd8c1077c +0 -0
- data/test/dummy/tmp/cache/assets/D2B/210/sprockets%2F67aaa6c903e6b15c74de39af0002a451 +0 -0
- data/test/dummy/tmp/cache/assets/D2B/CF0/sprockets%2F70b2adc5e73b271342371aaad257b76d +0 -0
- data/test/dummy/tmp/cache/assets/D2D/E40/sprockets%2Faf21fa3d26ad3f68a23532178e20fb15 +0 -0
- data/test/dummy/tmp/cache/assets/D2F/100/sprockets%2F8c0286ee70744ca12c7c12a563de4b2a +0 -0
- data/test/dummy/tmp/cache/assets/D32/3E0/sprockets%2Fc9f2c6b93b29fa3b0d5420b751903eb1 +0 -0
- data/test/dummy/tmp/cache/assets/D32/6E0/sprockets%2Fb4f78f31b9aab6dbd2911b07076d4601 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A80/sprockets%2Fb12fb26042f73cf3b2796abc2836ee20 +0 -0
- data/test/dummy/tmp/cache/assets/D36/7F0/sprockets%2F78e0c63f0043ae6e6536ec504cc23a9b +0 -0
- data/test/dummy/tmp/cache/assets/D36/E70/sprockets%2F69b00a4118d012bf6d7cf293b5f316ff +0 -0
- data/test/dummy/tmp/cache/assets/D37/070/sprockets%2F59e3be9a13634f3b3d0cab4ad0889063 +0 -0
- data/test/dummy/tmp/cache/assets/D39/740/sprockets%2Fd4834d921f293e5dcc04bea2b3917d51 +0 -0
- data/test/dummy/tmp/cache/assets/D3A/520/sprockets%2F7193d867aa217d4a306848dbcc1d9c0b +0 -0
- data/test/dummy/tmp/cache/assets/D3A/670/sprockets%2F0db6624d07920a5f4decb479718da33c +0 -0
- data/test/dummy/tmp/cache/assets/D3A/690/sprockets%2Fb5058a82d02b84df6210af598cfa644c +0 -0
- data/test/dummy/tmp/cache/assets/D3A/A00/sprockets%2F1077cd94fef55fbb01ce529612180bd5 +0 -0
- data/test/dummy/tmp/cache/assets/D3A/ED0/sprockets%2F5ae1cf0266d63b8eb0647535ca93b63d +0 -0
- data/test/dummy/tmp/cache/assets/D3C/640/sprockets%2F42e7a70bb8be9398385afb3c4742aa04 +0 -0
- data/test/dummy/tmp/cache/assets/D3C/E40/sprockets%2Fba57600a2dd2f6da96613de37f27930f +0 -0
- data/test/dummy/tmp/cache/assets/D3D/4E0/sprockets%2F7d37b8c27a3f3b1a02c4fe17643de865 +0 -0
- data/test/dummy/tmp/cache/assets/D3E/940/sprockets%2F5ed82a03c1de5c34135b67ff053787ec +0 -0
- data/test/dummy/tmp/cache/assets/D3E/F80/sprockets%2Fa146a4bfc3b8cb08334b9b14fe379756 +0 -0
- data/test/dummy/tmp/cache/assets/D3F/050/sprockets%2Fab4aa96dbce1e6b359f2658118291d90 +0 -0
- data/test/dummy/tmp/cache/assets/D3F/590/sprockets%2F13a259ba93c919fa5a47ba9cf10569f1 +0 -0
- data/test/dummy/tmp/cache/assets/D3F/E10/sprockets%2Ff8492202733ea4a4f67065c95eec1beb +0 -0
- data/test/dummy/tmp/cache/assets/D40/6C0/sprockets%2Fafe496eaca27b82020893b81383e8b6b +0 -0
- data/test/dummy/tmp/cache/assets/D40/D10/sprockets%2F7af151c9b6080d9285fe058ae6d40c4d +0 -0
- data/test/dummy/tmp/cache/assets/D40/E50/sprockets%2F278df3df34e9573cbd9a402e42d1193b +0 -0
- data/test/dummy/tmp/cache/assets/D41/220/sprockets%2Fafb511e47c76bf448b6f7072c8d3118c +0 -0
- data/test/dummy/tmp/cache/assets/D41/770/sprockets%2F271c5f12457864bbb0c6646c9ebf1f3f +0 -0
- data/test/dummy/tmp/cache/assets/D41/8A0/sprockets%2Fbc7ce77806517ea173350e6a4d8c55db +0 -0
- data/test/dummy/tmp/cache/assets/D41/D70/sprockets%2F48b33bbf96854b502b0eaf902e69d55c +0 -0
- data/test/dummy/tmp/cache/assets/D41/FE0/sprockets%2F2901ba969f333cc19393afd2f0fc7c64 +0 -0
- data/test/dummy/tmp/cache/assets/D42/970/sprockets%2Fe27c8084b9cf2eaa063f585e92064c5a +0 -0
- data/test/dummy/tmp/cache/assets/D43/F70/sprockets%2F2c844357dd8de7db147f80c3539b0ee0 +0 -0
- data/test/dummy/tmp/cache/assets/D44/6D0/sprockets%2F4d7032af47bfce2d4a8564830f8a6a96 +0 -0
- data/test/dummy/tmp/cache/assets/D45/1C0/sprockets%2F7e052d17bd4b749ba373bea97380c8f6 +0 -0
- data/test/dummy/tmp/cache/assets/D45/3B0/sprockets%2Fd26b5a0d570ef57d06df6f032e9b8980 +0 -0
- data/test/dummy/tmp/cache/assets/D46/770/sprockets%2F96355435f9ab8090c2d3e4f0ddd9b7c3 +0 -0
- data/test/dummy/tmp/cache/assets/D46/8E0/sprockets%2F1a4f07bd2741629bdd572848dccf773e +0 -0
- data/test/dummy/tmp/cache/assets/D47/2B0/sprockets%2Ff3d8c4ca1a44044d98395b36b770fcf9 +0 -0
- data/test/dummy/tmp/cache/assets/D47/8F0/sprockets%2F1cc6e49382be4f74cbb97821ae1928c4 +0 -0
- data/test/dummy/tmp/cache/assets/D47/AC0/sprockets%2Fcb9189183de4d74faa04d6ad1347964f +0 -0
- data/test/dummy/tmp/cache/assets/D48/1D0/sprockets%2Fbff4201c0944eaf31a2f6a0110cbd224 +0 -0
- data/test/dummy/tmp/cache/assets/D48/2F0/sprockets%2F6b79e4839df89b4abb51c2c6105d15e8 +0 -0
- data/test/dummy/tmp/cache/assets/D48/960/sprockets%2F90e2c11ff8fd31e591b9fd39932631bf +0 -0
- data/test/dummy/tmp/cache/assets/D4A/C80/sprockets%2F0289519826ada458af4b9a728fdfcf31 +0 -0
- data/test/dummy/tmp/cache/assets/D4B/C20/sprockets%2Fc28f3c4d6cd98dbb784830d7c6214d65 +0 -0
- data/test/dummy/tmp/cache/assets/D4B/E90/sprockets%2F51d49f9bc2549684e6da91a4e0bc379b +0 -0
- data/test/dummy/tmp/cache/assets/D4C/490/sprockets%2F7e207e1654e5343a964fd6cf3fefb447 +0 -0
- data/test/dummy/tmp/cache/assets/D4C/BD0/sprockets%2F4ac9d1aa903d4731edf18fe2b9589829 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/640/sprockets%2Fdaab3d2130266b5b7a2f1d04b8c4322e +0 -0
- data/test/dummy/tmp/cache/assets/D4E/6C0/sprockets%2Fedd9cf282af0f00637e5273c8c3888b9 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/D00/sprockets%2F1a6846f0a837ae2524e2f9ec89e6ef43 +0 -0
- data/test/dummy/tmp/cache/assets/D4F/410/sprockets%2F1377bb2e86073ae3a688e5a6c499a9df +0 -0
- data/test/dummy/tmp/cache/assets/D50/E10/sprockets%2F28698bc0c536fe5e97a2935e3bb929bb +0 -0
- data/test/dummy/tmp/cache/assets/D51/230/sprockets%2F742ba6ca9f84d98ffc38ca5687c05155 +0 -0
- data/test/dummy/tmp/cache/assets/D53/440/sprockets%2F2def445147b9f5d6363f6f6d497d2f0e +0 -0
- data/test/dummy/tmp/cache/assets/D53/DE0/sprockets%2F7736b51cb3bf8679b8bdc8ab9d184954 +0 -0
- data/test/dummy/tmp/cache/assets/D54/0D0/sprockets%2F448752db3a53dd453db1b01de121ebd2 +0 -0
- data/test/dummy/tmp/cache/assets/D56/1F0/sprockets%2F291fcb7a26ff3aac6bc1404e0a247242 +0 -0
- data/test/dummy/tmp/cache/assets/D57/DF0/sprockets%2F8d06b94587d49e037e77f8afcb6802cf +0 -0
- data/test/dummy/tmp/cache/assets/D59/070/sprockets%2F822cd47e69d40ba87f95181fdd698ed5 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/070/sprockets%2Fe7159b621a21a7a0ebd81a32912e8faa +0 -0
- data/test/dummy/tmp/cache/assets/D5A/D80/sprockets%2F28dc9152e2ead49ae414a5b82d04a1a2 +0 -0
- data/test/dummy/tmp/cache/assets/D5C/660/sprockets%2F5baf6a64b3151ae6bf40155e90db6e03 +0 -0
- data/test/dummy/tmp/cache/assets/D5C/E00/sprockets%2F92930d4e993eb8bd3498b699dccf9a33 +0 -0
- data/test/dummy/tmp/cache/assets/D5E/3D0/sprockets%2F5f786d832b4e0ba05f6abc3ea314901a +0 -0
- data/test/dummy/tmp/cache/assets/D5F/7F0/sprockets%2Fabbcc55042a82b42c900c09d59de4c29 +0 -0
- data/test/dummy/tmp/cache/assets/D60/2A0/sprockets%2Fcd5c12269b6c414bf722c6c2dc0e18c4 +0 -0
- data/test/dummy/tmp/cache/assets/D62/140/sprockets%2F7e5a724c4c00951a0da7ec767ce19aa1 +0 -0
- data/test/dummy/tmp/cache/assets/D62/2E0/sprockets%2F51a06ddef9bd05b405fd605d37be3154 +0 -0
- data/test/dummy/tmp/cache/assets/D63/B00/sprockets%2F2672399dfcdd2b6b61536cab3d800bc1 +0 -0
- data/test/dummy/tmp/cache/assets/D63/D60/sprockets%2Ff791df22a3d7e2f4ef01ad0742f370c1 +0 -0
- data/test/dummy/tmp/cache/assets/D63/DC0/sprockets%2Fc298c2b66150c7f11d95cecf450bb14a +0 -0
- data/test/dummy/tmp/cache/assets/D63/DE0/sprockets%2F73c9e04acfc930681ab170b3e4bfc453 +0 -0
- data/test/dummy/tmp/cache/assets/D64/670/sprockets%2F7dc8c0ad36d436eb56a0824a46e0eb08 +0 -0
- data/test/dummy/tmp/cache/assets/D64/B50/sprockets%2F7ac06eacb363b85744337c0ea88e2b0c +0 -0
- data/test/dummy/tmp/cache/assets/D65/990/sprockets%2Fa2965ca374a00aaceb747e60b654e2f8 +0 -0
- data/test/dummy/tmp/cache/assets/D66/360/sprockets%2Fc94d86aa0bc1a44817a1fd3db0873a87 +0 -0
- data/test/dummy/tmp/cache/assets/D66/6C0/sprockets%2F1b63a7f0e3fb2a7f3124f198d0ff462b +0 -0
- data/test/dummy/tmp/cache/assets/D67/8E0/sprockets%2Ffd0eaaf36da9805e6c4ec303534162f5 +0 -0
- data/test/dummy/tmp/cache/assets/D67/C10/sprockets%2Ffb4b4451c110f07957c2ecacf854c5d4 +0 -0
- data/test/dummy/tmp/cache/assets/D68/000/sprockets%2F39c01fa5c01830f3558eb1c97c4dfb6b +0 -0
- data/test/dummy/tmp/cache/assets/D68/0C0/sprockets%2F6c628ddf1ba5c680e04ad54a476f163b +0 -0
- data/test/dummy/tmp/cache/assets/D68/210/sprockets%2Fdc284967860db06c2cb2e1da78bab156 +0 -0
- data/test/dummy/tmp/cache/assets/D6A/2E0/sprockets%2Fc3a3a8e66c9b58b52b1db3ad754c9423 +0 -0
- data/test/dummy/tmp/cache/assets/D6B/BA0/sprockets%2F8293eb343aead8dda54496532fb24fa1 +0 -0
- data/test/dummy/tmp/cache/assets/D6C/AD0/sprockets%2Fdabce05f6e4419832e20d6b7420fe9a7 +0 -0
- data/test/dummy/tmp/cache/assets/D6D/080/sprockets%2F3cc7b7355591babda1661e6c5e9f8c20 +0 -0
- data/test/dummy/tmp/cache/assets/D6D/690/sprockets%2Fd288d7215df092fdc70b3b8216dce2f3 +0 -0
- data/test/dummy/tmp/cache/assets/D6D/7A0/sprockets%2Fff4be901f55528b85b2b1fc73ebc4352 +0 -0
- data/test/dummy/tmp/cache/assets/D6D/E80/sprockets%2F9ef00ee94e3b0eed7c4e45b342085d51 +0 -0
- data/test/dummy/tmp/cache/assets/D6E/940/sprockets%2Fb19f43bd8383eeb5e26a4d2b79f1240e +0 -0
- data/test/dummy/tmp/cache/assets/D6E/9F0/sprockets%2F15f61ad82d9ca6cce6a0e42b7249662f +0 -0
- data/test/dummy/tmp/cache/assets/D6E/AD0/sprockets%2F4441be9946083b61e75f7bf1a1cca5cf +0 -0
- data/test/dummy/tmp/cache/assets/D73/3F0/sprockets%2F09b4a9c1131740eba5d85fcf9c86b97a +0 -0
- data/test/dummy/tmp/cache/assets/D76/030/sprockets%2F7e8689ec6a9f3754a4aa660e303cbf4a +0 -0
- data/test/dummy/tmp/cache/assets/D76/C80/sprockets%2F952307811ad5e9e8b540cf5e9cf08cea +0 -0
- data/test/dummy/tmp/cache/assets/D76/CA0/sprockets%2F797920cdabaf2f8431968a34c2cbae79 +0 -0
- data/test/dummy/tmp/cache/assets/D77/B70/sprockets%2Fa02f64f352cfa69d33983fd15e8ea3d7 +0 -0
- data/test/dummy/tmp/cache/assets/D77/FF0/sprockets%2F126c2e2ca6f5e8477c9525f46cdba7d5 +0 -0
- data/test/dummy/tmp/cache/assets/D79/2F0/sprockets%2F4b9fd617fe0d6c7e5eb934a139507e3d +0 -0
- data/test/dummy/tmp/cache/assets/D79/E80/sprockets%2F7d329345d1b9f914c87fc5e07ea9ab4b +0 -0
- data/test/dummy/tmp/cache/assets/D7A/5C0/sprockets%2F6e2b202ee971a68c1e78eddf5658e53a +0 -0
- data/test/dummy/tmp/cache/assets/D7A/8C0/sprockets%2Fc477a2d0aa5d658fd7294d6f6c5a484e +0 -0
- data/test/dummy/tmp/cache/assets/D7C/160/sprockets%2F6847e66cdafb094701f479a515ede5dd +0 -0
- data/test/dummy/tmp/cache/assets/D7C/750/sprockets%2F1f76d236fdf42a817bd84da719fde069 +0 -0
- data/test/dummy/tmp/cache/assets/D7C/B90/sprockets%2Fc89b5af12387ee80ca80e3f2ac776c79 +0 -0
- data/test/dummy/tmp/cache/assets/D7E/2A0/sprockets%2F1ce479f9423e748690a75abbabf8af84 +0 -0
- data/test/dummy/tmp/cache/assets/D7F/A60/sprockets%2F5c683951503f673cceffa6ba76f38b8d +0 -0
- data/test/dummy/tmp/cache/assets/D81/120/sprockets%2F75c7f18e61fa042b776ce2e5c3ff786f +0 -0
- data/test/dummy/tmp/cache/assets/D82/560/sprockets%2Fcb5875caef3f569f08878b13cdd991a2 +0 -0
- data/test/dummy/tmp/cache/assets/D84/0A0/sprockets%2F07fc0bfe2237a171b813aa147f3ced1a +0 -0
- data/test/dummy/tmp/cache/assets/D85/050/sprockets%2Fa9b35663e7dc78eacde8d84ae3599163 +0 -0
- data/test/dummy/tmp/cache/assets/D85/5A0/sprockets%2Fc2cbee1b5160e0e8b022933feb36ea30 +0 -0
- data/test/dummy/tmp/cache/assets/D87/6D0/sprockets%2F51df69aad9a6f892254deb9d4c1992f8 +0 -0
- data/test/dummy/tmp/cache/assets/D88/1B0/sprockets%2Fb5bb04fc812b607ce046a4b702be4c4f +0 -0
- data/test/dummy/tmp/cache/assets/D88/7E0/sprockets%2Fe9fedb2c5be893a15939dc65f684196b +0 -0
- data/test/dummy/tmp/cache/assets/D8A/2C0/sprockets%2F6ec8da0142f240ce8a7e0b46aea363c1 +0 -0
- data/test/dummy/tmp/cache/assets/D8A/370/sprockets%2Fb4600d72a29aba7a39c2ec58aa04f18b +0 -0
- data/test/dummy/tmp/cache/assets/D8A/B90/sprockets%2F7506f75d60f93f9e8405ffb9cf85ddb2 +0 -0
- data/test/dummy/tmp/cache/assets/D8A/BF0/sprockets%2F1967ce66d464496a6fab44ff8be55ef6 +0 -0
- data/test/dummy/tmp/cache/assets/D8C/9C0/sprockets%2F2e7c2cd86215800a37c4d4b1bf0bea5f +0 -0
- data/test/dummy/tmp/cache/assets/D8E/910/sprockets%2Fbbf8e4c05ca721c1cd18c17902256ade +0 -0
- data/test/dummy/tmp/cache/assets/D8F/C40/sprockets%2Fa76260381aff4aa0c8beea0404e95de2 +0 -0
- data/test/dummy/tmp/cache/assets/D93/3B0/sprockets%2Fd0fb3bdcf317425a433a125c986b3dff +0 -0
- data/test/dummy/tmp/cache/assets/D94/1A0/sprockets%2Fb4748c092e8a4c127bcfacb06cdc2735 +0 -0
- data/test/dummy/tmp/cache/assets/D94/AD0/sprockets%2Fa1ac4bf342006e1f98def10cf9d7d234 +0 -0
- data/test/dummy/tmp/cache/assets/D95/430/sprockets%2Fcf054ac65aa2c4b72d661fc32c898aa5 +0 -0
- data/test/dummy/tmp/cache/assets/D96/C10/sprockets%2F620f6865aeb0de3c5cf8b305b13c7cb7 +0 -0
- data/test/dummy/tmp/cache/assets/D97/2B0/sprockets%2F16a899a4b20af5f53cdd2870e1b0aed8 +0 -0
- data/test/dummy/tmp/cache/assets/D97/4C0/sprockets%2F4d4aea86610bc9652c70455a6beafc4d +0 -0
- data/test/dummy/tmp/cache/assets/D99/330/sprockets%2Ff01679ca9c88dd0a3eb6922b0b8f3bc0 +0 -0
- data/test/dummy/tmp/cache/assets/D99/B10/sprockets%2F4aa8fece5b18d820a44dc266a89d50e0 +0 -0
- data/test/dummy/tmp/cache/assets/D99/CD0/sprockets%2Ffe0c5f4b8b52baa0f91870da12599a6d +0 -0
- data/test/dummy/tmp/cache/assets/D9D/170/sprockets%2F37f702f1f3ad35b9022fc87fdce7de02 +0 -0
- data/test/dummy/tmp/cache/assets/D9E/C90/sprockets%2F9cd75b38f1c1f85bbdac2576ca9106b5 +0 -0
- data/test/dummy/tmp/cache/assets/D9F/6F0/sprockets%2Fff261c15e6b97bf57e372f0de1ad571a +0 -0
- data/test/dummy/tmp/cache/assets/D9F/800/sprockets%2F5c722d8150c68e6eacad70fb64e5e1f5 +0 -0
- data/test/dummy/tmp/cache/assets/DA0/1B0/sprockets%2F71e2cd8803aac9fb0bb4c47593cf17e8 +0 -0
- data/test/dummy/tmp/cache/assets/DA1/530/sprockets%2F88a8bb9debb752ba06f07909db83e02d +0 -0
- data/test/dummy/tmp/cache/assets/DA3/9F0/sprockets%2F5122955dfe6694bdc6b69cbea09d2cd1 +0 -0
- data/test/dummy/tmp/cache/assets/DA4/450/sprockets%2F6f2bd50f9f1551ed8e00fd8b84f37c2c +0 -0
- data/test/dummy/tmp/cache/assets/DA5/0E0/sprockets%2Fe61590dc98f1e532ea20e296c5fce7bd +0 -0
- data/test/dummy/tmp/cache/assets/DA6/FC0/sprockets%2F900ed66847c0ec1eff94ad75fc26f11e +0 -0
- data/test/dummy/tmp/cache/assets/DAB/B00/sprockets%2F5286678a74e7bcc66e0d3c7c7d2db5fb +0 -0
- data/test/dummy/tmp/cache/assets/DAD/810/sprockets%2Fcfb7db145b0d0a3010f5d0cd7a08fb15 +0 -0
- data/test/dummy/tmp/cache/assets/DAE/A40/sprockets%2F7fefa2cd6e72f17c926159c9b7c3a95a +0 -0
- data/test/dummy/tmp/cache/assets/DB0/BF0/sprockets%2F52e4cdf37aa489ff6c138dedf036588d +0 -0
- data/test/dummy/tmp/cache/assets/DB1/C80/sprockets%2Fa2d1a10a3cc780fd30127b2be96ddfa2 +0 -0
- data/test/dummy/tmp/cache/assets/DB2/850/sprockets%2F9d6e12a0e28cc9ded4e859613cf75f6e +0 -0
- data/test/dummy/tmp/cache/assets/DB6/710/sprockets%2Ff53e9d96ae4808ad0f9e09ab4ef78f80 +0 -0
- data/test/dummy/tmp/cache/assets/DBA/7F0/sprockets%2F4f7fd7b68b8bc29c67fa996e37eaf512 +0 -0
- data/test/dummy/tmp/cache/assets/DBD/080/sprockets%2F039ace5986a3cbf4cca0b0a753bc71a6 +0 -0
- data/test/dummy/tmp/cache/assets/DBE/210/sprockets%2Fa12ca5480c3e2b9cf44ab4ef32e813ec +0 -0
- data/test/dummy/tmp/cache/assets/DBE/DF0/sprockets%2F6d1f018e11ee2240a8dd1df920c6cddd +0 -0
- data/test/dummy/tmp/cache/assets/DC0/760/sprockets%2Fb7e4cf2efcf48d0dcc420131fd30d454 +0 -0
- data/test/dummy/tmp/cache/assets/DC1/C20/sprockets%2Fb60b7b3aeb56bd55b67183b6f151ecca +0 -0
- data/test/dummy/tmp/cache/assets/DC5/5F0/sprockets%2F9d4cc0ae7ac214bb22c7cf455d06b9c9 +0 -0
- data/test/dummy/tmp/cache/assets/DC5/660/sprockets%2F637431e1c8fffeaafc23f021bd49fa06 +0 -0
- data/test/dummy/tmp/cache/assets/DC6/7C0/sprockets%2Fb408df7a822c70a0924e0cdf6c8fe2ca +0 -0
- data/test/dummy/tmp/cache/assets/DC8/2F0/sprockets%2F15c5ad9491aa5ef9fe4aef6333fa12c0 +0 -0
- data/test/dummy/tmp/cache/assets/DC8/C70/sprockets%2Fbb5351434afe5616cbe7e4a6cea95a6b +0 -0
- data/test/dummy/tmp/cache/assets/DCC/F40/sprockets%2Fdc3342c548fc7d3c4f4e27732b5acfea +0 -0
- data/test/dummy/tmp/cache/assets/DCD/390/sprockets%2Fdcd461b67aec99b76eea270a9ad2c046 +0 -0
- data/test/dummy/tmp/cache/assets/DCD/730/sprockets%2Fe577d2f2df0ce1516b2bdfa9fe0909e0 +0 -0
- data/test/dummy/tmp/cache/assets/DCD/8D0/sprockets%2Fbf36f09be83b4d0986ad23ea4d1f32df +0 -0
- data/test/dummy/tmp/cache/assets/DCE/1C0/sprockets%2F58cc5eb1cb2a47c8067c940caecf449d +0 -0
- data/test/dummy/tmp/cache/assets/DCE/BA0/sprockets%2F57c5ecddc82aa706b1e64691a8a5bcc9 +0 -0
- data/test/dummy/tmp/cache/assets/DCF/4A0/sprockets%2F3efd01a56bae3ae99fd13085f75b9e0d +0 -0
- data/test/dummy/tmp/cache/assets/DD1/4A0/sprockets%2Fd1fd81d46b69d255ebc7ab7f3f96a03a +0 -0
- data/test/dummy/tmp/cache/assets/DD2/380/sprockets%2F7972dab64d4a2a8007c3ecfd887ace4e +0 -0
- data/test/dummy/tmp/cache/assets/DD2/D90/sprockets%2Facc08ab37871b8576bfcb992aedaf228 +0 -0
- data/test/dummy/tmp/cache/assets/DD3/FE0/sprockets%2Fd19b0f09a29f8558a8d1f5cfc02acec9 +0 -0
- data/test/dummy/tmp/cache/assets/DD8/5C0/sprockets%2F9dd7bcb46a4b58ee446353a9cdaf93f2 +0 -0
- data/test/dummy/tmp/cache/assets/DD9/AA0/sprockets%2Ff96cdb075b4fc5b6eabb92832f6ad758 +0 -0
- data/test/dummy/tmp/cache/assets/DD9/F90/sprockets%2Ff09bdb745c8fa4987aa1ffcd6370c94b +0 -0
- data/test/dummy/tmp/cache/assets/DDB/140/sprockets%2F7815fdf1a6a74db4fca71ff6537ced67 +0 -0
- data/test/dummy/tmp/cache/assets/DDD/E10/sprockets%2Fd7292f5eb3a7b1f583efbf05aef567d9 +0 -0
- data/test/dummy/tmp/cache/assets/DDE/C00/sprockets%2Ffb5947d8ea5a7d6c08c71b3c9d7a88cb +0 -0
- data/test/dummy/tmp/cache/assets/DE7/3B0/sprockets%2F55fc91edc7ee6e5f818993cbddb6b707 +0 -0
- data/test/dummy/tmp/cache/assets/DE7/550/sprockets%2Ffff04b0980f1fbe9ece54cd8ca779867 +0 -0
- data/test/dummy/tmp/cache/assets/DE8/980/sprockets%2Fea9daa72d1acd0886cc064d0ea6c4a30 +0 -0
- data/test/dummy/tmp/cache/assets/DEF/140/sprockets%2F0182a5cba9d2df2eabb3783cf53a1ea9 +0 -0
- data/test/dummy/tmp/cache/assets/DF5/0C0/sprockets%2Faf8105cfdb7ceae04b099c4a2f654ce1 +0 -0
- data/test/dummy/tmp/cache/assets/DF5/4D0/sprockets%2Fa1a06ee61db75c3c0bed4caad288789b +0 -0
- data/test/dummy/tmp/cache/assets/DF7/110/sprockets%2F0654cdd8dfa5adb61e2029fefe5f50c0 +0 -0
- data/test/dummy/tmp/cache/assets/DF7/D40/sprockets%2F38cdcfc274accc45023affa7be98350c +0 -0
- data/test/dummy/tmp/cache/assets/DF8/570/sprockets%2Fd956ef1a15caba08edb2fc63c569f20d +0 -0
- data/test/dummy/tmp/cache/assets/DFB/E90/sprockets%2Ff7bd5fbb19ef32fc5a396d8012fac3f0 +0 -0
- data/test/dummy/tmp/cache/assets/DFC/9D0/sprockets%2F38fd8e0a2fde3b853f2a24571cd2dfdd +0 -0
- data/test/dummy/tmp/cache/assets/DFE/3C0/sprockets%2Fe7c824dbbee345aa5a66a56ebe82a29e +0 -0
- data/test/dummy/tmp/cache/assets/DFF/560/sprockets%2F5c1cedb5538de9d0c4dc9fdb62554fa1 +0 -0
- data/test/dummy/tmp/cache/assets/E02/B00/sprockets%2F723ccdfbeacf6c4176de34f371c91af9 +0 -0
- data/test/dummy/tmp/cache/assets/E02/DA0/sprockets%2F9829dec75de6c2a52fdc20d428d2edae +0 -0
- data/test/dummy/tmp/cache/assets/E04/860/sprockets%2F972757dbdbdfabfeac8ecb8a15520793 +0 -0
- data/test/dummy/tmp/cache/assets/E05/A70/sprockets%2F7a4daf48a8b7fba4f7bd770048b37fbf +0 -0
- data/test/dummy/tmp/cache/assets/E07/5B0/sprockets%2F75fdbfc0584a9cb9dda6428a66dec4b5 +0 -0
- data/test/dummy/tmp/cache/assets/E0C/810/sprockets%2Fe74897a12cedd8efea5a559354bd5bfc +0 -0
- data/test/dummy/tmp/cache/assets/E0F/B40/sprockets%2Ff5dfabed7f563e53d4735ef9c4b7a0e9 +0 -0
- data/test/dummy/tmp/cache/assets/E11/400/sprockets%2Ff6a9c23ee9f2ed728efa077ea66dfb55 +0 -0
- data/test/dummy/tmp/cache/assets/E11/4E0/sprockets%2F86e145a39f85cceeaffdff91ebb61449 +0 -0
- data/test/dummy/tmp/cache/assets/E11/C70/sprockets%2Fe5ad970d57c66489f9eebacb8e3a5ae5 +0 -0
- data/test/dummy/tmp/cache/assets/E13/B10/sprockets%2Fafbb0a11dcbf1c86ee74a1f22f2c173a +0 -0
- data/test/dummy/tmp/cache/assets/E14/0B0/sprockets%2F8bffda6f68fc139ee329bc86f6b7d2f1 +0 -0
- data/test/dummy/tmp/cache/assets/E1E/DE0/sprockets%2F84b3baefc2c0a8c2c9c0a92eacc3557b +0 -0
- data/test/dummy/tmp/cache/assets/E1F/5E0/sprockets%2Fedacf71afed14b1da329d30fcaf84091 +0 -0
- data/test/dummy/tmp/cache/assets/E21/330/sprockets%2F816aead61cd3e240f2bbe1e78da1fdb7 +0 -0
- data/test/dummy/tmp/cache/assets/E27/540/sprockets%2F3507970b2c1ccbf7b6bc37d61efadfeb +0 -0
- data/test/dummy/tmp/cache/assets/E2A/030/sprockets%2Fc8ab33fc707f5fb9b8befd27b142b3cb +0 -0
- data/test/dummy/tmp/cache/assets/E2C/EA0/sprockets%2Fcb15d5ff97502cc7dfe8a2e06ab16efb +0 -0
- data/test/dummy/tmp/cache/assets/E2F/3D0/sprockets%2Ff740ae8eecbaedadc3c664c62b83e925 +0 -0
- data/test/dummy/tmp/cache/assets/E30/C50/sprockets%2Fdaad6c4c7b1429f8de49d81fac6ad18b +0 -0
- data/test/dummy/tmp/cache/assets/E32/FD0/sprockets%2Fce7d29b07b2f0d14ef1add992dfafa89 +0 -0
- data/test/dummy/tmp/cache/assets/E36/230/sprockets%2F56aec75c7f17ef3509d4cadcf2e6fc3d +0 -0
- data/test/dummy/tmp/cache/assets/E37/6B0/sprockets%2Fce49aa1fbe8185b07e78cf9b9eee22ab +0 -0
- data/test/dummy/tmp/cache/assets/E3B/DD0/sprockets%2F8cb9fef1ee4f6bcbb80758f5c675db1a +0 -0
- data/test/dummy/tmp/cache/assets/E3C/680/sprockets%2Fd057ba99f8cc7b032da8ed9e8c0dff7c +0 -0
- data/test/dummy/tmp/cache/assets/E3E/270/sprockets%2F426e7ee1f8aeb990a55fdf8d6eefbd04 +0 -0
- data/test/dummy/tmp/cache/assets/E54/0F0/sprockets%2Fddbe86c2b19c9b2c5d0bca8e248a1fcb +0 -0
- data/test/dummy/tmp/cache/assets/E83/3A0/sprockets%2Ffdb5f7dc3aba4ce1edb8fd4bd1b42923 +0 -0
- data/test/dummy/tmp/cache/assets/E89/BE0/sprockets%2F9bfc41fee1adbc5e0ab3e58eafb550f9 +0 -0
- data/test/dummy/tmp/cache/assets/E93/2E0/sprockets%2Fba1eb3cc84f5e1fd789bf5f61a8ecdbc +0 -0
- metadata +90 -24
- data/app/assets/javascripts/Core/computeSunPosition.js +0 -116
- data/app/assets/javascripts/DynamicScene/CzmlCartographic.js +0 -125
- data/app/assets/javascripts/DynamicScene/DynamicConeVisualizer.js +0 -350
- data/app/assets/javascripts/Scene/ComplexConicSensorVolume.js +0 -511
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeFS.glsl +0 -448
- data/app/assets/javascripts/Shaders/ComplexConicSensorVolumeVS.glsl +0 -19
- data/app/assets/javascripts/Shaders/ConstructiveSolidGeometry.glsl +0 -886
- data/app/assets/javascripts/Shaders/Noise.glsl +0 -453
- data/app/assets/javascripts/Shaders/PolygonFSPick.glsl +0 -6
- data/app/assets/javascripts/Shaders/PolygonVSPick.glsl +0 -30
- data/app/assets/javascripts/Shaders/Ray.glsl +0 -532
- data/app/assets/javascripts/Widgets/Animation/darker.css +0 -69
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.html +0 -4
- data/app/assets/javascripts/Widgets/Dojo/CesiumWidget.js +0 -348
- data/app/assets/javascripts/Widgets/Fullscreen/darker.css +0 -14
- data/app/assets/javascripts/Widgets/Images/enterFullscreen-darker.svg +0 -18
- data/app/assets/javascripts/Widgets/Images/exitFullscreen-darker.svg +0 -18
- data/app/assets/javascripts/Widgets/Images/viewControlBar.png +0 -0
- data/app/assets/javascripts/Widgets/Timeline/darker.css +0 -20
- data/app/assets/javascripts/Workers/package.json +0 -6
@@ -6,7 +6,9 @@ define([
|
|
6
6
|
'../Core/BoundingSphere',
|
7
7
|
'../Core/Cartesian3',
|
8
8
|
'../Core/Color',
|
9
|
-
'../Core/PolylinePipeline'
|
9
|
+
'../Core/PolylinePipeline',
|
10
|
+
'../Core/Matrix4',
|
11
|
+
'./Material'
|
10
12
|
], function(
|
11
13
|
defaultValue,
|
12
14
|
DeveloperError,
|
@@ -14,7 +16,9 @@ define([
|
|
14
16
|
BoundingSphere,
|
15
17
|
Cartesian3,
|
16
18
|
Color,
|
17
|
-
PolylinePipeline
|
19
|
+
PolylinePipeline,
|
20
|
+
Matrix4,
|
21
|
+
Material) {
|
18
22
|
"use strict";
|
19
23
|
|
20
24
|
var EMPTY_OBJECT = {};
|
@@ -24,15 +28,20 @@ define([
|
|
24
28
|
*
|
25
29
|
* @alias Polyline
|
26
30
|
* @internalConstructor
|
31
|
+
*
|
32
|
+
* @demo <a href="http://cesium.agi.com/Cesium/Apps/Sandcastle/index.html?src=Polylines.html">Cesium Sandcastle Polyline Demo</a>
|
27
33
|
*/
|
28
34
|
var Polyline = function(description, polylineCollection) {
|
29
35
|
description = defaultValue(description, EMPTY_OBJECT);
|
30
36
|
|
31
37
|
this._show = defaultValue(description.show, true);
|
32
38
|
this._width = defaultValue(description.width, 1.0);
|
33
|
-
|
34
|
-
this.
|
35
|
-
this.
|
39
|
+
|
40
|
+
this._material = description.material;
|
41
|
+
if (typeof this._material === 'undefined') {
|
42
|
+
this._material = Material.fromType(undefined, Material.ColorType);
|
43
|
+
this._material.uniforms.color = new Color(1.0, 1.0, 1.0, 1.0);
|
44
|
+
}
|
36
45
|
|
37
46
|
var positions = description.positions;
|
38
47
|
if (typeof positions === 'undefined') {
|
@@ -40,27 +49,32 @@ define([
|
|
40
49
|
}
|
41
50
|
|
42
51
|
this._positions = positions;
|
43
|
-
|
44
|
-
|
52
|
+
|
53
|
+
var modelMatrix;
|
54
|
+
if (typeof this._polylineCollection !== 'undefined') {
|
55
|
+
modelMatrix = Matrix4.clone(this._polylineCollection.modelMatrix);
|
56
|
+
}
|
57
|
+
|
58
|
+
this._modelMatrix = modelMatrix;
|
59
|
+
this._segments = PolylinePipeline.wrapLongitude(positions, modelMatrix);
|
60
|
+
|
61
|
+
this._actualLength = undefined;
|
45
62
|
|
46
63
|
this._propertiesChanged = new Uint32Array(NUMBER_OF_PROPERTIES);
|
47
64
|
this._polylineCollection = polylineCollection;
|
48
65
|
this._dirty = false;
|
49
66
|
this._pickId = undefined;
|
50
67
|
this._pickIdThis = description._pickIdThis;
|
51
|
-
this._segments = undefined;
|
52
68
|
this._boundingVolume = BoundingSphere.fromPoints(this._positions);
|
53
69
|
this._boundingVolume2D = new BoundingSphere(); // modified in PolylineCollection
|
54
70
|
};
|
55
71
|
|
56
72
|
var SHOW_INDEX = Polyline.SHOW_INDEX = 0;
|
57
|
-
var
|
58
|
-
var
|
59
|
-
var
|
60
|
-
var
|
61
|
-
var
|
62
|
-
var POSITION_SIZE_INDEX = Polyline.POSITION_SIZE_INDEX = 6;
|
63
|
-
var NUMBER_OF_PROPERTIES = Polyline.NUMBER_OF_PROPERTIES = 7;
|
73
|
+
var WIDTH_INDEX = Polyline.WIDTH_INDEX = 1;
|
74
|
+
var POSITION_INDEX = Polyline.POSITION_INDEX = 2;
|
75
|
+
var MATERIAL_INDEX = Polyline.MATERIAL_INDEX = 3;
|
76
|
+
var POSITION_SIZE_INDEX = Polyline.POSITION_SIZE_INDEX = 4;
|
77
|
+
var NUMBER_OF_PROPERTIES = Polyline.NUMBER_OF_PROPERTIES = 5;
|
64
78
|
|
65
79
|
function makeDirty(polyline, propertyChanged) {
|
66
80
|
++polyline._propertiesChanged[propertyChanged];
|
@@ -113,6 +127,8 @@ define([
|
|
113
127
|
*
|
114
128
|
* @memberof Polyline
|
115
129
|
*
|
130
|
+
* @return {Array} The polyline's positions.
|
131
|
+
*
|
116
132
|
* @see Polyline#setPositions
|
117
133
|
*/
|
118
134
|
Polyline.prototype.getPositions = function() {
|
@@ -144,70 +160,96 @@ define([
|
|
144
160
|
throw new DeveloperError('value is required.');
|
145
161
|
}
|
146
162
|
|
147
|
-
if (this.
|
148
|
-
this._positionsLength = value.length;
|
163
|
+
if (this._positions.length !== value.length) {
|
149
164
|
makeDirty(this, POSITION_SIZE_INDEX);
|
150
165
|
}
|
151
166
|
|
152
167
|
this._positions = value;
|
153
168
|
this._boundingVolume = BoundingSphere.fromPoints(this._positions, this._boundingVolume);
|
154
169
|
makeDirty(this, POSITION_INDEX);
|
170
|
+
|
171
|
+
this.update();
|
172
|
+
};
|
173
|
+
|
174
|
+
/**
|
175
|
+
* @private
|
176
|
+
*/
|
177
|
+
Polyline.prototype.update = function() {
|
178
|
+
var modelMatrix = Matrix4.IDENTITY;
|
179
|
+
if (typeof this._polylineCollection !== 'undefined') {
|
180
|
+
modelMatrix = this._polylineCollection.modelMatrix;
|
181
|
+
}
|
182
|
+
|
183
|
+
var segmentPositionsLength = this._segments.positions.length;
|
184
|
+
var segmentLengths = this._segments.lengths;
|
185
|
+
|
186
|
+
var positionsChanged = this._propertiesChanged[POSITION_INDEX] > 0 || this._propertiesChanged[POSITION_SIZE_INDEX] > 0;
|
187
|
+
if (!modelMatrix.equals(this._modelMatrix) || positionsChanged) {
|
188
|
+
this._segments = PolylinePipeline.wrapLongitude(this._positions, modelMatrix);
|
189
|
+
}
|
190
|
+
|
191
|
+
this._modelMatrix = modelMatrix;
|
192
|
+
|
193
|
+
if (this._segments.positions.length !== segmentPositionsLength) {
|
194
|
+
// number of positions changed
|
195
|
+
makeDirty(this, POSITION_SIZE_INDEX);
|
196
|
+
} else {
|
197
|
+
var length = segmentLengths.length;
|
198
|
+
for (var i = 0; i < length; ++i) {
|
199
|
+
if (segmentLengths[i] !== this._segments.lengths[i]) {
|
200
|
+
// indices changed
|
201
|
+
makeDirty(this, POSITION_SIZE_INDEX);
|
202
|
+
break;
|
203
|
+
}
|
204
|
+
}
|
205
|
+
}
|
155
206
|
};
|
156
207
|
|
157
208
|
/**
|
158
|
-
*
|
209
|
+
* Gets the surface appearance of the polyline. This can be one of several built-in {@link Material} objects or a custom material, scripted with
|
210
|
+
* <a href='https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric'>Fabric</a>.
|
159
211
|
*
|
160
212
|
* @memberof Polyline
|
161
213
|
*
|
162
|
-
* @
|
163
|
-
*
|
164
|
-
* @see Polyline#setColor
|
214
|
+
* @returns {Material} The material.
|
165
215
|
*/
|
166
|
-
Polyline.prototype.
|
167
|
-
return this.
|
216
|
+
Polyline.prototype.getMaterial = function() {
|
217
|
+
return this._material;
|
168
218
|
};
|
169
219
|
|
170
220
|
/**
|
171
|
-
* Sets the
|
221
|
+
* Sets the surface appearance of the polyline. This can be one of several built-in {@link Material} objects or a custom material, scripted with
|
222
|
+
* <a href='https://github.com/AnalyticalGraphicsInc/cesium/wiki/Fabric'>Fabric</a>.
|
172
223
|
*
|
173
224
|
* @memberof Polyline
|
174
225
|
*
|
175
|
-
* @param {
|
226
|
+
* @param {Material} material The material
|
176
227
|
*
|
177
|
-
* @exception {DeveloperError}
|
228
|
+
* @exception {DeveloperError} material is required.
|
178
229
|
*
|
179
|
-
* @see Polyline#
|
230
|
+
* @see Polyline#getMaterial
|
180
231
|
*/
|
181
|
-
Polyline.prototype.
|
182
|
-
if (typeof
|
183
|
-
throw new DeveloperError('
|
232
|
+
Polyline.prototype.setMaterial = function(material) {
|
233
|
+
if (typeof material === 'undefined') {
|
234
|
+
throw new DeveloperError('material is required.');
|
184
235
|
}
|
185
236
|
|
186
|
-
|
187
|
-
|
188
|
-
Color.clone(value, color);
|
189
|
-
makeDirty(this, COLOR_INDEX);
|
190
|
-
}
|
237
|
+
this._material = material;
|
238
|
+
makeDirty(this, MATERIAL_INDEX);
|
191
239
|
};
|
192
240
|
|
193
241
|
/**
|
194
242
|
* Gets the width of the polyline.
|
195
|
-
* The actual width used is clamped to the minimum and maximum width supported by
|
196
|
-
* the WebGL implementation. These can be queried with
|
197
|
-
* {@link Context#getMinimumAliasedLineWidth} and {@link Context#getMaximumAliasedLineWidth}.
|
198
243
|
*
|
199
244
|
* @memberof Polyline
|
200
245
|
*
|
201
246
|
* @return {Number} The width of the polyline.
|
202
247
|
*
|
203
248
|
* @see Polyline#setWidth
|
204
|
-
* @see Context#getMinimumAliasedLineWidth
|
205
|
-
* @see Context#getMaximumAliasedLineWidth
|
206
249
|
*
|
207
250
|
* @example
|
208
|
-
*
|
209
|
-
*
|
210
|
-
* polyline.outlineWidth = 3.0;
|
251
|
+
* polyline.setWidth(5.0);
|
252
|
+
* var width = polyline.getWidth(); // 5.0
|
211
253
|
*/
|
212
254
|
Polyline.prototype.getWidth = function() {
|
213
255
|
return this._width;
|
@@ -215,22 +257,18 @@ define([
|
|
215
257
|
|
216
258
|
/**
|
217
259
|
* Sets the width of the polyline.
|
218
|
-
*
|
219
|
-
*
|
220
|
-
* {@link Context#getMinimumAliasedLineWidth} and {@link Context#getMaximumAliasedLineWidth}.
|
260
|
+
*
|
261
|
+
* @memberof Polyline
|
221
262
|
*
|
222
263
|
* @param {Number} value The width of the polyline.
|
223
264
|
*
|
224
265
|
* @exception {DeveloperError} value is required.
|
225
266
|
*
|
226
267
|
* @see Polyline#getWidth
|
227
|
-
* @see Context#getMinimumAliasedLineWidth
|
228
|
-
* @see Context#getMaximumAliasedLineWidth
|
229
268
|
*
|
230
269
|
* @example
|
231
|
-
*
|
232
|
-
*
|
233
|
-
* polyline.outlineWidth = 3.0;
|
270
|
+
* polyline.setWidth(5.0);
|
271
|
+
* var width = polyline.getWidth(); // 5.0
|
234
272
|
*/
|
235
273
|
Polyline.prototype.setWidth = function(value) {
|
236
274
|
if (typeof value === 'undefined') {
|
@@ -244,97 +282,10 @@ define([
|
|
244
282
|
}
|
245
283
|
};
|
246
284
|
|
247
|
-
|
248
|
-
/**
|
249
|
-
* Gets the outline width of the polyline.
|
250
|
-
* The actual width used is clamped to the minimum and maximum width supported by
|
251
|
-
* the WebGL implementation. These can be queried with
|
252
|
-
* {@link Context#getMinimumAliasedLineWidth} and {@link Context#getMaximumAliasedLineWidth}.
|
253
|
-
*
|
254
|
-
* @return {Number} The outline width of the polyline.
|
255
|
-
*
|
256
|
-
* @see Polyline#setOutlineWidth
|
257
|
-
* @see Context#getMinimumAliasedLineWidth
|
258
|
-
* @see Context#getMaximumAliasedLineWidth
|
259
|
-
*
|
260
|
-
* @example
|
261
|
-
* // 3 pixel total width, 1 pixel interior width
|
262
|
-
* polyline.width = 1.0;
|
263
|
-
* polyline.outlineWidth = 3.0;
|
264
|
-
*/
|
265
|
-
Polyline.prototype.getOutlineWidth = function() {
|
266
|
-
return this._outlineWidth;
|
267
|
-
};
|
268
|
-
|
269
|
-
/**
|
270
|
-
* Sets the outline width of the polyline.
|
271
|
-
* The actual width used is clamped to the minimum and maximum width supported by
|
272
|
-
* the WebGL implementation. These can be queried with
|
273
|
-
* {@link Context#getMinimumAliasedLineWidth} and {@link Context#getMaximumAliasedLineWidth}.
|
274
|
-
*
|
275
|
-
* @param {Number} value The outline width of the polyline.
|
276
|
-
*
|
277
|
-
* @exception {DeveloperError} value is required.
|
278
|
-
*
|
279
|
-
* @see Polyline#getOutlineWidth
|
280
|
-
* @see Context#getMinimumAliasedLineWidth
|
281
|
-
* @see Context#getMaximumAliasedLineWidth
|
282
|
-
*
|
283
|
-
* @example
|
284
|
-
* // 3 pixel total width, 1 pixel interior width
|
285
|
-
* polyline.width = 1.0;
|
286
|
-
* polyline.outlineWidth = 3.0;
|
287
|
-
*/
|
288
|
-
Polyline.prototype.setOutlineWidth = function(value) {
|
289
|
-
if (typeof value === 'undefined') {
|
290
|
-
throw new DeveloperError('value is required.');
|
291
|
-
}
|
292
|
-
|
293
|
-
var outlineWidth = this._outlineWidth;
|
294
|
-
if (value !== outlineWidth) {
|
295
|
-
this._outlineWidth = value;
|
296
|
-
makeDirty(this, OUTLINE_WIDTH_INDEX);
|
297
|
-
}
|
298
|
-
};
|
299
|
-
|
300
|
-
/**
|
301
|
-
* Gets the outline color of the polyline.
|
302
|
-
*
|
303
|
-
* @memberof Polyline
|
304
|
-
*
|
305
|
-
* @return {Color} The outline color of the polyline.
|
306
|
-
*
|
307
|
-
* @see Polyline#setOutlineColor
|
308
|
-
*/
|
309
|
-
Polyline.prototype.getOutlineColor = function() {
|
310
|
-
return this._outlineColor;
|
311
|
-
};
|
312
|
-
|
313
|
-
/**
|
314
|
-
* Sets the outline color of the polyline.
|
315
|
-
*
|
316
|
-
* @memberof Polyline
|
317
|
-
*
|
318
|
-
* @param {Color} value The outline color of the polyline.
|
319
|
-
*
|
320
|
-
* @exception {DeveloperError} value is required.
|
321
|
-
*
|
322
|
-
* @see Polyline#getOutlineColor
|
323
|
-
*/
|
324
|
-
Polyline.prototype.setOutlineColor = function(value) {
|
325
|
-
if (typeof value === 'undefined') {
|
326
|
-
throw new DeveloperError('value is required.');
|
327
|
-
}
|
328
|
-
|
329
|
-
var outlineColor = this._outlineColor;
|
330
|
-
if (!Color.equals(outlineColor, value)) {
|
331
|
-
Color.clone(value, outlineColor);
|
332
|
-
makeDirty(this, OUTLINE_COLOR_INDEX);
|
333
|
-
}
|
334
|
-
};
|
335
|
-
|
336
285
|
Polyline.prototype.getPickId = function(context) {
|
337
|
-
|
286
|
+
if (typeof this._pickId === 'undefined') {
|
287
|
+
this._pickId = context.createPickId(defaultValue(this._pickIdThis, this));
|
288
|
+
}
|
338
289
|
return this._pickId;
|
339
290
|
};
|
340
291
|
|
@@ -346,94 +297,9 @@ define([
|
|
346
297
|
}
|
347
298
|
};
|
348
299
|
|
349
|
-
Polyline.prototype._getPositions2D = function() {
|
350
|
-
var segments = this._segments;
|
351
|
-
var positions = [];
|
352
|
-
var numberOfSegments = segments.length;
|
353
|
-
|
354
|
-
for ( var i = 0; i < numberOfSegments; ++i) {
|
355
|
-
var segment = segments[i];
|
356
|
-
var segmentLength = segment.length;
|
357
|
-
for ( var n = 0; n < segmentLength; ++n) {
|
358
|
-
positions.push(segment[n].cartesian);
|
359
|
-
}
|
360
|
-
}
|
361
|
-
return positions;
|
362
|
-
};
|
363
|
-
|
364
|
-
Polyline.prototype._createSegments = function(modelMatrix) {
|
365
|
-
return PolylinePipeline.wrapLongitude(this.getPositions(), modelMatrix);
|
366
|
-
};
|
367
|
-
|
368
|
-
Polyline.prototype._setSegments = function(segments) {
|
369
|
-
this._segments = segments;
|
370
|
-
var numberOfSegments = segments.length;
|
371
|
-
var length = 0;
|
372
|
-
for ( var i = 0; i < numberOfSegments; ++i) {
|
373
|
-
var segment = segments[i];
|
374
|
-
var segmentLength = segment.length;
|
375
|
-
length += segmentLength;
|
376
|
-
}
|
377
|
-
return length;
|
378
|
-
};
|
379
|
-
|
380
|
-
Polyline.prototype._getSegments = function() {
|
381
|
-
return this._segments;
|
382
|
-
};
|
383
|
-
|
384
|
-
Polyline.prototype._segmentsLengthChanged = function(newSegments) {
|
385
|
-
var origSegments = this._segments;
|
386
|
-
if (typeof origSegments !== 'undefined') {
|
387
|
-
var numberOfSegments = newSegments.length;
|
388
|
-
if (numberOfSegments !== origSegments.length) {
|
389
|
-
return true;
|
390
|
-
}
|
391
|
-
for ( var i = 0; i < numberOfSegments; ++i) {
|
392
|
-
if (newSegments[i].length !== origSegments[i].length) {
|
393
|
-
return true;
|
394
|
-
}
|
395
|
-
}
|
396
|
-
return false;
|
397
|
-
}
|
398
|
-
return true;
|
399
|
-
};
|
400
|
-
|
401
|
-
/**
|
402
|
-
* Determines if this polyline equals another polyline. Polylines are equal if all their properties
|
403
|
-
* are equal. Polylines in different collections can be equal.
|
404
|
-
*
|
405
|
-
* @memberof Polyline
|
406
|
-
*
|
407
|
-
* @param {Polyline} other The polyline to compare for equality.
|
408
|
-
*
|
409
|
-
* @return {Boolean} <code>true</code> if the polylines are equal; otherwise, <code>false</code>.
|
410
|
-
*/
|
411
|
-
Polyline.prototype.equals = function(other) {
|
412
|
-
return this === other ||
|
413
|
-
typeof other !== 'undefined' &&
|
414
|
-
this._show === other._show &&
|
415
|
-
this._width === other._width &&
|
416
|
-
this._outlineWidth === other._outlineWidth &&
|
417
|
-
this._horizontalOrigin === other._horizontalOrigin &&
|
418
|
-
cartesian3ArrayEquals(this._positions, other._positions) &&
|
419
|
-
Color.equals(this._color, other._color) &&
|
420
|
-
Color.equals(this._outlineColor, other._outlineColor);
|
421
|
-
};
|
422
|
-
|
423
|
-
function cartesian3ArrayEquals(a, b) {
|
424
|
-
if (a.length !== b.length) {
|
425
|
-
return false;
|
426
|
-
}
|
427
|
-
for ( var i = 0, len = a.length; i < len; ++i) {
|
428
|
-
if (!Cartesian3.equals(a[i], b[i])) {
|
429
|
-
return false;
|
430
|
-
}
|
431
|
-
}
|
432
|
-
return true;
|
433
|
-
}
|
434
|
-
|
435
300
|
Polyline.prototype._destroy = function() {
|
436
301
|
this._pickId = this._pickId && this._pickId.destroy();
|
302
|
+
this._material = this._material && this._material.destroy();
|
437
303
|
this._polylineCollection = undefined;
|
438
304
|
};
|
439
305
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
/*global define*/
|
2
2
|
define([
|
3
3
|
'../Core/DeveloperError',
|
4
|
+
'../Core/Color',
|
4
5
|
'../Core/combine',
|
5
6
|
'../Core/destroyObject',
|
6
7
|
'../Core/Cartesian3',
|
@@ -10,21 +11,21 @@ define([
|
|
10
11
|
'../Core/ComponentDatatype',
|
11
12
|
'../Core/IndexDatatype',
|
12
13
|
'../Core/PrimitiveType',
|
13
|
-
'../Core/Color',
|
14
14
|
'../Core/BoundingSphere',
|
15
15
|
'../Core/Intersect',
|
16
16
|
'../Renderer/BlendingState',
|
17
17
|
'../Renderer/BufferUsage',
|
18
18
|
'../Renderer/CommandLists',
|
19
19
|
'../Renderer/DrawCommand',
|
20
|
+
'../Renderer/createPickFragmentShaderSource',
|
21
|
+
'./Material',
|
20
22
|
'./SceneMode',
|
21
23
|
'./Polyline',
|
22
24
|
'../Shaders/PolylineVS',
|
23
|
-
'../Shaders/PolylineFS'
|
24
|
-
'../Renderer/StencilFunction',
|
25
|
-
'../Renderer/StencilOperation'
|
25
|
+
'../Shaders/PolylineFS'
|
26
26
|
], function(
|
27
27
|
DeveloperError,
|
28
|
+
Color,
|
28
29
|
combine,
|
29
30
|
destroyObject,
|
30
31
|
Cartesian3,
|
@@ -34,27 +35,24 @@ define([
|
|
34
35
|
ComponentDatatype,
|
35
36
|
IndexDatatype,
|
36
37
|
PrimitiveType,
|
37
|
-
Color,
|
38
38
|
BoundingSphere,
|
39
39
|
Intersect,
|
40
40
|
BlendingState,
|
41
41
|
BufferUsage,
|
42
42
|
CommandLists,
|
43
43
|
DrawCommand,
|
44
|
+
createPickFragmentShaderSource,
|
45
|
+
Material,
|
44
46
|
SceneMode,
|
45
47
|
Polyline,
|
46
48
|
PolylineVS,
|
47
|
-
PolylineFS
|
48
|
-
StencilFunction,
|
49
|
-
StencilOperation) {
|
49
|
+
PolylineFS) {
|
50
50
|
"use strict";
|
51
51
|
|
52
52
|
var SHOW_INDEX = Polyline.SHOW_INDEX;
|
53
|
-
var POSITION_INDEX = Polyline.POSITION_INDEX;
|
54
|
-
var COLOR_INDEX = Polyline.COLOR_INDEX;
|
55
|
-
var OUTLINE_COLOR_INDEX = Polyline.OUTLINE_COLOR_INDEX;
|
56
53
|
var WIDTH_INDEX = Polyline.WIDTH_INDEX;
|
57
|
-
var
|
54
|
+
var POSITION_INDEX = Polyline.POSITION_INDEX;
|
55
|
+
var MATERIAL_INDEX = Polyline.MATERIAL_INDEX;
|
58
56
|
//POSITION_SIZE_INDEX is needed for when the polyline's position array changes size.
|
59
57
|
//When it does, we need to recreate the indicesBuffer.
|
60
58
|
var POSITION_SIZE_INDEX = Polyline.POSITION_SIZE_INDEX;
|
@@ -66,9 +64,16 @@ define([
|
|
66
64
|
position3DLow : 1,
|
67
65
|
position2DHigh : 2,
|
68
66
|
position2DLow : 3,
|
69
|
-
|
70
|
-
|
71
|
-
|
67
|
+
prevPosition3DHigh : 4,
|
68
|
+
prevPosition3DLow : 5,
|
69
|
+
prevPosition2DHigh : 6,
|
70
|
+
prevPosition2DLow : 7,
|
71
|
+
nextPosition3DHigh : 8,
|
72
|
+
nextPosition3DLow : 9,
|
73
|
+
nextPosition2DHigh : 10,
|
74
|
+
nextPosition2DLow : 11,
|
75
|
+
texCoordExpandWidthAndShow : 12,
|
76
|
+
pickColor : 13
|
72
77
|
};
|
73
78
|
|
74
79
|
/**
|
@@ -104,9 +109,9 @@ define([
|
|
104
109
|
* new Cartographic2(-77.02, 38.53),
|
105
110
|
* new Cartographic2(-80.50, 35.14),
|
106
111
|
* new Cartographic2(-80.12, 25.46)]),
|
107
|
-
|
108
|
-
|
109
|
-
|
112
|
+
* width:2
|
113
|
+
* });
|
114
|
+
*
|
110
115
|
* polylines.add({positions:ellipsoid.cartographicDegreesToCartesians([
|
111
116
|
* new Cartographic2(-73.10, 37.57),
|
112
117
|
* new Cartographic2(-75.02, 36.53),
|
@@ -114,16 +119,10 @@ define([
|
|
114
119
|
* new Cartographic2(-78.12, 23.46)]),
|
115
120
|
* width:4
|
116
121
|
* });
|
122
|
+
*
|
123
|
+
* @demo <a href="http://cesium.agi.com/Cesium/Apps/Sandcastle/index.html?src=Polylines.html">Cesium Sandcastle Polyline Demo</a>
|
117
124
|
*/
|
118
125
|
var PolylineCollection = function() {
|
119
|
-
/**
|
120
|
-
* The current morph transition time between 2D/Columbus View and 3D,
|
121
|
-
* with 0.0 being 2D or Columbus View and 1.0 being 3D.
|
122
|
-
*
|
123
|
-
* @type Number
|
124
|
-
*/
|
125
|
-
this.morphTime = 1.0;
|
126
|
-
|
127
126
|
/**
|
128
127
|
* The 4x4 transformation matrix that transforms each polyline in this collection from model to world coordinates.
|
129
128
|
* When this is the identity matrix, the polylines are drawn in world coordinates, i.e., Earth's WGS84 coordinates.
|
@@ -138,12 +137,14 @@ define([
|
|
138
137
|
*/
|
139
138
|
this.modelMatrix = Matrix4.IDENTITY.clone();
|
140
139
|
this._modelMatrix = Matrix4.IDENTITY.clone();
|
141
|
-
this.
|
140
|
+
this._rs = undefined;
|
142
141
|
|
143
142
|
this._boundingVolume = undefined;
|
144
143
|
this._boundingVolume2D = undefined;
|
145
144
|
|
146
145
|
this._commandLists = new CommandLists();
|
146
|
+
this._colorCommands = [];
|
147
|
+
this._pickCommands = [];
|
147
148
|
|
148
149
|
this._polylinesUpdated = false;
|
149
150
|
this._polylinesRemoved = false;
|
@@ -154,32 +155,18 @@ define([
|
|
154
155
|
|
155
156
|
// The buffer usage for each attribute is determined based on the usage of the attribute over time.
|
156
157
|
this._buffersUsage = [
|
157
|
-
{bufferUsage: BufferUsage.STATIC_DRAW, frameCount:0}
|
158
|
-
{bufferUsage: BufferUsage.STATIC_DRAW, frameCount:0}, // POSITION_INDEX
|
159
|
-
{bufferUsage: BufferUsage.STATIC_DRAW, frameCount:0}, // COLOR_INDEX
|
160
|
-
{bufferUsage: BufferUsage.STATIC_DRAW, frameCount:0}, // OUTLINE_COLOR_INDEX
|
158
|
+
{bufferUsage: BufferUsage.STATIC_DRAW, frameCount:0}, // SHOW_INDEX
|
161
159
|
{bufferUsage: BufferUsage.STATIC_DRAW, frameCount:0}, // WIDTH_INDEX
|
162
|
-
{bufferUsage: BufferUsage.STATIC_DRAW, frameCount:0}
|
160
|
+
{bufferUsage: BufferUsage.STATIC_DRAW, frameCount:0} // POSITION_INDEX
|
163
161
|
];
|
164
162
|
|
165
163
|
this._mode = undefined;
|
166
|
-
var that = this;
|
167
|
-
|
168
|
-
this._uniforms = {
|
169
|
-
u_morphTime : function() {
|
170
|
-
return that.morphTime;
|
171
|
-
}
|
172
|
-
};
|
173
164
|
|
174
165
|
this._polylinesToUpdate = [];
|
175
|
-
this.
|
176
|
-
this._outlineColorVertexArrays = [];
|
177
|
-
this._pickColorVertexArrays = [];
|
166
|
+
this._vertexArrays = [];
|
178
167
|
this._positionBuffer = undefined;
|
179
|
-
this._outlineColorBuffer = undefined;
|
180
|
-
this._colorBuffer = undefined;
|
181
168
|
this._pickColorBuffer = undefined;
|
182
|
-
this.
|
169
|
+
this._texCoordExpandWidthAndShowBuffer = undefined;
|
183
170
|
};
|
184
171
|
|
185
172
|
/**
|
@@ -209,9 +196,7 @@ define([
|
|
209
196
|
* positions : ellipsoid.cartographicDegreesToCartesians([
|
210
197
|
* new Cartographic2(-75.10, 39.57),
|
211
198
|
* new Cartographic2(-77.02, 38.53)]),
|
212
|
-
*
|
213
|
-
* width : 1,
|
214
|
-
* outlineWidth : 2
|
199
|
+
* width : 1
|
215
200
|
* });
|
216
201
|
*
|
217
202
|
*/
|
@@ -254,6 +239,11 @@ define([
|
|
254
239
|
this._polylines[polyline._index] = null; // Removed later
|
255
240
|
this._polylinesRemoved = true;
|
256
241
|
this._createVertexArray = true;
|
242
|
+
if (typeof polyline._bucket !== 'undefined') {
|
243
|
+
var bucket = polyline._bucket;
|
244
|
+
bucket.shaderProgram = bucket.shaderProgram && bucket.shaderProgram.release();
|
245
|
+
bucket.pickShaderProgram = bucket.pickShaderProgram && bucket.pickShaderProgram.release();
|
246
|
+
}
|
257
247
|
polyline._destroy();
|
258
248
|
return true;
|
259
249
|
}
|
@@ -281,7 +271,8 @@ define([
|
|
281
271
|
* polylines.removeAll();
|
282
272
|
*/
|
283
273
|
PolylineCollection.prototype.removeAll = function() {
|
284
|
-
this
|
274
|
+
releaseShaders(this);
|
275
|
+
destroyPolylines(this);
|
285
276
|
this._polylineBuckets = {};
|
286
277
|
this._polylinesRemoved = false;
|
287
278
|
this._polylines.length = 0;
|
@@ -339,7 +330,7 @@ define([
|
|
339
330
|
throw new DeveloperError('index is required.');
|
340
331
|
}
|
341
332
|
|
342
|
-
this
|
333
|
+
removePolylines(this);
|
343
334
|
return this._polylines[index];
|
344
335
|
};
|
345
336
|
|
@@ -369,77 +360,58 @@ define([
|
|
369
360
|
* }
|
370
361
|
*/
|
371
362
|
PolylineCollection.prototype.getLength = function() {
|
372
|
-
this
|
363
|
+
removePolylines(this);
|
373
364
|
return this._polylines.length;
|
374
365
|
};
|
375
366
|
|
367
|
+
var emptyArray = [];
|
368
|
+
var scracthBoundingSphere = new BoundingSphere();
|
369
|
+
|
376
370
|
/**
|
377
|
-
*
|
378
|
-
*
|
379
|
-
* @memberof PolylineCollection
|
371
|
+
* @private
|
380
372
|
*/
|
381
373
|
PolylineCollection.prototype.update = function(context, frameState, commandList) {
|
382
|
-
|
383
|
-
|
374
|
+
removePolylines(this);
|
375
|
+
|
376
|
+
if (this._polylines.length === 0) {
|
377
|
+
return;
|
384
378
|
}
|
385
|
-
this._removePolylines();
|
386
|
-
this._updateMode(frameState);
|
387
379
|
|
388
|
-
|
389
|
-
var polyline;
|
390
|
-
var length;
|
391
|
-
var buckets;
|
392
|
-
var polylineBuckets;
|
393
|
-
var bucketLength;
|
394
|
-
var bucketLocator;
|
380
|
+
updateMode(this, frameState);
|
395
381
|
|
382
|
+
var polyline;
|
396
383
|
var properties = this._propertiesChanged;
|
397
|
-
|
398
|
-
|
384
|
+
|
385
|
+
if (this._createVertexArray || computeNewBuffersUsage(this)) {
|
386
|
+
createVertexArrays(this, context);
|
399
387
|
} else if (this._polylinesUpdated) {
|
400
388
|
// Polylines were modified, but no polylines were added or removed.
|
401
389
|
var polylinesToUpdate = this._polylinesToUpdate;
|
402
|
-
var createVertexArrays = false;
|
403
390
|
if (this._mode !== SceneMode.SCENE3D) {
|
404
391
|
var updateLength = polylinesToUpdate.length;
|
405
392
|
for ( var i = 0; i < updateLength; ++i) {
|
406
393
|
polyline = polylinesToUpdate[i];
|
407
|
-
|
408
|
-
if (changedProperties[POSITION_INDEX]) {
|
409
|
-
var newSegments = polyline._createSegments(this.modelMatrix);
|
410
|
-
if (polyline._segmentsLengthChanged(newSegments)) {
|
411
|
-
createVertexArrays = true;
|
412
|
-
break;
|
413
|
-
}
|
414
|
-
polyline._setSegments(newSegments);
|
415
|
-
}
|
394
|
+
polyline.update();
|
416
395
|
}
|
417
396
|
}
|
418
|
-
|
419
|
-
if
|
420
|
-
|
397
|
+
|
398
|
+
// if a polyline's positions size changes, we need to recreate the vertex arrays and vertex buffers because the indices will be different.
|
399
|
+
// if a polyline's material changes, we need to recreate the VAOs and VBOs because they will be batched differenty.
|
400
|
+
if (properties[POSITION_SIZE_INDEX] || properties[MATERIAL_INDEX]) {
|
401
|
+
createVertexArrays(this, context);
|
421
402
|
} else {
|
422
|
-
length = polylinesToUpdate.length;
|
423
|
-
polylineBuckets = this._polylineBuckets;
|
403
|
+
var length = polylinesToUpdate.length;
|
404
|
+
var polylineBuckets = this._polylineBuckets;
|
424
405
|
for ( var ii = 0; ii < length; ++ii) {
|
425
406
|
polyline = polylinesToUpdate[ii];
|
426
407
|
properties = polyline._propertiesChanged;
|
427
|
-
bucket = polyline._bucket;
|
408
|
+
var bucket = polyline._bucket;
|
428
409
|
var index = 0;
|
429
410
|
for ( var x in polylineBuckets) {
|
430
411
|
if (polylineBuckets.hasOwnProperty(x)) {
|
431
412
|
if (polylineBuckets[x] === bucket) {
|
432
|
-
if (properties[POSITION_INDEX]) {
|
433
|
-
bucket.
|
434
|
-
}
|
435
|
-
if (properties[COLOR_INDEX]) {
|
436
|
-
bucket.writeColorUpdate(index, polyline, this._colorBuffer);
|
437
|
-
}
|
438
|
-
if (properties[OUTLINE_COLOR_INDEX]) {
|
439
|
-
bucket.writeColorUpdate(index, polyline, this._outlineColorBuffer);
|
440
|
-
}
|
441
|
-
if (properties[SHOW_INDEX]) {
|
442
|
-
bucket.writeShowUpdate(index, polyline, this._showBuffer);
|
413
|
+
if (properties[POSITION_INDEX] || properties[SHOW_INDEX] || properties[WIDTH_INDEX]) {
|
414
|
+
bucket.writeUpdate(index, polyline, this._positionBuffer, this._texCoordExpandWidthAndShowBuffer);
|
443
415
|
}
|
444
416
|
break;
|
445
417
|
}
|
@@ -463,113 +435,151 @@ define([
|
|
463
435
|
if (frameState.mode === SceneMode.SCENE3D) {
|
464
436
|
boundingVolume = this._boundingVolume;
|
465
437
|
modelMatrix = this.modelMatrix;
|
466
|
-
} else if (frameState.mode === SceneMode.COLUMBUS_VIEW
|
438
|
+
} else if (frameState.mode === SceneMode.COLUMBUS_VIEW) {
|
467
439
|
boundingVolume = this._boundingVolume2D;
|
468
|
-
} else {
|
469
|
-
|
440
|
+
} else if (frameState.mode === SceneMode.SCENE2D) {
|
441
|
+
if (typeof this._boundingVolume2D !== 'undefined') {
|
442
|
+
boundingVolume = BoundingSphere.clone(this._boundingVolume2D, scracthBoundingSphere);
|
443
|
+
boundingVolume.center.x = 0.0;
|
444
|
+
}
|
445
|
+
} else if (typeof this._boundingVolume !== 'undefined' && typeof this._boundingVolume2D !== 'undefined') {
|
446
|
+
boundingVolume = BoundingSphere.union(this._boundingVolume, this._boundingVolume2D, scracthBoundingSphere);
|
447
|
+
}
|
448
|
+
|
449
|
+
if (typeof boundingVolume === 'undefined') {
|
450
|
+
return;
|
470
451
|
}
|
471
452
|
|
472
453
|
var pass = frameState.passes;
|
473
|
-
var
|
474
|
-
var
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
if (typeof
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
var p = commands.length;
|
488
|
-
commands.length += bucketLength * 3;
|
489
|
-
for ( var n = 0; n < bucketLength; ++n, p += 3) {
|
490
|
-
bucketLocator = buckets[n];
|
491
|
-
|
492
|
-
command = commands[p];
|
493
|
-
if (typeof command === 'undefined') {
|
494
|
-
command = commands[p] = new DrawCommand();
|
495
|
-
}
|
454
|
+
var useDepthTest = (frameState.morphTime !== 0.0);
|
455
|
+
var commandLists = this._commandLists;
|
456
|
+
commandLists.colorList = emptyArray;
|
457
|
+
commandLists.pickList = emptyArray;
|
458
|
+
|
459
|
+
if ((typeof this._rs === 'undefined') || (this._rs.depthTest.enabled !== useDepthTest)) {
|
460
|
+
this._rs = context.createRenderState({
|
461
|
+
blending : BlendingState.ALPHA_BLEND,
|
462
|
+
depthMask : !useDepthTest,
|
463
|
+
depthTest : {
|
464
|
+
enabled : useDepthTest
|
465
|
+
}
|
466
|
+
});
|
467
|
+
}
|
496
468
|
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
command.count = bucketLocator.count;
|
501
|
-
command.offset = bucketLocator.offset;
|
502
|
-
command.shaderProgram = sp;
|
503
|
-
command.uniformMap = this._uniforms;
|
504
|
-
command.vertexArray = vaOutlineColor.va;
|
505
|
-
command.renderState = bucketLocator.rsOne;
|
506
|
-
|
507
|
-
command = commands[p + 1];
|
508
|
-
if (typeof command === 'undefined') {
|
509
|
-
command = commands[p + 1] = new DrawCommand();
|
510
|
-
}
|
469
|
+
if (pass.color) {
|
470
|
+
var colorList = this._colorCommands;
|
471
|
+
commandLists.colorList = colorList;
|
511
472
|
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
473
|
+
createCommandLists(colorList, boundingVolume, modelMatrix, this._vertexArrays, this._rs, true);
|
474
|
+
}
|
475
|
+
|
476
|
+
if (pass.pick) {
|
477
|
+
var pickList = this._pickCommands;
|
478
|
+
commandLists.pickList = pickList;
|
479
|
+
|
480
|
+
createCommandLists(pickList, boundingVolume, modelMatrix, this._vertexArrays, this._rs, false);
|
481
|
+
}
|
482
|
+
|
483
|
+
if (!this._commandLists.empty()) {
|
484
|
+
commandList.push(this._commandLists);
|
485
|
+
}
|
486
|
+
};
|
487
|
+
|
488
|
+
function createCommandLists(commands, boundingVolume, modelMatrix, vertexArrays, renderState, colorPass) {
|
489
|
+
var length = vertexArrays.length;
|
490
|
+
|
491
|
+
var commandsLength = commands.length;
|
492
|
+
var commandIndex = 0;
|
493
|
+
|
494
|
+
for ( var m = 0; m < length; ++m) {
|
495
|
+
var va = vertexArrays[m];
|
496
|
+
var buckets = va.buckets;
|
497
|
+
var bucketLength = buckets.length;
|
498
|
+
|
499
|
+
for ( var n = 0; n < bucketLength; ++n) {
|
500
|
+
var bucketLocator = buckets[n];
|
501
|
+
|
502
|
+
var offset = bucketLocator.offset;
|
503
|
+
var sp = colorPass ? bucketLocator.bucket.shaderProgram : bucketLocator.bucket.pickShaderProgram;
|
504
|
+
|
505
|
+
var polylines = bucketLocator.bucket.polylines;
|
506
|
+
var polylineLength = polylines.length;
|
507
|
+
var currentId;
|
508
|
+
var currentMaterial;
|
509
|
+
var count = 0;
|
510
|
+
var command;
|
511
|
+
|
512
|
+
for (var s = 0; s < polylineLength; ++s) {
|
513
|
+
var polyline = polylines[s];
|
514
|
+
var mId = createMaterialId(polyline._material);
|
515
|
+
if (mId !== currentId) {
|
516
|
+
if (typeof currentId !== 'undefined') {
|
517
|
+
if (commandIndex >= commandsLength) {
|
518
|
+
command = new DrawCommand();
|
519
|
+
commands.push(command);
|
520
|
+
} else {
|
521
|
+
command = commands[commandIndex];
|
522
|
+
}
|
523
|
+
|
524
|
+
++commandIndex;
|
525
|
+
|
526
|
+
command.boundingVolume = boundingVolume;
|
527
|
+
command.modelMatrix = modelMatrix;
|
528
|
+
command.primitiveType = PrimitiveType.TRIANGLES;
|
529
|
+
command.shaderProgram = sp;
|
530
|
+
command.vertexArray = va.va;
|
531
|
+
command.renderState = renderState;
|
532
|
+
|
533
|
+
command.uniformMap = currentMaterial._uniforms;
|
534
|
+
command.count = count;
|
535
|
+
command.offset = offset;
|
536
|
+
|
537
|
+
offset += count;
|
538
|
+
count = 0;
|
525
539
|
}
|
526
540
|
|
527
|
-
|
528
|
-
|
529
|
-
command.primitiveType = PrimitiveType.LINES;
|
530
|
-
command.count = bucketLocator.count;
|
531
|
-
command.offset = bucketLocator.offset;
|
532
|
-
command.shaderProgram = sp;
|
533
|
-
command.uniformMap = this._uniforms;
|
534
|
-
command.vertexArray = vaOutlineColor.va;
|
535
|
-
command.renderState = bucketLocator.rsThree;
|
541
|
+
currentMaterial = polyline._material;
|
542
|
+
currentId = mId;
|
536
543
|
}
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
buckets = vaPickColor.buckets;
|
545
|
-
bucketLength = buckets.length;
|
546
|
-
commands.length += bucketLength;
|
547
|
-
for ( var b = 0; b < bucketLength; ++b) {
|
548
|
-
bucketLocator = buckets[b];
|
549
|
-
|
550
|
-
command = commands[b];
|
551
|
-
if (typeof command === 'undefined') {
|
552
|
-
command = commands[b] = new DrawCommand();
|
544
|
+
|
545
|
+
var locators = polyline._locatorBuckets;
|
546
|
+
var locatorLength = locators.length;
|
547
|
+
for (var t = 0; t < locatorLength; ++t) {
|
548
|
+
var locator = locators[t];
|
549
|
+
if (locator.locator === bucketLocator) {
|
550
|
+
count += locator.count;
|
553
551
|
}
|
552
|
+
}
|
553
|
+
}
|
554
554
|
|
555
|
-
|
556
|
-
|
557
|
-
command
|
558
|
-
command
|
559
|
-
|
560
|
-
command
|
561
|
-
command.uniformMap = this._uniforms;
|
562
|
-
command.vertexArray = vaPickColor.va;
|
563
|
-
command.renderState = bucketLocator.rsPick;
|
555
|
+
if (typeof currentId !== 'undefined' && count > 0) {
|
556
|
+
if (commandIndex >= commandsLength) {
|
557
|
+
command = new DrawCommand();
|
558
|
+
commands.push(command);
|
559
|
+
} else {
|
560
|
+
command = commands[commandIndex];
|
564
561
|
}
|
562
|
+
|
563
|
+
++commandIndex;
|
564
|
+
|
565
|
+
command.boundingVolume = boundingVolume;
|
566
|
+
command.modelMatrix = modelMatrix;
|
567
|
+
command.primitiveType = PrimitiveType.TRIANGLES;
|
568
|
+
command.shaderProgram = sp;
|
569
|
+
command.vertexArray = va.va;
|
570
|
+
command.renderState = renderState;
|
571
|
+
|
572
|
+
command.uniformMap = currentMaterial._uniforms;
|
573
|
+
command.count = count;
|
574
|
+
command.offset = offset;
|
565
575
|
}
|
576
|
+
|
577
|
+
currentId = undefined;
|
566
578
|
}
|
567
579
|
}
|
568
580
|
|
569
|
-
|
570
|
-
|
571
|
-
}
|
572
|
-
};
|
581
|
+
commands.length = commandIndex;
|
582
|
+
}
|
573
583
|
|
574
584
|
/**
|
575
585
|
* Returns true if this object was destroyed; otherwise, false.
|
@@ -607,19 +617,19 @@ define([
|
|
607
617
|
* polylines = polylines && polylines.destroy();
|
608
618
|
*/
|
609
619
|
PolylineCollection.prototype.destroy = function() {
|
610
|
-
this
|
611
|
-
this
|
612
|
-
this
|
620
|
+
destroyVertexArrays(this);
|
621
|
+
releaseShaders(this);
|
622
|
+
destroyPolylines(this);
|
613
623
|
return destroyObject(this);
|
614
624
|
};
|
615
625
|
|
616
|
-
|
617
|
-
var buffersUsage =
|
626
|
+
function computeNewBuffersUsage(collection) {
|
627
|
+
var buffersUsage = collection._buffersUsage;
|
618
628
|
var usageChanged = false;
|
619
629
|
|
620
|
-
var properties =
|
621
|
-
//subtract
|
622
|
-
for ( var k = 0; k < NUMBER_OF_PROPERTIES -
|
630
|
+
var properties = collection._propertiesChanged;
|
631
|
+
//subtract 2 from NUMBER_OF_PROPERTIES because we don't care about POSITION_SIZE_INDEX or MATERIAL_INDEX property change.
|
632
|
+
for ( var k = 0; k < NUMBER_OF_PROPERTIES - 2; ++k) {
|
623
633
|
var bufferUsage = buffersUsage[k];
|
624
634
|
if (properties[k]) {
|
625
635
|
if (bufferUsage.bufferUsage !== BufferUsage.STREAM_DRAW) {
|
@@ -641,327 +651,327 @@ define([
|
|
641
651
|
}
|
642
652
|
}
|
643
653
|
return usageChanged;
|
644
|
-
}
|
654
|
+
}
|
655
|
+
|
656
|
+
var emptyVertexBuffer = [0.0, 0.0, 0.0];
|
657
|
+
|
658
|
+
function createVertexArrays(collection, context) {
|
659
|
+
collection._createVertexArray = false;
|
660
|
+
releaseShaders(collection);
|
661
|
+
destroyVertexArrays(collection);
|
662
|
+
sortPolylinesIntoBuckets(collection);
|
645
663
|
|
646
|
-
PolylineCollection.prototype._createVertexArrays = function(context) {
|
647
|
-
this._createVertexArray = false;
|
648
|
-
this._destroyVertexArrays();
|
649
|
-
this._sortPolylinesIntoBuckets();
|
650
664
|
//stores all of the individual indices arrays.
|
651
|
-
var totalIndices = [];
|
652
|
-
var indices = [];
|
665
|
+
var totalIndices = [[]];
|
666
|
+
var indices = totalIndices[0];
|
653
667
|
|
654
668
|
//used to determine the vertexBuffer offset if the indicesArray goes over 64k.
|
655
669
|
//if it's the same polyline while it goes over 64k, the offset needs to backtrack componentsPerAttribute * componentDatatype bytes
|
656
670
|
//so that the polyline looks contiguous.
|
657
671
|
//if the polyline ends at the 64k mark, then the offset is just 64k * componentsPerAttribute * componentDatatype
|
658
672
|
var vertexBufferOffset = [0];
|
659
|
-
totalIndices.push(indices);
|
660
673
|
var offset = 0;
|
661
|
-
var useDepthTest = (this.morphTime !== 0.0);
|
662
674
|
var vertexArrayBuckets = [[]];
|
663
675
|
var totalLength = 0;
|
664
|
-
var polylineBuckets =
|
676
|
+
var polylineBuckets = collection._polylineBuckets;
|
665
677
|
var x;
|
666
678
|
var bucket;
|
667
679
|
for (x in polylineBuckets) {
|
668
680
|
if (polylineBuckets.hasOwnProperty(x)) {
|
669
681
|
bucket = polylineBuckets[x];
|
670
|
-
bucket.
|
682
|
+
bucket.updateShader(context);
|
671
683
|
totalLength += bucket.lengthOfPositions;
|
672
684
|
}
|
673
685
|
}
|
686
|
+
|
674
687
|
if (totalLength > 0) {
|
675
|
-
var
|
676
|
-
|
677
|
-
var
|
688
|
+
var mode = collection._mode;
|
689
|
+
|
690
|
+
var positionArray = new Float32Array(6 * totalLength * 3);
|
678
691
|
var pickColorArray = new Uint8Array(totalLength * 4);
|
679
|
-
var
|
692
|
+
var texCoordExpandWidthAndShowArray = new Float32Array(totalLength * 4);
|
680
693
|
var position3DArray;
|
681
694
|
|
682
695
|
var positionIndex = 0;
|
683
696
|
var colorIndex = 0;
|
684
|
-
var
|
697
|
+
var texCoordExpandWidthAndShowIndex = 0;
|
685
698
|
for (x in polylineBuckets) {
|
686
699
|
if (polylineBuckets.hasOwnProperty(x)) {
|
687
700
|
bucket = polylineBuckets[x];
|
688
|
-
bucket.write(positionArray,
|
689
|
-
|
701
|
+
bucket.write(positionArray, pickColorArray, texCoordExpandWidthAndShowArray, positionIndex, colorIndex, texCoordExpandWidthAndShowIndex, context);
|
702
|
+
|
703
|
+
if (mode === SceneMode.MORPHING) {
|
690
704
|
if (typeof position3DArray === 'undefined') {
|
691
|
-
position3DArray = new Float32Array(
|
705
|
+
position3DArray = new Float32Array(6 * totalLength * 3);
|
692
706
|
}
|
693
707
|
bucket.writeForMorph(position3DArray, positionIndex);
|
694
708
|
}
|
709
|
+
|
695
710
|
var bucketLength = bucket.lengthOfPositions;
|
696
|
-
positionIndex +=
|
697
|
-
showIndex += bucketLength;
|
711
|
+
positionIndex += 6 * bucketLength * 3;
|
698
712
|
colorIndex += bucketLength * 4;
|
713
|
+
texCoordExpandWidthAndShowIndex += bucketLength * 4;
|
699
714
|
offset = bucket.updateIndices(totalIndices, vertexBufferOffset, vertexArrayBuckets, offset);
|
700
715
|
}
|
701
716
|
}
|
702
|
-
|
717
|
+
|
718
|
+
var positionBufferUsage = collection._buffersUsage[POSITION_INDEX].bufferUsage;
|
719
|
+
var showBufferUsage = collection._buffersUsage[SHOW_INDEX].bufferUsage;
|
720
|
+
var widthBufferUsage = collection._buffersUsage[WIDTH_INDEX].bufferUsage;
|
721
|
+
var texCoordExpandWidthAndShowBufferUsage = (showBufferUsage === BufferUsage.STREAM_DRAW || widthBufferUsage === BufferUsage.STREAM_DRAW) ? BufferUsage.STREAM_DRAW : BufferUsage.STATIC_DRAW;
|
722
|
+
|
723
|
+
collection._positionBuffer = context.createVertexBuffer(positionArray, positionBufferUsage);
|
703
724
|
var position3DBuffer;
|
704
725
|
if (typeof position3DArray !== 'undefined') {
|
705
|
-
position3DBuffer = context.createVertexBuffer(position3DArray,
|
726
|
+
position3DBuffer = context.createVertexBuffer(position3DArray, positionBufferUsage);
|
706
727
|
}
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
var colorSizeInBytes = 4 * Uint8Array.BYTES_PER_ELEMENT;
|
728
|
+
collection._pickColorBuffer = context.createVertexBuffer(pickColorArray, BufferUsage.STATIC_DRAW);
|
729
|
+
collection._texCoordExpandWidthAndShowBuffer = context.createVertexBuffer(texCoordExpandWidthAndShowArray, texCoordExpandWidthAndShowBufferUsage);
|
730
|
+
|
731
|
+
var pickColorSizeInBytes = 4 * Uint8Array.BYTES_PER_ELEMENT;
|
712
732
|
var positionSizeInBytes = 3 * Float32Array.BYTES_PER_ELEMENT;
|
733
|
+
var texCoordExpandWidthAndShowSizeInBytes = 4 * Float32Array.BYTES_PER_ELEMENT;
|
734
|
+
|
713
735
|
var vbo = 0;
|
714
736
|
var numberOfIndicesArrays = totalIndices.length;
|
715
737
|
for ( var k = 0; k < numberOfIndicesArrays; ++k) {
|
716
738
|
indices = totalIndices[k];
|
739
|
+
|
717
740
|
if (indices.length > 0) {
|
718
741
|
var indicesArray = new Uint16Array(indices);
|
719
742
|
var indexBuffer = context.createIndexBuffer(indicesArray, BufferUsage.STATIC_DRAW, IndexDatatype.UNSIGNED_SHORT);
|
720
|
-
|
743
|
+
|
721
744
|
vbo += vertexBufferOffset[k];
|
722
|
-
|
745
|
+
|
746
|
+
var positionHighOffset = 6 * (k * (positionSizeInBytes * SIXTYFOURK) - vbo * positionSizeInBytes);//componentsPerAttribute(3) * componentDatatype(4)
|
723
747
|
var positionLowOffset = positionSizeInBytes + positionHighOffset;
|
724
|
-
var
|
725
|
-
var
|
748
|
+
var prevPositionHighOffset = positionSizeInBytes + positionLowOffset;
|
749
|
+
var prevPositionLowOffset = positionSizeInBytes + prevPositionHighOffset;
|
750
|
+
var nextPositionHighOffset = positionSizeInBytes + prevPositionLowOffset;
|
751
|
+
var nextPositionLowOffset = positionSizeInBytes + nextPositionHighOffset;
|
752
|
+
var vertexPickColorBufferOffset = k * (pickColorSizeInBytes * SIXTYFOURK) - vbo * pickColorSizeInBytes;
|
753
|
+
var vertexTexCoordExpandWidthAndShowBufferOffset = k * (texCoordExpandWidthAndShowSizeInBytes * SIXTYFOURK) - vbo * texCoordExpandWidthAndShowSizeInBytes;
|
754
|
+
|
726
755
|
var attributes = [{
|
727
756
|
index : attributeIndices.position3DHigh,
|
728
757
|
componentsPerAttribute : 3,
|
729
758
|
componentDatatype : ComponentDatatype.FLOAT,
|
730
759
|
offsetInBytes : positionHighOffset,
|
731
|
-
strideInBytes :
|
760
|
+
strideInBytes : 6 * positionSizeInBytes
|
732
761
|
}, {
|
733
762
|
index : attributeIndices.position3DLow,
|
734
763
|
componentsPerAttribute : 3,
|
735
764
|
componentDatatype : ComponentDatatype.FLOAT,
|
736
765
|
offsetInBytes : positionLowOffset,
|
737
|
-
strideInBytes :
|
766
|
+
strideInBytes : 6 * positionSizeInBytes
|
738
767
|
}, {
|
739
768
|
index : attributeIndices.position2DHigh,
|
740
769
|
componentsPerAttribute : 3,
|
741
770
|
componentDatatype : ComponentDatatype.FLOAT,
|
742
771
|
offsetInBytes : positionHighOffset,
|
743
|
-
strideInBytes :
|
772
|
+
strideInBytes : 6 * positionSizeInBytes
|
744
773
|
}, {
|
745
774
|
index : attributeIndices.position2DLow,
|
746
775
|
componentsPerAttribute : 3,
|
747
776
|
componentDatatype : ComponentDatatype.FLOAT,
|
748
777
|
offsetInBytes : positionLowOffset,
|
749
|
-
strideInBytes :
|
778
|
+
strideInBytes : 6 * positionSizeInBytes
|
750
779
|
}, {
|
751
|
-
index : attributeIndices.
|
752
|
-
componentsPerAttribute : 4,
|
753
|
-
normalize : true,
|
754
|
-
componentDatatype : ComponentDatatype.UNSIGNED_BYTE,
|
755
|
-
vertexBuffer : this._colorBuffer,
|
756
|
-
offsetInBytes : vertexColorBufferOffset
|
757
|
-
}, {
|
758
|
-
index : attributeIndices.show,
|
759
|
-
componentsPerAttribute : 1,
|
760
|
-
componentDatatype : ComponentDatatype.UNSIGNED_BYTE,
|
761
|
-
vertexBuffer : this._showBuffer,
|
762
|
-
offsetInBytes : vertexShowBufferOffset
|
763
|
-
}];
|
764
|
-
|
765
|
-
var attributesOutlineColor = [{
|
766
|
-
index : attributeIndices.position3DHigh,
|
780
|
+
index : attributeIndices.prevPosition3DHigh,
|
767
781
|
componentsPerAttribute : 3,
|
768
782
|
componentDatatype : ComponentDatatype.FLOAT,
|
769
|
-
offsetInBytes :
|
770
|
-
strideInBytes :
|
783
|
+
offsetInBytes : prevPositionHighOffset,
|
784
|
+
strideInBytes : 6 * positionSizeInBytes
|
771
785
|
}, {
|
772
|
-
index : attributeIndices.
|
786
|
+
index : attributeIndices.prevPosition3DLow,
|
773
787
|
componentsPerAttribute : 3,
|
774
788
|
componentDatatype : ComponentDatatype.FLOAT,
|
775
|
-
offsetInBytes :
|
776
|
-
strideInBytes :
|
789
|
+
offsetInBytes : prevPositionLowOffset,
|
790
|
+
strideInBytes : 6 * positionSizeInBytes
|
777
791
|
}, {
|
778
|
-
index : attributeIndices.
|
792
|
+
index : attributeIndices.prevPosition2DHigh,
|
779
793
|
componentsPerAttribute : 3,
|
780
794
|
componentDatatype : ComponentDatatype.FLOAT,
|
781
|
-
offsetInBytes :
|
782
|
-
strideInBytes :
|
795
|
+
offsetInBytes : prevPositionHighOffset,
|
796
|
+
strideInBytes : 6 * positionSizeInBytes
|
783
797
|
}, {
|
784
|
-
index : attributeIndices.
|
798
|
+
index : attributeIndices.prevPosition2DLow,
|
785
799
|
componentsPerAttribute : 3,
|
786
800
|
componentDatatype : ComponentDatatype.FLOAT,
|
787
|
-
offsetInBytes :
|
788
|
-
strideInBytes :
|
789
|
-
}, {
|
790
|
-
index : attributeIndices.color,
|
791
|
-
componentsPerAttribute : 4,
|
792
|
-
normalize : true,
|
793
|
-
componentDatatype : ComponentDatatype.UNSIGNED_BYTE,
|
794
|
-
vertexBuffer : this._outlineColorBuffer,
|
795
|
-
offsetInBytes : vertexColorBufferOffset
|
801
|
+
offsetInBytes : prevPositionLowOffset,
|
802
|
+
strideInBytes : 6 * positionSizeInBytes
|
796
803
|
}, {
|
797
|
-
index : attributeIndices.
|
798
|
-
componentsPerAttribute : 1,
|
799
|
-
componentDatatype : ComponentDatatype.UNSIGNED_BYTE,
|
800
|
-
vertexBuffer : this._showBuffer,
|
801
|
-
offsetInBytes : vertexShowBufferOffset
|
802
|
-
}];
|
803
|
-
|
804
|
-
var attributesPickColor = [{
|
805
|
-
index : attributeIndices.position3DHigh,
|
804
|
+
index : attributeIndices.nextPosition3DHigh,
|
806
805
|
componentsPerAttribute : 3,
|
807
806
|
componentDatatype : ComponentDatatype.FLOAT,
|
808
|
-
offsetInBytes :
|
809
|
-
strideInBytes :
|
807
|
+
offsetInBytes : nextPositionHighOffset,
|
808
|
+
strideInBytes : 6 * positionSizeInBytes
|
810
809
|
}, {
|
811
|
-
index : attributeIndices.
|
810
|
+
index : attributeIndices.nextPosition3DLow,
|
812
811
|
componentsPerAttribute : 3,
|
813
812
|
componentDatatype : ComponentDatatype.FLOAT,
|
814
|
-
offsetInBytes :
|
815
|
-
strideInBytes :
|
813
|
+
offsetInBytes : nextPositionLowOffset,
|
814
|
+
strideInBytes : 6 * positionSizeInBytes
|
816
815
|
}, {
|
817
|
-
index : attributeIndices.
|
816
|
+
index : attributeIndices.nextPosition2DHigh,
|
818
817
|
componentsPerAttribute : 3,
|
819
818
|
componentDatatype : ComponentDatatype.FLOAT,
|
820
|
-
offsetInBytes :
|
821
|
-
strideInBytes :
|
819
|
+
offsetInBytes : nextPositionHighOffset,
|
820
|
+
strideInBytes : 6 * positionSizeInBytes
|
822
821
|
}, {
|
823
|
-
index : attributeIndices.
|
822
|
+
index : attributeIndices.nextPosition2DLow,
|
824
823
|
componentsPerAttribute : 3,
|
825
824
|
componentDatatype : ComponentDatatype.FLOAT,
|
826
|
-
offsetInBytes :
|
827
|
-
strideInBytes :
|
825
|
+
offsetInBytes : nextPositionLowOffset,
|
826
|
+
strideInBytes : 6 * positionSizeInBytes
|
828
827
|
}, {
|
829
|
-
index : attributeIndices.
|
828
|
+
index : attributeIndices.texCoordExpandWidthAndShow,
|
830
829
|
componentsPerAttribute : 4,
|
831
|
-
|
832
|
-
|
833
|
-
|
834
|
-
offsetInBytes : vertexColorBufferOffset
|
830
|
+
componentDatatype : ComponentDatatype.FLOAT,
|
831
|
+
vertexBuffer : collection._texCoordExpandWidthAndShowBuffer,
|
832
|
+
offsetInBytes : vertexTexCoordExpandWidthAndShowBufferOffset
|
835
833
|
}, {
|
836
|
-
index : attributeIndices.
|
837
|
-
componentsPerAttribute :
|
834
|
+
index : attributeIndices.pickColor,
|
835
|
+
componentsPerAttribute : 4,
|
838
836
|
componentDatatype : ComponentDatatype.UNSIGNED_BYTE,
|
839
|
-
vertexBuffer :
|
840
|
-
offsetInBytes :
|
837
|
+
vertexBuffer : collection._pickColorBuffer,
|
838
|
+
offsetInBytes : vertexPickColorBufferOffset,
|
839
|
+
normalize : true
|
841
840
|
}];
|
842
841
|
|
843
|
-
|
844
|
-
|
845
|
-
|
846
|
-
|
847
|
-
|
848
|
-
|
849
|
-
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
attributes[1].value = [0.0, 0.0, 0.0];
|
859
|
-
attributes[2].vertexBuffer = this._positionBuffer;
|
860
|
-
attributes[3].vertexBuffer = this._positionBuffer;
|
861
|
-
attributesOutlineColor[0].value = [0.0, 0.0, 0.0];
|
862
|
-
attributesOutlineColor[1].value = [0.0, 0.0, 0.0];
|
863
|
-
attributesOutlineColor[2].vertexBuffer = this._positionBuffer;
|
864
|
-
attributesOutlineColor[3].vertexBuffer = this._positionBuffer;
|
865
|
-
attributesPickColor[0].value = [0.0, 0.0, 0.0];
|
866
|
-
attributesPickColor[1].value = [0.0, 0.0, 0.0];
|
867
|
-
attributesPickColor[2].vertexBuffer = this._positionBuffer;
|
868
|
-
attributesPickColor[3].vertexBuffer = this._positionBuffer;
|
842
|
+
var buffer3D;
|
843
|
+
var bufferProperty3D;
|
844
|
+
var buffer2D;
|
845
|
+
var bufferProperty2D;
|
846
|
+
|
847
|
+
if (mode === SceneMode.SCENE3D) {
|
848
|
+
buffer3D = collection._positionBuffer;
|
849
|
+
bufferProperty3D = 'vertexBuffer';
|
850
|
+
buffer2D = emptyVertexBuffer;
|
851
|
+
bufferProperty2D = 'value';
|
852
|
+
} else if (mode === SceneMode.SCENE2D || mode === SceneMode.COLUMBUS_VIEW) {
|
853
|
+
buffer3D = emptyVertexBuffer;
|
854
|
+
bufferProperty3D = 'value';
|
855
|
+
buffer2D = collection._positionBuffer;
|
856
|
+
bufferProperty2D = 'vertexBuffer';
|
869
857
|
} else {
|
870
|
-
|
871
|
-
|
872
|
-
|
873
|
-
|
874
|
-
attributesOutlineColor[0].vertexBuffer = position3DBuffer;
|
875
|
-
attributesOutlineColor[1].vertexBuffer = position3DBuffer;
|
876
|
-
attributesOutlineColor[2].vertexBuffer = this._positionBuffer;
|
877
|
-
attributesOutlineColor[3].vertexBuffer = this._positionBuffer;
|
878
|
-
attributesPickColor[0].vertexBuffer = position3DBuffer;
|
879
|
-
attributesPickColor[1].vertexBuffer = position3DBuffer;
|
880
|
-
attributesPickColor[2].vertexBuffer = this._positionBuffer;
|
881
|
-
attributesPickColor[3].vertexBuffer = this._positionBuffer;
|
858
|
+
buffer3D = position3DBuffer;
|
859
|
+
bufferProperty3D = 'vertexBuffer';
|
860
|
+
buffer2D = collection._positionBuffer;
|
861
|
+
bufferProperty2D = 'vertexBuffer';
|
882
862
|
}
|
883
|
-
var va = context.createVertexArray(attributes, indexBuffer);
|
884
|
-
var vaOutlineColor = context.createVertexArray(attributesOutlineColor, indexBuffer);
|
885
|
-
var vaPickColor = context.createVertexArray(attributesPickColor, indexBuffer);
|
886
863
|
|
887
|
-
|
864
|
+
attributes[0][bufferProperty3D] = buffer3D;
|
865
|
+
attributes[1][bufferProperty3D] = buffer3D;
|
866
|
+
attributes[2][bufferProperty2D] = buffer2D;
|
867
|
+
attributes[3][bufferProperty2D] = buffer2D;
|
868
|
+
attributes[4][bufferProperty3D] = buffer3D;
|
869
|
+
attributes[5][bufferProperty3D] = buffer3D;
|
870
|
+
attributes[6][bufferProperty2D] = buffer2D;
|
871
|
+
attributes[7][bufferProperty2D] = buffer2D;
|
872
|
+
attributes[8][bufferProperty3D] = buffer3D;
|
873
|
+
attributes[9][bufferProperty3D] = buffer3D;
|
874
|
+
attributes[10][bufferProperty2D] = buffer2D;
|
875
|
+
attributes[11][bufferProperty2D] = buffer2D;
|
876
|
+
|
877
|
+
var va = context.createVertexArray(attributes, indexBuffer);
|
878
|
+
collection._vertexArrays.push({
|
888
879
|
va : va,
|
889
880
|
buckets : vertexArrayBuckets[k]
|
890
881
|
});
|
891
|
-
this._outlineColorVertexArrays.push({
|
892
|
-
va : vaOutlineColor,
|
893
|
-
buckets : vertexArrayBuckets[k]
|
894
|
-
});
|
895
|
-
this._pickColorVertexArrays.push({
|
896
|
-
va : vaPickColor,
|
897
|
-
buckets : vertexArrayBuckets[k]
|
898
|
-
});
|
899
882
|
}
|
900
883
|
}
|
901
884
|
}
|
902
|
-
}
|
885
|
+
}
|
886
|
+
|
887
|
+
var scratchUniformArray = [];
|
888
|
+
function createMaterialId(material) {
|
889
|
+
var uniforms = Material._uniformList[material.type];
|
890
|
+
var length = uniforms.length;
|
891
|
+
scratchUniformArray.length = 2.0 * length;
|
892
|
+
|
893
|
+
var index = 0;
|
894
|
+
for (var i = 0; i < length; ++i) {
|
895
|
+
var uniform = uniforms[i];
|
896
|
+
scratchUniformArray[index] = uniform;
|
897
|
+
scratchUniformArray[index + 1] = material._uniforms[uniform]();
|
898
|
+
index += 2;
|
899
|
+
}
|
900
|
+
|
901
|
+
return material.type + ':' + JSON.stringify(scratchUniformArray);
|
902
|
+
}
|
903
|
+
|
904
|
+
function sortPolylinesIntoBuckets(collection) {
|
905
|
+
var mode = collection._mode;
|
906
|
+
var projection = collection._projection;
|
907
|
+
var modelMatrix = collection._modelMatrix;
|
903
908
|
|
904
|
-
|
905
|
-
var
|
906
|
-
var polylines = this._polylines;
|
909
|
+
var polylineBuckets = collection._polylineBuckets = {};
|
910
|
+
var polylines = collection._polylines;
|
907
911
|
var length = polylines.length;
|
908
912
|
for ( var i = 0; i < length; ++i) {
|
909
913
|
var p = polylines[i];
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
|
915
|
-
|
914
|
+
if (p.getPositions().length > 1) {
|
915
|
+
p.update();
|
916
|
+
var material = p.getMaterial();
|
917
|
+
var value = polylineBuckets[material.type];
|
918
|
+
if (typeof value === 'undefined') {
|
919
|
+
value = polylineBuckets[material.type] = new PolylineBucket(material, mode, projection, modelMatrix);
|
920
|
+
}
|
921
|
+
value.addPolyline(p);
|
916
922
|
}
|
917
|
-
value.addPolyline(p);
|
918
923
|
}
|
919
|
-
}
|
924
|
+
}
|
920
925
|
|
921
|
-
|
926
|
+
function updateMode(collection, frameState) {
|
922
927
|
var mode = frameState.mode;
|
923
928
|
var projection = frameState.scene2D.projection;
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
this._modelMatrix = this.modelMatrix.clone();
|
931
|
-
this._createVertexArray = true;
|
929
|
+
|
930
|
+
if (collection._mode !== mode || (collection._projection !== projection) || (!collection._modelMatrix.equals(collection.modelMatrix))) {
|
931
|
+
collection._mode = mode;
|
932
|
+
collection._projection = projection;
|
933
|
+
collection._modelMatrix = collection.modelMatrix.clone();
|
934
|
+
collection._createVertexArray = true;
|
932
935
|
}
|
933
|
-
}
|
936
|
+
}
|
934
937
|
|
935
|
-
|
936
|
-
if (
|
937
|
-
|
938
|
+
function removePolylines(collection) {
|
939
|
+
if (collection._polylinesRemoved) {
|
940
|
+
collection._polylinesRemoved = false;
|
938
941
|
|
939
942
|
var polylines = [];
|
940
943
|
|
941
|
-
var length =
|
944
|
+
var length = collection._polylines.length;
|
942
945
|
for ( var i = 0, j = 0; i < length; ++i) {
|
943
|
-
var polyline =
|
946
|
+
var polyline = collection._polylines[i];
|
944
947
|
if (polyline) {
|
945
948
|
polyline._index = j++;
|
946
949
|
polylines.push(polyline);
|
947
950
|
}
|
948
951
|
}
|
949
952
|
|
950
|
-
|
953
|
+
collection._polylines = polylines;
|
951
954
|
}
|
952
|
-
}
|
955
|
+
}
|
956
|
+
|
957
|
+
function releaseShaders(collection) {
|
958
|
+
var polylines = collection._polylines;
|
959
|
+
var length = polylines.length;
|
960
|
+
for (var i = 0; i < length; ++i) {
|
961
|
+
var bucket = polylines[i]._bucket;
|
962
|
+
if (typeof bucket !== 'undefined') {
|
963
|
+
bucket.shaderProgram = bucket.shaderProgram && bucket.shaderProgram.release();
|
964
|
+
}
|
965
|
+
}
|
966
|
+
}
|
953
967
|
|
954
|
-
|
955
|
-
var length =
|
968
|
+
function destroyVertexArrays(collection) {
|
969
|
+
var length = collection._vertexArrays.length;
|
956
970
|
for ( var t = 0; t < length; ++t) {
|
957
|
-
|
958
|
-
this._pickColorVertexArrays[t].va.destroy();
|
959
|
-
this._outlineColorVertexArrays[t].va.destroy();
|
971
|
+
collection._vertexArrays[t].va.destroy();
|
960
972
|
}
|
961
|
-
|
962
|
-
|
963
|
-
this._outlineColorVertexArrays.length = 0;
|
964
|
-
};
|
973
|
+
collection._vertexArrays.length = 0;
|
974
|
+
}
|
965
975
|
|
966
976
|
PolylineCollection.prototype._updatePolyline = function(polyline, propertyChanged) {
|
967
977
|
this._polylinesUpdated = true;
|
@@ -969,49 +979,34 @@ define([
|
|
969
979
|
++this._propertiesChanged[propertyChanged];
|
970
980
|
};
|
971
981
|
|
972
|
-
|
973
|
-
var polylines =
|
982
|
+
function destroyPolylines(collection) {
|
983
|
+
var polylines = collection._polylines;
|
974
984
|
var length = polylines.length;
|
975
985
|
for ( var i = 0; i < length; ++i) {
|
976
986
|
if (polylines[i]) {
|
977
987
|
polylines[i]._destroy();
|
978
988
|
}
|
979
989
|
}
|
980
|
-
}
|
990
|
+
}
|
981
991
|
|
982
|
-
/**
|
983
|
-
* @private
|
984
|
-
*/
|
985
992
|
function VertexArrayBucketLocator(count, offset, bucket) {
|
986
993
|
this.count = count;
|
987
994
|
this.offset = offset;
|
988
|
-
this.
|
989
|
-
this.rsTwo = bucket.rsTwo;
|
990
|
-
this.rsThree = bucket.rsThree;
|
991
|
-
this.rsPick = bucket.rsPick;
|
995
|
+
this.bucket = bucket;
|
992
996
|
}
|
993
997
|
|
994
|
-
|
995
|
-
* @private
|
996
|
-
*/
|
997
|
-
var PolylineBucket = function(outlineWidth, width, mode, projection, modelMatrix) {
|
998
|
-
this.width = width;
|
999
|
-
this.outlineWidth = outlineWidth;
|
998
|
+
var PolylineBucket = function(material, mode, projection, modelMatrix) {
|
1000
999
|
this.polylines = [];
|
1001
1000
|
this.lengthOfPositions = 0;
|
1002
|
-
this.
|
1003
|
-
this.
|
1004
|
-
this.
|
1005
|
-
this.rsPick = undefined;
|
1001
|
+
this.material = material;
|
1002
|
+
this.shaderProgram = undefined;
|
1003
|
+
this.pickShaderProgram = undefined;
|
1006
1004
|
this.mode = mode;
|
1007
1005
|
this.projection = projection;
|
1008
1006
|
this.ellipsoid = projection.getEllipsoid();
|
1009
1007
|
this.modelMatrix = modelMatrix;
|
1010
1008
|
};
|
1011
1009
|
|
1012
|
-
/**
|
1013
|
-
* @private
|
1014
|
-
*/
|
1015
1010
|
PolylineBucket.prototype.addPolyline = function(p) {
|
1016
1011
|
var polylines = this.polylines;
|
1017
1012
|
polylines.push(p);
|
@@ -1020,99 +1015,19 @@ define([
|
|
1020
1015
|
p._bucket = this;
|
1021
1016
|
};
|
1022
1017
|
|
1023
|
-
|
1024
|
-
|
1025
|
-
|
1026
|
-
|
1027
|
-
|
1028
|
-
var
|
1029
|
-
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
|
1034
|
-
|
1035
|
-
|
1036
|
-
lineWidth : 1,
|
1037
|
-
blending : BlendingState.ALPHA_BLEND,
|
1038
|
-
stencilTest : {
|
1039
|
-
enabled : true,
|
1040
|
-
frontFunction : StencilFunction.ALWAYS,
|
1041
|
-
backFunction : StencilFunction.ALWAYS,
|
1042
|
-
reference : 0,
|
1043
|
-
mask : ~0,
|
1044
|
-
frontOperation : {
|
1045
|
-
fail : StencilOperation.REPLACE,
|
1046
|
-
zFail : StencilOperation.REPLACE,
|
1047
|
-
zPass : StencilOperation.REPLACE
|
1048
|
-
},
|
1049
|
-
backOperation : {
|
1050
|
-
fail : StencilOperation.REPLACE,
|
1051
|
-
zFail : StencilOperation.REPLACE,
|
1052
|
-
zPass : StencilOperation.REPLACE
|
1053
|
-
}
|
1054
|
-
}
|
1055
|
-
});
|
1056
|
-
rsOne.depthMask = !useDepthTest;
|
1057
|
-
rsOne.depthTest.enabled = useDepthTest;
|
1058
|
-
rsOne.lineWidth = outlineWidth;
|
1059
|
-
this.rsOne = rsOne;
|
1060
|
-
var rsTwo = this.rsTwo || context.createRenderState({
|
1061
|
-
lineWidth : 1,
|
1062
|
-
depthMask : false,
|
1063
|
-
blending : BlendingState.ALPHA_BLEND,
|
1064
|
-
stencilTest : {
|
1065
|
-
enabled : true,
|
1066
|
-
frontFunction : StencilFunction.ALWAYS,
|
1067
|
-
backFunction : StencilFunction.ALWAYS,
|
1068
|
-
reference : 1,
|
1069
|
-
mask : ~0,
|
1070
|
-
frontOperation : {
|
1071
|
-
fail : StencilOperation.KEEP,
|
1072
|
-
zFail : StencilOperation.KEEP,
|
1073
|
-
zPass : StencilOperation.REPLACE
|
1074
|
-
},
|
1075
|
-
backOperation : {
|
1076
|
-
fail : StencilOperation.KEEP,
|
1077
|
-
zFail : StencilOperation.KEEP,
|
1078
|
-
zPass : StencilOperation.REPLACE
|
1079
|
-
}
|
1080
|
-
}
|
1081
|
-
});
|
1082
|
-
rsTwo.depthTest.enabled = useDepthTest;
|
1083
|
-
rsTwo.lineWidth = width;
|
1084
|
-
this.rsTwo = rsTwo;
|
1085
|
-
var rsThree = this.rsThree || context.createRenderState({
|
1086
|
-
lineWidth : 1,
|
1087
|
-
depthMask : false,
|
1088
|
-
blending : BlendingState.ALPHA_BLEND,
|
1089
|
-
stencilTest : {
|
1090
|
-
enabled : true,
|
1091
|
-
frontFunction : StencilFunction.NOT_EQUAL,
|
1092
|
-
backFunction : StencilFunction.NOT_EQUAL,
|
1093
|
-
reference : 1,
|
1094
|
-
mask : ~0,
|
1095
|
-
frontOperation : {
|
1096
|
-
fail : StencilOperation.KEEP,
|
1097
|
-
zFail : StencilOperation.KEEP,
|
1098
|
-
zPass : StencilOperation.KEEP
|
1099
|
-
},
|
1100
|
-
backOperation : {
|
1101
|
-
fail : StencilOperation.KEEP,
|
1102
|
-
zFail : StencilOperation.KEEP,
|
1103
|
-
zPass : StencilOperation.KEEP
|
1104
|
-
}
|
1105
|
-
}
|
1106
|
-
});
|
1107
|
-
rsThree.lineWidth = this.outlineWidth;
|
1108
|
-
rsThree.depthTest.enabled = useDepthTest;
|
1109
|
-
this.rsThree = rsThree;
|
1110
|
-
|
1111
|
-
var rsPick = this.rsPick || context.createRenderState();
|
1112
|
-
rsPick.depthTest.enabled = useDepthTest;
|
1113
|
-
rsPick.lineWidth = outlineWidth;
|
1114
|
-
rsPick.depthMask = !useDepthTest;
|
1115
|
-
this.rsPick = rsPick;
|
1018
|
+
PolylineBucket.prototype.updateShader = function(context) {
|
1019
|
+
if (typeof this.shaderProgram !== 'undefined') {
|
1020
|
+
return;
|
1021
|
+
}
|
1022
|
+
|
1023
|
+
var fsSource =
|
1024
|
+
'#line 0\n' +
|
1025
|
+
this.material.shaderSource +
|
1026
|
+
'#line 0\n' +
|
1027
|
+
PolylineFS;
|
1028
|
+
|
1029
|
+
this.shaderProgram = context.getShaderCache().getShaderProgram(PolylineVS, fsSource, attributeIndices);
|
1030
|
+
this.pickShaderProgram = context.getShaderCache().getShaderProgram(PolylineVS, createPickFragmentShaderSource(fsSource, 'varying'), attributeIndices);
|
1116
1031
|
};
|
1117
1032
|
|
1118
1033
|
function intersectsIDL(polyline) {
|
@@ -1120,170 +1035,182 @@ define([
|
|
1120
1035
|
polyline._boundingVolume.intersect(Cartesian4.UNIT_Y) === Intersect.INTERSECTING;
|
1121
1036
|
}
|
1122
1037
|
|
1123
|
-
/**
|
1124
|
-
* @private
|
1125
|
-
*/
|
1126
1038
|
PolylineBucket.prototype.getPolylinePositionsLength = function(polyline) {
|
1039
|
+
var length;
|
1127
1040
|
if (this.mode === SceneMode.SCENE3D || !intersectsIDL(polyline)) {
|
1128
|
-
|
1041
|
+
length = polyline.getPositions().length;
|
1042
|
+
return length * 4.0 - 4.0;
|
1129
1043
|
}
|
1130
|
-
|
1131
|
-
|
1044
|
+
|
1045
|
+
var count = 0;
|
1046
|
+
var segmentLengths = polyline._segments.lengths;
|
1047
|
+
length = segmentLengths.length;
|
1048
|
+
for (var i = 0; i < length; ++i) {
|
1049
|
+
count += segmentLengths[i] * 4.0 - 4.0;
|
1050
|
+
}
|
1051
|
+
|
1052
|
+
return count;
|
1132
1053
|
};
|
1133
1054
|
|
1134
1055
|
var scratchWritePosition = new Cartesian3();
|
1056
|
+
var scratchWritePrevPosition = new Cartesian3();
|
1057
|
+
var scratchWriteNextPosition = new Cartesian3();
|
1058
|
+
var scratchWriteVector = new Cartesian3();
|
1135
1059
|
|
1136
|
-
|
1137
|
-
|
1138
|
-
*/
|
1139
|
-
PolylineBucket.prototype.write = function(positionArray, colorArray, outlineColorArray, pickColorArray, showArray, positionIndex, showIndex, colorIndex, context) {
|
1060
|
+
PolylineBucket.prototype.write = function(positionArray, pickColorArray, texCoordExpandWidthAndShowArray, positionIndex, colorIndex, texCoordExpandWidthAndShowIndex, context) {
|
1061
|
+
var mode = this.mode;
|
1140
1062
|
var polylines = this.polylines;
|
1141
1063
|
var length = polylines.length;
|
1142
1064
|
for ( var i = 0; i < length; ++i) {
|
1143
1065
|
var polyline = polylines[i];
|
1144
|
-
var
|
1145
|
-
var show = polyline.getShow();
|
1146
|
-
var
|
1147
|
-
var
|
1148
|
-
var
|
1066
|
+
var width = polyline.getWidth();
|
1067
|
+
var show = polyline.getShow() && width > 0.0;
|
1068
|
+
var segments = this.getSegments(polyline);
|
1069
|
+
var positions = segments.positions;
|
1070
|
+
var lengths = segments.lengths;
|
1149
1071
|
var positionsLength = positions.length;
|
1072
|
+
|
1073
|
+
var pickColor = polyline.getPickId(context).color;
|
1074
|
+
|
1075
|
+
var segmentIndex = 0;
|
1076
|
+
var count = 0;
|
1077
|
+
var position;
|
1078
|
+
|
1150
1079
|
for ( var j = 0; j < positionsLength; ++j) {
|
1151
|
-
|
1080
|
+
if (j === 0) {
|
1081
|
+
position = scratchWriteVector;
|
1082
|
+
Cartesian3.subtract(positions[0], positions[1], position);
|
1083
|
+
Cartesian3.add(positions[0], position, position);
|
1084
|
+
} else {
|
1085
|
+
position = positions[j - 1];
|
1086
|
+
}
|
1087
|
+
|
1088
|
+
scratchWritePrevPosition.x = position.x;
|
1089
|
+
scratchWritePrevPosition.y = position.y;
|
1090
|
+
scratchWritePrevPosition.z = (mode !== SceneMode.SCENE2D) ? position.z : 0.0;
|
1091
|
+
|
1092
|
+
position = positions[j];
|
1152
1093
|
scratchWritePosition.x = position.x;
|
1153
1094
|
scratchWritePosition.y = position.y;
|
1154
|
-
scratchWritePosition.z = (
|
1155
|
-
EncodedCartesian3.writeElements(scratchWritePosition, positionArray, positionIndex);
|
1156
|
-
outlineColorArray[colorIndex] = Color.floatToByte(outlineColor.red);
|
1157
|
-
outlineColorArray[colorIndex + 1] = Color.floatToByte(outlineColor.green);
|
1158
|
-
outlineColorArray[colorIndex + 2] = Color.floatToByte(outlineColor.blue);
|
1159
|
-
outlineColorArray[colorIndex + 3] = Color.floatToByte(outlineColor.alpha);
|
1160
|
-
colorArray[colorIndex] = Color.floatToByte(color.red);
|
1161
|
-
colorArray[colorIndex + 1] = Color.floatToByte(color.green);
|
1162
|
-
colorArray[colorIndex + 2] = Color.floatToByte(color.blue);
|
1163
|
-
colorArray[colorIndex + 3] = Color.floatToByte(color.alpha);
|
1164
|
-
pickColorArray[colorIndex] = pickColor.red;
|
1165
|
-
pickColorArray[colorIndex + 1] = pickColor.green;
|
1166
|
-
pickColorArray[colorIndex + 2] = pickColor.blue;
|
1167
|
-
pickColorArray[colorIndex + 3] = 255;
|
1168
|
-
showArray[showIndex++] = show;
|
1169
|
-
positionIndex += 6;
|
1170
|
-
colorIndex += 4;
|
1171
|
-
}
|
1172
|
-
}
|
1173
|
-
};
|
1095
|
+
scratchWritePosition.z = (mode !== SceneMode.SCENE2D) ? position.z : 0.0;
|
1174
1096
|
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
|
1181
|
-
var polylines = this.polylines;
|
1182
|
-
var length = polylines.length;
|
1183
|
-
for ( var i = 0; i < length; ++i) {
|
1184
|
-
var polyline = polylines[i];
|
1185
|
-
var positions = polyline.getPositions();
|
1186
|
-
|
1187
|
-
var numberOfSegments;
|
1188
|
-
var j;
|
1189
|
-
if (intersectsIDL(polyline)) {
|
1190
|
-
var segments = polyline._getSegments();
|
1191
|
-
numberOfSegments = segments.length;
|
1192
|
-
for ( j = 0; j < numberOfSegments; ++j) {
|
1193
|
-
var segment = segments[j];
|
1194
|
-
var segmentLength = segment.length;
|
1195
|
-
for ( var n = 0; n < segmentLength; ++n) {
|
1196
|
-
position = positions[segment[n].index];
|
1197
|
-
position = modelMatrix.multiplyByPoint(position);
|
1198
|
-
EncodedCartesian3.writeElements(position, positionArray, positionIndex);
|
1199
|
-
positionIndex += 6;
|
1200
|
-
}
|
1097
|
+
if (j === positionsLength - 1) {
|
1098
|
+
position = scratchWriteVector;
|
1099
|
+
Cartesian3.subtract(positions[positionsLength - 1], positions[positionsLength - 2], position);
|
1100
|
+
Cartesian3.add(positions[positionsLength - 1], position, position);
|
1101
|
+
} else {
|
1102
|
+
position = positions[j + 1];
|
1201
1103
|
}
|
1202
|
-
|
1203
|
-
|
1204
|
-
|
1205
|
-
|
1206
|
-
|
1207
|
-
|
1208
|
-
|
1104
|
+
|
1105
|
+
scratchWriteNextPosition.x = position.x;
|
1106
|
+
scratchWriteNextPosition.y = position.y;
|
1107
|
+
scratchWriteNextPosition.z = (mode !== SceneMode.SCENE2D) ? position.z : 0.0;
|
1108
|
+
|
1109
|
+
var segmentLength = lengths[segmentIndex];
|
1110
|
+
if (j === count + segmentLength) {
|
1111
|
+
count += segmentLength;
|
1112
|
+
++segmentIndex;
|
1113
|
+
}
|
1114
|
+
|
1115
|
+
var segmentStart = j - count === 0;
|
1116
|
+
var segmentEnd = j === count + lengths[segmentIndex] - 1;
|
1117
|
+
|
1118
|
+
var startK = (segmentStart) ? 2 : 0;
|
1119
|
+
var endK = (segmentEnd) ? 2 : 4;
|
1120
|
+
|
1121
|
+
for (var k = startK; k < endK; ++k) {
|
1122
|
+
EncodedCartesian3.writeElements(scratchWritePosition, positionArray, positionIndex);
|
1123
|
+
EncodedCartesian3.writeElements(scratchWritePrevPosition, positionArray, positionIndex + 6);
|
1124
|
+
EncodedCartesian3.writeElements(scratchWriteNextPosition, positionArray, positionIndex + 12);
|
1125
|
+
|
1126
|
+
pickColorArray[colorIndex] = Color.floatToByte(pickColor.red);
|
1127
|
+
pickColorArray[colorIndex + 1] = Color.floatToByte(pickColor.green);
|
1128
|
+
pickColorArray[colorIndex + 2] = Color.floatToByte(pickColor.blue);
|
1129
|
+
pickColorArray[colorIndex + 3] = Color.floatToByte(pickColor.alpha);
|
1130
|
+
|
1131
|
+
var direction = (k - 2 < 0) ? -1.0 : 1.0;
|
1132
|
+
texCoordExpandWidthAndShowArray[texCoordExpandWidthAndShowIndex] = j / (positionsLength - 1); // s tex coord
|
1133
|
+
texCoordExpandWidthAndShowArray[texCoordExpandWidthAndShowIndex + 1] = 2 * (k % 2) - 1; // expand direction
|
1134
|
+
texCoordExpandWidthAndShowArray[texCoordExpandWidthAndShowIndex + 2] = direction * width;
|
1135
|
+
texCoordExpandWidthAndShowArray[texCoordExpandWidthAndShowIndex + 3] = show;
|
1136
|
+
|
1137
|
+
positionIndex += 6 * 3;
|
1138
|
+
colorIndex += 4;
|
1139
|
+
texCoordExpandWidthAndShowIndex += 4;
|
1209
1140
|
}
|
1210
1141
|
}
|
1211
1142
|
}
|
1212
1143
|
};
|
1213
1144
|
|
1214
|
-
|
1215
|
-
|
1216
|
-
|
1217
|
-
|
1218
|
-
var min = context.getMinimumAliasedLineWidth();
|
1219
|
-
var max = context.getMaximumAliasedLineWidth();
|
1220
|
-
|
1221
|
-
return Math.min(Math.max(value, min), max);
|
1222
|
-
};
|
1145
|
+
var morphPositionScratch = new Cartesian3();
|
1146
|
+
var morphPrevPositionScratch = new Cartesian3();
|
1147
|
+
var morphNextPositionScratch = new Cartesian3();
|
1148
|
+
var morphVectorScratch = new Cartesian3();
|
1223
1149
|
|
1224
|
-
|
1225
|
-
|
1226
|
-
*/
|
1227
|
-
PolylineBucket.prototype._updateIndices3D = function(totalIndices, vertexBufferOffset, vertexArrayBuckets, offset) {
|
1228
|
-
var vaCount = vertexArrayBuckets.length - 1;
|
1229
|
-
var bucketLocator = new VertexArrayBucketLocator(0, offset, this);
|
1230
|
-
vertexArrayBuckets[vaCount].push(bucketLocator);
|
1231
|
-
var count = 0;
|
1232
|
-
var indices = totalIndices[totalIndices.length - 1];
|
1233
|
-
var indicesCount = 0;
|
1234
|
-
if (indices.length > 0) {
|
1235
|
-
indicesCount = indices[indices.length - 1] + 1;
|
1236
|
-
}
|
1150
|
+
PolylineBucket.prototype.writeForMorph = function(positionArray, positionIndex) {
|
1151
|
+
var modelMatrix = this.modelMatrix;
|
1237
1152
|
var polylines = this.polylines;
|
1238
1153
|
var length = polylines.length;
|
1239
1154
|
for ( var i = 0; i < length; ++i) {
|
1240
1155
|
var polyline = polylines[i];
|
1241
|
-
var positions = polyline.
|
1156
|
+
var positions = polyline._segments.positions;
|
1157
|
+
var lengths = polyline._segments.lengths;
|
1242
1158
|
var positionsLength = positions.length;
|
1243
|
-
|
1244
|
-
|
1245
|
-
|
1246
|
-
|
1247
|
-
|
1248
|
-
|
1249
|
-
|
1250
|
-
|
1251
|
-
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
vertexArrayBuckets[++vaCount] = [bucketLocator];
|
1256
|
-
}
|
1257
|
-
count += 2;
|
1258
|
-
offset += 2;
|
1259
|
-
indices.push(indicesCount++);
|
1260
|
-
indices.push(indicesCount);
|
1261
|
-
}
|
1159
|
+
|
1160
|
+
var segmentIndex = 0;
|
1161
|
+
var count = 0;
|
1162
|
+
|
1163
|
+
for ( var j = 0; j < positionsLength; ++j) {
|
1164
|
+
var prevPosition;
|
1165
|
+
if (j === 0) {
|
1166
|
+
prevPosition = morphVectorScratch;
|
1167
|
+
Cartesian3.subtract(positions[0], positions[1], prevPosition);
|
1168
|
+
Cartesian3.add(positions[0], prevPosition, prevPosition);
|
1169
|
+
} else {
|
1170
|
+
prevPosition = positions[j - 1];
|
1262
1171
|
}
|
1263
|
-
|
1264
|
-
|
1172
|
+
|
1173
|
+
prevPosition = Matrix4.multiplyByPoint(modelMatrix, prevPosition, morphPrevPositionScratch);
|
1174
|
+
|
1175
|
+
var position = Matrix4.multiplyByPoint(modelMatrix, positions[j], morphPositionScratch);
|
1176
|
+
|
1177
|
+
var nextPosition;
|
1178
|
+
if (j === positionsLength - 1) {
|
1179
|
+
nextPosition = morphVectorScratch;
|
1180
|
+
Cartesian3.subtract(positions[positionsLength - 1], positions[positionsLength - 2], nextPosition);
|
1181
|
+
Cartesian3.add(positions[positionsLength - 1], nextPosition, nextPosition);
|
1265
1182
|
} else {
|
1266
|
-
|
1267
|
-
|
1268
|
-
|
1269
|
-
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1183
|
+
nextPosition = positions[j + 1];
|
1184
|
+
}
|
1185
|
+
|
1186
|
+
nextPosition = Matrix4.multiplyByPoint(modelMatrix, nextPosition, morphNextPositionScratch);
|
1187
|
+
|
1188
|
+
var segmentLength = lengths[segmentIndex];
|
1189
|
+
if (j === count + segmentLength) {
|
1190
|
+
count += segmentLength;
|
1191
|
+
++segmentIndex;
|
1192
|
+
}
|
1193
|
+
|
1194
|
+
var segmentStart = j - count === 0;
|
1195
|
+
var segmentEnd = j === count + lengths[segmentIndex] - 1;
|
1196
|
+
|
1197
|
+
var startK = (segmentStart) ? 2 : 0;
|
1198
|
+
var endK = (segmentEnd) ? 2 : 4;
|
1199
|
+
|
1200
|
+
for (var k = startK; k < endK; ++k) {
|
1201
|
+
EncodedCartesian3.writeElements(position, positionArray, positionIndex);
|
1202
|
+
EncodedCartesian3.writeElements(prevPosition, positionArray, positionIndex + 6);
|
1203
|
+
EncodedCartesian3.writeElements(nextPosition, positionArray, positionIndex + 12);
|
1204
|
+
|
1205
|
+
positionIndex += 6 * 3;
|
1275
1206
|
}
|
1276
1207
|
}
|
1277
|
-
polyline._clean();
|
1278
1208
|
}
|
1279
|
-
bucketLocator.count = count;
|
1280
|
-
return offset;
|
1281
1209
|
};
|
1282
1210
|
|
1283
|
-
|
1284
|
-
|
1285
|
-
|
1286
|
-
PolylineBucket.prototype._updateIndices2D = function(totalIndices, vertexBufferOffset, vertexArrayBuckets, offset) {
|
1211
|
+
var scratchSegmentLengths = new Array(1);
|
1212
|
+
|
1213
|
+
PolylineBucket.prototype.updateIndices = function(totalIndices, vertexBufferOffset, vertexArrayBuckets, offset) {
|
1287
1214
|
var vaCount = vertexArrayBuckets.length - 1;
|
1288
1215
|
var bucketLocator = new VertexArrayBucketLocator(0, offset, this);
|
1289
1216
|
vertexArrayBuckets[vaCount].push(bucketLocator);
|
@@ -1296,59 +1223,36 @@ define([
|
|
1296
1223
|
var polylines = this.polylines;
|
1297
1224
|
var length = polylines.length;
|
1298
1225
|
for ( var i = 0; i < length; ++i) {
|
1299
|
-
var polyline = polylines[i];
|
1300
|
-
if (intersectsIDL(polyline)) {
|
1301
|
-
var segments = polyline._segments;
|
1302
|
-
var numberOfSegments = segments.length;
|
1303
|
-
if (numberOfSegments > 0) {
|
1304
|
-
for ( var k = 0; k < numberOfSegments; ++k) {
|
1305
|
-
var segment = segments[k];
|
1306
|
-
var segmentLength = segment.length;
|
1307
|
-
for ( var n = 0; n < segmentLength; ++n) {
|
1308
|
-
if (n !== segmentLength - 1) {
|
1309
|
-
if (indicesCount === SIXTYFOURK - 1) {
|
1310
|
-
vertexBufferOffset.push(1);
|
1311
|
-
indices = [];
|
1312
|
-
totalIndices.push(indices);
|
1313
|
-
indicesCount = 0;
|
1314
|
-
bucketLocator.count = count;
|
1315
|
-
count = 0;
|
1316
|
-
offset = 0;
|
1317
|
-
bucketLocator = new VertexArrayBucketLocator(0, 0, this);
|
1318
|
-
vertexArrayBuckets[++vaCount] = [bucketLocator];
|
1319
|
-
}
|
1320
|
-
count += 2;
|
1321
|
-
offset += 2;
|
1322
|
-
indices.push(indicesCount++);
|
1323
|
-
indices.push(indicesCount);
|
1324
|
-
}
|
1325
|
-
}
|
1326
|
-
if (k !== numberOfSegments - 1) {
|
1327
|
-
indicesCount++;
|
1328
|
-
}
|
1329
|
-
}
|
1330
1226
|
|
1331
|
-
|
1332
|
-
|
1333
|
-
|
1334
|
-
|
1335
|
-
|
1336
|
-
|
1337
|
-
|
1338
|
-
|
1339
|
-
|
1340
|
-
|
1341
|
-
|
1342
|
-
vertexArrayBuckets[++vaCount] = [bucketLocator];
|
1343
|
-
}
|
1227
|
+
var polyline = polylines[i];
|
1228
|
+
polyline._locatorBuckets = [];
|
1229
|
+
|
1230
|
+
var segments;
|
1231
|
+
if (this.mode === SceneMode.SCENE3D) {
|
1232
|
+
segments = scratchSegmentLengths;
|
1233
|
+
var positionsLength = polyline.getPositions().length;
|
1234
|
+
if (positionsLength > 0) {
|
1235
|
+
segments[0] = positionsLength;
|
1236
|
+
} else {
|
1237
|
+
continue;
|
1344
1238
|
}
|
1345
1239
|
} else {
|
1346
|
-
|
1347
|
-
|
1348
|
-
|
1349
|
-
|
1350
|
-
|
1351
|
-
|
1240
|
+
segments = polyline._segments.lengths;
|
1241
|
+
}
|
1242
|
+
|
1243
|
+
var numberOfSegments = segments.length;
|
1244
|
+
if (numberOfSegments > 0) {
|
1245
|
+
var segmentIndexCount = 0;
|
1246
|
+
for ( var j = 0; j < numberOfSegments; ++j) {
|
1247
|
+
var segmentLength = segments[j] - 1.0;
|
1248
|
+
for ( var k = 0; k < segmentLength; ++k) {
|
1249
|
+
if (indicesCount + 4 >= SIXTYFOURK - 1) {
|
1250
|
+
polyline._locatorBuckets.push({
|
1251
|
+
locator : bucketLocator,
|
1252
|
+
count : segmentIndexCount
|
1253
|
+
});
|
1254
|
+
segmentIndexCount = 0;
|
1255
|
+
vertexBufferOffset.push(4);
|
1352
1256
|
indices = [];
|
1353
1257
|
totalIndices.push(indices);
|
1354
1258
|
indicesCount = 0;
|
@@ -1358,16 +1262,23 @@ define([
|
|
1358
1262
|
bucketLocator = new VertexArrayBucketLocator(0, 0, this);
|
1359
1263
|
vertexArrayBuckets[++vaCount] = [bucketLocator];
|
1360
1264
|
}
|
1361
|
-
|
1362
|
-
|
1363
|
-
indices.push(indicesCount
|
1364
|
-
|
1265
|
+
|
1266
|
+
indices.push(indicesCount, indicesCount + 2, indicesCount + 1);
|
1267
|
+
indices.push(indicesCount + 1, indicesCount + 2, indicesCount + 3);
|
1268
|
+
|
1269
|
+
segmentIndexCount += 6;
|
1270
|
+
count += 6;
|
1271
|
+
offset += 6;
|
1272
|
+
indicesCount += 4;
|
1365
1273
|
}
|
1366
1274
|
}
|
1367
1275
|
|
1368
|
-
|
1369
|
-
|
1370
|
-
|
1276
|
+
polyline._locatorBuckets.push({
|
1277
|
+
locator : bucketLocator,
|
1278
|
+
count : segmentIndexCount
|
1279
|
+
});
|
1280
|
+
|
1281
|
+
if (indicesCount + 4 >= SIXTYFOURK - 1) {
|
1371
1282
|
vertexBufferOffset.push(0);
|
1372
1283
|
indices = [];
|
1373
1284
|
totalIndices.push(indices);
|
@@ -1385,20 +1296,7 @@ define([
|
|
1385
1296
|
return offset;
|
1386
1297
|
};
|
1387
1298
|
|
1388
|
-
|
1389
|
-
* @private
|
1390
|
-
*/
|
1391
|
-
PolylineBucket.prototype.updateIndices = function(totalIndices, vertexBufferOffset, vertexArrayBuckets, offset) {
|
1392
|
-
if (this.mode === SceneMode.SCENE3D) {
|
1393
|
-
return this._updateIndices3D(totalIndices, vertexBufferOffset, vertexArrayBuckets, offset);
|
1394
|
-
}
|
1395
|
-
return this._updateIndices2D(totalIndices, vertexBufferOffset, vertexArrayBuckets, offset);
|
1396
|
-
};
|
1397
|
-
|
1398
|
-
/**
|
1399
|
-
* @private
|
1400
|
-
*/
|
1401
|
-
PolylineBucket.prototype._getPolylineStartIndex = function(polyline) {
|
1299
|
+
PolylineBucket.prototype.getPolylineStartIndex = function(polyline) {
|
1402
1300
|
var polylines = this.polylines;
|
1403
1301
|
var positionIndex = 0;
|
1404
1302
|
var length = polylines.length;
|
@@ -1412,10 +1310,13 @@ define([
|
|
1412
1310
|
return positionIndex;
|
1413
1311
|
};
|
1414
1312
|
|
1415
|
-
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1313
|
+
var scratchSegments = {
|
1314
|
+
positions : undefined,
|
1315
|
+
lengths : undefined
|
1316
|
+
};
|
1317
|
+
var scratchLengths = new Array(1);
|
1318
|
+
|
1319
|
+
PolylineBucket.prototype.getSegments = function(polyline) {
|
1419
1320
|
var positions = polyline.getPositions();
|
1420
1321
|
|
1421
1322
|
if (positions.length > 0) {
|
@@ -1427,10 +1328,14 @@ define([
|
|
1427
1328
|
}
|
1428
1329
|
|
1429
1330
|
if (this.mode === SceneMode.SCENE3D) {
|
1430
|
-
|
1331
|
+
scratchLengths[0] = positions.length;
|
1332
|
+
scratchSegments.positions = positions;
|
1333
|
+
scratchSegments.lengths = scratchLengths;
|
1334
|
+
return scratchSegments;
|
1431
1335
|
}
|
1336
|
+
|
1432
1337
|
if (intersectsIDL(polyline)) {
|
1433
|
-
positions = polyline.
|
1338
|
+
positions = polyline._segments.positions;
|
1434
1339
|
}
|
1435
1340
|
|
1436
1341
|
var ellipsoid = this.ellipsoid;
|
@@ -1458,73 +1363,96 @@ define([
|
|
1458
1363
|
}
|
1459
1364
|
}
|
1460
1365
|
|
1461
|
-
|
1366
|
+
scratchSegments.positions = newPositions;
|
1367
|
+
scratchSegments.lengths = polyline._segments.lengths;
|
1368
|
+
return scratchSegments;
|
1462
1369
|
};
|
1463
1370
|
|
1464
|
-
|
1465
|
-
|
1466
|
-
*/
|
1467
|
-
PolylineBucket.prototype.writePositionsUpdate = function(positionIndex, polyline, buffer) {
|
1371
|
+
PolylineBucket.prototype.writeUpdate = function(index, polyline, positionBuffer, texCoordExpandWidthAndShowBuffer) {
|
1372
|
+
var mode = this.mode;
|
1468
1373
|
var positionsLength = polyline._actualLength;
|
1469
1374
|
if (positionsLength) {
|
1470
|
-
|
1471
|
-
var positionArray = new Float32Array(
|
1472
|
-
var
|
1473
|
-
|
1375
|
+
index += this.getPolylineStartIndex(polyline);
|
1376
|
+
var positionArray = new Float32Array(6 * positionsLength * 3);
|
1377
|
+
var texCoordExpandWidthAndShowArray = new Float32Array(positionsLength * 4);
|
1378
|
+
|
1379
|
+
var positionIndex = 0;
|
1380
|
+
var texCoordExpandWidthAndShowIndex = 0;
|
1381
|
+
|
1382
|
+
var segments = this.getSegments(polyline);
|
1383
|
+
var positions = segments.positions;
|
1384
|
+
var lengths = segments.lengths;
|
1385
|
+
|
1386
|
+
var segmentIndex = 0;
|
1387
|
+
var count = 0;
|
1388
|
+
var position;
|
1389
|
+
|
1390
|
+
var width = polyline.getWidth();
|
1391
|
+
var show = polyline.getShow() && width > 0.0;
|
1392
|
+
|
1393
|
+
positionsLength = positions.length;
|
1474
1394
|
for ( var i = 0; i < positionsLength; ++i) {
|
1475
|
-
|
1395
|
+
if (i === 0) {
|
1396
|
+
position = scratchWriteVector;
|
1397
|
+
Cartesian3.subtract(positions[0], positions[1], position);
|
1398
|
+
Cartesian3.add(positions[0], position, position);
|
1399
|
+
} else {
|
1400
|
+
position = positions[i - 1];
|
1401
|
+
}
|
1402
|
+
|
1403
|
+
scratchWritePrevPosition.x = position.x;
|
1404
|
+
scratchWritePrevPosition.y = position.y;
|
1405
|
+
scratchWritePrevPosition.z = (mode !== SceneMode.SCENE2D) ? position.z : 0.0;
|
1406
|
+
|
1407
|
+
position = positions[i];
|
1476
1408
|
scratchWritePosition.x = position.x;
|
1477
1409
|
scratchWritePosition.y = position.y;
|
1478
|
-
scratchWritePosition.z = (
|
1479
|
-
EncodedCartesian3.writeElements(scratchWritePosition, positionArray, index);
|
1480
|
-
index += 6;
|
1481
|
-
}
|
1410
|
+
scratchWritePosition.z = (mode !== SceneMode.SCENE2D) ? position.z : 0.0;
|
1482
1411
|
|
1483
|
-
|
1484
|
-
|
1485
|
-
|
1412
|
+
if (i === positionsLength - 1) {
|
1413
|
+
position = scratchWriteVector;
|
1414
|
+
Cartesian3.subtract(positions[positionsLength - 1], positions[positionsLength - 2], position);
|
1415
|
+
Cartesian3.add(positions[positionsLength - 1], position, position);
|
1416
|
+
} else {
|
1417
|
+
position = positions[i + 1];
|
1418
|
+
}
|
1486
1419
|
|
1487
|
-
|
1488
|
-
|
1489
|
-
|
1490
|
-
PolylineBucket.prototype.writeColorUpdate = function(positionIndex, polyline, buffer) {
|
1491
|
-
var positionsLength = polyline._actualLength;
|
1492
|
-
if (positionsLength) {
|
1493
|
-
positionIndex += this._getPolylineStartIndex(polyline);
|
1494
|
-
|
1495
|
-
var index = 0;
|
1496
|
-
var color = polyline.getColor();
|
1497
|
-
var red = Color.floatToByte(color.red);
|
1498
|
-
var green = Color.floatToByte(color.green);
|
1499
|
-
var blue = Color.floatToByte(color.blue);
|
1500
|
-
var alpha = Color.floatToByte(color.alpha);
|
1501
|
-
var colorsArray = new Uint8Array(positionsLength * 4);
|
1502
|
-
for ( var j = 0; j < positionsLength; ++j) {
|
1503
|
-
colorsArray[index] = red;
|
1504
|
-
colorsArray[index + 1] = green;
|
1505
|
-
colorsArray[index + 2] = blue;
|
1506
|
-
colorsArray[index + 3] = alpha;
|
1507
|
-
index += 4;
|
1508
|
-
}
|
1509
|
-
buffer.copyFromArrayView(colorsArray, 4 * positionIndex);
|
1510
|
-
}
|
1511
|
-
};
|
1420
|
+
scratchWriteNextPosition.x = position.x;
|
1421
|
+
scratchWriteNextPosition.y = position.y;
|
1422
|
+
scratchWriteNextPosition.z = (mode !== SceneMode.SCENE2D) ? position.z : 0.0;
|
1512
1423
|
|
1513
|
-
|
1514
|
-
|
1515
|
-
|
1516
|
-
|
1517
|
-
|
1518
|
-
|
1519
|
-
|
1520
|
-
|
1521
|
-
|
1522
|
-
|
1523
|
-
|
1424
|
+
var segmentLength = lengths[segmentIndex];
|
1425
|
+
if (i === count + segmentLength) {
|
1426
|
+
count += segmentLength;
|
1427
|
+
++segmentIndex;
|
1428
|
+
}
|
1429
|
+
|
1430
|
+
var segmentStart = i - count === 0;
|
1431
|
+
var segmentEnd = i === count + lengths[segmentIndex] - 1;
|
1432
|
+
|
1433
|
+
var startJ = (segmentStart) ? 2 : 0;
|
1434
|
+
var endJ = (segmentEnd) ? 2 : 4;
|
1435
|
+
|
1436
|
+
for (var j = startJ; j < endJ; ++j) {
|
1437
|
+
EncodedCartesian3.writeElements(scratchWritePosition, positionArray, positionIndex);
|
1438
|
+
EncodedCartesian3.writeElements(scratchWritePrevPosition, positionArray, positionIndex + 6);
|
1439
|
+
EncodedCartesian3.writeElements(scratchWriteNextPosition, positionArray, positionIndex + 12);
|
1440
|
+
|
1441
|
+
var direction = (j - 2 < 0) ? -1.0 : 1.0;
|
1442
|
+
texCoordExpandWidthAndShowArray[texCoordExpandWidthAndShowIndex] = i / (positionsLength - 1); // s tex coord
|
1443
|
+
texCoordExpandWidthAndShowArray[texCoordExpandWidthAndShowIndex + 1] = 2 * (j % 2) - 1; // expand direction
|
1444
|
+
texCoordExpandWidthAndShowArray[texCoordExpandWidthAndShowIndex + 2] = direction * width;
|
1445
|
+
texCoordExpandWidthAndShowArray[texCoordExpandWidthAndShowIndex + 3] = show;
|
1446
|
+
|
1447
|
+
positionIndex += 6 * 3;
|
1448
|
+
texCoordExpandWidthAndShowIndex += 4;
|
1449
|
+
}
|
1524
1450
|
}
|
1525
|
-
|
1451
|
+
|
1452
|
+
positionBuffer.copyFromArrayView(positionArray, 6 * 3 * Float32Array.BYTES_PER_ELEMENT * index);
|
1453
|
+
texCoordExpandWidthAndShowBuffer.copyFromArrayView(texCoordExpandWidthAndShowArray, 4 * Float32Array.BYTES_PER_ELEMENT * index);
|
1526
1454
|
}
|
1527
1455
|
};
|
1528
1456
|
|
1529
1457
|
return PolylineCollection;
|
1530
|
-
});
|
1458
|
+
});
|