itowns 2.44.3-next.4 → 2.44.3-next.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/README.md +3 -129
  2. package/examples/3dtiles_loader.html +123 -48
  3. package/examples/config.json +3 -10
  4. package/examples/copc_simple_loader.html +15 -5
  5. package/examples/effects_stereo.html +2 -2
  6. package/examples/entwine_3d_loader.html +3 -1
  7. package/examples/entwine_simple_loader.html +1 -1
  8. package/examples/images/itowns_logo.svg +123 -0
  9. package/examples/js/plugins/COGParser.js +1 -1
  10. package/examples/jsm/OGC3DTilesHelper.js +6 -1
  11. package/examples/layers/JSONLayers/GeoidMNT.json +3 -1
  12. package/examples/misc_collada.html +2 -2
  13. package/examples/source_file_geojson_3d.html +0 -1
  14. package/examples/source_file_kml_raster_usgs.html +0 -1
  15. package/examples/source_stream_wfs_raster.html +0 -7
  16. package/examples/vector_tile_mapbox_raster.html +91 -0
  17. package/examples/view_3d_map_webxr.html +3 -1
  18. package/examples/view_multi_25d.html +2 -2
  19. package/package.json +21 -75
  20. package/CODING.md +0 -120
  21. package/CONTRIBUTING.md +0 -150
  22. package/CONTRIBUTORS.md +0 -55
  23. package/LICENSE.md +0 -44
  24. package/changelog.md +0 -1361
  25. package/dist/455.js +0 -2
  26. package/dist/455.js.map +0 -1
  27. package/dist/debug.js +0 -3
  28. package/dist/debug.js.LICENSE.txt +0 -13
  29. package/dist/debug.js.map +0 -1
  30. package/dist/itowns.js +0 -3
  31. package/dist/itowns.js.LICENSE.txt +0 -7
  32. package/dist/itowns.js.map +0 -1
  33. package/dist/itowns_lasparser.js +0 -2
  34. package/dist/itowns_lasparser.js.map +0 -1
  35. package/dist/itowns_lasworker.js +0 -2
  36. package/dist/itowns_lasworker.js.map +0 -1
  37. package/dist/itowns_potree2worker.js +0 -2
  38. package/dist/itowns_potree2worker.js.map +0 -1
  39. package/dist/itowns_widgets.js +0 -2
  40. package/dist/itowns_widgets.js.map +0 -1
  41. package/examples/.eslintrc.cjs +0 -35
  42. package/examples/3dtiles_25d.html +0 -120
  43. package/examples/3dtiles_basic.html +0 -94
  44. package/examples/3dtiles_batch_table.html +0 -86
  45. package/examples/3dtiles_ion.html +0 -126
  46. package/examples/3dtiles_pointcloud.html +0 -95
  47. package/examples/jsm/.eslintrc.cjs +0 -38
  48. package/lib/Controls/FirstPersonControls.js +0 -308
  49. package/lib/Controls/FlyControls.js +0 -175
  50. package/lib/Controls/GlobeControls.js +0 -1162
  51. package/lib/Controls/PlanarControls.js +0 -1025
  52. package/lib/Controls/StateControl.js +0 -429
  53. package/lib/Controls/StreetControls.js +0 -392
  54. package/lib/Converter/Feature2Mesh.js +0 -608
  55. package/lib/Converter/Feature2Texture.js +0 -170
  56. package/lib/Converter/convertToTile.js +0 -75
  57. package/lib/Converter/textureConverter.js +0 -44
  58. package/lib/Core/3DTiles/C3DTBatchTable.js +0 -131
  59. package/lib/Core/3DTiles/C3DTBatchTableHierarchyExtension.js +0 -96
  60. package/lib/Core/3DTiles/C3DTBoundingVolume.js +0 -157
  61. package/lib/Core/3DTiles/C3DTExtensions.js +0 -97
  62. package/lib/Core/3DTiles/C3DTFeature.js +0 -110
  63. package/lib/Core/3DTiles/C3DTilesEnums.js +0 -20
  64. package/lib/Core/3DTiles/C3DTileset.js +0 -99
  65. package/lib/Core/3DTiles/utils/BinaryPropertyAccessor.js +0 -100
  66. package/lib/Core/AnimationPlayer.js +0 -142
  67. package/lib/Core/CopcNode.js +0 -174
  68. package/lib/Core/Deprecated/Undeprecator.js +0 -75
  69. package/lib/Core/EntwinePointTileNode.js +0 -126
  70. package/lib/Core/Feature.js +0 -490
  71. package/lib/Core/Geographic/CoordStars.js +0 -80
  72. package/lib/Core/Geographic/Coordinates.js +0 -320
  73. package/lib/Core/Geographic/Crs.js +0 -175
  74. package/lib/Core/Geographic/Extent.js +0 -726
  75. package/lib/Core/Geographic/GeoidGrid.js +0 -109
  76. package/lib/Core/Label.js +0 -222
  77. package/lib/Core/MainLoop.js +0 -211
  78. package/lib/Core/Math/Ellipsoid.js +0 -144
  79. package/lib/Core/Picking.js +0 -255
  80. package/lib/Core/PointCloudNode.js +0 -42
  81. package/lib/Core/Potree2Node.js +0 -206
  82. package/lib/Core/Potree2PointAttributes.js +0 -139
  83. package/lib/Core/PotreeNode.js +0 -101
  84. package/lib/Core/Prefab/Globe/Atmosphere.js +0 -299
  85. package/lib/Core/Prefab/Globe/BuilderEllipsoidTile.js +0 -110
  86. package/lib/Core/Prefab/Globe/GlobeLayer.js +0 -145
  87. package/lib/Core/Prefab/Globe/SkyShader.js +0 -78
  88. package/lib/Core/Prefab/GlobeView.js +0 -161
  89. package/lib/Core/Prefab/Planar/PlanarLayer.js +0 -53
  90. package/lib/Core/Prefab/Planar/PlanarTileBuilder.js +0 -72
  91. package/lib/Core/Prefab/PlanarView.js +0 -62
  92. package/lib/Core/Prefab/TileBuilder.js +0 -80
  93. package/lib/Core/Prefab/computeBufferTileGeometry.js +0 -183
  94. package/lib/Core/Scheduler/Cache.js +0 -256
  95. package/lib/Core/Scheduler/CancelledCommandException.js +0 -15
  96. package/lib/Core/Scheduler/Scheduler.js +0 -294
  97. package/lib/Core/Style.js +0 -1121
  98. package/lib/Core/System/Capabilities.js +0 -63
  99. package/lib/Core/TileGeometry.js +0 -40
  100. package/lib/Core/TileMesh.js +0 -108
  101. package/lib/Core/View.js +0 -1109
  102. package/lib/Layer/C3DTilesLayer.js +0 -455
  103. package/lib/Layer/ColorLayer.js +0 -128
  104. package/lib/Layer/CopcLayer.js +0 -58
  105. package/lib/Layer/ElevationLayer.js +0 -107
  106. package/lib/Layer/EntwinePointTileLayer.js +0 -64
  107. package/lib/Layer/FeatureGeometryLayer.js +0 -63
  108. package/lib/Layer/GeoidLayer.js +0 -80
  109. package/lib/Layer/GeometryLayer.js +0 -202
  110. package/lib/Layer/InfoLayer.js +0 -64
  111. package/lib/Layer/LabelLayer.js +0 -452
  112. package/lib/Layer/Layer.js +0 -304
  113. package/lib/Layer/LayerUpdateState.js +0 -89
  114. package/lib/Layer/LayerUpdateStrategy.js +0 -80
  115. package/lib/Layer/OGC3DTilesLayer.js +0 -387
  116. package/lib/Layer/OrientedImageLayer.js +0 -222
  117. package/lib/Layer/PointCloudLayer.js +0 -359
  118. package/lib/Layer/Potree2Layer.js +0 -164
  119. package/lib/Layer/PotreeLayer.js +0 -65
  120. package/lib/Layer/RasterLayer.js +0 -27
  121. package/lib/Layer/ReferencingLayerProperties.js +0 -62
  122. package/lib/Layer/TiledGeometryLayer.js +0 -403
  123. package/lib/Loader/LASLoader.js +0 -193
  124. package/lib/Loader/Potree2BrotliLoader.js +0 -261
  125. package/lib/Loader/Potree2Loader.js +0 -207
  126. package/lib/Main.js +0 -115
  127. package/lib/MainBundle.js +0 -4
  128. package/lib/Parser/B3dmParser.js +0 -174
  129. package/lib/Parser/CameraCalibrationParser.js +0 -94
  130. package/lib/Parser/GDFParser.js +0 -72
  131. package/lib/Parser/GTXParser.js +0 -75
  132. package/lib/Parser/GeoJsonParser.js +0 -212
  133. package/lib/Parser/GpxParser.js +0 -25
  134. package/lib/Parser/ISGParser.js +0 -71
  135. package/lib/Parser/KMLParser.js +0 -25
  136. package/lib/Parser/LASParser.js +0 -137
  137. package/lib/Parser/MapBoxUrlParser.js +0 -83
  138. package/lib/Parser/PntsParser.js +0 -131
  139. package/lib/Parser/Potree2BinParser.js +0 -92
  140. package/lib/Parser/PotreeBinParser.js +0 -106
  141. package/lib/Parser/PotreeCinParser.js +0 -29
  142. package/lib/Parser/ShapefileParser.js +0 -78
  143. package/lib/Parser/VectorTileParser.js +0 -202
  144. package/lib/Parser/XbilParser.js +0 -108
  145. package/lib/Parser/deprecated/LegacyGLTFLoader.js +0 -1386
  146. package/lib/Parser/iGLTFLoader.js +0 -168
  147. package/lib/Process/3dTilesProcessing.js +0 -304
  148. package/lib/Process/FeatureProcessing.js +0 -76
  149. package/lib/Process/LayeredMaterialNodeProcessing.js +0 -221
  150. package/lib/Process/ObjectRemovalHelper.js +0 -97
  151. package/lib/Process/handlerNodeError.js +0 -23
  152. package/lib/Provider/3dTilesProvider.js +0 -149
  153. package/lib/Provider/DataSourceProvider.js +0 -8
  154. package/lib/Provider/Fetcher.js +0 -229
  155. package/lib/Provider/PointCloudProvider.js +0 -45
  156. package/lib/Provider/TileProvider.js +0 -16
  157. package/lib/Provider/URLBuilder.js +0 -105
  158. package/lib/Renderer/Camera.js +0 -281
  159. package/lib/Renderer/Color.js +0 -56
  160. package/lib/Renderer/ColorLayersOrdering.js +0 -115
  161. package/lib/Renderer/CommonMaterial.js +0 -31
  162. package/lib/Renderer/Label2DRenderer.js +0 -190
  163. package/lib/Renderer/LayeredMaterial.js +0 -243
  164. package/lib/Renderer/OBB.js +0 -153
  165. package/lib/Renderer/OrientedImageCamera.js +0 -118
  166. package/lib/Renderer/OrientedImageMaterial.js +0 -167
  167. package/lib/Renderer/PointsMaterial.js +0 -485
  168. package/lib/Renderer/RasterTile.js +0 -209
  169. package/lib/Renderer/RenderMode.js +0 -31
  170. package/lib/Renderer/Shader/ShaderChunk.js +0 -160
  171. package/lib/Renderer/Shader/ShaderUtils.js +0 -47
  172. package/lib/Renderer/SphereHelper.js +0 -23
  173. package/lib/Renderer/WebXR.js +0 -51
  174. package/lib/Renderer/c3DEngine.js +0 -214
  175. package/lib/Source/C3DTilesGoogleSource.js +0 -74
  176. package/lib/Source/C3DTilesIonSource.js +0 -54
  177. package/lib/Source/C3DTilesSource.js +0 -30
  178. package/lib/Source/CopcSource.js +0 -115
  179. package/lib/Source/EntwinePointTileSource.js +0 -62
  180. package/lib/Source/FileSource.js +0 -189
  181. package/lib/Source/OGC3DTilesGoogleSource.js +0 -29
  182. package/lib/Source/OGC3DTilesIonSource.js +0 -34
  183. package/lib/Source/OGC3DTilesSource.js +0 -21
  184. package/lib/Source/OrientedImageSource.js +0 -59
  185. package/lib/Source/Potree2Source.js +0 -167
  186. package/lib/Source/PotreeSource.js +0 -82
  187. package/lib/Source/Source.js +0 -223
  188. package/lib/Source/TMSSource.js +0 -143
  189. package/lib/Source/VectorTilesSource.js +0 -178
  190. package/lib/Source/WFSSource.js +0 -165
  191. package/lib/Source/WMSSource.js +0 -130
  192. package/lib/Source/WMTSSource.js +0 -86
  193. package/lib/ThreeExtended/capabilities/WebGL.js +0 -69
  194. package/lib/ThreeExtended/libs/ktx-parse.module.js +0 -470
  195. package/lib/ThreeExtended/libs/zstddec.module.js +0 -29
  196. package/lib/ThreeExtended/loaders/DDSLoader.js +0 -200
  197. package/lib/ThreeExtended/loaders/DRACOLoader.js +0 -399
  198. package/lib/ThreeExtended/loaders/GLTFLoader.js +0 -2876
  199. package/lib/ThreeExtended/loaders/KTX2Loader.js +0 -625
  200. package/lib/ThreeExtended/utils/BufferGeometryUtils.js +0 -846
  201. package/lib/ThreeExtended/utils/WorkerPool.js +0 -70
  202. package/lib/Utils/CameraUtils.js +0 -555
  203. package/lib/Utils/DEMUtils.js +0 -350
  204. package/lib/Utils/FeaturesUtils.js +0 -156
  205. package/lib/Utils/Gradients.js +0 -16
  206. package/lib/Utils/OrientationUtils.js +0 -457
  207. package/lib/Utils/ThreeUtils.js +0 -115
  208. package/lib/Utils/gui/C3DTilesStyle.js +0 -216
  209. package/lib/Utils/gui/Main.js +0 -7
  210. package/lib/Utils/gui/Minimap.js +0 -154
  211. package/lib/Utils/gui/Navigation.js +0 -245
  212. package/lib/Utils/gui/Scale.js +0 -107
  213. package/lib/Utils/gui/Searchbar.js +0 -234
  214. package/lib/Utils/gui/Widget.js +0 -80
  215. package/lib/Utils/placeObjectOnGround.js +0 -137
  216. package/lib/Worker/LASLoaderWorker.js +0 -19
  217. package/lib/Worker/Potree2Worker.js +0 -21
