@vertexvis/viewer 1.0.2-canary.3 → 1.0.2-canary.4

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 (501) hide show
  1. package/dist/cjs/config-20ozv4y8.js.map +1 -1
  2. package/dist/cjs/controller-BhcNbaX_.js.map +1 -1
  3. package/dist/cjs/controller-CSwG6gbQ.js.map +1 -1
  4. package/dist/cjs/cursors-BZmDRtaZ.js.map +1 -1
  5. package/dist/cjs/dom-BBil4aN3.js.map +1 -1
  6. package/dist/cjs/dom-CvGkFQon.js.map +1 -1
  7. package/dist/cjs/entities-D6kgGria.js.map +1 -1
  8. package/dist/cjs/geometry_pb-BTko2Wi0.js.map +1 -1
  9. package/dist/cjs/grpc-BsWFEUrc.js.map +1 -1
  10. package/dist/cjs/index.cjs.js.map +1 -1
  11. package/dist/cjs/model-C9WvOKYT.js.map +1 -1
  12. package/dist/cjs/model-D17EQTIh.js.map +1 -1
  13. package/dist/cjs/model-DAB4oD5n.js.map +1 -1
  14. package/dist/cjs/model-DkXCzhs_.js.map +1 -1
  15. package/dist/cjs/multiElementInteractionHandler-BHvRKVIp.js.map +1 -1
  16. package/dist/cjs/overlays-B-06bUbI.js.map +1 -1
  17. package/dist/cjs/queries-Da9I-xMf.js.map +1 -1
  18. package/dist/cjs/regl-component-HhKCyGQ3.js.map +1 -1
  19. package/dist/cjs/representation_pb-CrCGjlyP.js.map +1 -1
  20. package/dist/cjs/results-1wRRZiYG.js.map +1 -1
  21. package/dist/cjs/row-Cet6xXup.js.map +1 -1
  22. package/dist/cjs/stencil-Hsr_8Chs.js.map +1 -1
  23. package/dist/cjs/streamAttributes-D_J-W8-2.js.map +1 -1
  24. package/dist/cjs/templates-DvjgjnlO.js.map +1 -1
  25. package/dist/cjs/util-DIJSIQXH.js.map +1 -1
  26. package/dist/cjs/utils-CibrnHQ4.js.map +1 -1
  27. package/dist/cjs/utils-D8MbXbwO.js.map +1 -1
  28. package/dist/cjs/utils-qErVs2Vt.js.map +1 -1
  29. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +6 -8
  30. package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
  31. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
  32. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
  33. package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -2
  34. package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
  35. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
  36. package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
  37. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
  38. package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js.map +1 -1
  39. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
  40. package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js.map +1 -1
  41. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +1 -1
  42. package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js.map +1 -1
  43. package/dist/cjs/vertex-viewer-icon.cjs.entry.js.map +1 -1
  44. package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js.map +1 -1
  45. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
  46. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
  47. package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
  48. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js.map +1 -1
  49. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js.map +1 -1
  50. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
  51. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js.map +1 -1
  52. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js.map +1 -1
  53. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +2 -2
  54. package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
  55. package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
  56. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +1 -1
  57. package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js.map +1 -1
  58. package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js.map +1 -1
  59. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +4 -5
  60. package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
  61. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
  62. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js.map +1 -1
  63. package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js.map +1 -1
  64. package/dist/cjs/vertex-viewer.cjs.entry.js +9 -5
  65. package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
  66. package/dist/cjs/viewport-CG1VYkIU.js.map +1 -1
  67. package/dist/collection/components/scene-tree/errors.js.map +1 -1
  68. package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
  69. package/dist/collection/components/scene-tree/lib/dom.js.map +1 -1
  70. package/dist/collection/components/scene-tree/lib/errors.js.map +1 -1
  71. package/dist/collection/components/scene-tree/lib/grpc.js.map +1 -1
  72. package/dist/collection/components/scene-tree/lib/handlers.js.map +1 -1
  73. package/dist/collection/components/scene-tree/lib/row.js.map +1 -1
  74. package/dist/collection/components/scene-tree/lib/viewer-ops.js.map +1 -1
  75. package/dist/collection/components/scene-tree/scene-tree.js +2 -2
  76. package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
  77. package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
  78. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
  79. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
  80. package/dist/collection/components/scene-tree-table-cell/utils.js.map +1 -1
  81. package/dist/collection/components/scene-tree-table-layout/lib/dom.js.map +1 -1
  82. package/dist/collection/components/scene-tree-table-layout/lib/window.js.map +1 -1
  83. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +5 -5
  84. package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
  85. package/dist/collection/components/viewer/utils.js.map +1 -1
  86. package/dist/collection/components/viewer/viewer.js +9 -5
  87. package/dist/collection/components/viewer/viewer.js.map +1 -1
  88. package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js +2 -2
  89. package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js.map +1 -1
  90. package/dist/collection/components/viewer-dom-element/utils.js.map +1 -1
  91. package/dist/collection/components/viewer-dom-element/viewer-dom-element.js +1 -1
  92. package/dist/collection/components/viewer-dom-element/viewer-dom-element.js.map +1 -1
  93. package/dist/collection/components/viewer-dom-group/utils.js.map +1 -1
  94. package/dist/collection/components/viewer-dom-group/viewer-dom-group.js +1 -1
  95. package/dist/collection/components/viewer-dom-group/viewer-dom-group.js.map +1 -1
  96. package/dist/collection/components/viewer-dom-renderer/renderer2d.js.map +1 -1
  97. package/dist/collection/components/viewer-dom-renderer/renderer3d.js.map +1 -1
  98. package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js.map +1 -1
  99. package/dist/collection/components/viewer-hit-result-indicator/lib/dom.js.map +1 -1
  100. package/dist/collection/components/viewer-hit-result-indicator/lib/indicator.js.map +1 -1
  101. package/dist/collection/components/viewer-hit-result-indicator/lib/plane.js.map +1 -1
  102. package/dist/collection/components/viewer-hit-result-indicator/lib/point.js.map +1 -1
  103. package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js +1 -1
  104. package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js.map +1 -1
  105. package/dist/collection/components/viewer-icon/viewer-icon.js.map +1 -1
  106. package/dist/collection/components/viewer-markup/markup-utils.js.map +1 -1
  107. package/dist/collection/components/viewer-markup/viewer-markup-components.js.map +1 -1
  108. package/dist/collection/components/viewer-markup/viewer-markup.js +1 -1
  109. package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
  110. package/dist/collection/components/viewer-markup-arrow/interactions.js.map +1 -1
  111. package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
  112. package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow-components.js.map +1 -1
  113. package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow.js.map +1 -1
  114. package/dist/collection/components/viewer-markup-circle/interactions.js.map +1 -1
  115. package/dist/collection/components/viewer-markup-circle/utils.js.map +1 -1
  116. package/dist/collection/components/viewer-markup-circle/viewer-markup-circle.js.map +1 -1
  117. package/dist/collection/components/viewer-markup-freeform/interactions.js.map +1 -1
  118. package/dist/collection/components/viewer-markup-freeform/utils.js.map +1 -1
  119. package/dist/collection/components/viewer-markup-freeform/viewer-markup-freeform.js.map +1 -1
  120. package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.js.map +1 -1
  121. package/dist/collection/components/viewer-measurement-details/viewer-measurement-details.js.map +1 -1
  122. package/dist/collection/components/viewer-measurement-distance/hitTest.js.map +1 -1
  123. package/dist/collection/components/viewer-measurement-distance/interactions.js.map +1 -1
  124. package/dist/collection/components/viewer-measurement-distance/utils.js.map +1 -1
  125. package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js.map +1 -1
  126. package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js +1 -1
  127. package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js.map +1 -1
  128. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +1 -1
  129. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js.map +1 -1
  130. package/dist/collection/components/viewer-measurement-precise/viewer-measurement-precise.js.map +1 -1
  131. package/dist/collection/components/viewer-pin-group/utils.js.map +1 -1
  132. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js +2 -2
  133. package/dist/collection/components/viewer-pin-group/viewer-pin-group.js.map +1 -1
  134. package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
  135. package/dist/collection/components/viewer-pin-tool/utils.js.map +1 -1
  136. package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js +1 -1
  137. package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js.map +1 -1
  138. package/dist/collection/components/viewer-teleport-tool/viewer-teleport-tool.js.map +1 -1
  139. package/dist/collection/components/viewer-transform-widget/util.js +1 -2
  140. package/dist/collection/components/viewer-transform-widget/util.js.map +1 -1
  141. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
  142. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +3 -3
  143. package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
  144. package/dist/collection/components/viewer-transform-widget/widget.js.map +1 -1
  145. package/dist/collection/components/viewer-view-cube/viewer-view-cube.js +1 -1
  146. package/dist/collection/components/viewer-view-cube/viewer-view-cube.js.map +1 -1
  147. package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js.map +1 -1
  148. package/dist/collection/lib/annotations/controller.js.map +1 -1
  149. package/dist/collection/lib/canvases/controller.js.map +1 -1
  150. package/dist/collection/lib/canvases/mapper.js.map +1 -1
  151. package/dist/collection/lib/config.js.map +1 -1
  152. package/dist/collection/lib/cursors.js.map +1 -1
  153. package/dist/collection/lib/dom.js.map +1 -1
  154. package/dist/collection/lib/grpc.js.map +1 -1
  155. package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
  156. package/dist/collection/lib/interactions/flyToPartKeyInteraction.js.map +1 -1
  157. package/dist/collection/lib/interactions/flyToPositionKeyInteraction.js.map +1 -1
  158. package/dist/collection/lib/interactions/interactionApi.js.map +1 -1
  159. package/dist/collection/lib/interactions/interactionApiOrthographic.js.map +1 -1
  160. package/dist/collection/lib/interactions/interactionApiPerspective.js.map +1 -1
  161. package/dist/collection/lib/interactions/mouseInteractionHandler.js.map +1 -1
  162. package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
  163. package/dist/collection/lib/interactions/multiElementInteractionHandler.js.map +1 -1
  164. package/dist/collection/lib/interactions/multiPointerInteractionHandler.js.map +1 -1
  165. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js.map +1 -1
  166. package/dist/collection/lib/interactions/pointerInteractionHandler.js.map +1 -1
  167. package/dist/collection/lib/interactions/tapInteractionHandler.js.map +1 -1
  168. package/dist/collection/lib/interactions/touchInteractionHandler.js.map +1 -1
  169. package/dist/collection/lib/keyBinding.js.map +1 -1
  170. package/dist/collection/lib/mappers/annotation.js.map +1 -1
  171. package/dist/collection/lib/mappers/camera.js.map +1 -1
  172. package/dist/collection/lib/mappers/color.js.map +1 -1
  173. package/dist/collection/lib/mappers/colorMaterial.js.map +1 -1
  174. package/dist/collection/lib/mappers/corePb.js.map +1 -1
  175. package/dist/collection/lib/mappers/corePbJs.js.map +1 -1
  176. package/dist/collection/lib/mappers/frameStreaming.js.map +1 -1
  177. package/dist/collection/lib/mappers/geometry.js.map +1 -1
  178. package/dist/collection/lib/mappers/material.js.map +1 -1
  179. package/dist/collection/lib/mappers/pagination.js.map +1 -1
  180. package/dist/collection/lib/mappers/scalar.js.map +1 -1
  181. package/dist/collection/lib/mappers/streamAttributes.js.map +1 -1
  182. package/dist/collection/lib/markup/interactions.js.map +1 -1
  183. package/dist/collection/lib/measurement/controller.js.map +1 -1
  184. package/dist/collection/lib/measurement/entities.js.map +1 -1
  185. package/dist/collection/lib/measurement/interactions.js.map +1 -1
  186. package/dist/collection/lib/measurement/mapper.js.map +1 -1
  187. package/dist/collection/lib/measurement/model.js.map +1 -1
  188. package/dist/collection/lib/measurement/overlays.js.map +1 -1
  189. package/dist/collection/lib/measurement/results.js.map +1 -1
  190. package/dist/collection/lib/meters.js.map +1 -1
  191. package/dist/collection/lib/model-views/controller.js.map +1 -1
  192. package/dist/collection/lib/model-views/mapper.js.map +1 -1
  193. package/dist/collection/lib/pins/controller.js.map +1 -1
  194. package/dist/collection/lib/pins/interactions.js.map +1 -1
  195. package/dist/collection/lib/pmi/controller.js.map +1 -1
  196. package/dist/collection/lib/pmi/mapper.js.map +1 -1
  197. package/dist/collection/lib/rendering/canvas.js.map +1 -1
  198. package/dist/collection/lib/rendering/imageLoaders.js.map +1 -1
  199. package/dist/collection/lib/rendering/matrices.js.map +1 -1
  200. package/dist/collection/lib/rendering/timing.js.map +1 -1
  201. package/dist/collection/lib/rendering/utils.js.map +1 -1
  202. package/dist/collection/lib/rendering/vectors.js.map +1 -1
  203. package/dist/collection/lib/scene-items/controller.js.map +1 -1
  204. package/dist/collection/lib/scene-items/mapper.js.map +1 -1
  205. package/dist/collection/lib/scenes/camera.js.map +1 -1
  206. package/dist/collection/lib/scenes/cameraRenderResult.js.map +1 -1
  207. package/dist/collection/lib/scenes/colorMaterial.js.map +1 -1
  208. package/dist/collection/lib/scenes/crossSectioner.js.map +1 -1
  209. package/dist/collection/lib/scenes/mapper.js.map +1 -1
  210. package/dist/collection/lib/scenes/operations.js.map +1 -1
  211. package/dist/collection/lib/scenes/queries.js.map +1 -1
  212. package/dist/collection/lib/scenes/raycaster.js.map +1 -1
  213. package/dist/collection/lib/scenes/scene.js.map +1 -1
  214. package/dist/collection/lib/scenes/sceneOperationExecuteResult.js.map +1 -1
  215. package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
  216. package/dist/collection/lib/stencil.js.map +1 -1
  217. package/dist/collection/lib/storage.js.map +1 -1
  218. package/dist/collection/lib/stream/dispatcher.js.map +1 -1
  219. package/dist/collection/lib/stream/stream.js.map +1 -1
  220. package/dist/collection/lib/stream/utils.js.map +1 -1
  221. package/dist/collection/lib/teleportation/interactions.js.map +1 -1
  222. package/dist/collection/lib/templates.js.map +1 -1
  223. package/dist/collection/lib/token.js.map +1 -1
  224. package/dist/collection/lib/transforms/axis-lines.js.map +1 -1
  225. package/dist/collection/lib/transforms/axis-rotation.js.map +1 -1
  226. package/dist/collection/lib/transforms/axis-translation.js.map +1 -1
  227. package/dist/collection/lib/transforms/controller.js.map +1 -1
  228. package/dist/collection/lib/transforms/drawable.js.map +1 -1
  229. package/dist/collection/lib/transforms/hits.js.map +1 -1
  230. package/dist/collection/lib/transforms/line.js.map +1 -1
  231. package/dist/collection/lib/transforms/mesh.js.map +1 -1
  232. package/dist/collection/lib/transforms/shape.js.map +1 -1
  233. package/dist/collection/lib/transforms/transformation-delta.js.map +1 -1
  234. package/dist/collection/lib/transforms/util.js.map +1 -1
  235. package/dist/collection/lib/types/clippingPlanes.js.map +1 -1
  236. package/dist/collection/lib/types/depthBuffer.js.map +1 -1
  237. package/dist/collection/lib/types/featureMap.js.map +1 -1
  238. package/dist/collection/lib/types/flags.js.map +1 -1
  239. package/dist/collection/lib/types/frame.js.map +1 -1
  240. package/dist/collection/lib/types/frameCamera.js.map +1 -1
  241. package/dist/collection/lib/types/loadableResource.js.map +1 -1
  242. package/dist/collection/lib/types/orientation.js.map +1 -1
  243. package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
  244. package/dist/collection/lib/types/standardView.js.map +1 -1
  245. package/dist/collection/lib/types/stencilBuffer.js.map +1 -1
  246. package/dist/collection/lib/types/synchronizedClock.js.map +1 -1
  247. package/dist/collection/lib/types/viewport.js.map +1 -1
  248. package/dist/collection/lib/visibilityObserver.js.map +1 -1
  249. package/dist/collection/lib/volume-intersection/controller.js.map +1 -1
  250. package/dist/collection/lib/volume-intersection/interactions.js.map +1 -1
  251. package/dist/collection/lib/volume-intersection/model.js.map +1 -1
  252. package/dist/collection/lib/walk-mode/controller.js.map +1 -1
  253. package/dist/collection/lib/walk-mode/interactions.js.map +1 -1
  254. package/dist/collection/lib/walk-mode/model.js.map +1 -1
  255. package/dist/collection/lib/webgl/regl-component.js.map +1 -1
  256. package/dist/collection/testing/annotations.js.map +1 -1
  257. package/dist/collection/testing/canvases.js.map +1 -1
  258. package/dist/collection/testing/colors.js.map +1 -1
  259. package/dist/collection/testing/eventually.js.map +1 -1
  260. package/dist/collection/testing/fixtures.js.map +1 -1
  261. package/dist/collection/testing/grpc.js +3 -9
  262. package/dist/collection/testing/grpc.js.map +1 -1
  263. package/dist/collection/testing/modelViews.js.map +1 -1
  264. package/dist/collection/testing/pmi.js.map +1 -1
  265. package/dist/collection/testing/random.js.map +1 -1
  266. package/dist/collection/testing/resizeObserver.js.map +1 -1
  267. package/dist/collection/testing/scene-items-helper.js.map +1 -1
  268. package/dist/collection/testing/sceneTree.js.map +1 -1
  269. package/dist/collection/testing/viewer.js.map +1 -1
  270. package/dist/collection/testing/webgl.js.map +1 -1
  271. package/dist/components/index.js.map +1 -1
  272. package/dist/components/{p-St4ctu2K.js → p-3-bKfpqr.js} +2 -2
  273. package/dist/components/{p-St4ctu2K.js.map → p-3-bKfpqr.js.map} +1 -1
  274. package/dist/components/p-3DqRAYgO.js.map +1 -1
  275. package/dist/components/p-B-ToCp8-.js.map +1 -1
  276. package/dist/components/p-B156bTbY.js +5 -0
  277. package/dist/components/p-B156bTbY.js.map +1 -0
  278. package/dist/components/p-B9R0QWr4.js.map +1 -1
  279. package/dist/components/p-BCOD9yfw.js.map +1 -1
  280. package/dist/components/p-BHAaIoH5.js.map +1 -1
  281. package/dist/components/{p-Doltf1wO.js → p-BOJJZ1cN.js} +2 -2
  282. package/dist/components/p-BOJJZ1cN.js.map +1 -0
  283. package/dist/components/p-BkHp-aAR.js.map +1 -1
  284. package/dist/components/p-Bkm6H5uq.js.map +1 -1
  285. package/dist/components/p-C-VWDW9n.js.map +1 -1
  286. package/dist/components/p-C79PxobX.js.map +1 -1
  287. package/dist/components/p-CAugdB_8.js.map +1 -1
  288. package/dist/components/p-CEzVEgdQ.js.map +1 -1
  289. package/dist/components/p-CGCJ5hbJ.js.map +1 -1
  290. package/dist/components/p-COlcifvm.js.map +1 -1
  291. package/dist/components/p-CXTH3zrN.js.map +1 -1
  292. package/dist/components/p-CZCXdo3t.js.map +1 -1
  293. package/dist/components/p-Cd7kap5W.js.map +1 -1
  294. package/dist/components/p-CiSHWNC4.js.map +1 -1
  295. package/dist/components/p-CjG1fMh1.js.map +1 -1
  296. package/dist/components/p-CkjXRDNL.js.map +1 -1
  297. package/dist/components/p-D0KZu516.js.map +1 -1
  298. package/dist/components/p-D12q-fpW.js.map +1 -1
  299. package/dist/components/p-D33gVA2W.js.map +1 -1
  300. package/dist/components/p-DC86ZXai.js.map +1 -1
  301. package/dist/components/{p-B80hfIq6.js → p-DF4kEsJU.js} +2 -2
  302. package/dist/components/p-DF4kEsJU.js.map +1 -0
  303. package/dist/components/p-DRh4_Z-g.js.map +1 -1
  304. package/dist/components/p-DRnMrHWY.js.map +1 -1
  305. package/dist/components/{p-b0ZzPHz8.js → p-DUC59SSO.js} +2 -2
  306. package/dist/components/p-DUC59SSO.js.map +1 -0
  307. package/dist/components/p-DVW2WZTq.js.map +1 -1
  308. package/dist/components/p-DZI8pnGz.js.map +1 -1
  309. package/dist/components/p-Dbz9yUqC.js.map +1 -1
  310. package/dist/components/p-Yfi0i5Kj.js.map +1 -1
  311. package/dist/components/p-abSJ29r7.js.map +1 -1
  312. package/dist/components/p-ahjMltGJ.js.map +1 -1
  313. package/dist/components/p-bal2RLiw.js.map +1 -1
  314. package/dist/components/{p-BopQW1sA.js → p-oK38ynrd.js} +2 -2
  315. package/dist/components/p-oK38ynrd.js.map +1 -0
  316. package/dist/components/vertex-scene-tree-table-cell.js +1 -1
  317. package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
  318. package/dist/components/vertex-scene-tree-table-layout.js +1 -1
  319. package/dist/components/vertex-scene-tree.js +1 -1
  320. package/dist/components/vertex-scene-tree.js.map +1 -1
  321. package/dist/components/vertex-viewer-box-query-tool.js +1 -1
  322. package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
  323. package/dist/components/vertex-viewer-dom-element.js +1 -1
  324. package/dist/components/vertex-viewer-dom-group.js +1 -1
  325. package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
  326. package/dist/components/vertex-viewer-hit-result-indicator.js.map +1 -1
  327. package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
  328. package/dist/components/vertex-viewer-markup.js +1 -1
  329. package/dist/components/vertex-viewer-markup.js.map +1 -1
  330. package/dist/components/vertex-viewer-measurement-details.js.map +1 -1
  331. package/dist/components/vertex-viewer-measurement-distance.js +1 -1
  332. package/dist/components/vertex-viewer-measurement-distance.js.map +1 -1
  333. package/dist/components/vertex-viewer-measurement-line.js +1 -1
  334. package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
  335. package/dist/components/vertex-viewer-measurement-precise.js +1 -1
  336. package/dist/components/vertex-viewer-measurement-precise.js.map +1 -1
  337. package/dist/components/vertex-viewer-pin-group.js +1 -1
  338. package/dist/components/vertex-viewer-pin-tool.js +1 -1
  339. package/dist/components/vertex-viewer-pin-tool.js.map +1 -1
  340. package/dist/components/vertex-viewer-transform-widget.js +1 -1
  341. package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
  342. package/dist/components/vertex-viewer-view-cube.js +1 -1
  343. package/dist/components/vertex-viewer-view-cube.js.map +1 -1
  344. package/dist/components/vertex-viewer-walk-mode-tool.js.map +1 -1
  345. package/dist/components/vertex-viewer.js +1 -1
  346. package/dist/components/vertex-viewer.js.map +1 -1
  347. package/dist/esm/config-lglER3mU.js.map +1 -1
  348. package/dist/esm/controller-BMWGs-I6.js.map +1 -1
  349. package/dist/esm/controller-Iymb_J2R.js.map +1 -1
  350. package/dist/esm/cursors-BbBDEutb.js.map +1 -1
  351. package/dist/esm/dom-B3m2VjbN.js.map +1 -1
  352. package/dist/esm/dom-DX6pEG54.js.map +1 -1
  353. package/dist/esm/entities-zRken6VS.js.map +1 -1
  354. package/dist/esm/geometry_pb-BiZRfctN.js.map +1 -1
  355. package/dist/esm/grpc-CZAYqbTu.js.map +1 -1
  356. package/dist/esm/index.js.map +1 -1
  357. package/dist/esm/model-BYW5YIye.js.map +1 -1
  358. package/dist/esm/model-CLtwOS0o.js.map +1 -1
  359. package/dist/esm/model-D0EJdHmW.js.map +1 -1
  360. package/dist/esm/model-DHJ5aE4y.js.map +1 -1
  361. package/dist/esm/multiElementInteractionHandler-DwjL-r55.js.map +1 -1
  362. package/dist/esm/overlays-BE1oqniA.js.map +1 -1
  363. package/dist/esm/queries-DEzCmbTD.js.map +1 -1
  364. package/dist/esm/regl-component-DmkowWhg.js.map +1 -1
  365. package/dist/esm/representation_pb-g4f0WC4k.js.map +1 -1
  366. package/dist/esm/results-CFB6nKu8.js.map +1 -1
  367. package/dist/esm/row-CiSHWNC4.js.map +1 -1
  368. package/dist/esm/stencil-BV-7pO4q.js.map +1 -1
  369. package/dist/esm/streamAttributes-Cp8PEH9A.js.map +1 -1
  370. package/dist/esm/templates-DRh4_Z-g.js.map +1 -1
  371. package/dist/esm/util-BCZZYmp4.js.map +1 -1
  372. package/dist/esm/utils-BvZ9-fs0.js.map +1 -1
  373. package/dist/esm/utils-DC86ZXai.js.map +1 -1
  374. package/dist/esm/utils-D_pIldrS.js.map +1 -1
  375. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +6 -8
  376. package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
  377. package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
  378. package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
  379. package/dist/esm/vertex-scene-tree.entry.js +2 -2
  380. package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
  381. package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
  382. package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
  383. package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
  384. package/dist/esm/vertex-viewer-dom-element_2.entry.js.map +1 -1
  385. package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
  386. package/dist/esm/vertex-viewer-dom-group.entry.js.map +1 -1
  387. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +1 -1
  388. package/dist/esm/vertex-viewer-hit-result-indicator.entry.js.map +1 -1
  389. package/dist/esm/vertex-viewer-icon.entry.js.map +1 -1
  390. package/dist/esm/vertex-viewer-markup-arrow_3.entry.js.map +1 -1
  391. package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
  392. package/dist/esm/vertex-viewer-markup.entry.js +1 -1
  393. package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
  394. package/dist/esm/vertex-viewer-measurement-details.entry.js.map +1 -1
  395. package/dist/esm/vertex-viewer-measurement-distance.entry.js.map +1 -1
  396. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
  397. package/dist/esm/vertex-viewer-measurement-line_2.entry.js.map +1 -1
  398. package/dist/esm/vertex-viewer-measurement-precise.entry.js.map +1 -1
  399. package/dist/esm/vertex-viewer-pin-group.entry.js +2 -2
  400. package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
  401. package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
  402. package/dist/esm/vertex-viewer-pin-tool.entry.js +1 -1
  403. package/dist/esm/vertex-viewer-pin-tool.entry.js.map +1 -1
  404. package/dist/esm/vertex-viewer-teleport-tool.entry.js.map +1 -1
  405. package/dist/esm/vertex-viewer-transform-widget.entry.js +4 -5
  406. package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
  407. package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
  408. package/dist/esm/vertex-viewer-view-cube.entry.js.map +1 -1
  409. package/dist/esm/vertex-viewer-walk-mode-tool.entry.js.map +1 -1
  410. package/dist/esm/vertex-viewer.entry.js +9 -5
  411. package/dist/esm/vertex-viewer.entry.js.map +1 -1
  412. package/dist/esm/viewport-C8WQZxvx.js.map +1 -1
  413. package/dist/types/regl-shape.d.ts +1 -1
  414. package/dist/viewer/index.esm.js.map +1 -1
  415. package/dist/viewer/{p-eac63070.entry.js → p-051b5154.entry.js} +2 -2
  416. package/dist/viewer/p-051b5154.entry.js.map +1 -0
  417. package/dist/viewer/{p-3d3a7eeb.entry.js → p-0984c51f.entry.js} +2 -2
  418. package/dist/viewer/{p-3d3a7eeb.entry.js.map → p-0984c51f.entry.js.map} +1 -1
  419. package/dist/viewer/{p-864f40c7.entry.js → p-11cf755a.entry.js} +2 -2
  420. package/dist/viewer/p-11cf755a.entry.js.map +1 -0
  421. package/dist/viewer/{p-29d14611.entry.js → p-16775f7d.entry.js} +2 -2
  422. package/dist/viewer/p-16775f7d.entry.js.map +1 -0
  423. package/dist/viewer/{p-5a85cae5.entry.js → p-1eb636f8.entry.js} +2 -2
  424. package/dist/viewer/p-1eb636f8.entry.js.map +1 -0
  425. package/dist/viewer/{p-e993f300.entry.js → p-228d1d43.entry.js} +2 -2
  426. package/dist/viewer/p-228d1d43.entry.js.map +1 -0
  427. package/dist/viewer/p-33f44cc1.entry.js.map +1 -1
  428. package/dist/viewer/{p-3300d3dc.entry.js → p-35601c85.entry.js} +2 -2
  429. package/dist/viewer/p-35601c85.entry.js.map +1 -0
  430. package/dist/viewer/p-47766566.entry.js.map +1 -1
  431. package/dist/viewer/p-6e3a6bbd.entry.js.map +1 -1
  432. package/dist/viewer/p-7f388b45.entry.js.map +1 -1
  433. package/dist/viewer/p-89544066.entry.js.map +1 -1
  434. package/dist/viewer/{p-07b99ac9.entry.js → p-8c369777.entry.js} +2 -2
  435. package/dist/viewer/p-8c369777.entry.js.map +1 -0
  436. package/dist/viewer/{p-e59983dc.entry.js → p-9835c5e2.entry.js} +2 -2
  437. package/dist/viewer/p-9835c5e2.entry.js.map +1 -0
  438. package/dist/viewer/{p-aa95e21a.entry.js → p-9d8ff406.entry.js} +2 -2
  439. package/dist/viewer/p-9d8ff406.entry.js.map +1 -0
  440. package/dist/viewer/p-BDvACHun.js.map +1 -1
  441. package/dist/viewer/p-BIkuvTVH.js.map +1 -1
  442. package/dist/viewer/p-BRPkbTVP.js.map +1 -1
  443. package/dist/viewer/p-BsBIynwj.js.map +1 -1
  444. package/dist/viewer/p-BxtKMwBH.js.map +1 -1
  445. package/dist/viewer/p-C4y4Noe-.js.map +1 -1
  446. package/dist/viewer/p-C6KrfydC.js.map +1 -1
  447. package/dist/viewer/p-C7dYsPFU.js.map +1 -1
  448. package/dist/viewer/p-C9Cqbq6H.js.map +1 -1
  449. package/dist/viewer/p-CVWO4w6b.js.map +1 -1
  450. package/dist/viewer/p-ChqXy0cG.js.map +1 -1
  451. package/dist/viewer/p-CiSHWNC4.js.map +1 -1
  452. package/dist/viewer/p-CjG1fMh1.js.map +1 -1
  453. package/dist/viewer/p-Cs5KOvOQ.js.map +1 -1
  454. package/dist/viewer/p-CyGlYje2.js.map +1 -1
  455. package/dist/viewer/p-D6eJC1q4.js.map +1 -1
  456. package/dist/viewer/p-DC86ZXai.js.map +1 -1
  457. package/dist/viewer/p-DRh4_Z-g.js.map +1 -1
  458. package/dist/viewer/p-DUX5FvBC.js.map +1 -1
  459. package/dist/viewer/p-DX6pEG54.js.map +1 -1
  460. package/dist/viewer/p-D_ixWHO7.js.map +1 -1
  461. package/dist/viewer/p-DacE-wPp.js.map +1 -1
  462. package/dist/viewer/p-Dp56p_jX.js.map +1 -1
  463. package/dist/viewer/p-EsKoKfmx.js.map +1 -1
  464. package/dist/viewer/p-F8e15or2.js.map +1 -1
  465. package/dist/viewer/p-Jfxh0jq9.js.map +1 -1
  466. package/dist/viewer/p-WPRMWirY.js.map +1 -1
  467. package/dist/viewer/p-_93RRNxT.js.map +1 -1
  468. package/dist/viewer/p-a8a81cba.entry.js +5 -0
  469. package/dist/viewer/p-a8a81cba.entry.js.map +1 -0
  470. package/dist/viewer/p-a9282481.entry.js.map +1 -1
  471. package/dist/viewer/{p-63f4f702.entry.js → p-c7e62d66.entry.js} +2 -2
  472. package/dist/viewer/p-c7e62d66.entry.js.map +1 -0
  473. package/dist/viewer/p-d37e647b.entry.js.map +1 -1
  474. package/dist/viewer/{p-302f2078.entry.js → p-d9fe788f.entry.js} +2 -2
  475. package/dist/viewer/p-d9fe788f.entry.js.map +1 -0
  476. package/dist/viewer/p-e9b83dae.entry.js.map +1 -1
  477. package/dist/viewer/{p-70f3629d.entry.js → p-f271dc4a.entry.js} +2 -2
  478. package/dist/viewer/p-f271dc4a.entry.js.map +1 -0
  479. package/dist/viewer/p-f65c0769.entry.js.map +1 -1
  480. package/dist/viewer/viewer.esm.js +1 -1
  481. package/package.json +7 -7
  482. package/dist/components/p-B80hfIq6.js.map +0 -1
  483. package/dist/components/p-BopQW1sA.js.map +0 -1
  484. package/dist/components/p-DNtS2F8J.js +0 -5
  485. package/dist/components/p-DNtS2F8J.js.map +0 -1
  486. package/dist/components/p-Doltf1wO.js.map +0 -1
  487. package/dist/components/p-b0ZzPHz8.js.map +0 -1
  488. package/dist/viewer/p-07b99ac9.entry.js.map +0 -1
  489. package/dist/viewer/p-29d14611.entry.js.map +0 -1
  490. package/dist/viewer/p-302f2078.entry.js.map +0 -1
  491. package/dist/viewer/p-3300d3dc.entry.js.map +0 -1
  492. package/dist/viewer/p-5a85cae5.entry.js.map +0 -1
  493. package/dist/viewer/p-60c915e3.entry.js +0 -5
  494. package/dist/viewer/p-60c915e3.entry.js.map +0 -1
  495. package/dist/viewer/p-63f4f702.entry.js.map +0 -1
  496. package/dist/viewer/p-70f3629d.entry.js.map +0 -1
  497. package/dist/viewer/p-864f40c7.entry.js.map +0 -1
  498. package/dist/viewer/p-aa95e21a.entry.js.map +0 -1
  499. package/dist/viewer/p-e59983dc.entry.js.map +0 -1
  500. package/dist/viewer/p-e993f300.entry.js.map +0 -1
  501. package/dist/viewer/p-eac63070.entry.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/components/viewer-measurement-distance/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { Line3, Point } from '@vertexvis/geometry';\n\nimport { FrameCameraBase, Viewport } from '../../lib/types';\n\nexport type Anchor = 'start' | 'end';\n\nexport interface MeasurementElementPositions {\n startPt?: Point.Point;\n endPt?: Point.Point;\n labelPt?: Point.Point;\n indicatorPt?: Point.Point;\n hideStart?: boolean;\n hideEnd?: boolean;\n}\n\nexport interface RenderParams {\n viewport: Viewport;\n camera: FrameCameraBase;\n}\n\nexport function translateWorldLineToViewport(\n line: Line3.Line3,\n params: RenderParams\n): {\n start: Point.Point;\n end: Point.Point;\n hideStart: boolean;\n hideEnd: boolean;\n} {\n const { camera, viewport } = params;\n\n const isStartBehindCamera = camera.isPointBehindNear(line.start);\n const isEndBehindCamera = camera.isPointBehindNear(line.end);\n\n // If either the start or end of the line is behind the camera, then we need\n // to truncate the line so it can be presented correctly. You cannot use a\n // projection matrix to compute a point behind the near plane.\n if (isStartBehindCamera || isEndBehindCamera) {\n const pt = camera.intersectLineWithNear(line);\n const newLine = Line3.create({\n start: isStartBehindCamera && pt != null ? pt : line.start,\n end: isEndBehindCamera && pt != null ? pt : line.end,\n });\n\n const ndc = Line3.transformMatrix(newLine, camera.projectionViewMatrix);\n return {\n start: viewport.transformVectorToViewport(ndc.start),\n end: viewport.transformVectorToViewport(ndc.end),\n hideStart: isStartBehindCamera,\n hideEnd: isEndBehindCamera,\n };\n } else {\n const ndc = Line3.transformMatrix(line, camera.projectionViewMatrix);\n return {\n start: viewport.transformVectorToViewport(ndc.start),\n end: viewport.transformVectorToViewport(ndc.end),\n hideStart: false,\n hideEnd: false,\n };\n }\n}\n\nexport function getViewingElementPositions(\n line: Line3.Line3,\n interactingAnchor: Anchor | 'none',\n params: RenderParams\n): MeasurementElementPositions {\n const {\n start: startPt,\n end: endPt,\n hideStart,\n hideEnd,\n } = translateWorldLineToViewport(line, params);\n const labelPt = Point.lerp(startPt, endPt, 0.5);\n const indicatorPt =\n interactingAnchor !== 'none'\n ? getIndicatorPtForAnchor(line, interactingAnchor, params)\n : undefined;\n\n return { startPt, endPt, labelPt, indicatorPt, hideStart, hideEnd };\n}\n\nexport function isVertexViewerDistanceMeasurement(\n el: unknown\n): el is HTMLVertexViewerMeasurementDistanceElement {\n return (\n el instanceof HTMLElement &&\n el.nodeName === 'VERTEX-VIEWER-MEASUREMENT-DISTANCE'\n );\n}\n\nfunction getIndicatorPtForAnchor(\n line: Line3.Line3,\n anchor: Anchor,\n params: RenderParams\n): Point.Point {\n return params.viewport.transformWorldToViewport(\n anchor === 'start' ? line.start : line.end,\n params.camera.projectionViewMatrix\n );\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/components/viewer-measurement-distance/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { Line3, Point } from '@vertexvis/geometry';\n\nimport { FrameCameraBase, Viewport } from '../../lib/types';\n\nexport type Anchor = 'start' | 'end';\n\nexport interface MeasurementElementPositions {\n startPt?: Point.Point;\n endPt?: Point.Point;\n labelPt?: Point.Point;\n indicatorPt?: Point.Point;\n hideStart?: boolean;\n hideEnd?: boolean;\n}\n\nexport interface RenderParams {\n viewport: Viewport;\n camera: FrameCameraBase;\n}\n\nexport function translateWorldLineToViewport(\n line: Line3.Line3,\n params: RenderParams,\n): {\n start: Point.Point;\n end: Point.Point;\n hideStart: boolean;\n hideEnd: boolean;\n} {\n const { camera, viewport } = params;\n\n const isStartBehindCamera = camera.isPointBehindNear(line.start);\n const isEndBehindCamera = camera.isPointBehindNear(line.end);\n\n // If either the start or end of the line is behind the camera, then we need\n // to truncate the line so it can be presented correctly. You cannot use a\n // projection matrix to compute a point behind the near plane.\n if (isStartBehindCamera || isEndBehindCamera) {\n const pt = camera.intersectLineWithNear(line);\n const newLine = Line3.create({\n start: isStartBehindCamera && pt != null ? pt : line.start,\n end: isEndBehindCamera && pt != null ? pt : line.end,\n });\n\n const ndc = Line3.transformMatrix(newLine, camera.projectionViewMatrix);\n return {\n start: viewport.transformVectorToViewport(ndc.start),\n end: viewport.transformVectorToViewport(ndc.end),\n hideStart: isStartBehindCamera,\n hideEnd: isEndBehindCamera,\n };\n } else {\n const ndc = Line3.transformMatrix(line, camera.projectionViewMatrix);\n return {\n start: viewport.transformVectorToViewport(ndc.start),\n end: viewport.transformVectorToViewport(ndc.end),\n hideStart: false,\n hideEnd: false,\n };\n }\n}\n\nexport function getViewingElementPositions(\n line: Line3.Line3,\n interactingAnchor: Anchor | 'none',\n params: RenderParams,\n): MeasurementElementPositions {\n const {\n start: startPt,\n end: endPt,\n hideStart,\n hideEnd,\n } = translateWorldLineToViewport(line, params);\n const labelPt = Point.lerp(startPt, endPt, 0.5);\n const indicatorPt =\n interactingAnchor !== 'none'\n ? getIndicatorPtForAnchor(line, interactingAnchor, params)\n : undefined;\n\n return { startPt, endPt, labelPt, indicatorPt, hideStart, hideEnd };\n}\n\nexport function isVertexViewerDistanceMeasurement(\n el: unknown,\n): el is HTMLVertexViewerMeasurementDistanceElement {\n return (\n el instanceof HTMLElement &&\n el.nodeName === 'VERTEX-VIEWER-MEASUREMENT-DISTANCE'\n );\n}\n\nfunction getIndicatorPtForAnchor(\n line: Line3.Line3,\n anchor: Anchor,\n params: RenderParams,\n): Point.Point {\n return params.viewport.transformWorldToViewport(\n anchor === 'start' ? line.start : line.end,\n params.camera.projectionViewMatrix,\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-measurement-distance.js","sourceRoot":"","sources":["../../../../../src/components/viewer-measurement-distance/viewer-measurement-distance.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Line3, Point, Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport {\n MEASUREMENT_LINE_CAP_LENGTH,\n MEASUREMENT_SNAP_DISTANCE,\n} from '../../lib/constants';\nimport { Cursor, measurementCursor } from '../../lib/cursors';\nimport { getMouseClientPosition } from '../../lib/dom';\nimport { Formatter } from '../../lib/formatter';\nimport {\n makeMinimumDistanceResult,\n MeasurementModel,\n MeasurementOverlay,\n MeasurementOverlayManager,\n} from '../../lib/measurement';\nimport {\n DepthBuffer,\n DistanceUnits,\n DistanceUnitType,\n FrameCameraBase,\n StencilBuffer,\n Viewport,\n} from '../../lib/types';\nimport { getMeasurementBoundingClientRect } from './dom';\nimport { PointToPointHitTester } from './hitTest';\nimport {\n PointToPointHitProvider,\n PointToPointInteraction,\n PointToPointInteractionController,\n PointToPointInteractionModel,\n} from './interactions';\nimport {\n Anchor,\n getViewingElementPositions,\n MeasurementElementPositions,\n} from './utils';\nimport { DistanceMeasurementRenderer } from './viewer-measurement-distance-components';\n\n/**\n * Contains the bounding boxes of child elements of this component. This\n * information is useful for positioning popups or other elements around the\n * measurement.\n *\n * @see {@link ViewerDistanceMeasurement.computeElementMetrics} - For\n * calculating element metrics.\n */\nexport interface ViewerMeasurementDistanceElementMetrics {\n startAnchor: DOMRect;\n endAnchor: DOMRect;\n label: DOMRect;\n}\n\n/**\n * The supported measurement modes.\n *\n * @see {@link ViewerDistanceMeasurement.mode} - For more details about modes.\n */\nexport type ViewerMeasurementDistanceMode = 'edit' | 'replace' | '';\n\n/**\n * A details object describing the edit begin event.\n */\nexport interface EditBeginEventDetails {\n type: Exclude<ViewerMeasurementDistanceMode, ''>;\n anchor: Anchor;\n}\n/**\n * A details object describing the edit end event.\n */\nexport interface EditEndEventDetails {\n start: Vector3.Vector3;\n end: Vector3.Vector3;\n valid: boolean;\n}\n\ninterface StateMap {\n hoverCursor?: Disposable;\n stencil?: StencilBuffer;\n depthBuffer?: DepthBuffer;\n shouldClearDepthBuffers?: boolean;\n}\n\nconst INTERACTION_THRESHOLD = 3;\n\n/**\n * @slot start-anchor - An HTML element for the starting point anchor.\n *\n * @slot start-label - An HTML or text element that displays next to the start\n * anchor.\n *\n * @slot end-anchor - An HTML element for the ending point anchor.\n *\n * @slot end-label - An HTML or text element that displays next to the end\n * anchor.\n *\n * @slot indicator - An HTML element for the measurement indicator. The\n * indicator represents the position where a measurement will be placed while\n * editing.\n */\n@Component({\n tag: 'vertex-viewer-measurement-distance',\n styleUrl: 'viewer-measurement-distance.css',\n shadow: true,\n})\nexport class ViewerMeasurementDistance {\n /**\n * The world position of the starting anchor.\n */\n @Prop({ mutable: true })\n public start?: Vector3.Vector3;\n\n /**\n * The world position of the starting anchor, as a JSON string. The JSON\n * string can be an array or object representation in the format of `[x, y,\n * z]` or `{\"x\": 0, \"y\": 0, \"z\": 0}`.\n */\n @Prop()\n public startJson?: string;\n\n /**\n * The world position of the ending anchor.\n */\n @Prop({ mutable: true })\n public end?: Vector3.Vector3;\n\n /**\n * The world position of the ending anchor, as a JSON string. The JSON string\n * can be an array or object representation in the format of `[x, y, z]` or\n * `{\"x\": 0, \"y\": 0, \"z\": 0}`.\n */\n @Prop()\n public endJson?: string;\n\n /**\n * The distance between `start` and `end` in real world units. Value will be\n * undefined if the start and end positions are undefined, or if the\n * measurement is invalid.\n */\n @Prop({ mutable: true })\n public distance?: number;\n\n /**\n * Enables the display of axis reference lines between the start and end\n * point.\n */\n @Prop()\n public showAxisReferenceLines = false;\n\n /**\n * The distance, in pixels, between the mouse and nearest snappable edge. A\n * value of 0 disables snapping.\n */\n @Prop()\n public snapDistance: number = MEASUREMENT_SNAP_DISTANCE;\n\n /**\n * The unit of measurement.\n */\n @Prop()\n public units: DistanceUnitType = 'millimeters';\n\n /**\n * The number of fraction digits to display.\n */\n @Prop()\n public fractionalDigits = 2;\n\n /**\n * An optional formatter that can be used to format the display of a distance.\n * The formatting function is passed a calculated real-world distance and is\n * expected to return a string.\n */\n @Prop()\n public labelFormatter?: Formatter<number | undefined>;\n\n /**\n * The distance from an anchor to its label.\n */\n @Prop()\n public anchorLabelOffset = 20;\n\n /**\n * The length of the caps at each end of the distance measurement.\n */\n @Prop()\n public lineCapLength = MEASUREMENT_LINE_CAP_LENGTH;\n\n /**\n * A mode that specifies how the measurement component should behave.\n *\n * When unset, the component will not respond to interactions with the\n * handles.\n *\n * When `edit`, the measurement anchors are interactive and the user is able\n * to reposition them.\n *\n * When `replace`, anytime the user clicks on the canvas, a new measurement\n * will be created and replace any existing measurement. After a measurement\n * is created, the measurement will be editable.\n */\n @Prop({ reflect: true })\n public mode: ViewerMeasurementDistanceMode = '';\n\n /**\n * A property that reflects which anchor is currently being interacted with.\n */\n @Prop({ reflect: true, mutable: true })\n public interactingAnchor: Anchor | 'none' = 'none';\n\n /**\n * Indicates if the measurement is invalid. A measurement is invalid if either\n * the start or end position are not on the surface of the model.\n */\n @Prop({ mutable: true, reflect: true })\n public invalid = false;\n\n /**\n * The camera used to position the anchors. If `viewer` is defined, then the\n * projection view matrix of the viewer will be used.\n */\n @Prop()\n public camera?: FrameCameraBase;\n\n /**\n * @internal\n */\n @Prop()\n public hitProvider?: PointToPointHitProvider;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public indicatorPt?: Vector3.Vector3;\n\n /**\n * The viewer to connect to this measurement. The measurement will redraw any\n * time the viewer redraws the scene.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The measurement model that will be updated when this measurement changes.\n * You can pass this to a <vertex-viewer-measurement-details> component to\n * display measurement outcomes.\n */\n @Prop()\n public measurementModel: MeasurementModel = new MeasurementModel();\n\n /**\n * An event that is dispatched anytime the user begins editing the\n * measurement.\n */\n @Event()\n public editBegin!: EventEmitter<EditBeginEventDetails>;\n\n /**\n * An event that is dispatched when the user has finished editing the\n * measurement.\n */\n @Event()\n public editEnd!: EventEmitter<EditEndEventDetails>;\n\n @State()\n private viewport: Viewport = new Viewport(0, 0);\n\n @State()\n private elementBounds?: DOMRect;\n\n @State()\n private interactionCount = 0;\n\n @State()\n private internalCamera?: FrameCameraBase;\n\n @State()\n private invalidateStateCounter = 0;\n\n @State()\n // Any data that should be preserved across live-reloads, but should not cause\n // a rerender if changed.\n private stateMap: StateMap = {};\n\n @State()\n private measurementUnits = new DistanceUnits(this.units);\n\n @Element()\n private hostEl!: HTMLElement;\n\n private model = PointToPointInteractionModel.empty();\n private controller = new PointToPointInteractionController(this.model);\n private interaction?: PointToPointInteraction;\n\n private overlays = new MeasurementOverlayManager();\n private overlay?: MeasurementOverlay;\n\n private isUserInteractingWithModel = false;\n\n private newInteractionHandler?: Disposable;\n\n /**\n * Computes the bounding boxes of the anchors and label. **Note:** invoking\n * this function uses `getBoundingClientRect` internally and will cause a\n * relayout of the DOM.\n */\n @Method()\n public async computeElementMetrics(): Promise<\n ViewerMeasurementDistanceElementMetrics | undefined\n > {\n const startAnchorEl =\n this.hostEl.shadowRoot?.getElementById('start-anchor');\n const endAnchorEl = this.hostEl.shadowRoot?.getElementById('end-anchor');\n const labelEl = this.hostEl.shadowRoot?.getElementById('label');\n\n if (startAnchorEl != null && endAnchorEl != null && labelEl != null) {\n return {\n startAnchor: startAnchorEl.getBoundingClientRect(),\n endAnchor: endAnchorEl.getBoundingClientRect(),\n label: labelEl.getBoundingClientRect(),\n };\n } else {\n return undefined;\n }\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.stateMap.hoverCursor?.dispose();\n this.newInteractionHandler?.dispose();\n this.resetDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected async componentWillLoad(): Promise<void> {\n this.updatePropsFromJson();\n this.model.setMeasurementFromValues(this.start, this.end, !this.invalid);\n\n await this.getStencilBuffer();\n this.updateViewport();\n this.setDepthBuffers();\n\n await this.handleViewerChanged(this.viewer);\n await this.handleModeChanged();\n\n await this.computePropsAndState();\n\n this.model.onIndicatorChanged((pt) => {\n this.indicatorPt = pt;\n });\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n const resize = new ResizeObserver(() => this.updateViewport());\n resize.observe(this.hostEl);\n }\n\n /**\n * @ignore\n */\n protected async componentWillUpdate(): Promise<void> {\n await this.computePropsAndState();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n {this.showAxisReferenceLines && (\n <vertex-viewer-measurement-overlays\n measurementOverlays={this.overlays}\n viewer={this.viewer}\n />\n )}\n {this.renderMeasurement()}\n </Host>\n );\n }\n\n private renderMeasurement(): h.JSX.IntrinsicElements {\n const positions = this.computeElementPositions();\n const { startPt, endPt, labelPt, indicatorPt, hideStart, hideEnd } =\n positions;\n const distance = this.formatDistance(this.distance);\n\n if (this.mode === 'edit' || this.mode === 'replace') {\n return (\n <DistanceMeasurementRenderer\n startPt={startPt}\n endPt={endPt}\n centerPt={labelPt}\n indicatorPt={indicatorPt}\n distance={distance}\n anchorLabelOffset={this.anchorLabelOffset}\n lineCapLength={this.lineCapLength}\n hideStartAnchor={hideStart}\n hideEndAnchor={hideEnd}\n onStartAnchorPointerDown={this.handleEditAnchor('start')}\n onEndAnchorPointerDown={this.handleEditAnchor('end')}\n />\n );\n } else {\n return (\n <DistanceMeasurementRenderer\n startPt={startPt}\n endPt={endPt}\n centerPt={labelPt}\n indicatorPt={this.indicatorPt}\n distance={distance}\n hideStartAnchor={hideStart}\n hideEndAnchor={hideEnd}\n anchorLabelOffset={this.anchorLabelOffset}\n lineCapLength={this.lineCapLength}\n linePointerEvents=\"painted\"\n />\n );\n }\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected async handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement\n ): Promise<void> {\n if (oldViewer != null) {\n oldViewer.removeEventListener('frameDrawn', this.handleFrameDrawn);\n await this.removeInteractionListeners(oldViewer);\n }\n\n if (newViewer != null) {\n newViewer.addEventListener('frameDrawn', this.handleFrameDrawn);\n await this.addInteractionListeners(newViewer);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('units', { immediate: true })\n protected handleUnitsChanged(): void {\n this.measurementUnits = new DistanceUnits(this.units);\n }\n\n /**\n * @ignore\n */\n @Watch('camera')\n protected handleCameraChanged(): void {\n this.updateCamera();\n }\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected async handleModeChanged(): Promise<void> {\n // If we're not in edit or replace mode, ensure that the measurement\n // cursor is removed.\n if (this.mode === '') {\n this.stateMap.hoverCursor?.dispose();\n }\n\n if (this.viewer != null) {\n await this.removeInteractionListeners(this.viewer);\n await this.addInteractionListeners(this.viewer);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('start')\n protected handleStartChanged(): void {\n this.updateInteractionModel();\n }\n\n /**\n * @ignore\n */\n @Watch('end')\n protected handleEndChanged(): void {\n this.updateInteractionModel();\n }\n\n /**\n * @ignore\n */\n @Watch('invalid')\n protected handleInvalidChanged(): void {\n this.updateInteractionModel();\n }\n\n private async computePropsAndState(): Promise<void> {\n this.updateCamera();\n await this.updateDepthBuffer();\n this.updateMeasurementPropsFromModel();\n this.updateOverlays();\n }\n\n private updateOverlays(): void {\n this.overlay?.dispose();\n\n if (\n this.showAxisReferenceLines &&\n this.interactionCount === 0 &&\n !this.invalid &&\n this.start != null &&\n this.end != null\n ) {\n this.overlay = this.overlays.addDistanceVector(this.start, this.end);\n }\n }\n\n private async setCursor(cursor: Cursor): Promise<void> {\n this.stateMap.hoverCursor?.dispose();\n\n if (!this.isUserInteractingWithModel) {\n this.stateMap.hoverCursor = await this.viewer?.addCursor(cursor);\n }\n }\n\n private computeElementPositions(): MeasurementElementPositions {\n if (this.mode === 'replace') {\n return this.computeReplaceElementPositions();\n } else {\n return this.computeEditOrViewElementPositions();\n }\n }\n\n private computeEditOrViewElementPositions(): MeasurementElementPositions {\n const measurement = this.model.getMeasurement();\n if (this.internalCamera != null && measurement != null) {\n return this.computeLineElementPositions(Line3.create(measurement));\n } else {\n return {};\n }\n }\n\n private computeReplaceElementPositions(): MeasurementElementPositions {\n if (this.internalCamera != null) {\n const measurement = this.model.getMeasurement();\n\n const line =\n measurement != null\n ? this.computeLineElementPositions(Line3.create(measurement))\n : {};\n const indicator =\n this.indicatorPt != null\n ? {\n indicatorPt: this.viewport.transformWorldToViewport(\n this.indicatorPt,\n this.internalCamera.projectionViewMatrix\n ),\n }\n : {};\n\n return { ...line, ...indicator };\n } else {\n return {};\n }\n }\n\n private computeLineElementPositions(\n line: Line3.Line3\n ): MeasurementElementPositions {\n if (this.internalCamera != null) {\n return getViewingElementPositions(line, this.interactingAnchor, {\n viewport: this.viewport,\n camera: this.internalCamera,\n });\n } else {\n return {};\n }\n }\n\n private updateCamera(): void {\n this.internalCamera = this.camera || this.viewer?.frame?.scene.camera;\n }\n\n private async updateDepthBuffer(): Promise<void> {\n this.stateMap.depthBuffer = await this.viewer?.frame?.depthBuffer();\n }\n\n private updateViewport(): void {\n const rect = getMeasurementBoundingClientRect(this.hostEl);\n this.viewport = new Viewport(rect.width, rect.height);\n this.elementBounds = rect;\n }\n\n private updatePropsFromJson(): void {\n this.start = parseVector3(this.startJson ?? this.start);\n this.end = parseVector3(this.endJson ?? this.end);\n }\n\n private updateInteractionModel(): void {\n this.model.setMeasurementFromValues(this.start, this.end, !this.invalid);\n }\n\n private handleFrameDrawn = (): void => {\n this.invalidateState();\n };\n\n private invalidateState(): void {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n }\n\n private async addInteractionListeners(\n viewer: HTMLVertexViewerElement\n ): Promise<void> {\n const interactionTarget = await viewer.getInteractionTarget_DEPRECATED();\n if (this.mode === 'replace') {\n interactionTarget.addEventListener('pointermove', this.updateStartAnchor);\n interactionTarget.addEventListener('pointerdown', this.newMeasurement);\n interactionTarget.addEventListener('pointerleave', this.clearIndicator);\n }\n }\n\n private async removeInteractionListeners(\n viewer: HTMLVertexViewerElement\n ): Promise<void> {\n const interactionTarget = await viewer.getInteractionTarget_DEPRECATED();\n interactionTarget.removeEventListener(\n 'pointermove',\n this.updateStartAnchor\n );\n interactionTarget.removeEventListener('pointerdown', this.newMeasurement);\n interactionTarget.removeEventListener('pointerleave', this.clearIndicator);\n }\n\n private clearIndicator = (): void => {\n this.controller.clearIndicator();\n };\n\n private updateStartAnchor = async (event: PointerEvent): Promise<void> => {\n await this.getStencilBuffer();\n\n if (this.interactionCount === 0) {\n const pt = getMouseClientPosition(event, this.elementBounds);\n const snapPt = this.snapPoint(pt, event);\n await this.updateIndicator(snapPt);\n }\n };\n\n private newMeasurement = (event: PointerEvent): void => {\n if (this.interactionCount === 0 && event.button === 0) {\n // Function that registers event listeners to perform a new measurement.\n const startMeasurement = (start: () => void): void => {\n const dispose = (): void => {\n window.removeEventListener('pointerup', pointerUp);\n window.removeEventListener('pointermove', pointerMove);\n };\n const pointerUp = async (): Promise<void> => {\n dispose();\n start();\n };\n const pointerMove = (event: PointerEvent): void => {\n if (event.buttons > 0) {\n dispose();\n }\n };\n\n window.addEventListener('pointermove', pointerMove);\n window.addEventListener('pointerup', pointerUp);\n };\n\n // Function that registers event listeners to detect if a user is\n // interacting with the model. If so, we temporarily disable measurement\n // updates until the user finishes.\n const pointerDownAndMove = (callback: () => void): Disposable => {\n let downPt: Point.Point = Point.create(0, 0);\n\n const pointerMove = (event: PointerEvent): void => {\n const dist = Point.distance(\n downPt,\n getMouseClientPosition(event, this.elementBounds)\n );\n if (dist >= INTERACTION_THRESHOLD) {\n callback();\n }\n };\n\n const dispose = (): void => {\n window.removeEventListener('pointermove', pointerMove);\n window.removeEventListener('pointerup', pointerUp);\n };\n\n const pointerUp = (): void => dispose();\n\n const pointerDown = (event: PointerEvent): void => {\n downPt = getMouseClientPosition(event, this.elementBounds);\n window.addEventListener('pointermove', pointerMove);\n window.addEventListener('pointerup', pointerUp);\n };\n\n window.addEventListener('pointerdown', pointerDown);\n\n return {\n dispose: () => window.removeEventListener('pointerdown', pointerDown),\n };\n };\n\n // Function that registers event listeners to finish a measurement.\n const measureInteraction = (): void => {\n const handleDownAndMove = pointerDownAndMove(() => {\n this.isUserInteractingWithModel = true;\n this.stateMap.hoverCursor?.dispose();\n });\n\n const dispose = (): void => {\n window.removeEventListener('pointermove', pointerMove);\n window.removeEventListener('pointerup', pointerUp);\n handleDownAndMove.dispose();\n };\n\n const pointerMove = this.createInteractionMoveHandler();\n const pointerUp = async (event: PointerEvent): Promise<void> => {\n if (event.button === 0) {\n if (this.isUserInteractingWithModel) {\n this.isUserInteractingWithModel = false;\n } else {\n const hits = this.getHitProvider();\n if (hits != null) {\n const pt = getMouseClientPosition(event, this.elementBounds);\n const snapPt = this.snapPoint(pt, event);\n await this.interaction?.finish(snapPt, hits);\n\n dispose();\n this.updateMeasurementPropsFromModel();\n this.endEditing();\n }\n }\n }\n };\n\n this.beginEditing('replace', 'end');\n this.newInteractionHandler = { dispose };\n\n window.addEventListener('pointermove', pointerMove);\n window.addEventListener('pointerup', pointerUp);\n };\n\n const hits = this.getHitProvider();\n if (hits != null) {\n const pt = getMouseClientPosition(event, this.elementBounds);\n const snapPt = this.snapPoint(pt, event);\n this.interaction = this.controller.newMeasurement(snapPt, hits);\n\n if (this.interaction != null) {\n startMeasurement(measureInteraction);\n }\n }\n }\n };\n\n private handleEditAnchor(\n anchor: Anchor\n ): ((event: PointerEvent) => Promise<void>) | undefined {\n if (this.mode === 'edit' || this.mode === 'replace') {\n const handlePointerMove = this.createInteractionMoveHandler();\n const handlePointerUp = async (event: PointerEvent): Promise<void> => {\n const hits = this.getHitProvider();\n if (hits != null) {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n\n const pt = getMouseClientPosition(event, this.elementBounds);\n const snapPt = this.snapPoint(pt, event);\n await this.interaction?.finish(snapPt, hits);\n\n this.updateMeasurementPropsFromModel();\n this.endEditing();\n }\n };\n\n return async (event) => {\n await this.getStencilBuffer();\n\n if (event.button === 0) {\n this.beginEditing('edit', anchor);\n\n this.interaction = this.controller.editMeasurement(anchor);\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n }\n };\n }\n }\n\n private createInteractionMoveHandler(): (\n event: PointerEvent\n ) => Promise<void> {\n return async (event) => {\n const hits = this.getHitProvider();\n if (this.elementBounds != null && hits != null) {\n event.preventDefault();\n await this.getStencilBuffer();\n\n const pt = getMouseClientPosition(event, this.elementBounds);\n const snapPt = this.snapPoint(pt, event);\n this.interaction?.update(snapPt, hits);\n this.updateMeasurementPropsFromModel();\n }\n };\n }\n\n private async getStencilBuffer(): Promise<void> {\n const stencil = await this.viewer?.stencilBuffer.latestAfterInteraction();\n this.stateMap.stencil = stencil;\n }\n\n private snapPoint(pt: Point.Point, event: MouseEvent): Point.Point {\n const hits = this.getHitProvider();\n if (hits != null && !event.shiftKey) {\n const snapDistance = Math.max(0, this.snapDistance);\n return hits.hitTester().snapToNearestPixel(pt, snapDistance);\n }\n return pt;\n }\n\n private formatDistance(distance: number | undefined): string {\n const dist =\n distance != null\n ? this.measurementUnits.convertWorldValueToReal(distance)\n : undefined;\n\n if (this.labelFormatter != null) {\n return this.labelFormatter(dist);\n } else {\n const abbreviated = this.measurementUnits.unit.abbreviatedName;\n return dist == null\n ? '---'\n : `~${dist.toFixed(this.fractionalDigits)} ${abbreviated}`;\n }\n }\n\n private beginEditing(\n type: EditBeginEventDetails['type'],\n anchor: EditBeginEventDetails['anchor']\n ): void {\n if (this.interactionCount === 0) {\n this.interactingAnchor = anchor;\n this.editBegin.emit({ type, anchor });\n }\n this.interactionCount = this.interactionCount + 1;\n }\n\n private endEditing(): void {\n if (this.interactionCount === 1) {\n const measurement = this.model.getMeasurement();\n\n this.interactingAnchor = 'none';\n this.updateMeasurementModel();\n\n if (measurement != null) {\n this.editEnd.emit(measurement);\n }\n }\n this.interactionCount = this.interactionCount - 1;\n }\n\n private updateMeasurementModel(): void {\n this.measurementModel.clearOutcome();\n\n if (!this.invalid && this.start != null && this.end != null) {\n this.measurementModel.setOutcome({\n isApproximate: true,\n results: [makeMinimumDistanceResult(this.start, this.end)],\n });\n }\n }\n\n private getHitProvider(): PointToPointHitProvider | undefined {\n if (this.hitProvider == null) {\n const hitTester = this.getHitTester();\n const viewer = this.viewer;\n if (viewer != null && hitTester != null) {\n return {\n hitTester: () => hitTester,\n raycaster: async () => (await viewer.scene()).raycaster(),\n };\n }\n } else return this.hitProvider;\n }\n\n private getHitTester(): PointToPointHitTester | undefined {\n const { stencil, depthBuffer } = this.stateMap;\n if (depthBuffer != null) {\n return new PointToPointHitTester(\n stencil,\n depthBuffer,\n this.viewport,\n this.internalCamera\n );\n }\n }\n\n private updateMeasurementPropsFromModel(): void {\n const measurement = this.model.getMeasurement();\n this.start = measurement?.start;\n this.end = measurement?.end;\n this.distance = measurement?.distance;\n this.invalid = measurement != null && !measurement.valid;\n }\n\n private async updateIndicator(pt: Point.Point): Promise<void> {\n const hits = this.getHitProvider();\n const clearCursor =\n hits == null || !this.controller.moveIndicator(pt, hits);\n\n if (clearCursor) {\n this.stateMap.hoverCursor?.dispose();\n } else {\n await this.setCursor(measurementCursor);\n }\n }\n\n private setDepthBuffers(): void {\n if (\n this.mode != null &&\n this.viewer != null &&\n this.viewer.depthBuffers == null\n ) {\n this.stateMap.shouldClearDepthBuffers = true;\n this.viewer.depthBuffers = 'final';\n }\n }\n\n private resetDepthBuffers(): void {\n if (this.stateMap.shouldClearDepthBuffers && this.viewer != null) {\n this.viewer.depthBuffers = undefined;\n this.stateMap.shouldClearDepthBuffers = undefined;\n }\n }\n}\n\nfunction parseVector3(\n value: string | Vector3.Vector3 | undefined\n): Vector3.Vector3 | undefined {\n return typeof value === 'string' ? Vector3.fromJson(value) : value;\n}\n"]}
1
+ {"version":3,"file":"viewer-measurement-distance.js","sourceRoot":"","sources":["../../../../../src/components/viewer-measurement-distance/viewer-measurement-distance.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Method,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Line3, Point, Vector3 } from '@vertexvis/geometry';\nimport { Disposable } from '@vertexvis/utils';\n\nimport {\n MEASUREMENT_LINE_CAP_LENGTH,\n MEASUREMENT_SNAP_DISTANCE,\n} from '../../lib/constants';\nimport { Cursor, measurementCursor } from '../../lib/cursors';\nimport { getMouseClientPosition } from '../../lib/dom';\nimport { Formatter } from '../../lib/formatter';\nimport {\n makeMinimumDistanceResult,\n MeasurementModel,\n MeasurementOverlay,\n MeasurementOverlayManager,\n} from '../../lib/measurement';\nimport {\n DepthBuffer,\n DistanceUnits,\n DistanceUnitType,\n FrameCameraBase,\n StencilBuffer,\n Viewport,\n} from '../../lib/types';\nimport { getMeasurementBoundingClientRect } from './dom';\nimport { PointToPointHitTester } from './hitTest';\nimport {\n PointToPointHitProvider,\n PointToPointInteraction,\n PointToPointInteractionController,\n PointToPointInteractionModel,\n} from './interactions';\nimport {\n Anchor,\n getViewingElementPositions,\n MeasurementElementPositions,\n} from './utils';\nimport { DistanceMeasurementRenderer } from './viewer-measurement-distance-components';\n\n/**\n * Contains the bounding boxes of child elements of this component. This\n * information is useful for positioning popups or other elements around the\n * measurement.\n *\n * @see {@link ViewerDistanceMeasurement.computeElementMetrics} - For\n * calculating element metrics.\n */\nexport interface ViewerMeasurementDistanceElementMetrics {\n startAnchor: DOMRect;\n endAnchor: DOMRect;\n label: DOMRect;\n}\n\n/**\n * The supported measurement modes.\n *\n * @see {@link ViewerDistanceMeasurement.mode} - For more details about modes.\n */\nexport type ViewerMeasurementDistanceMode = 'edit' | 'replace' | '';\n\n/**\n * A details object describing the edit begin event.\n */\nexport interface EditBeginEventDetails {\n type: Exclude<ViewerMeasurementDistanceMode, ''>;\n anchor: Anchor;\n}\n/**\n * A details object describing the edit end event.\n */\nexport interface EditEndEventDetails {\n start: Vector3.Vector3;\n end: Vector3.Vector3;\n valid: boolean;\n}\n\ninterface StateMap {\n hoverCursor?: Disposable;\n stencil?: StencilBuffer;\n depthBuffer?: DepthBuffer;\n shouldClearDepthBuffers?: boolean;\n}\n\nconst INTERACTION_THRESHOLD = 3;\n\n/**\n * @slot start-anchor - An HTML element for the starting point anchor.\n *\n * @slot start-label - An HTML or text element that displays next to the start\n * anchor.\n *\n * @slot end-anchor - An HTML element for the ending point anchor.\n *\n * @slot end-label - An HTML or text element that displays next to the end\n * anchor.\n *\n * @slot indicator - An HTML element for the measurement indicator. The\n * indicator represents the position where a measurement will be placed while\n * editing.\n */\n@Component({\n tag: 'vertex-viewer-measurement-distance',\n styleUrl: 'viewer-measurement-distance.css',\n shadow: true,\n})\nexport class ViewerMeasurementDistance {\n /**\n * The world position of the starting anchor.\n */\n @Prop({ mutable: true })\n public start?: Vector3.Vector3;\n\n /**\n * The world position of the starting anchor, as a JSON string. The JSON\n * string can be an array or object representation in the format of `[x, y,\n * z]` or `{\"x\": 0, \"y\": 0, \"z\": 0}`.\n */\n @Prop()\n public startJson?: string;\n\n /**\n * The world position of the ending anchor.\n */\n @Prop({ mutable: true })\n public end?: Vector3.Vector3;\n\n /**\n * The world position of the ending anchor, as a JSON string. The JSON string\n * can be an array or object representation in the format of `[x, y, z]` or\n * `{\"x\": 0, \"y\": 0, \"z\": 0}`.\n */\n @Prop()\n public endJson?: string;\n\n /**\n * The distance between `start` and `end` in real world units. Value will be\n * undefined if the start and end positions are undefined, or if the\n * measurement is invalid.\n */\n @Prop({ mutable: true })\n public distance?: number;\n\n /**\n * Enables the display of axis reference lines between the start and end\n * point.\n */\n @Prop()\n public showAxisReferenceLines = false;\n\n /**\n * The distance, in pixels, between the mouse and nearest snappable edge. A\n * value of 0 disables snapping.\n */\n @Prop()\n public snapDistance: number = MEASUREMENT_SNAP_DISTANCE;\n\n /**\n * The unit of measurement.\n */\n @Prop()\n public units: DistanceUnitType = 'millimeters';\n\n /**\n * The number of fraction digits to display.\n */\n @Prop()\n public fractionalDigits = 2;\n\n /**\n * An optional formatter that can be used to format the display of a distance.\n * The formatting function is passed a calculated real-world distance and is\n * expected to return a string.\n */\n @Prop()\n public labelFormatter?: Formatter<number | undefined>;\n\n /**\n * The distance from an anchor to its label.\n */\n @Prop()\n public anchorLabelOffset = 20;\n\n /**\n * The length of the caps at each end of the distance measurement.\n */\n @Prop()\n public lineCapLength = MEASUREMENT_LINE_CAP_LENGTH;\n\n /**\n * A mode that specifies how the measurement component should behave.\n *\n * When unset, the component will not respond to interactions with the\n * handles.\n *\n * When `edit`, the measurement anchors are interactive and the user is able\n * to reposition them.\n *\n * When `replace`, anytime the user clicks on the canvas, a new measurement\n * will be created and replace any existing measurement. After a measurement\n * is created, the measurement will be editable.\n */\n @Prop({ reflect: true })\n public mode: ViewerMeasurementDistanceMode = '';\n\n /**\n * A property that reflects which anchor is currently being interacted with.\n */\n @Prop({ reflect: true, mutable: true })\n public interactingAnchor: Anchor | 'none' = 'none';\n\n /**\n * Indicates if the measurement is invalid. A measurement is invalid if either\n * the start or end position are not on the surface of the model.\n */\n @Prop({ mutable: true, reflect: true })\n public invalid = false;\n\n /**\n * The camera used to position the anchors. If `viewer` is defined, then the\n * projection view matrix of the viewer will be used.\n */\n @Prop()\n public camera?: FrameCameraBase;\n\n /**\n * @internal\n */\n @Prop()\n public hitProvider?: PointToPointHitProvider;\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public indicatorPt?: Vector3.Vector3;\n\n /**\n * The viewer to connect to this measurement. The measurement will redraw any\n * time the viewer redraws the scene.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The measurement model that will be updated when this measurement changes.\n * You can pass this to a <vertex-viewer-measurement-details> component to\n * display measurement outcomes.\n */\n @Prop()\n public measurementModel: MeasurementModel = new MeasurementModel();\n\n /**\n * An event that is dispatched anytime the user begins editing the\n * measurement.\n */\n @Event()\n public editBegin!: EventEmitter<EditBeginEventDetails>;\n\n /**\n * An event that is dispatched when the user has finished editing the\n * measurement.\n */\n @Event()\n public editEnd!: EventEmitter<EditEndEventDetails>;\n\n @State()\n private viewport: Viewport = new Viewport(0, 0);\n\n @State()\n private elementBounds?: DOMRect;\n\n @State()\n private interactionCount = 0;\n\n @State()\n private internalCamera?: FrameCameraBase;\n\n @State()\n private invalidateStateCounter = 0;\n\n @State()\n // Any data that should be preserved across live-reloads, but should not cause\n // a rerender if changed.\n private stateMap: StateMap = {};\n\n @State()\n private measurementUnits = new DistanceUnits(this.units);\n\n @Element()\n private hostEl!: HTMLElement;\n\n private model = PointToPointInteractionModel.empty();\n private controller = new PointToPointInteractionController(this.model);\n private interaction?: PointToPointInteraction;\n\n private overlays = new MeasurementOverlayManager();\n private overlay?: MeasurementOverlay;\n\n private isUserInteractingWithModel = false;\n\n private newInteractionHandler?: Disposable;\n\n /**\n * Computes the bounding boxes of the anchors and label. **Note:** invoking\n * this function uses `getBoundingClientRect` internally and will cause a\n * relayout of the DOM.\n */\n @Method()\n public async computeElementMetrics(): Promise<\n ViewerMeasurementDistanceElementMetrics | undefined\n > {\n const startAnchorEl =\n this.hostEl.shadowRoot?.getElementById('start-anchor');\n const endAnchorEl = this.hostEl.shadowRoot?.getElementById('end-anchor');\n const labelEl = this.hostEl.shadowRoot?.getElementById('label');\n\n if (startAnchorEl != null && endAnchorEl != null && labelEl != null) {\n return {\n startAnchor: startAnchorEl.getBoundingClientRect(),\n endAnchor: endAnchorEl.getBoundingClientRect(),\n label: labelEl.getBoundingClientRect(),\n };\n } else {\n return undefined;\n }\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.stateMap.hoverCursor?.dispose();\n this.newInteractionHandler?.dispose();\n this.resetDepthBuffers();\n }\n\n /**\n * @ignore\n */\n protected async componentWillLoad(): Promise<void> {\n this.updatePropsFromJson();\n this.model.setMeasurementFromValues(this.start, this.end, !this.invalid);\n\n await this.getStencilBuffer();\n this.updateViewport();\n this.setDepthBuffers();\n\n await this.handleViewerChanged(this.viewer);\n await this.handleModeChanged();\n\n await this.computePropsAndState();\n\n this.model.onIndicatorChanged((pt) => {\n this.indicatorPt = pt;\n });\n }\n\n /**\n * @ignore\n */\n protected componentDidLoad(): void {\n const resize = new ResizeObserver(() => this.updateViewport());\n resize.observe(this.hostEl);\n }\n\n /**\n * @ignore\n */\n protected async componentWillUpdate(): Promise<void> {\n await this.computePropsAndState();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n {this.showAxisReferenceLines && (\n <vertex-viewer-measurement-overlays\n measurementOverlays={this.overlays}\n viewer={this.viewer}\n />\n )}\n {this.renderMeasurement()}\n </Host>\n );\n }\n\n private renderMeasurement(): h.JSX.IntrinsicElements {\n const positions = this.computeElementPositions();\n const { startPt, endPt, labelPt, indicatorPt, hideStart, hideEnd } =\n positions;\n const distance = this.formatDistance(this.distance);\n\n if (this.mode === 'edit' || this.mode === 'replace') {\n return (\n <DistanceMeasurementRenderer\n startPt={startPt}\n endPt={endPt}\n centerPt={labelPt}\n indicatorPt={indicatorPt}\n distance={distance}\n anchorLabelOffset={this.anchorLabelOffset}\n lineCapLength={this.lineCapLength}\n hideStartAnchor={hideStart}\n hideEndAnchor={hideEnd}\n onStartAnchorPointerDown={this.handleEditAnchor('start')}\n onEndAnchorPointerDown={this.handleEditAnchor('end')}\n />\n );\n } else {\n return (\n <DistanceMeasurementRenderer\n startPt={startPt}\n endPt={endPt}\n centerPt={labelPt}\n indicatorPt={this.indicatorPt}\n distance={distance}\n hideStartAnchor={hideStart}\n hideEndAnchor={hideEnd}\n anchorLabelOffset={this.anchorLabelOffset}\n lineCapLength={this.lineCapLength}\n linePointerEvents=\"painted\"\n />\n );\n }\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected async handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement,\n ): Promise<void> {\n if (oldViewer != null) {\n oldViewer.removeEventListener('frameDrawn', this.handleFrameDrawn);\n await this.removeInteractionListeners(oldViewer);\n }\n\n if (newViewer != null) {\n newViewer.addEventListener('frameDrawn', this.handleFrameDrawn);\n await this.addInteractionListeners(newViewer);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('units', { immediate: true })\n protected handleUnitsChanged(): void {\n this.measurementUnits = new DistanceUnits(this.units);\n }\n\n /**\n * @ignore\n */\n @Watch('camera')\n protected handleCameraChanged(): void {\n this.updateCamera();\n }\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected async handleModeChanged(): Promise<void> {\n // If we're not in edit or replace mode, ensure that the measurement\n // cursor is removed.\n if (this.mode === '') {\n this.stateMap.hoverCursor?.dispose();\n }\n\n if (this.viewer != null) {\n await this.removeInteractionListeners(this.viewer);\n await this.addInteractionListeners(this.viewer);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('start')\n protected handleStartChanged(): void {\n this.updateInteractionModel();\n }\n\n /**\n * @ignore\n */\n @Watch('end')\n protected handleEndChanged(): void {\n this.updateInteractionModel();\n }\n\n /**\n * @ignore\n */\n @Watch('invalid')\n protected handleInvalidChanged(): void {\n this.updateInteractionModel();\n }\n\n private async computePropsAndState(): Promise<void> {\n this.updateCamera();\n await this.updateDepthBuffer();\n this.updateMeasurementPropsFromModel();\n this.updateOverlays();\n }\n\n private updateOverlays(): void {\n this.overlay?.dispose();\n\n if (\n this.showAxisReferenceLines &&\n this.interactionCount === 0 &&\n !this.invalid &&\n this.start != null &&\n this.end != null\n ) {\n this.overlay = this.overlays.addDistanceVector(this.start, this.end);\n }\n }\n\n private async setCursor(cursor: Cursor): Promise<void> {\n this.stateMap.hoverCursor?.dispose();\n\n if (!this.isUserInteractingWithModel) {\n this.stateMap.hoverCursor = await this.viewer?.addCursor(cursor);\n }\n }\n\n private computeElementPositions(): MeasurementElementPositions {\n if (this.mode === 'replace') {\n return this.computeReplaceElementPositions();\n } else {\n return this.computeEditOrViewElementPositions();\n }\n }\n\n private computeEditOrViewElementPositions(): MeasurementElementPositions {\n const measurement = this.model.getMeasurement();\n if (this.internalCamera != null && measurement != null) {\n return this.computeLineElementPositions(Line3.create(measurement));\n } else {\n return {};\n }\n }\n\n private computeReplaceElementPositions(): MeasurementElementPositions {\n if (this.internalCamera != null) {\n const measurement = this.model.getMeasurement();\n\n const line =\n measurement != null\n ? this.computeLineElementPositions(Line3.create(measurement))\n : {};\n const indicator =\n this.indicatorPt != null\n ? {\n indicatorPt: this.viewport.transformWorldToViewport(\n this.indicatorPt,\n this.internalCamera.projectionViewMatrix,\n ),\n }\n : {};\n\n return { ...line, ...indicator };\n } else {\n return {};\n }\n }\n\n private computeLineElementPositions(\n line: Line3.Line3,\n ): MeasurementElementPositions {\n if (this.internalCamera != null) {\n return getViewingElementPositions(line, this.interactingAnchor, {\n viewport: this.viewport,\n camera: this.internalCamera,\n });\n } else {\n return {};\n }\n }\n\n private updateCamera(): void {\n this.internalCamera = this.camera || this.viewer?.frame?.scene.camera;\n }\n\n private async updateDepthBuffer(): Promise<void> {\n this.stateMap.depthBuffer = await this.viewer?.frame?.depthBuffer();\n }\n\n private updateViewport(): void {\n const rect = getMeasurementBoundingClientRect(this.hostEl);\n this.viewport = new Viewport(rect.width, rect.height);\n this.elementBounds = rect;\n }\n\n private updatePropsFromJson(): void {\n this.start = parseVector3(this.startJson ?? this.start);\n this.end = parseVector3(this.endJson ?? this.end);\n }\n\n private updateInteractionModel(): void {\n this.model.setMeasurementFromValues(this.start, this.end, !this.invalid);\n }\n\n private handleFrameDrawn = (): void => {\n this.invalidateState();\n };\n\n private invalidateState(): void {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n }\n\n private async addInteractionListeners(\n viewer: HTMLVertexViewerElement,\n ): Promise<void> {\n const interactionTarget = await viewer.getInteractionTarget_DEPRECATED();\n if (this.mode === 'replace') {\n interactionTarget.addEventListener('pointermove', this.updateStartAnchor);\n interactionTarget.addEventListener('pointerdown', this.newMeasurement);\n interactionTarget.addEventListener('pointerleave', this.clearIndicator);\n }\n }\n\n private async removeInteractionListeners(\n viewer: HTMLVertexViewerElement,\n ): Promise<void> {\n const interactionTarget = await viewer.getInteractionTarget_DEPRECATED();\n interactionTarget.removeEventListener(\n 'pointermove',\n this.updateStartAnchor,\n );\n interactionTarget.removeEventListener('pointerdown', this.newMeasurement);\n interactionTarget.removeEventListener('pointerleave', this.clearIndicator);\n }\n\n private clearIndicator = (): void => {\n this.controller.clearIndicator();\n };\n\n private updateStartAnchor = async (event: PointerEvent): Promise<void> => {\n await this.getStencilBuffer();\n\n if (this.interactionCount === 0) {\n const pt = getMouseClientPosition(event, this.elementBounds);\n const snapPt = this.snapPoint(pt, event);\n await this.updateIndicator(snapPt);\n }\n };\n\n private newMeasurement = (event: PointerEvent): void => {\n if (this.interactionCount === 0 && event.button === 0) {\n // Function that registers event listeners to perform a new measurement.\n const startMeasurement = (start: () => void): void => {\n const dispose = (): void => {\n window.removeEventListener('pointerup', pointerUp);\n window.removeEventListener('pointermove', pointerMove);\n };\n const pointerUp = async (): Promise<void> => {\n dispose();\n start();\n };\n const pointerMove = (event: PointerEvent): void => {\n if (event.buttons > 0) {\n dispose();\n }\n };\n\n window.addEventListener('pointermove', pointerMove);\n window.addEventListener('pointerup', pointerUp);\n };\n\n // Function that registers event listeners to detect if a user is\n // interacting with the model. If so, we temporarily disable measurement\n // updates until the user finishes.\n const pointerDownAndMove = (callback: () => void): Disposable => {\n let downPt: Point.Point = Point.create(0, 0);\n\n const pointerMove = (event: PointerEvent): void => {\n const dist = Point.distance(\n downPt,\n getMouseClientPosition(event, this.elementBounds),\n );\n if (dist >= INTERACTION_THRESHOLD) {\n callback();\n }\n };\n\n const dispose = (): void => {\n window.removeEventListener('pointermove', pointerMove);\n window.removeEventListener('pointerup', pointerUp);\n };\n\n const pointerUp = (): void => dispose();\n\n const pointerDown = (event: PointerEvent): void => {\n downPt = getMouseClientPosition(event, this.elementBounds);\n window.addEventListener('pointermove', pointerMove);\n window.addEventListener('pointerup', pointerUp);\n };\n\n window.addEventListener('pointerdown', pointerDown);\n\n return {\n dispose: () => window.removeEventListener('pointerdown', pointerDown),\n };\n };\n\n // Function that registers event listeners to finish a measurement.\n const measureInteraction = (): void => {\n const handleDownAndMove = pointerDownAndMove(() => {\n this.isUserInteractingWithModel = true;\n this.stateMap.hoverCursor?.dispose();\n });\n\n const dispose = (): void => {\n window.removeEventListener('pointermove', pointerMove);\n window.removeEventListener('pointerup', pointerUp);\n handleDownAndMove.dispose();\n };\n\n const pointerMove = this.createInteractionMoveHandler();\n const pointerUp = async (event: PointerEvent): Promise<void> => {\n if (event.button === 0) {\n if (this.isUserInteractingWithModel) {\n this.isUserInteractingWithModel = false;\n } else {\n const hits = this.getHitProvider();\n if (hits != null) {\n const pt = getMouseClientPosition(event, this.elementBounds);\n const snapPt = this.snapPoint(pt, event);\n await this.interaction?.finish(snapPt, hits);\n\n dispose();\n this.updateMeasurementPropsFromModel();\n this.endEditing();\n }\n }\n }\n };\n\n this.beginEditing('replace', 'end');\n this.newInteractionHandler = { dispose };\n\n window.addEventListener('pointermove', pointerMove);\n window.addEventListener('pointerup', pointerUp);\n };\n\n const hits = this.getHitProvider();\n if (hits != null) {\n const pt = getMouseClientPosition(event, this.elementBounds);\n const snapPt = this.snapPoint(pt, event);\n this.interaction = this.controller.newMeasurement(snapPt, hits);\n\n if (this.interaction != null) {\n startMeasurement(measureInteraction);\n }\n }\n }\n };\n\n private handleEditAnchor(\n anchor: Anchor,\n ): ((event: PointerEvent) => Promise<void>) | undefined {\n if (this.mode === 'edit' || this.mode === 'replace') {\n const handlePointerMove = this.createInteractionMoveHandler();\n const handlePointerUp = async (event: PointerEvent): Promise<void> => {\n const hits = this.getHitProvider();\n if (hits != null) {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerUp);\n\n const pt = getMouseClientPosition(event, this.elementBounds);\n const snapPt = this.snapPoint(pt, event);\n await this.interaction?.finish(snapPt, hits);\n\n this.updateMeasurementPropsFromModel();\n this.endEditing();\n }\n };\n\n return async (event) => {\n await this.getStencilBuffer();\n\n if (event.button === 0) {\n this.beginEditing('edit', anchor);\n\n this.interaction = this.controller.editMeasurement(anchor);\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerUp);\n }\n };\n }\n }\n\n private createInteractionMoveHandler(): (\n event: PointerEvent,\n ) => Promise<void> {\n return async (event) => {\n const hits = this.getHitProvider();\n if (this.elementBounds != null && hits != null) {\n event.preventDefault();\n await this.getStencilBuffer();\n\n const pt = getMouseClientPosition(event, this.elementBounds);\n const snapPt = this.snapPoint(pt, event);\n this.interaction?.update(snapPt, hits);\n this.updateMeasurementPropsFromModel();\n }\n };\n }\n\n private async getStencilBuffer(): Promise<void> {\n const stencil = await this.viewer?.stencilBuffer.latestAfterInteraction();\n this.stateMap.stencil = stencil;\n }\n\n private snapPoint(pt: Point.Point, event: MouseEvent): Point.Point {\n const hits = this.getHitProvider();\n if (hits != null && !event.shiftKey) {\n const snapDistance = Math.max(0, this.snapDistance);\n return hits.hitTester().snapToNearestPixel(pt, snapDistance);\n }\n return pt;\n }\n\n private formatDistance(distance: number | undefined): string {\n const dist =\n distance != null\n ? this.measurementUnits.convertWorldValueToReal(distance)\n : undefined;\n\n if (this.labelFormatter != null) {\n return this.labelFormatter(dist);\n } else {\n const abbreviated = this.measurementUnits.unit.abbreviatedName;\n return dist == null\n ? '---'\n : `~${dist.toFixed(this.fractionalDigits)} ${abbreviated}`;\n }\n }\n\n private beginEditing(\n type: EditBeginEventDetails['type'],\n anchor: EditBeginEventDetails['anchor'],\n ): void {\n if (this.interactionCount === 0) {\n this.interactingAnchor = anchor;\n this.editBegin.emit({ type, anchor });\n }\n this.interactionCount = this.interactionCount + 1;\n }\n\n private endEditing(): void {\n if (this.interactionCount === 1) {\n const measurement = this.model.getMeasurement();\n\n this.interactingAnchor = 'none';\n this.updateMeasurementModel();\n\n if (measurement != null) {\n this.editEnd.emit(measurement);\n }\n }\n this.interactionCount = this.interactionCount - 1;\n }\n\n private updateMeasurementModel(): void {\n this.measurementModel.clearOutcome();\n\n if (!this.invalid && this.start != null && this.end != null) {\n this.measurementModel.setOutcome({\n isApproximate: true,\n results: [makeMinimumDistanceResult(this.start, this.end)],\n });\n }\n }\n\n private getHitProvider(): PointToPointHitProvider | undefined {\n if (this.hitProvider == null) {\n const hitTester = this.getHitTester();\n const viewer = this.viewer;\n if (viewer != null && hitTester != null) {\n return {\n hitTester: () => hitTester,\n raycaster: async () => (await viewer.scene()).raycaster(),\n };\n }\n } else return this.hitProvider;\n }\n\n private getHitTester(): PointToPointHitTester | undefined {\n const { stencil, depthBuffer } = this.stateMap;\n if (depthBuffer != null) {\n return new PointToPointHitTester(\n stencil,\n depthBuffer,\n this.viewport,\n this.internalCamera,\n );\n }\n }\n\n private updateMeasurementPropsFromModel(): void {\n const measurement = this.model.getMeasurement();\n this.start = measurement?.start;\n this.end = measurement?.end;\n this.distance = measurement?.distance;\n this.invalid = measurement != null && !measurement.valid;\n }\n\n private async updateIndicator(pt: Point.Point): Promise<void> {\n const hits = this.getHitProvider();\n const clearCursor =\n hits == null || !this.controller.moveIndicator(pt, hits);\n\n if (clearCursor) {\n this.stateMap.hoverCursor?.dispose();\n } else {\n await this.setCursor(measurementCursor);\n }\n }\n\n private setDepthBuffers(): void {\n if (\n this.mode != null &&\n this.viewer != null &&\n this.viewer.depthBuffers == null\n ) {\n this.stateMap.shouldClearDepthBuffers = true;\n this.viewer.depthBuffers = 'final';\n }\n }\n\n private resetDepthBuffers(): void {\n if (this.stateMap.shouldClearDepthBuffers && this.viewer != null) {\n this.viewer.depthBuffers = undefined;\n this.stateMap.shouldClearDepthBuffers = undefined;\n }\n }\n}\n\nfunction parseVector3(\n value: string | Vector3.Vector3 | undefined,\n): Vector3.Vector3 | undefined {\n return typeof value === 'string' ? Vector3.fromJson(value) : value;\n}\n"]}
@@ -31,7 +31,7 @@ export class ViewerMeasurementLine {
31
31
  const angle = Angle.fromPoints(this.start, this.end);
32
32
  const lineFillEndCaps = getEndCapPoints(this.start, this.end, angle, this.capLength);
33
33
  const lineStrokeEndCaps = getEndCapPoints(this.start, this.end, angle, this.capLength + 1);
34
- return (h("svg", { key: '96c8e5b4ddb2e0bfb86e622ba7414c5061000ea9' }, h("g", { key: '6b1673f801e3776db396e5912541d51ca54d23bf', class: "line-stroke", "pointer-events": this.pointerEvents }, h("line", { key: '1ae3892507d0a63701950c12abfa67cd2f02e46f', class: "line", x1: this.start.x, y1: this.start.y, x2: this.end.x, y2: this.end.y }), h("line", { key: 'ab3111d1d00653f1d68d12e0e89ad2e0fe609049', class: "start-cap", x1: lineStrokeEndCaps.startEndCap.start.x, y1: lineStrokeEndCaps.startEndCap.start.y, x2: lineStrokeEndCaps.startEndCap.end.x, y2: lineStrokeEndCaps.startEndCap.end.y }), h("line", { key: '5c3e899afe9a95af73fcd80aa670c3849dbe1f70', class: "end-cap", x1: lineStrokeEndCaps.endEndCap.start.x, y1: lineStrokeEndCaps.endEndCap.start.y, x2: lineStrokeEndCaps.endEndCap.end.x, y2: lineStrokeEndCaps.endEndCap.end.y })), h("g", { key: 'cfef2398d0c8445e3f9223c52b446c2cb187c5e9', class: "line-fill", "pointer-events": this.pointerEvents }, h("line", { key: '90653a7c0fadd495949f85a246d3b640086fbbef', class: "line", x1: this.start.x, y1: this.start.y, x2: this.end.x, y2: this.end.y }), h("line", { key: 'c92da23e39cf9248e12875136b68aa5de42b2e09', class: "start-cap", x1: lineFillEndCaps.startEndCap.start.x, y1: lineFillEndCaps.startEndCap.start.y, x2: lineFillEndCaps.startEndCap.end.x, y2: lineFillEndCaps.startEndCap.end.y }), h("line", { key: '5dbfeff2784da10f6e1a442fcf706edf91e9e4ef', class: "end-cap", x1: lineFillEndCaps.endEndCap.start.x, y1: lineFillEndCaps.endEndCap.start.y, x2: lineFillEndCaps.endEndCap.end.x, y2: lineFillEndCaps.endEndCap.end.y }))));
34
+ return (h("svg", { key: '323aa791a7c2bdc86782e2f8b760814d77be2425' }, h("g", { key: '8cd508b94de3a13ffc310d3b473af23282f8a738', class: "line-stroke", "pointer-events": this.pointerEvents }, h("line", { key: 'bac6d7aba6fd4291de05724f32d2fe98951d0689', class: "line", x1: this.start.x, y1: this.start.y, x2: this.end.x, y2: this.end.y }), h("line", { key: '1737e250c626425bd6957d999093f52554306f51', class: "start-cap", x1: lineStrokeEndCaps.startEndCap.start.x, y1: lineStrokeEndCaps.startEndCap.start.y, x2: lineStrokeEndCaps.startEndCap.end.x, y2: lineStrokeEndCaps.startEndCap.end.y }), h("line", { key: '493750b2fcfbddc3e3babfc49b021fba02137553', class: "end-cap", x1: lineStrokeEndCaps.endEndCap.start.x, y1: lineStrokeEndCaps.endEndCap.start.y, x2: lineStrokeEndCaps.endEndCap.end.x, y2: lineStrokeEndCaps.endEndCap.end.y })), h("g", { key: '12e2f699db1b0dfdea6dbc2c1c3ce59f18208f72', class: "line-fill", "pointer-events": this.pointerEvents }, h("line", { key: 'df123676bd96bb1393c2650a17fbab7df314e543', class: "line", x1: this.start.x, y1: this.start.y, x2: this.end.x, y2: this.end.y }), h("line", { key: '8349df59c4a3bcb7b5c0be89f46e1088c9e4b76c', class: "start-cap", x1: lineFillEndCaps.startEndCap.start.x, y1: lineFillEndCaps.startEndCap.start.y, x2: lineFillEndCaps.startEndCap.end.x, y2: lineFillEndCaps.startEndCap.end.y }), h("line", { key: '2c3a122698d55e69c391cf859c8e5cd3a0b032f3', class: "end-cap", x1: lineFillEndCaps.endEndCap.start.x, y1: lineFillEndCaps.endEndCap.start.y, x2: lineFillEndCaps.endEndCap.end.x, y2: lineFillEndCaps.endEndCap.end.y }))));
35
35
  }
36
36
  static get is() { return "vertex-viewer-measurement-line"; }
37
37
  static get encapsulation() { return "shadow"; }
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-measurement-line.js","sourceRoot":"","sources":["../../../../../src/components/viewer-measurement-line/viewer-measurement-line.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop } from '@stencil/core';\nimport { Angle, Point } from '@vertexvis/geometry';\n\n@Component({\n tag: 'vertex-viewer-measurement-line',\n styleUrl: 'viewer-measurement-line.css',\n shadow: true,\n})\nexport class ViewerMeasurementLine {\n /**\n * A point that specifies the starting point of the line.\n */\n @Prop()\n public start: Point.Point = Point.create();\n\n /**\n * A point that specifies the ending point of the line.\n */\n @Prop()\n public end: Point.Point = Point.create();\n\n /**\n * A length of the line cap. The line cap is a line at each end of a line.\n */\n @Prop()\n public capLength = 0;\n\n /**\n * The type of [SVG pointer\n * events](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/pointer-events)\n * that the line should respond to.\n */\n @Prop()\n public pointerEvents = 'none';\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n const angle = Angle.fromPoints(this.start, this.end);\n const lineFillEndCaps = getEndCapPoints(\n this.start,\n this.end,\n angle,\n this.capLength\n );\n const lineStrokeEndCaps = getEndCapPoints(\n this.start,\n this.end,\n angle,\n this.capLength + 1\n );\n\n return (\n <svg>\n <g class=\"line-stroke\" pointer-events={this.pointerEvents}>\n <line\n class=\"line\"\n x1={this.start.x}\n y1={this.start.y}\n x2={this.end.x}\n y2={this.end.y}\n />\n\n <line\n class=\"start-cap\"\n x1={lineStrokeEndCaps.startEndCap.start.x}\n y1={lineStrokeEndCaps.startEndCap.start.y}\n x2={lineStrokeEndCaps.startEndCap.end.x}\n y2={lineStrokeEndCaps.startEndCap.end.y}\n />\n\n <line\n class=\"end-cap\"\n x1={lineStrokeEndCaps.endEndCap.start.x}\n y1={lineStrokeEndCaps.endEndCap.start.y}\n x2={lineStrokeEndCaps.endEndCap.end.x}\n y2={lineStrokeEndCaps.endEndCap.end.y}\n />\n </g>\n\n <g class=\"line-fill\" pointer-events={this.pointerEvents}>\n <line\n class=\"line\"\n x1={this.start.x}\n y1={this.start.y}\n x2={this.end.x}\n y2={this.end.y}\n />\n\n <line\n class=\"start-cap\"\n x1={lineFillEndCaps.startEndCap.start.x}\n y1={lineFillEndCaps.startEndCap.start.y}\n x2={lineFillEndCaps.startEndCap.end.x}\n y2={lineFillEndCaps.startEndCap.end.y}\n />\n\n <line\n class=\"end-cap\"\n x1={lineFillEndCaps.endEndCap.start.x}\n y1={lineFillEndCaps.endEndCap.start.y}\n x2={lineFillEndCaps.endEndCap.end.x}\n y2={lineFillEndCaps.endEndCap.end.y}\n />\n </g>\n </svg>\n );\n }\n}\n\ninterface EndCapPoints {\n start: Point.Point;\n end: Point.Point;\n}\n\ninterface LinePoints {\n startEndCap: EndCapPoints;\n endEndCap: EndCapPoints;\n}\n\nfunction getEndCapPoints(\n start: Point.Point,\n end: Point.Point,\n angle: number,\n length: number\n): LinePoints {\n return {\n startEndCap: getPerpendicularLine(start, angle, length),\n endEndCap: getPerpendicularLine(end, angle, length),\n };\n}\n\nfunction getPerpendicularLine(\n pt: Point.Point,\n angle: number,\n length: number\n): { start: Point.Point; end: Point.Point } {\n const perpAngle = angle + Math.PI / 2;\n const start = Point.add(pt, Point.polar(length / 2, perpAngle));\n const end = Point.add(pt, Point.polar(length / 2, perpAngle + Math.PI));\n return { start, end };\n}\n"]}
1
+ {"version":3,"file":"viewer-measurement-line.js","sourceRoot":"","sources":["../../../../../src/components/viewer-measurement-line/viewer-measurement-line.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop } from '@stencil/core';\nimport { Angle, Point } from '@vertexvis/geometry';\n\n@Component({\n tag: 'vertex-viewer-measurement-line',\n styleUrl: 'viewer-measurement-line.css',\n shadow: true,\n})\nexport class ViewerMeasurementLine {\n /**\n * A point that specifies the starting point of the line.\n */\n @Prop()\n public start: Point.Point = Point.create();\n\n /**\n * A point that specifies the ending point of the line.\n */\n @Prop()\n public end: Point.Point = Point.create();\n\n /**\n * A length of the line cap. The line cap is a line at each end of a line.\n */\n @Prop()\n public capLength = 0;\n\n /**\n * The type of [SVG pointer\n * events](https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/pointer-events)\n * that the line should respond to.\n */\n @Prop()\n public pointerEvents = 'none';\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n const angle = Angle.fromPoints(this.start, this.end);\n const lineFillEndCaps = getEndCapPoints(\n this.start,\n this.end,\n angle,\n this.capLength,\n );\n const lineStrokeEndCaps = getEndCapPoints(\n this.start,\n this.end,\n angle,\n this.capLength + 1,\n );\n\n return (\n <svg>\n <g class=\"line-stroke\" pointer-events={this.pointerEvents}>\n <line\n class=\"line\"\n x1={this.start.x}\n y1={this.start.y}\n x2={this.end.x}\n y2={this.end.y}\n />\n\n <line\n class=\"start-cap\"\n x1={lineStrokeEndCaps.startEndCap.start.x}\n y1={lineStrokeEndCaps.startEndCap.start.y}\n x2={lineStrokeEndCaps.startEndCap.end.x}\n y2={lineStrokeEndCaps.startEndCap.end.y}\n />\n\n <line\n class=\"end-cap\"\n x1={lineStrokeEndCaps.endEndCap.start.x}\n y1={lineStrokeEndCaps.endEndCap.start.y}\n x2={lineStrokeEndCaps.endEndCap.end.x}\n y2={lineStrokeEndCaps.endEndCap.end.y}\n />\n </g>\n\n <g class=\"line-fill\" pointer-events={this.pointerEvents}>\n <line\n class=\"line\"\n x1={this.start.x}\n y1={this.start.y}\n x2={this.end.x}\n y2={this.end.y}\n />\n\n <line\n class=\"start-cap\"\n x1={lineFillEndCaps.startEndCap.start.x}\n y1={lineFillEndCaps.startEndCap.start.y}\n x2={lineFillEndCaps.startEndCap.end.x}\n y2={lineFillEndCaps.startEndCap.end.y}\n />\n\n <line\n class=\"end-cap\"\n x1={lineFillEndCaps.endEndCap.start.x}\n y1={lineFillEndCaps.endEndCap.start.y}\n x2={lineFillEndCaps.endEndCap.end.x}\n y2={lineFillEndCaps.endEndCap.end.y}\n />\n </g>\n </svg>\n );\n }\n}\n\ninterface EndCapPoints {\n start: Point.Point;\n end: Point.Point;\n}\n\ninterface LinePoints {\n startEndCap: EndCapPoints;\n endEndCap: EndCapPoints;\n}\n\nfunction getEndCapPoints(\n start: Point.Point,\n end: Point.Point,\n angle: number,\n length: number,\n): LinePoints {\n return {\n startEndCap: getPerpendicularLine(start, angle, length),\n endEndCap: getPerpendicularLine(end, angle, length),\n };\n}\n\nfunction getPerpendicularLine(\n pt: Point.Point,\n angle: number,\n length: number,\n): { start: Point.Point; end: Point.Point } {\n const perpAngle = angle + Math.PI / 2;\n const start = Point.add(pt, Point.polar(length / 2, perpAngle));\n const end = Point.add(pt, Point.polar(length / 2, perpAngle + Math.PI));\n return { start, end };\n}\n"]}
@@ -64,7 +64,7 @@ export class ViewerMeasurementOverlays {
64
64
  * @ignore
65
65
  */
66
66
  render() {
67
- return (h(Host, { key: 'fbda189899fa87c57b11615693d1319eee341fea' }, this.overlays.map((overlay) => {
67
+ return (h(Host, { key: '965a86f907cfe18797db57f488d38ac29bae8682' }, this.overlays.map((overlay) => {
68
68
  if (this.camera != null && this.viewer != null) {
69
69
  return (h(MeasurementOverlayView, { overlay: overlay, viewport: this.viewer.viewport, camera: this.camera }));
70
70
  }
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-measurement-overlays.js","sourceRoot":"","sources":["../../../../../src/components/viewer-measurement-overlays/viewer-measurement-overlays.tsx"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,EAEL,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAOlF,MAAM,OAAO,yBAAyB;IALtC;QAME;;WAEG;QAEI,wBAAmB,GAAG,IAAI,yBAAyB,EAAE,CAAC;QA0CrD,aAAQ,GAAyB,EAAE,CAAC;QAgCpC,iBAAY,GAAG,GAAS,EAAE;;YAChC,IAAI,CAAC,MAAM,GAAG,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,0CAAE,KAAK,CAAC,MAAM,CAAC;QACjD,CAAC,CAAC;KA0BH;IAlGC;;OAEG;IAEO,gCAAgC;QACxC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAcD;;OAEG;IAEO,mBAAmB,CAC3B,SAAmC,EACnC,SAAmC;QAEnC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAKD;;OAEG;IACO,iBAAiB;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CACzE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAC5B,CAAC;IACJ,CAAC;IAEO,oBAAoB;;QAC1B,MAAA,IAAI,CAAC,yBAAyB,0CAAE,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAC7C,CAAC;IAEO,kBAAkB;;QACxB,MAAA,IAAI,CAAC,MAAM,0CAAE,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC;IAEO,qBAAqB,CAAC,MAAgC;QAC5D,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAClE,CAAC;IAMO,cAAc;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;IACzD,CAAC;IAED;;OAEG;IACO,MAAM;QACd,OAAO,CACL,EAAC,IAAI,uDACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;gBAC/C,OAAO,CACL,EAAC,sBAAsB,IACrB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,GACnB,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACG,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/member-ordering */\nimport { Component, h, Host, Prop, State, Watch } from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport {\n MeasurementOverlay,\n MeasurementOverlayManager,\n} from '../../lib/measurement';\nimport { FrameCameraBase } from '../../lib/types';\nimport { MeasurementOverlayView } from './viewer-measurement-overlays-components';\n\n@Component({\n tag: 'vertex-viewer-measurement-overlays',\n styleUrl: 'viewer-measurement-overlays.css',\n shadow: true,\n})\nexport class ViewerMeasurementOverlays {\n /**\n * The model that contains the overlays to present.\n */\n @Prop()\n public measurementOverlays = new MeasurementOverlayManager();\n\n private onOverlaysChangedListener?: Disposable;\n\n /**\n * @ignore\n */\n @Watch('measurementOverlays')\n protected handleMeasurementOverlaysChanged(): void {\n this.removeModelListeners();\n this.addModelListeners();\n\n this.updateOverlays();\n }\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public camera?: FrameCameraBase;\n\n /**\n * The viewer that this component is bound to.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement\n ): void {\n this.removeViewerListeners(oldViewer);\n this.addViewerListeners();\n\n this.updateCamera();\n }\n\n @State()\n private overlays: MeasurementOverlay[] = [];\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.addModelListeners();\n this.addViewerListeners();\n\n this.updateOverlays();\n this.updateCamera();\n }\n\n private addModelListeners(): void {\n this.onOverlaysChangedListener = this.measurementOverlays.onOverlaysChanged(\n () => this.updateOverlays()\n );\n }\n\n private removeModelListeners(): void {\n this.onOverlaysChangedListener?.dispose();\n this.onOverlaysChangedListener = undefined;\n }\n\n private addViewerListeners(): void {\n this.viewer?.addEventListener('frameReceived', this.updateCamera);\n }\n\n private removeViewerListeners(viewer?: HTMLVertexViewerElement): void {\n viewer?.removeEventListener('frameReceived', this.updateCamera);\n }\n\n private updateCamera = (): void => {\n this.camera = this.viewer?.frame?.scene.camera;\n };\n\n private updateOverlays(): void {\n this.overlays = this.measurementOverlays.getOverlays();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n {this.overlays.map((overlay) => {\n if (this.camera != null && this.viewer != null) {\n return (\n <MeasurementOverlayView\n overlay={overlay}\n viewport={this.viewer.viewport}\n camera={this.camera}\n />\n );\n }\n })}\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"viewer-measurement-overlays.js","sourceRoot":"","sources":["../../../../../src/components/viewer-measurement-overlays/viewer-measurement-overlays.tsx"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAGvE,OAAO,EAEL,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAOlF,MAAM,OAAO,yBAAyB;IALtC;QAME;;WAEG;QAEI,wBAAmB,GAAG,IAAI,yBAAyB,EAAE,CAAC;QA0CrD,aAAQ,GAAyB,EAAE,CAAC;QAgCpC,iBAAY,GAAG,GAAS,EAAE;;YAChC,IAAI,CAAC,MAAM,GAAG,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,0CAAE,KAAK,CAAC,MAAM,CAAC;QACjD,CAAC,CAAC;KA0BH;IAlGC;;OAEG;IAEO,gCAAgC;QACxC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAcD;;OAEG;IAEO,mBAAmB,CAC3B,SAAmC,EACnC,SAAmC;QAEnC,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAKD;;OAEG;IACO,iBAAiB;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,CACzE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAC5B,CAAC;IACJ,CAAC;IAEO,oBAAoB;;QAC1B,MAAA,IAAI,CAAC,yBAAyB,0CAAE,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC,yBAAyB,GAAG,SAAS,CAAC;IAC7C,CAAC;IAEO,kBAAkB;;QACxB,MAAA,IAAI,CAAC,MAAM,0CAAE,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACpE,CAAC;IAEO,qBAAqB,CAAC,MAAgC;QAC5D,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IAClE,CAAC;IAMO,cAAc;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;IACzD,CAAC;IAED;;OAEG;IACO,MAAM;QACd,OAAO,CACL,EAAC,IAAI,uDACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;gBAC/C,OAAO,CACL,EAAC,sBAAsB,IACrB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,GACnB,CACH,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CACG,CACR,CAAC;IACJ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/member-ordering */\nimport { Component, h, Host, Prop, State, Watch } from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport {\n MeasurementOverlay,\n MeasurementOverlayManager,\n} from '../../lib/measurement';\nimport { FrameCameraBase } from '../../lib/types';\nimport { MeasurementOverlayView } from './viewer-measurement-overlays-components';\n\n@Component({\n tag: 'vertex-viewer-measurement-overlays',\n styleUrl: 'viewer-measurement-overlays.css',\n shadow: true,\n})\nexport class ViewerMeasurementOverlays {\n /**\n * The model that contains the overlays to present.\n */\n @Prop()\n public measurementOverlays = new MeasurementOverlayManager();\n\n private onOverlaysChangedListener?: Disposable;\n\n /**\n * @ignore\n */\n @Watch('measurementOverlays')\n protected handleMeasurementOverlaysChanged(): void {\n this.removeModelListeners();\n this.addModelListeners();\n\n this.updateOverlays();\n }\n\n /**\n * @internal\n */\n @Prop({ mutable: true })\n public camera?: FrameCameraBase;\n\n /**\n * The viewer that this component is bound to.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement,\n ): void {\n this.removeViewerListeners(oldViewer);\n this.addViewerListeners();\n\n this.updateCamera();\n }\n\n @State()\n private overlays: MeasurementOverlay[] = [];\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.addModelListeners();\n this.addViewerListeners();\n\n this.updateOverlays();\n this.updateCamera();\n }\n\n private addModelListeners(): void {\n this.onOverlaysChangedListener = this.measurementOverlays.onOverlaysChanged(\n () => this.updateOverlays(),\n );\n }\n\n private removeModelListeners(): void {\n this.onOverlaysChangedListener?.dispose();\n this.onOverlaysChangedListener = undefined;\n }\n\n private addViewerListeners(): void {\n this.viewer?.addEventListener('frameReceived', this.updateCamera);\n }\n\n private removeViewerListeners(viewer?: HTMLVertexViewerElement): void {\n viewer?.removeEventListener('frameReceived', this.updateCamera);\n }\n\n private updateCamera = (): void => {\n this.camera = this.viewer?.frame?.scene.camera;\n };\n\n private updateOverlays(): void {\n this.overlays = this.measurementOverlays.getOverlays();\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n {this.overlays.map((overlay) => {\n if (this.camera != null && this.viewer != null) {\n return (\n <MeasurementOverlayView\n overlay={overlay}\n viewport={this.viewer.viewport}\n camera={this.camera}\n />\n );\n }\n })}\n </Host>\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-measurement-precise.js","sourceRoot":"","sources":["../../../../../src/components/viewer-measurement-precise/viewer-measurement-precise.tsx"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Component, h, Host, JSX, Prop, State, Watch } from '@stencil/core';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { parseAndValidateConfig, PartialConfig } from '../../lib/config';\nimport { Environment } from '../../lib/environment';\nimport {\n MeasurementController,\n MeasurementModel,\n MeasurementOverlayManager,\n} from '../../lib/measurement';\nimport { MeasurementInteractionHandler } from '../../lib/measurement/interactions';\nimport { EntityType } from '../../lib/types';\n\n@Component({\n tag: 'vertex-viewer-measurement-precise',\n styleUrl: 'viewer-measurement-precise.css',\n shadow: true,\n})\nexport class ViewerMeasurementPrecise {\n /**\n * The model that contains the entities and outcomes from performing precise\n * measurements.\n */\n @Prop()\n public measurementModel: MeasurementModel = new MeasurementModel();\n\n /**\n * The manager that is responsible for measurement overlays to present by this\n * component.\n */\n @Prop()\n public measurementOverlays: MeasurementOverlayManager =\n new MeasurementOverlayManager();\n\n /**\n * The controller that is responsible for performing measurements and updating\n * the model.\n */\n @Prop({ mutable: true })\n public measurementController?: MeasurementController;\n\n /**\n * @internal\n *\n * An internal property that can be used to opt-in to performing measurements\n * on other types of entities.\n */\n @Prop()\n public measurableEntityTypes: EntityType[] = [\n EntityType.PRECISE_SURFACE,\n EntityType.IMPRECISE_SURFACE,\n ];\n\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The environment that will be used to request measurement results.\n */\n @Prop()\n public configEnv: Environment = 'platprod';\n\n /**\n * An optional configuration to setup network configuration of measurement\n * endpoints.\n */\n @Prop()\n public config?: PartialConfig | string;\n\n private registeredInteractionHandler?: Promise<Disposable>;\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurableEntityTypes')\n protected handleMeasurableEntityTypesChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurementController')\n protected handleMeasurementControllerChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurementModel', { immediate: true })\n protected handleMeasurementModelChanged(): void {\n this.setupController();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected render(): JSX.Element {\n return (\n <Host>\n <vertex-viewer-measurement-overlays\n viewer={this.viewer}\n measurementOverlays={this.measurementOverlays}\n />\n </Host>\n );\n }\n\n private setupController(): void {\n const config = parseAndValidateConfig(this.configEnv, this.config);\n const client = new SceneViewAPIClient(config.network.sceneViewHost);\n this.measurementController = new MeasurementController(\n this.measurementModel,\n client,\n () => this.viewer?.token,\n this.viewer?.deviceId\n );\n }\n\n private clearInteractionHandler(): void {\n this.registeredInteractionHandler?.then((handler) => handler.dispose());\n this.registeredInteractionHandler = undefined;\n }\n\n private setupInteractionHandler(): void {\n this.clearInteractionHandler();\n\n if (this.measurementController != null) {\n this.registeredInteractionHandler =\n this.viewer?.registerInteractionHandler(\n new MeasurementInteractionHandler(\n this.measurementController,\n this.measurableEntityTypes\n )\n );\n }\n }\n}\n"]}
1
+ {"version":3,"file":"viewer-measurement-precise.js","sourceRoot":"","sources":["../../../../../src/components/viewer-measurement-precise/viewer-measurement-precise.tsx"],"names":[],"mappings":"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","sourcesContent":["// eslint-disable-next-line @typescript-eslint/no-unused-vars\nimport { Component, h, Host, JSX, Prop, State, Watch } from '@stencil/core';\nimport { SceneViewAPIClient } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb_service';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { parseAndValidateConfig, PartialConfig } from '../../lib/config';\nimport { Environment } from '../../lib/environment';\nimport {\n MeasurementController,\n MeasurementModel,\n MeasurementOverlayManager,\n} from '../../lib/measurement';\nimport { MeasurementInteractionHandler } from '../../lib/measurement/interactions';\nimport { EntityType } from '../../lib/types';\n\n@Component({\n tag: 'vertex-viewer-measurement-precise',\n styleUrl: 'viewer-measurement-precise.css',\n shadow: true,\n})\nexport class ViewerMeasurementPrecise {\n /**\n * The model that contains the entities and outcomes from performing precise\n * measurements.\n */\n @Prop()\n public measurementModel: MeasurementModel = new MeasurementModel();\n\n /**\n * The manager that is responsible for measurement overlays to present by this\n * component.\n */\n @Prop()\n public measurementOverlays: MeasurementOverlayManager =\n new MeasurementOverlayManager();\n\n /**\n * The controller that is responsible for performing measurements and updating\n * the model.\n */\n @Prop({ mutable: true })\n public measurementController?: MeasurementController;\n\n /**\n * @internal\n *\n * An internal property that can be used to opt-in to performing measurements\n * on other types of entities.\n */\n @Prop()\n public measurableEntityTypes: EntityType[] = [\n EntityType.PRECISE_SURFACE,\n EntityType.IMPRECISE_SURFACE,\n ];\n\n /**\n * The viewer that this component is bound to. This is automatically assigned\n * if added to the light-dom of a parent viewer element.\n */\n @Prop()\n public viewer?: HTMLVertexViewerElement;\n\n /**\n * The environment that will be used to request measurement results.\n */\n @Prop()\n public configEnv: Environment = 'platprod';\n\n /**\n * An optional configuration to setup network configuration of measurement\n * endpoints.\n */\n @Prop()\n public config?: PartialConfig | string;\n\n private registeredInteractionHandler?: Promise<Disposable>;\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.setupController();\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurableEntityTypes')\n protected handleMeasurableEntityTypesChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurementController')\n protected handleMeasurementControllerChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('measurementModel', { immediate: true })\n protected handleMeasurementModelChanged(): void {\n this.setupController();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(): void {\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n protected render(): JSX.Element {\n return (\n <Host>\n <vertex-viewer-measurement-overlays\n viewer={this.viewer}\n measurementOverlays={this.measurementOverlays}\n />\n </Host>\n );\n }\n\n private setupController(): void {\n const config = parseAndValidateConfig(this.configEnv, this.config);\n const client = new SceneViewAPIClient(config.network.sceneViewHost);\n this.measurementController = new MeasurementController(\n this.measurementModel,\n client,\n () => this.viewer?.token,\n this.viewer?.deviceId,\n );\n }\n\n private clearInteractionHandler(): void {\n this.registeredInteractionHandler?.then((handler) => handler.dispose());\n this.registeredInteractionHandler = undefined;\n }\n\n private setupInteractionHandler(): void {\n this.clearInteractionHandler();\n\n if (this.measurementController != null) {\n this.registeredInteractionHandler =\n this.viewer?.registerInteractionHandler(\n new MeasurementInteractionHandler(\n this.measurementController,\n this.measurableEntityTypes,\n ),\n );\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-group/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,UAAU,uBAAuB,CACrC,QAAqB,EACrB,cAA2B,EAC3B,UAAiC;IAEjC,MAAM,QAAQ,GAAG;QACf,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;QACpC,CAAC,EAAE,QAAQ,CAAC,CAAC;KACd,CAAC;IAEF,MAAM,WAAW,GAAG;QAClB,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;QACpC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM;KAClC,CAAC;IAEF,MAAM,UAAU,GAAG;QACjB,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK;QAChC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;KACtC,CAAC;IAEF,MAAM,SAAS,GAAG;QAChB,CAAC,EAAE,QAAQ,CAAC,CAAC;QACb,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;KACtC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAElE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAC7C,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAC1C,CAAC;IAEF,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IACjE,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import { Dimensions, Point } from '@vertexvis/geometry';\n\nexport function getClosestCenterToPoint(\n boxPoint: Point.Point,\n pointToMeasure: Point.Point,\n dimensions: Dimensions.Dimensions\n): Point.Point {\n const topPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y,\n };\n\n const bottomPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y + dimensions.height,\n };\n\n const rightPoint = {\n x: boxPoint.x + dimensions.width,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const leftPoint = {\n x: boxPoint.x,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const candidates = [topPoint, bottomPoint, leftPoint, rightPoint];\n\n const distances = candidates.map((candidate) =>\n Point.distance(candidate, pointToMeasure)\n );\n\n const candidateIndex = distances.indexOf(Math.min(...distances));\n return candidates[candidateIndex];\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-group/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,UAAU,uBAAuB,CACrC,QAAqB,EACrB,cAA2B,EAC3B,UAAiC;IAEjC,MAAM,QAAQ,GAAG;QACf,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;QACpC,CAAC,EAAE,QAAQ,CAAC,CAAC;KACd,CAAC;IAEF,MAAM,WAAW,GAAG;QAClB,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC;QACpC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM;KAClC,CAAC;IAEF,MAAM,UAAU,GAAG;QACjB,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK;QAChC,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;KACtC,CAAC;IAEF,MAAM,SAAS,GAAG;QAChB,CAAC,EAAE,QAAQ,CAAC,CAAC;QACb,CAAC,EAAE,QAAQ,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;KACtC,CAAC;IAEF,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAElE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAC7C,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC,CAC1C,CAAC;IAEF,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IACjE,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC","sourcesContent":["import { Dimensions, Point } from '@vertexvis/geometry';\n\nexport function getClosestCenterToPoint(\n boxPoint: Point.Point,\n pointToMeasure: Point.Point,\n dimensions: Dimensions.Dimensions,\n): Point.Point {\n const topPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y,\n };\n\n const bottomPoint = {\n x: boxPoint.x + dimensions.width / 2,\n y: boxPoint.y + dimensions.height,\n };\n\n const rightPoint = {\n x: boxPoint.x + dimensions.width,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const leftPoint = {\n x: boxPoint.x,\n y: boxPoint.y + dimensions.height / 2,\n };\n\n const candidates = [topPoint, bottomPoint, leftPoint, rightPoint];\n\n const distances = candidates.map((candidate) =>\n Point.distance(candidate, pointToMeasure),\n );\n\n const candidateIndex = distances.indexOf(Math.min(...distances));\n return candidates[candidateIndex];\n}\n"]}
@@ -80,12 +80,12 @@ export class ViewerPinGroup {
80
80
  throw new Error('Unable to draw pin');
81
81
  }
82
82
  const { pinPoint, labelPoint } = this.computePinPoints(this.pin);
83
- return (h(Fragment, { key: 'e3a02afe3d6a71677e15a9b4d31251970cb9a85e' }, h("vertex-viewer-dom-element", { key: '182ec8f3fb4440045d8d9afef16dcb182087e4dd', "data-testid": `drawn-pin-${this.pin.id}`, position: this.pin.worldPosition, onPointerDown: async () => {
83
+ return (h(Fragment, { key: '3275077c2f3febce611262f97ad52424381eeeaf' }, h("vertex-viewer-dom-element", { key: '95c6a4cadb1b0437b0a8c9d9e8a4c8b6612bad44', "data-testid": `drawn-pin-${this.pin.id}`, position: this.pin.worldPosition, onPointerDown: async () => {
84
84
  var _a;
85
85
  await ((_a = this.labelEl) === null || _a === void 0 ? void 0 : _a.submit());
86
86
  this.selectPin();
87
87
  this.handleAnchorPointerDown();
88
- }, detachedOff: false }, h(PinRenderer, { key: '53368cba2d76f71dbdb367760ede137d4b1c3a9e', pin: this.pin, selected: this.selected, occluded: this.occluded, detached: this.detached })), isTextPin(this.pin) && !this.occluded && !this.detached && (h(Fragment, { key: '5318ed3e3afb2680ec4c4b2050dfb34b663ebd08' }, h("vertex-viewer-pin-label-line", { key: 'a84145a009f83969b47deef61649d65dd594d1ce', id: `pin-label-line-${(_a = this.pin) === null || _a === void 0 ? void 0 : _a.id}`, pinPoint: pinPoint, pin: this.pin, labelPoint: labelPoint, onPointerDown: () => this.selectPin() }), h("vertex-viewer-pin-label", { key: 'efce5f94d0e1e7e3803b089a94f0e23671a0f6f4', pin: this.pin, ref: (el) => (this.labelEl = el), elementBounds: this.elementBounds, pinController: this.pinController, onPointerDown: () => this.selectPin() })))));
88
+ }, detachedOff: false }, h(PinRenderer, { key: 'cf3f679745095b62a6d8dacd705ee4f6093e3773', pin: this.pin, selected: this.selected, occluded: this.occluded, detached: this.detached })), isTextPin(this.pin) && !this.occluded && !this.detached && (h(Fragment, { key: 'b3f3318043cf62dc50021e5af93a333412ddffbb' }, h("vertex-viewer-pin-label-line", { key: 'ccb1e7184620f7d1d1a497066ea70c6e79ac6807', id: `pin-label-line-${(_a = this.pin) === null || _a === void 0 ? void 0 : _a.id}`, pinPoint: pinPoint, pin: this.pin, labelPoint: labelPoint, onPointerDown: () => this.selectPin() }), h("vertex-viewer-pin-label", { key: 'ad4d024b1b1b50aedd70cc35ad16abbca3aef827', pin: this.pin, ref: (el) => (this.labelEl = el), elementBounds: this.elementBounds, pinController: this.pinController, onPointerDown: () => this.selectPin() })))));
89
89
  }
90
90
  setLabelObserver() {
91
91
  if (this.labelEl != null) {
@@ -1 +1 @@
1
- {"version":3,"file":"viewer-pin-group.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-group/viewer-pin-group.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Fragment,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n JSX,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { Dimensions, Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Viewport } from '../..';\nimport { PinController } from '../../lib/pins/controller';\nimport { isTextPin, Pin, TextPin } from '../../lib/pins/model';\nimport { PinModel } from '../../lib/pins/model';\nimport { translatePointToScreen } from '../viewer-pin-tool/utils';\nimport { PinRenderer } from './pin-renderer';\nimport { getClosestCenterToPoint } from './utils';\n\ninterface ComputedPoints {\n pinPoint: Point.Point;\n labelPoint?: Point.Point;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-group',\n styleUrl: 'viewer-pin-group.css',\n shadow: false,\n})\nexport class ViewerPinGroup {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: Pin;\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Projection view matrix used for computing the position of the pin line\n */\n @Prop()\n public projectionViewMatrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop({ mutable: true })\n public elementBounds?: DOMRect;\n\n /**\n * The model that contains the entities and outcomes from performing pin operations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * Whether the pin is \"selected\"\n */\n @Prop()\n public selected = false;\n\n /**\n * @internal\n * Whether the pin is occluded\n */\n @Prop({ mutable: true, reflect: true })\n public occluded = false;\n\n /**\n * @internal\n * Whether the pin is detached\n */\n @Prop({ mutable: true, reflect: true })\n public detached = false;\n\n @State()\n private invalidateStateCounter = 0;\n\n private labelEl: HTMLVertexViewerPinLabelElement | undefined;\n\n private resizeObserver?: ResizeObserver;\n\n protected componentWillLoad(): void {\n if (this.pinController == null) {\n this.pinController = new PinController(this.pinModel);\n }\n }\n\n protected componentDidLoad(): void {\n this.setLabelObserver();\n\n if (this.selected) {\n this.labelEl?.setFocus();\n }\n }\n\n /**\n * @ignore\n */\n @Listen('occlusionStateChanged')\n protected async handleOcclusionStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.occluded = event.detail;\n }\n\n /**\n * @ignore\n */\n @Listen('detachedStateChanged')\n protected async handleDetachedStateChanged(\n event: CustomEvent<boolean>\n ): Promise<void> {\n this.detached = event.detail;\n }\n\n protected disconnectedCallback(): void {\n this.labelEl?.removeEventListener('labelChanged', this.invalidateState);\n this.resizeObserver?.disconnect();\n }\n\n protected render(): JSX.Element {\n if (this.pin == null) {\n throw new Error('Unable to draw pin');\n }\n\n const { pinPoint, labelPoint } = this.computePinPoints(this.pin);\n\n return (\n <Fragment>\n <vertex-viewer-dom-element\n data-testid={`drawn-pin-${this.pin.id}`}\n position={this.pin.worldPosition}\n onPointerDown={async () => {\n await this.labelEl?.submit();\n this.selectPin();\n this.handleAnchorPointerDown();\n }}\n detachedOff={false}\n >\n <PinRenderer\n pin={this.pin}\n selected={this.selected}\n occluded={this.occluded}\n detached={this.detached}\n />\n </vertex-viewer-dom-element>\n\n {isTextPin(this.pin) && !this.occluded && !this.detached && (\n <Fragment>\n <vertex-viewer-pin-label-line\n id={`pin-label-line-${this.pin?.id}`}\n pinPoint={pinPoint}\n pin={this.pin}\n labelPoint={labelPoint}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label-line>\n\n <vertex-viewer-pin-label\n pin={this.pin}\n ref={(el) => (this.labelEl = el)}\n elementBounds={this.elementBounds}\n pinController={this.pinController}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private invalidateState = (): void => {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n };\n\n private setLabelObserver(): void {\n if (this.labelEl != null) {\n this.labelEl.addEventListener('labelChanged', this.invalidateState);\n\n this.resizeObserver = new ResizeObserver(() => this.invalidateState());\n this.resizeObserver.observe(this.labelEl);\n }\n }\n\n private computePinPoints(pin: Pin): ComputedPoints {\n if (this.elementBounds != null && this.pin != null) {\n return isTextPin(this.pin) && this.pin.label.point != null\n ? this.computeTextPinPoints(this.pin, this.elementBounds)\n : this.computeDefaultPinPoints(this.pin, this.elementBounds);\n }\n\n return { pinPoint: pin.worldPosition };\n }\n\n private computeDefaultPinPoints(\n pin: Pin,\n elementBounds: DOMRect\n ): ComputedPoints {\n return {\n pinPoint: this.getFromWorldPosition(\n pin.worldPosition,\n this.projectionViewMatrix,\n elementBounds\n ),\n };\n }\n\n private computeTextPinPoints(\n pin: TextPin,\n elementBounds: DOMRect\n ): ComputedPoints {\n const { pinPoint } = this.computeDefaultPinPoints(pin, elementBounds);\n\n const screenPosition = translatePointToScreen(\n pin.label.point,\n elementBounds\n );\n\n const labelWidth = this.labelEl?.firstElementChild?.clientWidth || 0;\n const labelHeight = this.labelEl?.firstElementChild?.clientHeight || 0;\n\n return {\n pinPoint,\n labelPoint: getClosestCenterToPoint(screenPosition, pinPoint, {\n width: labelWidth,\n height: labelHeight,\n }),\n };\n }\n\n private handleAnchorPointerDown(): void {\n if (\n this.elementBounds != null &&\n this.pinController?.getToolMode() === 'edit' &&\n this.pin != null\n ) {\n this.pinController?.setDraggable({ id: this.pin.id });\n }\n }\n\n private selectPin(): void {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n\n private getFromWorldPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n dimensions: Dimensions.Dimensions\n ): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return Viewport.fromDimensions(dimensions).transformVectorToViewport(ndcPt);\n }\n}\n"]}
1
+ {"version":3,"file":"viewer-pin-group.js","sourceRoot":"","sources":["../../../../../src/components/viewer-pin-group/viewer-pin-group.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Fragment,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n JSX,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { Dimensions, Matrix4, Point, Vector3 } from '@vertexvis/geometry';\n\nimport { Viewport } from '../..';\nimport { PinController } from '../../lib/pins/controller';\nimport { isTextPin, Pin, TextPin } from '../../lib/pins/model';\nimport { PinModel } from '../../lib/pins/model';\nimport { translatePointToScreen } from '../viewer-pin-tool/utils';\nimport { PinRenderer } from './pin-renderer';\nimport { getClosestCenterToPoint } from './utils';\n\ninterface ComputedPoints {\n pinPoint: Point.Point;\n labelPoint?: Point.Point;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-group',\n styleUrl: 'viewer-pin-group.css',\n shadow: false,\n})\nexport class ViewerPinGroup {\n /**\n * The pin to draw for the group\n */\n @Prop()\n public pin?: Pin;\n\n /**\n * The local matrix of this element.\n */\n @Prop({ mutable: true, attribute: null })\n public matrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * Projection view matrix used for computing the position of the pin line\n */\n @Prop()\n public projectionViewMatrix: Matrix4.Matrix4 = Matrix4.makeIdentity();\n\n /**\n * The dimensions of the canvas for the pins\n */\n @Prop({ mutable: true })\n public elementBounds?: DOMRect;\n\n /**\n * The model that contains the entities and outcomes from performing pin operations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\n\n /**\n * The controller that drives behavior for pin operations\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * Whether the pin is \"selected\"\n */\n @Prop()\n public selected = false;\n\n /**\n * @internal\n * Whether the pin is occluded\n */\n @Prop({ mutable: true, reflect: true })\n public occluded = false;\n\n /**\n * @internal\n * Whether the pin is detached\n */\n @Prop({ mutable: true, reflect: true })\n public detached = false;\n\n @State()\n private invalidateStateCounter = 0;\n\n private labelEl: HTMLVertexViewerPinLabelElement | undefined;\n\n private resizeObserver?: ResizeObserver;\n\n protected componentWillLoad(): void {\n if (this.pinController == null) {\n this.pinController = new PinController(this.pinModel);\n }\n }\n\n protected componentDidLoad(): void {\n this.setLabelObserver();\n\n if (this.selected) {\n this.labelEl?.setFocus();\n }\n }\n\n /**\n * @ignore\n */\n @Listen('occlusionStateChanged')\n protected async handleOcclusionStateChanged(\n event: CustomEvent<boolean>,\n ): Promise<void> {\n this.occluded = event.detail;\n }\n\n /**\n * @ignore\n */\n @Listen('detachedStateChanged')\n protected async handleDetachedStateChanged(\n event: CustomEvent<boolean>,\n ): Promise<void> {\n this.detached = event.detail;\n }\n\n protected disconnectedCallback(): void {\n this.labelEl?.removeEventListener('labelChanged', this.invalidateState);\n this.resizeObserver?.disconnect();\n }\n\n protected render(): JSX.Element {\n if (this.pin == null) {\n throw new Error('Unable to draw pin');\n }\n\n const { pinPoint, labelPoint } = this.computePinPoints(this.pin);\n\n return (\n <Fragment>\n <vertex-viewer-dom-element\n data-testid={`drawn-pin-${this.pin.id}`}\n position={this.pin.worldPosition}\n onPointerDown={async () => {\n await this.labelEl?.submit();\n this.selectPin();\n this.handleAnchorPointerDown();\n }}\n detachedOff={false}\n >\n <PinRenderer\n pin={this.pin}\n selected={this.selected}\n occluded={this.occluded}\n detached={this.detached}\n />\n </vertex-viewer-dom-element>\n\n {isTextPin(this.pin) && !this.occluded && !this.detached && (\n <Fragment>\n <vertex-viewer-pin-label-line\n id={`pin-label-line-${this.pin?.id}`}\n pinPoint={pinPoint}\n pin={this.pin}\n labelPoint={labelPoint}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label-line>\n\n <vertex-viewer-pin-label\n pin={this.pin}\n ref={(el) => (this.labelEl = el)}\n elementBounds={this.elementBounds}\n pinController={this.pinController}\n onPointerDown={() => this.selectPin()}\n ></vertex-viewer-pin-label>\n </Fragment>\n )}\n </Fragment>\n );\n }\n\n private invalidateState = (): void => {\n this.invalidateStateCounter = this.invalidateStateCounter + 1;\n };\n\n private setLabelObserver(): void {\n if (this.labelEl != null) {\n this.labelEl.addEventListener('labelChanged', this.invalidateState);\n\n this.resizeObserver = new ResizeObserver(() => this.invalidateState());\n this.resizeObserver.observe(this.labelEl);\n }\n }\n\n private computePinPoints(pin: Pin): ComputedPoints {\n if (this.elementBounds != null && this.pin != null) {\n return isTextPin(this.pin) && this.pin.label.point != null\n ? this.computeTextPinPoints(this.pin, this.elementBounds)\n : this.computeDefaultPinPoints(this.pin, this.elementBounds);\n }\n\n return { pinPoint: pin.worldPosition };\n }\n\n private computeDefaultPinPoints(\n pin: Pin,\n elementBounds: DOMRect,\n ): ComputedPoints {\n return {\n pinPoint: this.getFromWorldPosition(\n pin.worldPosition,\n this.projectionViewMatrix,\n elementBounds,\n ),\n };\n }\n\n private computeTextPinPoints(\n pin: TextPin,\n elementBounds: DOMRect,\n ): ComputedPoints {\n const { pinPoint } = this.computeDefaultPinPoints(pin, elementBounds);\n\n const screenPosition = translatePointToScreen(\n pin.label.point,\n elementBounds,\n );\n\n const labelWidth = this.labelEl?.firstElementChild?.clientWidth || 0;\n const labelHeight = this.labelEl?.firstElementChild?.clientHeight || 0;\n\n return {\n pinPoint,\n labelPoint: getClosestCenterToPoint(screenPosition, pinPoint, {\n width: labelWidth,\n height: labelHeight,\n }),\n };\n }\n\n private handleAnchorPointerDown(): void {\n if (\n this.elementBounds != null &&\n this.pinController?.getToolMode() === 'edit' &&\n this.pin != null\n ) {\n this.pinController?.setDraggable({ id: this.pin.id });\n }\n }\n\n private selectPin(): void {\n this.pinController?.setSelectedPinId(this.pin?.id);\n }\n\n private getFromWorldPosition(\n pt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n dimensions: Dimensions.Dimensions,\n ): Point.Point {\n const ndcPt = Vector3.transformMatrix(pt, projectionViewMatrix);\n return Viewport.fromDimensions(dimensions).transformVectorToViewport(ndcPt);\n }\n}\n"]}