@itwin/core-common 3.6.0-dev.8 → 4.0.0-dev.2

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 (355) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/AuthorizationClient.d.ts +9 -3
  4. package/lib/cjs/AuthorizationClient.d.ts.map +1 -1
  5. package/lib/cjs/AuthorizationClient.js.map +1 -1
  6. package/lib/cjs/BackendTypes.d.ts +3 -3
  7. package/lib/cjs/BackendTypes.d.ts.map +1 -1
  8. package/lib/cjs/BackendTypes.js.map +1 -1
  9. package/lib/cjs/BackgroundMapSettings.d.ts +2 -2
  10. package/lib/cjs/BackgroundMapSettings.js.map +1 -1
  11. package/lib/cjs/CloudStorage.d.ts +5 -5
  12. package/lib/cjs/CloudStorage.js +3 -3
  13. package/lib/cjs/CloudStorage.js.map +1 -1
  14. package/lib/cjs/CloudStorageTileCache.d.ts +1 -1
  15. package/lib/cjs/CloudStorageTileCache.js +1 -1
  16. package/lib/cjs/CloudStorageTileCache.js.map +1 -1
  17. package/lib/cjs/Code.d.ts +31 -10
  18. package/lib/cjs/Code.d.ts.map +1 -1
  19. package/lib/cjs/Code.js +17 -29
  20. package/lib/cjs/Code.js.map +1 -1
  21. package/lib/cjs/ContextRealityModel.d.ts +30 -3
  22. package/lib/cjs/ContextRealityModel.d.ts.map +1 -1
  23. package/lib/cjs/ContextRealityModel.js +23 -8
  24. package/lib/cjs/ContextRealityModel.js.map +1 -1
  25. package/lib/cjs/DisplayStyleSettings.d.ts +4 -0
  26. package/lib/cjs/DisplayStyleSettings.d.ts.map +1 -1
  27. package/lib/cjs/DisplayStyleSettings.js +5 -1
  28. package/lib/cjs/DisplayStyleSettings.js.map +1 -1
  29. package/lib/cjs/ElementMesh.js +2 -2
  30. package/lib/cjs/ElementMesh.js.map +1 -1
  31. package/lib/cjs/ElementProps.d.ts +5 -1
  32. package/lib/cjs/ElementProps.d.ts.map +1 -1
  33. package/lib/cjs/ElementProps.js.map +1 -1
  34. package/lib/cjs/EntityProps.d.ts +2 -1
  35. package/lib/cjs/EntityProps.d.ts.map +1 -1
  36. package/lib/cjs/EntityProps.js +1 -0
  37. package/lib/cjs/EntityProps.js.map +1 -1
  38. package/lib/cjs/FeatureSymbology.d.ts +3 -3
  39. package/lib/cjs/FeatureSymbology.js +3 -3
  40. package/lib/cjs/FeatureSymbology.js.map +1 -1
  41. package/lib/cjs/IModel.d.ts +1 -1
  42. package/lib/cjs/IModel.js.map +1 -1
  43. package/lib/cjs/IModelError.d.ts +10 -4
  44. package/lib/cjs/IModelError.d.ts.map +1 -1
  45. package/lib/cjs/IModelError.js +3 -4
  46. package/lib/cjs/IModelError.js.map +1 -1
  47. package/lib/cjs/Localization.d.ts +1 -1
  48. package/lib/cjs/Localization.d.ts.map +1 -1
  49. package/lib/cjs/Localization.js +8 -1
  50. package/lib/cjs/Localization.js.map +1 -1
  51. package/lib/cjs/MaterialProps.d.ts +42 -7
  52. package/lib/cjs/MaterialProps.d.ts.map +1 -1
  53. package/lib/cjs/MaterialProps.js +13 -1
  54. package/lib/cjs/MaterialProps.js.map +1 -1
  55. package/lib/cjs/RealityModelDisplaySettings.d.ts +65 -0
  56. package/lib/cjs/RealityModelDisplaySettings.d.ts.map +1 -1
  57. package/lib/cjs/RealityModelDisplaySettings.js +30 -2
  58. package/lib/cjs/RealityModelDisplaySettings.js.map +1 -1
  59. package/lib/cjs/RenderMaterial.d.ts +1 -1
  60. package/lib/cjs/RenderMaterial.d.ts.map +1 -1
  61. package/lib/cjs/RenderMaterial.js +1 -1
  62. package/lib/cjs/RenderMaterial.js.map +1 -1
  63. package/lib/cjs/RenderTexture.d.ts +1 -1
  64. package/lib/cjs/RenderTexture.js +1 -1
  65. package/lib/cjs/RenderTexture.js.map +1 -1
  66. package/lib/cjs/RpcInterface.d.ts.map +1 -1
  67. package/lib/cjs/RpcInterface.js.map +1 -1
  68. package/lib/cjs/RpcManager.d.ts.map +1 -1
  69. package/lib/cjs/RpcManager.js.map +1 -1
  70. package/lib/cjs/TerrainSettings.d.ts +1 -1
  71. package/lib/cjs/TerrainSettings.js.map +1 -1
  72. package/lib/cjs/TextureMapping.d.ts +5 -3
  73. package/lib/cjs/TextureMapping.d.ts.map +1 -1
  74. package/lib/cjs/TextureMapping.js.map +1 -1
  75. package/lib/cjs/ViewFlags.d.ts +2 -6
  76. package/lib/cjs/ViewFlags.d.ts.map +1 -1
  77. package/lib/cjs/ViewFlags.js.map +1 -1
  78. package/lib/cjs/ViewProps.d.ts +2 -2
  79. package/lib/cjs/ViewProps.d.ts.map +1 -1
  80. package/lib/cjs/ViewProps.js.map +1 -1
  81. package/lib/cjs/core-common.d.ts +0 -1
  82. package/lib/cjs/core-common.d.ts.map +1 -1
  83. package/lib/cjs/core-common.js +0 -1
  84. package/lib/cjs/core-common.js.map +1 -1
  85. package/lib/cjs/geometry/BoundingSphere.d.ts +15 -2
  86. package/lib/cjs/geometry/BoundingSphere.d.ts.map +1 -1
  87. package/lib/cjs/geometry/BoundingSphere.js +18 -4
  88. package/lib/cjs/geometry/BoundingSphere.js.map +1 -1
  89. package/lib/cjs/geometry/FrustumPlanes.d.ts +59 -10
  90. package/lib/cjs/geometry/FrustumPlanes.d.ts.map +1 -1
  91. package/lib/cjs/geometry/FrustumPlanes.js +94 -33
  92. package/lib/cjs/geometry/FrustumPlanes.js.map +1 -1
  93. package/lib/cjs/rpc/DevToolsRpcInterface.js.map +1 -1
  94. package/lib/cjs/rpc/IModelReadRpcInterface.d.ts +1 -1
  95. package/lib/cjs/rpc/IModelReadRpcInterface.d.ts.map +1 -1
  96. package/lib/cjs/rpc/IModelReadRpcInterface.js +12 -12
  97. package/lib/cjs/rpc/IModelReadRpcInterface.js.map +1 -1
  98. package/lib/cjs/rpc/IModelTileRpcInterface.d.ts +2 -2
  99. package/lib/cjs/rpc/IModelTileRpcInterface.js +4 -4
  100. package/lib/cjs/rpc/IModelTileRpcInterface.js.map +1 -1
  101. package/lib/cjs/rpc/SnapshotIModelRpcInterface.js.map +1 -1
  102. package/lib/cjs/rpc/TestRpcManager.d.ts.map +1 -1
  103. package/lib/cjs/rpc/TestRpcManager.js +1 -0
  104. package/lib/cjs/rpc/TestRpcManager.js.map +1 -1
  105. package/lib/cjs/rpc/WipRpcInterface.js.map +1 -1
  106. package/lib/cjs/rpc/core/RpcConfiguration.d.ts.map +1 -1
  107. package/lib/cjs/rpc/core/RpcConfiguration.js.map +1 -1
  108. package/lib/cjs/rpc/core/RpcConstants.d.ts +6 -1
  109. package/lib/cjs/rpc/core/RpcConstants.d.ts.map +1 -1
  110. package/lib/cjs/rpc/core/RpcConstants.js +7 -1
  111. package/lib/cjs/rpc/core/RpcConstants.js.map +1 -1
  112. package/lib/cjs/rpc/core/RpcControl.d.ts.map +1 -1
  113. package/lib/cjs/rpc/core/RpcControl.js +1 -0
  114. package/lib/cjs/rpc/core/RpcControl.js.map +1 -1
  115. package/lib/cjs/rpc/core/RpcInvocation.d.ts.map +1 -1
  116. package/lib/cjs/rpc/core/RpcInvocation.js.map +1 -1
  117. package/lib/cjs/rpc/core/RpcOperation.d.ts.map +1 -1
  118. package/lib/cjs/rpc/core/RpcOperation.js +1 -0
  119. package/lib/cjs/rpc/core/RpcOperation.js.map +1 -1
  120. package/lib/cjs/rpc/core/RpcPendingQueue.d.ts.map +1 -1
  121. package/lib/cjs/rpc/core/RpcPendingQueue.js +1 -0
  122. package/lib/cjs/rpc/core/RpcPendingQueue.js.map +1 -1
  123. package/lib/cjs/rpc/core/RpcProtocol.d.ts.map +1 -1
  124. package/lib/cjs/rpc/core/RpcProtocol.js.map +1 -1
  125. package/lib/cjs/rpc/core/RpcPush.d.ts.map +1 -1
  126. package/lib/cjs/rpc/core/RpcPush.js.map +1 -1
  127. package/lib/cjs/rpc/core/RpcRegistry.d.ts.map +1 -1
  128. package/lib/cjs/rpc/core/RpcRegistry.js +1 -0
  129. package/lib/cjs/rpc/core/RpcRegistry.js.map +1 -1
  130. package/lib/cjs/rpc/core/RpcRequest.d.ts.map +1 -1
  131. package/lib/cjs/rpc/core/RpcRequest.js +1 -0
  132. package/lib/cjs/rpc/core/RpcRequest.js.map +1 -1
  133. package/lib/cjs/rpc/core/RpcRequestContext.d.ts.map +1 -1
  134. package/lib/cjs/rpc/core/RpcRequestContext.js.map +1 -1
  135. package/lib/cjs/rpc/core/RpcRoutingToken.d.ts.map +1 -1
  136. package/lib/cjs/rpc/core/RpcRoutingToken.js +1 -0
  137. package/lib/cjs/rpc/core/RpcRoutingToken.js.map +1 -1
  138. package/lib/cjs/rpc/core/RpcSessionInvocation.d.ts.map +1 -1
  139. package/lib/cjs/rpc/core/RpcSessionInvocation.js +1 -0
  140. package/lib/cjs/rpc/core/RpcSessionInvocation.js.map +1 -1
  141. package/lib/cjs/rpc/web/BentleyCloudRpcManager.d.ts.map +1 -1
  142. package/lib/cjs/rpc/web/BentleyCloudRpcManager.js.map +1 -1
  143. package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.d.ts.map +1 -1
  144. package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js +1 -0
  145. package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
  146. package/lib/cjs/rpc/web/OpenAPI.d.ts +1 -0
  147. package/lib/cjs/rpc/web/OpenAPI.d.ts.map +1 -1
  148. package/lib/cjs/rpc/web/OpenAPI.js.map +1 -1
  149. package/lib/cjs/rpc/web/WebAppRpcLogging.d.ts.map +1 -1
  150. package/lib/cjs/rpc/web/WebAppRpcLogging.js +1 -0
  151. package/lib/cjs/rpc/web/WebAppRpcLogging.js.map +1 -1
  152. package/lib/cjs/rpc/web/WebAppRpcProtocol.d.ts +2 -0
  153. package/lib/cjs/rpc/web/WebAppRpcProtocol.d.ts.map +1 -1
  154. package/lib/cjs/rpc/web/WebAppRpcProtocol.js.map +1 -1
  155. package/lib/cjs/rpc/web/WebAppRpcRequest.d.ts.map +1 -1
  156. package/lib/cjs/rpc/web/WebAppRpcRequest.js.map +1 -1
  157. package/lib/cjs/rpc/web/multipart/RpcMultipartParser.d.ts.map +1 -1
  158. package/lib/cjs/rpc/web/multipart/RpcMultipartParser.js +1 -0
  159. package/lib/cjs/rpc/web/multipart/RpcMultipartParser.js.map +1 -1
  160. package/lib/cjs/tile/B3dmTileIO.js +5 -5
  161. package/lib/cjs/tile/B3dmTileIO.js.map +1 -1
  162. package/lib/cjs/tile/CompositeTileIO.js +2 -2
  163. package/lib/cjs/tile/CompositeTileIO.js.map +1 -1
  164. package/lib/cjs/tile/GltfTileIO.js +5 -5
  165. package/lib/cjs/tile/GltfTileIO.js.map +1 -1
  166. package/lib/cjs/tile/I3dmTileIO.js +6 -6
  167. package/lib/cjs/tile/I3dmTileIO.js.map +1 -1
  168. package/lib/cjs/tile/IModelTileIO.d.ts +2 -2
  169. package/lib/cjs/tile/IModelTileIO.js +12 -12
  170. package/lib/cjs/tile/IModelTileIO.js.map +1 -1
  171. package/lib/cjs/tile/PntsTileIO.js +5 -5
  172. package/lib/cjs/tile/PntsTileIO.js.map +1 -1
  173. package/lib/cjs/tile/TileIO.js +3 -3
  174. package/lib/cjs/tile/TileIO.js.map +1 -1
  175. package/lib/esm/AuthorizationClient.d.ts +9 -3
  176. package/lib/esm/AuthorizationClient.d.ts.map +1 -1
  177. package/lib/esm/AuthorizationClient.js.map +1 -1
  178. package/lib/esm/BackendTypes.d.ts +3 -3
  179. package/lib/esm/BackendTypes.d.ts.map +1 -1
  180. package/lib/esm/BackendTypes.js.map +1 -1
  181. package/lib/esm/BackgroundMapSettings.d.ts +2 -2
  182. package/lib/esm/BackgroundMapSettings.js.map +1 -1
  183. package/lib/esm/CloudStorage.d.ts +5 -5
  184. package/lib/esm/CloudStorage.js +3 -3
  185. package/lib/esm/CloudStorage.js.map +1 -1
  186. package/lib/esm/CloudStorageTileCache.d.ts +1 -1
  187. package/lib/esm/CloudStorageTileCache.js +1 -1
  188. package/lib/esm/CloudStorageTileCache.js.map +1 -1
  189. package/lib/esm/Code.d.ts +31 -10
  190. package/lib/esm/Code.d.ts.map +1 -1
  191. package/lib/esm/Code.js +17 -29
  192. package/lib/esm/Code.js.map +1 -1
  193. package/lib/esm/ContextRealityModel.d.ts +30 -3
  194. package/lib/esm/ContextRealityModel.d.ts.map +1 -1
  195. package/lib/esm/ContextRealityModel.js +23 -8
  196. package/lib/esm/ContextRealityModel.js.map +1 -1
  197. package/lib/esm/DisplayStyleSettings.d.ts +4 -0
  198. package/lib/esm/DisplayStyleSettings.d.ts.map +1 -1
  199. package/lib/esm/DisplayStyleSettings.js +5 -1
  200. package/lib/esm/DisplayStyleSettings.js.map +1 -1
  201. package/lib/esm/ElementMesh.js +2 -2
  202. package/lib/esm/ElementMesh.js.map +1 -1
  203. package/lib/esm/ElementProps.d.ts +5 -1
  204. package/lib/esm/ElementProps.d.ts.map +1 -1
  205. package/lib/esm/ElementProps.js.map +1 -1
  206. package/lib/esm/EntityProps.d.ts +2 -1
  207. package/lib/esm/EntityProps.d.ts.map +1 -1
  208. package/lib/esm/EntityProps.js +1 -0
  209. package/lib/esm/EntityProps.js.map +1 -1
  210. package/lib/esm/FeatureSymbology.d.ts +3 -3
  211. package/lib/esm/FeatureSymbology.js +3 -3
  212. package/lib/esm/FeatureSymbology.js.map +1 -1
  213. package/lib/esm/IModel.d.ts +1 -1
  214. package/lib/esm/IModel.js.map +1 -1
  215. package/lib/esm/IModelError.d.ts +10 -4
  216. package/lib/esm/IModelError.d.ts.map +1 -1
  217. package/lib/esm/IModelError.js +3 -2
  218. package/lib/esm/IModelError.js.map +1 -1
  219. package/lib/esm/Localization.d.ts +1 -1
  220. package/lib/esm/Localization.d.ts.map +1 -1
  221. package/lib/esm/Localization.js +8 -1
  222. package/lib/esm/Localization.js.map +1 -1
  223. package/lib/esm/MaterialProps.d.ts +42 -7
  224. package/lib/esm/MaterialProps.d.ts.map +1 -1
  225. package/lib/esm/MaterialProps.js +12 -0
  226. package/lib/esm/MaterialProps.js.map +1 -1
  227. package/lib/esm/RealityModelDisplaySettings.d.ts +65 -0
  228. package/lib/esm/RealityModelDisplaySettings.d.ts.map +1 -1
  229. package/lib/esm/RealityModelDisplaySettings.js +30 -2
  230. package/lib/esm/RealityModelDisplaySettings.js.map +1 -1
  231. package/lib/esm/RenderMaterial.d.ts +1 -1
  232. package/lib/esm/RenderMaterial.d.ts.map +1 -1
  233. package/lib/esm/RenderMaterial.js +1 -1
  234. package/lib/esm/RenderMaterial.js.map +1 -1
  235. package/lib/esm/RenderTexture.d.ts +1 -1
  236. package/lib/esm/RenderTexture.js +1 -1
  237. package/lib/esm/RenderTexture.js.map +1 -1
  238. package/lib/esm/RpcInterface.d.ts.map +1 -1
  239. package/lib/esm/RpcInterface.js.map +1 -1
  240. package/lib/esm/RpcManager.d.ts.map +1 -1
  241. package/lib/esm/RpcManager.js.map +1 -1
  242. package/lib/esm/TerrainSettings.d.ts +1 -1
  243. package/lib/esm/TerrainSettings.js.map +1 -1
  244. package/lib/esm/TextureMapping.d.ts +5 -3
  245. package/lib/esm/TextureMapping.d.ts.map +1 -1
  246. package/lib/esm/TextureMapping.js.map +1 -1
  247. package/lib/esm/ViewFlags.d.ts +2 -6
  248. package/lib/esm/ViewFlags.d.ts.map +1 -1
  249. package/lib/esm/ViewFlags.js.map +1 -1
  250. package/lib/esm/ViewProps.d.ts +2 -2
  251. package/lib/esm/ViewProps.d.ts.map +1 -1
  252. package/lib/esm/ViewProps.js.map +1 -1
  253. package/lib/esm/core-common.d.ts +0 -1
  254. package/lib/esm/core-common.d.ts.map +1 -1
  255. package/lib/esm/core-common.js +0 -1
  256. package/lib/esm/core-common.js.map +1 -1
  257. package/lib/esm/geometry/BoundingSphere.d.ts +15 -2
  258. package/lib/esm/geometry/BoundingSphere.d.ts.map +1 -1
  259. package/lib/esm/geometry/BoundingSphere.js +18 -4
  260. package/lib/esm/geometry/BoundingSphere.js.map +1 -1
  261. package/lib/esm/geometry/FrustumPlanes.d.ts +59 -10
  262. package/lib/esm/geometry/FrustumPlanes.d.ts.map +1 -1
  263. package/lib/esm/geometry/FrustumPlanes.js +94 -33
  264. package/lib/esm/geometry/FrustumPlanes.js.map +1 -1
  265. package/lib/esm/rpc/DevToolsRpcInterface.js.map +1 -1
  266. package/lib/esm/rpc/IModelReadRpcInterface.d.ts +1 -1
  267. package/lib/esm/rpc/IModelReadRpcInterface.d.ts.map +1 -1
  268. package/lib/esm/rpc/IModelReadRpcInterface.js +12 -12
  269. package/lib/esm/rpc/IModelReadRpcInterface.js.map +1 -1
  270. package/lib/esm/rpc/IModelTileRpcInterface.d.ts +2 -2
  271. package/lib/esm/rpc/IModelTileRpcInterface.js +4 -4
  272. package/lib/esm/rpc/IModelTileRpcInterface.js.map +1 -1
  273. package/lib/esm/rpc/SnapshotIModelRpcInterface.js.map +1 -1
  274. package/lib/esm/rpc/TestRpcManager.d.ts.map +1 -1
  275. package/lib/esm/rpc/TestRpcManager.js +1 -0
  276. package/lib/esm/rpc/TestRpcManager.js.map +1 -1
  277. package/lib/esm/rpc/WipRpcInterface.js.map +1 -1
  278. package/lib/esm/rpc/core/RpcConfiguration.d.ts.map +1 -1
  279. package/lib/esm/rpc/core/RpcConfiguration.js.map +1 -1
  280. package/lib/esm/rpc/core/RpcConstants.d.ts +6 -1
  281. package/lib/esm/rpc/core/RpcConstants.d.ts.map +1 -1
  282. package/lib/esm/rpc/core/RpcConstants.js +7 -1
  283. package/lib/esm/rpc/core/RpcConstants.js.map +1 -1
  284. package/lib/esm/rpc/core/RpcControl.d.ts.map +1 -1
  285. package/lib/esm/rpc/core/RpcControl.js +1 -0
  286. package/lib/esm/rpc/core/RpcControl.js.map +1 -1
  287. package/lib/esm/rpc/core/RpcInvocation.d.ts.map +1 -1
  288. package/lib/esm/rpc/core/RpcInvocation.js.map +1 -1
  289. package/lib/esm/rpc/core/RpcOperation.d.ts.map +1 -1
  290. package/lib/esm/rpc/core/RpcOperation.js +1 -0
  291. package/lib/esm/rpc/core/RpcOperation.js.map +1 -1
  292. package/lib/esm/rpc/core/RpcPendingQueue.d.ts.map +1 -1
  293. package/lib/esm/rpc/core/RpcPendingQueue.js +1 -0
  294. package/lib/esm/rpc/core/RpcPendingQueue.js.map +1 -1
  295. package/lib/esm/rpc/core/RpcProtocol.d.ts.map +1 -1
  296. package/lib/esm/rpc/core/RpcProtocol.js.map +1 -1
  297. package/lib/esm/rpc/core/RpcPush.d.ts.map +1 -1
  298. package/lib/esm/rpc/core/RpcPush.js.map +1 -1
  299. package/lib/esm/rpc/core/RpcRegistry.d.ts.map +1 -1
  300. package/lib/esm/rpc/core/RpcRegistry.js +1 -0
  301. package/lib/esm/rpc/core/RpcRegistry.js.map +1 -1
  302. package/lib/esm/rpc/core/RpcRequest.d.ts.map +1 -1
  303. package/lib/esm/rpc/core/RpcRequest.js +1 -0
  304. package/lib/esm/rpc/core/RpcRequest.js.map +1 -1
  305. package/lib/esm/rpc/core/RpcRequestContext.d.ts.map +1 -1
  306. package/lib/esm/rpc/core/RpcRequestContext.js.map +1 -1
  307. package/lib/esm/rpc/core/RpcRoutingToken.d.ts.map +1 -1
  308. package/lib/esm/rpc/core/RpcRoutingToken.js +1 -0
  309. package/lib/esm/rpc/core/RpcRoutingToken.js.map +1 -1
  310. package/lib/esm/rpc/core/RpcSessionInvocation.d.ts.map +1 -1
  311. package/lib/esm/rpc/core/RpcSessionInvocation.js +1 -0
  312. package/lib/esm/rpc/core/RpcSessionInvocation.js.map +1 -1
  313. package/lib/esm/rpc/web/BentleyCloudRpcManager.d.ts.map +1 -1
  314. package/lib/esm/rpc/web/BentleyCloudRpcManager.js.map +1 -1
  315. package/lib/esm/rpc/web/BentleyCloudRpcProtocol.d.ts.map +1 -1
  316. package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js +1 -0
  317. package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
  318. package/lib/esm/rpc/web/OpenAPI.d.ts +1 -0
  319. package/lib/esm/rpc/web/OpenAPI.d.ts.map +1 -1
  320. package/lib/esm/rpc/web/OpenAPI.js.map +1 -1
  321. package/lib/esm/rpc/web/WebAppRpcLogging.d.ts.map +1 -1
  322. package/lib/esm/rpc/web/WebAppRpcLogging.js +1 -0
  323. package/lib/esm/rpc/web/WebAppRpcLogging.js.map +1 -1
  324. package/lib/esm/rpc/web/WebAppRpcProtocol.d.ts +2 -0
  325. package/lib/esm/rpc/web/WebAppRpcProtocol.d.ts.map +1 -1
  326. package/lib/esm/rpc/web/WebAppRpcProtocol.js.map +1 -1
  327. package/lib/esm/rpc/web/WebAppRpcRequest.d.ts.map +1 -1
  328. package/lib/esm/rpc/web/WebAppRpcRequest.js.map +1 -1
  329. package/lib/esm/rpc/web/multipart/RpcMultipartParser.d.ts.map +1 -1
  330. package/lib/esm/rpc/web/multipart/RpcMultipartParser.js +1 -0
  331. package/lib/esm/rpc/web/multipart/RpcMultipartParser.js.map +1 -1
  332. package/lib/esm/tile/B3dmTileIO.js +5 -5
  333. package/lib/esm/tile/B3dmTileIO.js.map +1 -1
  334. package/lib/esm/tile/CompositeTileIO.js +2 -2
  335. package/lib/esm/tile/CompositeTileIO.js.map +1 -1
  336. package/lib/esm/tile/GltfTileIO.js +5 -5
  337. package/lib/esm/tile/GltfTileIO.js.map +1 -1
  338. package/lib/esm/tile/I3dmTileIO.js +6 -6
  339. package/lib/esm/tile/I3dmTileIO.js.map +1 -1
  340. package/lib/esm/tile/IModelTileIO.d.ts +2 -2
  341. package/lib/esm/tile/IModelTileIO.js +12 -12
  342. package/lib/esm/tile/IModelTileIO.js.map +1 -1
  343. package/lib/esm/tile/PntsTileIO.js +5 -5
  344. package/lib/esm/tile/PntsTileIO.js.map +1 -1
  345. package/lib/esm/tile/TileIO.js +3 -3
  346. package/lib/esm/tile/TileIO.js.map +1 -1
  347. package/package.json +7 -7
  348. package/lib/cjs/FeatureGates.d.ts +0 -32
  349. package/lib/cjs/FeatureGates.d.ts.map +0 -1
  350. package/lib/cjs/FeatureGates.js +0 -56
  351. package/lib/cjs/FeatureGates.js.map +0 -1
  352. package/lib/esm/FeatureGates.d.ts +0 -32
  353. package/lib/esm/FeatureGates.d.ts.map +0 -1
  354. package/lib/esm/FeatureGates.js +0 -52
  355. package/lib/esm/FeatureGates.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"FeatureSymbology.js","sourceRoot":"","sources":["../../src/FeatureSymbology.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 Rendering\r\n */\r\n\r\nimport { assert, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { BatchType, Feature } from \"./FeatureTable\";\r\nimport { ColorDef } from \"./ColorDef\";\r\nimport { GeometryClass } from \"./GeometryParams\";\r\nimport { LinePixels } from \"./LinePixels\";\r\nimport { RgbColor, RgbColorProps } from \"./RgbColor\";\r\nimport { SubCategoryOverride } from \"./SubCategoryOverride\";\r\n\r\nfunction copyIdSetToUint32Set(dst: Id64.Uint32Set, src: Iterable<string>): void {\r\n dst.clear();\r\n if (typeof src === \"string\") {\r\n dst.addId(src);\r\n } else {\r\n for (const id of src)\r\n dst.addId(id);\r\n }\r\n}\r\n\r\n// cspell:ignore subcat subcats\r\n\r\n/** JSON representation of a [[FeatureAppearance]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface FeatureAppearanceProps {\r\n /** See [[FeatureAppearance.rgb]]. */\r\n rgb?: RgbColorProps;\r\n /** See [[FeatureAppearance.weight]]. */\r\n weight?: number;\r\n /** See [[FeatureAppearance.transparency]]. */\r\n transparency?: number;\r\n /** See [[FeatureAppearance.viewDependentTransparency]]. */\r\n viewDependentTransparency?: true;\r\n /** See [[FeatureAppearance.linePixels]]. */\r\n linePixels?: LinePixels;\r\n /** See [[FeatureAppearance.ignoresMaterial]]. */\r\n ignoresMaterial?: true;\r\n /** See [[FeatureAppearance.nonLocatable]]. */\r\n nonLocatable?: true;\r\n /** See [[FeatureAppearance.emphasized]]. */\r\n emphasized?: true;\r\n}\r\n\r\n/** Defines overrides for selected aspects of a [[Feature]]'s symbology.\r\n * Any member defined in the appearance overrides that aspect of symbology for all [[Feature]]s to which the appearance is applied.\r\n * @see [[FeatureOverrides]] to customize the appearance of multiple features.\r\n * @public\r\n */\r\nexport class FeatureAppearance {\r\n /** Overrides the feature's color. */\r\n public readonly rgb?: RgbColor;\r\n /** The width of lines and edges in pixels as an integer in [1, 31]. */\r\n public readonly weight?: number;\r\n /** The transparency in the range [0, 1] where 0 indicates fully opaque and 1 indicates fully transparent.\r\n * @see [[viewDependentTransparency]] for details on how this override interacts with the [DisplayStyle]($backend).\r\n */\r\n public readonly transparency?: number;\r\n /** The pixel pattern applied to lines and edges. */\r\n public readonly linePixels?: LinePixels;\r\n /** If true, don't apply the [[RenderMaterial]] to the feature's surfaces. */\r\n public readonly ignoresMaterial?: true;\r\n /** If true, the feature will not be drawn when using [Viewport.readPixels]($frontend), meaning [Tool]($frontend)s will not be able to interact with it. */\r\n public readonly nonLocatable?: true;\r\n /** If true, the feature will be rendered using the [[Hilite.Settings]] defined by [Viewport.emphasisSettings]($frontend) to make it stand out. */\r\n public readonly emphasized?: true;\r\n /** If true, then [[transparency]] will only be applied if [[ViewFlags.transparency]] is enabled and the current [[RenderMode]] supports transparency.\r\n * Default: false, meaning the transparency will be applied regardless of view flags or render mode.\r\n * This property has no effect if [[transparency]] is `undefined`.\r\n */\r\n public readonly viewDependentTransparency?: true;\r\n\r\n /** An appearance that overrides nothing. */\r\n public static readonly defaults = new FeatureAppearance({});\r\n\r\n public static fromJSON(props?: FeatureAppearanceProps) {\r\n if (undefined === props || (undefined === props.rgb && undefined === props.weight && undefined === props.transparency && undefined === props.linePixels && !props.ignoresMaterial && !props.nonLocatable && !props.emphasized))\r\n return this.defaults;\r\n else\r\n return new FeatureAppearance(props);\r\n }\r\n\r\n /** Create a FeatureAppearance that overrides only the RGB color.\r\n * @note The transparency component of the ColorDef is ignored.\r\n */\r\n public static fromRgb(color: ColorDef): FeatureAppearance {\r\n return this.fromJSON({ rgb: RgbColor.fromColorDef(color) });\r\n }\r\n\r\n /** Create a FeatureAppearance that overrides the RGB and transparency.\r\n * The appearance's transparency is derived from the transparency component of the ColorDef.\r\n */\r\n public static fromRgba(color: ColorDef, viewDependentTransparency = false): FeatureAppearance {\r\n return this.fromJSON({\r\n rgb: RgbColor.fromColorDef(color),\r\n transparency: color.colors.t / 255,\r\n viewDependentTransparency: viewDependentTransparency ? true : undefined,\r\n });\r\n }\r\n /** Create a FeatureAppearance that overrides only the transparency */\r\n public static fromTransparency(transparencyValue: number, viewDependent = false): FeatureAppearance {\r\n return this.fromJSON({\r\n transparency: transparencyValue,\r\n viewDependentTransparency: viewDependent ? true : undefined,\r\n });\r\n }\r\n\r\n /** Create a FeatureAppearance with overrides corresponding to those defined by the supplied SubCategoryOverride.\r\n * @note Subcategory overrides set [[viewDependentTransparency]] to `true`.\r\n */\r\n public static fromSubCategoryOverride(ovr: SubCategoryOverride): FeatureAppearance {\r\n const rgb = undefined !== ovr.color ? RgbColor.fromColorDef(ovr.color) : undefined;\r\n const transparency = ovr.transparency;\r\n const weight = ovr.weight;\r\n const ignoresMaterial = undefined !== ovr.material && Id64.isValid(ovr.material) ? true : undefined;\r\n return this.fromJSON({ rgb, transparency, weight, ignoresMaterial, viewDependentTransparency: true });\r\n }\r\n\r\n /** Returns true if this appearance does not override any aspects of symbology. */\r\n public get matchesDefaults(): boolean {\r\n return this.equals(FeatureAppearance.defaults);\r\n }\r\n\r\n public get overridesRgb(): boolean { return undefined !== this.rgb; }\r\n public get overridesTransparency(): boolean { return undefined !== this.transparency; }\r\n public get overridesLinePixels(): boolean { return undefined !== this.linePixels; }\r\n public get overridesWeight(): boolean { return undefined !== this.weight; }\r\n public get overridesSymbology(): boolean {\r\n return this.overridesRgb || this.overridesTransparency || this.overridesWeight || this.overridesLinePixels || !!this.ignoresMaterial\r\n || this.emphasized || this.overridesNonLocatable;\r\n }\r\n public get overridesNonLocatable(): boolean { return undefined !== this.nonLocatable; }\r\n public get isFullyTransparent(): boolean { return undefined !== this.transparency && this.transparency >= 1.0; }\r\n /** Returns true if any aspect of the appearance is overridden (i.e., if any member is not undefined). */\r\n public get anyOverridden(): boolean { return this.overridesSymbology || this.overridesNonLocatable; }\r\n\r\n public equals(other: FeatureAppearance): boolean {\r\n if (this === other)\r\n return true;\r\n\r\n return this.rgbIsEqual(other.rgb)\r\n && this.weight === other.weight\r\n && this.transparencyIsEqual(other.transparency)\r\n && this.linePixels === other.linePixels\r\n && this.ignoresMaterial === other.ignoresMaterial\r\n && this.nonLocatable === other.nonLocatable\r\n && this.emphasized === other.emphasized\r\n && this.viewDependentTransparency === other.viewDependentTransparency;\r\n }\r\n\r\n public toJSON(): FeatureAppearanceProps {\r\n const props: FeatureAppearanceProps = {};\r\n if (this.rgb)\r\n props.rgb = this.rgb.toJSON();\r\n\r\n if (undefined !== this.weight)\r\n props.weight = this.weight;\r\n\r\n if (undefined !== this.transparency) {\r\n props.transparency = this.transparency;\r\n if (this.viewDependentTransparency)\r\n props.viewDependentTransparency = true;\r\n }\r\n\r\n if (undefined !== this.linePixels)\r\n props.linePixels = this.linePixels;\r\n\r\n if (true === this.ignoresMaterial)\r\n props.ignoresMaterial = true;\r\n\r\n if (true === this.nonLocatable)\r\n props.nonLocatable = true;\r\n\r\n if (true === this.emphasized)\r\n props.emphasized = true;\r\n\r\n return props;\r\n }\r\n\r\n /** Convert this appearance to JSON, and override any properties explicitly specified by `changedProps` in the result.\r\n * Example:\r\n * ```ts\r\n * const base = FeatureAppearance.fromRgba(ColorDef.white); // transparency=0, rgb=white\r\n * const clone = base.cloneProps({ transparency: undefined, weight: 5 }); // transparency=undefined, rgb=white, weight=5\r\n * ```\r\n * @see [[FeatureAppearance.clone]].\r\n */\r\n public cloneProps(changedProps: FeatureAppearanceProps): FeatureAppearanceProps {\r\n return {\r\n ...this.toJSON(),\r\n ...changedProps,\r\n };\r\n }\r\n\r\n /** Create a copy of this appearance, overriding any properties explicitly specified by `changedProps`.\r\n * Example:\r\n * ```ts\r\n * const base = FeatureAppearance.fromRgba(ColorDef.white); // transparency=0, rgb=white\r\n * const clone = base.clone({ transparency: undefined, weight: 5 }); // transparency=undefined, rgb=white, weight=5\r\n * ```\r\n * @see [[FeatureAppearance.cloneProps]].\r\n */\r\n public clone(changedProps: FeatureAppearanceProps): FeatureAppearance {\r\n return FeatureAppearance.fromJSON(this.cloneProps(changedProps));\r\n }\r\n\r\n /** Produce a FeatureAppearance from the supplied appearance in which any aspect not defined by the base appearance is overridden by this appearance. */\r\n public extendAppearance(base: FeatureAppearance): FeatureAppearance {\r\n if (!this.overridesSymbology)\r\n return base;\r\n\r\n const props = base.toJSON();\r\n if (undefined === props.rgb)\r\n props.rgb = this.rgb;\r\n if (undefined === props.transparency)\r\n props.transparency = this.transparency;\r\n if (undefined === props.linePixels)\r\n props.linePixels = this.linePixels;\r\n if (undefined === props.weight)\r\n props.weight = this.weight;\r\n if (undefined === props.ignoresMaterial && this.ignoresMaterial)\r\n props.ignoresMaterial = true;\r\n if (undefined === props.nonLocatable && this.nonLocatable)\r\n props.nonLocatable = true;\r\n if (undefined === props.emphasized && this.emphasized)\r\n props.emphasized = true;\r\n\r\n if (undefined !== props.transparency && this.viewDependentTransparency)\r\n props.viewDependentTransparency = true;\r\n\r\n return FeatureAppearance.fromJSON(props);\r\n }\r\n\r\n protected constructor(props: FeatureAppearanceProps) {\r\n this.rgb = undefined !== props.rgb ? RgbColor.fromJSON(props.rgb) : undefined;\r\n this.weight = props.weight;\r\n this.transparency = props.transparency;\r\n this.linePixels = props.linePixels;\r\n this.ignoresMaterial = props.ignoresMaterial;\r\n this.nonLocatable = props.nonLocatable;\r\n this.emphasized = props.emphasized;\r\n\r\n if (undefined !== this.weight)\r\n this.weight = Math.max(1, Math.min(this.weight, 32));\r\n\r\n if (undefined !== this.transparency) {\r\n if (props.viewDependentTransparency)\r\n this.viewDependentTransparency = true;\r\n\r\n this.transparency = Math.max(0, Math.min(this.transparency, 1));\r\n\r\n // Fix up rounding errors...\r\n const smallDelta = 0.0001;\r\n if (1.0 - this.transparency < smallDelta)\r\n this.transparency = 1.0;\r\n else if (this.transparency < smallDelta)\r\n this.transparency = 0.0;\r\n }\r\n }\r\n\r\n private rgbIsEqual(rgb?: RgbColor): boolean {\r\n if (undefined === this.rgb)\r\n return undefined === rgb;\r\n else if (undefined === rgb)\r\n return false;\r\n else\r\n return this.rgb.equals(rgb);\r\n }\r\n\r\n private transparencyIsEqual(transp?: number): boolean {\r\n if (undefined === this.transparency)\r\n return undefined === transp;\r\n else if (undefined === transp)\r\n return false;\r\n else\r\n return Math.floor(this.transparency * 0xff) === Math.floor(transp * 0xff);\r\n }\r\n}\r\n\r\n/** Interface adopted by an object that can supply a [[FeatureAppearance]] given a low-level description of a [[Feature]].\r\n * @see [[FeatureOverrides]] for the commonly-used implementation.\r\n * @see [[FeatureAppearanceProvider]] to supplement the appearance supplied by this interface.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface FeatureAppearanceSource {\r\n /** Supplies the desired appearance overrides for the specified [[Feature]], or `undefined` if the feature should not be drawn.\r\n * The feature is described by its components for efficiency reasons.\r\n * @param elemLo The lower 32 bits of the feature's element Id.\r\n * @param elemHi The upper 32 bits of the feature's element Id.\r\n * @param subcatLo The lower 32 bits of the feature's subcategory Id.\r\n * @param subcatHi The upper 32 bits of the feature's subcategory Id.\r\n * @param geomClass The geometry class of the feature.\r\n * @param modelLo The lower 32 bits of the feature's model Id.\r\n * @param modelHi The upper 32 bits of the feature's model Id.\r\n * @param type The type of batch to which the feature belongs.\r\n * @param animationNodeId The Id of the corresponding node in the [[RenderSchedule]], or `0` if none.\r\n * @returns The desired appearance overrides, or `undefined` to indicate the feature should not be displayed.\r\n * @see [Id64.isValidUint32Pair]($core-bentley) to determine if the components of an [Id64String]($core-bentley) represent a valid Id.\r\n */\r\n getAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number): FeatureAppearance | undefined;\r\n}\r\n\r\n/** Common options for [[FeatureOverrides.override]].\r\n * @public\r\n */\r\nexport interface OverrideFeatureAppearanceOptions {\r\n /** Specifies the aspects of the [[Feature]]'s appearance to be overridden. */\r\n appearance: FeatureAppearance;\r\n /** Specifies what to do if a [[FeatureAppearance]] has already been configured for the specified element, model, or subcategory by a previous call to [[FeatureOverrides.override]].\r\n * - \"subsume\" (the default): Merge the two appearances using the logic described by [[FeatureAppearance.extendAppearance]] such that any aspect overridden by the existing appearance will be overwritten\r\n * if also overridden by [[appearance]].\r\n * - The resulting appearance is computed as `existingAppearance.extendAppearance(newAppearance)`.\r\n * - \"extend\": Merge the two appearances using the logic described by [[FeatureAppearance.extendAppearance]] such that any aspect overridden by [[appearance]] will only\r\n * apply if that aspect is not already overridden by a previous appearance.\r\n * - The resulting appearance is computed as `newAppearance.extendAppearance(existingAppearance)`.\r\n * - \"replace\": Completely replace the existing appearance with [[appearance]].\r\n * - \"skip\": Keep the existing appearance.\r\n */\r\n onConflict?: \"extend\" | \"subsume\" | \"replace\" | \"skip\";\r\n}\r\n\r\n/** Options for using [[FeatureOverrides.override]] to override the appearance of a [GeometricModel]($backend).\r\n * @public\r\n */\r\nexport interface OverrideModelAppearanceOptions extends OverrideFeatureAppearanceOptions {\r\n /** The Id of the model whose appearance is to be overridden. */\r\n modelId: Id64String;\r\n /** @internal */\r\n elementId?: never;\r\n /** @internal */\r\n subCategoryId?: never;\r\n}\r\n\r\n/** Options for using [[FeatureOverrides.override]] to override the appearance of a [GeometricElement]($backend).\r\n * @public\r\n */\r\nexport interface OverrideElementAppearanceOptions extends OverrideFeatureAppearanceOptions {\r\n /** The Id of the element whose appearance is to be overridden. */\r\n elementId: Id64String;\r\n /** @internal */\r\n modelId?: never;\r\n /** @internal */\r\n subCategoryId?: never;\r\n}\r\n\r\n/** Options for using [[FeatureOverrides.override]] to override the appearance of a [SubCategory]($backend).\r\n * @public\r\n */\r\nexport interface OverrideSubCategoryAppearanceOptions extends OverrideFeatureAppearanceOptions {\r\n /** The Id of the subcategory whose appearance is to be overridden. */\r\n subCategoryId: Id64String;\r\n /** @internal */\r\n modelId?: never;\r\n /** @internal */\r\n elementId?: never;\r\n}\r\n\r\n/** Arguments supplied to [[FeatureOverrides.override]].\r\n * @public\r\n */\r\nexport type OverrideFeatureAppearanceArgs = OverrideElementAppearanceOptions | OverrideModelAppearanceOptions | OverrideSubCategoryAppearanceOptions;\r\n\r\n/** Arguments provided to a function of type [[IgnoreAnimationOverrides]].\r\n * @see [[FeatureOverrides.ignoreAnimationOverrides]] to register such a function.\r\n * @public\r\n */\r\nexport interface IgnoreAnimationOverridesArgs {\r\n /** The Id of the element under consideration.\r\n * @see [Id64.fromUint32Pair]($bentley) to convert a Uint32Pair into an [Id64String]($bentley), if needed.\r\n */\r\n readonly elementId: Readonly<Id64.Uint32Pair>;\r\n /** The [[RenderSchedule.ElementTimeline.batchId]] identifying the [[RenderSchedule.ElementTimeline]] to which the element under consideration belongs. */\r\n readonly animationNodeId: number;\r\n}\r\n\r\n/** A function that can be supplied to [[FeatureOverrides.ignoreAnimationOverrides]] to indicate whether the color or transparency overrides defined\r\n * by the view's [[RenderSchedule.Script]] should be ignored. The arguments describe the element under consideration. The function should return true if that\r\n * element should not have its color or transparency modified by the schedule script.\r\n * @public\r\n */\r\nexport type IgnoreAnimationOverrides = (args: IgnoreAnimationOverridesArgs) => boolean;\r\n\r\nconst scratchIgnoreAnimationOverridesArgs = {\r\n elementId: { lower: 0, upper: 0 },\r\n animationNodeId: 0,\r\n};\r\n\r\n/** Specifies how to customize the appearance of individual [[Feature]]s, typically within the context of a [Viewport]($frontend).\r\n * Individual aspects of a feature's appearance - like visibility, color, and transparency - are overridden by supplying a [[FeatureAppearance]].\r\n * Those overrides can be specified on the basis of the feature's model, element, and/or subcategory. A default set of overrides can also be specified to\r\n * apply to the appearance of any feature not otherwise overridden.\r\n *\r\n * It is possible to override multiple aspects of a feature on different bases. For example, you might specify that all features belonging to subcategory \"A\" should be drawn in red,\r\n * and that all features belonging to model \"B\" should be drawn 50% transparent. In this case, a feature belonging to both subcategory \"A\" and model \"B\" will be drawn as 50% transparent red -\r\n * the separate overrides are combined to produce the feature's overall appearance.\r\n *\r\n * In the case of conflicts, there is an order of precedence:\r\n * - Model overrides take highest precedence.\r\n * - Element overrides are of higher precedence than subcategory and animation overrides.\r\n * - Overrides applied by a [[RenderSchedule.Script]]'s [[RenderSchedule.ElementTimeline]] are of higher precedence than subcategory overrides, but can be suppressed on a per-element basis via [[ignoreAnimationOverrides]].\r\n * - Subcategory overrides have lowest precedence.\r\n *\r\n * For example, you might specify that all features belonging to subcategory \"A\" should be drawn in red, and all those belonging to model \"B\" should be drawn in green.\r\n * Then a feature belonging to subcategory \"A\" and model \"B\" will be drawn in green, because the model overrides take precedence.\r\n *\r\n * Instances of this class are not typically instantiated by an application directly; instead, an application can implement a [FeatureOverrideProvider]($frontend)\r\n * that augments the overrides supplied by a viewport.\r\n *\r\n * @see [FeatureSymbology.Overrides]($frontend) to create overrides specific to a [Viewport]($frontend) or [ViewState]($frontend).\r\n * @see [FeatureOverrideProvider]($frontend) to customize the appearance of features within a [Viewport]($frontend).\r\n * @public\r\n */\r\nexport class FeatureOverrides implements FeatureAppearanceSource {\r\n /** @internal */\r\n protected readonly _ignoreAnimationOverrides: IgnoreAnimationOverrides[] = [];\r\n /** Ids of elements that should never be drawn. This takes precedence over [[alwaysDrawn]]. @internal */\r\n protected readonly _neverDrawn = new Id64.Uint32Set();\r\n /** Ids of elements that should always be drawn. [[neverDrawn]] takes precedence over this set. @internal */\r\n protected readonly _alwaysDrawn = new Id64.Uint32Set();\r\n /** If true, no elements *except* those defined in the \"always drawn\" set will be drawn.\r\n * @see [[setAlwaysDrawn]]\r\n */\r\n public isAlwaysDrawnExclusive = false;\r\n /** If true, the always-drawn elements are drawn even if their subcategories are not visible.\r\n * @see [[setAlwaysDrawn]]\r\n */\r\n public alwaysDrawnIgnoresSubCategory = true;\r\n /** If true, all subcategories are considered visible. This is used for drawing sheets via section callouts in the absence of an actual sheet view.\r\n * @internal\r\n */\r\n public ignoreSubCategory = false;\r\n\r\n /** Overrides applied to any feature not explicitly overridden. @internal */\r\n protected _defaultOverrides = FeatureAppearance.defaults;\r\n /** Whether construction geometry should be drawn. @internal */\r\n protected _constructions = false;\r\n /** Whether dimensions should be drawn. @internal */\r\n protected _dimensions = false;\r\n /** Whether area patterns should be drawn. @internal */\r\n protected _patterns = false;\r\n /** Whether line weights should be applied. If false, all lines are rendered 1-pixel wide. @internal */\r\n protected _lineWeights = true;\r\n\r\n /** Overrides applied to all elements belonging to each model. @internal */\r\n protected readonly _modelOverrides = new Id64.Uint32Map<FeatureAppearance>();\r\n /** Overrides applied to specific elements. @internal */\r\n protected readonly _elementOverrides = new Id64.Uint32Map<FeatureAppearance>();\r\n /** Overrides applied to geometry belonging to each subcategory. @internal */\r\n protected readonly _subCategoryOverrides = new Id64.Uint32Map<FeatureAppearance>();\r\n /** The set of displayed subcategories. Geometry belonging to subcategories not included in this set will not be drawn. @internal */\r\n protected readonly _visibleSubCategories = new Id64.Uint32Set();\r\n /** Display priorities assigned to subcategories, possibly overridden by display style. Only applicable for plan projection models. @internal */\r\n protected readonly _subCategoryPriorities = new Id64.Uint32Map<number>();\r\n\r\n /** Per-model, a set of subcategories whose visibility should be inverted for elements within that model.\r\n * Populated by Viewport.\r\n * @internal\r\n */\r\n protected readonly _modelSubCategoryOverrides = new Id64.Uint32Map<Id64.Uint32Set>();\r\n\r\n /** Ids of animation nodes that should never be drawn.\r\n * @internal\r\n */\r\n public readonly neverDrawnAnimationNodes = new Set<number>();\r\n /** Mapping of animation node Ids to overrides applied to the corresponding animation nodes.\r\n * @internal\r\n */\r\n public readonly animationNodeOverrides = new Map<number, FeatureAppearance>();\r\n\r\n /** Accepts a criterion that determines whether color and transparency overrides originating from the view's [[RenderSchedule.Script]] should be ignored for a given element.\r\n * The function receives a description of the element in question and returns `true` if the script's overrides should be ignored.\r\n * Any number of such functions can be registered; if any one of them returns `true`, the script's overrides are not applied to the specified element.\r\n *\r\n * For example, applications commonly emphasize a set of elements by applying a [[FeatureAppearance.emphasized]] override to them, and specifying a highly-transparent\r\n * default appearance to de-emphasize the rest of the elements in the view. If some of the de-emphasized elements' appearances are also being overridden by the schedule script, then\r\n * they won't appear de-emphasized, making it difficult for the emphasized elements to stand out. In situations like this, [FeatureOverrideProvider]($frontend)s like [EmphasizeElements]($frontend) can register an [[IgnoreAnimationOverrides]] function that returns true if the element in question is not in the set of emphasized elements.\r\n */\r\n public ignoreAnimationOverrides(ignore: IgnoreAnimationOverrides): void {\r\n this._ignoreAnimationOverrides.push(ignore);\r\n }\r\n\r\n /** Overrides applied to features for which no other overrides are defined */\r\n public get defaultOverrides(): FeatureAppearance { return this._defaultOverrides; }\r\n /** Whether or not line weights are applied. If false, all lines are drawn with a weight of 1. */\r\n public get lineWeights(): boolean { return this._lineWeights; }\r\n\r\n /** @internal */\r\n public get neverDrawn() { return this._neverDrawn; }\r\n /** @internal */\r\n public get alwaysDrawn() { return this._alwaysDrawn; }\r\n\r\n /** @internal */\r\n protected isNeverDrawn(elemIdLo: number, elemIdHi: number, animationNodeId: number): boolean {\r\n if (this._neverDrawn.has(elemIdLo, elemIdHi))\r\n return true;\r\n else\r\n return this.neverDrawnAnimationNodes.has(animationNodeId);\r\n }\r\n /** @internal */\r\n protected isAlwaysDrawn(idLo: number, idHi: number): boolean { return this._alwaysDrawn.has(idLo, idHi); }\r\n /** Returns true if the [SubCategory]($backend) specified by Id is in the set of visible subcategories. @internal */\r\n public isSubCategoryVisible(idLo: number, idHi: number): boolean { return this._visibleSubCategories.has(idLo, idHi); }\r\n /** @internal */\r\n public isSubCategoryVisibleInModel(subcatLo: number, subcatHi: number, modelLo: number, modelHi: number): boolean {\r\n if (this.ignoreSubCategory)\r\n return true;\r\n\r\n let vis = this.isSubCategoryVisible(subcatLo, subcatHi);\r\n const modelOvr = this._modelSubCategoryOverrides.get(modelLo, modelHi);\r\n if (undefined !== modelOvr && modelOvr.has(subcatLo, subcatHi))\r\n vis = !vis;\r\n\r\n return vis;\r\n }\r\n\r\n /** @internal */\r\n protected getModelOverrides(idLo: number, idHi: number): FeatureAppearance | undefined {\r\n return this._modelOverrides.get(idLo, idHi);\r\n }\r\n\r\n private getElementAnimationOverrides(idLo: number, idHi: number, animationNodeId: number): FeatureAppearance | undefined {\r\n if (this.animationNodeOverrides.size === 0)\r\n return undefined;\r\n\r\n // NB: An animation node Id of zero means \"not animated\". Some providers like EmphasizeElements may provide an appearance override for unanimated nodes.\r\n // That should be preserved.\r\n const app = this.animationNodeOverrides.get(animationNodeId);\r\n if (!app || 0 === animationNodeId || this._ignoreAnimationOverrides.length === 0)\r\n return app;\r\n\r\n const args = scratchIgnoreAnimationOverridesArgs;\r\n args.elementId.lower = idLo;\r\n args.elementId.upper = idHi;\r\n args.animationNodeId = animationNodeId;\r\n return this._ignoreAnimationOverrides.some((ignore) => ignore(args)) ? undefined : app;\r\n }\r\n\r\n /** @internal */\r\n protected getElementOverrides(idLo: number, idHi: number, animationNodeId: number): FeatureAppearance | undefined {\r\n const elemApp = this._elementOverrides.get(idLo, idHi);\r\n const nodeApp = this.getElementAnimationOverrides(idLo, idHi, animationNodeId);\r\n if (elemApp)\r\n return nodeApp ? nodeApp.extendAppearance(elemApp) : elemApp;\r\n\r\n return nodeApp;\r\n }\r\n\r\n /** @internal */\r\n protected getSubCategoryOverrides(idLo: number, idHi: number): FeatureAppearance | undefined { return this._subCategoryOverrides.get(idLo, idHi); }\r\n\r\n /** Add a [SubCategory]($backend) to the set of visible subcategories. */\r\n public setVisibleSubCategory(id: Id64String): void { this._visibleSubCategories.addId(id); }\r\n /** Specify the Id of an element that should never be drawn. */\r\n public setNeverDrawn(id: Id64String): void { this._neverDrawn.addId(id); }\r\n /** Specify the Id of an element that should always be drawn. */\r\n public setAlwaysDrawn(id: Id64String): void { this._alwaysDrawn.addId(id); }\r\n /** Specify the Id of a animation node that should never be drawn. */\r\n public setAnimationNodeNeverDrawn(id: number): void { this.neverDrawnAnimationNodes.add(id); }\r\n /** Specify the Ids of elements that should never be drawn. */\r\n public setNeverDrawnSet(ids: Iterable<Id64String>) { copyIdSetToUint32Set(this._neverDrawn, ids); }\r\n /** Specify the Ids of elements that should always be drawn. */\r\n public setAlwaysDrawnSet(ids: Iterable<Id64String>, exclusive: boolean, ignoreSubCategory = true) {\r\n copyIdSetToUint32Set(this._alwaysDrawn, ids);\r\n this.isAlwaysDrawnExclusive = exclusive;\r\n this.alwaysDrawnIgnoresSubCategory = ignoreSubCategory;\r\n }\r\n\r\n /** Returns the feature's appearance overrides, or undefined if the feature is not visible. */\r\n public getFeatureAppearance(feature: Feature, modelId: Id64String, type: BatchType = BatchType.Primary, animationNodeId = 0): FeatureAppearance | undefined {\r\n return this.getAppearance(\r\n Id64.getLowerUint32(feature.elementId), Id64.getUpperUint32(feature.elementId),\r\n Id64.getLowerUint32(feature.subCategoryId), Id64.getUpperUint32(feature.subCategoryId),\r\n feature.geometryClass,\r\n Id64.getLowerUint32(modelId), Id64.getUpperUint32(modelId),\r\n type, animationNodeId);\r\n }\r\n\r\n private static readonly _weight1Appearance = FeatureAppearance.fromJSON({ weight: 1 });\r\n\r\n /** Returns a feature's appearance overrides, or undefined if the feature is not visible.\r\n * Takes Id64s as pairs of unsigned 32-bit integers for efficiency, because that is how they are stored by the PackedFeatureTable associated with each batch of graphics.\r\n * @see [[getFeatureAppearance]] for an equivalent function that accepts [Id64String]($core-bentley)s instead of integer pairs.\r\n */\r\n public getAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number): FeatureAppearance | undefined {\r\n if (BatchType.VolumeClassifier === type || BatchType.PlanarClassifier === type)\r\n return this.getClassifierAppearance(elemLo, elemHi, subcatLo, subcatHi, modelLo, modelHi, animationNodeId);\r\n\r\n let app = !this._lineWeights ? FeatureOverrides._weight1Appearance : FeatureAppearance.defaults;\r\n const modelApp = this.getModelOverrides(modelLo, modelHi);\r\n if (undefined !== modelApp)\r\n app = modelApp.extendAppearance(app);\r\n\r\n // Is the element visible?\r\n let elemApp, alwaysDrawn = false;\r\n\r\n if (Id64.isValidUint32Pair(elemLo, elemHi)) {\r\n if (this.isNeverDrawn(elemLo, elemHi, animationNodeId))\r\n return undefined;\r\n\r\n alwaysDrawn = this.isAlwaysDrawn(elemLo, elemHi);\r\n if (!alwaysDrawn && this.isAlwaysDrawnExclusive)\r\n return undefined;\r\n\r\n // Element overrides take precedence\r\n elemApp = this.getElementOverrides(elemLo, elemHi, animationNodeId);\r\n if (undefined !== elemApp)\r\n app = undefined !== modelApp ? elemApp.extendAppearance(app) : elemApp;\r\n }\r\n\r\n let subCatApp;\r\n if (!this.ignoreSubCategory && Id64.isValidUint32Pair(subcatLo, subcatHi)) {\r\n if ((!alwaysDrawn || !this.alwaysDrawnIgnoresSubCategory) && !this.isSubCategoryVisibleInModel(subcatLo, subcatHi, modelLo, modelHi))\r\n return undefined;\r\n\r\n subCatApp = this.getSubCategoryOverrides(subcatLo, subcatHi);\r\n if (undefined !== subCatApp)\r\n app = subCatApp.extendAppearance(app);\r\n }\r\n\r\n // Only apply default if *no* appearance was explicitly registered (doesn't matter if registered appearance does not actually override anything)\r\n if (undefined === elemApp && undefined === modelApp && undefined === subCatApp)\r\n app = this._defaultOverrides.extendAppearance(app);\r\n\r\n let visible = alwaysDrawn || this.isClassVisible(geomClass);\r\n if (visible && app.isFullyTransparent)\r\n visible = false; // don't bother rendering something with full transparency...\r\n\r\n return visible ? app : undefined;\r\n }\r\n\r\n /** Classifiers behave totally differently...in particular they are never invisible unless fully-transparent.\r\n * @internal\r\n */\r\n protected getClassifierAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, modelLo: number, modelHi: number, animationNodeId: number): FeatureAppearance | undefined {\r\n let app = FeatureAppearance.defaults;\r\n const modelApp = this.getModelOverrides(modelLo, modelHi);\r\n if (undefined !== modelApp)\r\n app = modelApp.extendAppearance(app);\r\n\r\n const elemApp = this.getElementOverrides(elemLo, elemHi, animationNodeId);\r\n if (undefined !== elemApp)\r\n app = undefined !== modelApp ? elemApp.extendAppearance(app) : elemApp;\r\n\r\n if (!this.ignoreSubCategory && Id64.isValidUint32Pair(subcatLo, subcatHi)) {\r\n const subCat = this.getSubCategoryOverrides(subcatLo, subcatHi);\r\n if (undefined !== subCat)\r\n app = subCat.extendAppearance(app);\r\n }\r\n\r\n if (undefined === elemApp && undefined === modelApp)\r\n app = this._defaultOverrides.extendAppearance(app);\r\n\r\n // NB: A fully-transparent classifier means the classifier is a clip mask - classified pixels will be discarded.\r\n return app;\r\n }\r\n\r\n /** Return whether geometry of the specified class should be drawn.\r\n * @see [[ViewFlags.constructions]], [[ViewFlags.dimensions]], and [[ViewFlags.patterns]].\r\n */\r\n public isClassVisible(geomClass: GeometryClass): boolean {\r\n switch (geomClass) {\r\n case GeometryClass.Construction: return this._constructions;\r\n case GeometryClass.Dimension: return this._dimensions;\r\n case GeometryClass.Pattern: return this._patterns;\r\n default: return true;\r\n }\r\n }\r\n\r\n /** Specify overrides for all elements belonging to a specified [GeometricModel]($backend), or all geometry belonging to a specified [GeometricElement]($backend) or [SubCategory]($backend). */\r\n public override(args: OverrideFeatureAppearanceArgs): void {\r\n let id: Id64String;\r\n let map: Id64.Uint32Map<FeatureAppearance>;\r\n if (undefined !== args.elementId) {\r\n id = args.elementId;\r\n map = this._elementOverrides;\r\n } else if (undefined !== args.modelId) {\r\n id = args.modelId;\r\n map = this._modelOverrides;\r\n } else {\r\n id = args.subCategoryId;\r\n map = this._subCategoryOverrides;\r\n }\r\n\r\n let app = args.appearance;\r\n const idLo = Id64.getLowerUint32(id);\r\n const idHi = Id64.getUpperUint32(id);\r\n\r\n if (undefined !== args.elementId && this.isNeverDrawn(idLo, idHi, 0))\r\n return;\r\n\r\n const replace = \"replace\" === args.onConflict;\r\n const existing = replace ? undefined : map.get(idLo, idHi);\r\n if (existing) {\r\n assert(\"replace\" !== args.onConflict);\r\n switch (args.onConflict) {\r\n case \"skip\":\r\n return;\r\n case \"extend\":\r\n app = app.extendAppearance(existing);\r\n break;\r\n default:\r\n app = existing.extendAppearance(app);\r\n break;\r\n }\r\n }\r\n\r\n map.set(idLo, idHi, app);\r\n }\r\n\r\n /** Specify overrides for all elements within the specified model.\r\n * @param id The Id of the model.\r\n * @param app The symbology overrides.\r\n * @param replaceExisting Specifies whether to replace a pre-existing override for the same model.\r\n * @note These overrides take priority over all other overrides.\r\n * @note If [[defaultOverrides]] are defined, they will not apply to any element within this model, even if the supplied appearance overrides nothing.\r\n * @deprecated Use [[FeatureOverrides.override]].\r\n */\r\n public overrideModel(id: Id64String, app: FeatureAppearance, replaceExisting: boolean = true): void {\r\n this.override({ modelId: id, appearance: app, onConflict: replaceExisting ? \"replace\" : \"skip\" });\r\n }\r\n\r\n /** Specify overrides for all geometry belonging to the specified [SubCategory]($backend).\r\n * @param id The Id of the subcategory.\r\n * @param app The symbology overrides.\r\n * @param replaceExisting Specifies whether to replace a pre-existing override for the same subcategory.\r\n * @note These overrides have lower priority than element and model overrides.\r\n * @note If [[defaultOverrides]] are defined, they will not apply to any geometry within this subcategory, even if the supplied appearance overrides nothing.\r\n * @deprecated Use [[FeatureOverrides.override]].\r\n */\r\n public overrideSubCategory(id: Id64String, app: FeatureAppearance, replaceExisting: boolean = true): void {\r\n this.override({ subCategoryId: id, appearance: app, onConflict: replaceExisting ? \"replace\" : \"skip\" });\r\n }\r\n\r\n /** Specify overrides for all geometry originating from the specified element.\r\n * @param id The Id of the element.\r\n * @param app The symbology overrides.\r\n * @param replaceExisting Specifies whether to replace a pre-existing override for the same element.\r\n * @note These overrides take precedence over subcategory overrides, but not over model overrides.\r\n * @note If [[defaultOverrides]] are defined, they will not apply to this element, even if the supplied appearance overrides nothing.\r\n * @deprecated Use [[FeatureOverrides.override]].\r\n */\r\n public overrideElement(id: Id64String, app: FeatureAppearance, replaceExisting: boolean = true): void {\r\n this.override({ elementId: id, appearance: app, onConflict: replaceExisting ? \"replace\" : \"skip\" });\r\n }\r\n\r\n /** Specify overrides for all geometry originating from the specified animation node.\r\n * @param id The Id of the animation node.\r\n * @param app The symbology overrides.\r\n * @note These overrides do not take precedence over element overrides.\r\n */\r\n public overrideAnimationNode(id: number, app: FeatureAppearance): void {\r\n this.animationNodeOverrides.set(id, app);\r\n }\r\n\r\n /** Defines a default appearance to be applied to any [[Feature]] *not* explicitly overridden.\r\n * @param appearance The symbology overrides.\r\n * @param replaceExisting Specifies whether to replace the current default overrides if they are already defined.\r\n */\r\n public setDefaultOverrides(appearance: FeatureAppearance, replaceExisting: boolean = true): void {\r\n if (replaceExisting || !appearance.overridesSymbology)\r\n this._defaultOverrides = appearance;\r\n }\r\n\r\n /** Get the display priority of a subcategory. This is only relevant when using [[PlanProjectionSettings]].\r\n * @internal\r\n */\r\n public getSubCategoryPriority(idLo: number, idHi: number): number {\r\n return this._subCategoryPriorities.get(idLo, idHi) ?? 0;\r\n }\r\n\r\n /** Construct a new Overrides that overrides nothing.\r\n * @see [FeatureSymbology.Overrides]($frontend) to construct overrides based on a [ViewState]($frontend) or [Viewport]($frontend).\r\n */\r\n public constructor() {\r\n //\r\n }\r\n\r\n /** Returns true if geometry belonging to the specified subcategory will be drawn. */\r\n public isSubCategoryIdVisible(id: Id64String): boolean { return this.isSubCategoryVisible(Id64.getLowerUint32(id), Id64.getUpperUint32(id)); }\r\n /** Returns the overrides applied to geometry belonging to the specified model, if any such are defined. */\r\n public getModelOverridesById(id: Id64String): FeatureAppearance | undefined { return this.getModelOverrides(Id64.getLowerUint32(id), Id64.getUpperUint32(id)); }\r\n /** Returns the overrides applied to geometry belonging to the specified element, if any such are defined. */\r\n public getElementOverridesById(id: Id64String): FeatureAppearance | undefined { return this.getElementOverrides(Id64.getLowerUint32(id), Id64.getUpperUint32(id), 0); }\r\n /** Returns the overrides applied to geometry belonging to the specified subcategory, if any such are defined. */\r\n public getSubCategoryOverridesById(id: Id64String): FeatureAppearance | undefined { return this.getSubCategoryOverrides(Id64.getLowerUint32(id), Id64.getUpperUint32(id)); }\r\n\r\n /** Returns true if the specified Feature will be drawn. */\r\n public isFeatureVisible(feature: Feature): boolean {\r\n const { elementId, subCategoryId, geometryClass } = feature;\r\n const isValidElemId = !Id64.isInvalid(elementId);\r\n const elemIdParts = isValidElemId ? Id64.getUint32Pair(elementId) : undefined;\r\n\r\n if (undefined !== elemIdParts && this.isNeverDrawn(elemIdParts.lower, elemIdParts.upper, 0))\r\n return false;\r\n\r\n const alwaysDrawn = undefined !== elemIdParts && this.isAlwaysDrawn(elemIdParts.lower, elemIdParts.upper);\r\n if (alwaysDrawn || this.isAlwaysDrawnExclusive)\r\n return alwaysDrawn;\r\n\r\n // NB: This ignores per-model subcategory visibility overrides, because caller did not specify a model.\r\n if (!this.isSubCategoryIdVisible(subCategoryId))\r\n return false;\r\n\r\n return this.isClassVisible(geometryClass);\r\n }\r\n}\r\n\r\n/** Interface adopted by an object that can supply the [[FeatureAppearance]] supplied by a [[FeatureAppearanceSource]].\r\n * This is useful for selectively overriding or agumenting a [Viewport]($frontend)'s symbology overrides.\r\n * A typical implementation will invoke [[FeatureAppearanceSource.getAppeaprance]] and customize the returned appearance.\r\n * @see [[FeatureAppearanceProvider.chain]] to chain two providers together.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface FeatureAppearanceProvider {\r\n /** Supply the desired appearance overrides for the specified [[Feature]], or `undefined` if the feature should not be drawn.\r\n * The feature is described by its components for efficiency reasons.\r\n * @param source The base symbology overrides, e.g., typically defined by a [Viewport]($frontend).\r\n * @param elemLo The lower 32 bits of the feature's element Id.\r\n * @param elemHi The upper 32 bits of the feature's element Id.\r\n * @param subcatLo The lower 32 bits of the feature's subcategory Id.\r\n * @param subcatHi The upper 32 bits of the feature's subcategory Id.\r\n * @param geomClass The geometry class of the feature.\r\n * @param modelLo The lower 32 bits of the feature's model Id.\r\n * @param modelHi The upper 32 bits of the feature's model Id.\r\n * @param type The type of batch to which the feature belongs.\r\n * @param animationNodeId The Id of the corresponding node in the [[RenderSchedule]], or `0` if none.\r\n * @returns The desired appearance overrides, or `undefined` to indicate the feature should not be displayed.\r\n * @see [[FeatureAppearanceSource.getAppearance]] to forward the request to the source.\r\n * @see [Id64.isValidUint32Pair]($core-bentley) to determine if the components of an [Id64String]($core-bentley) represent a valid Id.\r\n */\r\n getFeatureAppearance(source: FeatureAppearanceSource, elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number): FeatureAppearance | undefined;\r\n}\r\n\r\n/** @public */\r\nexport namespace FeatureAppearanceProvider {\r\n /** Produce a FeatureAppearanceSource for which `getAppearance()` returns the appearance specified in `source`, potentially modified by `provider`. */\r\n function wrap(source: FeatureAppearanceSource, provider: FeatureAppearanceProvider): FeatureAppearanceSource {\r\n return {\r\n getAppearance: (elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number) => {\r\n return provider.getFeatureAppearance(source, elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\r\n },\r\n };\r\n }\r\n\r\n /** Create a provider that obtains each feature's appearance from the source, and if the feature is visible, modifies the appearance.\r\n * @param supplementAppearance A function accepting the feature's base appearance and returning a supplemental appearance.\r\n * @public\r\n */\r\n export function supplement(supplementAppearance: (appearance: FeatureAppearance) => FeatureAppearance): FeatureAppearanceProvider {\r\n return {\r\n getFeatureAppearance: (source: FeatureAppearanceSource, elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number) => {\r\n const app = source.getAppearance(elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\r\n return app ? supplementAppearance(app) : app;\r\n },\r\n };\r\n }\r\n\r\n /** Chain two FeatureAppearanceProviders together such that `first`'s `getFeatureAppearance` function is applied before `second`'s.\r\n * If `second` invokes `source.getAppearance()`, the returned appearance will include any modifications applied by `first`.\r\n * @public\r\n */\r\n export function chain(first: FeatureAppearanceProvider, second: FeatureAppearanceProvider): FeatureAppearanceProvider {\r\n if (first === second)\r\n return first;\r\n\r\n return {\r\n getFeatureAppearance: (source: FeatureAppearanceSource, elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number) => {\r\n return second.getFeatureAppearance(wrap(source, first), elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\r\n },\r\n };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"FeatureSymbology.js","sourceRoot":"","sources":["../../src/FeatureSymbology.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAc,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAW,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAGrD,SAAS,oBAAoB,CAAC,GAAmB,EAAE,GAAqB;IACtE,GAAG,CAAC,KAAK,EAAE,CAAC;IACZ,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC3B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;KAChB;SAAM;QACL,KAAK,MAAM,EAAE,IAAI,GAAG;YAClB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;KACjB;AACH,CAAC;AA2BD;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAwL5B,YAAsB,KAA6B;QACjD,IAAI,CAAC,GAAG,GAAG,SAAS,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAEnC,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM;YAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;QAEvD,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE;YACnC,IAAI,KAAK,CAAC,yBAAyB;gBACjC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YAExC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;YAEhE,4BAA4B;YAC5B,MAAM,UAAU,GAAG,MAAM,CAAC;YAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,GAAG,UAAU;gBACtC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;iBACrB,IAAI,IAAI,CAAC,YAAY,GAAG,UAAU;gBACrC,IAAI,CAAC,YAAY,GAAG,GAAG,CAAC;SAC3B;IACH,CAAC;IAvLM,MAAM,CAAC,QAAQ,CAAC,KAA8B;QACnD,IAAI,SAAS,KAAK,KAAK,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,GAAG,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM,IAAI,SAAS,KAAK,KAAK,CAAC,YAAY,IAAI,SAAS,KAAK,KAAK,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YAC5N,OAAO,IAAI,CAAC,QAAQ,CAAC;;YAErB,OAAO,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,OAAO,CAAC,KAAe;QACnC,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,QAAQ,CAAC,KAAe,EAAE,yBAAyB,GAAG,KAAK;QACvE,OAAO,IAAI,CAAC,QAAQ,CAAC;YACnB,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC;YACjC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG;YAClC,yBAAyB,EAAE,yBAAyB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SACxE,CAAC,CAAC;IACL,CAAC;IACD,sEAAsE;IAC/D,MAAM,CAAC,gBAAgB,CAAC,iBAAyB,EAAE,aAAa,GAAG,KAAK;QAC7E,OAAO,IAAI,CAAC,QAAQ,CAAC;YACnB,YAAY,EAAE,iBAAiB;YAC/B,yBAAyB,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SAC5D,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,uBAAuB,CAAC,GAAwB;QAC5D,MAAM,GAAG,GAAG,SAAS,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACnF,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;QACtC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,eAAe,GAAG,SAAS,KAAK,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACpG,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC;IACxG,CAAC;IAED,kFAAkF;IAClF,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,IAAW,YAAY,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACrE,IAAW,qBAAqB,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACvF,IAAW,mBAAmB,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACnF,IAAW,eAAe,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,IAAW,kBAAkB;QAC3B,OAAO,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe;eAC/H,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,qBAAqB,CAAC;IACrD,CAAC;IACD,IAAW,qBAAqB,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACvF,IAAW,kBAAkB,KAAc,OAAO,SAAS,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC;IAChH,yGAAyG;IACzG,IAAW,aAAa,KAAc,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAE9F,MAAM,CAAC,KAAwB;QACpC,IAAI,IAAI,KAAK,KAAK;YAChB,OAAO,IAAI,CAAC;QAEd,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;eAC5B,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;eAC5B,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,YAAY,CAAC;eAC5C,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;eACpC,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,eAAe;eAC9C,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,YAAY;eACxC,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU;eACpC,IAAI,CAAC,yBAAyB,KAAK,KAAK,CAAC,yBAAyB,CAAC;IAC1E,CAAC;IAEM,MAAM;QACX,MAAM,KAAK,GAA2B,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,GAAG;YACV,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAEhC,IAAI,SAAS,KAAK,IAAI,CAAC,MAAM;YAC3B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE7B,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY,EAAE;YACnC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,IAAI,IAAI,CAAC,yBAAyB;gBAChC,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC;SAC1C;QAED,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU;YAC/B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAErC,IAAI,IAAI,KAAK,IAAI,CAAC,eAAe;YAC/B,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAE/B,IAAI,IAAI,KAAK,IAAI,CAAC,YAAY;YAC5B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAE5B,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU;YAC1B,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QAE1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;OAOG;IACI,UAAU,CAAC,YAAoC;QACpD,OAAO;YACL,GAAG,IAAI,CAAC,MAAM,EAAE;YAChB,GAAG,YAAY;SAChB,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,YAAoC;QAC/C,OAAO,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,wJAAwJ;IACjJ,gBAAgB,CAAC,IAAuB;QAC7C,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAC1B,OAAO,IAAI,CAAC;QAEd,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG;YACzB,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACvB,IAAI,SAAS,KAAK,KAAK,CAAC,YAAY;YAClC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACzC,IAAI,SAAS,KAAK,KAAK,CAAC,UAAU;YAChC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACrC,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM;YAC5B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7B,IAAI,SAAS,KAAK,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe;YAC7D,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAC/B,IAAI,SAAS,KAAK,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;YACvD,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;QAC5B,IAAI,SAAS,KAAK,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU;YACnD,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;QAE1B,IAAI,SAAS,KAAK,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,yBAAyB;YACpE,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC;QAEzC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IA6BO,UAAU,CAAC,GAAc;QAC/B,IAAI,SAAS,KAAK,IAAI,CAAC,GAAG;YACxB,OAAO,SAAS,KAAK,GAAG,CAAC;aACtB,IAAI,SAAS,KAAK,GAAG;YACxB,OAAO,KAAK,CAAC;;YAEb,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAEO,mBAAmB,CAAC,MAAe;QACzC,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY;YACjC,OAAO,SAAS,KAAK,MAAM,CAAC;aACzB,IAAI,SAAS,KAAK,MAAM;YAC3B,OAAO,KAAK,CAAC;;YAEb,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9E,CAAC;;AA5MD,4CAA4C;AACrB,0BAAQ,GAAG,IAAI,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAsT9D,MAAM,mCAAmC,GAAG;IAC1C,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;IACjC,eAAe,EAAE,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,OAAO,gBAAgB;IAsW3B;;OAEG;IACH;QAxWA,gBAAgB;QACG,8BAAyB,GAA+B,EAAE,CAAC;QAC9E,wGAAwG;QACrF,gBAAW,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACtD,4GAA4G;QACzF,iBAAY,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACvD;;WAEG;QACI,2BAAsB,GAAG,KAAK,CAAC;QACtC;;WAEG;QACI,kCAA6B,GAAG,IAAI,CAAC;QAC5C;;WAEG;QACI,sBAAiB,GAAG,KAAK,CAAC;QAEjC,4EAA4E;QAClE,sBAAiB,GAAG,iBAAiB,CAAC,QAAQ,CAAC;QACzD,+DAA+D;QACrD,mBAAc,GAAG,KAAK,CAAC;QACjC,oDAAoD;QAC1C,gBAAW,GAAG,KAAK,CAAC;QAC9B,uDAAuD;QAC7C,cAAS,GAAG,KAAK,CAAC;QAC5B,uGAAuG;QAC7F,iBAAY,GAAG,IAAI,CAAC;QAE9B,2EAA2E;QACxD,oBAAe,GAAG,IAAI,IAAI,CAAC,SAAS,EAAqB,CAAC;QAC7E,wDAAwD;QACrC,sBAAiB,GAAG,IAAI,IAAI,CAAC,SAAS,EAAqB,CAAC;QAC/E,6EAA6E;QAC1D,0BAAqB,GAAG,IAAI,IAAI,CAAC,SAAS,EAAqB,CAAC;QACnF,oIAAoI;QACjH,0BAAqB,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAChE,gJAAgJ;QAC7H,2BAAsB,GAAG,IAAI,IAAI,CAAC,SAAS,EAAU,CAAC;QAEzE;;;WAGG;QACgB,+BAA0B,GAAG,IAAI,IAAI,CAAC,SAAS,EAAkB,CAAC;QAErF;;WAEG;QACa,6BAAwB,GAAG,IAAI,GAAG,EAAU,CAAC;QAC7D;;WAEG;QACa,2BAAsB,GAAG,IAAI,GAAG,EAA6B,CAAC;QAmT5E,EAAE;IACJ,CAAC;IAlTD;;;;;;;OAOG;IACI,wBAAwB,CAAC,MAAgC;QAC9D,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,6EAA6E;IAC7E,IAAW,gBAAgB,KAAwB,OAAO,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnF,iGAAiG;IACjG,IAAW,WAAW,KAAc,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAE/D,gBAAgB;IAChB,IAAW,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACpD,gBAAgB;IAChB,IAAW,WAAW,KAAK,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAEtD,gBAAgB;IACN,YAAY,CAAC,QAAgB,EAAE,QAAgB,EAAE,eAAuB;QAChF,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC1C,OAAO,IAAI,CAAC;;YAEZ,OAAO,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC9D,CAAC;IACD,gBAAgB;IACN,aAAa,CAAC,IAAY,EAAE,IAAY,IAAa,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1G,oHAAoH;IAC7G,oBAAoB,CAAC,IAAY,EAAE,IAAY,IAAa,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACvH,gBAAgB;IACT,2BAA2B,CAAC,QAAgB,EAAE,QAAgB,EAAE,OAAe,EAAE,OAAe;QACrG,IAAI,IAAI,CAAC,iBAAiB;YACxB,OAAO,IAAI,CAAC;QAEd,IAAI,GAAG,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACvE,IAAI,SAAS,KAAK,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAC5D,GAAG,GAAG,CAAC,GAAG,CAAC;QAEb,OAAO,GAAG,CAAC;IACb,CAAC;IAED,gBAAgB;IACN,iBAAiB,CAAC,IAAY,EAAE,IAAY;QACpD,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAEO,4BAA4B,CAAC,IAAY,EAAE,IAAY,EAAE,eAAuB;QACtF,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,KAAK,CAAC;YACxC,OAAO,SAAS,CAAC;QAEnB,wJAAwJ;QACxJ,4BAA4B;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7D,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,eAAe,IAAI,IAAI,CAAC,yBAAyB,CAAC,MAAM,KAAK,CAAC;YAC9E,OAAO,GAAG,CAAC;QAEb,MAAM,IAAI,GAAG,mCAAmC,CAAC;QACjD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IACzF,CAAC;IAED,gBAAgB;IACN,mBAAmB,CAAC,IAAY,EAAE,IAAY,EAAE,eAAuB;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,4BAA4B,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;QAC/E,IAAI,OAAO;YACT,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAE/D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,gBAAgB;IACN,uBAAuB,CAAC,IAAY,EAAE,IAAY,IAAmC,OAAO,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAEnJ,yEAAyE;IAClE,qBAAqB,CAAC,EAAc,IAAU,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5F,+DAA+D;IACxD,aAAa,CAAC,EAAc,IAAU,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1E,gEAAgE;IACzD,cAAc,CAAC,EAAc,IAAU,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,qEAAqE;IAC9D,0BAA0B,CAAC,EAAU,IAAU,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9F,8DAA8D;IACvD,gBAAgB,CAAC,GAAyB,IAAI,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACnG,+DAA+D;IACxD,iBAAiB,CAAC,GAAyB,EAAE,SAAkB,EAAE,iBAAiB,GAAG,IAAI;QAC9F,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QACxC,IAAI,CAAC,6BAA6B,GAAG,iBAAiB,CAAC;IACzD,CAAC;IAED,8FAA8F;IACvF,oBAAoB,CAAC,OAAgB,EAAE,OAAmB,EAAE,OAAkB,SAAS,CAAC,OAAO,EAAE,eAAe,GAAG,CAAC;QACzH,OAAO,IAAI,CAAC,aAAa,CACvB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,EAC9E,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,EACtF,OAAO,CAAC,aAAa,EACrB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAC1D,IAAI,EAAE,eAAe,CAAC,CAAC;IAC3B,CAAC;IAID;;;OAGG;IACI,aAAa,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,QAAgB,EAAE,SAAwB,EAAE,OAAe,EAAE,OAAe,EAAE,IAAe,EAAE,eAAuB;QAC3L,IAAI,SAAS,CAAC,gBAAgB,KAAK,IAAI,IAAI,SAAS,CAAC,gBAAgB,KAAK,IAAI;YAC5E,OAAO,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;QAE7G,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAChG,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,SAAS,KAAK,QAAQ;YACxB,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAEvC,0BAA0B;QAC1B,IAAI,OAAO,EAAE,WAAW,GAAG,KAAK,CAAC;QAEjC,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YAC1C,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC;gBACpD,OAAO,SAAS,CAAC;YAEnB,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,sBAAsB;gBAC7C,OAAO,SAAS,CAAC;YAEnB,oCAAoC;YACpC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;YACpE,IAAI,SAAS,KAAK,OAAO;gBACvB,GAAG,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;SAC1E;QAED,IAAI,SAAS,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACzE,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC;gBAClI,OAAO,SAAS,CAAC;YAEnB,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC7D,IAAI,SAAS,KAAK,SAAS;gBACzB,GAAG,GAAG,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;SACzC;QAED,gJAAgJ;QAChJ,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS;YAC5E,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAErD,IAAI,OAAO,GAAG,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,OAAO,IAAI,GAAG,CAAC,kBAAkB;YACnC,OAAO,GAAG,KAAK,CAAC,CAAC,6DAA6D;QAEhF,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IACnC,CAAC;IAED;;OAEG;IACO,uBAAuB,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,QAAgB,EAAE,OAAe,EAAE,OAAe,EAAE,eAAuB;QAC7J,IAAI,GAAG,GAAG,iBAAiB,CAAC,QAAQ,CAAC;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC1D,IAAI,SAAS,KAAK,QAAQ;YACxB,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAEvC,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;QAC1E,IAAI,SAAS,KAAK,OAAO;YACvB,GAAG,GAAG,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAEzE,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE;YACzE,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAChE,IAAI,SAAS,KAAK,MAAM;gBACtB,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;SACtC;QAED,IAAI,SAAS,KAAK,OAAO,IAAI,SAAS,KAAK,QAAQ;YACjD,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAErD,gHAAgH;QAChH,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,SAAwB;QAC5C,QAAQ,SAAS,EAAE;YACjB,KAAK,aAAa,CAAC,YAAY,CAAC,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC;YAC5D,KAAK,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC;YACtD,KAAK,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC;YAClD,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;SACtB;IACH,CAAC;IAED,gMAAgM;IACzL,QAAQ,CAAC,IAAmC;QACjD,IAAI,EAAc,CAAC;QACnB,IAAI,GAAsC,CAAC;QAC3C,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,EAAE;YAChC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YACpB,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC;SAC9B;aAAM,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;YACrC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;YAClB,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC;SAC5B;aAAM;YACL,EAAE,GAAG,IAAI,CAAC,aAAa,CAAC;YACxB,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC;SAClC;QAED,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAErC,IAAI,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,OAAO;QAET,MAAM,OAAO,GAAG,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC;QAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,QAAQ,EAAE;YACZ,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;YACtC,QAAQ,IAAI,CAAC,UAAU,EAAE;gBACvB,KAAK,MAAM;oBACT,OAAO;gBACT,KAAK,QAAQ;oBACX,GAAG,GAAG,GAAG,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;oBACrC,MAAM;gBACR;oBACE,GAAG,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBACrC,MAAM;aACT;SACF;QAED,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACI,aAAa,CAAC,EAAc,EAAE,GAAsB,EAAE,kBAA2B,IAAI;QAC1F,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACpG,CAAC;IAED;;;;;;;OAOG;IACI,mBAAmB,CAAC,EAAc,EAAE,GAAsB,EAAE,kBAA2B,IAAI;QAChG,IAAI,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED;;;;;;;OAOG;IACI,eAAe,CAAC,EAAc,EAAE,GAAsB,EAAE,kBAA2B,IAAI;QAC5F,IAAI,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACtG,CAAC;IAED;;;;OAIG;IACI,qBAAqB,CAAC,EAAU,EAAE,GAAsB;QAC7D,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED;;;OAGG;IACI,mBAAmB,CAAC,UAA6B,EAAE,kBAA2B,IAAI;QACvF,IAAI,eAAe,IAAI,CAAC,UAAU,CAAC,kBAAkB;YACnD,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,sBAAsB,CAAC,IAAY,EAAE,IAAY;;QACtD,OAAO,MAAA,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,mCAAI,CAAC,CAAC;IAC1D,CAAC;IASD,qFAAqF;IAC9E,sBAAsB,CAAC,EAAc,IAAa,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9I,2GAA2G;IACpG,qBAAqB,CAAC,EAAc,IAAmC,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAChK,6GAA6G;IACtG,uBAAuB,CAAC,EAAc,IAAmC,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvK,iHAAiH;IAC1G,2BAA2B,CAAC,EAAc,IAAmC,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5K,2DAA2D;IACpD,gBAAgB,CAAC,OAAgB;QACtC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAC5D,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE9E,IAAI,SAAS,KAAK,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YACzF,OAAO,KAAK,CAAC;QAEf,MAAM,WAAW,GAAG,SAAS,KAAK,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1G,IAAI,WAAW,IAAI,IAAI,CAAC,sBAAsB;YAC5C,OAAO,WAAW,CAAC;QAErB,uGAAuG;QACvG,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC;YAC7C,OAAO,KAAK,CAAC;QAEf,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IAC5C,CAAC;;AAnOuB,mCAAkB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAiQzF,cAAc;AACd,MAAM,KAAW,yBAAyB,CAqCzC;AArCD,WAAiB,yBAAyB;IACxC,sJAAsJ;IACtJ,SAAS,IAAI,CAAC,MAA+B,EAAE,QAAmC;QAChF,OAAO;YACL,aAAa,EAAE,CAAC,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,QAAgB,EAAE,SAAwB,EAAE,OAAe,EAAE,OAAe,EAAE,IAAe,EAAE,eAAuB,EAAE,EAAE;gBAC1L,OAAO,QAAQ,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;YACvI,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,SAAgB,UAAU,CAAC,oBAA0E;QACnG,OAAO;YACL,oBAAoB,EAAE,CAAC,MAA+B,EAAE,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,QAAgB,EAAE,SAAwB,EAAE,OAAe,EAAE,OAAe,EAAE,IAAe,EAAE,eAAuB,EAAE,EAAE;gBAClO,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;gBACzH,OAAO,GAAG,CAAC,CAAC,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/C,CAAC;SACF,CAAC;IACJ,CAAC;IAPe,oCAAU,aAOzB,CAAA;IAED;;;OAGG;IACH,SAAgB,KAAK,CAAC,KAAgC,EAAE,MAAiC;QACvF,IAAI,KAAK,KAAK,MAAM;YAClB,OAAO,KAAK,CAAC;QAEf,OAAO;YACL,oBAAoB,EAAE,CAAC,MAA+B,EAAE,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,QAAgB,EAAE,SAAwB,EAAE,OAAe,EAAE,OAAe,EAAE,IAAe,EAAE,eAAuB,EAAE,EAAE;gBAClO,OAAO,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;YAClJ,CAAC;SACF,CAAC;IACJ,CAAC;IATe,+BAAK,QASpB,CAAA;AACH,CAAC,EArCgB,yBAAyB,KAAzB,yBAAyB,QAqCzC","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 Rendering\r\n */\r\n\r\nimport { assert, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { BatchType, Feature } from \"./FeatureTable\";\r\nimport { ColorDef } from \"./ColorDef\";\r\nimport { GeometryClass } from \"./GeometryParams\";\r\nimport { LinePixels } from \"./LinePixels\";\r\nimport { RgbColor, RgbColorProps } from \"./RgbColor\";\r\nimport { SubCategoryOverride } from \"./SubCategoryOverride\";\r\n\r\nfunction copyIdSetToUint32Set(dst: Id64.Uint32Set, src: Iterable<string>): void {\r\n dst.clear();\r\n if (typeof src === \"string\") {\r\n dst.addId(src);\r\n } else {\r\n for (const id of src)\r\n dst.addId(id);\r\n }\r\n}\r\n\r\n// cspell:ignore subcat subcats\r\n\r\n/** JSON representation of a [[FeatureAppearance]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface FeatureAppearanceProps {\r\n /** See [[FeatureAppearance.rgb]]. */\r\n rgb?: RgbColorProps;\r\n /** See [[FeatureAppearance.weight]]. */\r\n weight?: number;\r\n /** See [[FeatureAppearance.transparency]]. */\r\n transparency?: number;\r\n /** See [[FeatureAppearance.viewDependentTransparency]]. */\r\n viewDependentTransparency?: true;\r\n /** See [[FeatureAppearance.linePixels]]. */\r\n linePixels?: LinePixels;\r\n /** See [[FeatureAppearance.ignoresMaterial]]. */\r\n ignoresMaterial?: true;\r\n /** See [[FeatureAppearance.nonLocatable]]. */\r\n nonLocatable?: true;\r\n /** See [[FeatureAppearance.emphasized]]. */\r\n emphasized?: true;\r\n}\r\n\r\n/** Defines overrides for selected aspects of a [[Feature]]'s symbology.\r\n * Any member defined in the appearance overrides that aspect of symbology for all [[Feature]]s to which the appearance is applied.\r\n * @see [[FeatureOverrides]] to customize the appearance of multiple features.\r\n * @public\r\n */\r\nexport class FeatureAppearance {\r\n /** Overrides the feature's color. */\r\n public readonly rgb?: RgbColor;\r\n /** The width of lines and edges in pixels as an integer in [1, 31]. */\r\n public readonly weight?: number;\r\n /** The transparency in the range [0, 1] where 0 indicates fully opaque and 1 indicates fully transparent.\r\n * @see [[viewDependentTransparency]] for details on how this override interacts with the [DisplayStyle]($backend).\r\n */\r\n public readonly transparency?: number;\r\n /** The pixel pattern applied to lines and edges. */\r\n public readonly linePixels?: LinePixels;\r\n /** If true, don't apply the [[RenderMaterial]] to the feature's surfaces. */\r\n public readonly ignoresMaterial?: true;\r\n /** If true, the feature will not be drawn when using [Viewport.readPixels]($frontend), meaning [Tool]($frontend)s will not be able to interact with it. */\r\n public readonly nonLocatable?: true;\r\n /** If true, the feature will be rendered using the [[Hilite.Settings]] defined by [Viewport.emphasisSettings]($frontend) to make it stand out. */\r\n public readonly emphasized?: true;\r\n /** If true, then [[transparency]] will only be applied if [[ViewFlags.transparency]] is enabled and the current [[RenderMode]] supports transparency.\r\n * Default: false, meaning the transparency will be applied regardless of view flags or render mode.\r\n * This property has no effect if [[transparency]] is `undefined`.\r\n */\r\n public readonly viewDependentTransparency?: true;\r\n\r\n /** An appearance that overrides nothing. */\r\n public static readonly defaults = new FeatureAppearance({});\r\n\r\n public static fromJSON(props?: FeatureAppearanceProps) {\r\n if (undefined === props || (undefined === props.rgb && undefined === props.weight && undefined === props.transparency && undefined === props.linePixels && !props.ignoresMaterial && !props.nonLocatable && !props.emphasized))\r\n return this.defaults;\r\n else\r\n return new FeatureAppearance(props);\r\n }\r\n\r\n /** Create a FeatureAppearance that overrides only the RGB color.\r\n * @note The transparency component of the ColorDef is ignored.\r\n */\r\n public static fromRgb(color: ColorDef): FeatureAppearance {\r\n return this.fromJSON({ rgb: RgbColor.fromColorDef(color) });\r\n }\r\n\r\n /** Create a FeatureAppearance that overrides the RGB and transparency.\r\n * The appearance's transparency is derived from the transparency component of the ColorDef.\r\n */\r\n public static fromRgba(color: ColorDef, viewDependentTransparency = false): FeatureAppearance {\r\n return this.fromJSON({\r\n rgb: RgbColor.fromColorDef(color),\r\n transparency: color.colors.t / 255,\r\n viewDependentTransparency: viewDependentTransparency ? true : undefined,\r\n });\r\n }\r\n /** Create a FeatureAppearance that overrides only the transparency */\r\n public static fromTransparency(transparencyValue: number, viewDependent = false): FeatureAppearance {\r\n return this.fromJSON({\r\n transparency: transparencyValue,\r\n viewDependentTransparency: viewDependent ? true : undefined,\r\n });\r\n }\r\n\r\n /** Create a FeatureAppearance with overrides corresponding to those defined by the supplied SubCategoryOverride.\r\n * @note Subcategory overrides set [[viewDependentTransparency]] to `true`.\r\n */\r\n public static fromSubCategoryOverride(ovr: SubCategoryOverride): FeatureAppearance {\r\n const rgb = undefined !== ovr.color ? RgbColor.fromColorDef(ovr.color) : undefined;\r\n const transparency = ovr.transparency;\r\n const weight = ovr.weight;\r\n const ignoresMaterial = undefined !== ovr.material && Id64.isValid(ovr.material) ? true : undefined;\r\n return this.fromJSON({ rgb, transparency, weight, ignoresMaterial, viewDependentTransparency: true });\r\n }\r\n\r\n /** Returns true if this appearance does not override any aspects of symbology. */\r\n public get matchesDefaults(): boolean {\r\n return this.equals(FeatureAppearance.defaults);\r\n }\r\n\r\n public get overridesRgb(): boolean { return undefined !== this.rgb; }\r\n public get overridesTransparency(): boolean { return undefined !== this.transparency; }\r\n public get overridesLinePixels(): boolean { return undefined !== this.linePixels; }\r\n public get overridesWeight(): boolean { return undefined !== this.weight; }\r\n public get overridesSymbology(): boolean {\r\n return this.overridesRgb || this.overridesTransparency || this.overridesWeight || this.overridesLinePixels || !!this.ignoresMaterial\r\n || this.emphasized || this.overridesNonLocatable;\r\n }\r\n public get overridesNonLocatable(): boolean { return undefined !== this.nonLocatable; }\r\n public get isFullyTransparent(): boolean { return undefined !== this.transparency && this.transparency >= 1.0; }\r\n /** Returns true if any aspect of the appearance is overridden (i.e., if any member is not undefined). */\r\n public get anyOverridden(): boolean { return this.overridesSymbology || this.overridesNonLocatable; }\r\n\r\n public equals(other: FeatureAppearance): boolean {\r\n if (this === other)\r\n return true;\r\n\r\n return this.rgbIsEqual(other.rgb)\r\n && this.weight === other.weight\r\n && this.transparencyIsEqual(other.transparency)\r\n && this.linePixels === other.linePixels\r\n && this.ignoresMaterial === other.ignoresMaterial\r\n && this.nonLocatable === other.nonLocatable\r\n && this.emphasized === other.emphasized\r\n && this.viewDependentTransparency === other.viewDependentTransparency;\r\n }\r\n\r\n public toJSON(): FeatureAppearanceProps {\r\n const props: FeatureAppearanceProps = {};\r\n if (this.rgb)\r\n props.rgb = this.rgb.toJSON();\r\n\r\n if (undefined !== this.weight)\r\n props.weight = this.weight;\r\n\r\n if (undefined !== this.transparency) {\r\n props.transparency = this.transparency;\r\n if (this.viewDependentTransparency)\r\n props.viewDependentTransparency = true;\r\n }\r\n\r\n if (undefined !== this.linePixels)\r\n props.linePixels = this.linePixels;\r\n\r\n if (true === this.ignoresMaterial)\r\n props.ignoresMaterial = true;\r\n\r\n if (true === this.nonLocatable)\r\n props.nonLocatable = true;\r\n\r\n if (true === this.emphasized)\r\n props.emphasized = true;\r\n\r\n return props;\r\n }\r\n\r\n /** Convert this appearance to JSON, and override any properties explicitly specified by `changedProps` in the result.\r\n * Example:\r\n * ```ts\r\n * const base = FeatureAppearance.fromRgba(ColorDef.white); // transparency=0, rgb=white\r\n * const clone = base.cloneProps({ transparency: undefined, weight: 5 }); // transparency=undefined, rgb=white, weight=5\r\n * ```\r\n * @see [[FeatureAppearance.clone]].\r\n */\r\n public cloneProps(changedProps: FeatureAppearanceProps): FeatureAppearanceProps {\r\n return {\r\n ...this.toJSON(),\r\n ...changedProps,\r\n };\r\n }\r\n\r\n /** Create a copy of this appearance, overriding any properties explicitly specified by `changedProps`.\r\n * Example:\r\n * ```ts\r\n * const base = FeatureAppearance.fromRgba(ColorDef.white); // transparency=0, rgb=white\r\n * const clone = base.clone({ transparency: undefined, weight: 5 }); // transparency=undefined, rgb=white, weight=5\r\n * ```\r\n * @see [[FeatureAppearance.cloneProps]].\r\n */\r\n public clone(changedProps: FeatureAppearanceProps): FeatureAppearance {\r\n return FeatureAppearance.fromJSON(this.cloneProps(changedProps));\r\n }\r\n\r\n /** Produce a FeatureAppearance from the supplied appearance in which any aspect not defined by the base appearance is overridden by this appearance. */\r\n public extendAppearance(base: FeatureAppearance): FeatureAppearance {\r\n if (!this.overridesSymbology)\r\n return base;\r\n\r\n const props = base.toJSON();\r\n if (undefined === props.rgb)\r\n props.rgb = this.rgb;\r\n if (undefined === props.transparency)\r\n props.transparency = this.transparency;\r\n if (undefined === props.linePixels)\r\n props.linePixels = this.linePixels;\r\n if (undefined === props.weight)\r\n props.weight = this.weight;\r\n if (undefined === props.ignoresMaterial && this.ignoresMaterial)\r\n props.ignoresMaterial = true;\r\n if (undefined === props.nonLocatable && this.nonLocatable)\r\n props.nonLocatable = true;\r\n if (undefined === props.emphasized && this.emphasized)\r\n props.emphasized = true;\r\n\r\n if (undefined !== props.transparency && this.viewDependentTransparency)\r\n props.viewDependentTransparency = true;\r\n\r\n return FeatureAppearance.fromJSON(props);\r\n }\r\n\r\n protected constructor(props: FeatureAppearanceProps) {\r\n this.rgb = undefined !== props.rgb ? RgbColor.fromJSON(props.rgb) : undefined;\r\n this.weight = props.weight;\r\n this.transparency = props.transparency;\r\n this.linePixels = props.linePixels;\r\n this.ignoresMaterial = props.ignoresMaterial;\r\n this.nonLocatable = props.nonLocatable;\r\n this.emphasized = props.emphasized;\r\n\r\n if (undefined !== this.weight)\r\n this.weight = Math.max(1, Math.min(this.weight, 32));\r\n\r\n if (undefined !== this.transparency) {\r\n if (props.viewDependentTransparency)\r\n this.viewDependentTransparency = true;\r\n\r\n this.transparency = Math.max(0, Math.min(this.transparency, 1));\r\n\r\n // Fix up rounding errors...\r\n const smallDelta = 0.0001;\r\n if (1.0 - this.transparency < smallDelta)\r\n this.transparency = 1.0;\r\n else if (this.transparency < smallDelta)\r\n this.transparency = 0.0;\r\n }\r\n }\r\n\r\n private rgbIsEqual(rgb?: RgbColor): boolean {\r\n if (undefined === this.rgb)\r\n return undefined === rgb;\r\n else if (undefined === rgb)\r\n return false;\r\n else\r\n return this.rgb.equals(rgb);\r\n }\r\n\r\n private transparencyIsEqual(transp?: number): boolean {\r\n if (undefined === this.transparency)\r\n return undefined === transp;\r\n else if (undefined === transp)\r\n return false;\r\n else\r\n return Math.floor(this.transparency * 0xff) === Math.floor(transp * 0xff);\r\n }\r\n}\r\n\r\n/** Interface adopted by an object that can supply a [[FeatureAppearance]] given a low-level description of a [[Feature]].\r\n * @see [[FeatureOverrides]] for the commonly-used implementation.\r\n * @see [[FeatureAppearanceProvider]] to supplement the appearance supplied by this interface.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface FeatureAppearanceSource {\r\n /** Supplies the desired appearance overrides for the specified [[Feature]], or `undefined` if the feature should not be drawn.\r\n * The feature is described by its components for efficiency reasons.\r\n * @param elemLo The lower 32 bits of the feature's element Id.\r\n * @param elemHi The upper 32 bits of the feature's element Id.\r\n * @param subcatLo The lower 32 bits of the feature's subcategory Id.\r\n * @param subcatHi The upper 32 bits of the feature's subcategory Id.\r\n * @param geomClass The geometry class of the feature.\r\n * @param modelLo The lower 32 bits of the feature's model Id.\r\n * @param modelHi The upper 32 bits of the feature's model Id.\r\n * @param type The type of batch to which the feature belongs.\r\n * @param animationNodeId The Id of the corresponding node in the [[RenderSchedule]], or `0` if none.\r\n * @returns The desired appearance overrides, or `undefined` to indicate the feature should not be displayed.\r\n * @see [Id64.isValidUint32Pair]($core-bentley) to determine if the components of an [Id64String]($core-bentley) represent a valid Id.\r\n */\r\n getAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number): FeatureAppearance | undefined;\r\n}\r\n\r\n/** Common options for [[FeatureOverrides.override]].\r\n * @public\r\n */\r\nexport interface OverrideFeatureAppearanceOptions {\r\n /** Specifies the aspects of the [[Feature]]'s appearance to be overridden. */\r\n appearance: FeatureAppearance;\r\n /** Specifies what to do if a [[FeatureAppearance]] has already been configured for the specified element, model, or subcategory by a previous call to [[FeatureOverrides.override]].\r\n * - \"subsume\" (the default): Merge the two appearances using the logic described by [[FeatureAppearance.extendAppearance]] such that any aspect overridden by the existing appearance will be overwritten\r\n * if also overridden by [[appearance]].\r\n * - The resulting appearance is computed as `existingAppearance.extendAppearance(newAppearance)`.\r\n * - \"extend\": Merge the two appearances using the logic described by [[FeatureAppearance.extendAppearance]] such that any aspect overridden by [[appearance]] will only\r\n * apply if that aspect is not already overridden by a previous appearance.\r\n * - The resulting appearance is computed as `newAppearance.extendAppearance(existingAppearance)`.\r\n * - \"replace\": Completely replace the existing appearance with [[appearance]].\r\n * - \"skip\": Keep the existing appearance.\r\n */\r\n onConflict?: \"extend\" | \"subsume\" | \"replace\" | \"skip\";\r\n}\r\n\r\n/** Options for using [[FeatureOverrides.override]] to override the appearance of a [GeometricModel]($backend).\r\n * @public\r\n */\r\nexport interface OverrideModelAppearanceOptions extends OverrideFeatureAppearanceOptions {\r\n /** The Id of the model whose appearance is to be overridden. */\r\n modelId: Id64String;\r\n /** @internal */\r\n elementId?: never;\r\n /** @internal */\r\n subCategoryId?: never;\r\n}\r\n\r\n/** Options for using [[FeatureOverrides.override]] to override the appearance of a [GeometricElement]($backend).\r\n * @public\r\n */\r\nexport interface OverrideElementAppearanceOptions extends OverrideFeatureAppearanceOptions {\r\n /** The Id of the element whose appearance is to be overridden. */\r\n elementId: Id64String;\r\n /** @internal */\r\n modelId?: never;\r\n /** @internal */\r\n subCategoryId?: never;\r\n}\r\n\r\n/** Options for using [[FeatureOverrides.override]] to override the appearance of a [SubCategory]($backend).\r\n * @public\r\n */\r\nexport interface OverrideSubCategoryAppearanceOptions extends OverrideFeatureAppearanceOptions {\r\n /** The Id of the subcategory whose appearance is to be overridden. */\r\n subCategoryId: Id64String;\r\n /** @internal */\r\n modelId?: never;\r\n /** @internal */\r\n elementId?: never;\r\n}\r\n\r\n/** Arguments supplied to [[FeatureOverrides.override]].\r\n * @public\r\n */\r\nexport type OverrideFeatureAppearanceArgs = OverrideElementAppearanceOptions | OverrideModelAppearanceOptions | OverrideSubCategoryAppearanceOptions;\r\n\r\n/** Arguments provided to a function of type [[IgnoreAnimationOverrides]].\r\n * @see [[FeatureOverrides.ignoreAnimationOverrides]] to register such a function.\r\n * @public\r\n */\r\nexport interface IgnoreAnimationOverridesArgs {\r\n /** The Id of the element under consideration.\r\n * @see [Id64.fromUint32Pair]($bentley) to convert a Uint32Pair into an [Id64String]($bentley), if needed.\r\n */\r\n readonly elementId: Readonly<Id64.Uint32Pair>;\r\n /** The [[RenderSchedule.ElementTimeline.batchId]] identifying the [[RenderSchedule.ElementTimeline]] to which the element under consideration belongs. */\r\n readonly animationNodeId: number;\r\n}\r\n\r\n/** A function that can be supplied to [[FeatureOverrides.ignoreAnimationOverrides]] to indicate whether the color or transparency overrides defined\r\n * by the view's [[RenderSchedule.Script]] should be ignored. The arguments describe the element under consideration. The function should return true if that\r\n * element should not have its color or transparency modified by the schedule script.\r\n * @public\r\n */\r\nexport type IgnoreAnimationOverrides = (args: IgnoreAnimationOverridesArgs) => boolean;\r\n\r\nconst scratchIgnoreAnimationOverridesArgs = {\r\n elementId: { lower: 0, upper: 0 },\r\n animationNodeId: 0,\r\n};\r\n\r\n/** Specifies how to customize the appearance of individual [[Feature]]s, typically within the context of a [Viewport]($frontend).\r\n * Individual aspects of a feature's appearance - like visibility, color, and transparency - are overridden by supplying a [[FeatureAppearance]].\r\n * Those overrides can be specified on the basis of the feature's model, element, and/or subcategory. A default set of overrides can also be specified to\r\n * apply to the appearance of any feature not otherwise overridden.\r\n *\r\n * It is possible to override multiple aspects of a feature on different bases. For example, you might specify that all features belonging to subcategory \"A\" should be drawn in red,\r\n * and that all features belonging to model \"B\" should be drawn 50% transparent. In this case, a feature belonging to both subcategory \"A\" and model \"B\" will be drawn as 50% transparent red -\r\n * the separate overrides are combined to produce the feature's overall appearance.\r\n *\r\n * In the case of conflicts, there is an order of precedence:\r\n * - Model overrides take highest precedence.\r\n * - Element overrides are of higher precedence than subcategory and animation overrides.\r\n * - Overrides applied by a [[RenderSchedule.Script]]'s [[RenderSchedule.ElementTimeline]] are of higher precedence than subcategory overrides, but can be suppressed on a per-element basis via [[ignoreAnimationOverrides]].\r\n * - Subcategory overrides have lowest precedence.\r\n *\r\n * For example, you might specify that all features belonging to subcategory \"A\" should be drawn in red, and all those belonging to model \"B\" should be drawn in green.\r\n * Then a feature belonging to subcategory \"A\" and model \"B\" will be drawn in green, because the model overrides take precedence.\r\n *\r\n * Instances of this class are not typically instantiated by an application directly; instead, an application can implement a [FeatureOverrideProvider]($frontend)\r\n * that augments the overrides supplied by a viewport.\r\n *\r\n * @see [FeatureSymbology.Overrides]($frontend) to create overrides specific to a [Viewport]($frontend) or [ViewState]($frontend).\r\n * @see [FeatureOverrideProvider]($frontend) to customize the appearance of features within a [Viewport]($frontend).\r\n * @public\r\n */\r\nexport class FeatureOverrides implements FeatureAppearanceSource {\r\n /** @internal */\r\n protected readonly _ignoreAnimationOverrides: IgnoreAnimationOverrides[] = [];\r\n /** Ids of elements that should never be drawn. This takes precedence over [[alwaysDrawn]]. @internal */\r\n protected readonly _neverDrawn = new Id64.Uint32Set();\r\n /** Ids of elements that should always be drawn. [[neverDrawn]] takes precedence over this set. @internal */\r\n protected readonly _alwaysDrawn = new Id64.Uint32Set();\r\n /** If true, no elements *except* those defined in the \"always drawn\" set will be drawn.\r\n * @see [[setAlwaysDrawn]]\r\n */\r\n public isAlwaysDrawnExclusive = false;\r\n /** If true, the always-drawn elements are drawn even if their subcategories are not visible.\r\n * @see [[setAlwaysDrawn]]\r\n */\r\n public alwaysDrawnIgnoresSubCategory = true;\r\n /** If true, all subcategories are considered visible. This is used for drawing sheets via section callouts in the absence of an actual sheet view.\r\n * @internal\r\n */\r\n public ignoreSubCategory = false;\r\n\r\n /** Overrides applied to any feature not explicitly overridden. @internal */\r\n protected _defaultOverrides = FeatureAppearance.defaults;\r\n /** Whether construction geometry should be drawn. @internal */\r\n protected _constructions = false;\r\n /** Whether dimensions should be drawn. @internal */\r\n protected _dimensions = false;\r\n /** Whether area patterns should be drawn. @internal */\r\n protected _patterns = false;\r\n /** Whether line weights should be applied. If false, all lines are rendered 1-pixel wide. @internal */\r\n protected _lineWeights = true;\r\n\r\n /** Overrides applied to all elements belonging to each model. @internal */\r\n protected readonly _modelOverrides = new Id64.Uint32Map<FeatureAppearance>();\r\n /** Overrides applied to specific elements. @internal */\r\n protected readonly _elementOverrides = new Id64.Uint32Map<FeatureAppearance>();\r\n /** Overrides applied to geometry belonging to each subcategory. @internal */\r\n protected readonly _subCategoryOverrides = new Id64.Uint32Map<FeatureAppearance>();\r\n /** The set of displayed subcategories. Geometry belonging to subcategories not included in this set will not be drawn. @internal */\r\n protected readonly _visibleSubCategories = new Id64.Uint32Set();\r\n /** Display priorities assigned to subcategories, possibly overridden by display style. Only applicable for plan projection models. @internal */\r\n protected readonly _subCategoryPriorities = new Id64.Uint32Map<number>();\r\n\r\n /** Per-model, a set of subcategories whose visibility should be inverted for elements within that model.\r\n * Populated by Viewport.\r\n * @internal\r\n */\r\n protected readonly _modelSubCategoryOverrides = new Id64.Uint32Map<Id64.Uint32Set>();\r\n\r\n /** Ids of animation nodes that should never be drawn.\r\n * @internal\r\n */\r\n public readonly neverDrawnAnimationNodes = new Set<number>();\r\n /** Mapping of animation node Ids to overrides applied to the corresponding animation nodes.\r\n * @internal\r\n */\r\n public readonly animationNodeOverrides = new Map<number, FeatureAppearance>();\r\n\r\n /** Accepts a criterion that determines whether color and transparency overrides originating from the view's [[RenderSchedule.Script]] should be ignored for a given element.\r\n * The function receives a description of the element in question and returns `true` if the script's overrides should be ignored.\r\n * Any number of such functions can be registered; if any one of them returns `true`, the script's overrides are not applied to the specified element.\r\n *\r\n * For example, applications commonly emphasize a set of elements by applying a [[FeatureAppearance.emphasized]] override to them, and specifying a highly-transparent\r\n * default appearance to de-emphasize the rest of the elements in the view. If some of the de-emphasized elements' appearances are also being overridden by the schedule script, then\r\n * they won't appear de-emphasized, making it difficult for the emphasized elements to stand out. In situations like this, [FeatureOverrideProvider]($frontend)s like [EmphasizeElements]($frontend) can register an [[IgnoreAnimationOverrides]] function that returns true if the element in question is not in the set of emphasized elements.\r\n */\r\n public ignoreAnimationOverrides(ignore: IgnoreAnimationOverrides): void {\r\n this._ignoreAnimationOverrides.push(ignore);\r\n }\r\n\r\n /** Overrides applied to features for which no other overrides are defined */\r\n public get defaultOverrides(): FeatureAppearance { return this._defaultOverrides; }\r\n /** Whether or not line weights are applied. If false, all lines are drawn with a weight of 1. */\r\n public get lineWeights(): boolean { return this._lineWeights; }\r\n\r\n /** @internal */\r\n public get neverDrawn() { return this._neverDrawn; }\r\n /** @internal */\r\n public get alwaysDrawn() { return this._alwaysDrawn; }\r\n\r\n /** @internal */\r\n protected isNeverDrawn(elemIdLo: number, elemIdHi: number, animationNodeId: number): boolean {\r\n if (this._neverDrawn.has(elemIdLo, elemIdHi))\r\n return true;\r\n else\r\n return this.neverDrawnAnimationNodes.has(animationNodeId);\r\n }\r\n /** @internal */\r\n protected isAlwaysDrawn(idLo: number, idHi: number): boolean { return this._alwaysDrawn.has(idLo, idHi); }\r\n /** Returns true if the [SubCategory]($backend) specified by Id is in the set of visible subcategories. @internal */\r\n public isSubCategoryVisible(idLo: number, idHi: number): boolean { return this._visibleSubCategories.has(idLo, idHi); }\r\n /** @internal */\r\n public isSubCategoryVisibleInModel(subcatLo: number, subcatHi: number, modelLo: number, modelHi: number): boolean {\r\n if (this.ignoreSubCategory)\r\n return true;\r\n\r\n let vis = this.isSubCategoryVisible(subcatLo, subcatHi);\r\n const modelOvr = this._modelSubCategoryOverrides.get(modelLo, modelHi);\r\n if (undefined !== modelOvr && modelOvr.has(subcatLo, subcatHi))\r\n vis = !vis;\r\n\r\n return vis;\r\n }\r\n\r\n /** @internal */\r\n protected getModelOverrides(idLo: number, idHi: number): FeatureAppearance | undefined {\r\n return this._modelOverrides.get(idLo, idHi);\r\n }\r\n\r\n private getElementAnimationOverrides(idLo: number, idHi: number, animationNodeId: number): FeatureAppearance | undefined {\r\n if (this.animationNodeOverrides.size === 0)\r\n return undefined;\r\n\r\n // NB: An animation node Id of zero means \"not animated\". Some providers like EmphasizeElements may provide an appearance override for unanimated nodes.\r\n // That should be preserved.\r\n const app = this.animationNodeOverrides.get(animationNodeId);\r\n if (!app || 0 === animationNodeId || this._ignoreAnimationOverrides.length === 0)\r\n return app;\r\n\r\n const args = scratchIgnoreAnimationOverridesArgs;\r\n args.elementId.lower = idLo;\r\n args.elementId.upper = idHi;\r\n args.animationNodeId = animationNodeId;\r\n return this._ignoreAnimationOverrides.some((ignore) => ignore(args)) ? undefined : app;\r\n }\r\n\r\n /** @internal */\r\n protected getElementOverrides(idLo: number, idHi: number, animationNodeId: number): FeatureAppearance | undefined {\r\n const elemApp = this._elementOverrides.get(idLo, idHi);\r\n const nodeApp = this.getElementAnimationOverrides(idLo, idHi, animationNodeId);\r\n if (elemApp)\r\n return nodeApp ? nodeApp.extendAppearance(elemApp) : elemApp;\r\n\r\n return nodeApp;\r\n }\r\n\r\n /** @internal */\r\n protected getSubCategoryOverrides(idLo: number, idHi: number): FeatureAppearance | undefined { return this._subCategoryOverrides.get(idLo, idHi); }\r\n\r\n /** Add a [SubCategory]($backend) to the set of visible subcategories. */\r\n public setVisibleSubCategory(id: Id64String): void { this._visibleSubCategories.addId(id); }\r\n /** Specify the Id of an element that should never be drawn. */\r\n public setNeverDrawn(id: Id64String): void { this._neverDrawn.addId(id); }\r\n /** Specify the Id of an element that should always be drawn. */\r\n public setAlwaysDrawn(id: Id64String): void { this._alwaysDrawn.addId(id); }\r\n /** Specify the Id of a animation node that should never be drawn. */\r\n public setAnimationNodeNeverDrawn(id: number): void { this.neverDrawnAnimationNodes.add(id); }\r\n /** Specify the Ids of elements that should never be drawn. */\r\n public setNeverDrawnSet(ids: Iterable<Id64String>) { copyIdSetToUint32Set(this._neverDrawn, ids); }\r\n /** Specify the Ids of elements that should always be drawn. */\r\n public setAlwaysDrawnSet(ids: Iterable<Id64String>, exclusive: boolean, ignoreSubCategory = true) {\r\n copyIdSetToUint32Set(this._alwaysDrawn, ids);\r\n this.isAlwaysDrawnExclusive = exclusive;\r\n this.alwaysDrawnIgnoresSubCategory = ignoreSubCategory;\r\n }\r\n\r\n /** Returns the feature's appearance overrides, or undefined if the feature is not visible. */\r\n public getFeatureAppearance(feature: Feature, modelId: Id64String, type: BatchType = BatchType.Primary, animationNodeId = 0): FeatureAppearance | undefined {\r\n return this.getAppearance(\r\n Id64.getLowerUint32(feature.elementId), Id64.getUpperUint32(feature.elementId),\r\n Id64.getLowerUint32(feature.subCategoryId), Id64.getUpperUint32(feature.subCategoryId),\r\n feature.geometryClass,\r\n Id64.getLowerUint32(modelId), Id64.getUpperUint32(modelId),\r\n type, animationNodeId);\r\n }\r\n\r\n private static readonly _weight1Appearance = FeatureAppearance.fromJSON({ weight: 1 });\r\n\r\n /** Returns a feature's appearance overrides, or undefined if the feature is not visible.\r\n * Takes Id64s as pairs of unsigned 32-bit integers for efficiency, because that is how they are stored by the PackedFeatureTable associated with each batch of graphics.\r\n * @see [[getFeatureAppearance]] for an equivalent function that accepts [Id64String]($core-bentley)s instead of integer pairs.\r\n */\r\n public getAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number): FeatureAppearance | undefined {\r\n if (BatchType.VolumeClassifier === type || BatchType.PlanarClassifier === type)\r\n return this.getClassifierAppearance(elemLo, elemHi, subcatLo, subcatHi, modelLo, modelHi, animationNodeId);\r\n\r\n let app = !this._lineWeights ? FeatureOverrides._weight1Appearance : FeatureAppearance.defaults;\r\n const modelApp = this.getModelOverrides(modelLo, modelHi);\r\n if (undefined !== modelApp)\r\n app = modelApp.extendAppearance(app);\r\n\r\n // Is the element visible?\r\n let elemApp, alwaysDrawn = false;\r\n\r\n if (Id64.isValidUint32Pair(elemLo, elemHi)) {\r\n if (this.isNeverDrawn(elemLo, elemHi, animationNodeId))\r\n return undefined;\r\n\r\n alwaysDrawn = this.isAlwaysDrawn(elemLo, elemHi);\r\n if (!alwaysDrawn && this.isAlwaysDrawnExclusive)\r\n return undefined;\r\n\r\n // Element overrides take precedence\r\n elemApp = this.getElementOverrides(elemLo, elemHi, animationNodeId);\r\n if (undefined !== elemApp)\r\n app = undefined !== modelApp ? elemApp.extendAppearance(app) : elemApp;\r\n }\r\n\r\n let subCatApp;\r\n if (!this.ignoreSubCategory && Id64.isValidUint32Pair(subcatLo, subcatHi)) {\r\n if ((!alwaysDrawn || !this.alwaysDrawnIgnoresSubCategory) && !this.isSubCategoryVisibleInModel(subcatLo, subcatHi, modelLo, modelHi))\r\n return undefined;\r\n\r\n subCatApp = this.getSubCategoryOverrides(subcatLo, subcatHi);\r\n if (undefined !== subCatApp)\r\n app = subCatApp.extendAppearance(app);\r\n }\r\n\r\n // Only apply default if *no* appearance was explicitly registered (doesn't matter if registered appearance does not actually override anything)\r\n if (undefined === elemApp && undefined === modelApp && undefined === subCatApp)\r\n app = this._defaultOverrides.extendAppearance(app);\r\n\r\n let visible = alwaysDrawn || this.isClassVisible(geomClass);\r\n if (visible && app.isFullyTransparent)\r\n visible = false; // don't bother rendering something with full transparency...\r\n\r\n return visible ? app : undefined;\r\n }\r\n\r\n /** Classifiers behave totally differently...in particular they are never invisible unless fully-transparent.\r\n * @internal\r\n */\r\n protected getClassifierAppearance(elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, modelLo: number, modelHi: number, animationNodeId: number): FeatureAppearance | undefined {\r\n let app = FeatureAppearance.defaults;\r\n const modelApp = this.getModelOverrides(modelLo, modelHi);\r\n if (undefined !== modelApp)\r\n app = modelApp.extendAppearance(app);\r\n\r\n const elemApp = this.getElementOverrides(elemLo, elemHi, animationNodeId);\r\n if (undefined !== elemApp)\r\n app = undefined !== modelApp ? elemApp.extendAppearance(app) : elemApp;\r\n\r\n if (!this.ignoreSubCategory && Id64.isValidUint32Pair(subcatLo, subcatHi)) {\r\n const subCat = this.getSubCategoryOverrides(subcatLo, subcatHi);\r\n if (undefined !== subCat)\r\n app = subCat.extendAppearance(app);\r\n }\r\n\r\n if (undefined === elemApp && undefined === modelApp)\r\n app = this._defaultOverrides.extendAppearance(app);\r\n\r\n // NB: A fully-transparent classifier means the classifier is a clip mask - classified pixels will be discarded.\r\n return app;\r\n }\r\n\r\n /** Return whether geometry of the specified class should be drawn.\r\n * @see [[ViewFlags.constructions]], [[ViewFlags.dimensions]], and [[ViewFlags.patterns]].\r\n */\r\n public isClassVisible(geomClass: GeometryClass): boolean {\r\n switch (geomClass) {\r\n case GeometryClass.Construction: return this._constructions;\r\n case GeometryClass.Dimension: return this._dimensions;\r\n case GeometryClass.Pattern: return this._patterns;\r\n default: return true;\r\n }\r\n }\r\n\r\n /** Specify overrides for all elements belonging to a specified [GeometricModel]($backend), or all geometry belonging to a specified [GeometricElement]($backend) or [SubCategory]($backend). */\r\n public override(args: OverrideFeatureAppearanceArgs): void {\r\n let id: Id64String;\r\n let map: Id64.Uint32Map<FeatureAppearance>;\r\n if (undefined !== args.elementId) {\r\n id = args.elementId;\r\n map = this._elementOverrides;\r\n } else if (undefined !== args.modelId) {\r\n id = args.modelId;\r\n map = this._modelOverrides;\r\n } else {\r\n id = args.subCategoryId;\r\n map = this._subCategoryOverrides;\r\n }\r\n\r\n let app = args.appearance;\r\n const idLo = Id64.getLowerUint32(id);\r\n const idHi = Id64.getUpperUint32(id);\r\n\r\n if (undefined !== args.elementId && this.isNeverDrawn(idLo, idHi, 0))\r\n return;\r\n\r\n const replace = \"replace\" === args.onConflict;\r\n const existing = replace ? undefined : map.get(idLo, idHi);\r\n if (existing) {\r\n assert(\"replace\" !== args.onConflict);\r\n switch (args.onConflict) {\r\n case \"skip\":\r\n return;\r\n case \"extend\":\r\n app = app.extendAppearance(existing);\r\n break;\r\n default:\r\n app = existing.extendAppearance(app);\r\n break;\r\n }\r\n }\r\n\r\n map.set(idLo, idHi, app);\r\n }\r\n\r\n /** Specify overrides for all elements within the specified model.\r\n * @param id The Id of the model.\r\n * @param app The symbology overrides.\r\n * @param replaceExisting Specifies whether to replace a pre-existing override for the same model.\r\n * @note These overrides take priority over all other overrides.\r\n * @note If [[defaultOverrides]] are defined, they will not apply to any element within this model, even if the supplied appearance overrides nothing.\r\n * @deprecated in 3.x. Use [[FeatureOverrides.override]].\r\n */\r\n public overrideModel(id: Id64String, app: FeatureAppearance, replaceExisting: boolean = true): void {\r\n this.override({ modelId: id, appearance: app, onConflict: replaceExisting ? \"replace\" : \"skip\" });\r\n }\r\n\r\n /** Specify overrides for all geometry belonging to the specified [SubCategory]($backend).\r\n * @param id The Id of the subcategory.\r\n * @param app The symbology overrides.\r\n * @param replaceExisting Specifies whether to replace a pre-existing override for the same subcategory.\r\n * @note These overrides have lower priority than element and model overrides.\r\n * @note If [[defaultOverrides]] are defined, they will not apply to any geometry within this subcategory, even if the supplied appearance overrides nothing.\r\n * @deprecated in 3.x. Use [[FeatureOverrides.override]].\r\n */\r\n public overrideSubCategory(id: Id64String, app: FeatureAppearance, replaceExisting: boolean = true): void {\r\n this.override({ subCategoryId: id, appearance: app, onConflict: replaceExisting ? \"replace\" : \"skip\" });\r\n }\r\n\r\n /** Specify overrides for all geometry originating from the specified element.\r\n * @param id The Id of the element.\r\n * @param app The symbology overrides.\r\n * @param replaceExisting Specifies whether to replace a pre-existing override for the same element.\r\n * @note These overrides take precedence over subcategory overrides, but not over model overrides.\r\n * @note If [[defaultOverrides]] are defined, they will not apply to this element, even if the supplied appearance overrides nothing.\r\n * @deprecated in 3.x. Use [[FeatureOverrides.override]].\r\n */\r\n public overrideElement(id: Id64String, app: FeatureAppearance, replaceExisting: boolean = true): void {\r\n this.override({ elementId: id, appearance: app, onConflict: replaceExisting ? \"replace\" : \"skip\" });\r\n }\r\n\r\n /** Specify overrides for all geometry originating from the specified animation node.\r\n * @param id The Id of the animation node.\r\n * @param app The symbology overrides.\r\n * @note These overrides do not take precedence over element overrides.\r\n */\r\n public overrideAnimationNode(id: number, app: FeatureAppearance): void {\r\n this.animationNodeOverrides.set(id, app);\r\n }\r\n\r\n /** Defines a default appearance to be applied to any [[Feature]] *not* explicitly overridden.\r\n * @param appearance The symbology overrides.\r\n * @param replaceExisting Specifies whether to replace the current default overrides if they are already defined.\r\n */\r\n public setDefaultOverrides(appearance: FeatureAppearance, replaceExisting: boolean = true): void {\r\n if (replaceExisting || !appearance.overridesSymbology)\r\n this._defaultOverrides = appearance;\r\n }\r\n\r\n /** Get the display priority of a subcategory. This is only relevant when using [[PlanProjectionSettings]].\r\n * @internal\r\n */\r\n public getSubCategoryPriority(idLo: number, idHi: number): number {\r\n return this._subCategoryPriorities.get(idLo, idHi) ?? 0;\r\n }\r\n\r\n /** Construct a new Overrides that overrides nothing.\r\n * @see [FeatureSymbology.Overrides]($frontend) to construct overrides based on a [ViewState]($frontend) or [Viewport]($frontend).\r\n */\r\n public constructor() {\r\n //\r\n }\r\n\r\n /** Returns true if geometry belonging to the specified subcategory will be drawn. */\r\n public isSubCategoryIdVisible(id: Id64String): boolean { return this.isSubCategoryVisible(Id64.getLowerUint32(id), Id64.getUpperUint32(id)); }\r\n /** Returns the overrides applied to geometry belonging to the specified model, if any such are defined. */\r\n public getModelOverridesById(id: Id64String): FeatureAppearance | undefined { return this.getModelOverrides(Id64.getLowerUint32(id), Id64.getUpperUint32(id)); }\r\n /** Returns the overrides applied to geometry belonging to the specified element, if any such are defined. */\r\n public getElementOverridesById(id: Id64String): FeatureAppearance | undefined { return this.getElementOverrides(Id64.getLowerUint32(id), Id64.getUpperUint32(id), 0); }\r\n /** Returns the overrides applied to geometry belonging to the specified subcategory, if any such are defined. */\r\n public getSubCategoryOverridesById(id: Id64String): FeatureAppearance | undefined { return this.getSubCategoryOverrides(Id64.getLowerUint32(id), Id64.getUpperUint32(id)); }\r\n\r\n /** Returns true if the specified Feature will be drawn. */\r\n public isFeatureVisible(feature: Feature): boolean {\r\n const { elementId, subCategoryId, geometryClass } = feature;\r\n const isValidElemId = !Id64.isInvalid(elementId);\r\n const elemIdParts = isValidElemId ? Id64.getUint32Pair(elementId) : undefined;\r\n\r\n if (undefined !== elemIdParts && this.isNeverDrawn(elemIdParts.lower, elemIdParts.upper, 0))\r\n return false;\r\n\r\n const alwaysDrawn = undefined !== elemIdParts && this.isAlwaysDrawn(elemIdParts.lower, elemIdParts.upper);\r\n if (alwaysDrawn || this.isAlwaysDrawnExclusive)\r\n return alwaysDrawn;\r\n\r\n // NB: This ignores per-model subcategory visibility overrides, because caller did not specify a model.\r\n if (!this.isSubCategoryIdVisible(subCategoryId))\r\n return false;\r\n\r\n return this.isClassVisible(geometryClass);\r\n }\r\n}\r\n\r\n/** Interface adopted by an object that can supply the [[FeatureAppearance]] supplied by a [[FeatureAppearanceSource]].\r\n * This is useful for selectively overriding or agumenting a [Viewport]($frontend)'s symbology overrides.\r\n * A typical implementation will invoke [[FeatureAppearanceSource.getAppeaprance]] and customize the returned appearance.\r\n * @see [[FeatureAppearanceProvider.chain]] to chain two providers together.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface FeatureAppearanceProvider {\r\n /** Supply the desired appearance overrides for the specified [[Feature]], or `undefined` if the feature should not be drawn.\r\n * The feature is described by its components for efficiency reasons.\r\n * @param source The base symbology overrides, e.g., typically defined by a [Viewport]($frontend).\r\n * @param elemLo The lower 32 bits of the feature's element Id.\r\n * @param elemHi The upper 32 bits of the feature's element Id.\r\n * @param subcatLo The lower 32 bits of the feature's subcategory Id.\r\n * @param subcatHi The upper 32 bits of the feature's subcategory Id.\r\n * @param geomClass The geometry class of the feature.\r\n * @param modelLo The lower 32 bits of the feature's model Id.\r\n * @param modelHi The upper 32 bits of the feature's model Id.\r\n * @param type The type of batch to which the feature belongs.\r\n * @param animationNodeId The Id of the corresponding node in the [[RenderSchedule]], or `0` if none.\r\n * @returns The desired appearance overrides, or `undefined` to indicate the feature should not be displayed.\r\n * @see [[FeatureAppearanceSource.getAppearance]] to forward the request to the source.\r\n * @see [Id64.isValidUint32Pair]($core-bentley) to determine if the components of an [Id64String]($core-bentley) represent a valid Id.\r\n */\r\n getFeatureAppearance(source: FeatureAppearanceSource, elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number): FeatureAppearance | undefined;\r\n}\r\n\r\n/** @public */\r\nexport namespace FeatureAppearanceProvider {\r\n /** Produce a FeatureAppearanceSource for which `getAppearance()` returns the appearance specified in `source`, potentially modified by `provider`. */\r\n function wrap(source: FeatureAppearanceSource, provider: FeatureAppearanceProvider): FeatureAppearanceSource {\r\n return {\r\n getAppearance: (elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number) => {\r\n return provider.getFeatureAppearance(source, elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\r\n },\r\n };\r\n }\r\n\r\n /** Create a provider that obtains each feature's appearance from the source, and if the feature is visible, modifies the appearance.\r\n * @param supplementAppearance A function accepting the feature's base appearance and returning a supplemental appearance.\r\n * @public\r\n */\r\n export function supplement(supplementAppearance: (appearance: FeatureAppearance) => FeatureAppearance): FeatureAppearanceProvider {\r\n return {\r\n getFeatureAppearance: (source: FeatureAppearanceSource, elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number) => {\r\n const app = source.getAppearance(elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\r\n return app ? supplementAppearance(app) : app;\r\n },\r\n };\r\n }\r\n\r\n /** Chain two FeatureAppearanceProviders together such that `first`'s `getFeatureAppearance` function is applied before `second`'s.\r\n * If `second` invokes `source.getAppearance()`, the returned appearance will include any modifications applied by `first`.\r\n * @public\r\n */\r\n export function chain(first: FeatureAppearanceProvider, second: FeatureAppearanceProvider): FeatureAppearanceProvider {\r\n if (first === second)\r\n return first;\r\n\r\n return {\r\n getFeatureAppearance: (source: FeatureAppearanceSource, elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number) => {\r\n return second.getFeatureAppearance(wrap(source, first), elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\r\n },\r\n };\r\n }\r\n}\r\n"]}
