@itwin/core-frontend 3.3.0-dev.4 → 3.3.0-dev.40

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 (218) hide show
  1. package/CHANGELOG.md +49 -1
  2. package/lib/cjs/AccuSnap.d.ts.map +1 -1
  3. package/lib/cjs/AccuSnap.js +56 -49
  4. package/lib/cjs/AccuSnap.js.map +1 -1
  5. package/lib/cjs/DisplayStyleState.d.ts +68 -17
  6. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  7. package/lib/cjs/DisplayStyleState.js +66 -20
  8. package/lib/cjs/DisplayStyleState.js.map +1 -1
  9. package/lib/cjs/IModelApp.d.ts.map +1 -1
  10. package/lib/cjs/IModelApp.js +1 -1
  11. package/lib/cjs/IModelApp.js.map +1 -1
  12. package/lib/cjs/TentativePoint.js +1 -1
  13. package/lib/cjs/TentativePoint.js.map +1 -1
  14. package/lib/cjs/ViewRect.d.ts +5 -3
  15. package/lib/cjs/ViewRect.d.ts.map +1 -1
  16. package/lib/cjs/ViewRect.js +11 -7
  17. package/lib/cjs/ViewRect.js.map +1 -1
  18. package/lib/cjs/Viewport.d.ts +1 -1
  19. package/lib/cjs/Viewport.d.ts.map +1 -1
  20. package/lib/cjs/Viewport.js +2 -2
  21. package/lib/cjs/Viewport.js.map +1 -1
  22. package/lib/cjs/extension/ExtensionAdmin.d.ts +5 -2
  23. package/lib/cjs/extension/ExtensionAdmin.d.ts.map +1 -1
  24. package/lib/cjs/extension/ExtensionAdmin.js +24 -6
  25. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  26. package/lib/cjs/extension/ExtensionRuntime.js +165 -158
  27. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  28. package/lib/cjs/extension/providers/ExtensionServiceClient.d.ts +8 -6
  29. package/lib/cjs/extension/providers/ExtensionServiceClient.d.ts.map +1 -1
  30. package/lib/cjs/extension/providers/ExtensionServiceClient.js +13 -6
  31. package/lib/cjs/extension/providers/ExtensionServiceClient.js.map +1 -1
  32. package/lib/cjs/extension/providers/RemoteExtensionProvider.d.ts +0 -2
  33. package/lib/cjs/extension/providers/RemoteExtensionProvider.d.ts.map +1 -1
  34. package/lib/cjs/extension/providers/RemoteExtensionProvider.js +9 -22
  35. package/lib/cjs/extension/providers/RemoteExtensionProvider.js.map +1 -1
  36. package/lib/cjs/extension/providers/ServiceExtensionProvider.d.ts +7 -6
  37. package/lib/cjs/extension/providers/ServiceExtensionProvider.d.ts.map +1 -1
  38. package/lib/cjs/extension/providers/ServiceExtensionProvider.js +13 -24
  39. package/lib/cjs/extension/providers/ServiceExtensionProvider.js.map +1 -1
  40. package/lib/cjs/render/RenderSystem.d.ts +5 -0
  41. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  42. package/lib/cjs/render/RenderSystem.js.map +1 -1
  43. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.d.ts.map +1 -1
  44. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +3 -1
  45. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  46. package/lib/cjs/render/webgl/ShaderProgram.js +1 -1
  47. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  48. package/lib/cjs/render/webgl/Target.d.ts +1 -1
  49. package/lib/cjs/render/webgl/Target.js +2 -2
  50. package/lib/cjs/render/webgl/Target.js.map +1 -1
  51. package/lib/cjs/render/webgl/UniformHandle.d.ts +2 -1
  52. package/lib/cjs/render/webgl/UniformHandle.d.ts.map +1 -1
  53. package/lib/cjs/render/webgl/UniformHandle.js +15 -3
  54. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  55. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  56. package/lib/cjs/render/webgl/glsl/RealityMesh.js +5 -2
  57. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  58. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  59. package/lib/cjs/tile/RealityModelTileTree.js +2 -1
  60. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  61. package/lib/cjs/tile/map/CesiumTerrainProvider.js +6 -2
  62. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  63. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +1 -1
  64. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  65. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +51 -4
  66. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  67. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +1 -1
  68. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
  69. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js +5 -2
  70. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  71. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts +1 -1
  72. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  73. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +2 -2
  74. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  75. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +1 -1
  76. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  77. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +5 -2
  78. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  79. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -2
  80. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  81. package/lib/cjs/tile/map/ImageryTileTree.js +6 -2
  82. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  83. package/lib/cjs/tile/map/MapCartoRectangle.d.ts +1 -0
  84. package/lib/cjs/tile/map/MapCartoRectangle.d.ts.map +1 -1
  85. package/lib/cjs/tile/map/MapCartoRectangle.js +1 -0
  86. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  87. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +2 -1
  88. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  89. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  90. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +3 -1
  91. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  92. package/lib/cjs/tile/map/MapLayerImageryProvider.js +24 -10
  93. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  94. package/lib/cjs/tile/map/MapLayerSources.d.ts +14 -9
  95. package/lib/cjs/tile/map/MapLayerSources.d.ts.map +1 -1
  96. package/lib/cjs/tile/map/MapLayerSources.js +14 -6
  97. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  98. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  99. package/lib/cjs/tile/map/MapTileTree.js +3 -5
  100. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  101. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +2 -1
  102. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  103. package/lib/cjs/tile/map/TerrainMeshProvider.js +1 -1
  104. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  105. package/lib/cjs/tools/PrimitiveTool.js +4 -4
  106. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  107. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  108. package/lib/cjs/tools/ToolAdmin.js +25 -10
  109. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  110. package/lib/esm/AccuSnap.d.ts.map +1 -1
  111. package/lib/esm/AccuSnap.js +56 -49
  112. package/lib/esm/AccuSnap.js.map +1 -1
  113. package/lib/esm/DisplayStyleState.d.ts +68 -17
  114. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  115. package/lib/esm/DisplayStyleState.js +66 -20
  116. package/lib/esm/DisplayStyleState.js.map +1 -1
  117. package/lib/esm/IModelApp.d.ts.map +1 -1
  118. package/lib/esm/IModelApp.js +2 -2
  119. package/lib/esm/IModelApp.js.map +1 -1
  120. package/lib/esm/TentativePoint.js +1 -1
  121. package/lib/esm/TentativePoint.js.map +1 -1
  122. package/lib/esm/ViewRect.d.ts +5 -3
  123. package/lib/esm/ViewRect.d.ts.map +1 -1
  124. package/lib/esm/ViewRect.js +11 -7
  125. package/lib/esm/ViewRect.js.map +1 -1
  126. package/lib/esm/Viewport.d.ts +1 -1
  127. package/lib/esm/Viewport.d.ts.map +1 -1
  128. package/lib/esm/Viewport.js +2 -2
  129. package/lib/esm/Viewport.js.map +1 -1
  130. package/lib/esm/extension/ExtensionAdmin.d.ts +5 -2
  131. package/lib/esm/extension/ExtensionAdmin.d.ts.map +1 -1
  132. package/lib/esm/extension/ExtensionAdmin.js +24 -6
  133. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  134. package/lib/esm/extension/ExtensionRuntime.js +168 -161
  135. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  136. package/lib/esm/extension/providers/ExtensionServiceClient.d.ts +8 -6
  137. package/lib/esm/extension/providers/ExtensionServiceClient.d.ts.map +1 -1
  138. package/lib/esm/extension/providers/ExtensionServiceClient.js +13 -6
  139. package/lib/esm/extension/providers/ExtensionServiceClient.js.map +1 -1
  140. package/lib/esm/extension/providers/RemoteExtensionProvider.d.ts +0 -2
  141. package/lib/esm/extension/providers/RemoteExtensionProvider.d.ts.map +1 -1
  142. package/lib/esm/extension/providers/RemoteExtensionProvider.js +9 -22
  143. package/lib/esm/extension/providers/RemoteExtensionProvider.js.map +1 -1
  144. package/lib/esm/extension/providers/ServiceExtensionProvider.d.ts +7 -6
  145. package/lib/esm/extension/providers/ServiceExtensionProvider.d.ts.map +1 -1
  146. package/lib/esm/extension/providers/ServiceExtensionProvider.js +13 -24
  147. package/lib/esm/extension/providers/ServiceExtensionProvider.js.map +1 -1
  148. package/lib/esm/render/RenderSystem.d.ts +5 -0
  149. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  150. package/lib/esm/render/RenderSystem.js.map +1 -1
  151. package/lib/esm/render/primitives/geometry/GeometryListBuilder.d.ts.map +1 -1
  152. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +3 -1
  153. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  154. package/lib/esm/render/webgl/ShaderProgram.js +1 -1
  155. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  156. package/lib/esm/render/webgl/Target.d.ts +1 -1
  157. package/lib/esm/render/webgl/Target.js +2 -2
  158. package/lib/esm/render/webgl/Target.js.map +1 -1
  159. package/lib/esm/render/webgl/UniformHandle.d.ts +2 -1
  160. package/lib/esm/render/webgl/UniformHandle.d.ts.map +1 -1
  161. package/lib/esm/render/webgl/UniformHandle.js +15 -3
  162. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  163. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  164. package/lib/esm/render/webgl/glsl/RealityMesh.js +5 -2
  165. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  166. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  167. package/lib/esm/tile/RealityModelTileTree.js +2 -1
  168. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  169. package/lib/esm/tile/map/CesiumTerrainProvider.js +6 -2
  170. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  171. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +1 -1
  172. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  173. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +51 -4
  174. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  175. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +1 -1
  176. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
  177. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js +5 -2
  178. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  179. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts +1 -1
  180. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  181. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +2 -2
  182. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  183. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +1 -1
  184. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  185. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +5 -2
  186. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  187. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -2
  188. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  189. package/lib/esm/tile/map/ImageryTileTree.js +6 -2
  190. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  191. package/lib/esm/tile/map/MapCartoRectangle.d.ts +1 -0
  192. package/lib/esm/tile/map/MapCartoRectangle.d.ts.map +1 -1
  193. package/lib/esm/tile/map/MapCartoRectangle.js +1 -0
  194. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  195. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +2 -1
  196. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  197. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  198. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +3 -1
  199. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  200. package/lib/esm/tile/map/MapLayerImageryProvider.js +25 -11
  201. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  202. package/lib/esm/tile/map/MapLayerSources.d.ts +14 -9
  203. package/lib/esm/tile/map/MapLayerSources.d.ts.map +1 -1
  204. package/lib/esm/tile/map/MapLayerSources.js +14 -6
  205. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  206. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  207. package/lib/esm/tile/map/MapTileTree.js +3 -5
  208. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  209. package/lib/esm/tile/map/TerrainMeshProvider.d.ts +2 -1
  210. package/lib/esm/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  211. package/lib/esm/tile/map/TerrainMeshProvider.js +1 -1
  212. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  213. package/lib/esm/tools/PrimitiveTool.js +4 -4
  214. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  215. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  216. package/lib/esm/tools/ToolAdmin.js +25 -10
  217. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  218. package/package.json +21 -21
@@ -6,6 +6,8 @@
6
6
  * @module WebGL
7
7
  */
8
8
  import { assert } from "@itwin/core-bentley";
9
+ import { Logger } from "@itwin/core-bentley/lib/cjs/Logger";
10
+ import { FrontendLoggerCategory } from "../../FrontendLoggerCategory";
9
11
  import { System } from "./System";
