@itwin/core-frontend 3.2.0-dev.28 → 3.2.0-dev.30

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 (134) hide show
  1. package/CHANGELOG.md +38 -1
  2. package/lib/cjs/ViewManager.d.ts.map +1 -1
  3. package/lib/cjs/ViewManager.js +1 -0
  4. package/lib/cjs/ViewManager.js.map +1 -1
  5. package/lib/cjs/render/primitives/VertexTable.d.ts +1 -1
  6. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  7. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  8. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +0 -1
  9. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  10. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js +1 -1
  11. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  12. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +0 -4
  13. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  14. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  15. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  16. package/lib/cjs/render/webgl/DrawCommand.js +2 -1
  17. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  18. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +5 -4
  19. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  20. package/lib/cjs/render/webgl/ShaderBuilder.js +7 -6
  21. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  22. package/lib/cjs/render/webgl/Technique.d.ts +4 -2
  23. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  24. package/lib/cjs/render/webgl/Technique.js +148 -120
  25. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  26. package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -3
  27. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  28. package/lib/cjs/render/webgl/TechniqueFlags.js +17 -4
  29. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  30. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  31. package/lib/cjs/render/webgl/glsl/Animation.js +2 -0
  32. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  33. package/lib/cjs/render/webgl/glsl/Color.d.ts.map +1 -1
  34. package/lib/cjs/render/webgl/glsl/Color.js +8 -7
  35. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  36. package/lib/cjs/render/webgl/glsl/Edge.d.ts +2 -2
  37. package/lib/cjs/render/webgl/glsl/Edge.d.ts.map +1 -1
  38. package/lib/cjs/render/webgl/glsl/Edge.js +6 -10
  39. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  40. package/lib/cjs/render/webgl/glsl/PointString.d.ts +3 -3
  41. package/lib/cjs/render/webgl/glsl/PointString.d.ts.map +1 -1
  42. package/lib/cjs/render/webgl/glsl/PointString.js +6 -6
  43. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  44. package/lib/cjs/render/webgl/glsl/Polyline.d.ts +3 -3
  45. package/lib/cjs/render/webgl/glsl/Polyline.d.ts.map +1 -1
  46. package/lib/cjs/render/webgl/glsl/Polyline.js +6 -10
  47. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  48. package/lib/cjs/render/webgl/glsl/Surface.d.ts +2 -2
  49. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  50. package/lib/cjs/render/webgl/glsl/Surface.js +33 -16
  51. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  52. package/lib/cjs/render/webgl/glsl/Vertex.d.ts +3 -1
  53. package/lib/cjs/render/webgl/glsl/Vertex.d.ts.map +1 -1
  54. package/lib/cjs/render/webgl/glsl/Vertex.js +139 -37
  55. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  56. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -1
  57. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  58. package/lib/cjs/tile/RealityTileLoader.js +29 -6
  59. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  60. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
  61. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  62. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
  63. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  64. package/lib/cjs/tile/map/WmsCapabilities.d.ts +3 -2
  65. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  66. package/lib/cjs/tile/map/WmsCapabilities.js +11 -10
  67. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  68. package/lib/esm/ViewManager.d.ts.map +1 -1
  69. package/lib/esm/ViewManager.js +1 -0
  70. package/lib/esm/ViewManager.js.map +1 -1
  71. package/lib/esm/render/primitives/VertexTable.d.ts +1 -1
  72. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  73. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  74. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +0 -1
  75. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  76. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js +1 -1
  77. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  78. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +0 -4
  79. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  80. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  81. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  82. package/lib/esm/render/webgl/DrawCommand.js +2 -1
  83. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  84. package/lib/esm/render/webgl/ShaderBuilder.d.ts +5 -4
  85. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  86. package/lib/esm/render/webgl/ShaderBuilder.js +7 -6
  87. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  88. package/lib/esm/render/webgl/Technique.d.ts +4 -2
  89. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  90. package/lib/esm/render/webgl/Technique.js +148 -120
  91. package/lib/esm/render/webgl/Technique.js.map +1 -1
  92. package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -3
  93. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  94. package/lib/esm/render/webgl/TechniqueFlags.js +17 -4
  95. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  96. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  97. package/lib/esm/render/webgl/glsl/Animation.js +2 -0
  98. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  99. package/lib/esm/render/webgl/glsl/Color.d.ts.map +1 -1
  100. package/lib/esm/render/webgl/glsl/Color.js +8 -7
  101. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  102. package/lib/esm/render/webgl/glsl/Edge.d.ts +2 -2
  103. package/lib/esm/render/webgl/glsl/Edge.d.ts.map +1 -1
  104. package/lib/esm/render/webgl/glsl/Edge.js +7 -11
  105. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  106. package/lib/esm/render/webgl/glsl/PointString.d.ts +3 -3
  107. package/lib/esm/render/webgl/glsl/PointString.d.ts.map +1 -1
  108. package/lib/esm/render/webgl/glsl/PointString.js +6 -6
  109. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  110. package/lib/esm/render/webgl/glsl/Polyline.d.ts +3 -3
  111. package/lib/esm/render/webgl/glsl/Polyline.d.ts.map +1 -1
  112. package/lib/esm/render/webgl/glsl/Polyline.js +7 -11
  113. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  114. package/lib/esm/render/webgl/glsl/Surface.d.ts +2 -2
  115. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  116. package/lib/esm/render/webgl/glsl/Surface.js +33 -16
  117. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  118. package/lib/esm/render/webgl/glsl/Vertex.d.ts +3 -1
  119. package/lib/esm/render/webgl/glsl/Vertex.d.ts.map +1 -1
  120. package/lib/esm/render/webgl/glsl/Vertex.js +138 -37
  121. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  122. package/lib/esm/tile/RealityTileLoader.d.ts +1 -1
  123. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  124. package/lib/esm/tile/RealityTileLoader.js +30 -7
  125. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  126. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts +0 -1
  127. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  128. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +12 -10
  129. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  130. package/lib/esm/tile/map/WmsCapabilities.d.ts +3 -2
  131. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  132. package/lib/esm/tile/map/WmsCapabilities.js +11 -10
  133. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  134. package/package.json +20 -20