@@ -1,31 +0,0 @@
1
- const MODES = {
2
- FINAL: 0,
3
- // final color
4
- DEPTH: 1,
5
- // depth buffer
6
- ID: 2 // id object
7
- };
8
- function push(object3d, mode) {
9
- const _mode = object3d.mode ?? MODES.FINAL;
10
- if (_mode == mode) {
11
- return () => {};
12
- }
13
- const setMode = m => node => {
14
- const material = node.material;
15
- if (material) {
16
- material.mode = m;
17
- }
18
- };
19
- object3d.traverse(setMode(mode));
20
- return () => {
21
- object3d.traverse(setMode(_mode));
22
- };
23
- }
24
-
25
- // Rendering mode
26
- // According to the rendering mode, the material's object switches
27
- // the mode property of the materials
28
- export default {
29
- MODES,
30
- push
31
- };
@@ -1,160 +0,0 @@
1
- import * as THREE from 'three';
2
- /* babel-plugin-inline-import './Chunk/color_layers_pars_fragment.glsl' */
3
- const color_layers_pars_fragment = "struct Layer {\n int textureOffset;\n int crs;\n int effect_type;\n float effect_parameter;\n float opacity;\n bool transparent;\n};\n\n#include <itowns/custom_header_colorLayer>\n\nuniform sampler2D colorTextures[NUM_FS_TEXTURES];\nuniform vec4 colorOffsetScales[NUM_FS_TEXTURES];\nuniform Layer colorLayers[NUM_FS_TEXTURES];\nuniform int colorTextureCount;\n\nvec3 uvs[NUM_CRS];\n\nfloat getBorderDistance(vec2 uv) {\n vec2 p2 = min(uv, 1. -uv);\n return min(p2.x, p2.y);\n}\n\nfloat tolerance = 0.99;\n\nvec4 applyWhiteToInvisibleEffect(vec4 color) {\n float a = dot(color.rgb, vec3(0.333333333));\n if (a >= tolerance) {\n color.a = 0.0;\n }\n return color;\n}\n\nvec4 applyLightColorToInvisibleEffect(vec4 color, float intensity) {\n float a = max(0.05,1. - length(color.xyz - 1.));\n color.a *= 1.0 - pow(abs(a), intensity);\n color.rgb *= color.rgb * color.rgb;\n return color;\n}\n\n#if defined(DEBUG)\nuniform bool showOutline;\nuniform vec3 outlineColors[NUM_CRS];\nuniform float outlineWidth;\n\nvec4 getOutlineColor(vec3 outlineColor, vec2 uv) {\n float alpha = 1. - clamp(getBorderDistance(uv) / outlineWidth, 0., 1.);\n return vec4(outlineColor, alpha);\n}\n#endif\n\nuniform float minBorderDistance;\nvec4 getLayerColor(int textureOffset, sampler2D tex, vec4 offsetScale, Layer layer) {\n if ( textureOffset >= colorTextureCount ) return vec4(0);\n\n vec3 uv;\n // #pragma unroll_loop\n for ( int i = 0; i < NUM_CRS; i ++ ) {\n if ( i == layer.crs ) uv = uvs[ i ];\n }\n\n float borderDistance = getBorderDistance(uv.xy);\n if (textureOffset != layer.textureOffset + int(uv.z) || borderDistance < minBorderDistance ) return vec4(0);\n vec4 color = texture2D(tex, pitUV(uv.xy, offsetScale));\n if (layer.effect_type == 3) {\n #include <itowns/custom_body_colorLayer>\n } else {\n if (layer.transparent && color.a != 0.0) {\n color.rgb /= color.a;\n }\n\n if (layer.effect_type == 1) {\n color = applyLightColorToInvisibleEffect(color, layer.effect_parameter);\n } else if (layer.effect_type == 2) {\n color = applyWhiteToInvisibleEffect(color);\n }\n }\n color.a *= layer.opacity;\n return color;\n}\n";
4
- /* babel-plugin-inline-import './Chunk/elevation_pars_vertex.glsl' */
5
- const elevation_pars_vertex = "#if NUM_VS_TEXTURES > 0\n struct Layer {\n float scale;\n float bias;\n int mode;\n float zmin;\n float zmax;\n };\n\n uniform Layer elevationLayers[NUM_VS_TEXTURES];\n uniform sampler2D elevationTextures[NUM_VS_TEXTURES];\n uniform vec4 elevationOffsetScales[NUM_VS_TEXTURES];\n uniform int elevationTextureCount;\n uniform float geoidHeight;\n\n highp float decode32(highp vec4 rgba) {\n highp float Sign = 1.0 - step(128.0,rgba[0])*2.0;\n highp float Exponent = 2.0 * mod(rgba[0],128.0) + step(128.0,rgba[1]) - 127.0;\n highp float Mantissa = mod(rgba[1],128.0)*65536.0 + rgba[2]*256.0 +rgba[3] + float(0x800000);\n highp float Result = Sign * exp2(Exponent) * (Mantissa * exp2(-23.0 ));\n return Result;\n }\n\n float getElevationMode(vec2 uv, sampler2D tex, int mode) {\n if (mode == ELEVATION_RGBA)\n return decode32(texture2D( tex, uv ).abgr * 255.0);\n if (mode == ELEVATION_DATA || mode == ELEVATION_COLOR)\n return texture2D( tex, uv ).r;\n return 0.;\n }\n\n float getElevation(vec2 uv, sampler2D tex, vec4 offsetScale, Layer layer) {\n // Elevation textures are inverted along the y-axis\n uv = vec2(uv.x, 1.0 - uv.y);\n uv = uv * offsetScale.zw + offsetScale.xy;\n float d = clamp(getElevationMode(uv, tex, layer.mode), layer.zmin, layer.zmax);\n return d * layer.scale + layer.bias;\n }\n#endif\n";
6
- /* babel-plugin-inline-import './Chunk/elevation_vertex.glsl' */
7
- const elevation_vertex = "#if NUM_VS_TEXTURES > 0\n if(elevationTextureCount > 0) {\n float elevation = getElevation(uv, elevationTextures[0], elevationOffsetScales[0], elevationLayers[0]);\n transformed += elevation * normal;\n }\n#endif\n";
8
- /* babel-plugin-inline-import './Chunk/geoid_vertex.glsl' */
9
- const geoid_vertex = "transformed += geoidHeight * normal;\n";
10
- /* babel-plugin-inline-import './Chunk/fog_fragment.glsl' */
11
- const fog_fragment = "#if defined(USE_FOG)\n float fogFactor = 1. - min( exp(-vFogDepth / fogDistance), 1.);\n gl_FragColor.rgb = mix(gl_FragColor.rgb, fogColor, fogFactor);\n#endif\n";
12
- /* babel-plugin-inline-import './Chunk/fog_pars_fragment.glsl' */
13
- const fog_pars_fragment = "#if defined(USE_FOG)\nuniform vec3 fogColor;\nuniform float fogDistance;\nvarying float vFogDepth;\n#endif\n";
14
- /* babel-plugin-inline-import './Chunk/lighting_fragment.glsl' */
15
- const lighting_fragment = "if (lightingEnabled) {\n float light = min(2. * dot(vNormal, lightPosition), 1.);\n gl_FragColor.rgb *= light;\n}\n";
16
- /* babel-plugin-inline-import './Chunk/lighting_pars_fragment.glsl' */
17
- const lighting_pars_fragment = "uniform bool lightingEnabled;\nuniform vec3 lightPosition;\nvarying vec3 vNormal;\n";
18
- /* babel-plugin-inline-import './Chunk/mode_pars_fragment.glsl' */
19
- const mode_pars_fragment = "#if MODE == MODE_ID || MODE == MODE_DEPTH\n#include <packing>\n#endif\n\n#if MODE == MODE_ID\nuniform int objectId;\n#endif\n";
20
- /* babel-plugin-inline-import './Chunk/mode_depth_fragment.glsl' */
21
- const mode_depth_fragment = "#if defined(USE_LOGDEPTHBUF)\ngl_FragColor = packDepthToRGBA(gl_FragDepthEXT);\n#else\nfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\ngl_FragColor = packDepthToRGBA(fragCoordZ);\n#endif\n";
22
- /* babel-plugin-inline-import './Chunk/mode_id_fragment.glsl' */
23
- const mode_id_fragment = "// 16777216.0 == 256.0 * 256.0 * 256.0\ngl_FragColor = packDepthToRGBA(float(objectId) / 16777216.0);\n";
24
- /* babel-plugin-inline-import './Chunk/overlay_fragment.glsl' */
25
- const overlay_fragment = "gl_FragColor.rgb = mix(gl_FragColor.rgb, overlayColor, overlayAlpha);\n";
26
- /* babel-plugin-inline-import './Chunk/overlay_pars_fragment.glsl' */
27
- const overlay_pars_fragment = "uniform vec3 overlayColor;\nuniform float overlayAlpha;\n";
28
- /* babel-plugin-inline-import './Chunk/pitUV.glsl' */
29
- const pitUV = "vec2 pitUV(vec2 uv, vec4 pit)\n{\n return uv * pit.zw + vec2(pit.x, 1.0 - pit.w - pit.y);\n}\n\n";
30
- /* babel-plugin-inline-import './Chunk/precision_qualifier.glsl' */
31
- const precision_qualifier = "precision highp float;\nprecision highp int;\n";
32
- /* babel-plugin-inline-import './Chunk/projective_texturing_vertex.glsl' */
33
- const projective_texturing_vertex = "for(int i = 0; i < ORIENTED_IMAGES_COUNT; ++i)\n projectiveTextureCoords[i] = projectiveTextureMatrix[i] * mvPosition;\n";
34
- /* babel-plugin-inline-import './Chunk/projective_texturing_pars_vertex.glsl' */
35
- const projective_texturing_pars_vertex = "uniform mat4 projectiveTextureMatrix[ORIENTED_IMAGES_COUNT];\nvarying vec4 projectiveTextureCoords[ORIENTED_IMAGES_COUNT];\n";
36
- /* babel-plugin-inline-import './Chunk/projective_texturing_pars_fragment.glsl' */
37
- const projective_texturing_pars_fragment = "uniform sampler2D projectiveTexture[ORIENTED_IMAGES_COUNT];\nuniform sampler2D mask[ORIENTED_IMAGES_COUNT];\nvarying vec4 projectiveTextureCoords[ORIENTED_IMAGES_COUNT];\nuniform float projectiveTextureAlphaBorder;\nuniform float opacity;\nuniform bool boostLight;\n\nstruct Distortion {\n vec2 size;\n#if USE_DISTORTION\n vec2 pps;\n vec4 polynom;\n vec3 l1l2;\n#endif\n};\n\nuniform Distortion projectiveTextureDistortion[ORIENTED_IMAGES_COUNT];\n\nfloat getAlphaBorder(vec2 p)\n{\n vec2 d = clamp(projectiveTextureAlphaBorder * min(p, 1. - p), 0., 1.);\n return min(d.x, d.y);\n}\n\n#if USE_DISTORTION\nvoid distort(inout vec2 p, vec4 polynom, vec2 pps)\n{\n vec2 v = p - pps;\n float v2 = dot(v, v);\n if (v2 > polynom.w) {\n p = vec2(-1.);\n }\n else {\n p += (v2 * (polynom.x + v2 * (polynom.y + v2 * polynom.z) ) ) * v;\n }\n}\n\nvoid distort(inout vec2 p, vec4 polynom, vec3 l1l2, vec2 pps)\n{\n if ((l1l2.x == 0.) && (l1l2.y == 0.)) {\n distort(p, polynom, pps);\n } else {\n vec2 AB = (p - pps) / l1l2.z;\n float R = length(AB);\n float lambda = atan(R) / R;\n vec2 ab = lambda * AB;\n float rho2 = dot(ab, ab);\n float r357 = 1. + rho2* (polynom.x + rho2* (polynom.y + rho2 * polynom.z));\n p = pps + l1l2.z * (r357 * ab + vec2(dot(l1l2.xy, ab), l1l2.y * ab.x));\n }\n}\n#endif\n\nvec4 mixBaseColor(vec4 aColor, vec4 baseColor) {\n #ifdef USE_BASE_MATERIAL\n baseColor.rgb = aColor.a == 1.0 ? aColor.rgb : mix(baseColor, aColor, aColor.a).rgb;\n baseColor.a = min(1.0, aColor.a + baseColor.a);\n #else\n baseColor.rgb += aColor.rgb * aColor.a;\n baseColor.a += aColor.a;\n #endif\n return baseColor;\n}\n\nvec4 projectiveTextureColor(vec4 coords, Distortion distortion, sampler2D tex, sampler2D mask, vec4 baseColor) {\n vec3 p = coords.xyz / coords.w;\n if(p.z * p.z < 1.) {\n#if USE_DISTORTION\n p.xy *= distortion.size;\n distort(p.xy, distortion.polynom, distortion.l1l2, distortion.pps);\n p.xy /= distortion.size;\n#endif\n\n float d = getAlphaBorder(p.xy) * texture2D(mask, p.xy).r;\n\n if(d > 0.) {\n\n#if DEBUG_ALPHA_BORDER\n vec3 r = texture2D(tex, p.xy).rgb;\n return mixBaseColor(vec4( r.r * d, r.g, r.b, 1.0), baseColor);\n#else\n vec4 color = texture2D(tex, p.xy);\n color.a *= d;\n if (boostLight) {\n return mixBaseColor(vec4(sqrt(color.rgb), color.a), baseColor);\n } else {\n return mixBaseColor(color, baseColor);\n }\n#endif\n\n }\n }\n return mixBaseColor(vec4(0.), baseColor);\n}\n";
38
- const custom_header_colorLayer = '// no custom header';
39
- const custom_body_colorLayer = '// no custom body';
40
- const itownsShaderChunk = {
41
- color_layers_pars_fragment,
42
- custom_body_colorLayer,
43
- custom_header_colorLayer,
44
- elevation_pars_vertex,
45
- elevation_vertex,
46
- geoid_vertex,
47
- fog_fragment,
48
- fog_pars_fragment,
49
- lighting_fragment,
50
- lighting_pars_fragment,
51
- mode_depth_fragment,
52
- mode_id_fragment,
53
- mode_pars_fragment,
54
- overlay_fragment,
55
- overlay_pars_fragment,
56
- pitUV,
57
- precision_qualifier,
58
- projective_texturing_vertex,
59
- projective_texturing_pars_vertex,
60
- projective_texturing_pars_fragment
61
- };
62
-
63
- /**
64
- * The ShaderChunkManager manages the itowns chunks shader.
65
- * It adds chunks to THREE.ShaderChunk to compile shaders
66
- *
67
- * In itowns, if you want access to `ShaderChunkManager` instance :
68
- *
69
- * ```js
70
- * import ShaderChunk from 'Renderer/Shader/ShaderChunk';
71
- * ```
72
- * or
73
- * ```js
74
- * const ShaderChunk = itowns.ShaderChunk';
75
- * ```
76
- *
77
- * @property {Object} target - The target to install the chunks into.
78
- * @property {string} [path] - A path to add before a chunk name as a prefix.
79
- *
80
- */
81
- class ShaderChunkManager {
82
- /**
83
- * Constructs a new instance ShaderChunkManager.
84
- *
85
- * @constructor
86
- *
87
- * @param {Object} target - The target to install the chunks into.
88
- * @param {string} [path] - A path to add before a chunk name as a prefix.
89
- *
90
- */
91
- constructor(target, path) {
92
- this.path = path;
93
- this.target = target;
94
- this.install();
95
- }
96
- /**
97
- * Set the header ColorLayer shader.
98
- *
99
- * @param {string} header The glsl header
100
- */
101
- customHeaderColorLayer(header) {
102
- itownsShaderChunk.custom_header_colorLayer = header;
103
- this.target[`${this.path}custom_header_colorLayer`] = header;
104
- }
105
-
106
- /**
107
- * Set the body ColorLayer shader.
108
- * You could define you color terrain shader, with a header and a body.
109
- * the header defines yours fonctions and the body defines the process on ColorLayer.
110
- * @example <caption>Custom shader chunk</caption>
111
- * itowns.ShaderChunk.customHeaderColorLayer(`
112
- * // define yours methods
113
- * vec4 myColor(vec4 color, float a) {
114
- * return color * a;
115
- * }
116
- * `);
117
- * itowns.ShaderChunk.customBodyColorLayer(`
118
- * // the body set final color layer.
119
- * // layer.amount_effect is variable, it could be change in Layer instance.
120
- * color = myColor(color, layer.amount_effect)
121
- * `);
122
- *
123
- * var colorLayer = new itowns.ColorLayer('OPENSM', {
124
- * source,
125
- * type_effect: itowns.colorLayerEffects.customEffect,
126
- * amount_effect: 0.5,
127
- * });
128
- *
129
- * @param {string} body The glsl body
130
- */
131
- customBodyColorLayer(body) {
132
- itownsShaderChunk.custom_body_colorLayer = body;
133
- this.target[`${this.path}custom_body_colorLayer`] = body;
134
- }
135
- /**
136
- * Install chunks in a target, for example THREE.ShaderChunk, with adding an
137
- * optional path.
138
- *
139
- * @param {Object} target - The target to install the chunks into.
140
- * @param {Object} chunks - The chunks to install. The key of each chunk will be
141
- * the name of installation of the chunk in the target (plus an optional path).
142
- * @param {string} [path] - A path to add before a chunk name as a prefix.
143
- *
144
- * @return {Object} The target with installed chunks.
145
- */
146
- install() {
147
- let target = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.target;
148
- let chunks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : itownsShaderChunk;
149
- let path = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.path;
150
- Object.keys(chunks).forEach(key => {
151
- Object.defineProperty(this, key, {
152
- get: () => chunks[key]
153
- });
154
- target[path + key] = chunks[key];
155
- });
156
- return target;
157
- }
158
- }
159
- const ShaderChunk = new ShaderChunkManager(THREE.ShaderChunk, 'itowns/');
160
- export default ShaderChunk;
@@ -1,47 +0,0 @@
1
- const pattern_gl_Position = 'gl_Position.*(?![^]*gl_Position)';
2
- const pattern_Main = '[^\\w]*main[^\\w]*(void)?[^\\w]*{';
3
- const rePosition = new RegExp(pattern_gl_Position);
4
- const reMain = new RegExp(pattern_Main);
5
- export default {
6
- patchMaterialForLogDepthSupport(material) {
7
- // Check if the shader does not already use the log depth buffer
8
- if (material.vertexShader.includes('USE_LOGDEPTHBUF') || material.vertexShader.includes('logdepthbuf_pars_vertex')) {
9
- return;
10
- }
11
-
12
- // Add vertex shader log depth buffer header
13
- material.vertexShader = `#include <logdepthbuf_pars_vertex>\n#define EPSILON 1e-6\n${material.vertexShader}`;
14
- // Add log depth buffer code snippet after last gl_Position modification
15
- let re = rePosition.exec(material.vertexShader);
16
- let idx = re[0].length + re.index;
17
- material.vertexShader = `${material.vertexShader.slice(0, idx)}\n#include <logdepthbuf_vertex>\n${material.vertexShader.slice(idx)}`;
18
-
19
- // Add fragment shader log depth buffer header
20
- material.fragmentShader = `#include <itowns/precision_qualifier\n${material.fragmentShader}`;
21
- material.fragmentShader = `#include <logdepthbuf_pars_fragment>\n${material.fragmentShader}`;
22
- // Add log depth buffer code snippet at the first line of the main function
23
- re = reMain.exec(material.fragmentShader);
24
- idx = re[0].length + re.index;
25
- material.fragmentShader = `${material.fragmentShader.slice(0, idx)}\n#include <logdepthbuf_fragment>\n${material.fragmentShader.slice(idx)}`;
26
- material.defines = {
27
- USE_LOGDEPTHBUF: 1,
28
- USE_LOGDEPTHBUF_EXT: 1
29
- };
30
- },
31
- // adapted from unrollLoops in WebGLProgram
32
- unrollLoops(string, defines) {
33
- // look for a for loop with an unroll_loop pragma
34
- // The detection of the scope of the for loop is hacky as it does not support nested scopes
35
-
36
- function replace(match, start, end, snippet) {
37
- let unroll = '';
38
- start = start in defines ? defines[start] : parseInt(start, 10);
39
- end = end in defines ? defines[end] : parseInt(end, 10);
40
- for (let i = start; i < end; i++) {
41
- unroll += snippet.replace(/\bi\b/g, ` ${i} `);
42
- }
43
- return unroll;
44
- }
45
- return string.replace(/#pragma unroll_loop\s+for\s*\(\s*int\s+i\s*=\s*([\w\d]+);\s*i\s+<\s+([\w\d]+);\s*i\s*\+\+\s*\)\s*\{\n([^}]*)\}/g, replace);
46
- }
47
- };
@@ -1,23 +0,0 @@
1
- /*
2
- * To change this license header, choose License Headers in Project Properties.
3
- * To change this template file, choose Tools | Templates
4
- * and open the template in the editor.
5
- */
6
-
7
- import * as THREE from 'three';
8
- function SphereHelper(radius) {
9
- THREE.Mesh.call(this);
10
- this.geometry = new THREE.SphereGeometry(radius, 8, 8);
11
- const color = new THREE.Color(Math.random(), Math.random(), Math.random());
12
- this.material = new THREE.MeshBasicMaterial({
13
- color: color.getHex(),
14
- wireframe: true
15
- });
16
- }
17
- SphereHelper.prototype = Object.create(THREE.Mesh.prototype);
18
- SphereHelper.prototype.constructor = SphereHelper;
19
- SphereHelper.prototype.update = function (radius) {
20
- this.geometry.dispose();
21
- this.geometry = new THREE.SphereGeometry(radius, 8, 8);
22
- };
23
- export default SphereHelper;
@@ -1,51 +0,0 @@
1
- import * as THREE from 'three';
2
- async function shutdownXR(session) {
3
- if (session) {
4
- await session.end();
5
- }
6
- }
7
- const initializeWebXR = (view, options) => {
8
- const scale = options.scale || 1.0;
9
- const xr = view.mainLoop.gfxEngine.renderer.xr;
10
- xr.addEventListener('sessionstart', () => {
11
- const camera = view.camera.camera3D;
12
- const exitXRSession = event => {
13
- if (event.key === 'Escape') {
14
- document.removeEventListener('keydown', exitXRSession);
15
- xr.enabled = false;
16
- view.camera.camera3D = camera;
17
- view.scene.scale.multiplyScalar(1 / scale);
18
- view.scene.updateMatrixWorld();
19
- shutdownXR(xr.getSession());
20
- view.notifyChange(view.camera.camera3D, true);
21
- }
22
- };
23
- view.scene.scale.multiplyScalar(scale);
24
- view.scene.updateMatrixWorld();
25
- xr.enabled = true;
26
- xr.getReferenceSpace('local');
27
- const position = view.camera.position();
28
- const geodesicNormal = new THREE.Quaternion().setFromUnitVectors(new THREE.Vector3(0, 0, 1), position.geodesicNormal).invert();
29
- const quat = new THREE.Quaternion(-1, 0, 0, 1).normalize().multiply(geodesicNormal);
30
- const trans = camera.position.clone().multiplyScalar(-scale).applyQuaternion(quat);
31
- const transform = new XRRigidTransform(trans, quat);
32
- const baseReferenceSpace = xr.getReferenceSpace();
33
- const teleportSpaceOffset = baseReferenceSpace.getOffsetReferenceSpace(transform);
34
- xr.setReferenceSpace(teleportSpaceOffset);
35
- view.camera.camera3D = xr.getCamera();
36
- view.camera.resize(view.camera.width, view.camera.height);
37
- document.addEventListener('keydown', exitXRSession, false);
38
-
39
- // TODO Fix asynchronization between xr and MainLoop render loops.
40
- // (see MainLoop#scheduleViewUpdate).
41
- xr.setAnimationLoop(timestamp => {
42
- if (xr.isPresenting && view.camera.camera3D.cameras[0]) {
43
- view.camera.camera3D.updateMatrix();
44
- view.camera.camera3D.updateMatrixWorld(true);
45
- view.notifyChange(view.camera.camera3D, true);
46
- }
47
- view.mainLoop.step(view, timestamp);
48
- });
49
- });
50
- };
51
- export default initializeWebXR;
@@ -1,214 +0,0 @@
1
- /**
2
- * Generated On: 2015-10-5
3
- * Class: c3DEngine
4
- * Description: 3DEngine est l'interface avec le framework webGL.
5
- */
6
-
7
- import * as THREE from 'three';
8
- import Capabilities from "../Core/System/Capabilities.js";
9
- import { unpack1K } from "./LayeredMaterial.js";
10
- import WEBGL from "../ThreeExtended/capabilities/WebGL.js";
11
- import Label2DRenderer from "./Label2DRenderer.js";
12
- import { deprecatedC3DEngineWebGLOptions } from "../Core/Deprecated/Undeprecator.js";
13
- const depthRGBA = new THREE.Vector4();
14
- class c3DEngine {
15
- constructor(rendererOrDiv) {
16
- let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
17
- deprecatedC3DEngineWebGLOptions(options);
18
-
19
- // pick sensible default options
20
- if (options.antialias === undefined) {
21
- options.antialias = true;
22
- }
23
- if (options.alpha === undefined) {
24
- options.alpha = true;
25
- }
26
- if (options.logarithmicDepthBuffer === undefined) {
27
- options.logarithmicDepthBuffer = true;
28
- }
29
-
30
- // If rendererOrDiv parameter is a domElement, we use it as support to display data.
31
- // If it is a renderer, we check the renderer.domElement parameter which can be :
32
- // - a domElement, in this case we use this domElement as a support
33
- // - a canvas, in this case we use the canvas parent (which should be a domElement) as a support
34
- let renderer;
35
- let viewerDiv;
36
- if (rendererOrDiv.domElement) {
37
- renderer = rendererOrDiv;
38
- viewerDiv = renderer.domElement instanceof HTMLDivElement ? renderer.domElement : renderer.domElement.parentElement;
39
- } else {
40
- viewerDiv = rendererOrDiv;
41
- }
42
- this.width = viewerDiv.clientWidth;
43
- this.height = viewerDiv.clientHeight;
44
- this.positionBuffer = null;
45
- this._nextThreejsLayer = 1;
46
- this.fullSizeRenderTarget = new THREE.WebGLRenderTarget(this.width, this.height);
47
- this.fullSizeRenderTarget.texture.minFilter = THREE.LinearFilter;
48
- this.fullSizeRenderTarget.texture.magFilter = THREE.NearestFilter;
49
- this.fullSizeRenderTarget.depthBuffer = true;
50
- this.fullSizeRenderTarget.depthTexture = new THREE.DepthTexture();
51
- this.fullSizeRenderTarget.depthTexture.type = THREE.UnsignedShortType;
52
- this.renderView = function (view) {
53
- this.renderer.clear();
54
- this.renderer.render(view.scene, view.camera3D);
55
- if (view.tileLayer) {
56
- this.label2dRenderer.render(view.tileLayer.object3d, view.camera3D);
57
- }
58
- }.bind(this);
59
-
60
- /**
61
- * @type {function}
62
- * @param {number} w
63
- * @param {number} h
64
- */
65
- this.onWindowResize = function (w, h) {
66
- this.width = w;
67
- this.height = h;
68
- this.fullSizeRenderTarget.setSize(this.width, this.height);
69
- this.renderer.setSize(this.width, this.height);
70
- this.label2dRenderer.setSize(this.width, this.height);
71
- }.bind(this);
72
-
73
- // Create renderer
74
- try {
75
- this.label2dRenderer = new Label2DRenderer();
76
- this.label2dRenderer.setSize(this.width, this.height);
77
- viewerDiv.appendChild(this.label2dRenderer.domElement);
78
- this.renderer = renderer || new THREE.WebGLRenderer({
79
- canvas: document.createElement('canvas'),
80
- antialias: options.antialias,
81
- alpha: options.alpha,
82
- logarithmicDepthBuffer: options.logarithmicDepthBuffer
83
- });
84
- this.renderer.domElement.style.position = 'relative';
85
- this.renderer.domElement.style.zIndex = 0;
86
- this.renderer.domElement.style.top = 0;
87
- } catch (ex) {
88
- if (!WEBGL.isWebGL2Available()) {
89
- viewerDiv.appendChild(WEBGL.getErrorMessage(2));
90
- }
91
- throw ex;
92
- }
93
-
94
- // Let's allow our canvas to take focus
95
- // The condition below looks weird, but it's correct: querying tabIndex
96
- // returns -1 if not set, but we still need to explicitly set it to force
97
- // the tabindex focus flag to true (see
98
- // https://www.w3.org/TR/html5/editing.html#specially-focusable)
99
- if (this.renderer.domElement.tabIndex === -1) {
100
- this.renderer.domElement.tabIndex = -1;
101
- }
102
- Capabilities.updateCapabilities(this.renderer);
103
- this.renderer.setClearColor(0x030508);
104
- this.renderer.autoClear = false;
105
- this.renderer.sortObjects = true;
106
- this.renderer.debug.checkShaderErrors = false;
107
- if (!renderer) {
108
- this.renderer.setPixelRatio(viewerDiv.devicePixelRatio);
109
- this.renderer.setSize(viewerDiv.clientWidth, viewerDiv.clientHeight);
110
- viewerDiv.appendChild(this.renderer.domElement);
111
- }
112
- }
113
- getWindowSize() {
114
- return new THREE.Vector2(this.width, this.height);
115
- }
116
-
117
- /**
118
- * return renderer THREE.js
119
- * @returns {THREE.WebGLRenderer}
120
- */
121
- getRenderer() {
122
- return this.renderer;
123
- }
124
-
125
- /**
126
- * Render view to a Uint8Array.
127
- *
128
- * @param {View} view - The view to render
129
- * @param {object} [zone] - partial zone to render
130
- * @param {number} zone.x - x (in view coordinate)
131
- * @param {number} zone.y - y (in view coordinate)
132
- * @param {number} zone.width - width of area to render (in pixels)
133
- * @param {number} zone.height - height of area to render (in pixels)
134
- * @return {THREE.RenderTarget} - Uint8Array, 4 bytes per pixel. The first pixel in
135
- * the array is the bottom-left pixel.
136
- */
137
- renderViewToBuffer(view, zone) {
138
- if (!zone) {
139
- zone = {
140
- x: 0,
141
- y: 0,
142
- width: this.width,
143
- height: this.height
144
- };
145
- }
146
- zone.buffer = zone.buffer || new Uint8Array(4 * zone.width * zone.height);
147
- this.renderViewToRenderTarget(view, this.fullSizeRenderTarget, zone);
148
- this.renderer.readRenderTargetPixels(this.fullSizeRenderTarget, zone.x, this.height - (zone.y + zone.height), zone.width, zone.height, zone.buffer);
149
- return zone.buffer;
150
- }
151
-
152
- /**
153
- * Render view to a THREE.RenderTarget.
154
- *
155
- * @param {View} view - The view to render
156
- * @param {THREE.RenderTarget} [target] - destination render target. Default value: full size render target owned by c3DEngine.
157
- * @param {object} [zone] - partial zone to render (zone x/y uses view coordinates) Note: target must contain complete zone
158
- * @return {THREE.RenderTarget} - the destination render target
159
- */
160
- renderViewToRenderTarget(view, target, zone) {
161
- if (!target) {
162
- target = this.fullSizeRenderTarget;
163
- }
164
- const current = this.renderer.getRenderTarget();
165
-
166
- // Don't use setViewport / setScissor on renderer because they would affect
167
- // on screen rendering as well. Instead set them on the render target.
168
- // Example : this.fullSizeRenderTarget.viewport.set(0, 0, target.width, target.height);
169
- if (zone) {
170
- this.fullSizeRenderTarget.scissor.set(zone.x, target.height - (zone.y + zone.height), zone.width, zone.height);
171
- this.fullSizeRenderTarget.scissorTest = true;
172
- }
173
- this.renderer.setRenderTarget(target);
174
- this.renderer.clear(true, true, false);
175
- this.renderer.render(view.scene, view.camera.camera3D);
176
- this.renderer.setRenderTarget(current);
177
- this.fullSizeRenderTarget.scissorTest = false;
178
- return target;
179
- }
180
- bufferToImage(pixelBuffer, width, height) {
181
- const canvas = document.createElement('canvas');
182
- const ctx = canvas.getContext('2d', {
183
- willReadFrequently: true
184
- });
185
-
186
- // size the canvas to your desired image
187
- canvas.width = width;
188
- canvas.height = height;
189
- const imgData = ctx.getImageData(0, 0, width, height);
190
- imgData.data.set(pixelBuffer);
191
- ctx.putImageData(imgData, 0, 0);
192
-
193
- // create a new img object
194
- const image = new Image();
195
-
196
- // set the img.src to the canvas data url
197
- image.src = canvas.toDataURL();
198
- return image;
199
- }
200
- depthBufferRGBAValueToOrthoZ(depthBufferRGBA, camera) {
201
- depthRGBA.fromArray(depthBufferRGBA).divideScalar(255.0);
202
- if (Capabilities.isLogDepthBufferSupported() && camera.type == 'PerspectiveCamera') {
203
- const gl_FragDepthEXT = unpack1K(depthRGBA);
204
- const logDepthBufFC = 2.0 / (Math.log(camera.far + 1.0) / Math.LN2);
205
- // invert function : gl_FragDepthEXT = log2(vFragDepth) * logDepthBufFC * 0.5;
206
- return 2 ** (2 * gl_FragDepthEXT / logDepthBufFC);
207
- } else {
208
- let gl_FragCoord_Z = unpack1K(depthRGBA);
209
- gl_FragCoord_Z = gl_FragCoord_Z * 2.0 - 1.0;
210
- return gl_FragCoord_Z;
211
- }
212
- }
213
- }
214
- export default c3DEngine;
@@ -1,74 +0,0 @@
1
- import Fetcher from "../Provider/Fetcher.js";
2
- import C3DTilesSource from "./C3DTilesSource.js";
3
- function findSessionId(tile) {
4
- if (!tile) {
5
- return null;
6
- }
7
- if (tile.content && tile.content.uri) {
8
- const searchParams = new URLSearchParams(tile.content.uri.slice(tile.content.uri.indexOf('?') + 1));
9
- return searchParams.get('session');
10
- } else if (tile.children && tile.children.length > 0) {
11
- for (const c of tile.children) {
12
- const sessionId = findSessionId(c);
13
- if (sessionId) {
14
- return sessionId;
15
- }
16
- }
17
- }
18
- return null;
19
- }
20
-
21
- /**
22
- * An object defining the source connection to a 3DTiles asset from a [Google api](https://tile.googleapis.com).
23
- *
24
- * @extends C3DTilesSource
25
- *
26
- * @property {boolean} isC3DTilesGoogleSource - Used to checkout whether this source is a C3DTilesGoogleSource. Default is
27
- * true. You should not change this, as it is used internally for optimisation.
28
- * @property {string} url - The URL to the tileset json.
29
- * @property {string} baseUrl - The base URL to access tiles.
30
- */
31
- class C3DTilesGoogleSource extends C3DTilesSource {
32
- /**
33
- * Create a new Source for 3D Tiles data from Google api (experimental).
34
- *
35
- * @extends C3DTilesSource
36
- *
37
- * @property {boolean} isC3DTilesGoogleSource - Used to checkout whether this source is a C3DTilesGoogleSource. Default is
38
- * true. You should not change this, as it is used internally for optimisation.
39
- * @param {Object} source An object that can contain all properties of a C3DTilesGoogleSource and {@link Source}.
40
- * @param {String} source.key Your google tiles map API access key
41
- */
42
- constructor(source) {
43
- if (!source.key) {
44
- throw new Error('[C3DTilesGoogleSource]: A API key for the google map tiles API is required');
45
- }
46
- // URL to the root tileset
47
- source.url = `https://tile.googleapis.com/v1/3dtiles/root.json?key=${source.key}`;
48
- super(source);
49
- this.isC3DTilesGoogleSource = true;
50
- this.baseUrl = 'https://tile.googleapis.com';
51
- this.key = source.key;
52
- this.whenReady = Fetcher.json(source.url, this.networkOptions).then(json => {
53
- if (json && json.root) {
54
- this.sessionId = findSessionId(json.root);
55
- if (this.sessionId === null) {
56
- throw new Error('[C3DTilesGoogleSource]: Cannot find sessionId from the tileset while it is mandatory to request tiles.');
57
- }
58
- }
59
- return json;
60
- });
61
- }
62
-
63
- /**
64
- * Adds the key and session to the tile url (non-standard behaviour, that is specific to Google 3D tiles),
65
- * see https://github.com/CesiumGS/3d-tiles/issues/746
66
- * @param {String} url the tile url
67
- * @returns {String} the tile url with Google map tiles api key and session parameters added at the end of the url
68
- */
69
- getTileUrl(url) {
70
- const extraParameters = `key=${this.key}&session=${this.sessionId}`;
71
- return /\?/.test(url) ? `${url}&${extraParameters}` : `${url}?${extraParameters}`;
72
- }
73
- }
74
- export default C3DTilesGoogleSource;
@@ -1,54 +0,0 @@
1
- import Fetcher from "../Provider/Fetcher.js";
2
- import C3DTilesSource from "./C3DTilesSource.js";
3
-
4
- /**
5
- * An object defining the source connection to a 3DTiles asset of a [Cesium ion server](https://cesium.com/learn/ion/).
6
- *
7
- * @extends Source
8
- *
9
- * @property {boolean} isC3DTilesIonSource - Used to checkout whether this source is a C3DTilesIonSource. Default is
10
- * true. You should not change this, as it is used internally for optimisation.
11
- * @property {string} url - The URL of the tileset json.
12
- * @property {string} baseUrl - The base URL to access tiles.
13
- * @property {string} accessToken - The Cesium ion access token used to retrieve the resource.
14
- * @property {string} assetId - The id of the asset on Cesium ion.
15
- */
16
- class C3DTilesIonSource extends C3DTilesSource {
17
- /**
18
- * Create a new Source for 3D Tiles data from Cesium ion.
19
- *
20
- * @extends Source
21
- *
22
- * @param {Object} source An object that can contain all properties of a C3DTilesIonSource and {@link Source}.
23
- * Only `accessToken` and `assetId` are mandatory.
24
- */
25
- constructor(source) {
26
- if (!source.accessToken) {
27
- throw new Error('New 3D Tiles Ion Source: access token is required');
28
- }
29
- if (!source.assetId) {
30
- throw new Error('New 3D Tiles Ion Source: asset id is required');
31
- }
32
-
33
- // Url to query cesium ion the first time to retrieve metadata of the asset with assetId
34
- source.url = `https://api.cesium.com/v1/assets/${source.assetId}/endpoint?access_token=${source.accessToken}`;
35
- super(source);
36
- this.isC3DTilesIonSource = true;
37
- this.accessToken = source.accessToken;
38
- this.assetId = source.assetId;
39
-
40
- // get asset metadata
41
- this.whenReady = Fetcher.json(source.url, this.networkOptions).then(json => {
42
- if (json.type !== '3DTILES') {
43
- throw new Error(`${json.type} datasets from Cesium ion are not supported with C3DTilesIonSource. ` + 'Only 3D Tiles datasets are supported.');
44
- }
45
- this.url = json.url; // Store url to the tileset.json
46
- this.baseUrl = json.url.slice(0, json.url.lastIndexOf('/') + 1); // baseUrl for tiles queries
47
- this.networkOptions.headers = {};
48
- this.networkOptions.headers.Authorization = `Bearer ${json.accessToken}`;
49
- this.attribution = json.attributions;
50
- return Fetcher.json(this.url, this.networkOptions);
51
- });
52
- }
53
- }
54
- export default C3DTilesIonSource;