@itwin/core-frontend 5.1.0-dev.7 → 5.1.0-dev.71

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 (735) hide show
  1. package/CHANGELOG.md +92 -1
  2. package/lib/cjs/AccuDraw.d.ts +2 -0
  3. package/lib/cjs/AccuDraw.d.ts.map +1 -1
  4. package/lib/cjs/AccuDraw.js +4 -2
  5. package/lib/cjs/AccuDraw.js.map +1 -1
  6. package/lib/cjs/AccuSnap.d.ts.map +1 -1
  7. package/lib/cjs/AccuSnap.js +15 -6
  8. package/lib/cjs/AccuSnap.js.map +1 -1
  9. package/lib/cjs/AuxCoordSys.js +1 -1
  10. package/lib/cjs/AuxCoordSys.js.map +1 -1
  11. package/lib/cjs/DisplayStyleState.d.ts +37 -0
  12. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  13. package/lib/cjs/DisplayStyleState.js +65 -0
  14. package/lib/cjs/DisplayStyleState.js.map +1 -1
  15. package/lib/cjs/DrawingViewState.d.ts.map +1 -1
  16. package/lib/cjs/DrawingViewState.js +1 -0
  17. package/lib/cjs/DrawingViewState.js.map +1 -1
  18. package/lib/cjs/GraphicalEditingScope.d.ts +1 -1
  19. package/lib/cjs/GraphicalEditingScope.d.ts.map +1 -1
  20. package/lib/cjs/GraphicalEditingScope.js +1 -1
  21. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  22. package/lib/cjs/HitDetail.d.ts +1 -1
  23. package/lib/cjs/HitDetail.d.ts.map +1 -1
  24. package/lib/cjs/HitDetail.js.map +1 -1
  25. package/lib/cjs/IModelApp.d.ts +19 -4
  26. package/lib/cjs/IModelApp.d.ts.map +1 -1
  27. package/lib/cjs/IModelApp.js +21 -2
  28. package/lib/cjs/IModelApp.js.map +1 -1
  29. package/lib/cjs/IModelConnection.d.ts +8 -9
  30. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  31. package/lib/cjs/IModelConnection.js +52 -24
  32. package/lib/cjs/IModelConnection.js.map +1 -1
  33. package/lib/cjs/IpcApp.d.ts +2 -1
  34. package/lib/cjs/IpcApp.d.ts.map +1 -1
  35. package/lib/cjs/IpcApp.js +4 -2
  36. package/lib/cjs/IpcApp.js.map +1 -1
  37. package/lib/cjs/RealityDataSource.d.ts +65 -3
  38. package/lib/cjs/RealityDataSource.d.ts.map +1 -1
  39. package/lib/cjs/RealityDataSource.js +79 -3
  40. package/lib/cjs/RealityDataSource.js.map +1 -1
  41. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +1 -1
  42. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  43. package/lib/cjs/SelectionSet.d.ts +7 -7
  44. package/lib/cjs/SelectionSet.js +3 -3
  45. package/lib/cjs/SelectionSet.js.map +1 -1
  46. package/lib/cjs/SheetViewState.d.ts +2 -0
  47. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  48. package/lib/cjs/SheetViewState.js +25 -3
  49. package/lib/cjs/SheetViewState.js.map +1 -1
  50. package/lib/cjs/ViewState.d.ts +1 -1
  51. package/lib/cjs/ViewState.js +1 -1
  52. package/lib/cjs/ViewState.js.map +1 -1
  53. package/lib/cjs/Viewport.d.ts +6 -4
  54. package/lib/cjs/Viewport.d.ts.map +1 -1
  55. package/lib/cjs/Viewport.js +23 -3
  56. package/lib/cjs/Viewport.js.map +1 -1
  57. package/lib/cjs/common/gltf/GltfSchema.d.ts +18 -0
  58. package/lib/cjs/common/gltf/GltfSchema.d.ts.map +1 -1
  59. package/lib/cjs/common/gltf/GltfSchema.js +1 -0
  60. package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
  61. package/lib/cjs/common/imdl/CompactEdges.d.ts +11 -0
  62. package/lib/cjs/common/imdl/CompactEdges.d.ts.map +1 -1
  63. package/lib/cjs/common/imdl/CompactEdges.js +9 -6
  64. package/lib/cjs/common/imdl/CompactEdges.js.map +1 -1
  65. package/lib/cjs/common/imdl/ImdlSchema.d.ts +5 -1
  66. package/lib/cjs/common/imdl/ImdlSchema.d.ts.map +1 -1
  67. package/lib/cjs/common/imdl/ImdlSchema.js +4 -0
  68. package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
  69. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  70. package/lib/cjs/common/imdl/ParseImdlDocument.js +11 -9
  71. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  72. package/lib/cjs/common/internal/render/EdgeParams.d.ts +7 -2
  73. package/lib/cjs/common/internal/render/EdgeParams.d.ts.map +1 -1
  74. package/lib/cjs/common/internal/render/EdgeParams.js +30 -8
  75. package/lib/cjs/common/internal/render/EdgeParams.js.map +1 -1
  76. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts +2 -1
  77. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts.map +1 -1
  78. package/lib/cjs/common/internal/render/MeshPrimitives.js +5 -7
  79. package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -1
  80. package/lib/cjs/common/internal/render/PolylineParams.d.ts +8 -3
  81. package/lib/cjs/common/internal/render/PolylineParams.d.ts.map +1 -1
  82. package/lib/cjs/common/internal/render/PolylineParams.js +6 -9
  83. package/lib/cjs/common/internal/render/PolylineParams.js.map +1 -1
  84. package/lib/cjs/common/internal/render/VertexTableSplitter.d.ts.map +1 -1
  85. package/lib/cjs/common/internal/render/VertexTableSplitter.js +9 -7
  86. package/lib/cjs/common/internal/render/VertexTableSplitter.js.map +1 -1
  87. package/lib/cjs/core-frontend.d.ts +2 -2
  88. package/lib/cjs/core-frontend.d.ts.map +1 -1
  89. package/lib/cjs/core-frontend.js +1 -1
  90. package/lib/cjs/core-frontend.js.map +1 -1
  91. package/lib/cjs/extension/ExtensionRuntime.js +15 -2
  92. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  93. package/lib/cjs/extension/providers/ExtensionLoadScript.js.map +1 -1
  94. package/lib/cjs/internal/GoogleMapsDecorator.d.ts +53 -0
  95. package/lib/cjs/internal/GoogleMapsDecorator.d.ts.map +1 -0
  96. package/lib/cjs/internal/GoogleMapsDecorator.js +132 -0
  97. package/lib/cjs/internal/GoogleMapsDecorator.js.map +1 -0
  98. package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.d.ts +83 -0
  99. package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.d.ts.map +1 -0
  100. package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.js +201 -0
  101. package/lib/cjs/internal/RealityDataSourceGoogle3dTilesImpl.js.map +1 -0
  102. package/lib/cjs/internal/ScriptUtils.d.ts +5 -0
  103. package/lib/cjs/internal/ScriptUtils.d.ts.map +1 -0
  104. package/lib/cjs/internal/ScriptUtils.js +120 -0
  105. package/lib/cjs/internal/ScriptUtils.js.map +1 -0
  106. package/lib/cjs/internal/cross-package.d.ts +1 -0
  107. package/lib/cjs/internal/cross-package.d.ts.map +1 -1
  108. package/lib/cjs/internal/cross-package.js +4 -1
  109. package/lib/cjs/internal/cross-package.js.map +1 -1
  110. package/lib/cjs/internal/render/webgl/AtmosphereUniforms.d.ts +1 -1
  111. package/lib/cjs/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
  112. package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js +1 -1
  113. package/lib/cjs/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
  114. package/lib/cjs/internal/render/webgl/AttributeBuffers.d.ts +2 -2
  115. package/lib/cjs/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
  116. package/lib/cjs/internal/render/webgl/AttributeBuffers.js +2 -2
  117. package/lib/cjs/internal/render/webgl/AttributeBuffers.js.map +1 -1
  118. package/lib/cjs/internal/render/webgl/BatchUniforms.js +1 -1
  119. package/lib/cjs/internal/render/webgl/BatchUniforms.js.map +1 -1
  120. package/lib/cjs/internal/render/webgl/BranchStack.d.ts +2 -2
  121. package/lib/cjs/internal/render/webgl/BranchStack.d.ts.map +1 -1
  122. package/lib/cjs/internal/render/webgl/BranchStack.js +3 -2
  123. package/lib/cjs/internal/render/webgl/BranchStack.js.map +1 -1
  124. package/lib/cjs/internal/render/webgl/BranchState.d.ts +4 -2
  125. package/lib/cjs/internal/render/webgl/BranchState.d.ts.map +1 -1
  126. package/lib/cjs/internal/render/webgl/BranchState.js +4 -1
  127. package/lib/cjs/internal/render/webgl/BranchState.js.map +1 -1
  128. package/lib/cjs/internal/render/webgl/BranchUniforms.d.ts +2 -2
  129. package/lib/cjs/internal/render/webgl/BranchUniforms.d.ts.map +1 -1
  130. package/lib/cjs/internal/render/webgl/BranchUniforms.js +2 -2
  131. package/lib/cjs/internal/render/webgl/BranchUniforms.js.map +1 -1
  132. package/lib/cjs/internal/render/webgl/ClippingProgram.d.ts +1 -1
  133. package/lib/cjs/internal/render/webgl/ClippingProgram.d.ts.map +1 -1
  134. package/lib/cjs/internal/render/webgl/ClippingProgram.js +1 -1
  135. package/lib/cjs/internal/render/webgl/ClippingProgram.js.map +1 -1
  136. package/lib/cjs/internal/render/webgl/ContourUniforms.d.ts.map +1 -1
  137. package/lib/cjs/internal/render/webgl/ContourUniforms.js +2 -3
  138. package/lib/cjs/internal/render/webgl/ContourUniforms.js.map +1 -1
  139. package/lib/cjs/internal/render/webgl/Contours.js +8 -8
  140. package/lib/cjs/internal/render/webgl/Contours.js.map +1 -1
  141. package/lib/cjs/internal/render/webgl/EdgeGeometry.d.ts +8 -6
  142. package/lib/cjs/internal/render/webgl/EdgeGeometry.d.ts.map +1 -1
  143. package/lib/cjs/internal/render/webgl/EdgeGeometry.js +21 -7
  144. package/lib/cjs/internal/render/webgl/EdgeGeometry.js.map +1 -1
  145. package/lib/cjs/internal/render/webgl/Graphic.d.ts +2 -1
  146. package/lib/cjs/internal/render/webgl/Graphic.d.ts.map +1 -1
  147. package/lib/cjs/internal/render/webgl/Graphic.js +2 -0
  148. package/lib/cjs/internal/render/webgl/Graphic.js.map +1 -1
  149. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.d.ts +6 -1
  150. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
  151. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.js +19 -4
  152. package/lib/cjs/internal/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  153. package/lib/cjs/internal/render/webgl/Mesh.d.ts +1 -1
  154. package/lib/cjs/internal/render/webgl/Mesh.d.ts.map +1 -1
  155. package/lib/cjs/internal/render/webgl/Mesh.js +13 -6
  156. package/lib/cjs/internal/render/webgl/Mesh.js.map +1 -1
  157. package/lib/cjs/internal/render/webgl/SceneCompositor.js +2 -1
  158. package/lib/cjs/internal/render/webgl/SceneCompositor.js.map +1 -1
  159. package/lib/cjs/internal/render/webgl/ShaderProgram.d.ts +2 -2
  160. package/lib/cjs/internal/render/webgl/ShaderProgram.d.ts.map +1 -1
  161. package/lib/cjs/internal/render/webgl/ShaderProgram.js +2 -2
  162. package/lib/cjs/internal/render/webgl/ShaderProgram.js.map +1 -1
  163. package/lib/cjs/internal/render/webgl/Target.d.ts +2 -1
  164. package/lib/cjs/internal/render/webgl/Target.d.ts.map +1 -1
  165. package/lib/cjs/internal/render/webgl/Target.js +3 -1
  166. package/lib/cjs/internal/render/webgl/Target.js.map +1 -1
  167. package/lib/cjs/internal/render/webgl/Technique.d.ts +3 -3
  168. package/lib/cjs/internal/render/webgl/Technique.d.ts.map +1 -1
  169. package/lib/cjs/internal/render/webgl/Technique.js +3 -3
  170. package/lib/cjs/internal/render/webgl/Technique.js.map +1 -1
  171. package/lib/cjs/internal/tile/ClassifierTileTree.js +3 -1
  172. package/lib/cjs/internal/tile/ClassifierTileTree.js.map +1 -1
  173. package/lib/cjs/internal/tile/IModelTile.d.ts +1 -0
  174. package/lib/cjs/internal/tile/IModelTile.d.ts.map +1 -1
  175. package/lib/cjs/internal/tile/IModelTile.js +4 -0
  176. package/lib/cjs/internal/tile/IModelTile.js.map +1 -1
  177. package/lib/cjs/internal/tile/IModelTileTree.d.ts +4 -2
  178. package/lib/cjs/internal/tile/IModelTileTree.d.ts.map +1 -1
  179. package/lib/cjs/internal/tile/IModelTileTree.js +58 -0
  180. package/lib/cjs/internal/tile/IModelTileTree.js.map +1 -1
  181. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
  182. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js +8 -0
  183. package/lib/cjs/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
  184. package/lib/cjs/internal/tile/OrbitGtTileTree.d.ts +4 -1
  185. package/lib/cjs/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
  186. package/lib/cjs/internal/tile/OrbitGtTileTree.js +4 -0
  187. package/lib/cjs/internal/tile/OrbitGtTileTree.js.map +1 -1
  188. package/lib/cjs/internal/tile/PrimaryTileTree.d.ts.map +1 -1
  189. package/lib/cjs/internal/tile/PrimaryTileTree.js +5 -4
  190. package/lib/cjs/internal/tile/PrimaryTileTree.js.map +1 -1
  191. package/lib/cjs/internal/tile/RealityModelTileTree.d.ts +26 -7
  192. package/lib/cjs/internal/tile/RealityModelTileTree.d.ts.map +1 -1
  193. package/lib/cjs/internal/tile/RealityModelTileTree.js +48 -21
  194. package/lib/cjs/internal/tile/RealityModelTileTree.js.map +1 -1
  195. package/lib/cjs/internal/tile/RealityTileLoader.d.ts +2 -2
  196. package/lib/cjs/internal/tile/RealityTileLoader.d.ts.map +1 -1
  197. package/lib/cjs/internal/tile/RealityTileLoader.js +10 -2
  198. package/lib/cjs/internal/tile/RealityTileLoader.js.map +1 -1
  199. package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +1 -1
  200. package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  201. package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
  202. package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  203. package/lib/cjs/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +1 -1
  204. package/lib/cjs/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
  205. package/lib/cjs/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js +1 -1
  206. package/lib/cjs/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  207. package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.d.ts +1 -1
  208. package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  209. package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
  210. package/lib/cjs/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  211. package/lib/cjs/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +1 -1
  212. package/lib/cjs/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  213. package/lib/cjs/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +1 -1
  214. package/lib/cjs/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  215. package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +4 -0
  216. package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  217. package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +52 -11
  218. package/lib/cjs/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  219. package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts +7 -0
  220. package/lib/cjs/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
  221. package/lib/cjs/internal/tile/map/WmtsCapabilities.js +17 -0
  222. package/lib/cjs/internal/tile/map/WmtsCapabilities.js.map +1 -1
  223. package/lib/cjs/internal/webgl.d.ts +1 -1
  224. package/lib/cjs/internal/webgl.d.ts.map +1 -1
  225. package/lib/cjs/internal/webgl.js.map +1 -1
  226. package/lib/cjs/properties/AngleDescription.d.ts +4 -1
  227. package/lib/cjs/properties/AngleDescription.d.ts.map +1 -1
  228. package/lib/cjs/properties/AngleDescription.js +10 -2
  229. package/lib/cjs/properties/AngleDescription.js.map +1 -1
  230. package/lib/cjs/properties/FormattedQuantityDescription.d.ts +11 -1
  231. package/lib/cjs/properties/FormattedQuantityDescription.d.ts.map +1 -1
  232. package/lib/cjs/properties/FormattedQuantityDescription.js +7 -2
  233. package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
  234. package/lib/cjs/properties/LengthDescription.d.ts +12 -3
  235. package/lib/cjs/properties/LengthDescription.d.ts.map +1 -1
  236. package/lib/cjs/properties/LengthDescription.js +30 -6
  237. package/lib/cjs/properties/LengthDescription.js.map +1 -1
  238. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +103 -7
  239. package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  240. package/lib/cjs/quantity-formatting/QuantityFormatter.js +210 -23
  241. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  242. package/lib/cjs/render/Decorations.d.ts +1 -1
  243. package/lib/cjs/render/Decorations.d.ts.map +1 -1
  244. package/lib/cjs/render/Decorations.js +1 -1
  245. package/lib/cjs/render/Decorations.js.map +1 -1
  246. package/lib/cjs/render/GraphicBranch.d.ts +4 -2
  247. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  248. package/lib/cjs/render/GraphicBranch.js +1 -1
  249. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  250. package/lib/cjs/render/MeshArgs.d.ts +8 -3
  251. package/lib/cjs/render/MeshArgs.d.ts.map +1 -1
  252. package/lib/cjs/render/MeshArgs.js.map +1 -1
  253. package/lib/cjs/render/RenderGraphic.d.ts +1 -1
  254. package/lib/cjs/render/RenderGraphic.d.ts.map +1 -1
  255. package/lib/cjs/render/RenderGraphic.js.map +1 -1
  256. package/lib/cjs/render/RenderSystem.d.ts +2 -2
  257. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  258. package/lib/cjs/render/RenderSystem.js.map +1 -1
  259. package/lib/cjs/render/ScreenSpaceEffectBuilder.d.ts +1 -1
  260. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  261. package/lib/cjs/request/Request.d.ts +2 -2
  262. package/lib/cjs/request/Request.js.map +1 -1
  263. package/lib/cjs/tile/GltfReader.d.ts +6 -2
  264. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  265. package/lib/cjs/tile/GltfReader.js +154 -18
  266. package/lib/cjs/tile/GltfReader.js.map +1 -1
  267. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  268. package/lib/cjs/tile/RealityTile.d.ts +9 -0
  269. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  270. package/lib/cjs/tile/RealityTile.js +12 -0
  271. package/lib/cjs/tile/RealityTile.js.map +1 -1
  272. package/lib/cjs/tile/RealityTileTree.d.ts +4 -0
  273. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  274. package/lib/cjs/tile/RealityTileTree.js +4 -0
  275. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  276. package/lib/cjs/tile/Tile.d.ts +1 -1
  277. package/lib/cjs/tile/Tile.d.ts.map +1 -1
  278. package/lib/cjs/tile/Tile.js +1 -1
  279. package/lib/cjs/tile/Tile.js.map +1 -1
  280. package/lib/cjs/tile/TileAdmin.d.ts +10 -0
  281. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  282. package/lib/cjs/tile/TileAdmin.js +3 -0
  283. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  284. package/lib/cjs/tile/TileGeometryCollector.d.ts +5 -0
  285. package/lib/cjs/tile/TileGeometryCollector.d.ts.map +1 -1
  286. package/lib/cjs/tile/TileGeometryCollector.js.map +1 -1
  287. package/lib/cjs/tile/TileTree.d.ts +15 -2
  288. package/lib/cjs/tile/TileTree.d.ts.map +1 -1
  289. package/lib/cjs/tile/TileTree.js +14 -1
  290. package/lib/cjs/tile/TileTree.js.map +1 -1
  291. package/lib/cjs/tile/TileTreeReference.d.ts +17 -3
  292. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  293. package/lib/cjs/tile/TileTreeReference.js +11 -5
  294. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  295. package/lib/cjs/tile/map/CesiumTerrainProvider.js +1 -1
  296. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  297. package/lib/cjs/tile/map/ImageryTileTree.d.ts +2 -2
  298. package/lib/cjs/tile/map/ImageryTileTree.d.ts.map +1 -1
  299. package/lib/cjs/tile/map/ImageryTileTree.js +2 -2
  300. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  301. package/lib/cjs/tile/map/MapCartoRectangle.d.ts +10 -0
  302. package/lib/cjs/tile/map/MapCartoRectangle.d.ts.map +1 -1
  303. package/lib/cjs/tile/map/MapCartoRectangle.js +12 -0
  304. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  305. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +3 -3
  306. package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  307. package/lib/cjs/tile/map/MapLayerImageryProvider.js +9 -5
  308. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  309. package/lib/cjs/tile/map/MapTileTree.d.ts +1 -1
  310. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  311. package/lib/cjs/tile/map/MapTileTree.js +1 -1
  312. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  313. package/lib/cjs/tile/map/QuadId.d.ts +15 -0
  314. package/lib/cjs/tile/map/QuadId.d.ts.map +1 -1
  315. package/lib/cjs/tile/map/QuadId.js +12 -0
  316. package/lib/cjs/tile/map/QuadId.js.map +1 -1
  317. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts +1 -1
  318. package/lib/cjs/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  319. package/lib/cjs/tile/map/TerrainMeshProvider.js +1 -1
  320. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  321. package/lib/cjs/tools/AccuDrawViewportUI.d.ts +7 -0
  322. package/lib/cjs/tools/AccuDrawViewportUI.d.ts.map +1 -1
  323. package/lib/cjs/tools/AccuDrawViewportUI.js +14 -0
  324. package/lib/cjs/tools/AccuDrawViewportUI.js.map +1 -1
  325. package/lib/cjs/tools/ClipViewTool.d.ts.map +1 -1
  326. package/lib/cjs/tools/ClipViewTool.js +18 -7
  327. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  328. package/lib/cjs/tools/ElementSetTool.d.ts +9 -1
  329. package/lib/cjs/tools/ElementSetTool.d.ts.map +1 -1
  330. package/lib/cjs/tools/ElementSetTool.js +130 -7
  331. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  332. package/lib/cjs/tools/IdleTool.d.ts.map +1 -1
  333. package/lib/cjs/tools/IdleTool.js +4 -1
  334. package/lib/cjs/tools/IdleTool.js.map +1 -1
  335. package/lib/cjs/tools/MeasureTool.d.ts +9 -0
  336. package/lib/cjs/tools/MeasureTool.d.ts.map +1 -1
  337. package/lib/cjs/tools/MeasureTool.js +57 -24
  338. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  339. package/lib/cjs/tools/PrimitiveTool.d.ts +1 -1
  340. package/lib/cjs/tools/PrimitiveTool.d.ts.map +1 -1
  341. package/lib/cjs/tools/PrimitiveTool.js +4 -3
  342. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  343. package/lib/cjs/tools/SelectTool.d.ts +2 -2
  344. package/lib/cjs/tools/SelectTool.d.ts.map +1 -1
  345. package/lib/cjs/tools/SelectTool.js +26 -97
  346. package/lib/cjs/tools/SelectTool.js.map +1 -1
  347. package/lib/cjs/tools/Tool.d.ts +10 -1
  348. package/lib/cjs/tools/Tool.d.ts.map +1 -1
  349. package/lib/cjs/tools/Tool.js +27 -4
  350. package/lib/cjs/tools/Tool.js.map +1 -1
  351. package/lib/cjs/tools/ToolAdmin.d.ts +1 -0
  352. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  353. package/lib/cjs/tools/ToolAdmin.js +59 -18
  354. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  355. package/lib/cjs/tools/ToolAssistance.d.ts +1 -1
  356. package/lib/cjs/tools/ToolAssistance.js.map +1 -1
  357. package/lib/cjs/tools/ToolSettings.d.ts +5 -0
  358. package/lib/cjs/tools/ToolSettings.d.ts.map +1 -1
  359. package/lib/cjs/tools/ToolSettings.js +5 -0
  360. package/lib/cjs/tools/ToolSettings.js.map +1 -1
  361. package/lib/cjs/tools/ViewTool.d.ts +1 -2
  362. package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
  363. package/lib/cjs/tools/ViewTool.js +143 -84
  364. package/lib/cjs/tools/ViewTool.js.map +1 -1
  365. package/lib/esm/AccuDraw.d.ts +2 -0
  366. package/lib/esm/AccuDraw.d.ts.map +1 -1
  367. package/lib/esm/AccuDraw.js +4 -2
  368. package/lib/esm/AccuDraw.js.map +1 -1
  369. package/lib/esm/AccuSnap.d.ts.map +1 -1
  370. package/lib/esm/AccuSnap.js +15 -6
  371. package/lib/esm/AccuSnap.js.map +1 -1
  372. package/lib/esm/AuxCoordSys.js +1 -1
  373. package/lib/esm/AuxCoordSys.js.map +1 -1
  374. package/lib/esm/DisplayStyleState.d.ts +37 -0
  375. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  376. package/lib/esm/DisplayStyleState.js +65 -0
  377. package/lib/esm/DisplayStyleState.js.map +1 -1
  378. package/lib/esm/DrawingViewState.d.ts.map +1 -1
  379. package/lib/esm/DrawingViewState.js +1 -0
  380. package/lib/esm/DrawingViewState.js.map +1 -1
  381. package/lib/esm/GraphicalEditingScope.d.ts +1 -1
  382. package/lib/esm/GraphicalEditingScope.d.ts.map +1 -1
  383. package/lib/esm/GraphicalEditingScope.js +1 -1
  384. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  385. package/lib/esm/HitDetail.d.ts +1 -1
  386. package/lib/esm/HitDetail.d.ts.map +1 -1
  387. package/lib/esm/HitDetail.js.map +1 -1
  388. package/lib/esm/IModelApp.d.ts +19 -4
  389. package/lib/esm/IModelApp.d.ts.map +1 -1
  390. package/lib/esm/IModelApp.js +22 -3
  391. package/lib/esm/IModelApp.js.map +1 -1
  392. package/lib/esm/IModelConnection.d.ts +8 -9
  393. package/lib/esm/IModelConnection.d.ts.map +1 -1
  394. package/lib/esm/IModelConnection.js +53 -25
  395. package/lib/esm/IModelConnection.js.map +1 -1
  396. package/lib/esm/IpcApp.d.ts +2 -1
  397. package/lib/esm/IpcApp.d.ts.map +1 -1
  398. package/lib/esm/IpcApp.js +4 -2
  399. package/lib/esm/IpcApp.js.map +1 -1
  400. package/lib/esm/RealityDataSource.d.ts +65 -3
  401. package/lib/esm/RealityDataSource.d.ts.map +1 -1
  402. package/lib/esm/RealityDataSource.js +77 -3
  403. package/lib/esm/RealityDataSource.js.map +1 -1
  404. package/lib/esm/RealityDataSourceTilesetUrlImpl.js +1 -1
  405. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  406. package/lib/esm/SelectionSet.d.ts +7 -7
  407. package/lib/esm/SelectionSet.js +3 -3
  408. package/lib/esm/SelectionSet.js.map +1 -1
  409. package/lib/esm/SheetViewState.d.ts +2 -0
  410. package/lib/esm/SheetViewState.d.ts.map +1 -1
  411. package/lib/esm/SheetViewState.js +25 -3
  412. package/lib/esm/SheetViewState.js.map +1 -1
  413. package/lib/esm/ViewState.d.ts +1 -1
  414. package/lib/esm/ViewState.js +1 -1
  415. package/lib/esm/ViewState.js.map +1 -1
  416. package/lib/esm/Viewport.d.ts +6 -4
  417. package/lib/esm/Viewport.d.ts.map +1 -1
  418. package/lib/esm/Viewport.js +23 -3
  419. package/lib/esm/Viewport.js.map +1 -1
  420. package/lib/esm/common/gltf/GltfSchema.d.ts +18 -0
  421. package/lib/esm/common/gltf/GltfSchema.d.ts.map +1 -1
  422. package/lib/esm/common/gltf/GltfSchema.js +1 -0
  423. package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
  424. package/lib/esm/common/imdl/CompactEdges.d.ts +11 -0
  425. package/lib/esm/common/imdl/CompactEdges.d.ts.map +1 -1
  426. package/lib/esm/common/imdl/CompactEdges.js +8 -6
  427. package/lib/esm/common/imdl/CompactEdges.js.map +1 -1
  428. package/lib/esm/common/imdl/ImdlSchema.d.ts +5 -1
  429. package/lib/esm/common/imdl/ImdlSchema.d.ts.map +1 -1
  430. package/lib/esm/common/imdl/ImdlSchema.js +4 -0
  431. package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
  432. package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  433. package/lib/esm/common/imdl/ParseImdlDocument.js +11 -9
  434. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  435. package/lib/esm/common/internal/render/EdgeParams.d.ts +7 -2
  436. package/lib/esm/common/internal/render/EdgeParams.d.ts.map +1 -1
  437. package/lib/esm/common/internal/render/EdgeParams.js +31 -9
  438. package/lib/esm/common/internal/render/EdgeParams.js.map +1 -1
  439. package/lib/esm/common/internal/render/MeshPrimitives.d.ts +2 -1
  440. package/lib/esm/common/internal/render/MeshPrimitives.d.ts.map +1 -1
  441. package/lib/esm/common/internal/render/MeshPrimitives.js +5 -7
  442. package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -1
  443. package/lib/esm/common/internal/render/PolylineParams.d.ts +8 -3
  444. package/lib/esm/common/internal/render/PolylineParams.d.ts.map +1 -1
  445. package/lib/esm/common/internal/render/PolylineParams.js +5 -8
  446. package/lib/esm/common/internal/render/PolylineParams.js.map +1 -1
  447. package/lib/esm/common/internal/render/VertexTableSplitter.d.ts.map +1 -1
  448. package/lib/esm/common/internal/render/VertexTableSplitter.js +9 -7
  449. package/lib/esm/common/internal/render/VertexTableSplitter.js.map +1 -1
  450. package/lib/esm/core-frontend.d.ts +2 -2
  451. package/lib/esm/core-frontend.d.ts.map +1 -1
  452. package/lib/esm/core-frontend.js +1 -1
  453. package/lib/esm/core-frontend.js.map +1 -1
  454. package/lib/esm/extension/ExtensionRuntime.js +15 -2
  455. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  456. package/lib/esm/extension/providers/ExtensionLoadScript.js +1 -1
  457. package/lib/esm/extension/providers/ExtensionLoadScript.js.map +1 -1
  458. package/lib/esm/internal/GoogleMapsDecorator.d.ts +53 -0
  459. package/lib/esm/internal/GoogleMapsDecorator.d.ts.map +1 -0
  460. package/lib/esm/internal/GoogleMapsDecorator.js +126 -0
  461. package/lib/esm/internal/GoogleMapsDecorator.js.map +1 -0
  462. package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.d.ts +83 -0
  463. package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.d.ts.map +1 -0
  464. package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.js +197 -0
  465. package/lib/esm/internal/RealityDataSourceGoogle3dTilesImpl.js.map +1 -0
  466. package/lib/esm/internal/ScriptUtils.d.ts +5 -0
  467. package/lib/esm/internal/ScriptUtils.d.ts.map +1 -0
  468. package/lib/esm/internal/ScriptUtils.js +117 -0
  469. package/lib/esm/internal/ScriptUtils.js.map +1 -0
  470. package/lib/esm/internal/cross-package.d.ts +1 -0
  471. package/lib/esm/internal/cross-package.d.ts.map +1 -1
  472. package/lib/esm/internal/cross-package.js +1 -0
  473. package/lib/esm/internal/cross-package.js.map +1 -1
  474. package/lib/esm/internal/render/webgl/AtmosphereUniforms.d.ts +1 -1
  475. package/lib/esm/internal/render/webgl/AtmosphereUniforms.d.ts.map +1 -1
  476. package/lib/esm/internal/render/webgl/AtmosphereUniforms.js +1 -1
  477. package/lib/esm/internal/render/webgl/AtmosphereUniforms.js.map +1 -1
  478. package/lib/esm/internal/render/webgl/AttributeBuffers.d.ts +2 -2
  479. package/lib/esm/internal/render/webgl/AttributeBuffers.d.ts.map +1 -1
  480. package/lib/esm/internal/render/webgl/AttributeBuffers.js +2 -2
  481. package/lib/esm/internal/render/webgl/AttributeBuffers.js.map +1 -1
  482. package/lib/esm/internal/render/webgl/BatchUniforms.js +1 -1
  483. package/lib/esm/internal/render/webgl/BatchUniforms.js.map +1 -1
  484. package/lib/esm/internal/render/webgl/BranchStack.d.ts +2 -2
  485. package/lib/esm/internal/render/webgl/BranchStack.d.ts.map +1 -1
  486. package/lib/esm/internal/render/webgl/BranchStack.js +3 -2
  487. package/lib/esm/internal/render/webgl/BranchStack.js.map +1 -1
  488. package/lib/esm/internal/render/webgl/BranchState.d.ts +4 -2
  489. package/lib/esm/internal/render/webgl/BranchState.d.ts.map +1 -1
  490. package/lib/esm/internal/render/webgl/BranchState.js +4 -1
  491. package/lib/esm/internal/render/webgl/BranchState.js.map +1 -1
  492. package/lib/esm/internal/render/webgl/BranchUniforms.d.ts +2 -2
  493. package/lib/esm/internal/render/webgl/BranchUniforms.d.ts.map +1 -1
  494. package/lib/esm/internal/render/webgl/BranchUniforms.js +2 -2
  495. package/lib/esm/internal/render/webgl/BranchUniforms.js.map +1 -1
  496. package/lib/esm/internal/render/webgl/ClippingProgram.d.ts +1 -1
  497. package/lib/esm/internal/render/webgl/ClippingProgram.d.ts.map +1 -1
  498. package/lib/esm/internal/render/webgl/ClippingProgram.js +1 -1
  499. package/lib/esm/internal/render/webgl/ClippingProgram.js.map +1 -1
  500. package/lib/esm/internal/render/webgl/ContourUniforms.d.ts.map +1 -1
  501. package/lib/esm/internal/render/webgl/ContourUniforms.js +2 -3
  502. package/lib/esm/internal/render/webgl/ContourUniforms.js.map +1 -1
  503. package/lib/esm/internal/render/webgl/Contours.js +8 -8
  504. package/lib/esm/internal/render/webgl/Contours.js.map +1 -1
  505. package/lib/esm/internal/render/webgl/EdgeGeometry.d.ts +8 -6
  506. package/lib/esm/internal/render/webgl/EdgeGeometry.d.ts.map +1 -1
  507. package/lib/esm/internal/render/webgl/EdgeGeometry.js +21 -7
  508. package/lib/esm/internal/render/webgl/EdgeGeometry.js.map +1 -1
  509. package/lib/esm/internal/render/webgl/Graphic.d.ts +2 -1
  510. package/lib/esm/internal/render/webgl/Graphic.d.ts.map +1 -1
  511. package/lib/esm/internal/render/webgl/Graphic.js +2 -0
  512. package/lib/esm/internal/render/webgl/Graphic.js.map +1 -1
  513. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.d.ts +6 -1
  514. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
  515. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.js +19 -4
  516. package/lib/esm/internal/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  517. package/lib/esm/internal/render/webgl/Mesh.d.ts +1 -1
  518. package/lib/esm/internal/render/webgl/Mesh.d.ts.map +1 -1
  519. package/lib/esm/internal/render/webgl/Mesh.js +14 -7
  520. package/lib/esm/internal/render/webgl/Mesh.js.map +1 -1
  521. package/lib/esm/internal/render/webgl/SceneCompositor.js +2 -1
  522. package/lib/esm/internal/render/webgl/SceneCompositor.js.map +1 -1
  523. package/lib/esm/internal/render/webgl/ShaderProgram.d.ts +2 -2
  524. package/lib/esm/internal/render/webgl/ShaderProgram.d.ts.map +1 -1
  525. package/lib/esm/internal/render/webgl/ShaderProgram.js +2 -2
  526. package/lib/esm/internal/render/webgl/ShaderProgram.js.map +1 -1
  527. package/lib/esm/internal/render/webgl/Target.d.ts +2 -1
  528. package/lib/esm/internal/render/webgl/Target.d.ts.map +1 -1
  529. package/lib/esm/internal/render/webgl/Target.js +3 -1
  530. package/lib/esm/internal/render/webgl/Target.js.map +1 -1
  531. package/lib/esm/internal/render/webgl/Technique.d.ts +3 -3
  532. package/lib/esm/internal/render/webgl/Technique.d.ts.map +1 -1
  533. package/lib/esm/internal/render/webgl/Technique.js +3 -3
  534. package/lib/esm/internal/render/webgl/Technique.js.map +1 -1
  535. package/lib/esm/internal/tile/ClassifierTileTree.js +3 -1
  536. package/lib/esm/internal/tile/ClassifierTileTree.js.map +1 -1
  537. package/lib/esm/internal/tile/IModelTile.d.ts +1 -0
  538. package/lib/esm/internal/tile/IModelTile.d.ts.map +1 -1
  539. package/lib/esm/internal/tile/IModelTile.js +4 -0
  540. package/lib/esm/internal/tile/IModelTile.js.map +1 -1
  541. package/lib/esm/internal/tile/IModelTileTree.d.ts +4 -2
  542. package/lib/esm/internal/tile/IModelTileTree.d.ts.map +1 -1
  543. package/lib/esm/internal/tile/IModelTileTree.js +60 -2
  544. package/lib/esm/internal/tile/IModelTileTree.js.map +1 -1
  545. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.d.ts.map +1 -1
  546. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js +8 -0
  547. package/lib/esm/internal/tile/LayerTileTreeReferenceHandler.js.map +1 -1
  548. package/lib/esm/internal/tile/OrbitGtTileTree.d.ts +4 -1
  549. package/lib/esm/internal/tile/OrbitGtTileTree.d.ts.map +1 -1
  550. package/lib/esm/internal/tile/OrbitGtTileTree.js +5 -1
  551. package/lib/esm/internal/tile/OrbitGtTileTree.js.map +1 -1
  552. package/lib/esm/internal/tile/PrimaryTileTree.d.ts.map +1 -1
  553. package/lib/esm/internal/tile/PrimaryTileTree.js +5 -4
  554. package/lib/esm/internal/tile/PrimaryTileTree.js.map +1 -1
  555. package/lib/esm/internal/tile/RealityModelTileTree.d.ts +26 -7
  556. package/lib/esm/internal/tile/RealityModelTileTree.d.ts.map +1 -1
  557. package/lib/esm/internal/tile/RealityModelTileTree.js +48 -22
  558. package/lib/esm/internal/tile/RealityModelTileTree.js.map +1 -1
  559. package/lib/esm/internal/tile/RealityTileLoader.d.ts +2 -2
  560. package/lib/esm/internal/tile/RealityTileLoader.d.ts.map +1 -1
  561. package/lib/esm/internal/tile/RealityTileLoader.js +10 -2
  562. package/lib/esm/internal/tile/RealityTileLoader.js.map +1 -1
  563. package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts +1 -1
  564. package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.d.ts.map +1 -1
  565. package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +1 -1
  566. package/lib/esm/internal/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  567. package/lib/esm/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts +1 -1
  568. package/lib/esm/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.d.ts.map +1 -1
  569. package/lib/esm/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js +1 -1
  570. package/lib/esm/internal/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  571. package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.d.ts +1 -1
  572. package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.d.ts.map +1 -1
  573. package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js +1 -1
  574. package/lib/esm/internal/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  575. package/lib/esm/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts +1 -1
  576. package/lib/esm/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.d.ts.map +1 -1
  577. package/lib/esm/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js +1 -1
  578. package/lib/esm/internal/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  579. package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts +4 -0
  580. package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.d.ts.map +1 -1
  581. package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +52 -11
  582. package/lib/esm/internal/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  583. package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts +7 -0
  584. package/lib/esm/internal/tile/map/WmtsCapabilities.d.ts.map +1 -1
  585. package/lib/esm/internal/tile/map/WmtsCapabilities.js +17 -0
  586. package/lib/esm/internal/tile/map/WmtsCapabilities.js.map +1 -1
  587. package/lib/esm/internal/webgl.d.ts +1 -1
  588. package/lib/esm/internal/webgl.d.ts.map +1 -1
  589. package/lib/esm/internal/webgl.js.map +1 -1
  590. package/lib/esm/properties/AngleDescription.d.ts +4 -1
  591. package/lib/esm/properties/AngleDescription.d.ts.map +1 -1
  592. package/lib/esm/properties/AngleDescription.js +10 -2
  593. package/lib/esm/properties/AngleDescription.js.map +1 -1
  594. package/lib/esm/properties/FormattedQuantityDescription.d.ts +11 -1
  595. package/lib/esm/properties/FormattedQuantityDescription.d.ts.map +1 -1
  596. package/lib/esm/properties/FormattedQuantityDescription.js +7 -2
  597. package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
  598. package/lib/esm/properties/LengthDescription.d.ts +12 -3
  599. package/lib/esm/properties/LengthDescription.d.ts.map +1 -1
  600. package/lib/esm/properties/LengthDescription.js +30 -6
  601. package/lib/esm/properties/LengthDescription.js.map +1 -1
  602. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +103 -7
  603. package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
  604. package/lib/esm/quantity-formatting/QuantityFormatter.js +208 -23
  605. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  606. package/lib/esm/render/Decorations.d.ts +1 -1
  607. package/lib/esm/render/Decorations.d.ts.map +1 -1
  608. package/lib/esm/render/Decorations.js +1 -1
  609. package/lib/esm/render/Decorations.js.map +1 -1
  610. package/lib/esm/render/GraphicBranch.d.ts +4 -2
  611. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  612. package/lib/esm/render/GraphicBranch.js +1 -1
  613. package/lib/esm/render/GraphicBranch.js.map +1 -1
  614. package/lib/esm/render/MeshArgs.d.ts +8 -3
  615. package/lib/esm/render/MeshArgs.d.ts.map +1 -1
  616. package/lib/esm/render/MeshArgs.js.map +1 -1
  617. package/lib/esm/render/RenderGraphic.d.ts +1 -1
  618. package/lib/esm/render/RenderGraphic.d.ts.map +1 -1
  619. package/lib/esm/render/RenderGraphic.js.map +1 -1
  620. package/lib/esm/render/RenderSystem.d.ts +2 -2
  621. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  622. package/lib/esm/render/RenderSystem.js.map +1 -1
  623. package/lib/esm/render/ScreenSpaceEffectBuilder.d.ts +1 -1
  624. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  625. package/lib/esm/request/Request.d.ts +2 -2
  626. package/lib/esm/request/Request.js.map +1 -1
  627. package/lib/esm/tile/GltfReader.d.ts +6 -2
  628. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  629. package/lib/esm/tile/GltfReader.js +154 -19
  630. package/lib/esm/tile/GltfReader.js.map +1 -1
  631. package/lib/esm/tile/ImdlReader.js.map +1 -1
  632. package/lib/esm/tile/RealityTile.d.ts +9 -0
  633. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  634. package/lib/esm/tile/RealityTile.js +12 -0
  635. package/lib/esm/tile/RealityTile.js.map +1 -1
  636. package/lib/esm/tile/RealityTileTree.d.ts +4 -0
  637. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  638. package/lib/esm/tile/RealityTileTree.js +4 -0
  639. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  640. package/lib/esm/tile/Tile.d.ts +1 -1
  641. package/lib/esm/tile/Tile.d.ts.map +1 -1
  642. package/lib/esm/tile/Tile.js +1 -1
  643. package/lib/esm/tile/Tile.js.map +1 -1
  644. package/lib/esm/tile/TileAdmin.d.ts +10 -0
  645. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  646. package/lib/esm/tile/TileAdmin.js +3 -0
  647. package/lib/esm/tile/TileAdmin.js.map +1 -1
  648. package/lib/esm/tile/TileGeometryCollector.d.ts +5 -0
  649. package/lib/esm/tile/TileGeometryCollector.d.ts.map +1 -1
  650. package/lib/esm/tile/TileGeometryCollector.js.map +1 -1
  651. package/lib/esm/tile/TileTree.d.ts +15 -2
  652. package/lib/esm/tile/TileTree.d.ts.map +1 -1
  653. package/lib/esm/tile/TileTree.js +14 -1
  654. package/lib/esm/tile/TileTree.js.map +1 -1
  655. package/lib/esm/tile/TileTreeReference.d.ts +17 -3
  656. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  657. package/lib/esm/tile/TileTreeReference.js +11 -5
  658. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  659. package/lib/esm/tile/map/CesiumTerrainProvider.js +1 -1
  660. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  661. package/lib/esm/tile/map/ImageryTileTree.d.ts +2 -2
  662. package/lib/esm/tile/map/ImageryTileTree.d.ts.map +1 -1
  663. package/lib/esm/tile/map/ImageryTileTree.js +2 -2
  664. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  665. package/lib/esm/tile/map/MapCartoRectangle.d.ts +10 -0
  666. package/lib/esm/tile/map/MapCartoRectangle.d.ts.map +1 -1
  667. package/lib/esm/tile/map/MapCartoRectangle.js +12 -0
  668. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  669. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +3 -3
  670. package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
  671. package/lib/esm/tile/map/MapLayerImageryProvider.js +9 -5
  672. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  673. package/lib/esm/tile/map/MapTileTree.d.ts +1 -1
  674. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  675. package/lib/esm/tile/map/MapTileTree.js +1 -1
  676. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  677. package/lib/esm/tile/map/QuadId.d.ts +15 -0
  678. package/lib/esm/tile/map/QuadId.d.ts.map +1 -1
  679. package/lib/esm/tile/map/QuadId.js +12 -0
  680. package/lib/esm/tile/map/QuadId.js.map +1 -1
  681. package/lib/esm/tile/map/TerrainMeshProvider.d.ts +1 -1
  682. package/lib/esm/tile/map/TerrainMeshProvider.d.ts.map +1 -1
  683. package/lib/esm/tile/map/TerrainMeshProvider.js +1 -1
  684. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  685. package/lib/esm/tools/AccuDrawViewportUI.d.ts +7 -0
  686. package/lib/esm/tools/AccuDrawViewportUI.d.ts.map +1 -1
  687. package/lib/esm/tools/AccuDrawViewportUI.js +14 -0
  688. package/lib/esm/tools/AccuDrawViewportUI.js.map +1 -1
  689. package/lib/esm/tools/ClipViewTool.d.ts.map +1 -1
  690. package/lib/esm/tools/ClipViewTool.js +18 -7
  691. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  692. package/lib/esm/tools/ElementSetTool.d.ts +9 -1
  693. package/lib/esm/tools/ElementSetTool.d.ts.map +1 -1
  694. package/lib/esm/tools/ElementSetTool.js +132 -9
  695. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  696. package/lib/esm/tools/IdleTool.d.ts.map +1 -1
  697. package/lib/esm/tools/IdleTool.js +4 -1
  698. package/lib/esm/tools/IdleTool.js.map +1 -1
  699. package/lib/esm/tools/MeasureTool.d.ts +9 -0
  700. package/lib/esm/tools/MeasureTool.d.ts.map +1 -1
  701. package/lib/esm/tools/MeasureTool.js +57 -24
  702. package/lib/esm/tools/MeasureTool.js.map +1 -1
  703. package/lib/esm/tools/PrimitiveTool.d.ts +1 -1
  704. package/lib/esm/tools/PrimitiveTool.d.ts.map +1 -1
  705. package/lib/esm/tools/PrimitiveTool.js +4 -3
  706. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  707. package/lib/esm/tools/SelectTool.d.ts +2 -2
  708. package/lib/esm/tools/SelectTool.d.ts.map +1 -1
  709. package/lib/esm/tools/SelectTool.js +26 -97
  710. package/lib/esm/tools/SelectTool.js.map +1 -1
  711. package/lib/esm/tools/Tool.d.ts +10 -1
  712. package/lib/esm/tools/Tool.d.ts.map +1 -1
  713. package/lib/esm/tools/Tool.js +27 -4
  714. package/lib/esm/tools/Tool.js.map +1 -1
  715. package/lib/esm/tools/ToolAdmin.d.ts +1 -0
  716. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  717. package/lib/esm/tools/ToolAdmin.js +59 -18
  718. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  719. package/lib/esm/tools/ToolAssistance.d.ts +1 -1
  720. package/lib/esm/tools/ToolAssistance.js.map +1 -1
  721. package/lib/esm/tools/ToolSettings.d.ts +5 -0
  722. package/lib/esm/tools/ToolSettings.d.ts.map +1 -1
  723. package/lib/esm/tools/ToolSettings.js +5 -0
  724. package/lib/esm/tools/ToolSettings.js.map +1 -1
  725. package/lib/esm/tools/ViewTool.d.ts +1 -2
  726. package/lib/esm/tools/ViewTool.d.ts.map +1 -1
  727. package/lib/esm/tools/ViewTool.js +143 -84
  728. package/lib/esm/tools/ViewTool.js.map +1 -1
  729. package/lib/public/images/google_on_non_white.png +0 -0
  730. package/lib/public/images/google_on_non_white_hdpi.png +0 -0
  731. package/lib/public/images/google_on_white.png +0 -0
  732. package/lib/public/images/google_on_white_hdpi.png +0 -0
  733. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  734. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  735. package/package.json +25 -22