@@ -1 +1 @@
1
- {"version":3,"file":"Vertex.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Vertex.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { DrawParams } from \"../DrawCommand\";\r\nimport { UniformHandle } from \"../UniformHandle\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { Pass, TextureUnit } from \"../RenderFlags\";\r\nimport { IsInstanced } from \"../TechniqueFlags\";\r\nimport { VariableType, VertexShaderBuilder } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { decodeUint16, decodeUint24 } from \"./Decode\";\r\nimport { addInstanceOverrides } from \"./Instancing\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\n\r\nconst initializeVertLUTCoords = `\r\n g_vertexLUTIndex = decodeUInt24(qpos);\r\n g_vertexBaseCoords = compute_vert_coords(g_vertexLUTIndex);\r\n`;\r\n\r\nconst unquantizePosition = `\r\nvec4 unquantizePosition(vec3 pos, vec3 origin, vec3 scale) { return vec4(origin + scale * pos, 1.0); }\r\n`;\r\n\r\nexport const unquantizeVertexPosition = `\r\nvec4 unquantizeVertexPosition(vec3 pos, vec3 origin, vec3 scale) { return unquantizePosition(pos, origin, scale); }\r\n`;\r\n\r\n// Need to read 2 rgba values to obtain 6 16-bit integers for position\r\nconst unquantizeVertexPositionFromLUT = `\r\nvec4 unquantizeVertexPosition(vec3 encodedIndex, vec3 origin, vec3 scale) {\r\n vec3 qpos = vec3(decodeUInt16(g_vertLutData0.xy), decodeUInt16(g_vertLutData0.zw), decodeUInt16(g_vertLutData1.xy));\r\n g_featureAndMaterialIndex = g_vertLutData2;\r\n return unquantizePosition(qpos, origin, scale);\r\n}\r\n`;\r\n\r\nconst computeLineWeight = \"\\nfloat computeLineWeight() { return g_lineWeight; }\\n\";\r\nconst computeLineCode = \"\\nfloat computeLineCode() { return g_lineCode; }\\n\";\r\n\r\n/** @internal */\r\nexport function addModelViewProjectionMatrix(vert: VertexShaderBuilder): void {\r\n if (vert.usesInstancedGeometry) {\r\n addModelViewMatrix(vert);\r\n addProjectionMatrix(vert);\r\n vert.addGlobal(\"g_mvp\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mvp = u_proj * g_mv;\");\r\n } else {\r\n vert.addUniform(\"u_mvp\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_mvp\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewProjectionMatrix(uniform, params.geometry, params.isViewCoords);\r\n });\r\n });\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addProjectionMatrix(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_proj\", VariableType.Mat4, (prog) => {\r\n prog.addProgramUniform(\"u_proj\", (uniform, params) => {\r\n params.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n}\r\n\r\nconst computeInstancedRtcMatrix = `\r\n g_instancedRtcMatrix = u_instanced_rtc * g_modelMatrixRTC;\r\n`;\r\n\r\n/** @internal */\r\nexport function addInstancedRtcMatrix(vert: VertexShaderBuilder): void {\r\n if (!vert.usesInstancedGeometry)\r\n return;\r\n\r\n assert(undefined !== vert.find(\"g_modelMatrixRTC\")); // set up in VertexShaderBuilder constructor...\r\n vert.addUniform(\"u_instanced_rtc\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_rtc\", (uniform, params) => {\r\n const modelt = params.geometry.asInstanced!.getRtcOnlyTransform();\r\n uniform.setMatrix4(Matrix4.fromTransform(modelt));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_instancedRtcMatrix\", VariableType.Mat4);\r\n vert.addInitializer(computeInstancedRtcMatrix);\r\n}\r\n\r\n/** @internal */\r\nexport function addModelViewMatrix(vert: VertexShaderBuilder): void {\r\n const bind = (uniform: UniformHandle, params: DrawParams) => {\r\n params.target.uniforms.branch.bindModelViewMatrix(uniform, params.geometry, params.isViewCoords);\r\n };\r\n\r\n if (vert.usesInstancedGeometry) {\r\n vert.addUniform(\"u_instanced_modelView\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_modelView\", bind);\r\n });\r\n\r\n vert.addGlobal(\"g_mv\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mv = u_instanced_modelView * g_modelMatrixRTC;\");\r\n } else {\r\n vert.addUniform(\"u_mv\", VariableType.Mat4, (prog) => {\r\n // ###TODO: We only need 3 rows, not 4...\r\n prog.addGraphicUniform(\"u_mv\", bind);\r\n });\r\n }\r\n}\r\n\r\nconst computeNormalMatrix = `\r\n g_nmx = mat3(u_modelViewN);\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\nconst computeNormalMatrix2 = `\r\n g_nmx = transpose(inverse(mat3(MAT_MV)));\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\nconst computeNormalMatrix1Inst = `\r\n g_nmx = mat3(MAT_MV);\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\n/** @internal */\r\nexport function addNormalMatrix(vert: VertexShaderBuilder, instanced: IsInstanced) {\r\n vert.addGlobal(\"g_nmx\", VariableType.Mat3);\r\n vert.addUniform(\"u_frustumScale\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_frustumScale\", (uniform, params) => {\r\n const scale = params.target.uniforms.branch.top.frustumScale;\r\n uniform.setUniform2fv([scale.x, scale.y]);\r\n });\r\n });\r\n\r\n if (System.instance.capabilities.isWebGL2) {\r\n vert.addInitializer(computeNormalMatrix2);\r\n } else if (IsInstanced.Yes === instanced) {\r\n vert.addInitializer(computeNormalMatrix1Inst);\r\n } else {\r\n vert.addUniform(\"u_modelViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_modelViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n vert.addInitializer(computeNormalMatrix);\r\n }\r\n}\r\n\r\nconst scratchLutParams = new Float32Array(4);\r\nfunction addPositionFromLUT(vert: VertexShaderBuilder) {\r\n vert.addGlobal(\"g_vertexLUTIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_vertexBaseCoords\", VariableType.Vec2);\r\n\r\n vert.addFunction(decodeUint24);\r\n vert.addFunction(decodeUint16);\r\n vert.addFunction(unquantizeVertexPositionFromLUT);\r\n\r\n vert.addUniform(\"u_vertLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_vertLUT\", (uniform, params) => {\r\n (params.geometry.asLUT!).lut.texture.bindSampler(uniform, TextureUnit.VertexLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_vertParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_vertParams\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asLUT);\r\n const lut = params.geometry.asLUT.lut;\r\n const lutParams = scratchLutParams;\r\n lutParams[0] = lut.texture.width;\r\n lutParams[1] = lut.texture.height;\r\n lutParams[2] = lut.numRgbaPerVertex;\r\n lutParams[3] = lut.numVertices;\r\n uniform.setUniform4fv(lutParams);\r\n });\r\n });\r\n\r\n addLookupTable(vert, \"vert\", \"u_vertParams.z\");\r\n vert.addInitializer(initializeVertLUTCoords);\r\n\r\n vert.addGlobal(`g_vertLutData0`, VariableType.Vec4);\r\n vert.addGlobal(`g_vertLutData1`, VariableType.Vec4);\r\n vert.addGlobal(`g_vertLutData2`, VariableType.Vec4);\r\n vert.addGlobal(`g_vertLutData3`, VariableType.Vec4);\r\n vert.addGlobal(\"g_featureAndMaterialIndex\", VariableType.Vec4);\r\n\r\n // Read the vertex data from the vertex table up front. Yields a consistent (if unexplainable) small performance boost.\r\n vert.addInitializer(`\r\n vec2 tc = g_vertexBaseCoords;\r\n g_vertLutData0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n g_vertLutData1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n g_vertLutData2 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n if (3.0 < u_vertParams.z) {\r\n tc.x += g_vert_stepX;\r\n g_vertLutData3 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n }\r\n `);\r\n}\r\n\r\n// Shader tests u_qScale.x < 0 to determine that positions are not quantized.\r\nconst unquantizedScale = new Float32Array([-1, -1, -1]);\r\n\r\n/** @internal */\r\nexport function addPosition(vert: VertexShaderBuilder, fromLUT: boolean) {\r\n vert.addFunction(unquantizePosition);\r\n\r\n vert.addUniform(\"u_qScale\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qScale\", (uniform, params) => {\r\n uniform.setUniform3fv(params.geometry.usesQuantizedPositions ? params.geometry.qScale : unquantizedScale);\r\n });\r\n });\r\n vert.addUniform(\"u_qOrigin\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qOrigin\", (uniform, params) => {\r\n // If positions aren't quantized, the shader doesn't use the origin - don't bother updating it.\r\n if (params.geometry.usesQuantizedPositions)\r\n uniform.setUniform3fv(params.geometry.qOrigin);\r\n });\r\n });\r\n\r\n if (!fromLUT) {\r\n vert.addFunction(unquantizeVertexPosition);\r\n } else {\r\n addPositionFromLUT(vert);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addAlpha(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_hasAlpha\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_hasAlpha\", (uniform, params) => {\r\n uniform.setUniform1f(Pass.rendersTranslucent(params.geometry.getPass(params.target)) ? 1 : 0);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineWeight(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineWeight\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineWeight\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineWeight(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineWeight\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineWeight = mix(u_lineWeight, a_instanceOverrides.g, extractInstanceBit(kOvrBit_Weight));\");\r\n } else {\r\n vert.addInitializer(\"g_lineWeight = u_lineWeight;\");\r\n }\r\n\r\n vert.addFunction(computeLineWeight);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineWeight(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineWeight, func);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineCode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineCode\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineCode(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineCode\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineCode = mix(u_lineCode, a_instanceOverrides.b, extractInstanceBit(kOvrBit_LineCode));\");\r\n } else {\r\n vert.addInitializer(\"g_lineCode = u_lineCode;\");\r\n }\r\n\r\n vert.addFunction(computeLineCode);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineCode(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineCode, func);\r\n}\r\n\r\n// This vertex belongs to a triangle which should not be rendered. Produce a degenerate triangle.\r\n// Also place it outside NDC range (for GL_POINTS)\r\nconst discardVertex = ` {\r\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0);\r\n return;\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport const earlyVertexDiscard = ` if (checkForEarlyDiscard(rawPosition))${discardVertex}`;\r\n/** @internal */\r\nexport const vertexDiscard = ` if (checkForDiscard())${discardVertex}`;\r\n/** @internal */\r\nexport const lateVertexDiscard = ` if (checkForLateDiscard())${discardVertex}`;\r\n"]}
1
+ {"version":3,"file":"Vertex.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/Vertex.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module WebGL\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { DrawParams } from \"../DrawCommand\";\r\nimport { UniformHandle } from \"../UniformHandle\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { Pass, TextureUnit } from \"../RenderFlags\";\r\nimport { IsInstanced, PositionType } from \"../TechniqueFlags\";\r\nimport { VariableType, VertexShaderBuilder } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { decode3Float32, decodeUint16, decodeUint24 } from \"./Decode\";\r\nimport { addInstanceOverrides } from \"./Instancing\";\r\nimport { addLookupTable } from \"./LookupTable\";\r\n\r\nconst initializeVertLUTCoords = `\r\n g_vertexLUTIndex = decodeUInt24(qpos);\r\n g_vertexBaseCoords = compute_vert_coords(g_vertexLUTIndex);\r\n`;\r\n\r\n/** @internal */\r\nexport const unquantizePosition = `\r\nvec4 unquantizePosition(vec3 pos, vec3 origin, vec3 scale) { return vec4(origin + scale * pos, 1.0); }\r\n`;\r\n\r\nconst computeQuantizedPosition = `\r\nvec4 computeVertexPosition(vec3 pos) { return unquantizePosition(pos, u_qOrigin, u_qScale); }\r\n`;\r\n\r\n// Need to read 2 rgba values to obtain 6 16-bit integers for position\r\nconst computeVertexPositionFromLUT = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n vec3 qpos = vec3(decodeUInt16(g_vertLutData0.xy), decodeUInt16(g_vertLutData0.zw), decodeUInt16(g_vertLutData1.xy));\r\n g_featureAndMaterialIndex = g_vertLutData2;\r\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n}\r\n`;\r\n\r\nconst computeUnquantizedPosition1 = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n vec3 pf[4];\r\n pf[0] = g_vertLutData0.xyz;\r\n g_featureAndMaterialIndex.x = g_vertLutData0.w;\r\n pf[1] = g_vertLutData1.xyz;\r\n g_featureAndMaterialIndex.y = g_vertLutData1.w;\r\n pf[2] = g_vertLutData2.xyz;\r\n g_featureAndMaterialIndex.z = g_vertLutData2.w;\r\n pf[3] = g_vertLutData3.xyz;\r\n g_featureAndMaterialIndex.w = g_vertLutData3.w;\r\n return vec4(decode3Float32(pf), 1.0);\r\n}\r\n`;\r\n\r\nconst computeUnquantizedPosition2 = `\r\nvec4 computeVertexPosition(vec3 encodedIndex) {\r\n uvec3 vux = uvec3(g_vertLutData0.xyz);\r\n g_featureAndMaterialIndex.x = g_vertLutData0.w;\r\n uvec3 vuy = uvec3(g_vertLutData1.xyz);\r\n g_featureAndMaterialIndex.y = g_vertLutData1.w;\r\n uvec3 vuz = uvec3(g_vertLutData2.xyz);\r\n g_featureAndMaterialIndex.z = g_vertLutData2.w;\r\n uvec3 vuw = uvec3(g_vertLutData3.xyz);\r\n g_featureAndMaterialIndex.w = g_vertLutData3.w;\r\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\r\n return vec4(uintBitsToFloat(u), 1.0);\r\n}\r\n`;\r\n\r\nconst computeLineWeight = \"\\nfloat computeLineWeight() { return g_lineWeight; }\\n\";\r\nconst computeLineCode = \"\\nfloat computeLineCode() { return g_lineCode; }\\n\";\r\n\r\nexport function addSamplePosition(vert: VertexShaderBuilder): void {\r\n vert.addFunction(getSamplePosition(vert.positionType));\r\n}\r\n\r\nfunction getSamplePosition(type: PositionType): string {\r\n const prelude = `\r\n vec4 samplePosition(float index) {\r\n vec2 tc = compute_vert_coords(index);`;\r\n\r\n if (\"quantized\" === type) {\r\n return `\r\n ${prelude}\r\n vec4 e0 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n vec4 e1 = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);\r\n vec3 qpos = vec3(decodeUInt16(e0.xy), decodeUInt16(e0.zw), decodeUInt16(e1.xy));\r\n return unquantizePosition(qpos, u_qOrigin, u_qScale);\r\n }\r\n `;\r\n }\r\n\r\n if (System.instance.capabilities.isWebGL2) {\r\n return `\r\n ${prelude}\r\n uvec3 vux = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuy = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuz = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n tc.x += g_vert_stepX;\r\n uvec3 vuw = uvec3(floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5));\r\n uvec3 u = (vuw << 24) | (vuz << 16) | (vuy << 8) | vux;\r\n return vec4(uintBitsToFloat(u), 1.0);\r\n }`;\r\n }\r\n\r\n return `\r\n ${prelude}\r\n vec3 pf[4];\r\n pf[0] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n pf[1] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n pf[2] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n tc.x += g_vert_stepX;\r\n pf[3] = floor(TEXTURE(u_vertLUT, tc).xyz * 255.0 + 0.5);\r\n return vec4(decode3Float32(pf), 1.0);\r\n }`;\r\n}\r\n\r\n/** @internal */\r\nexport function addModelViewProjectionMatrix(vert: VertexShaderBuilder): void {\r\n if (vert.usesInstancedGeometry) {\r\n addModelViewMatrix(vert);\r\n addProjectionMatrix(vert);\r\n vert.addGlobal(\"g_mvp\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mvp = u_proj * g_mv;\");\r\n } else {\r\n vert.addUniform(\"u_mvp\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_mvp\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewProjectionMatrix(uniform, params.geometry, params.isViewCoords);\r\n });\r\n });\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addProjectionMatrix(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_proj\", VariableType.Mat4, (prog) => {\r\n prog.addProgramUniform(\"u_proj\", (uniform, params) => {\r\n params.bindProjectionMatrix(uniform);\r\n });\r\n });\r\n}\r\n\r\nconst computeInstancedRtcMatrix = `\r\n g_instancedRtcMatrix = u_instanced_rtc * g_modelMatrixRTC;\r\n`;\r\n\r\n/** @internal */\r\nexport function addInstancedRtcMatrix(vert: VertexShaderBuilder): void {\r\n if (!vert.usesInstancedGeometry)\r\n return;\r\n\r\n assert(undefined !== vert.find(\"g_modelMatrixRTC\")); // set up in VertexShaderBuilder constructor...\r\n vert.addUniform(\"u_instanced_rtc\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_rtc\", (uniform, params) => {\r\n const modelt = params.geometry.asInstanced!.getRtcOnlyTransform();\r\n uniform.setMatrix4(Matrix4.fromTransform(modelt));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_instancedRtcMatrix\", VariableType.Mat4);\r\n vert.addInitializer(computeInstancedRtcMatrix);\r\n}\r\n\r\n/** @internal */\r\nexport function addModelViewMatrix(vert: VertexShaderBuilder): void {\r\n const bind = (uniform: UniformHandle, params: DrawParams) => {\r\n params.target.uniforms.branch.bindModelViewMatrix(uniform, params.geometry, params.isViewCoords);\r\n };\r\n\r\n if (vert.usesInstancedGeometry) {\r\n vert.addUniform(\"u_instanced_modelView\", VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(\"u_instanced_modelView\", bind);\r\n });\r\n\r\n vert.addGlobal(\"g_mv\", VariableType.Mat4);\r\n vert.addInitializer(\"g_mv = u_instanced_modelView * g_modelMatrixRTC;\");\r\n } else {\r\n vert.addUniform(\"u_mv\", VariableType.Mat4, (prog) => {\r\n // ###TODO: We only need 3 rows, not 4...\r\n prog.addGraphicUniform(\"u_mv\", bind);\r\n });\r\n }\r\n}\r\n\r\nconst computeNormalMatrix = `\r\n g_nmx = mat3(u_modelViewN);\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\nconst computeNormalMatrix2 = `\r\n g_nmx = transpose(inverse(mat3(MAT_MV)));\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\nconst computeNormalMatrix1Inst = `\r\n g_nmx = mat3(MAT_MV);\r\n g_nmx[0][0] *= u_frustumScale.x;\r\n g_nmx[1][1] *= u_frustumScale.y;\r\n`;\r\n\r\n/** @internal */\r\nexport function addNormalMatrix(vert: VertexShaderBuilder, instanced: IsInstanced) {\r\n vert.addGlobal(\"g_nmx\", VariableType.Mat3);\r\n vert.addUniform(\"u_frustumScale\", VariableType.Vec2, (prog) => {\r\n prog.addGraphicUniform(\"u_frustumScale\", (uniform, params) => {\r\n const scale = params.target.uniforms.branch.top.frustumScale;\r\n uniform.setUniform2fv([scale.x, scale.y]);\r\n });\r\n });\r\n\r\n if (System.instance.capabilities.isWebGL2) {\r\n vert.addInitializer(computeNormalMatrix2);\r\n } else if (IsInstanced.Yes === instanced) {\r\n vert.addInitializer(computeNormalMatrix1Inst);\r\n } else {\r\n vert.addUniform(\"u_modelViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_modelViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindModelViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n vert.addInitializer(computeNormalMatrix);\r\n }\r\n}\r\n\r\nfunction readVertexData(index: number): string {\r\n return `g_vertLutData${index} = floor(TEXTURE(u_vertLUT, tc) * 255.0 + 0.5);`;\r\n}\r\n\r\nconst nextVertexData = \"tc.x += g_vert_stepX;\";\r\n\r\nfunction readNextVertexData(index: number): string {\r\n return `\r\n ${nextVertexData}\r\n ${readVertexData(index)}`;\r\n}\r\n\r\nconst prereadVertexDataPrelude = `\r\n vec2 tc = g_vertexBaseCoords;\r\n ${readVertexData(0)}\r\n ${readNextVertexData(1)}\r\n ${readNextVertexData(2)}\r\n`;\r\n\r\nconst prereadQuantizedVertexData = `${prereadVertexDataPrelude}\r\n if (3.0 < u_vertParams.z) {\r\n ${readNextVertexData(3)}\r\n }\r\n`;\r\n\r\nconst prereadUnquantizedVertexData = `${prereadVertexDataPrelude}\r\n ${readNextVertexData(3)}\r\n ${readNextVertexData(4)}\r\n if (5.0 < u_vertParams.z) {\r\n ${readNextVertexData(5)}\r\n }\r\n`;\r\n\r\nconst scratchLutParams = new Float32Array(4);\r\nfunction addPositionFromLUT(vert: VertexShaderBuilder) {\r\n vert.addGlobal(\"g_vertexLUTIndex\", VariableType.Float);\r\n vert.addGlobal(\"g_vertexBaseCoords\", VariableType.Vec2);\r\n\r\n const unquantized = \"unquantized\" === vert.positionType;\r\n const maxRgbaPerVert = unquantized ? 6 : 4;\r\n for (let i = 0; i < maxRgbaPerVert; i++)\r\n vert.addGlobal(`g_vertLutData${i}`, VariableType.Vec4);\r\n\r\n vert.addFunction(decodeUint24);\r\n vert.addFunction(decodeUint16);\r\n\r\n if (unquantized) {\r\n if (System.instance.capabilities.isWebGL2) {\r\n vert.addFunction(computeUnquantizedPosition2);\r\n } else {\r\n vert.addFunction(decode3Float32);\r\n vert.addFunction(computeUnquantizedPosition1);\r\n }\r\n } else {\r\n vert.addFunction(computeVertexPositionFromLUT);\r\n }\r\n\r\n vert.addUniform(\"u_vertLUT\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"u_vertLUT\", (uniform, params) => {\r\n (params.geometry.asLUT!).lut.texture.bindSampler(uniform, TextureUnit.VertexLUT);\r\n });\r\n });\r\n\r\n vert.addUniform(\"u_vertParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_vertParams\", (uniform, params) => {\r\n assert(undefined !== params.geometry.asLUT);\r\n const lut = params.geometry.asLUT.lut;\r\n const lutParams = scratchLutParams;\r\n lutParams[0] = lut.texture.width;\r\n lutParams[1] = lut.texture.height;\r\n lutParams[2] = lut.numRgbaPerVertex;\r\n lutParams[3] = lut.numVertices;\r\n uniform.setUniform4fv(lutParams);\r\n });\r\n });\r\n\r\n addLookupTable(vert, \"vert\", \"u_vertParams.z\");\r\n vert.addInitializer(initializeVertLUTCoords);\r\n\r\n vert.addGlobal(\"g_featureAndMaterialIndex\", VariableType.Vec4);\r\n\r\n // Read the vertex data from the vertex table up front. Yields a consistent (if unexplainable) small performance boost.\r\n vert.addInitializer(unquantized ? prereadUnquantizedVertexData : prereadQuantizedVertexData);\r\n}\r\n\r\n/** @internal */\r\nexport function addPosition(vert: VertexShaderBuilder, fromLUT: boolean) {\r\n if (!fromLUT || \"quantized\" === vert.positionType) {\r\n vert.addFunction(unquantizePosition);\r\n vert.addUniform(\"u_qScale\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qScale\", (uniform, params) => {\r\n assert(params.geometry.usesQuantizedPositions);\r\n uniform.setUniform3fv(params.geometry.qScale);\r\n });\r\n });\r\n vert.addUniform(\"u_qOrigin\", VariableType.Vec3, (prog) => {\r\n prog.addGraphicUniform(\"u_qOrigin\", (uniform, params) => {\r\n assert(params.geometry.usesQuantizedPositions);\r\n uniform.setUniform3fv(params.geometry.qOrigin);\r\n });\r\n });\r\n }\r\n\r\n if (!fromLUT) {\r\n vert.addFunction(computeQuantizedPosition);\r\n } else {\r\n addPositionFromLUT(vert);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function addAlpha(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_hasAlpha\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_hasAlpha\", (uniform, params) => {\r\n uniform.setUniform1f(Pass.rendersTranslucent(params.geometry.getPass(params.target)) ? 1 : 0);\r\n });\r\n });\r\n}\r\n\r\n/** @internal */\r\nexport function addLineWeight(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineWeight\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineWeight\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineWeight(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineWeight\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineWeight = mix(u_lineWeight, a_instanceOverrides.g, extractInstanceBit(kOvrBit_Weight));\");\r\n } else {\r\n vert.addInitializer(\"g_lineWeight = u_lineWeight;\");\r\n }\r\n\r\n vert.addFunction(computeLineWeight);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineWeight(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineWeight, func);\r\n}\r\n\r\n/** @internal */\r\nexport function addLineCode(vert: VertexShaderBuilder): void {\r\n vert.addUniform(\"u_lineCode\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_lineCode\", (attr, params) => {\r\n attr.setUniform1f(params.geometry.getLineCode(params.programParams));\r\n });\r\n });\r\n\r\n vert.addGlobal(\"g_lineCode\", VariableType.Float);\r\n if (vert.usesInstancedGeometry) {\r\n addInstanceOverrides(vert);\r\n vert.addInitializer(\"g_lineCode = mix(u_lineCode, a_instanceOverrides.b, extractInstanceBit(kOvrBit_LineCode));\");\r\n } else {\r\n vert.addInitializer(\"g_lineCode = u_lineCode;\");\r\n }\r\n\r\n vert.addFunction(computeLineCode);\r\n}\r\n\r\n/** @internal */\r\nexport function replaceLineCode(vert: VertexShaderBuilder, func: string): void {\r\n vert.replaceFunction(computeLineCode, func);\r\n}\r\n\r\n// This vertex belongs to a triangle which should not be rendered. Produce a degenerate triangle.\r\n// Also place it outside NDC range (for GL_POINTS)\r\nconst discardVertex = ` {\r\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0);\r\n return;\r\n }\r\n`;\r\n\r\n/** @internal */\r\nexport const earlyVertexDiscard = ` if (checkForEarlyDiscard(rawPosition))${discardVertex}`;\r\n/** @internal */\r\nexport const vertexDiscard = ` if (checkForDiscard())${discardVertex}`;\r\n/** @internal */\r\nexport const lateVertexDiscard = ` if (checkForLateDiscard())${discardVertex}`;\r\n"]}
@@ -37,6 +37,6 @@ export declare abstract class RealityTileLoader {
37
37
  loadGeometryFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem): Promise<RealityTileContent>;
