@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.
- package/dist/cjs/config-20ozv4y8.js.map +1 -1
- package/dist/cjs/controller-BhcNbaX_.js.map +1 -1
- package/dist/cjs/controller-CSwG6gbQ.js.map +1 -1
- package/dist/cjs/cursors-BZmDRtaZ.js.map +1 -1
- package/dist/cjs/dom-BBil4aN3.js.map +1 -1
- package/dist/cjs/dom-CvGkFQon.js.map +1 -1
- package/dist/cjs/entities-D6kgGria.js.map +1 -1
- package/dist/cjs/geometry_pb-BTko2Wi0.js.map +1 -1
- package/dist/cjs/grpc-BsWFEUrc.js.map +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/model-C9WvOKYT.js.map +1 -1
- package/dist/cjs/model-D17EQTIh.js.map +1 -1
- package/dist/cjs/model-DAB4oD5n.js.map +1 -1
- package/dist/cjs/model-DkXCzhs_.js.map +1 -1
- package/dist/cjs/multiElementInteractionHandler-BHvRKVIp.js.map +1 -1
- package/dist/cjs/overlays-B-06bUbI.js.map +1 -1
- package/dist/cjs/queries-Da9I-xMf.js.map +1 -1
- package/dist/cjs/regl-component-HhKCyGQ3.js.map +1 -1
- package/dist/cjs/representation_pb-CrCGjlyP.js.map +1 -1
- package/dist/cjs/results-1wRRZiYG.js.map +1 -1
- package/dist/cjs/row-Cet6xXup.js.map +1 -1
- package/dist/cjs/stencil-Hsr_8Chs.js.map +1 -1
- package/dist/cjs/streamAttributes-D_J-W8-2.js.map +1 -1
- package/dist/cjs/templates-DvjgjnlO.js.map +1 -1
- package/dist/cjs/util-DIJSIQXH.js.map +1 -1
- package/dist/cjs/utils-CibrnHQ4.js.map +1 -1
- package/dist/cjs/utils-D8MbXbwO.js.map +1 -1
- package/dist/cjs/utils-qErVs2Vt.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js +6 -8
- package/dist/cjs/vertex-scene-tree-notification-banner_4.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -2
- package/dist/cjs/vertex-scene-tree.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-box-query-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-dom-element_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-dom-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-hit-result-indicator.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-icon.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-pin-group.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-label_2.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-pin-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-teleport-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js +4 -5
- package/dist/cjs/vertex-viewer-transform-widget.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer-walk-mode-tool.cjs.entry.js.map +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +9 -5
- package/dist/cjs/vertex-viewer.cjs.entry.js.map +1 -1
- package/dist/cjs/viewport-CG1VYkIU.js.map +1 -1
- package/dist/collection/components/scene-tree/errors.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/controller.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/dom.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/errors.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/grpc.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/handlers.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/row.js.map +1 -1
- package/dist/collection/components/scene-tree/lib/viewer-ops.js.map +1 -1
- package/dist/collection/components/scene-tree/scene-tree.js +2 -2
- package/dist/collection/components/scene-tree/scene-tree.js.map +1 -1
- package/dist/collection/components/scene-tree-search/scene-tree-search.js.map +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +1 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js.map +1 -1
- package/dist/collection/components/scene-tree-table-cell/utils.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/lib/dom.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/lib/window.js.map +1 -1
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js +5 -5
- package/dist/collection/components/scene-tree-table-layout/scene-tree-table-layout.js.map +1 -1
- package/dist/collection/components/viewer/utils.js.map +1 -1
- package/dist/collection/components/viewer/viewer.js +9 -5
- package/dist/collection/components/viewer/viewer.js.map +1 -1
- package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js +2 -2
- package/dist/collection/components/viewer-box-query-tool/viewer-box-query-tool.js.map +1 -1
- package/dist/collection/components/viewer-dom-element/utils.js.map +1 -1
- package/dist/collection/components/viewer-dom-element/viewer-dom-element.js +1 -1
- package/dist/collection/components/viewer-dom-element/viewer-dom-element.js.map +1 -1
- package/dist/collection/components/viewer-dom-group/utils.js.map +1 -1
- package/dist/collection/components/viewer-dom-group/viewer-dom-group.js +1 -1
- package/dist/collection/components/viewer-dom-group/viewer-dom-group.js.map +1 -1
- package/dist/collection/components/viewer-dom-renderer/renderer2d.js.map +1 -1
- package/dist/collection/components/viewer-dom-renderer/renderer3d.js.map +1 -1
- package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/dom.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/indicator.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/plane.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/lib/point.js.map +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js +1 -1
- package/dist/collection/components/viewer-hit-result-indicator/viewer-hit-result-indicator.js.map +1 -1
- package/dist/collection/components/viewer-icon/viewer-icon.js.map +1 -1
- package/dist/collection/components/viewer-markup/markup-utils.js.map +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup-components.js.map +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup.js +1 -1
- package/dist/collection/components/viewer-markup/viewer-markup.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/interactions.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow-components.js.map +1 -1
- package/dist/collection/components/viewer-markup-arrow/viewer-markup-arrow.js.map +1 -1
- package/dist/collection/components/viewer-markup-circle/interactions.js.map +1 -1
- package/dist/collection/components/viewer-markup-circle/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-circle/viewer-markup-circle.js.map +1 -1
- package/dist/collection/components/viewer-markup-freeform/interactions.js.map +1 -1
- package/dist/collection/components/viewer-markup-freeform/utils.js.map +1 -1
- package/dist/collection/components/viewer-markup-freeform/viewer-markup-freeform.js.map +1 -1
- package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.js.map +1 -1
- package/dist/collection/components/viewer-measurement-details/viewer-measurement-details.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/hitTest.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/interactions.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/utils.js.map +1 -1
- package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js.map +1 -1
- package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js +1 -1
- package/dist/collection/components/viewer-measurement-line/viewer-measurement-line.js.map +1 -1
- package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +1 -1
- package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js.map +1 -1
- package/dist/collection/components/viewer-measurement-precise/viewer-measurement-precise.js.map +1 -1
- package/dist/collection/components/viewer-pin-group/utils.js.map +1 -1
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.js +2 -2
- package/dist/collection/components/viewer-pin-group/viewer-pin-group.js.map +1 -1
- package/dist/collection/components/viewer-pin-label/viewer-pin-label.js.map +1 -1
- package/dist/collection/components/viewer-pin-tool/utils.js.map +1 -1
- package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js +1 -1
- package/dist/collection/components/viewer-pin-tool/viewer-pin-tool.js.map +1 -1
- package/dist/collection/components/viewer-teleport-tool/viewer-teleport-tool.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/util.js +1 -2
- package/dist/collection/components/viewer-transform-widget/util.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget-components.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js +3 -3
- package/dist/collection/components/viewer-transform-widget/viewer-transform-widget.js.map +1 -1
- package/dist/collection/components/viewer-transform-widget/widget.js.map +1 -1
- package/dist/collection/components/viewer-view-cube/viewer-view-cube.js +1 -1
- package/dist/collection/components/viewer-view-cube/viewer-view-cube.js.map +1 -1
- package/dist/collection/components/viewer-walk-mode-tool/viewer-walk-mode-tool.js.map +1 -1
- package/dist/collection/lib/annotations/controller.js.map +1 -1
- package/dist/collection/lib/canvases/controller.js.map +1 -1
- package/dist/collection/lib/canvases/mapper.js.map +1 -1
- package/dist/collection/lib/config.js.map +1 -1
- package/dist/collection/lib/cursors.js.map +1 -1
- package/dist/collection/lib/dom.js.map +1 -1
- package/dist/collection/lib/grpc.js.map +1 -1
- package/dist/collection/lib/interactions/baseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/flyToPartKeyInteraction.js.map +1 -1
- package/dist/collection/lib/interactions/flyToPositionKeyInteraction.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApi.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApiOrthographic.js.map +1 -1
- package/dist/collection/lib/interactions/interactionApiPerspective.js.map +1 -1
- package/dist/collection/lib/interactions/mouseInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/mouseInteractions.js.map +1 -1
- package/dist/collection/lib/interactions/multiElementInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/multiPointerInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/multiTouchInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/pointerInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/tapInteractionHandler.js.map +1 -1
- package/dist/collection/lib/interactions/touchInteractionHandler.js.map +1 -1
- package/dist/collection/lib/keyBinding.js.map +1 -1
- package/dist/collection/lib/mappers/annotation.js.map +1 -1
- package/dist/collection/lib/mappers/camera.js.map +1 -1
- package/dist/collection/lib/mappers/color.js.map +1 -1
- package/dist/collection/lib/mappers/colorMaterial.js.map +1 -1
- package/dist/collection/lib/mappers/corePb.js.map +1 -1
- package/dist/collection/lib/mappers/corePbJs.js.map +1 -1
- package/dist/collection/lib/mappers/frameStreaming.js.map +1 -1
- package/dist/collection/lib/mappers/geometry.js.map +1 -1
- package/dist/collection/lib/mappers/material.js.map +1 -1
- package/dist/collection/lib/mappers/pagination.js.map +1 -1
- package/dist/collection/lib/mappers/scalar.js.map +1 -1
- package/dist/collection/lib/mappers/streamAttributes.js.map +1 -1
- package/dist/collection/lib/markup/interactions.js.map +1 -1
- package/dist/collection/lib/measurement/controller.js.map +1 -1
- package/dist/collection/lib/measurement/entities.js.map +1 -1
- package/dist/collection/lib/measurement/interactions.js.map +1 -1
- package/dist/collection/lib/measurement/mapper.js.map +1 -1
- package/dist/collection/lib/measurement/model.js.map +1 -1
- package/dist/collection/lib/measurement/overlays.js.map +1 -1
- package/dist/collection/lib/measurement/results.js.map +1 -1
- package/dist/collection/lib/meters.js.map +1 -1
- package/dist/collection/lib/model-views/controller.js.map +1 -1
- package/dist/collection/lib/model-views/mapper.js.map +1 -1
- package/dist/collection/lib/pins/controller.js.map +1 -1
- package/dist/collection/lib/pins/interactions.js.map +1 -1
- package/dist/collection/lib/pmi/controller.js.map +1 -1
- package/dist/collection/lib/pmi/mapper.js.map +1 -1
- package/dist/collection/lib/rendering/canvas.js.map +1 -1
- package/dist/collection/lib/rendering/imageLoaders.js.map +1 -1
- package/dist/collection/lib/rendering/matrices.js.map +1 -1
- package/dist/collection/lib/rendering/timing.js.map +1 -1
- package/dist/collection/lib/rendering/utils.js.map +1 -1
- package/dist/collection/lib/rendering/vectors.js.map +1 -1
- package/dist/collection/lib/scene-items/controller.js.map +1 -1
- package/dist/collection/lib/scene-items/mapper.js.map +1 -1
- package/dist/collection/lib/scenes/camera.js.map +1 -1
- package/dist/collection/lib/scenes/cameraRenderResult.js.map +1 -1
- package/dist/collection/lib/scenes/colorMaterial.js.map +1 -1
- package/dist/collection/lib/scenes/crossSectioner.js.map +1 -1
- package/dist/collection/lib/scenes/mapper.js.map +1 -1
- package/dist/collection/lib/scenes/operations.js.map +1 -1
- package/dist/collection/lib/scenes/queries.js.map +1 -1
- package/dist/collection/lib/scenes/raycaster.js.map +1 -1
- package/dist/collection/lib/scenes/scene.js.map +1 -1
- package/dist/collection/lib/scenes/sceneOperationExecuteResult.js.map +1 -1
- package/dist/collection/lib/scenes/sceneViewStateLoader.js.map +1 -1
- package/dist/collection/lib/stencil.js.map +1 -1
- package/dist/collection/lib/storage.js.map +1 -1
- package/dist/collection/lib/stream/dispatcher.js.map +1 -1
- package/dist/collection/lib/stream/stream.js.map +1 -1
- package/dist/collection/lib/stream/utils.js.map +1 -1
- package/dist/collection/lib/teleportation/interactions.js.map +1 -1
- package/dist/collection/lib/templates.js.map +1 -1
- package/dist/collection/lib/token.js.map +1 -1
- package/dist/collection/lib/transforms/axis-lines.js.map +1 -1
- package/dist/collection/lib/transforms/axis-rotation.js.map +1 -1
- package/dist/collection/lib/transforms/axis-translation.js.map +1 -1
- package/dist/collection/lib/transforms/controller.js.map +1 -1
- package/dist/collection/lib/transforms/drawable.js.map +1 -1
- package/dist/collection/lib/transforms/hits.js.map +1 -1
- package/dist/collection/lib/transforms/line.js.map +1 -1
- package/dist/collection/lib/transforms/mesh.js.map +1 -1
- package/dist/collection/lib/transforms/shape.js.map +1 -1
- package/dist/collection/lib/transforms/transformation-delta.js.map +1 -1
- package/dist/collection/lib/transforms/util.js.map +1 -1
- package/dist/collection/lib/types/clippingPlanes.js.map +1 -1
- package/dist/collection/lib/types/depthBuffer.js.map +1 -1
- package/dist/collection/lib/types/featureMap.js.map +1 -1
- package/dist/collection/lib/types/flags.js.map +1 -1
- package/dist/collection/lib/types/frame.js.map +1 -1
- package/dist/collection/lib/types/frameCamera.js.map +1 -1
- package/dist/collection/lib/types/loadableResource.js.map +1 -1
- package/dist/collection/lib/types/orientation.js.map +1 -1
- package/dist/collection/lib/types/sceneViewStateIdentifier.js.map +1 -1
- package/dist/collection/lib/types/standardView.js.map +1 -1
- package/dist/collection/lib/types/stencilBuffer.js.map +1 -1
- package/dist/collection/lib/types/synchronizedClock.js.map +1 -1
- package/dist/collection/lib/types/viewport.js.map +1 -1
- package/dist/collection/lib/visibilityObserver.js.map +1 -1
- package/dist/collection/lib/volume-intersection/controller.js.map +1 -1
- package/dist/collection/lib/volume-intersection/interactions.js.map +1 -1
- package/dist/collection/lib/volume-intersection/model.js.map +1 -1
- package/dist/collection/lib/walk-mode/controller.js.map +1 -1
- package/dist/collection/lib/walk-mode/interactions.js.map +1 -1
- package/dist/collection/lib/walk-mode/model.js.map +1 -1
- package/dist/collection/lib/webgl/regl-component.js.map +1 -1
- package/dist/collection/testing/annotations.js.map +1 -1
- package/dist/collection/testing/canvases.js.map +1 -1
- package/dist/collection/testing/colors.js.map +1 -1
- package/dist/collection/testing/eventually.js.map +1 -1
- package/dist/collection/testing/fixtures.js.map +1 -1
- package/dist/collection/testing/grpc.js +3 -9
- package/dist/collection/testing/grpc.js.map +1 -1
- package/dist/collection/testing/modelViews.js.map +1 -1
- package/dist/collection/testing/pmi.js.map +1 -1
- package/dist/collection/testing/random.js.map +1 -1
- package/dist/collection/testing/resizeObserver.js.map +1 -1
- package/dist/collection/testing/scene-items-helper.js.map +1 -1
- package/dist/collection/testing/sceneTree.js.map +1 -1
- package/dist/collection/testing/viewer.js.map +1 -1
- package/dist/collection/testing/webgl.js.map +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/{p-St4ctu2K.js → p-3-bKfpqr.js} +2 -2
- package/dist/components/{p-St4ctu2K.js.map → p-3-bKfpqr.js.map} +1 -1
- package/dist/components/p-3DqRAYgO.js.map +1 -1
- package/dist/components/p-B-ToCp8-.js.map +1 -1
- package/dist/components/p-B156bTbY.js +5 -0
- package/dist/components/p-B156bTbY.js.map +1 -0
- package/dist/components/p-B9R0QWr4.js.map +1 -1
- package/dist/components/p-BCOD9yfw.js.map +1 -1
- package/dist/components/p-BHAaIoH5.js.map +1 -1
- package/dist/components/{p-Doltf1wO.js → p-BOJJZ1cN.js} +2 -2
- package/dist/components/p-BOJJZ1cN.js.map +1 -0
- package/dist/components/p-BkHp-aAR.js.map +1 -1
- package/dist/components/p-Bkm6H5uq.js.map +1 -1
- package/dist/components/p-C-VWDW9n.js.map +1 -1
- package/dist/components/p-C79PxobX.js.map +1 -1
- package/dist/components/p-CAugdB_8.js.map +1 -1
- package/dist/components/p-CEzVEgdQ.js.map +1 -1
- package/dist/components/p-CGCJ5hbJ.js.map +1 -1
- package/dist/components/p-COlcifvm.js.map +1 -1
- package/dist/components/p-CXTH3zrN.js.map +1 -1
- package/dist/components/p-CZCXdo3t.js.map +1 -1
- package/dist/components/p-Cd7kap5W.js.map +1 -1
- package/dist/components/p-CiSHWNC4.js.map +1 -1
- package/dist/components/p-CjG1fMh1.js.map +1 -1
- package/dist/components/p-CkjXRDNL.js.map +1 -1
- package/dist/components/p-D0KZu516.js.map +1 -1
- package/dist/components/p-D12q-fpW.js.map +1 -1
- package/dist/components/p-D33gVA2W.js.map +1 -1
- package/dist/components/p-DC86ZXai.js.map +1 -1
- package/dist/components/{p-B80hfIq6.js → p-DF4kEsJU.js} +2 -2
- package/dist/components/p-DF4kEsJU.js.map +1 -0
- package/dist/components/p-DRh4_Z-g.js.map +1 -1
- package/dist/components/p-DRnMrHWY.js.map +1 -1
- package/dist/components/{p-b0ZzPHz8.js → p-DUC59SSO.js} +2 -2
- package/dist/components/p-DUC59SSO.js.map +1 -0
- package/dist/components/p-DVW2WZTq.js.map +1 -1
- package/dist/components/p-DZI8pnGz.js.map +1 -1
- package/dist/components/p-Dbz9yUqC.js.map +1 -1
- package/dist/components/p-Yfi0i5Kj.js.map +1 -1
- package/dist/components/p-abSJ29r7.js.map +1 -1
- package/dist/components/p-ahjMltGJ.js.map +1 -1
- package/dist/components/p-bal2RLiw.js.map +1 -1
- package/dist/components/{p-BopQW1sA.js → p-oK38ynrd.js} +2 -2
- package/dist/components/p-oK38ynrd.js.map +1 -0
- package/dist/components/vertex-scene-tree-table-cell.js +1 -1
- package/dist/components/vertex-scene-tree-table-cell.js.map +1 -1
- package/dist/components/vertex-scene-tree-table-layout.js +1 -1
- package/dist/components/vertex-scene-tree.js +1 -1
- package/dist/components/vertex-scene-tree.js.map +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js +1 -1
- package/dist/components/vertex-viewer-box-query-tool.js.map +1 -1
- package/dist/components/vertex-viewer-dom-element.js +1 -1
- package/dist/components/vertex-viewer-dom-group.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js +1 -1
- package/dist/components/vertex-viewer-hit-result-indicator.js.map +1 -1
- package/dist/components/vertex-viewer-markup-tool.js.map +1 -1
- package/dist/components/vertex-viewer-markup.js +1 -1
- package/dist/components/vertex-viewer-markup.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-details.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js +1 -1
- package/dist/components/vertex-viewer-measurement-distance.js.map +1 -1
- package/dist/components/vertex-viewer-measurement-line.js +1 -1
- package/dist/components/vertex-viewer-measurement-overlays.js +1 -1
- package/dist/components/vertex-viewer-measurement-precise.js +1 -1
- package/dist/components/vertex-viewer-measurement-precise.js.map +1 -1
- package/dist/components/vertex-viewer-pin-group.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js +1 -1
- package/dist/components/vertex-viewer-pin-tool.js.map +1 -1
- package/dist/components/vertex-viewer-transform-widget.js +1 -1
- package/dist/components/vertex-viewer-transform-widget.js.map +1 -1
- package/dist/components/vertex-viewer-view-cube.js +1 -1
- package/dist/components/vertex-viewer-view-cube.js.map +1 -1
- package/dist/components/vertex-viewer-walk-mode-tool.js.map +1 -1
- package/dist/components/vertex-viewer.js +1 -1
- package/dist/components/vertex-viewer.js.map +1 -1
- package/dist/esm/config-lglER3mU.js.map +1 -1
- package/dist/esm/controller-BMWGs-I6.js.map +1 -1
- package/dist/esm/controller-Iymb_J2R.js.map +1 -1
- package/dist/esm/cursors-BbBDEutb.js.map +1 -1
- package/dist/esm/dom-B3m2VjbN.js.map +1 -1
- package/dist/esm/dom-DX6pEG54.js.map +1 -1
- package/dist/esm/entities-zRken6VS.js.map +1 -1
- package/dist/esm/geometry_pb-BiZRfctN.js.map +1 -1
- package/dist/esm/grpc-CZAYqbTu.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/model-BYW5YIye.js.map +1 -1
- package/dist/esm/model-CLtwOS0o.js.map +1 -1
- package/dist/esm/model-D0EJdHmW.js.map +1 -1
- package/dist/esm/model-DHJ5aE4y.js.map +1 -1
- package/dist/esm/multiElementInteractionHandler-DwjL-r55.js.map +1 -1
- package/dist/esm/overlays-BE1oqniA.js.map +1 -1
- package/dist/esm/queries-DEzCmbTD.js.map +1 -1
- package/dist/esm/regl-component-DmkowWhg.js.map +1 -1
- package/dist/esm/representation_pb-g4f0WC4k.js.map +1 -1
- package/dist/esm/results-CFB6nKu8.js.map +1 -1
- package/dist/esm/row-CiSHWNC4.js.map +1 -1
- package/dist/esm/stencil-BV-7pO4q.js.map +1 -1
- package/dist/esm/streamAttributes-Cp8PEH9A.js.map +1 -1
- package/dist/esm/templates-DRh4_Z-g.js.map +1 -1
- package/dist/esm/util-BCZZYmp4.js.map +1 -1
- package/dist/esm/utils-BvZ9-fs0.js.map +1 -1
- package/dist/esm/utils-DC86ZXai.js.map +1 -1
- package/dist/esm/utils-D_pIldrS.js.map +1 -1
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js +6 -8
- package/dist/esm/vertex-scene-tree-notification-banner_4.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js.map +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +2 -2
- package/dist/esm/vertex-scene-tree.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-box-query-tool.entry.js +2 -2
- package/dist/esm/vertex-viewer-box-query-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js +1 -1
- package/dist/esm/vertex-viewer-dom-element_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-dom-group.entry.js +1 -1
- package/dist/esm/vertex-viewer-dom-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js +1 -1
- package/dist/esm/vertex-viewer-hit-result-indicator.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-icon.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup-arrow_3.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js +1 -1
- package/dist/esm/vertex-viewer-markup.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-details.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-distance.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-measurement-precise.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-group.entry.js +2 -2
- package/dist/esm/vertex-viewer-pin-group.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-label_2.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer-pin-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-teleport-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-transform-widget.entry.js +4 -5
- package/dist/esm/vertex-viewer-transform-widget.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
- package/dist/esm/vertex-viewer-view-cube.entry.js.map +1 -1
- package/dist/esm/vertex-viewer-walk-mode-tool.entry.js.map +1 -1
- package/dist/esm/vertex-viewer.entry.js +9 -5
- package/dist/esm/vertex-viewer.entry.js.map +1 -1
- package/dist/esm/viewport-C8WQZxvx.js.map +1 -1
- package/dist/types/regl-shape.d.ts +1 -1
- package/dist/viewer/index.esm.js.map +1 -1
- package/dist/viewer/{p-eac63070.entry.js → p-051b5154.entry.js} +2 -2
- package/dist/viewer/p-051b5154.entry.js.map +1 -0
- package/dist/viewer/{p-3d3a7eeb.entry.js → p-0984c51f.entry.js} +2 -2
- package/dist/viewer/{p-3d3a7eeb.entry.js.map → p-0984c51f.entry.js.map} +1 -1
- package/dist/viewer/{p-864f40c7.entry.js → p-11cf755a.entry.js} +2 -2
- package/dist/viewer/p-11cf755a.entry.js.map +1 -0
- package/dist/viewer/{p-29d14611.entry.js → p-16775f7d.entry.js} +2 -2
- package/dist/viewer/p-16775f7d.entry.js.map +1 -0
- package/dist/viewer/{p-5a85cae5.entry.js → p-1eb636f8.entry.js} +2 -2
- package/dist/viewer/p-1eb636f8.entry.js.map +1 -0
- package/dist/viewer/{p-e993f300.entry.js → p-228d1d43.entry.js} +2 -2
- package/dist/viewer/p-228d1d43.entry.js.map +1 -0
- package/dist/viewer/p-33f44cc1.entry.js.map +1 -1
- package/dist/viewer/{p-3300d3dc.entry.js → p-35601c85.entry.js} +2 -2
- package/dist/viewer/p-35601c85.entry.js.map +1 -0
- package/dist/viewer/p-47766566.entry.js.map +1 -1
- package/dist/viewer/p-6e3a6bbd.entry.js.map +1 -1
- package/dist/viewer/p-7f388b45.entry.js.map +1 -1
- package/dist/viewer/p-89544066.entry.js.map +1 -1
- package/dist/viewer/{p-07b99ac9.entry.js → p-8c369777.entry.js} +2 -2
- package/dist/viewer/p-8c369777.entry.js.map +1 -0
- package/dist/viewer/{p-e59983dc.entry.js → p-9835c5e2.entry.js} +2 -2
- package/dist/viewer/p-9835c5e2.entry.js.map +1 -0
- package/dist/viewer/{p-aa95e21a.entry.js → p-9d8ff406.entry.js} +2 -2
- package/dist/viewer/p-9d8ff406.entry.js.map +1 -0
- package/dist/viewer/p-BDvACHun.js.map +1 -1
- package/dist/viewer/p-BIkuvTVH.js.map +1 -1
- package/dist/viewer/p-BRPkbTVP.js.map +1 -1
- package/dist/viewer/p-BsBIynwj.js.map +1 -1
- package/dist/viewer/p-BxtKMwBH.js.map +1 -1
- package/dist/viewer/p-C4y4Noe-.js.map +1 -1
- package/dist/viewer/p-C6KrfydC.js.map +1 -1
- package/dist/viewer/p-C7dYsPFU.js.map +1 -1
- package/dist/viewer/p-C9Cqbq6H.js.map +1 -1
- package/dist/viewer/p-CVWO4w6b.js.map +1 -1
- package/dist/viewer/p-ChqXy0cG.js.map +1 -1
- package/dist/viewer/p-CiSHWNC4.js.map +1 -1
- package/dist/viewer/p-CjG1fMh1.js.map +1 -1
- package/dist/viewer/p-Cs5KOvOQ.js.map +1 -1
- package/dist/viewer/p-CyGlYje2.js.map +1 -1
- package/dist/viewer/p-D6eJC1q4.js.map +1 -1
- package/dist/viewer/p-DC86ZXai.js.map +1 -1
- package/dist/viewer/p-DRh4_Z-g.js.map +1 -1
- package/dist/viewer/p-DUX5FvBC.js.map +1 -1
- package/dist/viewer/p-DX6pEG54.js.map +1 -1
- package/dist/viewer/p-D_ixWHO7.js.map +1 -1
- package/dist/viewer/p-DacE-wPp.js.map +1 -1
- package/dist/viewer/p-Dp56p_jX.js.map +1 -1
- package/dist/viewer/p-EsKoKfmx.js.map +1 -1
- package/dist/viewer/p-F8e15or2.js.map +1 -1
- package/dist/viewer/p-Jfxh0jq9.js.map +1 -1
- package/dist/viewer/p-WPRMWirY.js.map +1 -1
- package/dist/viewer/p-_93RRNxT.js.map +1 -1
- package/dist/viewer/p-a8a81cba.entry.js +5 -0
- package/dist/viewer/p-a8a81cba.entry.js.map +1 -0
- package/dist/viewer/p-a9282481.entry.js.map +1 -1
- package/dist/viewer/{p-63f4f702.entry.js → p-c7e62d66.entry.js} +2 -2
- package/dist/viewer/p-c7e62d66.entry.js.map +1 -0
- package/dist/viewer/p-d37e647b.entry.js.map +1 -1
- package/dist/viewer/{p-302f2078.entry.js → p-d9fe788f.entry.js} +2 -2
- package/dist/viewer/p-d9fe788f.entry.js.map +1 -0
- package/dist/viewer/p-e9b83dae.entry.js.map +1 -1
- package/dist/viewer/{p-70f3629d.entry.js → p-f271dc4a.entry.js} +2 -2
- package/dist/viewer/p-f271dc4a.entry.js.map +1 -0
- package/dist/viewer/p-f65c0769.entry.js.map +1 -1
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/dist/components/p-B80hfIq6.js.map +0 -1
- package/dist/components/p-BopQW1sA.js.map +0 -1
- package/dist/components/p-DNtS2F8J.js +0 -5
- package/dist/components/p-DNtS2F8J.js.map +0 -1
- package/dist/components/p-Doltf1wO.js.map +0 -1
- package/dist/components/p-b0ZzPHz8.js.map +0 -1
- package/dist/viewer/p-07b99ac9.entry.js.map +0 -1
- package/dist/viewer/p-29d14611.entry.js.map +0 -1
- package/dist/viewer/p-302f2078.entry.js.map +0 -1
- package/dist/viewer/p-3300d3dc.entry.js.map +0 -1
- package/dist/viewer/p-5a85cae5.entry.js.map +0 -1
- package/dist/viewer/p-60c915e3.entry.js +0 -5
- package/dist/viewer/p-60c915e3.entry.js.map +0 -1
- package/dist/viewer/p-63f4f702.entry.js.map +0 -1
- package/dist/viewer/p-70f3629d.entry.js.map +0 -1
- package/dist/viewer/p-864f40c7.entry.js.map +0 -1
- package/dist/viewer/p-aa95e21a.entry.js.map +0 -1
- package/dist/viewer/p-e59983dc.entry.js.map +0 -1
- package/dist/viewer/p-e993f300.entry.js.map +0 -1
- package/dist/viewer/p-eac63070.entry.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{r as i,h as t,H as s,a as n}from"./p-CCVkga9Q.js";import{t as e,P as o,a as l}from"./p-BIkuvTVH.js";import{p as h}from"./p-CkIzrpO0.js";import{b as d}from"./p-Ct0GdHoc.js";import{l as r,p as a}from"./p-CVWO4w6b.js";import{g as u}from"./p-C7dYsPFU.js";import{E as v}from"./p-CFus3r7d.js";import{E as c}from"./p-BAhfr1Nx.js";import{g as p}from"./p-Bg-uS9BH.js";import"./p-CG9AChtV.js";class f{get elementRect(){return this.rectObserver.rect}constructor(i,t,s){this.rectObserver=new v;this.droppableSurfaces=[c.PRECISE_SURFACE,c.IMPRECISE_SURFACE,c.GENERIC_GEOMETRY];this.handlePointerMove=async i=>{const t=await this.isDroppableSurface(i);const s=this.controller.getDraggable();if(s!=null&&t){this.handleDrag(s,i)}if(this.controller.getDraggable()==null&&this.controller.getToolMode()==="edit"&&t){this.addCursor(this.getCursorType())}else{this.clearCursor()}};this.handleDrag=async(i,t)=>{const s=u(t,this.elementRect);const n=await this.getWorldPositionForPoint(s);if(n!=null){this.controller.updateDraggable({...i,lastPoint:s},n)}};this.handlePointerDown=async i=>{const t=t=>{const n=h.distance(h.create(i.clientX,t.clientY),h.create(t.clientX,t.clientY));if(n<=2&&i.buttons!==2){if(this.controller.getToolMode()==="edit"){const t=u(i,this.elementRect);this.handlePlacePin(t)}}s()};const s=()=>{window.removeEventListener("pointerup",t)};window.addEventListener("pointerup",t);return{dispose:s}};this.handlePointerUp=async()=>{const i=this.controller.getDraggable();const t=i===null||i===void 0?void 0:i.lastPoint;this.controller.setDraggable(undefined);if(t!=null&&i!=null){this.ifInitialized((async({api:s})=>{var n,e,o,l,h,d;const[r]=await s.hitItems(t);if((r===null||r===void 0?void 0:r.hitPoint)!=null&&((n=r===null||r===void 0?void 0:r.hitPoint)===null||n===void 0?void 0:n.x)!=null&&((e=r===null||r===void 0?void 0:r.hitPoint)===null||e===void 0?void 0:e.y)!=null&&((o=r===null||r===void 0?void 0:r.hitPoint)===null||o===void 0?void 0:o.z)!=null){this.controller.updateDraggable({...i,lastPoint:t},{x:(l=r===null||r===void 0?void 0:r.hitPoint)===null||l===void 0?void 0:l.x,y:r===null||r===void 0?void 0:r.hitPoint.y,z:r===null||r===void 0?void 0:r.hitPoint.z},(d=(h=r===null||r===void 0?void 0:r.partId)===null||h===void 0?void 0:h.hex)!==null&&d!==void 0?d:undefined)}}))}};this.controller=i;this.xOffset=t;this.yOffset=s}initialize(i,t){this.element=i;this.api=t;this.rectObserver.observe(i);i.addEventListener("pointermove",this.handlePointerMove);i.addEventListener("pointerdown",this.handlePointerDown);window.addEventListener("pointerup",this.handlePointerUp)}dispose(){var i,t;this.rectObserver.disconnect();this.clearCursor();(i=this.element)===null||i===void 0?void 0:i.removeEventListener("pointermove",this.handlePointerMove);(t=this.element)===null||t===void 0?void 0:t.removeEventListener("pointerdown",this.handlePointerDown);window.removeEventListener("pointerup",this.handlePointerUp);this.element=undefined;this.api=undefined}async getWorldPositionForPoint(i){return this.ifInitialized((async({api:t})=>{const s=await t.getWorldPointFromViewport(i);return s}))}async handlePlacePin(i,t){this.ifInitialized((async({api:s})=>{var n,o,l,h,r,a;const[u]=await s.hitItems(i);if((u===null||u===void 0?void 0:u.hitPoint)!=null&&this.elementRect!=null){if((u===null||u===void 0?void 0:u.hitPoint)!=null&&(u===null||u===void 0?void 0:u.hitPoint.x)!=null&&(u===null||u===void 0?void 0:u.hitPoint.y)!=null&&(u===null||u===void 0?void 0:u.hitPoint.z)!=null){const s=t!=null?t.id:d.create();const v=this.controller.getStyleAttributes()!=null?{style:this.controller.getStyleAttributes()}:undefined;switch(this.controller.getToolType()){case"pin-icon":this.controller.setPin({type:"icon",id:s,worldPosition:{x:(n=u===null||u===void 0?void 0:u.hitPoint)===null||n===void 0?void 0:n.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(l=(o=u===null||u===void 0?void 0:u.itemId)===null||o===void 0?void 0:o.hex)!==null&&l!==void 0?l:undefined,attributes:v});break;case"pin-text":const d=t==null;const c=e(i,this.elementRect,d,this.xOffset,this.yOffset);this.controller.setPin({type:"text",id:s,worldPosition:{x:(h=u===null||u===void 0?void 0:u.hitPoint)===null||h===void 0?void 0:h.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(a=(r=u===null||u===void 0?void 0:u.itemId)===null||r===void 0?void 0:r.hex)!==null&&a!==void 0?a:undefined,label:{point:c},attributes:v});this.controller.setSelectedPinId(s);break}}}else{this.controller.setSelectedPinId()}}))}getCursorType(){switch(this.controller.getToolType()){case"pin-icon":return a;case"pin-text":return r}}addCursor(i){this.clearCursor();this.cursor=this.ifInitialized((({api:t})=>t.addCursor(i)))}async isDroppableSurface(i){var t;const s=u(i,this.elementRect);const n=await((t=this.api)===null||t===void 0?void 0:t.getEntityTypeAtPoint(s));return n!=null&&this.droppableSurfaces.includes(n)}ifInitialized(i){if(this.element!=null&&this.api!=null){return i({element:this.element,api:this.api})}else{throw new Error("Pins interaction handler not initialized.")}}clearCursor(){var i;(i=this.cursor)===null||i===void 0?void 0:i.dispose();this.cursor=undefined}}const w=()=>`:host{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none;--viewer-pin-tool-initial-label-offset-x:20;--viewer-pin-tool-initial-label-offset-y:20}`;const m=class{constructor(t){i(this,t);this.pinModel=new o;this.tool="pin-icon";this.mode="view";this.pins=[];this.stateMap={};this.handleSetProjectionMatrix=()=>{var i,t;this.projectionViewMatrix=(t=(i=this.viewer)===null||i===void 0?void 0:i.frame)===null||t===void 0?void 0:t.scene.camera.projectionViewMatrix}}watchModeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolMode(this.mode);this.setupInteractionHandler();if(this.mode==="edit"){this.setFeatureMaps();this.setCameraAndKeyboardControls()}else{this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}}watchTypeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolType(this.tool);this.setupInteractionHandler()}watchAccentColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setAccentColor(this.accentColor);this.setupInteractionHandler()}watchPrimaryColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setPrimaryColor(this.primaryColor);this.setupInteractionHandler()}watchPinsChange(){if(this.pins.length>0){this.setDepthBuffers();this.setFeatureMaps()}else{this.resetDepthBuffers();this.resetFeatureMaps()}}connectedCallback(){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls()}componentWillLoad(){this.updateViewport();this.setupController();this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();this.pinModel.onEntitiesChanged((i=>{this.pins=i}));this.pinModel.onSelectionChange((i=>{this.selectedPinId=i}));this.handleViewerChanged(this.viewer,undefined)}componentDidLoad(){this.resizeObserver=new ResizeObserver((()=>this.updateViewport()));this.resizeObserver.observe(this.hostEl)}disconnectedCallback(){this.clearInteractionHandler();this.clearModelListeners();this.resetDepthBuffers();this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}handleViewerChanged(i,t){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();if(t!=null){t.removeEventListener("frameDrawn",this.handleSetProjectionMatrix)}if(i!=null){i.addEventListener("frameDrawn",this.handleSetProjectionMatrix)}this.handleSetProjectionMatrix()}render(){return t(s,{key:"311442b0cc3d62c485b81526fde10692b560af93"},t("vertex-viewer-dom-renderer",{key:"e4fe9d022a717db444590a6c2d2239d233bbe2ce",viewer:this.viewer,drawMode:"2d"},this.pins.map((i=>t("vertex-viewer-pin-group",{id:`pin-group-${i.id}`,"data-is-dom-group-element":true,pin:i,elementBounds:this.elementBounds,pinModel:this.pinModel,pinController:this.pinController,projectionViewMatrix:this.projectionViewMatrix,selected:this.selectedPinId===i.id})))))}setupController(){const i=this.accentColor||this.primaryColor?{accentColor:this.accentColor,primaryColor:this.primaryColor}:undefined;this.pinController=new l(this.pinModel,this.mode,this.tool,i)}clearInteractionHandler(){var i;(i=this.registeredInteractionHandler)===null||i===void 0?void 0:i.then((i=>i.dispose()));this.registeredInteractionHandler=undefined}setupInteractionHandler(){var i;const t=window.getComputedStyle(this.hostEl);const s=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-x").trim();const n=Number.isFinite(Number.parseInt(s))?Number.parseInt(s):20;const e=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-y").trim();const o=Number.isFinite(Number.parseInt(e))?Number.parseInt(e):20;this.clearInteractionHandler();if(this.pinController!=null){this.registeredInteractionHandler=(i=this.viewer)===null||i===void 0?void 0:i.registerInteractionHandler(new f(this.pinController,n,o))}}clearModelListeners(){var i,t,s;(i=this.onEntitiesChangedHandler)===null||i===void 0?void 0:i.dispose();this.onEntitiesChangedHandler=undefined;(t=this.onEntityAddedHandler)===null||t===void 0?void 0:t.dispose();this.onEntityAddedHandler=undefined;(s=this.resizeObserver)===null||s===void 0?void 0:s.disconnect()}updateViewport(){this.elementBounds=p(this.hostEl)}setDepthBuffers(){if(this.pins.length>0&&this.viewer!=null&&this.viewer.depthBuffers==null){this.stateMap.shouldClearDepthBuffers=true;this.viewer.depthBuffers="final"}}resetDepthBuffers(){if(this.stateMap.shouldClearDepthBuffers&&this.viewer!=null){this.viewer.depthBuffers=undefined;this.stateMap.shouldClearDepthBuffers=undefined}}setFeatureMaps(){if((this.pins.length>0||this.mode==="edit")&&this.viewer!=null&&this.viewer.featureMaps==null){this.stateMap.shouldClearFeatureMaps=true;this.viewer.featureMaps="final"}}resetFeatureMaps(){if(this.stateMap.shouldClearFeatureMaps&&this.viewer!=null){this.viewer.featureMaps=undefined;this.stateMap.shouldClearFeatureMaps=undefined}}setCameraAndKeyboardControls(){if(this.mode==="edit"&&this.viewer!=null){if(this.viewer.cameraControls){this.stateMap.shouldClearCameraControls=true;this.viewer.cameraControls=false}if(this.viewer.keyboardControls){this.stateMap.shouldClearKeyboardControls=true;this.viewer.keyboardControls=false}}}resetCameraAndKeyboardControls(){if(this.viewer!=null){if(this.stateMap.shouldClearCameraControls){this.viewer.cameraControls=true;this.stateMap.shouldClearCameraControls=undefined}if(this.stateMap.shouldClearKeyboardControls){this.viewer.keyboardControls=true;this.stateMap.shouldClearKeyboardControls=undefined}}}get hostEl(){return n(this)}static get watchers(){return{mode:[{watchModeChange:0}],tool:[{watchTypeChange:0}],accentColor:[{watchAccentColorChange:0}],primaryColor:[{watchPrimaryColorChange:0}],pins:[{watchPinsChange:0}],viewer:[{handleViewerChanged:0}]}}};m.style=w();export{m as vertex_viewer_pin_tool};
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{r as i,h as t,H as s,a as n}from"./p-CCVkga9Q.js";import{t as e,P as o,a as l}from"./p-BIkuvTVH.js";import{p as h}from"./p-CkIzrpO0.js";import{b as d}from"./p-Ct0GdHoc.js";import{l as r,p as a}from"./p-CVWO4w6b.js";import{g as u}from"./p-C7dYsPFU.js";import{E as v}from"./p-CFus3r7d.js";import{E as c}from"./p-BAhfr1Nx.js";import{g as p}from"./p-Bg-uS9BH.js";import"./p-CG9AChtV.js";class f{get elementRect(){return this.rectObserver.rect}constructor(i,t,s){this.rectObserver=new v;this.droppableSurfaces=[c.PRECISE_SURFACE,c.IMPRECISE_SURFACE,c.GENERIC_GEOMETRY];this.handlePointerMove=async i=>{const t=await this.isDroppableSurface(i);const s=this.controller.getDraggable();if(s!=null&&t){this.handleDrag(s,i)}if(this.controller.getDraggable()==null&&this.controller.getToolMode()==="edit"&&t){this.addCursor(this.getCursorType())}else{this.clearCursor()}};this.handleDrag=async(i,t)=>{const s=u(t,this.elementRect);const n=await this.getWorldPositionForPoint(s);if(n!=null){this.controller.updateDraggable({...i,lastPoint:s},n)}};this.handlePointerDown=async i=>{const t=t=>{const n=h.distance(h.create(i.clientX,t.clientY),h.create(t.clientX,t.clientY));if(n<=2&&i.buttons!==2){if(this.controller.getToolMode()==="edit"){const t=u(i,this.elementRect);this.handlePlacePin(t)}}s()};const s=()=>{window.removeEventListener("pointerup",t)};window.addEventListener("pointerup",t);return{dispose:s}};this.handlePointerUp=async()=>{const i=this.controller.getDraggable();const t=i===null||i===void 0?void 0:i.lastPoint;this.controller.setDraggable(undefined);if(t!=null&&i!=null){this.ifInitialized((async({api:s})=>{var n,e,o,l,h,d;const[r]=await s.hitItems(t);if((r===null||r===void 0?void 0:r.hitPoint)!=null&&((n=r===null||r===void 0?void 0:r.hitPoint)===null||n===void 0?void 0:n.x)!=null&&((e=r===null||r===void 0?void 0:r.hitPoint)===null||e===void 0?void 0:e.y)!=null&&((o=r===null||r===void 0?void 0:r.hitPoint)===null||o===void 0?void 0:o.z)!=null){this.controller.updateDraggable({...i,lastPoint:t},{x:(l=r===null||r===void 0?void 0:r.hitPoint)===null||l===void 0?void 0:l.x,y:r===null||r===void 0?void 0:r.hitPoint.y,z:r===null||r===void 0?void 0:r.hitPoint.z},(d=(h=r===null||r===void 0?void 0:r.partId)===null||h===void 0?void 0:h.hex)!==null&&d!==void 0?d:undefined)}}))}};this.controller=i;this.xOffset=t;this.yOffset=s}initialize(i,t){this.element=i;this.api=t;this.rectObserver.observe(i);i.addEventListener("pointermove",this.handlePointerMove);i.addEventListener("pointerdown",this.handlePointerDown);window.addEventListener("pointerup",this.handlePointerUp)}dispose(){var i,t;this.rectObserver.disconnect();this.clearCursor();(i=this.element)===null||i===void 0?void 0:i.removeEventListener("pointermove",this.handlePointerMove);(t=this.element)===null||t===void 0?void 0:t.removeEventListener("pointerdown",this.handlePointerDown);window.removeEventListener("pointerup",this.handlePointerUp);this.element=undefined;this.api=undefined}async getWorldPositionForPoint(i){return this.ifInitialized((async({api:t})=>{const s=await t.getWorldPointFromViewport(i);return s}))}async handlePlacePin(i,t){this.ifInitialized((async({api:s})=>{var n,o,l,h,r,a;const[u]=await s.hitItems(i);if((u===null||u===void 0?void 0:u.hitPoint)!=null&&this.elementRect!=null){if((u===null||u===void 0?void 0:u.hitPoint)!=null&&(u===null||u===void 0?void 0:u.hitPoint.x)!=null&&(u===null||u===void 0?void 0:u.hitPoint.y)!=null&&(u===null||u===void 0?void 0:u.hitPoint.z)!=null){const s=t!=null?t.id:d.create();const v=this.controller.getStyleAttributes()!=null?{style:this.controller.getStyleAttributes()}:undefined;switch(this.controller.getToolType()){case"pin-icon":this.controller.setPin({type:"icon",id:s,worldPosition:{x:(n=u===null||u===void 0?void 0:u.hitPoint)===null||n===void 0?void 0:n.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(l=(o=u===null||u===void 0?void 0:u.itemId)===null||o===void 0?void 0:o.hex)!==null&&l!==void 0?l:undefined,attributes:v});break;case"pin-text":const d=t==null;const c=e(i,this.elementRect,d,this.xOffset,this.yOffset);this.controller.setPin({type:"text",id:s,worldPosition:{x:(h=u===null||u===void 0?void 0:u.hitPoint)===null||h===void 0?void 0:h.x,y:u===null||u===void 0?void 0:u.hitPoint.y,z:u===null||u===void 0?void 0:u.hitPoint.z},partId:(a=(r=u===null||u===void 0?void 0:u.itemId)===null||r===void 0?void 0:r.hex)!==null&&a!==void 0?a:undefined,label:{point:c},attributes:v});this.controller.setSelectedPinId(s);break}}}else{this.controller.setSelectedPinId()}}))}getCursorType(){switch(this.controller.getToolType()){case"pin-icon":return a;case"pin-text":return r}}addCursor(i){this.clearCursor();this.cursor=this.ifInitialized((({api:t})=>t.addCursor(i)))}async isDroppableSurface(i){var t;const s=u(i,this.elementRect);const n=await((t=this.api)===null||t===void 0?void 0:t.getEntityTypeAtPoint(s));return n!=null&&this.droppableSurfaces.includes(n)}ifInitialized(i){if(this.element!=null&&this.api!=null){return i({element:this.element,api:this.api})}else{throw new Error("Pins interaction handler not initialized.")}}clearCursor(){var i;(i=this.cursor)===null||i===void 0?void 0:i.dispose();this.cursor=undefined}}const w=()=>`:host{position:absolute;top:0;bottom:0;left:0;right:0;overflow:hidden;pointer-events:none;--viewer-pin-tool-initial-label-offset-x:20;--viewer-pin-tool-initial-label-offset-y:20}`;const m=class{constructor(t){i(this,t);this.pinModel=new o;this.tool="pin-icon";this.mode="view";this.pins=[];this.stateMap={};this.handleSetProjectionMatrix=()=>{var i,t;this.projectionViewMatrix=(t=(i=this.viewer)===null||i===void 0?void 0:i.frame)===null||t===void 0?void 0:t.scene.camera.projectionViewMatrix}}watchModeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolMode(this.mode);this.setupInteractionHandler();if(this.mode==="edit"){this.setFeatureMaps();this.setCameraAndKeyboardControls()}else{this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}}watchTypeChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setToolType(this.tool);this.setupInteractionHandler()}watchAccentColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setAccentColor(this.accentColor);this.setupInteractionHandler()}watchPrimaryColorChange(){var i;(i=this.pinController)===null||i===void 0?void 0:i.setPrimaryColor(this.primaryColor);this.setupInteractionHandler()}watchPinsChange(){if(this.pins.length>0){this.setDepthBuffers();this.setFeatureMaps()}else{this.resetDepthBuffers();this.resetFeatureMaps()}}connectedCallback(){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls()}componentWillLoad(){this.updateViewport();this.setupController();this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();this.pinModel.onEntitiesChanged((i=>{this.pins=i}));this.pinModel.onSelectionChange((i=>{this.selectedPinId=i}));this.handleViewerChanged(this.viewer,undefined)}componentDidLoad(){this.resizeObserver=new ResizeObserver((()=>this.updateViewport()));this.resizeObserver.observe(this.hostEl)}disconnectedCallback(){this.clearInteractionHandler();this.clearModelListeners();this.resetDepthBuffers();this.resetFeatureMaps();this.resetCameraAndKeyboardControls()}handleViewerChanged(i,t){this.setupInteractionHandler();this.setDepthBuffers();this.setFeatureMaps();this.setCameraAndKeyboardControls();if(t!=null){t.removeEventListener("frameDrawn",this.handleSetProjectionMatrix)}if(i!=null){i.addEventListener("frameDrawn",this.handleSetProjectionMatrix)}this.handleSetProjectionMatrix()}render(){return t(s,{key:"ce2867d4a624dabf607b9de837e73a0a0c40eaf9"},t("vertex-viewer-dom-renderer",{key:"7d2dc3d75ca1818ba7b9b292ccbe1db7ac5c7ac8",viewer:this.viewer,drawMode:"2d"},this.pins.map((i=>t("vertex-viewer-pin-group",{id:`pin-group-${i.id}`,"data-is-dom-group-element":true,pin:i,elementBounds:this.elementBounds,pinModel:this.pinModel,pinController:this.pinController,projectionViewMatrix:this.projectionViewMatrix,selected:this.selectedPinId===i.id})))))}setupController(){const i=this.accentColor||this.primaryColor?{accentColor:this.accentColor,primaryColor:this.primaryColor}:undefined;this.pinController=new l(this.pinModel,this.mode,this.tool,i)}clearInteractionHandler(){var i;(i=this.registeredInteractionHandler)===null||i===void 0?void 0:i.then((i=>i.dispose()));this.registeredInteractionHandler=undefined}setupInteractionHandler(){var i;const t=window.getComputedStyle(this.hostEl);const s=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-x").trim();const n=Number.isFinite(Number.parseInt(s))?Number.parseInt(s):20;const e=t.getPropertyValue("--viewer-pin-tool-initial-label-offset-y").trim();const o=Number.isFinite(Number.parseInt(e))?Number.parseInt(e):20;this.clearInteractionHandler();if(this.pinController!=null){this.registeredInteractionHandler=(i=this.viewer)===null||i===void 0?void 0:i.registerInteractionHandler(new f(this.pinController,n,o))}}clearModelListeners(){var i,t,s;(i=this.onEntitiesChangedHandler)===null||i===void 0?void 0:i.dispose();this.onEntitiesChangedHandler=undefined;(t=this.onEntityAddedHandler)===null||t===void 0?void 0:t.dispose();this.onEntityAddedHandler=undefined;(s=this.resizeObserver)===null||s===void 0?void 0:s.disconnect()}updateViewport(){this.elementBounds=p(this.hostEl)}setDepthBuffers(){if(this.pins.length>0&&this.viewer!=null&&this.viewer.depthBuffers==null){this.stateMap.shouldClearDepthBuffers=true;this.viewer.depthBuffers="final"}}resetDepthBuffers(){if(this.stateMap.shouldClearDepthBuffers&&this.viewer!=null){this.viewer.depthBuffers=undefined;this.stateMap.shouldClearDepthBuffers=undefined}}setFeatureMaps(){if((this.pins.length>0||this.mode==="edit")&&this.viewer!=null&&this.viewer.featureMaps==null){this.stateMap.shouldClearFeatureMaps=true;this.viewer.featureMaps="final"}}resetFeatureMaps(){if(this.stateMap.shouldClearFeatureMaps&&this.viewer!=null){this.viewer.featureMaps=undefined;this.stateMap.shouldClearFeatureMaps=undefined}}setCameraAndKeyboardControls(){if(this.mode==="edit"&&this.viewer!=null){if(this.viewer.cameraControls){this.stateMap.shouldClearCameraControls=true;this.viewer.cameraControls=false}if(this.viewer.keyboardControls){this.stateMap.shouldClearKeyboardControls=true;this.viewer.keyboardControls=false}}}resetCameraAndKeyboardControls(){if(this.viewer!=null){if(this.stateMap.shouldClearCameraControls){this.viewer.cameraControls=true;this.stateMap.shouldClearCameraControls=undefined}if(this.stateMap.shouldClearKeyboardControls){this.viewer.keyboardControls=true;this.stateMap.shouldClearKeyboardControls=undefined}}}get hostEl(){return n(this)}static get watchers(){return{mode:[{watchModeChange:0}],tool:[{watchTypeChange:0}],accentColor:[{watchAccentColorChange:0}],primaryColor:[{watchPrimaryColorChange:0}],pins:[{watchPinsChange:0}],viewer:[{handleViewerChanged:0}]}}};m.style=w();export{m as vertex_viewer_pin_tool};
|
|
5
|
+
//# sourceMappingURL=p-9835c5e2.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PinsInteractionHandler","elementRect","this","rectObserver","rect","constructor","controller","xOffset","yOffset","ElementRectObserver","droppableSurfaces","EntityType","PRECISE_SURFACE","IMPRECISE_SURFACE","GENERIC_GEOMETRY","handlePointerMove","async","event","isDroppableSurface","draggable","getDraggable","handleDrag","getToolMode","addCursor","getCursorType","clearCursor","pt","getMouseClientPosition","worldPosition","getWorldPositionForPoint","updateDraggable","lastPoint","handlePointerDown","pointerDown","pointerUp","distanceBetweenStartAndEndPoint","Point","distance","create","clientX","clientY","buttons","handlePlacePin","dispose","window","removeEventListener","addEventListener","handlePointerUp","setDraggable","undefined","ifInitialized","api","hit","hitItems","hitPoint","_a","x","_b","y","_c","z","_d","_f","_e","partId","hex","initialize","element","observe","disconnect","vector3","getWorldPointFromViewport","existingPin","pinId","id","UUID","attributes","getStyleAttributes","style","getToolType","setPin","type","itemId","isNewPin","relativePoint","translatePointToRelative","label","point","setSelectedPinId","pinCursor","labelPinCursor","cursor","getEntityTypeAtPoint","includes","f","Error","viewerPinToolCss","ViewerPinTool","hostRef","pinModel","PinModel","tool","mode","pins","stateMap","handleSetProjectionMatrix","projectionViewMatrix","viewer","frame","scene","camera","watchModeChange","pinController","setToolMode","setupInteractionHandler","setFeatureMaps","setCameraAndKeyboardControls","resetFeatureMaps","resetCameraAndKeyboardControls","watchTypeChange","setToolType","watchAccentColorChange","setAccentColor","accentColor","watchPrimaryColorChange","setPrimaryColor","primaryColor","watchPinsChange","length","setDepthBuffers","resetDepthBuffers","connectedCallback","componentWillLoad","updateViewport","setupController","onEntitiesChanged","entities","onSelectionChange","selectedId","selectedPinId","handleViewerChanged","componentDidLoad","resizeObserver","ResizeObserver","hostEl","disconnectedCallback","clearInteractionHandler","clearModelListeners","newViewer","oldViewer","render","h","Host","key","drawMode","map","pin","elementBounds","selected","PinController","registeredInteractionHandler","then","handler","hostStyles","getComputedStyle","getPropertyValue","trim","xOffsetAsNumber","Number","isFinite","parseInt","yOffsetAsNumber","registerInteractionHandler","onEntitiesChangedHandler","onEntityAddedHandler","getMarkupBoundingClientRect","depthBuffers","shouldClearDepthBuffers","featureMaps","shouldClearFeatureMaps","cameraControls","shouldClearCameraControls","keyboardControls","shouldClearKeyboardControls"],"sources":["src/lib/pins/interactions.ts","src/components/viewer-pin-tool/viewer-pin-tool.css?tag=vertex-viewer-pin-tool&encapsulation=shadow","src/components/viewer-pin-tool/viewer-pin-tool.tsx"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Disposable, UUID } from '@vertexvis/utils';\n\nimport { translatePointToRelative } from '../../components/viewer-pin-tool/utils';\nimport { Cursor, labelPinCursor, pinCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { ElementRectObserver } from '../elementRectObserver';\nimport { InteractionApi, InteractionHandler } from '../interactions';\nimport { EntityType } from '../types/entities';\nimport { Draggable, PinController } from './controller';\nimport { Pin } from './model';\n\nexport class PinsInteractionHandler implements InteractionHandler {\n private controller: PinController;\n private element?: HTMLElement;\n private api?: InteractionApi;\n\n private cursor?: Disposable;\n\n private xOffset?: number;\n private yOffset?: number;\n\n private rectObserver = new ElementRectObserver();\n\n private droppableSurfaces: EntityType[] = [\n EntityType.PRECISE_SURFACE,\n EntityType.IMPRECISE_SURFACE,\n EntityType.GENERIC_GEOMETRY,\n ];\n\n private get elementRect(): DOMRect | undefined {\n return this.rectObserver.rect;\n }\n\n public constructor(\n controller: PinController,\n xOffset: number,\n yOffset: number,\n ) {\n this.controller = controller;\n this.xOffset = xOffset;\n this.yOffset = yOffset;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n this.rectObserver.observe(element);\n\n element.addEventListener('pointermove', this.handlePointerMove);\n element.addEventListener('pointerdown', this.handlePointerDown);\n window.addEventListener('pointerup', this.handlePointerUp);\n }\n\n public dispose(): void {\n this.rectObserver.disconnect();\n this.clearCursor();\n this.element?.removeEventListener('pointermove', this.handlePointerMove);\n this.element?.removeEventListener('pointerdown', this.handlePointerDown);\n window.removeEventListener('pointerup', this.handlePointerUp);\n\n this.element = undefined;\n this.api = undefined;\n }\n\n public async getWorldPositionForPoint(\n pt: Point.Point,\n ): Promise<Vector3.Vector3 | undefined> {\n return this.ifInitialized(async ({ api }) => {\n const vector3 = await api.getWorldPointFromViewport(pt);\n\n return vector3;\n });\n }\n\n public async handlePlacePin(\n pt: Point.Point,\n existingPin?: Pin,\n ): Promise<void> {\n this.ifInitialized(async ({ api }) => {\n const [hit] = await api.hitItems(pt);\n\n if (hit?.hitPoint != null && this.elementRect != null) {\n if (\n hit?.hitPoint != null &&\n hit?.hitPoint.x != null &&\n hit?.hitPoint.y != null &&\n hit?.hitPoint.z != null\n ) {\n const pinId = existingPin != null ? existingPin.id : UUID.create();\n\n const attributes =\n this.controller.getStyleAttributes() != null\n ? {\n style: this.controller.getStyleAttributes(),\n }\n : undefined;\n\n switch (this.controller.getToolType()) {\n case 'pin-icon':\n this.controller.setPin({\n type: 'icon',\n id: pinId,\n worldPosition: {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n partId: hit?.itemId?.hex ?? undefined,\n attributes,\n });\n break;\n case 'pin-text':\n const isNewPin = existingPin == null;\n const relativePoint = translatePointToRelative(\n pt,\n this.elementRect,\n isNewPin,\n this.xOffset,\n this.yOffset,\n );\n this.controller.setPin({\n type: 'text',\n id: pinId,\n worldPosition: {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n partId: hit?.itemId?.hex ?? undefined,\n label: {\n point: relativePoint,\n },\n attributes,\n });\n this.controller.setSelectedPinId(pinId);\n break;\n }\n }\n } else {\n this.controller.setSelectedPinId();\n }\n });\n }\n\n private handlePointerMove = async (event: PointerEvent): Promise<void> => {\n const isDroppableSurface = await this.isDroppableSurface(event);\n const draggable = this.controller.getDraggable();\n if (draggable != null && isDroppableSurface) {\n this.handleDrag(draggable, event);\n }\n\n if (\n this.controller.getDraggable() == null &&\n this.controller.getToolMode() === 'edit' &&\n isDroppableSurface\n ) {\n this.addCursor(this.getCursorType());\n } else {\n this.clearCursor();\n }\n };\n\n private getCursorType(): Cursor {\n switch (this.controller.getToolType()) {\n case 'pin-icon':\n return pinCursor;\n case 'pin-text':\n return labelPinCursor;\n }\n }\n\n private handleDrag = async (\n draggable: Draggable,\n event: PointerEvent,\n ): Promise<void> => {\n const pt = getMouseClientPosition(event, this.elementRect);\n const worldPosition = await this.getWorldPositionForPoint(pt);\n\n if (worldPosition != null) {\n this.controller.updateDraggable(\n {\n ...draggable,\n lastPoint: pt,\n },\n worldPosition,\n );\n }\n };\n\n private handlePointerDown = async (\n pointerDown: PointerEvent,\n ): Promise<Disposable> => {\n const pointerUp = (pointerUp: PointerEvent): void => {\n const distanceBetweenStartAndEndPoint = Point.distance(\n Point.create(pointerDown.clientX, pointerUp.clientY),\n Point.create(pointerUp.clientX, pointerUp.clientY),\n );\n\n if (distanceBetweenStartAndEndPoint <= 2 && pointerDown.buttons !== 2) {\n if (this.controller.getToolMode() === 'edit') {\n const pt = getMouseClientPosition(pointerDown, this.elementRect);\n\n this.handlePlacePin(pt);\n }\n }\n\n dispose();\n };\n\n const dispose = (): void => {\n window.removeEventListener('pointerup', pointerUp);\n };\n\n window.addEventListener('pointerup', pointerUp);\n\n return {\n dispose,\n };\n };\n\n private handlePointerUp = async (): Promise<void> => {\n const draggable = this.controller.getDraggable();\n const lastPoint = draggable?.lastPoint;\n\n this.controller.setDraggable(undefined);\n\n if (lastPoint != null && draggable != null) {\n this.ifInitialized(async ({ api }) => {\n const [hit] = await api.hitItems(lastPoint);\n\n if (\n hit?.hitPoint != null &&\n hit?.hitPoint?.x != null &&\n hit?.hitPoint?.y != null &&\n hit?.hitPoint?.z != null\n ) {\n this.controller.updateDraggable(\n {\n ...draggable,\n lastPoint,\n },\n {\n x: hit?.hitPoint?.x,\n y: hit?.hitPoint.y,\n z: hit?.hitPoint.z,\n },\n hit?.partId?.hex ?? undefined,\n );\n }\n });\n }\n };\n\n private addCursor(cursor: Cursor): void {\n this.clearCursor();\n this.cursor = this.ifInitialized(({ api }) => api.addCursor(cursor));\n }\n\n private async isDroppableSurface(event: PointerEvent): Promise<boolean> {\n const pt = getMouseClientPosition(event, this.elementRect);\n const type = await this.api?.getEntityTypeAtPoint(pt);\n\n return type != null && this.droppableSurfaces.includes(type);\n }\n\n protected ifInitialized<R>(\n f: (data: { element: HTMLElement; api: InteractionApi }) => R,\n ): R {\n if (this.element != null && this.api != null) {\n return f({ element: this.element, api: this.api });\n } else {\n throw new Error('Pins interaction handler not initialized.');\n }\n }\n\n private clearCursor(): void {\n this.cursor?.dispose();\n this.cursor = undefined;\n }\n}\n",":host {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n pointer-events: none;\n\n /**\n * @prop --viewer-pin-tool-initial-label-offset-x: The number of pixels to offset\n the label in the x direction. Defaults to 20.\n */\n --viewer-pin-tool-initial-label-offset-x: 20;\n\n /**\n * @prop --viewer-pin-tool-initial-label-offset-y: The number of pixels to offset\n the label in the y direction. Defaults to 20.\n */\n --viewer-pin-tool-initial-label-offset-y: 20;\n}\n","import {\n Component,\n Element,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n h,\n Host,\n JSX,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Matrix4 } from '@vertexvis/geometry';\nimport { Color, Disposable } from '@vertexvis/utils';\n\nimport { PinController } from '../../lib/pins/controller';\nimport { PinsInteractionHandler } from '../../lib/pins/interactions';\nimport {\n Pin,\n PinModel,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from '../../lib/pins/model';\nimport { getMarkupBoundingClientRect } from '../viewer-markup/dom';\n\ninterface StateMap {\n shouldClearDepthBuffers?: boolean;\n shouldClearFeatureMaps?: boolean;\n shouldClearCameraControls?: boolean;\n shouldClearKeyboardControls?: boolean;\n}\n\n@Component({\n tag: 'vertex-viewer-pin-tool',\n styleUrl: 'viewer-pin-tool.css',\n shadow: true,\n})\nexport class ViewerPinTool {\n /**\n * The controller that is responsible for drawing pins and updating the model\n */\n @Prop({ mutable: true })\n public pinController?: PinController;\n\n /**\n * The model that contains the entities and outcomes from performing pin annotations\n */\n @Prop()\n public pinModel: PinModel = new PinModel();\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 type of pin.\n *\n * This property will automatically be set.\n */\n @Prop({ mutable: true })\n public tool: ViewerPinToolType = 'pin-icon';\n\n /**\n * The mode of the pin tool\n */\n @Prop({ mutable: true })\n public mode: ViewerPinToolMode = 'view';\n\n /**\n * The primary color for new pins. Setting this will override the primary template color, and will be used for any new\n * pins created with this `vertex-viewer-pin-tool`. This styling applies to pin anchors, and borders, etc.\n */\n @Prop({ mutable: true })\n public primaryColor: Color.Color | string | undefined;\n\n /**\n * The accent color for new pins. Setting this will override the accent template color, and will be used for any new\n * pins created with this `vertex-viewer-pin-tool`. This styling applies to some background colors, etc\n */\n @Prop({ mutable: true })\n public accentColor: Color.Color | string | undefined;\n\n @Element()\n private hostEl!: HTMLElement;\n\n @State()\n private pins: Pin[] = [];\n\n @State()\n private selectedPinId?: string;\n\n @State()\n private elementBounds?: DOMRect;\n\n @State()\n private projectionViewMatrix?: Matrix4.Matrix4;\n\n private registeredInteractionHandler?: Promise<Disposable>;\n private onEntitiesChangedHandler?: Disposable;\n private onEntityAddedHandler?: Disposable;\n\n private resizeObserver?: ResizeObserver;\n\n private stateMap: StateMap = {};\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected watchModeChange(): void {\n this.pinController?.setToolMode(this.mode);\n this.setupInteractionHandler();\n\n if (this.mode === 'edit') {\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n } else {\n this.resetFeatureMaps();\n this.resetCameraAndKeyboardControls();\n }\n }\n\n /**\n * @ignore\n */\n @Watch('tool')\n protected watchTypeChange(): void {\n this.pinController?.setToolType(this.tool);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('accentColor')\n protected watchAccentColorChange(): void {\n this.pinController?.setAccentColor(this.accentColor);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('primaryColor')\n protected watchPrimaryColorChange(): void {\n this.pinController?.setPrimaryColor(this.primaryColor);\n this.setupInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('pins')\n protected watchPinsChange(): void {\n if (this.pins.length > 0) {\n this.setDepthBuffers();\n this.setFeatureMaps();\n } else {\n this.resetDepthBuffers();\n this.resetFeatureMaps();\n }\n }\n\n /**\n * @ignore\n */\n protected connectedCallback(): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n }\n\n /**\n * @ignore\n */\n protected componentWillLoad(): void {\n this.updateViewport();\n this.setupController();\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n\n this.pinModel.onEntitiesChanged((entities) => {\n this.pins = entities;\n });\n\n this.pinModel.onSelectionChange((selectedId) => {\n this.selectedPinId = selectedId;\n });\n\n this.handleViewerChanged(this.viewer, undefined);\n }\n\n protected componentDidLoad(): void {\n this.resizeObserver = new ResizeObserver(() => this.updateViewport());\n this.resizeObserver.observe(this.hostEl);\n }\n\n /**\n * @ignore\n */\n protected disconnectedCallback(): void {\n this.clearInteractionHandler();\n this.clearModelListeners();\n this.resetDepthBuffers();\n this.resetFeatureMaps();\n this.resetCameraAndKeyboardControls();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(\n newViewer?: HTMLVertexViewerElement,\n oldViewer?: HTMLVertexViewerElement,\n ): void {\n this.setupInteractionHandler();\n this.setDepthBuffers();\n this.setFeatureMaps();\n this.setCameraAndKeyboardControls();\n\n if (oldViewer != null) {\n oldViewer.removeEventListener(\n 'frameDrawn',\n this.handleSetProjectionMatrix,\n );\n }\n\n if (newViewer != null) {\n newViewer.addEventListener('frameDrawn', this.handleSetProjectionMatrix);\n }\n\n this.handleSetProjectionMatrix();\n }\n\n private handleSetProjectionMatrix = (): void => {\n this.projectionViewMatrix =\n this.viewer?.frame?.scene.camera.projectionViewMatrix;\n };\n\n protected render(): JSX.Element {\n return (\n <Host>\n <vertex-viewer-dom-renderer viewer={this.viewer} drawMode=\"2d\">\n {this.pins.map((pin) => {\n return (\n <vertex-viewer-pin-group\n id={`pin-group-${pin.id}`}\n data-is-dom-group-element={true}\n pin={pin}\n elementBounds={this.elementBounds}\n pinModel={this.pinModel}\n pinController={this.pinController}\n projectionViewMatrix={this.projectionViewMatrix}\n selected={this.selectedPinId === pin.id}\n ></vertex-viewer-pin-group>\n );\n })}\n </vertex-viewer-dom-renderer>\n </Host>\n );\n }\n\n private setupController(): void {\n const attributes =\n this.accentColor || this.primaryColor\n ? {\n accentColor: this.accentColor,\n primaryColor: this.primaryColor,\n }\n : undefined;\n this.pinController = new PinController(\n this.pinModel,\n this.mode,\n this.tool,\n attributes,\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 const hostStyles = window.getComputedStyle(this.hostEl);\n\n const xOffset = hostStyles\n .getPropertyValue('--viewer-pin-tool-initial-label-offset-x')\n .trim();\n const xOffsetAsNumber = Number.isFinite(Number.parseInt(xOffset))\n ? Number.parseInt(xOffset)\n : 20;\n\n const yOffset = hostStyles\n .getPropertyValue('--viewer-pin-tool-initial-label-offset-y')\n .trim();\n const yOffsetAsNumber = Number.isFinite(Number.parseInt(yOffset))\n ? Number.parseInt(yOffset)\n : 20;\n\n this.clearInteractionHandler();\n\n if (this.pinController != null) {\n this.registeredInteractionHandler =\n this.viewer?.registerInteractionHandler(\n new PinsInteractionHandler(\n this.pinController,\n xOffsetAsNumber,\n yOffsetAsNumber,\n ),\n );\n }\n }\n\n private clearModelListeners(): void {\n this.onEntitiesChangedHandler?.dispose();\n this.onEntitiesChangedHandler = undefined;\n this.onEntityAddedHandler?.dispose();\n this.onEntityAddedHandler = undefined;\n this.resizeObserver?.disconnect();\n }\n\n private updateViewport(): void {\n this.elementBounds = getMarkupBoundingClientRect(this.hostEl);\n }\n\n private setDepthBuffers(): void {\n if (\n this.pins.length > 0 &&\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 private setFeatureMaps(): void {\n if (\n (this.pins.length > 0 || this.mode === 'edit') &&\n this.viewer != null &&\n this.viewer.featureMaps == null\n ) {\n this.stateMap.shouldClearFeatureMaps = true;\n this.viewer.featureMaps = 'final';\n }\n }\n\n private resetFeatureMaps(): void {\n if (this.stateMap.shouldClearFeatureMaps && this.viewer != null) {\n this.viewer.featureMaps = undefined;\n this.stateMap.shouldClearFeatureMaps = undefined;\n }\n }\n\n private setCameraAndKeyboardControls(): void {\n if (this.mode === 'edit' && this.viewer != null) {\n // Check camera controls\n if (this.viewer.cameraControls) {\n this.stateMap.shouldClearCameraControls = true;\n this.viewer.cameraControls = false;\n }\n\n // Check keyboard controls\n if (this.viewer.keyboardControls) {\n this.stateMap.shouldClearKeyboardControls = true;\n this.viewer.keyboardControls = false;\n }\n }\n }\n\n private resetCameraAndKeyboardControls(): void {\n if (this.viewer != null) {\n if (this.stateMap.shouldClearCameraControls) {\n this.viewer.cameraControls = true;\n this.stateMap.shouldClearCameraControls = undefined;\n }\n\n if (this.stateMap.shouldClearKeyboardControls) {\n this.viewer.keyboardControls = true;\n this.stateMap.shouldClearKeyboardControls = undefined;\n }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* Copyright (c) 2026 Vertex Software LLC. All rights reserved.
|
|
3
3
|
*/
|
|
4
|
-
import{r as i,c as e,h as t,H as s,a as o}from"./p-CCVkga9Q.js";import{a as l,V as r}from"./p-DacE-wPp.js";import{b as h}from"./p-CVWO4w6b.js";import{g as
|
|
5
|
-
//# sourceMappingURL=p-
|
|
4
|
+
import{r as i,c as e,h as t,H as s,a as o}from"./p-CCVkga9Q.js";import{a as l,V as r}from"./p-DacE-wPp.js";import{b as h}from"./p-CVWO4w6b.js";import{g as n}from"./p-C7dYsPFU.js";import"./p-Og6pwwEB.js";import"./p-CG9AChtV.js";import"./p-Ct0GdHoc.js";import"./p-CkIzrpO0.js";class d{constructor(i){this.controller=i;this.handleDragBegin=this.handleDragBegin.bind(this);this.handleDrag=this.handleDrag.bind(this);this.handleDragEnd=this.handleDragEnd.bind(this);this.enabled=true}initialize(i,e){this.element=i;this.api=e;this.element.addEventListener("pointerdown",this.handleDragBegin);this.addCrosshairCursor()}dispose(){var i,e,t;(i=this.element)===null||i===void 0?void 0:i.removeEventListener("pointerdown",this.handleDragBegin);window.removeEventListener("pointermove",this.handleDrag);window.removeEventListener("pointerup",this.handleDragEnd);(e=this.crosshairCursorDisposable)===null||e===void 0?void 0:e.dispose();(t=this.waitCursorDisposable)===null||t===void 0?void 0:t.dispose();this.element=undefined;this.api=undefined;this.enabled=true}disable(){this.enabled=false}enable(){this.enabled=true}handleDragBegin(i){var e;if(this.enabled&&this.isPrimaryMouseButtonClick(i)&&!this.isInteracting){this.elementBounds=(e=this.element)===null||e===void 0?void 0:e.getBoundingClientRect();this.isInteracting=true;this.controller.setStartPoint(n(i,this.elementBounds));window.addEventListener("pointermove",this.handleDrag);window.addEventListener("pointerup",this.handleDragEnd)}}handleDrag(i){if(this.enabled){this.controller.setEndPoint(n(i,this.elementBounds))}}async handleDragEnd(){var i,e;this.isInteracting=false;window.removeEventListener("pointermove",this.handleDrag);window.removeEventListener("pointerup",this.handleDragEnd);(i=this.crosshairCursorDisposable)===null||i===void 0?void 0:i.dispose();if(this.enabled){this.addWaitCursor();try{await this.controller.execute()}finally{(e=this.waitCursorDisposable)===null||e===void 0?void 0:e.dispose();this.addCrosshairCursor()}}}isPrimaryMouseButtonClick(i){return i.buttons===1}addCrosshairCursor(){var i,e;(i=this.crosshairCursorDisposable)===null||i===void 0?void 0:i.dispose();this.crosshairCursorDisposable=(e=this.api)===null||e===void 0?void 0:e.addCursor(h)}addWaitCursor(){var i,e;(i=this.waitCursorDisposable)===null||i===void 0?void 0:i.dispose();this.waitCursorDisposable=(e=this.api)===null||e===void 0?void 0:e.addCursor("wait")}}const a=()=>`:host{--viewer-box-query-outline-exclusive-color:#0099cc;--viewer-box-query-outline-exclusive-border-style:solid;--viewer-box-query-outline-inclusive-color:#00cc00;--viewer-box-query-outline-inclusive-border-style:dashed;--viewer-box-query-outline-border-radius:0.25rem;--viewer-box-query-outline-fill-opacity:0.25}.bounds{position:absolute}.outline{position:absolute;top:0;left:0;width:100%;height:100%;box-sizing:border-box;border-radius:var(--viewer-box-query-outline-border-radius)}:host([exclusive="true"]) .outline{border:3px var(--viewer-box-query-outline-exclusive-border-style) var(--viewer-box-query-outline-exclusive-color)}:host([inclusive="true"]) .outline{border:3px var(--viewer-box-query-outline-inclusive-border-style) var(--viewer-box-query-outline-inclusive-color)}.fill{position:absolute;top:0;left:0;width:100%;height:100%;opacity:var(--viewer-box-query-outline-fill-opacity);border-radius:var(--viewer-box-query-outline-border-radius)}:host([exclusive="true"]) .fill{background-color:var(--viewer-box-query-outline-exclusive-color)}:host([inclusive="true"]) .fill{background-color:var(--viewer-box-query-outline-inclusive-color)}`;const u=class{constructor(t){i(this,t);this.controllerChanged=e(this,"controllerChanged");this.operationType="clearAndSelect";this.handleScreenBoundsChanged=this.handleScreenBoundsChanged.bind(this);this.handleExecuteStarted=this.handleExecuteStarted.bind(this);this.handleExecuteComplete=this.handleExecuteComplete.bind(this)}componentWillLoad(){var i;this.model=(i=this.model)!==null&&i!==void 0?i:new l(this.mode);this.screenBoundsChangedDisposable=this.model.onScreenBoundsChanged(this.handleScreenBoundsChanged);this.handleViewerChanged(this.viewer);this.handleControllerChange(this.controller);this.handleDefaultOperationChange(this.operationType)}disconnectedCallback(){var i,e,t,s;(i=this.model)===null||i===void 0?void 0:i.reset();(e=this.screenBoundsChangedDisposable)===null||e===void 0?void 0:e.dispose();(t=this.operationStartedDisposable)===null||t===void 0?void 0:t.dispose();(s=this.operationCompleteDisposable)===null||s===void 0?void 0:s.dispose();this.deregisterInteractionHandler()}handleViewerChanged(i){this.deregisterInteractionHandler();if(this.model!=null&&i!=null){this.controller=new r(this.model,i);this.handleDefaultOperationChange(this.operationType);this.registerInteractionHandler(this.controller,i)}}handleDefaultOperationChange(i){switch(i){case"clearAndSelect":this.setDefaultClearAndSelectOperation();break;case"select":this.setDefaultSelectOperation();break;case"deselect":this.setDefaultDeselectOperation();break}}handleModeChange(i){var e;(e=this.model)===null||e===void 0?void 0:e.setMode(i)}handleControllerChange(i){var e,t;(e=this.operationStartedDisposable)===null||e===void 0?void 0:e.dispose();(t=this.operationCompleteDisposable)===null||t===void 0?void 0:t.dispose();this.operationStartedDisposable=i===null||i===void 0?void 0:i.onExecuteStarted(this.handleExecuteStarted);this.operationStartedDisposable=i===null||i===void 0?void 0:i.onExecuteComplete(this.handleExecuteComplete);this.controllerChanged.emit(this.controller)}render(){return t(s,{key:"f6486b363c74a4d9d9207fd1d33b058ff384280b"},t("vertex-viewer-layer",{key:"4247b1a8ed16f9282c5825ca134b3fb7f4f48ef9"},this.details!=null&&t("div",{key:"79c30a0d7d494c8beafb666d50484e0a524b1949",class:"bounds",style:{left:`${this.details.screenBounds.x}px`,top:`${this.details.screenBounds.y}px`,width:`${this.details.screenBounds.width}px`,height:`${this.details.screenBounds.height}px`}},t("slot",{key:"9678ec156727bad5ac6e0cac6790793d3445afe2",name:"bounds"},t("div",{key:"e01b158201e7e74e3783776a03b764c4ef997be5",class:"outline"}),t("div",{key:"7aa279e343a34a51c4630d4c1c168e26fd5622c5",class:"fill"})))))}handleScreenBoundsChanged(i){this.details=i;this.updateTypeAttribute(i===null||i===void 0?void 0:i.type)}handleExecuteStarted(){var i;(i=this.interactionHandler)===null||i===void 0?void 0:i.disable()}handleExecuteComplete(){var i;(i=this.interactionHandler)===null||i===void 0?void 0:i.enable()}async registerInteractionHandler(i,e){this.interactionHandler=new d(i);this.interactionHandlerDisposable=await e.registerInteractionHandler(this.interactionHandler)}deregisterInteractionHandler(){var i,e;(i=this.interactionHandlerDisposable)===null||i===void 0?void 0:i.dispose();(e=this.interactionHandler)===null||e===void 0?void 0:e.dispose();this.interactionHandler=undefined}updateTypeAttribute(i){this.hostEl.setAttribute("inclusive",`${i==="inclusive"}`);this.hostEl.setAttribute("exclusive",`${i==="exclusive"}`)}setDefaultClearAndSelectOperation(){var i,e;(i=this.controller)===null||i===void 0?void 0:i.setOperationTransform((i=>i.select()));(e=this.controller)===null||e===void 0?void 0:e.setAdditionalTransforms([i=>i.items.where((i=>i.withSelected())).deselect()])}setDefaultSelectOperation(){var i,e;(i=this.controller)===null||i===void 0?void 0:i.setOperationTransform((i=>i.select()));(e=this.controller)===null||e===void 0?void 0:e.setAdditionalTransforms([])}setDefaultDeselectOperation(){var i,e;(i=this.controller)===null||i===void 0?void 0:i.setOperationTransform((i=>i.deselect()));(e=this.controller)===null||e===void 0?void 0:e.setAdditionalTransforms([])}get hostEl(){return o(this)}static get watchers(){return{viewer:[{handleViewerChanged:0}],operationType:[{handleDefaultOperationChange:0}],mode:[{handleModeChange:0}],controller:[{handleControllerChange:0}]}}};u.style=a();export{u as vertex_viewer_box_query_tool};
|
|
5
|
+
//# sourceMappingURL=p-9d8ff406.entry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["VolumeIntersectionQueryInteractionHandler","constructor","controller","this","handleDragBegin","bind","handleDrag","handleDragEnd","enabled","initialize","element","api","addEventListener","addCrosshairCursor","dispose","_a","removeEventListener","window","_b","crosshairCursorDisposable","_c","waitCursorDisposable","undefined","disable","enable","event","isPrimaryMouseButtonClick","isInteracting","elementBounds","getBoundingClientRect","setStartPoint","getMouseClientPosition","setEndPoint","addWaitCursor","execute","buttons","addCursor","boxQueryCursor","viewerBoxQueryToolCss","ViewerBoxQueryTool","hostRef","operationType","handleScreenBoundsChanged","handleExecuteStarted","handleExecuteComplete","componentWillLoad","model","VolumeIntersectionQueryModel","mode","screenBoundsChangedDisposable","onScreenBoundsChanged","handleViewerChanged","viewer","handleControllerChange","handleDefaultOperationChange","disconnectedCallback","reset","operationStartedDisposable","_d","operationCompleteDisposable","deregisterInteractionHandler","newViewer","VolumeIntersectionQueryController","registerInteractionHandler","updatedOperationType","setDefaultClearAndSelectOperation","setDefaultSelectOperation","setDefaultDeselectOperation","handleModeChange","updatedMode","setMode","onExecuteStarted","onExecuteComplete","controllerChanged","emit","render","h","Host","key","details","class","style","left","screenBounds","x","top","y","width","height","name","updateTypeAttribute","type","interactionHandler","interactionHandlerDisposable","hostEl","setAttribute","setOperationTransform","builder","select","setAdditionalTransforms","op","items","where","q","withSelected","deselect"],"sources":["src/lib/volume-intersection/interactions.ts","src/components/viewer-box-query-tool/viewer-box-query-tool.css?tag=vertex-viewer-box-query-tool&encapsulation=shadow","src/components/viewer-box-query-tool/viewer-box-query-tool.tsx"],"sourcesContent":["import { Disposable } from '@vertexvis/utils';\n\nimport { boxQueryCursor } from '../cursors';\nimport { getMouseClientPosition } from '../dom';\nimport { InteractionApi } from '../interactions';\nimport { InteractionHandler } from '../interactions/interactionHandler';\nimport { VolumeIntersectionQueryController } from './controller';\n\nexport class VolumeIntersectionQueryInteractionHandler implements InteractionHandler {\n private element?: HTMLElement;\n private api?: InteractionApi;\n private isInteracting?: boolean;\n private enabled?: boolean;\n private elementBounds?: DOMRect;\n private crosshairCursorDisposable?: Disposable;\n private waitCursorDisposable?: Disposable;\n\n public constructor(private controller: VolumeIntersectionQueryController) {\n this.handleDragBegin = this.handleDragBegin.bind(this);\n this.handleDrag = this.handleDrag.bind(this);\n this.handleDragEnd = this.handleDragEnd.bind(this);\n\n this.enabled = true;\n }\n\n public initialize(element: HTMLElement, api: InteractionApi): void {\n this.element = element;\n this.api = api;\n\n this.element.addEventListener('pointerdown', this.handleDragBegin);\n this.addCrosshairCursor();\n }\n\n public dispose(): void {\n this.element?.removeEventListener('pointerdown', this.handleDragBegin);\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleDragEnd);\n this.crosshairCursorDisposable?.dispose();\n this.waitCursorDisposable?.dispose();\n\n this.element = undefined;\n this.api = undefined;\n this.enabled = true;\n }\n\n public disable(): void {\n this.enabled = false;\n }\n\n public enable(): void {\n this.enabled = true;\n }\n\n private handleDragBegin(event: PointerEvent): void {\n if (\n this.enabled &&\n this.isPrimaryMouseButtonClick(event) &&\n !this.isInteracting\n ) {\n this.elementBounds = this.element?.getBoundingClientRect();\n this.isInteracting = true;\n this.controller.setStartPoint(\n getMouseClientPosition(event, this.elementBounds),\n );\n\n window.addEventListener('pointermove', this.handleDrag);\n window.addEventListener('pointerup', this.handleDragEnd);\n }\n }\n\n private handleDrag(event: PointerEvent): void {\n if (this.enabled) {\n this.controller.setEndPoint(\n getMouseClientPosition(event, this.elementBounds),\n );\n }\n }\n\n private async handleDragEnd(): Promise<void> {\n this.isInteracting = false;\n\n window.removeEventListener('pointermove', this.handleDrag);\n window.removeEventListener('pointerup', this.handleDragEnd);\n\n this.crosshairCursorDisposable?.dispose();\n if (this.enabled) {\n this.addWaitCursor();\n try {\n await this.controller.execute();\n } finally {\n this.waitCursorDisposable?.dispose();\n this.addCrosshairCursor();\n }\n }\n }\n\n private isPrimaryMouseButtonClick(event: PointerEvent): boolean {\n return event.buttons === 1;\n }\n\n private addCrosshairCursor(): void {\n this.crosshairCursorDisposable?.dispose();\n this.crosshairCursorDisposable = this.api?.addCursor(boxQueryCursor);\n }\n\n private addWaitCursor(): void {\n this.waitCursorDisposable?.dispose();\n this.waitCursorDisposable = this.api?.addCursor('wait');\n }\n}\n",":host {\n /**\n * @prop --viewer-box-query-outline-exclusive-color: A CSS color that\n * specifies the color of box for an exclusive query. This will\n * be used in combination with `--viewer-box-query-outline-fill-opacity`\n * for the background color of the box. Defaults to `#0099cc`.\n */\n --viewer-box-query-outline-exclusive-color: #0099cc;\n /**\n * @prop --viewer-box-query-outline-exclusive-border-style: A border\n * style that specifies the type of border to display around the box for an\n * exclusive query. Defaults to `solid`.\n */\n --viewer-box-query-outline-exclusive-border-style: solid;\n /**\n * @prop --viewer-box-query-outline-inclusive-color: A CSS color that\n * specifies the color of box for an inclusive query. This will\n * be used in combination with `--viewer-box-query-outline-fill-opacity`\n * for the background color of the box. Defaults to `#00cc00`.\n */\n --viewer-box-query-outline-inclusive-color: #00cc00;\n /**\n * @prop --viewer-box-query-outline-inclusive-border-style: A border\n * style that specifies the type of border to display around the box for an\n * inclusive query. Defaults to `dashed`.\n */\n --viewer-box-query-outline-inclusive-border-style: dashed;\n /**\n * @prop --viewer-box-query-outline-border-radius: A CSS length that\n * specifies the border radius of the drawn box. Defaults to `0.25rem`.\n */\n --viewer-box-query-outline-border-radius: 0.25rem;\n /**\n * @prop--viewer-box-query-outline-fill-opacity: A number between \n * 0 and 1 that specifies the opacity of the background of the drawn box.\n * Defaults to `0.25`.\n */\n --viewer-box-query-outline-fill-opacity: 0.25;\n}\n\n.bounds {\n position: absolute;\n}\n\n.outline {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n border-radius: var(--viewer-box-query-outline-border-radius);\n}\n\n:host([exclusive=\"true\"]) .outline {\n border: 3px var(--viewer-box-query-outline-exclusive-border-style) var(--viewer-box-query-outline-exclusive-color);\n}\n\n:host([inclusive=\"true\"]) .outline {\n border: 3px var(--viewer-box-query-outline-inclusive-border-style) var(--viewer-box-query-outline-inclusive-color);\n}\n\n.fill {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: var(--viewer-box-query-outline-fill-opacity);\n border-radius: var(--viewer-box-query-outline-border-radius);\n}\n\n:host([exclusive=\"true\"]) .fill {\n background-color: var(--viewer-box-query-outline-exclusive-color);\n}\n\n:host([inclusive=\"true\"]) .fill {\n background-color: var(--viewer-box-query-outline-inclusive-color);\n}","import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Prop,\n State,\n Watch,\n} from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nimport { VolumeIntersectionQueryController } from '../../lib/volume-intersection/controller';\nimport { VolumeIntersectionQueryInteractionHandler } from '../../lib/volume-intersection/interactions';\nimport {\n QueryType,\n VolumeIntersectionQueryDetails,\n VolumeIntersectionQueryModel,\n} from '../../lib/volume-intersection/model';\nimport {\n VolumeIntersectionQueryMode,\n VolumeIntersectionQueryType,\n} from './types';\n\n/**\n * The `ViewerBoxQueryTool` allows for the drawing of a \"box\" on screen to represent\n * a query for items in a specific area of the viewer. This tool then allows for an\n * operation to be performed on the items contained (exclusive) by the box or both\n * contained by and intersecting with (inclusive) the box.\n */\n@Component({\n tag: 'vertex-viewer-box-query-tool',\n styleUrl: 'viewer-box-query-tool.css',\n shadow: true,\n})\nexport class ViewerBoxQueryTool {\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 controller that is responsible for performing operations using the\n * volume intersection query defined by the drawn box and updating the model.\n */\n @Prop({ mutable: true })\n public controller?: VolumeIntersectionQueryController;\n\n /**\n * The model that contains the points representing the corners of the box\n * displayed on screen, the type of the query to be performed, and methods\n * for setting these values.\n */\n @Prop({ mutable: true })\n public model?: VolumeIntersectionQueryModel;\n\n /**\n * The default operation to perform when a drag has completed and the intersection\n * query will be run. Defaults to `clearAndSelect`, and can be changed to `select` or `deselect`.\n *\n * `clearAndSelect` will clear all existing selection, and select the results of the query.\n * `select` will maintain existing selection, and select the results of the query.\n * `deselect` will maintain existing selection, and deselect the results of the query.\n *\n * The operation behavior for this intersection query tool can also be changed by\n * providing a custom implementation of the `VolumeIntersectionQueryController`, or\n * by using the `setOperationTransform` method of the default controller.\n */\n @Prop()\n public operationType: VolumeIntersectionQueryType = 'clearAndSelect';\n\n /**\n * An optional value to specify a singular mode of intersection query. This value\n * defaults to `undefined`, which will indicate that both `exclusive` and `inclusive`\n * queries should be made, with `inclusive` being represented by a left to right\n * drag behavior and `exclusive` being represented by a right to left drag.\n *\n * Setting this value to `inclusive` will cause dragging left to right and left to right\n * to result in an `inclusive` query, and the box will only be styled for `inclusive` queries.\n *\n * Setting this value to `exclusive` will cause dragging left to right and left to right\n * to result in an `exclusive` query, and the box will only be styled for `exclusive` queries.\n */\n @Prop()\n public mode?: VolumeIntersectionQueryMode;\n\n @State()\n private details?: VolumeIntersectionQueryDetails;\n\n /**\n * Event emitted when the `VolumeIntersectionQueryController` associated with this tool changes.\n */\n @Event()\n public controllerChanged!: EventEmitter<VolumeIntersectionQueryController>;\n\n @Element()\n private hostEl!: HTMLVertexViewerBoxQueryToolElement;\n\n private interactionHandler?: VolumeIntersectionQueryInteractionHandler;\n private interactionHandlerDisposable?: Disposable;\n\n private operationStartedDisposable?: Disposable;\n private operationCompleteDisposable?: Disposable;\n private screenBoundsChangedDisposable?: Disposable;\n\n public constructor() {\n this.handleScreenBoundsChanged = this.handleScreenBoundsChanged.bind(this);\n this.handleExecuteStarted = this.handleExecuteStarted.bind(this);\n this.handleExecuteComplete = this.handleExecuteComplete.bind(this);\n }\n\n public componentWillLoad(): void {\n this.model = this.model ?? new VolumeIntersectionQueryModel(this.mode);\n\n this.screenBoundsChangedDisposable = this.model.onScreenBoundsChanged(\n this.handleScreenBoundsChanged,\n );\n\n this.handleViewerChanged(this.viewer);\n this.handleControllerChange(this.controller);\n this.handleDefaultOperationChange(this.operationType);\n }\n\n public disconnectedCallback(): void {\n this.model?.reset();\n this.screenBoundsChangedDisposable?.dispose();\n this.operationStartedDisposable?.dispose();\n this.operationCompleteDisposable?.dispose();\n this.deregisterInteractionHandler();\n }\n\n /**\n * @ignore\n */\n @Watch('viewer')\n protected handleViewerChanged(newViewer?: HTMLVertexViewerElement): void {\n this.deregisterInteractionHandler();\n\n if (this.model != null && newViewer != null) {\n this.controller = new VolumeIntersectionQueryController(\n this.model,\n newViewer,\n );\n this.handleDefaultOperationChange(this.operationType);\n this.registerInteractionHandler(this.controller, newViewer);\n }\n }\n\n /**\n * @ignore\n */\n @Watch('operationType')\n protected handleDefaultOperationChange(\n updatedOperationType: VolumeIntersectionQueryType,\n ): void {\n switch (updatedOperationType) {\n case 'clearAndSelect':\n this.setDefaultClearAndSelectOperation();\n break;\n case 'select':\n this.setDefaultSelectOperation();\n break;\n case 'deselect':\n this.setDefaultDeselectOperation();\n break;\n }\n }\n\n /**\n * @ignore\n */\n @Watch('mode')\n protected handleModeChange(updatedMode?: VolumeIntersectionQueryMode): void {\n this.model?.setMode(updatedMode);\n }\n\n /**\n * @ignore\n */\n @Watch('controller')\n protected handleControllerChange(\n controller?: VolumeIntersectionQueryController,\n ): void {\n this.operationStartedDisposable?.dispose();\n this.operationCompleteDisposable?.dispose();\n\n this.operationStartedDisposable = controller?.onExecuteStarted(\n this.handleExecuteStarted,\n );\n this.operationStartedDisposable = controller?.onExecuteComplete(\n this.handleExecuteComplete,\n );\n\n this.controllerChanged.emit(this.controller);\n }\n\n /**\n * @ignore\n */\n protected render(): h.JSX.IntrinsicElements {\n return (\n <Host>\n <vertex-viewer-layer>\n {this.details != null && (\n <div\n class=\"bounds\"\n style={{\n left: `${this.details.screenBounds.x}px`,\n top: `${this.details.screenBounds.y}px`,\n width: `${this.details.screenBounds.width}px`,\n height: `${this.details.screenBounds.height}px`,\n }}\n >\n <slot name=\"bounds\">\n <div class=\"outline\"></div>\n <div class=\"fill\"></div>\n </slot>\n </div>\n )}\n </vertex-viewer-layer>\n </Host>\n );\n }\n\n private handleScreenBoundsChanged(\n details?: VolumeIntersectionQueryDetails,\n ): void {\n this.details = details;\n\n this.updateTypeAttribute(details?.type);\n }\n\n private handleExecuteStarted(): void {\n this.interactionHandler?.disable();\n }\n\n private handleExecuteComplete(): void {\n this.interactionHandler?.enable();\n }\n\n private async registerInteractionHandler(\n controller: VolumeIntersectionQueryController,\n viewer: HTMLVertexViewerElement,\n ): Promise<void> {\n this.interactionHandler = new VolumeIntersectionQueryInteractionHandler(\n controller,\n );\n this.interactionHandlerDisposable = await viewer.registerInteractionHandler(\n this.interactionHandler,\n );\n }\n\n private deregisterInteractionHandler(): void {\n this.interactionHandlerDisposable?.dispose();\n this.interactionHandler?.dispose();\n this.interactionHandler = undefined;\n }\n\n private updateTypeAttribute(type?: QueryType): void {\n this.hostEl.setAttribute('inclusive', `${type === 'inclusive'}`);\n this.hostEl.setAttribute('exclusive', `${type === 'exclusive'}`);\n }\n\n private setDefaultClearAndSelectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.select());\n this.controller?.setAdditionalTransforms([\n (op) => op.items.where((q) => q.withSelected()).deselect(),\n ]);\n }\n\n private setDefaultSelectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.select());\n this.controller?.setAdditionalTransforms([]);\n }\n\n private setDefaultDeselectOperation(): void {\n this.controller?.setOperationTransform((builder) => builder.deselect());\n this.controller?.setAdditionalTransforms([]);\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-BDvACHun.js","sources":["src/lib/model-views/mapper.ts","src/lib/pmi/mapper.ts"],"sourcesContent":["import type { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { ModelView as PBModelView } from '@vertexvis/scene-view-protos/core/protos/model_views_pb';\nimport { ListItemModelViewsResponse } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb';\nimport { Mapper as M, UUID } from '@vertexvis/utils';\n\nimport {\n fromPbCamera,\n fromPbUuid2l,\n mapCursor,\n toPbJsUuid2l,\n} from '../mappers';\nimport { ModelView, ModelViewListResponse } from './types';\n\nconst mapModelView: M.Func<PBModelView.AsObject, ModelView> = M.defineMapper(\n M.read(\n M.mapRequiredProp('id', fromPbUuid2l),\n M.getProp('displayName'),\n M.mapRequiredProp('partRevisionId', fromPbUuid2l),\n M.mapRequiredProp('camera', fromPbCamera)
|
|
1
|
+
{"version":3,"file":"p-BDvACHun.js","sources":["src/lib/model-views/mapper.ts","src/lib/pmi/mapper.ts"],"sourcesContent":["import type { vertexvis } from '@vertexvis/frame-streaming-protos';\nimport { ModelView as PBModelView } from '@vertexvis/scene-view-protos/core/protos/model_views_pb';\nimport { ListItemModelViewsResponse } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb';\nimport { Mapper as M, UUID } from '@vertexvis/utils';\n\nimport {\n fromPbCamera,\n fromPbUuid2l,\n mapCursor,\n toPbJsUuid2l,\n} from '../mappers';\nimport { ModelView, ModelViewListResponse } from './types';\n\nconst mapModelView: M.Func<PBModelView.AsObject, ModelView> = M.defineMapper(\n M.read(\n M.mapRequiredProp('id', fromPbUuid2l),\n M.getProp('displayName'),\n M.mapRequiredProp('partRevisionId', fromPbUuid2l),\n M.mapRequiredProp('camera', fromPbCamera),\n ),\n ([id, displayName, partRevisionId, camera]) => ({\n id,\n displayName,\n partRevisionId,\n camera,\n }),\n);\n\nconst mapListItemModelViewsResponse: M.Func<\n ListItemModelViewsResponse.AsObject,\n ModelViewListResponse\n> = M.defineMapper(\n M.read(\n M.mapProp('modelViewsList', M.mapArray(mapModelView)),\n M.mapProp('nextPageCursor', mapCursor),\n ),\n ([modelViews, next]) => ({ modelViews, paging: { next } }),\n);\n\nexport const mapListItemModelViewsResponseOrThrow = M.ifInvalidThrow(\n mapListItemModelViewsResponse,\n);\n\nconst mapItemModelView: M.Func<\n { modelViewId: UUID.UUID; sceneItemId: UUID.UUID },\n vertexvis.protobuf.core.IItemModelView\n> = M.defineMapper(\n M.read(\n M.mapProp('modelViewId', toPbJsUuid2l),\n M.mapProp('sceneItemId', toPbJsUuid2l),\n ),\n ([modelViewId, sceneItemId]) => ({ modelViewId, sceneItemId }),\n);\n\nexport const mapItemModelViewOrThrow = M.ifInvalidThrow(mapItemModelView);\n","import { PmiAnnotation as PBPmiAnnotation } from '@vertexvis/scene-view-protos/core/protos/model_views_pb';\nimport { ListPmiAnnotationsResponse } from '@vertexvis/scene-view-protos/sceneview/protos/scene_view_api_pb';\nimport { Mapper as M } from '@vertexvis/utils';\n\nimport { fromPbUuid2l, mapCursor } from '../mappers';\nimport { PmiAnnotation, PmiAnnotationListResponse } from './types';\n\nconst mapPmiAnnotation: M.Func<PBPmiAnnotation.AsObject, PmiAnnotation> =\n M.defineMapper(\n M.read(M.mapRequiredProp('id', fromPbUuid2l), M.getProp('displayName')),\n ([id, displayName]) => ({ id, displayName }),\n );\n\nconst mapListPmiAnnotationsResponse: M.Func<\n ListPmiAnnotationsResponse.AsObject,\n PmiAnnotationListResponse\n> = M.defineMapper(\n M.read(\n M.mapProp('annotationsList', M.mapArray(mapPmiAnnotation)),\n M.mapProp('nextPageCursor', mapCursor),\n ),\n ([annotations, next]) => ({ annotations, paging: { next } }),\n);\n\nexport const mapListPmiAnnotationsResponseOrThrow = M.ifInvalidThrow(\n mapListPmiAnnotationsResponse,\n);\n"],"names":["M"],"mappings":";;;;;;;;;;;AAaA,MAAM,YAAY,GAA4CA,MAAC,CAAC,YAAY,CAC1EA,MAAC,CAAC,IAAI,CACJA,MAAC,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,EACrCA,MAAC,CAAC,OAAO,CAAC,aAAa,CAAC,EACxBA,MAAC,CAAC,eAAe,CAAC,gBAAgB,EAAE,YAAY,CAAC,EACjDA,MAAC,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAC1C,EACD,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,MAAM;IAC9C,EAAE;IACF,WAAW;IACX,cAAc;IACd,MAAM;AACP,CAAA,CAAC,CACH;AAED,MAAM,6BAA6B,GAG/BA,MAAC,CAAC,YAAY,CAChBA,MAAC,CAAC,IAAI,CACJA,MAAC,CAAC,OAAO,CAAC,gBAAgB,EAAEA,MAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EACrDA,MAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CACvC,EACD,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAC3D;AAEM,MAAM,oCAAoC,GAAGA,MAAC,CAAC,cAAc,CAClE,6BAA6B;AAG/B,MAAM,gBAAgB,GAGlBA,MAAC,CAAC,YAAY,CAChBA,MAAC,CAAC,IAAI,CACJA,MAAC,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,EACtCA,MAAC,CAAC,OAAO,CAAC,aAAa,EAAE,YAAY,CAAC,CACvC,EACD,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAC/D;AAEM,MAAM,uBAAuB,GAAGA,MAAC,CAAC,cAAc,CAAC,gBAAgB;;AC/CxE,MAAM,gBAAgB,GACpBA,MAAC,CAAC,YAAY,CACZA,MAAC,CAAC,IAAI,CAACA,MAAC,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,EAAEA,MAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EACvE,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAC7C;AAEH,MAAM,6BAA6B,GAG/BA,MAAC,CAAC,YAAY,CAChBA,MAAC,CAAC,IAAI,CACJA,MAAC,CAAC,OAAO,CAAC,iBAAiB,EAAEA,MAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC,EAC1DA,MAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,SAAS,CAAC,CACvC,EACD,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAC7D;AAEM,MAAM,oCAAoC,GAAGA,MAAC,CAAC,cAAc,CAClE,6BAA6B;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-BIkuvTVH.js","sources":["src/lib/pins/controller.ts","src/components/viewer-pin-tool/utils.ts","src/lib/pins/model.ts"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\n\nimport {\n Pin,\n PinModel,\n PinStyleAttributes,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from './model';\n\nexport interface Draggable {\n id: string;\n lastPoint?: Point.Point;\n}\n\n/**\n * The `PinController` is responsible for adding pin entities to the viewer canvas\n */\nexport class PinController {\n private draggable?: Draggable;\n\n public constructor(\n private model: PinModel,\n private mode: ViewerPinToolMode = 'view',\n private type: ViewerPinToolType = 'pin-icon',\n private styleAttributes: PinStyleAttributes | undefined = undefined\n ) {}\n\n /**\n * Registers an entity to place on the canvas and places the pin on the associated part.\n *\n * @param pin The pin entity\n * @returns A void promise\n */\n public addPin(pin: Pin): void {\n this.model.addPin(pin);\n }\n\n /**\n * Clears all entities and returns a promise that resolves with an empty list\n * of pin results.\n */\n public clearPins(): void {\n this.model.clearPins();\n }\n\n /**\n * Deregisters an entity and performs a pin if this entity was\n * removed.\n *\n * @param entity The entity to remove.\n * @returns A promise that resolves with the results after removing this\n * entity.\n */\n public removePin(pin: Pin): void {\n this.model.removePin(pin);\n }\n\n /**\n * Registers a set of entities and adds a pin\n *\n * @param entities The pin entities to draw.\n * @returns A promise that resolves with the results after registering these\n * entities.\n */\n public setPins(pins: Set<Pin>): void {\n this.model.setPins(pins);\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been added.\n */\n public setPin(pin: Pin): void {\n this.model.setPin(pin);\n }\n\n /**\n * Updates an existing pin\n * @param pin A pin to set\n * @returns `true` if the entity has been updated, false otherwise\n */\n public updatePin(pin: Pin): void {\n this.model.updatePin(pin);\n }\n\n /**\n * Tells the controller which pin is selected in the model\n * @param pinId\n */\n public setSelectedPinId(pinId?: string): void {\n this.model.setSelectedPin(pinId);\n }\n\n public getToolMode(): ViewerPinToolMode {\n return this.mode;\n }\n\n public getToolType(): ViewerPinToolType {\n return this.type;\n }\n\n public setToolMode(mode: ViewerPinToolMode): void {\n this.mode = mode;\n }\n\n public setToolType(type: ViewerPinToolType): void {\n this.type = type;\n }\n\n public getDraggable(): Draggable | undefined {\n return this.draggable;\n }\n\n public setDraggable(draggable: Draggable | undefined): void {\n this.draggable = draggable;\n }\n\n public setPrimaryColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n primaryColor: color,\n };\n }\n\n public setAccentColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n accentColor: color,\n };\n }\n\n public getStyleAttributes(): PinStyleAttributes | undefined {\n return this.styleAttributes;\n }\n\n public updateDraggable(\n draggable: Draggable,\n worldPosition: Vector3.Vector3,\n partId?: string\n ): void {\n if (this.draggable != null) {\n this.draggable = draggable;\n }\n const pin = this.model.getPinById(draggable.id);\n if (pin != null) {\n this.updatePin({\n ...pin,\n worldPosition,\n partId,\n });\n }\n }\n}\n","import { Dimensions, Point } from '@vertexvis/geometry';\nimport { Range } from '@vertexvis/utils';\n\nexport function constrainRelativePoint(\n pt: Point.Point,\n range: Range.Range\n): Point.Point {\n const constrainedX = Math.max(range.start, Math.min(range.end, pt.x));\n const constrainedY = Math.max(range.start, Math.min(range.end, pt.y));\n\n return Point.create(constrainedX, constrainedY);\n}\n\n/**\n * Translates a point in relative units to a point in screen units.\n */\nexport function translatePointToScreen(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions\n): Point.Point {\n return Point.add(\n Point.scale(pt, canvasDimensions.width, canvasDimensions.height),\n Dimensions.center(canvasDimensions)\n );\n}\n\n/**\n * Translates a point in screen units to a point in relative units.\n */\nexport function translatePointToRelative(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n includeOffset?: boolean,\n xOffset?: number,\n yOffset?: number\n): Point.Point {\n const verticalScaleFactor = 1 / canvasDimensions.height;\n const horizontalScaleFactor = 1 / canvasDimensions.width;\n const canvasCenterPoint = Dimensions.center(canvasDimensions);\n\n const point = Point.scale(\n Point.subtract(pt, canvasCenterPoint),\n horizontalScaleFactor,\n verticalScaleFactor\n );\n\n if (includeOffset) {\n const offset = Point.scale(\n Point.create(xOffset, yOffset),\n horizontalScaleFactor,\n verticalScaleFactor\n );\n\n // We want to place the label towards the center of the screen.\n // The given point corresponds to the upper left corner of the label, so increase the offset\n // when placing it to the left or above to ensure that part of the label line is visible\n const centerIsToTheRightInXDirection = canvasCenterPoint.x > pt.x;\n const xOffsetCalculated = centerIsToTheRightInXDirection\n ? offset.x\n : -3 * offset.x;\n\n const centerIsBelowInYDirection = canvasCenterPoint.y > pt.y;\n const yOffsetCalculated = centerIsBelowInYDirection\n ? offset.y\n : -3 * offset.y;\n\n const offsetPoint = Point.add(\n point,\n Point.create(xOffsetCalculated, yOffsetCalculated)\n );\n\n return constrainRelativePoint(offsetPoint, Range.create(-0.5, 0.5));\n } else {\n return constrainRelativePoint(point, Range.create(-0.5, 0.5));\n }\n}\n","import { Color, Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\n/**\n * The types of pins that can be performed by this tool.\n */\nexport type ViewerPinToolType = 'pin-icon' | 'pin-text';\n\n/**\n * The mode of the pin tool\n */\nexport type ViewerPinToolMode = 'edit' | 'view';\n\n/**\n * A model representing the state of pins.\n *\n */\n\nimport { Point, Vector3 } from '@vertexvis/geometry';\n\ninterface BasePinAttributes {\n style?: PinStyleAttributes;\n}\n\ninterface BasePin {\n id: string;\n worldPosition: Vector3.Vector3;\n partId?: string;\n attributes?: BasePinAttributes;\n}\n\nexport interface TextPin extends BasePin {\n type: 'text';\n label: PinLabel;\n}\n\n// Future: Support custom icons.\nexport interface IconPin extends BasePin {\n type: 'icon';\n}\n\nexport type Pin = IconPin | TextPin;\n\nexport interface PinLabel {\n point: Point.Point;\n text?: string;\n}\n\nexport function isTextPin(pin?: Pin): pin is TextPin {\n return pin?.type === 'text';\n}\n\nexport interface PinStyleAttributes {\n primaryColor?: Color.Color | string;\n accentColor?: Color.Color | string;\n}\n\nexport function isIconPin(pin?: Pin): pin is Pin {\n return pin?.type === 'icon';\n}\n\nfunction convertColorToString(color: Color.Color | string): string {\n return typeof color === 'string' ? color : Color.toHexString(color);\n}\nexport function getPinColors(pin?: Pin): {\n primaryColor?: string;\n accentColor?: string;\n} {\n return {\n primaryColor:\n pin?.attributes?.style?.primaryColor == null\n ? undefined\n : convertColorToString(pin?.attributes?.style?.primaryColor),\n accentColor:\n pin?.attributes?.style?.accentColor == null\n ? undefined\n : convertColorToString(pin?.attributes?.style?.accentColor),\n };\n}\n\nexport class PinModel {\n private entities: Record<string, Pin> = {};\n private selectedPinId?: string;\n\n private readonly entityAdded = new EventDispatcher<Pin>();\n private readonly entityUpdated = new EventDispatcher<Pin>();\n private readonly entitiesChanged = new EventDispatcher<Pin[]>();\n private readonly selectionChanged = new EventDispatcher<string | undefined>();\n\n /**\n * Registers an entity to be drawn in the canvas\n *\n * @param pin A pin entity to draw.\n * @returns `true` if the entity has been added.\n */\n public addPin(pin: Pin, suppressEvent = false): boolean {\n if (this.entities[pin.id] == null) {\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n\n if (!suppressEvent) {\n this.entitiesChanged.emit(this.getPins());\n this.entityAdded.emit(pin);\n }\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Clears all registered entities from the model.\n */\n public clearPins(): void {\n this.getPins().forEach((e) => this.removePin(e));\n }\n\n /**\n * Returns all the entities registered with the model.\n */\n public getPins(): Pin[] {\n return Object.keys(this.entities).map((key) => this.entities[key]);\n }\n\n /**\n * Returns single entity by id if present in the model.\n */\n public getPinById(id: string): Pin | undefined {\n return this.entities[id];\n }\n\n public getSelectedPinId(): string | undefined {\n return this.selectedPinId;\n }\n\n /**\n * Unregisters an entity from the model.\n *\n * @param entity The entity to remove.\n * @returns `true` if the entity was removed.\n */\n public removePin(entity: Pin): boolean {\n if (this.entities[entity.id] != null) {\n delete this.entities[entity.id];\n this.entitiesChanged.emit(this.getPins());\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param entities A set of entities to draw.\n * @returns `true` if the entity has been added.\n */\n public setPins(pins: Set<Pin>): boolean {\n this.clearPins();\n pins.forEach((e) => this.addPin(e, true));\n this.entitiesChanged.emit(this.getPins());\n\n return true;\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been set\n */\n public setPin(pin: Pin): boolean {\n const isNewPin = this.entities[pin.id] == null;\n\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n\n this.entitiesChanged.emit(this.getPins());\n if (isNewPin) {\n this.entityAdded.emit(pin);\n }\n\n return true;\n }\n\n /**\n * Updates a pin in the model.\n *\n * @param pin A pin to update\n * @returns `true` if the entity has been updated\n */\n public updatePin(pin: Pin): boolean {\n const pinById = this.getPinById(pin.id);\n if (pinById != null) {\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n this.entitiesChanged.emit(this.getPins());\n this.entityUpdated.emit(pin);\n\n return true;\n }\n return false;\n }\n\n /**\n * Registers an event listener that will be invoked when the model's\n * pin entities change.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntitiesChanged(listener: Listener<Pin[]>): Disposable {\n return this.entitiesChanged.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when a new pin\n * is added to the model.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntityAdded(listener: Listener<Pin>): Disposable {\n return this.entityAdded.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when a pin\n * is updated in the model.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntityUpdated(listener: Listener<Pin>): Disposable {\n return this.entityUpdated.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when the model's\n * pin selection changes\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onSelectionChange(listener: Listener<string | undefined>): Disposable {\n return this.selectionChanged.on(listener);\n }\n\n /**\n * Sets the selected pin id\n * @param pinId\n */\n public setSelectedPin(pinId?: string): void {\n this.selectedPinId = pinId;\n this.selectionChanged.emit(this.selectedPinId);\n }\n}\n"],"names":["Point","Dimensions","point","Range","color","Color"],"mappings":";;;;;;AAgBA;;AAEG;MACU,aAAa,CAAA;AAGxB,IAAA,WAAA,CACU,KAAe,EACf,IAAA,GAA0B,MAAM,EAChC,IAAA,GAA0B,UAAU,EACpC,eAAA,GAAkD,SAAS,EAAA;AAH3D,QAAA,IAAA,CAAA,KAAK,GAAL,KAAK;AACL,QAAA,IAAA,CAAA,IAAI,GAAJ,IAAI;AACJ,QAAA,IAAA,CAAA,IAAI,GAAJ,IAAI;AACJ,QAAA,IAAA,CAAA,eAAe,GAAf,eAAe;;AAGzB;;;;;AAKG;AACI,IAAA,MAAM,CAAC,GAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;;AAGxB;;;AAGG;IACI,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;;AAGxB;;;;;;;AAOG;AACI,IAAA,SAAS,CAAC,GAAQ,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;;AAG3B;;;;;;AAMG;AACI,IAAA,OAAO,CAAC,IAAc,EAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;;AAG1B;;;;;AAKG;AACI,IAAA,MAAM,CAAC,GAAQ,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;;AAGxB;;;;AAIG;AACI,IAAA,SAAS,CAAC,GAAQ,EAAA;AACvB,QAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC;;AAG3B;;;AAGG;AACI,IAAA,gBAAgB,CAAC,KAAc,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC;;IAG3B,WAAW,GAAA;QAChB,OAAO,IAAI,CAAC,IAAI;;IAGX,WAAW,GAAA;QAChB,OAAO,IAAI,CAAC,IAAI;;AAGX,IAAA,WAAW,CAAC,IAAuB,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;AAGX,IAAA,WAAW,CAAC,IAAuB,EAAA;AACxC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;;IAGX,YAAY,GAAA;QACjB,OAAO,IAAI,CAAC,SAAS;;AAGhB,IAAA,YAAY,CAAC,SAAgC,EAAA;AAClD,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;AAGrB,IAAA,eAAe,CAAC,KAA4B,EAAA;QACjD,IAAI,CAAC,eAAe,GAAG;YACrB,GAAG,IAAI,CAAC,eAAe;AACvB,YAAA,YAAY,EAAE,KAAK;SACpB;;AAGI,IAAA,cAAc,CAAC,KAA4B,EAAA;QAChD,IAAI,CAAC,eAAe,GAAG;YACrB,GAAG,IAAI,CAAC,eAAe;AACvB,YAAA,WAAW,EAAE,KAAK;SACnB;;IAGI,kBAAkB,GAAA;QACvB,OAAO,IAAI,CAAC,eAAe;;AAGtB,IAAA,eAAe,CACpB,SAAoB,EACpB,aAA8B,EAC9B,MAAe,EAAA;AAEf,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,EAAE;AAC1B,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS;;AAE5B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;AAC/C,QAAA,IAAI,GAAG,IAAI,IAAI,EAAE;YACf,IAAI,CAAC,SAAS,CAAC;AACb,gBAAA,GAAG,GAAG;gBACN,aAAa;gBACb,MAAM;AACP,aAAA,CAAC;;;AAGP;;ACzJK,SAAU,sBAAsB,CACpC,EAAe,EACf,KAAkB,EAAA;IAElB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAErE,OAAOA,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC;AACjD;AAEA;;AAEG;AACG,SAAU,sBAAsB,CACpC,EAAe,EACf,gBAAuC,EAAA;IAEvC,OAAOA,KAAK,CAAC,GAAG,CACdA,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,MAAM,CAAC,EAChEC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CACpC;AACH;AAEA;;AAEG;AACG,SAAU,wBAAwB,CACtC,EAAe,EACf,gBAAuC,EACvC,aAAuB,EACvB,OAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,MAAM,mBAAmB,GAAG,CAAC,GAAG,gBAAgB,CAAC,MAAM;AACvD,IAAA,MAAM,qBAAqB,GAAG,CAAC,GAAG,gBAAgB,CAAC,KAAK;IACxD,MAAM,iBAAiB,GAAGA,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC;AAE7D,IAAA,MAAMC,OAAK,GAAGF,KAAK,CAAC,KAAK,CACvBA,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,iBAAiB,CAAC,EACrC,qBAAqB,EACrB,mBAAmB,CACpB;IAED,IAAI,aAAa,EAAE;AACjB,QAAA,MAAM,MAAM,GAAGA,KAAK,CAAC,KAAK,CACxBA,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,EAC9B,qBAAqB,EACrB,mBAAmB,CACpB;;;;QAKD,MAAM,8BAA8B,GAAG,iBAAiB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACjE,MAAM,iBAAiB,GAAG;cACtB,MAAM,CAAC;AACT,cAAE,EAAE,GAAG,MAAM,CAAC,CAAC;QAEjB,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5D,MAAM,iBAAiB,GAAG;cACtB,MAAM,CAAC;AACT,cAAE,EAAE,GAAG,MAAM,CAAC,CAAC;AAEjB,QAAA,MAAM,WAAW,GAAGA,KAAK,CAAC,GAAG,CAC3BE,OAAK,EACLF,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CACnD;AAED,QAAA,OAAO,sBAAsB,CAAC,WAAW,EAAEG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;;SAC9D;AACL,QAAA,OAAO,sBAAsB,CAACD,OAAK,EAAEC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;;AAEjE;;AC5BM,SAAU,SAAS,CAAC,GAAS,EAAA;IACjC,OAAO,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,IAAI,MAAK,MAAM;AAC7B;AAOM,SAAU,SAAS,CAAC,GAAS,EAAA;IACjC,OAAO,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,IAAI,MAAK,MAAM;AAC7B;AAEA,SAAS,oBAAoB,CAACC,OAA2B,EAAA;AACvD,IAAA,OAAO,OAAOA,OAAK,KAAK,QAAQ,GAAGA,OAAK,GAAGC,KAAK,CAAC,WAAW,CAACD,OAAK,CAAC;AACrE;AACM,SAAU,YAAY,CAAC,GAAS,EAAA;;IAIpC,OAAO;AACL,QAAA,YAAY,EACV,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,GAAG,aAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,KAAI;AACtC,cAAE;AACF,cAAE,oBAAoB,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,CAAC;AAChE,QAAA,WAAW,EACT,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,GAAG,aAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,KAAI;AACrC,cAAE;AACF,cAAE,oBAAoB,CAAC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,MAAA,GAAA,MAAA,GAAH,GAAG,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,CAAC;KAChE;AACH;MAEa,QAAQ,CAAA;AAArB,IAAA,WAAA,GAAA;AACU,QAAA,IAAA,CAAA,QAAQ,GAAwB,EAAE;AAGzB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,EAAO;AACxC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,eAAe,EAAO;AAC1C,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,eAAe,EAAS;AAC9C,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,eAAe,EAAsB;;AAE7E;;;;;AAKG;AACI,IAAA,MAAM,CAAC,GAAQ,EAAE,aAAa,GAAG,KAAK,EAAA;QAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;YACjC,IAAI,CAAC,QAAQ,GAAG;gBACd,GAAG,IAAI,CAAC,QAAQ;AAChB,gBAAA,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG;aACd;YAED,IAAI,CAAC,aAAa,EAAE;gBAClB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACzC,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;;AAE5B,YAAA,OAAO,IAAI;;aACN;AACL,YAAA,OAAO,KAAK;;;AAIhB;;AAEG;IACI,SAAS,GAAA;AACd,QAAA,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;AAGlD;;AAEG;IACI,OAAO,GAAA;QACZ,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;;AAGpE;;AAEG;AACI,IAAA,UAAU,CAAC,EAAU,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;;IAGnB,gBAAgB,GAAA;QACrB,OAAO,IAAI,CAAC,aAAa;;AAG3B;;;;;AAKG;AACI,IAAA,SAAS,CAAC,MAAW,EAAA;QAC1B,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;YACpC,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACzC,YAAA,OAAO,IAAI;;aACN;AACL,YAAA,OAAO,KAAK;;;AAIhB;;;;;AAKG;AACI,IAAA,OAAO,CAAC,IAAc,EAAA;QAC3B,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAEzC,QAAA,OAAO,IAAI;;AAGb;;;;;AAKG;AACI,IAAA,MAAM,CAAC,GAAQ,EAAA;AACpB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;QAE9C,IAAI,CAAC,QAAQ,GAAG;YACd,GAAG,IAAI,CAAC,QAAQ;AAChB,YAAA,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG;SACd;QAED,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC;;AAG5B,QAAA,OAAO,IAAI;;AAGb;;;;;AAKG;AACI,IAAA,SAAS,CAAC,GAAQ,EAAA;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;AACvC,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;YACnB,IAAI,CAAC,QAAQ,GAAG;gBACd,GAAG,IAAI,CAAC,QAAQ;AAChB,gBAAA,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG;aACd;YACD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AACzC,YAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AAE5B,YAAA,OAAO,IAAI;;AAEb,QAAA,OAAO,KAAK;;AAGd;;;;;;AAMG;AACI,IAAA,iBAAiB,CAAC,QAAyB,EAAA;QAChD,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC;;AAG1C;;;;;;AAMG;AACI,IAAA,aAAa,CAAC,QAAuB,EAAA;QAC1C,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC;;AAGtC;;;;;;AAMG;AACI,IAAA,eAAe,CAAC,QAAuB,EAAA;QAC5C,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC;;AAGxC;;;;;;AAMG;AACI,IAAA,iBAAiB,CAAC,QAAsC,EAAA;QAC7D,OAAO,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,CAAC;;AAG3C;;;AAGG;AACI,IAAA,cAAc,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK;QAC1B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC;;AAEjD;;;;"}
|
|
1
|
+
{"version":3,"file":"p-BIkuvTVH.js","sources":["src/lib/pins/controller.ts","src/components/viewer-pin-tool/utils.ts","src/lib/pins/model.ts"],"sourcesContent":["import { Point, Vector3 } from '@vertexvis/geometry';\nimport { Color } from '@vertexvis/utils';\n\nimport {\n Pin,\n PinModel,\n PinStyleAttributes,\n ViewerPinToolMode,\n ViewerPinToolType,\n} from './model';\n\nexport interface Draggable {\n id: string;\n lastPoint?: Point.Point;\n}\n\n/**\n * The `PinController` is responsible for adding pin entities to the viewer canvas\n */\nexport class PinController {\n private draggable?: Draggable;\n\n public constructor(\n private model: PinModel,\n private mode: ViewerPinToolMode = 'view',\n private type: ViewerPinToolType = 'pin-icon',\n private styleAttributes: PinStyleAttributes | undefined = undefined,\n ) {}\n\n /**\n * Registers an entity to place on the canvas and places the pin on the associated part.\n *\n * @param pin The pin entity\n * @returns A void promise\n */\n public addPin(pin: Pin): void {\n this.model.addPin(pin);\n }\n\n /**\n * Clears all entities and returns a promise that resolves with an empty list\n * of pin results.\n */\n public clearPins(): void {\n this.model.clearPins();\n }\n\n /**\n * Deregisters an entity and performs a pin if this entity was\n * removed.\n *\n * @param entity The entity to remove.\n * @returns A promise that resolves with the results after removing this\n * entity.\n */\n public removePin(pin: Pin): void {\n this.model.removePin(pin);\n }\n\n /**\n * Registers a set of entities and adds a pin\n *\n * @param entities The pin entities to draw.\n * @returns A promise that resolves with the results after registering these\n * entities.\n */\n public setPins(pins: Set<Pin>): void {\n this.model.setPins(pins);\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been added.\n */\n public setPin(pin: Pin): void {\n this.model.setPin(pin);\n }\n\n /**\n * Updates an existing pin\n * @param pin A pin to set\n * @returns `true` if the entity has been updated, false otherwise\n */\n public updatePin(pin: Pin): void {\n this.model.updatePin(pin);\n }\n\n /**\n * Tells the controller which pin is selected in the model\n * @param pinId\n */\n public setSelectedPinId(pinId?: string): void {\n this.model.setSelectedPin(pinId);\n }\n\n public getToolMode(): ViewerPinToolMode {\n return this.mode;\n }\n\n public getToolType(): ViewerPinToolType {\n return this.type;\n }\n\n public setToolMode(mode: ViewerPinToolMode): void {\n this.mode = mode;\n }\n\n public setToolType(type: ViewerPinToolType): void {\n this.type = type;\n }\n\n public getDraggable(): Draggable | undefined {\n return this.draggable;\n }\n\n public setDraggable(draggable: Draggable | undefined): void {\n this.draggable = draggable;\n }\n\n public setPrimaryColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n primaryColor: color,\n };\n }\n\n public setAccentColor(color?: Color.Color | string): void {\n this.styleAttributes = {\n ...this.styleAttributes,\n accentColor: color,\n };\n }\n\n public getStyleAttributes(): PinStyleAttributes | undefined {\n return this.styleAttributes;\n }\n\n public updateDraggable(\n draggable: Draggable,\n worldPosition: Vector3.Vector3,\n partId?: string,\n ): void {\n if (this.draggable != null) {\n this.draggable = draggable;\n }\n const pin = this.model.getPinById(draggable.id);\n if (pin != null) {\n this.updatePin({\n ...pin,\n worldPosition,\n partId,\n });\n }\n }\n}\n","import { Dimensions, Point } from '@vertexvis/geometry';\nimport { Range } from '@vertexvis/utils';\n\nexport function constrainRelativePoint(\n pt: Point.Point,\n range: Range.Range,\n): Point.Point {\n const constrainedX = Math.max(range.start, Math.min(range.end, pt.x));\n const constrainedY = Math.max(range.start, Math.min(range.end, pt.y));\n\n return Point.create(constrainedX, constrainedY);\n}\n\n/**\n * Translates a point in relative units to a point in screen units.\n */\nexport function translatePointToScreen(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n): Point.Point {\n return Point.add(\n Point.scale(pt, canvasDimensions.width, canvasDimensions.height),\n Dimensions.center(canvasDimensions),\n );\n}\n\n/**\n * Translates a point in screen units to a point in relative units.\n */\nexport function translatePointToRelative(\n pt: Point.Point,\n canvasDimensions: Dimensions.Dimensions,\n includeOffset?: boolean,\n xOffset?: number,\n yOffset?: number,\n): Point.Point {\n const verticalScaleFactor = 1 / canvasDimensions.height;\n const horizontalScaleFactor = 1 / canvasDimensions.width;\n const canvasCenterPoint = Dimensions.center(canvasDimensions);\n\n const point = Point.scale(\n Point.subtract(pt, canvasCenterPoint),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n if (includeOffset) {\n const offset = Point.scale(\n Point.create(xOffset, yOffset),\n horizontalScaleFactor,\n verticalScaleFactor,\n );\n\n // We want to place the label towards the center of the screen.\n // The given point corresponds to the upper left corner of the label, so increase the offset\n // when placing it to the left or above to ensure that part of the label line is visible\n const centerIsToTheRightInXDirection = canvasCenterPoint.x > pt.x;\n const xOffsetCalculated = centerIsToTheRightInXDirection\n ? offset.x\n : -3 * offset.x;\n\n const centerIsBelowInYDirection = canvasCenterPoint.y > pt.y;\n const yOffsetCalculated = centerIsBelowInYDirection\n ? offset.y\n : -3 * offset.y;\n\n const offsetPoint = Point.add(\n point,\n Point.create(xOffsetCalculated, yOffsetCalculated),\n );\n\n return constrainRelativePoint(offsetPoint, Range.create(-0.5, 0.5));\n } else {\n return constrainRelativePoint(point, Range.create(-0.5, 0.5));\n }\n}\n","import { Color, Disposable, EventDispatcher, Listener } from '@vertexvis/utils';\n\n/**\n * The types of pins that can be performed by this tool.\n */\nexport type ViewerPinToolType = 'pin-icon' | 'pin-text';\n\n/**\n * The mode of the pin tool\n */\nexport type ViewerPinToolMode = 'edit' | 'view';\n\n/**\n * A model representing the state of pins.\n *\n */\n\nimport { Point, Vector3 } from '@vertexvis/geometry';\n\ninterface BasePinAttributes {\n style?: PinStyleAttributes;\n}\n\ninterface BasePin {\n id: string;\n worldPosition: Vector3.Vector3;\n partId?: string;\n attributes?: BasePinAttributes;\n}\n\nexport interface TextPin extends BasePin {\n type: 'text';\n label: PinLabel;\n}\n\n// Future: Support custom icons.\nexport interface IconPin extends BasePin {\n type: 'icon';\n}\n\nexport type Pin = IconPin | TextPin;\n\nexport interface PinLabel {\n point: Point.Point;\n text?: string;\n}\n\nexport function isTextPin(pin?: Pin): pin is TextPin {\n return pin?.type === 'text';\n}\n\nexport interface PinStyleAttributes {\n primaryColor?: Color.Color | string;\n accentColor?: Color.Color | string;\n}\n\nexport function isIconPin(pin?: Pin): pin is Pin {\n return pin?.type === 'icon';\n}\n\nfunction convertColorToString(color: Color.Color | string): string {\n return typeof color === 'string' ? color : Color.toHexString(color);\n}\nexport function getPinColors(pin?: Pin): {\n primaryColor?: string;\n accentColor?: string;\n} {\n return {\n primaryColor:\n pin?.attributes?.style?.primaryColor == null\n ? undefined\n : convertColorToString(pin?.attributes?.style?.primaryColor),\n accentColor:\n pin?.attributes?.style?.accentColor == null\n ? undefined\n : convertColorToString(pin?.attributes?.style?.accentColor),\n };\n}\n\nexport class PinModel {\n private entities: Record<string, Pin> = {};\n private selectedPinId?: string;\n\n private readonly entityAdded = new EventDispatcher<Pin>();\n private readonly entityUpdated = new EventDispatcher<Pin>();\n private readonly entitiesChanged = new EventDispatcher<Pin[]>();\n private readonly selectionChanged = new EventDispatcher<string | undefined>();\n\n /**\n * Registers an entity to be drawn in the canvas\n *\n * @param pin A pin entity to draw.\n * @returns `true` if the entity has been added.\n */\n public addPin(pin: Pin, suppressEvent = false): boolean {\n if (this.entities[pin.id] == null) {\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n\n if (!suppressEvent) {\n this.entitiesChanged.emit(this.getPins());\n this.entityAdded.emit(pin);\n }\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Clears all registered entities from the model.\n */\n public clearPins(): void {\n this.getPins().forEach((e) => this.removePin(e));\n }\n\n /**\n * Returns all the entities registered with the model.\n */\n public getPins(): Pin[] {\n return Object.keys(this.entities).map((key) => this.entities[key]);\n }\n\n /**\n * Returns single entity by id if present in the model.\n */\n public getPinById(id: string): Pin | undefined {\n return this.entities[id];\n }\n\n public getSelectedPinId(): string | undefined {\n return this.selectedPinId;\n }\n\n /**\n * Unregisters an entity from the model.\n *\n * @param entity The entity to remove.\n * @returns `true` if the entity was removed.\n */\n public removePin(entity: Pin): boolean {\n if (this.entities[entity.id] != null) {\n delete this.entities[entity.id];\n this.entitiesChanged.emit(this.getPins());\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param entities A set of entities to draw.\n * @returns `true` if the entity has been added.\n */\n public setPins(pins: Set<Pin>): boolean {\n this.clearPins();\n pins.forEach((e) => this.addPin(e, true));\n this.entitiesChanged.emit(this.getPins());\n\n return true;\n }\n\n /**\n * Sets the set of entities to be placed with the model.\n *\n * @param pin A pin to set\n * @returns `true` if the entity has been set\n */\n public setPin(pin: Pin): boolean {\n const isNewPin = this.entities[pin.id] == null;\n\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n\n this.entitiesChanged.emit(this.getPins());\n if (isNewPin) {\n this.entityAdded.emit(pin);\n }\n\n return true;\n }\n\n /**\n * Updates a pin in the model.\n *\n * @param pin A pin to update\n * @returns `true` if the entity has been updated\n */\n public updatePin(pin: Pin): boolean {\n const pinById = this.getPinById(pin.id);\n if (pinById != null) {\n this.entities = {\n ...this.entities,\n [pin.id]: pin,\n };\n this.entitiesChanged.emit(this.getPins());\n this.entityUpdated.emit(pin);\n\n return true;\n }\n return false;\n }\n\n /**\n * Registers an event listener that will be invoked when the model's\n * pin entities change.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntitiesChanged(listener: Listener<Pin[]>): Disposable {\n return this.entitiesChanged.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when a new pin\n * is added to the model.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntityAdded(listener: Listener<Pin>): Disposable {\n return this.entityAdded.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when a pin\n * is updated in the model.\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onEntityUpdated(listener: Listener<Pin>): Disposable {\n return this.entityUpdated.on(listener);\n }\n\n /**\n * Registers an event listener that will be invoked when the model's\n * pin selection changes\n *\n * @param listener The listener to add.\n * @returns A disposable that can be used to remove the listener.\n */\n public onSelectionChange(listener: Listener<string | undefined>): Disposable {\n return this.selectionChanged.on(listener);\n }\n\n /**\n * Sets the selected pin id\n * @param pinId\n */\n public setSelectedPin(pinId?: string): void {\n this.selectedPinId = pinId;\n this.selectionChanged.emit(this.selectedPinId);\n }\n}\n"],"names":["Point","Dimensions","point","Range","color","Color"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-BRPkbTVP.js","sources":["src/lib/transforms/util.ts"],"sourcesContent":["import {\n Angle,\n Euler,\n Matrix4,\n Point,\n Quaternion,\n Vector3,\n} from '@vertexvis/geometry';\n\n/**\n * A type that wraps the local and world transforms for an item.\n */\nexport interface Transform {\n position: Vector3.Vector3;\n rotation: Vector3.Vector3;\n scale: number;\n}\n\n/**\n * Converts an array of points to an array of numbers\n * @param arr The array to convert\n * @returns The given array as an array of numbers\n */\nexport function flattenPointArray(arr: Point.Point[]): number[] {\n return arr.reduce((res, pt) => [...res, pt.x, pt.y], [] as number[]);\n}\n\n/**\n * Converts the rotation vector of a Transform from degrees to radians\n * @param transform The Transform to convert\n * @returns The Transform where the rotation matrix is in terms of radians\n */\nexport function toRadiansTransform(transform: Transform): Transform {\n const { position, rotation: r, scale } = transform;\n const rotation = Vector3.create(\n Angle.toRadians(r.x),\n Angle.toRadians(r.y),\n Angle.toRadians(r.z)
|
|
1
|
+
{"version":3,"file":"p-BRPkbTVP.js","sources":["src/lib/transforms/util.ts"],"sourcesContent":["import {\n Angle,\n Euler,\n Matrix4,\n Point,\n Quaternion,\n Vector3,\n} from '@vertexvis/geometry';\n\n/**\n * A type that wraps the local and world transforms for an item.\n */\nexport interface Transform {\n position: Vector3.Vector3;\n rotation: Vector3.Vector3;\n scale: number;\n}\n\n/**\n * Converts an array of points to an array of numbers\n * @param arr The array to convert\n * @returns The given array as an array of numbers\n */\nexport function flattenPointArray(arr: Point.Point[]): number[] {\n return arr.reduce((res, pt) => [...res, pt.x, pt.y], [] as number[]);\n}\n\n/**\n * Converts the rotation vector of a Transform from degrees to radians\n * @param transform The Transform to convert\n * @returns The Transform where the rotation matrix is in terms of radians\n */\nexport function toRadiansTransform(transform: Transform): Transform {\n const { position, rotation: r, scale } = transform;\n const rotation = Vector3.create(\n Angle.toRadians(r.x),\n Angle.toRadians(r.y),\n Angle.toRadians(r.z),\n );\n\n return { position, rotation, scale };\n}\n\n/**\n * Converts the rotation vector of a Transform from radians to degrees\n * @param transform The Transform to convert\n * @returns The Transform where the rotation matrix is in terms of degrees\n */\nexport function toDegreesTransform(transform: Transform): Transform {\n const { position, rotation: r, scale } = transform;\n const rotation = Vector3.create(\n Angle.toDegrees(r.x),\n Angle.toDegrees(r.y),\n Angle.toDegrees(r.z),\n );\n return { position, rotation, scale };\n}\n\n/**\n * Converts a Transform to a Matrix4 transform\n * @param transform The Transform to convert\n * @returns The transform as a Matrix4\n */\nexport function toMatrix(transform: Transform): Matrix4.Matrix4 {\n const { position: t, rotation, scale } = transform;\n const r = Quaternion.fromEuler(Euler.create(rotation));\n const s = Vector3.create(scale, scale, scale);\n return Matrix4.makeTRS(t, r, s);\n}\n\n/**\n * Converts a Matrix4 transform to a Transform\n * @param matrix The Matrix4 transform to convert\n * @returns The transform as a Transform\n */\nexport function toTransform(matrix: Matrix4.Matrix4): Transform {\n const position = Vector3.fromMatrixPosition(matrix);\n const rotation = Euler.fromRotationMatrix(matrix);\n const { x: scale } = Vector3.fromMatrixScale(matrix);\n return { position, rotation, scale };\n}\n\n/**\n * Converts a local transform to a world transform relative to the given parent world matrix.\n * @param localT The local transform to convert\n * @param parentWM The world matrix of the item's parent\n * @returns The world transform of the item\n */\nexport function toWorldTransform(\n localT: Transform,\n parentWM: Matrix4.Matrix4,\n): Transform {\n const localM = toMatrix(toRadiansTransform(localT));\n const worldM = Matrix4.multiply(parentWM, localM);\n return toDegreesTransform(toTransform(worldM));\n}\n\n/**\n * Converts a world transform to a local transform relative to the given parent world matrix.\n * @param worldT The world transform to convert\n * @param parentWM The world matrix of the item's parent\n * @returns The local transform of the item\n */\nexport function toLocalTransform(\n worldT: Transform,\n parentWM: Matrix4.Matrix4,\n): Transform {\n const worldM = toMatrix(toRadiansTransform(worldT));\n const localM = Matrix4.multiply(Matrix4.invert(parentWM), worldM);\n return toDegreesTransform(toTransform(localM));\n}\n"],"names":["Vector3","Angle","Quaternion","Euler","Matrix4"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-BsBIynwj.js","sources":["src/lib/types/viewport.ts"],"sourcesContent":["import {\n Dimensions,\n Matrix4,\n Point,\n Ray,\n Rectangle,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport { DepthBuffer } from './depthBuffer';\nimport type { FrameCameraBase, FrameImageLike } from './frame';\n\n/**\n * A `Viewport` represents the drawing area in the viewer.\n *\n * When a frame is received from the rendering pipeline, it might not be the\n * same dimensions of the viewport because of an interactive frame or because of\n * bandwidth limitations or other performance reasons.\n *\n * The viewport contains methods to scale an image to the viewport, as well as\n * translate 2D coordinates between the viewport and the frame.\n */\nexport class Viewport implements Dimensions.Dimensions {\n /**\n * The center point of the viewport.\n */\n public readonly center: Point.Point;\n\n public constructor(\n /**\n * The width of the viewport.\n */\n public readonly width: number,\n\n /**\n * The height of the viewport.\n */\n public readonly height: number\n ) {\n this.center = Dimensions.center(this.dimensions);\n }\n\n /**\n * Returns a new viewport with the given dimensions.\n * @param dimensions The dimensions of the viewport\n * @returns A new viewport.\n */\n public static fromDimensions(dimensions: Dimensions.Dimensions): Viewport {\n return new Viewport(dimensions.width, dimensions.height);\n }\n\n /**\n * Transforms a normalized device coordinate to a 2D point within the\n * viewport.\n *\n * @param ndc A 2D point in NDC.\n * @returns A 2D point in the coordinate space of the viewport.\n */\n public transformNdcPointToViewport(ndc: Point.Point): Point.Point {\n return Point.create(\n ndc.x * this.center.x + this.center.x,\n -ndc.y * this.center.y + this.center.y\n );\n }\n\n /**\n * Transforms a normalized device coordinate to a 2D point within the\n * viewport.\n *\n * @param ndc A 3D point in NDC.\n * @returns A 2D point in the coordinate space of the viewport.\n */\n public transformVectorToViewport(ndc: Vector3.Vector3): Point.Point {\n return this.transformNdcPointToViewport(ndc);\n }\n\n /**\n * Transforms a world point to 2D point in viewport space.\n *\n * @param worldPt The world point to transform.\n * @param projectionViewMatrix The projection matrix to transform a 3D point to 2D point.\n * @returns A point in viewport space.\n */\n public transformWorldToViewport(\n worldPt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4\n ): Point.Point {\n const ndc = Vector3.transformMatrix(worldPt, projectionViewMatrix);\n return this.transformVectorToViewport(ndc);\n }\n\n public transformPointToViewport(\n pt: Point.Point,\n image: FrameImageLike\n ): Point.Point {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Point.scale(pt, 1 * scaleX, 1 * scaleY);\n }\n\n /**\n * Transforms a point in viewport coordinate space to a point in a frame's\n * coordinate space.\n *\n * @param pt A point in viewport coordinate space.\n * @param image An image of a frame.\n * @returns A point in the coordinate space of the frame.\n */\n public transformPointToFrame(\n pt: Point.Point,\n image: FrameImageLike\n ): Point.Point {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Point.scale(pt, 1 / scaleX, 1 / scaleY);\n }\n\n /**\n * Transforms a point in viewport coordinates to a point in world space\n * coordinates. This method expects a depth buffer in order to compute a value\n * for the Z axis.\n *\n * @param pt A point in viewport coordinates.\n * @param depthBuffer A depth buffer for computing the Z axis.\n * @param fallbackNormalizedDepth A fallback value if the depth is the max\n * depth value, or cannot be determined.\n * @returns\n */\n public transformPointToWorldSpace(\n pt: Point.Point,\n depthBuffer: DepthBuffer,\n fallbackNormalizedDepth?: number\n ): Vector3.Vector3 {\n const depthPt = this.transformPointToFrame(pt, depthBuffer);\n const ray = this.transformPointToRay(pt, depthBuffer, depthBuffer.camera);\n return depthBuffer.getWorldPoint(depthPt, ray, fallbackNormalizedDepth);\n }\n\n /**\n * Transforms a point in viewport coordinates to a ray.\n *\n * For perspective cameras, the returned ray will have an\n * origin that is at the position of the camera with a direction\n * that is pointing into world space away from the camera.\n *\n * For orthographic cameras, the returned ray will have an\n * origin that is at the world point of viewport coordinate\n * with a direction that is pointing into world space away\n * from the camera.\n *\n * @param pt A point in viewport coordinates.\n * @param image An image of a frame.\n * @param camera A camera used to determine orientation of the scene.\n * @returns A ray\n */\n public transformPointToRay(\n pt: Point.Point,\n image: FrameImageLike,\n camera: FrameCameraBase\n ): Ray.Ray {\n const ndc = this.transformScreenPointToNdc(pt, image);\n\n // Calculate the ray depending on the camera type\n if (camera.isPerspective()) {\n const origin = Vector3.fromMatrixPosition(camera.worldMatrix);\n const lookAtPoint = Vector3.transformNdcToWorldSpace(\n Vector3.create(ndc.x, ndc.y, 0.5),\n camera.worldMatrix,\n camera.projectionMatrixInverse\n );\n const direction = Vector3.normalize(\n Vector3.subtract(lookAtPoint, origin)\n );\n return Ray.create({ origin, direction });\n } else {\n const origin = Vector3.transformNdcToWorldSpace(\n Vector3.create(ndc.x, ndc.y, 0),\n camera.worldMatrix,\n camera.projectionMatrixInverse\n );\n return Ray.create({\n origin,\n direction: Vector3.normalize(camera.viewVector),\n });\n }\n }\n\n /**\n * Maps a screen point to normalized device coordinates (NDC). A screen point\n * at 0,0 represents the top-left of the viewport.\n *\n * @param screenPt A screen point.\n */\n public transformScreenPointToNdc(\n screenPt: Point.Point,\n image: FrameImageLike\n ): Point.Point {\n const framePt = this.transformPointToFrame(screenPt, image);\n return Point.create(\n (framePt.x / image.imageAttr.frameDimensions.width) * 2 - 1,\n -(framePt.y / image.imageAttr.frameDimensions.height) * 2 + 1\n );\n }\n\n /**\n * Computes a rectangle that is scaled correctly to be drawn within the\n * viewport.\n *\n * @param image The image to be drawn.\n * @param imageDimensions The dimensions of the received image.\n * @returns A rectangle.\n */\n public calculateDrawRect(image: FrameImageLike): Rectangle.Rectangle {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Rectangle.scale(image.imageAttr.imageRect, scaleX, scaleY);\n }\n\n private calculateFrameScale(image: FrameImageLike): Point.Point {\n const { frameDimensions: dimensions } = image.imageAttr;\n\n const imageRect = Rectangle.fromDimensions(dimensions);\n const viewport = Rectangle.fromDimensions(this.dimensions);\n const fit = Rectangle.containFit(viewport, imageRect);\n\n const scaleX = fit.width / imageRect.width;\n const scaleY = fit.height / imageRect.height;\n\n return Point.create(scaleX, scaleY);\n }\n\n public get dimensions(): Dimensions.Dimensions {\n return Dimensions.create(this.width, this.height);\n }\n}\n"],"names":["Dimensions","Point","Vector3","Ray","Rectangle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"p-BsBIynwj.js","sources":["src/lib/types/viewport.ts"],"sourcesContent":["import {\n Dimensions,\n Matrix4,\n Point,\n Ray,\n Rectangle,\n Vector3,\n} from '@vertexvis/geometry';\n\nimport { DepthBuffer } from './depthBuffer';\nimport type { FrameCameraBase, FrameImageLike } from './frame';\n\n/**\n * A `Viewport` represents the drawing area in the viewer.\n *\n * When a frame is received from the rendering pipeline, it might not be the\n * same dimensions of the viewport because of an interactive frame or because of\n * bandwidth limitations or other performance reasons.\n *\n * The viewport contains methods to scale an image to the viewport, as well as\n * translate 2D coordinates between the viewport and the frame.\n */\nexport class Viewport implements Dimensions.Dimensions {\n /**\n * The center point of the viewport.\n */\n public readonly center: Point.Point;\n\n public constructor(\n /**\n * The width of the viewport.\n */\n public readonly width: number,\n\n /**\n * The height of the viewport.\n */\n public readonly height: number,\n ) {\n this.center = Dimensions.center(this.dimensions);\n }\n\n /**\n * Returns a new viewport with the given dimensions.\n * @param dimensions The dimensions of the viewport\n * @returns A new viewport.\n */\n public static fromDimensions(dimensions: Dimensions.Dimensions): Viewport {\n return new Viewport(dimensions.width, dimensions.height);\n }\n\n /**\n * Transforms a normalized device coordinate to a 2D point within the\n * viewport.\n *\n * @param ndc A 2D point in NDC.\n * @returns A 2D point in the coordinate space of the viewport.\n */\n public transformNdcPointToViewport(ndc: Point.Point): Point.Point {\n return Point.create(\n ndc.x * this.center.x + this.center.x,\n -ndc.y * this.center.y + this.center.y,\n );\n }\n\n /**\n * Transforms a normalized device coordinate to a 2D point within the\n * viewport.\n *\n * @param ndc A 3D point in NDC.\n * @returns A 2D point in the coordinate space of the viewport.\n */\n public transformVectorToViewport(ndc: Vector3.Vector3): Point.Point {\n return this.transformNdcPointToViewport(ndc);\n }\n\n /**\n * Transforms a world point to 2D point in viewport space.\n *\n * @param worldPt The world point to transform.\n * @param projectionViewMatrix The projection matrix to transform a 3D point to 2D point.\n * @returns A point in viewport space.\n */\n public transformWorldToViewport(\n worldPt: Vector3.Vector3,\n projectionViewMatrix: Matrix4.Matrix4,\n ): Point.Point {\n const ndc = Vector3.transformMatrix(worldPt, projectionViewMatrix);\n return this.transformVectorToViewport(ndc);\n }\n\n public transformPointToViewport(\n pt: Point.Point,\n image: FrameImageLike,\n ): Point.Point {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Point.scale(pt, 1 * scaleX, 1 * scaleY);\n }\n\n /**\n * Transforms a point in viewport coordinate space to a point in a frame's\n * coordinate space.\n *\n * @param pt A point in viewport coordinate space.\n * @param image An image of a frame.\n * @returns A point in the coordinate space of the frame.\n */\n public transformPointToFrame(\n pt: Point.Point,\n image: FrameImageLike,\n ): Point.Point {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Point.scale(pt, 1 / scaleX, 1 / scaleY);\n }\n\n /**\n * Transforms a point in viewport coordinates to a point in world space\n * coordinates. This method expects a depth buffer in order to compute a value\n * for the Z axis.\n *\n * @param pt A point in viewport coordinates.\n * @param depthBuffer A depth buffer for computing the Z axis.\n * @param fallbackNormalizedDepth A fallback value if the depth is the max\n * depth value, or cannot be determined.\n * @returns\n */\n public transformPointToWorldSpace(\n pt: Point.Point,\n depthBuffer: DepthBuffer,\n fallbackNormalizedDepth?: number,\n ): Vector3.Vector3 {\n const depthPt = this.transformPointToFrame(pt, depthBuffer);\n const ray = this.transformPointToRay(pt, depthBuffer, depthBuffer.camera);\n return depthBuffer.getWorldPoint(depthPt, ray, fallbackNormalizedDepth);\n }\n\n /**\n * Transforms a point in viewport coordinates to a ray.\n *\n * For perspective cameras, the returned ray will have an\n * origin that is at the position of the camera with a direction\n * that is pointing into world space away from the camera.\n *\n * For orthographic cameras, the returned ray will have an\n * origin that is at the world point of viewport coordinate\n * with a direction that is pointing into world space away\n * from the camera.\n *\n * @param pt A point in viewport coordinates.\n * @param image An image of a frame.\n * @param camera A camera used to determine orientation of the scene.\n * @returns A ray\n */\n public transformPointToRay(\n pt: Point.Point,\n image: FrameImageLike,\n camera: FrameCameraBase,\n ): Ray.Ray {\n const ndc = this.transformScreenPointToNdc(pt, image);\n\n // Calculate the ray depending on the camera type\n if (camera.isPerspective()) {\n const origin = Vector3.fromMatrixPosition(camera.worldMatrix);\n const lookAtPoint = Vector3.transformNdcToWorldSpace(\n Vector3.create(ndc.x, ndc.y, 0.5),\n camera.worldMatrix,\n camera.projectionMatrixInverse,\n );\n const direction = Vector3.normalize(\n Vector3.subtract(lookAtPoint, origin),\n );\n return Ray.create({ origin, direction });\n } else {\n const origin = Vector3.transformNdcToWorldSpace(\n Vector3.create(ndc.x, ndc.y, 0),\n camera.worldMatrix,\n camera.projectionMatrixInverse,\n );\n return Ray.create({\n origin,\n direction: Vector3.normalize(camera.viewVector),\n });\n }\n }\n\n /**\n * Maps a screen point to normalized device coordinates (NDC). A screen point\n * at 0,0 represents the top-left of the viewport.\n *\n * @param screenPt A screen point.\n */\n public transformScreenPointToNdc(\n screenPt: Point.Point,\n image: FrameImageLike,\n ): Point.Point {\n const framePt = this.transformPointToFrame(screenPt, image);\n return Point.create(\n (framePt.x / image.imageAttr.frameDimensions.width) * 2 - 1,\n -(framePt.y / image.imageAttr.frameDimensions.height) * 2 + 1,\n );\n }\n\n /**\n * Computes a rectangle that is scaled correctly to be drawn within the\n * viewport.\n *\n * @param image The image to be drawn.\n * @param imageDimensions The dimensions of the received image.\n * @returns A rectangle.\n */\n public calculateDrawRect(image: FrameImageLike): Rectangle.Rectangle {\n const { x: scaleX, y: scaleY } = this.calculateFrameScale(image);\n return Rectangle.scale(image.imageAttr.imageRect, scaleX, scaleY);\n }\n\n private calculateFrameScale(image: FrameImageLike): Point.Point {\n const { frameDimensions: dimensions } = image.imageAttr;\n\n const imageRect = Rectangle.fromDimensions(dimensions);\n const viewport = Rectangle.fromDimensions(this.dimensions);\n const fit = Rectangle.containFit(viewport, imageRect);\n\n const scaleX = fit.width / imageRect.width;\n const scaleY = fit.height / imageRect.height;\n\n return Point.create(scaleX, scaleY);\n }\n\n public get dimensions(): Dimensions.Dimensions {\n return Dimensions.create(this.width, this.height);\n }\n}\n"],"names":["Dimensions","Point","Vector3","Ray","Rectangle"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-BxtKMwBH.js","sources":["src/lib/stencil.ts"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { EventEmitter, readTask, writeTask } from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nexport interface EventEmitterDisposable<E>\n extends EventEmitter<E>, Disposable {}\n\nexport function readDOM(task: () => void): void {\n readTask(task);\n}\n\nexport function writeDOM(task: () => void): void {\n writeTask(task);\n}\n\nexport function debounceEvent<E>(\n event: EventEmitter<E>,\n wait: number
|
|
1
|
+
{"version":3,"file":"p-BxtKMwBH.js","sources":["src/lib/stencil.ts"],"sourcesContent":["// eslint-disable-next-line no-restricted-imports\nimport { EventEmitter, readTask, writeTask } from '@stencil/core';\nimport { Disposable } from '@vertexvis/utils';\n\nexport interface EventEmitterDisposable<E>\n extends EventEmitter<E>, Disposable {}\n\nexport function readDOM(task: () => void): void {\n readTask(task);\n}\n\nexport function writeDOM(task: () => void): void {\n writeTask(task);\n}\n\nexport function debounceEvent<E>(\n event: EventEmitter<E>,\n wait: number,\n): EventEmitterDisposable<E> {\n let timer: number | undefined = undefined;\n function debounce(value: E): void {\n window.clearTimeout(timer);\n timer = window.setTimeout(() => event.emit(value), wait);\n }\n return {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n emit: debounce as any,\n dispose() {\n window.clearTimeout(timer);\n },\n };\n}\n"],"names":[],"mappings":";;;;;AAAA;AAOM,SAAU,OAAO,CAAC,IAAgB,EAAA;IACtC,QAAQ,CAAC,IAAI,CAAC;AAChB;AAEM,SAAU,QAAQ,CAAC,IAAgB,EAAA;IACvC,SAAS,CAAC,IAAI,CAAC;AACjB;AAEM,SAAU,aAAa,CAC3B,KAAsB,EACtB,IAAY,EAAA;IAEZ,IAAI,KAAK,GAAuB,SAAS;IACzC,SAAS,QAAQ,CAAC,KAAQ,EAAA;AACxB,QAAA,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;AAC1B,QAAA,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;;IAE1D,OAAO;;AAEL,QAAA,IAAI,EAAE,QAAe;QACrB,OAAO,GAAA;AACL,YAAA,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC;SAC3B;KACF;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-C4y4Noe-.js","sources":["src/lib/measurement/overlays.ts"],"sourcesContent":["import { Vector3 } from '@vertexvis/geometry';\nimport { Disposable, EventDispatcher, Listener, UUID } from '@vertexvis/utils';\n\nimport { MinimumDistanceMeasurementResult } from './results';\n\nexport interface LineOverlay extends Disposable {\n type: 'line';\n id: string;\n start: Vector3.Vector3;\n end: Vector3.Vector3;\n}\n\nexport interface DistanceVectorOverlay extends Disposable {\n type: 'distance-vector';\n id: string;\n x: { start: Vector3.Vector3; end: Vector3.Vector3 };\n y: { start: Vector3.Vector3; end: Vector3.Vector3 };\n z: { start: Vector3.Vector3; end: Vector3.Vector3 };\n}\n\nexport type MeasurementOverlay = LineOverlay | DistanceVectorOverlay;\n\nexport class MeasurementOverlayManager {\n private overlays = new Map<string, MeasurementOverlay>();\n private overlaysChanged = new EventDispatcher<MeasurementOverlay[]>();\n\n public addLineFromResult(\n result: MinimumDistanceMeasurementResult
|
|
1
|
+
{"version":3,"file":"p-C4y4Noe-.js","sources":["src/lib/measurement/overlays.ts"],"sourcesContent":["import { Vector3 } from '@vertexvis/geometry';\nimport { Disposable, EventDispatcher, Listener, UUID } from '@vertexvis/utils';\n\nimport { MinimumDistanceMeasurementResult } from './results';\n\nexport interface LineOverlay extends Disposable {\n type: 'line';\n id: string;\n start: Vector3.Vector3;\n end: Vector3.Vector3;\n}\n\nexport interface DistanceVectorOverlay extends Disposable {\n type: 'distance-vector';\n id: string;\n x: { start: Vector3.Vector3; end: Vector3.Vector3 };\n y: { start: Vector3.Vector3; end: Vector3.Vector3 };\n z: { start: Vector3.Vector3; end: Vector3.Vector3 };\n}\n\nexport type MeasurementOverlay = LineOverlay | DistanceVectorOverlay;\n\nexport class MeasurementOverlayManager {\n private overlays = new Map<string, MeasurementOverlay>();\n private overlaysChanged = new EventDispatcher<MeasurementOverlay[]>();\n\n public addLineFromResult(\n result: MinimumDistanceMeasurementResult,\n ): LineOverlay {\n return this.addLine(result.point1, result.point2);\n }\n\n public addLine(start: Vector3.Vector3, end: Vector3.Vector3): LineOverlay {\n const id = UUID.create();\n const overlay: LineOverlay = {\n type: 'line',\n id: id,\n start,\n end,\n dispose: () => this.remove(id),\n };\n this.addOverlay(overlay);\n return overlay;\n }\n\n public addDistanceVectorFromResult(\n result: MinimumDistanceMeasurementResult,\n ): DistanceVectorOverlay {\n return this.addDistanceVector(result.point1, result.point2);\n }\n\n public addDistanceVector(\n start: Vector3.Vector3,\n end: Vector3.Vector3,\n ): DistanceVectorOverlay {\n const id = UUID.create();\n const v = Vector3.subtract(start, end);\n\n const ye = Vector3.add(start, Vector3.create(0, -v.y, 0));\n const y = { start: start, end: ye };\n\n const ze = Vector3.add(ye, Vector3.create(0, 0, -v.z));\n const z = { start: ye, end: ze };\n\n const xe = Vector3.add(ze, Vector3.create(-v.x, 0, 0));\n const x = { start: ze, end: xe };\n\n const overlay: DistanceVectorOverlay = {\n type: 'distance-vector',\n id,\n x,\n y,\n z,\n dispose: () => this.remove(id),\n };\n this.addOverlay(overlay);\n return overlay;\n }\n\n private addOverlay(overlay: MeasurementOverlay): void {\n if (!this.overlays.has(overlay.id)) {\n this.overlays.set(overlay.id, overlay);\n this.overlaysChanged.emit(this.getOverlays());\n }\n }\n\n public getOverlays(): MeasurementOverlay[] {\n return Array.from(this.overlays.values());\n }\n\n private remove(id: string): boolean {\n if (this.overlays.has(id)) {\n this.overlays.delete(id);\n this.overlaysChanged.emit(this.getOverlays());\n return true;\n } else {\n return false;\n }\n }\n\n public onOverlaysChanged(\n listener: Listener<MeasurementOverlay[]>,\n ): Disposable {\n return this.overlaysChanged.on(listener);\n }\n}\n"],"names":["UUID","Vector3"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-C6KrfydC.js","sources":["src/components/viewer-measurement-distance/utils.ts"],"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
|
|
1
|
+
{"version":3,"file":"p-C6KrfydC.js","sources":["src/components/viewer-measurement-distance/utils.ts"],"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"],"names":["Line3","Point"],"mappings":";;;;;AAoBM,SAAU,4BAA4B,CAC1C,IAAiB,EACjB,MAAoB,EAAA;AAOpB,IAAA,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM;IAEnC,MAAM,mBAAmB,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;IAChE,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC;;;;AAK5D,IAAA,IAAI,mBAAmB,IAAI,iBAAiB,EAAE;QAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC7C,QAAA,MAAM,OAAO,GAAGA,KAAK,CAAC,MAAM,CAAC;AAC3B,YAAA,KAAK,EAAE,mBAAmB,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK;AAC1D,YAAA,GAAG,EAAE,iBAAiB,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG;AACrD,SAAA,CAAC;AAEF,QAAA,MAAM,GAAG,GAAGA,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,oBAAoB,CAAC;QACvE,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC;YACpD,GAAG,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC;AAChD,YAAA,SAAS,EAAE,mBAAmB;AAC9B,YAAA,OAAO,EAAE,iBAAiB;SAC3B;;SACI;AACL,QAAA,MAAM,GAAG,GAAGA,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,oBAAoB,CAAC;QACpE,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC;YACpD,GAAG,EAAE,QAAQ,CAAC,yBAAyB,CAAC,GAAG,CAAC,GAAG,CAAC;AAChD,YAAA,SAAS,EAAE,KAAK;AAChB,YAAA,OAAO,EAAE,KAAK;SACf;;AAEL;SAEgB,0BAA0B,CACxC,IAAiB,EACjB,iBAAkC,EAClC,MAAoB,EAAA;IAEpB,MAAM,EACJ,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,KAAK,EACV,SAAS,EACT,OAAO,GACR,GAAG,4BAA4B,CAAC,IAAI,EAAE,MAAM,CAAC;AAC9C,IAAA,MAAM,OAAO,GAAGC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC;AAC/C,IAAA,MAAM,WAAW,GACf,iBAAiB,KAAK;UAClB,uBAAuB,CAAC,IAAI,EAAE,iBAAiB,EAAE,MAAM;UACvD,SAAS;AAEf,IAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE;AACrE;AAWA,SAAS,uBAAuB,CAC9B,IAAiB,EACjB,MAAc,EACd,MAAoB,EAAA;AAEpB,IAAA,OAAO,MAAM,CAAC,QAAQ,CAAC,wBAAwB,CAC7C,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAC1C,MAAM,CAAC,MAAM,CAAC,oBAAoB,CACnC;AACH;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"p-C7dYsPFU.js","sources":["src/lib/dom.ts"],"sourcesContent":["import { Point } from '@vertexvis/geometry';\n\nimport { Cursor } from './cursors';\n\nexport function getMouseClientPosition(\n event: MouseEvent,\n offsets?: DOMRect
|
|
1
|
+
{"version":3,"file":"p-C7dYsPFU.js","sources":["src/lib/dom.ts"],"sourcesContent":["import { Point } from '@vertexvis/geometry';\n\nimport { Cursor } from './cursors';\n\nexport function getMouseClientPosition(\n event: MouseEvent,\n offsets?: DOMRect,\n): Point.Point {\n const pt = Point.create(event.clientX, event.clientY);\n if (offsets == null) {\n return pt;\n } else {\n return Point.subtract(pt, Point.create(offsets.left, offsets.top));\n }\n}\n\n/**\n * Returns a CSS transform that will center an element at the given position.\n */\nexport function cssTransformCenterAt(position: Point.Point): string {\n const { x, y } = position;\n return `translate(-50%, -50%) translate(${x}px, ${y}px)`;\n}\n\n/**\n * Returns a CSS value for a cursor.\n */\nexport function cssCursor(cursor: Cursor): string {\n if (typeof cursor === 'string') {\n return cursor;\n } else {\n const parts = [\n `url(\"${cursor.url}\")`,\n cursor.offsetX ?? 0,\n cursor.offsetY ?? 0,\n ', auto',\n ];\n return parts.join(' ');\n }\n}\n\nexport function getWindowDevicePixelRatio(): number {\n if (typeof window !== 'undefined') {\n return window.devicePixelRatio;\n }\n return 1;\n}\n"],"names":["Point"],"mappings":";;;;;AAIM,SAAU,sBAAsB,CACpC,KAAiB,EACjB,OAAiB,EAAA;AAEjB,IAAA,MAAM,EAAE,GAAGA,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;AACrD,IAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,QAAA,OAAO,EAAE;;SACJ;AACL,QAAA,OAAOA,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAEA,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;;AAEtE;AAEA;;AAEG;AACG,SAAU,oBAAoB,CAAC,QAAqB,EAAA;AACxD,IAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ;AACzB,IAAA,OAAO,CAAA,gCAAA,EAAmC,CAAC,CAAA,IAAA,EAAO,CAAC,KAAK;AAC1D;AAEA;;AAEG;AACG,SAAU,SAAS,CAAC,MAAc,EAAA;;AACtC,IAAA,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC9B,QAAA,OAAO,MAAM;;SACR;AACL,QAAA,MAAM,KAAK,GAAG;YACZ,CAAA,KAAA,EAAQ,MAAM,CAAC,GAAG,CAAA,EAAA,CAAI;YACtB,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YACnB,CAAA,EAAA,GAAA,MAAM,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,CAAC;YACnB,QAAQ;SACT;AACD,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;;AAE1B;SAEgB,yBAAyB,GAAA;AACvC,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;QACjC,OAAO,MAAM,CAAC,gBAAgB;;AAEhC,IAAA,OAAO,CAAC;AACV;;;;"}
|