@@ -1 +1 @@
1
- {"version":3,"file":"MeasureTool.js","sourceRoot":"","sources":["../../../src/tools/MeasureTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Measure\n */\n\nimport { BentleyStatus, Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { AxisOrder, IModelJson, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d, PointString3d, PolygonOps, Vector3d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\nimport { ColorDef, GeometryStreamProps, LinePixels, MassPropertiesOperation, MassPropertiesRequestProps, MassPropertiesResponseProps } from \"@itwin/core-common\";\nimport { DialogItem, DialogItemValue, DialogPropertySyncItem, PropertyDescription } from \"@itwin/appui-abstract\";\nimport { AccuDrawHintBuilder, ContextRotationId } from \"../AccuDraw\";\nimport { LocateFilterStatus, LocateResponse } from \"../ElementLocateManager\";\nimport { HitDetail, HitGeomType } from \"../HitDetail\";\nimport { IModelApp } from \"../IModelApp\";\nimport { Marker } from \"../Marker\";\nimport { NotifyMessageDetails, OutputMessagePriority, OutputMessageType } from \"../NotificationManager\";\nimport { QuantityType } from \"../quantity-formatting/QuantityFormatter\";\nimport { CanvasDecoration } from \"../render/CanvasDecoration\";\nimport { DecorateContext } from \"../ViewContext\";\nimport { Viewport } from \"../Viewport\";\nimport { PrimitiveTool } from \"./PrimitiveTool\";\nimport { BeButtonEvent, BeModifierKeys, CoreTools, EventHandled, InputSource } from \"./Tool\";\nimport { ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection } from \"./ToolAssistance\";\nimport { GraphicType } from \"../common/render/GraphicType\";\n\nfunction translateBold(key: string) {\n return `<b>${CoreTools.translate(`Measure.Labels.${key}`)}:</b> `;\n}\n\n/** @internal */\nclass MeasureLabel implements CanvasDecoration {\n public worldLocation = new Point3d();\n public position = new Point3d();\n public label: string;\n\n constructor(worldLocation: XYAndZ, label: string) {\n this.worldLocation.setFrom(worldLocation);\n this.label = label;\n }\n\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\n ctx.font = \"16px sans-serif\";\n const labelHeight = ctx.measureText(\"M\").width; // Close enough for border padding...\n const labelWidth = ctx.measureText(this.label).width + labelHeight;\n\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"white\";\n ctx.fillStyle = \"rgba(0,0,0,.4)\";\n ctx.shadowColor = \"black\";\n ctx.shadowBlur = 10;\n ctx.fillRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\n ctx.strokeRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\n\n ctx.fillStyle = \"white\";\n ctx.shadowBlur = 0;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.label, 0, 0);\n }\n\n public setPosition(vp: Viewport): boolean {\n vp.worldToView(this.worldLocation, this.position);\n this.position.y -= Math.floor(vp.pixelsFromInches(0.44)) + 0.5; // Offset from snap location...\n return vp.viewRect.containsPoint(this.position);\n }\n\n public addDecoration(context: DecorateContext) {\n if (this.setPosition(context.viewport))\n context.addCanvasDecoration(this);\n }\n}\n\n/** @internal */\nclass MeasureMarker extends Marker {\n public isSelected: boolean = false;\n constructor(label: string, title: HTMLElement, worldLocation: XYAndZ, size: XAndY) {\n super(worldLocation, size);\n\n const markerDrawFunc = (ctx: CanvasRenderingContext2D) => {\n ctx.beginPath();\n ctx.arc(0, 0, this.size.x * 0.5, 0, 2 * Math.PI);\n ctx.lineWidth = 2;\n ctx.strokeStyle = \"black\";\n const hilite = this.isSelected && this._hiliteColor ? this._hiliteColor.colors : undefined;\n ctx.fillStyle = undefined !== hilite ? `rgba(${hilite.r | 0},${hilite.g | 0},${hilite.b | 0}, 0.5)` : \"rgba(255,255,255,.5)\";\n ctx.fill();\n ctx.stroke();\n };\n\n this.drawFunc = markerDrawFunc;\n this.title = title;\n this.label = label;\n this.labelFont = \"16px sans-serif\";\n this.labelColor = \"black\";\n this.labelMaxWidth = this.size.x * 0.75;\n this.labelOffset = { x: 0, y: -1 };\n }\n\n public override onMouseButton(_ev: BeButtonEvent): boolean { return true; } // Never forward event to active tool...\n\n public override onMouseEnter(ev: BeButtonEvent) {\n super.onMouseEnter(ev);\n if (this.title && InputSource.Touch === ev.inputSource && ev.viewport)\n ev.viewport.openToolTip(this.title, ev.viewPoint, this.tooltipOptions);\n }\n\n public override onMouseLeave() {\n super.onMouseLeave();\n if (this.title)\n IModelApp.notifications.clearToolTip(); // Clear tool tip from tap since we won't get a motion event...\n }\n}\n\n/** @internal */\ninterface Location { point: Point3d, adjustedPoint: Point3d, refAxes: Matrix3d }\n/** @internal */\ninterface Segment { distance: number, slope: number, start: Point3d, end: Point3d, delta: Vector3d, adjustedStart: Point3d, adjustedEnd: Point3d, adjustedDelta: Vector3d, refAxes: Matrix3d, marker: MeasureMarker }\n\n/** @internal */\nfunction adjustPoint(ev: BeButtonEvent, segments?: Array<Segment>, locations?: Array<Location>): Point3d {\n // If the point was from a hit we must transform it by the display transform of what got hit.\n const hit = IModelApp.accuSnap.currHit;\n if (!hit || !ev.viewport || !hit.modelId)\n return ev.point;\n\n if (\"0\" !== hit.modelId) {\n const transform = ev.viewport.view.computeDisplayTransform({ modelId: hit.modelId, elementId: hit.sourceId });\n return transform?.multiplyInversePoint3d(ev.point) ?? ev.point;\n }\n\n // Must have snapped to a decoration, so look through previous any segments & locations for a match to get an adjusted point.\n if (segments) {\n for (const seg of segments) {\n if (seg.start.isExactEqual(ev.point))\n return seg.adjustedStart.clone();\n\n if (seg.end.isExactEqual(ev.point))\n return seg.adjustedEnd.clone();\n }\n }\n\n if (locations)\n for (const loc of locations)\n if (loc.point.isExactEqual(ev.point))\n return loc.adjustedPoint.clone();\n\n return ev.point;\n}\n\n/** Report distance between 2 points using current quantity formatter for length.\n * @public\n */\nexport class MeasureDistanceTool extends PrimitiveTool {\n public static override toolId = \"Measure.Distance\";\n public static override iconSpec = \"icon-measure-distance\";\n /** @internal */\n protected readonly _locationData = new Array<Location>();\n /** @internal */\n protected readonly _acceptedSegments = new Array<Segment>();\n /** @internal */\n protected _totalDistance: number = 0.0;\n /** @internal */\n protected _totalDistanceMarker?: MeasureLabel;\n /** @internal */\n protected _snapGeomId?: string;\n /** @internal */\n protected _lastMotionPt?: Point3d;\n /** @internal */\n protected _lastMotionAdjustedPt?: Point3d;\n\n /** @internal */\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n /** @internal */\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\n /** @internal */\n public override requireWriteableTarget(): boolean { return false; }\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onUnsuspend() { this.showPrompt(); }\n\n /** @internal */\n protected showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(0 === this._locationData.length ? \"Measure.Distance.Prompts.FirstPoint\" : \"Measure.Distance.Prompts.NextPoint\"));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\n if (0 === this._locationData.length) {\n if (this._acceptedSegments.length > 0) {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\n }\n } else {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Cancel\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Cancel\"), false, ToolAssistanceInputMethod.Mouse));\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AdditionalPoint\"), false, ToolAssistanceInputMethod.Mouse));\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\n }\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n const hints = new AccuDrawHintBuilder();\n hints.enableSmartRotation = true;\n hints.setModeRectangular();\n hints.sendHints(false);\n IModelApp.toolAdmin.setCursor(0 === this._locationData.length ? IModelApp.viewManager.crossHairCursor : IModelApp.viewManager.dynamicsCursor);\n this.showPrompt();\n }\n\n /** @internal */\n public override testDecorationHit(id: string): boolean { return id === this._snapGeomId; }\n\n /** @internal */\n protected getSnapPoints(): Point3d[] | undefined {\n if (this._acceptedSegments.length < 1 && this._locationData.length < 2)\n return undefined;\n\n const snapPoints: Point3d[] = [];\n for (const seg of this._acceptedSegments) {\n if (0 === snapPoints.length || !seg.start.isAlmostEqual(snapPoints[snapPoints.length - 1]))\n snapPoints.push(seg.start);\n if (!seg.end.isAlmostEqual(snapPoints[0]))\n snapPoints.push(seg.end);\n }\n\n if (this._locationData.length > 1)\n for (const loc of this._locationData)\n snapPoints.push(loc.point);\n return snapPoints;\n }\n\n /** @internal */\n public override getDecorationGeometry(_hit: HitDetail): GeometryStreamProps | undefined {\n const snapPoints = this.getSnapPoints();\n if (undefined === snapPoints)\n return undefined;\n const geomData = IModelJson.Writer.toIModelJson(PointString3d.create(snapPoints));\n return (undefined === geomData ? undefined : [geomData]);\n }\n\n /** @internal */\n protected displayDynamicDistance(context: DecorateContext, points: Point3d[], adjustedPoints: Point3d[]): void {\n let totalDistance = 0.0;\n for (let i = 0; i < adjustedPoints.length - 1; i++)\n totalDistance += adjustedPoints[i].distance(adjustedPoints[i + 1]);\n if (0.0 === totalDistance)\n return;\n\n const formatterSpec = IModelApp.quantityFormatter.findFormatterSpecByQuantityType(QuantityType.Length);\n if (undefined === formatterSpec)\n return;\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(totalDistance, formatterSpec);\n const distDyn = new MeasureLabel(points[points.length - 1], formattedTotalDistance);\n distDyn.addDecoration(context);\n }\n\n /** @internal */\n protected displayDelta(context: DecorateContext, seg: any): void {\n const xVec = new Vector3d(seg.delta.x, 0.0, 0.0);\n const yVec = new Vector3d(0.0, seg.delta.y, 0.0);\n const zVec = new Vector3d(0.0, 0.0, seg.delta.z);\n\n seg.refAxes.multiplyVectorInPlace(xVec);\n seg.refAxes.multiplyVectorInPlace(yVec);\n seg.refAxes.multiplyVectorInPlace(zVec);\n\n const builderAxes = context.createGraphicBuilder(GraphicType.WorldOverlay);\n let basePt = seg.start.clone();\n\n if (xVec.magnitude() > 1.0e-5) {\n const segPoints: Point3d[] = [];\n segPoints.push(basePt);\n basePt = basePt.plus(xVec);\n segPoints.push(basePt);\n const colorX = ColorDef.red.adjustedForContrast(context.viewport.view.backgroundColor);\n builderAxes.setSymbology(colorX, ColorDef.black, 5);\n builderAxes.addLineString(segPoints);\n }\n\n if (yVec.magnitude() > 1.0e-5) {\n const segPoints: Point3d[] = [];\n segPoints.push(basePt);\n basePt = basePt.plus(yVec);\n segPoints.push(basePt);\n const colorY = ColorDef.green.adjustedForContrast(context.viewport.view.backgroundColor);\n builderAxes.setSymbology(colorY, ColorDef.black, 5);\n builderAxes.addLineString(segPoints);\n }\n\n if (zVec.magnitude() > 1.0e-5) {\n const segPoints: Point3d[] = [];\n segPoints.push(basePt);\n basePt = basePt.plus(zVec);\n segPoints.push(basePt);\n const colorZ = ColorDef.blue.adjustedForContrast(context.viewport.view.backgroundColor);\n builderAxes.setSymbology(colorZ, ColorDef.black, 5);\n builderAxes.addLineString(segPoints);\n }\n\n const segGlow = context.viewport.hilite.color.withAlpha(50);\n builderAxes.setSymbology(segGlow, ColorDef.black, 8);\n builderAxes.addLineString([seg.start, seg.end]);\n\n context.addDecorationFromBuilder(builderAxes);\n }\n\n /** @internal */\n protected createDecorations(context: DecorateContext, isSuspended: boolean): void {\n if (!this.isCompatibleViewport(context.viewport, false))\n return;\n\n if (!isSuspended && this._locationData.length > 0 && undefined !== this._lastMotionPt && undefined !== this._lastMotionAdjustedPt) {\n const tmpPoints: Point3d[] = [];\n const tmpAdjustedPoints: Point3d[] = [];\n for (const loc of this._locationData) {\n tmpPoints.push(loc.point); // Deep copy not necessary...\n tmpAdjustedPoints.push(loc.adjustedPoint);\n }\n tmpPoints.push(this._lastMotionPt);\n tmpAdjustedPoints.push(this._lastMotionAdjustedPt);\n\n const builderDynVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const colorDynVis = context.viewport.hilite.color;\n\n builderDynVis.setSymbology(colorDynVis, ColorDef.black, 3);\n builderDynVis.addLineString(tmpPoints);\n\n context.addDecorationFromBuilder(builderDynVis);\n\n const builderDynHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorDynHid = colorDynVis.withAlpha(100);\n\n builderDynHid.setSymbology(colorDynHid, ColorDef.black, 1, LinePixels.Code2);\n builderDynHid.addLineString(tmpPoints);\n\n context.addDecorationFromBuilder(builderDynHid);\n this.displayDynamicDistance(context, tmpPoints, tmpAdjustedPoints);\n }\n\n if (this._acceptedSegments.length > 0) {\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\n const colorAccHid = colorAccVis.withAlpha(100);\n\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\n\n for (const seg of this._acceptedSegments) {\n builderAccVis.addLineString([seg.start, seg.end]);\n builderAccHid.addLineString([seg.start, seg.end]);\n seg.marker.addDecoration(context);\n if (seg.marker.isSelected)\n this.displayDelta(context, seg);\n }\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n }\n\n if (undefined !== this._totalDistanceMarker)\n this._totalDistanceMarker.addDecoration(context);\n\n const snapPoints = this.getSnapPoints();\n if (undefined === snapPoints)\n return;\n\n if (undefined === this._snapGeomId)\n this._snapGeomId = this.iModel.transientIds.getNext();\n\n const builderSnapPts = context.createGraphicBuilder(GraphicType.WorldOverlay, undefined, this._snapGeomId);\n const colorAccPts = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\n\n builderSnapPts.setSymbology(colorAccPts, ColorDef.black, 7);\n builderSnapPts.addPointString(snapPoints);\n\n context.addDecorationFromBuilder(builderSnapPts);\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void { this.createDecorations(context, false); }\n /** @internal */\n public override decorateSuspended(context: DecorateContext): void { this.createDecorations(context, true); }\n\n /** @internal */\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (this._locationData.length > 0 && undefined !== ev.viewport) {\n const point = ev.point;\n const adjustedPoint = adjustPoint(ev, this._acceptedSegments, this._locationData);\n if (undefined !== this._lastMotionPt) {\n this._lastMotionPt.setFrom(point);\n this._lastMotionAdjustedPt?.setFrom(adjustedPoint);\n } else {\n this._lastMotionPt = point.clone();\n this._lastMotionAdjustedPt = adjustedPoint;\n }\n ev.viewport.invalidateDecorations();\n }\n }\n\n protected reportMeasurements(): void {\n if (undefined === this._totalDistanceMarker)\n return;\n const briefMsg = `${CoreTools.translate(this._acceptedSegments.length > 1 ? \"Measure.Labels.CumulativeDistance\" : \"Measure.Labels.Distance\")}: ${this._totalDistanceMarker.label}`;\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\n IModelApp.notifications.outputMessage(msgDetail);\n }\n\n protected async updateTotals(): Promise<void> {\n this._totalDistance = 0.0;\n this._totalDistanceMarker = undefined;\n for (const seg of this._acceptedSegments)\n this._totalDistance += seg.distance;\n if (0.0 === this._totalDistance)\n return;\n\n const formatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\n if (undefined === formatterSpec)\n return;\n\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(this._totalDistance, formatterSpec);\n this._totalDistanceMarker = new MeasureLabel(this._acceptedSegments[this._acceptedSegments.length - 1].end, formattedTotalDistance);\n this.reportMeasurements();\n }\n\n protected async getMarkerToolTip(distance: number, slope: number, start: Point3d, end: Point3d, delta?: Vector3d): Promise<HTMLElement> {\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\n const toolTip = document.createElement(\"div\");\n\n const distanceFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\n if (undefined === distanceFormatterSpec)\n return toolTip;\n\n let toolTipHtml = \"\";\n const formattedDistance = IModelApp.quantityFormatter.formatQuantity(distance, distanceFormatterSpec);\n toolTipHtml += `${translateBold(\"Distance\") + formattedDistance}<br>`;\n\n if (is3d) {\n const angleFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Angle);\n if (undefined !== angleFormatterSpec) {\n const formattedSlope = IModelApp.quantityFormatter.formatQuantity(slope, angleFormatterSpec);\n toolTipHtml += `${translateBold(\"Slope\") + formattedSlope}<br>`;\n }\n }\n\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\n if (undefined !== coordFormatterSpec) {\n let startAdjusted = start;\n let endAdjusted = end;\n if (isSpatial) {\n const globalOrigin = this.iModel.globalOrigin;\n startAdjusted = startAdjusted.minus(globalOrigin);\n endAdjusted = endAdjusted.minus(globalOrigin);\n }\n\n {\n const formattedStartX = IModelApp.quantityFormatter.formatQuantity(startAdjusted.x, coordFormatterSpec);\n const formattedStartY = IModelApp.quantityFormatter.formatQuantity(startAdjusted.y, coordFormatterSpec);\n const formattedStartZ = IModelApp.quantityFormatter.formatQuantity(startAdjusted.z, coordFormatterSpec);\n toolTipHtml += `${translateBold(\"StartCoord\") + formattedStartX}, ${formattedStartY}`;\n if (is3d)\n toolTipHtml += `, ${formattedStartZ}`;\n toolTipHtml += \"<br>\";\n }\n const formattedEndX = IModelApp.quantityFormatter.formatQuantity(endAdjusted.x, coordFormatterSpec);\n const formattedEndY = IModelApp.quantityFormatter.formatQuantity(endAdjusted.y, coordFormatterSpec);\n const formattedEndZ = IModelApp.quantityFormatter.formatQuantity(endAdjusted.z, coordFormatterSpec);\n toolTipHtml += `${translateBold(\"EndCoord\") + formattedEndX}, ${formattedEndY}`;\n if (is3d)\n toolTipHtml += `, ${formattedEndZ}`;\n toolTipHtml += \"<br>\";\n }\n\n if (undefined !== delta) {\n const formattedDeltaX = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.x), distanceFormatterSpec);\n const formattedDeltaY = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.y), distanceFormatterSpec);\n const formattedDeltaZ = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.z), distanceFormatterSpec);\n toolTipHtml += `${translateBold(\"Delta\") + formattedDeltaX}, ${formattedDeltaY}`;\n if (is3d)\n toolTipHtml += `, ${formattedDeltaZ}`;\n toolTipHtml += \"<br>\";\n }\n\n toolTip.innerHTML = toolTipHtml;\n return toolTip;\n }\n\n /** @internal */\n protected async updateSelectedMarkerToolTip(seg: any, ev: BeButtonEvent, reopenToolTip: boolean): Promise<void> {\n seg.marker.title = await this.getMarkerToolTip(seg.distance, seg.slope, seg.adjustedStart, seg.adjustedEnd, seg.marker.isSelected ? seg.adjustedDelta : undefined);\n if (!reopenToolTip || undefined === ev.viewport || !IModelApp.notifications.isToolTipOpen)\n return;\n IModelApp.notifications.clearToolTip();\n ev.viewport.openToolTip(seg.marker.title, ev.viewPoint);\n }\n\n /** @internal */\n protected async acceptNewSegments(): Promise<void> {\n if (this._locationData.length > 1) {\n for (let i = 0; i <= this._locationData.length - 2; i++) {\n const adjustedStart = this._locationData[i].adjustedPoint;\n const adjustedEnd = this._locationData[i + 1].adjustedPoint;\n const distance = adjustedStart.distance(adjustedEnd);\n const xyDist = adjustedStart.distanceXY(adjustedEnd);\n const zDist = adjustedEnd.z - adjustedStart.z;\n const slope = (0.0 === xyDist ? Math.PI : Math.atan(zDist / xyDist));\n const adjustedDelta = Vector3d.createStartEnd(adjustedStart, adjustedEnd);\n const refAxes = this._locationData[i].refAxes;\n refAxes.multiplyTransposeVectorInPlace(adjustedDelta);\n const start = this._locationData[i].point;\n const end = this._locationData[i + 1].point;\n const delta = Vector3d.createStartEnd(start, end);\n refAxes.multiplyTransposeVectorInPlace(delta);\n\n const toolTip = await this.getMarkerToolTip(distance, slope, adjustedStart, adjustedEnd);\n const marker = new MeasureMarker((this._acceptedSegments.length + 1).toString(), toolTip, start.interpolate(0.5, end), Point2d.create(25, 25));\n\n const segMarkerButtonFunc = (ev: BeButtonEvent) => {\n if (ev.isDown)\n return true;\n\n let selectedMarker: MeasureMarker | undefined;\n let pickedMarker: MeasureMarker | undefined;\n for (const seg of this._acceptedSegments) {\n if (!seg.marker.pick(ev.viewPoint))\n continue;\n selectedMarker = (seg.marker.isSelected ? undefined : seg.marker);\n pickedMarker = seg.marker;\n break;\n }\n\n for (const seg of this._acceptedSegments) {\n const wasSelected = seg.marker.isSelected;\n seg.marker.isSelected = (seg.marker === selectedMarker);\n if (wasSelected !== seg.marker.isSelected)\n this.updateSelectedMarkerToolTip(seg, ev, (seg.marker === pickedMarker)); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n return true;\n };\n\n marker.onMouseButton = segMarkerButtonFunc;\n this._acceptedSegments.push({ distance, slope, start, end, delta, adjustedStart, adjustedEnd, adjustedDelta, refAxes, marker });\n }\n }\n this._locationData.length = 0;\n await this.updateTotals();\n }\n\n /** @internal */\n protected getReferenceAxes(vp?: Viewport): Matrix3d {\n const refAxes = Matrix3d.createIdentity();\n if (undefined !== vp && vp.isContextRotationRequired)\n vp.getAuxCoordRotation(refAxes);\n return refAxes;\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n const point = ev.point.clone();\n const adjustedPoint = adjustPoint(ev, this._acceptedSegments, this._locationData);\n const refAxes = this.getReferenceAxes(ev.viewport);\n const zDir = refAxes.columnZ();\n const normal = refAxes.columnZ();\n const tangent = refAxes.columnX();\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\n\n // Report xyz delta relative to world up. The surface normal and edge tangent help determine the rotation about z...\n if (undefined !== snap) {\n if (undefined !== snap.primitive) {\n const locDetail = snap.primitive.closestPoint(point, false);\n if (undefined !== locDetail && (HitGeomType.Segment === snap.geomType || snap.primitive.isInPlane(Plane3dByOriginAndUnitNormal.create(point, undefined !== snap.normal ? snap.normal : normal)!))) {\n const locRay = snap.primitive.fractionToPointAndUnitTangent(locDetail.fraction);\n tangent.setFrom(locRay.direction);\n if (undefined !== snap.normal)\n normal.setFrom(snap.normal);\n }\n } else if (undefined !== snap.normal) {\n normal.setFrom(snap.normal);\n }\n }\n\n if (!normal.isParallelTo(zDir, true)) {\n const yDir = zDir.unitCrossProduct(normal);\n if (undefined !== yDir) {\n yDir.unitCrossProduct(zDir, normal);\n Matrix3d.createColumnsInAxisOrder(AxisOrder.ZXY, normal, yDir, zDir, refAxes);\n }\n } else if (!tangent.isParallelTo(zDir, true)) {\n const yDir = zDir.unitCrossProduct(tangent);\n if (undefined !== yDir) {\n yDir.unitCrossProduct(zDir, tangent);\n Matrix3d.createColumnsInAxisOrder(AxisOrder.XYZ, tangent, yDir, zDir, refAxes);\n }\n }\n\n this._locationData.push({ point, adjustedPoint, refAxes });\n\n if (this._locationData.length > 1 && !ev.isControlKey)\n await this.acceptNewSegments();\n this.setupAndPromptForNextAction();\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\n if (0 === this._locationData.length) {\n await this.onReinitialize();\n return EventHandled.No;\n }\n await this.acceptNewSegments();\n this.setupAndPromptForNextAction();\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (0 === this._locationData.length && 0 === this._acceptedSegments.length)\n return false;\n\n if (0 !== this._locationData.length) {\n this._locationData.pop();\n } else if (0 !== this._acceptedSegments.length) {\n this._acceptedSegments.pop();\n }\n\n if (0 === this._locationData.length && 0 === this._acceptedSegments.length) {\n await this.onReinitialize();\n } else {\n await this.updateTotals();\n this.setupAndPromptForNextAction();\n }\n return true;\n }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureDistanceTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** Report spatial coordinate at a point as well as cartographic location for geolocated models using current quantity formatters.\n * @public\n */\nexport class MeasureLocationTool extends PrimitiveTool {\n public static override toolId = \"Measure.Location\";\n public static override iconSpec = \"icon-measure-location\";\n /** @internal */\n protected readonly _acceptedLocations: MeasureMarker[] = [];\n /** @internal */\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n /** @internal */\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\n /** @internal */\n public override requireWriteableTarget(): boolean { return false; }\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onUnsuspend() { this.showPrompt(); }\n\n /** @internal */\n protected showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(\"Measure.Location.Prompts.EnterPoint\"));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\n if (0 !== this._acceptedLocations.length) {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\n }\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n this.showPrompt();\n }\n\n protected async getMarkerToolTip(point: Point3d): Promise<HTMLElement> {\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\n const toolTip = document.createElement(\"div\");\n\n let toolTipHtml = \"\";\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\n if (undefined !== coordFormatterSpec) {\n let pointAdjusted = point;\n if (isSpatial) {\n const globalOrigin = this.iModel.globalOrigin;\n pointAdjusted = pointAdjusted.minus(globalOrigin);\n }\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\n toolTipHtml += `${translateBold(\"Coordinate\") + formattedPointX}, ${formattedPointY}`;\n if (is3d)\n toolTipHtml += `, ${formattedPointZ}`;\n\n toolTipHtml += \"<br>\";\n }\n\n if (isSpatial) {\n const latLongFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.LatLong);\n if (undefined !== latLongFormatterSpec && undefined !== coordFormatterSpec) {\n try {\n const cartographic = await this.iModel.spatialToCartographic(point);\n const formattedLat = IModelApp.quantityFormatter.formatQuantity(Math.abs(cartographic.latitude), latLongFormatterSpec);\n const formattedLong = IModelApp.quantityFormatter.formatQuantity(Math.abs(cartographic.longitude), latLongFormatterSpec);\n const formattedHeight = IModelApp.quantityFormatter.formatQuantity(cartographic.height, coordFormatterSpec);\n const latDir = CoreTools.translate(cartographic.latitude < 0 ? \"Measure.Labels.S\" : \"Measure.Labels.N\");\n const longDir = CoreTools.translate(cartographic.longitude < 0 ? \"Measure.Labels.W\" : \"Measure.Labels.E\");\n toolTipHtml += `${translateBold(\"LatLong\") + formattedLat + latDir}, ${formattedLong}${longDir}<br>`;\n toolTipHtml += `${translateBold(\"Altitude\") + formattedHeight}<br>`;\n } catch { }\n }\n }\n\n toolTip.innerHTML = toolTipHtml;\n return toolTip;\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void {\n if (!this.isCompatibleViewport(context.viewport, false))\n return;\n\n this._acceptedLocations.forEach((marker) => marker.addDecoration(context));\n }\n /** @internal */\n public override decorateSuspended(context: DecorateContext): void { this.decorate(context); }\n\n protected reportMeasurements(): void {\n if (0 === this._acceptedLocations.length)\n return;\n const briefMsg = this._acceptedLocations[this._acceptedLocations.length - 1].title;\n if (undefined === briefMsg)\n return;\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\n IModelApp.notifications.outputMessage(msgDetail);\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n const point = ev.point.clone();\n const adjustedPoint = adjustPoint(ev);\n const toolTip = await this.getMarkerToolTip(adjustedPoint);\n const marker = new MeasureMarker((this._acceptedLocations.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\n\n this._acceptedLocations.push(marker);\n this.reportMeasurements();\n this.setupAndPromptForNextAction();\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (0 === this._acceptedLocations.length)\n return false;\n\n this._acceptedLocations.pop();\n if (0 === this._acceptedLocations.length) {\n await this.onReinitialize();\n } else {\n this.reportMeasurements();\n this.setupAndPromptForNextAction();\n }\n return true;\n }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureLocationTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** Report area defined by points using current quantity formatter for area.\n * @public\n */\nexport class MeasureAreaByPointsTool extends PrimitiveTool {\n public static override toolId = \"Measure.AreaByPoints\";\n public static override iconSpec = \"icon-measure-2d\";\n /** @internal */\n private _orientationValue: DialogItemValue = { value: ContextRotationId.Top };\n /** @internal */\n protected readonly _points: Point3d[] = [];\n /** @internal */\n protected _matrix?: Matrix3d;\n /** @internal */\n protected _isComplete = false;\n /** @internal */\n protected _area = 0.0;\n /** @internal */\n protected _perimeter = 0.0;\n /** @internal */\n protected _centroid = Point3d.createZero();\n /** @internal */\n protected _marker?: MeasureLabel;\n /** @internal */\n protected _acceptedMeasurement?: MeasureMarker;\n /** @internal */\n protected _lastMotionPt?: Point3d;\n\n /** @internal */\n public get orientation(): ContextRotationId { return this._orientationValue.value as ContextRotationId; }\n public set orientation(option: ContextRotationId) { this._orientationValue.value = option; }\n\n /** @internal */\n protected static _orientationName = \"enumAsOrientation\";\n /** @internal */\n protected static enumAsOrientationMessage(str: string) { return CoreTools.translate(`Settings.Orientation.${str}`); }\n /** @internal */\n protected static _getEnumAsOrientationDescription = (): PropertyDescription => {\n return {\n name: MeasureAreaByPointsTool._orientationName,\n displayLabel: CoreTools.translate(\"Settings.Orientation.Label\"),\n typename: \"enum\",\n enum: {\n choices: [\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Top\"), value: ContextRotationId.Top },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Front\"), value: ContextRotationId.Front },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Left\"), value: ContextRotationId.Left },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Bottom\"), value: ContextRotationId.Bottom },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Back\"), value: ContextRotationId.Back },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Right\"), value: ContextRotationId.Right },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"View\"), value: ContextRotationId.View },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Face\"), value: ContextRotationId.Face },\n ],\n },\n };\n };\n\n /** @internal */\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n const initialValue = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, MeasureAreaByPointsTool._orientationName);\n initialValue && (this._orientationValue = initialValue);\n const toolSettings = new Array<DialogItem>();\n toolSettings.push({ value: this._orientationValue, property: MeasureAreaByPointsTool._getEnumAsOrientationDescription(), editorPosition: { rowPriority: 0, columnIndex: 2 } });\n return toolSettings;\n }\n\n /** @internal */\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n if (updatedValue.propertyName === MeasureAreaByPointsTool._orientationName) {\n this._orientationValue = updatedValue.value;\n if (!this._orientationValue)\n return false;\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: MeasureAreaByPointsTool._orientationName, value: this._orientationValue });\n await this.onReinitialize();\n return true;\n }\n return false;\n }\n\n /** @internal */\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n /** @internal */\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\n /** @internal */\n public override requireWriteableTarget(): boolean { return false; }\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onUnsuspend() { this.showPrompt(); }\n\n /** @internal */\n protected showPrompt(): void {\n let mainMsg = \"Measure.AreaByPoints.Prompts.\";\n switch (this._points.length) {\n case 0:\n mainMsg += \"FirstPoint\";\n break;\n case 1:\n mainMsg += \"SecondPoint\";\n break;\n case 2:\n mainMsg += \"ThirdPoint\";\n break;\n default:\n mainMsg += this._isComplete ? \"FirstPoint\" : \"NextPoint\";\n break;\n }\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(mainMsg));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n const acceptMsg = CoreTools.translate(this._isComplete ? \"ElementSet.Inputs.Restart\" : \"ElementSet.Inputs.AcceptPoint\");\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\n\n const resetMsg = CoreTools.translate(\"ElementSet.Inputs.Restart\");\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, resetMsg, false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, resetMsg, false, ToolAssistanceInputMethod.Mouse));\n\n if (this._points.length > 1)\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AdditionalPoint\"), false, ToolAssistanceInputMethod.Mouse));\n if (0 !== this._points.length)\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n this.showPrompt();\n\n if (this._isComplete) {\n AccuDrawHintBuilder.deactivate();\n return;\n }\n\n if (0 === this._points.length)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setOrigin(this._points[this._points.length - 1]);\n if (this._matrix) {\n if (1 === this._points.length) {\n hints.setMatrix(this._matrix);\n hints.setModeRectangular();\n } else if (this._points.length > 1 && !(this._points[this._points.length - 1].isAlmostEqual(this._points[this._points.length - 2]))) {\n const xVec = Vector3d.createStartEnd(this._points[this._points.length - 2], this._points[this._points.length - 1]);\n const zVec = this._matrix.getColumn(2);\n const matrix = Matrix3d.createRigidFromColumns(xVec, zVec, AxisOrder.XZY);\n if (undefined !== matrix)\n hints.setMatrix(matrix); // Rotate AccuDraw x axis to last segment preserving current up vector...\n }\n }\n hints.setLockZ = true;\n hints.sendHints();\n }\n\n /** @internal */\n protected getShapePoints(cursorPt: Point3d): Point3d[] {\n const points: Point3d[] = [];\n if (undefined === this.targetView || this._points.length < 1)\n return points;\n for (const pt of this._points)\n points.push(pt.clone());\n\n if (this._isComplete || !this._matrix)\n return points;\n\n const normal = this._matrix.getColumn(2);\n let currentPt = AccuDrawHintBuilder.projectPointToPlaneInView(cursorPt, points[0], normal, this.targetView, true);\n if (undefined === currentPt)\n currentPt = cursorPt.clone();\n if (2 === points.length && 0 === (IModelApp.toolAdmin.currentInputState.qualifiers & BeModifierKeys.Control)) {\n const xDir = Vector3d.createStartEnd(points[0], points[1]);\n const xLen = xDir.magnitude();\n xDir.normalizeInPlace();\n const yDir = xDir.crossProduct(normal);\n yDir.normalizeInPlace();\n const cornerPt = AccuDrawHintBuilder.projectPointToLineInView(currentPt, points[1], yDir, this.targetView, true);\n if (undefined !== cornerPt) {\n points.push(cornerPt);\n cornerPt.plusScaled(xDir, -xLen, currentPt);\n }\n }\n points.push(currentPt);\n\n if (points.length > 2)\n points.push(points[0].clone());\n\n return points;\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void {\n if (context.viewport !== this.targetView)\n return;\n\n if (undefined === this._lastMotionPt)\n return;\n const points = this.getShapePoints(this._lastMotionPt);\n if (points.length < 2)\n return;\n\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\n const colorAccHid = colorAccVis.withAlpha(100);\n const fillAccVis = context.viewport.hilite.color.withAlpha(50);\n\n builderAccVis.setSymbology(colorAccVis, fillAccVis, 3);\n builderAccHid.setSymbology(colorAccHid, fillAccVis, 1, LinePixels.Code2);\n\n if (points.length > 2)\n builderAccHid.addShape(points);\n\n builderAccVis.addLineString(points);\n builderAccHid.addLineString(points);\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n\n if (undefined !== this._acceptedMeasurement)\n this._acceptedMeasurement.addDecoration(context);\n if (undefined !== this._marker)\n this._marker.addDecoration(context);\n }\n\n /** @internal */\n public override decorateSuspended(context: DecorateContext): void {\n if (this._isComplete)\n this.decorate(context);\n }\n\n /** @internal */\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (this._points.length > 0 && undefined !== ev.viewport && !this._isComplete) {\n if (undefined !== this._lastMotionPt)\n this._lastMotionPt.setFrom(ev.point);\n else\n this._lastMotionPt = ev.point.clone();\n ev.viewport.invalidateDecorations();\n }\n }\n\n protected async getMarkerToolTip(): Promise<HTMLElement> {\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\n const toolTip = document.createElement(\"div\");\n let toolTipHtml = \"\";\n\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\n if (undefined !== areaFormatterSpec) {\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(this._area, areaFormatterSpec);\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\n }\n const perimeterFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\n if (undefined !== perimeterFormatterSpec) {\n const formattedPerimeter = IModelApp.quantityFormatter.formatQuantity(this._perimeter, perimeterFormatterSpec);\n toolTipHtml += `${translateBold(\"Perimeter\") + formattedPerimeter}<br>`;\n }\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\n if (undefined !== coordFormatterSpec) {\n let pointAdjusted = this._centroid.clone();\n if (isSpatial) {\n const globalOrigin = this.iModel.globalOrigin;\n pointAdjusted = pointAdjusted.minus(globalOrigin);\n }\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\n toolTipHtml += `${translateBold(\"Centroid\") + formattedPointX}, ${formattedPointY}`;\n if (is3d)\n toolTipHtml += `, ${formattedPointZ}`;\n\n toolTipHtml += \"<br>\";\n }\n\n toolTip.innerHTML = toolTipHtml;\n return toolTip;\n }\n\n protected reportMeasurements(): void {\n if (undefined === this._marker)\n return;\n const briefMsg = `${CoreTools.translate(\"Measure.Labels.Area\")}: ${this._marker.label}`;\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\n IModelApp.notifications.outputMessage(msgDetail);\n }\n\n protected async updateTotals(): Promise<void> {\n if (this._points.length < 3)\n return;\n\n const result = PolygonOps.centroidAreaNormal(this._points);\n if (undefined === result)\n return;\n\n this._area = result.a ? result.a : 0.0;\n this._centroid.setFrom(result.origin);\n this._perimeter = 0.0;\n for (let i = 1; i < this._points.length; i++)\n this._perimeter += (this._points[i - 1].distance(this._points[i]));\n\n const toolTip = await this.getMarkerToolTip();\n this._acceptedMeasurement = new MeasureMarker(\"1\", toolTip, this._centroid, Point2d.create(25, 25));\n this._marker = undefined;\n\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\n if (undefined === areaFormatterSpec)\n return;\n const formattedTotalArea = IModelApp.quantityFormatter.formatQuantity(this._area, areaFormatterSpec);\n this._marker = new MeasureLabel(this._centroid, formattedTotalArea);\n\n this.reportMeasurements();\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n\n if (this._isComplete)\n await this.onReinitialize();\n\n if (this._points.length > 1 && !ev.isControlKey) {\n const points = this.getShapePoints(ev.point);\n if (points.length < 3)\n return EventHandled.No;\n\n this._isComplete = true;\n this._points.length = 0;\n for (const pt of points)\n this._points.push(pt);\n\n await this.updateTotals();\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n if (undefined === this._matrix && undefined === (this._matrix = AccuDrawHintBuilder.getContextRotation(this.orientation, this.targetView)))\n return EventHandled.No;\n\n const currPt = ev.point.clone();\n if (this._points.length > 0) {\n const planePt = AccuDrawHintBuilder.projectPointToPlaneInView(currPt, this._points[0], this._matrix.getColumn(2), ev.viewport!, true);\n if (undefined !== planePt)\n currPt.setFrom(planePt);\n }\n\n this._points.push(currPt);\n this.setupAndPromptForNextAction();\n\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onReinitialize(): Promise<void> {\n this._acceptedMeasurement = undefined;\n this._marker = undefined;\n this._isComplete = false;\n this._points.length = 0;\n this._matrix = undefined;\n AccuDrawHintBuilder.deactivate();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (0 === this._points.length || this._isComplete)\n return false;\n\n this._points.pop();\n this.setupAndPromptForNextAction();\n return true;\n }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureAreaByPointsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** Base class for mass properties tools.\n * @public\n */\nexport abstract class MeasureElementTool extends PrimitiveTool {\n /** @internal */\n protected readonly _checkedIds = new Map<Id64String, MassPropertiesResponseProps>();\n /** @internal */\n protected readonly _acceptedIds: Id64Array = [];\n /** @internal */\n protected readonly _acceptedMeasurements: MeasureMarker[] = [];\n /** @internal */\n protected _totalValue: number = 0.0;\n /** @internal */\n protected _totalMarker?: MeasureLabel;\n /** @internal */\n protected _useSelection: boolean = false;\n\n protected abstract getOperation(): MassPropertiesOperation;\n\n /** @internal */\n protected allowView(vp: Viewport) {\n return (MassPropertiesOperation.AccumulateVolumes === this.getOperation() ? vp.view.isSpatialView() : (vp.view.isSpatialView() || vp.view.isDrawingView()));\n }\n\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n /** @internal */\n public override requireWriteableTarget(): boolean { return false; }\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onCleanup() {\n if (0 !== this._acceptedIds.length)\n this.iModel.hilited.remove({ elements: this._acceptedIds });\n }\n\n /** @internal */\n public override async onUnsuspend() { this.showPrompt(); }\n\n /** @internal */\n protected showPrompt(): void {\n const mainMsg = (this._useSelection ? (0 === this._acceptedMeasurements.length ? \"ElementSet.Prompts.ConfirmSelection\" : \"ElementSet.Prompts.InspectResult\") : \"ElementSet.Prompts.IdentifyElement\");\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(mainMsg));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (this._useSelection) {\n if (0 === this._acceptedMeasurements.length) {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptSelection\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptSelection\"), false, ToolAssistanceInputMethod.Mouse));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.RejectSelection\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.RejectSelection\"), false, ToolAssistanceInputMethod.Mouse));\n } else {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\n }\n } else {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Mouse));\n if (0 !== this._acceptedMeasurements.length) {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\n }\n }\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected setupAndPromptForNextAction(): void {\n this._useSelection = (undefined !== this.targetView && this.targetView.iModel.selectionSet.isActive);\n if (!this._useSelection)\n this.initLocateElements();\n this.showPrompt();\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void {\n if (!this.isCompatibleViewport(context.viewport, false))\n return;\n\n this._acceptedMeasurements.forEach((marker) => marker.addDecoration(context));\n if (undefined !== this._totalMarker)\n this._totalMarker.addDecoration(context);\n }\n\n /** @internal */\n public override decorateSuspended(context: DecorateContext): void { this.decorate(context); }\n\n protected reportMeasurements(): void {\n if (undefined === this._totalMarker)\n return;\n let label = \"Measure.Labels.\";\n switch (this.getOperation()) {\n case MassPropertiesOperation.AccumulateLengths:\n label += \"Length\";\n break;\n case MassPropertiesOperation.AccumulateAreas:\n label += \"Area\";\n break;\n case MassPropertiesOperation.AccumulateVolumes:\n label += \"Volume\";\n break;\n default:\n return;\n }\n const briefMsg = `${CoreTools.translate(label)}: ${this._totalMarker.label}`;\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\n IModelApp.notifications.outputMessage(msgDetail);\n }\n\n protected async getMarkerToolTip(responseProps: MassPropertiesResponseProps): Promise<HTMLElement> {\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\n const toolTip = document.createElement(\"div\");\n let toolTipHtml = \"\";\n\n switch (this.getOperation()) {\n case MassPropertiesOperation.AccumulateLengths: {\n const distanceFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\n if (undefined !== distanceFormatterSpec) {\n const formattedLength = IModelApp.quantityFormatter.formatQuantity(responseProps.length ? responseProps.length : 0, distanceFormatterSpec);\n toolTipHtml += `${translateBold(\"Length\") + formattedLength}<br>`;\n }\n break;\n }\n case MassPropertiesOperation.AccumulateAreas: {\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\n if (undefined !== areaFormatterSpec) {\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(responseProps.area ? responseProps.area : 0, areaFormatterSpec);\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\n }\n if (responseProps.perimeter) {\n const perimeterFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\n if (undefined !== perimeterFormatterSpec) {\n const formattedPerimeter = IModelApp.quantityFormatter.formatQuantity(responseProps.perimeter, perimeterFormatterSpec);\n toolTipHtml += `${translateBold(\"Perimeter\") + formattedPerimeter}<br>`;\n }\n }\n break;\n }\n case MassPropertiesOperation.AccumulateVolumes: {\n const volumeFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Volume);\n if (undefined !== volumeFormatterSpec) {\n const formattedVolume = IModelApp.quantityFormatter.formatQuantity(responseProps.volume ? responseProps.volume : 0, volumeFormatterSpec);\n toolTipHtml += `${translateBold(\"Volume\") + formattedVolume}<br>`;\n }\n if (responseProps.area) {\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\n if (undefined !== areaFormatterSpec) {\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(responseProps.area, areaFormatterSpec);\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\n }\n }\n break;\n }\n }\n\n if (responseProps.centroid) {\n const coordFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Coordinate);\n if (undefined !== coordFormatterSpec) {\n let pointAdjusted = Point3d.fromJSON(responseProps.centroid);\n if (isSpatial) {\n const globalOrigin = this.iModel.globalOrigin;\n pointAdjusted = pointAdjusted.minus(globalOrigin);\n }\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\n toolTipHtml += `${translateBold(\"Centroid\") + formattedPointX}, ${formattedPointY}`;\n if (is3d)\n toolTipHtml += `, ${formattedPointZ}`;\n toolTipHtml += \"<br>\";\n }\n }\n\n toolTip.innerHTML = toolTipHtml;\n return toolTip;\n }\n\n private getResultValue(operation: MassPropertiesOperation, result: MassPropertiesResponseProps): number {\n switch (operation) {\n case MassPropertiesOperation.AccumulateLengths:\n return (result.length ? result.length : 0.0);\n case MassPropertiesOperation.AccumulateAreas:\n return (result.area ? result.area : 0.0);\n case MassPropertiesOperation.AccumulateVolumes:\n return (result.volume ? result.volume : 0.0);\n }\n }\n\n protected async updateTotals(selectionSetResult?: MassPropertiesResponseProps): Promise<void> {\n this._totalValue = 0.0;\n this._totalMarker = undefined;\n\n let labelPt;\n const operation = this.getOperation();\n if (undefined !== selectionSetResult) {\n labelPt = Point3d.fromJSON(selectionSetResult.centroid);\n this._totalValue += this.getResultValue(operation, selectionSetResult);\n } else if (0 !== this._acceptedIds.length) {\n for (const id of this._acceptedIds) {\n const result = this._checkedIds.get(id);\n if (undefined === result)\n continue;\n labelPt = Point3d.fromJSON(result.centroid);\n this._totalValue += this.getResultValue(operation, result);\n }\n }\n if (0.0 === this._totalValue || undefined === labelPt)\n return;\n\n switch (operation) {\n case MassPropertiesOperation.AccumulateLengths:\n const distanceFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Length);\n if (undefined === distanceFormatterSpec)\n return;\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(this._totalValue, distanceFormatterSpec);\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalDistance);\n break;\n case MassPropertiesOperation.AccumulateAreas:\n const areaFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Area);\n if (undefined === areaFormatterSpec)\n return;\n const formattedTotalArea = IModelApp.quantityFormatter.formatQuantity(this._totalValue, areaFormatterSpec);\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalArea);\n break;\n case MassPropertiesOperation.AccumulateVolumes:\n const volumeFormatterSpec = await IModelApp.quantityFormatter.getFormatterSpecByQuantityType(QuantityType.Volume);\n if (undefined === volumeFormatterSpec)\n return;\n const formattedTotalVolume = IModelApp.quantityFormatter.formatQuantity(this._totalValue, volumeFormatterSpec);\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalVolume);\n break;\n }\n\n this.reportMeasurements();\n }\n\n /** @internal */\n public async doMeasureSelectedElements(viewport: Viewport): Promise<void> {\n const candidates: Id64Array = [];\n viewport.iModel.selectionSet.elements.forEach((val) => {\n if (!Id64.isInvalid(val) && !Id64.isTransient(val))\n candidates.push(val);\n });\n\n if (0 === candidates.length)\n return;\n\n const requestProps: MassPropertiesRequestProps = {\n operation: this.getOperation(),\n candidates,\n };\n const result = await this.iModel.getMassProperties(requestProps);\n if (BentleyStatus.SUCCESS !== result.status)\n return;\n\n const toolTip = await this.getMarkerToolTip(result);\n const point = Point3d.fromJSON(result.centroid);\n const marker = new MeasureMarker((this._acceptedMeasurements.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\n\n this._acceptedMeasurements.push(marker);\n await this.updateTotals(result);\n this.setupAndPromptForNextAction();\n\n if (undefined !== viewport)\n viewport.invalidateDecorations();\n }\n\n /** @internal */\n public override async filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus> {\n if (!hit.isElementHit)\n return LocateFilterStatus.Reject;\n\n let result = this._checkedIds.get(hit.sourceId);\n if (undefined === result) {\n const requestProps: MassPropertiesRequestProps = {\n operation: this.getOperation(),\n candidates: [hit.sourceId],\n };\n result = await this.iModel.getMassProperties(requestProps);\n this._checkedIds.set(hit.sourceId, result);\n }\n\n return (BentleyStatus.SUCCESS === result.status ? LocateFilterStatus.Accept : LocateFilterStatus.Reject);\n }\n\n /** @internal */\n public override async onReinitialize(): Promise<void> {\n if (this._useSelection)\n return this.exitTool();\n return this.onRestartTool();\n }\n\n /** @internal */\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (this._useSelection) {\n if (0 === this._acceptedMeasurements.length && undefined !== ev.viewport) {\n await this.doMeasureSelectedElements(ev.viewport);\n if (0 !== this._acceptedMeasurements.length)\n return EventHandled.Yes;\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, CoreTools.translate(\"ElementSet.Error.NotSupportedElmType\")));\n await this.onReinitialize();\n }\n return EventHandled.Yes;\n }\n\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\n if (undefined === hit || !hit.isElementHit)\n return EventHandled.No;\n\n const result = this._checkedIds.get(hit.sourceId);\n if (undefined === result)\n return EventHandled.No;\n if (-1 !== this._acceptedIds.indexOf(hit.sourceId))\n return EventHandled.Yes; // Already accepted, not rejected in filterHit to avoid showing \"not\" cursor...\n\n const toolTip = await this.getMarkerToolTip(result);\n const point = result.centroid ? Point3d.fromJSON(result.centroid) : ev.point.clone();\n const marker = new MeasureMarker((this._acceptedMeasurements.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\n\n this._acceptedMeasurements.push(marker);\n this._acceptedIds.push(hit.sourceId);\n this.iModel.hilited.add({ elements: hit.sourceId });\n\n await this.updateTotals();\n this.setupAndPromptForNextAction();\n\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (0 === this._acceptedMeasurements.length)\n return false;\n\n this._acceptedMeasurements.pop();\n if (0 === this._acceptedMeasurements.length) {\n await this.onReinitialize();\n } else {\n if (0 !== this._acceptedIds.length) {\n this.iModel.hilited.remove({ elements: this._acceptedIds[this._acceptedIds.length - 1] });\n this._acceptedIds.pop();\n }\n\n await this.updateTotals();\n this.setupAndPromptForNextAction();\n }\n return true;\n }\n}\n\n/** Report accumulated lengths of selected elements using the current quantity formatter for length.\n * @public\n */\nexport class MeasureLengthTool extends MeasureElementTool {\n public static override toolId = \"Measure.Length\";\n public static override iconSpec = \"icon-measure\";\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateLengths; }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureLengthTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** Report accumulated areas of selected elements using the current quantity formatter for area.\n * @public\n */\nexport class MeasureAreaTool extends MeasureElementTool {\n public static override toolId = \"Measure.Area\";\n public static override iconSpec = \"icon-measure-area\";\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateAreas; }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureAreaTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** Report accumulated volumes of selected elements using the current quantity formatter for volume.\n * @public\n */\nexport class MeasureVolumeTool extends MeasureElementTool {\n public static override toolId = \"Measure.Volume\";\n public static override iconSpec = \"icon-measure-3d\";\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateVolumes; }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureVolumeTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n"]}
1
+ {"version":3,"file":"MeasureTool.js","sourceRoot":"","sources":["../../../src/tools/MeasureTool.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Measure\n */\n\nimport { BentleyStatus, Id64, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { AxisOrder, IModelJson, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d, PointString3d, PolygonOps, Vector3d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\nimport { ColorDef, GeometryStreamProps, LinePixels, MassPropertiesOperation, MassPropertiesRequestProps, MassPropertiesResponseProps } from \"@itwin/core-common\";\nimport { DialogItem, DialogItemValue, DialogPropertySyncItem, PropertyDescription } from \"@itwin/appui-abstract\";\nimport { AccuDrawHintBuilder, ContextRotationId } from \"../AccuDraw\";\nimport { LocateFilterStatus, LocateResponse } from \"../ElementLocateManager\";\nimport { HitDetail, HitGeomType } from \"../HitDetail\";\nimport { IModelApp } from \"../IModelApp\";\nimport { Marker } from \"../Marker\";\nimport { NotifyMessageDetails, OutputMessagePriority, OutputMessageType } from \"../NotificationManager\";\nimport { CanvasDecoration } from \"../render/CanvasDecoration\";\nimport { DecorateContext } from \"../ViewContext\";\nimport { Viewport } from \"../Viewport\";\nimport { PrimitiveTool } from \"./PrimitiveTool\";\nimport { BeButtonEvent, BeModifierKeys, CoreTools, EventHandled, InputSource } from \"./Tool\";\nimport { ToolAssistance, ToolAssistanceImage, ToolAssistanceInputMethod, ToolAssistanceInstruction, ToolAssistanceSection } from \"./ToolAssistance\";\nimport { GraphicType } from \"../common/render/GraphicType\";\nimport { FormatterSpec } from \"@itwin/core-quantity\";\n\nfunction translateBold(key: string) {\n return `<b>${CoreTools.translate(`Measure.Labels.${key}`)}:</b> `;\n}\n\nasync function getFormatterSpecByKoQAndPersistenceUnit(koq: string, persistenceUnitName: string): Promise<FormatterSpec | undefined> {\n const formatProps = await IModelApp.formatsProvider.getFormat(koq);\n if (undefined === formatProps)\n return undefined;\n return IModelApp.quantityFormatter.createFormatterSpec({\n persistenceUnitName,\n formatProps,\n formatName: koq\n });\n}\n\n/** @internal */\nclass MeasureLabel implements CanvasDecoration {\n public worldLocation = new Point3d();\n public position = new Point3d();\n public label: string;\n\n constructor(worldLocation: XYAndZ, label: string) {\n this.worldLocation.setFrom(worldLocation);\n this.label = label;\n }\n\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\n ctx.font = \"16px sans-serif\";\n const labelHeight = ctx.measureText(\"M\").width; // Close enough for border padding...\n const labelWidth = ctx.measureText(this.label).width + labelHeight;\n\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"white\";\n ctx.fillStyle = \"rgba(0,0,0,.4)\";\n ctx.shadowColor = \"black\";\n ctx.shadowBlur = 10;\n ctx.fillRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\n ctx.strokeRect(-(labelWidth / 2), -labelHeight, labelWidth, labelHeight * 2);\n\n ctx.fillStyle = \"white\";\n ctx.shadowBlur = 0;\n ctx.textAlign = \"center\";\n ctx.textBaseline = \"middle\";\n ctx.fillText(this.label, 0, 0);\n }\n\n public setPosition(vp: Viewport): boolean {\n vp.worldToView(this.worldLocation, this.position);\n this.position.y -= Math.floor(vp.pixelsFromInches(0.44)) + 0.5; // Offset from snap location...\n return vp.viewRect.containsPoint(this.position);\n }\n\n public addDecoration(context: DecorateContext) {\n if (this.setPosition(context.viewport))\n context.addCanvasDecoration(this);\n }\n}\n\n/** @internal */\nclass MeasureMarker extends Marker {\n public isSelected: boolean = false;\n constructor(label: string, title: HTMLElement, worldLocation: XYAndZ, size: XAndY) {\n super(worldLocation, size);\n\n const markerDrawFunc = (ctx: CanvasRenderingContext2D) => {\n ctx.beginPath();\n ctx.arc(0, 0, this.size.x * 0.5, 0, 2 * Math.PI);\n ctx.lineWidth = 2;\n ctx.strokeStyle = \"black\";\n const hilite = this.isSelected && this._hiliteColor ? this._hiliteColor.colors : undefined;\n ctx.fillStyle = undefined !== hilite ? `rgba(${hilite.r | 0},${hilite.g | 0},${hilite.b | 0}, 0.5)` : \"rgba(255,255,255,.5)\";\n ctx.fill();\n ctx.stroke();\n };\n\n this.drawFunc = markerDrawFunc;\n this.title = title;\n this.label = label;\n this.labelFont = \"16px sans-serif\";\n this.labelColor = \"black\";\n this.labelMaxWidth = this.size.x * 0.75;\n this.labelOffset = { x: 0, y: -1 };\n }\n\n public override onMouseButton(_ev: BeButtonEvent): boolean { return true; } // Never forward event to active tool...\n\n public override onMouseEnter(ev: BeButtonEvent) {\n super.onMouseEnter(ev);\n if (this.title && InputSource.Touch === ev.inputSource && ev.viewport)\n ev.viewport.openToolTip(this.title, ev.viewPoint, this.tooltipOptions);\n }\n\n public override onMouseLeave() {\n super.onMouseLeave();\n if (this.title)\n IModelApp.notifications.clearToolTip(); // Clear tool tip from tap since we won't get a motion event...\n }\n}\n\n/** @internal */\ninterface Location { point: Point3d, adjustedPoint: Point3d, refAxes: Matrix3d }\n/** @internal */\ninterface Segment { distance: number, slope: number, start: Point3d, end: Point3d, delta: Vector3d, adjustedStart: Point3d, adjustedEnd: Point3d, adjustedDelta: Vector3d, refAxes: Matrix3d, marker: MeasureMarker }\n\n/** @internal */\nfunction adjustPoint(ev: BeButtonEvent, segments?: Array<Segment>, locations?: Array<Location>): Point3d {\n // If the point was from a hit we must transform it by the display transform of what got hit.\n const hit = IModelApp.accuSnap.currHit;\n if (!hit || !ev.viewport || !hit.modelId)\n return ev.point;\n\n if (\"0\" !== hit.modelId) {\n const transform = ev.viewport.view.computeDisplayTransform({ modelId: hit.modelId, elementId: hit.sourceId });\n return transform?.multiplyInversePoint3d(ev.point) ?? ev.point;\n }\n\n // Must have snapped to a decoration, so look through previous any segments & locations for a match to get an adjusted point.\n if (segments) {\n for (const seg of segments) {\n if (seg.start.isExactEqual(ev.point))\n return seg.adjustedStart.clone();\n\n if (seg.end.isExactEqual(ev.point))\n return seg.adjustedEnd.clone();\n }\n }\n\n if (locations)\n for (const loc of locations)\n if (loc.point.isExactEqual(ev.point))\n return loc.adjustedPoint.clone();\n\n return ev.point;\n}\n\n/** Report distance between 2 points using current quantity formatter for length.\n * @public\n */\nexport class MeasureDistanceTool extends PrimitiveTool {\n public static override toolId = \"Measure.Distance\";\n public static override iconSpec = \"icon-measure-distance\";\n /** @internal */\n protected readonly _locationData = new Array<Location>();\n /** @internal */\n protected readonly _acceptedSegments = new Array<Segment>();\n /** @internal */\n protected _totalDistance: number = 0.0;\n /** @internal */\n protected _totalDistanceMarker?: MeasureLabel;\n /** @internal */\n protected _snapGeomId?: string;\n /** @internal */\n protected _lastMotionPt?: Point3d;\n /** @internal */\n protected _lastMotionAdjustedPt?: Point3d;\n /** @internal */\n protected _lengthFormatterSpec?: FormatterSpec;\n /** @internal */\n protected _angleFormatterSpec?: FormatterSpec;\n /** @internal */\n protected _removeFormatterListener?: () => void;\n\n /** @internal */\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n /** @internal */\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\n /** @internal */\n public override requireWriteableTarget(): boolean { return false; }\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n this._lengthFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.LENGTH\", \"Units.M\");\n this._angleFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.ANGLE\", \"Units.RAD\");\n\n\n this._removeFormatterListener = IModelApp.formatsProvider.onFormatsChanged.addListener(async (args) => {\n if (args.formatsChanged === \"all\" || args.formatsChanged.includes(\"AecUnits.LENGTH\"))\n this._lengthFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.LENGTH\", \"Units.M\");\n\n if (args.formatsChanged === \"all\" || args.formatsChanged.includes(\"AecUnits.ANGLE\"))\n this._angleFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.ANGLE\", \"Units.RAD\");\n });\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onCleanup(): Promise<void> {\n if (this._removeFormatterListener) {\n this._removeFormatterListener();\n this._removeFormatterListener = undefined;\n }\n\n await super.onCleanup();\n }\n\n /** @internal */\n public override async onUnsuspend() { this.showPrompt(); }\n\n /** @internal */\n protected showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(0 === this._locationData.length ? \"Measure.Distance.Prompts.FirstPoint\" : \"Measure.Distance.Prompts.NextPoint\"));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\n if (0 === this._locationData.length) {\n if (this._acceptedSegments.length > 0) {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\n }\n } else {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Cancel\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Cancel\"), false, ToolAssistanceInputMethod.Mouse));\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AdditionalPoint\"), false, ToolAssistanceInputMethod.Mouse));\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\n }\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n const hints = new AccuDrawHintBuilder();\n hints.enableSmartRotation = true;\n hints.setModeRectangular();\n hints.sendHints(false);\n IModelApp.toolAdmin.setCursor(0 === this._locationData.length ? IModelApp.viewManager.crossHairCursor : IModelApp.viewManager.dynamicsCursor);\n this.showPrompt();\n }\n\n /** @internal */\n public override testDecorationHit(id: string): boolean { return id === this._snapGeomId; }\n\n /** @internal */\n protected getSnapPoints(): Point3d[] | undefined {\n if (this._acceptedSegments.length < 1 && this._locationData.length < 2)\n return undefined;\n\n const snapPoints: Point3d[] = [];\n for (const seg of this._acceptedSegments) {\n if (0 === snapPoints.length || !seg.start.isAlmostEqual(snapPoints[snapPoints.length - 1]))\n snapPoints.push(seg.start);\n if (!seg.end.isAlmostEqual(snapPoints[0]))\n snapPoints.push(seg.end);\n }\n\n if (this._locationData.length > 1)\n for (const loc of this._locationData)\n snapPoints.push(loc.point);\n return snapPoints;\n }\n\n /** @internal */\n public override getDecorationGeometry(_hit: HitDetail): GeometryStreamProps | undefined {\n const snapPoints = this.getSnapPoints();\n if (undefined === snapPoints)\n return undefined;\n const geomData = IModelJson.Writer.toIModelJson(PointString3d.create(snapPoints));\n return (undefined === geomData ? undefined : [geomData]);\n }\n\n /** @internal */\n protected displayDynamicDistance(context: DecorateContext, points: Point3d[], adjustedPoints: Point3d[]): void {\n let totalDistance = 0.0;\n for (let i = 0; i < adjustedPoints.length - 1; i++)\n totalDistance += adjustedPoints[i].distance(adjustedPoints[i + 1]);\n if (0.0 === totalDistance)\n return;\n\n const formatterSpec = this._lengthFormatterSpec;\n if (formatterSpec === undefined)\n return;\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(totalDistance, formatterSpec);\n const distDyn = new MeasureLabel(points[points.length - 1], formattedTotalDistance);\n distDyn.addDecoration(context);\n }\n\n /** @internal */\n protected displayDelta(context: DecorateContext, seg: any): void {\n const xVec = new Vector3d(seg.delta.x, 0.0, 0.0);\n const yVec = new Vector3d(0.0, seg.delta.y, 0.0);\n const zVec = new Vector3d(0.0, 0.0, seg.delta.z);\n\n seg.refAxes.multiplyVectorInPlace(xVec);\n seg.refAxes.multiplyVectorInPlace(yVec);\n seg.refAxes.multiplyVectorInPlace(zVec);\n\n const builderAxes = context.createGraphicBuilder(GraphicType.WorldOverlay);\n let basePt = seg.start.clone();\n\n if (xVec.magnitude() > 1.0e-5) {\n const segPoints: Point3d[] = [];\n segPoints.push(basePt);\n basePt = basePt.plus(xVec);\n segPoints.push(basePt);\n const colorX = ColorDef.red.adjustedForContrast(context.viewport.view.backgroundColor);\n builderAxes.setSymbology(colorX, ColorDef.black, 5);\n builderAxes.addLineString(segPoints);\n }\n\n if (yVec.magnitude() > 1.0e-5) {\n const segPoints: Point3d[] = [];\n segPoints.push(basePt);\n basePt = basePt.plus(yVec);\n segPoints.push(basePt);\n const colorY = ColorDef.green.adjustedForContrast(context.viewport.view.backgroundColor);\n builderAxes.setSymbology(colorY, ColorDef.black, 5);\n builderAxes.addLineString(segPoints);\n }\n\n if (zVec.magnitude() > 1.0e-5) {\n const segPoints: Point3d[] = [];\n segPoints.push(basePt);\n basePt = basePt.plus(zVec);\n segPoints.push(basePt);\n const colorZ = ColorDef.blue.adjustedForContrast(context.viewport.view.backgroundColor);\n builderAxes.setSymbology(colorZ, ColorDef.black, 5);\n builderAxes.addLineString(segPoints);\n }\n\n const segGlow = context.viewport.hilite.color.withAlpha(50);\n builderAxes.setSymbology(segGlow, ColorDef.black, 8);\n builderAxes.addLineString([seg.start, seg.end]);\n\n context.addDecorationFromBuilder(builderAxes);\n }\n\n /** @internal */\n protected createDecorations(context: DecorateContext, isSuspended: boolean): void {\n if (!this.isCompatibleViewport(context.viewport, false))\n return;\n\n if (!isSuspended && this._locationData.length > 0 && undefined !== this._lastMotionPt && undefined !== this._lastMotionAdjustedPt) {\n const tmpPoints: Point3d[] = [];\n const tmpAdjustedPoints: Point3d[] = [];\n for (const loc of this._locationData) {\n tmpPoints.push(loc.point); // Deep copy not necessary...\n tmpAdjustedPoints.push(loc.adjustedPoint);\n }\n tmpPoints.push(this._lastMotionPt);\n tmpAdjustedPoints.push(this._lastMotionAdjustedPt);\n\n const builderDynVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const colorDynVis = context.viewport.hilite.color;\n\n builderDynVis.setSymbology(colorDynVis, ColorDef.black, 3);\n builderDynVis.addLineString(tmpPoints);\n\n context.addDecorationFromBuilder(builderDynVis);\n\n const builderDynHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorDynHid = colorDynVis.withAlpha(100);\n\n builderDynHid.setSymbology(colorDynHid, ColorDef.black, 1, LinePixels.Code2);\n builderDynHid.addLineString(tmpPoints);\n\n context.addDecorationFromBuilder(builderDynHid);\n this.displayDynamicDistance(context, tmpPoints, tmpAdjustedPoints);\n }\n\n if (this._acceptedSegments.length > 0) {\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\n const colorAccHid = colorAccVis.withAlpha(100);\n\n builderAccVis.setSymbology(colorAccVis, ColorDef.black, 3);\n builderAccHid.setSymbology(colorAccHid, ColorDef.black, 1, LinePixels.Code2);\n\n for (const seg of this._acceptedSegments) {\n builderAccVis.addLineString([seg.start, seg.end]);\n builderAccHid.addLineString([seg.start, seg.end]);\n seg.marker.addDecoration(context);\n if (seg.marker.isSelected)\n this.displayDelta(context, seg);\n }\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n }\n\n if (undefined !== this._totalDistanceMarker)\n this._totalDistanceMarker.addDecoration(context);\n\n const snapPoints = this.getSnapPoints();\n if (undefined === snapPoints)\n return;\n\n if (undefined === this._snapGeomId)\n this._snapGeomId = this.iModel.transientIds.getNext();\n\n const builderSnapPts = context.createGraphicBuilder(GraphicType.WorldOverlay, undefined, this._snapGeomId);\n const colorAccPts = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\n\n builderSnapPts.setSymbology(colorAccPts, ColorDef.black, 7);\n builderSnapPts.addPointString(snapPoints);\n\n context.addDecorationFromBuilder(builderSnapPts);\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void { this.createDecorations(context, false); }\n /** @internal */\n public override decorateSuspended(context: DecorateContext): void { this.createDecorations(context, true); }\n\n /** @internal */\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (this._locationData.length > 0 && undefined !== ev.viewport) {\n const point = ev.point;\n const adjustedPoint = adjustPoint(ev, this._acceptedSegments, this._locationData);\n if (undefined !== this._lastMotionPt) {\n this._lastMotionPt.setFrom(point);\n this._lastMotionAdjustedPt?.setFrom(adjustedPoint);\n } else {\n this._lastMotionPt = point.clone();\n this._lastMotionAdjustedPt = adjustedPoint;\n }\n ev.viewport.invalidateDecorations();\n }\n }\n\n protected reportMeasurements(): void {\n if (undefined === this._totalDistanceMarker)\n return;\n const briefMsg = `${CoreTools.translate(this._acceptedSegments.length > 1 ? \"Measure.Labels.CumulativeDistance\" : \"Measure.Labels.Distance\")}: ${this._totalDistanceMarker.label}`;\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\n IModelApp.notifications.outputMessage(msgDetail);\n }\n\n protected async updateTotals(): Promise<void> {\n this._totalDistance = 0.0;\n this._totalDistanceMarker = undefined;\n for (const seg of this._acceptedSegments)\n this._totalDistance += seg.distance;\n if (0.0 === this._totalDistance)\n return;\n\n const formatterSpec = this._lengthFormatterSpec;\n if (undefined === formatterSpec)\n return;\n\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(this._totalDistance, formatterSpec);\n this._totalDistanceMarker = new MeasureLabel(this._acceptedSegments[this._acceptedSegments.length - 1].end, formattedTotalDistance);\n this.reportMeasurements();\n }\n\n protected async getMarkerToolTip(distance: number, slope: number, start: Point3d, end: Point3d, delta?: Vector3d): Promise<HTMLElement> {\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\n const toolTip = document.createElement(\"div\");\n\n\n const distanceFormatterSpec = this._lengthFormatterSpec;\n if (undefined === distanceFormatterSpec)\n return toolTip;\n\n let toolTipHtml = \"\";\n const formattedDistance = IModelApp.quantityFormatter.formatQuantity(distance, distanceFormatterSpec);\n toolTipHtml += `${translateBold(\"Distance\") + formattedDistance}<br>`;\n\n if (is3d) {\n const angleFormatterSpec = this._angleFormatterSpec;\n if (undefined !== angleFormatterSpec) {\n const formattedSlope = IModelApp.quantityFormatter.formatQuantity(slope, angleFormatterSpec);\n toolTipHtml += `${translateBold(\"Slope\") + formattedSlope}<br>`;\n }\n }\n\n const coordFormatterSpec = this._lengthFormatterSpec;\n\n if (undefined !== coordFormatterSpec) {\n let startAdjusted = start;\n let endAdjusted = end;\n if (isSpatial) {\n const globalOrigin = this.iModel.globalOrigin;\n startAdjusted = startAdjusted.minus(globalOrigin);\n endAdjusted = endAdjusted.minus(globalOrigin);\n }\n\n {\n const formattedStartX = IModelApp.quantityFormatter.formatQuantity(startAdjusted.x, coordFormatterSpec);\n const formattedStartY = IModelApp.quantityFormatter.formatQuantity(startAdjusted.y, coordFormatterSpec);\n const formattedStartZ = IModelApp.quantityFormatter.formatQuantity(startAdjusted.z, coordFormatterSpec);\n toolTipHtml += `${translateBold(\"StartCoord\") + formattedStartX}, ${formattedStartY}`;\n if (is3d)\n toolTipHtml += `, ${formattedStartZ}`;\n toolTipHtml += \"<br>\";\n }\n const formattedEndX = IModelApp.quantityFormatter.formatQuantity(endAdjusted.x, coordFormatterSpec);\n const formattedEndY = IModelApp.quantityFormatter.formatQuantity(endAdjusted.y, coordFormatterSpec);\n const formattedEndZ = IModelApp.quantityFormatter.formatQuantity(endAdjusted.z, coordFormatterSpec);\n toolTipHtml += `${translateBold(\"EndCoord\") + formattedEndX}, ${formattedEndY}`;\n if (is3d)\n toolTipHtml += `, ${formattedEndZ}`;\n toolTipHtml += \"<br>\";\n }\n\n if (undefined !== delta) {\n const formattedDeltaX = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.x), distanceFormatterSpec);\n const formattedDeltaY = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.y), distanceFormatterSpec);\n const formattedDeltaZ = IModelApp.quantityFormatter.formatQuantity(Math.abs(delta.z), distanceFormatterSpec);\n toolTipHtml += `${translateBold(\"Delta\") + formattedDeltaX}, ${formattedDeltaY}`;\n if (is3d)\n toolTipHtml += `, ${formattedDeltaZ}`;\n toolTipHtml += \"<br>\";\n }\n\n toolTip.innerHTML = toolTipHtml;\n return toolTip;\n }\n\n /** @internal */\n protected async updateSelectedMarkerToolTip(seg: any, ev: BeButtonEvent, reopenToolTip: boolean): Promise<void> {\n seg.marker.title = await this.getMarkerToolTip(seg.distance, seg.slope, seg.adjustedStart, seg.adjustedEnd, seg.marker.isSelected ? seg.adjustedDelta : undefined);\n if (!reopenToolTip || undefined === ev.viewport || !IModelApp.notifications.isToolTipOpen)\n return;\n IModelApp.notifications.clearToolTip();\n ev.viewport.openToolTip(seg.marker.title, ev.viewPoint);\n }\n\n /** @internal */\n protected async acceptNewSegments(): Promise<void> {\n if (this._locationData.length > 1) {\n for (let i = 0; i <= this._locationData.length - 2; i++) {\n const adjustedStart = this._locationData[i].adjustedPoint;\n const adjustedEnd = this._locationData[i + 1].adjustedPoint;\n const distance = adjustedStart.distance(adjustedEnd);\n const xyDist = adjustedStart.distanceXY(adjustedEnd);\n const zDist = adjustedEnd.z - adjustedStart.z;\n const slope = (0.0 === xyDist ? Math.PI : Math.atan(zDist / xyDist));\n const adjustedDelta = Vector3d.createStartEnd(adjustedStart, adjustedEnd);\n const refAxes = this._locationData[i].refAxes;\n refAxes.multiplyTransposeVectorInPlace(adjustedDelta);\n const start = this._locationData[i].point;\n const end = this._locationData[i + 1].point;\n const delta = Vector3d.createStartEnd(start, end);\n refAxes.multiplyTransposeVectorInPlace(delta);\n\n const toolTip = await this.getMarkerToolTip(distance, slope, adjustedStart, adjustedEnd);\n const marker = new MeasureMarker((this._acceptedSegments.length + 1).toString(), toolTip, start.interpolate(0.5, end), Point2d.create(25, 25));\n\n const segMarkerButtonFunc = (ev: BeButtonEvent) => {\n if (ev.isDown)\n return true;\n\n let selectedMarker: MeasureMarker | undefined;\n let pickedMarker: MeasureMarker | undefined;\n for (const seg of this._acceptedSegments) {\n if (!seg.marker.pick(ev.viewPoint))\n continue;\n selectedMarker = (seg.marker.isSelected ? undefined : seg.marker);\n pickedMarker = seg.marker;\n break;\n }\n\n for (const seg of this._acceptedSegments) {\n const wasSelected = seg.marker.isSelected;\n seg.marker.isSelected = (seg.marker === selectedMarker);\n if (wasSelected !== seg.marker.isSelected)\n this.updateSelectedMarkerToolTip(seg, ev, (seg.marker === pickedMarker)); // eslint-disable-line @typescript-eslint/no-floating-promises\n }\n\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n return true;\n };\n\n marker.onMouseButton = segMarkerButtonFunc;\n this._acceptedSegments.push({ distance, slope, start, end, delta, adjustedStart, adjustedEnd, adjustedDelta, refAxes, marker });\n }\n }\n this._locationData.length = 0;\n await this.updateTotals();\n }\n\n /** @internal */\n protected getReferenceAxes(vp?: Viewport): Matrix3d {\n const refAxes = Matrix3d.createIdentity();\n if (undefined !== vp && vp.isContextRotationRequired)\n vp.getAuxCoordRotation(refAxes);\n return refAxes;\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n const point = ev.point.clone();\n const adjustedPoint = adjustPoint(ev, this._acceptedSegments, this._locationData);\n const refAxes = this.getReferenceAxes(ev.viewport);\n const zDir = refAxes.columnZ();\n const normal = refAxes.columnZ();\n const tangent = refAxes.columnX();\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\n\n // Report xyz delta relative to world up. The surface normal and edge tangent help determine the rotation about z...\n if (undefined !== snap) {\n if (undefined !== snap.primitive) {\n const locDetail = snap.primitive.closestPoint(point, false);\n const snapPlane = Plane3dByOriginAndUnitNormal.create(point, undefined !== snap.normal ? snap.normal : normal);\n if (undefined !== locDetail && (HitGeomType.Segment === snap.geomType || (snapPlane && snap.primitive.isInPlane(snapPlane)))) {\n const locRay = snap.primitive.fractionToPointAndUnitTangent(locDetail.fraction);\n tangent.setFrom(locRay.direction);\n if (undefined !== snap.normal)\n normal.setFrom(snap.normal);\n }\n } else if (undefined !== snap.normal) {\n normal.setFrom(snap.normal);\n }\n }\n\n if (!normal.isParallelTo(zDir, true)) {\n const yDir = zDir.unitCrossProduct(normal);\n if (undefined !== yDir) {\n yDir.unitCrossProduct(zDir, normal);\n Matrix3d.createColumnsInAxisOrder(AxisOrder.ZXY, normal, yDir, zDir, refAxes);\n }\n } else if (!tangent.isParallelTo(zDir, true)) {\n const yDir = zDir.unitCrossProduct(tangent);\n if (undefined !== yDir) {\n yDir.unitCrossProduct(zDir, tangent);\n Matrix3d.createColumnsInAxisOrder(AxisOrder.XYZ, tangent, yDir, zDir, refAxes);\n }\n }\n\n this._locationData.push({ point, adjustedPoint, refAxes });\n\n if (this._locationData.length > 1 && !ev.isControlKey)\n await this.acceptNewSegments();\n this.setupAndPromptForNextAction();\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\n if (0 === this._locationData.length) {\n await this.onReinitialize();\n return EventHandled.No;\n }\n await this.acceptNewSegments();\n this.setupAndPromptForNextAction();\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (0 === this._locationData.length && 0 === this._acceptedSegments.length)\n return false;\n\n if (0 !== this._locationData.length) {\n this._locationData.pop();\n } else if (0 !== this._acceptedSegments.length) {\n this._acceptedSegments.pop();\n }\n\n if (0 === this._locationData.length && 0 === this._acceptedSegments.length) {\n await this.onReinitialize();\n } else {\n await this.updateTotals();\n this.setupAndPromptForNextAction();\n }\n return true;\n }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureDistanceTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** Report spatial coordinate at a point as well as cartographic location for geolocated models using current quantity formatters.\n * @public\n */\nexport class MeasureLocationTool extends PrimitiveTool {\n public static override toolId = \"Measure.Location\";\n public static override iconSpec = \"icon-measure-location\";\n /** @internal */\n protected readonly _acceptedLocations: MeasureMarker[] = [];\n /** @internal */\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n /** @internal */\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\n /** @internal */\n public override requireWriteableTarget(): boolean { return false; }\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onUnsuspend() { this.showPrompt(); }\n\n /** @internal */\n protected showPrompt(): void {\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(\"Measure.Location.Prompts.EnterPoint\"));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptPoint\"), false, ToolAssistanceInputMethod.Mouse));\n if (0 !== this._acceptedLocations.length) {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\n }\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n this.showPrompt();\n }\n\n protected async getMarkerToolTip(point: Point3d): Promise<HTMLElement> {\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\n const toolTip = document.createElement(\"div\");\n\n let toolTipHtml = \"\";\n const coordFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.LENGTH\", \"Units.M\");\n if (undefined !== coordFormatterSpec) {\n let pointAdjusted = point;\n if (isSpatial) {\n const globalOrigin = this.iModel.globalOrigin;\n pointAdjusted = pointAdjusted.minus(globalOrigin);\n }\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\n toolTipHtml += `${translateBold(\"Coordinate\") + formattedPointX}, ${formattedPointY}`;\n if (is3d)\n toolTipHtml += `, ${formattedPointZ}`;\n\n toolTipHtml += \"<br>\";\n }\n\n if (isSpatial) {\n const latLongFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.ANGLE\", \"Units.RAD\");\n if (undefined !== latLongFormatterSpec && undefined !== coordFormatterSpec) {\n try {\n const cartographic = await this.iModel.spatialToCartographic(point);\n const formattedLat = IModelApp.quantityFormatter.formatQuantity(Math.abs(cartographic.latitude), latLongFormatterSpec);\n const formattedLong = IModelApp.quantityFormatter.formatQuantity(Math.abs(cartographic.longitude), latLongFormatterSpec);\n const formattedHeight = IModelApp.quantityFormatter.formatQuantity(cartographic.height, coordFormatterSpec);\n const latDir = CoreTools.translate(cartographic.latitude < 0 ? \"Measure.Labels.S\" : \"Measure.Labels.N\");\n const longDir = CoreTools.translate(cartographic.longitude < 0 ? \"Measure.Labels.W\" : \"Measure.Labels.E\");\n toolTipHtml += `${translateBold(\"LatLong\") + formattedLat + latDir}, ${formattedLong}${longDir}<br>`;\n toolTipHtml += `${translateBold(\"Altitude\") + formattedHeight}<br>`;\n } catch { }\n }\n }\n\n toolTip.innerHTML = toolTipHtml;\n return toolTip;\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void {\n if (!this.isCompatibleViewport(context.viewport, false))\n return;\n\n this._acceptedLocations.forEach((marker) => marker.addDecoration(context));\n }\n /** @internal */\n public override decorateSuspended(context: DecorateContext): void { this.decorate(context); }\n\n protected reportMeasurements(): void {\n if (0 === this._acceptedLocations.length)\n return;\n const briefMsg = this._acceptedLocations[this._acceptedLocations.length - 1].title;\n if (undefined === briefMsg)\n return;\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\n IModelApp.notifications.outputMessage(msgDetail);\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n const point = ev.point.clone();\n const adjustedPoint = adjustPoint(ev);\n const toolTip = await this.getMarkerToolTip(adjustedPoint);\n const marker = new MeasureMarker((this._acceptedLocations.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\n\n this._acceptedLocations.push(marker);\n this.reportMeasurements();\n this.setupAndPromptForNextAction();\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (0 === this._acceptedLocations.length)\n return false;\n\n this._acceptedLocations.pop();\n if (0 === this._acceptedLocations.length) {\n await this.onReinitialize();\n } else {\n this.reportMeasurements();\n this.setupAndPromptForNextAction();\n }\n return true;\n }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureLocationTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** Report area defined by points using current quantity formatter for area.\n * @public\n */\nexport class MeasureAreaByPointsTool extends PrimitiveTool {\n public static override toolId = \"Measure.AreaByPoints\";\n public static override iconSpec = \"icon-measure-2d\";\n /** @internal */\n private _orientationValue: DialogItemValue = { value: ContextRotationId.Top };\n /** @internal */\n protected readonly _points: Point3d[] = [];\n /** @internal */\n protected _matrix?: Matrix3d;\n /** @internal */\n protected _isComplete = false;\n /** @internal */\n protected _area = 0.0;\n /** @internal */\n protected _perimeter = 0.0;\n /** @internal */\n protected _centroid = Point3d.createZero();\n /** @internal */\n protected _marker?: MeasureLabel;\n /** @internal */\n protected _acceptedMeasurement?: MeasureMarker;\n /** @internal */\n protected _lastMotionPt?: Point3d;\n\n /** @internal */\n public get orientation(): ContextRotationId { return this._orientationValue.value as ContextRotationId; }\n public set orientation(option: ContextRotationId) { this._orientationValue.value = option; }\n\n /** @internal */\n protected static _orientationName = \"enumAsOrientation\";\n /** @internal */\n protected static enumAsOrientationMessage(str: string) { return CoreTools.translate(`Settings.Orientation.${str}`); }\n /** @internal */\n protected static _getEnumAsOrientationDescription = (): PropertyDescription => {\n return {\n name: MeasureAreaByPointsTool._orientationName,\n displayLabel: CoreTools.translate(\"Settings.Orientation.Label\"),\n typename: \"enum\",\n enum: {\n choices: [\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Top\"), value: ContextRotationId.Top },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Front\"), value: ContextRotationId.Front },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Left\"), value: ContextRotationId.Left },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Bottom\"), value: ContextRotationId.Bottom },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Back\"), value: ContextRotationId.Back },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Right\"), value: ContextRotationId.Right },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"View\"), value: ContextRotationId.View },\n { label: MeasureAreaByPointsTool.enumAsOrientationMessage(\"Face\"), value: ContextRotationId.Face },\n ],\n },\n };\n };\n\n /** @internal */\n public override supplyToolSettingsProperties(): DialogItem[] | undefined {\n const initialValue = IModelApp.toolAdmin.toolSettingsState.getInitialToolSettingValue(this.toolId, MeasureAreaByPointsTool._orientationName);\n initialValue && (this._orientationValue = initialValue);\n const toolSettings = new Array<DialogItem>();\n toolSettings.push({ value: this._orientationValue, property: MeasureAreaByPointsTool._getEnumAsOrientationDescription(), editorPosition: { rowPriority: 0, columnIndex: 2 } });\n return toolSettings;\n }\n\n /** @internal */\n public override async applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean> {\n if (updatedValue.propertyName === MeasureAreaByPointsTool._orientationName) {\n this._orientationValue = updatedValue.value;\n if (!this._orientationValue)\n return false;\n IModelApp.toolAdmin.toolSettingsState.saveToolSettingProperty(this.toolId, { propertyName: MeasureAreaByPointsTool._orientationName, value: this._orientationValue });\n await this.onReinitialize();\n return true;\n }\n return false;\n }\n\n /** @internal */\n protected allowView(vp: Viewport) { return vp.view.isSpatialView() || vp.view.isDrawingView(); }\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n /** @internal */\n public override isValidLocation(_ev: BeButtonEvent, _isButtonEvent: boolean): boolean { return true; }\n /** @internal */\n public override requireWriteableTarget(): boolean { return false; }\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onUnsuspend() { this.showPrompt(); }\n\n /** @internal */\n protected showPrompt(): void {\n let mainMsg = \"Measure.AreaByPoints.Prompts.\";\n switch (this._points.length) {\n case 0:\n mainMsg += \"FirstPoint\";\n break;\n case 1:\n mainMsg += \"SecondPoint\";\n break;\n case 2:\n mainMsg += \"ThirdPoint\";\n break;\n default:\n mainMsg += this._isComplete ? \"FirstPoint\" : \"NextPoint\";\n break;\n }\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(mainMsg));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n const acceptMsg = CoreTools.translate(this._isComplete ? \"ElementSet.Inputs.Restart\" : \"ElementSet.Inputs.AcceptPoint\");\n if (!ToolAssistance.createTouchCursorInstructions(touchInstructions))\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, acceptMsg, false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, acceptMsg, false, ToolAssistanceInputMethod.Mouse));\n\n const resetMsg = CoreTools.translate(\"ElementSet.Inputs.Restart\");\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, resetMsg, false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, resetMsg, false, ToolAssistanceInputMethod.Mouse));\n\n if (this._points.length > 1)\n mouseInstructions.push(ToolAssistance.createModifierKeyInstruction(ToolAssistance.ctrlKey, ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AdditionalPoint\"), false, ToolAssistanceInputMethod.Mouse));\n if (0 !== this._points.length)\n mouseInstructions.push(ToolAssistance.createKeyboardInstruction(ToolAssistance.createKeyboardInfo([ToolAssistance.ctrlKey, \"Z\"]), CoreTools.translate(\"ElementSet.Inputs.UndoLastPoint\"), false, ToolAssistanceInputMethod.Mouse));\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected setupAndPromptForNextAction(): void {\n IModelApp.accuSnap.enableSnap(true);\n this.showPrompt();\n\n if (this._isComplete) {\n AccuDrawHintBuilder.deactivate();\n return;\n }\n\n if (0 === this._points.length)\n return;\n\n const hints = new AccuDrawHintBuilder();\n hints.setOrigin(this._points[this._points.length - 1]);\n if (this._matrix) {\n if (1 === this._points.length) {\n hints.setMatrix(this._matrix);\n hints.setModeRectangular();\n } else if (this._points.length > 1 && !(this._points[this._points.length - 1].isAlmostEqual(this._points[this._points.length - 2]))) {\n const xVec = Vector3d.createStartEnd(this._points[this._points.length - 2], this._points[this._points.length - 1]);\n const zVec = this._matrix.getColumn(2);\n const matrix = Matrix3d.createRigidFromColumns(xVec, zVec, AxisOrder.XZY);\n if (undefined !== matrix)\n hints.setMatrix(matrix); // Rotate AccuDraw x axis to last segment preserving current up vector...\n }\n }\n hints.setLockZ = true;\n hints.sendHints();\n }\n\n /** @internal */\n protected getShapePoints(cursorPt: Point3d): Point3d[] {\n const points: Point3d[] = [];\n if (undefined === this.targetView || this._points.length < 1)\n return points;\n for (const pt of this._points)\n points.push(pt.clone());\n\n if (this._isComplete || !this._matrix)\n return points;\n\n const normal = this._matrix.getColumn(2);\n let currentPt = AccuDrawHintBuilder.projectPointToPlaneInView(cursorPt, points[0], normal, this.targetView, true);\n if (undefined === currentPt)\n currentPt = cursorPt.clone();\n if (2 === points.length && 0 === (IModelApp.toolAdmin.currentInputState.qualifiers & BeModifierKeys.Control)) {\n const xDir = Vector3d.createStartEnd(points[0], points[1]);\n const xLen = xDir.magnitude();\n xDir.normalizeInPlace();\n const yDir = xDir.crossProduct(normal);\n yDir.normalizeInPlace();\n const cornerPt = AccuDrawHintBuilder.projectPointToLineInView(currentPt, points[1], yDir, this.targetView, true);\n if (undefined !== cornerPt) {\n points.push(cornerPt);\n cornerPt.plusScaled(xDir, -xLen, currentPt);\n }\n }\n points.push(currentPt);\n\n if (points.length > 2)\n points.push(points[0].clone());\n\n return points;\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void {\n if (context.viewport !== this.targetView)\n return;\n\n if (undefined === this._lastMotionPt)\n return;\n const points = this.getShapePoints(this._lastMotionPt);\n if (points.length < 2)\n return;\n\n const builderAccVis = context.createGraphicBuilder(GraphicType.WorldDecoration);\n const builderAccHid = context.createGraphicBuilder(GraphicType.WorldOverlay);\n const colorAccVis = ColorDef.white.adjustedForContrast(context.viewport.view.backgroundColor);\n const colorAccHid = colorAccVis.withAlpha(100);\n const fillAccVis = context.viewport.hilite.color.withAlpha(50);\n\n builderAccVis.setSymbology(colorAccVis, fillAccVis, 3);\n builderAccHid.setSymbology(colorAccHid, fillAccVis, 1, LinePixels.Code2);\n\n if (points.length > 2)\n builderAccHid.addShape(points);\n\n builderAccVis.addLineString(points);\n builderAccHid.addLineString(points);\n\n context.addDecorationFromBuilder(builderAccVis);\n context.addDecorationFromBuilder(builderAccHid);\n\n if (undefined !== this._acceptedMeasurement)\n this._acceptedMeasurement.addDecoration(context);\n if (undefined !== this._marker)\n this._marker.addDecoration(context);\n }\n\n /** @internal */\n public override decorateSuspended(context: DecorateContext): void {\n if (this._isComplete)\n this.decorate(context);\n }\n\n /** @internal */\n public override async onMouseMotion(ev: BeButtonEvent): Promise<void> {\n if (this._points.length > 0 && undefined !== ev.viewport && !this._isComplete) {\n if (undefined !== this._lastMotionPt)\n this._lastMotionPt.setFrom(ev.point);\n else\n this._lastMotionPt = ev.point.clone();\n ev.viewport.invalidateDecorations();\n }\n }\n\n protected async getMarkerToolTip(): Promise<HTMLElement> {\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\n const toolTip = document.createElement(\"div\");\n let toolTipHtml = \"\";\n\n const areaFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.AREA\", \"Units.SQ_M\");\n if (undefined !== areaFormatterSpec) {\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(this._area, areaFormatterSpec);\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\n }\n const perimeterFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.LENGTH\", \"Units.M\");\n if (undefined !== perimeterFormatterSpec) {\n const formattedPerimeter = IModelApp.quantityFormatter.formatQuantity(this._perimeter, perimeterFormatterSpec);\n toolTipHtml += `${translateBold(\"Perimeter\") + formattedPerimeter}<br>`;\n }\n const coordFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.LENGTH\", \"Units.M\");\n if (undefined !== coordFormatterSpec) {\n let pointAdjusted = this._centroid.clone();\n if (isSpatial) {\n const globalOrigin = this.iModel.globalOrigin;\n pointAdjusted = pointAdjusted.minus(globalOrigin);\n }\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\n toolTipHtml += `${translateBold(\"Centroid\") + formattedPointX}, ${formattedPointY}`;\n if (is3d)\n toolTipHtml += `, ${formattedPointZ}`;\n\n toolTipHtml += \"<br>\";\n }\n\n toolTip.innerHTML = toolTipHtml;\n return toolTip;\n }\n\n protected reportMeasurements(): void {\n if (undefined === this._marker)\n return;\n const briefMsg = `${CoreTools.translate(\"Measure.Labels.Area\")}: ${this._marker.label}`;\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\n IModelApp.notifications.outputMessage(msgDetail);\n }\n\n protected async updateTotals(): Promise<void> {\n if (this._points.length < 3)\n return;\n\n const result = PolygonOps.centroidAreaNormal(this._points);\n if (undefined === result)\n return;\n\n this._area = result.a ? result.a : 0.0;\n this._centroid.setFrom(result.origin);\n this._perimeter = 0.0;\n for (let i = 1; i < this._points.length; i++)\n this._perimeter += (this._points[i - 1].distance(this._points[i]));\n\n const toolTip = await this.getMarkerToolTip();\n this._acceptedMeasurement = new MeasureMarker(\"1\", toolTip, this._centroid, Point2d.create(25, 25));\n this._marker = undefined;\n\n const areaFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.AREA\", \"Units.SQ_M\");\n if (undefined === areaFormatterSpec)\n return;\n const formattedTotalArea = IModelApp.quantityFormatter.formatQuantity(this._area, areaFormatterSpec);\n this._marker = new MeasureLabel(this._centroid, formattedTotalArea);\n\n this.reportMeasurements();\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined === this.targetView)\n return EventHandled.No;\n\n if (this._isComplete)\n await this.onReinitialize();\n\n if (this._points.length > 1 && !ev.isControlKey) {\n const points = this.getShapePoints(ev.point);\n if (points.length < 3)\n return EventHandled.No;\n\n this._isComplete = true;\n this._points.length = 0;\n for (const pt of points)\n this._points.push(pt);\n\n await this.updateTotals();\n this.setupAndPromptForNextAction();\n return EventHandled.No;\n }\n\n if (undefined === this._matrix && undefined === (this._matrix = AccuDrawHintBuilder.getContextRotation(this.orientation, this.targetView)))\n return EventHandled.No;\n\n const currPt = ev.point.clone();\n if (this._points.length > 0) {\n const vp = ev.viewport;\n const planePt = (vp ? AccuDrawHintBuilder.projectPointToPlaneInView(currPt, this._points[0], this._matrix.getColumn(2), vp, true) : undefined);\n if (undefined !== planePt)\n currPt.setFrom(planePt);\n }\n\n this._points.push(currPt);\n this.setupAndPromptForNextAction();\n\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled> {\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onReinitialize(): Promise<void> {\n this._acceptedMeasurement = undefined;\n this._marker = undefined;\n this._isComplete = false;\n this._points.length = 0;\n this._matrix = undefined;\n AccuDrawHintBuilder.deactivate();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (0 === this._points.length || this._isComplete)\n return false;\n\n this._points.pop();\n this.setupAndPromptForNextAction();\n return true;\n }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureAreaByPointsTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** Base class for mass properties tools.\n * @public\n */\nexport abstract class MeasureElementTool extends PrimitiveTool {\n /** @internal */\n protected readonly _checkedIds = new Map<Id64String, MassPropertiesResponseProps>();\n /** @internal */\n protected readonly _acceptedIds: Id64Array = [];\n /** @internal */\n protected readonly _acceptedMeasurements: MeasureMarker[] = [];\n /** @internal */\n protected _totalValue: number = 0.0;\n /** @internal */\n protected _totalMarker?: MeasureLabel;\n /** @internal */\n protected _useSelection: boolean = false;\n\n protected abstract getOperation(): MassPropertiesOperation;\n\n /** @internal */\n protected allowView(vp: Viewport) {\n return (MassPropertiesOperation.AccumulateVolumes === this.getOperation() ? vp.view.isSpatialView() : (vp.view.isSpatialView() || vp.view.isDrawingView()));\n }\n\n /** @internal */\n public override isCompatibleViewport(vp: Viewport | undefined, isSelectedViewChange: boolean): boolean { return (super.isCompatibleViewport(vp, isSelectedViewChange) && undefined !== vp && this.allowView(vp)); }\n /** @internal */\n public override requireWriteableTarget(): boolean { return false; }\n /** @internal */\n public override async onPostInstall() {\n await super.onPostInstall();\n this.setupAndPromptForNextAction();\n }\n\n /** @internal */\n public override async onCleanup() {\n if (0 !== this._acceptedIds.length)\n this.iModel.hilited.remove({ elements: this._acceptedIds });\n }\n\n /** @internal */\n public override async onUnsuspend() { this.showPrompt(); }\n\n /** @internal */\n protected showPrompt(): void {\n const mainMsg = (this._useSelection ? (0 === this._acceptedMeasurements.length ? \"ElementSet.Prompts.ConfirmSelection\" : \"ElementSet.Prompts.InspectResult\") : \"ElementSet.Prompts.IdentifyElement\");\n const mainInstruction = ToolAssistance.createInstruction(this.iconSpec, CoreTools.translate(mainMsg));\n const mouseInstructions: ToolAssistanceInstruction[] = [];\n const touchInstructions: ToolAssistanceInstruction[] = [];\n\n if (this._useSelection) {\n if (0 === this._acceptedMeasurements.length) {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptSelection\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptSelection\"), false, ToolAssistanceInputMethod.Mouse));\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.RejectSelection\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.RejectSelection\"), false, ToolAssistanceInputMethod.Mouse));\n } else {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Exit\"), false, ToolAssistanceInputMethod.Mouse));\n }\n } else {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.OneTouchTap, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.LeftClick, CoreTools.translate(\"ElementSet.Inputs.AcceptElement\"), false, ToolAssistanceInputMethod.Mouse));\n if (0 !== this._acceptedMeasurements.length) {\n touchInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.TwoTouchTap, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Touch));\n mouseInstructions.push(ToolAssistance.createInstruction(ToolAssistanceImage.RightClick, CoreTools.translate(\"ElementSet.Inputs.Restart\"), false, ToolAssistanceInputMethod.Mouse));\n }\n }\n\n const sections: ToolAssistanceSection[] = [];\n sections.push(ToolAssistance.createSection(mouseInstructions, ToolAssistance.inputsLabel));\n sections.push(ToolAssistance.createSection(touchInstructions, ToolAssistance.inputsLabel));\n\n const instructions = ToolAssistance.createInstructions(mainInstruction, sections);\n IModelApp.notifications.setToolAssistance(instructions);\n }\n\n /** @internal */\n protected setupAndPromptForNextAction(): void {\n this._useSelection = (undefined !== this.targetView && this.targetView.iModel.selectionSet.isActive);\n if (!this._useSelection)\n this.initLocateElements();\n this.showPrompt();\n }\n\n /** @internal */\n public override decorate(context: DecorateContext): void {\n if (!this.isCompatibleViewport(context.viewport, false))\n return;\n\n this._acceptedMeasurements.forEach((marker) => marker.addDecoration(context));\n if (undefined !== this._totalMarker)\n this._totalMarker.addDecoration(context);\n }\n\n /** @internal */\n public override decorateSuspended(context: DecorateContext): void { this.decorate(context); }\n\n protected reportMeasurements(): void {\n if (undefined === this._totalMarker)\n return;\n let label = \"Measure.Labels.\";\n switch (this.getOperation()) {\n case MassPropertiesOperation.AccumulateLengths:\n label += \"Length\";\n break;\n case MassPropertiesOperation.AccumulateAreas:\n label += \"Area\";\n break;\n case MassPropertiesOperation.AccumulateVolumes:\n label += \"Volume\";\n break;\n default:\n return;\n }\n const briefMsg = `${CoreTools.translate(label)}: ${this._totalMarker.label}`;\n const msgDetail = new NotifyMessageDetails(OutputMessagePriority.Info, briefMsg, undefined, OutputMessageType.Sticky);\n IModelApp.notifications.outputMessage(msgDetail);\n }\n\n protected async getMarkerToolTip(responseProps: MassPropertiesResponseProps): Promise<HTMLElement> {\n const is3d = (undefined === this.targetView || this.targetView.view.is3d());\n const isSpatial = (undefined !== this.targetView && this.targetView.view.isSpatialView());\n const toolTip = document.createElement(\"div\");\n let toolTipHtml = \"\";\n\n switch (this.getOperation()) {\n case MassPropertiesOperation.AccumulateLengths: {\n const distanceFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.LENGTH\", \"Units.M\");\n if (undefined !== distanceFormatterSpec) {\n const formattedLength = IModelApp.quantityFormatter.formatQuantity(responseProps.length ? responseProps.length : 0, distanceFormatterSpec);\n toolTipHtml += `${translateBold(\"Length\") + formattedLength}<br>`;\n }\n break;\n }\n case MassPropertiesOperation.AccumulateAreas: {\n const areaFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.AREA\", \"Units.SQ_M\");\n if (undefined !== areaFormatterSpec) {\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(responseProps.area ? responseProps.area : 0, areaFormatterSpec);\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\n }\n if (responseProps.perimeter) {\n const perimeterFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.LENGTH\", \"Units.M\");\n if (undefined !== perimeterFormatterSpec) {\n const formattedPerimeter = IModelApp.quantityFormatter.formatQuantity(responseProps.perimeter, perimeterFormatterSpec);\n toolTipHtml += `${translateBold(\"Perimeter\") + formattedPerimeter}<br>`;\n }\n }\n break;\n }\n case MassPropertiesOperation.AccumulateVolumes: {\n const volumeFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.VOLUME\", \"Units.CUB_M\");\n if (undefined !== volumeFormatterSpec) {\n const formattedVolume = IModelApp.quantityFormatter.formatQuantity(responseProps.volume ? responseProps.volume : 0, volumeFormatterSpec);\n toolTipHtml += `${translateBold(\"Volume\") + formattedVolume}<br>`;\n }\n if (responseProps.area) {\n const areaFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.AREA\", \"Units.SQ_M\");\n if (undefined !== areaFormatterSpec) {\n const formattedArea = IModelApp.quantityFormatter.formatQuantity(responseProps.area, areaFormatterSpec);\n toolTipHtml += `${translateBold(\"Area\") + formattedArea}<br>`;\n }\n }\n break;\n }\n }\n\n if (responseProps.centroid) {\n const coordFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.LENGTH\", \"Units.M\");\n if (undefined !== coordFormatterSpec) {\n let pointAdjusted = Point3d.fromJSON(responseProps.centroid);\n if (isSpatial) {\n const globalOrigin = this.iModel.globalOrigin;\n pointAdjusted = pointAdjusted.minus(globalOrigin);\n }\n const formattedPointX = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.x, coordFormatterSpec);\n const formattedPointY = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.y, coordFormatterSpec);\n const formattedPointZ = IModelApp.quantityFormatter.formatQuantity(pointAdjusted.z, coordFormatterSpec);\n toolTipHtml += `${translateBold(\"Centroid\") + formattedPointX}, ${formattedPointY}`;\n if (is3d)\n toolTipHtml += `, ${formattedPointZ}`;\n toolTipHtml += \"<br>\";\n }\n }\n\n toolTip.innerHTML = toolTipHtml;\n return toolTip;\n }\n\n private getResultValue(operation: MassPropertiesOperation, result: MassPropertiesResponseProps): number {\n switch (operation) {\n case MassPropertiesOperation.AccumulateLengths:\n return (result.length ? result.length : 0.0);\n case MassPropertiesOperation.AccumulateAreas:\n return (result.area ? result.area : 0.0);\n case MassPropertiesOperation.AccumulateVolumes:\n return (result.volume ? result.volume : 0.0);\n }\n }\n\n protected async updateTotals(selectionSetResult?: MassPropertiesResponseProps): Promise<void> {\n this._totalValue = 0.0;\n this._totalMarker = undefined;\n\n let labelPt;\n const operation = this.getOperation();\n if (undefined !== selectionSetResult) {\n labelPt = Point3d.fromJSON(selectionSetResult.centroid);\n this._totalValue += this.getResultValue(operation, selectionSetResult);\n } else if (0 !== this._acceptedIds.length) {\n for (const id of this._acceptedIds) {\n const result = this._checkedIds.get(id);\n if (undefined === result)\n continue;\n labelPt = Point3d.fromJSON(result.centroid);\n this._totalValue += this.getResultValue(operation, result);\n }\n }\n if (0.0 === this._totalValue || undefined === labelPt)\n return;\n\n switch (operation) {\n case MassPropertiesOperation.AccumulateLengths:\n const distanceFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.LENGTH\", \"Units.M\");\n if (undefined === distanceFormatterSpec)\n return;\n const formattedTotalDistance = IModelApp.quantityFormatter.formatQuantity(this._totalValue, distanceFormatterSpec);\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalDistance);\n break;\n case MassPropertiesOperation.AccumulateAreas:\n const areaFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.AREA\", \"Units.SQ_M\");\n if (undefined === areaFormatterSpec)\n return;\n const formattedTotalArea = IModelApp.quantityFormatter.formatQuantity(this._totalValue, areaFormatterSpec);\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalArea);\n break;\n case MassPropertiesOperation.AccumulateVolumes:\n const volumeFormatterSpec = await getFormatterSpecByKoQAndPersistenceUnit(\"AecUnits.VOLUME\", \"Units.CUB_M\");\n\n if (undefined === volumeFormatterSpec)\n return;\n const formattedTotalVolume = IModelApp.quantityFormatter.formatQuantity(this._totalValue, volumeFormatterSpec);\n this._totalMarker = new MeasureLabel(labelPt, formattedTotalVolume);\n break;\n }\n\n this.reportMeasurements();\n }\n\n /** @internal */\n public async doMeasureSelectedElements(viewport: Viewport): Promise<void> {\n const candidates: Id64Array = [];\n viewport.iModel.selectionSet.elements.forEach((val) => {\n if (!Id64.isInvalid(val) && !Id64.isTransient(val))\n candidates.push(val);\n });\n\n if (0 === candidates.length)\n return;\n\n const requestProps: MassPropertiesRequestProps = {\n operation: this.getOperation(),\n candidates,\n };\n const result = await this.iModel.getMassProperties(requestProps);\n if (BentleyStatus.SUCCESS !== result.status)\n return;\n\n const toolTip = await this.getMarkerToolTip(result);\n const point = Point3d.fromJSON(result.centroid);\n const marker = new MeasureMarker((this._acceptedMeasurements.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\n\n this._acceptedMeasurements.push(marker);\n await this.updateTotals(result);\n this.setupAndPromptForNextAction();\n\n if (undefined !== viewport)\n viewport.invalidateDecorations();\n }\n\n /** @internal */\n public override async filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus> {\n if (!hit.isElementHit)\n return LocateFilterStatus.Reject;\n\n let result = this._checkedIds.get(hit.sourceId);\n if (undefined === result) {\n const requestProps: MassPropertiesRequestProps = {\n operation: this.getOperation(),\n candidates: [hit.sourceId],\n };\n result = await this.iModel.getMassProperties(requestProps);\n this._checkedIds.set(hit.sourceId, result);\n }\n\n return (BentleyStatus.SUCCESS === result.status ? LocateFilterStatus.Accept : LocateFilterStatus.Reject);\n }\n\n /** @internal */\n public override async onReinitialize(): Promise<void> {\n if (this._useSelection)\n return this.exitTool();\n return this.onRestartTool();\n }\n\n /** @internal */\n public override async onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled> {\n await this.onReinitialize();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled> {\n if (this._useSelection) {\n if (0 === this._acceptedMeasurements.length && undefined !== ev.viewport) {\n await this.doMeasureSelectedElements(ev.viewport);\n if (0 !== this._acceptedMeasurements.length)\n return EventHandled.Yes;\n IModelApp.notifications.outputMessage(new NotifyMessageDetails(OutputMessagePriority.Error, CoreTools.translate(\"ElementSet.Error.NotSupportedElmType\")));\n await this.onReinitialize();\n }\n return EventHandled.Yes;\n }\n\n const hit = await IModelApp.locateManager.doLocate(new LocateResponse(), true, ev.point, ev.viewport, ev.inputSource);\n if (undefined === hit || !hit.isElementHit)\n return EventHandled.No;\n\n const result = this._checkedIds.get(hit.sourceId);\n if (undefined === result)\n return EventHandled.No;\n if (-1 !== this._acceptedIds.indexOf(hit.sourceId))\n return EventHandled.Yes; // Already accepted, not rejected in filterHit to avoid showing \"not\" cursor...\n\n const toolTip = await this.getMarkerToolTip(result);\n const point = result.centroid ? Point3d.fromJSON(result.centroid) : ev.point.clone();\n const marker = new MeasureMarker((this._acceptedMeasurements.length + 1).toString(), toolTip, point, Point2d.create(25, 25));\n\n this._acceptedMeasurements.push(marker);\n this._acceptedIds.push(hit.sourceId);\n this.iModel.hilited.add({ elements: hit.sourceId });\n\n await this.updateTotals();\n this.setupAndPromptForNextAction();\n\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n return EventHandled.No;\n }\n\n /** @internal */\n public override async onUndoPreviousStep(): Promise<boolean> {\n if (0 === this._acceptedMeasurements.length)\n return false;\n\n this._acceptedMeasurements.pop();\n if (0 === this._acceptedMeasurements.length) {\n await this.onReinitialize();\n } else {\n if (0 !== this._acceptedIds.length) {\n this.iModel.hilited.remove({ elements: this._acceptedIds[this._acceptedIds.length - 1] });\n this._acceptedIds.pop();\n }\n\n await this.updateTotals();\n this.setupAndPromptForNextAction();\n }\n return true;\n }\n}\n\n/** Report accumulated lengths of selected elements using the current quantity formatter for length.\n * @public\n */\nexport class MeasureLengthTool extends MeasureElementTool {\n public static override toolId = \"Measure.Length\";\n public static override iconSpec = \"icon-measure\";\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateLengths; }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureLengthTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** Report accumulated areas of selected elements using the current quantity formatter for area.\n * @public\n */\nexport class MeasureAreaTool extends MeasureElementTool {\n public static override toolId = \"Measure.Area\";\n public static override iconSpec = \"icon-measure-area\";\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateAreas; }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureAreaTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n\n/** Report accumulated volumes of selected elements using the current quantity formatter for volume.\n * @public\n */\nexport class MeasureVolumeTool extends MeasureElementTool {\n public static override toolId = \"Measure.Volume\";\n public static override iconSpec = \"icon-measure-3d\";\n protected getOperation(): MassPropertiesOperation { return MassPropertiesOperation.AccumulateVolumes; }\n\n /** @internal */\n public async onRestartTool(): Promise<void> {\n const tool = new MeasureVolumeTool();\n if (!await tool.run())\n return this.exitTool();\n }\n}\n"]}