38
38
  private loadGraphicsFromStream;
39
39
  get viewFlagOverrides(): ViewFlagOverrides;
40
- static computeTileClosestToEyePriority(tile: Tile, viewports: Iterable<Viewport>, location: Transform): number;
40
+ static computeTileLocationPriority(tile: Tile, viewports: Iterable<Viewport>, location: Transform): number;
41
41
  }
42
42
  //# sourceMappingURL=RealityTileLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTileLoader.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTileLoader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAW,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAmC,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGnG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACO,gBAAgB,EAAqF,WAAW,EAAE,kBAAkB,EAAE,IAAI,EACtJ,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAC1E,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,8BAAsB,iBAAiB;IAKlB,OAAO,CAAC,gBAAgB,CAAC;IAJ5C,OAAO,CAAC,oBAAoB,CAAS;IACrC,SAAgB,yBAAyB,EAAE,MAAM,CAAC;IAClD,SAAgB,wBAAwB,EAAE,MAAM,CAAC;gBAEtB,gBAAgB,CAAC,qBAAS;IAK9C,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM;aAKzF,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;aAC5D,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,kBAAkB;aACjD,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IACxG,IAAW,wBAAwB,IAAI,OAAO,CAAkB;IAChE,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,gBAAgB,CAAC;IACjD,SAAS,KAAK,UAAU,IAAI,SAAS,CAA8B;IACnE,SAAS,KAAK,UAAU,IAAI,OAAO,CAAiB;IAC7C,aAAa,IAAI,gBAAgB,GAAG,SAAS;IACpD,IAAW,kBAAkB,IAAI,OAAO,CAAkB;IAC1D,IAAW,mBAAmB,IAAI,OAAO,CAAsC;IAC/E,IAAW,2BAA2B,IAAI,OAAO,CAAiB;IAC3D,aAAa,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAEnC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE;IAG7D,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQvJ,OAAO,CAAC,UAAU;IAQL,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAG,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAUtH,sBAAsB;IA2DpC,IAAW,iBAAiB,IAAI,iBAAiB,CAAqC;WAExE,+BAA+B,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,MAAM;CAatH"}
