@itwin/core-frontend 3.5.0-dev.8 → 3.6.0-dev.3

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 (504) hide show
  1. package/CHANGELOG.md +75 -1
  2. package/lib/cjs/AccuSnap.d.ts +7 -1
  3. package/lib/cjs/AccuSnap.d.ts.map +1 -1
  4. package/lib/cjs/AccuSnap.js +26 -3
  5. package/lib/cjs/AccuSnap.js.map +1 -1
  6. package/lib/cjs/BriefcaseConnection.d.ts +28 -1
  7. package/lib/cjs/BriefcaseConnection.d.ts.map +1 -1
  8. package/lib/cjs/BriefcaseConnection.js +29 -8
  9. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  10. package/lib/cjs/BriefcaseTxns.js +9 -9
  11. package/lib/cjs/BriefcaseTxns.js.map +1 -1
  12. package/lib/cjs/GraphicalEditingScope.d.ts.map +1 -1
  13. package/lib/cjs/GraphicalEditingScope.js +10 -4
  14. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  15. package/lib/cjs/IModelApp.d.ts +6 -0
  16. package/lib/cjs/IModelApp.d.ts.map +1 -1
  17. package/lib/cjs/IModelApp.js +6 -0
  18. package/lib/cjs/IModelApp.js.map +1 -1
  19. package/lib/cjs/IModelConnection.d.ts +32 -2
  20. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  21. package/lib/cjs/IModelConnection.js +44 -6
  22. package/lib/cjs/IModelConnection.js.map +1 -1
  23. package/lib/cjs/IpcApp.d.ts +14 -1
  24. package/lib/cjs/IpcApp.d.ts.map +1 -1
  25. package/lib/cjs/IpcApp.js +25 -0
  26. package/lib/cjs/IpcApp.js.map +1 -1
  27. package/lib/cjs/MarginPercent.d.ts +27 -2
  28. package/lib/cjs/MarginPercent.d.ts.map +1 -1
  29. package/lib/cjs/MarginPercent.js +8 -2
  30. package/lib/cjs/MarginPercent.js.map +1 -1
  31. package/lib/cjs/ModelState.d.ts +2 -1
  32. package/lib/cjs/ModelState.d.ts.map +1 -1
  33. package/lib/cjs/ModelState.js +5 -3
  34. package/lib/cjs/ModelState.js.map +1 -1
  35. package/lib/cjs/NativeApp.d.ts +5 -1
  36. package/lib/cjs/NativeApp.d.ts.map +1 -1
  37. package/lib/cjs/NativeApp.js +25 -20
  38. package/lib/cjs/NativeApp.js.map +1 -1
  39. package/lib/cjs/NativeAppLogger.js +1 -1
  40. package/lib/cjs/NativeAppLogger.js.map +1 -1
  41. package/lib/cjs/RealityDataSource.d.ts +44 -1
  42. package/lib/cjs/RealityDataSource.d.ts.map +1 -1
  43. package/lib/cjs/RealityDataSource.js +41 -14
  44. package/lib/cjs/RealityDataSource.js.map +1 -1
  45. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts +1 -0
  46. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -1
  47. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js +3 -0
  48. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  49. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts +1 -0
  50. package/lib/cjs/RealityDataSourceContextShareImpl.d.ts.map +1 -1
  51. package/lib/cjs/RealityDataSourceContextShareImpl.js +3 -0
  52. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  53. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +1 -0
  54. package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  55. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +3 -0
  56. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  57. package/lib/cjs/SelectionSet.d.ts.map +1 -1
  58. package/lib/cjs/SelectionSet.js +3 -1
  59. package/lib/cjs/SelectionSet.js.map +1 -1
  60. package/lib/cjs/ViewAnimation.d.ts +10 -2
  61. package/lib/cjs/ViewAnimation.d.ts.map +1 -1
  62. package/lib/cjs/ViewAnimation.js.map +1 -1
  63. package/lib/cjs/ViewCreator2d.js +3 -2
  64. package/lib/cjs/ViewCreator2d.js.map +1 -1
  65. package/lib/cjs/ViewPose.d.ts +62 -10
  66. package/lib/cjs/ViewPose.d.ts.map +1 -1
  67. package/lib/cjs/ViewPose.js +37 -8
  68. package/lib/cjs/ViewPose.js.map +1 -1
  69. package/lib/cjs/ViewState.d.ts +18 -10
  70. package/lib/cjs/ViewState.d.ts.map +1 -1
  71. package/lib/cjs/ViewState.js +39 -15
  72. package/lib/cjs/ViewState.js.map +1 -1
  73. package/lib/cjs/Viewport.d.ts.map +1 -1
  74. package/lib/cjs/Viewport.js +7 -2
  75. package/lib/cjs/Viewport.js.map +1 -1
  76. package/lib/cjs/extension/ExtensionRuntime.js +11 -0
  77. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  78. package/lib/cjs/render/RenderMaterial.d.ts +3 -1
  79. package/lib/cjs/render/RenderMaterial.d.ts.map +1 -1
  80. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  81. package/lib/cjs/render/RenderTarget.d.ts +1 -0
  82. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  83. package/lib/cjs/render/RenderTarget.js.map +1 -1
  84. package/lib/cjs/render/primitives/SurfaceParams.d.ts +0 -1
  85. package/lib/cjs/render/primitives/SurfaceParams.d.ts.map +1 -1
  86. package/lib/cjs/render/primitives/SurfaceParams.js.map +1 -1
  87. package/lib/cjs/render/primitives/VertexTable.d.ts.map +1 -1
  88. package/lib/cjs/render/primitives/VertexTable.js +0 -1
  89. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  90. package/lib/cjs/render/primitives/VertexTableSplitter.d.ts.map +1 -1
  91. package/lib/cjs/render/primitives/VertexTableSplitter.js +0 -1
  92. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
  93. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +0 -1
  94. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  95. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +0 -1
  96. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  97. package/lib/cjs/render/webgl/FeatureOverrides.d.ts +0 -1
  98. package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
  99. package/lib/cjs/render/webgl/FeatureOverrides.js +16 -11
  100. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  101. package/lib/cjs/render/webgl/MeshData.d.ts +1 -1
  102. package/lib/cjs/render/webgl/MeshData.d.ts.map +1 -1
  103. package/lib/cjs/render/webgl/MeshData.js +13 -1
  104. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  105. package/lib/cjs/render/webgl/MeshGeometry.d.ts +1 -1
  106. package/lib/cjs/render/webgl/MeshGeometry.d.ts.map +1 -1
  107. package/lib/cjs/render/webgl/MeshGeometry.js +1 -1
  108. package/lib/cjs/render/webgl/MeshGeometry.js.map +1 -1
  109. package/lib/cjs/render/webgl/RenderFlags.d.ts +14 -4
  110. package/lib/cjs/render/webgl/RenderFlags.d.ts.map +1 -1
  111. package/lib/cjs/render/webgl/RenderFlags.js +2 -0
  112. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  113. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +2 -1
  114. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  115. package/lib/cjs/render/webgl/ShaderBuilder.js +6 -1
  116. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  117. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts +3 -1
  118. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  119. package/lib/cjs/render/webgl/SurfaceGeometry.js +17 -6
  120. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  121. package/lib/cjs/render/webgl/System.d.ts +1 -1
  122. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  123. package/lib/cjs/render/webgl/System.js +1 -0
  124. package/lib/cjs/render/webgl/System.js.map +1 -1
  125. package/lib/cjs/render/webgl/Target.d.ts +1 -0
  126. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  127. package/lib/cjs/render/webgl/Target.js +1 -0
  128. package/lib/cjs/render/webgl/Target.js.map +1 -1
  129. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  130. package/lib/cjs/render/webgl/glsl/Animation.js +2 -1
  131. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  132. package/lib/cjs/render/webgl/glsl/Common.d.ts +3 -1
  133. package/lib/cjs/render/webgl/glsl/Common.d.ts.map +1 -1
  134. package/lib/cjs/render/webgl/glsl/Common.js +28 -33
  135. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  136. package/lib/cjs/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  137. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +9 -1
  138. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  139. package/lib/cjs/render/webgl/glsl/Lighting.d.ts.map +1 -1
  140. package/lib/cjs/render/webgl/glsl/Lighting.js +6 -8
  141. package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
  142. package/lib/cjs/render/webgl/glsl/PointCloud.d.ts.map +1 -1
  143. package/lib/cjs/render/webgl/glsl/PointCloud.js +8 -3
  144. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  145. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts +1 -0
  146. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  147. package/lib/cjs/render/webgl/glsl/RealityMesh.js +6 -1
  148. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  149. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.d.ts.map +1 -1
  150. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +1 -4
  151. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  152. package/lib/cjs/render/webgl/glsl/Surface.d.ts +1 -1
  153. package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
  154. package/lib/cjs/render/webgl/glsl/Surface.js +87 -15
  155. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  156. package/lib/cjs/render/webgl/glsl/Thematic.d.ts.map +1 -1
  157. package/lib/cjs/render/webgl/glsl/Thematic.js +2 -6
  158. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  159. package/lib/cjs/tile/GltfReader.d.ts +13 -2
  160. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  161. package/lib/cjs/tile/GltfReader.js +66 -22
  162. package/lib/cjs/tile/GltfReader.js.map +1 -1
  163. package/lib/cjs/tile/IModelTileRequestChannels.js +1 -1
  164. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  165. package/lib/cjs/tile/ImdlReader.d.ts +5 -0
  166. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  167. package/lib/cjs/tile/ImdlReader.js +9 -2
  168. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  169. package/lib/cjs/tile/PrimaryTileTree.js +2 -2
  170. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  171. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  172. package/lib/cjs/tile/RealityModelTileTree.js +51 -20
  173. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  174. package/lib/cjs/tile/RealityTile.d.ts +2 -2
  175. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  176. package/lib/cjs/tile/RealityTile.js +11 -4
  177. package/lib/cjs/tile/RealityTile.js.map +1 -1
  178. package/lib/cjs/tile/RealityTileLoader.d.ts +1 -0
  179. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  180. package/lib/cjs/tile/RealityTileLoader.js +13 -0
  181. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  182. package/lib/cjs/tile/RealityTileTree.js +1 -1
  183. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  184. package/lib/cjs/tile/Tile.d.ts +5 -0
  185. package/lib/cjs/tile/Tile.d.ts.map +1 -1
  186. package/lib/cjs/tile/Tile.js +5 -0
  187. package/lib/cjs/tile/Tile.js.map +1 -1
  188. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  189. package/lib/cjs/tile/TileAdmin.js +13 -6
  190. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  191. package/lib/cjs/tile/TileDrawArgs.d.ts +5 -1
  192. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  193. package/lib/cjs/tile/TileDrawArgs.js +2 -0
  194. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  195. package/lib/cjs/tile/TileRequestChannels.js +1 -1
  196. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  197. package/lib/cjs/tile/TileStorage.d.ts.map +1 -1
  198. package/lib/cjs/tile/TileStorage.js +12 -6
  199. package/lib/cjs/tile/TileStorage.js.map +1 -1
  200. package/lib/cjs/tile/internal.d.ts +1 -0
  201. package/lib/cjs/tile/internal.d.ts.map +1 -1
  202. package/lib/cjs/tile/internal.js +1 -0
  203. package/lib/cjs/tile/internal.js.map +1 -1
  204. package/lib/cjs/tile/map/ArcGISTileMap.d.ts +5 -2
  205. package/lib/cjs/tile/map/ArcGISTileMap.d.ts.map +1 -1
  206. package/lib/cjs/tile/map/ArcGISTileMap.js +17 -2
  207. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  208. package/lib/cjs/tile/map/ArcGisUtilities.d.ts +51 -5
  209. package/lib/cjs/tile/map/ArcGisUtilities.d.ts.map +1 -1
  210. package/lib/cjs/tile/map/ArcGisUtilities.js +120 -48
  211. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  212. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +26 -0
  213. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -0
  214. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +97 -0
  215. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -0
  216. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -4
  217. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  218. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +11 -96
  219. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  220. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  221. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -1
  222. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  223. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -0
  224. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  225. package/lib/cjs/tile/map/ImageryTileTree.js +6 -4
  226. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  227. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts +18 -4
  228. package/lib/cjs/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  229. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +25 -5
  230. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  231. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts +6 -4
  232. package/lib/cjs/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  233. package/lib/cjs/tile/map/MapLayerImageryFormats.js +12 -16
  234. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  235. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +26 -5
  236. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  237. package/lib/cjs/tile/map/MapLayerImageryProvider.js +69 -48
  238. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  239. package/lib/cjs/tile/map/MapLayerSources.js +1 -1
  240. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  241. package/lib/cjs/tile/map/WmsCapabilities.d.ts.map +1 -1
  242. package/lib/cjs/tile/map/WmsCapabilities.js +4 -1
  243. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  244. package/lib/cjs/tools/EditManipulator.d.ts.map +1 -1
  245. package/lib/cjs/tools/EditManipulator.js +2 -1
  246. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  247. package/lib/cjs/tools/Tool.js +1 -1
  248. package/lib/cjs/tools/Tool.js.map +1 -1
  249. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  250. package/lib/cjs/tools/ToolAdmin.js +6 -4
  251. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  252. package/lib/esm/AccuSnap.d.ts +7 -1
  253. package/lib/esm/AccuSnap.d.ts.map +1 -1
  254. package/lib/esm/AccuSnap.js +27 -4
  255. package/lib/esm/AccuSnap.js.map +1 -1
  256. package/lib/esm/BriefcaseConnection.d.ts +28 -1
  257. package/lib/esm/BriefcaseConnection.d.ts.map +1 -1
  258. package/lib/esm/BriefcaseConnection.js +30 -9
  259. package/lib/esm/BriefcaseConnection.js.map +1 -1
  260. package/lib/esm/BriefcaseTxns.js +9 -9
  261. package/lib/esm/BriefcaseTxns.js.map +1 -1
  262. package/lib/esm/GraphicalEditingScope.d.ts.map +1 -1
  263. package/lib/esm/GraphicalEditingScope.js +10 -4
  264. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  265. package/lib/esm/IModelApp.d.ts +6 -0
  266. package/lib/esm/IModelApp.d.ts.map +1 -1
  267. package/lib/esm/IModelApp.js +6 -0
  268. package/lib/esm/IModelApp.js.map +1 -1
  269. package/lib/esm/IModelConnection.d.ts +32 -2
  270. package/lib/esm/IModelConnection.d.ts.map +1 -1
  271. package/lib/esm/IModelConnection.js +44 -6
  272. package/lib/esm/IModelConnection.js.map +1 -1
  273. package/lib/esm/IpcApp.d.ts +14 -1
  274. package/lib/esm/IpcApp.d.ts.map +1 -1
  275. package/lib/esm/IpcApp.js +25 -0
  276. package/lib/esm/IpcApp.js.map +1 -1
  277. package/lib/esm/MarginPercent.d.ts +27 -2
  278. package/lib/esm/MarginPercent.d.ts.map +1 -1
  279. package/lib/esm/MarginPercent.js +8 -2
  280. package/lib/esm/MarginPercent.js.map +1 -1
  281. package/lib/esm/ModelState.d.ts +2 -1
  282. package/lib/esm/ModelState.d.ts.map +1 -1
  283. package/lib/esm/ModelState.js +5 -3
  284. package/lib/esm/ModelState.js.map +1 -1
  285. package/lib/esm/NativeApp.d.ts +5 -1
  286. package/lib/esm/NativeApp.d.ts.map +1 -1
  287. package/lib/esm/NativeApp.js +25 -20
  288. package/lib/esm/NativeApp.js.map +1 -1
  289. package/lib/esm/NativeAppLogger.js +1 -1
  290. package/lib/esm/NativeAppLogger.js.map +1 -1
  291. package/lib/esm/RealityDataSource.d.ts +44 -1
  292. package/lib/esm/RealityDataSource.d.ts.map +1 -1
  293. package/lib/esm/RealityDataSource.js +39 -13
  294. package/lib/esm/RealityDataSource.js.map +1 -1
  295. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts +1 -0
  296. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.d.ts.map +1 -1
  297. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js +3 -0
  298. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  299. package/lib/esm/RealityDataSourceContextShareImpl.d.ts +1 -0
  300. package/lib/esm/RealityDataSourceContextShareImpl.d.ts.map +1 -1
  301. package/lib/esm/RealityDataSourceContextShareImpl.js +3 -0
  302. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  303. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +1 -0
  304. package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
  305. package/lib/esm/RealityDataSourceTilesetUrlImpl.js +3 -0
  306. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  307. package/lib/esm/SelectionSet.d.ts.map +1 -1
  308. package/lib/esm/SelectionSet.js +3 -1
  309. package/lib/esm/SelectionSet.js.map +1 -1
  310. package/lib/esm/ViewAnimation.d.ts +10 -2
  311. package/lib/esm/ViewAnimation.d.ts.map +1 -1
  312. package/lib/esm/ViewAnimation.js.map +1 -1
  313. package/lib/esm/ViewCreator2d.js +3 -2
  314. package/lib/esm/ViewCreator2d.js.map +1 -1
  315. package/lib/esm/ViewPose.d.ts +62 -10
  316. package/lib/esm/ViewPose.d.ts.map +1 -1
  317. package/lib/esm/ViewPose.js +37 -8
  318. package/lib/esm/ViewPose.js.map +1 -1
  319. package/lib/esm/ViewState.d.ts +18 -10
  320. package/lib/esm/ViewState.d.ts.map +1 -1
  321. package/lib/esm/ViewState.js +39 -15
  322. package/lib/esm/ViewState.js.map +1 -1
  323. package/lib/esm/Viewport.d.ts.map +1 -1
  324. package/lib/esm/Viewport.js +7 -2
  325. package/lib/esm/Viewport.js.map +1 -1
  326. package/lib/esm/extension/ExtensionRuntime.js +12 -1
  327. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  328. package/lib/esm/render/RenderMaterial.d.ts +3 -1
  329. package/lib/esm/render/RenderMaterial.d.ts.map +1 -1
  330. package/lib/esm/render/RenderMaterial.js.map +1 -1
  331. package/lib/esm/render/RenderTarget.d.ts +1 -0
  332. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  333. package/lib/esm/render/RenderTarget.js.map +1 -1
  334. package/lib/esm/render/primitives/SurfaceParams.d.ts +0 -1
  335. package/lib/esm/render/primitives/SurfaceParams.d.ts.map +1 -1
  336. package/lib/esm/render/primitives/SurfaceParams.js.map +1 -1
  337. package/lib/esm/render/primitives/VertexTable.d.ts.map +1 -1
  338. package/lib/esm/render/primitives/VertexTable.js +0 -1
  339. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  340. package/lib/esm/render/primitives/VertexTableSplitter.d.ts.map +1 -1
  341. package/lib/esm/render/primitives/VertexTableSplitter.js +0 -1
  342. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
  343. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +0 -1
  344. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  345. package/lib/esm/render/primitives/mesh/MeshPrimitives.js +0 -1
  346. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  347. package/lib/esm/render/webgl/FeatureOverrides.d.ts +0 -1
  348. package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
  349. package/lib/esm/render/webgl/FeatureOverrides.js +16 -11
  350. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  351. package/lib/esm/render/webgl/MeshData.d.ts +1 -1
  352. package/lib/esm/render/webgl/MeshData.d.ts.map +1 -1
  353. package/lib/esm/render/webgl/MeshData.js +13 -1
  354. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  355. package/lib/esm/render/webgl/MeshGeometry.d.ts +1 -1
  356. package/lib/esm/render/webgl/MeshGeometry.d.ts.map +1 -1
  357. package/lib/esm/render/webgl/MeshGeometry.js +1 -1
  358. package/lib/esm/render/webgl/MeshGeometry.js.map +1 -1
  359. package/lib/esm/render/webgl/RenderFlags.d.ts +14 -4
  360. package/lib/esm/render/webgl/RenderFlags.d.ts.map +1 -1
  361. package/lib/esm/render/webgl/RenderFlags.js +2 -0
  362. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  363. package/lib/esm/render/webgl/ShaderBuilder.d.ts +2 -1
  364. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  365. package/lib/esm/render/webgl/ShaderBuilder.js +6 -1
  366. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  367. package/lib/esm/render/webgl/SurfaceGeometry.d.ts +3 -1
  368. package/lib/esm/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  369. package/lib/esm/render/webgl/SurfaceGeometry.js +17 -6
  370. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  371. package/lib/esm/render/webgl/System.d.ts +1 -1
  372. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  373. package/lib/esm/render/webgl/System.js +1 -0
  374. package/lib/esm/render/webgl/System.js.map +1 -1
  375. package/lib/esm/render/webgl/Target.d.ts +1 -0
  376. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  377. package/lib/esm/render/webgl/Target.js +1 -0
  378. package/lib/esm/render/webgl/Target.js.map +1 -1
  379. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  380. package/lib/esm/render/webgl/glsl/Animation.js +2 -1
  381. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  382. package/lib/esm/render/webgl/glsl/Common.d.ts +3 -1
  383. package/lib/esm/render/webgl/glsl/Common.d.ts.map +1 -1
  384. package/lib/esm/render/webgl/glsl/Common.js +25 -31
  385. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  386. package/lib/esm/render/webgl/glsl/FeatureSymbology.d.ts.map +1 -1
  387. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +9 -1
  388. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  389. package/lib/esm/render/webgl/glsl/Lighting.d.ts.map +1 -1
  390. package/lib/esm/render/webgl/glsl/Lighting.js +6 -8
  391. package/lib/esm/render/webgl/glsl/Lighting.js.map +1 -1
  392. package/lib/esm/render/webgl/glsl/PointCloud.d.ts.map +1 -1
  393. package/lib/esm/render/webgl/glsl/PointCloud.js +8 -3
  394. package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
  395. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts +1 -0
  396. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  397. package/lib/esm/render/webgl/glsl/RealityMesh.js +5 -0
  398. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  399. package/lib/esm/render/webgl/glsl/SolarShadowMapping.d.ts.map +1 -1
  400. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +1 -4
  401. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  402. package/lib/esm/render/webgl/glsl/Surface.d.ts +1 -1
  403. package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
  404. package/lib/esm/render/webgl/glsl/Surface.js +88 -16
  405. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  406. package/lib/esm/render/webgl/glsl/Thematic.d.ts.map +1 -1
  407. package/lib/esm/render/webgl/glsl/Thematic.js +2 -6
  408. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  409. package/lib/esm/tile/GltfReader.d.ts +13 -2
  410. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  411. package/lib/esm/tile/GltfReader.js +66 -22
  412. package/lib/esm/tile/GltfReader.js.map +1 -1
  413. package/lib/esm/tile/IModelTileRequestChannels.js +1 -1
  414. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  415. package/lib/esm/tile/ImdlReader.d.ts +5 -0
  416. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  417. package/lib/esm/tile/ImdlReader.js +9 -2
  418. package/lib/esm/tile/ImdlReader.js.map +1 -1
  419. package/lib/esm/tile/PrimaryTileTree.js +2 -2
  420. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  421. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  422. package/lib/esm/tile/RealityModelTileTree.js +51 -20
  423. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  424. package/lib/esm/tile/RealityTile.d.ts +2 -2
  425. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  426. package/lib/esm/tile/RealityTile.js +11 -4
  427. package/lib/esm/tile/RealityTile.js.map +1 -1
  428. package/lib/esm/tile/RealityTileLoader.d.ts +1 -0
  429. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  430. package/lib/esm/tile/RealityTileLoader.js +14 -1
  431. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  432. package/lib/esm/tile/RealityTileTree.js +1 -1
  433. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  434. package/lib/esm/tile/Tile.d.ts +5 -0
  435. package/lib/esm/tile/Tile.d.ts.map +1 -1
  436. package/lib/esm/tile/Tile.js +5 -0
  437. package/lib/esm/tile/Tile.js.map +1 -1
  438. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  439. package/lib/esm/tile/TileAdmin.js +13 -6
  440. package/lib/esm/tile/TileAdmin.js.map +1 -1
  441. package/lib/esm/tile/TileDrawArgs.d.ts +5 -1
  442. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  443. package/lib/esm/tile/TileDrawArgs.js +2 -0
  444. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  445. package/lib/esm/tile/TileRequestChannels.js +1 -1
  446. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  447. package/lib/esm/tile/TileStorage.d.ts.map +1 -1
  448. package/lib/esm/tile/TileStorage.js +12 -6
  449. package/lib/esm/tile/TileStorage.js.map +1 -1
  450. package/lib/esm/tile/internal.d.ts +1 -0
  451. package/lib/esm/tile/internal.d.ts.map +1 -1
  452. package/lib/esm/tile/internal.js +1 -0
  453. package/lib/esm/tile/internal.js.map +1 -1
  454. package/lib/esm/tile/map/ArcGISTileMap.d.ts +5 -2
  455. package/lib/esm/tile/map/ArcGISTileMap.d.ts.map +1 -1
  456. package/lib/esm/tile/map/ArcGISTileMap.js +18 -3
  457. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  458. package/lib/esm/tile/map/ArcGisUtilities.d.ts +51 -5
  459. package/lib/esm/tile/map/ArcGisUtilities.d.ts.map +1 -1
  460. package/lib/esm/tile/map/ArcGisUtilities.js +121 -49
  461. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  462. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts +26 -0
  463. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -0
  464. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +93 -0
  465. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -0
  466. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +2 -4
  467. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  468. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +10 -95
  469. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  470. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.d.ts.map +1 -1
  471. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +2 -1
  472. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  473. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -0
  474. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  475. package/lib/esm/tile/map/ImageryTileTree.js +6 -4
  476. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  477. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts +18 -4
  478. package/lib/esm/tile/map/MapLayerFormatRegistry.d.ts.map +1 -1
  479. package/lib/esm/tile/map/MapLayerFormatRegistry.js +26 -6
  480. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  481. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts +6 -4
  482. package/lib/esm/tile/map/MapLayerImageryFormats.d.ts.map +1 -1
  483. package/lib/esm/tile/map/MapLayerImageryFormats.js +12 -16
  484. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  485. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +26 -5
  486. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  487. package/lib/esm/tile/map/MapLayerImageryProvider.js +70 -49
  488. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  489. package/lib/esm/tile/map/MapLayerSources.js +1 -1
  490. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  491. package/lib/esm/tile/map/WmsCapabilities.d.ts.map +1 -1
  492. package/lib/esm/tile/map/WmsCapabilities.js +4 -1
  493. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  494. package/lib/esm/tools/EditManipulator.d.ts.map +1 -1
  495. package/lib/esm/tools/EditManipulator.js +2 -1
  496. package/lib/esm/tools/EditManipulator.js.map +1 -1
  497. package/lib/esm/tools/Tool.js +1 -1
  498. package/lib/esm/tools/Tool.js.map +1 -1
  499. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  500. package/lib/esm/tools/ToolAdmin.js +6 -4
  501. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  502. package/package.json +23 -21
  503. package/lib/cjs/tile/object-storage-azure.js +0 -5
  504. package/lib/esm/tile/object-storage-azure.js +0 -5
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionSet.js","sourceRoot":"","sources":["../../src/SelectionSet.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 SelectionSet\r\n */\r\nimport { BeEvent, Id64, Id64Arg, Id64String } from \"@itwin/core-bentley\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\n\r\n/** Identifies the type of changes made to the [[SelectionSet]] to produce a [[SelectionSetEvent]].\r\n * @public\r\n * @extensions\r\n */\r\nexport enum SelectionSetEventType {\r\n /** Elements have been added to the set. */\r\n Add,\r\n /** Elements have been removed from the set. */\r\n Remove,\r\n /** Some elements have been added to the set and others have been removed. */\r\n Replace,\r\n /** All elements are about to be removed from the set. */\r\n Clear,\r\n}\r\n\r\n/** Passed to [[SelectionSet.onChanged]] event listeners when elements are added to the selection set.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface SelectAddEvent {\r\n type: SelectionSetEventType.Add;\r\n /** The Ids of the elements added to the set. */\r\n added: Id64Arg;\r\n /** The affected SelectionSet. */\r\n set: SelectionSet;\r\n}\r\n\r\n/** Passed to [[SelectionSet.onChanged]] event listeners when elements are removed from the selection set.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface SelectRemoveEvent {\r\n /** The type of operation that produced this event. */\r\n type: SelectionSetEventType.Remove | SelectionSetEventType.Clear;\r\n /** The element Ids removed from the set. */\r\n removed: Id64Arg;\r\n /** The affected SelectionSet. */\r\n set: SelectionSet;\r\n}\r\n\r\n/** Passed to [[SelectionSet.onChanged]] event listeners when elements are simultaneously added to and removed from the selection set.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface SelectReplaceEvent {\r\n type: SelectionSetEventType.Replace;\r\n /** The element Ids added to the set. */\r\n added: Id64Arg;\r\n /** The element Ids removed from the set. */\r\n removed: Id64Arg;\r\n /** The affected SelectionSet. */\r\n set: SelectionSet;\r\n}\r\n\r\n/** Payload sent to [[SelectionSet.onChanged]] event listeners to describe how the contents of the set have changed.\r\n * The `type` property of the event serves as a type assertion. For example, the following code will output the added and/or removed Ids:\r\n * ```ts\r\n * processSelectionSetEvent(ev: SelectionSetEvent): void {\r\n * if (SelectionSetEventType.Add === ev.type || SelectionSetEventType.Replace === ev.type)\r\n * console.log(\"Added \" + ev.added.size + \" elements\");\r\n *\r\n * if (SelectionSetEventType.Add !== ev.type)\r\n * console.log(\"Removed \" + ev.removed.size + \" elements\");\r\n * }\r\n * ```\r\n * @public\r\n * @extensions\r\n */\r\nexport type SelectionSetEvent = SelectAddEvent | SelectRemoveEvent | SelectReplaceEvent;\r\n\r\n/** Tracks a set of hilited entities. When the set changes, notifies ViewManager so that symbology overrides can be updated in active Viewports.\r\n * @internal\r\n */\r\nclass HilitedIds extends Id64.Uint32Set {\r\n protected _iModel: IModelConnection;\r\n protected _changing = false;\r\n\r\n public constructor(iModel: IModelConnection) {\r\n super();\r\n this._iModel = iModel;\r\n }\r\n\r\n public override add(low: number, high: number) {\r\n super.add(low, high);\r\n this.onChanged();\r\n }\r\n\r\n public override delete(low: number, high: number) {\r\n super.delete(low, high);\r\n this.onChanged();\r\n }\r\n\r\n public override clear() {\r\n super.clear();\r\n this.onChanged();\r\n }\r\n\r\n public override addIds(ids: Id64Arg) {\r\n this.change(() => super.addIds(ids));\r\n }\r\n\r\n public override deleteIds(ids: Id64Arg) {\r\n this.change(() => super.deleteIds(ids));\r\n }\r\n\r\n protected onChanged() {\r\n if (!this._changing)\r\n IModelApp.viewManager.onSelectionSetChanged(this._iModel);\r\n }\r\n\r\n protected change(func: () => void) {\r\n const changing = this._changing;\r\n this._changing = false;\r\n func();\r\n this._changing = changing;\r\n this.onChanged();\r\n }\r\n}\r\n\r\n/** Keeps the set of hilited elements in sync with the selection set.\r\n * @internal\r\n */\r\nclass HilitedElementIds extends HilitedIds {\r\n private _removeListener?: () => void;\r\n\r\n public constructor(iModel: IModelConnection, syncWithSelectionSet = true) {\r\n super(iModel);\r\n this.wantSyncWithSelectionSet = syncWithSelectionSet;\r\n }\r\n\r\n public get wantSyncWithSelectionSet(): boolean { return undefined !== this._removeListener; }\r\n public set wantSyncWithSelectionSet(want: boolean) {\r\n if (want === this.wantSyncWithSelectionSet)\r\n return;\r\n\r\n if (want) {\r\n const set = this._iModel.selectionSet;\r\n this._removeListener = set.onChanged.addListener((ev) => this.change(() => this.processSelectionSetEvent(ev)));\r\n this.processSelectionSetEvent({\r\n set,\r\n type: SelectionSetEventType.Add,\r\n added: set.elements,\r\n });\r\n } else {\r\n this._removeListener!();\r\n this._removeListener = undefined;\r\n }\r\n }\r\n\r\n private processSelectionSetEvent(ev: SelectionSetEvent): void {\r\n if (SelectionSetEventType.Add !== ev.type)\r\n this.deleteIds(ev.removed);\r\n\r\n if (ev.type === SelectionSetEventType.Add || ev.type === SelectionSetEventType.Replace)\r\n this.addIds(ev.added);\r\n }\r\n}\r\n\r\n/** Describes how the sets of hilited models and subcategories in a [[HiliteSet]] interact.\r\n * - \"union\" indicates a [Feature]($common) will be hilited if either its model **or** its subcategory is present in the HiliteSet.\r\n * - \"intersection\" indicates a [Feature]($common) will be hilited only if both its model **and** its subcategory are present in the HiliteSet.\r\n *\r\n * @see [[HiliteSet.modelSubCategoryMode]] to change the mode for a HiliteSet.\r\n * @public\r\n */\r\nexport type ModelSubCategoryHiliteMode = \"union\" | \"intersection\";\r\n\r\n/** A set of *hilited* elements for an [[IModelConnection]], by element id.\r\n * Hilited elements are displayed with a customizable hilite effect within a [[Viewport]].\r\n * The set exposes 3 types of elements in 3 separate collections: [GeometricElement]($backend), [GeometricModel]($backend), and [SubCategory]($backend).\r\n * The [[models]] and [[subcategories]] can be hilited independently or as an intersection of the two sets, as specified by [[modelSubCategoryMode]].\r\n *\r\n * Technically, the hilite effect is applied to [Feature]($common)s, not [Element]($backend)s. An element's geometry stream can contain multiple\r\n * features belonging to different subcategories.\r\n *\r\n * Because Javascript lacks efficient support for 64-bit integers, the Ids are stored as pairs of 32-bit integers via [Id64.Uint32Set]($bentley).\r\n *\r\n * @note Typically, elements are hilited by virtue of their presence in the IModelConnection's [[SelectionSet]]. The HiliteSet allows additional\r\n * elements to be displayed with the hilite effect without adding them to the [[SelectionSet]]. If you add elements to the HiliteSet directly, you\r\n * are also responsible for removing them as appropriate.\r\n * @see [[IModelConnection.hilited]] for the HiliteSet associated with an iModel.\r\n * @see [Hilite.Settings]($common) for customization of the hilite effect.\r\n * @public\r\n * @extensions\r\n */\r\nexport class HiliteSet {\r\n private readonly _elements: HilitedElementIds;\r\n private _mode: ModelSubCategoryHiliteMode = \"union\";\r\n\r\n /** The set of hilited subcategories.\r\n * @see [[modelSubCategoryMode]] to control how this set interacts with the set of hilited [[models]].\r\n * @see [[IModelConnection.Categories]] to obtain the set of subcategories associated with one or more [Category]($backend)'s.\r\n */\r\n public readonly subcategories: Id64.Uint32Set;\r\n\r\n /** The set of hilited [[GeometricModelState]]s.\r\n * @see [[modelSubCategoryMode]] to control how this set interacts with the set of hilited [[subcategories]].\r\n */\r\n public readonly models: Id64.Uint32Set;\r\n\r\n /** The set of hilited elements. */\r\n public get elements(): Id64.Uint32Set { return this._elements; }\r\n\r\n /** Controls how the sets of hilited [[models]] and [[subcategories]] interact with one another.\r\n * By default they are treated as a union: a [Feature]($common) is hilited if either its model **or** its subcategory is hilited.\r\n * This can be changed to an intersection such that a [Feature]($common) is hilited only if both its model **and** subcategory are hilited.\r\n * @note The sets of hilited models and subcategories are independent of the set of hilited [[elements]] - an element whose Id is present in\r\n * [[elements]] is always hilited regardless of its model or subcategories.\r\n */\r\n public get modelSubCategoryMode(): ModelSubCategoryHiliteMode {\r\n return this._mode;\r\n }\r\n public set modelSubCategoryMode(mode: ModelSubCategoryHiliteMode) {\r\n if (mode === this._mode)\r\n return;\r\n\r\n this.onModelSubCategoryModeChanged.raiseEvent(mode);\r\n this._mode = mode;\r\n }\r\n\r\n /** Event raised just before changing the value of [[modelSubCategoryMode]]. */\r\n public readonly onModelSubCategoryModeChanged = new BeEvent<(newMode: ModelSubCategoryHiliteMode) => void>();\r\n\r\n /** Construct a HiliteSet\r\n * @param iModel The iModel containing the entities to be hilited.\r\n * @param syncWithSelectionSet If true, the contents of the `elements` set will be synchronized with those in the `iModel`'s [[SelectionSet]].\r\n * @internal\r\n */\r\n public constructor(public iModel: IModelConnection, syncWithSelectionSet = true) {\r\n this._elements = new HilitedElementIds(iModel, syncWithSelectionSet);\r\n this.subcategories = new HilitedIds(iModel);\r\n this.models = new HilitedIds(iModel);\r\n }\r\n\r\n /** Control whether the hilited elements will be synchronized with the contents of the [[SelectionSet]].\r\n * By default they are synchronized. Applications that override this take responsibility for managing the set of hilited entities.\r\n * When turning synchronization off, the contents of the HiliteSet will remain unchanged.\r\n * When turning synchronization on, the current contents of the HiliteSet will be preserved, and the contents of the selection set will be added to them.\r\n */\r\n public get wantSyncWithSelectionSet(): boolean { return this._elements.wantSyncWithSelectionSet; }\r\n public set wantSyncWithSelectionSet(want: boolean) { this._elements.wantSyncWithSelectionSet = want; }\r\n\r\n /** Remove all elements from the hilited set. */\r\n public clear() {\r\n this.elements.clear();\r\n this.subcategories.clear();\r\n this.models.clear();\r\n }\r\n\r\n /** Returns true if nothing is hilited. */\r\n public get isEmpty(): boolean { return this.elements.isEmpty && this.subcategories.isEmpty && this.models.isEmpty; }\r\n\r\n /** Toggle the hilited state of one or more elements.\r\n * @param arg the ID(s) of the elements whose state is to be toggled.\r\n * @param onOff True to add the elements to the hilited set, false to remove them.\r\n */\r\n public setHilite(arg: Id64Arg, onOff: boolean): void {\r\n for (const id of Id64.iterable(arg)) {\r\n if (onOff)\r\n this.elements.addId(id);\r\n else\r\n this.elements.deleteId(id);\r\n }\r\n\r\n IModelApp.viewManager.onSelectionSetChanged(this.iModel);\r\n }\r\n}\r\n\r\n/** A set of *currently selected* elements for an IModelConnection.\r\n * Selected elements are displayed with a customizable hilite effect within a [[Viewport]].\r\n * @see [Hilite.Settings]($common) for customization of the hilite effect.\r\n * @public\r\n * @extensions\r\n */\r\nexport class SelectionSet {\r\n private _elements = new Set<string>();\r\n\r\n /** The IDs of the selected elements.\r\n * @note Do not modify this set directly. Instead, use methods like [[SelectionSet.add]].\r\n */\r\n public get elements(): Set<string> { return this._elements; }\r\n\r\n /** Called whenever elements are added or removed from this SelectionSet */\r\n public readonly onChanged = new BeEvent<(ev: SelectionSetEvent) => void>();\r\n\r\n public constructor(public iModel: IModelConnection) { }\r\n\r\n private sendChangedEvent(ev: SelectionSetEvent) {\r\n IModelApp.viewManager.onSelectionSetChanged(this.iModel);\r\n this.onChanged.raiseEvent(ev);\r\n }\r\n\r\n /** Get the number of entries in this selection set. */\r\n public get size() { return this.elements.size; }\r\n\r\n /** Check whether there are any selected elements. */\r\n public get isActive() { return this.size !== 0; }\r\n\r\n /** Return true if elemId is in this SelectionSet.\r\n * @see [[isSelected]]\r\n */\r\n public has(elemId?: string) { return !!elemId && this.elements.has(elemId); }\r\n\r\n /** Query whether an Id is in the selection set.\r\n * @see [[has]]\r\n */\r\n public isSelected(elemId?: Id64String): boolean { return !!elemId && this.elements.has(elemId); }\r\n\r\n /** Clear current selection set.\r\n * @note raises the [[onChanged]] event with [[SelectionSetEventType.Clear]].\r\n */\r\n public emptyAll(): void {\r\n if (!this.isActive)\r\n return;\r\n\r\n const removed = this._elements;\r\n this._elements = new Set<string>();\r\n this.sendChangedEvent({ set: this, type: SelectionSetEventType.Clear, removed });\r\n }\r\n\r\n /**\r\n * Add one or more Ids to the current selection set.\r\n * @param elem The set of Ids to add.\r\n * @returns true if any elements were added.\r\n */\r\n public add(elem: Id64Arg): boolean {\r\n return this._add(elem);\r\n }\r\n\r\n private _add(elem: Id64Arg, sendEvent = true): boolean {\r\n const oldSize = this.elements.size;\r\n for (const id of Id64.iterable(elem))\r\n this.elements.add(id);\r\n\r\n const changed = oldSize !== this.elements.size;\r\n if (sendEvent && changed)\r\n this.sendChangedEvent({ type: SelectionSetEventType.Add, set: this, added: elem });\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * Remove one or more Ids from the current selection set.\r\n * @param elem The set of Ids to remove.\r\n * @returns true if any elements were removed.\r\n */\r\n public remove(elem: Id64Arg): boolean {\r\n return this._remove(elem);\r\n }\r\n\r\n private _remove(elem: Id64Arg, sendEvent = true): boolean {\r\n const oldSize = this.elements.size;\r\n for (const id of Id64.iterable(elem))\r\n this.elements.delete(id);\r\n\r\n const changed = oldSize !== this.elements.size;\r\n if (sendEvent && changed)\r\n this.sendChangedEvent({ type: SelectionSetEventType.Remove, set: this, removed: elem });\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * Add one set of Ids, and remove another set of Ids. Any Ids that are in both sets are removed.\r\n * @returns True if any Ids were either added or removed.\r\n */\r\n public addAndRemove(adds: Id64Arg, removes: Id64Arg): boolean {\r\n const added = this._add(adds, false);\r\n const removed = this._remove(removes, false);\r\n\r\n if (added && removed)\r\n this.sendChangedEvent({ type: SelectionSetEventType.Replace, set: this, added: adds, removed: removes });\r\n else if (added)\r\n this.sendChangedEvent({ type: SelectionSetEventType.Add, set: this, added: adds });\r\n else if (removed)\r\n this.sendChangedEvent({ type: SelectionSetEventType.Remove, set: this, removed: removes });\r\n\r\n return (added || removed);\r\n }\r\n\r\n /** Invert the state of a set of Ids in the SelectionSet */\r\n public invert(elem: Id64Arg): boolean {\r\n const elementsToAdd = new Set<string>();\r\n const elementsToRemove = new Set<string>();\r\n for (const id of Id64.iterable(elem)) {\r\n if (this.elements.has(id))\r\n elementsToRemove.add(id);\r\n else\r\n elementsToAdd.add(id);\r\n }\r\n\r\n return this.addAndRemove(elementsToAdd, elementsToRemove);\r\n }\r\n\r\n /** Change selection set to be the supplied set of Ids. */\r\n public replace(elem: Id64Arg): void {\r\n if (areEqual(this.elements, elem))\r\n return;\r\n\r\n const removed = this._elements;\r\n this._elements = new Set<string>();\r\n this._add(elem, false);\r\n\r\n if (0 < removed.size) {\r\n for (const id of Id64.iterable(elem)) {\r\n if (removed.has(id))\r\n removed.delete(id);\r\n }\r\n }\r\n\r\n this.sendChangedEvent({ type: SelectionSetEventType.Replace, set: this, added: elem, removed });\r\n }\r\n}\r\n\r\nfunction areEqual(lhs: Set<string>, rhs: Id64Arg): boolean {\r\n // Size is unreliable if input can contain duplicates...\r\n if (Array.isArray(rhs))\r\n rhs = Id64.toIdSet(rhs);\r\n\r\n if (lhs.size !== Id64.sizeOf(rhs))\r\n return false;\r\n\r\n for (const id of Id64.iterable(rhs))\r\n if (!lhs.has(id))\r\n return false;\r\n\r\n return true;\r\n}\r\n"]}
1
+ {"version":3,"file":"SelectionSet.js","sourceRoot":"","sources":["../../src/SelectionSet.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 SelectionSet\r\n */\r\nimport { BeEvent, Id64, Id64Arg, Id64String } from \"@itwin/core-bentley\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\n\r\n/** Identifies the type of changes made to the [[SelectionSet]] to produce a [[SelectionSetEvent]].\r\n * @public\r\n * @extensions\r\n */\r\nexport enum SelectionSetEventType {\r\n /** Elements have been added to the set. */\r\n Add,\r\n /** Elements have been removed from the set. */\r\n Remove,\r\n /** Some elements have been added to the set and others have been removed. */\r\n Replace,\r\n /** All elements are about to be removed from the set. */\r\n Clear,\r\n}\r\n\r\n/** Passed to [[SelectionSet.onChanged]] event listeners when elements are added to the selection set.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface SelectAddEvent {\r\n type: SelectionSetEventType.Add;\r\n /** The Ids of the elements added to the set. */\r\n added: Id64Arg;\r\n /** The affected SelectionSet. */\r\n set: SelectionSet;\r\n}\r\n\r\n/** Passed to [[SelectionSet.onChanged]] event listeners when elements are removed from the selection set.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface SelectRemoveEvent {\r\n /** The type of operation that produced this event. */\r\n type: SelectionSetEventType.Remove | SelectionSetEventType.Clear;\r\n /** The element Ids removed from the set. */\r\n removed: Id64Arg;\r\n /** The affected SelectionSet. */\r\n set: SelectionSet;\r\n}\r\n\r\n/** Passed to [[SelectionSet.onChanged]] event listeners when elements are simultaneously added to and removed from the selection set.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface SelectReplaceEvent {\r\n type: SelectionSetEventType.Replace;\r\n /** The element Ids added to the set. */\r\n added: Id64Arg;\r\n /** The element Ids removed from the set. */\r\n removed: Id64Arg;\r\n /** The affected SelectionSet. */\r\n set: SelectionSet;\r\n}\r\n\r\n/** Payload sent to [[SelectionSet.onChanged]] event listeners to describe how the contents of the set have changed.\r\n * The `type` property of the event serves as a type assertion. For example, the following code will output the added and/or removed Ids:\r\n * ```ts\r\n * processSelectionSetEvent(ev: SelectionSetEvent): void {\r\n * if (SelectionSetEventType.Add === ev.type || SelectionSetEventType.Replace === ev.type)\r\n * console.log(\"Added \" + ev.added.size + \" elements\");\r\n *\r\n * if (SelectionSetEventType.Add !== ev.type)\r\n * console.log(\"Removed \" + ev.removed.size + \" elements\");\r\n * }\r\n * ```\r\n * @public\r\n * @extensions\r\n */\r\nexport type SelectionSetEvent = SelectAddEvent | SelectRemoveEvent | SelectReplaceEvent;\r\n\r\n/** Tracks a set of hilited entities. When the set changes, notifies ViewManager so that symbology overrides can be updated in active Viewports.\r\n * @internal\r\n */\r\nclass HilitedIds extends Id64.Uint32Set {\r\n protected _iModel: IModelConnection;\r\n protected _changing = false;\r\n\r\n public constructor(iModel: IModelConnection) {\r\n super();\r\n this._iModel = iModel;\r\n }\r\n\r\n public override add(low: number, high: number) {\r\n super.add(low, high);\r\n this.onChanged();\r\n }\r\n\r\n public override delete(low: number, high: number) {\r\n super.delete(low, high);\r\n this.onChanged();\r\n }\r\n\r\n public override clear() {\r\n super.clear();\r\n this.onChanged();\r\n }\r\n\r\n public override addIds(ids: Id64Arg) {\r\n this.change(() => super.addIds(ids));\r\n }\r\n\r\n public override deleteIds(ids: Id64Arg) {\r\n this.change(() => super.deleteIds(ids));\r\n }\r\n\r\n protected onChanged() {\r\n if (!this._changing)\r\n IModelApp.viewManager.onSelectionSetChanged(this._iModel);\r\n }\r\n\r\n protected change(func: () => void) {\r\n const changing = this._changing;\r\n this._changing = false;\r\n func();\r\n this._changing = changing;\r\n this.onChanged();\r\n }\r\n}\r\n\r\n/** Keeps the set of hilited elements in sync with the selection set.\r\n * @internal\r\n */\r\nclass HilitedElementIds extends HilitedIds {\r\n private _removeListener?: () => void;\r\n\r\n public constructor(iModel: IModelConnection, syncWithSelectionSet = true) {\r\n super(iModel);\r\n this.wantSyncWithSelectionSet = syncWithSelectionSet;\r\n }\r\n\r\n public get wantSyncWithSelectionSet(): boolean { return undefined !== this._removeListener; }\r\n public set wantSyncWithSelectionSet(want: boolean) {\r\n if (want === this.wantSyncWithSelectionSet)\r\n return;\r\n\r\n if (want) {\r\n const set = this._iModel.selectionSet;\r\n this._removeListener = set.onChanged.addListener((ev) => this.change(() => this.processSelectionSetEvent(ev)));\r\n this.processSelectionSetEvent({\r\n set,\r\n type: SelectionSetEventType.Add,\r\n added: set.elements,\r\n });\r\n } else {\r\n this._removeListener!();\r\n this._removeListener = undefined;\r\n }\r\n }\r\n\r\n private processSelectionSetEvent(ev: SelectionSetEvent): void {\r\n if (SelectionSetEventType.Add !== ev.type)\r\n this.deleteIds(ev.removed);\r\n\r\n if (ev.type === SelectionSetEventType.Add || ev.type === SelectionSetEventType.Replace)\r\n this.addIds(ev.added);\r\n }\r\n}\r\n\r\n/** Describes how the sets of hilited models and subcategories in a [[HiliteSet]] interact.\r\n * - \"union\" indicates a [Feature]($common) will be hilited if either its model **or** its subcategory is present in the HiliteSet.\r\n * - \"intersection\" indicates a [Feature]($common) will be hilited only if both its model **and** its subcategory are present in the HiliteSet.\r\n *\r\n * @see [[HiliteSet.modelSubCategoryMode]] to change the mode for a HiliteSet.\r\n * @public\r\n */\r\nexport type ModelSubCategoryHiliteMode = \"union\" | \"intersection\";\r\n\r\n/** A set of *hilited* elements for an [[IModelConnection]], by element id.\r\n * Hilited elements are displayed with a customizable hilite effect within a [[Viewport]].\r\n * The set exposes 3 types of elements in 3 separate collections: [GeometricElement]($backend), [GeometricModel]($backend), and [SubCategory]($backend).\r\n * The [[models]] and [[subcategories]] can be hilited independently or as an intersection of the two sets, as specified by [[modelSubCategoryMode]].\r\n *\r\n * Technically, the hilite effect is applied to [Feature]($common)s, not [Element]($backend)s. An element's geometry stream can contain multiple\r\n * features belonging to different subcategories.\r\n *\r\n * Because Javascript lacks efficient support for 64-bit integers, the Ids are stored as pairs of 32-bit integers via [Id64.Uint32Set]($bentley).\r\n *\r\n * @note Typically, elements are hilited by virtue of their presence in the IModelConnection's [[SelectionSet]]. The HiliteSet allows additional\r\n * elements to be displayed with the hilite effect without adding them to the [[SelectionSet]]. If you add elements to the HiliteSet directly, you\r\n * are also responsible for removing them as appropriate.\r\n * @see [[IModelConnection.hilited]] for the HiliteSet associated with an iModel.\r\n * @see [Hilite.Settings]($common) for customization of the hilite effect.\r\n * @public\r\n * @extensions\r\n */\r\nexport class HiliteSet {\r\n private readonly _elements: HilitedElementIds;\r\n private _mode: ModelSubCategoryHiliteMode = \"union\";\r\n\r\n /** The set of hilited subcategories.\r\n * @see [[modelSubCategoryMode]] to control how this set interacts with the set of hilited [[models]].\r\n * @see [[IModelConnection.Categories]] to obtain the set of subcategories associated with one or more [Category]($backend)'s.\r\n */\r\n public readonly subcategories: Id64.Uint32Set;\r\n\r\n /** The set of hilited [[GeometricModelState]]s.\r\n * @see [[modelSubCategoryMode]] to control how this set interacts with the set of hilited [[subcategories]].\r\n */\r\n public readonly models: Id64.Uint32Set;\r\n\r\n /** The set of hilited elements. */\r\n public get elements(): Id64.Uint32Set { return this._elements; }\r\n\r\n /** Controls how the sets of hilited [[models]] and [[subcategories]] interact with one another.\r\n * By default they are treated as a union: a [Feature]($common) is hilited if either its model **or** its subcategory is hilited.\r\n * This can be changed to an intersection such that a [Feature]($common) is hilited only if both its model **and** subcategory are hilited.\r\n * @note The sets of hilited models and subcategories are independent of the set of hilited [[elements]] - an element whose Id is present in\r\n * [[elements]] is always hilited regardless of its model or subcategories.\r\n */\r\n public get modelSubCategoryMode(): ModelSubCategoryHiliteMode {\r\n return this._mode;\r\n }\r\n public set modelSubCategoryMode(mode: ModelSubCategoryHiliteMode) {\r\n if (mode === this._mode)\r\n return;\r\n\r\n this.onModelSubCategoryModeChanged.raiseEvent(mode);\r\n this._mode = mode;\r\n }\r\n\r\n /** Event raised just before changing the value of [[modelSubCategoryMode]]. */\r\n public readonly onModelSubCategoryModeChanged = new BeEvent<(newMode: ModelSubCategoryHiliteMode) => void>();\r\n\r\n /** Construct a HiliteSet\r\n * @param iModel The iModel containing the entities to be hilited.\r\n * @param syncWithSelectionSet If true, the contents of the `elements` set will be synchronized with those in the `iModel`'s [[SelectionSet]].\r\n * @internal\r\n */\r\n public constructor(public iModel: IModelConnection, syncWithSelectionSet = true) {\r\n this._elements = new HilitedElementIds(iModel, syncWithSelectionSet);\r\n this.subcategories = new HilitedIds(iModel);\r\n this.models = new HilitedIds(iModel);\r\n }\r\n\r\n /** Control whether the hilited elements will be synchronized with the contents of the [[SelectionSet]].\r\n * By default they are synchronized. Applications that override this take responsibility for managing the set of hilited entities.\r\n * When turning synchronization off, the contents of the HiliteSet will remain unchanged.\r\n * When turning synchronization on, the current contents of the HiliteSet will be preserved, and the contents of the selection set will be added to them.\r\n */\r\n public get wantSyncWithSelectionSet(): boolean { return this._elements.wantSyncWithSelectionSet; }\r\n public set wantSyncWithSelectionSet(want: boolean) { this._elements.wantSyncWithSelectionSet = want; }\r\n\r\n /** Remove all elements from the hilited set. */\r\n public clear() {\r\n this.elements.clear();\r\n this.subcategories.clear();\r\n this.models.clear();\r\n }\r\n\r\n /** Returns true if nothing is hilited. */\r\n public get isEmpty(): boolean { return this.elements.isEmpty && this.subcategories.isEmpty && this.models.isEmpty; }\r\n\r\n /** Toggle the hilited state of one or more elements.\r\n * @param arg the ID(s) of the elements whose state is to be toggled.\r\n * @param onOff True to add the elements to the hilited set, false to remove them.\r\n */\r\n public setHilite(arg: Id64Arg, onOff: boolean): void {\r\n const oldSize = this.elements.size;\r\n\r\n for (const id of Id64.iterable(arg)) {\r\n if (onOff)\r\n this.elements.addId(id);\r\n else\r\n this.elements.deleteId(id);\r\n }\r\n\r\n if (oldSize !== this.elements.size)\r\n IModelApp.viewManager.onSelectionSetChanged(this.iModel);\r\n }\r\n}\r\n\r\n/** A set of *currently selected* elements for an IModelConnection.\r\n * Selected elements are displayed with a customizable hilite effect within a [[Viewport]].\r\n * @see [Hilite.Settings]($common) for customization of the hilite effect.\r\n * @public\r\n * @extensions\r\n */\r\nexport class SelectionSet {\r\n private _elements = new Set<string>();\r\n\r\n /** The IDs of the selected elements.\r\n * @note Do not modify this set directly. Instead, use methods like [[SelectionSet.add]].\r\n */\r\n public get elements(): Set<string> { return this._elements; }\r\n\r\n /** Called whenever elements are added or removed from this SelectionSet */\r\n public readonly onChanged = new BeEvent<(ev: SelectionSetEvent) => void>();\r\n\r\n public constructor(public iModel: IModelConnection) { }\r\n\r\n private sendChangedEvent(ev: SelectionSetEvent) {\r\n IModelApp.viewManager.onSelectionSetChanged(this.iModel);\r\n this.onChanged.raiseEvent(ev);\r\n }\r\n\r\n /** Get the number of entries in this selection set. */\r\n public get size() { return this.elements.size; }\r\n\r\n /** Check whether there are any selected elements. */\r\n public get isActive() { return this.size !== 0; }\r\n\r\n /** Return true if elemId is in this SelectionSet.\r\n * @see [[isSelected]]\r\n */\r\n public has(elemId?: string) { return !!elemId && this.elements.has(elemId); }\r\n\r\n /** Query whether an Id is in the selection set.\r\n * @see [[has]]\r\n */\r\n public isSelected(elemId?: Id64String): boolean { return !!elemId && this.elements.has(elemId); }\r\n\r\n /** Clear current selection set.\r\n * @note raises the [[onChanged]] event with [[SelectionSetEventType.Clear]].\r\n */\r\n public emptyAll(): void {\r\n if (!this.isActive)\r\n return;\r\n\r\n const removed = this._elements;\r\n this._elements = new Set<string>();\r\n this.sendChangedEvent({ set: this, type: SelectionSetEventType.Clear, removed });\r\n }\r\n\r\n /**\r\n * Add one or more Ids to the current selection set.\r\n * @param elem The set of Ids to add.\r\n * @returns true if any elements were added.\r\n */\r\n public add(elem: Id64Arg): boolean {\r\n return this._add(elem);\r\n }\r\n\r\n private _add(elem: Id64Arg, sendEvent = true): boolean {\r\n const oldSize = this.elements.size;\r\n for (const id of Id64.iterable(elem))\r\n this.elements.add(id);\r\n\r\n const changed = oldSize !== this.elements.size;\r\n if (sendEvent && changed)\r\n this.sendChangedEvent({ type: SelectionSetEventType.Add, set: this, added: elem });\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * Remove one or more Ids from the current selection set.\r\n * @param elem The set of Ids to remove.\r\n * @returns true if any elements were removed.\r\n */\r\n public remove(elem: Id64Arg): boolean {\r\n return this._remove(elem);\r\n }\r\n\r\n private _remove(elem: Id64Arg, sendEvent = true): boolean {\r\n const oldSize = this.elements.size;\r\n for (const id of Id64.iterable(elem))\r\n this.elements.delete(id);\r\n\r\n const changed = oldSize !== this.elements.size;\r\n if (sendEvent && changed)\r\n this.sendChangedEvent({ type: SelectionSetEventType.Remove, set: this, removed: elem });\r\n\r\n return changed;\r\n }\r\n\r\n /**\r\n * Add one set of Ids, and remove another set of Ids. Any Ids that are in both sets are removed.\r\n * @returns True if any Ids were either added or removed.\r\n */\r\n public addAndRemove(adds: Id64Arg, removes: Id64Arg): boolean {\r\n const added = this._add(adds, false);\r\n const removed = this._remove(removes, false);\r\n\r\n if (added && removed)\r\n this.sendChangedEvent({ type: SelectionSetEventType.Replace, set: this, added: adds, removed: removes });\r\n else if (added)\r\n this.sendChangedEvent({ type: SelectionSetEventType.Add, set: this, added: adds });\r\n else if (removed)\r\n this.sendChangedEvent({ type: SelectionSetEventType.Remove, set: this, removed: removes });\r\n\r\n return (added || removed);\r\n }\r\n\r\n /** Invert the state of a set of Ids in the SelectionSet */\r\n public invert(elem: Id64Arg): boolean {\r\n const elementsToAdd = new Set<string>();\r\n const elementsToRemove = new Set<string>();\r\n for (const id of Id64.iterable(elem)) {\r\n if (this.elements.has(id))\r\n elementsToRemove.add(id);\r\n else\r\n elementsToAdd.add(id);\r\n }\r\n\r\n return this.addAndRemove(elementsToAdd, elementsToRemove);\r\n }\r\n\r\n /** Change selection set to be the supplied set of Ids. */\r\n public replace(elem: Id64Arg): void {\r\n if (areEqual(this.elements, elem))\r\n return;\r\n\r\n const removed = this._elements;\r\n this._elements = new Set<string>();\r\n this._add(elem, false);\r\n\r\n if (0 < removed.size) {\r\n for (const id of Id64.iterable(elem)) {\r\n if (removed.has(id))\r\n removed.delete(id);\r\n }\r\n }\r\n\r\n this.sendChangedEvent({ type: SelectionSetEventType.Replace, set: this, added: elem, removed });\r\n }\r\n}\r\n\r\nfunction areEqual(lhs: Set<string>, rhs: Id64Arg): boolean {\r\n // Size is unreliable if input can contain duplicates...\r\n if (Array.isArray(rhs))\r\n rhs = Id64.toIdSet(rhs);\r\n\r\n if (lhs.size !== Id64.sizeOf(rhs))\r\n return false;\r\n\r\n for (const id of Id64.iterable(rhs))\r\n if (!lhs.has(id))\r\n return false;\r\n\r\n return true;\r\n}\r\n"]}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { EasingFunction } from "@itwin/core-common";
5
5
  import { ViewStatus } from "./ViewStatus";
