@itwin/core-frontend 4.0.0-dev.4 → 4.0.0-dev.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (606) hide show
  1. package/CHANGELOG.md +67 -37
  2. package/lib/cjs/AccuDraw.js +1 -1
  3. package/lib/cjs/AccuDraw.js.map +1 -1
  4. package/lib/cjs/AccuSnap.js +3 -3
  5. package/lib/cjs/AccuSnap.js.map +1 -1
  6. package/lib/cjs/BriefcaseConnection.js +9 -11
  7. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  8. package/lib/cjs/DisplayStyleState.js +8 -12
  9. package/lib/cjs/DisplayStyleState.js.map +1 -1
  10. package/lib/cjs/DrawingViewState.js +4 -6
  11. package/lib/cjs/DrawingViewState.js.map +1 -1
  12. package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
  13. package/lib/cjs/ElementLocateManager.js +2 -0
  14. package/lib/cjs/ElementLocateManager.js.map +1 -1
  15. package/lib/cjs/EnvironmentDecorations.js +2 -3
  16. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  17. package/lib/cjs/FlashSettings.js +3 -4
  18. package/lib/cjs/FlashSettings.js.map +1 -1
  19. package/lib/cjs/GeoServices.d.ts +57 -5
  20. package/lib/cjs/GeoServices.d.ts.map +1 -1
  21. package/lib/cjs/GeoServices.js +180 -155
  22. package/lib/cjs/GeoServices.js.map +1 -1
  23. package/lib/cjs/IModelApp.d.ts +1 -3
  24. package/lib/cjs/IModelApp.d.ts.map +1 -1
  25. package/lib/cjs/IModelApp.js +20 -24
  26. package/lib/cjs/IModelApp.js.map +1 -1
  27. package/lib/cjs/IModelConnection.d.ts +1 -1
  28. package/lib/cjs/IModelConnection.js +2 -2
  29. package/lib/cjs/IModelConnection.js.map +1 -1
  30. package/lib/cjs/IpcApp.js +1 -1
  31. package/lib/cjs/IpcApp.js.map +1 -1
  32. package/lib/cjs/LocalhostIpcApp.js +3 -4
  33. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  34. package/lib/cjs/ModelState.js +2 -3
  35. package/lib/cjs/ModelState.js.map +1 -1
  36. package/lib/cjs/NativeApp.d.ts +1 -1
  37. package/lib/cjs/NativeApp.js +4 -7
  38. package/lib/cjs/NativeApp.js.map +1 -1
  39. package/lib/cjs/NoRenderApp.d.ts +11 -4
  40. package/lib/cjs/NoRenderApp.d.ts.map +1 -1
  41. package/lib/cjs/NoRenderApp.js +14 -8
  42. package/lib/cjs/NoRenderApp.js.map +1 -1
  43. package/lib/cjs/PlanarClipMaskState.js +1 -1
  44. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  45. package/lib/cjs/RealityDataSourceContextShareImpl.js +2 -4
  46. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  47. package/lib/cjs/SelectionSet.d.ts +0 -1
  48. package/lib/cjs/SelectionSet.d.ts.map +1 -1
  49. package/lib/cjs/SelectionSet.js +0 -1
  50. package/lib/cjs/SelectionSet.js.map +1 -1
  51. package/lib/cjs/SheetViewState.js +15 -23
  52. package/lib/cjs/SheetViewState.js.map +1 -1
  53. package/lib/cjs/Tiles.js +2 -2
  54. package/lib/cjs/Tiles.js.map +1 -1
  55. package/lib/cjs/ViewContext.js +1 -1
  56. package/lib/cjs/ViewContext.js.map +1 -1
  57. package/lib/cjs/ViewCreator2d.js +4 -5
  58. package/lib/cjs/ViewCreator2d.js.map +1 -1
  59. package/lib/cjs/ViewCreator3d.js +5 -5
  60. package/lib/cjs/ViewCreator3d.js.map +1 -1
  61. package/lib/cjs/ViewRect.d.ts +1 -1
  62. package/lib/cjs/ViewRect.d.ts.map +1 -1
  63. package/lib/cjs/ViewRect.js +1 -1
  64. package/lib/cjs/ViewRect.js.map +1 -1
  65. package/lib/cjs/ViewState.js +17 -24
  66. package/lib/cjs/ViewState.js.map +1 -1
  67. package/lib/cjs/Viewport.js +23 -33
  68. package/lib/cjs/Viewport.js.map +1 -1
  69. package/lib/cjs/extension/ExtensionImpl.js +1 -1
  70. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  71. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
  72. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  73. package/lib/cjs/quantity-formatting/QuantityFormatter.js +7 -9
  74. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  75. package/lib/cjs/render/FeatureSymbology.js +1 -2
  76. package/lib/cjs/render/FeatureSymbology.js.map +1 -1
  77. package/lib/cjs/render/GraphicBuilder.js +7 -9
  78. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  79. package/lib/cjs/render/MockRender.js +1 -2
  80. package/lib/cjs/render/MockRender.js.map +1 -1
  81. package/lib/cjs/render/ParticleCollectionBuilder.js +2 -3
  82. package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
  83. package/lib/cjs/render/RealityMeshParams.d.ts +2 -2
  84. package/lib/cjs/render/RealityMeshParams.d.ts.map +1 -1
  85. package/lib/cjs/render/RealityMeshParams.js +8 -11
  86. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  87. package/lib/cjs/render/RenderPlan.js +1 -1
  88. package/lib/cjs/render/RenderPlan.js.map +1 -1
  89. package/lib/cjs/render/RenderSystem.js +1 -2
  90. package/lib/cjs/render/RenderSystem.js.map +1 -1
  91. package/lib/cjs/render/VisibleFeature.js +2 -4
  92. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  93. package/lib/cjs/render/primitives/AuxChannelTable.js +6 -9
  94. package/lib/cjs/render/primitives/AuxChannelTable.js.map +1 -1
  95. package/lib/cjs/render/primitives/EdgeParams.js +6 -7
  96. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  97. package/lib/cjs/render/primitives/PolylineParams.js +2 -3
  98. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
  99. package/lib/cjs/render/primitives/VertexKey.js +1 -1
  100. package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
  101. package/lib/cjs/render/primitives/VertexTable.js +1 -1
  102. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  103. package/lib/cjs/render/primitives/VertexTableSplitter.js +6 -8
  104. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
  105. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +9 -11
  106. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  107. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +3 -5
  108. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  109. package/lib/cjs/render/primitives/mesh/MeshBuilder.js +1 -1
  110. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  111. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +2 -3
  112. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  113. package/lib/cjs/render/webgl/BranchState.js +9 -10
  114. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  115. package/lib/cjs/render/webgl/EDL.js +17 -21
  116. package/lib/cjs/render/webgl/EDL.js.map +1 -1
  117. package/lib/cjs/render/webgl/FeatureOverrides.js +2 -2
  118. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  119. package/lib/cjs/render/webgl/Graphic.js +3 -5
  120. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  121. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js +1 -1
  122. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  123. package/lib/cjs/render/webgl/InstancedGeometry.js +2 -3
  124. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  125. package/lib/cjs/render/webgl/Mesh.js +7 -10
  126. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  127. package/lib/cjs/render/webgl/MeshData.js +1 -2
  128. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  129. package/lib/cjs/render/webgl/PlanarClassifier.js +10 -15
  130. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  131. package/lib/cjs/render/webgl/RealityMesh.js +5 -8
  132. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  133. package/lib/cjs/render/webgl/RealityModelUniforms.js +3 -4
  134. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  135. package/lib/cjs/render/webgl/RenderCommands.js +7 -8
  136. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  137. package/lib/cjs/render/webgl/SceneCompositor.js +7 -9
  138. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  139. package/lib/cjs/render/webgl/ShaderBuilder.js +1 -2
  140. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  141. package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
  142. package/lib/cjs/render/webgl/SolarShadowMap.js +1 -11
  143. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  144. package/lib/cjs/render/webgl/SurfaceGeometry.js +1 -1
  145. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  146. package/lib/cjs/render/webgl/System.d.ts +0 -1
  147. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  148. package/lib/cjs/render/webgl/System.js +12 -17
  149. package/lib/cjs/render/webgl/System.js.map +1 -1
  150. package/lib/cjs/render/webgl/Target.js +9 -14
  151. package/lib/cjs/render/webgl/Target.js.map +1 -1
  152. package/lib/cjs/render/webgl/TargetGraphics.js +1 -2
  153. package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
  154. package/lib/cjs/render/webgl/Texture.js +1 -2
  155. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  156. package/lib/cjs/render/webgl/ThematicSensors.js +2 -4
  157. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  158. package/lib/cjs/render/webgl/VisibleTileFeatures.js +1 -2
  159. package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
  160. package/lib/cjs/render/webgl/glsl/Animation.js +6 -9
  161. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  162. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +1 -2
  163. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  164. package/lib/cjs/render/webgl/glsl/Instancing.js +4 -5
  165. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  166. package/lib/cjs/render/webgl/glsl/RealityMesh.js +2 -4
  167. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  168. package/lib/cjs/render/webgl/glsl/Surface.js +1 -2
  169. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  170. package/lib/cjs/render/webgl/glsl/Thematic.js +1 -2
  171. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  172. package/lib/cjs/request/Request.d.ts.map +1 -1
  173. package/lib/cjs/request/Request.js.map +1 -1
  174. package/lib/cjs/tile/ClassifierTileTree.js +3 -3
  175. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  176. package/lib/cjs/tile/GltfReader.js +62 -76
  177. package/lib/cjs/tile/GltfReader.js.map +1 -1
  178. package/lib/cjs/tile/IModelTile.js +2 -3
  179. package/lib/cjs/tile/IModelTile.js.map +1 -1
  180. package/lib/cjs/tile/IModelTileRequestChannels.js +6 -11
  181. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  182. package/lib/cjs/tile/IModelTileTree.js +5 -9
  183. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  184. package/lib/cjs/tile/ImdlReader.js +13 -17
  185. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  186. package/lib/cjs/tile/OrbitGtTileTree.js +2 -2
  187. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  188. package/lib/cjs/tile/PntsReader.js +4 -5
  189. package/lib/cjs/tile/PntsReader.js.map +1 -1
  190. package/lib/cjs/tile/PrimaryTileTree.js +22 -32
  191. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  192. package/lib/cjs/tile/RealityModelTileTree.js +12 -19
  193. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  194. package/lib/cjs/tile/RealityTile.d.ts +1 -1
  195. package/lib/cjs/tile/RealityTile.js +4 -6
  196. package/lib/cjs/tile/RealityTile.js.map +1 -1
  197. package/lib/cjs/tile/RealityTileLoader.js +2 -2
  198. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  199. package/lib/cjs/tile/RealityTileTree.d.ts +1 -1
  200. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  201. package/lib/cjs/tile/RealityTileTree.js +2 -3
  202. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  203. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +3 -5
  204. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  205. package/lib/cjs/tile/Tile.js +1 -1
  206. package/lib/cjs/tile/Tile.js.map +1 -1
  207. package/lib/cjs/tile/TileAdmin.d.ts +5 -1
  208. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  209. package/lib/cjs/tile/TileAdmin.js +22 -27
  210. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  211. package/lib/cjs/tile/TileDrawArgs.js +3 -6
  212. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  213. package/lib/cjs/tile/TileRequest.d.ts.map +1 -1
  214. package/lib/cjs/tile/TileRequest.js +2 -1
  215. package/lib/cjs/tile/TileRequest.js.map +1 -1
  216. package/lib/cjs/tile/TileRequestChannel.d.ts +23 -1
  217. package/lib/cjs/tile/TileRequestChannel.d.ts.map +1 -1
  218. package/lib/cjs/tile/TileRequestChannel.js +28 -7
  219. package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
  220. package/lib/cjs/tile/TileRequestChannels.js +1 -1
  221. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  222. package/lib/cjs/tile/TileTree.js +2 -3
  223. package/lib/cjs/tile/TileTree.js.map +1 -1
  224. package/lib/cjs/tile/TiledGraphicsProvider.js +1 -1
  225. package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
  226. package/lib/cjs/tile/map/ArcGISTileMap.js +5 -6
  227. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  228. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  229. package/lib/cjs/tile/map/ArcGisUtilities.js +6 -8
  230. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  231. package/lib/cjs/tile/map/EllipsoidTerrainProvider.d.ts +11 -3
  232. package/lib/cjs/tile/map/EllipsoidTerrainProvider.d.ts.map +1 -1
  233. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js +17 -5
  234. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  235. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
  236. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  237. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  238. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -9
  239. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  240. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
  241. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  242. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
  243. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  244. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
  245. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  246. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -2
  247. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  248. package/lib/cjs/tile/map/ImageryTileTree.js +10 -5
  249. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  250. package/lib/cjs/tile/map/MapCartoRectangle.d.ts +1 -1
  251. package/lib/cjs/tile/map/MapCartoRectangle.js +2 -2
  252. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  253. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +5 -6
  254. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  255. package/lib/cjs/tile/map/MapLayerImageryFormats.js +11 -14
  256. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  257. package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -3
  258. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  259. package/lib/cjs/tile/map/MapLayerSources.js +1 -1
  260. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  261. package/lib/cjs/tile/map/MapTile.d.ts +10 -2
  262. package/lib/cjs/tile/map/MapTile.d.ts.map +1 -1
  263. package/lib/cjs/tile/map/MapTile.js +34 -12
  264. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  265. package/lib/cjs/tile/map/MapTileLoader.js +1 -1
  266. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  267. package/lib/cjs/tile/map/MapTileTree.d.ts +3 -2
  268. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  269. package/lib/cjs/tile/map/MapTileTree.js +24 -26
  270. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  271. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +6 -7
  272. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  273. package/lib/cjs/tile/map/MapTilingScheme.d.ts +1 -1
  274. package/lib/cjs/tile/map/MapTilingScheme.js +1 -1
  275. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  276. package/lib/cjs/tile/map/QuadId.d.ts +1 -1
  277. package/lib/cjs/tile/map/QuadId.js +1 -1
  278. package/lib/cjs/tile/map/QuadId.js.map +1 -1
  279. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +9 -4
  280. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  281. package/lib/cjs/tile/map/TerrainMeshProvider.js +6 -1
  282. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  283. package/lib/cjs/tile/map/TerrainProvider.d.ts +2 -2
  284. package/lib/cjs/tile/map/TerrainProvider.js +1 -1
  285. package/lib/cjs/tile/map/TerrainProvider.js.map +1 -1
  286. package/lib/cjs/tile/map/WmsCapabilities.js +4 -5
  287. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  288. package/lib/cjs/tile/map/WmtsCapabilities.js +17 -25
  289. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  290. package/lib/cjs/tools/ClipViewTool.js +1 -1
  291. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  292. package/lib/cjs/tools/MeasureTool.js +2 -4
  293. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  294. package/lib/cjs/tools/PrimitiveTool.js +2 -3
  295. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  296. package/lib/cjs/tools/SelectTool.js +1 -2
  297. package/lib/cjs/tools/SelectTool.js.map +1 -1
  298. package/lib/cjs/tools/Tool.js +2 -3
  299. package/lib/cjs/tools/Tool.js.map +1 -1
  300. package/lib/cjs/tools/ToolAdmin.js +2 -4
  301. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  302. package/lib/cjs/tools/ViewTool.js +3 -3
  303. package/lib/cjs/tools/ViewTool.js.map +1 -1
  304. package/lib/esm/AccuDraw.js +1 -1
  305. package/lib/esm/AccuDraw.js.map +1 -1
  306. package/lib/esm/AccuSnap.js +3 -3
  307. package/lib/esm/AccuSnap.js.map +1 -1
  308. package/lib/esm/BriefcaseConnection.js +9 -11
  309. package/lib/esm/BriefcaseConnection.js.map +1 -1
  310. package/lib/esm/DisplayStyleState.js +8 -12
  311. package/lib/esm/DisplayStyleState.js.map +1 -1
  312. package/lib/esm/DrawingViewState.js +4 -6
  313. package/lib/esm/DrawingViewState.js.map +1 -1
  314. package/lib/esm/ElementLocateManager.d.ts.map +1 -1
  315. package/lib/esm/ElementLocateManager.js +2 -0
  316. package/lib/esm/ElementLocateManager.js.map +1 -1
  317. package/lib/esm/EnvironmentDecorations.js +2 -3
  318. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  319. package/lib/esm/FlashSettings.js +3 -4
  320. package/lib/esm/FlashSettings.js.map +1 -1
  321. package/lib/esm/GeoServices.d.ts +57 -5
  322. package/lib/esm/GeoServices.d.ts.map +1 -1
  323. package/lib/esm/GeoServices.js +178 -154
  324. package/lib/esm/GeoServices.js.map +1 -1
  325. package/lib/esm/IModelApp.d.ts +1 -3
  326. package/lib/esm/IModelApp.d.ts.map +1 -1
  327. package/lib/esm/IModelApp.js +20 -24
  328. package/lib/esm/IModelApp.js.map +1 -1
  329. package/lib/esm/IModelConnection.d.ts +1 -1
  330. package/lib/esm/IModelConnection.js +2 -2
  331. package/lib/esm/IModelConnection.js.map +1 -1
  332. package/lib/esm/IpcApp.js +1 -1
  333. package/lib/esm/IpcApp.js.map +1 -1
  334. package/lib/esm/LocalhostIpcApp.js +3 -4
  335. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  336. package/lib/esm/ModelState.js +2 -3
  337. package/lib/esm/ModelState.js.map +1 -1
  338. package/lib/esm/NativeApp.d.ts +1 -1
  339. package/lib/esm/NativeApp.js +4 -7
  340. package/lib/esm/NativeApp.js.map +1 -1
  341. package/lib/esm/NoRenderApp.d.ts +11 -4
  342. package/lib/esm/NoRenderApp.d.ts.map +1 -1
  343. package/lib/esm/NoRenderApp.js +12 -6
  344. package/lib/esm/NoRenderApp.js.map +1 -1
  345. package/lib/esm/PlanarClipMaskState.js +1 -1
  346. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  347. package/lib/esm/RealityDataSourceContextShareImpl.js +2 -4
  348. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  349. package/lib/esm/SelectionSet.d.ts +0 -1
  350. package/lib/esm/SelectionSet.d.ts.map +1 -1
  351. package/lib/esm/SelectionSet.js +0 -1
  352. package/lib/esm/SelectionSet.js.map +1 -1
  353. package/lib/esm/SheetViewState.js +15 -23
  354. package/lib/esm/SheetViewState.js.map +1 -1
  355. package/lib/esm/Tiles.js +2 -2
  356. package/lib/esm/Tiles.js.map +1 -1
  357. package/lib/esm/ViewContext.js +1 -1
  358. package/lib/esm/ViewContext.js.map +1 -1
  359. package/lib/esm/ViewCreator2d.js +4 -5
  360. package/lib/esm/ViewCreator2d.js.map +1 -1
  361. package/lib/esm/ViewCreator3d.js +5 -5
  362. package/lib/esm/ViewCreator3d.js.map +1 -1
  363. package/lib/esm/ViewRect.d.ts +1 -1
  364. package/lib/esm/ViewRect.d.ts.map +1 -1
  365. package/lib/esm/ViewRect.js +1 -1
  366. package/lib/esm/ViewRect.js.map +1 -1
  367. package/lib/esm/ViewState.js +17 -24
  368. package/lib/esm/ViewState.js.map +1 -1
  369. package/lib/esm/Viewport.js +23 -33
  370. package/lib/esm/Viewport.js.map +1 -1
  371. package/lib/esm/extension/ExtensionImpl.js +1 -1
  372. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  373. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
  374. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  375. package/lib/esm/quantity-formatting/QuantityFormatter.js +7 -9
  376. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  377. package/lib/esm/render/FeatureSymbology.js +1 -2
  378. package/lib/esm/render/FeatureSymbology.js.map +1 -1
  379. package/lib/esm/render/GraphicBuilder.js +7 -9
  380. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  381. package/lib/esm/render/MockRender.js +1 -2
  382. package/lib/esm/render/MockRender.js.map +1 -1
  383. package/lib/esm/render/ParticleCollectionBuilder.js +2 -3
  384. package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
  385. package/lib/esm/render/RealityMeshParams.d.ts +2 -2
  386. package/lib/esm/render/RealityMeshParams.d.ts.map +1 -1
  387. package/lib/esm/render/RealityMeshParams.js +8 -11
  388. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  389. package/lib/esm/render/RenderPlan.js +1 -1
  390. package/lib/esm/render/RenderPlan.js.map +1 -1
  391. package/lib/esm/render/RenderSystem.js +1 -2
  392. package/lib/esm/render/RenderSystem.js.map +1 -1
  393. package/lib/esm/render/VisibleFeature.js +2 -4
  394. package/lib/esm/render/VisibleFeature.js.map +1 -1
  395. package/lib/esm/render/primitives/AuxChannelTable.js +6 -9
  396. package/lib/esm/render/primitives/AuxChannelTable.js.map +1 -1
  397. package/lib/esm/render/primitives/EdgeParams.js +6 -7
  398. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  399. package/lib/esm/render/primitives/PolylineParams.js +2 -3
  400. package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
  401. package/lib/esm/render/primitives/VertexKey.js +1 -1
  402. package/lib/esm/render/primitives/VertexKey.js.map +1 -1
  403. package/lib/esm/render/primitives/VertexTable.js +1 -1
  404. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  405. package/lib/esm/render/primitives/VertexTableSplitter.js +6 -8
  406. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
  407. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +9 -11
  408. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  409. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +3 -5
  410. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  411. package/lib/esm/render/primitives/mesh/MeshBuilder.js +1 -1
  412. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  413. package/lib/esm/render/primitives/mesh/MeshPrimitives.js +2 -3
  414. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  415. package/lib/esm/render/webgl/BranchState.js +9 -10
  416. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  417. package/lib/esm/render/webgl/EDL.js +17 -21
  418. package/lib/esm/render/webgl/EDL.js.map +1 -1
  419. package/lib/esm/render/webgl/FeatureOverrides.js +2 -2
  420. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  421. package/lib/esm/render/webgl/Graphic.js +3 -5
  422. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  423. package/lib/esm/render/webgl/IndexedEdgeGeometry.js +1 -1
  424. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  425. package/lib/esm/render/webgl/InstancedGeometry.js +2 -3
  426. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  427. package/lib/esm/render/webgl/Mesh.js +7 -10
  428. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  429. package/lib/esm/render/webgl/MeshData.js +1 -2
  430. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  431. package/lib/esm/render/webgl/PlanarClassifier.js +10 -15
  432. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  433. package/lib/esm/render/webgl/RealityMesh.js +5 -8
  434. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  435. package/lib/esm/render/webgl/RealityModelUniforms.js +3 -4
  436. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  437. package/lib/esm/render/webgl/RenderCommands.js +7 -8
  438. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  439. package/lib/esm/render/webgl/SceneCompositor.js +7 -9
  440. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  441. package/lib/esm/render/webgl/ShaderBuilder.js +1 -2
  442. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  443. package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
  444. package/lib/esm/render/webgl/SolarShadowMap.js +1 -11
  445. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  446. package/lib/esm/render/webgl/SurfaceGeometry.js +1 -1
  447. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  448. package/lib/esm/render/webgl/System.d.ts +0 -1
  449. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  450. package/lib/esm/render/webgl/System.js +12 -17
  451. package/lib/esm/render/webgl/System.js.map +1 -1
  452. package/lib/esm/render/webgl/Target.js +9 -14
  453. package/lib/esm/render/webgl/Target.js.map +1 -1
  454. package/lib/esm/render/webgl/TargetGraphics.js +1 -2
  455. package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
  456. package/lib/esm/render/webgl/Texture.js +1 -2
  457. package/lib/esm/render/webgl/Texture.js.map +1 -1
  458. package/lib/esm/render/webgl/ThematicSensors.js +2 -4
  459. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  460. package/lib/esm/render/webgl/VisibleTileFeatures.js +1 -2
  461. package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
  462. package/lib/esm/render/webgl/glsl/Animation.js +6 -9
  463. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  464. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -2
  465. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  466. package/lib/esm/render/webgl/glsl/Instancing.js +4 -5
  467. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  468. package/lib/esm/render/webgl/glsl/RealityMesh.js +2 -4
  469. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  470. package/lib/esm/render/webgl/glsl/Surface.js +1 -2
  471. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  472. package/lib/esm/render/webgl/glsl/Thematic.js +1 -2
  473. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  474. package/lib/esm/request/Request.d.ts.map +1 -1
  475. package/lib/esm/request/Request.js.map +1 -1
  476. package/lib/esm/tile/ClassifierTileTree.js +3 -3
  477. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  478. package/lib/esm/tile/GltfReader.js +62 -76
  479. package/lib/esm/tile/GltfReader.js.map +1 -1
  480. package/lib/esm/tile/IModelTile.js +2 -3
  481. package/lib/esm/tile/IModelTile.js.map +1 -1
  482. package/lib/esm/tile/IModelTileRequestChannels.js +6 -11
  483. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  484. package/lib/esm/tile/IModelTileTree.js +5 -9
  485. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  486. package/lib/esm/tile/ImdlReader.js +13 -17
  487. package/lib/esm/tile/ImdlReader.js.map +1 -1
  488. package/lib/esm/tile/OrbitGtTileTree.js +2 -2
  489. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  490. package/lib/esm/tile/PntsReader.js +4 -5
  491. package/lib/esm/tile/PntsReader.js.map +1 -1
  492. package/lib/esm/tile/PrimaryTileTree.js +22 -32
  493. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  494. package/lib/esm/tile/RealityModelTileTree.js +12 -19
  495. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  496. package/lib/esm/tile/RealityTile.d.ts +1 -1
  497. package/lib/esm/tile/RealityTile.js +4 -6
  498. package/lib/esm/tile/RealityTile.js.map +1 -1
  499. package/lib/esm/tile/RealityTileLoader.js +2 -2
  500. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  501. package/lib/esm/tile/RealityTileTree.d.ts +1 -1
  502. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  503. package/lib/esm/tile/RealityTileTree.js +2 -3
  504. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  505. package/lib/esm/tile/ThreeDTileFormatInterpreter.js +3 -5
  506. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  507. package/lib/esm/tile/Tile.js +1 -1
  508. package/lib/esm/tile/Tile.js.map +1 -1
  509. package/lib/esm/tile/TileAdmin.d.ts +5 -1
  510. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  511. package/lib/esm/tile/TileAdmin.js +22 -27
  512. package/lib/esm/tile/TileAdmin.js.map +1 -1
  513. package/lib/esm/tile/TileDrawArgs.js +3 -6
  514. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  515. package/lib/esm/tile/TileRequest.d.ts.map +1 -1
  516. package/lib/esm/tile/TileRequest.js +2 -1
  517. package/lib/esm/tile/TileRequest.js.map +1 -1
  518. package/lib/esm/tile/TileRequestChannel.d.ts +23 -1
  519. package/lib/esm/tile/TileRequestChannel.d.ts.map +1 -1
  520. package/lib/esm/tile/TileRequestChannel.js +28 -7
  521. package/lib/esm/tile/TileRequestChannel.js.map +1 -1
  522. package/lib/esm/tile/TileRequestChannels.js +1 -1
  523. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  524. package/lib/esm/tile/TileTree.js +2 -3
  525. package/lib/esm/tile/TileTree.js.map +1 -1
  526. package/lib/esm/tile/TiledGraphicsProvider.js +1 -1
  527. package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
  528. package/lib/esm/tile/map/ArcGISTileMap.js +5 -6
  529. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  530. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  531. package/lib/esm/tile/map/ArcGisUtilities.js +6 -8
  532. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  533. package/lib/esm/tile/map/EllipsoidTerrainProvider.d.ts +11 -3
  534. package/lib/esm/tile/map/EllipsoidTerrainProvider.d.ts.map +1 -1
  535. package/lib/esm/tile/map/EllipsoidTerrainProvider.js +17 -5
  536. package/lib/esm/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  537. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
  538. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  539. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  540. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -9
  541. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  542. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
  543. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  544. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
  545. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  546. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
  547. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  548. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -2
  549. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  550. package/lib/esm/tile/map/ImageryTileTree.js +10 -5
  551. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  552. package/lib/esm/tile/map/MapCartoRectangle.d.ts +1 -1
  553. package/lib/esm/tile/map/MapCartoRectangle.js +2 -2
  554. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  555. package/lib/esm/tile/map/MapLayerFormatRegistry.js +5 -6
  556. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  557. package/lib/esm/tile/map/MapLayerImageryFormats.js +11 -14
  558. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  559. package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -3
  560. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  561. package/lib/esm/tile/map/MapLayerSources.js +1 -1
  562. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  563. package/lib/esm/tile/map/MapTile.d.ts +10 -2
  564. package/lib/esm/tile/map/MapTile.d.ts.map +1 -1
  565. package/lib/esm/tile/map/MapTile.js +34 -12
  566. package/lib/esm/tile/map/MapTile.js.map +1 -1
  567. package/lib/esm/tile/map/MapTileLoader.js +1 -1
  568. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  569. package/lib/esm/tile/map/MapTileTree.d.ts +3 -2
  570. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  571. package/lib/esm/tile/map/MapTileTree.js +24 -26
  572. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  573. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +6 -7
  574. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  575. package/lib/esm/tile/map/MapTilingScheme.d.ts +1 -1
  576. package/lib/esm/tile/map/MapTilingScheme.js +1 -1
  577. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  578. package/lib/esm/tile/map/QuadId.d.ts +1 -1
  579. package/lib/esm/tile/map/QuadId.js +1 -1
  580. package/lib/esm/tile/map/QuadId.js.map +1 -1
  581. package/lib/esm/tile/map/TerrainMeshProvider.d.ts +9 -4
  582. package/lib/esm/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  583. package/lib/esm/tile/map/TerrainMeshProvider.js +6 -1
  584. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  585. package/lib/esm/tile/map/TerrainProvider.d.ts +2 -2
  586. package/lib/esm/tile/map/TerrainProvider.js +1 -1
  587. package/lib/esm/tile/map/TerrainProvider.js.map +1 -1
  588. package/lib/esm/tile/map/WmsCapabilities.js +4 -5
  589. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  590. package/lib/esm/tile/map/WmtsCapabilities.js +17 -25
  591. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  592. package/lib/esm/tools/ClipViewTool.js +1 -1
  593. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  594. package/lib/esm/tools/MeasureTool.js +2 -4
  595. package/lib/esm/tools/MeasureTool.js.map +1 -1
  596. package/lib/esm/tools/PrimitiveTool.js +2 -3
  597. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  598. package/lib/esm/tools/SelectTool.js +1 -2
  599. package/lib/esm/tools/SelectTool.js.map +1 -1
  600. package/lib/esm/tools/Tool.js +2 -3
  601. package/lib/esm/tools/Tool.js.map +1 -1
  602. package/lib/esm/tools/ToolAdmin.js +2 -4
  603. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  604. package/lib/esm/tools/ViewTool.js +3 -3
  605. package/lib/esm/tools/ViewTool.js.map +1 -1
  606. package/package.json +24 -26