1
+ {"version":3,"file":"RealityTileLoader.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTileLoader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAoB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAmC,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGnG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAkB,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EACO,gBAAgB,EAAqF,WAAW,EAAE,kBAAkB,EAAE,IAAI,EACtJ,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAC1E,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,8BAAsB,iBAAiB;IAKlB,OAAO,CAAC,gBAAgB,CAAC;IAJ5C,OAAO,CAAC,oBAAoB,CAAS;IACrC,SAAgB,yBAAyB,EAAE,MAAM,CAAC;IAClD,SAAgB,wBAAwB,EAAE,MAAM,CAAC;gBAEtB,gBAAgB,CAAC,qBAAS;IAK9C,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM;aAKzF,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;aAC5D,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,kBAAkB;aACjD,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IACxG,IAAW,wBAAwB,IAAI,OAAO,CAAkB;IAChE,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,gBAAgB,CAAC;IACjD,SAAS,KAAK,UAAU,IAAI,SAAS,CAA8B;IACnE,SAAS,KAAK,UAAU,IAAI,OAAO,CAAiB;IAC7C,aAAa,IAAI,gBAAgB,GAAG,SAAS;IACpD,IAAW,kBAAkB,IAAI,OAAO,CAAkB;IAC1D,IAAW,mBAAmB,IAAI,OAAO,CAAsC;IAC/E,IAAW,2BAA2B,IAAI,OAAO,CAAiB;IAC3D,aAAa,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAEnC,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE;IAG7D,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQvJ,OAAO,CAAC,UAAU;IAQL,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAG,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAUtH,sBAAsB;IA2DpC,IAAW,iBAAiB,IAAI,iBAAiB,CAAqC;WAExE,2BAA2B,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,MAAM;CA4ClH"}
@@ -6,10 +6,11 @@
6
6
  * @module Tiles
7
7
  */
8
8
  import { assert, ByteStream } from "@itwin/core-bentley";
9
- import { Point3d, Transform } from "@itwin/core-geometry";
9
+ import { Point2d, Point3d, Transform } from "@itwin/core-geometry";
10
10
  import { BatchType, CompositeTileHeader, TileFormat } from "@itwin/core-common";
11
11
  import { IModelApp } from "../IModelApp";
12
12
  import { GraphicBranch } from "../render/GraphicBranch";
13
+ import { ScreenViewport } from "../Viewport";
13
14
  import { B3dmReader, createDefaultViewFlagOverrides, I3dmReader, readPointCloudTileContent, } from "./internal";
14
15
  const defaultViewFlagOverrides = createDefaultViewFlagOverrides({});
15
16
  const scratchTileCenterWorld = new Point3d();
@@ -26,7 +27,7 @@ export class RealityTileLoader {
26
27
  }
27
28
  computeTilePriority(tile, viewports, _users) {
28
29
  // ###TODO: Handle case where tile tree reference(s) have a transform different from tree's (background map with ground bias).
29
- return RealityTileLoader.computeTileClosestToEyePriority(tile, viewports, tile.tree.iModelTransform);
30
+ return RealityTileLoader.computeTileLocationPriority(tile, viewports, tile.tree.iModelTransform);
30
31
  }
31
32
  get wantDeduplicatedVertices() { return false; }
32
33
  get _batchType() { return BatchType.Primary; }
@@ -114,14 +115,36 @@ export class RealityTileLoader {
114
115
  return content;
115
116
  }
116
117
  get viewFlagOverrides() { return defaultViewFlagOverrides; }