@@ -106,7 +106,7 @@ export interface CreateIModelProps extends IModelProps {
106
106
  * Encryption-related properties that can be supplied when creating or opening snapshot iModels.
107
107
  * NOTE: Encrypted iModels are no longer supported since they require licensed code.
108
108
  * @public
109
- * @deprecated
109
+ * @deprecated in 3.x.
110
110
  */
111
111
  export interface IModelEncryptionProps {
112
112
  /** The password used to encrypt/decrypt the snapshot iModel. */
@@ -1 +1 @@
1
- {"version":3,"file":"IModel.js","sourceRoot":"","sources":["../../src/IModel.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 iModels\r\n */\r\n\r\nimport { assert, BeEvent, GeoServiceStatus, GuidString, Id64, Id64String, IModelStatus, Mutable, OpenMode } from \"@itwin/core-bentley\";\r\nimport {\r\n Angle, AxisIndex, AxisOrder, Constant, Geometry, Matrix3d, Point3d, Range3d, Range3dProps, Transform, Vector3d, XYAndZ, XYZProps,\r\n YawPitchRollAngles, YawPitchRollProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { ChangesetIdWithIndex } from \"./ChangesetProps\";\r\nimport { Cartographic, CartographicProps } from \"./geometry/Cartographic\";\r\nimport { GeographicCRS, GeographicCRSProps } from \"./geometry/CoordinateReferenceSystem\";\r\nimport { AxisAlignedBox3d } from \"./geometry/Placement\";\r\nimport { IModelError } from \"./IModelError\";\r\nimport { ThumbnailProps } from \"./Thumbnail\";\r\n\r\n/** The properties to open a connection to an iModel for RPC operations.\r\n * @public\r\n */\r\nexport interface IModelRpcOpenProps {\r\n /** The iTwin in which the iModel exists - must be defined for briefcases that are synchronized with iModelHub. */\r\n readonly iTwinId?: GuidString;\r\n /** Guid of the iModel. */\r\n readonly iModelId?: GuidString;\r\n\r\n /** Id of the last Changeset that was applied to the iModel - must be defined for briefcases that are synchronized with iModelHub.\r\n * @note Changeset Ids are string hash values based on the content and parent.\r\n */\r\n readonly changeset?: ChangesetIdWithIndex;\r\n}\r\n\r\n/** The properties that identify an opened iModel for RPC operations.\r\n * @public\r\n */\r\nexport interface IModelRpcProps extends IModelRpcOpenProps {\r\n /** Unique key used for identifying the iModel between the frontend and the backend */\r\n readonly key: string;\r\n}\r\n\r\n/** Properties that position an iModel on the earth via [ECEF](https://en.wikipedia.org/wiki/ECEF) (Earth Centered Earth Fixed) coordinates\r\n * The origin is specified as an ECEF coordinate. The cartographicOrigin property contains the latitude, longitude and elevation above the WGS84 ellipsoid\r\n * of the origin property. This cartographicOrigin is offered as a convenient pre-calculated value representing the location of the ECEF origin.\r\n * The 3D coordinate system this class represents is positioned at specified origin and the axis positioned according to\r\n * the other properties.\r\n * If the xVector and yVector properties are defined then they take precedence over the YawPitchRoll orientation property. The xVector and yVector\r\n * represent the direction and scale of the X and Y axes. The Z axis is always perpendicular (according to the right hand rule) to these X-Y axes.\r\n * The scaling in the Z direction is always unity. The scale of the X and Y axes is represented by the size of the vector length.\r\n * If the xVector and yVector are not present then the YawPitchRoll properties indicates the angles for all tree axes. Scaling in that case\r\n * is unity in all three directions.\r\n * Note that the present class is intended to represent geolocated 3D coordinate systems that are normally tangent to the WGS84 ellipsoid\r\n * possibly offset in altitude by the terrain elevation above the ellipsoid but other general 3D coordinate systems\r\n * can be defined.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface EcefLocationProps {\r\n /** The Origin of an iModel on the earth in ECEF coordinates */\r\n readonly origin: XYZProps;\r\n /** The [orientation](https://en.wikipedia.org/wiki/Geographic_coordinate_conversion) of an iModel on the earth. */\r\n readonly orientation: YawPitchRollProps;\r\n /** Optional position on the earth used to establish the ECEF coordinates. */\r\n readonly cartographicOrigin?: CartographicProps;\r\n /** Optional X column vector used with [[yVector]] to calculate potentially non-rigid transform if a projection is present. */\r\n readonly xVector?: XYZProps;\r\n /** Optional Y column vector used with [[xVector]] to calculate potentially non-rigid transform if a projection is present. */\r\n readonly yVector?: XYZProps;\r\n}\r\n\r\n/** Properties of the [Root Subject]($docs/bis/guide/references/glossary#subject-root).\r\n * @public\r\n * @extensions\r\n */\r\nexport interface RootSubjectProps {\r\n /** The name of the root subject. */\r\n readonly name: string;\r\n /** Description of the root subject (optional). */\r\n readonly description?: string;\r\n}\r\n\r\n/** Properties of an iModel that are always held in memory whenever one is opened, both on the frontend and on the backend .\r\n * @public\r\n */\r\nexport interface IModelProps {\r\n /** The name and description of the root subject of this iModel */\r\n readonly rootSubject: RootSubjectProps;\r\n /** The volume of the entire project, in spatial coordinates */\r\n readonly projectExtents?: Range3dProps;\r\n /** An offset to be applied to all spatial coordinates. This is normally used to transform spatial coordinates into the Cartesian coordinate system of a Geographic Coordinate System. */\r\n readonly globalOrigin?: XYZProps;\r\n /** The location of the iModel in Earth Centered Earth Fixed coordinates. iModel units are always meters */\r\n readonly ecefLocation?: EcefLocationProps;\r\n /** The Geographic Coordinate Reference System indicating the projection and datum used. */\r\n readonly geographicCoordinateSystem?: GeographicCRSProps;\r\n /** The name of the iModel. */\r\n readonly name?: string;\r\n}\r\n\r\n/** The properties returned by the backend when creating a new [[IModelConnection]] from the frontend, either with Rpc or with Ipc.\r\n * These properties describe the iModel held on the backend for thew newly formed connection and are used to construct a new\r\n * [[IModelConnection]] instance on the frontend to access it.\r\n * @public\r\n */\r\nexport type IModelConnectionProps = IModelProps & IModelRpcProps;\r\n\r\n/** The properties that can be supplied when creating a *new* iModel.\r\n * @public\r\n */\r\nexport interface CreateIModelProps extends IModelProps {\r\n /** The GUID of new iModel. If not present, a GUID will be generated. */\r\n readonly guid?: GuidString;\r\n /** Client name for new iModel */\r\n readonly client?: string;\r\n /** Thumbnail for new iModel\r\n * @alpha\r\n */\r\n readonly thumbnail?: ThumbnailProps;\r\n}\r\n\r\n/**\r\n * Encryption-related properties that can be supplied when creating or opening snapshot iModels.\r\n * NOTE: Encrypted iModels are no longer supported since they require licensed code.\r\n * @public\r\n * @deprecated\r\n */\r\nexport interface IModelEncryptionProps {\r\n /** The password used to encrypt/decrypt the snapshot iModel. */\r\n readonly password?: string;\r\n}\r\n\r\n/**\r\n * A key used to identify an opened [IModelDb]($backend) between the frontend and backend for Rpc and Ipc communications.\r\n * Keys must be unique - that is there can never be two IModelDbs opened with the same key at any given time.\r\n * If no key is supplied in a call to open an IModelDb, one is generated and returned.\r\n * It is only necessary to supply a key if you have some reason to assign a specific value to identify an IModelDb.\r\n * If you don't supply the key, you must use the returned value for Rpc and Ipc communications.\r\n * @public\r\n */\r\nexport interface OpenDbKey {\r\n readonly key?: string;\r\n}\r\n\r\n/** @beta TODO documentation */\r\nexport interface CloudContainerUri {\r\n readonly uriParams: string;\r\n}\r\n\r\n/** Options to open a [SnapshotDb]($backend).\r\n * @public\r\n */\r\nexport interface SnapshotOpenOptions extends IModelEncryptionProps, OpenDbKey { // eslint-disable-line deprecation/deprecation\r\n /**\r\n * The \"base\" name that can be used for creating temporary files related to this Db.\r\n * The string should be a name related to the current Db filename using some known pattern so that all files named \"baseName*\" can be deleted externally during cleanup.\r\n * It must be the name of a file (that may or may not exist) in a writable directory.\r\n * If not present, the baseName will default to the database's file name (including the path).\r\n * @internal\r\n */\r\n readonly tempFileBase?: string;\r\n}\r\n\r\n/** Options to open a [StandaloneDb]($backend) via [StandaloneDb.openFile]($backend) from the backend,\r\n * or [BriefcaseConnection.openStandalone]($frontend) from the frontend.\r\n * @public\r\n */\r\nexport type StandaloneOpenOptions = OpenDbKey;\r\n\r\n/** Options that can be supplied when creating snapshot iModels.\r\n * @public\r\n */\r\n// eslint-disable-next-line deprecation/deprecation\r\nexport interface CreateSnapshotIModelProps extends IModelEncryptionProps {\r\n /** If true, then create SQLite views for Model, Element, ElementAspect, and Relationship classes.\r\n * These database views can often be useful for interoperability workflows.\r\n */\r\n readonly createClassViews?: boolean;\r\n}\r\n\r\n/** The options that can be specified when creating an *empty* snapshot iModel.\r\n * @see [SnapshotDb.createEmpty]($backend)\r\n * @public\r\n */\r\nexport type CreateEmptySnapshotIModelProps = CreateIModelProps & CreateSnapshotIModelProps;\r\n\r\n/** Options that can be supplied when creating standalone iModels.\r\n * @internal\r\n */\r\n// eslint-disable-next-line deprecation/deprecation\r\nexport interface CreateStandaloneIModelProps extends IModelEncryptionProps {\r\n /** If present, file will allow local editing, but cannot be used to create changesets */\r\n readonly allowEdit?: string;\r\n}\r\n\r\n/** The options that can be specified when creating an *empty* standalone iModel.\r\n * @see [standalone.createEmpty]($backend)\r\n * @internal\r\n */\r\nexport type CreateEmptyStandaloneIModelProps = CreateIModelProps & CreateStandaloneIModelProps;\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport interface FilePropertyProps {\r\n readonly namespace: string;\r\n readonly name: string;\r\n id?: number | string;\r\n subId?: number | string;\r\n}\r\n\r\n/** The position and orientation of an iModel on the earth in [ECEF](https://en.wikipedia.org/wiki/ECEF) (Earth Centered Earth Fixed) coordinates\r\n * @note This is an immutable type - all of its properties are frozen.\r\n * @see [GeoLocation of iModels]($docs/learning/GeoLocation.md)\r\n * @public\r\n */\r\nexport class EcefLocation implements EcefLocationProps {\r\n /** The origin of the ECEF transform. */\r\n public readonly origin: Point3d;\r\n /** The orientation of the ECEF transform */\r\n public readonly orientation: YawPitchRollAngles;\r\n /** Optional position on the earth used to establish the ECEF origin and orientation. */\r\n public readonly cartographicOrigin?: Cartographic;\r\n /** Optional X column vector used with [[yVector]] to calculate potentially non-rigid transform if a projection is present. */\r\n public readonly xVector?: Vector3d;\r\n /** Optional Y column vector used with [[xVector]] to calculate potentially non-rigid transform if a projection is present. */\r\n public readonly yVector?: Vector3d;\r\n\r\n private readonly _transform: Transform;\r\n\r\n /** Get the transform from iModel Spatial coordinates to ECEF from this EcefLocation */\r\n public getTransform(): Transform { return this._transform; }\r\n\r\n /** Construct a new EcefLocation. Once constructed, it is frozen and cannot be modified. */\r\n constructor(props: EcefLocationProps) {\r\n this.origin = Point3d.fromJSON(props.origin).freeze();\r\n this.orientation = YawPitchRollAngles.fromJSON(props.orientation).freeze();\r\n if (props.cartographicOrigin)\r\n this.cartographicOrigin = Cartographic.fromRadians({ longitude: props.cartographicOrigin.longitude, latitude: props.cartographicOrigin.latitude, height: props.cartographicOrigin.height }).freeze();\r\n if (props.xVector && props.yVector) {\r\n this.xVector = Vector3d.fromJSON(props.xVector).freeze();\r\n this.yVector = Vector3d.fromJSON(props.yVector).freeze();\r\n }\r\n let matrix;\r\n if (this.xVector && this.yVector) {\r\n const zVector = this.xVector.crossProduct(this.yVector);\r\n if (zVector.normalizeInPlace())\r\n matrix = Matrix3d.createColumns(this.xVector, this.yVector, zVector);\r\n }\r\n if (!matrix)\r\n matrix = this.orientation.toMatrix3d();\r\n\r\n this._transform = Transform.createOriginAndMatrix(this.origin, matrix);\r\n this._transform.freeze();\r\n }\r\n\r\n /** Returns true if this EcefLocation is not located at the center of the Earth.\r\n * @alpha are locations very close to the center considered valid? What are the specific criteria?\r\n */\r\n public get isValid(): boolean {\r\n return !this.origin.isZero;\r\n }\r\n\r\n /** Construct ECEF Location from cartographic origin with optional known point and angle. */\r\n public static createFromCartographicOrigin(origin: Cartographic, point?: Point3d, angle?: Angle) {\r\n const ecefOrigin = origin.toEcef();\r\n const deltaRadians = 10 / Constant.earthRadiusWGS84.polar;\r\n const northCarto = Cartographic.fromRadians({ longitude: origin.longitude, latitude: origin.latitude + deltaRadians, height: origin.height });\r\n const eastCarto = Cartographic.fromRadians({ longitude: origin.longitude + deltaRadians, latitude: origin.latitude, height: origin.height });\r\n const ecefNorth = northCarto.toEcef();\r\n const ecefEast = eastCarto.toEcef();\r\n const xVector = Vector3d.createStartEnd(ecefOrigin, ecefEast).normalize();\r\n const yVector = Vector3d.createStartEnd(ecefOrigin, ecefNorth).normalize();\r\n const matrix = Matrix3d.createRigidFromColumns(xVector!, yVector!, AxisOrder.XYZ)!;\r\n if (angle !== undefined) {\r\n const north = Matrix3d.createRotationAroundAxisIndex(AxisIndex.Z, angle);\r\n matrix.multiplyMatrixMatrix(north, matrix);\r\n }\r\n if (point !== undefined) {\r\n const delta = matrix.multiplyVector(Vector3d.create(-point.x, -point.y, -point.z));\r\n ecefOrigin.addInPlace(delta);\r\n }\r\n\r\n return new EcefLocation({ origin: ecefOrigin, orientation: YawPitchRollAngles.createFromMatrix3d(matrix)!, cartographicOrigin: origin });\r\n }\r\n\r\n /** Get the location center of the earth in the iModel coordinate system. */\r\n public get earthCenter(): Point3d {\r\n const matrix = this.orientation.toMatrix3d();\r\n return Point3d.createFrom(matrix.multiplyTransposeXYZ(-this.origin.x, -this.origin.y, -this.origin.z));\r\n }\r\n\r\n /** Return true if this location is equivalent to another location within a small tolerance. */\r\n public isAlmostEqual(other: EcefLocation): boolean {\r\n if (!this.origin.isAlmostEqual(other.origin) || !this.orientation.isAlmostEqual(other.orientation))\r\n return false;\r\n\r\n if ((this.xVector === undefined) !== (other.xVector === undefined) || (this.yVector === undefined) !== (other.yVector === undefined))\r\n return false;\r\n\r\n if (this.xVector !== undefined && other.xVector !== undefined && !this.xVector.isAlmostEqual(other.xVector))\r\n return false;\r\n\r\n if (this.yVector !== undefined && other.yVector !== undefined && !this.yVector.isAlmostEqual(other.yVector))\r\n return false;\r\n\r\n const thisCarto = this.cartographicOrigin;\r\n const otherCarto = other.cartographicOrigin;\r\n if (undefined === thisCarto || undefined === otherCarto)\r\n return undefined === thisCarto && undefined === otherCarto;\r\n\r\n return thisCarto.equalsEpsilon(otherCarto, Geometry.smallMetricDistance);\r\n }\r\n\r\n public toJSON(): EcefLocationProps {\r\n const props: Mutable<EcefLocationProps> = {\r\n origin: this.origin.toJSON(),\r\n orientation: this.orientation.toJSON(),\r\n };\r\n\r\n if (this.cartographicOrigin)\r\n props.cartographicOrigin = this.cartographicOrigin.toJSON();\r\n\r\n if (this.xVector)\r\n props.xVector = this.xVector.toJSON();\r\n\r\n if (this.yVector)\r\n props.yVector = this.yVector.toJSON();\r\n\r\n return props;\r\n }\r\n}\r\n\r\n/** Represents an iModel in JavaScript.\r\n * @see [GeoLocation of iModels]($docs/learning/GeoLocation.md)\r\n * @public\r\n */\r\nexport abstract class IModel implements IModelProps {\r\n private _projectExtents?: AxisAlignedBox3d;\r\n private _name?: string;\r\n private _rootSubject?: RootSubjectProps;\r\n private _globalOrigin?: Point3d;\r\n private _ecefLocation?: EcefLocation;\r\n private _geographicCoordinateSystem?: GeographicCRS;\r\n private _iModelId?: GuidString;\r\n\r\n /** The Id of the repository model. */\r\n public static readonly repositoryModelId: Id64String = \"0x1\";\r\n /** The Id of the root subject element. */\r\n public static readonly rootSubjectId: Id64String = \"0x1\";\r\n /** The Id of the dictionary model. */\r\n public static readonly dictionaryId: Id64String = \"0x10\";\r\n\r\n /** Event raised after [[name]] changes. */\r\n public readonly onNameChanged = new BeEvent<(previousName: string) => void>();\r\n /** Event raised after [[rootSubject]] changes. */\r\n public readonly onRootSubjectChanged = new BeEvent<(previousSubject: RootSubjectProps) => void>();\r\n /** Event raised after [[projectExtents]] changes. */\r\n public readonly onProjectExtentsChanged = new BeEvent<(previousExtents: AxisAlignedBox3d) => void>();\r\n /** Event raised after [[globalOrigin]] changes. */\r\n public readonly onGlobalOriginChanged = new BeEvent<(previousOrigin: Point3d) => void>();\r\n /** Event raised after [[ecefLocation]] changes. */\r\n public readonly onEcefLocationChanged = new BeEvent<(previousLocation: EcefLocation | undefined) => void>();\r\n /** Event raised after [[geographicCoordinateSystem]] changes. */\r\n public readonly onGeographicCoordinateSystemChanged = new BeEvent<(previousGCS: GeographicCRS | undefined) => void>();\r\n\r\n /** Name of the iModel */\r\n public get name(): string {\r\n assert(this._name !== undefined);\r\n return this._name;\r\n }\r\n public set name(name: string) {\r\n if (name !== this._name) {\r\n const old = this._name;\r\n this._name = name;\r\n if (undefined !== old)\r\n this.onNameChanged.raiseEvent(old);\r\n }\r\n }\r\n\r\n /** The name and description of the root subject of this iModel */\r\n public get rootSubject(): RootSubjectProps {\r\n assert(this._rootSubject !== undefined);\r\n return this._rootSubject;\r\n }\r\n public set rootSubject(subject: RootSubjectProps) {\r\n if (undefined === this._rootSubject || this._rootSubject.name !== subject.name || this._rootSubject.description !== subject.description) {\r\n const old = this._rootSubject;\r\n this._rootSubject = subject;\r\n if (old)\r\n this.onRootSubjectChanged.raiseEvent(old);\r\n }\r\n }\r\n\r\n /** Returns `true` if this is a snapshot iModel. */\r\n public abstract get isSnapshot(): boolean;\r\n /** Returns `true` if this is a briefcase copy of an iModel that is synchronized with iModelHub. */\r\n public abstract get isBriefcase(): boolean;\r\n\r\n public abstract get isOpen(): boolean;\r\n\r\n /**\r\n * The volume, in spatial coordinates, inside which the entire project is contained.\r\n * @note The object returned from this method is frozen. You *must* make a copy before you do anything that might attempt to modify it.\r\n */\r\n public get projectExtents() {\r\n assert(undefined !== this._projectExtents);\r\n return this._projectExtents;\r\n }\r\n public set projectExtents(extents: AxisAlignedBox3d) {\r\n // Don't allow any axis of the project extents to be less than 1 meter.\r\n const projectExtents = extents.clone();\r\n projectExtents.ensureMinLengths(1.0);\r\n if (!this._projectExtents || !this._projectExtents.isAlmostEqual(projectExtents)) {\r\n const old = this._projectExtents;\r\n projectExtents.freeze();\r\n this._projectExtents = projectExtents;\r\n if (old)\r\n this.onProjectExtentsChanged.raiseEvent(old);\r\n }\r\n }\r\n\r\n /** An offset to be applied to all spatial coordinates. */\r\n public get globalOrigin(): Point3d {\r\n assert(this._globalOrigin !== undefined);\r\n return this._globalOrigin;\r\n }\r\n public set globalOrigin(org: Point3d) {\r\n if (!this._globalOrigin || !this._globalOrigin.isAlmostEqual(org)) {\r\n const old = this._globalOrigin;\r\n org.freeze();\r\n this._globalOrigin = org;\r\n if (old)\r\n this.onGlobalOriginChanged.raiseEvent(old);\r\n }\r\n }\r\n\r\n /** The [EcefLocation]($docs/learning/glossary#ecefLocation) of the iModel in Earth Centered Earth Fixed coordinates.\r\n * If the iModel property geographicCoordinateSystem is not defined then the ecefLocation provides a geolocation by defining a\r\n * 3D coordinate system relative to the Earth model WGS84. Refer to additional documentation for details. If the geographicCoordinateSystem\r\n * property is defined then the ecefLocation must be used with care. When the geographicCoordinateSystem is defined it indicates the\r\n * iModel cartesian space is the result of a cartographic projection. This implies a flattening of the Earth surface process that\r\n * results in scale, angular or area distortion. The ecefLocation is then an approximation calculated at the center of the project extent.\r\n * If the project is more than 2 kilometer in size, the ecefLocation may represent a poor approximation of the effective\r\n * cartographic projection used and a linear transformation should then be calculated at the exact origin of the data\r\n * it must position.\r\n * @see [GeoLocation of iModels]($docs/learning/GeoLocation.md)\r\n */\r\n public get ecefLocation(): EcefLocation | undefined {\r\n return this._ecefLocation;\r\n }\r\n public set ecefLocation(ecefLocation: EcefLocation | undefined) {\r\n const old = this._ecefLocation;\r\n if (!old && !ecefLocation)\r\n return;\r\n else if (old && ecefLocation && old.isAlmostEqual(ecefLocation))\r\n return;\r\n\r\n this._ecefLocation = ecefLocation;\r\n this.onEcefLocationChanged.raiseEvent(old);\r\n }\r\n\r\n /** Set the [EcefLocation]($docs/learning/glossary#ecefLocation) for this iModel. */\r\n public setEcefLocation(ecef: EcefLocationProps): void {\r\n this.ecefLocation = new EcefLocation(ecef);\r\n }\r\n\r\n /** The geographic coordinate reference system of the iModel. */\r\n public get geographicCoordinateSystem(): GeographicCRS | undefined {\r\n return this._geographicCoordinateSystem;\r\n }\r\n public set geographicCoordinateSystem(geoCRS: GeographicCRS | undefined) {\r\n const old = this._geographicCoordinateSystem;\r\n if (!old && !geoCRS)\r\n return;\r\n else if (old && geoCRS && old.equals(geoCRS))\r\n return;\r\n\r\n this._geographicCoordinateSystem = geoCRS;\r\n this.onGeographicCoordinateSystemChanged.raiseEvent(old);\r\n }\r\n\r\n /** Sets the geographic coordinate reference system from GeographicCRSProps. */\r\n public setGeographicCoordinateSystem(geoCRS: GeographicCRSProps) {\r\n this.geographicCoordinateSystem = new GeographicCRS(geoCRS);\r\n }\r\n\r\n /** @internal */\r\n public getConnectionProps(): IModelConnectionProps {\r\n return {\r\n name: this.name,\r\n rootSubject: this.rootSubject,\r\n projectExtents: this.projectExtents.toJSON(),\r\n globalOrigin: this.globalOrigin.toJSON(),\r\n ecefLocation: this.ecefLocation,\r\n geographicCoordinateSystem: this.geographicCoordinateSystem,\r\n ... this._getRpcProps(),\r\n };\r\n }\r\n\r\n /** @internal */\r\n public toJSON(): IModelConnectionProps {\r\n return this.getConnectionProps();\r\n }\r\n\r\n /** A key used to identify this iModel in RPC calls from frontend to backend.\r\n * @internal\r\n */\r\n protected _fileKey: string;\r\n /** Get the key that was used to open this iModel. This is the value used for Rpc and Ipc communications. */\r\n public get key(): string { return this._fileKey; }\r\n\r\n /** @internal */\r\n protected _iTwinId?: GuidString;\r\n /** The Guid that identifies the iTwin that owns this iModel. */\r\n public get iTwinId(): GuidString | undefined { return this._iTwinId; }\r\n\r\n /** The Guid that identifies this iModel. */\r\n public get iModelId(): GuidString | undefined { return this._iModelId; }\r\n\r\n /** @public */\r\n public changeset: ChangesetIdWithIndex;\r\n\r\n protected _openMode = OpenMode.Readonly;\r\n /** The [[OpenMode]] used for this IModel. */\r\n public get openMode(): OpenMode { return this._openMode; }\r\n\r\n /** Return a token for RPC operations.\r\n * @throws IModelError if the iModel is not open.\r\n */\r\n public getRpcProps(): IModelRpcProps {\r\n if (!this.isOpen)\r\n throw new IModelError(IModelStatus.BadRequest, \"IModel is not open for rpc\");\r\n\r\n return this._getRpcProps();\r\n }\r\n\r\n /** Returns the iModel's RPC properties.\r\n * @note It is an error to attempt to use these properties as a token for RPC operations if the iModel is not open.\r\n * @internal\r\n */\r\n protected _getRpcProps(): IModelRpcProps {\r\n return {\r\n key: this._fileKey,\r\n iTwinId: this.iTwinId,\r\n iModelId: this.iModelId,\r\n changeset: this.changeset,\r\n };\r\n }\r\n\r\n /** @internal */\r\n protected constructor(tokenProps?: IModelRpcProps) {\r\n this.changeset = { id: \"\", index: 0 };\r\n this._fileKey = \"\";\r\n if (tokenProps) {\r\n this._fileKey = tokenProps.key;\r\n this._iTwinId = tokenProps.iTwinId;\r\n this._iModelId = tokenProps.iModelId;\r\n if (tokenProps.changeset)\r\n this.changeset = tokenProps.changeset;\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected initialize(name: string, props: IModelProps) {\r\n this.name = name;\r\n this.rootSubject = props.rootSubject;\r\n this.projectExtents = Range3d.fromJSON(props.projectExtents);\r\n this.globalOrigin = Point3d.fromJSON(props.globalOrigin);\r\n\r\n const ecefLocation = props.ecefLocation ? new EcefLocation(props.ecefLocation) : undefined;\r\n this.ecefLocation = ecefLocation?.isValid ? ecefLocation : undefined;\r\n\r\n this.geographicCoordinateSystem = props.geographicCoordinateSystem ? new GeographicCRS(props.geographicCoordinateSystem) : undefined;\r\n }\r\n\r\n /** Get the default subCategoryId for the supplied categoryId */\r\n public static getDefaultSubCategoryId(categoryId: Id64String): Id64String {\r\n return Id64.isValid(categoryId) ? Id64.fromLocalAndBriefcaseIds(Id64.getLocalId(categoryId) + 1, Id64.getBriefcaseId(categoryId)) : Id64.invalid;\r\n }\r\n\r\n /** True if this iModel has an [EcefLocation]($docs/learning/glossary#ecefLocation). */\r\n public get isGeoLocated() { return undefined !== this._ecefLocation; }\r\n\r\n /** Get the Transform from this iModel's Spatial coordinates to ECEF coordinates using its [[IModel.ecefLocation]].\r\n * @throws IModelError if [[isGeoLocated]] is false.\r\n */\r\n public getEcefTransform(): Transform {\r\n if (undefined === this._ecefLocation)\r\n throw new IModelError(GeoServiceStatus.NoGeoLocation, \"iModel is not GeoLocated\");\r\n return this._ecefLocation.getTransform();\r\n }\r\n\r\n /** Convert a point in this iModel's Spatial coordinates to an ECEF point using its [[IModel.ecefLocation]].\r\n * @param spatial A point in the iModel's spatial coordinates\r\n * @param result If defined, use this for output\r\n * @returns A Point3d in ECEF coordinates\r\n * @throws IModelError if [[isGeoLocated]] is false.\r\n */\r\n public spatialToEcef(spatial: XYAndZ, result?: Point3d): Point3d { return this.getEcefTransform().multiplyPoint3d(spatial, result)!; }\r\n\r\n /** Convert a point in ECEF coordinates to a point in this iModel's Spatial coordinates using its [[ecefLocation]].\r\n * @param ecef A point in ECEF coordinates\r\n * @param result If defined, use this for output\r\n * @returns A Point3d in this iModel's spatial coordinates\r\n * @throws IModelError if [[isGeoLocated]] is false.\r\n * @note The resultant point will only be meaningful if the ECEF coordinate is close on the earth to the iModel.\r\n */\r\n public ecefToSpatial(ecef: XYAndZ, result?: Point3d): Point3d { return this.getEcefTransform().multiplyInversePoint3d(ecef, result)!; }\r\n\r\n /** Convert a point in this iModel's Spatial coordinates to a [[Cartographic]] using its [[IModel.ecefLocation]].\r\n * @param spatial A point in the iModel's spatial coordinates\r\n * @param result If defined, use this for output\r\n * @returns A Cartographic location\r\n * @throws IModelError if [[isGeoLocated]] is false.\r\n */\r\n public spatialToCartographicFromEcef(spatial: XYAndZ, result?: Cartographic): Cartographic { return Cartographic.fromEcef(this.spatialToEcef(spatial), result)!; }\r\n\r\n /** Convert a [[Cartographic]] to a point in this iModel's Spatial coordinates using its [[IModel.ecefLocation]].\r\n * @param cartographic A cartographic location\r\n * @param result If defined, use this for output\r\n * @returns A point in this iModel's spatial coordinates\r\n * @throws IModelError if [[isGeoLocated]] is false.\r\n * @note The resultant point will only be meaningful if the ECEF coordinate is close on the earth to the iModel.\r\n */\r\n public cartographicToSpatialFromEcef(cartographic: Cartographic, result?: Point3d) { return this.ecefToSpatial(cartographic.toEcef(result), result); }\r\n}\r\n"]}
1
+ {"version":3,"file":"IModel.js","sourceRoot":"","sources":["../../src/IModel.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 iModels\r\n */\r\n\r\nimport { assert, BeEvent, GeoServiceStatus, GuidString, Id64, Id64String, IModelStatus, Mutable, OpenMode } from \"@itwin/core-bentley\";\r\nimport {\r\n Angle, AxisIndex, AxisOrder, Constant, Geometry, Matrix3d, Point3d, Range3d, Range3dProps, Transform, Vector3d, XYAndZ, XYZProps,\r\n YawPitchRollAngles, YawPitchRollProps,\r\n} from \"@itwin/core-geometry\";\r\nimport { ChangesetIdWithIndex } from \"./ChangesetProps\";\r\nimport { Cartographic, CartographicProps } from \"./geometry/Cartographic\";\r\nimport { GeographicCRS, GeographicCRSProps } from \"./geometry/CoordinateReferenceSystem\";\r\nimport { AxisAlignedBox3d } from \"./geometry/Placement\";\r\nimport { IModelError } from \"./IModelError\";\r\nimport { ThumbnailProps } from \"./Thumbnail\";\r\n\r\n/** The properties to open a connection to an iModel for RPC operations.\r\n * @public\r\n */\r\nexport interface IModelRpcOpenProps {\r\n /** The iTwin in which the iModel exists - must be defined for briefcases that are synchronized with iModelHub. */\r\n readonly iTwinId?: GuidString;\r\n /** Guid of the iModel. */\r\n readonly iModelId?: GuidString;\r\n\r\n /** Id of the last Changeset that was applied to the iModel - must be defined for briefcases that are synchronized with iModelHub.\r\n * @note Changeset Ids are string hash values based on the content and parent.\r\n */\r\n readonly changeset?: ChangesetIdWithIndex;\r\n}\r\n\r\n/** The properties that identify an opened iModel for RPC operations.\r\n * @public\r\n */\r\nexport interface IModelRpcProps extends IModelRpcOpenProps {\r\n /** Unique key used for identifying the iModel between the frontend and the backend */\r\n readonly key: string;\r\n}\r\n\r\n/** Properties that position an iModel on the earth via [ECEF](https://en.wikipedia.org/wiki/ECEF) (Earth Centered Earth Fixed) coordinates\r\n * The origin is specified as an ECEF coordinate. The cartographicOrigin property contains the latitude, longitude and elevation above the WGS84 ellipsoid\r\n * of the origin property. This cartographicOrigin is offered as a convenient pre-calculated value representing the location of the ECEF origin.\r\n * The 3D coordinate system this class represents is positioned at specified origin and the axis positioned according to\r\n * the other properties.\r\n * If the xVector and yVector properties are defined then they take precedence over the YawPitchRoll orientation property. The xVector and yVector\r\n * represent the direction and scale of the X and Y axes. The Z axis is always perpendicular (according to the right hand rule) to these X-Y axes.\r\n * The scaling in the Z direction is always unity. The scale of the X and Y axes is represented by the size of the vector length.\r\n * If the xVector and yVector are not present then the YawPitchRoll properties indicates the angles for all tree axes. Scaling in that case\r\n * is unity in all three directions.\r\n * Note that the present class is intended to represent geolocated 3D coordinate systems that are normally tangent to the WGS84 ellipsoid\r\n * possibly offset in altitude by the terrain elevation above the ellipsoid but other general 3D coordinate systems\r\n * can be defined.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface EcefLocationProps {\r\n /** The Origin of an iModel on the earth in ECEF coordinates */\r\n readonly origin: XYZProps;\r\n /** The [orientation](https://en.wikipedia.org/wiki/Geographic_coordinate_conversion) of an iModel on the earth. */\r\n readonly orientation: YawPitchRollProps;\r\n /** Optional position on the earth used to establish the ECEF coordinates. */\r\n readonly cartographicOrigin?: CartographicProps;\r\n /** Optional X column vector used with [[yVector]] to calculate potentially non-rigid transform if a projection is present. */\r\n readonly xVector?: XYZProps;\r\n /** Optional Y column vector used with [[xVector]] to calculate potentially non-rigid transform if a projection is present. */\r\n readonly yVector?: XYZProps;\r\n}\r\n\r\n/** Properties of the [Root Subject]($docs/bis/guide/references/glossary#subject-root).\r\n * @public\r\n * @extensions\r\n */\r\nexport interface RootSubjectProps {\r\n /** The name of the root subject. */\r\n readonly name: string;\r\n /** Description of the root subject (optional). */\r\n readonly description?: string;\r\n}\r\n\r\n/** Properties of an iModel that are always held in memory whenever one is opened, both on the frontend and on the backend .\r\n * @public\r\n */\r\nexport interface IModelProps {\r\n /** The name and description of the root subject of this iModel */\r\n readonly rootSubject: RootSubjectProps;\r\n /** The volume of the entire project, in spatial coordinates */\r\n readonly projectExtents?: Range3dProps;\r\n /** An offset to be applied to all spatial coordinates. This is normally used to transform spatial coordinates into the Cartesian coordinate system of a Geographic Coordinate System. */\r\n readonly globalOrigin?: XYZProps;\r\n /** The location of the iModel in Earth Centered Earth Fixed coordinates. iModel units are always meters */\r\n readonly ecefLocation?: EcefLocationProps;\r\n /** The Geographic Coordinate Reference System indicating the projection and datum used. */\r\n readonly geographicCoordinateSystem?: GeographicCRSProps;\r\n /** The name of the iModel. */\r\n readonly name?: string;\r\n}\r\n\r\n/** The properties returned by the backend when creating a new [[IModelConnection]] from the frontend, either with Rpc or with Ipc.\r\n * These properties describe the iModel held on the backend for thew newly formed connection and are used to construct a new\r\n * [[IModelConnection]] instance on the frontend to access it.\r\n * @public\r\n */\r\nexport type IModelConnectionProps = IModelProps & IModelRpcProps;\r\n\r\n/** The properties that can be supplied when creating a *new* iModel.\r\n * @public\r\n */\r\nexport interface CreateIModelProps extends IModelProps {\r\n /** The GUID of new iModel. If not present, a GUID will be generated. */\r\n readonly guid?: GuidString;\r\n /** Client name for new iModel */\r\n readonly client?: string;\r\n /** Thumbnail for new iModel\r\n * @alpha\r\n */\r\n readonly thumbnail?: ThumbnailProps;\r\n}\r\n\r\n/**\r\n * Encryption-related properties that can be supplied when creating or opening snapshot iModels.\r\n * NOTE: Encrypted iModels are no longer supported since they require licensed code.\r\n * @public\r\n * @deprecated in 3.x.\r\n */\r\nexport interface IModelEncryptionProps {\r\n /** The password used to encrypt/decrypt the snapshot iModel. */\r\n readonly password?: string;\r\n}\r\n\r\n/**\r\n * A key used to identify an opened [IModelDb]($backend) between the frontend and backend for Rpc and Ipc communications.\r\n * Keys must be unique - that is there can never be two IModelDbs opened with the same key at any given time.\r\n * If no key is supplied in a call to open an IModelDb, one is generated and returned.\r\n * It is only necessary to supply a key if you have some reason to assign a specific value to identify an IModelDb.\r\n * If you don't supply the key, you must use the returned value for Rpc and Ipc communications.\r\n * @public\r\n */\r\nexport interface OpenDbKey {\r\n readonly key?: string;\r\n}\r\n\r\n/** @beta TODO documentation */\r\nexport interface CloudContainerUri {\r\n readonly uriParams: string;\r\n}\r\n\r\n/** Options to open a [SnapshotDb]($backend).\r\n * @public\r\n */\r\nexport interface SnapshotOpenOptions extends IModelEncryptionProps, OpenDbKey { // eslint-disable-line deprecation/deprecation\r\n /**\r\n * The \"base\" name that can be used for creating temporary files related to this Db.\r\n * The string should be a name related to the current Db filename using some known pattern so that all files named \"baseName*\" can be deleted externally during cleanup.\r\n * It must be the name of a file (that may or may not exist) in a writable directory.\r\n * If not present, the baseName will default to the database's file name (including the path).\r\n * @internal\r\n */\r\n readonly tempFileBase?: string;\r\n}\r\n\r\n/** Options to open a [StandaloneDb]($backend) via [StandaloneDb.openFile]($backend) from the backend,\r\n * or [BriefcaseConnection.openStandalone]($frontend) from the frontend.\r\n * @public\r\n */\r\nexport type StandaloneOpenOptions = OpenDbKey;\r\n\r\n/** Options that can be supplied when creating snapshot iModels.\r\n * @public\r\n */\r\n// eslint-disable-next-line deprecation/deprecation\r\nexport interface CreateSnapshotIModelProps extends IModelEncryptionProps {\r\n /** If true, then create SQLite views for Model, Element, ElementAspect, and Relationship classes.\r\n * These database views can often be useful for interoperability workflows.\r\n */\r\n readonly createClassViews?: boolean;\r\n}\r\n\r\n/** The options that can be specified when creating an *empty* snapshot iModel.\r\n * @see [SnapshotDb.createEmpty]($backend)\r\n * @public\r\n */\r\nexport type CreateEmptySnapshotIModelProps = CreateIModelProps & CreateSnapshotIModelProps;\r\n\r\n/** Options that can be supplied when creating standalone iModels.\r\n * @internal\r\n */\r\n// eslint-disable-next-line deprecation/deprecation\r\nexport interface CreateStandaloneIModelProps extends IModelEncryptionProps {\r\n /** If present, file will allow local editing, but cannot be used to create changesets */\r\n readonly allowEdit?: string;\r\n}\r\n\r\n/** The options that can be specified when creating an *empty* standalone iModel.\r\n * @see [standalone.createEmpty]($backend)\r\n * @internal\r\n */\r\nexport type CreateEmptyStandaloneIModelProps = CreateIModelProps & CreateStandaloneIModelProps;\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport interface FilePropertyProps {\r\n readonly namespace: string;\r\n readonly name: string;\r\n id?: number | string;\r\n subId?: number | string;\r\n}\r\n\r\n/** The position and orientation of an iModel on the earth in [ECEF](https://en.wikipedia.org/wiki/ECEF) (Earth Centered Earth Fixed) coordinates\r\n * @note This is an immutable type - all of its properties are frozen.\r\n * @see [GeoLocation of iModels]($docs/learning/GeoLocation.md)\r\n * @public\r\n */\r\nexport class EcefLocation implements EcefLocationProps {\r\n /** The origin of the ECEF transform. */\r\n public readonly origin: Point3d;\r\n /** The orientation of the ECEF transform */\r\n public readonly orientation: YawPitchRollAngles;\r\n /** Optional position on the earth used to establish the ECEF origin and orientation. */\r\n public readonly cartographicOrigin?: Cartographic;\r\n /** Optional X column vector used with [[yVector]] to calculate potentially non-rigid transform if a projection is present. */\r\n public readonly xVector?: Vector3d;\r\n /** Optional Y column vector used with [[xVector]] to calculate potentially non-rigid transform if a projection is present. */\r\n public readonly yVector?: Vector3d;\r\n\r\n private readonly _transform: Transform;\r\n\r\n /** Get the transform from iModel Spatial coordinates to ECEF from this EcefLocation */\r\n public getTransform(): Transform { return this._transform; }\r\n\r\n /** Construct a new EcefLocation. Once constructed, it is frozen and cannot be modified. */\r\n constructor(props: EcefLocationProps) {\r\n this.origin = Point3d.fromJSON(props.origin).freeze();\r\n this.orientation = YawPitchRollAngles.fromJSON(props.orientation).freeze();\r\n if (props.cartographicOrigin)\r\n this.cartographicOrigin = Cartographic.fromRadians({ longitude: props.cartographicOrigin.longitude, latitude: props.cartographicOrigin.latitude, height: props.cartographicOrigin.height }).freeze();\r\n if (props.xVector && props.yVector) {\r\n this.xVector = Vector3d.fromJSON(props.xVector).freeze();\r\n this.yVector = Vector3d.fromJSON(props.yVector).freeze();\r\n }\r\n let matrix;\r\n if (this.xVector && this.yVector) {\r\n const zVector = this.xVector.crossProduct(this.yVector);\r\n if (zVector.normalizeInPlace())\r\n matrix = Matrix3d.createColumns(this.xVector, this.yVector, zVector);\r\n }\r\n if (!matrix)\r\n matrix = this.orientation.toMatrix3d();\r\n\r\n this._transform = Transform.createOriginAndMatrix(this.origin, matrix);\r\n this._transform.freeze();\r\n }\r\n\r\n /** Returns true if this EcefLocation is not located at the center of the Earth.\r\n * @alpha are locations very close to the center considered valid? What are the specific criteria?\r\n */\r\n public get isValid(): boolean {\r\n return !this.origin.isZero;\r\n }\r\n\r\n /** Construct ECEF Location from cartographic origin with optional known point and angle. */\r\n public static createFromCartographicOrigin(origin: Cartographic, point?: Point3d, angle?: Angle) {\r\n const ecefOrigin = origin.toEcef();\r\n const deltaRadians = 10 / Constant.earthRadiusWGS84.polar;\r\n const northCarto = Cartographic.fromRadians({ longitude: origin.longitude, latitude: origin.latitude + deltaRadians, height: origin.height });\r\n const eastCarto = Cartographic.fromRadians({ longitude: origin.longitude + deltaRadians, latitude: origin.latitude, height: origin.height });\r\n const ecefNorth = northCarto.toEcef();\r\n const ecefEast = eastCarto.toEcef();\r\n const xVector = Vector3d.createStartEnd(ecefOrigin, ecefEast).normalize();\r\n const yVector = Vector3d.createStartEnd(ecefOrigin, ecefNorth).normalize();\r\n const matrix = Matrix3d.createRigidFromColumns(xVector!, yVector!, AxisOrder.XYZ)!;\r\n if (angle !== undefined) {\r\n const north = Matrix3d.createRotationAroundAxisIndex(AxisIndex.Z, angle);\r\n matrix.multiplyMatrixMatrix(north, matrix);\r\n }\r\n if (point !== undefined) {\r\n const delta = matrix.multiplyVector(Vector3d.create(-point.x, -point.y, -point.z));\r\n ecefOrigin.addInPlace(delta);\r\n }\r\n\r\n return new EcefLocation({ origin: ecefOrigin, orientation: YawPitchRollAngles.createFromMatrix3d(matrix)!, cartographicOrigin: origin });\r\n }\r\n\r\n /** Get the location center of the earth in the iModel coordinate system. */\r\n public get earthCenter(): Point3d {\r\n const matrix = this.orientation.toMatrix3d();\r\n return Point3d.createFrom(matrix.multiplyTransposeXYZ(-this.origin.x, -this.origin.y, -this.origin.z));\r\n }\r\n\r\n /** Return true if this location is equivalent to another location within a small tolerance. */\r\n public isAlmostEqual(other: EcefLocation): boolean {\r\n if (!this.origin.isAlmostEqual(other.origin) || !this.orientation.isAlmostEqual(other.orientation))\r\n return false;\r\n\r\n if ((this.xVector === undefined) !== (other.xVector === undefined) || (this.yVector === undefined) !== (other.yVector === undefined))\r\n return false;\r\n\r\n if (this.xVector !== undefined && other.xVector !== undefined && !this.xVector.isAlmostEqual(other.xVector))\r\n return false;\r\n\r\n if (this.yVector !== undefined && other.yVector !== undefined && !this.yVector.isAlmostEqual(other.yVector))\r\n return false;\r\n\r\n const thisCarto = this.cartographicOrigin;\r\n const otherCarto = other.cartographicOrigin;\r\n if (undefined === thisCarto || undefined === otherCarto)\r\n return undefined === thisCarto && undefined === otherCarto;\r\n\r\n return thisCarto.equalsEpsilon(otherCarto, Geometry.smallMetricDistance);\r\n }\r\n\r\n public toJSON(): EcefLocationProps {\r\n const props: Mutable<EcefLocationProps> = {\r\n origin: this.origin.toJSON(),\r\n orientation: this.orientation.toJSON(),\r\n };\r\n\r\n if (this.cartographicOrigin)\r\n props.cartographicOrigin = this.cartographicOrigin.toJSON();\r\n\r\n if (this.xVector)\r\n props.xVector = this.xVector.toJSON();\r\n\r\n if (this.yVector)\r\n props.yVector = this.yVector.toJSON();\r\n\r\n return props;\r\n }\r\n}\r\n\r\n/** Represents an iModel in JavaScript.\r\n * @see [GeoLocation of iModels]($docs/learning/GeoLocation.md)\r\n * @public\r\n */\r\nexport abstract class IModel implements IModelProps {\r\n private _projectExtents?: AxisAlignedBox3d;\r\n private _name?: string;\r\n private _rootSubject?: RootSubjectProps;\r\n private _globalOrigin?: Point3d;\r\n private _ecefLocation?: EcefLocation;\r\n private _geographicCoordinateSystem?: GeographicCRS;\r\n private _iModelId?: GuidString;\r\n\r\n /** The Id of the repository model. */\r\n public static readonly repositoryModelId: Id64String = \"0x1\";\r\n /** The Id of the root subject element. */\r\n public static readonly rootSubjectId: Id64String = \"0x1\";\r\n /** The Id of the dictionary model. */\r\n public static readonly dictionaryId: Id64String = \"0x10\";\r\n\r\n /** Event raised after [[name]] changes. */\r\n public readonly onNameChanged = new BeEvent<(previousName: string) => void>();\r\n /** Event raised after [[rootSubject]] changes. */\r\n public readonly onRootSubjectChanged = new BeEvent<(previousSubject: RootSubjectProps) => void>();\r\n /** Event raised after [[projectExtents]] changes. */\r\n public readonly onProjectExtentsChanged = new BeEvent<(previousExtents: AxisAlignedBox3d) => void>();\r\n /** Event raised after [[globalOrigin]] changes. */\r\n public readonly onGlobalOriginChanged = new BeEvent<(previousOrigin: Point3d) => void>();\r\n /** Event raised after [[ecefLocation]] changes. */\r\n public readonly onEcefLocationChanged = new BeEvent<(previousLocation: EcefLocation | undefined) => void>();\r\n /** Event raised after [[geographicCoordinateSystem]] changes. */\r\n public readonly onGeographicCoordinateSystemChanged = new BeEvent<(previousGCS: GeographicCRS | undefined) => void>();\r\n\r\n /** Name of the iModel */\r\n public get name(): string {\r\n assert(this._name !== undefined);\r\n return this._name;\r\n }\r\n public set name(name: string) {\r\n if (name !== this._name) {\r\n const old = this._name;\r\n this._name = name;\r\n if (undefined !== old)\r\n this.onNameChanged.raiseEvent(old);\r\n }\r\n }\r\n\r\n /** The name and description of the root subject of this iModel */\r\n public get rootSubject(): RootSubjectProps {\r\n assert(this._rootSubject !== undefined);\r\n return this._rootSubject;\r\n }\r\n public set rootSubject(subject: RootSubjectProps) {\r\n if (undefined === this._rootSubject || this._rootSubject.name !== subject.name || this._rootSubject.description !== subject.description) {\r\n const old = this._rootSubject;\r\n this._rootSubject = subject;\r\n if (old)\r\n this.onRootSubjectChanged.raiseEvent(old);\r\n }\r\n }\r\n\r\n /** Returns `true` if this is a snapshot iModel. */\r\n public abstract get isSnapshot(): boolean;\r\n /** Returns `true` if this is a briefcase copy of an iModel that is synchronized with iModelHub. */\r\n public abstract get isBriefcase(): boolean;\r\n\r\n public abstract get isOpen(): boolean;\r\n\r\n /**\r\n * The volume, in spatial coordinates, inside which the entire project is contained.\r\n * @note The object returned from this method is frozen. You *must* make a copy before you do anything that might attempt to modify it.\r\n */\r\n public get projectExtents() {\r\n assert(undefined !== this._projectExtents);\r\n return this._projectExtents;\r\n }\r\n public set projectExtents(extents: AxisAlignedBox3d) {\r\n // Don't allow any axis of the project extents to be less than 1 meter.\r\n const projectExtents = extents.clone();\r\n projectExtents.ensureMinLengths(1.0);\r\n if (!this._projectExtents || !this._projectExtents.isAlmostEqual(projectExtents)) {\r\n const old = this._projectExtents;\r\n projectExtents.freeze();\r\n this._projectExtents = projectExtents;\r\n if (old)\r\n this.onProjectExtentsChanged.raiseEvent(old);\r\n }\r\n }\r\n\r\n /** An offset to be applied to all spatial coordinates. */\r\n public get globalOrigin(): Point3d {\r\n assert(this._globalOrigin !== undefined);\r\n return this._globalOrigin;\r\n }\r\n public set globalOrigin(org: Point3d) {\r\n if (!this._globalOrigin || !this._globalOrigin.isAlmostEqual(org)) {\r\n const old = this._globalOrigin;\r\n org.freeze();\r\n this._globalOrigin = org;\r\n if (old)\r\n this.onGlobalOriginChanged.raiseEvent(old);\r\n }\r\n }\r\n\r\n /** The [EcefLocation]($docs/learning/glossary#ecefLocation) of the iModel in Earth Centered Earth Fixed coordinates.\r\n * If the iModel property geographicCoordinateSystem is not defined then the ecefLocation provides a geolocation by defining a\r\n * 3D coordinate system relative to the Earth model WGS84. Refer to additional documentation for details. If the geographicCoordinateSystem\r\n * property is defined then the ecefLocation must be used with care. When the geographicCoordinateSystem is defined it indicates the\r\n * iModel cartesian space is the result of a cartographic projection. This implies a flattening of the Earth surface process that\r\n * results in scale, angular or area distortion. The ecefLocation is then an approximation calculated at the center of the project extent.\r\n * If the project is more than 2 kilometer in size, the ecefLocation may represent a poor approximation of the effective\r\n * cartographic projection used and a linear transformation should then be calculated at the exact origin of the data\r\n * it must position.\r\n * @see [GeoLocation of iModels]($docs/learning/GeoLocation.md)\r\n */\r\n public get ecefLocation(): EcefLocation | undefined {\r\n return this._ecefLocation;\r\n }\r\n public set ecefLocation(ecefLocation: EcefLocation | undefined) {\r\n const old = this._ecefLocation;\r\n if (!old && !ecefLocation)\r\n return;\r\n else if (old && ecefLocation && old.isAlmostEqual(ecefLocation))\r\n return;\r\n\r\n this._ecefLocation = ecefLocation;\r\n this.onEcefLocationChanged.raiseEvent(old);\r\n }\r\n\r\n /** Set the [EcefLocation]($docs/learning/glossary#ecefLocation) for this iModel. */\r\n public setEcefLocation(ecef: EcefLocationProps): void {\r\n this.ecefLocation = new EcefLocation(ecef);\r\n }\r\n\r\n /** The geographic coordinate reference system of the iModel. */\r\n public get geographicCoordinateSystem(): GeographicCRS | undefined {\r\n return this._geographicCoordinateSystem;\r\n }\r\n public set geographicCoordinateSystem(geoCRS: GeographicCRS | undefined) {\r\n const old = this._geographicCoordinateSystem;\r\n if (!old && !geoCRS)\r\n return;\r\n else if (old && geoCRS && old.equals(geoCRS))\r\n return;\r\n\r\n this._geographicCoordinateSystem = geoCRS;\r\n this.onGeographicCoordinateSystemChanged.raiseEvent(old);\r\n }\r\n\r\n /** Sets the geographic coordinate reference system from GeographicCRSProps. */\r\n public setGeographicCoordinateSystem(geoCRS: GeographicCRSProps) {\r\n this.geographicCoordinateSystem = new GeographicCRS(geoCRS);\r\n }\r\n\r\n /** @internal */\r\n public getConnectionProps(): IModelConnectionProps {\r\n return {\r\n name: this.name,\r\n rootSubject: this.rootSubject,\r\n projectExtents: this.projectExtents.toJSON(),\r\n globalOrigin: this.globalOrigin.toJSON(),\r\n ecefLocation: this.ecefLocation,\r\n geographicCoordinateSystem: this.geographicCoordinateSystem,\r\n ... this._getRpcProps(),\r\n };\r\n }\r\n\r\n /** @internal */\r\n public toJSON(): IModelConnectionProps {\r\n return this.getConnectionProps();\r\n }\r\n\r\n /** A key used to identify this iModel in RPC calls from frontend to backend.\r\n * @internal\r\n */\r\n protected _fileKey: string;\r\n /** Get the key that was used to open this iModel. This is the value used for Rpc and Ipc communications. */\r\n public get key(): string { return this._fileKey; }\r\n\r\n /** @internal */\r\n protected _iTwinId?: GuidString;\r\n /** The Guid that identifies the iTwin that owns this iModel. */\r\n public get iTwinId(): GuidString | undefined { return this._iTwinId; }\r\n\r\n /** The Guid that identifies this iModel. */\r\n public get iModelId(): GuidString | undefined { return this._iModelId; }\r\n\r\n /** @public */\r\n public changeset: ChangesetIdWithIndex;\r\n\r\n protected _openMode = OpenMode.Readonly;\r\n /** The [[OpenMode]] used for this IModel. */\r\n public get openMode(): OpenMode { return this._openMode; }\r\n\r\n /** Return a token for RPC operations.\r\n * @throws IModelError if the iModel is not open.\r\n */\r\n public getRpcProps(): IModelRpcProps {\r\n if (!this.isOpen)\r\n throw new IModelError(IModelStatus.BadRequest, \"IModel is not open for rpc\");\r\n\r\n return this._getRpcProps();\r\n }\r\n\r\n /** Returns the iModel's RPC properties.\r\n * @note It is an error to attempt to use these properties as a token for RPC operations if the iModel is not open.\r\n * @internal\r\n */\r\n protected _getRpcProps(): IModelRpcProps {\r\n return {\r\n key: this._fileKey,\r\n iTwinId: this.iTwinId,\r\n iModelId: this.iModelId,\r\n changeset: this.changeset,\r\n };\r\n }\r\n\r\n /** @internal */\r\n protected constructor(tokenProps?: IModelRpcProps) {\r\n this.changeset = { id: \"\", index: 0 };\r\n this._fileKey = \"\";\r\n if (tokenProps) {\r\n this._fileKey = tokenProps.key;\r\n this._iTwinId = tokenProps.iTwinId;\r\n this._iModelId = tokenProps.iModelId;\r\n if (tokenProps.changeset)\r\n this.changeset = tokenProps.changeset;\r\n }\r\n }\r\n\r\n /** @internal */\r\n protected initialize(name: string, props: IModelProps) {\r\n this.name = name;\r\n this.rootSubject = props.rootSubject;\r\n this.projectExtents = Range3d.fromJSON(props.projectExtents);\r\n this.globalOrigin = Point3d.fromJSON(props.globalOrigin);\r\n\r\n const ecefLocation = props.ecefLocation ? new EcefLocation(props.ecefLocation) : undefined;\r\n this.ecefLocation = ecefLocation?.isValid ? ecefLocation : undefined;\r\n\r\n this.geographicCoordinateSystem = props.geographicCoordinateSystem ? new GeographicCRS(props.geographicCoordinateSystem) : undefined;\r\n }\r\n\r\n /** Get the default subCategoryId for the supplied categoryId */\r\n public static getDefaultSubCategoryId(categoryId: Id64String): Id64String {\r\n return Id64.isValid(categoryId) ? Id64.fromLocalAndBriefcaseIds(Id64.getLocalId(categoryId) + 1, Id64.getBriefcaseId(categoryId)) : Id64.invalid;\r\n }\r\n\r\n /** True if this iModel has an [EcefLocation]($docs/learning/glossary#ecefLocation). */\r\n public get isGeoLocated() { return undefined !== this._ecefLocation; }\r\n\r\n /** Get the Transform from this iModel's Spatial coordinates to ECEF coordinates using its [[IModel.ecefLocation]].\r\n * @throws IModelError if [[isGeoLocated]] is false.\r\n */\r\n public getEcefTransform(): Transform {\r\n if (undefined === this._ecefLocation)\r\n throw new IModelError(GeoServiceStatus.NoGeoLocation, \"iModel is not GeoLocated\");\r\n return this._ecefLocation.getTransform();\r\n }\r\n\r\n /** Convert a point in this iModel's Spatial coordinates to an ECEF point using its [[IModel.ecefLocation]].\r\n * @param spatial A point in the iModel's spatial coordinates\r\n * @param result If defined, use this for output\r\n * @returns A Point3d in ECEF coordinates\r\n * @throws IModelError if [[isGeoLocated]] is false.\r\n */\r\n public spatialToEcef(spatial: XYAndZ, result?: Point3d): Point3d { return this.getEcefTransform().multiplyPoint3d(spatial, result)!; }\r\n\r\n /** Convert a point in ECEF coordinates to a point in this iModel's Spatial coordinates using its [[ecefLocation]].\r\n * @param ecef A point in ECEF coordinates\r\n * @param result If defined, use this for output\r\n * @returns A Point3d in this iModel's spatial coordinates\r\n * @throws IModelError if [[isGeoLocated]] is false.\r\n * @note The resultant point will only be meaningful if the ECEF coordinate is close on the earth to the iModel.\r\n */\r\n public ecefToSpatial(ecef: XYAndZ, result?: Point3d): Point3d { return this.getEcefTransform().multiplyInversePoint3d(ecef, result)!; }\r\n\r\n /** Convert a point in this iModel's Spatial coordinates to a [[Cartographic]] using its [[IModel.ecefLocation]].\r\n * @param spatial A point in the iModel's spatial coordinates\r\n * @param result If defined, use this for output\r\n * @returns A Cartographic location\r\n * @throws IModelError if [[isGeoLocated]] is false.\r\n */\r\n public spatialToCartographicFromEcef(spatial: XYAndZ, result?: Cartographic): Cartographic { return Cartographic.fromEcef(this.spatialToEcef(spatial), result)!; }\r\n\r\n /** Convert a [[Cartographic]] to a point in this iModel's Spatial coordinates using its [[IModel.ecefLocation]].\r\n * @param cartographic A cartographic location\r\n * @param result If defined, use this for output\r\n * @returns A point in this iModel's spatial coordinates\r\n * @throws IModelError if [[isGeoLocated]] is false.\r\n * @note The resultant point will only be meaningful if the ECEF coordinate is close on the earth to the iModel.\r\n */\r\n public cartographicToSpatialFromEcef(cartographic: Cartographic, result?: Point3d) { return this.ecefToSpatial(cartographic.toEcef(result), result); }\r\n}\r\n"]}
@@ -1,13 +1,19 @@
1
1
  /** @packageDocumentation
2
2
  * @module iModels
3
3
  */
4
- import { BentleyError, BentleyStatus, BriefcaseStatus, ChangeSetStatus, DbResult, GetMetaDataFunction, IModelStatus, RepositoryStatus, RpcInterfaceStatus } from "@itwin/core-bentley";
5
- export { BentleyStatus, BentleyError, IModelStatus, BriefcaseStatus, GetMetaDataFunction, LogFunction, DbResult, RepositoryStatus, ChangeSetStatus, RpcInterfaceStatus } from "@itwin/core-bentley";
6
- /** The error type thrown by this module. See [[IModelStatus]] for `errorNumber` values.
4
+ import { BentleyError, BentleyStatus, BriefcaseStatus, ChangeSetStatus, DbResult, GetMetaDataFunction, IModelStatus } from "@itwin/core-bentley";
5
+ export { BentleyStatus, BentleyError, IModelStatus, BriefcaseStatus, GetMetaDataFunction, LogFunction, DbResult, ChangeSetStatus, } from "@itwin/core-bentley";
6
+ /** Numeric values for common errors produced by iTwin.js APIs, typically provided by [[IModelError]].
7
+ * The values within each of these `enum`s are guaranteed not to conflict with one another.
8
+ * @public
9
+ */
10
+ export declare type IModelErrorNumber = IModelStatus | DbResult | BentleyStatus | BriefcaseStatus | ChangeSetStatus;
11
+ /** The error type thrown by this module.
12
+ * @see [[IModelErrorNumber]] for commonly-used error codes.
7
13
  * @public
8
14
  */
9
15
  export declare class IModelError extends BentleyError {
10
- constructor(errorNumber: number | IModelStatus | DbResult | BentleyStatus | BriefcaseStatus | RepositoryStatus | ChangeSetStatus | RpcInterfaceStatus, message: string, getMetaData?: GetMetaDataFunction);
16
+ constructor(errorNumber: IModelErrorNumber | number, message: string, getMetaData?: GetMetaDataFunction);
11
17
  }
12
18
  /** @public */
13
19
  export declare class ServerError extends IModelError {
@@ -1 +1 @@
1
- {"version":3,"file":"IModelError.d.ts","sourceRoot":"","sources":["../../src/IModelError.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAAE,gBAAgB,EAC5H,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEpM;;GAEG;AACH,qBAAa,WAAY,SAAQ,YAAY;gBACxB,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,GAAG,kBAAkB,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,mBAAmB;CAGjN;AAED,cAAc;AACd,qBAAa,WAAY,SAAQ,WAAW;gBACvB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIxD;AAED,cAAc;AACd,qBAAa,kBAAmB,SAAQ,WAAW;gBAC9B,OAAO,EAAE,MAAM;CAInC;AAED,cAAc;AACd,qBAAa,YAAa,SAAQ,WAAW;gBACxB,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,mBAAmB;CAIzG;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,mBAAmB;CAGtE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;;CAI9C"}
1
+ {"version":3,"file":"IModelError.d.ts","sourceRoot":"","sources":["../../src/IModelError.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,mBAAmB,EAAE,YAAY,EAC3G,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,GACxH,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,oBAAY,iBAAiB,GAAG,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;AAE5G;;;GAGG;AACH,qBAAa,WAAY,SAAQ,YAAY;gBACxB,WAAW,EAAE,iBAAiB,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,mBAAmB;CAG/G;AAED,cAAc;AACd,qBAAa,WAAY,SAAQ,WAAW;gBACvB,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIxD;AAED,cAAc;AACd,qBAAa,kBAAmB,SAAQ,WAAW;gBAC9B,OAAO,EAAE,MAAM;CAInC;AAED,cAAc;AACd,qBAAa,YAAa,SAAQ,WAAW;gBACxB,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,mBAAmB;CAIzG;AAED;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,mBAAmB;CAGtE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;;CAI9C"}
@@ -6,8 +6,9 @@
6
6
  * @module iModels
7
7
  */
8
8
  import { BentleyError, IModelStatus, RepositoryStatus, } from "@itwin/core-bentley";
9
- export { BentleyStatus, BentleyError, IModelStatus, BriefcaseStatus, DbResult, RepositoryStatus, ChangeSetStatus, RpcInterfaceStatus } from "@itwin/core-bentley";
10
- /** The error type thrown by this module. See [[IModelStatus]] for `errorNumber` values.
9
+ export { BentleyStatus, BentleyError, IModelStatus, BriefcaseStatus, DbResult, ChangeSetStatus, } from "@itwin/core-bentley";
10
+ /** The error type thrown by this module.
11
+ * @see [[IModelErrorNumber]] for commonly-used error codes.
11
12
  * @public
12
13
  */
13
14
  export class IModelError extends BentleyError {