@@ -1 +1 @@
1
- {"version":3,"file":"BriefcaseConnection.js","sourceRoot":"","sources":["../../src/BriefcaseConnection.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 IModelConnection\r\n */\r\n\r\nimport { assert, BeEvent, CompressedId64Set, Guid, GuidString, Id64String, IModelStatus, OpenMode } from \"@itwin/core-bentley\";\r\nimport {\r\n ChangesetIndex, ChangesetIndexAndId, getPullChangesIpcChannel, IModelConnectionProps, IModelError,\r\n PullChangesOptions as IpcAppPullChangesOptions, OpenBriefcaseProps, StandaloneOpenOptions,\r\n} from \"@itwin/core-common\";\r\nimport { BriefcaseTxns } from \"./BriefcaseTxns\";\r\nimport { GraphicalEditingScope } from \"./GraphicalEditingScope\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { IpcApp } from \"./IpcApp\";\r\nimport { ProgressCallback } from \"./request/Request\";\r\nimport { disposeTileTreesForGeometricModels } from \"./tile/internal\";\r\nimport { Viewport } from \"./Viewport\";\r\n\r\n/**\r\n * Download progress information.\r\n * @public\r\n */\r\nexport interface DownloadProgressInfo {\r\n /** Bytes downloaded. */\r\n loaded: number;\r\n /** Total size of the download in bytes. */\r\n total: number;\r\n}\r\n\r\n/**\r\n * Called to show progress during a download.\r\n * @public\r\n */\r\nexport type OnDownloadProgress = (progress: DownloadProgressInfo) => void;\r\n\r\n/**\r\n * Partial interface of AbortSignal.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\r\n * @beta\r\n */\r\nexport interface GenericAbortSignal {\r\n /** Add Listener for abort signal. */\r\n addEventListener: (type: \"abort\", listener: (this: GenericAbortSignal, ev: any) => any) => void;\r\n /** Remove Listener for abort signal. */\r\n removeEventListener: (type: \"abort\", listener: (this: GenericAbortSignal, ev: any) => any) => void;\r\n}\r\n\r\n/**\r\n * Options for pulling iModel changes.\r\n * @public\r\n */\r\nexport interface PullChangesOptions {\r\n /**\r\n * Function called regularly to report progress of changes download.\r\n * @deprecated in 3.6. Use [[downloadProgressCallback]] instead.\r\n */\r\n progressCallback?: ProgressCallback;\r\n /** Function called regularly to report progress of changes download. */\r\n downloadProgressCallback?: OnDownloadProgress;\r\n /** Interval for calling progress callback (in milliseconds). */\r\n progressInterval?: number;\r\n /** Signal for cancelling the download.\r\n * @beta\r\n */\r\n abortSignal?: GenericAbortSignal;\r\n}\r\n\r\n/** Keeps track of changes to models, buffering them until synchronization points.\r\n * While a GraphicalEditingScope is open, the changes are buffered until the scope exits, at which point they are processed.\r\n * Otherwise, the buffered changes are processed after undo/redo, commit, or pull+merge changes.\r\n */\r\nclass ModelChangeMonitor {\r\n private _editingScope?: GraphicalEditingScope;\r\n private readonly _briefcase: BriefcaseConnection;\r\n private readonly _deletedModels = new Set<string>();\r\n private readonly _modelIdToGuid = new Map<string, string>();\r\n private readonly _removals: VoidFunction[] = [];\r\n\r\n public constructor(briefcase: BriefcaseConnection) {\r\n this._briefcase = briefcase;\r\n\r\n // Buffer updated geometry guids.\r\n this._removals.push(briefcase.txns.onModelGeometryChanged.addListener((changes) => {\r\n for (const change of changes) {\r\n this._deletedModels.delete(change.id);\r\n this._modelIdToGuid.set(change.id, change.guid);\r\n }\r\n }));\r\n\r\n // Buffer deletions of models.\r\n this._removals.push(briefcase.txns.onModelsChanged.addListener((changes) => {\r\n if (changes.deleted) {\r\n for (const id of CompressedId64Set.iterable(changes.deleted)) {\r\n this._modelIdToGuid.delete(id);\r\n this._deletedModels.add(id);\r\n }\r\n }\r\n }));\r\n\r\n // Outside of an editing scope, we want to update viewport contents after commit, undo/redo, or merging changes.\r\n const maybeProcess = async () => {\r\n if (this.editingScope)\r\n return;\r\n\r\n const modelIds = Array.from(this._modelIdToGuid.keys());\r\n if (modelIds.length > 0)\r\n await IModelApp.tileAdmin.purgeTileTrees(this._briefcase, modelIds);\r\n\r\n this.processBuffered();\r\n };\r\n\r\n this._removals.push(briefcase.txns.onCommitted.addListener(maybeProcess));\r\n this._removals.push(briefcase.txns.onAfterUndoRedo.addListener(maybeProcess));\r\n this._removals.push(briefcase.txns.onChangesPulled.addListener(maybeProcess));\r\n }\r\n\r\n public async close(): Promise<void> {\r\n for (const removal of this._removals)\r\n removal();\r\n\r\n this._removals.length = 0;\r\n\r\n if (this._editingScope) {\r\n await this._editingScope.exit();\r\n this._editingScope = undefined;\r\n }\r\n }\r\n\r\n public get editingScope(): GraphicalEditingScope | undefined {\r\n return this._editingScope;\r\n }\r\n\r\n public async enterEditingScope(): Promise<GraphicalEditingScope> {\r\n if (this._editingScope)\r\n throw new Error(\"Cannot create an editing scope for an iModel that already has one\");\r\n\r\n this._editingScope = await GraphicalEditingScope.enter(this._briefcase);\r\n\r\n const removeGeomListener = this._editingScope.onGeometryChanges.addListener((changes) => {\r\n const modelIds = [];\r\n for (const change of changes)\r\n modelIds.push(change.id);\r\n\r\n this.invalidateScenes(modelIds);\r\n });\r\n\r\n this._editingScope.onExited.addOnce((scope) => {\r\n assert(scope === this._editingScope);\r\n this._editingScope = undefined;\r\n removeGeomListener();\r\n this.processBuffered();\r\n });\r\n\r\n return this._editingScope;\r\n }\r\n\r\n private processBuffered(): void {\r\n const models = this._briefcase.models;\r\n for (const [id, guid] of this._modelIdToGuid) {\r\n const model = models.getLoaded(id)?.asGeometricModel;\r\n if (model)\r\n model.geometryGuid = guid;\r\n }\r\n\r\n const modelIds = new Set<string>(this._modelIdToGuid.keys());\r\n for (const deleted of this._deletedModels) {\r\n modelIds.add(deleted);\r\n models.unload(deleted);\r\n }\r\n\r\n this.invalidateScenes(modelIds);\r\n disposeTileTreesForGeometricModels(modelIds, this._briefcase);\r\n\r\n this._briefcase.onBufferedModelChanges.raiseEvent(modelIds);\r\n\r\n this._modelIdToGuid.clear();\r\n this._deletedModels.clear();\r\n }\r\n\r\n private invalidateScenes(changedModels: Iterable<Id64String>): void {\r\n for (const user of IModelApp.tileAdmin.tileUsers) {\r\n if (user instanceof Viewport && user.iModel === this._briefcase) {\r\n for (const modelId of changedModels) {\r\n if (user.view.viewsModel(modelId)) {\r\n user.invalidateScene();\r\n user.setFeatureOverrideProviderChanged();\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** Settings that can be used to control the behavior of [[Tool]]s that modify a [[BriefcaseConnection]].\r\n * For example, tools that want to create new elements can consult the briefcase's editor tool settings to\r\n * determine into which model and category to insert the elements.\r\n * Specialized tools are free to ignore these settings.\r\n * @see [[BriefcaseConnection.editorToolSettings]] to query or modify the current settings for a briefcase.\r\n * @see [CreateElementTool]($editor-frontend) for an example of a tool that uses these settings.\r\n * @alpha\r\n */\r\nexport class BriefcaseEditorToolSettings {\r\n private _category?: Id64String;\r\n private _model?: Id64String;\r\n\r\n /** An event raised just after the default [[category]] is changed. */\r\n public readonly onCategoryChanged = new BeEvent<(previousCategory: Id64String | undefined) => void>();\r\n\r\n /** An event raised just after the default [[model]] is changed. */\r\n public readonly onModelChanged = new BeEvent<(previousModel: Id64String | undefined) => void>();\r\n\r\n /** The [Category]($backend) into which new elements should be inserted by default.\r\n * Specialized tools are free to ignore this setting and instead use their own logic to select an appropriate category.\r\n * @see [[onCategoryChanged]] to be notified when this property is modified.\r\n * @see [CreateElementTool.targetCategory]($editor-frontend) for an example of a tool that uses this setting.\r\n */\r\n public get category(): Id64String | undefined {\r\n return this._category;\r\n }\r\n public set category(category: Id64String | undefined) {\r\n const previousCategory = this.category;\r\n if (category !== this.category) {\r\n this._category = category;\r\n this.onCategoryChanged.raiseEvent(previousCategory);\r\n }\r\n }\r\n\r\n /** The [Model]($backend) into which new elements should be inserted by default.\r\n * Specialized tools are free to ignore this setting and instead use their own logic to select an appropriate model.\r\n * @see [[onModelChanged]] to be notified when this property is modified.\r\n * @see [CreateElementTool.targetModel]($editor-frontend) for an example of a tool that uses this setting.\r\n */\r\n public get model(): Id64String | undefined {\r\n return this._model;\r\n }\r\n public set model(model: Id64String | undefined) {\r\n const previousModel = this.model;\r\n if (model !== this.model) {\r\n this._model = model;\r\n this.onModelChanged.raiseEvent(previousModel);\r\n }\r\n }\r\n}\r\n\r\n/** A connection to an editable briefcase on the backend. This class uses [Ipc]($docs/learning/IpcInterface.md) to communicate\r\n * to the backend and may only be used by [[IpcApp]]s.\r\n * @public\r\n */\r\nexport class BriefcaseConnection extends IModelConnection {\r\n protected _isClosed?: boolean;\r\n private readonly _modelsMonitor: ModelChangeMonitor;\r\n /** Default settings that can be used to control the behavior of [[Tool]]s that modify this briefcase.\r\n * @alpha\r\n */\r\n public readonly editorToolSettings = new BriefcaseEditorToolSettings();\r\n\r\n /** Manages local changes to the briefcase via [Txns]($docs/learning/InteractiveEditing.md). */\r\n public readonly txns: BriefcaseTxns;\r\n\r\n /** @internal */\r\n public override isBriefcaseConnection(): this is BriefcaseConnection { return true; }\r\n\r\n /** The Guid that identifies the iTwin that owns this iModel. */\r\n public override get iTwinId(): GuidString { return super.iTwinId!; } // GuidString | undefined for IModelConnection, but required for BriefcaseConnection\r\n\r\n /** The Guid that identifies this iModel. */\r\n public override get iModelId(): GuidString { return super.iModelId!; } // GuidString | undefined for IModelConnection, but required for BriefcaseConnection\r\n\r\n protected constructor(props: IModelConnectionProps, openMode: OpenMode) {\r\n super(props);\r\n this._openMode = openMode;\r\n this.txns = new BriefcaseTxns(this);\r\n this._modelsMonitor = new ModelChangeMonitor(this);\r\n }\r\n\r\n /** Open a BriefcaseConnection to a [BriefcaseDb]($backend). */\r\n public static async openFile(briefcaseProps: OpenBriefcaseProps): Promise<BriefcaseConnection> {\r\n const iModelProps = await IpcApp.appFunctionIpc.openBriefcase(briefcaseProps);\r\n const connection = new this({ ...briefcaseProps, ...iModelProps }, briefcaseProps.readonly ? OpenMode.Readonly : OpenMode.ReadWrite);\r\n IModelConnection.onOpen.raiseEvent(connection);\r\n return connection;\r\n }\r\n\r\n /** Open a BriefcaseConnection to a [StandaloneDb]($backend)\r\n * @note StandaloneDbs, by definition, may not push or pull changes. Attempting to do so will throw exceptions.\r\n */\r\n public static async openStandalone(filePath: string, openMode: OpenMode = OpenMode.ReadWrite, opts?: StandaloneOpenOptions): Promise<BriefcaseConnection> {\r\n const openResponse = await IpcApp.appFunctionIpc.openStandalone(filePath, openMode, opts);\r\n const connection = new this(openResponse, openMode);\r\n IModelConnection.onOpen.raiseEvent(connection);\r\n return connection;\r\n }\r\n\r\n /** Returns `true` if [[close]] has already been called. */\r\n public get isClosed(): boolean { return this._isClosed === true; }\r\n\r\n /**\r\n * Close this BriefcaseConnection.\r\n * @note make sure to call [[saveChanges]] before calling this method. Unsaved local changes are abandoned.\r\n */\r\n public async close(): Promise<void> {\r\n if (this.isClosed)\r\n return;\r\n\r\n await this._modelsMonitor.close();\r\n\r\n this.beforeClose();\r\n this.txns.dispose();\r\n\r\n this._isClosed = true;\r\n await IpcApp.appFunctionIpc.closeIModel(this._fileKey);\r\n }\r\n\r\n private requireTimeline() {\r\n if (this.iTwinId === Guid.empty)\r\n throw new IModelError(IModelStatus.WrongIModel, \"iModel has no timeline\");\r\n }\r\n\r\n /** Query if there are any pending Txns in this briefcase that are waiting to be pushed. */\r\n public async hasPendingTxns(): Promise<boolean> { // eslint-disable-line @itwin/prefer-get\r\n return this.txns.hasPendingTxns();\r\n }\r\n\r\n /** Commit pending changes to this briefcase.\r\n * @param description Optional description of the changes.\r\n */\r\n public async saveChanges(description?: string): Promise<void> {\r\n await IpcApp.appFunctionIpc.saveChanges(this.key, description);\r\n }\r\n\r\n /** Pull (and potentially merge if there are local changes) up to a specified changeset from iModelHub into this briefcase\r\n * @param toIndex The changeset index to pull changes to. If `undefined`, pull all changes.\r\n * @param options Options for pulling changes.\r\n * @see [[BriefcaseTxns.onChangesPulled]] for the event dispatched after changes are pulled.\r\n */\r\n public async pullChanges(toIndex?: ChangesetIndex, options?: PullChangesOptions): Promise<void> {\r\n const removeListeners: VoidFunction[] = [];\r\n // eslint-disable-next-line deprecation/deprecation\r\n const shouldReportProgress = !!options?.progressCallback || !!options?.downloadProgressCallback;\r\n\r\n if (shouldReportProgress) {\r\n const handleProgress = (_evt: Event, data: { loaded: number, total: number }) => {\r\n // eslint-disable-next-line deprecation/deprecation\r\n options?.progressCallback?.(data);\r\n options?.downloadProgressCallback?.(data);\r\n };\r\n\r\n const removeProgressListener = IpcApp.addListener(\r\n getPullChangesIpcChannel(this.iModelId),\r\n handleProgress,\r\n );\r\n removeListeners.push(removeProgressListener);\r\n }\r\n\r\n if (options?.abortSignal) {\r\n const abort = () => void IpcApp.appFunctionIpc.cancelPullChangesRequest(this.key);\r\n options?.abortSignal.addEventListener(\"abort\", abort);\r\n removeListeners.push(() => options?.abortSignal?.removeEventListener(\"abort\", abort));\r\n }\r\n\r\n this.requireTimeline();\r\n const ipcAppOptions: IpcAppPullChangesOptions = {\r\n reportProgress: shouldReportProgress,\r\n progressInterval: options?.progressInterval,\r\n enableCancellation: !!options?.abortSignal,\r\n };\r\n try {\r\n this.changeset = await IpcApp.appFunctionIpc.pullChanges(this.key, toIndex, ipcAppOptions);\r\n } finally {\r\n removeListeners.forEach((remove) => remove());\r\n }\r\n }\r\n\r\n /** Create a changeset from local Txns and push to iModelHub. On success, clear Txn table.\r\n * @param description The description for the changeset\r\n * @returns the changesetId of the pushed changes\r\n * @see [[BriefcaseTxns.onChangesPushed]] for the event dispatched after changes are pushed.\r\n */\r\n public async pushChanges(description: string): Promise<ChangesetIndexAndId> {\r\n this.requireTimeline();\r\n return IpcApp.appFunctionIpc.pushChanges(this.key, description);\r\n }\r\n\r\n /** The current graphical editing scope, if one is in progress.\r\n * @see [[enterEditingScope]] to begin graphical editing.\r\n */\r\n public get editingScope(): GraphicalEditingScope | undefined {\r\n return this._modelsMonitor.editingScope;\r\n }\r\n\r\n /** Return whether graphical editing is supported for this briefcase. It is not supported if the briefcase is read-only, or the briefcase contains a version of\r\n * the BisCore ECSchema older than v0.1.11.\r\n * @see [[enterEditingScope]] to enable graphical editing.\r\n */\r\n public async supportsGraphicalEditing(): Promise<boolean> {\r\n return IpcApp.appFunctionIpc.isGraphicalEditingSupported(this.key);\r\n }\r\n\r\n /** Begin a new graphical editing scope.\r\n * @throws Error if an editing scope already exists or one could not be created.\r\n * @see [[GraphicalEditingScope.exit]] to exit the scope.\r\n * @see [[supportsGraphicalEditing]] to determine whether this method should be expected to succeed.\r\n * @see [[editingScope]] to obtain the current editing scope, if one is in progress.\r\n */\r\n public async enterEditingScope(): Promise<GraphicalEditingScope> {\r\n return this._modelsMonitor.enterEditingScope();\r\n }\r\n\r\n /** Strictly for tests - dispatched from ModelChangeMonitor.processBuffered.\r\n * @internal\r\n */\r\n public readonly onBufferedModelChanges = new BeEvent<(changedModelIds: Set<string>) => void>();\r\n}\r\n"]}
1
+ {"version":3,"file":"BriefcaseConnection.js","sourceRoot":"","sources":["../../src/BriefcaseConnection.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 IModelConnection\r\n */\r\n\r\nimport { assert, BeEvent, CompressedId64Set, Guid, GuidString, Id64String, IModelStatus, OpenMode } from \"@itwin/core-bentley\";\r\nimport {\r\n ChangesetIndex, ChangesetIndexAndId, getPullChangesIpcChannel, IModelConnectionProps, IModelError,\r\n PullChangesOptions as IpcAppPullChangesOptions, OpenBriefcaseProps, StandaloneOpenOptions,\r\n} from \"@itwin/core-common\";\r\nimport { BriefcaseTxns } from \"./BriefcaseTxns\";\r\nimport { GraphicalEditingScope } from \"./GraphicalEditingScope\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { IpcApp } from \"./IpcApp\";\r\nimport { ProgressCallback } from \"./request/Request\";\r\nimport { disposeTileTreesForGeometricModels } from \"./tile/internal\";\r\nimport { Viewport } from \"./Viewport\";\r\n\r\n/**\r\n * Download progress information.\r\n * @public\r\n */\r\nexport interface DownloadProgressInfo {\r\n /** Bytes downloaded. */\r\n loaded: number;\r\n /** Total size of the download in bytes. */\r\n total: number;\r\n}\r\n\r\n/**\r\n * Called to show progress during a download.\r\n * @public\r\n */\r\nexport type OnDownloadProgress = (progress: DownloadProgressInfo) => void;\r\n\r\n/**\r\n * Partial interface of AbortSignal.\r\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal\r\n * @beta\r\n */\r\nexport interface GenericAbortSignal {\r\n /** Add Listener for abort signal. */\r\n addEventListener: (type: \"abort\", listener: (this: GenericAbortSignal, ev: any) => any) => void;\r\n /** Remove Listener for abort signal. */\r\n removeEventListener: (type: \"abort\", listener: (this: GenericAbortSignal, ev: any) => any) => void;\r\n}\r\n\r\n/**\r\n * Options for pulling iModel changes.\r\n * @public\r\n */\r\nexport interface PullChangesOptions {\r\n /**\r\n * Function called regularly to report progress of changes download.\r\n * @deprecated in 3.6. Use [[downloadProgressCallback]] instead.\r\n */\r\n progressCallback?: ProgressCallback;\r\n /** Function called regularly to report progress of changes download. */\r\n downloadProgressCallback?: OnDownloadProgress;\r\n /** Interval for calling progress callback (in milliseconds). */\r\n progressInterval?: number;\r\n /** Signal for cancelling the download.\r\n * @beta\r\n */\r\n abortSignal?: GenericAbortSignal;\r\n}\r\n\r\n/** Keeps track of changes to models, buffering them until synchronization points.\r\n * While a GraphicalEditingScope is open, the changes are buffered until the scope exits, at which point they are processed.\r\n * Otherwise, the buffered changes are processed after undo/redo, commit, or pull+merge changes.\r\n */\r\nclass ModelChangeMonitor {\r\n private _editingScope?: GraphicalEditingScope;\r\n private readonly _briefcase: BriefcaseConnection;\r\n private readonly _deletedModels = new Set<string>();\r\n private readonly _modelIdToGuid = new Map<string, string>();\r\n private readonly _removals: VoidFunction[] = [];\r\n\r\n public constructor(briefcase: BriefcaseConnection) {\r\n this._briefcase = briefcase;\r\n\r\n // Buffer updated geometry guids.\r\n this._removals.push(briefcase.txns.onModelGeometryChanged.addListener((changes) => {\r\n for (const change of changes) {\r\n this._deletedModels.delete(change.id);\r\n this._modelIdToGuid.set(change.id, change.guid);\r\n }\r\n }));\r\n\r\n // Buffer deletions of models.\r\n this._removals.push(briefcase.txns.onModelsChanged.addListener((changes) => {\r\n if (changes.deleted) {\r\n for (const id of CompressedId64Set.iterable(changes.deleted)) {\r\n this._modelIdToGuid.delete(id);\r\n this._deletedModels.add(id);\r\n }\r\n }\r\n }));\r\n\r\n // Outside of an editing scope, we want to update viewport contents after commit, undo/redo, or merging changes.\r\n const maybeProcess = async () => {\r\n if (this.editingScope)\r\n return;\r\n\r\n const modelIds = Array.from(this._modelIdToGuid.keys());\r\n if (modelIds.length > 0)\r\n await IModelApp.tileAdmin.purgeTileTrees(this._briefcase, modelIds);\r\n\r\n this.processBuffered();\r\n };\r\n\r\n this._removals.push(briefcase.txns.onCommitted.addListener(maybeProcess));\r\n this._removals.push(briefcase.txns.onAfterUndoRedo.addListener(maybeProcess));\r\n this._removals.push(briefcase.txns.onChangesPulled.addListener(maybeProcess));\r\n }\r\n\r\n public async close(): Promise<void> {\r\n for (const removal of this._removals)\r\n removal();\r\n\r\n this._removals.length = 0;\r\n\r\n if (this._editingScope) {\r\n await this._editingScope.exit();\r\n this._editingScope = undefined;\r\n }\r\n }\r\n\r\n public get editingScope(): GraphicalEditingScope | undefined {\r\n return this._editingScope;\r\n }\r\n\r\n public async enterEditingScope(): Promise<GraphicalEditingScope> {\r\n if (this._editingScope)\r\n throw new Error(\"Cannot create an editing scope for an iModel that already has one\");\r\n\r\n this._editingScope = await GraphicalEditingScope.enter(this._briefcase);\r\n\r\n const removeGeomListener = this._editingScope.onGeometryChanges.addListener((changes) => {\r\n const modelIds = [];\r\n for (const change of changes)\r\n modelIds.push(change.id);\r\n\r\n this.invalidateScenes(modelIds);\r\n });\r\n\r\n this._editingScope.onExited.addOnce((scope) => {\r\n assert(scope === this._editingScope);\r\n this._editingScope = undefined;\r\n removeGeomListener();\r\n this.processBuffered();\r\n });\r\n\r\n return this._editingScope;\r\n }\r\n\r\n private processBuffered(): void {\r\n const models = this._briefcase.models;\r\n for (const [id, guid] of this._modelIdToGuid) {\r\n const model = models.getLoaded(id)?.asGeometricModel;\r\n if (model)\r\n model.geometryGuid = guid;\r\n }\r\n\r\n const modelIds = new Set<string>(this._modelIdToGuid.keys());\r\n for (const deleted of this._deletedModels) {\r\n modelIds.add(deleted);\r\n models.unload(deleted);\r\n }\r\n\r\n this.invalidateScenes(modelIds);\r\n disposeTileTreesForGeometricModels(modelIds, this._briefcase);\r\n\r\n this._briefcase.onBufferedModelChanges.raiseEvent(modelIds);\r\n\r\n this._modelIdToGuid.clear();\r\n this._deletedModels.clear();\r\n }\r\n\r\n private invalidateScenes(changedModels: Iterable<Id64String>): void {\r\n for (const user of IModelApp.tileAdmin.tileUsers) {\r\n if (user instanceof Viewport && user.iModel === this._briefcase) {\r\n for (const modelId of changedModels) {\r\n if (user.view.viewsModel(modelId)) {\r\n user.invalidateScene();\r\n user.setFeatureOverrideProviderChanged();\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** Settings that can be used to control the behavior of [[Tool]]s that modify a [[BriefcaseConnection]].\r\n * For example, tools that want to create new elements can consult the briefcase's editor tool settings to\r\n * determine into which model and category to insert the elements.\r\n * Specialized tools are free to ignore these settings.\r\n * @see [[BriefcaseConnection.editorToolSettings]] to query or modify the current settings for a briefcase.\r\n * @see [CreateElementTool]($editor-frontend) for an example of a tool that uses these settings.\r\n * @alpha\r\n */\r\nexport class BriefcaseEditorToolSettings {\r\n private _category?: Id64String;\r\n private _model?: Id64String;\r\n\r\n /** An event raised just after the default [[category]] is changed. */\r\n public readonly onCategoryChanged = new BeEvent<(previousCategory: Id64String | undefined) => void>();\r\n\r\n /** An event raised just after the default [[model]] is changed. */\r\n public readonly onModelChanged = new BeEvent<(previousModel: Id64String | undefined) => void>();\r\n\r\n /** The [Category]($backend) into which new elements should be inserted by default.\r\n * Specialized tools are free to ignore this setting and instead use their own logic to select an appropriate category.\r\n * @see [[onCategoryChanged]] to be notified when this property is modified.\r\n * @see [CreateElementTool.targetCategory]($editor-frontend) for an example of a tool that uses this setting.\r\n */\r\n public get category(): Id64String | undefined {\r\n return this._category;\r\n }\r\n public set category(category: Id64String | undefined) {\r\n const previousCategory = this.category;\r\n if (category !== this.category) {\r\n this._category = category;\r\n this.onCategoryChanged.raiseEvent(previousCategory);\r\n }\r\n }\r\n\r\n /** The [Model]($backend) into which new elements should be inserted by default.\r\n * Specialized tools are free to ignore this setting and instead use their own logic to select an appropriate model.\r\n * @see [[onModelChanged]] to be notified when this property is modified.\r\n * @see [CreateElementTool.targetModel]($editor-frontend) for an example of a tool that uses this setting.\r\n */\r\n public get model(): Id64String | undefined {\r\n return this._model;\r\n }\r\n public set model(model: Id64String | undefined) {\r\n const previousModel = this.model;\r\n if (model !== this.model) {\r\n this._model = model;\r\n this.onModelChanged.raiseEvent(previousModel);\r\n }\r\n }\r\n}\r\n\r\n/** A connection to an editable briefcase on the backend. This class uses [Ipc]($docs/learning/IpcInterface.md) to communicate\r\n * to the backend and may only be used by [[IpcApp]]s.\r\n * @public\r\n */\r\nexport class BriefcaseConnection extends IModelConnection {\r\n protected _isClosed?: boolean;\r\n private readonly _modelsMonitor: ModelChangeMonitor;\r\n /** Default settings that can be used to control the behavior of [[Tool]]s that modify this briefcase.\r\n * @alpha\r\n */\r\n public readonly editorToolSettings = new BriefcaseEditorToolSettings();\r\n\r\n /** Manages local changes to the briefcase via [Txns]($docs/learning/InteractiveEditing.md). */\r\n public readonly txns: BriefcaseTxns;\r\n\r\n /** @internal */\r\n public override isBriefcaseConnection(): this is BriefcaseConnection { return true; }\r\n\r\n /** The Guid that identifies the iTwin that owns this iModel. */\r\n public override get iTwinId(): GuidString { return super.iTwinId!; } // GuidString | undefined for IModelConnection, but required for BriefcaseConnection\r\n\r\n /** The Guid that identifies this iModel. */\r\n public override get iModelId(): GuidString { return super.iModelId!; } // GuidString | undefined for IModelConnection, but required for BriefcaseConnection\r\n\r\n protected constructor(props: IModelConnectionProps, openMode: OpenMode) {\r\n super(props);\r\n this._openMode = openMode;\r\n this.txns = new BriefcaseTxns(this);\r\n this._modelsMonitor = new ModelChangeMonitor(this);\r\n }\r\n\r\n /** Open a BriefcaseConnection to a [BriefcaseDb]($backend). */\r\n public static async openFile(briefcaseProps: OpenBriefcaseProps): Promise<BriefcaseConnection> {\r\n const iModelProps = await IpcApp.appFunctionIpc.openBriefcase(briefcaseProps);\r\n const connection = new this({ ...briefcaseProps, ...iModelProps }, briefcaseProps.readonly ? OpenMode.Readonly : OpenMode.ReadWrite);\r\n IModelConnection.onOpen.raiseEvent(connection);\r\n return connection;\r\n }\r\n\r\n /** Open a BriefcaseConnection to a [StandaloneDb]($backend)\r\n * @note StandaloneDbs, by definition, may not push or pull changes. Attempting to do so will throw exceptions.\r\n */\r\n public static async openStandalone(filePath: string, openMode: OpenMode = OpenMode.ReadWrite, opts?: StandaloneOpenOptions): Promise<BriefcaseConnection> {\r\n const openResponse = await IpcApp.appFunctionIpc.openStandalone(filePath, openMode, opts);\r\n const connection = new this(openResponse, openMode);\r\n IModelConnection.onOpen.raiseEvent(connection);\r\n return connection;\r\n }\r\n\r\n /** Returns `true` if [[close]] has already been called. */\r\n public get isClosed(): boolean { return this._isClosed === true; }\r\n\r\n /**\r\n * Close this BriefcaseConnection.\r\n * @note make sure to call [[saveChanges]] before calling this method. Unsaved local changes are abandoned.\r\n */\r\n public async close(): Promise<void> {\r\n if (this.isClosed)\r\n return;\r\n\r\n await this._modelsMonitor.close();\r\n\r\n this.beforeClose();\r\n this.txns.dispose();\r\n\r\n this._isClosed = true;\r\n await IpcApp.appFunctionIpc.closeIModel(this._fileKey);\r\n }\r\n\r\n private requireTimeline() {\r\n if (this.iTwinId === Guid.empty)\r\n throw new IModelError(IModelStatus.WrongIModel, \"iModel has no timeline\");\r\n }\r\n\r\n /** Query if there are any pending Txns in this briefcase that are waiting to be pushed. */\r\n public async hasPendingTxns(): Promise<boolean> { // eslint-disable-line @itwin/prefer-get\r\n return this.txns.hasPendingTxns();\r\n }\r\n\r\n /** Commit pending changes to this briefcase.\r\n * @param description Optional description of the changes.\r\n */\r\n public async saveChanges(description?: string): Promise<void> {\r\n await IpcApp.appFunctionIpc.saveChanges(this.key, description);\r\n }\r\n\r\n /** Pull (and potentially merge if there are local changes) up to a specified changeset from iModelHub into this briefcase\r\n * @param toIndex The changeset index to pull changes to. If `undefined`, pull all changes.\r\n * @param options Options for pulling changes.\r\n * @see [[BriefcaseTxns.onChangesPulled]] for the event dispatched after changes are pulled.\r\n */\r\n public async pullChanges(toIndex?: ChangesetIndex, options?: PullChangesOptions): Promise<void> {\r\n const removeListeners: VoidFunction[] = [];\r\n // eslint-disable-next-line deprecation/deprecation\r\n const shouldReportProgress = !!options?.progressCallback || !!options?.downloadProgressCallback;\r\n\r\n if (shouldReportProgress) {\r\n const handleProgress = (_evt: Event, data: { loaded: number, total: number }) => {\r\n // eslint-disable-next-line deprecation/deprecation\r\n options?.progressCallback?.(data);\r\n options?.downloadProgressCallback?.(data);\r\n };\r\n\r\n const removeProgressListener = IpcApp.addListener(\r\n getPullChangesIpcChannel(this.iModelId),\r\n handleProgress,\r\n );\r\n removeListeners.push(removeProgressListener);\r\n }\r\n\r\n if (options?.abortSignal) {\r\n const abort = () => void IpcApp.appFunctionIpc.cancelPullChangesRequest(this.key);\r\n options?.abortSignal.addEventListener(\"abort\", abort);\r\n removeListeners.push(() => options?.abortSignal?.removeEventListener(\"abort\", abort));\r\n }\r\n\r\n this.requireTimeline();\r\n const ipcAppOptions: IpcAppPullChangesOptions = {\r\n reportProgress: shouldReportProgress,\r\n progressInterval: options?.progressInterval,\r\n enableCancellation: !!options?.abortSignal,\r\n };\r\n try {\r\n this.changeset = await IpcApp.appFunctionIpc.pullChanges(this.key, toIndex, ipcAppOptions);\r\n } finally {\r\n removeListeners.forEach((remove) => remove());\r\n }\r\n }\r\n\r\n /** Create a changeset from local Txns and push to iModelHub. On success, clear Txn table.\r\n * @param description The description for the changeset\r\n * @returns the changesetId of the pushed changes\r\n * @see [[BriefcaseTxns.onChangesPushed]] for the event dispatched after changes are pushed.\r\n */\r\n public async pushChanges(description: string): Promise<ChangesetIndexAndId> {\r\n this.requireTimeline();\r\n return IpcApp.appFunctionIpc.pushChanges(this.key, description);\r\n }\r\n\r\n /** The current graphical editing scope, if one is in progress.\r\n * @see [[enterEditingScope]] to begin graphical editing.\r\n */\r\n public get editingScope(): GraphicalEditingScope | undefined {\r\n return this._modelsMonitor.editingScope;\r\n }\r\n\r\n /** Return whether graphical editing is supported for this briefcase. It is not supported if the briefcase is read-only, or the briefcase contains a version of\r\n * the BisCore ECSchema older than v0.1.11.\r\n * @see [[enterEditingScope]] to enable graphical editing.\r\n */\r\n public async supportsGraphicalEditing(): Promise<boolean> {\r\n return IpcApp.appFunctionIpc.isGraphicalEditingSupported(this.key);\r\n }\r\n\r\n /** Begin a new graphical editing scope.\r\n * @throws Error if an editing scope already exists or one could not be created.\r\n * @see [[GraphicalEditingScope.exit]] to exit the scope.\r\n * @see [[supportsGraphicalEditing]] to determine whether this method should be expected to succeed.\r\n * @see [[editingScope]] to obtain the current editing scope, if one is in progress.\r\n */\r\n public async enterEditingScope(): Promise<GraphicalEditingScope> {\r\n return this._modelsMonitor.enterEditingScope();\r\n }\r\n\r\n /** Strictly for tests - dispatched from ModelChangeMonitor.processBuffered.\r\n * @internal\r\n */\r\n public readonly onBufferedModelChanges = new BeEvent<(changedModelIds: Set<string>) => void>();\r\n}\r\n"]}
@@ -90,7 +90,7 @@ export class DisplayStyleState extends ElementState {
90
90
  }