117
- static computeTileClosestToEyePriority(tile, viewports, location) {
118
- // Prioritize tiles closer to eye.
119
- // NB: In NPC coords, 0 = far plane, 1 = near plane.
120
- const center = location.multiplyPoint3d(tile.center, scratchTileCenterWorld);
118
+ static computeTileLocationPriority(tile, viewports, location) {
119
+ // Compute a priority value for tiles that are:
120
+ // * Closer to the eye;
121
+ // * Closer to the center of attention (center of the screen or zoom target).
122
+ // This way, we can load in priority tiles that are more likely to be important.
123
+ let center;
121
124
  let minDistance = 1.0;
125
+ const currentInputState = IModelApp.toolAdmin.currentInputState;
126
+ const now = Date.now();
127
+ const wheelEventRelevanceTimeout = 1000; // Wheel events older than this value will not be considered
122
128
  for (const viewport of viewports) {
129
+ center = center !== null && center !== void 0 ? center : location.multiplyPoint3d(tile.center, scratchTileCenterWorld);
123
130
  const npc = viewport.worldToNpc(center, scratchTileCenterView);
124
- const distance = 1.0 - npc.z;
131
+ let focusPoint = new Point2d(0.5, 0.5);
132
+ if (currentInputState.viewport === viewport && viewport instanceof ScreenViewport) {
133
+ // Try to get a better target point from the last zoom target
134
+ const { lastWheelEvent } = currentInputState;
135
+ if (lastWheelEvent !== undefined && now - lastWheelEvent.time < wheelEventRelevanceTimeout) {
136
+ const focusPointCandidate = Point2d.fromJSON(viewport.worldToNpc(lastWheelEvent.point));
137
+ if (focusPointCandidate.x > 0 && focusPointCandidate.x < 1 && focusPointCandidate.y > 0 && focusPointCandidate.y < 1)
138
+ focusPoint = focusPointCandidate;
139
+ }
140
+ }
141
+ // NB: In NPC coords, 0 = far plane, 1 = near plane.
142
+ const distanceToEye = 1.0 - npc.z;
143
+ const distanceToCenter = Math.min(npc.distanceXY(focusPoint) / 0.707, 1.0); // Math.sqrt(0.5) = 0.707
144
+ // Distance is a mix of the two previously computed values, still in range [0; 1]
145
+ // We use this factor to determine how much the distance to the center of attention is important compared to distance to the eye
146
+ const distanceToCenterWeight = 0.3;
147
+ const distance = distanceToEye * (1.0 - distanceToCenterWeight) + distanceToCenter * distanceToCenterWeight;
125
148
  minDistance = Math.min(distance, minDistance);
126
149
  }
127
150
  return minDistance;
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTileLoader.js","sourceRoot":"","sources":["../../../src/tile/RealityTileLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, ByteStream } from \"@itwin/core-bentley\";\r\nimport { Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport { BatchType, CompositeTileHeader, TileFormat, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport {\r\n B3dmReader, BatchedTileIdMap, createDefaultViewFlagOverrides, GltfReader, I3dmReader, readPointCloudTileContent, RealityTile, RealityTileContent, Tile, TileContent,\r\n TileDrawArgs, TileLoadPriority, TileRequest, TileRequestChannel, TileUser,\r\n} from \"./internal\";\r\n\r\nconst defaultViewFlagOverrides = createDefaultViewFlagOverrides({});\r\n\r\nconst scratchTileCenterWorld = new Point3d();\r\nconst scratchTileCenterView = new Point3d();\r\n\r\n/** Serves as a \"handler\" for a specific type of [[TileTree]]. Its primary responsibilities involve loading tile content.\r\n * @internal\r\n */\r\nexport abstract class RealityTileLoader {\r\n private _containsPointClouds = false;\r\n public readonly preloadRealityParentDepth: number;\r\n public readonly preloadRealityParentSkip: number;\r\n\r\n public constructor(private _produceGeometry?: boolean) {\r\n this.preloadRealityParentDepth = IModelApp.tileAdmin.contextPreloadParentDepth;\r\n this.preloadRealityParentSkip = IModelApp.tileAdmin.contextPreloadParentSkip;\r\n }\r\n\r\n public computeTilePriority(tile: Tile, viewports: Iterable<Viewport>, _users: Iterable<TileUser>): number {\r\n // ###TODO: Handle case where tile tree reference(s) have a transform different from tree's (background map with ground bias).\r\n return RealityTileLoader.computeTileClosestToEyePriority(tile, viewports, tile.tree.iModelTransform);\r\n }\r\n\r\n public abstract loadChildren(tile: RealityTile): Promise<Tile[] | undefined>;\r\n public abstract getRequestChannel(tile: Tile): TileRequestChannel;\r\n public abstract requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response>;\r\n public get wantDeduplicatedVertices(): boolean { return false; }\r\n public abstract get maxDepth(): number;\r\n public abstract get minDepth(): number;\r\n public abstract get priority(): TileLoadPriority;\r\n protected get _batchType(): BatchType { return BatchType.Primary; }\r\n protected get _loadEdges(): boolean { return true; }\r\n public getBatchIdMap(): BatchedTileIdMap | undefined { return undefined; }\r\n public get isContentUnbounded(): boolean { return false; }\r\n public get containsPointClouds(): boolean { return this._containsPointClouds; }\r\n public get parentsAndChildrenExclusive(): boolean { return true; }\r\n public forceTileLoad(_tile: Tile): boolean { return false; }\r\n\r\n public processSelectedTiles(selected: Tile[], _args: TileDrawArgs): Tile[] { return selected; }\r\n\r\n // NB: The isCanceled arg is chiefly for tests...in usual case it just returns false if the tile is no longer in 'loading' state.\r\n public async loadTileContent(tile: Tile, data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<RealityTileContent> {\r\n assert(data instanceof Uint8Array);\r\n const blob = data;\r\n const streamBuffer = ByteStream.fromUint8Array(blob);\r\n const realityTile = tile as RealityTile;\r\n return this._produceGeometry ? this.loadGeometryFromStream(realityTile, streamBuffer, system) : this.loadGraphicsFromStream(realityTile, streamBuffer, system, isCanceled);\r\n }\r\n\r\n private _getFormat(streamBuffer: ByteStream) {\r\n const position = streamBuffer.curPos;\r\n const format = streamBuffer.nextUint32;\r\n streamBuffer.curPos = position;\r\n return format;\r\n\r\n }\r\n\r\n public async loadGeometryFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem): Promise<RealityTileContent> {\r\n const format = this._getFormat(streamBuffer);\r\n if (format !== TileFormat.B3dm)\r\n return {};\r\n\r\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\r\n const reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, undefined, this.getBatchIdMap());\r\n return { geometry: reader?.readGltfAndCreateGeometry(tile.tree.iModelTransform) };\r\n }\r\n\r\n private async loadGraphicsFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem, isCanceled?: () => boolean): Promise<TileContent> {\r\n const format = this._getFormat(streamBuffer);\r\n if (undefined === isCanceled)\r\n isCanceled = () => !tile.isLoading;\r\n\r\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\r\n let reader: GltfReader | undefined;\r\n switch (format) {\r\n case TileFormat.Pnts:\r\n this._containsPointClouds = true;\r\n let graphic = await readPointCloudTileContent(streamBuffer, iModel, modelId, is3d, tile.contentRange, system);\r\n if (graphic && tile.transformToRoot && !tile.transformToRoot.isIdentity) {\r\n const transformBranch = new GraphicBranch(true);\r\n transformBranch.add(graphic);\r\n graphic = system.createBranch(transformBranch, tile.transformToRoot);\r\n }\r\n\r\n return { graphic };\r\n\r\n case TileFormat.B3dm:\r\n reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, isCanceled, this.getBatchIdMap(), this.wantDeduplicatedVertices);\r\n break;\r\n case TileFormat.I3dm:\r\n reader = I3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, isCanceled, undefined, this.wantDeduplicatedVertices);\r\n break;\r\n case TileFormat.Cmpt:\r\n const header = new CompositeTileHeader(streamBuffer);\r\n if (!header.isValid) return {};\r\n const branch = new GraphicBranch(true);\r\n for (let i = 0; i < header.tileCount; i++) {\r\n const tilePosition = streamBuffer.curPos;\r\n streamBuffer.advance(8); // Skip magic and version.\r\n const tileBytes = streamBuffer.nextUint32;\r\n streamBuffer.curPos = tilePosition;\r\n const result = await this.loadGraphicsFromStream(tile, streamBuffer, system, isCanceled);\r\n if (result.graphic)\r\n branch.add(result.graphic);\r\n streamBuffer.curPos = tilePosition + tileBytes;\r\n }\r\n return { graphic: branch.isEmpty ? undefined : system.createBranch(branch, Transform.createIdentity()), isLeaf: tile.isLeaf };\r\n\r\n default:\r\n assert(false, `unknown tile format ${format}`);\r\n break;\r\n }\r\n\r\n let content: TileContent = {};\r\n if (undefined !== reader) {\r\n try {\r\n content = await reader.read();\r\n } catch (_err) {\r\n // Failure to load should prevent us from trying to load children\r\n content.isLeaf = true;\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n\r\n public get viewFlagOverrides(): ViewFlagOverrides { return defaultViewFlagOverrides; }\r\n\r\n public static computeTileClosestToEyePriority(tile: Tile, viewports: Iterable<Viewport>, location: Transform): number {\r\n // Prioritize tiles closer to eye.\r\n // NB: In NPC coords, 0 = far plane, 1 = near plane.\r\n const center = location.multiplyPoint3d(tile.center, scratchTileCenterWorld);\r\n let minDistance = 1.0;\r\n for (const viewport of viewports) {\r\n const npc = viewport.worldToNpc(center, scratchTileCenterView);\r\n const distance = 1.0 - npc.z;\r\n minDistance = Math.min(distance, minDistance);\r\n }\r\n\r\n return minDistance;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RealityTileLoader.js","sourceRoot":"","sources":["../../../src/tile/RealityTileLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, ByteStream } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport { BatchType, CompositeTileHeader, TileFormat, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { ScreenViewport, Viewport } from \"../Viewport\";\r\nimport {\r\n B3dmReader, BatchedTileIdMap, createDefaultViewFlagOverrides, GltfReader, I3dmReader, readPointCloudTileContent, RealityTile, RealityTileContent, Tile, TileContent,\r\n TileDrawArgs, TileLoadPriority, TileRequest, TileRequestChannel, TileUser,\r\n} from \"./internal\";\r\n\r\nconst defaultViewFlagOverrides = createDefaultViewFlagOverrides({});\r\n\r\nconst scratchTileCenterWorld = new Point3d();\r\nconst scratchTileCenterView = new Point3d();\r\n\r\n/** Serves as a \"handler\" for a specific type of [[TileTree]]. Its primary responsibilities involve loading tile content.\r\n * @internal\r\n */\r\nexport abstract class RealityTileLoader {\r\n private _containsPointClouds = false;\r\n public readonly preloadRealityParentDepth: number;\r\n public readonly preloadRealityParentSkip: number;\r\n\r\n public constructor(private _produceGeometry?: boolean) {\r\n this.preloadRealityParentDepth = IModelApp.tileAdmin.contextPreloadParentDepth;\r\n this.preloadRealityParentSkip = IModelApp.tileAdmin.contextPreloadParentSkip;\r\n }\r\n\r\n public computeTilePriority(tile: Tile, viewports: Iterable<Viewport>, _users: Iterable<TileUser>): number {\r\n // ###TODO: Handle case where tile tree reference(s) have a transform different from tree's (background map with ground bias).\r\n return RealityTileLoader.computeTileLocationPriority(tile, viewports, tile.tree.iModelTransform);\r\n }\r\n\r\n public abstract loadChildren(tile: RealityTile): Promise<Tile[] | undefined>;\r\n public abstract getRequestChannel(tile: Tile): TileRequestChannel;\r\n public abstract requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response>;\r\n public get wantDeduplicatedVertices(): boolean { return false; }\r\n public abstract get maxDepth(): number;\r\n public abstract get minDepth(): number;\r\n public abstract get priority(): TileLoadPriority;\r\n protected get _batchType(): BatchType { return BatchType.Primary; }\r\n protected get _loadEdges(): boolean { return true; }\r\n public getBatchIdMap(): BatchedTileIdMap | undefined { return undefined; }\r\n public get isContentUnbounded(): boolean { return false; }\r\n public get containsPointClouds(): boolean { return this._containsPointClouds; }\r\n public get parentsAndChildrenExclusive(): boolean { return true; }\r\n public forceTileLoad(_tile: Tile): boolean { return false; }\r\n\r\n public processSelectedTiles(selected: Tile[], _args: TileDrawArgs): Tile[] { return selected; }\r\n\r\n // NB: The isCanceled arg is chiefly for tests...in usual case it just returns false if the tile is no longer in 'loading' state.\r\n public async loadTileContent(tile: Tile, data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<RealityTileContent> {\r\n assert(data instanceof Uint8Array);\r\n const blob = data;\r\n const streamBuffer = ByteStream.fromUint8Array(blob);\r\n const realityTile = tile as RealityTile;\r\n return this._produceGeometry ? this.loadGeometryFromStream(realityTile, streamBuffer, system) : this.loadGraphicsFromStream(realityTile, streamBuffer, system, isCanceled);\r\n }\r\n\r\n private _getFormat(streamBuffer: ByteStream) {\r\n const position = streamBuffer.curPos;\r\n const format = streamBuffer.nextUint32;\r\n streamBuffer.curPos = position;\r\n return format;\r\n\r\n }\r\n\r\n public async loadGeometryFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem): Promise<RealityTileContent> {\r\n const format = this._getFormat(streamBuffer);\r\n if (format !== TileFormat.B3dm)\r\n return {};\r\n\r\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\r\n const reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, undefined, this.getBatchIdMap());\r\n return { geometry: reader?.readGltfAndCreateGeometry(tile.tree.iModelTransform) };\r\n }\r\n\r\n private async loadGraphicsFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem, isCanceled?: () => boolean): Promise<TileContent> {\r\n const format = this._getFormat(streamBuffer);\r\n if (undefined === isCanceled)\r\n isCanceled = () => !tile.isLoading;\r\n\r\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\r\n let reader: GltfReader | undefined;\r\n switch (format) {\r\n case TileFormat.Pnts:\r\n this._containsPointClouds = true;\r\n let graphic = await readPointCloudTileContent(streamBuffer, iModel, modelId, is3d, tile.contentRange, system);\r\n if (graphic && tile.transformToRoot && !tile.transformToRoot.isIdentity) {\r\n const transformBranch = new GraphicBranch(true);\r\n transformBranch.add(graphic);\r\n graphic = system.createBranch(transformBranch, tile.transformToRoot);\r\n }\r\n\r\n return { graphic };\r\n\r\n case TileFormat.B3dm:\r\n reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, isCanceled, this.getBatchIdMap(), this.wantDeduplicatedVertices);\r\n break;\r\n case TileFormat.I3dm:\r\n reader = I3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, isCanceled, undefined, this.wantDeduplicatedVertices);\r\n break;\r\n case TileFormat.Cmpt:\r\n const header = new CompositeTileHeader(streamBuffer);\r\n if (!header.isValid) return {};\r\n const branch = new GraphicBranch(true);\r\n for (let i = 0; i < header.tileCount; i++) {\r\n const tilePosition = streamBuffer.curPos;\r\n streamBuffer.advance(8); // Skip magic and version.\r\n const tileBytes = streamBuffer.nextUint32;\r\n streamBuffer.curPos = tilePosition;\r\n const result = await this.loadGraphicsFromStream(tile, streamBuffer, system, isCanceled);\r\n if (result.graphic)\r\n branch.add(result.graphic);\r\n streamBuffer.curPos = tilePosition + tileBytes;\r\n }\r\n return { graphic: branch.isEmpty ? undefined : system.createBranch(branch, Transform.createIdentity()), isLeaf: tile.isLeaf };\r\n\r\n default:\r\n assert(false, `unknown tile format ${format}`);\r\n break;\r\n }\r\n\r\n let content: TileContent = {};\r\n if (undefined !== reader) {\r\n try {\r\n content = await reader.read();\r\n } catch (_err) {\r\n // Failure to load should prevent us from trying to load children\r\n content.isLeaf = true;\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n\r\n public get viewFlagOverrides(): ViewFlagOverrides { return defaultViewFlagOverrides; }\r\n\r\n public static computeTileLocationPriority(tile: Tile, viewports: Iterable<Viewport>, location: Transform): number {\r\n // Compute a priority value for tiles that are:\r\n // * Closer to the eye;\r\n // * Closer to the center of attention (center of the screen or zoom target).\r\n // This way, we can load in priority tiles that are more likely to be important.\r\n let center: Point3d | undefined;\r\n let minDistance = 1.0;\r\n\r\n const currentInputState = IModelApp.toolAdmin.currentInputState;\r\n const now = Date.now();\r\n const wheelEventRelevanceTimeout = 1000; // Wheel events older than this value will not be considered\r\n\r\n for (const viewport of viewports) {\r\n center = center ?? location.multiplyPoint3d(tile.center, scratchTileCenterWorld);\r\n const npc = viewport.worldToNpc(center, scratchTileCenterView);\r\n\r\n let focusPoint = new Point2d(0.5, 0.5);\r\n\r\n if (currentInputState.viewport === viewport && viewport instanceof ScreenViewport) {\r\n // Try to get a better target point from the last zoom target\r\n const {lastWheelEvent} = currentInputState;\r\n\r\n if (lastWheelEvent !== undefined && now - lastWheelEvent.time < wheelEventRelevanceTimeout) {\r\n const focusPointCandidate = Point2d.fromJSON(viewport.worldToNpc(lastWheelEvent.point));\r\n\r\n if (focusPointCandidate.x > 0 && focusPointCandidate.x < 1 && focusPointCandidate.y > 0 && focusPointCandidate.y < 1)\r\n focusPoint = focusPointCandidate;\r\n }\r\n }\r\n\r\n // NB: In NPC coords, 0 = far plane, 1 = near plane.\r\n const distanceToEye = 1.0 - npc.z;\r\n const distanceToCenter = Math.min(npc.distanceXY(focusPoint) / 0.707, 1.0); // Math.sqrt(0.5) = 0.707\r\n\r\n // Distance is a mix of the two previously computed values, still in range [0; 1]\r\n // We use this factor to determine how much the distance to the center of attention is important compared to distance to the eye\r\n const distanceToCenterWeight = 0.3;\r\n const distance = distanceToEye * (1.0 - distanceToCenterWeight) + distanceToCenter * distanceToCenterWeight;\r\n\r\n minDistance = Math.min(distance, minDistance);\r\n }\r\n\r\n return minDistance;\r\n }\r\n}\r\n"]}
@@ -11,7 +11,6 @@ export declare class WmsMapLayerImageryProvider extends MapLayerImageryProvider
11
11
  private _allLayersRange?;
12
12
  private _subLayerRanges;
13
13
  private _baseUrl;
14
- private _isVersion1_1;
15
14
  private _crsSupport;
16
15
  constructor(settings: ImageMapLayerSettings);
17
16
  initialize(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"WmsMapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/WmsMapLayerImageryProvider.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAoC,MAAM,oBAAoB,CAAC;AAE3G,OAAO,EACL,kBAAkB,EAAqB,uBAAuB,EAAiC,MAAM,EAEtG,MAAM,gBAAgB,CAAC;AAOxB,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,gBAAgB;AAChB,qBAAa,0BAA2B,SAAQ,uBAAuB;IACrE,OAAO,CAAC,aAAa,CAAC,CAAkB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAoB;IAC5C,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAA0B;gBAEjC,QAAQ,EAAE,qBAAqB;IAKrB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA2CjD,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,+BAA+B;IAQhC,aAAa,IAAI,aAAa;IAyBxB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBpE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAoBlI"}
