@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":"AccuSnap.d.ts","sourceRoot":"","sources":["../../src/AccuSnap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AccuSnap.d.ts","sourceRoot":"","sources":["../../src/AccuSnap.ts"],"names":[],"mappings":"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"}
@@ -426,6 +426,8 @@ export class AccuSnap {
426
426
  this.errorKey = out.reason;
427
427
  this.errorIcon.deactivate();
428
428
  const vp = ev.viewport;
429
+ if (undefined === vp)
430
+ return;
429
431
  let errorSprite;
430
432
  switch (out.snapStatus) {
431
433
  case SnapStatus.FilteredByApp:
@@ -763,7 +765,7 @@ export class AccuSnap {
763
765
  return undefined;
764
766
  const filterStatus = (this.isLocateEnabled ? await IModelApp.locateManager.filterHit(thisHit, LocateAction.AutoLocate, out) : LocateFilterStatus.Accept);
765
767
  if (LocateFilterStatus.Accept !== filterStatus) {
766
- out.snapStatus = SnapStatus.FilteredByApp;
768
+ out.snapStatus = IModelApp.toolAdmin.wantToolTip(thisHit) ? SnapStatus.FilteredByApp : SnapStatus.FilteredByAppQuietly;
767
769
  return undefined;
768
770
  }
769
771
  let snapModes;
@@ -810,8 +812,10 @@ export class AccuSnap {
810
812
  // points not on the grid. This causes them to be "pulled" off the grid when they are accepted. On
811
813
  // the other hand, when NOT locating, we need to use the raw point so we can snap to elements
812
814
  // away from the grid.
813
- const testPoint = this.isLocateEnabled ? ev.point : ev.rawPoint;
814
815
  const vp = ev.viewport;
816
+ if (undefined === vp)
817
+ return SnapStatus.NoElements;
818
+ const testPoint = this.isLocateEnabled ? ev.point : ev.rawPoint;
815
819
  const picker = IModelApp.locateManager.picker;
816
820
  const options = IModelApp.locateManager.options.clone(); // Copy to avoid changing out from under active Tool...
817
821
  // NOTE: Since TestHit will use the same HitSource as the input hit we only need to sets this for DoPick...
@@ -853,6 +857,8 @@ export class AccuSnap {
853
857
  }
854
858
  }
855
859
  const thisList = this.aSnapHits;
860
+ if (undefined === thisList)
861
+ return undefined;
856
862
  let thisHit;
857
863
  let firstRejected;
858
864
  const filterResponse = new LocateResponse();
@@ -864,7 +870,7 @@ export class AccuSnap {
864
870
  if (undefined !== firstRejected)
865
871
  continue;
866
872
  firstRejected = filterResponse.clone();
867
- firstRejected.snapStatus = SnapStatus.FilteredByApp;
873
+ firstRejected.snapStatus = IModelApp.toolAdmin.wantToolTip(thisHit) ? SnapStatus.FilteredByApp : SnapStatus.FilteredByAppQuietly;
868
874
  }
869
875
  if (undefined !== firstRejected)
870
876
  out.setFrom(firstRejected);
@@ -886,7 +892,7 @@ export class AccuSnap {
886
892
  // if we don't have any more candidate hits, get a new list at the current location
887
893
  if (!this.aSnapHits || (0 === this.aSnapHits.length)) {
888
894
  out.snapStatus = this.findHits(ev);
889
- hit = (SnapStatus.Success !== out.snapStatus) ? undefined : await this.getAccuSnapDetail(this.aSnapHits, out);
895
+ hit = (SnapStatus.Success !== out.snapStatus || undefined === this.aSnapHits) ? undefined : await this.getAccuSnapDetail(this.aSnapHits, out);
890
896
  }
891
897
  else {
892
898
  // drop the current hit from the list and then retest the list (without the dropped hit) to find the new snap
@@ -913,13 +919,16 @@ export class AccuSnap {
913
919
  */
914
920
  async onMotion(ev) {
915
921
  this.clearToolTip(ev);
922
+ const vp = ev.viewport;
923
+ if (undefined === vp)
924
+ return;
916
925
  const out = new LocateResponse();
917
926
  out.snapStatus = SnapStatus.Disabled;
918
927
  let hit;
919
928
  if (this.isActive) {
920
929
  if (this._doSnapping) {
921
930
  out.snapStatus = this.findHits(ev);
922
- hit = (SnapStatus.Success !== out.snapStatus) ? undefined : await this.getAccuSnapDetail(this.aSnapHits, out);
931
+ hit = (SnapStatus.Success !== out.snapStatus || undefined === this.aSnapHits) ? undefined : await this.getAccuSnapDetail(this.aSnapHits, out);
923
932
  if (!this._doSnapping)
924
933
  hit = undefined; // Snap no longer requested...
925
934
  }
@@ -934,7 +943,7 @@ export class AccuSnap {
934
943
  this.setCurrHit(hit);
935
944
  // set up active error before calling displayToolTip to indicate error or show locate message...
936
945
  this.showSnapError(out, ev);
937
- this.displayToolTip(ev.viewPoint, ev.viewport, ev.rawPoint);
946
+ this.displayToolTip(ev.viewPoint, vp, ev.rawPoint);
938
947
  if (undefined !== this.touchCursor && InputSource.Mouse === ev.inputSource) {
939
948
  this.touchCursor = undefined;
940
949
  IModelApp.viewManager.invalidateDecorationsAllViews();
@@ -1 +1 @@
1
- {"version":3,"file":"AccuSnap.js","sourceRoot":"","sources":["../../src/AccuSnap.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 LocatingElements\n */\n\nimport { BeDuration, Id64, Id64Arg, Id64Set } from \"@itwin/core-bentley\";\nimport { CurveCurve, CurvePrimitive, GeometryQuery, IModelJson as GeomJson, Point2d, Point3d, Vector3d, XAndY } from \"@itwin/core-geometry\";\nimport { SnapRequestProps } from \"@itwin/core-common\";\nimport { ElementLocateManager, HitListHolder, LocateAction, LocateFilterStatus, LocateResponse, SnapStatus } from \"./ElementLocateManager\";\nimport { HitDetail, HitDetailType, HitGeomType, HitList, HitPriority, HitSource, IntersectDetail, SnapDetail, SnapHeat, SnapMode } from \"./HitDetail\";\nimport { IModelApp } from \"./IModelApp\";\nimport { CanvasDecoration } from \"./render/CanvasDecoration\";\nimport { IconSprites, Sprite, SpriteLocation } from \"./Sprites\";\nimport { BeButton, BeButtonEvent, BeTouchEvent, InputSource } from \"./tools/Tool\";\nimport { ToolSettings } from \"./tools/ToolSettings\";\nimport { DecorateContext } from \"./ViewContext\";\nimport { Decorator } from \"./ViewManager\";\nimport { ScreenViewport, Viewport } from \"./Viewport\";\nimport { _requestSnap } from \"./common/internal/Symbols\";\nimport { AccuDraw, AccuDrawFlags, AccuDrawHintBuilder } from \"./AccuDraw\";\n\n// cspell:ignore dont primitivetools\n\n/** Virtual cursor for using AccuSnap with touch input.\n * @internal\n */\nexport class TouchCursor implements CanvasDecoration {\n public position = new Point3d();\n public viewport: Viewport;\n protected _offsetPosition = new Point3d();\n protected _size: number;\n protected _yOffset: number;\n protected _isSelected = false;\n protected _isDragging = false;\n protected _inTouchTap = false;\n\n protected constructor(vp: ScreenViewport) {\n this._size = vp.pixelsFromInches(0.3);\n this._yOffset = this._size * 1.75;\n this.viewport = vp;\n }\n\n protected setPosition(vp: Viewport, worldLocation: Point3d): boolean {\n const pointNpc = vp.worldToNpc(worldLocation);\n if (pointNpc.z < 0.0 || pointNpc.z > 1.0)\n pointNpc.z = 0.5; // move inside frustum.\n\n const viewLocation = vp.npcToView(pointNpc);\n if (!vp.viewRect.containsPoint(viewLocation))\n return false; // outside this viewport rect\n\n viewLocation.x = Math.floor(viewLocation.x) + 0.5;\n viewLocation.y = Math.floor(viewLocation.y) + 0.5;\n viewLocation.z = 0.0;\n const offsetLocation = new Point3d(viewLocation.x, viewLocation.y - this._yOffset, viewLocation.z);\n if (!vp.viewRect.containsPoint(offsetLocation))\n return false; // outside this viewport rect\n\n this.position.setFrom(viewLocation);\n this._offsetPosition.setFrom(offsetLocation);\n if (vp !== this.viewport) {\n this.viewport.invalidateDecorations();\n this.viewport = vp;\n }\n vp.invalidateDecorations();\n return true;\n }\n\n protected drawHandle(ctx: CanvasRenderingContext2D, filled: boolean): void {\n ctx.beginPath();\n ctx.moveTo(-this._size, 0);\n ctx.bezierCurveTo(-this._size, -this._size * 0.85, -this._size * 0.6, -this._yOffset * 0.6, 0, -this._yOffset * 0.8);\n ctx.bezierCurveTo(this._size * 0.6, -this._yOffset * 0.6, this._size, -this._size * 0.85, this._size, 0);\n ctx.arc(0, 0, this._size, 0, Math.PI);\n if (filled)\n ctx.fill();\n\n ctx.stroke();\n\n ctx.beginPath();\n ctx.arc(0, 0, this._size * 0.75, 0, 2 * Math.PI);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(-this._size * 0.4, 0);\n ctx.lineTo(this._size * 0.4, 0);\n ctx.moveTo(-this._size * 0.4, this._size * 0.25);\n ctx.lineTo(this._size * 0.4, this._size * 0.25);\n ctx.stroke();\n }\n\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"rgba(0,0,0,.75)\";\n ctx.fillStyle = \"white\";\n ctx.strokeRect(-2, -(this._yOffset + 2), 5, 5);\n ctx.fillRect(-1, -(this._yOffset + 1), 3, 3);\n\n ctx.lineWidth = 3.5;\n ctx.lineCap = \"round\";\n ctx.fillStyle = this._isSelected ? \"rgba(35,187,252,.25)\" : \"rgba(255,215,0,.25)\";\n ctx.shadowColor = \"black\";\n ctx.shadowBlur = 10;\n this.drawHandle(ctx, true);\n\n ctx.lineWidth = 1.5;\n ctx.strokeStyle = this._isSelected ? \"rgba(35,187,252,.75)\" : \"rgba(255,215,0,.75)\";\n ctx.shadowBlur = 0;\n this.drawHandle(ctx, false);\n }\n\n protected isSelected(pt: XAndY): boolean { return this.position.distance(Point3d.create(pt.x, pt.y)) < this._size; }\n public isButtonHandled(ev: BeButtonEvent): boolean { return (BeButton.Data === ev.button && InputSource.Touch === ev.inputSource && !this._inTouchTap); }\n\n public doTouchMove(ev: BeTouchEvent): boolean {\n if (undefined === ev.viewport || !ev.isSingleTouch)\n return false;\n if (!this._isDragging || !this.setPosition(ev.viewport, ev.point))\n return false;\n ev.viewPoint = this._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return true;\n }\n\n public doTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): boolean {\n if (undefined === ev.viewport || !ev.isSingleTouch)\n return false;\n return (this._isDragging = this.isSelected(startEv.viewPoint));\n }\n\n public doTouchStart(ev: BeTouchEvent): void {\n this._isSelected = ev.isSingleTouch && this.isSelected(ev.viewPoint);\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n public doTouchEnd(ev: BeTouchEvent): void {\n if (this._isDragging && undefined !== ev.viewport)\n IModelApp.toolAdmin.currentInputState.fromPoint(ev.viewport, this._offsetPosition, InputSource.Touch); // Current location should reflect virtual cursor offset...\n this._isSelected = this._isDragging = false;\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n public async doTouchTap(ev: BeTouchEvent): Promise<boolean> {\n if (undefined === ev.viewport || !ev.isSingleTouch || 1 !== ev.tapCount)\n return false;\n if (!this.isSelected(ev.viewPoint)) {\n if (!this.setPosition(ev.viewport, ev.point))\n return false;\n ev.viewPoint = this._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return false;\n }\n ev.viewPoint = this._offsetPosition;\n this._inTouchTap = true;\n await IModelApp.toolAdmin.convertTouchTapToButtonDownAndUp(ev);\n this._inTouchTap = false;\n return true;\n }\n\n public static createFromTouchTap(ev: BeTouchEvent): TouchCursor | undefined {\n if (undefined === ev.viewport || !ev.isSingleTouch || 1 !== ev.tapCount)\n return undefined;\n const touchCursor = new TouchCursor(ev.viewport);\n if (!touchCursor.setPosition(ev.viewport, ev.point) && !touchCursor.setPosition(ev.viewport, ev.viewport.view.getCenter()))\n return undefined;\n ev.viewPoint = touchCursor._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return touchCursor;\n }\n}\n\n/** AccuSnap is an aide for snapping to interesting points on elements or decorations as the cursor moves over them.\n * @see [Using AccuSnap]($docs/learning/frontend/primitivetools.md#AccuSnap)\n * @public\n * @extensions\n */\nexport class AccuSnap implements Decorator {\n /** Currently active hit */\n public currHit?: HitDetail;\n /** Current list of hits. */\n public aSnapHits?: HitList<HitDetail>;\n /** Views that need to be flashed */\n public readonly needFlash = new Set<Viewport>();\n /** Views that are already flashed */\n public readonly areFlashed = new Set<Viewport>();\n /** The \"+\" that indicates where the snap point is */\n public readonly cross = new SpriteLocation();\n /** The icon that indicates what type of snap is active */\n public readonly icon = new SpriteLocation();\n /** The icon that indicates an error */\n public readonly errorIcon = new SpriteLocation();\n /** Reason key for last error */\n public errorKey?: string;\n /** localized message explaining why last error was generated. */\n public explanation?: string;\n /** Number of times \"suppress\" has been called -- unlike suspend this is not automatically cleared by tools */\n private _suppressed = 0;\n /** Location of cursor when we last checked for motion */\n private readonly _lastCursorPos = new Point2d();\n /** @internal */\n public readonly toolState = new AccuSnap.ToolState();\n /** @internal */\n protected _settings = new AccuSnap.Settings();\n /** @internal */\n public touchCursor?: TouchCursor;\n /** Current request for tooltip message. */\n private _toolTipPromise?: Promise<Promise<void>>;\n\n /** @internal */\n public onInitialized() { }\n private get _searchDistance(): number { return this.isLocateEnabled ? 1.0 : this._settings.searchDistance; }\n private get _hotDistanceInches(): number { return IModelApp.locateManager.apertureInches * this._settings.hotDistanceFactor; }\n /** Whether locate of elements under the cursor is enabled by the current InteractiveTool. */\n public get isLocateEnabled(): boolean { return this.toolState.locate; }\n /** Whether snapping to elements under the cursor is enabled by the current InteractiveTool. */\n public get isSnapEnabled(): boolean { return this.toolState.enabled; }\n /** Whether the user setting for snapping is enabled. Snapping is done only when both the user and current InteractiveTool have enabled it. */\n public get isSnapEnabledByUser(): boolean { return this._settings.enableFlag; }\n /** AccuSnap user settings */\n public get userSettings() { return this._settings; }\n\n private isFlashed(view: Viewport): boolean { return (this.areFlashed.has(view)); }\n private needsFlash(view: Viewport): boolean { return (this.needFlash.has(view)); }\n private setNeedsFlash(view: Viewport) {\n this.needFlash.add(view);\n this.clearIsFlashed(view);\n view.invalidateDecorations();\n }\n\n private setIsFlashed(view: Viewport) { this.areFlashed.add(view); }\n private clearIsFlashed(view: Viewport) { this.areFlashed.delete(view); }\n private static toSnapDetail(hit?: HitDetail): SnapDetail | undefined { return (hit && hit instanceof SnapDetail) ? hit : undefined; }\n /** Currently active snap */\n public getCurrSnapDetail(): SnapDetail | undefined { return AccuSnap.toSnapDetail(this.currHit); }\n /** Determine whether there is a current hit that is *hot*. */\n public get isHot(): boolean {\n const currSnap = this.getCurrSnapDetail();\n return !currSnap ? false : currSnap.isHot;\n }\n\n /** Optional ids to never flash. Useful for tools like \"trim curve\" that won't want a flashed segment to obscure a result preview.\n * @note Cleared when a primitive or view tool is started and saved/restored when a primitive tool is suspended/unsuspended.\n * @public\n */\n public neverFlash(ids?: Id64Arg): void {\n if (undefined === ids) {\n this.toolState.neverFlash = undefined;\n return;\n }\n\n const newIds = new Set<string>();\n for (const id of Id64.iterable(ids))\n newIds.add(id);\n\n this.toolState.neverFlash = (0 !== newIds.size ? newIds : undefined);\n }\n\n /** @internal */\n public destroy(): void {\n this.currHit = undefined;\n this.aSnapHits = undefined;\n }\n\n private get _doSnapping(): boolean { return this.isSnapEnabled && this.isSnapEnabledByUser && !this._isSnapSuspended; }\n private get _isSnapSuspended(): boolean { return (0 !== this._suppressed || 0 !== this.toolState.suspended); }\n\n /** Get the current snap divisor to use to use for SnapMode.NearestKeypoint.\n * @public\n */\n public get keypointDivisor() { return this._settings.keypointDivisor; }\n\n /** Get the current active SnapModes. SnapMode position determines priority, with the first entry being the highest. The SnapDetail will be returned for the first SnapMode that produces a hot snap.\n * @public\n */\n public getActiveSnapModes(): SnapMode[] {\n const snaps: SnapMode[] = [];\n snaps.push(SnapMode.NearestKeypoint);\n return snaps;\n }\n\n /** Can be implemented by a subclass of AccuSnap to implement a SnapMode override that applies only to the next point.\n * This method will be called whenever a new tool is installed and on button events.\n * @internal\n */\n public synchSnapMode(): void { }\n\n /** Check whether current tentative snap has valid curve geometry for finding extended intersections. */\n private get _searchForExtendedIntersections(): boolean {\n const snap = IModelApp.tentativePoint.getCurrSnap();\n return (undefined !== snap && undefined !== snap.primitive);\n }\n\n /**\n * Check to see whether its appropriate to generate an AccuSnap point, given the current user\n * and command settings, and whether a tentative point is currently active.\n */\n public get isActive(): boolean {\n // Unless we're snapping in intersect mode (to find extended intersections), skip if tentative point active...\n if (IModelApp.tentativePoint.isActive) {\n if (!this._doSnapping || !this._searchForExtendedIntersections)\n return false;\n\n const snaps = this.getActiveSnapModes();\n for (const snap of snaps) {\n if (snap === SnapMode.Intersection)\n return true;\n }\n\n return false;\n }\n\n return this._doSnapping || this.isLocateEnabled;\n }\n\n private initializeForCheckMotion(): void {\n this._lastCursorPos.setFrom(IModelApp.toolAdmin.currentInputState.lastMotion);\n }\n\n /** Clear the current AccuSnap info. */\n public clear(): void { this.setCurrHit(undefined); }\n /** @internal */\n public setCurrHit(newHit?: HitDetail): void {\n const newSnap = AccuSnap.toSnapDetail(newHit);\n const currSnap = this.getCurrSnapDetail();\n const sameElem = (undefined !== newHit && newHit.isSameHit(this.currHit));\n const sameHit = (sameElem && !newSnap);\n const sameSnap = (sameElem && undefined !== newSnap && undefined !== currSnap);\n const samePt = (sameHit || (sameSnap && newSnap.snapPoint.isAlmostEqual(currSnap.snapPoint)));\n const sameHot = (sameHit || (sameSnap && (this.isHot === newSnap.isHot)));\n const sameBaseSnapMode = (!newSnap || !currSnap || newSnap.snapMode === currSnap.snapMode);\n const sameType = (sameHot && (!currSnap || (currSnap.getHitType() === newHit.getHitType())));\n\n // see if it is the same point on the same element, the hot flags are the same multiple snaps, and the snap modes are the same\n if (samePt && sameType && sameBaseSnapMode) {\n // we know that nothing about the screen could change, just save the new hit and return to avoid screen flash\n this.currHit = newHit;\n return;\n }\n\n this.erase();\n\n // if we hit the same element with the same \"hotness\" as last time, we don't need to erase it\n // multiple snaps: but only if the old and new snap modes are the same\n if (!sameHot || !sameBaseSnapMode) {\n this.unFlashViews();\n this.setFlashHit(newHit);\n }\n\n // if we didn't get a new hit, we're done\n if (undefined === (this.currHit = newHit))\n return;\n\n // draw sprites for this hit\n this.showSnapSprite();\n }\n\n /** flash a hit in a single view. */\n private flashHitInView(hit: HitDetail, context: DecorateContext) {\n const viewport = context.viewport;\n if (!viewport || !this.hitShouldBeHilited(hit) || !this.needsFlash(viewport))\n return;\n\n hit.draw(context);\n this.setIsFlashed(viewport);\n }\n\n private setNeedsFlashView(view: Viewport) {\n if (!this.isFlashed(view) && !this.needsFlash(view))\n this.setNeedsFlash(view);\n }\n\n /** flash a hit in its view. */\n private setFlashHit(hit?: HitDetail): void {\n if (hit !== undefined && this.hitShouldBeHilited(hit))\n this.setNeedsFlashView(hit.viewport);\n }\n\n /** @internal */\n public erase(): void {\n this.clearToolTip(undefined); // make sure there's no tooltip up.\n this.clearSprites(); // remove all sprites from the screen\n }\n\n private showElemInfo(viewPt: XAndY, vp: ScreenViewport, hit: HitDetail, delay: BeDuration): void {\n if (!IModelApp.viewManager.doesHostHaveFocus || undefined !== this._toolTipPromise)\n return;\n\n if (!IModelApp.toolAdmin.wantToolTip(hit))\n return;\n\n const promise = this._toolTipPromise = delay.executeAfter(async () => {\n if (promise !== this._toolTipPromise)\n return; // we abandoned this request during delay\n try {\n const msg = await IModelApp.toolAdmin.getToolTip(hit);\n if (this._toolTipPromise === promise) // have we abandoned this request while awaiting getToolTip?\n this.showLocateMessage(viewPt, vp, msg);\n } catch { } // happens if getToolTip was canceled\n });\n }\n\n private showLocateMessage(viewPt: XAndY, vp: ScreenViewport, msg: HTMLElement | string) {\n if (IModelApp.viewManager.doesHostHaveFocus)\n vp.openToolTip(msg, viewPt);\n }\n\n /** @internal */\n public displayToolTip(viewPt: XAndY, vp: ScreenViewport, uorPt?: Point3d): void {\n // if the tooltip is already displayed, or if user doesn't want it, quit.\n if (!this._settings.toolTip || !IModelApp.notifications.isToolTipSupported || IModelApp.notifications.isToolTipOpen)\n return;\n\n const accuSnapHit = this.currHit;\n const tpHit = IModelApp.tentativePoint.getCurrSnap();\n\n // if we don't have either an AccuSnap or a tentative point hit, quit.\n if (!accuSnapHit && !tpHit && !this.errorIcon.isActive)\n return;\n\n let theHit: HitDetail | undefined;\n\n // determine which type of hit\n if (tpHit) {\n if (uorPt) {\n // see if he came back somewhere near the currently snapped element\n const aperture = (this._settings.stickyFactor * vp.pixelsFromInches(IModelApp.locateManager.apertureInches) / 2.0) + 1.5;\n if (!IModelApp.locateManager.picker.testHit(tpHit, vp, uorPt, aperture, IModelApp.locateManager.options))\n return;\n }\n theHit = tpHit;\n } else {\n theHit = accuSnapHit;\n }\n\n // if we're currently showing an error, get the error message...otherwise display hit info...\n if (!this.errorIcon.isActive && theHit) {\n this.showElemInfo(viewPt, vp, theHit, this._settings.toolTipDelay);\n return;\n }\n\n // If we have an error explanation...use it as is!\n if (this.explanation) {\n this.showLocateMessage(viewPt, vp, this.explanation);\n return;\n }\n\n // if we don't have an explanation yet, translate the error code.\n if (!this.errorKey)\n return;\n\n this.explanation = IModelApp.localization.getLocalizedString(`iModelJs:${this.errorKey}`);\n if (!this.explanation)\n return;\n\n this.showLocateMessage(viewPt, vp, this.explanation);\n }\n\n /** @internal */\n public clearToolTip(ev?: BeButtonEvent): void {\n // Throw away any stale request for a tooltip message\n this._toolTipPromise = undefined;\n if (!IModelApp.notifications.isToolTipOpen)\n return;\n\n if (ev && (5 > ev.viewPoint.distanceXY(IModelApp.notifications.toolTipLocation)))\n return;\n\n IModelApp.notifications.clearToolTip();\n }\n\n /** Display the sprites for the current snap to indicate its position on the screen and what snap mode it represents. */\n private showSnapSprite(): void {\n const snap = this.getCurrSnapDetail();\n if (!snap)\n return;\n\n const crossPt = snap.snapPoint;\n const viewport = snap.viewport;\n const crossSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}${snap.isHot ? \"sprites/SnapCross.png\" : \"sprites/SnapUnfocused.png\"}`);\n\n this.cross.activate(crossSprite, viewport, crossPt);\n\n const snapSprite = snap.sprite;\n if (snapSprite)\n this.icon.activate(snapSprite, viewport, AccuSnap.adjustIconLocation(viewport, crossPt, snapSprite.size));\n }\n\n private static adjustIconLocation(vp: Viewport, input: Point3d, iconSize: XAndY): Point3d {\n const out = vp.worldToView(input);\n out.x += (iconSize.x / 3.0);\n out.y -= (iconSize.y * 1.3);\n return vp.viewToWorld(out, out);\n }\n\n /** try to indicate what's wrong with the current point (why we're not snapping). */\n private showSnapError(out: LocateResponse, ev: BeButtonEvent) {\n this.explanation = out.explanation;\n this.errorKey = out.reason;\n this.errorIcon.deactivate();\n\n const vp = ev.viewport!;\n let errorSprite: Sprite | undefined;\n switch (out.snapStatus) {\n case SnapStatus.FilteredByApp:\n errorSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}sprites/SnapAppFiltered.png`);\n break;\n\n case SnapStatus.FilteredByAppQuietly:\n this.errorKey = undefined;\n break;\n\n case SnapStatus.NotSnappable:\n errorSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}sprites/SnapNotSnappable.png`);\n this.errorKey = ElementLocateManager.getFailureMessageKey(\"NotSnappable\");\n break;\n }\n\n if (!errorSprite)\n return;\n\n const spriteSize = errorSprite.size;\n const pt = AccuSnap.adjustIconLocation(vp, ev.rawPoint, spriteSize);\n\n this.errorIcon.activate(errorSprite, vp, pt);\n }\n\n private clearSprites() {\n this.errorIcon.deactivate();\n this.cross.deactivate();\n this.icon.deactivate();\n }\n\n /** determine whether a hit should be hilited or not. */\n private hitShouldBeHilited(hit: HitDetail | undefined): boolean {\n if (!hit)\n return false;\n\n if (hit.isModelHit || hit.isMapHit)\n return false; // Avoid annoying flashing of reality models.\n\n if (this.toolState.neverFlash && this.toolState.neverFlash.has(hit.sourceId))\n return false;\n\n const snap = AccuSnap.toSnapDetail(hit);\n return !snap || snap.isHot || this._settings.hiliteColdHits;\n }\n\n private unFlashViews() {\n this.needFlash.clear();\n for (const vp of this.areFlashed)\n vp.flashedId = undefined;\n\n this.areFlashed.clear();\n }\n\n /** @internal */\n public adjustPointIfHot(pt: Point3d, view: Viewport): void {\n const currSnap = this.getCurrSnapDetail();\n\n if (!currSnap || !currSnap.isHot || view !== currSnap.viewport)\n return;\n\n pt.setFrom(currSnap.adjustedPoint);\n }\n\n /** Implemented by sub-classes to update ui to show current enabled state.\n * @internal\n */\n public onEnabledStateChange(_isEnabled: boolean, _wasEnabled: boolean) { }\n\n /** @internal */\n public getHitAndList(holder: HitListHolder): HitDetail | undefined {\n const hit = this.currHit;\n if (hit) {\n holder.setHitList(this.aSnapHits);\n this.aSnapHits = undefined;\n }\n return hit;\n }\n\n private initCmdState() {\n this.toolState.suspended = 0;\n this.toolState.neverFlash = undefined;\n }\n\n /** @internal */\n public suspend(doSuspend: boolean) {\n const previousDoSnapping = this._doSnapping;\n if (doSuspend)\n this.toolState.suspended++;\n else if (this.toolState.suspended > 0)\n this.toolState.suspended--;\n\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n }\n\n /** @internal */\n public suppress(doSuppress: boolean): number {\n const previousDoSnapping = this._doSnapping;\n if (doSuppress)\n this._suppressed++;\n else if (this._suppressed > 0)\n this._suppressed--;\n\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n return this._suppressed;\n }\n\n /** Turn AccuSnap on or off */\n public enableSnap(yesNo: boolean) {\n const previousDoSnapping = this._doSnapping;\n this.toolState.enabled = yesNo;\n if (!yesNo) {\n this.clear();\n if (undefined !== this.touchCursor && !this.wantVirtualCursor) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n }\n\n /** @internal */\n public intersectXY(tpSnap: SnapDetail, second: SnapDetail): IntersectDetail | undefined {\n // Get single segment curve from each snap to intersect...\n const tpSegment = tpSnap.getCurvePrimitive();\n if (undefined === tpSegment)\n return undefined;\n const segment = second.getCurvePrimitive();\n if (undefined === segment)\n return undefined;\n\n const worldToView = second.viewport.worldToViewMap.transform0;\n const detail = CurveCurve.intersectionProjectedXYPairs(worldToView, tpSegment, true, segment, true);\n if (0 === detail.length)\n return undefined;\n\n let closeIndex = 0;\n if (detail.length > 1) {\n const snapPt = worldToView.multiplyPoint3d(HitGeomType.Point === tpSnap.geomType && HitGeomType.Point !== second.geomType ? second.getPoint() : tpSnap.getPoint(), 1); // Don't check distance from arc centers...\n let lastDist: number | undefined;\n\n for (let i = 0; i < detail.length; i++) {\n const testPt = worldToView.multiplyPoint3d(detail[i].detailA.point, 1);\n const testDist = snapPt.realDistanceXY(testPt);\n\n if (undefined !== testDist && (undefined === lastDist || testDist < lastDist)) {\n lastDist = testDist;\n closeIndex = i;\n }\n }\n }\n\n const intersect = new IntersectDetail(tpSnap, SnapHeat.InRange, detail[closeIndex].detailA.point, segment, second.sourceId); // Should be ok to share hit detail with tentative...\n intersect.primitive = tpSegment; // Just save single segment that was intersected for line strings/shapes...\n\n return intersect;\n }\n\n private static doPostProcessSnapMode(snap: SnapDetail, snapMode: SnapMode): SnapStatus {\n const accuDraw = IModelApp.accuDraw;\n if (!accuDraw.isEnabled || accuDraw.isDeactivated)\n return SnapStatus.Disabled; // AccuDraw is require for this snap mode...\n\n if (HitGeomType.Surface === snap.geomType)\n return SnapStatus.NoSnapPossible; // Only valid for edge and curve hits...\n\n const curve = snap.getCurvePrimitive();\n if (undefined === curve)\n return SnapStatus.NoSnapPossible;\n\n const rMatrix = AccuDraw.getSnapRotation(snap, snap.viewport);\n if (undefined === rMatrix)\n return SnapStatus.NoSnapPossible;\n\n // Compute snap from AccuDraw origin when active or set AccuDraw rotation if accepted...\n if (!accuDraw.isActive) {\n accuDraw.setContext(AccuDrawFlags.SmartRotation); // Automatically orient compass to snap location if accepted...\n snap.setSnapMode(snapMode);\n return SnapStatus.Success;\n }\n\n const zVec = rMatrix.rowZ(); // This is a row matrix...\n const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(accuDraw.origin, snap.getPoint(), zVec, snap.viewport, true);\n if (undefined === spacePoint)\n return SnapStatus.NoSnapPossible;\n\n let detail;\n if (SnapMode.PerpendicularPoint === snapMode)\n detail = curve.closestPoint(spacePoint, true);\n else\n detail = curve.closestTangent(spacePoint, { hintPoint: snap.getPoint(), vectorToEye: zVec, extend: true });\n\n if (undefined === detail?.curve)\n return SnapStatus.NoSnapPossible;\n\n // Close point may not be perpendicular when curve can't be extended...\n if (SnapMode.PerpendicularPoint === snapMode && !curve.isExtensibleFractionSpace) {\n const curvePlanePoint = AccuDrawHintBuilder.projectPointToPlaneInView(accuDraw.origin, detail.point, zVec, snap.viewport, true);\n if (undefined === curvePlanePoint)\n return SnapStatus.NoSnapPossible;\n\n const curveNormal = detail.point.vectorTo(curvePlanePoint);\n const curveTangent = curve.fractionToPointAndUnitTangent(detail.fraction);\n if (!curveTangent.getDirectionRef().isPerpendicularTo(curveNormal)) {\n const curveExtensionPoint = AccuDrawHintBuilder.projectPointToLineInView(accuDraw.origin, curveTangent.getOriginRef(), curveTangent.getDirectionRef(), snap.viewport, true);\n if (undefined === curveExtensionPoint)\n return SnapStatus.NoSnapPossible;\n detail.point.setFrom(curveExtensionPoint);\n }\n }\n\n const point = AccuDrawHintBuilder.projectPointToPlaneInView(detail.point, accuDraw.origin, zVec, snap.viewport, true);\n if (undefined === point)\n return SnapStatus.NoSnapPossible;\n\n snap.setSnapPoint(point, SnapHeat.InRange); // Force hot snap...\n snap.setSnapMode(snapMode);\n\n return SnapStatus.Success;\n }\n\n /** @internal */\n public static async requestSnap(thisHit: HitDetail, snapModes: SnapMode[], hotDistanceInches: number, keypointDivisor: number, hitList?: HitList<HitDetail>, out?: LocateResponse): Promise<SnapDetail | undefined> {\n if (thisHit.isModelHit || thisHit.isMapHit || thisHit.isClassifier) {\n if (snapModes.includes(SnapMode.Nearest)) {\n if (out)\n out.snapStatus = SnapStatus.Success;\n\n return new SnapDetail(thisHit, SnapMode.Nearest, SnapHeat.InRange);\n } else if (1 === snapModes.length && snapModes.includes(SnapMode.Intersection)) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n\n return undefined;\n } else {\n if (out)\n out.snapStatus = SnapStatus.Success;\n\n const realitySnap = new SnapDetail(thisHit, SnapMode.Nearest, SnapHeat.None);\n realitySnap.sprite = undefined; // Don't show a snap mode that isn't applicable, but still accept hit point...\n return realitySnap;\n }\n }\n\n let hitVp;\n if (thisHit.path) {\n hitVp = thisHit.path.sectionDrawingAttachment?.viewport ?? thisHit.path.viewAttachment?.viewport;\n }\n\n hitVp = hitVp ?? thisHit.viewport;\n if (undefined !== thisHit.subCategoryId && !thisHit.isExternalIModelHit) {\n const appearance = hitVp.getSubCategoryAppearance(thisHit.subCategoryId);\n if (appearance.dontSnap) {\n if (out) {\n out.snapStatus = SnapStatus.NotSnappable;\n out.explanation = IModelApp.localization.getLocalizedString(`iModelJs:${ElementLocateManager.getFailureMessageKey(\"NotSnappableSubCategory\")}`);\n }\n return undefined;\n }\n }\n\n const haveTangentPoint = snapModes.includes(SnapMode.TangentPoint);\n const havePerpendicularPoint = snapModes.includes(SnapMode.PerpendicularPoint);\n const postProcessSnapMode = (havePerpendicularPoint ? SnapMode.PerpendicularPoint : (haveTangentPoint ? SnapMode.TangentPoint : undefined));\n\n if (undefined !== postProcessSnapMode) {\n // NOTE: These are not valid backend snap modes. Instead make the snap request using nearest\n // snap in order to get the candidate curve to use to compute the desired snap point...\n snapModes = snapModes.filter(snapMode => (snapMode !== SnapMode.PerpendicularPoint && snapMode !== SnapMode.TangentPoint));\n if (!snapModes.includes(SnapMode.Nearest))\n snapModes.push(SnapMode.Nearest);\n }\n\n const requestProps: SnapRequestProps = {\n id: thisHit.sourceId,\n testPoint: thisHit.testPoint,\n closePoint: thisHit.hitPoint,\n worldToView: hitVp.worldToViewMap.transform0.toJSON(),\n viewFlags: hitVp.viewFlags,\n snapModes,\n snapAperture: hitVp.pixelsFromInches(hotDistanceInches),\n snapDivisor: keypointDivisor,\n subCategoryId: thisHit.subCategoryId,\n geometryClass: thisHit.geometryClass,\n modelToWorld: thisHit.transformFromSourceIModel?.toJSON(),\n };\n\n const thisGeom = (thisHit.isElementHit ? IModelApp.viewManager.overrideElementGeometry(thisHit) : IModelApp.viewManager.getDecorationGeometry(thisHit));\n\n if (undefined !== thisGeom) {\n requestProps.decorationGeometry = [{ id: thisHit.sourceId, geometryStream: thisGeom }];\n } else if (!thisHit.isElementHit) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n return undefined;\n }\n\n if (snapModes.includes(SnapMode.Intersection)) {\n if (undefined !== hitList) {\n for (const hit of hitList.hits) {\n if (thisHit.sourceId === hit.sourceId || thisHit.iModel !== hit.iModel)\n continue;\n\n const geom = (hit.isElementHit ? IModelApp.viewManager.overrideElementGeometry(hit) : IModelApp.viewManager.getDecorationGeometry(hit));\n\n if (undefined !== geom) {\n if (undefined === requestProps.decorationGeometry)\n requestProps.decorationGeometry = [{ id: thisHit.sourceId, geometryStream: geom }];\n else\n requestProps.decorationGeometry.push({ id: thisHit.sourceId, geometryStream: geom });\n } else if (!hit.isElementHit) {\n continue;\n }\n\n if (undefined === requestProps.intersectCandidates)\n requestProps.intersectCandidates = [hit.sourceId];\n else\n requestProps.intersectCandidates.push(hit.sourceId);\n\n if (5 === requestProps.intersectCandidates.length)\n break; // Search for intersection with a few of the next best hits...\n }\n }\n\n if (1 === snapModes.length && undefined === requestProps.intersectCandidates) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n\n return undefined; // Don't make back end request when only doing intersection snap when we don't have another hit to intersect with...\n }\n }\n\n try {\n const result = await thisHit.iModel[_requestSnap](requestProps);\n\n if (out)\n out.snapStatus = result.status;\n\n if (result.status !== SnapStatus.Success)\n return undefined;\n\n const parseCurve = (json: any): CurvePrimitive | undefined => {\n const parsed = undefined !== json ? GeomJson.Reader.parse(json) : undefined;\n return parsed instanceof GeometryQuery && \"curvePrimitive\" === parsed.geometryCategory ? parsed : undefined;\n };\n\n let displayTransform;\n if (undefined !== thisHit.modelId) {\n displayTransform = thisHit.viewport.view.computeDisplayTransform({\n modelId: thisHit.modelId,\n elementId: thisHit.sourceId,\n viewAttachmentId: thisHit.path?.viewAttachment?.id,\n inSectionDrawingAttachment: undefined !== thisHit.path?.sectionDrawingAttachment,\n });\n }\n\n const snapPoint = Point3d.fromJSON(result.snapPoint);\n displayTransform?.multiplyPoint3d(snapPoint, snapPoint);\n\n const snap = new SnapDetail(thisHit, result.snapMode, result.heat, snapPoint);\n\n snap.setCurvePrimitive(parseCurve(result.curve), displayTransform, result.geomType);\n if (undefined !== result.parentGeomType)\n snap.parentGeomType = result.parentGeomType;\n\n // Update hitPoint from readPixels with exact point location corrected to surface/edge geometry.\n if (undefined !== result.hitPoint) {\n snap.hitPoint.setFromJSON(result.hitPoint);\n displayTransform?.multiplyPoint3d(snap.hitPoint, snap.hitPoint);\n }\n\n // Apply display transform to normal.\n if (undefined !== result.normal) {\n snap.normal = Vector3d.fromJSON(result.normal);\n displayTransform?.matrix.multiplyVector(snap.normal, snap.normal);\n snap.normal.normalizeInPlace();\n }\n\n if (undefined !== postProcessSnapMode && SnapMode.Nearest === result.snapMode) {\n if (SnapStatus.Success !== this.doPostProcessSnapMode(snap, postProcessSnapMode))\n return undefined;\n return snap;\n }\n\n if (SnapMode.Intersection !== snap.snapMode)\n return snap;\n\n if (undefined === result.intersectId)\n return undefined;\n\n const otherPrimitive = parseCurve(result.intersectCurve);\n if (undefined === otherPrimitive)\n return undefined;\n\n const intersect = new IntersectDetail(snap, snap.heat, snap.snapPoint, otherPrimitive, result.intersectId);\n return intersect;\n } catch {\n if (out)\n out.snapStatus = SnapStatus.Aborted;\n\n return undefined;\n }\n }\n\n private async getAccuSnapDetail(hitList: HitList<HitDetail>, out: LocateResponse): Promise<SnapDetail | undefined> {\n const thisHit = hitList.getNextHit();\n if (undefined === thisHit)\n return undefined;\n\n const filterStatus: LocateFilterStatus = (this.isLocateEnabled ? await IModelApp.locateManager.filterHit(thisHit, LocateAction.AutoLocate, out) : LocateFilterStatus.Accept);\n if (LocateFilterStatus.Accept !== filterStatus) {\n out.snapStatus = SnapStatus.FilteredByApp;\n return undefined;\n }\n\n let snapModes: SnapMode[];\n if (IModelApp.tentativePoint.isActive) {\n snapModes = [];\n snapModes.push(SnapMode.Nearest); // Special case: isActive only allows snapping with tentative to find extended intersections...\n } else {\n snapModes = this.getActiveSnapModes(); // Get the list of point snap modes to consider\n }\n\n const thisSnap = await AccuSnap.requestSnap(thisHit, snapModes, this._hotDistanceInches, this.keypointDivisor, hitList, out);\n if (undefined === thisSnap)\n return undefined;\n\n if (IModelApp.tentativePoint.isActive) {\n const tpSnap = IModelApp.tentativePoint.getCurrSnap();\n if (undefined === tpSnap)\n return undefined;\n const intersectSnap = this.intersectXY(tpSnap, thisSnap);\n if (undefined === intersectSnap)\n return undefined;\n hitList.setCurrentHit(thisHit);\n return intersectSnap;\n }\n\n IModelApp.accuDraw.onSnap(thisSnap); // AccuDraw can adjust nearest snap to intersection of circle (polar distance lock) or line (axis lock) with snapped to curve...\n hitList.setCurrentHit(thisHit);\n return thisSnap;\n }\n\n /** Request a snap from the backend for the supplied HitDetail.\n * @param hit The HitDetail to snap to.\n * @param snapMode Optional SnapMode, uses active snap modes if not specified.\n * @return A Promise for the SnapDetail or undefined if no snap could be created.\n */\n public async doSnapRequest(hit: HitDetail, snapMode?: SnapMode): Promise<SnapDetail | undefined> {\n let snapModes: SnapMode[];\n if (undefined === snapMode)\n snapModes = this.getActiveSnapModes();\n else\n snapModes = [snapMode];\n\n return AccuSnap.requestSnap(hit, snapModes, this._hotDistanceInches, this.keypointDivisor);\n }\n\n private findHits(ev: BeButtonEvent, force: boolean = false): SnapStatus {\n // When using AccuSnap to locate elements, we have to start with the datapoint adjusted\n // for locks and not the raw point. Otherwise, when grid/unit lock are on, we locate elements by\n // points not on the grid. This causes them to be \"pulled\" off the grid when they are accepted. On\n // the other hand, when NOT locating, we need to use the raw point so we can snap to elements\n // away from the grid.\n\n const testPoint = this.isLocateEnabled ? ev.point : ev.rawPoint;\n const vp = ev.viewport!;\n const picker = IModelApp.locateManager.picker;\n const options = IModelApp.locateManager.options.clone(); // Copy to avoid changing out from under active Tool...\n\n // NOTE: Since TestHit will use the same HitSource as the input hit we only need to sets this for DoPick...\n options.hitSource = this.isSnapEnabled ? HitSource.AccuSnap : HitSource.MotionLocate;\n\n let aperture = (vp.pixelsFromInches(IModelApp.locateManager.apertureInches) / 2.0) + 1.5;\n this.initializeForCheckMotion();\n aperture *= this._searchDistance;\n\n if (0 === picker.doPick(vp, testPoint, aperture, options)) {\n this.aSnapHits = undefined; // Clear any previous hit list so reset won't cycle through hits cursor is no longer over, etc.\n return SnapStatus.NoElements;\n }\n\n this.aSnapHits = picker.getHitList(true); // take ownership of the pickElem hit list.\n\n // see if we should keep the current hit\n const canBeSticky = !force && this.aSnapHits.length > 1 && this.currHit && (HitDetailType.Intersection !== this.currHit.getHitType() && this.currHit.priority < HitPriority.PlanarSurface);\n if (canBeSticky) {\n for (let iHit = 1; iHit < this.aSnapHits.length; ++iHit) {\n const thisHit = this.aSnapHits.hits[iHit];\n if (!thisHit.isSameHit(this.currHit))\n continue;\n this.aSnapHits.removeHit(iHit);\n this.aSnapHits.insertHit(0, thisHit);\n break;\n }\n }\n\n return SnapStatus.Success;\n }\n\n private async findLocatableHit(ev: BeButtonEvent, newSearch: boolean, out: LocateResponse): Promise<HitDetail | undefined> {\n out.snapStatus = SnapStatus.NoElements;\n\n if (newSearch) {\n this.aSnapHits = undefined;\n // search for new hits, but if the cursor is still close to the current hit, don't throw away list.\n if (SnapStatus.Success !== (out.snapStatus = this.findHits(ev)))\n return undefined;\n } else {\n if (!this.aSnapHits) {\n out.snapStatus = SnapStatus.NoElements;\n return undefined;\n }\n }\n\n const thisList = this.aSnapHits!;\n let thisHit: HitDetail | undefined;\n let firstRejected;\n const filterResponse = new LocateResponse();\n\n // keep looking through hits until we find one that is accu-snappable.\n while (undefined !== (thisHit = thisList.getNextHit())) {\n if (LocateFilterStatus.Accept === await IModelApp.locateManager.filterHit(thisHit, LocateAction.AutoLocate, filterResponse))\n return thisHit;\n // we only care about the status of the first hit.\n if (undefined !== firstRejected)\n continue;\n firstRejected = filterResponse.clone();\n firstRejected.snapStatus = SnapStatus.FilteredByApp;\n }\n\n if (undefined !== firstRejected)\n out.setFrom(firstRejected);\n\n // Reset current hit index to go back to first hit on next AccuSnap reset event...\n thisList.resetCurrentHit();\n return undefined;\n }\n\n /** When in auto-locate mode, advance to the next hit without searching again.\n * @internal\n */\n public async resetButton(): Promise<SnapStatus> {\n let hit: HitDetail | undefined;\n const out = new LocateResponse();\n out.snapStatus = SnapStatus.Disabled;\n\n this.clearToolTip(undefined);\n\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n\n if (this._doSnapping) {\n // if we don't have any more candidate hits, get a new list at the current location\n if (!this.aSnapHits || (0 === this.aSnapHits.length)) {\n out.snapStatus = this.findHits(ev);\n hit = (SnapStatus.Success !== out.snapStatus) ? undefined : await this.getAccuSnapDetail(this.aSnapHits!, out);\n } else {\n // drop the current hit from the list and then retest the list (without the dropped hit) to find the new snap\n this.aSnapHits.removeCurrentHit();\n hit = await this.getAccuSnapDetail(this.aSnapHits, out);\n }\n if (!this._doSnapping)\n hit = undefined; // Snap no longer requested...\n } else if (this.isLocateEnabled) {\n hit = await this.findLocatableHit(ev, false, out); // get next AccuSnap path (or undefined)\n if (!this.isLocateEnabled)\n hit = undefined; // Hit no longer requested...\n }\n\n // set the current hit\n if (hit || this.currHit)\n this.setCurrHit(hit);\n\n // indicate errors\n this.showSnapError(out, ev);\n return out.snapStatus;\n }\n\n /** Find the best snap point according to the current cursor location\n * @internal\n */\n public async onMotion(ev: BeButtonEvent): Promise<void> {\n this.clearToolTip(ev);\n const out = new LocateResponse();\n out.snapStatus = SnapStatus.Disabled;\n\n let hit: HitDetail | undefined;\n if (this.isActive) {\n if (this._doSnapping) {\n out.snapStatus = this.findHits(ev);\n hit = (SnapStatus.Success !== out.snapStatus) ? undefined : await this.getAccuSnapDetail(this.aSnapHits!, out);\n if (!this._doSnapping)\n hit = undefined; // Snap no longer requested...\n } else if (this.isLocateEnabled) {\n hit = await this.findLocatableHit(ev, true, out);\n if (!this.isLocateEnabled)\n hit = undefined; // Hit no longer requested...\n }\n }\n\n // set the current hit and display the sprite (based on snap's KeypointType)\n if (hit || this.currHit)\n this.setCurrHit(hit);\n\n // set up active error before calling displayToolTip to indicate error or show locate message...\n this.showSnapError(out, ev);\n this.displayToolTip(ev.viewPoint, ev.viewport!, ev.rawPoint);\n\n if (undefined !== this.touchCursor && InputSource.Mouse === ev.inputSource) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n\n /** @internal */\n public onPreButtonEvent(ev: BeButtonEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.isButtonHandled(ev) : false;\n }\n\n /** @internal */\n public onTouchStart(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor)\n this.touchCursor.doTouchStart(ev);\n }\n\n /** @internal */\n public onTouchEnd(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor && 0 === ev.touchCount)\n this.touchCursor.doTouchEnd(ev);\n }\n\n /** @internal */\n public onTouchCancel(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor)\n this.touchCursor.doTouchEnd(ev);\n }\n\n /** @internal */\n public onTouchMove(ev: BeTouchEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.doTouchMove(ev) : false;\n }\n\n /** @internal */\n public onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.doTouchMoveStart(ev, startEv) : false;\n }\n\n /** @internal */\n public get wantVirtualCursor(): boolean {\n return this._doSnapping || (this.isLocateEnabled && ToolSettings.enableVirtualCursorForLocate);\n }\n\n /** @internal */\n public async onTouchTap(ev: BeTouchEvent): Promise<boolean> {\n if (undefined !== this.touchCursor)\n return this.touchCursor.doTouchTap(ev);\n if (!this.wantVirtualCursor)\n return false;\n this.touchCursor = TouchCursor.createFromTouchTap(ev);\n if (undefined === this.touchCursor)\n return false;\n // Give active tool an opportunity to update it's tool assistance since event won't be passed along...\n const tool = IModelApp.toolAdmin.activeTool;\n if (undefined === tool)\n return true;\n await tool.onSuspend();\n await tool.onUnsuspend();\n return true;\n }\n\n private flashElements(context: DecorateContext): void {\n const viewport = context.viewport;\n if (this.currHit) {\n if (this.needsFlash(viewport))\n this.flashHitInView(this.currHit, context);\n return;\n }\n\n const hit = IModelApp.tentativePoint.getCurrSnap();\n if (!hit || hit.isModelHit || hit.isMapHit)\n return; // Don't hilite reality models.\n\n if (this.toolState.neverFlash && this.toolState.neverFlash.has(hit.sourceId))\n return;\n\n hit.draw(context);\n }\n\n /** @internal */\n public decorate(context: DecorateContext): void {\n if (undefined !== this.touchCursor && this.touchCursor.viewport === context.viewport)\n context.addCanvasDecoration(this.touchCursor, true);\n\n this.flashElements(context);\n\n if (this.cross.isActive) {\n this.cross.decorate(context);\n this.icon.decorate(context);\n }\n\n this.errorIcon.decorate(context);\n }\n\n private clearElemFromHitList(element: string) {\n if (this.aSnapHits)\n this.aSnapHits.removeHitsFrom(element);\n }\n\n /** @internal */\n public clearIfElement(sourceId: string): void {\n this.clearElemFromHitList(sourceId);\n\n const hit = this.currHit;\n if (hit && hit.sourceId === sourceId) {\n this.destroy();\n }\n }\n\n /** Enable locating elements.\n * @public\n */\n public enableLocate(yesNo: boolean) {\n this.toolState.locate = yesNo;\n if (!yesNo && undefined !== this.touchCursor && !this.wantVirtualCursor) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n\n /** Called whenever a new [[Tool]] is started.\n * @internal\n */\n public onStartTool(): void {\n this.initCmdState();\n this.enableSnap(false);\n this.enableLocate(false);\n IModelApp.tentativePoint.clear(true);\n }\n\n /**\n * Force AccuSnap to reevaluate the snap at the current cursor location.\n * This is useful of an application changes the snap mode and wants AccuSnap to choose it immediately, without\n * requiring the user to move the mouse.\n * @internal\n */\n public async reEvaluate() {\n if (this.getCurrSnapDetail()) {\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n return this.onMotion(ev);\n }\n }\n}\n\n/** TentativeOrAccuSnap returns information about an active snap generated by either [[AccuSnap]] or [[TentativePoint]].\n * @public\n */\nexport class TentativeOrAccuSnap {\n /** @return true if AccuSnap is *hot* or TentativePoint is active and snapped to pickable geometry. */\n public static get isHot(): boolean { return IModelApp.accuSnap.isHot || IModelApp.tentativePoint.isSnapped; }\n\n /** Get the current snap from either AccuSnap or TentativePoint.\n * @param checkIsHot true to only return the snap from AccuSnap when it is *hot*.\n * @return The current snap from AccuSnap, TentativePoint, or undefined.\n */\n public static getCurrentSnap(checkIsHot: boolean = true): SnapDetail | undefined {\n // Checking for a hot AccuSnap before checking TentativePoint is done to support extended intersections...\n if (IModelApp.accuSnap.isHot)\n return IModelApp.accuSnap.getCurrSnapDetail();\n\n if (IModelApp.tentativePoint.isSnapped)\n return IModelApp.tentativePoint.currSnap;\n\n return (checkIsHot ? undefined : IModelApp.accuSnap.getCurrSnapDetail());\n }\n\n /** @return The current snap location from AccuSnap or TentativePoint */\n public static getCurrentPoint(): Point3d {\n if (IModelApp.accuSnap.isHot) {\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\n if (snap)\n return snap.adjustedPoint;\n }\n\n return IModelApp.tentativePoint.getPoint();\n }\n\n /** @return The current snap Viewport from AccuSnap or TentativePoint */\n public static getCurrentView(): ScreenViewport | undefined {\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\n return snap ? snap.viewport : IModelApp.tentativePoint.viewport;\n }\n}\n\n/** @public */\nexport namespace AccuSnap {\n export class ToolState {\n public enabled = false;\n public locate = false;\n public suspended = 0;\n public neverFlash?: Id64Set;\n public setFrom(other: ToolState): void {\n this.enabled = other.enabled;\n this.locate = other.locate;\n this.suspended = other.suspended;\n this.neverFlash = other.neverFlash;\n }\n public clone(): ToolState {\n const val = new ToolState();\n val.setFrom(this);\n return val;\n }\n }\n\n export class Settings {\n /** How far cursor can be from snap location (relative to snap aperture) and be considered a hot snap */\n public hotDistanceFactor = 1.2;\n /** When moving along an element, affects the affinity for snapping to the same curve as the previous snap */\n public stickyFactor = 1.0;\n /** Factor applied to locate aperture when snapping is enabled and used to pick snap candidates */\n public searchDistance = 2.0;\n /** Whether the snapped element is also hilited when the snap is not hot */\n public hiliteColdHits = true;\n /** Enables snap on cursor motion when true, only snap using Tentative snap when false */\n public enableFlag = true;\n /** Whether to show a tooltip for snap and element locate */\n public toolTip = true;\n /** Delay before tooltip appears */\n public toolTipDelay = BeDuration.fromSeconds(.5);\n /** Curve segment divisor used by SnapMode.NearestKeypoint */\n public keypointDivisor = 2;\n }\n}\n"]}
1
+ {"version":3,"file":"AccuSnap.js","sourceRoot":"","sources":["../../src/AccuSnap.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 LocatingElements\n */\n\nimport { BeDuration, Id64, Id64Arg, Id64Set } from \"@itwin/core-bentley\";\nimport { CurveCurve, CurvePrimitive, GeometryQuery, IModelJson as GeomJson, Point2d, Point3d, Vector3d, XAndY } from \"@itwin/core-geometry\";\nimport { SnapRequestProps } from \"@itwin/core-common\";\nimport { ElementLocateManager, HitListHolder, LocateAction, LocateFilterStatus, LocateResponse, SnapStatus } from \"./ElementLocateManager\";\nimport { HitDetail, HitDetailType, HitGeomType, HitList, HitPriority, HitSource, IntersectDetail, SnapDetail, SnapHeat, SnapMode } from \"./HitDetail\";\nimport { IModelApp } from \"./IModelApp\";\nimport { CanvasDecoration } from \"./render/CanvasDecoration\";\nimport { IconSprites, Sprite, SpriteLocation } from \"./Sprites\";\nimport { BeButton, BeButtonEvent, BeTouchEvent, InputSource } from \"./tools/Tool\";\nimport { ToolSettings } from \"./tools/ToolSettings\";\nimport { DecorateContext } from \"./ViewContext\";\nimport { Decorator } from \"./ViewManager\";\nimport { ScreenViewport, Viewport } from \"./Viewport\";\nimport { _requestSnap } from \"./common/internal/Symbols\";\nimport { AccuDraw, AccuDrawFlags, AccuDrawHintBuilder } from \"./AccuDraw\";\n\n// cspell:ignore dont primitivetools\n\n/** Virtual cursor for using AccuSnap with touch input.\n * @internal\n */\nexport class TouchCursor implements CanvasDecoration {\n public position = new Point3d();\n public viewport: Viewport;\n protected _offsetPosition = new Point3d();\n protected _size: number;\n protected _yOffset: number;\n protected _isSelected = false;\n protected _isDragging = false;\n protected _inTouchTap = false;\n\n protected constructor(vp: ScreenViewport) {\n this._size = vp.pixelsFromInches(0.3);\n this._yOffset = this._size * 1.75;\n this.viewport = vp;\n }\n\n protected setPosition(vp: Viewport, worldLocation: Point3d): boolean {\n const pointNpc = vp.worldToNpc(worldLocation);\n if (pointNpc.z < 0.0 || pointNpc.z > 1.0)\n pointNpc.z = 0.5; // move inside frustum.\n\n const viewLocation = vp.npcToView(pointNpc);\n if (!vp.viewRect.containsPoint(viewLocation))\n return false; // outside this viewport rect\n\n viewLocation.x = Math.floor(viewLocation.x) + 0.5;\n viewLocation.y = Math.floor(viewLocation.y) + 0.5;\n viewLocation.z = 0.0;\n const offsetLocation = new Point3d(viewLocation.x, viewLocation.y - this._yOffset, viewLocation.z);\n if (!vp.viewRect.containsPoint(offsetLocation))\n return false; // outside this viewport rect\n\n this.position.setFrom(viewLocation);\n this._offsetPosition.setFrom(offsetLocation);\n if (vp !== this.viewport) {\n this.viewport.invalidateDecorations();\n this.viewport = vp;\n }\n vp.invalidateDecorations();\n return true;\n }\n\n protected drawHandle(ctx: CanvasRenderingContext2D, filled: boolean): void {\n ctx.beginPath();\n ctx.moveTo(-this._size, 0);\n ctx.bezierCurveTo(-this._size, -this._size * 0.85, -this._size * 0.6, -this._yOffset * 0.6, 0, -this._yOffset * 0.8);\n ctx.bezierCurveTo(this._size * 0.6, -this._yOffset * 0.6, this._size, -this._size * 0.85, this._size, 0);\n ctx.arc(0, 0, this._size, 0, Math.PI);\n if (filled)\n ctx.fill();\n\n ctx.stroke();\n\n ctx.beginPath();\n ctx.arc(0, 0, this._size * 0.75, 0, 2 * Math.PI);\n ctx.stroke();\n\n ctx.beginPath();\n ctx.moveTo(-this._size * 0.4, 0);\n ctx.lineTo(this._size * 0.4, 0);\n ctx.moveTo(-this._size * 0.4, this._size * 0.25);\n ctx.lineTo(this._size * 0.4, this._size * 0.25);\n ctx.stroke();\n }\n\n public drawDecoration(ctx: CanvasRenderingContext2D): void {\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"rgba(0,0,0,.75)\";\n ctx.fillStyle = \"white\";\n ctx.strokeRect(-2, -(this._yOffset + 2), 5, 5);\n ctx.fillRect(-1, -(this._yOffset + 1), 3, 3);\n\n ctx.lineWidth = 3.5;\n ctx.lineCap = \"round\";\n ctx.fillStyle = this._isSelected ? \"rgba(35,187,252,.25)\" : \"rgba(255,215,0,.25)\";\n ctx.shadowColor = \"black\";\n ctx.shadowBlur = 10;\n this.drawHandle(ctx, true);\n\n ctx.lineWidth = 1.5;\n ctx.strokeStyle = this._isSelected ? \"rgba(35,187,252,.75)\" : \"rgba(255,215,0,.75)\";\n ctx.shadowBlur = 0;\n this.drawHandle(ctx, false);\n }\n\n protected isSelected(pt: XAndY): boolean { return this.position.distance(Point3d.create(pt.x, pt.y)) < this._size; }\n public isButtonHandled(ev: BeButtonEvent): boolean { return (BeButton.Data === ev.button && InputSource.Touch === ev.inputSource && !this._inTouchTap); }\n\n public doTouchMove(ev: BeTouchEvent): boolean {\n if (undefined === ev.viewport || !ev.isSingleTouch)\n return false;\n if (!this._isDragging || !this.setPosition(ev.viewport, ev.point))\n return false;\n ev.viewPoint = this._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return true;\n }\n\n public doTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): boolean {\n if (undefined === ev.viewport || !ev.isSingleTouch)\n return false;\n return (this._isDragging = this.isSelected(startEv.viewPoint));\n }\n\n public doTouchStart(ev: BeTouchEvent): void {\n this._isSelected = ev.isSingleTouch && this.isSelected(ev.viewPoint);\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n public doTouchEnd(ev: BeTouchEvent): void {\n if (this._isDragging && undefined !== ev.viewport)\n IModelApp.toolAdmin.currentInputState.fromPoint(ev.viewport, this._offsetPosition, InputSource.Touch); // Current location should reflect virtual cursor offset...\n this._isSelected = this._isDragging = false;\n if (undefined !== ev.viewport)\n ev.viewport.invalidateDecorations();\n }\n\n public async doTouchTap(ev: BeTouchEvent): Promise<boolean> {\n if (undefined === ev.viewport || !ev.isSingleTouch || 1 !== ev.tapCount)\n return false;\n if (!this.isSelected(ev.viewPoint)) {\n if (!this.setPosition(ev.viewport, ev.point))\n return false;\n ev.viewPoint = this._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return false;\n }\n ev.viewPoint = this._offsetPosition;\n this._inTouchTap = true;\n await IModelApp.toolAdmin.convertTouchTapToButtonDownAndUp(ev);\n this._inTouchTap = false;\n return true;\n }\n\n public static createFromTouchTap(ev: BeTouchEvent): TouchCursor | undefined {\n if (undefined === ev.viewport || !ev.isSingleTouch || 1 !== ev.tapCount)\n return undefined;\n const touchCursor = new TouchCursor(ev.viewport);\n if (!touchCursor.setPosition(ev.viewport, ev.point) && !touchCursor.setPosition(ev.viewport, ev.viewport.view.getCenter()))\n return undefined;\n ev.viewPoint = touchCursor._offsetPosition;\n IModelApp.toolAdmin.convertTouchMoveToMotion(ev); // eslint-disable-line @typescript-eslint/no-floating-promises\n return touchCursor;\n }\n}\n\n/** AccuSnap is an aide for snapping to interesting points on elements or decorations as the cursor moves over them.\n * @see [Using AccuSnap]($docs/learning/frontend/primitivetools.md#AccuSnap)\n * @public\n * @extensions\n */\nexport class AccuSnap implements Decorator {\n /** Currently active hit */\n public currHit?: HitDetail;\n /** Current list of hits. */\n public aSnapHits?: HitList<HitDetail>;\n /** Views that need to be flashed */\n public readonly needFlash = new Set<Viewport>();\n /** Views that are already flashed */\n public readonly areFlashed = new Set<Viewport>();\n /** The \"+\" that indicates where the snap point is */\n public readonly cross = new SpriteLocation();\n /** The icon that indicates what type of snap is active */\n public readonly icon = new SpriteLocation();\n /** The icon that indicates an error */\n public readonly errorIcon = new SpriteLocation();\n /** Reason key for last error */\n public errorKey?: string;\n /** localized message explaining why last error was generated. */\n public explanation?: string;\n /** Number of times \"suppress\" has been called -- unlike suspend this is not automatically cleared by tools */\n private _suppressed = 0;\n /** Location of cursor when we last checked for motion */\n private readonly _lastCursorPos = new Point2d();\n /** @internal */\n public readonly toolState = new AccuSnap.ToolState();\n /** @internal */\n protected _settings = new AccuSnap.Settings();\n /** @internal */\n public touchCursor?: TouchCursor;\n /** Current request for tooltip message. */\n private _toolTipPromise?: Promise<Promise<void>>;\n\n /** @internal */\n public onInitialized() { }\n private get _searchDistance(): number { return this.isLocateEnabled ? 1.0 : this._settings.searchDistance; }\n private get _hotDistanceInches(): number { return IModelApp.locateManager.apertureInches * this._settings.hotDistanceFactor; }\n /** Whether locate of elements under the cursor is enabled by the current InteractiveTool. */\n public get isLocateEnabled(): boolean { return this.toolState.locate; }\n /** Whether snapping to elements under the cursor is enabled by the current InteractiveTool. */\n public get isSnapEnabled(): boolean { return this.toolState.enabled; }\n /** Whether the user setting for snapping is enabled. Snapping is done only when both the user and current InteractiveTool have enabled it. */\n public get isSnapEnabledByUser(): boolean { return this._settings.enableFlag; }\n /** AccuSnap user settings */\n public get userSettings() { return this._settings; }\n\n private isFlashed(view: Viewport): boolean { return (this.areFlashed.has(view)); }\n private needsFlash(view: Viewport): boolean { return (this.needFlash.has(view)); }\n private setNeedsFlash(view: Viewport) {\n this.needFlash.add(view);\n this.clearIsFlashed(view);\n view.invalidateDecorations();\n }\n\n private setIsFlashed(view: Viewport) { this.areFlashed.add(view); }\n private clearIsFlashed(view: Viewport) { this.areFlashed.delete(view); }\n private static toSnapDetail(hit?: HitDetail): SnapDetail | undefined { return (hit && hit instanceof SnapDetail) ? hit : undefined; }\n /** Currently active snap */\n public getCurrSnapDetail(): SnapDetail | undefined { return AccuSnap.toSnapDetail(this.currHit); }\n /** Determine whether there is a current hit that is *hot*. */\n public get isHot(): boolean {\n const currSnap = this.getCurrSnapDetail();\n return !currSnap ? false : currSnap.isHot;\n }\n\n /** Optional ids to never flash. Useful for tools like \"trim curve\" that won't want a flashed segment to obscure a result preview.\n * @note Cleared when a primitive or view tool is started and saved/restored when a primitive tool is suspended/unsuspended.\n * @public\n */\n public neverFlash(ids?: Id64Arg): void {\n if (undefined === ids) {\n this.toolState.neverFlash = undefined;\n return;\n }\n\n const newIds = new Set<string>();\n for (const id of Id64.iterable(ids))\n newIds.add(id);\n\n this.toolState.neverFlash = (0 !== newIds.size ? newIds : undefined);\n }\n\n /** @internal */\n public destroy(): void {\n this.currHit = undefined;\n this.aSnapHits = undefined;\n }\n\n private get _doSnapping(): boolean { return this.isSnapEnabled && this.isSnapEnabledByUser && !this._isSnapSuspended; }\n private get _isSnapSuspended(): boolean { return (0 !== this._suppressed || 0 !== this.toolState.suspended); }\n\n /** Get the current snap divisor to use to use for SnapMode.NearestKeypoint.\n * @public\n */\n public get keypointDivisor() { return this._settings.keypointDivisor; }\n\n /** Get the current active SnapModes. SnapMode position determines priority, with the first entry being the highest. The SnapDetail will be returned for the first SnapMode that produces a hot snap.\n * @public\n */\n public getActiveSnapModes(): SnapMode[] {\n const snaps: SnapMode[] = [];\n snaps.push(SnapMode.NearestKeypoint);\n return snaps;\n }\n\n /** Can be implemented by a subclass of AccuSnap to implement a SnapMode override that applies only to the next point.\n * This method will be called whenever a new tool is installed and on button events.\n * @internal\n */\n public synchSnapMode(): void { }\n\n /** Check whether current tentative snap has valid curve geometry for finding extended intersections. */\n private get _searchForExtendedIntersections(): boolean {\n const snap = IModelApp.tentativePoint.getCurrSnap();\n return (undefined !== snap && undefined !== snap.primitive);\n }\n\n /**\n * Check to see whether its appropriate to generate an AccuSnap point, given the current user\n * and command settings, and whether a tentative point is currently active.\n */\n public get isActive(): boolean {\n // Unless we're snapping in intersect mode (to find extended intersections), skip if tentative point active...\n if (IModelApp.tentativePoint.isActive) {\n if (!this._doSnapping || !this._searchForExtendedIntersections)\n return false;\n\n const snaps = this.getActiveSnapModes();\n for (const snap of snaps) {\n if (snap === SnapMode.Intersection)\n return true;\n }\n\n return false;\n }\n\n return this._doSnapping || this.isLocateEnabled;\n }\n\n private initializeForCheckMotion(): void {\n this._lastCursorPos.setFrom(IModelApp.toolAdmin.currentInputState.lastMotion);\n }\n\n /** Clear the current AccuSnap info. */\n public clear(): void { this.setCurrHit(undefined); }\n /** @internal */\n public setCurrHit(newHit?: HitDetail): void {\n const newSnap = AccuSnap.toSnapDetail(newHit);\n const currSnap = this.getCurrSnapDetail();\n const sameElem = (undefined !== newHit && newHit.isSameHit(this.currHit));\n const sameHit = (sameElem && !newSnap);\n const sameSnap = (sameElem && undefined !== newSnap && undefined !== currSnap);\n const samePt = (sameHit || (sameSnap && newSnap.snapPoint.isAlmostEqual(currSnap.snapPoint)));\n const sameHot = (sameHit || (sameSnap && (this.isHot === newSnap.isHot)));\n const sameBaseSnapMode = (!newSnap || !currSnap || newSnap.snapMode === currSnap.snapMode);\n const sameType = (sameHot && (!currSnap || (currSnap.getHitType() === newHit.getHitType())));\n\n // see if it is the same point on the same element, the hot flags are the same multiple snaps, and the snap modes are the same\n if (samePt && sameType && sameBaseSnapMode) {\n // we know that nothing about the screen could change, just save the new hit and return to avoid screen flash\n this.currHit = newHit;\n return;\n }\n\n this.erase();\n\n // if we hit the same element with the same \"hotness\" as last time, we don't need to erase it\n // multiple snaps: but only if the old and new snap modes are the same\n if (!sameHot || !sameBaseSnapMode) {\n this.unFlashViews();\n this.setFlashHit(newHit);\n }\n\n // if we didn't get a new hit, we're done\n if (undefined === (this.currHit = newHit))\n return;\n\n // draw sprites for this hit\n this.showSnapSprite();\n }\n\n /** flash a hit in a single view. */\n private flashHitInView(hit: HitDetail, context: DecorateContext) {\n const viewport = context.viewport;\n if (!viewport || !this.hitShouldBeHilited(hit) || !this.needsFlash(viewport))\n return;\n\n hit.draw(context);\n this.setIsFlashed(viewport);\n }\n\n private setNeedsFlashView(view: Viewport) {\n if (!this.isFlashed(view) && !this.needsFlash(view))\n this.setNeedsFlash(view);\n }\n\n /** flash a hit in its view. */\n private setFlashHit(hit?: HitDetail): void {\n if (hit !== undefined && this.hitShouldBeHilited(hit))\n this.setNeedsFlashView(hit.viewport);\n }\n\n /** @internal */\n public erase(): void {\n this.clearToolTip(undefined); // make sure there's no tooltip up.\n this.clearSprites(); // remove all sprites from the screen\n }\n\n private showElemInfo(viewPt: XAndY, vp: ScreenViewport, hit: HitDetail, delay: BeDuration): void {\n if (!IModelApp.viewManager.doesHostHaveFocus || undefined !== this._toolTipPromise)\n return;\n\n if (!IModelApp.toolAdmin.wantToolTip(hit))\n return;\n\n const promise = this._toolTipPromise = delay.executeAfter(async () => {\n if (promise !== this._toolTipPromise)\n return; // we abandoned this request during delay\n try {\n const msg = await IModelApp.toolAdmin.getToolTip(hit);\n if (this._toolTipPromise === promise) // have we abandoned this request while awaiting getToolTip?\n this.showLocateMessage(viewPt, vp, msg);\n } catch { } // happens if getToolTip was canceled\n });\n }\n\n private showLocateMessage(viewPt: XAndY, vp: ScreenViewport, msg: HTMLElement | string) {\n if (IModelApp.viewManager.doesHostHaveFocus)\n vp.openToolTip(msg, viewPt);\n }\n\n /** @internal */\n public displayToolTip(viewPt: XAndY, vp: ScreenViewport, uorPt?: Point3d): void {\n // if the tooltip is already displayed, or if user doesn't want it, quit.\n if (!this._settings.toolTip || !IModelApp.notifications.isToolTipSupported || IModelApp.notifications.isToolTipOpen)\n return;\n\n const accuSnapHit = this.currHit;\n const tpHit = IModelApp.tentativePoint.getCurrSnap();\n\n // if we don't have either an AccuSnap or a tentative point hit, quit.\n if (!accuSnapHit && !tpHit && !this.errorIcon.isActive)\n return;\n\n let theHit: HitDetail | undefined;\n\n // determine which type of hit\n if (tpHit) {\n if (uorPt) {\n // see if he came back somewhere near the currently snapped element\n const aperture = (this._settings.stickyFactor * vp.pixelsFromInches(IModelApp.locateManager.apertureInches) / 2.0) + 1.5;\n if (!IModelApp.locateManager.picker.testHit(tpHit, vp, uorPt, aperture, IModelApp.locateManager.options))\n return;\n }\n theHit = tpHit;\n } else {\n theHit = accuSnapHit;\n }\n\n // if we're currently showing an error, get the error message...otherwise display hit info...\n if (!this.errorIcon.isActive && theHit) {\n this.showElemInfo(viewPt, vp, theHit, this._settings.toolTipDelay);\n return;\n }\n\n // If we have an error explanation...use it as is!\n if (this.explanation) {\n this.showLocateMessage(viewPt, vp, this.explanation);\n return;\n }\n\n // if we don't have an explanation yet, translate the error code.\n if (!this.errorKey)\n return;\n\n this.explanation = IModelApp.localization.getLocalizedString(`iModelJs:${this.errorKey}`);\n if (!this.explanation)\n return;\n\n this.showLocateMessage(viewPt, vp, this.explanation);\n }\n\n /** @internal */\n public clearToolTip(ev?: BeButtonEvent): void {\n // Throw away any stale request for a tooltip message\n this._toolTipPromise = undefined;\n if (!IModelApp.notifications.isToolTipOpen)\n return;\n\n if (ev && (5 > ev.viewPoint.distanceXY(IModelApp.notifications.toolTipLocation)))\n return;\n\n IModelApp.notifications.clearToolTip();\n }\n\n /** Display the sprites for the current snap to indicate its position on the screen and what snap mode it represents. */\n private showSnapSprite(): void {\n const snap = this.getCurrSnapDetail();\n if (!snap)\n return;\n\n const crossPt = snap.snapPoint;\n const viewport = snap.viewport;\n const crossSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}${snap.isHot ? \"sprites/SnapCross.png\" : \"sprites/SnapUnfocused.png\"}`);\n\n this.cross.activate(crossSprite, viewport, crossPt);\n\n const snapSprite = snap.sprite;\n if (snapSprite)\n this.icon.activate(snapSprite, viewport, AccuSnap.adjustIconLocation(viewport, crossPt, snapSprite.size));\n }\n\n private static adjustIconLocation(vp: Viewport, input: Point3d, iconSize: XAndY): Point3d {\n const out = vp.worldToView(input);\n out.x += (iconSize.x / 3.0);\n out.y -= (iconSize.y * 1.3);\n return vp.viewToWorld(out, out);\n }\n\n /** try to indicate what's wrong with the current point (why we're not snapping). */\n private showSnapError(out: LocateResponse, ev: BeButtonEvent) {\n this.explanation = out.explanation;\n this.errorKey = out.reason;\n this.errorIcon.deactivate();\n\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n let errorSprite: Sprite | undefined;\n switch (out.snapStatus) {\n case SnapStatus.FilteredByApp:\n errorSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}sprites/SnapAppFiltered.png`);\n break;\n\n case SnapStatus.FilteredByAppQuietly:\n this.errorKey = undefined;\n break;\n\n case SnapStatus.NotSnappable:\n errorSprite = IconSprites.getSpriteFromUrl(`${IModelApp.publicPath}sprites/SnapNotSnappable.png`);\n this.errorKey = ElementLocateManager.getFailureMessageKey(\"NotSnappable\");\n break;\n }\n\n if (!errorSprite)\n return;\n\n const spriteSize = errorSprite.size;\n const pt = AccuSnap.adjustIconLocation(vp, ev.rawPoint, spriteSize);\n\n this.errorIcon.activate(errorSprite, vp, pt);\n }\n\n private clearSprites() {\n this.errorIcon.deactivate();\n this.cross.deactivate();\n this.icon.deactivate();\n }\n\n /** determine whether a hit should be hilited or not. */\n private hitShouldBeHilited(hit: HitDetail | undefined): boolean {\n if (!hit)\n return false;\n\n if (hit.isModelHit || hit.isMapHit)\n return false; // Avoid annoying flashing of reality models.\n\n if (this.toolState.neverFlash && this.toolState.neverFlash.has(hit.sourceId))\n return false;\n\n const snap = AccuSnap.toSnapDetail(hit);\n return !snap || snap.isHot || this._settings.hiliteColdHits;\n }\n\n private unFlashViews() {\n this.needFlash.clear();\n for (const vp of this.areFlashed)\n vp.flashedId = undefined;\n\n this.areFlashed.clear();\n }\n\n /** @internal */\n public adjustPointIfHot(pt: Point3d, view: Viewport): void {\n const currSnap = this.getCurrSnapDetail();\n\n if (!currSnap || !currSnap.isHot || view !== currSnap.viewport)\n return;\n\n pt.setFrom(currSnap.adjustedPoint);\n }\n\n /** Implemented by sub-classes to update ui to show current enabled state.\n * @internal\n */\n public onEnabledStateChange(_isEnabled: boolean, _wasEnabled: boolean) { }\n\n /** @internal */\n public getHitAndList(holder: HitListHolder): HitDetail | undefined {\n const hit = this.currHit;\n if (hit) {\n holder.setHitList(this.aSnapHits);\n this.aSnapHits = undefined;\n }\n return hit;\n }\n\n private initCmdState() {\n this.toolState.suspended = 0;\n this.toolState.neverFlash = undefined;\n }\n\n /** @internal */\n public suspend(doSuspend: boolean) {\n const previousDoSnapping = this._doSnapping;\n if (doSuspend)\n this.toolState.suspended++;\n else if (this.toolState.suspended > 0)\n this.toolState.suspended--;\n\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n }\n\n /** @internal */\n public suppress(doSuppress: boolean): number {\n const previousDoSnapping = this._doSnapping;\n if (doSuppress)\n this._suppressed++;\n else if (this._suppressed > 0)\n this._suppressed--;\n\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n return this._suppressed;\n }\n\n /** Turn AccuSnap on or off */\n public enableSnap(yesNo: boolean) {\n const previousDoSnapping = this._doSnapping;\n this.toolState.enabled = yesNo;\n if (!yesNo) {\n this.clear();\n if (undefined !== this.touchCursor && !this.wantVirtualCursor) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n this.onEnabledStateChange(this._doSnapping, previousDoSnapping);\n }\n\n /** @internal */\n public intersectXY(tpSnap: SnapDetail, second: SnapDetail): IntersectDetail | undefined {\n // Get single segment curve from each snap to intersect...\n const tpSegment = tpSnap.getCurvePrimitive();\n if (undefined === tpSegment)\n return undefined;\n const segment = second.getCurvePrimitive();\n if (undefined === segment)\n return undefined;\n\n const worldToView = second.viewport.worldToViewMap.transform0;\n const detail = CurveCurve.intersectionProjectedXYPairs(worldToView, tpSegment, true, segment, true);\n if (0 === detail.length)\n return undefined;\n\n let closeIndex = 0;\n if (detail.length > 1) {\n const snapPt = worldToView.multiplyPoint3d(HitGeomType.Point === tpSnap.geomType && HitGeomType.Point !== second.geomType ? second.getPoint() : tpSnap.getPoint(), 1); // Don't check distance from arc centers...\n let lastDist: number | undefined;\n\n for (let i = 0; i < detail.length; i++) {\n const testPt = worldToView.multiplyPoint3d(detail[i].detailA.point, 1);\n const testDist = snapPt.realDistanceXY(testPt);\n\n if (undefined !== testDist && (undefined === lastDist || testDist < lastDist)) {\n lastDist = testDist;\n closeIndex = i;\n }\n }\n }\n\n const intersect = new IntersectDetail(tpSnap, SnapHeat.InRange, detail[closeIndex].detailA.point, segment, second.sourceId); // Should be ok to share hit detail with tentative...\n intersect.primitive = tpSegment; // Just save single segment that was intersected for line strings/shapes...\n\n return intersect;\n }\n\n private static doPostProcessSnapMode(snap: SnapDetail, snapMode: SnapMode): SnapStatus {\n const accuDraw = IModelApp.accuDraw;\n if (!accuDraw.isEnabled || accuDraw.isDeactivated)\n return SnapStatus.Disabled; // AccuDraw is require for this snap mode...\n\n if (HitGeomType.Surface === snap.geomType)\n return SnapStatus.NoSnapPossible; // Only valid for edge and curve hits...\n\n const curve = snap.getCurvePrimitive();\n if (undefined === curve)\n return SnapStatus.NoSnapPossible;\n\n const rMatrix = AccuDraw.getSnapRotation(snap, snap.viewport);\n if (undefined === rMatrix)\n return SnapStatus.NoSnapPossible;\n\n // Compute snap from AccuDraw origin when active or set AccuDraw rotation if accepted...\n if (!accuDraw.isActive) {\n accuDraw.setContext(AccuDrawFlags.SmartRotation); // Automatically orient compass to snap location if accepted...\n snap.setSnapMode(snapMode);\n return SnapStatus.Success;\n }\n\n const zVec = rMatrix.rowZ(); // This is a row matrix...\n const spacePoint = AccuDrawHintBuilder.projectPointToPlaneInView(accuDraw.origin, snap.getPoint(), zVec, snap.viewport, true);\n if (undefined === spacePoint)\n return SnapStatus.NoSnapPossible;\n\n let detail;\n if (SnapMode.PerpendicularPoint === snapMode)\n detail = curve.closestPoint(spacePoint, true);\n else\n detail = curve.closestTangent(spacePoint, { hintPoint: snap.getPoint(), vectorToEye: zVec, extend: true });\n\n if (undefined === detail?.curve)\n return SnapStatus.NoSnapPossible;\n\n // Close point may not be perpendicular when curve can't be extended...\n if (SnapMode.PerpendicularPoint === snapMode && !curve.isExtensibleFractionSpace) {\n const curvePlanePoint = AccuDrawHintBuilder.projectPointToPlaneInView(accuDraw.origin, detail.point, zVec, snap.viewport, true);\n if (undefined === curvePlanePoint)\n return SnapStatus.NoSnapPossible;\n\n const curveNormal = detail.point.vectorTo(curvePlanePoint);\n const curveTangent = curve.fractionToPointAndUnitTangent(detail.fraction);\n if (!curveTangent.getDirectionRef().isPerpendicularTo(curveNormal)) {\n const curveExtensionPoint = AccuDrawHintBuilder.projectPointToLineInView(accuDraw.origin, curveTangent.getOriginRef(), curveTangent.getDirectionRef(), snap.viewport, true);\n if (undefined === curveExtensionPoint)\n return SnapStatus.NoSnapPossible;\n detail.point.setFrom(curveExtensionPoint);\n }\n }\n\n const point = AccuDrawHintBuilder.projectPointToPlaneInView(detail.point, accuDraw.origin, zVec, snap.viewport, true);\n if (undefined === point)\n return SnapStatus.NoSnapPossible;\n\n snap.setSnapPoint(point, SnapHeat.InRange); // Force hot snap...\n snap.setSnapMode(snapMode);\n\n return SnapStatus.Success;\n }\n\n /** @internal */\n public static async requestSnap(thisHit: HitDetail, snapModes: SnapMode[], hotDistanceInches: number, keypointDivisor: number, hitList?: HitList<HitDetail>, out?: LocateResponse): Promise<SnapDetail | undefined> {\n if (thisHit.isModelHit || thisHit.isMapHit || thisHit.isClassifier) {\n if (snapModes.includes(SnapMode.Nearest)) {\n if (out)\n out.snapStatus = SnapStatus.Success;\n\n return new SnapDetail(thisHit, SnapMode.Nearest, SnapHeat.InRange);\n } else if (1 === snapModes.length && snapModes.includes(SnapMode.Intersection)) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n\n return undefined;\n } else {\n if (out)\n out.snapStatus = SnapStatus.Success;\n\n const realitySnap = new SnapDetail(thisHit, SnapMode.Nearest, SnapHeat.None);\n realitySnap.sprite = undefined; // Don't show a snap mode that isn't applicable, but still accept hit point...\n return realitySnap;\n }\n }\n\n let hitVp;\n if (thisHit.path) {\n hitVp = thisHit.path.sectionDrawingAttachment?.viewport ?? thisHit.path.viewAttachment?.viewport;\n }\n\n hitVp = hitVp ?? thisHit.viewport;\n if (undefined !== thisHit.subCategoryId && !thisHit.isExternalIModelHit) {\n const appearance = hitVp.getSubCategoryAppearance(thisHit.subCategoryId);\n if (appearance.dontSnap) {\n if (out) {\n out.snapStatus = SnapStatus.NotSnappable;\n out.explanation = IModelApp.localization.getLocalizedString(`iModelJs:${ElementLocateManager.getFailureMessageKey(\"NotSnappableSubCategory\")}`);\n }\n return undefined;\n }\n }\n\n const haveTangentPoint = snapModes.includes(SnapMode.TangentPoint);\n const havePerpendicularPoint = snapModes.includes(SnapMode.PerpendicularPoint);\n const postProcessSnapMode = (havePerpendicularPoint ? SnapMode.PerpendicularPoint : (haveTangentPoint ? SnapMode.TangentPoint : undefined));\n\n if (undefined !== postProcessSnapMode) {\n // NOTE: These are not valid backend snap modes. Instead make the snap request using nearest\n // snap in order to get the candidate curve to use to compute the desired snap point...\n snapModes = snapModes.filter(snapMode => (snapMode !== SnapMode.PerpendicularPoint && snapMode !== SnapMode.TangentPoint));\n if (!snapModes.includes(SnapMode.Nearest))\n snapModes.push(SnapMode.Nearest);\n }\n\n const requestProps: SnapRequestProps = {\n id: thisHit.sourceId,\n testPoint: thisHit.testPoint,\n closePoint: thisHit.hitPoint,\n worldToView: hitVp.worldToViewMap.transform0.toJSON(),\n viewFlags: hitVp.viewFlags,\n snapModes,\n snapAperture: hitVp.pixelsFromInches(hotDistanceInches),\n snapDivisor: keypointDivisor,\n subCategoryId: thisHit.subCategoryId,\n geometryClass: thisHit.geometryClass,\n modelToWorld: thisHit.transformFromSourceIModel?.toJSON(),\n };\n\n const thisGeom = (thisHit.isElementHit ? IModelApp.viewManager.overrideElementGeometry(thisHit) : IModelApp.viewManager.getDecorationGeometry(thisHit));\n\n if (undefined !== thisGeom) {\n requestProps.decorationGeometry = [{ id: thisHit.sourceId, geometryStream: thisGeom }];\n } else if (!thisHit.isElementHit) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n return undefined;\n }\n\n if (snapModes.includes(SnapMode.Intersection)) {\n if (undefined !== hitList) {\n for (const hit of hitList.hits) {\n if (thisHit.sourceId === hit.sourceId || thisHit.iModel !== hit.iModel)\n continue;\n\n const geom = (hit.isElementHit ? IModelApp.viewManager.overrideElementGeometry(hit) : IModelApp.viewManager.getDecorationGeometry(hit));\n\n if (undefined !== geom) {\n if (undefined === requestProps.decorationGeometry)\n requestProps.decorationGeometry = [{ id: thisHit.sourceId, geometryStream: geom }];\n else\n requestProps.decorationGeometry.push({ id: thisHit.sourceId, geometryStream: geom });\n } else if (!hit.isElementHit) {\n continue;\n }\n\n if (undefined === requestProps.intersectCandidates)\n requestProps.intersectCandidates = [hit.sourceId];\n else\n requestProps.intersectCandidates.push(hit.sourceId);\n\n if (5 === requestProps.intersectCandidates.length)\n break; // Search for intersection with a few of the next best hits...\n }\n }\n\n if (1 === snapModes.length && undefined === requestProps.intersectCandidates) {\n if (out)\n out.snapStatus = SnapStatus.NoSnapPossible;\n\n return undefined; // Don't make back end request when only doing intersection snap when we don't have another hit to intersect with...\n }\n }\n\n try {\n const result = await thisHit.iModel[_requestSnap](requestProps);\n\n if (out)\n out.snapStatus = result.status;\n\n if (result.status !== SnapStatus.Success)\n return undefined;\n\n const parseCurve = (json: any): CurvePrimitive | undefined => {\n const parsed = undefined !== json ? GeomJson.Reader.parse(json) : undefined;\n return parsed instanceof GeometryQuery && \"curvePrimitive\" === parsed.geometryCategory ? parsed : undefined;\n };\n\n let displayTransform;\n if (undefined !== thisHit.modelId) {\n displayTransform = thisHit.viewport.view.computeDisplayTransform({\n modelId: thisHit.modelId,\n elementId: thisHit.sourceId,\n viewAttachmentId: thisHit.path?.viewAttachment?.id,\n inSectionDrawingAttachment: undefined !== thisHit.path?.sectionDrawingAttachment,\n });\n }\n\n const snapPoint = Point3d.fromJSON(result.snapPoint);\n displayTransform?.multiplyPoint3d(snapPoint, snapPoint);\n\n const snap = new SnapDetail(thisHit, result.snapMode, result.heat, snapPoint);\n\n snap.setCurvePrimitive(parseCurve(result.curve), displayTransform, result.geomType);\n if (undefined !== result.parentGeomType)\n snap.parentGeomType = result.parentGeomType;\n\n // Update hitPoint from readPixels with exact point location corrected to surface/edge geometry.\n if (undefined !== result.hitPoint) {\n snap.hitPoint.setFromJSON(result.hitPoint);\n displayTransform?.multiplyPoint3d(snap.hitPoint, snap.hitPoint);\n }\n\n // Apply display transform to normal.\n if (undefined !== result.normal) {\n snap.normal = Vector3d.fromJSON(result.normal);\n displayTransform?.matrix.multiplyVector(snap.normal, snap.normal);\n snap.normal.normalizeInPlace();\n }\n\n if (undefined !== postProcessSnapMode && SnapMode.Nearest === result.snapMode) {\n if (SnapStatus.Success !== this.doPostProcessSnapMode(snap, postProcessSnapMode))\n return undefined;\n return snap;\n }\n\n if (SnapMode.Intersection !== snap.snapMode)\n return snap;\n\n if (undefined === result.intersectId)\n return undefined;\n\n const otherPrimitive = parseCurve(result.intersectCurve);\n if (undefined === otherPrimitive)\n return undefined;\n\n const intersect = new IntersectDetail(snap, snap.heat, snap.snapPoint, otherPrimitive, result.intersectId);\n return intersect;\n } catch {\n if (out)\n out.snapStatus = SnapStatus.Aborted;\n\n return undefined;\n }\n }\n\n private async getAccuSnapDetail(hitList: HitList<HitDetail>, out: LocateResponse): Promise<SnapDetail | undefined> {\n const thisHit = hitList.getNextHit();\n if (undefined === thisHit)\n return undefined;\n\n const filterStatus: LocateFilterStatus = (this.isLocateEnabled ? await IModelApp.locateManager.filterHit(thisHit, LocateAction.AutoLocate, out) : LocateFilterStatus.Accept);\n if (LocateFilterStatus.Accept !== filterStatus) {\n out.snapStatus = IModelApp.toolAdmin.wantToolTip(thisHit) ? SnapStatus.FilteredByApp : SnapStatus.FilteredByAppQuietly;\n return undefined;\n }\n\n let snapModes: SnapMode[];\n if (IModelApp.tentativePoint.isActive) {\n snapModes = [];\n snapModes.push(SnapMode.Nearest); // Special case: isActive only allows snapping with tentative to find extended intersections...\n } else {\n snapModes = this.getActiveSnapModes(); // Get the list of point snap modes to consider\n }\n\n const thisSnap = await AccuSnap.requestSnap(thisHit, snapModes, this._hotDistanceInches, this.keypointDivisor, hitList, out);\n if (undefined === thisSnap)\n return undefined;\n\n if (IModelApp.tentativePoint.isActive) {\n const tpSnap = IModelApp.tentativePoint.getCurrSnap();\n if (undefined === tpSnap)\n return undefined;\n const intersectSnap = this.intersectXY(tpSnap, thisSnap);\n if (undefined === intersectSnap)\n return undefined;\n hitList.setCurrentHit(thisHit);\n return intersectSnap;\n }\n\n IModelApp.accuDraw.onSnap(thisSnap); // AccuDraw can adjust nearest snap to intersection of circle (polar distance lock) or line (axis lock) with snapped to curve...\n hitList.setCurrentHit(thisHit);\n return thisSnap;\n }\n\n /** Request a snap from the backend for the supplied HitDetail.\n * @param hit The HitDetail to snap to.\n * @param snapMode Optional SnapMode, uses active snap modes if not specified.\n * @return A Promise for the SnapDetail or undefined if no snap could be created.\n */\n public async doSnapRequest(hit: HitDetail, snapMode?: SnapMode): Promise<SnapDetail | undefined> {\n let snapModes: SnapMode[];\n if (undefined === snapMode)\n snapModes = this.getActiveSnapModes();\n else\n snapModes = [snapMode];\n\n return AccuSnap.requestSnap(hit, snapModes, this._hotDistanceInches, this.keypointDivisor);\n }\n\n private findHits(ev: BeButtonEvent, force: boolean = false): SnapStatus {\n // When using AccuSnap to locate elements, we have to start with the datapoint adjusted\n // for locks and not the raw point. Otherwise, when grid/unit lock are on, we locate elements by\n // points not on the grid. This causes them to be \"pulled\" off the grid when they are accepted. On\n // the other hand, when NOT locating, we need to use the raw point so we can snap to elements\n // away from the grid.\n const vp = ev.viewport;\n if (undefined === vp)\n return SnapStatus.NoElements;\n\n const testPoint = this.isLocateEnabled ? ev.point : ev.rawPoint;\n const picker = IModelApp.locateManager.picker;\n const options = IModelApp.locateManager.options.clone(); // Copy to avoid changing out from under active Tool...\n\n // NOTE: Since TestHit will use the same HitSource as the input hit we only need to sets this for DoPick...\n options.hitSource = this.isSnapEnabled ? HitSource.AccuSnap : HitSource.MotionLocate;\n\n let aperture = (vp.pixelsFromInches(IModelApp.locateManager.apertureInches) / 2.0) + 1.5;\n this.initializeForCheckMotion();\n aperture *= this._searchDistance;\n\n if (0 === picker.doPick(vp, testPoint, aperture, options)) {\n this.aSnapHits = undefined; // Clear any previous hit list so reset won't cycle through hits cursor is no longer over, etc.\n return SnapStatus.NoElements;\n }\n\n this.aSnapHits = picker.getHitList(true); // take ownership of the pickElem hit list.\n\n // see if we should keep the current hit\n const canBeSticky = !force && this.aSnapHits.length > 1 && this.currHit && (HitDetailType.Intersection !== this.currHit.getHitType() && this.currHit.priority < HitPriority.PlanarSurface);\n if (canBeSticky) {\n for (let iHit = 1; iHit < this.aSnapHits.length; ++iHit) {\n const thisHit = this.aSnapHits.hits[iHit];\n if (!thisHit.isSameHit(this.currHit))\n continue;\n this.aSnapHits.removeHit(iHit);\n this.aSnapHits.insertHit(0, thisHit);\n break;\n }\n }\n\n return SnapStatus.Success;\n }\n\n private async findLocatableHit(ev: BeButtonEvent, newSearch: boolean, out: LocateResponse): Promise<HitDetail | undefined> {\n out.snapStatus = SnapStatus.NoElements;\n\n if (newSearch) {\n this.aSnapHits = undefined;\n // search for new hits, but if the cursor is still close to the current hit, don't throw away list.\n if (SnapStatus.Success !== (out.snapStatus = this.findHits(ev)))\n return undefined;\n } else {\n if (!this.aSnapHits) {\n out.snapStatus = SnapStatus.NoElements;\n return undefined;\n }\n }\n\n const thisList = this.aSnapHits;\n if (undefined === thisList)\n return undefined;\n let thisHit: HitDetail | undefined;\n let firstRejected;\n const filterResponse = new LocateResponse();\n\n // keep looking through hits until we find one that is accu-snappable.\n while (undefined !== (thisHit = thisList.getNextHit())) {\n if (LocateFilterStatus.Accept === await IModelApp.locateManager.filterHit(thisHit, LocateAction.AutoLocate, filterResponse))\n return thisHit;\n // we only care about the status of the first hit.\n if (undefined !== firstRejected)\n continue;\n firstRejected = filterResponse.clone();\n firstRejected.snapStatus = IModelApp.toolAdmin.wantToolTip(thisHit) ? SnapStatus.FilteredByApp : SnapStatus.FilteredByAppQuietly;\n }\n\n if (undefined !== firstRejected)\n out.setFrom(firstRejected);\n\n // Reset current hit index to go back to first hit on next AccuSnap reset event...\n thisList.resetCurrentHit();\n return undefined;\n }\n\n /** When in auto-locate mode, advance to the next hit without searching again.\n * @internal\n */\n public async resetButton(): Promise<SnapStatus> {\n let hit: HitDetail | undefined;\n const out = new LocateResponse();\n out.snapStatus = SnapStatus.Disabled;\n\n this.clearToolTip(undefined);\n\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n\n if (this._doSnapping) {\n // if we don't have any more candidate hits, get a new list at the current location\n if (!this.aSnapHits || (0 === this.aSnapHits.length)) {\n out.snapStatus = this.findHits(ev);\n hit = (SnapStatus.Success !== out.snapStatus || undefined === this.aSnapHits) ? undefined : await this.getAccuSnapDetail(this.aSnapHits, out);\n } else {\n // drop the current hit from the list and then retest the list (without the dropped hit) to find the new snap\n this.aSnapHits.removeCurrentHit();\n hit = await this.getAccuSnapDetail(this.aSnapHits, out);\n }\n if (!this._doSnapping)\n hit = undefined; // Snap no longer requested...\n } else if (this.isLocateEnabled) {\n hit = await this.findLocatableHit(ev, false, out); // get next AccuSnap path (or undefined)\n if (!this.isLocateEnabled)\n hit = undefined; // Hit no longer requested...\n }\n\n // set the current hit\n if (hit || this.currHit)\n this.setCurrHit(hit);\n\n // indicate errors\n this.showSnapError(out, ev);\n return out.snapStatus;\n }\n\n /** Find the best snap point according to the current cursor location\n * @internal\n */\n public async onMotion(ev: BeButtonEvent): Promise<void> {\n this.clearToolTip(ev);\n\n const vp = ev.viewport;\n if (undefined === vp)\n return;\n\n const out = new LocateResponse();\n out.snapStatus = SnapStatus.Disabled;\n\n let hit: HitDetail | undefined;\n if (this.isActive) {\n if (this._doSnapping) {\n out.snapStatus = this.findHits(ev);\n hit = (SnapStatus.Success !== out.snapStatus || undefined === this.aSnapHits) ? undefined : await this.getAccuSnapDetail(this.aSnapHits, out);\n if (!this._doSnapping)\n hit = undefined; // Snap no longer requested...\n } else if (this.isLocateEnabled) {\n hit = await this.findLocatableHit(ev, true, out);\n if (!this.isLocateEnabled)\n hit = undefined; // Hit no longer requested...\n }\n }\n\n // set the current hit and display the sprite (based on snap's KeypointType)\n if (hit || this.currHit)\n this.setCurrHit(hit);\n\n // set up active error before calling displayToolTip to indicate error or show locate message...\n this.showSnapError(out, ev);\n this.displayToolTip(ev.viewPoint, vp, ev.rawPoint);\n\n if (undefined !== this.touchCursor && InputSource.Mouse === ev.inputSource) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n\n /** @internal */\n public onPreButtonEvent(ev: BeButtonEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.isButtonHandled(ev) : false;\n }\n\n /** @internal */\n public onTouchStart(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor)\n this.touchCursor.doTouchStart(ev);\n }\n\n /** @internal */\n public onTouchEnd(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor && 0 === ev.touchCount)\n this.touchCursor.doTouchEnd(ev);\n }\n\n /** @internal */\n public onTouchCancel(ev: BeTouchEvent): void {\n if (undefined !== this.touchCursor)\n this.touchCursor.doTouchEnd(ev);\n }\n\n /** @internal */\n public onTouchMove(ev: BeTouchEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.doTouchMove(ev) : false;\n }\n\n /** @internal */\n public onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): boolean {\n return (undefined !== this.touchCursor) ? this.touchCursor.doTouchMoveStart(ev, startEv) : false;\n }\n\n /** @internal */\n public get wantVirtualCursor(): boolean {\n return this._doSnapping || (this.isLocateEnabled && ToolSettings.enableVirtualCursorForLocate);\n }\n\n /** @internal */\n public async onTouchTap(ev: BeTouchEvent): Promise<boolean> {\n if (undefined !== this.touchCursor)\n return this.touchCursor.doTouchTap(ev);\n if (!this.wantVirtualCursor)\n return false;\n this.touchCursor = TouchCursor.createFromTouchTap(ev);\n if (undefined === this.touchCursor)\n return false;\n // Give active tool an opportunity to update it's tool assistance since event won't be passed along...\n const tool = IModelApp.toolAdmin.activeTool;\n if (undefined === tool)\n return true;\n await tool.onSuspend();\n await tool.onUnsuspend();\n return true;\n }\n\n private flashElements(context: DecorateContext): void {\n const viewport = context.viewport;\n if (this.currHit) {\n if (this.needsFlash(viewport))\n this.flashHitInView(this.currHit, context);\n return;\n }\n\n const hit = IModelApp.tentativePoint.getCurrSnap();\n if (!hit || hit.isModelHit || hit.isMapHit)\n return; // Don't hilite reality models.\n\n if (this.toolState.neverFlash && this.toolState.neverFlash.has(hit.sourceId))\n return;\n\n hit.draw(context);\n }\n\n /** @internal */\n public decorate(context: DecorateContext): void {\n if (undefined !== this.touchCursor && this.touchCursor.viewport === context.viewport)\n context.addCanvasDecoration(this.touchCursor, true);\n\n this.flashElements(context);\n\n if (this.cross.isActive) {\n this.cross.decorate(context);\n this.icon.decorate(context);\n }\n\n this.errorIcon.decorate(context);\n }\n\n private clearElemFromHitList(element: string) {\n if (this.aSnapHits)\n this.aSnapHits.removeHitsFrom(element);\n }\n\n /** @internal */\n public clearIfElement(sourceId: string): void {\n this.clearElemFromHitList(sourceId);\n\n const hit = this.currHit;\n if (hit && hit.sourceId === sourceId) {\n this.destroy();\n }\n }\n\n /** Enable locating elements.\n * @public\n */\n public enableLocate(yesNo: boolean) {\n this.toolState.locate = yesNo;\n if (!yesNo && undefined !== this.touchCursor && !this.wantVirtualCursor) {\n this.touchCursor = undefined;\n IModelApp.viewManager.invalidateDecorationsAllViews();\n }\n }\n\n /** Called whenever a new [[Tool]] is started.\n * @internal\n */\n public onStartTool(): void {\n this.initCmdState();\n this.enableSnap(false);\n this.enableLocate(false);\n IModelApp.tentativePoint.clear(true);\n }\n\n /**\n * Force AccuSnap to reevaluate the snap at the current cursor location.\n * This is useful of an application changes the snap mode and wants AccuSnap to choose it immediately, without\n * requiring the user to move the mouse.\n * @internal\n */\n public async reEvaluate() {\n if (this.getCurrSnapDetail()) {\n const ev = new BeButtonEvent();\n IModelApp.toolAdmin.fillEventFromCursorLocation(ev);\n return this.onMotion(ev);\n }\n }\n}\n\n/** TentativeOrAccuSnap returns information about an active snap generated by either [[AccuSnap]] or [[TentativePoint]].\n * @public\n */\nexport class TentativeOrAccuSnap {\n /** @return true if AccuSnap is *hot* or TentativePoint is active and snapped to pickable geometry. */\n public static get isHot(): boolean { return IModelApp.accuSnap.isHot || IModelApp.tentativePoint.isSnapped; }\n\n /** Get the current snap from either AccuSnap or TentativePoint.\n * @param checkIsHot true to only return the snap from AccuSnap when it is *hot*.\n * @return The current snap from AccuSnap, TentativePoint, or undefined.\n */\n public static getCurrentSnap(checkIsHot: boolean = true): SnapDetail | undefined {\n // Checking for a hot AccuSnap before checking TentativePoint is done to support extended intersections...\n if (IModelApp.accuSnap.isHot)\n return IModelApp.accuSnap.getCurrSnapDetail();\n\n if (IModelApp.tentativePoint.isSnapped)\n return IModelApp.tentativePoint.currSnap;\n\n return (checkIsHot ? undefined : IModelApp.accuSnap.getCurrSnapDetail());\n }\n\n /** @return The current snap location from AccuSnap or TentativePoint */\n public static getCurrentPoint(): Point3d {\n if (IModelApp.accuSnap.isHot) {\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\n if (snap)\n return snap.adjustedPoint;\n }\n\n return IModelApp.tentativePoint.getPoint();\n }\n\n /** @return The current snap Viewport from AccuSnap or TentativePoint */\n public static getCurrentView(): ScreenViewport | undefined {\n const snap = IModelApp.accuSnap.getCurrSnapDetail();\n return snap ? snap.viewport : IModelApp.tentativePoint.viewport;\n }\n}\n\n/** @public */\nexport namespace AccuSnap {\n export class ToolState {\n public enabled = false;\n public locate = false;\n public suspended = 0;\n public neverFlash?: Id64Set;\n public setFrom(other: ToolState): void {\n this.enabled = other.enabled;\n this.locate = other.locate;\n this.suspended = other.suspended;\n this.neverFlash = other.neverFlash;\n }\n public clone(): ToolState {\n const val = new ToolState();\n val.setFrom(this);\n return val;\n }\n }\n\n export class Settings {\n /** How far cursor can be from snap location (relative to snap aperture) and be considered a hot snap */\n public hotDistanceFactor = 1.2;\n /** When moving along an element, affects the affinity for snapping to the same curve as the previous snap */\n public stickyFactor = 1.0;\n /** Factor applied to locate aperture when snapping is enabled and used to pick snap candidates */\n public searchDistance = 2.0;\n /** Whether the snapped element is also hilited when the snap is not hot */\n public hiliteColdHits = true;\n /** Enables snap on cursor motion when true, only snap using Tentative snap when false */\n public enableFlag = true;\n /** Whether to show a tooltip for snap and element locate */\n public toolTip = true;\n /** Delay before tooltip appears */\n public toolTipDelay = BeDuration.fromSeconds(.5);\n /** Curve segment divisor used by SnapMode.NearestKeypoint */\n public keypointDivisor = 2;\n }\n}\n"]}
@@ -244,7 +244,7 @@ export class AuxCoordSystem2dState extends AuxCoordSystemState {
244
244
  super(props, iModel);
245
245
  this.origin = Point2d.fromJSON(props.origin);
246
246
  this.angle = JsonUtils.asDouble(props.angle);
247
- this._rMatrix = Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(this.angle));
247
+ this._rMatrix = Matrix3d.createRotationAroundVector(Vector3d.unitZ(), Angle.createDegrees(this.angle)) ?? Matrix3d.createIdentity();
248
248
  }
249
249
  toJSON() {
250
250
  const val = super.toJSON();