@3cr/viewer-browser 0.0.86 → 0.0.93
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/coverage/3cr-viewer-browser/index.html +1 -1
- package/coverage/3cr-viewer-browser/index.ts.html +1 -1
- package/coverage/3cr-viewer-browser/src/App.vue.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/WebGL3DR.vue.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/icons/index.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/icons/liver.vue.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/index.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/loading/LoadingSpinner.vue.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/loading/index.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/modal/MftpWebGL3DRModal.vue.html +77 -200
- package/coverage/3cr-viewer-browser/src/components/modal/index.html +17 -17
- package/coverage/3cr-viewer-browser/src/components/selectors/ValueSelector.vue.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/selectors/index.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/sliders/DoubleSliderSelector.vue.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/sliders/VerticalSliderSelector.vue.html +1 -1
- package/coverage/3cr-viewer-browser/src/components/sliders/index.html +1 -1
- package/coverage/3cr-viewer-browser/src/dataLayer/iconData.ts.html +1 -1
- package/coverage/3cr-viewer-browser/src/dataLayer/index.html +27 -27
- package/coverage/3cr-viewer-browser/src/dataLayer/payloadHandler.ts.html +185 -74
- package/coverage/3cr-viewer-browser/src/dataLayer/scanState.ts.html +11 -41
- package/coverage/3cr-viewer-browser/src/helpers/index.html +1 -1
- package/coverage/3cr-viewer-browser/src/helpers/layoutOverlayStyle.ts.html +1 -1
- package/coverage/3cr-viewer-browser/src/helpers/modelHelper.ts.html +1 -1
- package/coverage/3cr-viewer-browser/src/helpers/utils.ts.html +3 -3
- package/coverage/3cr-viewer-browser/src/index.html +1 -1
- package/coverage/3cr-viewer-browser/src/main.ts.html +1 -1
- package/coverage/3cr-viewer-browser/src/models/LoadViewerOptions.ts.html +10 -10
- package/coverage/3cr-viewer-browser/src/models/index.html +7 -7
- package/coverage/3cr-viewer-browser/src/notifications/index.html +17 -17
- package/coverage/3cr-viewer-browser/src/notifications/notification.ts.html +79 -70
- package/coverage/3cr-viewer-browser/src/plugins/index.html +1 -1
- package/coverage/3cr-viewer-browser/src/plugins/index.ts.html +1 -1
- package/coverage/3cr-viewer-browser/src/plugins/vuetify.ts.html +1 -1
- package/coverage/index.html +41 -41
- package/dist/Viewer3CR.js +11 -11
- package/dist/Viewer3CR.mjs +5371 -5375
- package/dist/Viewer3CR.umd.js +11 -11
- package/package.json +1 -1
- package/src/components/modal/MftpWebGL3DRModal.vue +33 -74
- package/src/components/modal/__tests__/mftp-webgl-3dr-modal.spec.ts +100 -148
- package/src/dataLayer/__tests__/payload-handler.spec.ts +119 -3
- package/src/dataLayer/payloadHandler.ts +39 -2
- package/src/dataLayer/scanState.ts +3 -13
- package/src/models/__tests__/load-viewer-options.spec.ts +22 -0
- package/src/notifications/__tests__/notification.spec.ts +120 -0
- package/src/notifications/notification.ts +4 -1
package/package.json
CHANGED
|
@@ -172,7 +172,7 @@
|
|
|
172
172
|
height="36"
|
|
173
173
|
style="min-width: 36px !important"
|
|
174
174
|
:color="isLayout2x2 ? 'secondary' : 'primary'"
|
|
175
|
-
@click="layouts(
|
|
175
|
+
@click="payloadHandler.layouts(LayoutActions.lo02)"
|
|
176
176
|
><v-icon>grid_view</v-icon></v-btn
|
|
177
177
|
>
|
|
178
178
|
<v-btn
|
|
@@ -180,7 +180,7 @@
|
|
|
180
180
|
height="36"
|
|
181
181
|
style="min-width: 36px !important"
|
|
182
182
|
:color="isLayout1x3 ? 'secondary' : 'primary'"
|
|
183
|
-
@click="layouts(
|
|
183
|
+
@click="payloadHandler.layouts(LayoutActions.lo03)"
|
|
184
184
|
><v-icon style="rotate: -90deg">view_comfy</v-icon></v-btn
|
|
185
185
|
>
|
|
186
186
|
<v-btn class="" variant="flat" color="red" @click="alterValue(false)"
|
|
@@ -202,7 +202,6 @@
|
|
|
202
202
|
<div
|
|
203
203
|
class="d-flex align-center pb-1"
|
|
204
204
|
:class="drawerCollapsed ? 'py-2' : 'pa-2'"
|
|
205
|
-
@click="snap"
|
|
206
205
|
>
|
|
207
206
|
<img
|
|
208
207
|
v-if="!drawerCollapsed"
|
|
@@ -224,7 +223,6 @@
|
|
|
224
223
|
<div
|
|
225
224
|
class="text-center mx-auto pa-0 text-white sub-type"
|
|
226
225
|
:style="drawerCollapsed ? 'font-size: 100%' : 'font-size: 140%'"
|
|
227
|
-
@click="snap"
|
|
228
226
|
>
|
|
229
227
|
Online Viewer
|
|
230
228
|
</div>
|
|
@@ -343,7 +341,9 @@
|
|
|
343
341
|
closeOnContentClick: true,
|
|
344
342
|
}"
|
|
345
343
|
placeholder="Select a Density Preset"
|
|
346
|
-
@change="
|
|
344
|
+
@change="
|
|
345
|
+
payloadHandler.setPreset(PresetsActions.pr01, $event)
|
|
346
|
+
"
|
|
347
347
|
>
|
|
348
348
|
<template #item="{ props, item }">
|
|
349
349
|
<v-list-item
|
|
@@ -352,7 +352,9 @@
|
|
|
352
352
|
:title="item.raw.Name"
|
|
353
353
|
lines="three"
|
|
354
354
|
@mousedown.prevent
|
|
355
|
-
@click="
|
|
355
|
+
@click="
|
|
356
|
+
payloadHandler.setPreset(PresetsActions.pr01, item.raw)
|
|
357
|
+
"
|
|
356
358
|
>
|
|
357
359
|
<template v-slot:prepend>
|
|
358
360
|
<v-icon
|
|
@@ -390,7 +392,9 @@
|
|
|
390
392
|
}"
|
|
391
393
|
placeholder="Select a Colour Preset"
|
|
392
394
|
return-object
|
|
393
|
-
@update:modelValue="
|
|
395
|
+
@update:modelValue="
|
|
396
|
+
payloadHandler.setPreset(PresetsActions.pr02, $event)
|
|
397
|
+
"
|
|
394
398
|
></v-select>
|
|
395
399
|
</v-card-actions>
|
|
396
400
|
</v-expansion-panel-text>
|
|
@@ -431,7 +435,7 @@
|
|
|
431
435
|
id="webgl-container"
|
|
432
436
|
@on_payload="handleOnPayload"
|
|
433
437
|
@instance_loaded="load"
|
|
434
|
-
@hover="hoverOverCanvas"
|
|
438
|
+
@hover="payloadHandler.hoverOverCanvas($event)"
|
|
435
439
|
>
|
|
436
440
|
<div
|
|
437
441
|
class="bordered-event-window"
|
|
@@ -471,7 +475,7 @@
|
|
|
471
475
|
<div v-if="scanState.Layout.PositionData.length === 1">
|
|
472
476
|
<v-btn
|
|
473
477
|
color="transparent"
|
|
474
|
-
@click="layouts(previousLayout)"
|
|
478
|
+
@click="payloadHandler.layouts(previousLayout)"
|
|
475
479
|
:icon="true"
|
|
476
480
|
>
|
|
477
481
|
<v-icon color="white">fullscreen_exit</v-icon>
|
|
@@ -673,6 +677,8 @@ import { generateDivStyleForLayout } from "@/helpers/layoutOverlayStyle";
|
|
|
673
677
|
import {
|
|
674
678
|
FileManagementActions,
|
|
675
679
|
FrontEndInterfaces,
|
|
680
|
+
LayoutActions,
|
|
681
|
+
NotificationsActions,
|
|
676
682
|
PositionData,
|
|
677
683
|
PresetsActions,
|
|
678
684
|
ScanMovementActions,
|
|
@@ -708,6 +714,7 @@ import {
|
|
|
708
714
|
initialScanState,
|
|
709
715
|
isLayout1x3,
|
|
710
716
|
isLayout2x2,
|
|
717
|
+
previousLayout,
|
|
711
718
|
scanState,
|
|
712
719
|
setInitialScanStateFromPayload,
|
|
713
720
|
setScanStateFromPayload,
|
|
@@ -721,16 +728,14 @@ import {
|
|
|
721
728
|
} from "@/dataLayer/scanState";
|
|
722
729
|
import { getIconForPreset } from "@/dataLayer/iconData";
|
|
723
730
|
|
|
724
|
-
const emit = defineEmits<{
|
|
725
|
-
instanceLoaded: [void];
|
|
726
|
-
snap: [void];
|
|
727
|
-
}>();
|
|
728
|
-
|
|
729
731
|
export interface Props {
|
|
730
732
|
payload?: LoadViewerPayload;
|
|
731
733
|
options?: LoadViewerOptions;
|
|
732
734
|
}
|
|
733
735
|
|
|
736
|
+
const emit = defineEmits<{
|
|
737
|
+
instanceLoaded: [void];
|
|
738
|
+
}>();
|
|
734
739
|
const props = withDefaults(defineProps<Props>(), {
|
|
735
740
|
payload: () => ({
|
|
736
741
|
Url: "https://webgl-3dr.singular.health/test_scans/8bdddee1-e581-485d-827d-6aa12eef2fc8/Head+Axial+Axial.3vxl",
|
|
@@ -744,27 +749,12 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
744
749
|
|
|
745
750
|
const web_gl = ref<typeof WebGL3DR | null>(null);
|
|
746
751
|
const payloadHandler = new PayloadHandler(web_gl);
|
|
747
|
-
|
|
748
|
-
function executeOption(key: keyof LoadViewerOptions) {
|
|
749
|
-
if (unref(isDemo)) {
|
|
750
|
-
executeDemoOption(key);
|
|
751
|
-
} else {
|
|
752
|
-
const functionToExecute = unref(props.options)[key];
|
|
753
|
-
if (functionToExecute !== undefined) {
|
|
754
|
-
functionToExecute();
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
|
|
759
|
-
const emptyPayload = { Version: "1.1.0" };
|
|
760
|
-
|
|
761
752
|
const value = ref<boolean>(false);
|
|
762
753
|
const drawer = ref<boolean>(true);
|
|
763
754
|
const drawerCollapsed = ref<boolean>(true);
|
|
764
755
|
const scanLoading = ref<boolean>(true);
|
|
765
756
|
const instanceLoaded = ref<boolean>(true);
|
|
766
757
|
const openPanels = ref<number>(0);
|
|
767
|
-
const previousLayout = ref<string>("lo_02");
|
|
768
758
|
const footerItems = ref([
|
|
769
759
|
{
|
|
770
760
|
text: "Reset Scan",
|
|
@@ -794,7 +784,6 @@ const footerItems = ref([
|
|
|
794
784
|
click: async () => executeOption("OnScreenshot"),
|
|
795
785
|
},
|
|
796
786
|
]);
|
|
797
|
-
|
|
798
787
|
const miniMenu = ref([
|
|
799
788
|
{
|
|
800
789
|
icon: "display_settings",
|
|
@@ -803,11 +792,21 @@ const miniMenu = ref([
|
|
|
803
792
|
"Tissue Density - Change the view of density within the scan, allowing you to see through a certain density of particles",
|
|
804
793
|
},
|
|
805
794
|
]);
|
|
806
|
-
|
|
807
795
|
const rotationDeg = ref<number>(0);
|
|
808
796
|
const stateOverlay = ref<boolean>(false);
|
|
809
797
|
const m_closeDialog = ref<boolean>(false);
|
|
810
798
|
|
|
799
|
+
function executeOption(key: keyof LoadViewerOptions) {
|
|
800
|
+
if (unref(isDemo)) {
|
|
801
|
+
executeDemoOption(key);
|
|
802
|
+
} else {
|
|
803
|
+
const functionToExecute = unref(props.options)[key];
|
|
804
|
+
if (functionToExecute !== undefined) {
|
|
805
|
+
functionToExecute();
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
|
|
811
810
|
type WatchSlidersType = { [key in SlidersActions]: WatchSource<number> };
|
|
812
811
|
const watchSliders: WatchSlidersType = {
|
|
813
812
|
[SlidersActions.sl01]: () => scanState.value.Display.Brightness,
|
|
@@ -879,17 +878,9 @@ function getViewName(index: number) {
|
|
|
879
878
|
})[index];
|
|
880
879
|
}
|
|
881
880
|
async function fullscreenLayout(view: ScanView) {
|
|
882
|
-
await layouts(
|
|
881
|
+
await payloadHandler.layouts(LayoutActions.lo01);
|
|
883
882
|
await payloadHandler.viewSelection(`vs_0${view + 1}` as ViewSelectionActions);
|
|
884
883
|
}
|
|
885
|
-
// async function scanMovementHandler(action: string, value: number) {
|
|
886
|
-
// if (unref(transactionStarted)) return;
|
|
887
|
-
// await scanMovement(action, value);
|
|
888
|
-
// }
|
|
889
|
-
// async function sliderHandler(action: string, value: number) {
|
|
890
|
-
// if (unref(transactionStarted)) return;
|
|
891
|
-
// await slider(action, value);
|
|
892
|
-
// }
|
|
893
884
|
|
|
894
885
|
function closeModal() {
|
|
895
886
|
m_closeDialog.value = false;
|
|
@@ -912,31 +903,6 @@ async function load() {
|
|
|
912
903
|
await sendPayload(web_gl, "file_management", "fm_01", props.payload);
|
|
913
904
|
}
|
|
914
905
|
|
|
915
|
-
async function layouts(action: string) {
|
|
916
|
-
if (action !== "lo_01") previousLayout.value = action;
|
|
917
|
-
await sendPayload(web_gl, FrontEndInterfaces.layout, action, emptyPayload);
|
|
918
|
-
}
|
|
919
|
-
async function snap() {
|
|
920
|
-
emit("snap");
|
|
921
|
-
}
|
|
922
|
-
|
|
923
|
-
async function setPreset(action: PresetsActions, preset: any) {
|
|
924
|
-
await sendPayload(web_gl, "presets", action, preset);
|
|
925
|
-
if (action === PresetsActions.pr02) {
|
|
926
|
-
currentColourPreset.value = preset;
|
|
927
|
-
}
|
|
928
|
-
}
|
|
929
|
-
|
|
930
|
-
async function hoverOverCanvas(isHovering: boolean) {
|
|
931
|
-
await sendPayload(web_gl, "interactivity", "in_01", {
|
|
932
|
-
Version: "0.0.1",
|
|
933
|
-
Value: isHovering,
|
|
934
|
-
});
|
|
935
|
-
await sendPayload(web_gl, "interactivity", "in_02", {
|
|
936
|
-
Version: "0.0.1",
|
|
937
|
-
Value: isHovering,
|
|
938
|
-
});
|
|
939
|
-
}
|
|
940
906
|
async function i_fileManagement(action: string, message: string) {
|
|
941
907
|
if (action === FileManagementActions.fm02) {
|
|
942
908
|
await setInitialScanStateFromPayload(action, message);
|
|
@@ -945,7 +911,7 @@ async function i_fileManagement(action: string, message: string) {
|
|
|
945
911
|
transactionStarted.value = false;
|
|
946
912
|
scanLoading.value = false;
|
|
947
913
|
drawerCollapsed.value = false;
|
|
948
|
-
await hoverOverCanvas(false);
|
|
914
|
+
await payloadHandler.hoverOverCanvas(false);
|
|
949
915
|
}
|
|
950
916
|
}
|
|
951
917
|
|
|
@@ -961,7 +927,7 @@ function handleOnPayload(
|
|
|
961
927
|
i_fileManagement(actionSet, message);
|
|
962
928
|
}
|
|
963
929
|
if (interfaceSet === FrontEndInterfaces.notifications) {
|
|
964
|
-
handleNotification(actionSet, message);
|
|
930
|
+
handleNotification(actionSet as NotificationsActions, message);
|
|
965
931
|
}
|
|
966
932
|
}
|
|
967
933
|
|
|
@@ -971,23 +937,16 @@ defineExpose({
|
|
|
971
937
|
handleOnPayload,
|
|
972
938
|
sendPayload,
|
|
973
939
|
getIconForPreset,
|
|
974
|
-
cSlider,
|
|
975
|
-
sSlider,
|
|
976
|
-
tSlider,
|
|
977
940
|
thresholdSlider,
|
|
978
941
|
windowSlider,
|
|
979
942
|
m_closeDialog,
|
|
980
943
|
closeModal,
|
|
981
|
-
snap,
|
|
982
944
|
scanState,
|
|
983
945
|
initialScanState,
|
|
984
946
|
footerItems,
|
|
985
|
-
// rotateByDeg,
|
|
986
947
|
getCurrentActiveView,
|
|
987
948
|
getViewName,
|
|
988
949
|
fullscreenLayout,
|
|
989
|
-
layouts,
|
|
990
|
-
setPreset,
|
|
991
950
|
value,
|
|
992
951
|
transactionStarted,
|
|
993
952
|
});
|