@3cr/viewer-browser 0.0.200 → 0.0.220
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 +23 -10
- package/dist/Viewer3CR.js +37 -46
- package/dist/Viewer3CR.mjs +22625 -20892
- package/dist/Viewer3CR.umd.js +37 -46
- 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 +23 -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 +26 -29
- 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 +35 -45
- 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 +14 -4
- 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/__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 +54 -59
- 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 +152 -570
- package/src/components/modal/ViewerActionRail.vue +50 -39
- package/src/components/modal/ViewerNavigationDrawer.vue +10 -8
- package/src/components/modal/ViewerNavigationDrawerContent.vue +82 -49
- package/src/components/modal/ViewerNavigationDrawerFooter.vue +57 -60
- package/src/components/modal/ViewerNavigationDrawerHeader.vue +13 -48
- package/src/components/modal/ViewerScanView.vue +114 -0
- package/src/components/modal/WebGL3DR.vue +84 -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 +11 -9
- 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/HideViewAction.vue +38 -0
- 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 +29 -0
- package/src/components/modal/buttons/__tests__/AutoAnnotateBtn.spec.ts +28 -0
- package/src/components/modal/menus/FileMenu.vue +80 -0
- package/src/components/modal/menus/SettingsMenu.vue +111 -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/shared/DoubleSliderSelector.vue +142 -0
- 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 +234 -0
- package/src/components/{modal/ViewerDisplaySettings.vue → views/DisplaySettings.vue} +7 -15
- package/src/components/views/MarkupTreeView.vue +199 -0
- package/src/components/views/McadObjectTreeView.vue +119 -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/DataOverlayModal.vue +89 -0
- package/src/components/views/modals/DataOverlayModalManager.vue +104 -0
- package/src/components/views/modals/__tests__/DataOverlayModal.spec.ts +33 -0
- package/src/components/views/modals/__tests__/DataOverlayModalManager.spec.ts +93 -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 +66 -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/useEventListener.ts +25 -0
- package/src/composables/useIntroJs.ts +125 -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 +35 -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/layoutOverlayStyle.ts +84 -0
- package/src/{helpers → functions}/modelHelper.ts +79 -18
- package/src/{notifications → functions}/notification.ts +12 -14
- 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 +48 -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 +40 -0
- package/src/models/loadViewerPayload.ts +24 -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} +269 -150
- 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-info.ts +14 -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/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/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/{loading → shared}/LoadingSpinner.vue +0 -0
- /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,49 @@
|
|
|
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
|
+
} from '@3cr/types-ts';
|
|
27
|
+
import { LoadViewerPayload } from '@/models/loadViewerPayload';
|
|
28
|
+
import { currentColourPreset, previousLayout, transactionStarted } from '@/models/scanState';
|
|
29
|
+
import { EventHandlers } from '@/models/eventHandlers';
|
|
30
|
+
import { clamp } from '@/functions/clamp';
|
|
31
|
+
import { LoadSessionState } from '@3cr/types-ts/types/LoadSessionState';
|
|
32
|
+
|
|
33
|
+
type InterfaceCallback = (
|
|
34
|
+
message: string,
|
|
35
|
+
action: string,
|
|
36
|
+
returnChannel: string,
|
|
37
|
+
returnTo: string
|
|
38
|
+
) => void | Promise<void>;
|
|
39
|
+
|
|
40
|
+
type ActionCallback = (message: string, returnChannel: string, returnTo: string) => void | Promise<void>;
|
|
41
|
+
|
|
42
|
+
export const emptyPayload = { Version: '1.1.0' };
|
|
43
|
+
|
|
44
|
+
type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
|
|
45
|
+
|
|
46
|
+
export class Viewer3crService {
|
|
25
47
|
private interfaceCallbacks = new EventHandlers<string, InterfaceCallback>();
|
|
26
48
|
|
|
27
49
|
private actionCallbacks = new EventHandlers<string, ActionCallback>();
|
|
@@ -48,29 +70,21 @@ export class Viewer3cr {
|
|
|
48
70
|
}
|
|
49
71
|
|
|
50
72
|
/**
|
|
51
|
-
* DO-
|
|
52
|
-
* @param
|
|
53
|
-
* @param visibility The annotation visibility.
|
|
73
|
+
* DO-03: Toggle 2D annotation visibility.
|
|
74
|
+
* @param value The object visibility
|
|
54
75
|
*/
|
|
55
|
-
async toggle2dAnnotation(
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
Id: id,
|
|
59
|
-
Visibility: visibility
|
|
60
|
-
});
|
|
76
|
+
async toggle2dAnnotation(value: Optional<ObjectVisibility, 'Version'>): Promise<void> {
|
|
77
|
+
value.Version ??= '1.1.0';
|
|
78
|
+
await this.sendPayload(FrontEndInterfaces.data_overlay, DataOverlaysActions.do03, value);
|
|
61
79
|
}
|
|
62
80
|
|
|
63
81
|
/**
|
|
64
82
|
* 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
|
-
});
|
|
83
|
+
* @param value The object visibility
|
|
84
|
+
*/
|
|
85
|
+
async toggle3dAnnotation(value: Optional<ObjectVisibility, 'Version'>): Promise<void> {
|
|
86
|
+
value.Version ??= '1.1.0';
|
|
87
|
+
await this.sendPayload(FrontEndInterfaces.data_overlay, DataOverlaysActions.do11, value);
|
|
74
88
|
}
|
|
75
89
|
|
|
76
90
|
/**
|
|
@@ -83,96 +97,60 @@ export class Viewer3cr {
|
|
|
83
97
|
|
|
84
98
|
/**
|
|
85
99
|
* FM-03: Load previous CurrentScanState values.
|
|
86
|
-
* @param
|
|
87
|
-
*/
|
|
88
|
-
async loadScanSession(url: string): Promise<void> {
|
|
89
|
-
await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm03, {
|
|
90
|
-
Version: '1.1.0',
|
|
91
|
-
Url: url
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* FM-05: Load separate data overlay file from external UI.
|
|
97
|
-
* @param url The URL to the file.
|
|
98
|
-
*/
|
|
99
|
-
async loadDataOverlay(url: string): Promise<void> {
|
|
100
|
-
await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm05, {
|
|
101
|
-
Version: '1.1.0',
|
|
102
|
-
Url: url
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* FM-09: Load separate MCAD file from external UI.
|
|
108
|
-
* @param url The URL to the file.
|
|
100
|
+
* @param value The URL to the file.
|
|
109
101
|
*/
|
|
110
|
-
async
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
Url: url
|
|
114
|
-
});
|
|
102
|
+
async loadScanSession(value: Optional<LoadSessionState, 'Version'>): Promise<void> {
|
|
103
|
+
value.Version ??= '1.1.0';
|
|
104
|
+
await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm03, value);
|
|
115
105
|
}
|
|
116
106
|
|
|
117
107
|
/**
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* @param
|
|
108
|
+
* FM-05: Sets the data overlay session with the given session file.
|
|
109
|
+
* This will clear all previously loaded data overlay sessions.
|
|
110
|
+
* @param value The URL to the file.
|
|
121
111
|
*/
|
|
122
|
-
async
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
View: view,
|
|
126
|
-
Angle: deg,
|
|
127
|
-
});
|
|
112
|
+
async setDataOverlaySession(value: Optional<LoadSessionState, 'Version'>): Promise<void> {
|
|
113
|
+
value.Version ??= '1.1.0';
|
|
114
|
+
await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm05, value);
|
|
128
115
|
}
|
|
129
116
|
|
|
130
117
|
/**
|
|
131
|
-
*
|
|
132
|
-
* @param
|
|
133
|
-
* @param flipped Whether to enable horizontal flip.
|
|
118
|
+
* FM-06: Adds a data overlay session to existing sessions.
|
|
119
|
+
* @param value The URL to the file.
|
|
134
120
|
*/
|
|
135
|
-
async
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
View: view,
|
|
139
|
-
Flipped: flipped
|
|
140
|
-
})
|
|
121
|
+
async addDataOverlaySession(value: Optional<LoadSessionState, 'Version'>): Promise<void> {
|
|
122
|
+
value.Version ??= '1.1.0';
|
|
123
|
+
await this.sendPayload(FrontEndInterfaces.file_management, FileManagementActions.fm06, value);
|
|
141
124
|
}
|
|
142
125
|
|
|
143
126
|
/**
|
|
144
|
-
*
|
|
145
|
-
* @param
|
|
146
|
-
* @param
|
|
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
|
-
});
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* SO-04: Invert Volume Rendering
|
|
158
|
-
* @param sagittal If the Sagittal axis is inverted.
|
|
159
|
-
* @param coronal If the Coronal axis is inverted.
|
|
160
|
-
* @param transverse If the Transverse axis is inverted.
|
|
127
|
+
* FM-09: Load separate MCAD file from external UI.
|
|
128
|
+
* @param value The URL to the file.
|
|
129
|
+
* @param returnChannel The return channel.
|
|
130
|
+
* @param returnTo The return to id.
|
|
161
131
|
*/
|
|
162
|
-
async
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
132
|
+
async loadMcadObjects(
|
|
133
|
+
value?: Optional<LoadSessionState, 'Version'>,
|
|
134
|
+
returnChannel?: string[],
|
|
135
|
+
returnTo?: string
|
|
136
|
+
): Promise<void> {
|
|
137
|
+
await this.sendPayload(
|
|
138
|
+
FrontEndInterfaces.file_management,
|
|
139
|
+
FileManagementActions.fm09,
|
|
140
|
+
value,
|
|
141
|
+
returnChannel,
|
|
142
|
+
returnTo
|
|
143
|
+
);
|
|
170
144
|
}
|
|
171
145
|
|
|
172
146
|
async viewSelection(action: ViewSelectionActions) {
|
|
173
147
|
await this.sendPayload(FrontEndInterfaces.view_selection, action, emptyPayload);
|
|
174
148
|
}
|
|
175
149
|
|
|
150
|
+
async viewSelectionToggleView(payload: Optional<ViewToggleData, 'Version'>) {
|
|
151
|
+
await this.sendPayload(FrontEndInterfaces.view_selection, ViewSelectionActions.vs07, payload);
|
|
152
|
+
}
|
|
153
|
+
|
|
176
154
|
async sliderHandler(action: SlidersActions, value: number) {
|
|
177
155
|
if (unref(transactionStarted)) return;
|
|
178
156
|
await this.slider(action, value);
|
|
@@ -195,6 +173,79 @@ export class Viewer3cr {
|
|
|
195
173
|
}
|
|
196
174
|
}
|
|
197
175
|
|
|
176
|
+
/**
|
|
177
|
+
* MC-03: Set visibility of MCAD objects.
|
|
178
|
+
* @param value The object visibility value.
|
|
179
|
+
*/
|
|
180
|
+
async setMcadObjectVisibility(value: Optional<ObjectVisibility, 'Version'>): Promise<void> {
|
|
181
|
+
value.Version ??= '1.2.0';
|
|
182
|
+
await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc03, value);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* MC-04: Set colour & opacity of MCAD objects.
|
|
187
|
+
* @param value The colour & opacity value.
|
|
188
|
+
*/
|
|
189
|
+
async setMcadObjectColour(value: Optional<ObjectColour, 'Version'>): Promise<void> {
|
|
190
|
+
value.Version ??= '1.2.0';
|
|
191
|
+
await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc04, value);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* MC-05: Enables movement of MCAD objects.
|
|
196
|
+
* @param value The movement toggle.
|
|
197
|
+
*/
|
|
198
|
+
async moveMcadObject(value: Optional<ObjectBoolean, 'Version'>): Promise<void> {
|
|
199
|
+
value.Version ??= '1.2.0';
|
|
200
|
+
await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc05, value);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* MC-16: Invert MCAD objects.
|
|
205
|
+
* @param value The inversion state.
|
|
206
|
+
*/
|
|
207
|
+
async invertMcadObject(value: Optional<ObjectInvert, 'Version'>): Promise<void> {
|
|
208
|
+
value.Version ??= '1.2.0';
|
|
209
|
+
await this.sendPayload(FrontEndInterfaces.mcad, McadActions.mc16, value);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* MU-16: Set 2D/3D visibility of markups.
|
|
214
|
+
* @param id The markup id.
|
|
215
|
+
* @param visibility The visibility state.
|
|
216
|
+
*/
|
|
217
|
+
async setMarkupVisibility(id: string, visibility: boolean): Promise<void> {
|
|
218
|
+
const payload = { Version: '1.2.1', Id: id, Visibility2d: visibility, Visibility3d: visibility };
|
|
219
|
+
await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu16, [payload]);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* MU-20: 2D length tool.
|
|
224
|
+
* @param value If the length tool should be enabled.
|
|
225
|
+
*/
|
|
226
|
+
async lengthTool(value: Optional<InteractivityState, 'Version'>): Promise<void> {
|
|
227
|
+
value.Version ??= '1.2.0';
|
|
228
|
+
await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu20, value);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* MU-21: 2D polygon tool.
|
|
233
|
+
* @param value If the polygon tool should be enabled.
|
|
234
|
+
*/
|
|
235
|
+
async polygonTool(value: Optional<InteractivityState, 'Version'>): Promise<void> {
|
|
236
|
+
value.Version ??= '1.2.0';
|
|
237
|
+
await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu21, value);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* MU-22: 2D angle tool.
|
|
242
|
+
* @param value If the angle tool should be enabled.
|
|
243
|
+
*/
|
|
244
|
+
async angleTool(value: Optional<InteractivityState, 'Version'>): Promise<void> {
|
|
245
|
+
value.Version ??= '1.2.0';
|
|
246
|
+
await this.sendPayload(FrontEndInterfaces.markups, MarkupsActions.mu22, value);
|
|
247
|
+
}
|
|
248
|
+
|
|
198
249
|
/**
|
|
199
250
|
* NC-01: Set Navigation Cube Co-ordinates and Size.
|
|
200
251
|
* @param anchorPoint The anchor point on the screen.
|
|
@@ -203,7 +254,13 @@ export class Viewer3cr {
|
|
|
203
254
|
* @param width The navigation cube width.
|
|
204
255
|
* @param height The navigation cube height.
|
|
205
256
|
*/
|
|
206
|
-
async setNavCubePositionSize(
|
|
257
|
+
async setNavCubePositionSize(
|
|
258
|
+
anchorPoint: AnchorPoint,
|
|
259
|
+
x: number,
|
|
260
|
+
y: number,
|
|
261
|
+
width: number,
|
|
262
|
+
height: number
|
|
263
|
+
): Promise<void> {
|
|
207
264
|
await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc01, {
|
|
208
265
|
Version: '0.0.1',
|
|
209
266
|
AnchorPoint: anchorPoint,
|
|
@@ -218,8 +275,8 @@ export class Viewer3cr {
|
|
|
218
275
|
*/
|
|
219
276
|
async setNavCubeVisibility(visibility: boolean): Promise<void> {
|
|
220
277
|
await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc02, {
|
|
221
|
-
Version:
|
|
222
|
-
Value: visibility
|
|
278
|
+
Version: '0.0.1',
|
|
279
|
+
Value: visibility
|
|
223
280
|
});
|
|
224
281
|
}
|
|
225
282
|
|
|
@@ -254,8 +311,7 @@ export class Viewer3cr {
|
|
|
254
311
|
* @param a Alpha channel.
|
|
255
312
|
*/
|
|
256
313
|
async setNavCubeColourOpacity(r: number, g: number, b: number, a: number): Promise<void> {
|
|
257
|
-
|
|
258
|
-
await this.sendPayload(FrontEndInterfaces.navigation_cube, 'nc_05', {
|
|
314
|
+
await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc05, {
|
|
259
315
|
Version: '0.0.1',
|
|
260
316
|
R: clamp(r / 255, 0, 1),
|
|
261
317
|
G: clamp(g / 255, 0, 1),
|
|
@@ -273,8 +329,7 @@ export class Viewer3cr {
|
|
|
273
329
|
* @param a Alpha channel.
|
|
274
330
|
*/
|
|
275
331
|
async setNavCubeHighlightColourOpacity(r: number, g: number, b: number, a: number): Promise<void> {
|
|
276
|
-
|
|
277
|
-
await this.sendPayload(FrontEndInterfaces.navigation_cube, 'nc_07', {
|
|
332
|
+
await this.sendPayload(FrontEndInterfaces.navigation_cube, NavigationCubeActions.nc07, {
|
|
278
333
|
Version: '0.0.1',
|
|
279
334
|
R: clamp(r / 255, 0, 1),
|
|
280
335
|
G: clamp(g / 255, 0, 1),
|
|
@@ -289,11 +344,10 @@ export class Viewer3cr {
|
|
|
289
344
|
* @param value The movement in mm.
|
|
290
345
|
*/
|
|
291
346
|
async panLeft(view: ScanView, value: number): Promise<void> {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
Version: "0.0.1",
|
|
347
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm13, {
|
|
348
|
+
Version: '0.0.1',
|
|
295
349
|
View: view,
|
|
296
|
-
Movement: value
|
|
350
|
+
Movement: value
|
|
297
351
|
});
|
|
298
352
|
}
|
|
299
353
|
|
|
@@ -303,11 +357,10 @@ export class Viewer3cr {
|
|
|
303
357
|
* @param value The movement in mm.
|
|
304
358
|
*/
|
|
305
359
|
async panRight(view: ScanView, value: number): Promise<void> {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
Version: "0.0.1",
|
|
360
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm14, {
|
|
361
|
+
Version: '0.0.1',
|
|
309
362
|
View: view,
|
|
310
|
-
Movement: value
|
|
363
|
+
Movement: value
|
|
311
364
|
});
|
|
312
365
|
}
|
|
313
366
|
|
|
@@ -317,11 +370,10 @@ export class Viewer3cr {
|
|
|
317
370
|
* @param value The movement in mm.
|
|
318
371
|
*/
|
|
319
372
|
async panUp(view: ScanView, value: number): Promise<void> {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
Version: "0.0.1",
|
|
373
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm15, {
|
|
374
|
+
Version: '0.0.1',
|
|
323
375
|
View: view,
|
|
324
|
-
Movement: value
|
|
376
|
+
Movement: value
|
|
325
377
|
});
|
|
326
378
|
}
|
|
327
379
|
|
|
@@ -331,11 +383,10 @@ export class Viewer3cr {
|
|
|
331
383
|
* @param value The movement in mm.
|
|
332
384
|
*/
|
|
333
385
|
async panDown(view: ScanView, value: number): Promise<void> {
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
Version: "0.0.1",
|
|
386
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm16, {
|
|
387
|
+
Version: '0.0.1',
|
|
337
388
|
View: view,
|
|
338
|
-
Movement: value
|
|
389
|
+
Movement: value
|
|
339
390
|
});
|
|
340
391
|
}
|
|
341
392
|
|
|
@@ -345,8 +396,8 @@ export class Viewer3cr {
|
|
|
345
396
|
* @param value The amount to zoom in.
|
|
346
397
|
*/
|
|
347
398
|
async zoomIn(view: ScanView, value: number): Promise<void> {
|
|
348
|
-
await this.sendPayload(FrontEndInterfaces.scan_movement,
|
|
349
|
-
Version:
|
|
399
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm17, {
|
|
400
|
+
Version: '0.0.1',
|
|
350
401
|
View: view,
|
|
351
402
|
Movement: value
|
|
352
403
|
});
|
|
@@ -358,53 +409,121 @@ export class Viewer3cr {
|
|
|
358
409
|
* @param value The amount to zoom out.
|
|
359
410
|
*/
|
|
360
411
|
async zoomOut(view: ScanView, value: number): Promise<void> {
|
|
361
|
-
await this.sendPayload(FrontEndInterfaces.scan_movement,
|
|
362
|
-
Version:
|
|
412
|
+
await this.sendPayload(FrontEndInterfaces.scan_movement, ScanMovementActions.sm18, {
|
|
413
|
+
Version: '0.0.1',
|
|
363
414
|
View: view,
|
|
364
415
|
Movement: value
|
|
365
416
|
});
|
|
366
417
|
}
|
|
367
418
|
|
|
419
|
+
/**
|
|
420
|
+
* SO-01: Rotate 2D view by up to +-XXX degrees.
|
|
421
|
+
* @param view The 2D view.
|
|
422
|
+
* @param deg The degrees.
|
|
423
|
+
*/
|
|
424
|
+
async rotateByDeg(view: ScanView, deg: number) {
|
|
425
|
+
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so01, {
|
|
426
|
+
Version: '0.0.1',
|
|
427
|
+
View: view,
|
|
428
|
+
Angle: deg
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* SO-02: Flip 2D View Horizontally.
|
|
434
|
+
* @param view The scan view.
|
|
435
|
+
* @param flipped Whether to enable horizontal flip.
|
|
436
|
+
*/
|
|
437
|
+
async flipHorizontally(view: ScanView, flipped: boolean): Promise<void> {
|
|
438
|
+
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so02, {
|
|
439
|
+
Version: '0.0.1',
|
|
440
|
+
View: view,
|
|
441
|
+
Flipped: flipped
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* SO-03: Flip 2D View Vertically.
|
|
447
|
+
* @param view The scan view.
|
|
448
|
+
* @param flipped Whether to enable vertical flip.
|
|
449
|
+
*/
|
|
450
|
+
async flipVertically(view: ScanView, flipped: boolean): Promise<void> {
|
|
451
|
+
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so03, {
|
|
452
|
+
Version: '0.0.1',
|
|
453
|
+
View: view,
|
|
454
|
+
Flipped: flipped
|
|
455
|
+
});
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* SO-04: Invert Volume Rendering
|
|
460
|
+
* @param sagittal If the Sagittal axis is inverted.
|
|
461
|
+
* @param coronal If the Coronal axis is inverted.
|
|
462
|
+
* @param transverse If the Transverse axis is inverted.
|
|
463
|
+
*/
|
|
464
|
+
async invertTransform(sagittal: boolean, coronal: boolean, transverse: boolean): Promise<void> {
|
|
465
|
+
await this.sendPayload(FrontEndInterfaces.scan_orientation, ScanOrientationActions.so04, {
|
|
466
|
+
Version: '0.0.1',
|
|
467
|
+
InvertedSagittal: sagittal,
|
|
468
|
+
InvertedCoronal: coronal,
|
|
469
|
+
InvertedTransverse: transverse
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
|
|
368
473
|
/**
|
|
369
474
|
* IN-01, IN-02: Enable/Disable Unity input interactions.
|
|
370
475
|
* @param isHovering If the inputs should be enabled.
|
|
371
476
|
*/
|
|
372
477
|
async hoverOverCanvas(isHovering: boolean) {
|
|
373
478
|
await this.sendPayload(FrontEndInterfaces.interactivity, InteractivityActions.in01, {
|
|
374
|
-
Version:
|
|
375
|
-
Value: isHovering
|
|
479
|
+
Version: '0.0.1',
|
|
480
|
+
Value: isHovering
|
|
376
481
|
});
|
|
377
482
|
await this.sendPayload(FrontEndInterfaces.interactivity, InteractivityActions.in02, {
|
|
378
|
-
Version:
|
|
379
|
-
Value: isHovering
|
|
483
|
+
Version: '0.0.1',
|
|
484
|
+
Value: isHovering
|
|
380
485
|
});
|
|
381
486
|
}
|
|
382
487
|
|
|
383
488
|
private async scanMovement(action: ScanMovementActions, value: number) {
|
|
384
489
|
await this.sendPayload(FrontEndInterfaces.scan_movement, action, {
|
|
385
|
-
Version:
|
|
386
|
-
Value:
|
|
490
|
+
Version: '0.0.1',
|
|
491
|
+
Value: value
|
|
387
492
|
});
|
|
388
493
|
}
|
|
389
494
|
|
|
390
495
|
private async slider(action: SlidersActions, value: number) {
|
|
391
496
|
await this.sendPayload(FrontEndInterfaces.sliders, action, {
|
|
392
|
-
Version:
|
|
393
|
-
Value:
|
|
497
|
+
Version: '0.0.1',
|
|
498
|
+
Value: value
|
|
394
499
|
});
|
|
395
500
|
}
|
|
396
501
|
|
|
397
|
-
async sendPayload(
|
|
502
|
+
async sendPayload(
|
|
503
|
+
iface: string,
|
|
504
|
+
action: string,
|
|
505
|
+
message: any,
|
|
506
|
+
returnChannel?: string[],
|
|
507
|
+
returnTo?: string
|
|
508
|
+
): Promise<void> {
|
|
398
509
|
await executePayload({
|
|
399
|
-
Version:
|
|
510
|
+
Version: '0.0.1',
|
|
400
511
|
Interface: iface as any,
|
|
401
512
|
Action: action as any,
|
|
402
|
-
|
|
513
|
+
ReturnChannel: returnChannel ? JSON.stringify(returnChannel) : null,
|
|
514
|
+
ReturnTo: returnTo ?? null,
|
|
515
|
+
Message: JSON.stringify(message)
|
|
403
516
|
});
|
|
404
517
|
}
|
|
405
518
|
|
|
406
|
-
|
|
407
|
-
await this.interfaceCallbacks.call(
|
|
408
|
-
|
|
519
|
+
async onPayload(payload: FrontEndPayload): Promise<void> {
|
|
520
|
+
await this.interfaceCallbacks.call(
|
|
521
|
+
payload.Interface,
|
|
522
|
+
payload.Message,
|
|
523
|
+
payload.Action,
|
|
524
|
+
payload.ReturnChannel,
|
|
525
|
+
payload.ReturnTo
|
|
526
|
+
);
|
|
527
|
+
await this.actionCallbacks.call(payload.Action, payload.Message, payload.ReturnChannel, payload.ReturnTo);
|
|
409
528
|
}
|
|
410
529
|
}
|
|
@@ -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
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { InvertTransformData, Vector3Data } from '@3cr/types-ts';
|
|
2
|
+
import { DataOverlay, DataOverlayRaw } from '@/types/data-overlay';
|
|
3
|
+
import { SegmentAngle } from '@/types/segment-angle';
|
|
4
|
+
|
|
5
|
+
interface DataOverlayAngleBase {
|
|
6
|
+
Points: Vector3Data[];
|
|
7
|
+
Inverted: InvertTransformData;
|
|
8
|
+
Visibility2d: boolean | null;
|
|
9
|
+
Visibility3d: boolean | null;
|
|
10
|
+
SegmentAngles: SegmentAngle[];
|
|
11
|
+
Units: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export type DataOverlayAngle = DataOverlayAngleBase & DataOverlay;
|
|
15
|
+
|
|
16
|
+
export type DataOverlayAngleRaw = DataOverlayAngleBase & DataOverlayRaw;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Vector3Data, InvertTransformData, ColourData, Vector2Data } from '@3cr/types-ts';
|
|
2
|
+
import { DataOverlay, DataOverlayRaw } from '@/types/data-overlay';
|
|
3
|
+
|
|
4
|
+
interface DataOverlayAnnotationBase {
|
|
5
|
+
Position: Vector3Data;
|
|
6
|
+
Inverted: InvertTransformData;
|
|
7
|
+
Colour2d: ColourData;
|
|
8
|
+
Colour3d: ColourData;
|
|
9
|
+
Size2d: Vector2Data;
|
|
10
|
+
Size3d: Vector3Data;
|
|
11
|
+
Icon2d: string;
|
|
12
|
+
Visibility2d: boolean | null;
|
|
13
|
+
Visibility3d: boolean | null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type DataOverlayAnnotation = DataOverlayAnnotationBase & DataOverlay;
|
|
17
|
+
|
|
18
|
+
export type DataOverlayAnnotationRaw = DataOverlayAnnotationBase & DataOverlayRaw;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DataOverlayType } from '@3cr/types-ts/types/DataOverlayType';
|
|
2
|
+
|
|
3
|
+
interface DataOverlayDataBase {
|
|
4
|
+
Version: string;
|
|
5
|
+
Id: string;
|
|
6
|
+
DataType: DataOverlayType;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface DataOverlayData<T> extends DataOverlayDataBase {
|
|
10
|
+
Data: T;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface DataOverlayDataRaw extends DataOverlayDataBase {
|
|
14
|
+
Data: string;
|
|
15
|
+
}
|