6
- import { MarginPercent } from "./MarginPercent";
6
+ import { MarginPercent, PaddingPercent } from "./MarginPercent";
7
7
  import { Point3d } from "@itwin/core-geometry";
8
8
  /** An object to animate a transition of a [[Viewport]].
9
9
  * Only one animator may be associated with a viewport at a time. Registering a new
@@ -60,8 +60,16 @@ export interface OnViewExtentsError {
60
60
  * @extensions
61
61
  */
62
62
  export interface MarginOptions {
63
- /** The percentage of the view to leave blank around the edges. */
63
+ /** Margins to apply around the edges of the view.
64
+ * @note This property is ignored if [[paddingPercent]] is specified.
65
+ */
64
66
  marginPercent?: MarginPercent;
67
+ /** Padding to apply around the edges of the view.
68
+ * Individual padding for any or all sides can be specified as a [[PaddingPercent]], or a uniform padding to be applied
69
+ * to all sides can be specified as a single number.
70
+ * @note This property takes precedence over [[marginPercent]].
71
+ */
72
+ paddingPercent?: PaddingPercent | number;
65
73
  }
66
74
  /** Options that control how operations that change a viewport behave.
67
75
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"ViewAnimation.d.ts","sourceRoot":"","sources":["../../src/ViewAnimation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,sIAAsI;IACtI,OAAO,IAAI,OAAO,CAAC;IAEnB,gIAAgI;IAChI,SAAS,IAAI,IAAI,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,yGAAyG;IACzG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,4HAA4H;IAC5H,yBAAyB,CAAC,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;CACxD;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,wGAAwG;IACxG,MAAM,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,+GAA+G;IAC/G,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB,EAAE,oBAAoB;IACjF,sGAAsG;IACtG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8FAA8F;IAC9F,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,0EAA0E;IAC1E,eAAe,CAAC,EAAE,sBAAsB,CAAC;CAC1C"}
1
+ {"version":3,"file":"ViewAnimation.d.ts","sourceRoot":"","sources":["../../src/ViewAnimation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,sIAAsI;IACtI,OAAO,IAAI,OAAO,CAAC;IAEnB,gIAAgI;IAChI,SAAS,IAAI,IAAI,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,yGAAyG;IACzG,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,iEAAiE;IACjE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,4HAA4H;IAC5H,yBAAyB,CAAC,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;CACxD;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,wGAAwG;IACxG,MAAM,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,+GAA+G;IAC/G,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,UAAU,CAAC;CACrD;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,cAAc,CAAC,EAAE,cAAc,GAAG,MAAM,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB,EAAE,oBAAoB;IACjF,sGAAsG;IACtG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8FAA8F;IAC9F,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,0EAA0E;IAC1E,eAAe,CAAC,EAAE,sBAAsB,CAAC;CAC1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"ViewAnimation.js","sourceRoot":"","sources":["../../src/ViewAnimation.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\nimport { EasingFunction } from \"@itwin/core-common\";\r\nimport { ViewStatus } from \"./ViewStatus\";\r\nimport { MarginPercent } from \"./MarginPercent\";\r\nimport { Point3d } from \"@itwin/core-geometry\";\r\n\r\n/** An object to animate a transition of a [[Viewport]].\r\n * Only one animator may be associated with a viewport at a time. Registering a new\r\n * animator interrupts and replaces any existing animator.\r\n * The animator's animate() function will be invoked just prior to the rendering of each frame.\r\n * The animator may be removed in response to certain changes to the viewport - e.g., when\r\n * the viewport is closed, or viewing tools operate on it, etc.\r\n * @see [[Viewport.setAnimator]] to apply an animator to a viewport.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface Animator {\r\n /** Apply animation to the viewport. Return true when animation is completed, causing the animator to be removed from the viewport. */\r\n animate(): boolean;\r\n\r\n /** Invoked to abort this Animator. This method is called if [[Viewport.setAnimator]] is called before `animate` returns true */\r\n interrupt(): void;\r\n}\r\n\r\n/** Options that control how an Viewport animation behaves.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ViewAnimationOptions {\r\n /** Amount of time for animation, in milliseconds. Default is [[ScreenViewport.animation.time.normal]] */\r\n animationTime?: number;\r\n /** if animation is aborted, don't move to end, leave at current point instead. */\r\n cancelOnAbort?: boolean;\r\n /** easing function for animation. Default is Easing.Cubic.Out */\r\n easingFunction?: EasingFunction;\r\n /** Invoked when the animator is finished. didComplete is true only if the animation finished without being interrupted. */\r\n animationFinishedCallback?(didComplete: boolean): void;\r\n}\r\n\r\n/** Options that control how a view is aligned with the globe.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GlobalAlignmentOptions {\r\n /** The target point about which the alignment occurs. This point will remain stationary in the view */\r\n target: Point3d;\r\n /** If defined and true then the alignment rotation is scaled by the [[ViewState.globalViewTransition]]. This is\r\n * typically used when zooming out from is zoomed out from a specific location to a more global representation.\r\n */\r\n transition?: boolean;\r\n}\r\n\r\n/** A method to be called if an error occurs while adjusting a ViewState's extents\r\n * @public\r\n * @extensions\r\n */\r\nexport interface OnViewExtentsError {\r\n /** Function to be called when the extents are adjusted due to a limits error (view too larger or too small) */\r\n onExtentsError?: (status: ViewStatus) => ViewStatus;\r\n}\r\n\r\n/** Options that control the margin around the edges of a volume for lookAt and Fit view operations\r\n * @public\r\n * @extensions\r\n */\r\nexport interface MarginOptions {\r\n /** The percentage of the view to leave blank around the edges. */\r\n marginPercent?: MarginPercent;\r\n}\r\n\r\n/** Options that control how operations that change a viewport behave.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ViewChangeOptions extends OnViewExtentsError, ViewAnimationOptions {\r\n /** Whether to save the result of this change into the view undo stack. Default is to save in undo. */\r\n noSaveInUndo?: boolean;\r\n /** Whether the change should be animated or not. Default is to not animate frustum change. */\r\n animateFrustumChange?: boolean;\r\n /** If defined the controls how the view will be aligned with the globe */\r\n globalAlignment?: GlobalAlignmentOptions;\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewAnimation.js","sourceRoot":"","sources":["../../src/ViewAnimation.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\nimport { EasingFunction } from \"@itwin/core-common\";\r\nimport { ViewStatus } from \"./ViewStatus\";\r\nimport { MarginPercent, PaddingPercent } from \"./MarginPercent\";\r\nimport { Point3d } from \"@itwin/core-geometry\";\r\n\r\n/** An object to animate a transition of a [[Viewport]].\r\n * Only one animator may be associated with a viewport at a time. Registering a new\r\n * animator interrupts and replaces any existing animator.\r\n * The animator's animate() function will be invoked just prior to the rendering of each frame.\r\n * The animator may be removed in response to certain changes to the viewport - e.g., when\r\n * the viewport is closed, or viewing tools operate on it, etc.\r\n * @see [[Viewport.setAnimator]] to apply an animator to a viewport.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface Animator {\r\n /** Apply animation to the viewport. Return true when animation is completed, causing the animator to be removed from the viewport. */\r\n animate(): boolean;\r\n\r\n /** Invoked to abort this Animator. This method is called if [[Viewport.setAnimator]] is called before `animate` returns true */\r\n interrupt(): void;\r\n}\r\n\r\n/** Options that control how an Viewport animation behaves.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ViewAnimationOptions {\r\n /** Amount of time for animation, in milliseconds. Default is [[ScreenViewport.animation.time.normal]] */\r\n animationTime?: number;\r\n /** if animation is aborted, don't move to end, leave at current point instead. */\r\n cancelOnAbort?: boolean;\r\n /** easing function for animation. Default is Easing.Cubic.Out */\r\n easingFunction?: EasingFunction;\r\n /** Invoked when the animator is finished. didComplete is true only if the animation finished without being interrupted. */\r\n animationFinishedCallback?(didComplete: boolean): void;\r\n}\r\n\r\n/** Options that control how a view is aligned with the globe.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GlobalAlignmentOptions {\r\n /** The target point about which the alignment occurs. This point will remain stationary in the view */\r\n target: Point3d;\r\n /** If defined and true then the alignment rotation is scaled by the [[ViewState.globalViewTransition]]. This is\r\n * typically used when zooming out from is zoomed out from a specific location to a more global representation.\r\n */\r\n transition?: boolean;\r\n}\r\n\r\n/** A method to be called if an error occurs while adjusting a ViewState's extents\r\n * @public\r\n * @extensions\r\n */\r\nexport interface OnViewExtentsError {\r\n /** Function to be called when the extents are adjusted due to a limits error (view too larger or too small) */\r\n onExtentsError?: (status: ViewStatus) => ViewStatus;\r\n}\r\n\r\n/** Options that control the margin around the edges of a volume for lookAt and Fit view operations\r\n * @public\r\n * @extensions\r\n */\r\nexport interface MarginOptions {\r\n /** Margins to apply around the edges of the view.\r\n * @note This property is ignored if [[paddingPercent]] is specified.\r\n */\r\n marginPercent?: MarginPercent;\r\n /** Padding to apply around the edges of the view.\r\n * Individual padding for any or all sides can be specified as a [[PaddingPercent]], or a uniform padding to be applied\r\n * to all sides can be specified as a single number.\r\n * @note This property takes precedence over [[marginPercent]].\r\n */\r\n paddingPercent?: PaddingPercent | number;\r\n}\r\n\r\n/** Options that control how operations that change a viewport behave.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ViewChangeOptions extends OnViewExtentsError, ViewAnimationOptions {\r\n /** Whether to save the result of this change into the view undo stack. Default is to save in undo. */\r\n noSaveInUndo?: boolean;\r\n /** Whether the change should be animated or not. Default is to not animate frustum change. */\r\n animateFrustumChange?: boolean;\r\n /** If defined the controls how the view will be aligned with the globe */\r\n globalAlignment?: GlobalAlignmentOptions;\r\n}\r\n"]}
@@ -43,14 +43,15 @@ class ViewCreator2d {
43
43
  * @param options for view creation.
44
44
  */
45
45
  this._createViewStateProps = async (modelId, options) => {
46
+ var _a;
46
47
  // Use dictionary model in all props
47
48
  const dictionaryId = core_common_1.IModel.dictionaryId;
48
49
  const categories = await this._getAllCategories();
49
50
  // Get bg color from options or default to white
50
51
  const bgColor = (options === null || options === void 0 ? void 0 : options.bgColor) ? options.bgColor : core_common_1.ColorDef.white;
51
52
  // model extents
52
- const modelProps = await this._imodel.models.queryModelRanges(modelId);
53
- const modelExtents = core_geometry_1.Range3d.fromJSON(modelProps[0]);
53
+ const modelProps = await this._imodel.models.queryExtents(modelId);
54
+ const modelExtents = core_geometry_1.Range3d.fromJSON((_a = modelProps[0]) === null || _a === void 0 ? void 0 : _a.extents);
54
55
  let originX = modelExtents.low.x;
55
56
  let originY = modelExtents.low.y;
56
57
  let deltaX = modelExtents.xLength();
@@ -1 +1 @@
1
- {"version":3,"file":"ViewCreator2d.js","sourceRoot":"","sources":["../../src/ViewCreator2d.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\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\n/*\r\nAPI for creating a 2D view from a given modelId and modelType (classFullName).\r\nAdditional options (such as background color) can be passed during view creation.\r\n*/\r\n\r\nimport { Id64Array, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport {\r\n CategorySelectorProps, Code, ColorDef, DisplayStyleProps, IModel, IModelError, ModelSelectorProps, QueryBinder, QueryRowFormat, SheetProps,\r\n ViewDefinition2dProps, ViewStateProps,\r\n} from \"@itwin/core-common\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { DrawingViewState } from \"./DrawingViewState\";\r\nimport { EntityState } from \"./EntityState\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { DrawingModelState, SectionDrawingModelState, SheetModelState } from \"./ModelState\";\r\nimport { SheetViewState } from \"./SheetViewState\";\r\nimport { ViewState, ViewState2d } from \"./ViewState\";\r\n\r\n/** Options for creating a [[ViewState2d]] via [[ViewCreator2d]].\r\n * @public\r\n * @extensions\r\n*/\r\nexport interface ViewCreator2dOptions {\r\n /** Aspect ratio of [[Viewport]]. Required to fit contents of the model in the initial state of the view. */\r\n vpAspect?: number;\r\n /** Background color of the view (default is white). */\r\n bgColor?: ColorDef;\r\n /** Checks to see if there already is a [[ViewDefinition2d]] for the given modelId. If so, use it as the seed view, and merge its props into the final view created. */\r\n useSeedView?: boolean;\r\n}\r\n\r\n/**\r\n * API for creating a [[ViewState2d]] for a 2D model ([[GeometricModel2dState]]). @see [[ViewCreator3d]] to create a view for a 3d model.\r\n * Example usage:\r\n * ```ts\r\n * const viewCreator = new ViewCreator2d(imodel);\r\n * const models = await imodel.models.queryProps({ from: \"BisCore.GeometricModel2d\" });\r\n * if (models.length > 0)\r\n * const view = await viewCreator.createViewForModel(models[0].id!);\r\n * ```\r\n * @public\r\n * @extensions\r\n */\r\nexport class ViewCreator2d {\r\n\r\n // Types of 2D models the API supports\r\n private static _drawingModelClasses = [DrawingModelState.classFullName, SectionDrawingModelState.classFullName];\r\n private static _sheetModelClasses = [SheetModelState.classFullName];\r\n\r\n /**\r\n * Constructs a ViewCreator2d using an [[IModelConnection]].\r\n * @param _imodel [[IModelConnection]] to query for categories and/or models.\r\n */\r\n constructor(private _imodel: IModelConnection) { }\r\n\r\n /**\r\n * Creates and returns view for the 2D model id passed in.\r\n * @param modelId Id of the 2D model for the view.\r\n * @param [options] Options for creating the view.\r\n * @throws [IModelError]($common) If modelType is not supported.\r\n */\r\n public async createViewForModel(modelId: Id64String, options?: ViewCreator2dOptions): Promise<ViewState> {\r\n\r\n const baseClassName = await this._getModelBaseClassName(modelId);\r\n\r\n const viewState = await this._createViewState2d(modelId, baseClassName.classFullName, options);\r\n try {\r\n await viewState.load();\r\n } catch { }\r\n\r\n return viewState;\r\n }\r\n\r\n /**\r\n * Gets model base class name from id.\r\n * @param modelId of target model.\r\n * @throws [IModelError]($common) if modelId is invalid.\r\n */\r\n private async _getModelBaseClassName(modelId: Id64String): Promise<typeof EntityState> {\r\n\r\n let baseClassName;\r\n\r\n const modelProps = await this._imodel.models.getProps(modelId);\r\n if (modelProps.length > 0) {\r\n const modelType = modelProps[0].classFullName;\r\n baseClassName = await this._imodel.findClassFor(modelType, undefined);\r\n } else\r\n throw new IModelError(IModelStatus.BadModel, \"ViewCreator2d._getModelBaseClassName: modelId is invalid\");\r\n\r\n if (baseClassName === undefined)\r\n throw new IModelError(IModelStatus.WrongClass, \"ViewCreator2d.getViewForModel: modelType is invalid\");\r\n\r\n return baseClassName;\r\n }\r\n\r\n /**\r\n * Creates view from any 2D model type (Drawing/SectionDrawing/Sheet)\r\n * @param modelId of target model.\r\n * @param modelType classFullName of target 2D model.\r\n * @param options for view creation.\r\n * @throws [IModelError]($common) if modelType is not supported.\r\n */\r\n private async _createViewState2d(modelId: Id64String, modelType: string, options?: ViewCreator2dOptions): Promise<ViewState2d> {\r\n let viewState: ViewState2d;\r\n if (this._isDrawingModelClass(modelType)) {\r\n const props = await this._createViewStateProps(modelId, options);\r\n viewState = DrawingViewState.createFromProps(props, this._imodel);\r\n } else if (this._isSheetModelClass(modelType)) {\r\n let props = await this._createViewStateProps(modelId, options);\r\n props = await this._addSheetViewProps(modelId, props);\r\n viewState = SheetViewState.createFromProps(props, this._imodel);\r\n } else\r\n throw new IModelError(IModelStatus.WrongClass, \"ViewCreator2d._createViewState2d: modelType not supported\");\r\n\r\n return viewState;\r\n }\r\n\r\n /**\r\n * Checks to see if given model is of [[DrawingModelState]].\r\n * @param modelType classFullName of model.\r\n */\r\n private _isDrawingModelClass(modelType: string) {\r\n if (ViewCreator2d._drawingModelClasses.includes(modelType)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks to see if given model is of [[SheetModelState]].\r\n * @param modelType classFullName of model.\r\n */\r\n private _isSheetModelClass(modelType: string) {\r\n if (ViewCreator2d._sheetModelClasses.includes(modelType)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Creates ViewStateProps for the model. ViewStateProps are composed of the 4 sets of Props below.\r\n * @param modelId of target model.\r\n * @param options for view creation.\r\n */\r\n private _createViewStateProps = async (modelId: Id64String, options?: ViewCreator2dOptions): Promise<ViewStateProps> => {\r\n // Use dictionary model in all props\r\n const dictionaryId = IModel.dictionaryId;\r\n const categories = await this._getAllCategories();\r\n\r\n // Get bg color from options or default to white\r\n const bgColor: ColorDef = options?.bgColor ? options.bgColor : ColorDef.white;\r\n\r\n // model extents\r\n const modelProps = await this._imodel.models.queryModelRanges(modelId);\r\n const modelExtents = Range3d.fromJSON(modelProps[0]);\r\n let originX = modelExtents.low.x;\r\n let originY = modelExtents.low.y;\r\n let deltaX = modelExtents.xLength();\r\n let deltaY = modelExtents.yLength();\r\n\r\n // if vp aspect given, update model extents to fit view\r\n if (options?.vpAspect) {\r\n const modelAspect = deltaY / deltaX;\r\n\r\n if (modelAspect > options.vpAspect) {\r\n const xFix = deltaY / options.vpAspect;\r\n originX = originX - xFix / 2;\r\n deltaX = deltaX + xFix;\r\n } else if (modelAspect < options.vpAspect) {\r\n const yFix = deltaX * options.vpAspect;\r\n originY = originY - yFix / 2;\r\n deltaY = deltaY + yFix;\r\n }\r\n }\r\n\r\n const modelSelectorProps: ModelSelectorProps = {\r\n models: [modelId],\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:ModelSelector\",\r\n };\r\n\r\n const categorySelectorProps: CategorySelectorProps = {\r\n categories,\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:CategorySelector\",\r\n };\r\n\r\n const viewDefinitionProps: ViewDefinition2dProps = {\r\n baseModelId: modelId,\r\n categorySelectorId: \"\",\r\n displayStyleId: \"\",\r\n origin: { x: originX, y: originY },\r\n delta: { x: deltaX, y: deltaY },\r\n angle: { radians: 0 },\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:ViewDefinition2d\",\r\n };\r\n\r\n const displayStyleProps: DisplayStyleProps = {\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:DisplayStyle2d\",\r\n jsonProperties: {\r\n styles: {\r\n backgroundColor: bgColor.tbgr,\r\n },\r\n },\r\n };\r\n\r\n const viewStateProps: ViewStateProps = {\r\n displayStyleProps,\r\n categorySelectorProps,\r\n modelSelectorProps,\r\n viewDefinitionProps,\r\n modelExtents,\r\n };\r\n\r\n // merge seed view props if needed\r\n return options?.useSeedView ? this._mergeSeedView(modelId, viewStateProps) : viewStateProps;\r\n };\r\n\r\n /**\r\n * Adds Sheet view props to given view props.\r\n * @param modelId of target model.\r\n * @param props input ViewStateProps.\r\n */\r\n private async _addSheetViewProps(modelId: Id64String, props: ViewStateProps) {\r\n let width = 0;\r\n let height = 0;\r\n for await (const row of this._imodel.query(`SELECT Width, Height FROM bis.Sheet WHERE ECInstanceId = ?`, QueryBinder.from([modelId]), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n width = row.width as number;\r\n height = row.height as number;\r\n break;\r\n }\r\n const sheetProps: SheetProps = {\r\n model: modelId,\r\n code: { spec: \"\", scope: \"\" },\r\n classFullName: \"DrawingSheetModel\",\r\n height,\r\n width,\r\n };\r\n\r\n props.sheetAttachments = await this._getSheetAttachments(modelId);\r\n props.sheetProps = sheetProps;\r\n\r\n return props;\r\n }\r\n\r\n /**\r\n * Merges a seed view in the iModel with the passed view state props. It will be a no-op if there are no 2D views for target model.\r\n * @param modelId of target model.\r\n * @param props Input view props to be merged\r\n */\r\n private async _mergeSeedView(modelId: Id64String, props: ViewStateProps): Promise<ViewStateProps> {\r\n const viewDefinitionId = await this._getViewDefinitionsIdForModel(modelId);\r\n // Return incase no viewDefinition found.\r\n if (viewDefinitionId === undefined)\r\n return props;\r\n\r\n const seedViewState = (await this._imodel.views.load(viewDefinitionId));\r\n const seedViewStateProps: ViewStateProps = {\r\n categorySelectorProps: seedViewState.categorySelector.toJSON(),\r\n viewDefinitionProps: seedViewState.toJSON(),\r\n displayStyleProps: seedViewState.displayStyle.toJSON(),\r\n };\r\n const mergedDisplayProps = seedViewStateProps.displayStyleProps;\r\n if (mergedDisplayProps.jsonProperties !== undefined) {\r\n mergedDisplayProps.jsonProperties.styles = {\r\n ...mergedDisplayProps.jsonProperties.styles,\r\n ...props.displayStyleProps.jsonProperties!.styles,\r\n };\r\n }\r\n\r\n return { ...seedViewStateProps, ...props, displayStyleProps: mergedDisplayProps };\r\n }\r\n\r\n /**\r\n * Get all view definitions for a given model.\r\n * @param modelId of target model.\r\n */\r\n private async _getViewDefinitionsIdForModel(modelId: Id64String): Promise<Id64String | undefined> {\r\n\r\n const query = `SELECT ECInstanceId from Bis.ViewDefinition2D WHERE BaseModel.Id = ${modelId} AND isPrivate = false LIMIT 1`;\r\n const viewDefinitionsId = await this._executeQuery(query);\r\n\r\n return (viewDefinitionsId.length) > 0 ? viewDefinitionsId[0] : undefined;\r\n }\r\n\r\n /**\r\n * Get all drawing categories\r\n */\r\n private async _getAllCategories(): Promise<Id64Array> {\r\n\r\n const query = \"SELECT ECInstanceId from BisCore.DrawingCategory\";\r\n const categories = await this._executeQuery(query);\r\n\r\n return categories;\r\n }\r\n\r\n /**\r\n * Get all sheet attachments\r\n * @param modelId of target model.\r\n */\r\n private async _getSheetAttachments(modelId: string): Promise<Id64Array> {\r\n\r\n const query = `SELECT ECInstanceId FROM Bis.ViewAttachment WHERE Model.Id = ${modelId}`;\r\n const attachments = await this._executeQuery(query);\r\n\r\n return attachments;\r\n }\r\n\r\n /**\r\n * Helper function to execute ECSql queries.\r\n * @param query statement to execute.\r\n */\r\n private _executeQuery = async (query: string) => {\r\n const rows = [];\r\n for await (const row of this._imodel.query(query, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames }))\r\n rows.push(row.id);\r\n\r\n return rows;\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewCreator2d.js","sourceRoot":"","sources":["../../src/ViewCreator2d.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\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\n/*\r\nAPI for creating a 2D view from a given modelId and modelType (classFullName).\r\nAdditional options (such as background color) can be passed during view creation.\r\n*/\r\n\r\nimport { Id64Array, Id64String, IModelStatus } from \"@itwin/core-bentley\";\r\nimport {\r\n CategorySelectorProps, Code, ColorDef, DisplayStyleProps, IModel, IModelError, ModelSelectorProps, QueryBinder, QueryRowFormat, SheetProps,\r\n ViewDefinition2dProps, ViewStateProps,\r\n} from \"@itwin/core-common\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { DrawingViewState } from \"./DrawingViewState\";\r\nimport { EntityState } from \"./EntityState\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { DrawingModelState, SectionDrawingModelState, SheetModelState } from \"./ModelState\";\r\nimport { SheetViewState } from \"./SheetViewState\";\r\nimport { ViewState, ViewState2d } from \"./ViewState\";\r\n\r\n/** Options for creating a [[ViewState2d]] via [[ViewCreator2d]].\r\n * @public\r\n * @extensions\r\n*/\r\nexport interface ViewCreator2dOptions {\r\n /** Aspect ratio of [[Viewport]]. Required to fit contents of the model in the initial state of the view. */\r\n vpAspect?: number;\r\n /** Background color of the view (default is white). */\r\n bgColor?: ColorDef;\r\n /** Checks to see if there already is a [[ViewDefinition2d]] for the given modelId. If so, use it as the seed view, and merge its props into the final view created. */\r\n useSeedView?: boolean;\r\n}\r\n\r\n/**\r\n * API for creating a [[ViewState2d]] for a 2D model ([[GeometricModel2dState]]). @see [[ViewCreator3d]] to create a view for a 3d model.\r\n * Example usage:\r\n * ```ts\r\n * const viewCreator = new ViewCreator2d(imodel);\r\n * const models = await imodel.models.queryProps({ from: \"BisCore.GeometricModel2d\" });\r\n * if (models.length > 0)\r\n * const view = await viewCreator.createViewForModel(models[0].id!);\r\n * ```\r\n * @public\r\n * @extensions\r\n */\r\nexport class ViewCreator2d {\r\n\r\n // Types of 2D models the API supports\r\n private static _drawingModelClasses = [DrawingModelState.classFullName, SectionDrawingModelState.classFullName];\r\n private static _sheetModelClasses = [SheetModelState.classFullName];\r\n\r\n /**\r\n * Constructs a ViewCreator2d using an [[IModelConnection]].\r\n * @param _imodel [[IModelConnection]] to query for categories and/or models.\r\n */\r\n constructor(private _imodel: IModelConnection) { }\r\n\r\n /**\r\n * Creates and returns view for the 2D model id passed in.\r\n * @param modelId Id of the 2D model for the view.\r\n * @param [options] Options for creating the view.\r\n * @throws [IModelError]($common) If modelType is not supported.\r\n */\r\n public async createViewForModel(modelId: Id64String, options?: ViewCreator2dOptions): Promise<ViewState> {\r\n\r\n const baseClassName = await this._getModelBaseClassName(modelId);\r\n\r\n const viewState = await this._createViewState2d(modelId, baseClassName.classFullName, options);\r\n try {\r\n await viewState.load();\r\n } catch { }\r\n\r\n return viewState;\r\n }\r\n\r\n /**\r\n * Gets model base class name from id.\r\n * @param modelId of target model.\r\n * @throws [IModelError]($common) if modelId is invalid.\r\n */\r\n private async _getModelBaseClassName(modelId: Id64String): Promise<typeof EntityState> {\r\n\r\n let baseClassName;\r\n\r\n const modelProps = await this._imodel.models.getProps(modelId);\r\n if (modelProps.length > 0) {\r\n const modelType = modelProps[0].classFullName;\r\n baseClassName = await this._imodel.findClassFor(modelType, undefined);\r\n } else\r\n throw new IModelError(IModelStatus.BadModel, \"ViewCreator2d._getModelBaseClassName: modelId is invalid\");\r\n\r\n if (baseClassName === undefined)\r\n throw new IModelError(IModelStatus.WrongClass, \"ViewCreator2d.getViewForModel: modelType is invalid\");\r\n\r\n return baseClassName;\r\n }\r\n\r\n /**\r\n * Creates view from any 2D model type (Drawing/SectionDrawing/Sheet)\r\n * @param modelId of target model.\r\n * @param modelType classFullName of target 2D model.\r\n * @param options for view creation.\r\n * @throws [IModelError]($common) if modelType is not supported.\r\n */\r\n private async _createViewState2d(modelId: Id64String, modelType: string, options?: ViewCreator2dOptions): Promise<ViewState2d> {\r\n let viewState: ViewState2d;\r\n if (this._isDrawingModelClass(modelType)) {\r\n const props = await this._createViewStateProps(modelId, options);\r\n viewState = DrawingViewState.createFromProps(props, this._imodel);\r\n } else if (this._isSheetModelClass(modelType)) {\r\n let props = await this._createViewStateProps(modelId, options);\r\n props = await this._addSheetViewProps(modelId, props);\r\n viewState = SheetViewState.createFromProps(props, this._imodel);\r\n } else\r\n throw new IModelError(IModelStatus.WrongClass, \"ViewCreator2d._createViewState2d: modelType not supported\");\r\n\r\n return viewState;\r\n }\r\n\r\n /**\r\n * Checks to see if given model is of [[DrawingModelState]].\r\n * @param modelType classFullName of model.\r\n */\r\n private _isDrawingModelClass(modelType: string) {\r\n if (ViewCreator2d._drawingModelClasses.includes(modelType)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Checks to see if given model is of [[SheetModelState]].\r\n * @param modelType classFullName of model.\r\n */\r\n private _isSheetModelClass(modelType: string) {\r\n if (ViewCreator2d._sheetModelClasses.includes(modelType)) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Creates ViewStateProps for the model. ViewStateProps are composed of the 4 sets of Props below.\r\n * @param modelId of target model.\r\n * @param options for view creation.\r\n */\r\n private _createViewStateProps = async (modelId: Id64String, options?: ViewCreator2dOptions): Promise<ViewStateProps> => {\r\n // Use dictionary model in all props\r\n const dictionaryId = IModel.dictionaryId;\r\n const categories = await this._getAllCategories();\r\n\r\n // Get bg color from options or default to white\r\n const bgColor: ColorDef = options?.bgColor ? options.bgColor : ColorDef.white;\r\n\r\n // model extents\r\n const modelProps = await this._imodel.models.queryExtents(modelId);\r\n const modelExtents = Range3d.fromJSON(modelProps[0]?.extents);\r\n let originX = modelExtents.low.x;\r\n let originY = modelExtents.low.y;\r\n let deltaX = modelExtents.xLength();\r\n let deltaY = modelExtents.yLength();\r\n\r\n // if vp aspect given, update model extents to fit view\r\n if (options?.vpAspect) {\r\n const modelAspect = deltaY / deltaX;\r\n\r\n if (modelAspect > options.vpAspect) {\r\n const xFix = deltaY / options.vpAspect;\r\n originX = originX - xFix / 2;\r\n deltaX = deltaX + xFix;\r\n } else if (modelAspect < options.vpAspect) {\r\n const yFix = deltaX * options.vpAspect;\r\n originY = originY - yFix / 2;\r\n deltaY = deltaY + yFix;\r\n }\r\n }\r\n\r\n const modelSelectorProps: ModelSelectorProps = {\r\n models: [modelId],\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:ModelSelector\",\r\n };\r\n\r\n const categorySelectorProps: CategorySelectorProps = {\r\n categories,\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:CategorySelector\",\r\n };\r\n\r\n const viewDefinitionProps: ViewDefinition2dProps = {\r\n baseModelId: modelId,\r\n categorySelectorId: \"\",\r\n displayStyleId: \"\",\r\n origin: { x: originX, y: originY },\r\n delta: { x: deltaX, y: deltaY },\r\n angle: { radians: 0 },\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:ViewDefinition2d\",\r\n };\r\n\r\n const displayStyleProps: DisplayStyleProps = {\r\n code: Code.createEmpty(),\r\n model: dictionaryId,\r\n classFullName: \"BisCore:DisplayStyle2d\",\r\n jsonProperties: {\r\n styles: {\r\n backgroundColor: bgColor.tbgr,\r\n },\r\n },\r\n };\r\n\r\n const viewStateProps: ViewStateProps = {\r\n displayStyleProps,\r\n categorySelectorProps,\r\n modelSelectorProps,\r\n viewDefinitionProps,\r\n modelExtents,\r\n };\r\n\r\n // merge seed view props if needed\r\n return options?.useSeedView ? this._mergeSeedView(modelId, viewStateProps) : viewStateProps;\r\n };\r\n\r\n /**\r\n * Adds Sheet view props to given view props.\r\n * @param modelId of target model.\r\n * @param props input ViewStateProps.\r\n */\r\n private async _addSheetViewProps(modelId: Id64String, props: ViewStateProps) {\r\n let width = 0;\r\n let height = 0;\r\n for await (const row of this._imodel.query(`SELECT Width, Height FROM bis.Sheet WHERE ECInstanceId = ?`, QueryBinder.from([modelId]), { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n width = row.width as number;\r\n height = row.height as number;\r\n break;\r\n }\r\n const sheetProps: SheetProps = {\r\n model: modelId,\r\n code: { spec: \"\", scope: \"\" },\r\n classFullName: \"DrawingSheetModel\",\r\n height,\r\n width,\r\n };\r\n\r\n props.sheetAttachments = await this._getSheetAttachments(modelId);\r\n props.sheetProps = sheetProps;\r\n\r\n return props;\r\n }\r\n\r\n /**\r\n * Merges a seed view in the iModel with the passed view state props. It will be a no-op if there are no 2D views for target model.\r\n * @param modelId of target model.\r\n * @param props Input view props to be merged\r\n */\r\n private async _mergeSeedView(modelId: Id64String, props: ViewStateProps): Promise<ViewStateProps> {\r\n const viewDefinitionId = await this._getViewDefinitionsIdForModel(modelId);\r\n // Return incase no viewDefinition found.\r\n if (viewDefinitionId === undefined)\r\n return props;\r\n\r\n const seedViewState = (await this._imodel.views.load(viewDefinitionId));\r\n const seedViewStateProps: ViewStateProps = {\r\n categorySelectorProps: seedViewState.categorySelector.toJSON(),\r\n viewDefinitionProps: seedViewState.toJSON(),\r\n displayStyleProps: seedViewState.displayStyle.toJSON(),\r\n };\r\n const mergedDisplayProps = seedViewStateProps.displayStyleProps;\r\n if (mergedDisplayProps.jsonProperties !== undefined) {\r\n mergedDisplayProps.jsonProperties.styles = {\r\n ...mergedDisplayProps.jsonProperties.styles,\r\n ...props.displayStyleProps.jsonProperties!.styles,\r\n };\r\n }\r\n\r\n return { ...seedViewStateProps, ...props, displayStyleProps: mergedDisplayProps };\r\n }\r\n\r\n /**\r\n * Get all view definitions for a given model.\r\n * @param modelId of target model.\r\n */\r\n private async _getViewDefinitionsIdForModel(modelId: Id64String): Promise<Id64String | undefined> {\r\n\r\n const query = `SELECT ECInstanceId from Bis.ViewDefinition2D WHERE BaseModel.Id = ${modelId} AND isPrivate = false LIMIT 1`;\r\n const viewDefinitionsId = await this._executeQuery(query);\r\n\r\n return (viewDefinitionsId.length) > 0 ? viewDefinitionsId[0] : undefined;\r\n }\r\n\r\n /**\r\n * Get all drawing categories\r\n */\r\n private async _getAllCategories(): Promise<Id64Array> {\r\n\r\n const query = \"SELECT ECInstanceId from BisCore.DrawingCategory\";\r\n const categories = await this._executeQuery(query);\r\n\r\n return categories;\r\n }\r\n\r\n /**\r\n * Get all sheet attachments\r\n * @param modelId of target model.\r\n */\r\n private async _getSheetAttachments(modelId: string): Promise<Id64Array> {\r\n\r\n const query = `SELECT ECInstanceId FROM Bis.ViewAttachment WHERE Model.Id = ${modelId}`;\r\n const attachments = await this._executeQuery(query);\r\n\r\n return attachments;\r\n }\r\n\r\n /**\r\n * Helper function to execute ECSql queries.\r\n * @param query statement to execute.\r\n */\r\n private _executeQuery = async (query: string) => {\r\n const rows = [];\r\n for await (const row of this._imodel.query(query, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames }))\r\n rows.push(row.id);\r\n\r\n return rows;\r\n };\r\n}\r\n"]}
@@ -5,46 +5,98 @@ import { BeTimePoint } from "@itwin/core-bentley";
5
5
  import { Angle, Matrix3d, Point2d, Point3d, Vector3d } from "@itwin/core-geometry";
6
6
  import { Camera } from "@itwin/core-common";
7
7
  import { ViewState, ViewState2d, ViewState3d } from "./ViewState";
8
- /** The "pose" for a view. This is either the volume or area, depending on whether the view is 3d or 2d,
9
- * plus the camera position/angle, if it is enabled.
8
+ /** The "pose" for a [View]($docs/learning/frontend/views#viewstate-parameters) describing the viewed area or volume, depending upon whether
9
+ * the view is 2d or 3d.
10
+ * @see [[ViewState.savePose]] to extract a pose from a view and [[ViewState.applyPose]] to apply a pose to a view.
10
11
  * @note a ViewPose is immutable.
11
12
  * @public
12
13
  * @extensions
13
14
  */
14
15
  export declare abstract class ViewPose {
15
- cameraOn: boolean;
16
+ /** The time at which this pose was created, if it was saved into a [[Viewport]]'s undo stack. */
16
17
  undoTime?: BeTimePoint;
18
+ /** Returns true if this pose is equivalent to the pose represented by the specified [[ViewState]].
19
+ * This implies that `this.equal(view.savePose())`.
20
+ */
17
21
  abstract equalState(view: ViewState): boolean;
22
+ /** Returns true if this pose is equivalent to the specified other pose. */
18
23
  abstract equal(other: ViewPose): boolean;
24
+ /** The origin of the view in [[CoordSystem.World]] coordinates.
25
+ * @see [[ViewState.getOrigin]].
26
+ */
19
27
  abstract origin: Point3d;
28
+ /** The extents of the view in [[CoordSystem.World]] coordinates.
29
+ * @see [[ViewState.getExtents]].
30
+ */
20
31
  abstract extents: Vector3d;
32
+ /** The 3x3 ortho-normal rotation matrix of the view.
33
+ * @see [[ViewState.getRotation]].
34
+ */
21
35
  abstract rotation: Matrix3d;
36
+ /** True if the camera is enabled.
37
+ * @see [[ViewPose3d.camera]] to access the camera.
38
+ */
39
+ cameraOn: boolean;
40
+ /** Computes the center of the viewed volume. */
22
41
  get center(): Point3d;
42
+ /** Returns the target point of the view. This is the same as [[center]] unless [[cameraOn]] is `true`. */
23
43
  get target(): Point3d;
44
+ /** Computes the Z vector of the [[rotation]] matrix. */
24
45
  get zVec(): Vector3d;
25
46
  constructor(cameraOn: boolean);
26
47
  }
27
- /** @internal */
48
+ /** The "pose" for a [[ViewState3d]], including information about the view's [Camera]($common) if it is enabled.
49
+ * @public
50
+ * @extensions
51
+ */
28
52
  export declare class ViewPose3d extends ViewPose {
53
+ /** @internal override */
29
54
  readonly origin: Point3d;
55
+ /** @internal override */
30
56
  readonly extents: Vector3d;
57
+ /** @internal override */
31
58
  readonly rotation: Matrix3d;
59
+ /** The camera parameters of the view.
60
+ * @note This object is meaningful only if [[ViewPose.cameraOn]] is `true`.
61
+ */
32
62
  readonly camera: Camera;
63
+ /** Construct a pose from the specified 3d view. */
33
64
  constructor(view: ViewState3d);
65
+ /** @internal override */
34
66
  get target(): Point3d;
35
- equal(other: ViewPose3d): boolean;
36
- equalState(view: ViewState3d): boolean;
67
+ /** @internal override */
68
+ equal(other: ViewPose): boolean;
69
+ /** @internal override */
70
+ equalState(view: ViewState): boolean;
37
71
  }
38
- /** @internal */
72
+ /** The "pose" for a [[ViewState2d]].
73
+ * @public
74
+ * @extensions
75
+ */
39
76
  export declare class ViewPose2d extends ViewPose {
40
- readonly origin2: Point2d;
77
+ /** The 2d origin of the view.
78
+ * @see [[ViewState2d.origin]].
79
+ */
80
+ readonly origin2d: Point2d;
81
+ /** The 2d extents of the view.
82
+ * @see [[ViewState2d.delta]].
83
+ */
41
84
  readonly delta: Point2d;
85
+ /** The rotation of the view.
86
+ * @see [[ViewState2d.angle]].
87
+ */
42
88
  readonly angle: Angle;
89
+ /** Construct a pose from the specified 2d view. */
43
90
  constructor(view: ViewState2d);
44
- equal(other: ViewPose2d): boolean;
45
- equalState(view: ViewState2d): boolean;
91
+ /** @internal override */
92
+ equal(other: ViewPose): boolean;
93
+ /** @internal override */
94
+ equalState(view: ViewState): boolean;
95
+ /** @internal override */
46
96
  get origin(): Point3d;
97
+ /** @internal override */
47
98
  get extents(): Vector3d;
99
+ /** @internal override */
48
100
  get rotation(): Matrix3d;
49
101
  }
50
102
  //# sourceMappingURL=ViewPose.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ViewPose.d.ts","sourceRoot":"","sources":["../../src/ViewPose.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAElE;;;;;GAKG;AACH,8BAAsB,QAAQ;IAeF,QAAQ,EAAE,OAAO;IAdpC,QAAQ,CAAC,EAAE,WAAW,CAAC;aACd,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;aACpC,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAC/C,SAAgB,MAAM,EAAE,OAAO,CAAC;IAChC,SAAgB,OAAO,EAAE,QAAQ,CAAC;IAClC,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IAEnC,IAAW,MAAM,YAGhB;IAED,IAAW,MAAM,YAA0B;IAC3C,IAAW,IAAI,aAAsC;gBAC3B,QAAQ,EAAE,OAAO;CAC5C;AAED,gBAAgB;AAChB,qBAAa,UAAW,SAAQ,QAAQ;IACtC,SAAgB,MAAM,EAAE,OAAO,CAAC;IAChC,SAAgB,OAAO,EAAE,QAAQ,CAAC;IAClC,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IACnC,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,WAAW;IAQpC,IAAoB,MAAM,YAEzB;IAEM,KAAK,CAAC,KAAK,EAAE,UAAU;IAQvB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;CAO9C;AAED,gBAAgB;AAChB,qBAAa,UAAW,SAAQ,QAAQ;IACtC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,KAAK,EAAE,OAAO,CAAC;IAC/B,SAAgB,KAAK,EAAE,KAAK,CAAC;gBAEV,IAAI,EAAE,WAAW;IAO7B,KAAK,CAAC,KAAK,EAAE,UAAU;IAMvB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO;IAM7C,IAAW,MAAM,YAA0D;IAC3E,IAAW,OAAO,aAAuD;IACzE,IAAW,QAAQ,aAAiF;CACrG"}
1
+ {"version":3,"file":"ViewPose.d.ts","sourceRoot":"","sources":["../../src/ViewPose.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAElE;;;;;;GAMG;AACH,8BAAsB,QAAQ;IAC5B,iGAAiG;IAC1F,QAAQ,CAAC,EAAE,WAAW,CAAC;IAC9B;;OAEG;aACa,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IACpD,2EAA2E;aAC3D,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAC/C;;OAEG;IACH,SAAgB,MAAM,EAAE,OAAO,CAAC;IAChC;;OAEG;IACH,SAAgB,OAAO,EAAE,QAAQ,CAAC;IAClC;;OAEG;IACH,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IACnC;;OAEG;IACI,QAAQ,EAAE,OAAO,CAAC;IAEzB,gDAAgD;IAChD,IAAW,MAAM,IAAI,OAAO,CAG3B;IAED,0GAA0G;IAC1G,IAAW,MAAM,YAA0B;IAE3C,wDAAwD;IACxD,IAAW,IAAI,aAAsC;gBAElC,QAAQ,EAAE,OAAO;CAGrC;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,QAAQ;IACtC,yBAAyB;IACzB,SAAgB,MAAM,EAAE,OAAO,CAAC;IAChC,yBAAyB;IACzB,SAAgB,OAAO,EAAE,QAAQ,CAAC;IAClC,yBAAyB;IACzB,SAAgB,QAAQ,EAAE,QAAQ,CAAC;IACnC;;OAEG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,mDAAmD;gBAChC,IAAI,EAAE,WAAW;IASpC,yBAAyB;IACzB,IAAoB,MAAM,YAEzB;IAED,yBAAyB;IACT,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAW/C,yBAAyB;IACT,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;CAUrD;AAED;;;GAGG;AACH,qBAAa,UAAW,SAAQ,QAAQ;IACtC;;OAEG;IACH,SAAgB,QAAQ,EAAE,OAAO,CAAC;IAClC;;OAEG;IACH,SAAgB,KAAK,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,SAAgB,KAAK,EAAE,KAAK,CAAC;IAE7B,mDAAmD;gBAChC,IAAI,EAAE,WAAW;IAOpC,yBAAyB;IAClB,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAStC,yBAAyB;IAClB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAS3C,yBAAyB;IACzB,IAAW,MAAM,YAA4D;IAC7E,yBAAyB;IACzB,IAAW,OAAO,aAAuD;IACzE,yBAAyB;IACzB,IAAW,QAAQ,aAAiF;CACrG"}
@@ -9,8 +9,10 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.ViewPose2d = exports.ViewPose3d = exports.ViewPose = void 0;
11
11
  const core_geometry_1 = require("@itwin/core-geometry");
12
- /** The "pose" for a view. This is either the volume or area, depending on whether the view is 3d or 2d,
13
- * plus the camera position/angle, if it is enabled.
12
+ const ViewState_1 = require("./ViewState");
13
+ /** The "pose" for a [View]($docs/learning/frontend/views#viewstate-parameters) describing the viewed area or volume, depending upon whether
14
+ * the view is 2d or 3d.
15
+ * @see [[ViewState.savePose]] to extract a pose from a view and [[ViewState.applyPose]] to apply a pose to a view.
14
16
  * @note a ViewPose is immutable.
15
17
  * @public
16
18
  * @extensions
@@ -19,16 +21,23 @@ class ViewPose {
19
21
  constructor(cameraOn) {
20
22
  this.cameraOn = cameraOn;
21
23
  }
24
+ /** Computes the center of the viewed volume. */
22
25
  get center() {
23
26
  const delta = this.rotation.multiplyTransposeVector(this.extents);
24
27
  return this.origin.plusScaled(delta, 0.5);
25
28
  }
29
+ /** Returns the target point of the view. This is the same as [[center]] unless [[cameraOn]] is `true`. */
26
30
  get target() { return this.center; }
31
+ /** Computes the Z vector of the [[rotation]] matrix. */
27
32
  get zVec() { return this.rotation.getRow(2); }
28
33
  }
29
34
  exports.ViewPose = ViewPose;
30
- /** @internal */
35
+ /** The "pose" for a [[ViewState3d]], including information about the view's [Camera]($common) if it is enabled.
36
+ * @public
37
+ * @extensions
38
+ */
31
39
  class ViewPose3d extends ViewPose {
40
+ /** Construct a pose from the specified 3d view. */
32
41
  constructor(view) {
33
42
  super(view.isCameraOn);
34
43
  this.origin = view.origin.clone();
@@ -36,17 +45,24 @@ class ViewPose3d extends ViewPose {
36
45
  this.rotation = view.rotation.clone();
37
46
  this.camera = view.camera.clone();
38
47
  }
48
+ /** @internal override */
39
49
  get target() {
40
50
  return this.cameraOn ? this.camera.eye.plusScaled(this.rotation.getRow(2), -1.0 * this.camera.focusDist) : this.center;
41
51
  }
52
+ /** @internal override */
42
53
  equal(other) {
54
+ if (!(other instanceof ViewPose3d))
55
+ return false;
43
56
  return this.cameraOn === other.cameraOn &&
44
57
  this.origin.isAlmostEqual(other.origin) &&
45
58
  this.extents.isAlmostEqual(other.extents) &&
46
59
  this.rotation.isAlmostEqual(other.rotation) &&
47
60
  (!this.cameraOn || this.camera.equals(other.camera));
48
61
  }
62
+ /** @internal override */
49
63
  equalState(view) {
64
+ if (!(view instanceof ViewState_1.ViewState3d))
65
+ return false;
50
66
  return this.cameraOn === view.isCameraOn &&
51
67
  this.origin.isAlmostEqual(view.origin) &&
52
68
  this.extents.isAlmostEqual(view.extents) &&
@@ -55,26 +71,39 @@ class ViewPose3d extends ViewPose {
55
71
  }
56
72
  }
57
73
  exports.ViewPose3d = ViewPose3d;
58
- /** @internal */
74
+ /** The "pose" for a [[ViewState2d]].
75
+ * @public
76
+ * @extensions
77
+ */
59
78
  class ViewPose2d extends ViewPose {
79
+ /** Construct a pose from the specified 2d view. */
60
80
  constructor(view) {
61
81
  super(false);
62
- this.origin2 = view.origin.clone();
82
+ this.origin2d = view.origin.clone();
63
83
  this.delta = view.delta.clone();
64
84
  this.angle = view.angle.clone();
65
85
  }
86
+ /** @internal override */
66
87
  equal(other) {
67
- return this.origin2.isAlmostEqual(other.origin) &&
88
+ if (!(other instanceof ViewPose2d))
89
+ return false;
90
+ return this.origin2d.isAlmostEqual(other.origin) &&
68
91
  this.delta.isAlmostEqual(other.delta) &&
69
92
  this.angle.isAlmostEqualNoPeriodShift(other.angle);
70
93
  }
94
+ /** @internal override */
71
95
  equalState(view) {
72
- return this.origin2.isAlmostEqual(view.origin) &&
96
+ if (!(view instanceof ViewState_1.ViewState2d))
97
+ return false;
98
+ return this.origin2d.isAlmostEqual(view.origin) &&
73
99
  this.delta.isAlmostEqual(view.delta) &&
74
100
  this.angle.isAlmostEqualNoPeriodShift(view.angle);
75
101
  }
76
- get origin() { return new core_geometry_1.Point3d(this.origin2.x, this.origin2.y); }
102
+ /** @internal override */
103
+ get origin() { return new core_geometry_1.Point3d(this.origin2d.x, this.origin2d.y); }
104
+ /** @internal override */
77
105
  get extents() { return new core_geometry_1.Vector3d(this.delta.x, this.delta.y); }
106
+ /** @internal override */
78
107
  get rotation() { return core_geometry_1.Matrix3d.createRotationAroundVector(core_geometry_1.Vector3d.unitZ(), this.angle); }
79
108
  }
80
109
  exports.ViewPose2d = ViewPose2d;
@@ -1 +1 @@
1
- {"version":3,"file":"ViewPose.js","sourceRoot":"","sources":["../../src/ViewPose.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\nimport { BeTimePoint } from \"@itwin/core-bentley\";\r\nimport { Angle, Matrix3d, Point2d, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Camera } from \"@itwin/core-common\";\r\nimport { ViewState, ViewState2d, ViewState3d } from \"./ViewState\";\r\n\r\n/** The \"pose\" for a view. This is either the volume or area, depending on whether the view is 3d or 2d,\r\n * plus the camera position/angle, if it is enabled.\r\n * @note a ViewPose is immutable.\r\n * @public\r\n * @extensions\r\n */\r\nexport abstract class ViewPose {\r\n public undoTime?: BeTimePoint; // the time this pose was created, if it is saved in the view undo stack.\r\n public abstract equalState(view: ViewState): boolean;\r\n public abstract equal(other: ViewPose): boolean;\r\n public abstract origin: Point3d;\r\n public abstract extents: Vector3d;\r\n public abstract rotation: Matrix3d;\r\n\r\n public get center() {\r\n const delta = this.rotation.multiplyTransposeVector(this.extents);\r\n return this.origin.plusScaled(delta, 0.5);\r\n }\r\n\r\n public get target() { return this.center; }\r\n public get zVec() { return this.rotation.getRow(2); }\r\n public constructor(public cameraOn: boolean) { }\r\n}\r\n\r\n/** @internal */\r\nexport class ViewPose3d extends ViewPose {\r\n public readonly origin: Point3d;\r\n public readonly extents: Vector3d;\r\n public readonly rotation: Matrix3d;\r\n public readonly camera: Camera;\r\n\r\n public constructor(view: ViewState3d) {\r\n super(view.isCameraOn);\r\n this.origin = view.origin.clone();\r\n this.extents = view.extents.clone();\r\n this.rotation = view.rotation.clone();\r\n this.camera = view.camera.clone();\r\n }\r\n\r\n public override get target() {\r\n return this.cameraOn ? this.camera.eye.plusScaled(this.rotation.getRow(2), -1.0 * this.camera.focusDist) : this.center;\r\n }\r\n\r\n public equal(other: ViewPose3d) {\r\n return this.cameraOn === other.cameraOn &&\r\n this.origin.isAlmostEqual(other.origin) &&\r\n this.extents.isAlmostEqual(other.extents) &&\r\n this.rotation.isAlmostEqual(other.rotation) &&\r\n (!this.cameraOn || this.camera.equals(other.camera));\r\n }\r\n\r\n public equalState(view: ViewState3d): boolean {\r\n return this.cameraOn === view.isCameraOn &&\r\n this.origin.isAlmostEqual(view.origin) &&\r\n this.extents.isAlmostEqual(view.extents) &&\r\n this.rotation.isAlmostEqual(view.rotation) &&\r\n (!this.cameraOn || this.camera.equals(view.camera));\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class ViewPose2d extends ViewPose {\r\n public readonly origin2: Point2d;\r\n public readonly delta: Point2d;\r\n public readonly angle: Angle;\r\n\r\n public constructor(view: ViewState2d) {\r\n super(false);\r\n this.origin2 = view.origin.clone();\r\n this.delta = view.delta.clone();\r\n this.angle = view.angle.clone();\r\n }\r\n\r\n public equal(other: ViewPose2d) {\r\n return this.origin2.isAlmostEqual(other.origin) &&\r\n this.delta.isAlmostEqual(other.delta) &&\r\n this.angle.isAlmostEqualNoPeriodShift(other.angle);\r\n }\r\n\r\n public equalState(view: ViewState2d): boolean {\r\n return this.origin2.isAlmostEqual(view.origin) &&\r\n this.delta.isAlmostEqual(view.delta) &&\r\n this.angle.isAlmostEqualNoPeriodShift(view.angle);\r\n }\r\n\r\n public get origin() { return new Point3d(this.origin2.x, this.origin2.y); }\r\n public get extents() { return new Vector3d(this.delta.x, this.delta.y); }\r\n public get rotation() { return Matrix3d.createRotationAroundVector(Vector3d.unitZ(), this.angle)!; }\r\n}\r\n"]}
1
+ {"version":3,"file":"ViewPose.js","sourceRoot":"","sources":["../../src/ViewPose.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Views\r\n */\r\n\r\nimport { BeTimePoint } from \"@itwin/core-bentley\";\r\nimport { Angle, Matrix3d, Point2d, Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Camera } from \"@itwin/core-common\";\r\nimport { ViewState, ViewState2d, ViewState3d } from \"./ViewState\";\r\n\r\n/** The \"pose\" for a [View]($docs/learning/frontend/views#viewstate-parameters) describing the viewed area or volume, depending upon whether\r\n * the view is 2d or 3d.\r\n * @see [[ViewState.savePose]] to extract a pose from a view and [[ViewState.applyPose]] to apply a pose to a view.\r\n * @note a ViewPose is immutable.\r\n * @public\r\n * @extensions\r\n */\r\nexport abstract class ViewPose {\r\n /** The time at which this pose was created, if it was saved into a [[Viewport]]'s undo stack. */\r\n public undoTime?: BeTimePoint;\r\n /** Returns true if this pose is equivalent to the pose represented by the specified [[ViewState]].\r\n * This implies that `this.equal(view.savePose())`.\r\n */\r\n public abstract equalState(view: ViewState): boolean;\r\n /** Returns true if this pose is equivalent to the specified other pose. */\r\n public abstract equal(other: ViewPose): boolean;\r\n /** The origin of the view in [[CoordSystem.World]] coordinates.\r\n * @see [[ViewState.getOrigin]].\r\n */\r\n public abstract origin: Point3d;\r\n /** The extents of the view in [[CoordSystem.World]] coordinates.\r\n * @see [[ViewState.getExtents]].\r\n */\r\n public abstract extents: Vector3d;\r\n /** The 3x3 ortho-normal rotation matrix of the view.\r\n * @see [[ViewState.getRotation]].\r\n */\r\n public abstract rotation: Matrix3d;\r\n /** True if the camera is enabled.\r\n * @see [[ViewPose3d.camera]] to access the camera.\r\n */\r\n public cameraOn: boolean;\r\n\r\n /** Computes the center of the viewed volume. */\r\n public get center(): Point3d {\r\n const delta = this.rotation.multiplyTransposeVector(this.extents);\r\n return this.origin.plusScaled(delta, 0.5);\r\n }\r\n\r\n /** Returns the target point of the view. This is the same as [[center]] unless [[cameraOn]] is `true`. */\r\n public get target() { return this.center; }\r\n\r\n /** Computes the Z vector of the [[rotation]] matrix. */\r\n public get zVec() { return this.rotation.getRow(2); }\r\n\r\n public constructor(cameraOn: boolean) {\r\n this.cameraOn = cameraOn;\r\n }\r\n}\r\n\r\n/** The \"pose\" for a [[ViewState3d]], including information about the view's [Camera]($common) if it is enabled.\r\n * @public\r\n * @extensions\r\n */\r\nexport class ViewPose3d extends ViewPose {\r\n /** @internal override */\r\n public readonly origin: Point3d;\r\n /** @internal override */\r\n public readonly extents: Vector3d;\r\n /** @internal override */\r\n public readonly rotation: Matrix3d;\r\n /** The camera parameters of the view.\r\n * @note This object is meaningful only if [[ViewPose.cameraOn]] is `true`.\r\n */\r\n public readonly camera: Camera;\r\n\r\n /** Construct a pose from the specified 3d view. */\r\n public constructor(view: ViewState3d) {\r\n super(view.isCameraOn);\r\n\r\n this.origin = view.origin.clone();\r\n this.extents = view.extents.clone();\r\n this.rotation = view.rotation.clone();\r\n this.camera = view.camera.clone();\r\n }\r\n\r\n /** @internal override */\r\n public override get target() {\r\n return this.cameraOn ? this.camera.eye.plusScaled(this.rotation.getRow(2), -1.0 * this.camera.focusDist) : this.center;\r\n }\r\n\r\n /** @internal override */\r\n public override equal(other: ViewPose): boolean {\r\n if (!(other instanceof ViewPose3d))\r\n return false;\r\n\r\n return this.cameraOn === other.cameraOn &&\r\n this.origin.isAlmostEqual(other.origin) &&\r\n this.extents.isAlmostEqual(other.extents) &&\r\n this.rotation.isAlmostEqual(other.rotation) &&\r\n (!this.cameraOn || this.camera.equals(other.camera));\r\n }\r\n\r\n /** @internal override */\r\n public override equalState(view: ViewState): boolean {\r\n if (!(view instanceof ViewState3d))\r\n return false;\r\n\r\n return this.cameraOn === view.isCameraOn &&\r\n this.origin.isAlmostEqual(view.origin) &&\r\n this.extents.isAlmostEqual(view.extents) &&\r\n this.rotation.isAlmostEqual(view.rotation) &&\r\n (!this.cameraOn || this.camera.equals(view.camera));\r\n }\r\n}\r\n\r\n/** The \"pose\" for a [[ViewState2d]].\r\n * @public\r\n * @extensions\r\n */\r\nexport class ViewPose2d extends ViewPose {\r\n /** The 2d origin of the view.\r\n * @see [[ViewState2d.origin]].\r\n */\r\n public readonly origin2d: Point2d;\r\n /** The 2d extents of the view.\r\n * @see [[ViewState2d.delta]].\r\n */\r\n public readonly delta: Point2d;\r\n /** The rotation of the view.\r\n * @see [[ViewState2d.angle]].\r\n */\r\n public readonly angle: Angle;\r\n\r\n /** Construct a pose from the specified 2d view. */\r\n public constructor(view: ViewState2d) {\r\n super(false);\r\n this.origin2d = view.origin.clone();\r\n this.delta = view.delta.clone();\r\n this.angle = view.angle.clone();\r\n }\r\n\r\n /** @internal override */\r\n public equal(other: ViewPose): boolean {\r\n if (!(other instanceof ViewPose2d))\r\n return false;\r\n\r\n return this.origin2d.isAlmostEqual(other.origin) &&\r\n this.delta.isAlmostEqual(other.delta) &&\r\n this.angle.isAlmostEqualNoPeriodShift(other.angle);\r\n }\r\n\r\n /** @internal override */\r\n public equalState(view: ViewState): boolean {\r\n if (!(view instanceof ViewState2d))\r\n return false;\r\n\r\n return this.origin2d.isAlmostEqual(view.origin) &&\r\n this.delta.isAlmostEqual(view.delta) &&\r\n this.angle.isAlmostEqualNoPeriodShift(view.angle);\r\n }\r\n\r\n /** @internal override */\r\n public get origin() { return new Point3d(this.origin2d.x, this.origin2d.y); }\r\n /** @internal override */\r\n public get extents() { return new Vector3d(this.delta.x, this.delta.y); }\r\n /** @internal override */\r\n public get rotation() { return Matrix3d.createRotationAroundVector(Vector3d.unitZ(), this.angle)!; }\r\n}\r\n"]}