91
91
  if (newState !== this._scriptReference) {
92
92
  this.onScheduleScriptReferenceChanged.raiseEvent(newState); // eslint-disable-line deprecation/deprecation
93
- this.onScheduleScriptChanged.raiseEvent(newState === null || newState === void 0 ? void 0 : newState.script);
93
+ this.onScheduleScriptChanged.raiseEvent(newState?.script);
94
94
  this._scriptReference = newState;
95
95
  }
96
96
  }
@@ -117,7 +117,7 @@ export class DisplayStyleState extends ElementState {
117
117
  this._queryRenderTimelinePropsPromise = undefined;
118
118
  if (newState !== this._scriptReference) {
119
119
  this.onScheduleScriptReferenceChanged.raiseEvent(newState); // eslint-disable-line deprecation/deprecation
120
- this.onScheduleScriptChanged.raiseEvent(newState === null || newState === void 0 ? void 0 : newState.script);
120
+ this.onScheduleScriptChanged.raiseEvent(newState?.script);
121
121
  this._scriptReference = newState;
122
122
  }
123
123
  }
@@ -232,8 +232,7 @@ export class DisplayStyleState extends ElementState {
232
232
  * @see [[changeRenderTimeline]] to change the script.
233
233
  */
234
234
  get scheduleScript() {
235
- var _a;
236
- return (_a = this._scriptReference) === null || _a === void 0 ? void 0 : _a.script;
235
+ return this._scriptReference?.script;
237
236
  }
238
237
  set scheduleScript(script) {
239
238
  if (script === this.scheduleScript)
@@ -244,7 +243,7 @@ export class DisplayStyleState extends ElementState {
244
243
  this.onScheduleScriptChanged.raiseEvent(script);
245
244
  this._scriptReference = scriptRef;
246
245
  this._assigningScript = true;
247
- this.settings.scheduleScriptProps = script === null || script === void 0 ? void 0 : script.toJSON();
246
+ this.settings.scheduleScriptProps = script?.toJSON();
248
247
  if (!script)
249
248
  this.loadScriptReferenceFromTimeline(this.settings.renderTimeline); // eslint-disable-line @typescript-eslint/no-floating-promises
250
249
  }
@@ -331,12 +330,11 @@ export class DisplayStyleState extends ElementState {
331
330
  *
332
331
  */
333
332
  attachMapLayer(options) {
334
- var _a, _b;
335
333
  const layerSettings = options.settings.clone({});
336
334
  if (undefined === layerSettings)
337
335
  return;
338
- const isOverlay = (_a = options.isOverlay) !== null && _a !== void 0 ? _a : false;
339
- const insertIndex = (_b = options.insertIndex) !== null && _b !== void 0 ? _b : -1;
336
+ const isOverlay = options.isOverlay ?? false;
337
+ const insertIndex = options.insertIndex ?? -1;
340
338
  const layers = this.getMapLayers(isOverlay);
341
339
  if (insertIndex < 0 || insertIndex > (layers.length - 1)) {
342
340
  this.getMapLayers(isOverlay).push(layerSettings);
@@ -466,12 +464,11 @@ export class DisplayStyleState extends ElementState {
466
464
  * @internal
467
465
  */
468
466
  async getMapLayerRange(layerIndex, isOverlay) {
469
- var _a;
470
467
  const mapLayerSettings = this.mapLayerAtIndex(layerIndex, isOverlay);
471
468
  if (undefined === mapLayerSettings)
472
469
  return undefined;
473
470
  if (mapLayerSettings instanceof ModelMapLayerSettings) {
474
- const ecefTransform = (_a = this.iModel.ecefLocation) === null || _a === void 0 ? void 0 : _a.getTransform();
471
+ const ecefTransform = this.iModel.ecefLocation?.getTransform();
475
472
  if (!ecefTransform)
476
473
  return undefined;
477
474
  const model = this.iModel.models.getLoaded(mapLayerSettings.modelId);
@@ -696,8 +693,7 @@ export class DisplayStyleState extends ElementState {
696
693
  }
697
694
  /** @internal */
698
695
  getPlanarClipMaskState(modelId) {
699
- var _a;
700
- const model = (_a = this.iModel.models.getLoaded(modelId)) === null || _a === void 0 ? void 0 : _a.asSpatialModel;
696
+ const model = this.iModel.models.getLoaded(modelId)?.asSpatialModel;
701
697
  return (model && model.isRealityModel) ? this._attachedRealityModelPlanarClipMasks.get(modelId) : undefined;
702
698
  }
703
699
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DisplayStyleState.js","sourceRoot":"","sources":["../../src/DisplayStyleState.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 Views\r\n */\r\nimport { assert, BeEvent, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Angle, Range1d, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n BackgroundMapProps, BackgroundMapProvider, BackgroundMapProviderProps, BackgroundMapSettings,\r\n BaseLayerSettings, BaseMapLayerSettings, CartographicRange, ColorDef, ContextRealityModelProps, DisplayStyle3dSettings, DisplayStyle3dSettingsProps,\r\n DisplayStyleProps, DisplayStyleSettings, Environment, FeatureAppearance, GlobeMode, ImageMapLayerSettings, LightSettings, MapLayerProps,\r\n MapLayerSettings, MapSubLayerProps, ModelMapLayerSettings, RenderSchedule, RenderTimelineProps,\r\n SolarShadowSettings, SubCategoryOverride, SubLayerId, TerrainHeightOriginMode, ThematicDisplay, ThematicDisplayMode, ThematicGradientMode, ViewFlags,\r\n} from \"@itwin/core-common\";\r\nimport { ApproximateTerrainHeights } from \"./ApproximateTerrainHeights\";\r\nimport { BackgroundMapGeometry } from \"./BackgroundMapGeometry\";\r\nimport { ContextRealityModelState } from \"./ContextRealityModelState\";\r\nimport { ElementState } from \"./EntityState\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { PlanarClipMaskState } from \"./PlanarClipMaskState\";\r\nimport { getCesiumOSMBuildingsUrl, MapCartoRectangle, TileTreeReference } from \"./tile/internal\";\r\nimport { viewGlobalLocation, ViewGlobalLocationConstants } from \"./ViewGlobalLocation\";\r\nimport { ScreenViewport } from \"./Viewport\";\r\nimport { GeometricModelState } from \"./ModelState\";\r\n\r\n/** @internal */\r\nexport class TerrainDisplayOverrides {\r\n public wantSkirts?: boolean;\r\n public wantNormals?: boolean;\r\n public produceGeometry?: boolean;\r\n}\r\n\r\n/** Options controlling display of [OpenStreetMap Buildings](https://cesium.com/platform/cesium-ion/content/cesium-osm-buildings/).\r\n * @see [[DisplayStyleState.setOSMBuildingDisplay]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface OsmBuildingDisplayOptions {\r\n /** If defined, enables or disables display of the buildings by attaching or detaching the OpenStreetMap Buildings reality model. */\r\n onOff?: boolean;\r\n /** If defined, overrides aspects of the appearance of the OpenStreetMap building meshes. */\r\n appearanceOverrides?: FeatureAppearance;\r\n}\r\n\r\n/** A DisplayStyle defines the parameters for 'styling' the contents of a [[ViewState]].\r\n * @public\r\n * @extensions\r\n */\r\nexport abstract class DisplayStyleState extends ElementState implements DisplayStyleProps {\r\n /** @internal */\r\n public static override get className() { return \"DisplayStyle\"; }\r\n private _scriptReference?: RenderSchedule.ScriptReference;\r\n private _ellipsoidMapGeometry: BackgroundMapGeometry | undefined;\r\n private _attachedRealityModelPlanarClipMasks = new Map<Id64String, PlanarClipMaskState>();\r\n /** @internal */\r\n protected _queryRenderTimelinePropsPromise?: Promise<RenderTimelineProps | undefined>;\r\n private _assigningScript = false;\r\n\r\n /** Event raised just before the [[scheduleScriptReference]] property is changed.\r\n * @deprecated in 3.x. use [[onScheduleScriptChanged]].\r\n */\r\n public readonly onScheduleScriptReferenceChanged = new BeEvent<(newScriptReference: RenderSchedule.ScriptReference | undefined) => void>();\r\n /** Event raised just before the [[scheduleScript]] property is changed. */\r\n public readonly onScheduleScriptChanged = new BeEvent<(newScript: RenderSchedule.Script | undefined) => void>();\r\n /** Event raised just after [[setOSMBuildingDisplay]] changes the enabled state of the OSM buildings. */\r\n public readonly onOSMBuildingDisplayChanged = new BeEvent<(osmBuildingDisplayEnabled: boolean) => void>();\r\n\r\n /** The container for this display style's settings. */\r\n public abstract get settings(): DisplayStyleSettings;\r\n\r\n /** @internal */\r\n public abstract overrideTerrainDisplay(): TerrainDisplayOverrides | undefined;\r\n\r\n /** Construct a new DisplayStyleState from its JSON representation.\r\n * @param props JSON representation of the display style.\r\n * @param iModel IModelConnection containing the display style.\r\n * @param source If the constructor is being invoked from [[EntityState.clone]], the display style that is being cloned.\r\n */\r\n constructor(props: DisplayStyleProps, iModel: IModelConnection, source?: DisplayStyleState) {\r\n super(props, iModel);\r\n const styles = this.jsonProperties.styles;\r\n\r\n if (source)\r\n this._scriptReference = source._scriptReference;\r\n\r\n if (styles) {\r\n // ###TODO Use DisplayStyleSettings.planarClipMasks\r\n if (styles.planarClipOvr)\r\n for (const planarClipOvr of styles.planarClipOvr)\r\n if (Id64.isValid(planarClipOvr.modelId))\r\n this._attachedRealityModelPlanarClipMasks.set(planarClipOvr.modelId, PlanarClipMaskState.fromJSON(planarClipOvr));\r\n }\r\n }\r\n\r\n /** Ensures all of the data required by the display style is loaded. This method is invoked for you by [[ViewState.load]], but if\r\n * you obtain a display style by some other means you should `await` this method before using the display style.\r\n */\r\n public async load(): Promise<void> {\r\n // If we were cloned, we may already have a valid schedule state, and our display style Id may be invalid / different.\r\n // Preserve it if still usable.\r\n if (this._scriptReference) {\r\n if (this.settings.renderTimeline === this._scriptReference.sourceId) {\r\n // The script came from the same RenderTimeline element. Keep it.\r\n return;\r\n }\r\n\r\n if (undefined === this.settings.renderTimeline) {\r\n // The script came from a display style's JSON properties. Keep it if (1) this style is not persistent or (2) this style has the same Id\r\n if (this.id === this._scriptReference.sourceId || !Id64.isValidId64(this.id))\r\n return;\r\n }\r\n }\r\n\r\n // The schedule script stored in JSON properties takes precedence over the RenderTimeline if both are defined.\r\n if (this.settings.scheduleScriptProps)\r\n this.loadScriptReferenceFromScript(this.settings.scheduleScriptProps);\r\n else\r\n await this.loadScriptReferenceFromTimeline(this.settings.renderTimeline);\r\n }\r\n\r\n private loadScriptReferenceFromScript(scriptProps: Readonly<RenderSchedule.ScriptProps>): void {\r\n let newState;\r\n try {\r\n const script = RenderSchedule.Script.fromJSON(scriptProps);\r\n if (script)\r\n newState = new RenderSchedule.ScriptReference(this.id, script);\r\n } catch (_) {\r\n // schedule state is undefined.\r\n }\r\n\r\n if (newState !== this._scriptReference) {\r\n this.onScheduleScriptReferenceChanged.raiseEvent(newState); // eslint-disable-line deprecation/deprecation\r\n this.onScheduleScriptChanged.raiseEvent(newState?.script);\r\n this._scriptReference = newState;\r\n }\r\n }\r\n\r\n private async loadScriptReferenceFromTimeline(timelineId: Id64String | undefined): Promise<void> {\r\n let newState;\r\n if (timelineId && Id64.isValidId64(timelineId)) {\r\n try {\r\n // If a subsequent call to loadScriptReferenceFromTimeline is made while we're awaiting this one, we'll abort this one.\r\n const promise = this._queryRenderTimelinePropsPromise = this.queryRenderTimelineProps(timelineId);\r\n const timeline = await promise;\r\n if (promise !== this._queryRenderTimelinePropsPromise)\r\n return;\r\n\r\n if (timeline) {\r\n const scriptProps = JSON.parse(timeline.script);\r\n const script = RenderSchedule.Script.fromJSON(scriptProps);\r\n if (script)\r\n newState = new RenderSchedule.ScriptReference(timelineId, script);\r\n }\r\n } catch (_) {\r\n // schedule state is undefined.\r\n }\r\n }\r\n\r\n this._queryRenderTimelinePropsPromise = undefined;\r\n if (newState !== this._scriptReference) {\r\n this.onScheduleScriptReferenceChanged.raiseEvent(newState); // eslint-disable-line deprecation/deprecation\r\n this.onScheduleScriptChanged.raiseEvent(newState?.script);\r\n this._scriptReference = newState;\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected async queryRenderTimelineProps(timelineId: Id64String): Promise<RenderTimelineProps | undefined> {\r\n try {\r\n return await this.iModel.elements.loadProps(timelineId, { renderTimeline: { omitScriptElementIds: true } }) as RenderTimelineProps;\r\n } catch (_) {\r\n return undefined;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public get displayTerrain() {\r\n return this.viewFlags.backgroundMap && this.settings.backgroundMap.applyTerrain;\r\n }\r\n\r\n /** @internal */\r\n public get globeMode(): GlobeMode { return this.settings.backgroundMap.globeMode; }\r\n\r\n /** Settings controlling how the base map is displayed within a view.\r\n * The base map can be provided by any map imagery source or set to be a single color.\r\n */\r\n public get backgroundMapBase(): BaseLayerSettings {\r\n return this.settings.mapImagery.backgroundBase;\r\n }\r\n public set backgroundMapBase(base: BaseLayerSettings) {\r\n this.settings.mapImagery.backgroundBase = base;\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** @internal */\r\n public get backgroundMapLayers(): MapLayerSettings[] { return this.settings.mapImagery.backgroundLayers; }\r\n\r\n /** @internal */\r\n public get overlayMapLayers(): MapLayerSettings[] { return this.settings.mapImagery.overlayLayers; }\r\n\r\n /** The settings controlling how a background map is displayed within a view.\r\n * @see [[ViewFlags.backgroundMap]] for toggling display of the map on or off.\r\n */\r\n public get backgroundMapSettings(): BackgroundMapSettings { return this.settings.backgroundMap; }\r\n public set backgroundMapSettings(settings: BackgroundMapSettings) {\r\n this.settings.backgroundMap = settings;\r\n }\r\n\r\n /** Modify a subset of the background map display settings.\r\n * @param name props JSON representation of the properties to change. Any properties not present will retain their current values in `this.backgroundMapSettings`.\r\n * @see [[ViewFlags.backgroundMap]] for toggling display of the map.\r\n * @see [[changeBackgroundMapProvider]] to change the type of map imagery displayed.\r\n *\r\n * Example that changes only the elevation, leaving the provider and type unchanged:\r\n * ``` ts\r\n * style.changeBackgroundMapProps({ groundBias: 16.2 });\r\n * ```\r\n * @public\r\n */\r\n public changeBackgroundMapProps(props: BackgroundMapProps): void {\r\n const newSettings = this.backgroundMapSettings.clone(props);\r\n this.backgroundMapSettings = newSettings;\r\n }\r\n\r\n /** Change aspects of the [BackgroundMapProvider]($common) from which background map imagery is obtained.\r\n * Any properties not explicitly specified by `props` will retain their current values.\r\n * @public\r\n */\r\n public changeBackgroundMapProvider(props: BackgroundMapProviderProps): void {\r\n const base = this.settings.mapImagery.backgroundBase;\r\n if (base instanceof ColorDef) {\r\n this.settings.mapImagery.backgroundBase = BaseMapLayerSettings.fromProvider(BackgroundMapProvider.fromJSON(props));\r\n } else {\r\n const provider = base.provider ? base.provider.clone(props) : BackgroundMapProvider.fromJSON(props);\r\n this.settings.mapImagery.backgroundBase = base.cloneWithProvider(provider);\r\n }\r\n\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** Call a function for each reality model attached to this display style.\r\n * @see [DisplayStyleSettings.contextRealityModels]($common).\r\n */\r\n public forEachRealityModel(func: (model: ContextRealityModelState) => void): void {\r\n for (const model of this.settings.contextRealityModels.models) {\r\n assert(model instanceof ContextRealityModelState);\r\n func(model);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public forEachRealityTileTreeRef(func: (ref: TileTreeReference) => void): void {\r\n this.forEachRealityModel((model) => func(model.treeRef));\r\n }\r\n\r\n /** @internal */\r\n public forEachTileTreeRef(func: (ref: TileTreeReference) => void): void {\r\n this.forEachRealityTileTreeRef(func);\r\n }\r\n\r\n /** Performs logical comparison against another display style. Two display styles are logically equivalent if they have the same name, Id, and settings.\r\n * @param other The display style to which to compare.\r\n * @returns true if the specified display style is logically equivalent to this display style - i.e., both styles have the same values for all of their settings.\r\n */\r\n public equalState(other: DisplayStyleState): boolean {\r\n if (this.name !== other.name || this.id !== other.id)\r\n return false;\r\n else\r\n return JSON.stringify(this.settings) === JSON.stringify(other.settings);\r\n }\r\n\r\n /** The name of this DisplayStyle */\r\n public get name(): string { return this.code.value; }\r\n\r\n /** Change the Id of the [RenderTimeline]($backend) element that hosts the [RenderSchedule.Script]($common) to be applied by this display style for\r\n * animating the contents of the view, and update [[scheduleScript]] using the script associated with the [RenderTimeline]($backend) element.\r\n * @see [DisplayStyleSettings.renderTimeline]($common).\r\n */\r\n public async changeRenderTimeline(timelineId: Id64String | undefined): Promise<void> {\r\n // Potentially trigger async loading of new schedule state.\r\n this.settings.renderTimeline = timelineId;\r\n\r\n // Await async loading if necessary.\r\n // Note the `await` in loadScriptReferenceFromTimeline will resolve before this one [per the spec](https://262.ecma-international.org/6.0/#sec-triggerpromisereactions).\r\n if (this._queryRenderTimelinePropsPromise)\r\n await this._queryRenderTimelinePropsPromise;\r\n }\r\n\r\n /** The [RenderSchedule.Script]($common) that animates the contents of the view, if any.\r\n * @see [[changeRenderTimeline]] to change the script.\r\n */\r\n public get scheduleScript(): RenderSchedule.Script | undefined {\r\n return this._scriptReference?.script;\r\n }\r\n\r\n public set scheduleScript(script: RenderSchedule.Script | undefined) {\r\n if (script === this.scheduleScript)\r\n return;\r\n\r\n try {\r\n const scriptRef = script ? new RenderSchedule.ScriptReference(script) : undefined;\r\n this.onScheduleScriptReferenceChanged.raiseEvent(scriptRef); // eslint-disable-line deprecation/deprecation\r\n this.onScheduleScriptChanged.raiseEvent(script);\r\n this._scriptReference = scriptRef;\r\n\r\n this._assigningScript = true;\r\n this.settings.scheduleScriptProps = script?.toJSON();\r\n\r\n if (!script)\r\n this.loadScriptReferenceFromTimeline(this.settings.renderTimeline); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n } finally {\r\n this._assigningScript = false;\r\n }\r\n }\r\n\r\n /** The [RenderSchedule.Script]($common) that animates the contents of the view, if any, along with the Id of the element that hosts the script.\r\n * @note The host element may be a [RenderTimeline]($backend) or a [DisplayStyle]($backend).\r\n * @deprecated in 3.x. Use [[scheduleScript]].\r\n */\r\n public get scheduleScriptReference(): RenderSchedule.ScriptReference | undefined {\r\n return this._scriptReference;\r\n }\r\n\r\n /** Attach a [ContextRealityModel]($common) to this display style.\r\n * @see [DisplayStyleSettings.contextRealityModels]($common).\r\n * @see [ContextRealityModels.add]($common)\r\n */\r\n public attachRealityModel(props: ContextRealityModelProps): ContextRealityModelState {\r\n const model = this.settings.contextRealityModels.add(props);\r\n assert(model instanceof ContextRealityModelState);\r\n return model;\r\n }\r\n\r\n /** Detach the first [ContextRealityModel]($common) that matches the specified name and url.\r\n * @see [DisplayStyleSettings.contextRealityModels]($common)\r\n * @see [ContextRealityModels.delete]($common)\r\n */\r\n public detachRealityModelByNameAndUrl(name: string, url: string): boolean {\r\n const model = this.settings.contextRealityModels.models.find((x) => x.matchesNameAndUrl(name, url));\r\n return undefined !== model && this.settings.contextRealityModels.delete(model);\r\n }\r\n\r\n /** Get the [[ContextRealityModelState]] that displays the OpenStreetMap worldwide building layer, if enabled.\r\n * @see [[setOSMBuildingDisplay]]\r\n */\r\n public getOSMBuildingRealityModel(): ContextRealityModelState | undefined {\r\n if (!this.iModel.isGeoLocated || this.globeMode !== GlobeMode.Ellipsoid) // The OSM tile tree is ellipsoidal.\r\n return undefined;\r\n\r\n const url = getCesiumOSMBuildingsUrl();\r\n if (undefined === url)\r\n return undefined;\r\n\r\n return this.contextRealityModelStates.find((x) => x.url === url);\r\n }\r\n\r\n /** Set the display of the OpenStreetMap worldwide building layer in this display style by attaching or detaching the reality model displaying the buildings.\r\n * The OSM buildings are displayed from a reality model aggregated and served from Cesium ion.<(https://cesium.com/content/cesium-osm-buildings/>\r\n * The options [[OsmBuildingDisplayOptions]] control the display and appearance overrides.\r\n */\r\n public setOSMBuildingDisplay(options: OsmBuildingDisplayOptions): boolean {\r\n if (!this.iModel.isGeoLocated || this.globeMode !== GlobeMode.Ellipsoid) // The OSM tile tree is ellipsoidal.\r\n return false;\r\n\r\n const url = getCesiumOSMBuildingsUrl();\r\n if (undefined === url)\r\n return false;\r\n\r\n let model = this.settings.contextRealityModels.models.find((x) => x.url === url);\r\n if (options.onOff === false) {\r\n const turnedOff = undefined !== model && this.settings.contextRealityModels.delete(model);\r\n if (turnedOff)\r\n this.onOSMBuildingDisplayChanged.raiseEvent(false);\r\n\r\n return turnedOff;\r\n }\r\n\r\n if (!model) {\r\n const name = IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelNames.OSMBuildings\");\r\n model = this.attachRealityModel({ tilesetUrl: url, name });\r\n this.onOSMBuildingDisplayChanged.raiseEvent(true);\r\n }\r\n\r\n if (options.appearanceOverrides)\r\n model.appearanceOverrides = options.appearanceOverrides;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Return if a context reality model is attached.\r\n * @see [[ContextRealityModelProps]].\r\n * */\r\n public hasAttachedRealityModel(name: string, url: string): boolean {\r\n return undefined !== this.settings.contextRealityModels.models.find((x) => x.matchesNameAndUrl(name, url));\r\n }\r\n\r\n /** @internal */\r\n public getMapLayers(isOverlay: boolean) { return isOverlay ? this.overlayMapLayers : this.backgroundMapLayers; }\r\n\r\n /**\r\n * Attach a map layer to display style.\r\n * @param Settings representing the map layer.\r\n * @param isOverlay true if layer is overlay, otherwise layer is background. Defaults to false.\r\n * @param index where the layer should be inserted. Defaults to -1, appended to end.\r\n * @public\r\n *\r\n */\r\n public attachMapLayer(options: { settings: MapLayerSettings, isOverlay?: boolean, insertIndex?: number}): void {\r\n const layerSettings = options.settings.clone({});\r\n if (undefined === layerSettings)\r\n return;\r\n\r\n const isOverlay = options.isOverlay ?? false;\r\n const insertIndex = options.insertIndex ?? -1;\r\n const layers = this.getMapLayers(isOverlay);\r\n\r\n if (insertIndex < 0 || insertIndex > (layers.length - 1)) {\r\n this.getMapLayers(isOverlay).push(layerSettings);\r\n } else {\r\n layers.splice(insertIndex, 0, layerSettings);\r\n }\r\n\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** @internal */\r\n public attachMapLayerProps(options: { props: MapLayerProps, isOverlay?: boolean, insertIndex?: number}): void {\r\n const settings = MapLayerSettings.fromJSON(options.props);\r\n if (undefined === settings)\r\n return;\r\n\r\n this.attachMapLayer({settings, isOverlay: options.isOverlay, insertIndex:options.insertIndex});\r\n }\r\n\r\n /** @internal */\r\n public hasAttachedMapLayer(name: string, source: string, isOverlay: boolean): boolean {\r\n return -1 !== this.findMapLayerIndexByNameAndSource(name, source, isOverlay);\r\n }\r\n\r\n /** @internal */\r\n public detachMapLayerByNameAndSource(name: string, source: string, isOverlay: boolean): void {\r\n const index = this.findMapLayerIndexByNameAndSource(name, source, isOverlay);\r\n if (- 1 !== index)\r\n this.detachMapLayerByIndex(index, isOverlay);\r\n }\r\n\r\n /** Detach map layer at index (-1 to remove all layers)\r\n * @public\r\n */\r\n public detachMapLayerByIndex(index: number, isOverlay: boolean): void {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (index < 0)\r\n layers.length = 0;\r\n else\r\n layers.splice(index, 1);\r\n\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /**\r\n * Lookup a maplayer index by name and source.\r\n * @param name Name of of the layer.\r\n * @param source Unique string identifying the layer.\r\n * @param isOverlay true if layer is overlay, otherwise layer is background. Defaults to false.\r\n * @public\r\n *\r\n */\r\n public findMapLayerIndexByNameAndSource(name: string, source: string, isOverlay: boolean) {\r\n return this.getMapLayers(isOverlay).findIndex((layer) => layer.matchesNameAndSource(name, source));\r\n }\r\n\r\n /** @public */\r\n public mapLayerAtIndex(index: number, isOverlay: boolean): MapLayerSettings | undefined {\r\n const layers = this.getMapLayers(isOverlay);\r\n return (index < 0 || index >= layers.length) ? undefined : layers[index];\r\n }\r\n\r\n /** Return map base transparency as a number between 0 and 1.\r\n * @public\r\n */\r\n public get baseMapTransparency(): number {\r\n return this.settings.mapImagery.baseTransparency;\r\n }\r\n\r\n /** Change the map base transparency as a number between 0 and 1.\r\n * @public\r\n */\r\n public changeBaseMapTransparency(transparency: number) {\r\n if (this.settings.mapImagery.backgroundBase instanceof ColorDef) {\r\n this.settings.mapImagery.backgroundBase = this.settings.mapImagery.backgroundBase.withTransparency(transparency * 255);\r\n } else {\r\n this.settings.mapImagery.backgroundBase = this.settings.mapImagery.backgroundBase.clone({transparency});\r\n }\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** Modify a subset of a map layer settings.\r\n * @param props props JSON representation of the properties to change. Any properties not present will retain their current values.\r\n * @param index where the layer should be inserted.\r\n * @param isOverlay true if layer is overlay, otherwise layer is background.\r\n *\r\n * Example that changes only the visibility of the first overlay map layer.\r\n * ``` ts\r\n * style.changeMapLayerProps({ visible: false }, 0, false);\r\n * ```\r\n * @public\r\n */\r\n public changeMapLayerProps(props: Partial<MapLayerProps>, index: number, isOverlay: boolean) {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (index < 0 || index >= layers.length)\r\n return;\r\n layers[index] = layers[index].clone(props);\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** @public */\r\n public changeMapLayerCredentials(index: number, isOverlay: boolean, userName?: string, password?: string,) {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (index < 0 || index >= layers.length)\r\n return;\r\n const layer = layers[index];\r\n if (layer instanceof ImageMapLayerSettings) {\r\n layer.setCredentials(userName, password);\r\n this._synchBackgroundMapImagery();\r\n }\r\n }\r\n\r\n /** Modify a subset of a sub-layer settings.\r\n * @param props props JSON representation of the properties to change. Any properties not present will retain their current values.\r\n * @param subLayerId Id of the sub-layer that should be modified.\r\n * @param layerIndex of the owning map layer.\r\n * @param isOverlay true if the map layer is overlay, otherwise layer is background\r\n *\r\n * @public\r\n */\r\n public changeMapSubLayerProps(props: Partial<MapSubLayerProps>, subLayerId: SubLayerId, layerIndex: number, isOverlay: boolean) {\r\n const mapLayerSettings = this.mapLayerAtIndex(layerIndex, isOverlay);\r\n if (undefined === mapLayerSettings)\r\n return;\r\n\r\n if (!(mapLayerSettings instanceof ImageMapLayerSettings)) {\r\n assert (false);\r\n return;\r\n }\r\n\r\n const subLayers = new Array<MapSubLayerProps>();\r\n for (const subLayer of mapLayerSettings.subLayers) {\r\n subLayers.push((subLayerId === -1 || subLayer.id === subLayerId) ? subLayer.clone(props).toJSON() : subLayer.toJSON());\r\n }\r\n\r\n this.changeMapLayerProps({ subLayers }, layerIndex, isOverlay);\r\n }\r\n\r\n /** Returns the cartographic range of map layer.\r\n * @param layerIndex of the map layer.\r\n * @param isOverlay true if the map layer is overlay, otherwise layer is background\r\n *\r\n * @internal\r\n */\r\n public async getMapLayerRange(layerIndex: number, isOverlay: boolean): Promise<MapCartoRectangle | undefined> {\r\n const mapLayerSettings = this.mapLayerAtIndex(layerIndex, isOverlay);\r\n if (undefined === mapLayerSettings)\r\n return undefined;\r\n\r\n if (mapLayerSettings instanceof ModelMapLayerSettings) {\r\n const ecefTransform = this.iModel.ecefLocation?.getTransform();\r\n if (!ecefTransform)\r\n return undefined;\r\n const model = this.iModel.models.getLoaded(mapLayerSettings.modelId);\r\n if (!model || !(model instanceof GeometricModelState))\r\n return undefined;\r\n\r\n const modelRange = await model.queryModelRange();\r\n const cartoRange = new CartographicRange(modelRange, ecefTransform).getLongitudeLatitudeBoundingBox();\r\n\r\n return MapCartoRectangle.fromRadians(cartoRange.low.x, cartoRange.low.y, cartoRange.high.x, cartoRange.high.y);\r\n }\r\n if (! (mapLayerSettings instanceof ImageMapLayerSettings)) {\r\n assert(false);\r\n return undefined;\r\n }\r\n\r\n const imageryProvider = IModelApp.mapLayerFormatRegistry.createImageryProvider(mapLayerSettings);\r\n if (undefined === imageryProvider)\r\n return undefined;\r\n\r\n try {\r\n await imageryProvider.initialize();\r\n return imageryProvider.cartoRange;\r\n\r\n } catch (_error) {\r\n return undefined;\r\n }\r\n return undefined;\r\n }\r\n\r\n /** change viewport to include range of map layer.\r\n * @internal\r\n */\r\n public async viewMapLayerRange(layerIndex: number, isOverlay: boolean, vp: ScreenViewport): Promise<boolean> {\r\n const range = await this.getMapLayerRange(layerIndex, isOverlay);\r\n if (!range)\r\n return false;\r\n\r\n if (range.xLength() > 1.5 * Angle.piRadians)\r\n viewGlobalLocation(vp, true, ViewGlobalLocationConstants.satelliteHeightAboveEarthInMeters, undefined, undefined);\r\n else\r\n viewGlobalLocation(vp, true, undefined, undefined, range.globalLocation);\r\n\r\n return true;\r\n }\r\n\r\n /* @internal */\r\n private _synchBackgroundMapImagery() {\r\n this.settings.synchMapImagery();\r\n }\r\n\r\n /**\r\n * Move map layer to top.\r\n * @param index index of layer to move.\r\n * @param isOverlay true if layer is overlay.\r\n * @public\r\n *\r\n */\r\n public moveMapLayerToTop(index: number, isOverlay: boolean) {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (index >= 0 && index < layers.length - 1) {\r\n const layer = layers.splice(index, 1);\r\n layers.push(layer[0]);\r\n this._synchBackgroundMapImagery();\r\n }\r\n }\r\n\r\n /**\r\n * Move map layer to bottom.\r\n * @param index index of layer to move.\r\n * @param isOverlay true if layer is overlay.\r\n * @public\r\n */\r\n public moveMapLayerToBottom(index: number, isOverlay: boolean) {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (index > 0 && index < layers.length) {\r\n const layer = layers.splice(index, 1);\r\n layers.unshift(layer[0]);\r\n this._synchBackgroundMapImagery();\r\n }\r\n }\r\n\r\n /**\r\n * Reorder map layers\r\n * @param fromIndex index of map layer to move\r\n * @param toIndex insert index. If equal to length of map array the map layer is moved to end of array.\r\n * @public\r\n */\r\n public moveMapLayerToIndex(fromIndex: number, toIndex: number, isOverlay: boolean) {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (fromIndex === toIndex)\r\n return;\r\n\r\n if (fromIndex < 0 || fromIndex >= layers.length || toIndex > layers.length)\r\n return;\r\n\r\n const layer = layers.splice(fromIndex, 1);\r\n layers.splice(toIndex, 0, layer[0]); // note: if toIndex === settings.mapImagery.backgroundLayers.length item is appended\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** Flags controlling various aspects of the display style.\r\n * @see [DisplayStyleSettings.viewFlags]($common)\r\n */\r\n public get viewFlags(): ViewFlags { return this.settings.viewFlags; }\r\n public set viewFlags(flags: ViewFlags) { this.settings.viewFlags = flags; }\r\n\r\n /** The background color for this DisplayStyle */\r\n public get backgroundColor(): ColorDef { return this.settings.backgroundColor; }\r\n public set backgroundColor(val: ColorDef) { this.settings.backgroundColor = val; }\r\n\r\n /** The color used to draw geometry in monochrome mode.\r\n * @see [ViewFlags.monochrome]($common) for enabling monochrome mode.\r\n */\r\n public get monochromeColor(): ColorDef { return this.settings.monochromeColor; }\r\n public set monochromeColor(val: ColorDef) { this.settings.monochromeColor = val; }\r\n\r\n private _backgroundMapGeometry?: {\r\n bimElevationBias: number;\r\n geometry: BackgroundMapGeometry;\r\n globeMode: GlobeMode;\r\n };\r\n\r\n /** @internal */\r\n public anyMapLayersVisible(overlay: boolean): boolean {\r\n const layers = this.getMapLayers(overlay);\r\n\r\n for (const mapLayer of layers)\r\n if (mapLayer.visible)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public getIsBackgroundMapVisible(): boolean {\r\n return undefined !== this.iModel.ecefLocation && (this.viewFlags.backgroundMap || this.anyMapLayersVisible(false));\r\n }\r\n /** @internal */\r\n public get backgroundMapElevationBias(): number | undefined {\r\n if (this.backgroundMapSettings.applyTerrain) {\r\n const terrainSettings = this.backgroundMapSettings.terrainSettings;\r\n switch (terrainSettings.heightOriginMode) {\r\n case TerrainHeightOriginMode.Ground:\r\n return (undefined === this.iModel.projectCenterAltitude) ? undefined : terrainSettings.heightOrigin + terrainSettings.exaggeration * this.iModel.projectCenterAltitude;\r\n\r\n case TerrainHeightOriginMode.Geodetic:\r\n return terrainSettings.heightOrigin;\r\n\r\n case TerrainHeightOriginMode.Geoid:\r\n return (undefined === this.iModel.geodeticToSeaLevel) ? undefined : terrainSettings.heightOrigin + this.iModel.geodeticToSeaLevel;\r\n }\r\n } else {\r\n return this.backgroundMapSettings.groundBias;\r\n }\r\n\r\n }\r\n\r\n /** @internal */\r\n public getBackgroundMapGeometry(): BackgroundMapGeometry | undefined {\r\n if (undefined === this.iModel.ecefLocation)\r\n return undefined;\r\n\r\n const bimElevationBias = this.backgroundMapElevationBias;\r\n\r\n if (undefined === bimElevationBias)\r\n return undefined;\r\n\r\n const globeMode = this.globeMode;\r\n if (undefined === this._backgroundMapGeometry || this._backgroundMapGeometry.globeMode !== globeMode || this._backgroundMapGeometry.bimElevationBias !== bimElevationBias) {\r\n const geometry = new BackgroundMapGeometry(bimElevationBias, globeMode, this.iModel);\r\n this._backgroundMapGeometry = { bimElevationBias, geometry, globeMode };\r\n }\r\n return this._backgroundMapGeometry.geometry;\r\n }\r\n\r\n /** [[ContextRealityModelState]]s attached to this display style.\r\n * @see [DisplayStyleSettings.contextRealityModels]($common).\r\n */\r\n public get contextRealityModelStates(): ReadonlyArray<ContextRealityModelState> {\r\n return this.settings.contextRealityModels.models as ContextRealityModelState[];\r\n }\r\n\r\n /** @internal */\r\n public getGlobalGeometryAndHeightRange(): { geometry: BackgroundMapGeometry, heightRange: Range1d } | undefined {\r\n let geometry = this.getIsBackgroundMapVisible() ? this.getBackgroundMapGeometry() : undefined;\r\n const terrainRange = ApproximateTerrainHeights.instance.globalHeightRange;\r\n let heightRange = this.displayTerrain ? terrainRange : Range1d.createXX(-1, 1);\r\n if (this.globeMode === GlobeMode.Ellipsoid && this.contextRealityModelStates.find((model) => model.isGlobal)) {\r\n if (!geometry) {\r\n if (!this._ellipsoidMapGeometry)\r\n this._ellipsoidMapGeometry = new BackgroundMapGeometry(0, GlobeMode.Ellipsoid, this.iModel);\r\n\r\n geometry = this._ellipsoidMapGeometry;\r\n }\r\n\r\n heightRange = terrainRange;\r\n }\r\n\r\n return geometry ? { geometry, heightRange } : undefined;\r\n }\r\n\r\n /** Returns true if this is a 3d display style. */\r\n public is3d(): this is DisplayStyle3dState { return this instanceof DisplayStyle3dState; }\r\n\r\n /** Customize the way geometry belonging to a [[SubCategory]] is drawn by this display style.\r\n * @param id The ID of the SubCategory whose appearance is to be overridden.\r\n * @param ovr The overrides to apply to the [[SubCategoryAppearance]].\r\n * @see [[dropSubCategoryOverride]]\r\n */\r\n public overrideSubCategory(id: Id64String, ovr: SubCategoryOverride) { this.settings.overrideSubCategory(id, ovr); }\r\n\r\n /** Remove any [[SubCategoryOverride]] applied to a [[SubCategoryAppearance]] by this style.\r\n * @param id The ID of the [[SubCategory]].\r\n * @see [[overrideSubCategory]]\r\n */\r\n public dropSubCategoryOverride(id: Id64String) { this.settings.dropSubCategoryOverride(id); }\r\n\r\n /** Returns true if an [[SubCategoryOverride]]s are defined by this style. */\r\n public get hasSubCategoryOverride() { return this.settings.hasSubCategoryOverride; }\r\n\r\n /** Obtain the overrides applied to a [[SubCategoryAppearance]] by this style.\r\n * @param id The ID of the [[SubCategory]].\r\n * @returns The corresponding SubCategoryOverride, or undefined if the SubCategory's appearance is not overridden.\r\n * @see [[overrideSubCategory]]\r\n */\r\n public getSubCategoryOverride(id: Id64String): SubCategoryOverride | undefined { return this.settings.getSubCategoryOverride(id); }\r\n\r\n /** @internal */\r\n public get wantShadows(): boolean {\r\n return this.is3d() && this.viewFlags.shadows && false !== IModelApp.renderSystem.options.displaySolarShadows;\r\n }\r\n\r\n /** @internal */\r\n protected registerSettingsEventListeners(): void {\r\n this.settings.onScheduleScriptPropsChanged.addListener((scriptProps) => {\r\n if (this._assigningScript)\r\n return;\r\n\r\n try {\r\n this._assigningScript = true;\r\n if (scriptProps)\r\n this.loadScriptReferenceFromScript(scriptProps);\r\n else\r\n this.loadScriptReferenceFromTimeline(this.settings.renderTimeline); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n } finally {\r\n this._assigningScript = false;\r\n }\r\n });\r\n\r\n this.settings.onRenderTimelineChanged.addListener((newTimeline) => {\r\n // Cancel any in-progress loading of script from timeline.\r\n this._queryRenderTimelinePropsPromise = undefined;\r\n\r\n if (!this.settings.scheduleScriptProps)\r\n this.loadScriptReferenceFromTimeline(newTimeline); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n });\r\n\r\n this.settings.onPlanarClipMaskChanged.addListener((id, newSettings) => {\r\n if (newSettings)\r\n this._attachedRealityModelPlanarClipMasks.set(id, PlanarClipMaskState.create(newSettings));\r\n else\r\n this._attachedRealityModelPlanarClipMasks.delete(id);\r\n });\r\n }\r\n\r\n /** @internal */\r\n protected createRealityModel(props: ContextRealityModelProps): ContextRealityModelState {\r\n return new ContextRealityModelState(props, this.iModel, this);\r\n }\r\n\r\n /** @internal */\r\n public getPlanarClipMaskState(modelId: Id64String): PlanarClipMaskState | undefined {\r\n const model = this.iModel.models.getLoaded(modelId)?.asSpatialModel;\r\n return (model && model.isRealityModel) ? this._attachedRealityModelPlanarClipMasks.get(modelId) : undefined;\r\n }\r\n}\r\n\r\n/** A display style that can be applied to 2d views.\r\n * @public\r\n * @extensions\r\n */\r\nexport class DisplayStyle2dState extends DisplayStyleState {\r\n /** @internal */\r\n public static override get className() { return \"DisplayStyle2d\"; }\r\n private readonly _settings: DisplayStyleSettings;\r\n\r\n public get settings(): DisplayStyleSettings { return this._settings; }\r\n\r\n /** @internal */\r\n public overrideTerrainDisplay(): TerrainDisplayOverrides | undefined { return undefined; }\r\n\r\n constructor(props: DisplayStyleProps, iModel: IModelConnection) {\r\n super(props, iModel);\r\n this._settings = new DisplayStyleSettings(this.jsonProperties, {\r\n createContextRealityModel: (modelProps) => this.createRealityModel(modelProps),\r\n deferContextRealityModels: true,\r\n });\r\n\r\n this._settings.contextRealityModels.populate();\r\n this.registerSettingsEventListeners();\r\n }\r\n}\r\n\r\n/** A [[DisplayStyleState]] that can be applied to spatial views.\r\n * @public\r\n * @extensions\r\n */\r\nexport class DisplayStyle3dState extends DisplayStyleState {\r\n /** @internal */\r\n public static override get className() { return \"DisplayStyle3d\"; }\r\n private _settings: DisplayStyle3dSettings;\r\n\r\n public get settings(): DisplayStyle3dSettings { return this._settings; }\r\n\r\n public constructor(props: DisplayStyleProps, iModel: IModelConnection, source?: DisplayStyle3dState) {\r\n super(props, iModel, source);\r\n this._settings = new DisplayStyle3dSettings(this.jsonProperties, {\r\n createContextRealityModel: (modelProps) => this.createRealityModel(modelProps),\r\n deferContextRealityModels: true,\r\n });\r\n\r\n this._settings.contextRealityModels.populate();\r\n this.registerSettingsEventListeners();\r\n }\r\n\r\n public get environment(): Environment {\r\n return this.settings.environment;\r\n }\r\n public set environment(env: Environment) {\r\n this.settings.environment = env;\r\n }\r\n\r\n public get lights(): LightSettings { return this.settings.lights; }\r\n public set lights(lights: LightSettings) { this.settings.lights = lights; }\r\n\r\n /** The direction of the solar light. */\r\n public get sunDirection(): Readonly<Vector3d> {\r\n return this.settings.lights.solar.direction;\r\n }\r\n\r\n /** Set the solar light direction based on time value\r\n * @param time The time in unix time milliseconds.\r\n * @see [DisplayStyle3dSettings.sunTime]($common) to obtain the current sun time.\r\n * @see [DisplayStyle3dSettings.setSunTime]($common).\r\n */\r\n public setSunTime(time: number) {\r\n this.settings.setSunTime(time, this.iModel);\r\n }\r\n\r\n /** Settings controlling shadow display. */\r\n public get solarShadows(): SolarShadowSettings {\r\n return this.settings.solarShadows;\r\n }\r\n public set solarShadows(settings: SolarShadowSettings) {\r\n this.settings.solarShadows = settings;\r\n }\r\n\r\n /** @internal */\r\n protected override registerSettingsEventListeners(): void {\r\n super.registerSettingsEventListeners();\r\n\r\n this.settings.onOverridesApplied.addListener((overrides: DisplayStyle3dSettingsProps) => {\r\n if (overrides.thematic && this.settings.thematic.displayMode === ThematicDisplayMode.Height && undefined === overrides.thematic.range) {\r\n // Use the project extents as reasonable default height range.\r\n // NB: assumes using Z axis...\r\n const extents = this.iModel.projectExtents;\r\n const props = { ...overrides.thematic };\r\n props.range = { low: extents.zLow, high: extents.zHigh };\r\n this.settings.thematic = ThematicDisplay.fromJSON(props);\r\n }\r\n });\r\n }\r\n\r\n /** @internal */\r\n public overrideTerrainDisplay(): TerrainDisplayOverrides | undefined {\r\n if (undefined !== this.settings.thematic) {\r\n const ovr = new TerrainDisplayOverrides();\r\n if (this.viewFlags.thematicDisplay && ThematicGradientMode.IsoLines === this.settings.thematic.gradientSettings.mode)\r\n ovr.wantSkirts = false;\r\n if (this.viewFlags.thematicDisplay && (ThematicDisplayMode.Slope === this.settings.thematic.displayMode || ThematicDisplayMode.HillShade === this.settings.thematic.displayMode))\r\n ovr.wantNormals = true;\r\n return ovr;\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"DisplayStyleState.js","sourceRoot":"","sources":["../../src/DisplayStyleState.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 Views\r\n */\r\nimport { assert, BeEvent, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Angle, Range1d, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n BackgroundMapProps, BackgroundMapProvider, BackgroundMapProviderProps, BackgroundMapSettings,\r\n BaseLayerSettings, BaseMapLayerSettings, CartographicRange, ColorDef, ContextRealityModelProps, DisplayStyle3dSettings, DisplayStyle3dSettingsProps,\r\n DisplayStyleProps, DisplayStyleSettings, Environment, FeatureAppearance, GlobeMode, ImageMapLayerSettings, LightSettings, MapLayerProps,\r\n MapLayerSettings, MapSubLayerProps, ModelMapLayerSettings, RenderSchedule, RenderTimelineProps,\r\n SolarShadowSettings, SubCategoryOverride, SubLayerId, TerrainHeightOriginMode, ThematicDisplay, ThematicDisplayMode, ThematicGradientMode, ViewFlags,\r\n} from \"@itwin/core-common\";\r\nimport { ApproximateTerrainHeights } from \"./ApproximateTerrainHeights\";\r\nimport { BackgroundMapGeometry } from \"./BackgroundMapGeometry\";\r\nimport { ContextRealityModelState } from \"./ContextRealityModelState\";\r\nimport { ElementState } from \"./EntityState\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { PlanarClipMaskState } from \"./PlanarClipMaskState\";\r\nimport { getCesiumOSMBuildingsUrl, MapCartoRectangle, TileTreeReference } from \"./tile/internal\";\r\nimport { viewGlobalLocation, ViewGlobalLocationConstants } from \"./ViewGlobalLocation\";\r\nimport { ScreenViewport } from \"./Viewport\";\r\nimport { GeometricModelState } from \"./ModelState\";\r\n\r\n/** @internal */\r\nexport class TerrainDisplayOverrides {\r\n public wantSkirts?: boolean;\r\n public wantNormals?: boolean;\r\n public produceGeometry?: boolean;\r\n}\r\n\r\n/** Options controlling display of [OpenStreetMap Buildings](https://cesium.com/platform/cesium-ion/content/cesium-osm-buildings/).\r\n * @see [[DisplayStyleState.setOSMBuildingDisplay]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface OsmBuildingDisplayOptions {\r\n /** If defined, enables or disables display of the buildings by attaching or detaching the OpenStreetMap Buildings reality model. */\r\n onOff?: boolean;\r\n /** If defined, overrides aspects of the appearance of the OpenStreetMap building meshes. */\r\n appearanceOverrides?: FeatureAppearance;\r\n}\r\n\r\n/** A DisplayStyle defines the parameters for 'styling' the contents of a [[ViewState]].\r\n * @public\r\n * @extensions\r\n */\r\nexport abstract class DisplayStyleState extends ElementState implements DisplayStyleProps {\r\n /** @internal */\r\n public static override get className() { return \"DisplayStyle\"; }\r\n private _scriptReference?: RenderSchedule.ScriptReference;\r\n private _ellipsoidMapGeometry: BackgroundMapGeometry | undefined;\r\n private _attachedRealityModelPlanarClipMasks = new Map<Id64String, PlanarClipMaskState>();\r\n /** @internal */\r\n protected _queryRenderTimelinePropsPromise?: Promise<RenderTimelineProps | undefined>;\r\n private _assigningScript = false;\r\n\r\n /** Event raised just before the [[scheduleScriptReference]] property is changed.\r\n * @deprecated in 3.x. use [[onScheduleScriptChanged]].\r\n */\r\n public readonly onScheduleScriptReferenceChanged = new BeEvent<(newScriptReference: RenderSchedule.ScriptReference | undefined) => void>();\r\n /** Event raised just before the [[scheduleScript]] property is changed. */\r\n public readonly onScheduleScriptChanged = new BeEvent<(newScript: RenderSchedule.Script | undefined) => void>();\r\n /** Event raised just after [[setOSMBuildingDisplay]] changes the enabled state of the OSM buildings. */\r\n public readonly onOSMBuildingDisplayChanged = new BeEvent<(osmBuildingDisplayEnabled: boolean) => void>();\r\n\r\n /** The container for this display style's settings. */\r\n public abstract get settings(): DisplayStyleSettings;\r\n\r\n /** @internal */\r\n public abstract overrideTerrainDisplay(): TerrainDisplayOverrides | undefined;\r\n\r\n /** Construct a new DisplayStyleState from its JSON representation.\r\n * @param props JSON representation of the display style.\r\n * @param iModel IModelConnection containing the display style.\r\n * @param source If the constructor is being invoked from [[EntityState.clone]], the display style that is being cloned.\r\n */\r\n constructor(props: DisplayStyleProps, iModel: IModelConnection, source?: DisplayStyleState) {\r\n super(props, iModel);\r\n const styles = this.jsonProperties.styles;\r\n\r\n if (source)\r\n this._scriptReference = source._scriptReference;\r\n\r\n if (styles) {\r\n // ###TODO Use DisplayStyleSettings.planarClipMasks\r\n if (styles.planarClipOvr)\r\n for (const planarClipOvr of styles.planarClipOvr)\r\n if (Id64.isValid(planarClipOvr.modelId))\r\n this._attachedRealityModelPlanarClipMasks.set(planarClipOvr.modelId, PlanarClipMaskState.fromJSON(planarClipOvr));\r\n }\r\n }\r\n\r\n /** Ensures all of the data required by the display style is loaded. This method is invoked for you by [[ViewState.load]], but if\r\n * you obtain a display style by some other means you should `await` this method before using the display style.\r\n */\r\n public async load(): Promise<void> {\r\n // If we were cloned, we may already have a valid schedule state, and our display style Id may be invalid / different.\r\n // Preserve it if still usable.\r\n if (this._scriptReference) {\r\n if (this.settings.renderTimeline === this._scriptReference.sourceId) {\r\n // The script came from the same RenderTimeline element. Keep it.\r\n return;\r\n }\r\n\r\n if (undefined === this.settings.renderTimeline) {\r\n // The script came from a display style's JSON properties. Keep it if (1) this style is not persistent or (2) this style has the same Id\r\n if (this.id === this._scriptReference.sourceId || !Id64.isValidId64(this.id))\r\n return;\r\n }\r\n }\r\n\r\n // The schedule script stored in JSON properties takes precedence over the RenderTimeline if both are defined.\r\n if (this.settings.scheduleScriptProps)\r\n this.loadScriptReferenceFromScript(this.settings.scheduleScriptProps);\r\n else\r\n await this.loadScriptReferenceFromTimeline(this.settings.renderTimeline);\r\n }\r\n\r\n private loadScriptReferenceFromScript(scriptProps: Readonly<RenderSchedule.ScriptProps>): void {\r\n let newState;\r\n try {\r\n const script = RenderSchedule.Script.fromJSON(scriptProps);\r\n if (script)\r\n newState = new RenderSchedule.ScriptReference(this.id, script);\r\n } catch (_) {\r\n // schedule state is undefined.\r\n }\r\n\r\n if (newState !== this._scriptReference) {\r\n this.onScheduleScriptReferenceChanged.raiseEvent(newState); // eslint-disable-line deprecation/deprecation\r\n this.onScheduleScriptChanged.raiseEvent(newState?.script);\r\n this._scriptReference = newState;\r\n }\r\n }\r\n\r\n private async loadScriptReferenceFromTimeline(timelineId: Id64String | undefined): Promise<void> {\r\n let newState;\r\n if (timelineId && Id64.isValidId64(timelineId)) {\r\n try {\r\n // If a subsequent call to loadScriptReferenceFromTimeline is made while we're awaiting this one, we'll abort this one.\r\n const promise = this._queryRenderTimelinePropsPromise = this.queryRenderTimelineProps(timelineId);\r\n const timeline = await promise;\r\n if (promise !== this._queryRenderTimelinePropsPromise)\r\n return;\r\n\r\n if (timeline) {\r\n const scriptProps = JSON.parse(timeline.script);\r\n const script = RenderSchedule.Script.fromJSON(scriptProps);\r\n if (script)\r\n newState = new RenderSchedule.ScriptReference(timelineId, script);\r\n }\r\n } catch (_) {\r\n // schedule state is undefined.\r\n }\r\n }\r\n\r\n this._queryRenderTimelinePropsPromise = undefined;\r\n if (newState !== this._scriptReference) {\r\n this.onScheduleScriptReferenceChanged.raiseEvent(newState); // eslint-disable-line deprecation/deprecation\r\n this.onScheduleScriptChanged.raiseEvent(newState?.script);\r\n this._scriptReference = newState;\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected async queryRenderTimelineProps(timelineId: Id64String): Promise<RenderTimelineProps | undefined> {\r\n try {\r\n return await this.iModel.elements.loadProps(timelineId, { renderTimeline: { omitScriptElementIds: true } }) as RenderTimelineProps;\r\n } catch (_) {\r\n return undefined;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public get displayTerrain() {\r\n return this.viewFlags.backgroundMap && this.settings.backgroundMap.applyTerrain;\r\n }\r\n\r\n /** @internal */\r\n public get globeMode(): GlobeMode { return this.settings.backgroundMap.globeMode; }\r\n\r\n /** Settings controlling how the base map is displayed within a view.\r\n * The base map can be provided by any map imagery source or set to be a single color.\r\n */\r\n public get backgroundMapBase(): BaseLayerSettings {\r\n return this.settings.mapImagery.backgroundBase;\r\n }\r\n public set backgroundMapBase(base: BaseLayerSettings) {\r\n this.settings.mapImagery.backgroundBase = base;\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** @internal */\r\n public get backgroundMapLayers(): MapLayerSettings[] { return this.settings.mapImagery.backgroundLayers; }\r\n\r\n /** @internal */\r\n public get overlayMapLayers(): MapLayerSettings[] { return this.settings.mapImagery.overlayLayers; }\r\n\r\n /** The settings controlling how a background map is displayed within a view.\r\n * @see [[ViewFlags.backgroundMap]] for toggling display of the map on or off.\r\n */\r\n public get backgroundMapSettings(): BackgroundMapSettings { return this.settings.backgroundMap; }\r\n public set backgroundMapSettings(settings: BackgroundMapSettings) {\r\n this.settings.backgroundMap = settings;\r\n }\r\n\r\n /** Modify a subset of the background map display settings.\r\n * @param name props JSON representation of the properties to change. Any properties not present will retain their current values in `this.backgroundMapSettings`.\r\n * @see [[ViewFlags.backgroundMap]] for toggling display of the map.\r\n * @see [[changeBackgroundMapProvider]] to change the type of map imagery displayed.\r\n *\r\n * Example that changes only the elevation, leaving the provider and type unchanged:\r\n * ``` ts\r\n * style.changeBackgroundMapProps({ groundBias: 16.2 });\r\n * ```\r\n * @public\r\n */\r\n public changeBackgroundMapProps(props: BackgroundMapProps): void {\r\n const newSettings = this.backgroundMapSettings.clone(props);\r\n this.backgroundMapSettings = newSettings;\r\n }\r\n\r\n /** Change aspects of the [BackgroundMapProvider]($common) from which background map imagery is obtained.\r\n * Any properties not explicitly specified by `props` will retain their current values.\r\n * @public\r\n */\r\n public changeBackgroundMapProvider(props: BackgroundMapProviderProps): void {\r\n const base = this.settings.mapImagery.backgroundBase;\r\n if (base instanceof ColorDef) {\r\n this.settings.mapImagery.backgroundBase = BaseMapLayerSettings.fromProvider(BackgroundMapProvider.fromJSON(props));\r\n } else {\r\n const provider = base.provider ? base.provider.clone(props) : BackgroundMapProvider.fromJSON(props);\r\n this.settings.mapImagery.backgroundBase = base.cloneWithProvider(provider);\r\n }\r\n\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** Call a function for each reality model attached to this display style.\r\n * @see [DisplayStyleSettings.contextRealityModels]($common).\r\n */\r\n public forEachRealityModel(func: (model: ContextRealityModelState) => void): void {\r\n for (const model of this.settings.contextRealityModels.models) {\r\n assert(model instanceof ContextRealityModelState);\r\n func(model);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public forEachRealityTileTreeRef(func: (ref: TileTreeReference) => void): void {\r\n this.forEachRealityModel((model) => func(model.treeRef));\r\n }\r\n\r\n /** @internal */\r\n public forEachTileTreeRef(func: (ref: TileTreeReference) => void): void {\r\n this.forEachRealityTileTreeRef(func);\r\n }\r\n\r\n /** Performs logical comparison against another display style. Two display styles are logically equivalent if they have the same name, Id, and settings.\r\n * @param other The display style to which to compare.\r\n * @returns true if the specified display style is logically equivalent to this display style - i.e., both styles have the same values for all of their settings.\r\n */\r\n public equalState(other: DisplayStyleState): boolean {\r\n if (this.name !== other.name || this.id !== other.id)\r\n return false;\r\n else\r\n return JSON.stringify(this.settings) === JSON.stringify(other.settings);\r\n }\r\n\r\n /** The name of this DisplayStyle */\r\n public get name(): string { return this.code.value; }\r\n\r\n /** Change the Id of the [RenderTimeline]($backend) element that hosts the [RenderSchedule.Script]($common) to be applied by this display style for\r\n * animating the contents of the view, and update [[scheduleScript]] using the script associated with the [RenderTimeline]($backend) element.\r\n * @see [DisplayStyleSettings.renderTimeline]($common).\r\n */\r\n public async changeRenderTimeline(timelineId: Id64String | undefined): Promise<void> {\r\n // Potentially trigger async loading of new schedule state.\r\n this.settings.renderTimeline = timelineId;\r\n\r\n // Await async loading if necessary.\r\n // Note the `await` in loadScriptReferenceFromTimeline will resolve before this one [per the spec](https://262.ecma-international.org/6.0/#sec-triggerpromisereactions).\r\n if (this._queryRenderTimelinePropsPromise)\r\n await this._queryRenderTimelinePropsPromise;\r\n }\r\n\r\n /** The [RenderSchedule.Script]($common) that animates the contents of the view, if any.\r\n * @see [[changeRenderTimeline]] to change the script.\r\n */\r\n public get scheduleScript(): RenderSchedule.Script | undefined {\r\n return this._scriptReference?.script;\r\n }\r\n\r\n public set scheduleScript(script: RenderSchedule.Script | undefined) {\r\n if (script === this.scheduleScript)\r\n return;\r\n\r\n try {\r\n const scriptRef = script ? new RenderSchedule.ScriptReference(script) : undefined;\r\n this.onScheduleScriptReferenceChanged.raiseEvent(scriptRef); // eslint-disable-line deprecation/deprecation\r\n this.onScheduleScriptChanged.raiseEvent(script);\r\n this._scriptReference = scriptRef;\r\n\r\n this._assigningScript = true;\r\n this.settings.scheduleScriptProps = script?.toJSON();\r\n\r\n if (!script)\r\n this.loadScriptReferenceFromTimeline(this.settings.renderTimeline); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n } finally {\r\n this._assigningScript = false;\r\n }\r\n }\r\n\r\n /** The [RenderSchedule.Script]($common) that animates the contents of the view, if any, along with the Id of the element that hosts the script.\r\n * @note The host element may be a [RenderTimeline]($backend) or a [DisplayStyle]($backend).\r\n * @deprecated in 3.x. Use [[scheduleScript]].\r\n */\r\n public get scheduleScriptReference(): RenderSchedule.ScriptReference | undefined {\r\n return this._scriptReference;\r\n }\r\n\r\n /** Attach a [ContextRealityModel]($common) to this display style.\r\n * @see [DisplayStyleSettings.contextRealityModels]($common).\r\n * @see [ContextRealityModels.add]($common)\r\n */\r\n public attachRealityModel(props: ContextRealityModelProps): ContextRealityModelState {\r\n const model = this.settings.contextRealityModels.add(props);\r\n assert(model instanceof ContextRealityModelState);\r\n return model;\r\n }\r\n\r\n /** Detach the first [ContextRealityModel]($common) that matches the specified name and url.\r\n * @see [DisplayStyleSettings.contextRealityModels]($common)\r\n * @see [ContextRealityModels.delete]($common)\r\n */\r\n public detachRealityModelByNameAndUrl(name: string, url: string): boolean {\r\n const model = this.settings.contextRealityModels.models.find((x) => x.matchesNameAndUrl(name, url));\r\n return undefined !== model && this.settings.contextRealityModels.delete(model);\r\n }\r\n\r\n /** Get the [[ContextRealityModelState]] that displays the OpenStreetMap worldwide building layer, if enabled.\r\n * @see [[setOSMBuildingDisplay]]\r\n */\r\n public getOSMBuildingRealityModel(): ContextRealityModelState | undefined {\r\n if (!this.iModel.isGeoLocated || this.globeMode !== GlobeMode.Ellipsoid) // The OSM tile tree is ellipsoidal.\r\n return undefined;\r\n\r\n const url = getCesiumOSMBuildingsUrl();\r\n if (undefined === url)\r\n return undefined;\r\n\r\n return this.contextRealityModelStates.find((x) => x.url === url);\r\n }\r\n\r\n /** Set the display of the OpenStreetMap worldwide building layer in this display style by attaching or detaching the reality model displaying the buildings.\r\n * The OSM buildings are displayed from a reality model aggregated and served from Cesium ion.<(https://cesium.com/content/cesium-osm-buildings/>\r\n * The options [[OsmBuildingDisplayOptions]] control the display and appearance overrides.\r\n */\r\n public setOSMBuildingDisplay(options: OsmBuildingDisplayOptions): boolean {\r\n if (!this.iModel.isGeoLocated || this.globeMode !== GlobeMode.Ellipsoid) // The OSM tile tree is ellipsoidal.\r\n return false;\r\n\r\n const url = getCesiumOSMBuildingsUrl();\r\n if (undefined === url)\r\n return false;\r\n\r\n let model = this.settings.contextRealityModels.models.find((x) => x.url === url);\r\n if (options.onOff === false) {\r\n const turnedOff = undefined !== model && this.settings.contextRealityModels.delete(model);\r\n if (turnedOff)\r\n this.onOSMBuildingDisplayChanged.raiseEvent(false);\r\n\r\n return turnedOff;\r\n }\r\n\r\n if (!model) {\r\n const name = IModelApp.localization.getLocalizedString(\"iModelJs:RealityModelNames.OSMBuildings\");\r\n model = this.attachRealityModel({ tilesetUrl: url, name });\r\n this.onOSMBuildingDisplayChanged.raiseEvent(true);\r\n }\r\n\r\n if (options.appearanceOverrides)\r\n model.appearanceOverrides = options.appearanceOverrides;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Return if a context reality model is attached.\r\n * @see [[ContextRealityModelProps]].\r\n * */\r\n public hasAttachedRealityModel(name: string, url: string): boolean {\r\n return undefined !== this.settings.contextRealityModels.models.find((x) => x.matchesNameAndUrl(name, url));\r\n }\r\n\r\n /** @internal */\r\n public getMapLayers(isOverlay: boolean) { return isOverlay ? this.overlayMapLayers : this.backgroundMapLayers; }\r\n\r\n /**\r\n * Attach a map layer to display style.\r\n * @param Settings representing the map layer.\r\n * @param isOverlay true if layer is overlay, otherwise layer is background. Defaults to false.\r\n * @param index where the layer should be inserted. Defaults to -1, appended to end.\r\n * @public\r\n *\r\n */\r\n public attachMapLayer(options: { settings: MapLayerSettings, isOverlay?: boolean, insertIndex?: number}): void {\r\n const layerSettings = options.settings.clone({});\r\n if (undefined === layerSettings)\r\n return;\r\n\r\n const isOverlay = options.isOverlay ?? false;\r\n const insertIndex = options.insertIndex ?? -1;\r\n const layers = this.getMapLayers(isOverlay);\r\n\r\n if (insertIndex < 0 || insertIndex > (layers.length - 1)) {\r\n this.getMapLayers(isOverlay).push(layerSettings);\r\n } else {\r\n layers.splice(insertIndex, 0, layerSettings);\r\n }\r\n\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** @internal */\r\n public attachMapLayerProps(options: { props: MapLayerProps, isOverlay?: boolean, insertIndex?: number}): void {\r\n const settings = MapLayerSettings.fromJSON(options.props);\r\n if (undefined === settings)\r\n return;\r\n\r\n this.attachMapLayer({settings, isOverlay: options.isOverlay, insertIndex:options.insertIndex});\r\n }\r\n\r\n /** @internal */\r\n public hasAttachedMapLayer(name: string, source: string, isOverlay: boolean): boolean {\r\n return -1 !== this.findMapLayerIndexByNameAndSource(name, source, isOverlay);\r\n }\r\n\r\n /** @internal */\r\n public detachMapLayerByNameAndSource(name: string, source: string, isOverlay: boolean): void {\r\n const index = this.findMapLayerIndexByNameAndSource(name, source, isOverlay);\r\n if (- 1 !== index)\r\n this.detachMapLayerByIndex(index, isOverlay);\r\n }\r\n\r\n /** Detach map layer at index (-1 to remove all layers)\r\n * @public\r\n */\r\n public detachMapLayerByIndex(index: number, isOverlay: boolean): void {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (index < 0)\r\n layers.length = 0;\r\n else\r\n layers.splice(index, 1);\r\n\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /**\r\n * Lookup a maplayer index by name and source.\r\n * @param name Name of of the layer.\r\n * @param source Unique string identifying the layer.\r\n * @param isOverlay true if layer is overlay, otherwise layer is background. Defaults to false.\r\n * @public\r\n *\r\n */\r\n public findMapLayerIndexByNameAndSource(name: string, source: string, isOverlay: boolean) {\r\n return this.getMapLayers(isOverlay).findIndex((layer) => layer.matchesNameAndSource(name, source));\r\n }\r\n\r\n /** @public */\r\n public mapLayerAtIndex(index: number, isOverlay: boolean): MapLayerSettings | undefined {\r\n const layers = this.getMapLayers(isOverlay);\r\n return (index < 0 || index >= layers.length) ? undefined : layers[index];\r\n }\r\n\r\n /** Return map base transparency as a number between 0 and 1.\r\n * @public\r\n */\r\n public get baseMapTransparency(): number {\r\n return this.settings.mapImagery.baseTransparency;\r\n }\r\n\r\n /** Change the map base transparency as a number between 0 and 1.\r\n * @public\r\n */\r\n public changeBaseMapTransparency(transparency: number) {\r\n if (this.settings.mapImagery.backgroundBase instanceof ColorDef) {\r\n this.settings.mapImagery.backgroundBase = this.settings.mapImagery.backgroundBase.withTransparency(transparency * 255);\r\n } else {\r\n this.settings.mapImagery.backgroundBase = this.settings.mapImagery.backgroundBase.clone({transparency});\r\n }\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** Modify a subset of a map layer settings.\r\n * @param props props JSON representation of the properties to change. Any properties not present will retain their current values.\r\n * @param index where the layer should be inserted.\r\n * @param isOverlay true if layer is overlay, otherwise layer is background.\r\n *\r\n * Example that changes only the visibility of the first overlay map layer.\r\n * ``` ts\r\n * style.changeMapLayerProps({ visible: false }, 0, false);\r\n * ```\r\n * @public\r\n */\r\n public changeMapLayerProps(props: Partial<MapLayerProps>, index: number, isOverlay: boolean) {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (index < 0 || index >= layers.length)\r\n return;\r\n layers[index] = layers[index].clone(props);\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** @public */\r\n public changeMapLayerCredentials(index: number, isOverlay: boolean, userName?: string, password?: string,) {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (index < 0 || index >= layers.length)\r\n return;\r\n const layer = layers[index];\r\n if (layer instanceof ImageMapLayerSettings) {\r\n layer.setCredentials(userName, password);\r\n this._synchBackgroundMapImagery();\r\n }\r\n }\r\n\r\n /** Modify a subset of a sub-layer settings.\r\n * @param props props JSON representation of the properties to change. Any properties not present will retain their current values.\r\n * @param subLayerId Id of the sub-layer that should be modified.\r\n * @param layerIndex of the owning map layer.\r\n * @param isOverlay true if the map layer is overlay, otherwise layer is background\r\n *\r\n * @public\r\n */\r\n public changeMapSubLayerProps(props: Partial<MapSubLayerProps>, subLayerId: SubLayerId, layerIndex: number, isOverlay: boolean) {\r\n const mapLayerSettings = this.mapLayerAtIndex(layerIndex, isOverlay);\r\n if (undefined === mapLayerSettings)\r\n return;\r\n\r\n if (!(mapLayerSettings instanceof ImageMapLayerSettings)) {\r\n assert (false);\r\n return;\r\n }\r\n\r\n const subLayers = new Array<MapSubLayerProps>();\r\n for (const subLayer of mapLayerSettings.subLayers) {\r\n subLayers.push((subLayerId === -1 || subLayer.id === subLayerId) ? subLayer.clone(props).toJSON() : subLayer.toJSON());\r\n }\r\n\r\n this.changeMapLayerProps({ subLayers }, layerIndex, isOverlay);\r\n }\r\n\r\n /** Returns the cartographic range of map layer.\r\n * @param layerIndex of the map layer.\r\n * @param isOverlay true if the map layer is overlay, otherwise layer is background\r\n *\r\n * @internal\r\n */\r\n public async getMapLayerRange(layerIndex: number, isOverlay: boolean): Promise<MapCartoRectangle | undefined> {\r\n const mapLayerSettings = this.mapLayerAtIndex(layerIndex, isOverlay);\r\n if (undefined === mapLayerSettings)\r\n return undefined;\r\n\r\n if (mapLayerSettings instanceof ModelMapLayerSettings) {\r\n const ecefTransform = this.iModel.ecefLocation?.getTransform();\r\n if (!ecefTransform)\r\n return undefined;\r\n const model = this.iModel.models.getLoaded(mapLayerSettings.modelId);\r\n if (!model || !(model instanceof GeometricModelState))\r\n return undefined;\r\n\r\n const modelRange = await model.queryModelRange();\r\n const cartoRange = new CartographicRange(modelRange, ecefTransform).getLongitudeLatitudeBoundingBox();\r\n\r\n return MapCartoRectangle.fromRadians(cartoRange.low.x, cartoRange.low.y, cartoRange.high.x, cartoRange.high.y);\r\n }\r\n if (! (mapLayerSettings instanceof ImageMapLayerSettings)) {\r\n assert(false);\r\n return undefined;\r\n }\r\n\r\n const imageryProvider = IModelApp.mapLayerFormatRegistry.createImageryProvider(mapLayerSettings);\r\n if (undefined === imageryProvider)\r\n return undefined;\r\n\r\n try {\r\n await imageryProvider.initialize();\r\n return imageryProvider.cartoRange;\r\n\r\n } catch (_error) {\r\n return undefined;\r\n }\r\n return undefined;\r\n }\r\n\r\n /** change viewport to include range of map layer.\r\n * @internal\r\n */\r\n public async viewMapLayerRange(layerIndex: number, isOverlay: boolean, vp: ScreenViewport): Promise<boolean> {\r\n const range = await this.getMapLayerRange(layerIndex, isOverlay);\r\n if (!range)\r\n return false;\r\n\r\n if (range.xLength() > 1.5 * Angle.piRadians)\r\n viewGlobalLocation(vp, true, ViewGlobalLocationConstants.satelliteHeightAboveEarthInMeters, undefined, undefined);\r\n else\r\n viewGlobalLocation(vp, true, undefined, undefined, range.globalLocation);\r\n\r\n return true;\r\n }\r\n\r\n /* @internal */\r\n private _synchBackgroundMapImagery() {\r\n this.settings.synchMapImagery();\r\n }\r\n\r\n /**\r\n * Move map layer to top.\r\n * @param index index of layer to move.\r\n * @param isOverlay true if layer is overlay.\r\n * @public\r\n *\r\n */\r\n public moveMapLayerToTop(index: number, isOverlay: boolean) {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (index >= 0 && index < layers.length - 1) {\r\n const layer = layers.splice(index, 1);\r\n layers.push(layer[0]);\r\n this._synchBackgroundMapImagery();\r\n }\r\n }\r\n\r\n /**\r\n * Move map layer to bottom.\r\n * @param index index of layer to move.\r\n * @param isOverlay true if layer is overlay.\r\n * @public\r\n */\r\n public moveMapLayerToBottom(index: number, isOverlay: boolean) {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (index > 0 && index < layers.length) {\r\n const layer = layers.splice(index, 1);\r\n layers.unshift(layer[0]);\r\n this._synchBackgroundMapImagery();\r\n }\r\n }\r\n\r\n /**\r\n * Reorder map layers\r\n * @param fromIndex index of map layer to move\r\n * @param toIndex insert index. If equal to length of map array the map layer is moved to end of array.\r\n * @public\r\n */\r\n public moveMapLayerToIndex(fromIndex: number, toIndex: number, isOverlay: boolean) {\r\n const layers = this.getMapLayers(isOverlay);\r\n if (fromIndex === toIndex)\r\n return;\r\n\r\n if (fromIndex < 0 || fromIndex >= layers.length || toIndex > layers.length)\r\n return;\r\n\r\n const layer = layers.splice(fromIndex, 1);\r\n layers.splice(toIndex, 0, layer[0]); // note: if toIndex === settings.mapImagery.backgroundLayers.length item is appended\r\n this._synchBackgroundMapImagery();\r\n }\r\n\r\n /** Flags controlling various aspects of the display style.\r\n * @see [DisplayStyleSettings.viewFlags]($common)\r\n */\r\n public get viewFlags(): ViewFlags { return this.settings.viewFlags; }\r\n public set viewFlags(flags: ViewFlags) { this.settings.viewFlags = flags; }\r\n\r\n /** The background color for this DisplayStyle */\r\n public get backgroundColor(): ColorDef { return this.settings.backgroundColor; }\r\n public set backgroundColor(val: ColorDef) { this.settings.backgroundColor = val; }\r\n\r\n /** The color used to draw geometry in monochrome mode.\r\n * @see [ViewFlags.monochrome]($common) for enabling monochrome mode.\r\n */\r\n public get monochromeColor(): ColorDef { return this.settings.monochromeColor; }\r\n public set monochromeColor(val: ColorDef) { this.settings.monochromeColor = val; }\r\n\r\n private _backgroundMapGeometry?: {\r\n bimElevationBias: number;\r\n geometry: BackgroundMapGeometry;\r\n globeMode: GlobeMode;\r\n };\r\n\r\n /** @internal */\r\n public anyMapLayersVisible(overlay: boolean): boolean {\r\n const layers = this.getMapLayers(overlay);\r\n\r\n for (const mapLayer of layers)\r\n if (mapLayer.visible)\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n /** @internal */\r\n public getIsBackgroundMapVisible(): boolean {\r\n return undefined !== this.iModel.ecefLocation && (this.viewFlags.backgroundMap || this.anyMapLayersVisible(false));\r\n }\r\n /** @internal */\r\n public get backgroundMapElevationBias(): number | undefined {\r\n if (this.backgroundMapSettings.applyTerrain) {\r\n const terrainSettings = this.backgroundMapSettings.terrainSettings;\r\n switch (terrainSettings.heightOriginMode) {\r\n case TerrainHeightOriginMode.Ground:\r\n return (undefined === this.iModel.projectCenterAltitude) ? undefined : terrainSettings.heightOrigin + terrainSettings.exaggeration * this.iModel.projectCenterAltitude;\r\n\r\n case TerrainHeightOriginMode.Geodetic:\r\n return terrainSettings.heightOrigin;\r\n\r\n case TerrainHeightOriginMode.Geoid:\r\n return (undefined === this.iModel.geodeticToSeaLevel) ? undefined : terrainSettings.heightOrigin + this.iModel.geodeticToSeaLevel;\r\n }\r\n } else {\r\n return this.backgroundMapSettings.groundBias;\r\n }\r\n\r\n }\r\n\r\n /** @internal */\r\n public getBackgroundMapGeometry(): BackgroundMapGeometry | undefined {\r\n if (undefined === this.iModel.ecefLocation)\r\n return undefined;\r\n\r\n const bimElevationBias = this.backgroundMapElevationBias;\r\n\r\n if (undefined === bimElevationBias)\r\n return undefined;\r\n\r\n const globeMode = this.globeMode;\r\n if (undefined === this._backgroundMapGeometry || this._backgroundMapGeometry.globeMode !== globeMode || this._backgroundMapGeometry.bimElevationBias !== bimElevationBias) {\r\n const geometry = new BackgroundMapGeometry(bimElevationBias, globeMode, this.iModel);\r\n this._backgroundMapGeometry = { bimElevationBias, geometry, globeMode };\r\n }\r\n return this._backgroundMapGeometry.geometry;\r\n }\r\n\r\n /** [[ContextRealityModelState]]s attached to this display style.\r\n * @see [DisplayStyleSettings.contextRealityModels]($common).\r\n */\r\n public get contextRealityModelStates(): ReadonlyArray<ContextRealityModelState> {\r\n return this.settings.contextRealityModels.models as ContextRealityModelState[];\r\n }\r\n\r\n /** @internal */\r\n public getGlobalGeometryAndHeightRange(): { geometry: BackgroundMapGeometry, heightRange: Range1d } | undefined {\r\n let geometry = this.getIsBackgroundMapVisible() ? this.getBackgroundMapGeometry() : undefined;\r\n const terrainRange = ApproximateTerrainHeights.instance.globalHeightRange;\r\n let heightRange = this.displayTerrain ? terrainRange : Range1d.createXX(-1, 1);\r\n if (this.globeMode === GlobeMode.Ellipsoid && this.contextRealityModelStates.find((model) => model.isGlobal)) {\r\n if (!geometry) {\r\n if (!this._ellipsoidMapGeometry)\r\n this._ellipsoidMapGeometry = new BackgroundMapGeometry(0, GlobeMode.Ellipsoid, this.iModel);\r\n\r\n geometry = this._ellipsoidMapGeometry;\r\n }\r\n\r\n heightRange = terrainRange;\r\n }\r\n\r\n return geometry ? { geometry, heightRange } : undefined;\r\n }\r\n\r\n /** Returns true if this is a 3d display style. */\r\n public is3d(): this is DisplayStyle3dState { return this instanceof DisplayStyle3dState; }\r\n\r\n /** Customize the way geometry belonging to a [[SubCategory]] is drawn by this display style.\r\n * @param id The ID of the SubCategory whose appearance is to be overridden.\r\n * @param ovr The overrides to apply to the [[SubCategoryAppearance]].\r\n * @see [[dropSubCategoryOverride]]\r\n */\r\n public overrideSubCategory(id: Id64String, ovr: SubCategoryOverride) { this.settings.overrideSubCategory(id, ovr); }\r\n\r\n /** Remove any [[SubCategoryOverride]] applied to a [[SubCategoryAppearance]] by this style.\r\n * @param id The ID of the [[SubCategory]].\r\n * @see [[overrideSubCategory]]\r\n */\r\n public dropSubCategoryOverride(id: Id64String) { this.settings.dropSubCategoryOverride(id); }\r\n\r\n /** Returns true if an [[SubCategoryOverride]]s are defined by this style. */\r\n public get hasSubCategoryOverride() { return this.settings.hasSubCategoryOverride; }\r\n\r\n /** Obtain the overrides applied to a [[SubCategoryAppearance]] by this style.\r\n * @param id The ID of the [[SubCategory]].\r\n * @returns The corresponding SubCategoryOverride, or undefined if the SubCategory's appearance is not overridden.\r\n * @see [[overrideSubCategory]]\r\n */\r\n public getSubCategoryOverride(id: Id64String): SubCategoryOverride | undefined { return this.settings.getSubCategoryOverride(id); }\r\n\r\n /** @internal */\r\n public get wantShadows(): boolean {\r\n return this.is3d() && this.viewFlags.shadows && false !== IModelApp.renderSystem.options.displaySolarShadows;\r\n }\r\n\r\n /** @internal */\r\n protected registerSettingsEventListeners(): void {\r\n this.settings.onScheduleScriptPropsChanged.addListener((scriptProps) => {\r\n if (this._assigningScript)\r\n return;\r\n\r\n try {\r\n this._assigningScript = true;\r\n if (scriptProps)\r\n this.loadScriptReferenceFromScript(scriptProps);\r\n else\r\n this.loadScriptReferenceFromTimeline(this.settings.renderTimeline); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n } finally {\r\n this._assigningScript = false;\r\n }\r\n });\r\n\r\n this.settings.onRenderTimelineChanged.addListener((newTimeline) => {\r\n // Cancel any in-progress loading of script from timeline.\r\n this._queryRenderTimelinePropsPromise = undefined;\r\n\r\n if (!this.settings.scheduleScriptProps)\r\n this.loadScriptReferenceFromTimeline(newTimeline); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n });\r\n\r\n this.settings.onPlanarClipMaskChanged.addListener((id, newSettings) => {\r\n if (newSettings)\r\n this._attachedRealityModelPlanarClipMasks.set(id, PlanarClipMaskState.create(newSettings));\r\n else\r\n this._attachedRealityModelPlanarClipMasks.delete(id);\r\n });\r\n }\r\n\r\n /** @internal */\r\n protected createRealityModel(props: ContextRealityModelProps): ContextRealityModelState {\r\n return new ContextRealityModelState(props, this.iModel, this);\r\n }\r\n\r\n /** @internal */\r\n public getPlanarClipMaskState(modelId: Id64String): PlanarClipMaskState | undefined {\r\n const model = this.iModel.models.getLoaded(modelId)?.asSpatialModel;\r\n return (model && model.isRealityModel) ? this._attachedRealityModelPlanarClipMasks.get(modelId) : undefined;\r\n }\r\n}\r\n\r\n/** A display style that can be applied to 2d views.\r\n * @public\r\n * @extensions\r\n */\r\nexport class DisplayStyle2dState extends DisplayStyleState {\r\n /** @internal */\r\n public static override get className() { return \"DisplayStyle2d\"; }\r\n private readonly _settings: DisplayStyleSettings;\r\n\r\n public get settings(): DisplayStyleSettings { return this._settings; }\r\n\r\n /** @internal */\r\n public overrideTerrainDisplay(): TerrainDisplayOverrides | undefined { return undefined; }\r\n\r\n constructor(props: DisplayStyleProps, iModel: IModelConnection) {\r\n super(props, iModel);\r\n this._settings = new DisplayStyleSettings(this.jsonProperties, {\r\n createContextRealityModel: (modelProps) => this.createRealityModel(modelProps),\r\n deferContextRealityModels: true,\r\n });\r\n\r\n this._settings.contextRealityModels.populate();\r\n this.registerSettingsEventListeners();\r\n }\r\n}\r\n\r\n/** A [[DisplayStyleState]] that can be applied to spatial views.\r\n * @public\r\n * @extensions\r\n */\r\nexport class DisplayStyle3dState extends DisplayStyleState {\r\n /** @internal */\r\n public static override get className() { return \"DisplayStyle3d\"; }\r\n private _settings: DisplayStyle3dSettings;\r\n\r\n public get settings(): DisplayStyle3dSettings { return this._settings; }\r\n\r\n public constructor(props: DisplayStyleProps, iModel: IModelConnection, source?: DisplayStyle3dState) {\r\n super(props, iModel, source);\r\n this._settings = new DisplayStyle3dSettings(this.jsonProperties, {\r\n createContextRealityModel: (modelProps) => this.createRealityModel(modelProps),\r\n deferContextRealityModels: true,\r\n });\r\n\r\n this._settings.contextRealityModels.populate();\r\n this.registerSettingsEventListeners();\r\n }\r\n\r\n public get environment(): Environment {\r\n return this.settings.environment;\r\n }\r\n public set environment(env: Environment) {\r\n this.settings.environment = env;\r\n }\r\n\r\n public get lights(): LightSettings { return this.settings.lights; }\r\n public set lights(lights: LightSettings) { this.settings.lights = lights; }\r\n\r\n /** The direction of the solar light. */\r\n public get sunDirection(): Readonly<Vector3d> {\r\n return this.settings.lights.solar.direction;\r\n }\r\n\r\n /** Set the solar light direction based on time value\r\n * @param time The time in unix time milliseconds.\r\n * @see [DisplayStyle3dSettings.sunTime]($common) to obtain the current sun time.\r\n * @see [DisplayStyle3dSettings.setSunTime]($common).\r\n */\r\n public setSunTime(time: number) {\r\n this.settings.setSunTime(time, this.iModel);\r\n }\r\n\r\n /** Settings controlling shadow display. */\r\n public get solarShadows(): SolarShadowSettings {\r\n return this.settings.solarShadows;\r\n }\r\n public set solarShadows(settings: SolarShadowSettings) {\r\n this.settings.solarShadows = settings;\r\n }\r\n\r\n /** @internal */\r\n protected override registerSettingsEventListeners(): void {\r\n super.registerSettingsEventListeners();\r\n\r\n this.settings.onOverridesApplied.addListener((overrides: DisplayStyle3dSettingsProps) => {\r\n if (overrides.thematic && this.settings.thematic.displayMode === ThematicDisplayMode.Height && undefined === overrides.thematic.range) {\r\n // Use the project extents as reasonable default height range.\r\n // NB: assumes using Z axis...\r\n const extents = this.iModel.projectExtents;\r\n const props = { ...overrides.thematic };\r\n props.range = { low: extents.zLow, high: extents.zHigh };\r\n this.settings.thematic = ThematicDisplay.fromJSON(props);\r\n }\r\n });\r\n }\r\n\r\n /** @internal */\r\n public overrideTerrainDisplay(): TerrainDisplayOverrides | undefined {\r\n if (undefined !== this.settings.thematic) {\r\n const ovr = new TerrainDisplayOverrides();\r\n if (this.viewFlags.thematicDisplay && ThematicGradientMode.IsoLines === this.settings.thematic.gradientSettings.mode)\r\n ovr.wantSkirts = false;\r\n if (this.viewFlags.thematicDisplay && (ThematicDisplayMode.Slope === this.settings.thematic.displayMode || ThematicDisplayMode.HillShade === this.settings.thematic.displayMode))\r\n ovr.wantNormals = true;\r\n return ovr;\r\n }\r\n return undefined;\r\n }\r\n}\r\n"]}
@@ -160,7 +160,6 @@ class SectionAttachment {
160
160
  this.viewport.dispose();
161
161
  }
162
162
  addToScene(context) {
163
- var _a, _b, _c;
164
163
  if (context.viewport.freezeScene)
165
164
  return;
166
165
  const pixelSize = context.viewport.getPixelSizeAtPoint();
@@ -211,9 +210,9 @@ class SectionAttachment {
211
210
  const selectedAndReady = tileAdmin.getTilesForUser(this.viewport);
212
211
  const requested = tileAdmin.getRequestsForUser(this.viewport);
213
212
  tileAdmin.addExternalTilesForUser(context.viewport, {
214
- requested: (_a = requested === null || requested === void 0 ? void 0 : requested.size) !== null && _a !== void 0 ? _a : 0,
215
- selected: (_b = selectedAndReady === null || selectedAndReady === void 0 ? void 0 : selectedAndReady.selected.size) !== null && _b !== void 0 ? _b : 0,
216
- ready: (_c = selectedAndReady === null || selectedAndReady === void 0 ? void 0 : selectedAndReady.ready.size) !== null && _c !== void 0 ? _c : 0,
213
+ requested: requested?.size ?? 0,
214
+ selected: selectedAndReady?.selected.size ?? 0,
215
+ ready: selectedAndReady?.ready.size ?? 0,
217
216
  });
218
217
  }
219
218
  }
@@ -273,7 +272,6 @@ export class DrawingViewState extends ViewState2d {
273
272
  assert(undefined === this._attachment);
274
273
  }
275
274
  async querySectionDrawingProps() {
276
- var _a;
277
275
  let spatialView = Id64.invalid;
278
276
  let drawingToSpatialTransform;
279
277
  let displaySpatialView = false;
@@ -285,7 +283,7 @@ export class DrawingViewState extends ViewState2d {
285
283
  FROM bis.SectionDrawing
286
284
  WHERE ECInstanceId=${this.baseModelId}`;
287
285
  for await (const row of this.iModel.query(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {
288
- spatialView = Id64.fromJSON((_a = row.spatialView) === null || _a === void 0 ? void 0 : _a.id);
286
+ spatialView = Id64.fromJSON(row.spatialView?.id);
289
287
  displaySpatialView = !!row.displaySpatialView;
290
288
  try {
291
289
  drawingToSpatialTransform = JSON.parse(row.drawingToSpatialTransform);