@3cr/viewer-browser 0.0.200 → 0.0.246
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/.circleci/config.yml +46 -22
- package/.prettierrc +6 -0
- package/components.d.ts +27 -10
- package/dist/Viewer3CR.js +36 -45
- package/dist/Viewer3CR.mjs +26893 -21667
- package/dist/Viewer3CR.umd.js +36 -45
- package/dist/android-chrome-192x192.png +0 -0
- package/dist/android-chrome-512x512.png +0 -0
- package/dist/apple-touch-icon.png +0 -0
- package/dist/browserconfig.xml +9 -0
- package/dist/favicon-16x16.png +0 -0
- package/dist/favicon-32x32.png +0 -0
- package/dist/favicon.ico +0 -0
- package/dist/mstile-144x144.png +0 -0
- package/dist/mstile-150x150.png +0 -0
- package/dist/mstile-310x150.png +0 -0
- package/dist/mstile-310x310.png +0 -0
- package/dist/mstile-70x70.png +0 -0
- package/dist/safari-pinned-tab.svg +50 -0
- package/dist/site.webmanifest +19 -0
- package/index.html +34 -41
- package/package.json +24 -20
- package/playground/android-chrome-192x192.png +0 -0
- package/playground/android-chrome-512x512.png +0 -0
- package/playground/apple-touch-icon.png +0 -0
- package/playground/browserconfig.xml +9 -0
- package/playground/favicon-16x16.png +0 -0
- package/playground/favicon-32x32.png +0 -0
- package/playground/favicon.ico +0 -0
- package/playground/index.html +30 -41
- package/playground/mstile-144x144.png +0 -0
- package/playground/mstile-150x150.png +0 -0
- package/playground/mstile-310x150.png +0 -0
- package/playground/mstile-310x310.png +0 -0
- package/playground/mstile-70x70.png +0 -0
- package/playground/safari-pinned-tab.svg +50 -0
- package/playground/site.webmanifest +19 -0
- package/playground/sw.js +15 -1
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/browserconfig.xml +9 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/mstile-144x144.png +0 -0
- package/public/mstile-150x150.png +0 -0
- package/public/mstile-310x150.png +0 -0
- package/public/mstile-310x310.png +0 -0
- package/public/mstile-70x70.png +0 -0
- package/public/safari-pinned-tab.svg +50 -0
- package/public/site.webmanifest +19 -0
- package/src/App.vue +55 -50
- package/src/__tests__/app.spec.ts +7 -8
- package/{__tests__/index.spec.ts → src/__tests__/main.spec.ts} +5 -6
- package/src/assets/logos/3dicom/white-mini.svg +20 -0
- package/src/assets/logos/3dicom/white.svg +30 -0
- package/src/assets/styles.scss +18 -4
- package/src/components/demo/DemoPatientModal.vue +12 -22
- package/src/components/demo/__tests__/DemoModal.spec.ts +9 -8
- package/src/components/demo/__tests__/DemoPatientModal.spec.ts +11 -10
- package/src/components/demo/__tests__/options.spec.ts +1 -1
- package/src/components/demo/licence/DemoLicenceInfoModal.vue +11 -29
- package/src/components/demo/licence/__tests__/DemoLicenceEnableCloudStorageModal.spec.ts +11 -10
- package/src/components/demo/licence/__tests__/DemoLicenceInfoModal.spec.ts +21 -11
- package/src/components/demo/licence/__tests__/DemoLicenceSendToPartyModal.spec.ts +10 -10
- package/src/components/demo/licence/__tests__/DemoLicenceShareToMobileModal.spec.ts +14 -13
- package/src/components/demo/options.ts +74 -76
- package/src/components/demo/patient/DemoPatientInfoModal.vue +11 -29
- package/src/components/demo/patient/__tests__/DemoPatientEnableCloudStorageModal.spec.ts +11 -10
- package/src/components/demo/patient/__tests__/DemoPatientInfoModal.spec.ts +12 -11
- package/src/components/demo/patient/__tests__/DemoPatientSendToPartyModal.spec.ts +10 -10
- package/src/components/demo/patient/__tests__/DemoPatientShareToMobileModal.spec.ts +14 -13
- package/src/components/modal/ActionRail.vue +7 -11
- package/src/components/modal/AskAI.vue +35 -50
- package/src/components/modal/CloseViewerModal.vue +22 -57
- package/src/components/modal/MftpWebGL3DRModal.vue +230 -635
- package/src/components/modal/ViewerActionRail.vue +44 -39
- package/src/components/modal/ViewerNavigationDrawer.vue +10 -8
- package/src/components/modal/ViewerNavigationDrawerContent.vue +91 -49
- package/src/components/modal/ViewerNavigationDrawerFooter.vue +83 -63
- package/src/components/modal/ViewerNavigationDrawerHeader.vue +14 -44
- package/src/components/modal/ViewerScanView.vue +114 -0
- package/src/components/modal/WebGL3DR.vue +91 -0
- package/src/components/modal/__tests__/ActionRail.spec.ts +10 -0
- package/src/components/modal/__tests__/AskAI.spec.ts +33 -0
- package/src/components/modal/__tests__/CloseViewerModal.spec.ts +24 -14
- package/src/components/modal/__tests__/MftpWebGL3DRModal.spec.ts +147 -176
- package/src/components/modal/__tests__/ViewerActionRail.spec.ts +11 -0
- package/src/components/modal/__tests__/ViewerNavigationDrawer.spec.ts +10 -12
- package/src/components/modal/__tests__/ViewerNavigationDrawerContent.spec.ts +4 -22
- package/src/components/modal/__tests__/ViewerNavigationDrawerFooter.spec.ts +35 -32
- package/src/components/modal/__tests__/ViewerNavigationDrawerHeader.spec.ts +14 -11
- package/src/components/modal/__tests__/ViewerScanView.spec.ts +60 -0
- package/src/components/modal/__tests__/WebGL3DR.spec.ts +57 -0
- package/src/components/modal/actions/Flip3dAction.vue +1 -1
- package/src/components/modal/actions/FlipHorizontalAction.vue +5 -10
- package/src/components/modal/actions/FlipVerticalAction.vue +5 -10
- package/src/components/modal/actions/FullscreenAction.vue +6 -11
- package/src/components/modal/actions/NavigationCubeAction.vue +7 -14
- package/src/components/modal/actions/PanAction.vue +4 -4
- package/src/components/modal/actions/ResetViewAction.vue +1 -1
- package/src/components/modal/actions/Rotate2dAction.vue +8 -20
- package/src/components/modal/actions/Slice3dAction.vue +10 -32
- package/src/components/modal/actions/ZoomAction.vue +1 -1
- package/src/components/modal/actions/__tests__/Action.spec.ts +8 -9
- package/src/components/modal/actions/__tests__/Flip3dAction.spec.ts +6 -8
- package/src/components/modal/actions/__tests__/FlipHorizontalAction.spec.ts +6 -7
- package/src/components/modal/actions/__tests__/FlipVerticalAction.spec.ts +6 -7
- package/src/components/modal/actions/__tests__/FullscreenAction.spec.ts +9 -10
- package/src/components/modal/actions/__tests__/NavigationCubeAction.spec.ts +11 -11
- package/src/components/modal/actions/__tests__/PanAction.spec.ts +9 -10
- package/src/components/modal/actions/__tests__/ResetViewAction.spec.ts +7 -7
- package/src/components/modal/actions/__tests__/Rotate2dAction.spec.ts +6 -8
- package/src/components/modal/actions/__tests__/Slice3dAction.spec.ts +23 -5
- package/src/components/modal/actions/__tests__/ZoomAction.spec.ts +8 -10
- package/src/components/modal/buttons/AutoAnnotateBtn.vue +197 -0
- package/src/components/modal/buttons/__tests__/AutoAnnotateBtn.spec.ts +28 -0
- package/src/components/modal/menus/FileMenu.vue +73 -0
- package/src/components/modal/menus/SettingsMenu.vue +106 -0
- package/src/components/modal/menus/__tests__/FileMenu.spec.ts +110 -0
- package/src/components/modal/menus/__tests__/SettingsMenu.spec.ts +71 -0
- package/src/components/navigation/mcad/McadGlobalActions.vue +20 -0
- package/src/components/navigation/mcad/McadGlobalOpacitySlider.vue +103 -0
- package/src/components/navigation/mcad/McadGlobalScanViewBtn.vue +28 -0
- package/src/components/navigation/mcad/McadGlobalVisibilityBtn.vue +38 -0
- package/src/components/shared/DoubleSliderSelector.vue +142 -0
- package/src/components/{loading → shared}/LoadingSpinner.vue +27 -36
- package/src/components/shared/UpdateSnackbar.vue +72 -0
- package/src/components/{selectors → shared}/ValueSelector.vue +9 -12
- package/src/components/shared/__tests__/DoubleSliderSelector.spec.ts +83 -0
- package/src/components/shared/__tests__/LoadingSpinner.spec.ts +9 -0
- package/src/components/shared/__tests__/UpdateSnackbar.spec.ts +116 -0
- package/src/components/shared/__tests__/ValueSelector.spec.ts +39 -0
- package/src/components/shared/__tests__/VerticalSliderSelector.spec.ts +50 -0
- package/src/components/views/AnnotationTreeView.vue +236 -0
- package/src/components/{modal/ViewerDisplaySettings.vue → views/DisplaySettings.vue} +7 -15
- package/src/components/views/MarkupTreeView.vue +201 -0
- package/src/components/views/McadObjectTreeView.vue +129 -0
- package/src/components/views/__tests__/AnnotationTreeView.spec.ts +62 -0
- package/src/components/{modal/__tests__/ViewerDisplaySettings.spec.ts → views/__tests__/DisplaySettings.spec.ts} +24 -20
- package/src/components/views/__tests__/MarkupTreeView.spec.ts +41 -0
- package/src/components/views/__tests__/McadObjectTreeView.spec.ts +47 -0
- package/src/components/views/modals/DataOverlayGeneralModal.vue +71 -0
- package/src/components/views/modals/DataOverlayMarkupModal.vue +60 -0
- package/src/components/views/modals/DataOverlayModal.vue +88 -0
- package/src/components/views/shared/MaskIcon.vue +44 -0
- package/src/components/views/shared/ObjectColor.vue +31 -0
- package/src/components/views/shared/ObjectLabel.vue +30 -0
- package/src/components/views/shared/Opacity.vue +65 -0
- package/src/components/views/shared/VisibilityBtn.vue +25 -0
- package/src/components/views/shared/__tests__/MaskIcon.spec.ts +10 -0
- package/src/components/views/shared/__tests__/ObjectColor.spec.ts +10 -0
- package/src/components/views/shared/__tests__/ObjectLabel.spec.ts +10 -0
- package/src/components/views/shared/__tests__/Opacity.spec.ts +24 -0
- package/src/components/views/shared/__tests__/VisibilityBtn.spec.ts +11 -0
- package/src/components/views/types/annotation-tree-view-item-child-action.ts +6 -0
- package/src/components/views/types/annotation-tree-view-item-child.ts +9 -0
- package/src/components/views/types/annotation-tree-view-item.ts +13 -0
- package/src/components/views/types/markup-tree-view-item-child.ts +6 -0
- package/src/components/views/types/markup-tree-view-item.ts +14 -0
- package/src/components/views/types/mcad-object-tree-view-item.ts +13 -0
- package/src/composables/__tests__/useAnnotations.spec.ts +35 -0
- package/src/composables/__tests__/useEventListener.spec.ts +32 -0
- package/src/composables/__tests__/useIntroJs.spec.ts +51 -0
- package/src/composables/__tests__/useMarkups.spec.ts +39 -0
- package/src/composables/__tests__/useMcadObjects.spec.ts +36 -0
- package/src/composables/__tests__/useMouse.spec.ts +20 -0
- package/src/{components/modal/composables → composables}/__tests__/useNavigationCubeObserver.spec.ts +17 -12
- package/src/{dataLayer → composables}/__tests__/useViewer3cr.spec.ts +1 -2
- package/src/composables/useAnnotations.ts +37 -0
- package/src/composables/useDebounce.ts +11 -0
- package/src/composables/useEventListener.ts +25 -0
- package/src/composables/useIntroJs.ts +142 -0
- package/src/composables/useMarkups.ts +41 -0
- package/src/composables/useMcadObjects.ts +32 -0
- package/src/composables/useMouse.ts +14 -0
- package/src/{components/modal/composables → composables}/useNavigationCubeObserver.ts +35 -25
- package/src/composables/useScanMovement.ts +25 -0
- package/src/composables/useScanSliders.ts +36 -0
- package/src/composables/useVersion3cr.ts +7 -0
- package/src/composables/useViewer3cr.ts +7 -0
- package/src/composables/useViewerOptions.ts +36 -0
- package/src/{dataLayer → functions}/__tests__/clamp.spec.ts +1 -2
- package/src/functions/__tests__/layoutOverlayStyle.spec.ts +325 -0
- package/src/{helpers/__tests__/model-helper.spec.ts → functions/__tests__/modelHelper.spec.ts} +77 -40
- package/src/{notifications → functions}/__tests__/notification.spec.ts +19 -29
- package/src/functions/__tests__/parseAction.spec.ts +9 -0
- package/src/functions/__tests__/parseCallToAction.spec.ts +11 -0
- package/src/functions/__tests__/parseDataOverlay.spec.ts +15 -0
- package/src/functions/__tests__/parseDataOverlayData.spec.ts +9 -0
- package/src/functions/__tests__/parseDataOverlayEvent.spec.ts +10 -0
- package/src/functions/__tests__/parseMcadEvent.spec.ts +10 -0
- package/src/functions/guards/isDataOverlayAngle.ts +6 -0
- package/src/functions/guards/isDataOverlayLength.ts +6 -0
- package/src/functions/guards/isDataOverlayPolygon.ts +6 -0
- package/src/functions/layoutOverlayStyle.ts +84 -0
- package/src/{helpers → functions}/modelHelper.ts +81 -18
- package/src/functions/notification.ts +82 -0
- package/src/functions/parseAction.ts +9 -0
- package/src/functions/parseCallToAction.ts +9 -0
- package/src/functions/parseDataOverlay.ts +10 -0
- package/src/functions/parseDataOverlayData.ts +10 -0
- package/src/functions/parseDataOverlayEvent.ts +17 -0
- package/src/functions/parseMcadEvent.ts +10 -0
- package/src/functions/rgbaToCss.ts +13 -0
- package/src/main.ts +57 -9
- package/src/{dataLayer → models}/__tests__/eventHandlers.spec.ts +2 -3
- package/src/models/__tests__/loadViewerOptions.spec.ts +72 -0
- package/src/models/__tests__/loadViewerPayload.spec.ts +10 -0
- package/src/models/__tests__/scanState.spec.ts +190 -0
- package/src/models/callbacks.ts +4 -0
- package/src/models/loadViewerOptions.ts +79 -0
- package/src/models/loadViewerPayload.ts +17 -0
- package/src/{dataLayer → models}/scanState.ts +63 -74
- package/src/plugins/__tests__/usePlugins.spec.ts +12 -0
- package/src/plugins/__tests__/vuetify.spec.ts +3 -4
- package/src/plugins/usePlugins.ts +8 -0
- package/src/plugins/vuetify.ts +31 -65
- package/src/services/{gpt/__tests__ → __tests__}/gpt.service.spec.ts +2 -2
- package/src/services/__tests__/service-worker.service.spec.ts +32 -0
- package/src/{dataLayer/__tests__/viewer3cr.spec.ts → services/__tests__/viewer-3cr.service.spec.ts} +97 -36
- package/src/services/gpt.service.ts +17 -0
- package/src/services/service-worker.service.ts +16 -0
- package/src/{dataLayer/viewer3cr.ts → services/viewer-3cr.service.ts} +281 -150
- package/src/tools/data-overlay.tool.ts +71 -0
- package/src/types/action.ts +13 -0
- package/src/types/call-to-action.ts +9 -0
- package/src/types/colour.ts +6 -0
- package/src/types/data-overlay-angle.ts +16 -0
- package/src/types/data-overlay-annotation.ts +18 -0
- package/src/types/data-overlay-data.ts +15 -0
- package/src/types/data-overlay-event.ts +5 -0
- package/src/types/data-overlay-info.ts +18 -0
- package/src/types/data-overlay-interaction.ts +15 -0
- package/src/types/data-overlay-length.ts +16 -0
- package/src/types/data-overlay-markup.ts +7 -0
- package/src/types/data-overlay-mcad.ts +20 -0
- package/src/types/data-overlay-polygon.ts +18 -0
- package/src/types/data-overlay.ts +16 -0
- package/src/types/demo-type.ts +4 -0
- package/src/types/gpt-question.ts +4 -0
- package/src/types/gpt-response-payload.ts +6 -0
- package/src/types/mcad-object-interaction.ts +15 -0
- package/src/types/segment-angle.ts +5 -0
- package/src/types/vector2.ts +4 -0
- package/src/types/vector3.ts +5 -0
- package/test/fakers/action-data.faker.ts +11 -0
- package/test/fakers/action.faker.ts +19 -0
- package/test/fakers/call-to-action.faker.ts +17 -0
- package/test/fakers/colour.faker.ts +17 -0
- package/test/fakers/data-overlay-angle.faker.ts +37 -0
- package/test/fakers/data-overlay-annotation.faker.ts +41 -0
- package/test/fakers/data-overlay-data.faker.ts +97 -0
- package/test/fakers/data-overlay-info.faker.ts +29 -0
- package/test/fakers/data-overlay-interaction.faker.ts +62 -0
- package/test/fakers/data-overlay-length.faker.ts +37 -0
- package/test/fakers/data-overlay-mcad.faker.ts +40 -0
- package/test/fakers/data-overlay-polygon.faker.ts +39 -0
- package/test/fakers/gpt-question.faker.ts +11 -0
- package/test/fakers/gpt-response.faker.ts +12 -0
- package/test/fakers/invert-transform.faker.ts +16 -0
- package/test/fakers/mcad-object-interaction.faker.ts +22 -0
- package/test/fakers/orientation.faker.ts +17 -0
- package/test/fakers/segment-angle.faker.ts +12 -0
- package/test/fakers/vector2.faker.ts +12 -0
- package/test/fakers/vector3.faker.ts +16 -0
- package/test/plugins/findByTestId.ts +25 -0
- package/test/plugins/vuetify.ts +16 -0
- package/test/setup.ts +16 -5
- package/tsconfig.json +4 -15
- package/vite.config.mts +20 -46
- package/vitest.config.mts +24 -43
- package/index.ts +0 -72
- package/src/assets/images/dark/3DICOM.png +0 -0
- package/src/assets/images/dark/3dicom-logo.svg +0 -1
- package/src/assets/images/light/3DICOM.png +0 -0
- package/src/assets/images/light/3dicom-logo.svg +0 -1
- package/src/assets/logo.png +0 -0
- package/src/assets/logo.svg +0 -6
- package/src/components/WebGL3DR.vue +0 -102
- package/src/components/__tests__/webgl3dr.spec.ts +0 -37
- package/src/components/icons/liver.vue +0 -21
- package/src/components/loading/__tests__/loading-spinner.spec.ts +0 -11
- package/src/components/modal/ViewerAnnotationModal.vue +0 -111
- package/src/components/modal/ViewerAnnotations.vue +0 -289
- package/src/components/modal/__tests__/ViewerAnnotationModal.spec.ts +0 -79
- package/src/components/modal/composables/useEventListener.ts +0 -22
- package/src/components/selectors/__tests__/value-selector.spec.ts +0 -53
- package/src/components/sliders/DoubleSliderSelector.vue +0 -141
- package/src/components/sliders/__tests__/double-slider-selector.spec.ts +0 -104
- package/src/components/sliders/__tests__/vertical-slider-selector.spec.ts +0 -61
- package/src/dataLayer/__tests__/getIconForPreset.spec.ts +0 -40
- package/src/dataLayer/__tests__/patchDataOverlay.spec.ts +0 -88
- package/src/dataLayer/__tests__/scanState.spec.ts +0 -93
- package/src/dataLayer/getIconForPreset.ts +0 -11
- package/src/dataLayer/patchDataOverlay.ts +0 -101
- package/src/dataLayer/useViewer3cr.ts +0 -7
- package/src/helpers/__tests__/layout-overlay-style.spec.ts +0 -290
- package/src/helpers/__tests__/utils.spec.ts +0 -70
- package/src/helpers/layoutOverlayStyle.ts +0 -96
- package/src/helpers/utils.ts +0 -16
- package/src/models/Callbacks.ts +0 -2
- package/src/models/LoadViewerOptions.ts +0 -31
- package/src/models/LoadViewerPayload.ts +0 -9
- package/src/models/__tests__/load-viewer-options.spec.ts +0 -22
- package/src/notifications/notification.ts +0 -50
- package/src/plugins/__tests__/index.spec.ts +0 -19
- package/src/plugins/index.ts +0 -17
- package/src/services/gpt/gpt.service.ts +0 -35
- package/static/3cr-types-browser/index.ts +0 -74
- package/static/3cr-types-browser/types/Action.ts +0 -6
- package/static/3cr-types-browser/types/AlphaKeys.ts +0 -5
- package/static/3cr-types-browser/types/AnchorPoint.ts +0 -12
- package/static/3cr-types-browser/types/CallToAction.ts +0 -5
- package/static/3cr-types-browser/types/ColourData.ts +0 -7
- package/static/3cr-types-browser/types/ColourPresetData.ts +0 -9
- package/static/3cr-types-browser/types/CurrentDataOverlayState.ts +0 -6
- package/static/3cr-types-browser/types/CurrentScanState.ts +0 -22
- package/static/3cr-types-browser/types/DataOverlay.ts +0 -22
- package/static/3cr-types-browser/types/DataOverlayActions.ts +0 -14
- package/static/3cr-types-browser/types/DataOverlayData.ts +0 -8
- package/static/3cr-types-browser/types/DataOverlayEvent.ts +0 -8
- package/static/3cr-types-browser/types/DecryptionKey.ts +0 -4
- package/static/3cr-types-browser/types/DisplaySettings.ts +0 -10
- package/static/3cr-types-browser/types/EmptyPayload.ts +0 -3
- package/static/3cr-types-browser/types/EnumPayload.ts +0 -4
- package/static/3cr-types-browser/types/FileManagementActions.ts +0 -11
- package/static/3cr-types-browser/types/FlipValue.ts +0 -7
- package/static/3cr-types-browser/types/FrontEndInterfaces.ts +0 -14
- package/static/3cr-types-browser/types/GradientKeys.ts +0 -7
- package/static/3cr-types-browser/types/GreyscalePresetData.ts +0 -6
- package/static/3cr-types-browser/types/InitialDataOverlayState.ts +0 -6
- package/static/3cr-types-browser/types/InitialScanState.ts +0 -19
- package/static/3cr-types-browser/types/InteractionType.ts +0 -8
- package/static/3cr-types-browser/types/InteractivityActions.ts +0 -6
- package/static/3cr-types-browser/types/InteractivityState.ts +0 -4
- package/static/3cr-types-browser/types/InvertTransformData.ts +0 -6
- package/static/3cr-types-browser/types/LayoutActions.ts +0 -6
- package/static/3cr-types-browser/types/LayoutData.ts +0 -7
- package/static/3cr-types-browser/types/LoadDataSet.ts +0 -6
- package/static/3cr-types-browser/types/LoadSessionState.ts +0 -4
- package/static/3cr-types-browser/types/LocalLoadDataset.ts +0 -3
- package/static/3cr-types-browser/types/MovementData.ts +0 -7
- package/static/3cr-types-browser/types/NavigationCubeActions.ts +0 -8
- package/static/3cr-types-browser/types/NavigationCubeData.ts +0 -12
- package/static/3cr-types-browser/types/NavigationCubeTransform.ts +0 -9
- package/static/3cr-types-browser/types/NotificationPayload.ts +0 -7
- package/static/3cr-types-browser/types/NotificationsActions.ts +0 -6
- package/static/3cr-types-browser/types/Object.ts +0 -1
- package/static/3cr-types-browser/types/ObjectColour.ts +0 -7
- package/static/3cr-types-browser/types/ObjectIcon.ts +0 -5
- package/static/3cr-types-browser/types/ObjectInvert.ts +0 -7
- package/static/3cr-types-browser/types/ObjectSize.ts +0 -7
- package/static/3cr-types-browser/types/ObjectSize2D.ts +0 -7
- package/static/3cr-types-browser/types/ObjectVisible.ts +0 -5
- package/static/3cr-types-browser/types/PositionData.ts +0 -14
- package/static/3cr-types-browser/types/PresetsActions.ts +0 -4
- package/static/3cr-types-browser/types/RotationValue.ts +0 -7
- package/static/3cr-types-browser/types/ScanMovementActions.ts +0 -27
- package/static/3cr-types-browser/types/ScanMovementData.ts +0 -3
- package/static/3cr-types-browser/types/ScanOrientationActions.ts +0 -6
- package/static/3cr-types-browser/types/ScanStateActions.ts +0 -4
- package/static/3cr-types-browser/types/ScanView.ts +0 -6
- package/static/3cr-types-browser/types/SettingsData.ts +0 -12
- package/static/3cr-types-browser/types/SlicerData.ts +0 -9
- package/static/3cr-types-browser/types/SliderValue.ts +0 -4
- package/static/3cr-types-browser/types/SlidersActions.ts +0 -18
- package/static/3cr-types-browser/types/Vector2Data.ts +0 -5
- package/static/3cr-types-browser/types/Vector3Data.ts +0 -6
- package/static/3cr-types-browser/types/VectorMovementData.ts +0 -8
- package/static/3cr-types-browser/types/ViewInteractiveMode.ts +0 -5
- package/static/3cr-types-browser/types/ViewOrientation.ts +0 -8
- package/static/3cr-types-browser/types/ViewOrientations.ts +0 -10
- package/static/3cr-types-browser/types/ViewSelectionActions.ts +0 -9
- package/static/3cr-types-browser/types/ViewToggleData.ts +0 -7
- package/static/3cr-types-browser/types/VolumeOrientation.ts +0 -7
- package/test/helper.ts +0 -44
- /package/src/components/{sliders → shared}/VerticalSliderSelector.vue +0 -0
- /package/{config.ts → src/config.ts} +0 -0
- /package/src/{dataLayer → functions}/clamp.ts +0 -0
- /package/src/{dataLayer → models}/eventHandlers.ts +0 -0
- /package/{static/3cr-types-browser/types/ActionData.ts → src/types/action-data.ts} +0 -0
|
@@ -1,27 +1,50 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { unref } from "vue";
|
|
1
|
+
import { createInstance, executePayload, registerOnPayloadHandler } from '@3cr/sdk-browser';
|
|
2
|
+
import { unref } from 'vue';
|
|
4
3
|
import {
|
|
5
4
|
AnchorPoint,
|
|
6
|
-
|
|
5
|
+
DataOverlaysActions,
|
|
7
6
|
FileManagementActions,
|
|
8
|
-
FrontEndInterfaces,
|
|
7
|
+
FrontEndInterfaces,
|
|
8
|
+
InteractivityActions,
|
|
9
|
+
LayoutActions,
|
|
10
|
+
NavigationCubeActions,
|
|
11
|
+
PresetsActions,
|
|
12
|
+
ScanMovementActions,
|
|
9
13
|
ScanOrientationActions,
|
|
10
|
-
ScanView,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
14
|
+
ScanView,
|
|
15
|
+
SlidersActions,
|
|
16
|
+
ViewSelectionActions,
|
|
17
|
+
FrontEndPayload,
|
|
18
|
+
InteractivityState,
|
|
19
|
+
MarkupsActions,
|
|
20
|
+
McadActions,
|
|
21
|
+
ObjectBoolean,
|
|
22
|
+
ObjectColour,
|
|
23
|
+
ObjectInvert,
|
|
24
|
+
ObjectVisibility,
|
|
25
|
+
ViewToggleData,
|
|
26
|
+
GraphicType
|
|
27
|
+
} from '@3cr/types-ts';
|
|
28
|
+
import { LoadViewerPayload } from '@/models/loadViewerPayload';
|
|
29
|
+
import { currentColourPreset, previousLayout, transactionStarted } from '@/models/scanState';
|
|
30
|
+
import { EventHandlers } from '@/models/eventHandlers';
|
|
31
|
+
import { clamp } from '@/functions/clamp';
|
|
32
|
+
import { LoadSessionState } from '@3cr/types-ts/types/LoadSessionState';
|
|
33
|
+
|
|
34
|
+
type InterfaceCallback = (
|
|
35
|
+
message: string,
|
|
36
|
+
action: string,
|
|
37
|
+
returnChannel: string,
|
|
38
|
+
returnTo: string
|
|
39
|
+
) => void | Promise<void>;
|
|
40
|
+
|
|
41
|
+
type ActionCallback = (message: string, returnChannel: string, returnTo: string) => void | Promise<void>;
|
|
42
|
+
|
|
43
|
+
export const emptyPayload = { Version: '1.1.0' };
|
|
44
|
+
|
|
45
|
+
type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
|
|
46
|
+
|
|
47
|
+
export class Viewer3crService {
|
|
25
48
|
private interfaceCallbacks = new EventHandlers<string, InterfaceCallback>();
|
|
26
49
|
|
|
27
50
|
private actionCallbacks = new EventHandlers<string, ActionCallback>();
|
|
@@ -48,29 +71,21 @@ export class Viewer3cr {
|
|
|
48
71
|
}
|
|
49
72
|
|
|
50
73
|
/**
|
|
51
|
-
* DO-
|
|
52
|
-
* @param
|
|
53
|
-
* @param visibility The annotation visibility.
|
|
74
|
+
* DO-03: Toggle 2D annotation visibility.
|
|
75
|
+
* @param value The object visibility
|
|
54
76
|
*/
|
|
55
|
-
async toggle2dAnnotation(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
Id: id,
|
|
59
|
-
Visibility: visibility
|
|
60
|
-
});
|
|
77
|
+
async toggle2dAnnotation(value: Optional<ObjectVisibility, 'Version'>): Promise<void> {
|
|
78
|
+
value.Version ??= '1.1.0';
|
|
79
|
+
await this.sendPayload(FrontEndInterfaces.data_overlay, DataOverlaysActions.do03, value);
|
|
61
80
|
}
|
|
62
81
|
|
|
63
82
|
/**
|
|
64
83
|
* DO-11: Toggle 3D annotation visibility.
|
|
65
|
-
* @param
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
await this.sendPayload(FrontEndInterfaces.data_overlay,
|
|
70
|
-
Version: '1.1.0',
|
|
71
|
-
Id: id,
|
|
72
|
-
Visibility: visibility
|
|
73
|
-
});
|
|
84
|
+
* @param value The object visibility
|
|
85
|
+
*/
|
|
86
|
+
async toggle3dAnnotation(value: Optional<ObjectVisibility, 'Version'>): Promise<void> {
|
|
87
|
+
value.Version ??= '1.1.0';
|
|
88
|
+
await this.sendPayload(FrontEndInterfaces.data_overlay, DataOverlaysActions.do11, value);
|
|
74
89
|
}
|
|
75
90
|
|
|
76
91
|
/**
|
|
@@ -83,96 +98,60 @@ export class Viewer3cr {
|
|
|
83
98
|
|
|
84
99
|
/**
|
|
85
100
|
* FM-03: Load previous CurrentScanState values.
|
|
86
|
-
* @param
|
|
101
|
+
* @param value The URL to the file.
|
|
87
102
|
*/
|
|
88
|
-
async loadScanSession(
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
Url: url
|
|
92
|
-
});
|
|
103
|
+
async loadScanSession(value: Optional<LoadSessionState, 'Version'>): Promise<void> {
|
|
104
|
+
value.Version ??= '1.1.0';
|
|
105
|
+
await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm03, value);
|
|
93
106
|
}
|
|
94
107
|
|
|
95
108
|
/**
|
|
96
|
-
* FM-05:
|
|
97
|
-
*
|
|
109
|
+
* FM-05: Sets the data overlay session with the given session file.
|
|
110
|
+
* This will clear all previously loaded data overlay sessions.
|
|
111
|
+
* @param value The URL to the file.
|
|
98
112
|
*/
|
|
99
|
-
async
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
Url: url
|
|
103
|
-
});
|
|
113
|
+
async setDataOverlaySession(value: Optional<LoadSessionState, 'Version'>): Promise<void> {
|
|
114
|
+
value.Version ??= '1.1.0';
|
|
115
|
+
await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm05, value);
|
|
104
116
|
}
|
|
105
117
|
|
|
106
118
|
/**
|
|
107
|
-
* FM-
|
|
108
|
-
* @param
|
|
119
|
+
* FM-06: Adds a data overlay session to existing sessions.
|
|
120
|
+
* @param value The URL to the file.
|
|
109
121
|
*/
|
|
110
|
-
async
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
Url: url
|
|
114
|
-
});
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* SO-01: Rotate 2D view by up to +-XXX degrees.
|
|
119
|
-
* @param view The 2D view.
|
|
120
|
-
* @param deg The degrees.
|
|
121
|
-
*/
|
|
122
|
-
async rotateByDeg(view: ScanView, deg: number) {
|
|
123
|
-
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so01, {
|
|
124
|
-
Version: "0.0.1",
|
|
125
|
-
View: view,
|
|
126
|
-
Angle: deg,
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* SO-02: Flip 2D View Horizontally.
|
|
132
|
-
* @param view The scan view.
|
|
133
|
-
* @param flipped Whether to enable horizontal flip.
|
|
134
|
-
*/
|
|
135
|
-
async flipHorizontally(view: ScanView, flipped: boolean): Promise<void> {
|
|
136
|
-
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so02, {
|
|
137
|
-
Version: "0.0.1",
|
|
138
|
-
View: view,
|
|
139
|
-
Flipped: flipped
|
|
140
|
-
})
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* SO-03: Flip 2D View Vertically.
|
|
145
|
-
* @param view The scan view.
|
|
146
|
-
* @param flipped Whether to enable vertical flip.
|
|
147
|
-
*/
|
|
148
|
-
async flipVertically(view: ScanView, flipped: boolean): Promise<void> {
|
|
149
|
-
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so03, {
|
|
150
|
-
Version: "0.0.1",
|
|
151
|
-
View: view,
|
|
152
|
-
Flipped: flipped
|
|
153
|
-
});
|
|
122
|
+
async addDataOverlaySession(value: Optional<LoadSessionState, 'Version'>): Promise<void> {
|
|
123
|
+
value.Version ??= '1.1.0';
|
|
124
|
+
await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm06, value);
|
|
154
125
|
}
|
|
155
126
|
|
|
156
127
|
/**
|
|
157
|
-
*
|
|
158
|
-
* @param
|
|
159
|
-
* @param
|
|
160
|
-
* @param
|
|
128
|
+
* FM-09: Load separate MCAD file from external UI.
|
|
129
|
+
* @param value The URL to the file.
|
|
130
|
+
* @param returnChannel The return channel.
|
|
131
|
+
* @param returnTo The return to id.
|
|
161
132
|
*/
|
|
162
|
-
async
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
133
|
+
async loadMcadObjects(
|
|
134
|
+
value?: Optional<LoadSessionState, 'Version'>,
|
|
135
|
+
returnChannel?: string[],
|
|
136
|
+
returnTo?: string
|
|
137
|
+
): Promise<void> {
|
|
138
|
+
await this.sendPayload(
|
|
139
|
+
FrontEndInterfaces.file_management,
|
|
140
|
+
FileManagementActions.fm09,
|
|
141
|
+
value,
|
|
142
|
+
returnChannel,
|
|
143
|
+
returnTo
|
|
144
|
+
);
|
|
170
145
|
}
|
|
171
146
|
|
|
172
147
|
async viewSelection(action: ViewSelectionActions) {
|
|
173
148
|
await this.sendPayload(FrontEndInterfaces.view_selection, action, emptyPayload);
|
|
174
149
|
}
|
|
175
150
|
|
|
151
|
+
async viewSelectionToggleView(payload: Optional<ViewToggleData, 'Version'>) {
|
|
152
|
+
await this.sendPayload(FrontEndInterfaces.view_selection, ViewSelectionActions.vs07, payload);
|
|
153
|
+
}
|
|
154
|
+
|
|
176
155
|
async sliderHandler(action: SlidersActions, value: number) {
|
|
177
156
|
if (unref(transactionStarted)) return;
|
|
178
157
|
await this.slider(action, value);
|
|
@@ -195,6 +174,79 @@ export class Viewer3cr {
|
|
|
195
174
|
}
|
|
196
175
|
}
|
|
197
176
|
|
|
177
|
+
/**
|
|
178
|
+
* MC-03: Set visibility of MCAD objects.
|
|
179
|
+
* @param value The object visibility value.
|
|
180
|
+
*/
|
|
181
|
+
async setMcadObjectVisibility(value: Optional<ObjectVisibility, 'Version'>): Promise<void> {
|
|
182
|
+
value.Version ??= '1.2.0';
|
|
183
|
+
await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc03, value);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* MC-04: Set colour & opacity of MCAD objects.
|
|
188
|
+
* @param value The colour & opacity value.
|
|
189
|
+
*/
|
|
190
|
+
async setMcadObjectColour(value: Optional<ObjectColour, 'Version'>): Promise<void> {
|
|
191
|
+
value.Version ??= '1.2.0';
|
|
192
|
+
await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc04, value);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* MC-05: Enables movement of MCAD objects.
|
|
197
|
+
* @param value The movement toggle.
|
|
198
|
+
*/
|
|
199
|
+
async moveMcadObject(value: Optional<ObjectBoolean, 'Version'>): Promise<void> {
|
|
200
|
+
value.Version ??= '1.2.0';
|
|
201
|
+
await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc05, value);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* MC-16: Invert MCAD objects.
|
|
206
|
+
* @param value The inversion state.
|
|
207
|
+
*/
|
|
208
|
+
async invertMcadObject(value: Optional<ObjectInvert, 'Version'>): Promise<void> {
|
|
209
|
+
value.Version ??= '1.2.0';
|
|
210
|
+
await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc16, value);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* MU-16: Set 2D/3D visibility of markups.
|
|
215
|
+
* @param id The markup id.
|
|
216
|
+
* @param visibility The visibility state.
|
|
217
|
+
*/
|
|
218
|
+
async setMarkupVisibility(id: string, visibility: boolean): Promise<void> {
|
|
219
|
+
const payload = { Version: '1.2.1', Id: id, Visibility2d: visibility, Visibility3d: visibility };
|
|
220
|
+
await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu16, [payload]);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* MU-20: 2D length tool.
|
|
225
|
+
* @param value If the length tool should be enabled.
|
|
226
|
+
*/
|
|
227
|
+
async lengthTool(value: Optional<InteractivityState, 'Version'>): Promise<void> {
|
|
228
|
+
value.Version ??= '1.2.0';
|
|
229
|
+
await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu20, value);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* MU-21: 2D polygon tool.
|
|
234
|
+
* @param value If the polygon tool should be enabled.
|
|
235
|
+
*/
|
|
236
|
+
async polygonTool(value: Optional<InteractivityState, 'Version'>): Promise<void> {
|
|
237
|
+
value.Version ??= '1.2.0';
|
|
238
|
+
await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu21, value);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* MU-22: 2D angle tool.
|
|
243
|
+
* @param value If the angle tool should be enabled.
|
|
244
|
+
*/
|
|
245
|
+
async angleTool(value: Optional<InteractivityState, 'Version'>): Promise<void> {
|
|
246
|
+
value.Version ??= '1.2.0';
|
|
247
|
+
await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu22, value);
|
|
248
|
+
}
|
|
249
|
+
|
|
198
250
|
/**
|
|
199
251
|
* NC-01: Set Navigation Cube Co-ordinates and Size.
|
|
200
252
|
* @param anchorPoint The anchor point on the screen.
|
|
@@ -203,7 +255,13 @@ export class Viewer3cr {
|
|
|
203
255
|
* @param width The navigation cube width.
|
|
204
256
|
* @param height The navigation cube height.
|
|
205
257
|
*/
|
|
206
|
-
async setNavCubePositionSize(
|
|
258
|
+
async setNavCubePositionSize(
|
|
259
|
+
anchorPoint: AnchorPoint,
|
|
260
|
+
x: number,
|
|
261
|
+
y: number,
|
|
262
|
+
width: number,
|
|
263
|
+
height: number
|
|
264
|
+
): Promise<void> {
|
|
207
265
|
await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc01, {
|
|
208
266
|
Version: '0.0.1',
|
|
209
267
|
AnchorPoint: anchorPoint,
|
|
@@ -218,8 +276,8 @@ export class Viewer3cr {
|
|
|
218
276
|
*/
|
|
219
277
|
async setNavCubeVisibility(visibility: boolean): Promise<void> {
|
|
220
278
|
await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc02, {
|
|
221
|
-
Version:
|
|
222
|
-
Value: visibility
|
|
279
|
+
Version: '0.0.1',
|
|
280
|
+
Value: visibility
|
|
223
281
|
});
|
|
224
282
|
}
|
|
225
283
|
|
|
@@ -254,8 +312,7 @@ export class Viewer3cr {
|
|
|
254
312
|
* @param a Alpha channel.
|
|
255
313
|
*/
|
|
256
314
|
async setNavCubeColourOpacity(r: number, g: number, b: number, a: number): Promise<void> {
|
|
257
|
-
|
|
258
|
-
await this.sendPayload(FrontEndInterfaces.navigation_cube, 'nc_05', {
|
|
315
|
+
await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc05, {
|
|
259
316
|
Version: '0.0.1',
|
|
260
317
|
R: clamp(r / 255, 0, 1),
|
|
261
318
|
G: clamp(g / 255, 0, 1),
|
|
@@ -273,8 +330,7 @@ export class Viewer3cr {
|
|
|
273
330
|
* @param a Alpha channel.
|
|
274
331
|
*/
|
|
275
332
|
async setNavCubeHighlightColourOpacity(r: number, g: number, b: number, a: number): Promise<void> {
|
|
276
|
-
|
|
277
|
-
await this.sendPayload(FrontEndInterfaces.navigation_cube, 'nc_07', {
|
|
333
|
+
await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc07, {
|
|
278
334
|
Version: '0.0.1',
|
|
279
335
|
R: clamp(r / 255, 0, 1),
|
|
280
336
|
G: clamp(g / 255, 0, 1),
|
|
@@ -283,17 +339,27 @@ export class Viewer3cr {
|
|
|
283
339
|
});
|
|
284
340
|
}
|
|
285
341
|
|
|
342
|
+
/**
|
|
343
|
+
* NC-08: Set Navigation Cube Face Graphics.
|
|
344
|
+
* @param type Face type of cube.
|
|
345
|
+
*/
|
|
346
|
+
async setNavCubeGraphics(type: GraphicType): Promise<void> {
|
|
347
|
+
await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc08, {
|
|
348
|
+
Version: '0.0.1',
|
|
349
|
+
Value: type
|
|
350
|
+
});
|
|
351
|
+
}
|
|
352
|
+
|
|
286
353
|
/**
|
|
287
354
|
* SM-13: Pan the selected view to the left.
|
|
288
355
|
* @param view The view.
|
|
289
356
|
* @param value The movement in mm.
|
|
290
357
|
*/
|
|
291
358
|
async panLeft(view: ScanView, value: number): Promise<void> {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
Version: "0.0.1",
|
|
359
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm13, {
|
|
360
|
+
Version: '0.0.1',
|
|
295
361
|
View: view,
|
|
296
|
-
Movement: value
|
|
362
|
+
Movement: value
|
|
297
363
|
});
|
|
298
364
|
}
|
|
299
365
|
|
|
@@ -303,11 +369,10 @@ export class Viewer3cr {
|
|
|
303
369
|
* @param value The movement in mm.
|
|
304
370
|
*/
|
|
305
371
|
async panRight(view: ScanView, value: number): Promise<void> {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
Version: "0.0.1",
|
|
372
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm14, {
|
|
373
|
+
Version: '0.0.1',
|
|
309
374
|
View: view,
|
|
310
|
-
Movement: value
|
|
375
|
+
Movement: value
|
|
311
376
|
});
|
|
312
377
|
}
|
|
313
378
|
|
|
@@ -317,11 +382,10 @@ export class Viewer3cr {
|
|
|
317
382
|
* @param value The movement in mm.
|
|
318
383
|
*/
|
|
319
384
|
async panUp(view: ScanView, value: number): Promise<void> {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
Version: "0.0.1",
|
|
385
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm15, {
|
|
386
|
+
Version: '0.0.1',
|
|
323
387
|
View: view,
|
|
324
|
-
Movement: value
|
|
388
|
+
Movement: value
|
|
325
389
|
});
|
|
326
390
|
}
|
|
327
391
|
|
|
@@ -331,11 +395,10 @@ export class Viewer3cr {
|
|
|
331
395
|
* @param value The movement in mm.
|
|
332
396
|
*/
|
|
333
397
|
async panDown(view: ScanView, value: number): Promise<void> {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
Version: "0.0.1",
|
|
398
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm16, {
|
|
399
|
+
Version: '0.0.1',
|
|
337
400
|
View: view,
|
|
338
|
-
Movement: value
|
|
401
|
+
Movement: value
|
|
339
402
|
});
|
|
340
403
|
}
|
|
341
404
|
|
|
@@ -345,8 +408,8 @@ export class Viewer3cr {
|
|
|
345
408
|
* @param value The amount to zoom in.
|
|
346
409
|
*/
|
|
347
410
|
async zoomIn(view: ScanView, value: number): Promise<void> {
|
|
348
|
-
await this.sendPayload(FrontEndInterfaces.scan_movement,
|
|
349
|
-
Version:
|
|
411
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm17, {
|
|
412
|
+
Version: '0.0.1',
|
|
350
413
|
View: view,
|
|
351
414
|
Movement: value
|
|
352
415
|
});
|
|
@@ -358,53 +421,121 @@ export class Viewer3cr {
|
|
|
358
421
|
* @param value The amount to zoom out.
|
|
359
422
|
*/
|
|
360
423
|
async zoomOut(view: ScanView, value: number): Promise<void> {
|
|
361
|
-
await this.sendPayload(FrontEndInterfaces.scan_movement,
|
|
362
|
-
Version:
|
|
424
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm18, {
|
|
425
|
+
Version: '0.0.1',
|
|
363
426
|
View: view,
|
|
364
427
|
Movement: value
|
|
365
428
|
});
|
|
366
429
|
}
|
|
367
430
|
|
|
431
|
+
/**
|
|
432
|
+
* SO-01: Rotate 2D view by up to +-XXX degrees.
|
|
433
|
+
* @param view The 2D view.
|
|
434
|
+
* @param deg The degrees.
|
|
435
|
+
*/
|
|
436
|
+
async rotateByDeg(view: ScanView, deg: number) {
|
|
437
|
+
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so01, {
|
|
438
|
+
Version: '0.0.1',
|
|
439
|
+
View: view,
|
|
440
|
+
Angle: deg
|
|
441
|
+
});
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* SO-02: Flip 2D View Horizontally.
|
|
446
|
+
* @param view The scan view.
|
|
447
|
+
* @param flipped Whether to enable horizontal flip.
|
|
448
|
+
*/
|
|
449
|
+
async flipHorizontally(view: ScanView, flipped: boolean): Promise<void> {
|
|
450
|
+
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so02, {
|
|
451
|
+
Version: '0.0.1',
|
|
452
|
+
View: view,
|
|
453
|
+
Flipped: flipped
|
|
454
|
+
});
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* SO-03: Flip 2D View Vertically.
|
|
459
|
+
* @param view The scan view.
|
|
460
|
+
* @param flipped Whether to enable vertical flip.
|
|
461
|
+
*/
|
|
462
|
+
async flipVertically(view: ScanView, flipped: boolean): Promise<void> {
|
|
463
|
+
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so03, {
|
|
464
|
+
Version: '0.0.1',
|
|
465
|
+
View: view,
|
|
466
|
+
Flipped: flipped
|
|
467
|
+
});
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* SO-04: Invert Volume Rendering
|
|
472
|
+
* @param sagittal If the Sagittal axis is inverted.
|
|
473
|
+
* @param coronal If the Coronal axis is inverted.
|
|
474
|
+
* @param transverse If the Transverse axis is inverted.
|
|
475
|
+
*/
|
|
476
|
+
async invertTransform(sagittal: boolean, coronal: boolean, transverse: boolean): Promise<void> {
|
|
477
|
+
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so04, {
|
|
478
|
+
Version: '0.0.1',
|
|
479
|
+
InvertedSagittal: sagittal,
|
|
480
|
+
InvertedCoronal: coronal,
|
|
481
|
+
InvertedTransverse: transverse
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
|
|
368
485
|
/**
|
|
369
486
|
* IN-01, IN-02: Enable/Disable Unity input interactions.
|
|
370
487
|
* @param isHovering If the inputs should be enabled.
|
|
371
488
|
*/
|
|
372
489
|
async hoverOverCanvas(isHovering: boolean) {
|
|
373
490
|
await this.sendPayload(FrontEndInterfaces.interactivity, InteractivityActions.in01, {
|
|
374
|
-
Version:
|
|
375
|
-
Value: isHovering
|
|
491
|
+
Version: '0.0.1',
|
|
492
|
+
Value: isHovering
|
|
376
493
|
});
|
|
377
494
|
await this.sendPayload(FrontEndInterfaces.interactivity, InteractivityActions.in02, {
|
|
378
|
-
Version:
|
|
379
|
-
Value: isHovering
|
|
495
|
+
Version: '0.0.1',
|
|
496
|
+
Value: isHovering
|
|
380
497
|
});
|
|
381
498
|
}
|
|
382
499
|
|
|
383
500
|
private async scanMovement(action: ScanMovementActions, value: number) {
|
|
384
501
|
await this.sendPayload(FrontEndInterfaces.scan_movement, action, {
|
|
385
|
-
Version:
|
|
386
|
-
Value:
|
|
502
|
+
Version: '0.0.1',
|
|
503
|
+
Value: value
|
|
387
504
|
});
|
|
388
505
|
}
|
|
389
506
|
|
|
390
507
|
private async slider(action: SlidersActions, value: number) {
|
|
391
508
|
await this.sendPayload(FrontEndInterfaces.sliders, action, {
|
|
392
|
-
Version:
|
|
393
|
-
Value:
|
|
509
|
+
Version: '0.0.1',
|
|
510
|
+
Value: value
|
|
394
511
|
});
|
|
395
512
|
}
|
|
396
513
|
|
|
397
|
-
async sendPayload(
|
|
514
|
+
async sendPayload(
|
|
515
|
+
iface: string,
|
|
516
|
+
action: string,
|
|
517
|
+
message: any,
|
|
518
|
+
returnChannel?: string[],
|
|
519
|
+
returnTo?: string
|
|
520
|
+
): Promise<void> {
|
|
398
521
|
await executePayload({
|
|
399
|
-
Version:
|
|
522
|
+
Version: '0.0.1',
|
|
400
523
|
Interface: iface as any,
|
|
401
524
|
Action: action as any,
|
|
402
|
-
|
|
525
|
+
ReturnChannel: returnChannel ? JSON.stringify(returnChannel) : null,
|
|
526
|
+
ReturnTo: returnTo ?? null,
|
|
527
|
+
Message: JSON.stringify(message)
|
|
403
528
|
});
|
|
404
529
|
}
|
|
405
530
|
|
|
406
|
-
|
|
407
|
-
await this.interfaceCallbacks.call(
|
|
408
|
-
|
|
531
|
+
async onPayload(payload: FrontEndPayload): Promise<void> {
|
|
532
|
+
await this.interfaceCallbacks.call(
|
|
533
|
+
payload.Interface,
|
|
534
|
+
payload.Message,
|
|
535
|
+
payload.Action,
|
|
536
|
+
payload.ReturnChannel,
|
|
537
|
+
payload.ReturnTo
|
|
538
|
+
);
|
|
539
|
+
await this.actionCallbacks.call(payload.Action, payload.Message, payload.ReturnChannel, payload.ReturnTo);
|
|
409
540
|
}
|
|
410
541
|
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { McadObjectInteraction } from '@/types/mcad-object-interaction';
|
|
2
|
+
import { Interactiontype } from '@3cr/types-ts';
|
|
3
|
+
import { DataOverlay } from '@/types/data-overlay';
|
|
4
|
+
import { ref, watch, WatchStopHandle } from 'vue';
|
|
5
|
+
import { useAnnotations } from '@/composables/useAnnotations';
|
|
6
|
+
import { useMarkups } from '@/composables/useMarkups';
|
|
7
|
+
import { useMcadObjects } from '@/composables/useMcadObjects';
|
|
8
|
+
import { DataOverlayInteraction } from '@/types/data-overlay-interaction';
|
|
9
|
+
|
|
10
|
+
export function useDataOverlayTool() {
|
|
11
|
+
let _flag = false;
|
|
12
|
+
let _focused: DataOverlay | null = null;
|
|
13
|
+
let _handles: WatchStopHandle[] = [];
|
|
14
|
+
|
|
15
|
+
const { annotationEvent } = useAnnotations();
|
|
16
|
+
const { markupEvent } = useMarkups();
|
|
17
|
+
const { mcadObjectEvent } = useMcadObjects();
|
|
18
|
+
const selected = ref<DataOverlay | null>(null);
|
|
19
|
+
|
|
20
|
+
function activate(): void {
|
|
21
|
+
document.addEventListener('mousedown', onMouseDown);
|
|
22
|
+
document.addEventListener('mousemove', onMouseMove);
|
|
23
|
+
document.addEventListener('mouseup', onMouseUp);
|
|
24
|
+
_handles.push(
|
|
25
|
+
watch(annotationEvent, onInteraction),
|
|
26
|
+
watch(markupEvent, onInteraction),
|
|
27
|
+
watch(mcadObjectEvent, onMcadInteraction)
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function deactivate(): void {
|
|
32
|
+
document.removeEventListener('mousedown', onMouseDown);
|
|
33
|
+
document.removeEventListener('mousemove', onMouseMove);
|
|
34
|
+
document.removeEventListener('mouseup', onMouseUp);
|
|
35
|
+
_handles.forEach((handle) => handle());
|
|
36
|
+
_handles = [];
|
|
37
|
+
selected.value = null;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function onMouseDown(): void {
|
|
41
|
+
_flag = true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function onMouseMove(): void {
|
|
45
|
+
_flag = false;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function onMouseUp(): void {
|
|
49
|
+
if (_flag) {
|
|
50
|
+
selected.value = _focused;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function onInteraction(event: DataOverlayInteraction<DataOverlay> | null): void {
|
|
55
|
+
if (event?.Interaction === Interactiontype.HOVER_START) {
|
|
56
|
+
_focused = event.DataOverlay;
|
|
57
|
+
} else if (event?.Interaction === Interactiontype.HOVER_END) {
|
|
58
|
+
_focused = null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function onMcadInteraction(event: McadObjectInteraction | null): void {
|
|
63
|
+
if (event?.Interaction === Interactiontype.HOVER_START) {
|
|
64
|
+
_focused = event.Mcad;
|
|
65
|
+
} else if (event?.Interaction === Interactiontype.HOVER_END) {
|
|
66
|
+
_focused = null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return { selected, activate, deactivate };
|
|
71
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ActionData } from '@/types/action-data';
|
|
2
|
+
|
|
3
|
+
interface ActionBase {
|
|
4
|
+
ActionType: number;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface Action extends ActionBase {
|
|
8
|
+
ActionData: ActionData;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface ActionRaw extends ActionBase {
|
|
12
|
+
ActionData: string;
|
|
13
|
+
}
|