10
12
  /** A handle to the location of a uniform within a shader program
11
13
  * @internal
@@ -17,9 +19,19 @@ export class UniformHandle {
17
19
  this._location = location;
18
20
  }
19
21
  static create(program, name) {
20
- const location = System.instance.context.getUniformLocation(program, name);
21
- if (null === location)
22
- throw new Error(`uniform ${name} not found.`);
22
+ let location = null;
23
+ if (undefined !== program.glProgram) {
24
+ location = System.instance.context.getUniformLocation(program.glProgram, name);
25
+ }
26
+ if (null === location) {
27
+ const errMsg = `uniform ${name} not found in ${program.description}.`;
28
+ if (System.instance.options.errorOnMissingUniform) {
29
+ throw new Error(errMsg);
30
+ }
31
+ else {
32
+ Logger.logError(FrontendLoggerCategory.Render, errMsg);
33
+ }
34
+ }
23
35
  return new UniformHandle(location);
24
36
  }
25
37
  updateData(type, data) {
@@ -1 +1 @@
1
- {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.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 { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { SyncToken } from \"./Sync\";\r\nimport { System } from \"./System\";\r\n\r\nconst enum DataType {// eslint-disable-line no-restricted-syntax\r\n Undefined, // eslint-disable-line id-blacklist\r\n Mat3,\r\n Mat4,\r\n Float,\r\n FloatArray,\r\n Vec2,\r\n Vec3,\r\n Vec4,\r\n Int,\r\n IntArray,\r\n Uint,\r\n}\r\n\r\n/** A handle to the location of a uniform within a shader program\r\n * @internal\r\n */\r\nexport class UniformHandle {\r\n private readonly _location: WebGLUniformLocation;\r\n private _type: DataType = DataType.Undefined;\r\n private readonly _data: number[] = [];\r\n public syncToken?: SyncToken;\r\n\r\n private constructor(location: WebGLUniformLocation) { this._location = location; }\r\n\r\n public static create(program: WebGLProgram, name: string): UniformHandle {\r\n const location = System.instance.context.getUniformLocation(program, name);\r\n if (null === location)\r\n throw new Error(`uniform ${name} not found.`);\r\n\r\n return new UniformHandle(location);\r\n }\r\n\r\n private updateData(type: DataType, data: Float32Array | Int32Array | number[]): boolean {\r\n assert(DataType.Undefined !== type && DataType.Int !== type && DataType.Float !== type && DataType.Uint !== type);\r\n\r\n let updated = this._type !== type;\r\n if (updated) {\r\n this._type = type;\r\n if (this._data.length !== data.length)\r\n this._data.length = data.length;\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const datum = data[i];\r\n updated = updated || this._data[i] !== datum;\r\n this._data[i] = datum;\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private updateDatum(type: DataType, datum: number): boolean {\r\n assert(DataType.Int === type || DataType.Uint === type || DataType.Float === type);\r\n\r\n // NB: Yes, calling data.length without actually changing the length shows up as a significant performance bottleneck...\r\n if (this._data.length !== 1)\r\n this._data.length = 1;\r\n\r\n const updated = this._type !== type || this._data[0] !== datum;\r\n this._type = type;\r\n this._data[0] = datum;\r\n\r\n return updated;\r\n }\r\n\r\n public setMatrix3(mat: Matrix3) {\r\n if (this.updateData(DataType.Mat3, mat.data))\r\n System.instance.context.uniformMatrix3fv(this._location, false, mat.data);\r\n }\r\n\r\n public setMatrix4(mat: Matrix4) {\r\n if (this.updateData(DataType.Mat4, mat.data))\r\n System.instance.context.uniformMatrix4fv(this._location, false, mat.data);\r\n }\r\n\r\n public setUniform1iv(data: Int32Array | number[]) {\r\n if (this.updateData(DataType.IntArray, data))\r\n System.instance.context.uniform1iv(this._location, data);\r\n }\r\n\r\n public setUniform1fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.FloatArray, data))\r\n System.instance.context.uniform1fv(this._location, data);\r\n }\r\n\r\n public setUniform2fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec2, data))\r\n System.instance.context.uniform2fv(this._location, data);\r\n }\r\n\r\n public setUniform3fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec3, data))\r\n System.instance.context.uniform3fv(this._location, data);\r\n }\r\n\r\n public setUniform4fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec4, data))\r\n System.instance.context.uniform4fv(this._location, data);\r\n }\r\n\r\n public setUniform1i(data: number) {\r\n if (this.updateDatum(DataType.Int, data))\r\n System.instance.context.uniform1i(this._location, data);\r\n }\r\n\r\n public setUniform1f(data: number) {\r\n if (this.updateDatum(DataType.Float, data))\r\n System.instance.context.uniform1f(this._location, data);\r\n }\r\n\r\n public setUniform1ui(data: number) {\r\n if (this.updateDatum(DataType.Uint, data))\r\n (System.instance.context as WebGL2RenderingContext).uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n if (System.instance.capabilities.isWebGL2)\r\n this.setUniform1ui(data);\r\n else\r\n this.setUniform1f(data);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"UniformHandle.js","sourceRoot":"","sources":["../../../../src/render/webgl/UniformHandle.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 { Logger } from \"@itwin/core-bentley/lib/cjs/Logger\";\r\nimport { FrontendLoggerCategory } from \"../../FrontendLoggerCategory\";\r\nimport { Matrix3, Matrix4 } from \"./Matrix\";\r\nimport { ShaderProgram } from \"./ShaderProgram\";\r\nimport { SyncToken } from \"./Sync\";\r\nimport { System } from \"./System\";\r\n\r\nconst enum DataType {// eslint-disable-line no-restricted-syntax\r\n Undefined, // eslint-disable-line id-blacklist\r\n Mat3,\r\n Mat4,\r\n Float,\r\n FloatArray,\r\n Vec2,\r\n Vec3,\r\n Vec4,\r\n Int,\r\n IntArray,\r\n Uint,\r\n}\r\n\r\n/** A handle to the location of a uniform within a shader program\r\n * @internal\r\n */\r\nexport class UniformHandle {\r\n private readonly _location: WebGLUniformLocation | null;\r\n private _type: DataType = DataType.Undefined;\r\n private readonly _data: number[] = [];\r\n public syncToken?: SyncToken;\r\n\r\n private constructor(location: WebGLUniformLocation | null) { this._location = location; }\r\n\r\n public static create(program: ShaderProgram, name: string): UniformHandle {\r\n let location = null;\r\n if (undefined !== program.glProgram) {\r\n location = System.instance.context.getUniformLocation(program.glProgram, name);\r\n }\r\n if (null === location) {\r\n const errMsg = `uniform ${name} not found in ${program.description}.`;\r\n if (System.instance.options.errorOnMissingUniform) {\r\n throw new Error(errMsg);\r\n } else {\r\n Logger.logError(FrontendLoggerCategory.Render, errMsg);\r\n }\r\n }\r\n return new UniformHandle(location);\r\n }\r\n\r\n private updateData(type: DataType, data: Float32Array | Int32Array | number[]): boolean {\r\n assert(DataType.Undefined !== type && DataType.Int !== type && DataType.Float !== type && DataType.Uint !== type);\r\n\r\n let updated = this._type !== type;\r\n if (updated) {\r\n this._type = type;\r\n if (this._data.length !== data.length)\r\n this._data.length = data.length;\r\n }\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n const datum = data[i];\r\n updated = updated || this._data[i] !== datum;\r\n this._data[i] = datum;\r\n }\r\n\r\n return updated;\r\n }\r\n\r\n private updateDatum(type: DataType, datum: number): boolean {\r\n assert(DataType.Int === type || DataType.Uint === type || DataType.Float === type);\r\n\r\n // NB: Yes, calling data.length without actually changing the length shows up as a significant performance bottleneck...\r\n if (this._data.length !== 1)\r\n this._data.length = 1;\r\n\r\n const updated = this._type !== type || this._data[0] !== datum;\r\n this._type = type;\r\n this._data[0] = datum;\r\n\r\n return updated;\r\n }\r\n\r\n public setMatrix3(mat: Matrix3) {\r\n if (this.updateData(DataType.Mat3, mat.data))\r\n System.instance.context.uniformMatrix3fv(this._location, false, mat.data);\r\n }\r\n\r\n public setMatrix4(mat: Matrix4) {\r\n if (this.updateData(DataType.Mat4, mat.data))\r\n System.instance.context.uniformMatrix4fv(this._location, false, mat.data);\r\n }\r\n\r\n public setUniform1iv(data: Int32Array | number[]) {\r\n if (this.updateData(DataType.IntArray, data))\r\n System.instance.context.uniform1iv(this._location, data);\r\n }\r\n\r\n public setUniform1fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.FloatArray, data))\r\n System.instance.context.uniform1fv(this._location, data);\r\n }\r\n\r\n public setUniform2fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec2, data))\r\n System.instance.context.uniform2fv(this._location, data);\r\n }\r\n\r\n public setUniform3fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec3, data))\r\n System.instance.context.uniform3fv(this._location, data);\r\n }\r\n\r\n public setUniform4fv(data: Float32Array | number[]) {\r\n if (this.updateData(DataType.Vec4, data))\r\n System.instance.context.uniform4fv(this._location, data);\r\n }\r\n\r\n public setUniform1i(data: number) {\r\n if (this.updateDatum(DataType.Int, data))\r\n System.instance.context.uniform1i(this._location, data);\r\n }\r\n\r\n public setUniform1f(data: number) {\r\n if (this.updateDatum(DataType.Float, data))\r\n System.instance.context.uniform1f(this._location, data);\r\n }\r\n\r\n public setUniform1ui(data: number) {\r\n if (this.updateDatum(DataType.Uint, data))\r\n (System.instance.context as WebGL2RenderingContext).uniform1ui(this._location, data);\r\n }\r\n\r\n public setUniformBitflags(data: number) {\r\n if (System.instance.capabilities.isWebGL2)\r\n this.setUniform1ui(data);\r\n else\r\n this.setUniform1f(data);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAAkD,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAEvI,OAAO,EAAsD,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAwOvG,gBAAgB;AAChB,wBAAgB,kCAAkC,IAAI,cAAc,CAInE;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAED,gBAAgB;AAChB,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA2EtF"}
1
+ {"version":3,"file":"RealityMesh.d.ts","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAQH,OAAO,EAAkD,cAAc,EAAuC,MAAM,kBAAkB,CAAC;AAEvI,OAAO,EAAsD,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA2OvG,gBAAgB;AAChB,wBAAgB,kCAAkC,IAAI,cAAc,CAInE;AAED,gBAAgB;AAChB,wBAAgB,wBAAwB,IAAI,cAAc,CAIzD;AAED,gBAAgB;AAChB,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CA2EtF"}
@@ -176,8 +176,11 @@ function baseColorFromTextures(textureCount, applyFeatureColor) {
176
176
  for (let i = 0; i < textureCount; i++)
177
177
  applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);
178
178
  return `
179
- if (!u_texturesPresent)
180
- return u_baseColor;
179
+ if (!u_texturesPresent) {
180
+ vec4 col = u_baseColor;
181
+ ${applyFeatureColor}
182
+ return col;
183
+ }
181
184
 
182
185
  bool doDiscard = true;
183
186
  vec4 col = u_baseColor;
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.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 { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nconst testInside = `\r\nbool testInside(float x0, float y0, float x1, float y1, float x, float y) {\r\n vec2 perp = vec2(y0 - y1, x1 - x0), test = vec2(x - x0, y - y0);\r\n float dot = (test.x * perp.x + test.y * perp.y) / sqrt(perp.x * perp.x + perp.y * perp.y);\r\n return dot >= -0.001;\r\n}\r\n`;\r\n\r\n/* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a projected texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"projected\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params, mat4 matrix) {\r\n vec2 uv;\r\n float layerAlpha;\r\n bool isProjected = params[0][0] != 0.0;\r\n float imageCount = params[0][1];\r\n vec2 classPos;\r\n\r\n if (isProjected) {\r\n vec4 eye4 = vec4(v_eyeSpace, 1.0);\r\n vec4 classPos4 = matrix * eye4;\r\n classPos = classPos4.xy / classPos4.w;\r\n\r\n if (!testInside(params[2].x, params[2].y, params[2].z, params[2].w, classPos.x, classPos.y) ||\r\n !testInside(params[2].z, params[2].w, params[3].x, params[3].y, classPos.x, classPos.y) ||\r\n !testInside(params[3].x, params[3].y, params[3].z, params[3].w, classPos.x, classPos.y) ||\r\n !testInside(params[3].z, params[3].w, params[2].x, params[2].y, classPos.x, classPos.y))\r\n return false;\r\n\r\n uv.x = classPos.x;\r\n uv.y = classPos.y / imageCount;\r\n layerAlpha = params[0][2];\r\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)\r\n return false;\r\n } else {\r\n vec4 texTransform = matrix[0].xyzw;\r\n vec4 texClip = matrix[1].xyzw;\r\n layerAlpha = matrix[2].x;\r\n uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x < texClip[0] || uv.x > texClip[2] || uv.y < texClip[1] || uv.y > texClip[3])\r\n return false;\r\n uv.y = 1.0 - uv.y;\r\n }\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n vec3 texRgb = isProjected ? (texCol.rgb / texCol.a) : texCol.rgb; // Texture color is premultiplied by alpha only if projected (from classification).\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texRgb;\r\n if (isProjected) {\r\n vec4 featureTexel = TEXTURE(sampler, vec2(uv.x, (1.0 + classPos.y) / imageCount));\r\n classifierId = addUInt32s(params[1], featureTexel * 255.0) / 255.0;\r\n } else {\r\n featureIncrement = matrix[2].y;\r\n classifierId = vec4(0);\r\n }\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n\r\n return true;\r\n }\r\nreturn false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nconst overrideFeatureId = `return (classifierId == vec4(0)) ? (addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0) : classifierId;`;\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent)\r\n return u_baseColor;\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert, IsInstanced.No);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\nfunction addColorOverrideMix(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.asRealityMesh!.overrideColorMix);\r\n });\r\n });\r\n\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport default function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n let textureCount = System.instance.maxRealityImageryLayers;\r\n let gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n const caps = System.instance.capabilities;\r\n if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && IsThematic.Yes === flags.isThematic) {\r\n textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)\r\n gradientTextureUnit = -1; // is dependent on drawing mode so will set later\r\n }\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"RealityMesh.js","sourceRoot":"","sources":["../../../../../src/render/webgl/glsl/RealityMesh.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 { ColorDef } from \"@itwin/core-common\";\r\nimport { Matrix4d } from \"@itwin/core-geometry\";\r\nimport { AttributeMap } from \"../AttributeMap\";\r\nimport { Matrix4 } from \"../Matrix\";\r\nimport { TextureUnit } from \"../RenderFlags\";\r\nimport { FragmentShaderBuilder, FragmentShaderComponent, ProgramBuilder, VariableType, VertexShaderComponent } from \"../ShaderBuilder\";\r\nimport { System } from \"../System\";\r\nimport { FeatureMode, IsInstanced, IsShadowable, IsThematic, TechniqueFlags } from \"../TechniqueFlags\";\r\nimport { TechniqueId } from \"../TechniqueId\";\r\nimport { Texture } from \"../Texture\";\r\nimport { addVaryingColor } from \"./Color\";\r\nimport { addEyeSpace, addShaderFlags, addUInt32s } from \"./Common\";\r\nimport { decodeDepthRgb, unquantize2d } from \"./Decode\";\r\nimport { addFeatureSymbology, addHiliter, FeatureSymbologyOptions } from \"./FeatureSymbology\";\r\nimport { addAltPickBufferOutputs, addPickBufferOutputs, assignFragColor } from \"./Fragment\";\r\nimport { addColorPlanarClassifier, addFeaturePlanarClassifier, addHilitePlanarClassifier } from \"./PlanarClassification\";\r\nimport { addSolarShadowMap } from \"./SolarShadowMapping\";\r\nimport { addClassificationTranslucencyDiscard, octDecodeNormal } from \"./Surface\";\r\nimport { addThematicDisplay, getComputeThematicIndex } from \"./Thematic\";\r\nimport { addModelViewProjectionMatrix, addNormalMatrix } from \"./Vertex\";\r\nimport { addWiremesh } from \"./Wiremesh\";\r\n\r\nconst computePosition = \"gl_PointSize = 1.0; return MAT_MVP * rawPos;\";\r\nconst computeNormal = `\r\n vec3 normal = octDecodeNormal(a_norm); // normal coming in for is already in world space\r\n g_hillshadeIndex = normal.z; // save off world Z for thematic hill shade mode index\r\n return normalize(u_worldToViewN * normal);\r\n`;\r\n\r\nconst testInside = `\r\nbool testInside(float x0, float y0, float x1, float y1, float x, float y) {\r\n vec2 perp = vec2(y0 - y1, x1 - x0), test = vec2(x - x0, y - y0);\r\n float dot = (test.x * perp.x + test.y * perp.y) / sqrt(perp.x * perp.x + perp.y * perp.y);\r\n return dot >= -0.001;\r\n}\r\n`;\r\n\r\n/* There are two methods of applying a texture to a reality mesh. the first member of \"params\" denotes which\r\n method is to be used. A value of zero indicates a standard texture and one represents a projected texture.\r\n\r\n A standard (nonprojected) texture is generated by multiplying v_textCoord by the scaling and translation packed into the first row\r\n of \"matrix\". A clip rectangle is packed into second row of \"matrix\".\r\n\r\n A \"projected\" reality mesh texture is used for map layers. It does not uses v_texCoord, the texture coordinates\r\n are instead generated by a projection of the model position onto the X-Y plane. We only have eye position, not model position\r\n so the matrix in this case is a real transform matrix that contains a mapping from eye to model position\r\n followed by the model to texture projection.\r\n*/\r\nconst applyTexture = `\r\nbool applyTexture(inout vec4 col, sampler2D sampler, mat4 params, mat4 matrix) {\r\n vec2 uv;\r\n float layerAlpha;\r\n bool isProjected = params[0][0] != 0.0;\r\n float imageCount = params[0][1];\r\n vec2 classPos;\r\n\r\n if (isProjected) {\r\n vec4 eye4 = vec4(v_eyeSpace, 1.0);\r\n vec4 classPos4 = matrix * eye4;\r\n classPos = classPos4.xy / classPos4.w;\r\n\r\n if (!testInside(params[2].x, params[2].y, params[2].z, params[2].w, classPos.x, classPos.y) ||\r\n !testInside(params[2].z, params[2].w, params[3].x, params[3].y, classPos.x, classPos.y) ||\r\n !testInside(params[3].x, params[3].y, params[3].z, params[3].w, classPos.x, classPos.y) ||\r\n !testInside(params[3].z, params[3].w, params[2].x, params[2].y, classPos.x, classPos.y))\r\n return false;\r\n\r\n uv.x = classPos.x;\r\n uv.y = classPos.y / imageCount;\r\n layerAlpha = params[0][2];\r\n if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)\r\n return false;\r\n } else {\r\n vec4 texTransform = matrix[0].xyzw;\r\n vec4 texClip = matrix[1].xyzw;\r\n layerAlpha = matrix[2].x;\r\n uv = vec2(texTransform[0] + texTransform[2] * v_texCoord.x, texTransform[1] + texTransform[3] * v_texCoord.y);\r\n if (uv.x < texClip[0] || uv.x > texClip[2] || uv.y < texClip[1] || uv.y > texClip[3])\r\n return false;\r\n uv.y = 1.0 - uv.y;\r\n }\r\n vec4 texCol = TEXTURE(sampler, uv);\r\n float alpha = layerAlpha * texCol.a;\r\n if (alpha > 0.05) {\r\n vec3 texRgb = isProjected ? (texCol.rgb / texCol.a) : texCol.rgb; // Texture color is premultiplied by alpha only if projected (from classification).\r\n col.rgb = (1.0 - alpha) * col.rgb + alpha * texRgb;\r\n if (isProjected) {\r\n vec4 featureTexel = TEXTURE(sampler, vec2(uv.x, (1.0 + classPos.y) / imageCount));\r\n classifierId = addUInt32s(params[1], featureTexel * 255.0) / 255.0;\r\n } else {\r\n featureIncrement = matrix[2].y;\r\n classifierId = vec4(0);\r\n }\r\n if (alpha > col.a)\r\n col.a = alpha;\r\n\r\n return true;\r\n }\r\nreturn false;\r\n}\r\n`;\r\n\r\nconst computeTexCoord = \"return unquantize2d(a_uvParam, u_qTexCoordParams);\";\r\nconst scratchMatrix4d1 = Matrix4d.createIdentity();\r\nconst scratchMatrix4d2 = Matrix4d.createIdentity();\r\nconst scratchMatrix = new Matrix4();\r\n\r\nconst overrideFeatureId = `return (classifierId == vec4(0)) ? (addUInt32s(feature_id * 255.0, vec4(featureIncrement, 0.0, 0.0, 0.0)) / 255.0) : classifierId;`;\r\n\r\nfunction addTextures(builder: ProgramBuilder, maxTexturesPerMesh: number) {\r\n builder.vert.addFunction(unquantize2d);\r\n builder.addFunctionComputedVarying(\"v_texCoord\", VariableType.Vec2, \"computeTexCoord\", computeTexCoord);\r\n builder.vert.addUniform(\"u_qTexCoordParams\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_qTexCoordParams\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n if (undefined !== realityMesh.uvQParams) {\r\n uniform.setUniform4fv(realityMesh.uvQParams);\r\n }\r\n });\r\n });\r\n\r\n builder.frag.addUniform(\"u_texturesPresent\", VariableType.Boolean, (program) => {\r\n program.addGraphicUniform(\"u_texturesPresent\", (uniform, params) => {\r\n uniform.setUniform1i(params.geometry.asRealityMesh!.hasTextures ? 1 : 0);\r\n });\r\n });\r\n\r\n for (let i = 0; i < maxTexturesPerMesh; i++) {\r\n const textureLabel = `s_texture${i}`;\r\n builder.frag.addUniform(textureLabel, VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(textureLabel, (uniform, params) => {\r\n const textureUnits = [TextureUnit.RealityMesh0, TextureUnit.RealityMesh1, params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder, TextureUnit.RealityMesh3, TextureUnit.RealityMesh4, TextureUnit.RealityMesh5];\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const realityTexture = realityMesh.textureParams ? realityMesh.textureParams.params[i].texture : undefined;\r\n if (realityTexture !== undefined) {\r\n const texture = realityTexture as Texture;\r\n texture.texture.bindSampler(uniform, textureUnits[i]);\r\n } else {\r\n // assert(false, \"Terrain Mesh texture not defined when beginning texture.\");\r\n System.instance.ensureSamplerBound(uniform, textureUnits[i]);\r\n }\r\n });\r\n });\r\n const paramsLabel = `u_texParams${i}`, matrixLabel = `u_texMatrix${i}`;\r\n builder.frag.addUniform(matrixLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(matrixLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n const projectionMatrix = textureParam.getProjectionMatrix();\r\n if (projectionMatrix) {\r\n const eyeToModel = Matrix4d.createTransform(params.target.uniforms.frustum.viewMatrix.inverse()!, scratchMatrix4d1);\r\n const eyeToTexture = projectionMatrix.multiplyMatrixMatrix(eyeToModel, scratchMatrix4d2);\r\n uniform.setMatrix4(Matrix4.fromMatrix4d(eyeToTexture, scratchMatrix));\r\n } else\r\n uniform.setMatrix4(textureParam.getTerrainMatrix()!);\r\n }\r\n });\r\n });\r\n builder.frag.addUniform(paramsLabel, VariableType.Mat4, (prog) => {\r\n prog.addGraphicUniform(paramsLabel, (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const textureParam = realityMesh.textureParams?.params[i];\r\n assert(undefined !== textureParam);\r\n if (undefined !== textureParam) {\r\n uniform.setMatrix4(textureParam.getParams(scratchMatrix));\r\n }\r\n });\r\n });\r\n }\r\n}\r\nfunction baseColorFromTextures(textureCount: number, applyFeatureColor: string) {\r\n const applyTextureStrings = [];\r\n\r\n for (let i = 0; i < textureCount; i++)\r\n applyTextureStrings.push(`if (applyTexture(col, s_texture${i}, u_texParams${i}, u_texMatrix${i})) doDiscard = false; `);\r\n\r\n return `\r\n if (!u_texturesPresent) {\r\n vec4 col = u_baseColor;\r\n ${applyFeatureColor}\r\n return col;\r\n }\r\n\r\n bool doDiscard = true;\r\n vec4 col = u_baseColor;\r\n ${applyTextureStrings.join(\"\\n \")}\r\n if (doDiscard)\r\n discard;\r\n\r\n ${applyFeatureColor}\r\n\r\n return col;\r\n`;\r\n}\r\n\r\n// feature_rgb.r = -1.0 if rgb color not overridden for feature.\r\n// feature_alpha = -1.0 if alpha not overridden for feature.\r\nconst mixFeatureColor = `\r\n col.rgb = mix(col.rgb, mix(col.rgb, v_color.rgb, u_overrideColorMix), step(0.0, v_color.r));\r\n col.a = mix(col.a, v_color.a, step(0.0, v_color.a));\r\n `;\r\n\r\nfunction addThematicToRealityMesh(builder: ProgramBuilder, gradientTextureUnit: TextureUnit) {\r\n addNormalMatrix(builder.vert, IsInstanced.No);\r\n builder.vert.addFunction(octDecodeNormal);\r\n builder.vert.addGlobal(\"g_hillshadeIndex\", VariableType.Float);\r\n builder.addFunctionComputedVarying(\"v_n\", VariableType.Vec3, \"computeLightingNormal\", computeNormal);\r\n addThematicDisplay(builder, false, true);\r\n builder.addInlineComputedVarying(\"v_thematicIndex\", VariableType.Float, getComputeThematicIndex(builder.vert.usesInstancedGeometry, false, false));\r\n builder.vert.addUniform(\"u_worldToViewN\", VariableType.Mat3, (prog) => {\r\n prog.addGraphicUniform(\"u_worldToViewN\", (uniform, params) => {\r\n params.target.uniforms.branch.bindWorldToViewNTransform(uniform, params.geometry, false);\r\n });\r\n });\r\n builder.frag.addUniform(\"s_texture\", VariableType.Sampler2D, (prog) => {\r\n prog.addGraphicUniform(\"s_texture\", (uniform, params) => {\r\n params.target.uniforms.thematic.bindTexture(uniform, gradientTextureUnit >= 0 ? gradientTextureUnit : (params.target.drawForReadPixels ? TextureUnit.ShadowMap : TextureUnit.PickDepthAndOrder));\r\n });\r\n });\r\n}\r\n\r\nfunction addColorOverrideMix(frag: FragmentShaderBuilder) {\r\n frag.addUniform(\"u_overrideColorMix\", VariableType.Float, (prog) => {\r\n prog.addGraphicUniform(\"u_overrideColorMix\", (uniform, params) => {\r\n uniform.setUniform1f(params.geometry.asRealityMesh!.overrideColorMix);\r\n });\r\n });\r\n\r\n}\r\n\r\nfunction createRealityMeshHiliterBuilder(): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n builder.frag.set(FragmentShaderComponent.AssignFragData, assignFragColor);\r\n return builder;\r\n\r\n}\r\n\r\n/** @internal */\r\nexport function createClassifierRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHilitePlanarClassifier(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport function createRealityMeshHiliter(): ProgramBuilder {\r\n const builder = createRealityMeshHiliterBuilder();\r\n addHiliter(builder, false);\r\n return builder;\r\n}\r\n\r\n/** @internal */\r\nexport default function createRealityMeshBuilder(flags: TechniqueFlags): ProgramBuilder {\r\n const builder = new ProgramBuilder(AttributeMap.findAttributeMap(TechniqueId.RealityMesh, false));\r\n const vert = builder.vert;\r\n vert.set(VertexShaderComponent.ComputePosition, computePosition);\r\n addModelViewProjectionMatrix(vert);\r\n\r\n if (flags.isShadowable === IsShadowable.Yes)\r\n addSolarShadowMap(builder, true);\r\n\r\n const frag = builder.frag;\r\n frag.addGlobal(\"featureIncrement\", VariableType.Float, \"0.0\");\r\n frag.addGlobal(\"classifierId\", VariableType.Vec4);\r\n frag.set(FragmentShaderComponent.OverrideFeatureId, overrideFeatureId);\r\n let textureCount = System.instance.maxRealityImageryLayers;\r\n let gradientTextureUnit = TextureUnit.RealityMeshThematicGradient;\r\n const caps = System.instance.capabilities;\r\n if (Math.min(caps.maxFragTextureUnits, caps.maxVertTextureUnits) < 16 && IsThematic.Yes === flags.isThematic) {\r\n textureCount--; // steal the last bg map layer texture for thematic gradient (just when thematic display is applied)\r\n gradientTextureUnit = -1; // is dependent on drawing mode so will set later\r\n }\r\n\r\n const feat = flags.featureMode;\r\n let opts = FeatureMode.Overrides === feat ? FeatureSymbologyOptions.Surface : FeatureSymbologyOptions.None;\r\n let applyFragmentFeatureColor = \"\";\r\n\r\n if (flags.isClassified) {\r\n opts &= ~FeatureSymbologyOptions.Alpha;\r\n addColorPlanarClassifier(builder, flags.isTranslucent, flags.isThematic);\r\n addClassificationTranslucencyDiscard(builder);\r\n }\r\n\r\n addFeatureSymbology(builder, feat, opts);\r\n if (feat === FeatureMode.Overrides) {\r\n addShaderFlags(builder);\r\n addVaryingColor(builder, \"return vec4(-1.0, -1.0, -1.0, -1.0);\");\r\n applyFragmentFeatureColor = mixFeatureColor;\r\n addColorOverrideMix(builder.frag);\r\n }\r\n const computeFragmentBaseColor = baseColorFromTextures(textureCount, applyFragmentFeatureColor);\r\n\r\n frag.addFunction(addUInt32s);\r\n frag.addFunction(testInside);\r\n addEyeSpace(builder);\r\n frag.addFunction(applyTexture);\r\n frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n builder.frag.addUniform(\"u_baseColor\", VariableType.Vec4, (prog) => {\r\n prog.addGraphicUniform(\"u_baseColor\", (uniform, params) => {\r\n const realityMesh = params.geometry.asRealityMesh!;\r\n const baseColor = (realityMesh.baseColor ? realityMesh.baseColor : ColorDef.create(0xff000000)).colors;\r\n uniform.setUniform4fv([baseColor.r / 255, baseColor.g / 255, baseColor.b / 255, 1 - baseColor.t / 255]);\r\n });\r\n });\r\n builder.frag.set(FragmentShaderComponent.ComputeBaseColor, computeFragmentBaseColor);\r\n if (!flags.isTranslucent) {\r\n if (FeatureMode.None !== feat) {\r\n if (flags.isClassified)\r\n addFeaturePlanarClassifier(builder);\r\n\r\n builder.frag.addFunction(decodeDepthRgb);\r\n if (flags.isClassified)\r\n addPickBufferOutputs(builder.frag);\r\n else\r\n addAltPickBufferOutputs(builder.frag);\r\n }\r\n }\r\n\r\n addTextures(builder, textureCount);\r\n\r\n if (IsThematic.Yes === flags.isThematic)\r\n addThematicToRealityMesh(builder, gradientTextureUnit);\r\n\r\n if (flags.isWiremesh)\r\n addWiremesh(builder);\r\n\r\n return builder;\r\n}\r\n\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"RealityModelTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityModelTileTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RealityModelTileTree.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityModelTileTree.ts"],"names":[],"mappings":"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"}
@@ -664,7 +664,8 @@ export class RealityTreeReference extends RealityModelTileTree.Reference {
664
664
  return div;
665
665
  }
666
666
  addLogoCards(cards) {
667
- if (this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset) {
667
+ if (this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset && !cards.dataset.openStreetMapLogoCard) {
668
+ cards.dataset.openStreetMapLogoCard = "true";
668
669
  cards.appendChild(IModelApp.makeLogoCard({ heading: "OpenStreetMap", notice: `&copy;<a href=\"https://www.openstreetmap.org/copyright\">OpenStreetMap</a> ${IModelApp.localization.getLocalizedString("iModelJs:BackgroundMap:OpenStreetMapContributors")}` }));
669
670
  }
670
671
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RealityModelTileTree.js","sourceRoot":"","sources":["../../../src/tile/RealityModelTileTree.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 Utils\r\n */\r\n\r\nimport {\r\n assert, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStringsOrUndefined, CompressedId64Set, Id64String,\r\n} from \"@itwin/core-bentley\";\r\nimport {\r\n Cartographic, DefaultSupportedTypes, GeoCoordStatus, PlanarClipMaskPriority, PlanarClipMaskSettings,\r\n RealityDataProvider,\r\n RealityDataSourceKey,\r\n SpatialClassifiers, ViewFlagOverrides,\r\n} from \"@itwin/core-common\";\r\nimport { Angle, Constant, Ellipsoid, Matrix3d, Point3d, Range3d, Ray3d, Transform, TransformProps, Vector3d, XYZ } from \"@itwin/core-geometry\";\r\nimport { calculateEcefToDbTransformAtLocation } from \"../BackgroundMapGeometry\";\r\nimport { DisplayStyleState } from \"../DisplayStyleState\";\r\nimport { HitDetail } from \"../HitDetail\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { PlanarClipMaskState } from \"../PlanarClipMaskState\";\r\nimport { RealityDataSource } from \"../RealityDataSource\";\r\nimport { RenderMemory } from \"../render/RenderMemory\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport { ViewState } from \"../ViewState\";\r\nimport {\r\n BatchedTileIdMap, CesiumIonAssetProvider, createClassifierTileTreeReference, createDefaultViewFlagOverrides, DisclosedTileTreeSet, GeometryTileTreeReference,\r\n getGcsConverterAvailable, RealityTile, RealityTileLoader, RealityTileParams, RealityTileTree, RealityTileTreeParams, SpatialClassifierTileTreeReference, Tile,\r\n TileDrawArgs, TileLoadPriority, TileRequest, TileTree, TileTreeOwner, TileTreeReference, TileTreeSupplier,\r\n} from \"./internal\";\r\n\r\nfunction getUrl(content: any) {\r\n return content ? (content.url ? content.url : content.uri) : undefined;\r\n}\r\n\r\ninterface RealityTreeId {\r\n rdSourceKey: RealityDataSourceKey;\r\n transform?: Transform;\r\n modelId: Id64String;\r\n maskModelIds?: string;\r\n deduplicateVertices: boolean;\r\n produceGeometry?: boolean;\r\n toEcefTransform?: Transform;\r\n}\r\n\r\nfunction compareOrigins(lhs: XYZ, rhs: XYZ): number {\r\n let cmp = compareNumbers(lhs.x, rhs.x);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.y, rhs.y);\r\n if (0 === cmp)\r\n cmp = compareNumbers(lhs.z, rhs.z);\r\n }\r\n\r\n return cmp;\r\n}\r\n\r\nfunction compareMatrices(lhs: Matrix3d, rhs: Matrix3d): number {\r\n for (let i = 0; i < 9; i++) {\r\n const cmp = compareNumbers(lhs.coffs[i], rhs.coffs[i]);\r\n if (0 !== cmp)\r\n return cmp;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nfunction compareTransforms(lhs?: Transform, rhs?: Transform) {\r\n if (undefined === lhs)\r\n return undefined !== rhs ? -1 : 0;\r\n\r\n else if (undefined === rhs)\r\n return 1;\r\n\r\n const cmp = compareOrigins(lhs.origin, rhs.origin);\r\n return 0 !== cmp ? cmp : compareMatrices(lhs.matrix, rhs.matrix);\r\n}\r\n\r\nclass RealityTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public getOwner(treeId: RealityTreeId, iModel: IModelConnection): TileTreeOwner {\r\n return iModel.tiles.getTileTreeOwner(treeId, this);\r\n }\r\n\r\n public async createTileTree(treeId: RealityTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n if (treeId.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(treeId.maskModelIds));\r\n\r\n const opts = { deduplicateVertices: treeId.deduplicateVertices, produceGeometry: treeId.produceGeometry };\r\n return RealityModelTileTree.createRealityModelTileTree(treeId.rdSourceKey, iModel, treeId.modelId, treeId.transform, opts);\r\n }\r\n\r\n public compareTileTreeIds(lhs: RealityTreeId, rhs: RealityTreeId): number {\r\n let cmp = compareStringsOrUndefined(lhs.rdSourceKey.id, rhs.rdSourceKey.id);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.rdSourceKey.format, rhs.rdSourceKey.format);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.rdSourceKey.iTwinId, rhs.rdSourceKey.iTwinId);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.modelId, rhs.modelId);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.deduplicateVertices, rhs.deduplicateVertices);\r\n }\r\n }\r\n }\r\n\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareTransforms(lhs.transform, rhs.transform);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n return compareTransforms(lhs.toEcefTransform, rhs.toEcefTransform);\r\n }\r\n}\r\n\r\nconst realityTreeSupplier = new RealityTreeSupplier();\r\n\r\n/** @internal */\r\nexport function createRealityTileTreeReference(props: RealityModelTileTree.ReferenceProps): RealityModelTileTree.Reference {\r\n return new RealityTreeReference(props);\r\n}\r\n\r\nconst zeroPoint = Point3d.createZero();\r\nconst earthEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\nconst scratchRay = Ray3d.createXAxis();\r\n\r\n/** @internal */\r\nexport class RealityTileRegion {\r\n constructor(values: { minLongitude: number, minLatitude: number, minHeight: number, maxLongitude: number, maxLatitude: number, maxHeight: number }) {\r\n this.minLongitude = values.minLongitude;\r\n this.minLatitude = values.minLatitude;\r\n this.minHeight = values.minHeight;\r\n this.maxLongitude = values.maxLongitude;\r\n this.maxLatitude = values.maxLatitude;\r\n this.maxHeight = values.maxHeight;\r\n }\r\n public minLongitude: number;\r\n public minLatitude: number;\r\n public minHeight: number;\r\n public maxLongitude: number;\r\n public maxLatitude: number;\r\n public maxHeight: number;\r\n\r\n public static create(region: number[]): RealityTileRegion {\r\n const minHeight = region[4];\r\n const maxHeight = region[5];\r\n const minLongitude = region[0];\r\n const maxLongitude = region[2];\r\n const minLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[1]);\r\n const maxLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[3]);\r\n return new RealityTileRegion({ minLongitude, minLatitude, minHeight, maxLongitude, maxLatitude, maxHeight });\r\n }\r\n\r\n public static isGlobal(boundingVolume: any) {\r\n return Array.isArray(boundingVolume?.region) && (boundingVolume.region[2] - boundingVolume.region[0]) > Angle.piRadians && (boundingVolume.region[3] - boundingVolume.region[1]) > Angle.piOver2Radians;\r\n }\r\n public getRange(): { range: Range3d, corners?: Point3d[] } {\r\n const maxAngle = Math.max(Math.abs(this.maxLatitude - this.minLatitude), Math.abs(this.maxLongitude - this.minLongitude));\r\n let corners;\r\n let range: Range3d;\r\n if (maxAngle < Math.PI / 8) {\r\n corners = new Array<Point3d>(8);\r\n const chordTolerance = (1 - Math.cos(maxAngle / 2)) * Constant.earthRadiusWGS84.polar;\r\n const addEllipsoidCorner = ((long: number, lat: number, index: number) => {\r\n const ray = earthEllipsoid.radiansToUnitNormalRay(long, lat, scratchRay)!;\r\n corners[index] = ray.fractionToPoint(this.minHeight - chordTolerance);\r\n corners[index + 4] = ray.fractionToPoint(this.maxHeight + chordTolerance);\r\n });\r\n addEllipsoidCorner(this.minLongitude, this.minLatitude, 0);\r\n addEllipsoidCorner(this.minLongitude, this.maxLatitude, 1);\r\n addEllipsoidCorner(this.maxLongitude, this.minLatitude, 2);\r\n addEllipsoidCorner(this.maxLongitude, this.maxLatitude, 3);\r\n range = Range3d.createArray(corners);\r\n } else {\r\n const minEq = Constant.earthRadiusWGS84.equator + this.minHeight, maxEq = Constant.earthRadiusWGS84.equator + this.maxHeight;\r\n const minEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, minEq, minEq, Constant.earthRadiusWGS84.polar + this.minHeight);\r\n const maxEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, maxEq, maxEq, Constant.earthRadiusWGS84.polar + this.maxHeight);\r\n range = minEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude);\r\n range.extendRange(maxEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude));\r\n }\r\n return { range, corners };\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityModelTileUtils {\r\n public static rangeFromBoundingVolume(boundingVolume: any): { range: Range3d, corners?: Point3d[], region?: RealityTileRegion } | undefined {\r\n if (undefined === boundingVolume)\r\n return undefined;\r\n\r\n let corners: Point3d[] | undefined;\r\n let range: Range3d | undefined;\r\n if (undefined !== boundingVolume.box) {\r\n const box: number[] = boundingVolume.box;\r\n const center = Point3d.create(box[0], box[1], box[2]);\r\n const ux = Vector3d.create(box[3], box[4], box[5]);\r\n const uy = Vector3d.create(box[6], box[7], box[8]);\r\n const uz = Vector3d.create(box[9], box[10], box[11]);\r\n corners = new Array<Point3d>();\r\n for (let j = 0; j < 2; j++) {\r\n for (let k = 0; k < 2; k++) {\r\n for (let l = 0; l < 2; l++) {\r\n corners.push(center.plus3Scaled(ux, (j ? -1.0 : 1.0), uy, (k ? -1.0 : 1.0), uz, (l ? -1.0 : 1.0)));\r\n }\r\n }\r\n }\r\n range = Range3d.createArray(corners);\r\n } else if (Array.isArray(boundingVolume.sphere)) {\r\n const sphere: number[] = boundingVolume.sphere;\r\n const center = Point3d.create(sphere[0], sphere[1], sphere[2]);\r\n const radius = sphere[3];\r\n range = Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\r\n } else if (Array.isArray(boundingVolume.region)) {\r\n const region = RealityTileRegion.create(boundingVolume.region);\r\n const regionRange = region.getRange();\r\n return { range: regionRange.range, corners: regionRange.corners, region };\r\n }\r\n return range ? { range, corners } : undefined;\r\n\r\n }\r\n public static maximumSizeFromGeometricTolerance(range: Range3d, geometricError: number): number {\r\n const minToleranceRatio = true === IModelApp.renderSystem.isMobile ? IModelApp.tileAdmin.mobileRealityTileMinToleranceRatio : 1.0; // Nominally the error on screen size of a tile. Increasing generally increases performance (fewer draw calls) at expense of higher load times.\r\n\r\n // NB: We increase the above minToleranceRatio on mobile devices in order to help avoid pruning too often based on the memory threshold for\r\n // pruning currently used by reality tile trees on mobile.\r\n\r\n return minToleranceRatio * range.diagonal().magnitude() / geometricError;\r\n }\r\n public static transformFromJson(jTrans: number[] | undefined): Transform {\r\n return (jTrans === undefined) ? Transform.createIdentity() : Transform.createOriginAndMatrix(Point3d.create(jTrans[12], jTrans[13], jTrans[14]), Matrix3d.createRowValues(jTrans[0], jTrans[4], jTrans[8], jTrans[1], jTrans[5], jTrans[9], jTrans[2], jTrans[6], jTrans[10]));\r\n }\r\n}\r\n\r\n/** @internal */\r\nenum SMTextureType {\r\n None = 0, // no textures\r\n Embedded = 1, // textures are available and stored in the nodes\r\n Streaming = 2, // textures need to be downloaded, Bing Maps, etc…\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileTreeProps {\r\n public location: Transform;\r\n public tilesetJson: any;\r\n public doDrapeBackgroundMap: boolean = false;\r\n public rdSource: RealityDataSource;\r\n public yAxisUp = false;\r\n public root: any;\r\n\r\n constructor(json: any, root: any, rdSource: RealityDataSource, tilesetToDbTransform: Transform, public readonly tilesetToEcef?: Transform) {\r\n this.tilesetJson = root;\r\n this.rdSource = rdSource;\r\n this.location = tilesetToDbTransform;\r\n this.doDrapeBackgroundMap = (json.root && json.root.SMMasterHeader && SMTextureType.Streaming === json.root.SMMasterHeader.IsTextured);\r\n if (json.asset.gltfUpAxis === undefined || json.asset.gltfUpAxis === \"y\" || json.asset.gltfUpAxis === \"Y\")\r\n this.yAxisUp = true;\r\n }\r\n}\r\n\r\nclass RealityModelTileTreeParams implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public iModel: IModelConnection;\r\n public is3d = true;\r\n public loader: RealityModelTileLoader;\r\n public rootTile: RealityTileParams;\r\n\r\n public get location() { return this.loader.tree.location; }\r\n public get yAxisUp() { return this.loader.tree.yAxisUp; }\r\n public get priority() { return this.loader.priority; }\r\n\r\n public constructor(tileTreeId: string, iModel: IModelConnection, modelId: Id64String, loader: RealityModelTileLoader, public readonly gcsConverterAvailable: boolean, public readonly rootToEcef: Transform | undefined) {\r\n this.loader = loader;\r\n this.id = tileTreeId;\r\n this.modelId = modelId;\r\n this.iModel = iModel;\r\n this.rootTile = new RealityModelTileProps(loader.tree.tilesetJson, undefined, \"\", undefined, undefined === loader.tree.tilesetJson.refine ? undefined : loader.tree.tilesetJson.refine === \"ADD\");\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileProps implements RealityTileParams {\r\n public readonly contentId: string;\r\n public readonly range: Range3d;\r\n public readonly contentRange?: Range3d;\r\n public readonly maximumSize: number;\r\n public readonly isLeaf: boolean;\r\n public readonly transformToRoot?: Transform;\r\n public readonly additiveRefinement?: boolean;\r\n public readonly parent?: RealityTile;\r\n public readonly noContentButTerminateOnSelection?: boolean;\r\n public readonly rangeCorners?: Point3d[];\r\n public readonly region?: RealityTileRegion;\r\n\r\n constructor(json: any, parent: RealityTile | undefined, thisId: string, transformToRoot?: Transform, additiveRefinement?: boolean) {\r\n this.contentId = thisId;\r\n this.parent = parent;\r\n const boundingVolume = RealityModelTileUtils.rangeFromBoundingVolume(json.boundingVolume);\r\n if (boundingVolume) {\r\n this.range = boundingVolume.range;\r\n this.rangeCorners = boundingVolume.corners;\r\n this.region = boundingVolume?.region;\r\n } else {\r\n this.range = Range3d.createNull();\r\n assert(false, \"Unbounded tile\");\r\n }\r\n this.isLeaf = !Array.isArray(json.children) || 0 === json.children.length;\r\n this.transformToRoot = transformToRoot;\r\n this.additiveRefinement = additiveRefinement;\r\n const hasContents = undefined !== getUrl(json.content);\r\n if (hasContents)\r\n this.contentRange = RealityModelTileUtils.rangeFromBoundingVolume(json.content.boundingVolume)?.range;\r\n else {\r\n // A node without content should probably be selectable even if not additive refinement - But restrict it to that case here\r\n // to avoid potential problems with existing reality models, but still avoid overselection in the OSM world building set.\r\n if (this.additiveRefinement || parent?.additiveRefinement)\r\n this.noContentButTerminateOnSelection = true;\r\n }\r\n\r\n this.maximumSize = (this.noContentButTerminateOnSelection || hasContents) ? RealityModelTileUtils.maximumSizeFromGeometricTolerance(Range3d.fromJSON(this.range), json.geometricError) : 0;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass FindChildResult {\r\n constructor(public id: string, public json: any, public transformToRoot?: Transform) { }\r\n}\r\n\r\n/** @internal */\r\nfunction assembleUrl(prefix: string, url: string): string {\r\n\r\n if (url.startsWith(\"./\")) {\r\n url = url.substring(2);\r\n } else {\r\n const prefixParts = prefix.split(\"/\");\r\n prefixParts.pop();\r\n while (url.startsWith(\"../\")) {\r\n prefixParts.pop();\r\n url = url.substring(3);\r\n }\r\n prefixParts.push(\"\");\r\n prefix = prefixParts.join(\"/\");\r\n }\r\n return prefix + url;\r\n}\r\n\r\n/** @internal */\r\nfunction addUrlPrefix(subTree: any, prefix: string) {\r\n if (undefined === subTree)\r\n return;\r\n\r\n if (undefined !== subTree.content) {\r\n if (undefined !== subTree.content.url)\r\n subTree.content.url = assembleUrl(prefix, subTree.content.url);\r\n else if (undefined !== subTree.content.uri)\r\n subTree.content.uri = assembleUrl(prefix, subTree.content.uri);\r\n }\r\n\r\n if (undefined !== subTree.children)\r\n for (const child of subTree.children)\r\n addUrlPrefix(child, prefix);\r\n}\r\n\r\n/** @internal */\r\nasync function expandSubTree(root: any, rdsource: RealityDataSource): Promise<any> {\r\n const childUrl = getUrl(root.content);\r\n if (undefined !== childUrl && childUrl.endsWith(\"json\")) { // A child may contain a subTree...\r\n const subTree = await rdsource.getTileJson(childUrl);\r\n const prefixIndex = childUrl.lastIndexOf(\"/\");\r\n if (prefixIndex > 0)\r\n addUrlPrefix(subTree.root, childUrl.substring(0, prefixIndex + 1));\r\n\r\n return subTree.root;\r\n } else {\r\n return root;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileLoader extends RealityTileLoader {\r\n public readonly tree: RealityModelTileTreeProps;\r\n private readonly _batchedIdMap?: BatchedTileIdMap;\r\n private _viewFlagOverrides: ViewFlagOverrides;\r\n private readonly _deduplicateVertices: boolean;\r\n\r\n public constructor(tree: RealityModelTileTreeProps, batchedIdMap?: BatchedTileIdMap, opts?: { deduplicateVertices?: boolean, produceGeometry?: boolean }) {\r\n super(opts?.produceGeometry ?? false);\r\n this.tree = tree;\r\n this._batchedIdMap = batchedIdMap;\r\n this._deduplicateVertices = opts?.deduplicateVertices ?? false;\r\n\r\n let clipVolume;\r\n if (RealityTileRegion.isGlobal(tree.tilesetJson.boundingVolume))\r\n clipVolume = false;\r\n this._viewFlagOverrides = createDefaultViewFlagOverrides({ lighting: true, clipVolume });\r\n\r\n // Display edges if they are present (Cesium outline extension) and enabled for view.\r\n this._viewFlagOverrides.visibleEdges = undefined;\r\n this._viewFlagOverrides.hiddenEdges = undefined;\r\n\r\n // Allow wiremesh display.\r\n this._viewFlagOverrides.wiremesh = undefined;\r\n }\r\n\r\n public get doDrapeBackgroundMap(): boolean { return this.tree.doDrapeBackgroundMap; }\r\n public override get wantDeduplicatedVertices() { return this._deduplicateVertices; }\r\n\r\n public get maxDepth(): number { return 32; } // Can be removed when element tile selector is working.\r\n public get minDepth(): number { return 0; }\r\n public get priority(): TileLoadPriority { return TileLoadPriority.Context; }\r\n public override getBatchIdMap(): BatchedTileIdMap | undefined { return this._batchedIdMap; }\r\n public get clipLowResolutionTiles(): boolean { return true; }\r\n public override get viewFlagOverrides(): ViewFlagOverrides { return this._viewFlagOverrides; }\r\n\r\n public async loadChildren(tile: RealityTile): Promise<Tile[] | undefined> {\r\n const props = await this.getChildrenProps(tile);\r\n if (undefined === props)\r\n return undefined;\r\n\r\n const children = [];\r\n for (const prop of props)\r\n children.push(tile.realityRoot.createTile(prop));\r\n\r\n return children;\r\n }\r\n\r\n public async getChildrenProps(parent: RealityTile): Promise<RealityTileParams[]> {\r\n const props: RealityModelTileProps[] = [];\r\n const thisId = parent.contentId;\r\n const prefix = thisId.length ? `${thisId}_` : \"\";\r\n const findResult = await this.findTileInJson(this.tree.tilesetJson, thisId, \"\", undefined);\r\n if (undefined !== findResult && Array.isArray(findResult.json.children)) {\r\n for (let i = 0; i < findResult.json.children.length; i++) {\r\n const childId = prefix + i;\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, childId, \"\", undefined);\r\n if (undefined !== foundChild)\r\n props.push(new RealityModelTileProps(foundChild.json, parent, foundChild.id, foundChild.transformToRoot, foundChild.json.refine === undefined ? undefined : foundChild.json.refine === \"ADD\"));\r\n }\r\n }\r\n return props;\r\n }\r\n\r\n public getRequestChannel(_tile: Tile) {\r\n // ###TODO: May want to extract the hostname from the URL.\r\n return IModelApp.tileAdmin.channels.getForHttp(\"itwinjs-reality-model\");\r\n }\r\n\r\n public async requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response> {\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, tile.contentId, \"\");\r\n if (undefined === foundChild || undefined === foundChild.json.content || isCanceled())\r\n return undefined;\r\n\r\n return this.tree.rdSource.getTileContent(getUrl(foundChild.json.content));\r\n }\r\n\r\n private async findTileInJson(tilesetJson: any, id: string, parentId: string, transformToRoot?: Transform): Promise<FindChildResult | undefined> {\r\n if (id.length === 0)\r\n return new FindChildResult(id, tilesetJson, transformToRoot); // Root.\r\n\r\n const separatorIndex = id.indexOf(\"_\");\r\n const childId = (separatorIndex < 0) ? id : id.substring(0, separatorIndex);\r\n const childIndex = parseInt(childId, 10);\r\n\r\n if (isNaN(childIndex) || tilesetJson === undefined || tilesetJson.children === undefined || childIndex >= tilesetJson.children.length) {\r\n assert(false, \"scalable mesh child not found.\");\r\n return undefined;\r\n }\r\n\r\n const foundChild = tilesetJson.children[childIndex];\r\n const thisParentId = parentId.length ? (`${parentId}_${childId}`) : childId;\r\n if (foundChild.transform) {\r\n const thisTransform = RealityModelTileUtils.transformFromJson(foundChild.transform);\r\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(thisTransform) : thisTransform;\r\n }\r\n\r\n if (separatorIndex >= 0) {\r\n return this.findTileInJson(foundChild, id.substring(separatorIndex + 1), thisParentId, transformToRoot);\r\n }\r\n\r\n tilesetJson.children[childIndex] = await expandSubTree(foundChild, this.tree.rdSource);\r\n\r\n return new FindChildResult(thisParentId, tilesetJson.children[childIndex], transformToRoot);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type RealityModelSource = ViewState | DisplayStyleState;\r\n\r\n/** @internal */\r\nexport class RealityModelTileTree extends RealityTileTree {\r\n private readonly _isContentUnbounded: boolean;\r\n public constructor(params: RealityTileTreeParams) {\r\n super(params);\r\n\r\n this._isContentUnbounded = this.rootTile.contentRange.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n if (!this.isContentUnbounded && !this.rootTile.contentRange.isNull) {\r\n const worldContentRange = this.iModelTransform.multiplyRange(this.rootTile.contentRange);\r\n this.iModel.expandDisplayedExtents(worldContentRange);\r\n }\r\n }\r\n public override get isContentUnbounded() { return this._isContentUnbounded; }\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line no-redeclare\r\nexport namespace RealityModelTileTree {\r\n\r\n export interface ReferenceBaseProps {\r\n iModel: IModelConnection;\r\n source: RealityModelSource;\r\n rdSourceKey: RealityDataSourceKey;\r\n modelId?: Id64String;\r\n tilesetToDbTransform?: TransformProps;\r\n tilesetToEcefTransform?: TransformProps;\r\n name?: string;\r\n classifiers?: SpatialClassifiers;\r\n planarClipMask?: PlanarClipMaskSettings;\r\n }\r\n export interface ReferenceProps extends ReferenceBaseProps {\r\n url?: string;\r\n requestAuthorization?: string;\r\n produceGeometry?: boolean;\r\n }\r\n\r\n export abstract class Reference extends TileTreeReference {\r\n protected readonly _name: string;\r\n\r\n protected _transform?: Transform;\r\n protected _iModel: IModelConnection;\r\n private _modelId: Id64String;\r\n private _isGlobal?: boolean;\r\n protected readonly _source: RealityModelSource;\r\n protected _planarClipMask?: PlanarClipMaskState;\r\n protected _classifier?: SpatialClassifierTileTreeReference;\r\n protected _mapDrapeTree?: TileTreeReference;\r\n public get modelId() { return this._modelId; }\r\n // public get classifiers(): SpatialClassifiers | undefined { return undefined !== this._classifier ? this._classifier.classifiers : undefined; }\r\n public get planarClipMask(): PlanarClipMaskState | undefined { return this._planarClipMask; }\r\n public set planarClipMask(planarClipMask: PlanarClipMaskState | undefined) { this._planarClipMask = planarClipMask; }\r\n public get planarClipMaskPriority(): number {\r\n if (this._planarClipMask?.settings.priority !== undefined)\r\n return this._planarClipMask.settings.priority;\r\n\r\n return this.isGlobal ? PlanarClipMaskPriority.GlobalRealityModel : PlanarClipMaskPriority.RealityModel;\r\n }\r\n\r\n protected get maskModelIds(): string | undefined {\r\n return this._planarClipMask?.settings.compressedModelIds;\r\n }\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceBaseProps) {\r\n super();\r\n this._name = undefined !== props.name ? props.name : \"\";\r\n this._modelId = props.modelId ? props.modelId : props.iModel.transientIds.next;\r\n let transform;\r\n if (undefined !== props.tilesetToDbTransform) {\r\n const tf = Transform.fromJSON(props.tilesetToDbTransform);\r\n if (!tf.isIdentity)\r\n transform = tf;\r\n\r\n this._transform = transform;\r\n }\r\n\r\n this._iModel = props.iModel;\r\n this._source = props.source;\r\n if (props.planarClipMask)\r\n this._planarClipMask = PlanarClipMaskState.create(props.planarClipMask);\r\n\r\n if (undefined !== props.classifiers)\r\n this._classifier = createClassifierTileTreeReference(props.classifiers, this, props.iModel, props.source);\r\n }\r\n\r\n public get planarClassifierTreeRef() { return this._classifier && this._classifier.activeClassifier && this._classifier.isPlanar ? this._classifier : undefined; }\r\n\r\n public override unionFitRange(union: Range3d): void {\r\n const contentRange = this.computeWorldContentRange();\r\n if (!contentRange.isNull && contentRange.diagonal().magnitude() < Constant.earthRadiusWGS84.equator)\r\n union.extendRange(contentRange);\r\n }\r\n public override get isGlobal() {\r\n if (undefined === this._isGlobal) {\r\n const range = this.computeWorldContentRange();\r\n if (!range.isNull)\r\n this._isGlobal = range.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n }\r\n return this._isGlobal === undefined ? false : this._isGlobal;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n // NB: The classifier must be added first, so we can find it when adding our own tiles.\r\n if (this._classifier && this._classifier.activeClassifier)\r\n this._classifier.addToScene(context);\r\n\r\n this.addPlanarClassifierOrMaskToScene(context);\r\n super.addToScene(context);\r\n }\r\n protected addPlanarClassifierOrMaskToScene(context: SceneContext) {\r\n // A planarClassifier is required if there is a classification tree OR planar masking is required.\r\n const classifierTree = this.planarClassifierTreeRef;\r\n const planarClipMask = this._planarClipMask ?? context.viewport.displayStyle.getPlanarClipMaskState(this.modelId);\r\n if (!classifierTree && !planarClipMask)\r\n return;\r\n\r\n if (classifierTree && !classifierTree.treeOwner.load())\r\n return;\r\n\r\n context.addPlanarClassifier(this.modelId, classifierTree, planarClipMask);\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._classifier)\r\n this._classifier.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._mapDrapeTree)\r\n this._mapDrapeTree.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n super.collectStatistics(stats);\r\n\r\n const tree = undefined !== this._classifier ? this._classifier.treeOwner.tileTree : undefined;\r\n if (undefined !== tree)\r\n tree.collectStatistics(stats);\r\n }\r\n }\r\n\r\n export async function createRealityModelTileTree(rdSourceKey: RealityDataSourceKey, iModel: IModelConnection, modelId: Id64String, tilesetToDb: Transform | undefined, opts?: { deduplicateVertices?: boolean, produceGeometry?: boolean }): Promise<TileTree | undefined> {\r\n const rdSource = await RealityDataSource.fromKey(rdSourceKey, iModel.iTwinId);\r\n // If we can get a valid connection from sourceKey, returns the tile tree\r\n if (rdSource) {\r\n // Serialize the reality data source key into a string to uniquely identify this tile tree\r\n const tileTreeId = rdSource.key.toString();\r\n if (tileTreeId === undefined)\r\n return undefined;\r\n const props = await getTileTreeProps(rdSource, tilesetToDb, iModel);\r\n const loader = new RealityModelTileLoader(props, new BatchedTileIdMap(iModel), opts);\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n const params = new RealityModelTileTreeParams(tileTreeId, iModel, modelId, loader, gcsConverterAvailable, props.tilesetToEcef);\r\n return new RealityModelTileTree(params);\r\n }\r\n return undefined;\r\n }\r\n\r\n async function getTileTreeProps(rdSource: RealityDataSource, tilesetToDbJson: any, iModel: IModelConnection): Promise<RealityModelTileTreeProps> {\r\n const json = await rdSource.getRootDocument(iModel.iTwinId);\r\n let rootTransform = iModel.ecefLocation ? iModel.getMapEcefToDb(0) : Transform.createIdentity();\r\n const geoConverter = iModel.noGcsDefined ? undefined : iModel.geoServices.getConverter(\"WGS84\");\r\n if (geoConverter !== undefined) {\r\n let realityTileRange = RealityModelTileUtils.rangeFromBoundingVolume(json.root.boundingVolume)!.range;\r\n if (json.root.transform) {\r\n const realityToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n realityTileRange = realityToEcef.multiplyRange(realityTileRange);\r\n }\r\n\r\n if (iModel.ecefLocation) {\r\n // In initial publishing version the iModel ecef Transform was used to locate the reality model.\r\n // This would work well only for tilesets published from that iModel but for iModels the ecef transform is calculated\r\n // at the center of the project extents and the reality model location may differ greatly, and the curvature of the earth\r\n // could introduce significant errors.\r\n // The publishing was modified to calculate the ecef transform at the reality model range center and at the same time the \"iModelPublishVersion\"\r\n // member was added to the root object. In order to continue to locate reality models published from older versions at the\r\n // project extents center we look for Tileset version 0.0 and no root.iModelVersion.\r\n const ecefOrigin = realityTileRange.localXYZToWorld(.5, .5, .5)!;\r\n const dbOrigin = rootTransform.multiplyPoint3d(ecefOrigin);\r\n const realityOriginToProjectDistance = iModel.projectExtents.distanceToPoint(dbOrigin);\r\n const maxProjectDistance = 1E5; // Only use the project GCS projection if within 100KM of the project. Don't attempt to use GCS if global reality model or in another locale - Results will be unreliable.\r\n if (realityOriginToProjectDistance < maxProjectDistance && json.asset?.version !== \"0.0\" || undefined !== json.root?.iModelPublishVersion) {\r\n const cartographicOrigin = Cartographic.fromEcef(ecefOrigin);\r\n\r\n if (cartographicOrigin !== undefined) {\r\n const geoOrigin = Point3d.create(cartographicOrigin.longitudeDegrees, cartographicOrigin.latitudeDegrees, cartographicOrigin.height);\r\n const response = await geoConverter.getIModelCoordinatesFromGeoCoordinates([geoOrigin]);\r\n if (response.iModelCoords[0].s === GeoCoordStatus.Success) {\r\n const ecefToDb = await calculateEcefToDbTransformAtLocation(Point3d.fromJSON(response.iModelCoords[0].p), iModel);\r\n if (ecefToDb)\r\n rootTransform = ecefToDb;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n let tilesetToEcef = Transform.createIdentity();\r\n\r\n if (json.root.transform) {\r\n tilesetToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n rootTransform = rootTransform.multiplyTransformTransform(tilesetToEcef);\r\n }\r\n\r\n if (undefined !== tilesetToDbJson)\r\n rootTransform = Transform.fromJSON(tilesetToDbJson).multiplyTransformTransform(rootTransform);\r\n\r\n const root = await expandSubTree(json.root, rdSource);\r\n return new RealityModelTileTreeProps(json, root, rdSource, rootTransform, tilesetToEcef);\r\n }\r\n}\r\n\r\n/** Supplies a reality data [[TileTree]] from a URL. May be associated with a persistent [[GeometricModelState]], or attached at run-time via a [[ContextRealityModelState]].\r\n * @internal\r\n */\r\nexport class RealityTreeReference extends RealityModelTileTree.Reference {\r\n protected _rdSourceKey: RealityDataSourceKey;\r\n private readonly _produceGeometry?: boolean;\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceProps) {\r\n super(props);\r\n this._produceGeometry = props.produceGeometry;\r\n\r\n // Maybe we should throw if both props.rdSourceKey && props.url are undefined\r\n if (props.rdSourceKey)\r\n this._rdSourceKey = props.rdSourceKey;\r\n else\r\n this._rdSourceKey = RealityDataSource.createKeyFromUrl(props.url ?? \"\", RealityDataProvider.ContextShare);\r\n\r\n if (this._produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n const treeId: RealityTreeId = {\r\n rdSourceKey: this._rdSourceKey,\r\n transform: this._transform,\r\n modelId: this.modelId,\r\n maskModelIds: this.maskModelIds,\r\n deduplicateVertices: this._wantWiremesh,\r\n produceGeometry: this._produceGeometry,\r\n };\r\n\r\n return realityTreeSupplier.getOwner(treeId, this._iModel);\r\n }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference {\r\n const ref = new RealityTreeReference({\r\n iModel: this._iModel,\r\n modelId: this.modelId,\r\n source: this._source,\r\n rdSourceKey: this._rdSourceKey,\r\n name: this._name,\r\n produceGeometry: true,\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n private get _wantWiremesh(): boolean {\r\n return this._source.viewFlags.wiremesh;\r\n }\r\n\r\n public override get castsShadows() {\r\n return true;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n return !this._mapDrapeTree || this._mapDrapeTree.isLoadingComplete;\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n // For global reality models (OSM Building layer only) - offset the reality model by the BIM elevation bias. This would not be necessary\r\n // if iModels had their elevation set correctly but unfortunately many GCS erroneously report Sea (Geoid) elevation rather than\r\n // Geodetic.\r\n const tree = this.treeOwner.load();\r\n if (undefined === tree)\r\n return undefined;\r\n\r\n const drawArgs = super.createDrawArgs(context);\r\n if (drawArgs !== undefined && this._iModel.isGeoLocated && tree.isContentUnbounded) {\r\n const elevationBias = context.viewport.view.displayStyle.backgroundMapElevationBias;\r\n\r\n if (undefined !== elevationBias)\r\n drawArgs.location.origin.z -= elevationBias;\r\n }\r\n\r\n return drawArgs;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n const tree = this.treeOwner.tileTree as RealityTileTree;\r\n if (undefined !== tree && context.viewport.iModel.isGeoLocated && (tree.loader as RealityModelTileLoader).doDrapeBackgroundMap) {\r\n // NB: We save this off strictly so that discloseTileTrees() can find it...better option?\r\n this._mapDrapeTree = context.viewport.backgroundDrapeMap;\r\n context.addBackgroundDrapedModel(this, undefined);\r\n }\r\n\r\n super.addToScene(context);\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tree = this.treeOwner.tileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel)\r\n return undefined;\r\n\r\n const map = (tree as RealityTileTree).loader.getBatchIdMap();\r\n const batch = undefined !== map ? map.getBatchProperties(hit.sourceId) : undefined;\r\n if (undefined === batch && tree.modelId !== hit.sourceId)\r\n return undefined;\r\n\r\n const strings = [];\r\n\r\n const loader = (tree as RealityModelTileTree).loader;\r\n const type = (loader as RealityModelTileLoader).tree.rdSource.realityDataType;\r\n\r\n // If a type is specified, display it\r\n if (type !== undefined) {\r\n // Case insensitive\r\n switch (type.toUpperCase()) {\r\n case DefaultSupportedTypes.RealityMesh3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.RealityMesh3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Terrain3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Terrain3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Cesium3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Cesium3DTiles\"));\r\n break;\r\n }\r\n }\r\n\r\n if (this._name) {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:TooltipInfo.Name\")} ${this._name}`);\r\n } else {\r\n const cesiumAsset = this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset ? CesiumIonAssetProvider.parseCesiumUrl(this._rdSourceKey.id) : undefined;\r\n strings.push(cesiumAsset ? `Cesium Asset: ${cesiumAsset.id}` : this._rdSourceKey.id);\r\n }\r\n\r\n if (batch !== undefined)\r\n for (const key of Object.keys(batch))\r\n if (-1 === key.indexOf(\"#\")) // Avoid internal cesium\r\n strings.push(`${key}: ${batch[key]}`);\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n public override addLogoCards(cards: HTMLTableElement): void {\r\n if (this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset) {\r\n cards.appendChild(IModelApp.makeLogoCard({ heading: \"OpenStreetMap\", notice: `&copy;<a href=\\\"https://www.openstreetmap.org/copyright\\\">OpenStreetMap</a> ${IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap:OpenStreetMapContributors\")}` }));\r\n }\r\n }\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"RealityModelTileTree.js","sourceRoot":"","sources":["../../../src/tile/RealityModelTileTree.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 Utils\r\n */\r\n\r\nimport {\r\n assert, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStringsOrUndefined, CompressedId64Set, Id64String,\r\n} from \"@itwin/core-bentley\";\r\nimport {\r\n Cartographic, DefaultSupportedTypes, GeoCoordStatus, PlanarClipMaskPriority, PlanarClipMaskSettings,\r\n RealityDataProvider,\r\n RealityDataSourceKey,\r\n SpatialClassifiers, ViewFlagOverrides,\r\n} from \"@itwin/core-common\";\r\nimport { Angle, Constant, Ellipsoid, Matrix3d, Point3d, Range3d, Ray3d, Transform, TransformProps, Vector3d, XYZ } from \"@itwin/core-geometry\";\r\nimport { calculateEcefToDbTransformAtLocation } from \"../BackgroundMapGeometry\";\r\nimport { DisplayStyleState } from \"../DisplayStyleState\";\r\nimport { HitDetail } from \"../HitDetail\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { PlanarClipMaskState } from \"../PlanarClipMaskState\";\r\nimport { RealityDataSource } from \"../RealityDataSource\";\r\nimport { RenderMemory } from \"../render/RenderMemory\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport { ViewState } from \"../ViewState\";\r\nimport {\r\n BatchedTileIdMap, CesiumIonAssetProvider, createClassifierTileTreeReference, createDefaultViewFlagOverrides, DisclosedTileTreeSet, GeometryTileTreeReference,\r\n getGcsConverterAvailable, RealityTile, RealityTileLoader, RealityTileParams, RealityTileTree, RealityTileTreeParams, SpatialClassifierTileTreeReference, Tile,\r\n TileDrawArgs, TileLoadPriority, TileRequest, TileTree, TileTreeOwner, TileTreeReference, TileTreeSupplier,\r\n} from \"./internal\";\r\n\r\nfunction getUrl(content: any) {\r\n return content ? (content.url ? content.url : content.uri) : undefined;\r\n}\r\n\r\ninterface RealityTreeId {\r\n rdSourceKey: RealityDataSourceKey;\r\n transform?: Transform;\r\n modelId: Id64String;\r\n maskModelIds?: string;\r\n deduplicateVertices: boolean;\r\n produceGeometry?: boolean;\r\n toEcefTransform?: Transform;\r\n}\r\n\r\nfunction compareOrigins(lhs: XYZ, rhs: XYZ): number {\r\n let cmp = compareNumbers(lhs.x, rhs.x);\r\n if (0 === cmp) {\r\n cmp = compareNumbers(lhs.y, rhs.y);\r\n if (0 === cmp)\r\n cmp = compareNumbers(lhs.z, rhs.z);\r\n }\r\n\r\n return cmp;\r\n}\r\n\r\nfunction compareMatrices(lhs: Matrix3d, rhs: Matrix3d): number {\r\n for (let i = 0; i < 9; i++) {\r\n const cmp = compareNumbers(lhs.coffs[i], rhs.coffs[i]);\r\n if (0 !== cmp)\r\n return cmp;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nfunction compareTransforms(lhs?: Transform, rhs?: Transform) {\r\n if (undefined === lhs)\r\n return undefined !== rhs ? -1 : 0;\r\n\r\n else if (undefined === rhs)\r\n return 1;\r\n\r\n const cmp = compareOrigins(lhs.origin, rhs.origin);\r\n return 0 !== cmp ? cmp : compareMatrices(lhs.matrix, rhs.matrix);\r\n}\r\n\r\nclass RealityTreeSupplier implements TileTreeSupplier {\r\n public readonly isEcefDependent = true;\r\n\r\n public getOwner(treeId: RealityTreeId, iModel: IModelConnection): TileTreeOwner {\r\n return iModel.tiles.getTileTreeOwner(treeId, this);\r\n }\r\n\r\n public async createTileTree(treeId: RealityTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n if (treeId.maskModelIds)\r\n await iModel.models.load(CompressedId64Set.decompressSet(treeId.maskModelIds));\r\n\r\n const opts = { deduplicateVertices: treeId.deduplicateVertices, produceGeometry: treeId.produceGeometry };\r\n return RealityModelTileTree.createRealityModelTileTree(treeId.rdSourceKey, iModel, treeId.modelId, treeId.transform, opts);\r\n }\r\n\r\n public compareTileTreeIds(lhs: RealityTreeId, rhs: RealityTreeId): number {\r\n let cmp = compareStringsOrUndefined(lhs.rdSourceKey.id, rhs.rdSourceKey.id);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.rdSourceKey.format, rhs.rdSourceKey.format);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.rdSourceKey.iTwinId, rhs.rdSourceKey.iTwinId);\r\n if (0 === cmp) {\r\n cmp = compareStringsOrUndefined(lhs.modelId, rhs.modelId);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.deduplicateVertices, rhs.deduplicateVertices);\r\n }\r\n }\r\n }\r\n\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareStringsOrUndefined(lhs.maskModelIds, rhs.maskModelIds);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareBooleansOrUndefined(lhs.produceGeometry, rhs.produceGeometry);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n cmp = compareTransforms(lhs.transform, rhs.transform);\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n return compareTransforms(lhs.toEcefTransform, rhs.toEcefTransform);\r\n }\r\n}\r\n\r\nconst realityTreeSupplier = new RealityTreeSupplier();\r\n\r\n/** @internal */\r\nexport function createRealityTileTreeReference(props: RealityModelTileTree.ReferenceProps): RealityModelTileTree.Reference {\r\n return new RealityTreeReference(props);\r\n}\r\n\r\nconst zeroPoint = Point3d.createZero();\r\nconst earthEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.equator, Constant.earthRadiusWGS84.polar);\r\nconst scratchRay = Ray3d.createXAxis();\r\n\r\n/** @internal */\r\nexport class RealityTileRegion {\r\n constructor(values: { minLongitude: number, minLatitude: number, minHeight: number, maxLongitude: number, maxLatitude: number, maxHeight: number }) {\r\n this.minLongitude = values.minLongitude;\r\n this.minLatitude = values.minLatitude;\r\n this.minHeight = values.minHeight;\r\n this.maxLongitude = values.maxLongitude;\r\n this.maxLatitude = values.maxLatitude;\r\n this.maxHeight = values.maxHeight;\r\n }\r\n public minLongitude: number;\r\n public minLatitude: number;\r\n public minHeight: number;\r\n public maxLongitude: number;\r\n public maxLatitude: number;\r\n public maxHeight: number;\r\n\r\n public static create(region: number[]): RealityTileRegion {\r\n const minHeight = region[4];\r\n const maxHeight = region[5];\r\n const minLongitude = region[0];\r\n const maxLongitude = region[2];\r\n const minLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[1]);\r\n const maxLatitude = Cartographic.parametricLatitudeFromGeodeticLatitude(region[3]);\r\n return new RealityTileRegion({ minLongitude, minLatitude, minHeight, maxLongitude, maxLatitude, maxHeight });\r\n }\r\n\r\n public static isGlobal(boundingVolume: any) {\r\n return Array.isArray(boundingVolume?.region) && (boundingVolume.region[2] - boundingVolume.region[0]) > Angle.piRadians && (boundingVolume.region[3] - boundingVolume.region[1]) > Angle.piOver2Radians;\r\n }\r\n public getRange(): { range: Range3d, corners?: Point3d[] } {\r\n const maxAngle = Math.max(Math.abs(this.maxLatitude - this.minLatitude), Math.abs(this.maxLongitude - this.minLongitude));\r\n let corners;\r\n let range: Range3d;\r\n if (maxAngle < Math.PI / 8) {\r\n corners = new Array<Point3d>(8);\r\n const chordTolerance = (1 - Math.cos(maxAngle / 2)) * Constant.earthRadiusWGS84.polar;\r\n const addEllipsoidCorner = ((long: number, lat: number, index: number) => {\r\n const ray = earthEllipsoid.radiansToUnitNormalRay(long, lat, scratchRay)!;\r\n corners[index] = ray.fractionToPoint(this.minHeight - chordTolerance);\r\n corners[index + 4] = ray.fractionToPoint(this.maxHeight + chordTolerance);\r\n });\r\n addEllipsoidCorner(this.minLongitude, this.minLatitude, 0);\r\n addEllipsoidCorner(this.minLongitude, this.maxLatitude, 1);\r\n addEllipsoidCorner(this.maxLongitude, this.minLatitude, 2);\r\n addEllipsoidCorner(this.maxLongitude, this.maxLatitude, 3);\r\n range = Range3d.createArray(corners);\r\n } else {\r\n const minEq = Constant.earthRadiusWGS84.equator + this.minHeight, maxEq = Constant.earthRadiusWGS84.equator + this.maxHeight;\r\n const minEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, minEq, minEq, Constant.earthRadiusWGS84.polar + this.minHeight);\r\n const maxEllipsoid = Ellipsoid.createCenterMatrixRadii(zeroPoint, undefined, maxEq, maxEq, Constant.earthRadiusWGS84.polar + this.maxHeight);\r\n range = minEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude);\r\n range.extendRange(maxEllipsoid.patchRangeStartEndRadians(this.minLongitude, this.maxLongitude, this.minLatitude, this.maxLatitude));\r\n }\r\n return { range, corners };\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class RealityModelTileUtils {\r\n public static rangeFromBoundingVolume(boundingVolume: any): { range: Range3d, corners?: Point3d[], region?: RealityTileRegion } | undefined {\r\n if (undefined === boundingVolume)\r\n return undefined;\r\n\r\n let corners: Point3d[] | undefined;\r\n let range: Range3d | undefined;\r\n if (undefined !== boundingVolume.box) {\r\n const box: number[] = boundingVolume.box;\r\n const center = Point3d.create(box[0], box[1], box[2]);\r\n const ux = Vector3d.create(box[3], box[4], box[5]);\r\n const uy = Vector3d.create(box[6], box[7], box[8]);\r\n const uz = Vector3d.create(box[9], box[10], box[11]);\r\n corners = new Array<Point3d>();\r\n for (let j = 0; j < 2; j++) {\r\n for (let k = 0; k < 2; k++) {\r\n for (let l = 0; l < 2; l++) {\r\n corners.push(center.plus3Scaled(ux, (j ? -1.0 : 1.0), uy, (k ? -1.0 : 1.0), uz, (l ? -1.0 : 1.0)));\r\n }\r\n }\r\n }\r\n range = Range3d.createArray(corners);\r\n } else if (Array.isArray(boundingVolume.sphere)) {\r\n const sphere: number[] = boundingVolume.sphere;\r\n const center = Point3d.create(sphere[0], sphere[1], sphere[2]);\r\n const radius = sphere[3];\r\n range = Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\r\n } else if (Array.isArray(boundingVolume.region)) {\r\n const region = RealityTileRegion.create(boundingVolume.region);\r\n const regionRange = region.getRange();\r\n return { range: regionRange.range, corners: regionRange.corners, region };\r\n }\r\n return range ? { range, corners } : undefined;\r\n\r\n }\r\n public static maximumSizeFromGeometricTolerance(range: Range3d, geometricError: number): number {\r\n const minToleranceRatio = true === IModelApp.renderSystem.isMobile ? IModelApp.tileAdmin.mobileRealityTileMinToleranceRatio : 1.0; // Nominally the error on screen size of a tile. Increasing generally increases performance (fewer draw calls) at expense of higher load times.\r\n\r\n // NB: We increase the above minToleranceRatio on mobile devices in order to help avoid pruning too often based on the memory threshold for\r\n // pruning currently used by reality tile trees on mobile.\r\n\r\n return minToleranceRatio * range.diagonal().magnitude() / geometricError;\r\n }\r\n public static transformFromJson(jTrans: number[] | undefined): Transform {\r\n return (jTrans === undefined) ? Transform.createIdentity() : Transform.createOriginAndMatrix(Point3d.create(jTrans[12], jTrans[13], jTrans[14]), Matrix3d.createRowValues(jTrans[0], jTrans[4], jTrans[8], jTrans[1], jTrans[5], jTrans[9], jTrans[2], jTrans[6], jTrans[10]));\r\n }\r\n}\r\n\r\n/** @internal */\r\nenum SMTextureType {\r\n None = 0, // no textures\r\n Embedded = 1, // textures are available and stored in the nodes\r\n Streaming = 2, // textures need to be downloaded, Bing Maps, etc…\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileTreeProps {\r\n public location: Transform;\r\n public tilesetJson: any;\r\n public doDrapeBackgroundMap: boolean = false;\r\n public rdSource: RealityDataSource;\r\n public yAxisUp = false;\r\n public root: any;\r\n\r\n constructor(json: any, root: any, rdSource: RealityDataSource, tilesetToDbTransform: Transform, public readonly tilesetToEcef?: Transform) {\r\n this.tilesetJson = root;\r\n this.rdSource = rdSource;\r\n this.location = tilesetToDbTransform;\r\n this.doDrapeBackgroundMap = (json.root && json.root.SMMasterHeader && SMTextureType.Streaming === json.root.SMMasterHeader.IsTextured);\r\n if (json.asset.gltfUpAxis === undefined || json.asset.gltfUpAxis === \"y\" || json.asset.gltfUpAxis === \"Y\")\r\n this.yAxisUp = true;\r\n }\r\n}\r\n\r\nclass RealityModelTileTreeParams implements RealityTileTreeParams {\r\n public id: string;\r\n public modelId: string;\r\n public iModel: IModelConnection;\r\n public is3d = true;\r\n public loader: RealityModelTileLoader;\r\n public rootTile: RealityTileParams;\r\n\r\n public get location() { return this.loader.tree.location; }\r\n public get yAxisUp() { return this.loader.tree.yAxisUp; }\r\n public get priority() { return this.loader.priority; }\r\n\r\n public constructor(tileTreeId: string, iModel: IModelConnection, modelId: Id64String, loader: RealityModelTileLoader, public readonly gcsConverterAvailable: boolean, public readonly rootToEcef: Transform | undefined) {\r\n this.loader = loader;\r\n this.id = tileTreeId;\r\n this.modelId = modelId;\r\n this.iModel = iModel;\r\n this.rootTile = new RealityModelTileProps(loader.tree.tilesetJson, undefined, \"\", undefined, undefined === loader.tree.tilesetJson.refine ? undefined : loader.tree.tilesetJson.refine === \"ADD\");\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileProps implements RealityTileParams {\r\n public readonly contentId: string;\r\n public readonly range: Range3d;\r\n public readonly contentRange?: Range3d;\r\n public readonly maximumSize: number;\r\n public readonly isLeaf: boolean;\r\n public readonly transformToRoot?: Transform;\r\n public readonly additiveRefinement?: boolean;\r\n public readonly parent?: RealityTile;\r\n public readonly noContentButTerminateOnSelection?: boolean;\r\n public readonly rangeCorners?: Point3d[];\r\n public readonly region?: RealityTileRegion;\r\n\r\n constructor(json: any, parent: RealityTile | undefined, thisId: string, transformToRoot?: Transform, additiveRefinement?: boolean) {\r\n this.contentId = thisId;\r\n this.parent = parent;\r\n const boundingVolume = RealityModelTileUtils.rangeFromBoundingVolume(json.boundingVolume);\r\n if (boundingVolume) {\r\n this.range = boundingVolume.range;\r\n this.rangeCorners = boundingVolume.corners;\r\n this.region = boundingVolume?.region;\r\n } else {\r\n this.range = Range3d.createNull();\r\n assert(false, \"Unbounded tile\");\r\n }\r\n this.isLeaf = !Array.isArray(json.children) || 0 === json.children.length;\r\n this.transformToRoot = transformToRoot;\r\n this.additiveRefinement = additiveRefinement;\r\n const hasContents = undefined !== getUrl(json.content);\r\n if (hasContents)\r\n this.contentRange = RealityModelTileUtils.rangeFromBoundingVolume(json.content.boundingVolume)?.range;\r\n else {\r\n // A node without content should probably be selectable even if not additive refinement - But restrict it to that case here\r\n // to avoid potential problems with existing reality models, but still avoid overselection in the OSM world building set.\r\n if (this.additiveRefinement || parent?.additiveRefinement)\r\n this.noContentButTerminateOnSelection = true;\r\n }\r\n\r\n this.maximumSize = (this.noContentButTerminateOnSelection || hasContents) ? RealityModelTileUtils.maximumSizeFromGeometricTolerance(Range3d.fromJSON(this.range), json.geometricError) : 0;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass FindChildResult {\r\n constructor(public id: string, public json: any, public transformToRoot?: Transform) { }\r\n}\r\n\r\n/** @internal */\r\nfunction assembleUrl(prefix: string, url: string): string {\r\n\r\n if (url.startsWith(\"./\")) {\r\n url = url.substring(2);\r\n } else {\r\n const prefixParts = prefix.split(\"/\");\r\n prefixParts.pop();\r\n while (url.startsWith(\"../\")) {\r\n prefixParts.pop();\r\n url = url.substring(3);\r\n }\r\n prefixParts.push(\"\");\r\n prefix = prefixParts.join(\"/\");\r\n }\r\n return prefix + url;\r\n}\r\n\r\n/** @internal */\r\nfunction addUrlPrefix(subTree: any, prefix: string) {\r\n if (undefined === subTree)\r\n return;\r\n\r\n if (undefined !== subTree.content) {\r\n if (undefined !== subTree.content.url)\r\n subTree.content.url = assembleUrl(prefix, subTree.content.url);\r\n else if (undefined !== subTree.content.uri)\r\n subTree.content.uri = assembleUrl(prefix, subTree.content.uri);\r\n }\r\n\r\n if (undefined !== subTree.children)\r\n for (const child of subTree.children)\r\n addUrlPrefix(child, prefix);\r\n}\r\n\r\n/** @internal */\r\nasync function expandSubTree(root: any, rdsource: RealityDataSource): Promise<any> {\r\n const childUrl = getUrl(root.content);\r\n if (undefined !== childUrl && childUrl.endsWith(\"json\")) { // A child may contain a subTree...\r\n const subTree = await rdsource.getTileJson(childUrl);\r\n const prefixIndex = childUrl.lastIndexOf(\"/\");\r\n if (prefixIndex > 0)\r\n addUrlPrefix(subTree.root, childUrl.substring(0, prefixIndex + 1));\r\n\r\n return subTree.root;\r\n } else {\r\n return root;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass RealityModelTileLoader extends RealityTileLoader {\r\n public readonly tree: RealityModelTileTreeProps;\r\n private readonly _batchedIdMap?: BatchedTileIdMap;\r\n private _viewFlagOverrides: ViewFlagOverrides;\r\n private readonly _deduplicateVertices: boolean;\r\n\r\n public constructor(tree: RealityModelTileTreeProps, batchedIdMap?: BatchedTileIdMap, opts?: { deduplicateVertices?: boolean, produceGeometry?: boolean }) {\r\n super(opts?.produceGeometry ?? false);\r\n this.tree = tree;\r\n this._batchedIdMap = batchedIdMap;\r\n this._deduplicateVertices = opts?.deduplicateVertices ?? false;\r\n\r\n let clipVolume;\r\n if (RealityTileRegion.isGlobal(tree.tilesetJson.boundingVolume))\r\n clipVolume = false;\r\n this._viewFlagOverrides = createDefaultViewFlagOverrides({ lighting: true, clipVolume });\r\n\r\n // Display edges if they are present (Cesium outline extension) and enabled for view.\r\n this._viewFlagOverrides.visibleEdges = undefined;\r\n this._viewFlagOverrides.hiddenEdges = undefined;\r\n\r\n // Allow wiremesh display.\r\n this._viewFlagOverrides.wiremesh = undefined;\r\n }\r\n\r\n public get doDrapeBackgroundMap(): boolean { return this.tree.doDrapeBackgroundMap; }\r\n public override get wantDeduplicatedVertices() { return this._deduplicateVertices; }\r\n\r\n public get maxDepth(): number { return 32; } // Can be removed when element tile selector is working.\r\n public get minDepth(): number { return 0; }\r\n public get priority(): TileLoadPriority { return TileLoadPriority.Context; }\r\n public override getBatchIdMap(): BatchedTileIdMap | undefined { return this._batchedIdMap; }\r\n public get clipLowResolutionTiles(): boolean { return true; }\r\n public override get viewFlagOverrides(): ViewFlagOverrides { return this._viewFlagOverrides; }\r\n\r\n public async loadChildren(tile: RealityTile): Promise<Tile[] | undefined> {\r\n const props = await this.getChildrenProps(tile);\r\n if (undefined === props)\r\n return undefined;\r\n\r\n const children = [];\r\n for (const prop of props)\r\n children.push(tile.realityRoot.createTile(prop));\r\n\r\n return children;\r\n }\r\n\r\n public async getChildrenProps(parent: RealityTile): Promise<RealityTileParams[]> {\r\n const props: RealityModelTileProps[] = [];\r\n const thisId = parent.contentId;\r\n const prefix = thisId.length ? `${thisId}_` : \"\";\r\n const findResult = await this.findTileInJson(this.tree.tilesetJson, thisId, \"\", undefined);\r\n if (undefined !== findResult && Array.isArray(findResult.json.children)) {\r\n for (let i = 0; i < findResult.json.children.length; i++) {\r\n const childId = prefix + i;\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, childId, \"\", undefined);\r\n if (undefined !== foundChild)\r\n props.push(new RealityModelTileProps(foundChild.json, parent, foundChild.id, foundChild.transformToRoot, foundChild.json.refine === undefined ? undefined : foundChild.json.refine === \"ADD\"));\r\n }\r\n }\r\n return props;\r\n }\r\n\r\n public getRequestChannel(_tile: Tile) {\r\n // ###TODO: May want to extract the hostname from the URL.\r\n return IModelApp.tileAdmin.channels.getForHttp(\"itwinjs-reality-model\");\r\n }\r\n\r\n public async requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response> {\r\n const foundChild = await this.findTileInJson(this.tree.tilesetJson, tile.contentId, \"\");\r\n if (undefined === foundChild || undefined === foundChild.json.content || isCanceled())\r\n return undefined;\r\n\r\n return this.tree.rdSource.getTileContent(getUrl(foundChild.json.content));\r\n }\r\n\r\n private async findTileInJson(tilesetJson: any, id: string, parentId: string, transformToRoot?: Transform): Promise<FindChildResult | undefined> {\r\n if (id.length === 0)\r\n return new FindChildResult(id, tilesetJson, transformToRoot); // Root.\r\n\r\n const separatorIndex = id.indexOf(\"_\");\r\n const childId = (separatorIndex < 0) ? id : id.substring(0, separatorIndex);\r\n const childIndex = parseInt(childId, 10);\r\n\r\n if (isNaN(childIndex) || tilesetJson === undefined || tilesetJson.children === undefined || childIndex >= tilesetJson.children.length) {\r\n assert(false, \"scalable mesh child not found.\");\r\n return undefined;\r\n }\r\n\r\n const foundChild = tilesetJson.children[childIndex];\r\n const thisParentId = parentId.length ? (`${parentId}_${childId}`) : childId;\r\n if (foundChild.transform) {\r\n const thisTransform = RealityModelTileUtils.transformFromJson(foundChild.transform);\r\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(thisTransform) : thisTransform;\r\n }\r\n\r\n if (separatorIndex >= 0) {\r\n return this.findTileInJson(foundChild, id.substring(separatorIndex + 1), thisParentId, transformToRoot);\r\n }\r\n\r\n tilesetJson.children[childIndex] = await expandSubTree(foundChild, this.tree.rdSource);\r\n\r\n return new FindChildResult(thisParentId, tilesetJson.children[childIndex], transformToRoot);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type RealityModelSource = ViewState | DisplayStyleState;\r\n\r\n/** @internal */\r\nexport class RealityModelTileTree extends RealityTileTree {\r\n private readonly _isContentUnbounded: boolean;\r\n public constructor(params: RealityTileTreeParams) {\r\n super(params);\r\n\r\n this._isContentUnbounded = this.rootTile.contentRange.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n if (!this.isContentUnbounded && !this.rootTile.contentRange.isNull) {\r\n const worldContentRange = this.iModelTransform.multiplyRange(this.rootTile.contentRange);\r\n this.iModel.expandDisplayedExtents(worldContentRange);\r\n }\r\n }\r\n public override get isContentUnbounded() { return this._isContentUnbounded; }\r\n}\r\n\r\n/** @internal */\r\n// eslint-disable-next-line no-redeclare\r\nexport namespace RealityModelTileTree {\r\n\r\n export interface ReferenceBaseProps {\r\n iModel: IModelConnection;\r\n source: RealityModelSource;\r\n rdSourceKey: RealityDataSourceKey;\r\n modelId?: Id64String;\r\n tilesetToDbTransform?: TransformProps;\r\n tilesetToEcefTransform?: TransformProps;\r\n name?: string;\r\n classifiers?: SpatialClassifiers;\r\n planarClipMask?: PlanarClipMaskSettings;\r\n }\r\n export interface ReferenceProps extends ReferenceBaseProps {\r\n url?: string;\r\n requestAuthorization?: string;\r\n produceGeometry?: boolean;\r\n }\r\n\r\n export abstract class Reference extends TileTreeReference {\r\n protected readonly _name: string;\r\n\r\n protected _transform?: Transform;\r\n protected _iModel: IModelConnection;\r\n private _modelId: Id64String;\r\n private _isGlobal?: boolean;\r\n protected readonly _source: RealityModelSource;\r\n protected _planarClipMask?: PlanarClipMaskState;\r\n protected _classifier?: SpatialClassifierTileTreeReference;\r\n protected _mapDrapeTree?: TileTreeReference;\r\n public get modelId() { return this._modelId; }\r\n // public get classifiers(): SpatialClassifiers | undefined { return undefined !== this._classifier ? this._classifier.classifiers : undefined; }\r\n public get planarClipMask(): PlanarClipMaskState | undefined { return this._planarClipMask; }\r\n public set planarClipMask(planarClipMask: PlanarClipMaskState | undefined) { this._planarClipMask = planarClipMask; }\r\n public get planarClipMaskPriority(): number {\r\n if (this._planarClipMask?.settings.priority !== undefined)\r\n return this._planarClipMask.settings.priority;\r\n\r\n return this.isGlobal ? PlanarClipMaskPriority.GlobalRealityModel : PlanarClipMaskPriority.RealityModel;\r\n }\r\n\r\n protected get maskModelIds(): string | undefined {\r\n return this._planarClipMask?.settings.compressedModelIds;\r\n }\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceBaseProps) {\r\n super();\r\n this._name = undefined !== props.name ? props.name : \"\";\r\n this._modelId = props.modelId ? props.modelId : props.iModel.transientIds.next;\r\n let transform;\r\n if (undefined !== props.tilesetToDbTransform) {\r\n const tf = Transform.fromJSON(props.tilesetToDbTransform);\r\n if (!tf.isIdentity)\r\n transform = tf;\r\n\r\n this._transform = transform;\r\n }\r\n\r\n this._iModel = props.iModel;\r\n this._source = props.source;\r\n if (props.planarClipMask)\r\n this._planarClipMask = PlanarClipMaskState.create(props.planarClipMask);\r\n\r\n if (undefined !== props.classifiers)\r\n this._classifier = createClassifierTileTreeReference(props.classifiers, this, props.iModel, props.source);\r\n }\r\n\r\n public get planarClassifierTreeRef() { return this._classifier && this._classifier.activeClassifier && this._classifier.isPlanar ? this._classifier : undefined; }\r\n\r\n public override unionFitRange(union: Range3d): void {\r\n const contentRange = this.computeWorldContentRange();\r\n if (!contentRange.isNull && contentRange.diagonal().magnitude() < Constant.earthRadiusWGS84.equator)\r\n union.extendRange(contentRange);\r\n }\r\n public override get isGlobal() {\r\n if (undefined === this._isGlobal) {\r\n const range = this.computeWorldContentRange();\r\n if (!range.isNull)\r\n this._isGlobal = range.diagonal().magnitude() > 2 * Constant.earthRadiusWGS84.equator;\r\n }\r\n return this._isGlobal === undefined ? false : this._isGlobal;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n // NB: The classifier must be added first, so we can find it when adding our own tiles.\r\n if (this._classifier && this._classifier.activeClassifier)\r\n this._classifier.addToScene(context);\r\n\r\n this.addPlanarClassifierOrMaskToScene(context);\r\n super.addToScene(context);\r\n }\r\n protected addPlanarClassifierOrMaskToScene(context: SceneContext) {\r\n // A planarClassifier is required if there is a classification tree OR planar masking is required.\r\n const classifierTree = this.planarClassifierTreeRef;\r\n const planarClipMask = this._planarClipMask ?? context.viewport.displayStyle.getPlanarClipMaskState(this.modelId);\r\n if (!classifierTree && !planarClipMask)\r\n return;\r\n\r\n if (classifierTree && !classifierTree.treeOwner.load())\r\n return;\r\n\r\n context.addPlanarClassifier(this.modelId, classifierTree, planarClipMask);\r\n }\r\n\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._classifier)\r\n this._classifier.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._mapDrapeTree)\r\n this._mapDrapeTree.discloseTileTrees(trees);\r\n\r\n if (undefined !== this._planarClipMask)\r\n this._planarClipMask.discloseTileTrees(trees);\r\n }\r\n public override collectStatistics(stats: RenderMemory.Statistics): void {\r\n super.collectStatistics(stats);\r\n\r\n const tree = undefined !== this._classifier ? this._classifier.treeOwner.tileTree : undefined;\r\n if (undefined !== tree)\r\n tree.collectStatistics(stats);\r\n }\r\n }\r\n\r\n export async function createRealityModelTileTree(rdSourceKey: RealityDataSourceKey, iModel: IModelConnection, modelId: Id64String, tilesetToDb: Transform | undefined, opts?: { deduplicateVertices?: boolean, produceGeometry?: boolean }): Promise<TileTree | undefined> {\r\n const rdSource = await RealityDataSource.fromKey(rdSourceKey, iModel.iTwinId);\r\n // If we can get a valid connection from sourceKey, returns the tile tree\r\n if (rdSource) {\r\n // Serialize the reality data source key into a string to uniquely identify this tile tree\r\n const tileTreeId = rdSource.key.toString();\r\n if (tileTreeId === undefined)\r\n return undefined;\r\n const props = await getTileTreeProps(rdSource, tilesetToDb, iModel);\r\n const loader = new RealityModelTileLoader(props, new BatchedTileIdMap(iModel), opts);\r\n const gcsConverterAvailable = await getGcsConverterAvailable(iModel);\r\n const params = new RealityModelTileTreeParams(tileTreeId, iModel, modelId, loader, gcsConverterAvailable, props.tilesetToEcef);\r\n return new RealityModelTileTree(params);\r\n }\r\n return undefined;\r\n }\r\n\r\n async function getTileTreeProps(rdSource: RealityDataSource, tilesetToDbJson: any, iModel: IModelConnection): Promise<RealityModelTileTreeProps> {\r\n const json = await rdSource.getRootDocument(iModel.iTwinId);\r\n let rootTransform = iModel.ecefLocation ? iModel.getMapEcefToDb(0) : Transform.createIdentity();\r\n const geoConverter = iModel.noGcsDefined ? undefined : iModel.geoServices.getConverter(\"WGS84\");\r\n if (geoConverter !== undefined) {\r\n let realityTileRange = RealityModelTileUtils.rangeFromBoundingVolume(json.root.boundingVolume)!.range;\r\n if (json.root.transform) {\r\n const realityToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n realityTileRange = realityToEcef.multiplyRange(realityTileRange);\r\n }\r\n\r\n if (iModel.ecefLocation) {\r\n // In initial publishing version the iModel ecef Transform was used to locate the reality model.\r\n // This would work well only for tilesets published from that iModel but for iModels the ecef transform is calculated\r\n // at the center of the project extents and the reality model location may differ greatly, and the curvature of the earth\r\n // could introduce significant errors.\r\n // The publishing was modified to calculate the ecef transform at the reality model range center and at the same time the \"iModelPublishVersion\"\r\n // member was added to the root object. In order to continue to locate reality models published from older versions at the\r\n // project extents center we look for Tileset version 0.0 and no root.iModelVersion.\r\n const ecefOrigin = realityTileRange.localXYZToWorld(.5, .5, .5)!;\r\n const dbOrigin = rootTransform.multiplyPoint3d(ecefOrigin);\r\n const realityOriginToProjectDistance = iModel.projectExtents.distanceToPoint(dbOrigin);\r\n const maxProjectDistance = 1E5; // Only use the project GCS projection if within 100KM of the project. Don't attempt to use GCS if global reality model or in another locale - Results will be unreliable.\r\n if (realityOriginToProjectDistance < maxProjectDistance && json.asset?.version !== \"0.0\" || undefined !== json.root?.iModelPublishVersion) {\r\n const cartographicOrigin = Cartographic.fromEcef(ecefOrigin);\r\n\r\n if (cartographicOrigin !== undefined) {\r\n const geoOrigin = Point3d.create(cartographicOrigin.longitudeDegrees, cartographicOrigin.latitudeDegrees, cartographicOrigin.height);\r\n const response = await geoConverter.getIModelCoordinatesFromGeoCoordinates([geoOrigin]);\r\n if (response.iModelCoords[0].s === GeoCoordStatus.Success) {\r\n const ecefToDb = await calculateEcefToDbTransformAtLocation(Point3d.fromJSON(response.iModelCoords[0].p), iModel);\r\n if (ecefToDb)\r\n rootTransform = ecefToDb;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n let tilesetToEcef = Transform.createIdentity();\r\n\r\n if (json.root.transform) {\r\n tilesetToEcef = RealityModelTileUtils.transformFromJson(json.root.transform);\r\n rootTransform = rootTransform.multiplyTransformTransform(tilesetToEcef);\r\n }\r\n\r\n if (undefined !== tilesetToDbJson)\r\n rootTransform = Transform.fromJSON(tilesetToDbJson).multiplyTransformTransform(rootTransform);\r\n\r\n const root = await expandSubTree(json.root, rdSource);\r\n return new RealityModelTileTreeProps(json, root, rdSource, rootTransform, tilesetToEcef);\r\n }\r\n}\r\n\r\n/** Supplies a reality data [[TileTree]] from a URL. May be associated with a persistent [[GeometricModelState]], or attached at run-time via a [[ContextRealityModelState]].\r\n * @internal\r\n */\r\nexport class RealityTreeReference extends RealityModelTileTree.Reference {\r\n protected _rdSourceKey: RealityDataSourceKey;\r\n private readonly _produceGeometry?: boolean;\r\n\r\n public constructor(props: RealityModelTileTree.ReferenceProps) {\r\n super(props);\r\n this._produceGeometry = props.produceGeometry;\r\n\r\n // Maybe we should throw if both props.rdSourceKey && props.url are undefined\r\n if (props.rdSourceKey)\r\n this._rdSourceKey = props.rdSourceKey;\r\n else\r\n this._rdSourceKey = RealityDataSource.createKeyFromUrl(props.url ?? \"\", RealityDataProvider.ContextShare);\r\n\r\n if (this._produceGeometry)\r\n this.collectTileGeometry = (collector) => this._collectTileGeometry(collector);\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n const treeId: RealityTreeId = {\r\n rdSourceKey: this._rdSourceKey,\r\n transform: this._transform,\r\n modelId: this.modelId,\r\n maskModelIds: this.maskModelIds,\r\n deduplicateVertices: this._wantWiremesh,\r\n produceGeometry: this._produceGeometry,\r\n };\r\n\r\n return realityTreeSupplier.getOwner(treeId, this._iModel);\r\n }\r\n\r\n protected override _createGeometryTreeReference(): GeometryTileTreeReference {\r\n const ref = new RealityTreeReference({\r\n iModel: this._iModel,\r\n modelId: this.modelId,\r\n source: this._source,\r\n rdSourceKey: this._rdSourceKey,\r\n name: this._name,\r\n produceGeometry: true,\r\n });\r\n\r\n assert(undefined !== ref.collectTileGeometry);\r\n return ref as GeometryTileTreeReference;\r\n }\r\n\r\n private get _wantWiremesh(): boolean {\r\n return this._source.viewFlags.wiremesh;\r\n }\r\n\r\n public override get castsShadows() {\r\n return true;\r\n }\r\n\r\n protected override get _isLoadingComplete(): boolean {\r\n return !this._mapDrapeTree || this._mapDrapeTree.isLoadingComplete;\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n // For global reality models (OSM Building layer only) - offset the reality model by the BIM elevation bias. This would not be necessary\r\n // if iModels had their elevation set correctly but unfortunately many GCS erroneously report Sea (Geoid) elevation rather than\r\n // Geodetic.\r\n const tree = this.treeOwner.load();\r\n if (undefined === tree)\r\n return undefined;\r\n\r\n const drawArgs = super.createDrawArgs(context);\r\n if (drawArgs !== undefined && this._iModel.isGeoLocated && tree.isContentUnbounded) {\r\n const elevationBias = context.viewport.view.displayStyle.backgroundMapElevationBias;\r\n\r\n if (undefined !== elevationBias)\r\n drawArgs.location.origin.z -= elevationBias;\r\n }\r\n\r\n return drawArgs;\r\n }\r\n\r\n public override addToScene(context: SceneContext): void {\r\n const tree = this.treeOwner.tileTree as RealityTileTree;\r\n if (undefined !== tree && context.viewport.iModel.isGeoLocated && (tree.loader as RealityModelTileLoader).doDrapeBackgroundMap) {\r\n // NB: We save this off strictly so that discloseTileTrees() can find it...better option?\r\n this._mapDrapeTree = context.viewport.backgroundDrapeMap;\r\n context.addBackgroundDrapedModel(this, undefined);\r\n }\r\n\r\n super.addToScene(context);\r\n }\r\n\r\n public override async getToolTip(hit: HitDetail): Promise<HTMLElement | string | undefined> {\r\n const tree = this.treeOwner.tileTree;\r\n if (undefined === tree || hit.iModel !== tree.iModel)\r\n return undefined;\r\n\r\n const map = (tree as RealityTileTree).loader.getBatchIdMap();\r\n const batch = undefined !== map ? map.getBatchProperties(hit.sourceId) : undefined;\r\n if (undefined === batch && tree.modelId !== hit.sourceId)\r\n return undefined;\r\n\r\n const strings = [];\r\n\r\n const loader = (tree as RealityModelTileTree).loader;\r\n const type = (loader as RealityModelTileLoader).tree.rdSource.realityDataType;\r\n\r\n // If a type is specified, display it\r\n if (type !== undefined) {\r\n // Case insensitive\r\n switch (type.toUpperCase()) {\r\n case DefaultSupportedTypes.RealityMesh3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.RealityMesh3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Terrain3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Terrain3DTiles\"));\r\n break;\r\n case DefaultSupportedTypes.Cesium3dTiles.toUpperCase():\r\n strings.push(IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelTypes.Cesium3DTiles\"));\r\n break;\r\n }\r\n }\r\n\r\n if (this._name) {\r\n strings.push(`${IModelApp.localization.getLocalizedString(\"iModelJs:TooltipInfo.Name\")} ${this._name}`);\r\n } else {\r\n const cesiumAsset = this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset ? CesiumIonAssetProvider.parseCesiumUrl(this._rdSourceKey.id) : undefined;\r\n strings.push(cesiumAsset ? `Cesium Asset: ${cesiumAsset.id}` : this._rdSourceKey.id);\r\n }\r\n\r\n if (batch !== undefined)\r\n for (const key of Object.keys(batch))\r\n if (-1 === key.indexOf(\"#\")) // Avoid internal cesium\r\n strings.push(`${key}: ${batch[key]}`);\r\n\r\n const div = document.createElement(\"div\");\r\n div.innerHTML = strings.join(\"<br>\");\r\n return div;\r\n }\r\n\r\n public override addLogoCards(cards: HTMLTableElement): void {\r\n if (this._rdSourceKey.provider === RealityDataProvider.CesiumIonAsset && !cards.dataset.openStreetMapLogoCard) {\r\n cards.dataset.openStreetMapLogoCard = \"true\";\r\n cards.appendChild(IModelApp.makeLogoCard({ heading: \"OpenStreetMap\", notice: `&copy;<a href=\\\"https://www.openstreetmap.org/copyright\\\">OpenStreetMap</a> ${IModelApp.localization.getLocalizedString(\"iModelJs:BackgroundMap:OpenStreetMapContributors\")}` }));\r\n }\r\n }\r\n}\r\n\r\n"]}