1
+ {"version":3,"file":"WmsMapLayerImageryProvider.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/WmsMapLayerImageryProvider.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAoC,MAAM,oBAAoB,CAAC;AAE3G,OAAO,EACL,kBAAkB,EAAqB,uBAAuB,EAAiC,MAAM,EAEtG,MAAM,gBAAgB,CAAC;AAOxB,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,gBAAgB;AAChB,qBAAa,0BAA2B,SAAQ,uBAAuB;IACrE,OAAO,CAAC,aAAa,CAAC,CAAkB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAoB;IAC5C,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO,CAAC,WAAW,CAA0B;gBAEjC,QAAQ,EAAE,qBAAqB;IAKrB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CjD,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,+BAA+B;IAQhC,aAAa,IAAI,aAAa;IAyBxB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BpE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAqBlI"}
@@ -17,8 +17,6 @@ export class WmsMapLayerImageryProvider extends MapLayerImageryProvider {
17
17
  constructor(settings) {
18
18
  super(settings, false);
19
19
  this._subLayerRanges = new Map();
20
- // eslint-disable-next-line @typescript-eslint/naming-convention
21
- this._isVersion1_1 = false;
22
20
  this._baseUrl = WmsUtilities.getBaseUrl(this._settings.url);
23
21
  }
24
22
  async initialize() {
@@ -26,7 +24,6 @@ export class WmsMapLayerImageryProvider extends MapLayerImageryProvider {
26
24
  this._capabilities = await WmsCapabilities.create(this._baseUrl);
27
25
  if (undefined !== this._capabilities) {
28
26
  this._allLayersRange = this._capabilities.cartoRange;
29
- this._isVersion1_1 = this._capabilities.version !== undefined && 0 === this._capabilities.version.indexOf("1.1");
30
27
  if (this._capabilities.layer && Array.isArray(this._capabilities.layer.subLayers)) {
31
28
  const mapCartoRanges = ((subLayer) => {
32
29
  if (Array.isArray(subLayer.children))
@@ -122,7 +119,7 @@ export class WmsMapLayerImageryProvider extends MapLayerImageryProvider {
122
119
  }
123
120
  // construct the Url from the desired Tile
124
121
  async constructUrl(row, column, zoomLevel) {
125
- var _a, _b;
122
+ var _a, _b, _c, _d, _e;
126
123
  let bboxString = "";
127
124
  let crsString = "";
128
125
  // We support 2 SRS: EPSG:3857 and EPSG:4326, we prefer EPSG:3857.
@@ -133,16 +130,20 @@ export class WmsMapLayerImageryProvider extends MapLayerImageryProvider {
133
130
  else if ((_b = this._crsSupport) === null || _b === void 0 ? void 0 : _b.support4326) {
134
131
  // The WMS 1.3.0 specification mandates using the axis ordering as defined in the EPSG database.
135
132
  // For instance, for EPSG:4326 the axis ordering is latitude/longitude, or north/east.
136
- bboxString = this.getEPSG4326ExtentString(row, column, zoomLevel, true); // lat/long ordering
137
- crsString = "EPSG%3A4326";
133
+ // WMS 1.1.0 always requires the axis ordering to be longitude/latitude. *sigh*
134
+ if (this._capabilities !== undefined) {
135
+ bboxString = this.getEPSG4326ExtentString(row, column, zoomLevel, (_c = this._capabilities) === null || _c === void 0 ? void 0 : _c.isVersion13); // lat/long ordering
136
+ crsString = "EPSG%3A4326";
137
+ }
138
138
  }
139
139
  const layerString = this.getVisibleLayerString();
140
140
  if (bboxString.length === 0 || crsString.length === 0 || layerString.length === 0)
141
141
  return "";
142
- return `${this._baseUrl}?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=${this.transparentBackgroundString}&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&CRS=${crsString}&STYLES=&BBOX=${bboxString}`;
142
+ const crsParamName = ((_d = this._capabilities) === null || _d === void 0 ? void 0 : _d.isVersion13) ? "CRS" : "SRS";
143
+ return `${this._baseUrl}?SERVICE=WMS&VERSION=${(_e = this._capabilities) === null || _e === void 0 ? void 0 : _e.version}&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=${this.transparentBackgroundString}&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&${crsParamName}=${crsString}&STYLES=&BBOX=${bboxString}`;
143
144
  }
144
145
  async getToolTip(strings, quadId, carto, tree) {
145
- var _a;
146
+ var _a, _b, _c, _d;
146
147
  await super.getToolTip(strings, quadId, carto, tree);
147
148
  const infoFormats = (_a = this._capabilities) === null || _a === void 0 ? void 0 : _a.featureInfoFormats;
148
149
  if (!doToolTips || undefined === infoFormats)
@@ -158,8 +159,9 @@ export class WmsMapLayerImageryProvider extends MapLayerImageryProvider {
158
159
  const fraction = rectangle.worldToLocal(Point2d.create(carto.longitude, carto.latitude, scratchPoint2d));
159
160
  const x = Math.floor(.5 + fraction.x * this.tileSize);
160
161
  const y = Math.floor(.5 + (1.0 - fraction.y) * this.tileSize);
161
- const coordinateString = (false && this._isVersion1_1) ? `&x=${x}&y=${y}` : `&i=${x}&j=${y}`;
162
- const getFeatureUrl = `${this._baseUrl}?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&CRS=EPSG%3A3857&BBOX=${bboxString}&QUERY_LAYERS=${layerString}${coordinateString}&info_format=${formatString}`;
162
+ const coordinateString = ((_b = this._capabilities) === null || _b === void 0 ? void 0 : _b.isVersion13) ? `&i=${x}&j=${y}` : `&x=${x}&y=${y}`;
163
+ const crsParamName = ((_c = this._capabilities) === null || _c === void 0 ? void 0 : _c.isVersion13) ? "CRS" : "SRS";
164
+ const getFeatureUrl = `${this._baseUrl}?SERVICE=WMS&VERSION=${(_d = this._capabilities) === null || _d === void 0 ? void 0 : _d.version}&REQUEST=GetFeatureInfo&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&${crsParamName}=EPSG%3A3857&BBOX=${bboxString}&QUERY_LAYERS=${layerString}${coordinateString}&info_format=${formatString}`;
163
165
  return this.toolTipFromUrl(strings, getFeatureUrl);
164
166
  }
165
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WmsMapLayerImageryProvider.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/WmsMapLayerImageryProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\nimport { IModelStatus } from \"@itwin/core-bentley\";\r\nimport { Cartographic, ImageMapLayerSettings, MapSubLayerSettings, ServerError } from \"@itwin/core-common\";\r\nimport { Point2d } from \"@itwin/core-geometry\";\r\nimport {\r\n ImageryMapTileTree, MapCartoRectangle, MapLayerImageryProvider, MapLayerImageryProviderStatus, QuadId, WmsCapabilities,\r\n WmsCapability, WmsUtilities,\r\n} from \"../../internal\";\r\n\r\n// eslint-disable-next-line prefer-const\r\nlet doToolTips = true;\r\n\r\nconst scratchPoint2d = Point2d.createZero();\r\n\r\n/** @internal */\r\nexport interface WmsCrsSupport {\r\n support3857: boolean;\r\n support4326: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class WmsMapLayerImageryProvider extends MapLayerImageryProvider {\r\n private _capabilities?: WmsCapabilities;\r\n private _allLayersRange?: MapCartoRectangle;\r\n private _subLayerRanges = new Map<string, MapCartoRectangle>();\r\n private _baseUrl: string;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private _isVersion1_1 = false;\r\n private _crsSupport: WmsCrsSupport|undefined;\r\n\r\n constructor(settings: ImageMapLayerSettings) {\r\n super(settings, false);\r\n this._baseUrl = WmsUtilities.getBaseUrl(this._settings.url);\r\n }\r\n\r\n public override async initialize(): Promise<void> {\r\n try {\r\n this._capabilities = await WmsCapabilities.create(this._baseUrl);\r\n if (undefined !== this._capabilities) {\r\n this._allLayersRange = this._capabilities.cartoRange;\r\n this._isVersion1_1 = this._capabilities.version !== undefined && 0 === this._capabilities.version.indexOf(\"1.1\");\r\n if (this._capabilities.layer && Array.isArray(this._capabilities.layer.subLayers)) {\r\n const mapCartoRanges = ((subLayer: WmsCapability.SubLayer) => {\r\n if (Array.isArray(subLayer.children))\r\n subLayer.children.forEach((child) => mapCartoRanges(child));\r\n else if (subLayer.cartoRange)\r\n this._subLayerRanges.set(subLayer.name, subLayer.cartoRange);\r\n });\r\n this._capabilities.layer.subLayers.forEach((subLayer) => mapCartoRanges(subLayer));\r\n this._settings.subLayers.forEach((subLayer) => {\r\n if (subLayer.isNamed && this._settings.isSubLayerVisible(subLayer)) {\r\n const subLayerRange = this._subLayerRanges.get(subLayer.name);\r\n if (subLayerRange)\r\n if (this.cartoRange)\r\n this.cartoRange.extendRange(subLayerRange);\r\n else\r\n this.cartoRange = subLayerRange.clone();\r\n }\r\n });\r\n }\r\n\r\n if (!this.cartoRange)\r\n this.cartoRange = this._allLayersRange;\r\n\r\n this._crsSupport = this.getCrsSupport();\r\n }\r\n } catch (error: any) {\r\n // Don't throw error if unauthorized status:\r\n // We want the tile tree to be created, so that end-user can get feedback on which layer is missing credentials.\r\n // When credentials will be provided, a new provider will be created, and initialization should be fine.\r\n if (error?.status === 401) {\r\n this.setStatus(MapLayerImageryProviderStatus.RequireAuth);\r\n } else {\r\n throw new ServerError(IModelStatus.ValidationFailed, \"\");\r\n }\r\n }\r\n }\r\n\r\n private getVisibleLayerString() {\r\n const layerNames = this.getVisibleLayers().map((layer)=>layer.name);\r\n return layerNames.join(\"%2C\");\r\n }\r\n\r\n private getVisibleLayers(): MapSubLayerSettings[] {\r\n return this._settings.subLayers.filter((subLayer) => this._settings.isSubLayerVisible(subLayer) && subLayer.isNamed);\r\n }\r\n\r\n private getVisibleLayersSrs() {\r\n const visibleLayers = this.getVisibleLayers();\r\n const visibleLayerNames = visibleLayers.map((layer) => layer.name);\r\n return this._capabilities?.getSubLayersCrs(visibleLayerNames);\r\n }\r\n\r\n private getQueryableLayers(): string[] {\r\n const layerNames = new Array<string>();\r\n const getQueryableSubLayers = ((subLayer: WmsCapability.SubLayer) => {\r\n if (!subLayer)\r\n return;\r\n\r\n if (subLayer.queryable)\r\n layerNames.push(subLayer.name);\r\n\r\n subLayer.children?.forEach((childSubLayer) => { getQueryableSubLayers(childSubLayer); });\r\n });\r\n this._capabilities?.layer?.subLayers?.forEach((subLayer) => { getQueryableSubLayers(subLayer); });\r\n return layerNames;\r\n }\r\n\r\n private getVisibleQueryableLayersString(): string {\r\n const layers = new Array<string>();\r\n const queryable = this.getQueryableLayers();\r\n const visibleLayerNames = this.getVisibleLayers().map((layer) => layer.name);\r\n queryable.forEach((layer: string) => { if (visibleLayerNames.includes(layer)) layers.push(layer); });\r\n return layers.join(\"%2C\");\r\n }\r\n\r\n public getCrsSupport(): WmsCrsSupport {\r\n const layersCrs = this.getVisibleLayersSrs();\r\n\r\n let support3857: boolean|undefined;\r\n let support4326: boolean|undefined;\r\n if (layersCrs) {\r\n for (const [_layerName, crs] of layersCrs) {\r\n if (crs.find((layerCrs) => {return layerCrs.includes(\"3857\");}) === undefined ) {\r\n support3857 = false;\r\n } else if (support3857 === undefined) {\r\n support3857 = true;\r\n }\r\n\r\n if (crs.find((layerCrs) => {return layerCrs.includes(\"4326\");}) === undefined ) {\r\n support4326 = false;\r\n } else if (support4326 === undefined) {\r\n support4326 = true;\r\n }\r\n }\r\n }\r\n\r\n return {support3857: support3857 ?? false, support4326: support4326 ?? false};\r\n }\r\n\r\n // construct the Url from the desired Tile\r\n public async constructUrl(row: number, column: number, zoomLevel: number): Promise<string> {\r\n\r\n let bboxString =\"\";\r\n let crsString =\"\";\r\n\r\n // We support 2 SRS: EPSG:3857 and EPSG:4326, we prefer EPSG:3857.\r\n if (this._crsSupport?.support3857) {\r\n bboxString = this.getEPSG3857ExtentString(row, column, zoomLevel);\r\n crsString= \"EPSG%3A3857\";\r\n } else if (this._crsSupport?.support4326) {\r\n // The WMS 1.3.0 specification mandates using the axis ordering as defined in the EPSG database.\r\n // For instance, for EPSG:4326 the axis ordering is latitude/longitude, or north/east.\r\n bboxString = this.getEPSG4326ExtentString(row, column, zoomLevel, true); // lat/long ordering\r\n crsString= \"EPSG%3A4326\";\r\n }\r\n\r\n const layerString = this.getVisibleLayerString();\r\n\r\n if (bboxString.length === 0 || crsString.length === 0 ||layerString.length === 0)\r\n return \"\";\r\n\r\n return `${this._baseUrl}?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=${this.transparentBackgroundString}&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&CRS=${crsString}&STYLES=&BBOX=${bboxString}`;\r\n }\r\n\r\n public override async getToolTip(strings: string[], quadId: QuadId, carto: Cartographic, tree: ImageryMapTileTree): Promise<void> {\r\n await super.getToolTip(strings, quadId, carto, tree);\r\n const infoFormats = this._capabilities?.featureInfoFormats;\r\n if (!doToolTips || undefined === infoFormats)\r\n return;\r\n let formatString = infoFormats.find((format) => format === \"text/html\");\r\n if (!formatString) formatString = infoFormats[0];\r\n\r\n const bboxString = this.getEPSG3857ExtentString(quadId.row, quadId.column, quadId.level);\r\n const layerString = this.getVisibleQueryableLayersString();\r\n if (layerString.length === 0)\r\n return;\r\n const rectangle = tree.getTileRectangle(quadId);\r\n const fraction = rectangle.worldToLocal(Point2d.create(carto.longitude, carto.latitude, scratchPoint2d))!;\r\n const x = Math.floor(.5 + fraction.x * this.tileSize);\r\n const y = Math.floor(.5 + (1.0 - fraction.y) * this.tileSize);\r\n const coordinateString = (false && this._isVersion1_1) ? `&x=${x}&y=${y}` : `&i=${x}&j=${y}`;\r\n const getFeatureUrl = `${this._baseUrl}?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetFeatureInfo&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&CRS=EPSG%3A3857&BBOX=${bboxString}&QUERY_LAYERS=${layerString}${coordinateString}&info_format=${formatString}`;\r\n return this.toolTipFromUrl(strings, getFeatureUrl);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"WmsMapLayerImageryProvider.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/WmsMapLayerImageryProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\nimport { IModelStatus } from \"@itwin/core-bentley\";\r\nimport { Cartographic, ImageMapLayerSettings, MapSubLayerSettings, ServerError } from \"@itwin/core-common\";\r\nimport { Point2d } from \"@itwin/core-geometry\";\r\nimport {\r\n ImageryMapTileTree, MapCartoRectangle, MapLayerImageryProvider, MapLayerImageryProviderStatus, QuadId, WmsCapabilities,\r\n WmsCapability, WmsUtilities,\r\n} from \"../../internal\";\r\n\r\n// eslint-disable-next-line prefer-const\r\nlet doToolTips = true;\r\n\r\nconst scratchPoint2d = Point2d.createZero();\r\n\r\n/** @internal */\r\nexport interface WmsCrsSupport {\r\n support3857: boolean;\r\n support4326: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport class WmsMapLayerImageryProvider extends MapLayerImageryProvider {\r\n private _capabilities?: WmsCapabilities;\r\n private _allLayersRange?: MapCartoRectangle;\r\n private _subLayerRanges = new Map<string, MapCartoRectangle>();\r\n private _baseUrl: string;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private _crsSupport: WmsCrsSupport|undefined;\r\n\r\n constructor(settings: ImageMapLayerSettings) {\r\n super(settings, false);\r\n this._baseUrl = WmsUtilities.getBaseUrl(this._settings.url);\r\n }\r\n\r\n public override async initialize(): Promise<void> {\r\n try {\r\n this._capabilities = await WmsCapabilities.create(this._baseUrl);\r\n if (undefined !== this._capabilities) {\r\n this._allLayersRange = this._capabilities.cartoRange;\r\n if (this._capabilities.layer && Array.isArray(this._capabilities.layer.subLayers)) {\r\n const mapCartoRanges = ((subLayer: WmsCapability.SubLayer) => {\r\n if (Array.isArray(subLayer.children))\r\n subLayer.children.forEach((child) => mapCartoRanges(child));\r\n else if (subLayer.cartoRange)\r\n this._subLayerRanges.set(subLayer.name, subLayer.cartoRange);\r\n });\r\n this._capabilities.layer.subLayers.forEach((subLayer) => mapCartoRanges(subLayer));\r\n this._settings.subLayers.forEach((subLayer) => {\r\n if (subLayer.isNamed && this._settings.isSubLayerVisible(subLayer)) {\r\n const subLayerRange = this._subLayerRanges.get(subLayer.name);\r\n if (subLayerRange)\r\n if (this.cartoRange)\r\n this.cartoRange.extendRange(subLayerRange);\r\n else\r\n this.cartoRange = subLayerRange.clone();\r\n }\r\n });\r\n }\r\n\r\n if (!this.cartoRange)\r\n this.cartoRange = this._allLayersRange;\r\n\r\n this._crsSupport = this.getCrsSupport();\r\n }\r\n } catch (error: any) {\r\n // Don't throw error if unauthorized status:\r\n // We want the tile tree to be created, so that end-user can get feedback on which layer is missing credentials.\r\n // When credentials will be provided, a new provider will be created, and initialization should be fine.\r\n if (error?.status === 401) {\r\n this.setStatus(MapLayerImageryProviderStatus.RequireAuth);\r\n } else {\r\n throw new ServerError(IModelStatus.ValidationFailed, \"\");\r\n }\r\n }\r\n }\r\n\r\n private getVisibleLayerString() {\r\n const layerNames = this.getVisibleLayers().map((layer)=>layer.name);\r\n return layerNames.join(\"%2C\");\r\n }\r\n\r\n private getVisibleLayers(): MapSubLayerSettings[] {\r\n return this._settings.subLayers.filter((subLayer) => this._settings.isSubLayerVisible(subLayer) && subLayer.isNamed);\r\n }\r\n\r\n private getVisibleLayersSrs() {\r\n const visibleLayers = this.getVisibleLayers();\r\n const visibleLayerNames = visibleLayers.map((layer) => layer.name);\r\n return this._capabilities?.getSubLayersCrs(visibleLayerNames);\r\n }\r\n\r\n private getQueryableLayers(): string[] {\r\n const layerNames = new Array<string>();\r\n const getQueryableSubLayers = ((subLayer: WmsCapability.SubLayer) => {\r\n if (!subLayer)\r\n return;\r\n\r\n if (subLayer.queryable)\r\n layerNames.push(subLayer.name);\r\n\r\n subLayer.children?.forEach((childSubLayer) => { getQueryableSubLayers(childSubLayer); });\r\n });\r\n this._capabilities?.layer?.subLayers?.forEach((subLayer) => { getQueryableSubLayers(subLayer); });\r\n return layerNames;\r\n }\r\n\r\n private getVisibleQueryableLayersString(): string {\r\n const layers = new Array<string>();\r\n const queryable = this.getQueryableLayers();\r\n const visibleLayerNames = this.getVisibleLayers().map((layer) => layer.name);\r\n queryable.forEach((layer: string) => { if (visibleLayerNames.includes(layer)) layers.push(layer); });\r\n return layers.join(\"%2C\");\r\n }\r\n\r\n public getCrsSupport(): WmsCrsSupport {\r\n const layersCrs = this.getVisibleLayersSrs();\r\n\r\n let support3857: boolean|undefined;\r\n let support4326: boolean|undefined;\r\n if (layersCrs) {\r\n for (const [_layerName, crs] of layersCrs) {\r\n if (crs.find((layerCrs) => {return layerCrs.includes(\"3857\");}) === undefined ) {\r\n support3857 = false;\r\n } else if (support3857 === undefined) {\r\n support3857 = true;\r\n }\r\n\r\n if (crs.find((layerCrs) => {return layerCrs.includes(\"4326\");}) === undefined ) {\r\n support4326 = false;\r\n } else if (support4326 === undefined) {\r\n support4326 = true;\r\n }\r\n }\r\n }\r\n\r\n return {support3857: support3857 ?? false, support4326: support4326 ?? false};\r\n }\r\n\r\n // construct the Url from the desired Tile\r\n public async constructUrl(row: number, column: number, zoomLevel: number): Promise<string> {\r\n\r\n let bboxString =\"\";\r\n let crsString =\"\";\r\n\r\n // We support 2 SRS: EPSG:3857 and EPSG:4326, we prefer EPSG:3857.\r\n if (this._crsSupport?.support3857) {\r\n bboxString = this.getEPSG3857ExtentString(row, column, zoomLevel);\r\n crsString= \"EPSG%3A3857\";\r\n } else if (this._crsSupport?.support4326) {\r\n // The WMS 1.3.0 specification mandates using the axis ordering as defined in the EPSG database.\r\n // For instance, for EPSG:4326 the axis ordering is latitude/longitude, or north/east.\r\n // WMS 1.1.0 always requires the axis ordering to be longitude/latitude. *sigh*\r\n if (this._capabilities !== undefined) {\r\n bboxString = this.getEPSG4326ExtentString(row, column, zoomLevel, this._capabilities?.isVersion13); // lat/long ordering\r\n crsString= \"EPSG%3A4326\";\r\n }\r\n\r\n }\r\n\r\n const layerString = this.getVisibleLayerString();\r\n\r\n if (bboxString.length === 0 || crsString.length === 0 ||layerString.length === 0)\r\n return \"\";\r\n\r\n const crsParamName = this._capabilities?.isVersion13 ? \"CRS\" : \"SRS\";\r\n return `${this._baseUrl}?SERVICE=WMS&VERSION=${this._capabilities?.version}&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=${this.transparentBackgroundString}&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&${crsParamName}=${crsString}&STYLES=&BBOX=${bboxString}`;\r\n }\r\n\r\n public override async getToolTip(strings: string[], quadId: QuadId, carto: Cartographic, tree: ImageryMapTileTree): Promise<void> {\r\n await super.getToolTip(strings, quadId, carto, tree);\r\n const infoFormats = this._capabilities?.featureInfoFormats;\r\n if (!doToolTips || undefined === infoFormats)\r\n return;\r\n let formatString = infoFormats.find((format) => format === \"text/html\");\r\n if (!formatString) formatString = infoFormats[0];\r\n\r\n const bboxString = this.getEPSG3857ExtentString(quadId.row, quadId.column, quadId.level);\r\n const layerString = this.getVisibleQueryableLayersString();\r\n if (layerString.length === 0)\r\n return;\r\n const rectangle = tree.getTileRectangle(quadId);\r\n const fraction = rectangle.worldToLocal(Point2d.create(carto.longitude, carto.latitude, scratchPoint2d))!;\r\n const x = Math.floor(.5 + fraction.x * this.tileSize);\r\n const y = Math.floor(.5 + (1.0 - fraction.y) * this.tileSize);\r\n const coordinateString = this._capabilities?.isVersion13 ? `&i=${x}&j=${y}` : `&x=${x}&y=${y}`;\r\n const crsParamName = this._capabilities?.isVersion13 ? \"CRS\" : \"SRS\";\r\n const getFeatureUrl = `${this._baseUrl}?SERVICE=WMS&VERSION=${this._capabilities?.version}&REQUEST=GetFeatureInfo&LAYERS=${layerString}&WIDTH=${this.tileSize}&HEIGHT=${this.tileSize}&${crsParamName}=EPSG%3A3857&BBOX=${bboxString}&QUERY_LAYERS=${layerString}${coordinateString}&info_format=${formatString}`;\r\n return this.toolTipFromUrl(strings, getFeatureUrl);\r\n }\r\n}\r\n"]}
@@ -24,7 +24,7 @@ export declare namespace WmsCapability {
24
24
  readonly cartoRange?: MapCartoRectangle;
25
25
  readonly subLayers: SubLayer[];
26
26
  private static readonly PREFIX_SEPARATOR;
27
- constructor(_json: any);
27
+ constructor(json: any, capabilities: WmsCapabilities);
28
28
  getSubLayers(visible?: boolean): MapSubLayerProps[];
29
29
  getSubLayersCrs(layerNameFilter: string[]): Map<string, string[]>;
30
30
  }
@@ -38,7 +38,7 @@ export declare namespace WmsCapability {
38
38
  readonly cartoRange?: MapCartoRectangle;
39
39
  readonly children?: SubLayer[];
40
40
  readonly queryable: boolean;
41
- constructor(_json: any, parent?: SubLayer | undefined);
41
+ constructor(_json: any, capabilities: WmsCapabilities, parent?: SubLayer | undefined);
42
42
  }
43
43
  }
44
44
  /** @internal */
@@ -47,6 +47,7 @@ export declare class WmsCapabilities {
47
47
  private static _capabilitiesCache;
48
48
  readonly service: WmsCapability.Service;
49
49
  readonly version?: string;
50
+ readonly isVersion13: boolean;
50
51
  readonly layer?: WmsCapability.Layer;
51
52
  get json(): any;
52
53
  get maxLevel(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"WmsCapabilities.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/WmsCapabilities.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAW,uBAAuB,EAAkB,MAAM,uBAAuB,CAAC;AAEzF,OAAO,EAAE,iBAAiB,EAAgB,MAAM,aAAa,CAAC;AA0C9D;;GAEG;AACH,yBAAiB,aAAa,CAAC;IAE7B,MAAa,OAAO;QAClB,SAAgB,IAAI,EAAE,MAAM,CAAC;QAC7B,SAAgB,KAAK,CAAC,EAAE,MAAM,CAAC;QAC/B,SAAgB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClC,SAAgB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxC,SAAgB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5C,SAAgB,iBAAiB,CAAC,EAAE,MAAM,CAAC;oBAE/B,IAAI,EAAE,GAAG;KAQtB;IAED,MAAa,KAAK;QAChB,SAAgB,SAAS,EAAE,OAAO,CAAC;QACnC,SAAgB,KAAK,CAAC,EAAE,MAAM,CAAC;QAC/B,SAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,SAAgB,UAAU,CAAC,EAAE,iBAAiB,CAAC;QAC/C,SAAgB,SAAS,aAAyB;QAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAO;oBAEnC,KAAK,EAAE,GAAG;QAQf,YAAY,CAAC,OAAO,UAAO,GAAG,gBAAgB,EAAE;QAiDhD,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;KAiBzE;IAED,gBAAgB;IAChB,MAAa,QAAQ;iBAQ4B,MAAM,CAAC;QAPtD,SAAgB,IAAI,EAAE,MAAM,CAAC;QAC7B,SAAgB,KAAK,EAAE,MAAM,CAAC;QAC9B,SAAgB,GAAG,EAAE,MAAM,EAAE,CAAC;QAC9B,SAAgB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjC,SAAgB,UAAU,CAAC,EAAE,iBAAiB,CAAC;QAC/C,SAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;QACtC,SAAgB,SAAS,EAAE,OAAO,CAAC;oBAChB,KAAK,EAAE,GAAG,EAAkB,MAAM,CAAC,sBAAU;KA2BjE;CACF;AAED,gBAAgB;AAChB,qBAAa,eAAe;IAUd,OAAO,CAAC,KAAK;IATzB,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAkD;IACnF,SAAgB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;IAC/C,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjC,SAAgB,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC;IAC5C,IAAW,IAAI,QAAyB;IACxC,IAAW,QAAQ,IAAI,MAAM,CAA2D;IACxF,IAAW,UAAU,IAAI,iBAAiB,GAAG,SAAS,CAAmC;IACzF,IAAW,oBAAoB,YAA2E;IAC1G,IAAW,kBAAkB,IAAI,MAAM,EAAE,GAAG,SAAS,CAAuJ;gBACxL,KAAK,EAAE,GAAG;WAOV,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAiBpI,YAAY,CAAC,OAAO,UAAO,GAAG,SAAS,GAAG,gBAAgB,EAAE;IAI5D,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAC,SAAS;CAGjF"}
1
+ {"version":3,"file":"WmsCapabilities.d.ts","sourceRoot":"","sources":["../../../../src/tile/map/WmsCapabilities.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAW,uBAAuB,EAAkB,MAAM,uBAAuB,CAAC;AAEzF,OAAO,EAAE,iBAAiB,EAAgB,MAAM,aAAa,CAAC;AA0C9D;;GAEG;AACH,yBAAiB,aAAa,CAAC;IAE7B,MAAa,OAAO;QAClB,SAAgB,IAAI,EAAE,MAAM,CAAC;QAC7B,SAAgB,KAAK,CAAC,EAAE,MAAM,CAAC;QAC/B,SAAgB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClC,SAAgB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxC,SAAgB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5C,SAAgB,iBAAiB,CAAC,EAAE,MAAM,CAAC;oBAE/B,IAAI,EAAE,GAAG;KAQtB;IAED,MAAa,KAAK;QAChB,SAAgB,SAAS,EAAE,OAAO,CAAC;QACnC,SAAgB,KAAK,CAAC,EAAE,MAAM,CAAC;QAC/B,SAAgB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,SAAgB,UAAU,CAAC,EAAE,iBAAiB,CAAC;QAC/C,SAAgB,SAAS,aAAyB;QAClD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAO;oBAEnC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,eAAe;QAO7C,YAAY,CAAC,OAAO,UAAO,GAAG,gBAAgB,EAAE;QAiDhD,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;KAiBzE;IAED,gBAAgB;IAChB,MAAa,QAAQ;iBAQ2D,MAAM,CAAC;QAPrF,SAAgB,IAAI,EAAE,MAAM,CAAC;QAC7B,SAAgB,KAAK,EAAE,MAAM,CAAC;QAC9B,SAAgB,GAAG,EAAE,MAAM,EAAE,CAAC;QAC9B,SAAgB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjC,SAAgB,UAAU,CAAC,EAAE,iBAAiB,CAAC;QAC/C,SAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;QACtC,SAAgB,SAAS,EAAE,OAAO,CAAC;oBAChB,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,eAAe,EAAkB,MAAM,CAAC,sBAAU;KA2BhG;CACF;AAED,gBAAgB;AAChB,qBAAa,eAAe;IAWd,OAAO,CAAC,KAAK;IAVzB,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAkD;IACnF,SAAgB,OAAO,EAAE,aAAa,CAAC,OAAO,CAAC;IAC/C,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjC,SAAgB,WAAW,EAAE,OAAO,CAAC;IACrC,SAAgB,KAAK,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC;IAC5C,IAAW,IAAI,QAAyB;IACxC,IAAW,QAAQ,IAAI,MAAM,CAA2D;IACxF,IAAW,UAAU,IAAI,iBAAiB,GAAG,SAAS,CAAmC;IACzF,IAAW,oBAAoB,YAA2E;IAC1G,IAAW,kBAAkB,IAAI,MAAM,EAAE,GAAG,SAAS,CAAuJ;gBACxL,KAAK,EAAE,GAAG;WAQV,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,uBAAuB,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAiBpI,YAAY,CAAC,OAAO,UAAO,GAAG,SAAS,GAAG,gBAAgB,EAAE;IAI5D,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAC,SAAS;CAGjF"}
@@ -63,13 +63,13 @@ export var WmsCapability;
63
63
  }
64
64
  WmsCapability.Service = Service;
65
65
  class Layer {
66
- constructor(_json) {
66
+ constructor(json, capabilities) {
67
67
  this.subLayers = new Array();
68
- this.queryable = _json.queryable;
69
- this.title = _json.title;
70
- this.srs = initArray(_json.SRS);
71
- this.cartoRange = rangeFromJSON(_json);
72
- this.subLayers.push(new SubLayer(_json));
68
+ this.queryable = json.queryable;
69
+ this.title = json.title;
70
+ this.srs = initArray(capabilities.isVersion13 ? json.CRS : json.SRS);
71
+ this.cartoRange = rangeFromJSON(json);
72
+ this.subLayers.push(new SubLayer(json, capabilities));
73
73
  }
74
74
  getSubLayers(visible = true) {
75
75
  var _a;
@@ -138,7 +138,7 @@ export var WmsCapability;
138
138
  WmsCapability.Layer = Layer;
139
139
  /** @internal */
140
140
  class SubLayer {
141
- constructor(_json, parent) {
141
+ constructor(_json, capabilities, parent) {
142
142
  this.parent = parent;
143
143
  const getParentCrs = (parentLayer, crsSet) => {
144
144
  parentLayer.crs.forEach((parentCrs) => crsSet.add(parentCrs));
@@ -150,7 +150,7 @@ export var WmsCapability;
150
150
  this.title = _json.Title;
151
151
  this.queryable = _json.queryable ? true : false;
152
152
  this.cartoRange = rangeFromJSON(_json);
153
- this.ownCrs = _json.CRS;
153
+ this.ownCrs = capabilities.isVersion13 ? _json.CRS : _json.SRS;
154
154
  const crs = new Set(this.ownCrs);
155
155
  if (parent) {
156
156
  getParentCrs(parent, crs);
@@ -159,7 +159,7 @@ export var WmsCapability;
159
159
  if (Array.isArray(_json.Layer)) {
160
160
  this.children = new Array();
161
161
  for (const childLayer of _json.Layer) {
162
- this.children.push(new SubLayer(childLayer, this));
162
+ this.children.push(new SubLayer(childLayer, capabilities, this));
163
163
  }
164
164
  }
165
165
  }
@@ -171,9 +171,10 @@ export class WmsCapabilities {
171
171
  constructor(_json) {
172
172
  this._json = _json;
173
173
  this.version = _json.version;
174
+ this.isVersion13 = _json.version !== undefined && 0 === _json.version.indexOf("1.3");
174
175
  this.service = new WmsCapability.Service(_json.Service);
175
176
  if (_json.Capability)
176
- this.layer = new WmsCapability.Layer(_json.Capability.Layer);
177
+ this.layer = new WmsCapability.Layer(_json.Capability.Layer, this);
177
178
  }
178
179
  get json() { return this._json; }
179
180
  get maxLevel() { return this.layer ? this.layer.subLayers.length : -1; }