@ohif/app 3.0.0 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/151.bundle.07bac9172580a60fae7a.js +2579 -0
- package/dist/192.bundle.62be5f0ef9705a485071.js +894 -0
- package/dist/199.bundle.2286f24cf0a068e7f50c.js +480 -0
- package/dist/205.bundle.39e6c847d618ad2b1b7a.js +62 -0
- package/dist/208.bundle.23748a85dfdc79c05d3a.js +864 -0
- package/dist/270.bundle.abbdb5348274bae3e8bc.js +23906 -0
- package/dist/283.bundle.33f99a75a5e2d9333da2.js +2939 -0
- package/dist/295.bundle.5105ce962be15c92484d.js +48 -0
- package/dist/331.bundle.7ac7b142d249d14fd99e.js +73034 -0
- package/dist/351.bundle.c5d7279ef42e30f61e08.js +1471 -0
- package/dist/351.css +3 -0
- package/dist/36785fbd89b0e17f6099.wasm +0 -0
- package/dist/381.bundle.0905e683605fcbc0895f.js +1009 -0
- package/dist/404.bundle.0f7a500421f246153d89.js +706 -0
- package/dist/50.bundle.4cb103cd20f5ffccf927.js +324 -0
- package/dist/5004fdc02f329ce53b69.wasm +0 -0
- package/dist/531.bundle.1bc152c87c7e2e987d2b.js +5935 -0
- package/dist/55.bundle.a5a215e13a8511f7aee7.js +685 -0
- package/dist/55.css +3 -0
- package/dist/569.bundle.d147c0aa0604f8ea2094.js +514 -0
- package/dist/581.bundle.646c89c5c3e3ee096363.js +508 -0
- package/dist/606.bundle.5d876f5f3dd8287f0a28.js +4939 -0
- package/dist/610.min.worker.js +2 -0
- package/dist/610.min.worker.js.map +1 -0
- package/dist/616.bundle.bec4736d8c9513e62856.js +686 -0
- package/dist/62ab5d58a2bea7b5a1dc.wasm +0 -0
- package/dist/642.bundle.030d908e22c8ff5611f3.js +169 -0
- package/dist/65916ef3def695744bda.wasm +0 -0
- package/dist/664.bundle.4792c88ae0d6d4b5ed13.js +901 -0
- package/dist/707.bundle.0a74aa3e61ed002eb3c6.js +9049 -0
- package/dist/707.css +1 -0
- package/dist/728.bundle.d13856835357400fef82.js +26221 -0
- package/dist/744.bundle.53b07e48e07a11e920ac.js +2355 -0
- package/dist/75788f12450d4c5ed494.wasm +0 -0
- package/dist/75a0c2dfe07b824c7d21.wasm +0 -0
- package/dist/780.bundle.f60ac1906e0ae080dee8.js +4769 -0
- package/dist/790.bundle.b4df2c5d78a2a565b150.js +454 -0
- package/dist/799.bundle.3fff638815e355b0bdfd.js +271 -0
- package/dist/806.css +1 -0
- package/dist/82.bundle.a24015533196e05d190e.js +6104 -0
- package/dist/917.bundle.a094ae9e9de6df4119ae.js +196 -0
- package/dist/926.bundle.dbc9d0e591cb9217fda2.js +72552 -0
- package/dist/935.bundle.deeffff0e4f7b528e3c3.js +1849 -0
- package/dist/945.min.worker.js +2 -0
- package/dist/945.min.worker.js.map +1 -0
- package/dist/953.bundle.c14d9eb6400f697019ee.js +449 -0
- package/dist/973.bundle.4100cf103686b64938d1.js +261 -0
- package/dist/976.bundle.2720eb892514e1818018.js +2725 -0
- package/dist/984.bundle.157fc66ea5040e1364af.js +1842 -0
- package/dist/_headers +6 -0
- package/dist/_redirects +6 -0
- package/dist/app-config.js +215 -0
- package/dist/app.bundle.253eeb2a7ee986e89c50.js +154621 -0
- package/dist/app.bundle.css +21 -0
- package/dist/assets/android-chrome-144x144.png +0 -0
- package/dist/assets/android-chrome-192x192.png +0 -0
- package/dist/assets/android-chrome-256x256.png +0 -0
- package/dist/assets/android-chrome-36x36.png +0 -0
- package/dist/assets/android-chrome-384x384.png +0 -0
- package/dist/assets/android-chrome-48x48.png +0 -0
- package/dist/assets/android-chrome-512x512.png +0 -0
- package/dist/assets/android-chrome-72x72.png +0 -0
- package/dist/assets/android-chrome-96x96.png +0 -0
- package/dist/assets/apple-touch-icon-1024x1024.png +0 -0
- package/dist/assets/apple-touch-icon-114x114.png +0 -0
- package/dist/assets/apple-touch-icon-120x120.png +0 -0
- package/dist/assets/apple-touch-icon-144x144.png +0 -0
- package/dist/assets/apple-touch-icon-152x152.png +0 -0
- package/dist/assets/apple-touch-icon-167x167.png +0 -0
- package/dist/assets/apple-touch-icon-180x180.png +0 -0
- package/dist/assets/apple-touch-icon-57x57.png +0 -0
- package/dist/assets/apple-touch-icon-60x60.png +0 -0
- package/dist/assets/apple-touch-icon-72x72.png +0 -0
- package/dist/assets/apple-touch-icon-76x76.png +0 -0
- package/dist/assets/apple-touch-icon-precomposed.png +0 -0
- package/dist/assets/apple-touch-icon.png +0 -0
- package/dist/assets/apple-touch-startup-image-1182x2208.png +0 -0
- package/dist/assets/apple-touch-startup-image-1242x2148.png +0 -0
- package/dist/assets/apple-touch-startup-image-1496x2048.png +0 -0
- package/dist/assets/apple-touch-startup-image-1536x2008.png +0 -0
- package/dist/assets/apple-touch-startup-image-320x460.png +0 -0
- package/dist/assets/apple-touch-startup-image-640x1096.png +0 -0
- package/dist/assets/apple-touch-startup-image-640x920.png +0 -0
- package/dist/assets/apple-touch-startup-image-748x1024.png +0 -0
- package/dist/assets/apple-touch-startup-image-750x1294.png +0 -0
- package/dist/assets/apple-touch-startup-image-768x1004.png +0 -0
- package/dist/assets/browserconfig.xml +12 -0
- package/dist/assets/coast-228x228.png +0 -0
- package/dist/assets/favicon-16x16.png +0 -0
- package/dist/assets/favicon-32x32.png +0 -0
- package/dist/assets/favicon.ico +0 -0
- package/dist/assets/firefox_app_128x128.png +0 -0
- package/dist/assets/firefox_app_512x512.png +0 -0
- package/dist/assets/firefox_app_60x60.png +0 -0
- package/dist/assets/manifest.webapp +14 -0
- package/dist/assets/mstile-144x144.png +0 -0
- package/dist/assets/mstile-150x150.png +0 -0
- package/dist/assets/mstile-310x150.png +0 -0
- package/dist/assets/mstile-310x310.png +0 -0
- package/dist/assets/mstile-70x70.png +0 -0
- package/dist/assets/yandex-browser-50x50.png +0 -0
- package/dist/assets/yandex-browser-manifest.json +9 -0
- package/dist/b6b803111e2d06a825bd.wasm +0 -0
- package/dist/c22b37c3488e1d6c3aa4.wasm +0 -0
- package/dist/cornerstoneDICOMImageLoader.min.js +2 -0
- package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -0
- package/dist/dicom-microscopy-viewer.bundle.aa60bdf008c32c39cfd7.js +12 -0
- package/dist/dicomMicroscopyViewer.min.js +3 -0
- package/dist/dicomMicroscopyViewer.min.js.LICENSE.txt +29 -0
- package/dist/es6-shim.min.js +12 -0
- package/dist/google.js +75 -0
- package/dist/index.html +1 -0
- package/dist/index.worker.ea71efba2ce63c499055.worker.js +2 -0
- package/dist/index.worker.ea71efba2ce63c499055.worker.js.map +1 -0
- package/dist/index.worker.min.worker.js +2 -0
- package/dist/index.worker.min.worker.js.map +1 -0
- package/dist/init-service-worker.js +59 -0
- package/dist/manifest.json +59 -0
- package/dist/ohif-logo-light.svg +15 -0
- package/dist/ohif-logo.svg +15 -0
- package/dist/oidc-client.min.js +46 -0
- package/dist/polyfill.min.js +1 -0
- package/dist/silent-refresh.html +16 -0
- package/dist/sw.js +56 -0
- package/package.json +24 -23
package/dist/55.css
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
.DicomMicroscopyViewer{--ol-partial-background-color:#7f7f7fb3;--ol-foreground-color:#000;--ol-subtle-foreground-color:#000;--ol-subtle-background-color:#4e4e4e80}.DicomMicroscopyViewer .ol-box{background-color:var(--ol-partial-background-color);border:1.5px solid var(--ol-background-color);border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box}.DicomMicroscopyViewer .ol-mouse-position{position:absolute;right:8px;top:8px}.DicomMicroscopyViewer .ol-scale-line{background:var(--ol-partial-background-color);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.DicomMicroscopyViewer .ol-scale-line-inner{border:1px solid var(--ol-subtle-foreground-color);border-top:none;color:var(--ol-foreground-color);font-size:10px;margin:1px;text-align:center;-webkit-transition:all .25s;transition:all .25s;will-change:contents,width}.DicomMicroscopyViewer .ol-scale-bar{bottom:8px;left:8px;position:absolute}.DicomMicroscopyViewer .ol-scale-bar-inner{display:-webkit-box;display:-ms-flexbox;display:flex}.DicomMicroscopyViewer .ol-scale-step-marker{background-color:var(--ol-foreground-color);float:right;height:15px;width:1px;z-index:10}.DicomMicroscopyViewer .ol-scale-step-text{bottom:-5px;font-size:10px;z-index:11}.DicomMicroscopyViewer .ol-scale-step-text,.DicomMicroscopyViewer .ol-scale-text{color:var(--ol-foreground-color);position:absolute;text-shadow:-1.5px 0 var(--ol-partial-background-color),0 1.5px var(--ol-partial-background-color),1.5px 0 var(--ol-partial-background-color),0 -1.5px var(--ol-partial-background-color)}.DicomMicroscopyViewer .ol-scale-text{bottom:25px;font-size:12px;text-align:center}.DicomMicroscopyViewer .ol-scale-singlebar{border:1px solid var(--ol-foreground-color);-webkit-box-sizing:border-box;box-sizing:border-box;height:10px;position:relative;z-index:9}.DicomMicroscopyViewer .ol-scale-singlebar-even{background-color:var(--ol-subtle-foreground-color)}.DicomMicroscopyViewer .ol-scale-singlebar-odd{background-color:var(--ol-background-color)}.DicomMicroscopyViewer .ol-unsupported{display:none}.DicomMicroscopyViewer .ol-unselectable,.DicomMicroscopyViewer .ol-viewport{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none; -ms-user-select:none; user-select:none}.DicomMicroscopyViewer .ol-viewport canvas{all:unset}.DicomMicroscopyViewer .ol-selectable{-webkit-touch-callout:default;-webkit-user-select:text;-moz-user-select:text; -ms-user-select:text; user-select:text}.DicomMicroscopyViewer .ol-grabbing{cursor:-webkit-grabbing;cursor:grabbing}.DicomMicroscopyViewer .ol-grab{cursor:move;cursor:-webkit-grab;cursor:grab}.DicomMicroscopyViewer .ol-control{background-color:var(--ol-subtle-background-color);border-radius:4px;position:absolute}.DicomMicroscopyViewer .ol-zoom{left:.5em;top:.5em}.DicomMicroscopyViewer .ol-rotate{right:.5em;top:.5em;-webkit-transition:opacity .25s linear,visibility 0s linear;transition:opacity .25s linear,visibility 0s linear}.DicomMicroscopyViewer .ol-rotate.ol-hidden{opacity:0;-webkit-transition:opacity .25s linear,visibility 0s linear .25s;transition:opacity .25s linear,visibility 0s linear .25s;visibility:hidden}.DicomMicroscopyViewer .ol-zoom-extent{left:.5em;top:4.643em}.DicomMicroscopyViewer .ol-full-screen{right:.5em;top:.5em}.DicomMicroscopyViewer .ol-control button{background-color:var(--ol-background-color);border:none;border-radius:2px;color:var(--ol-subtle-foreground-color);display:block;font-size:inherit;font-weight:700;height:1.375em;line-height:.4em;margin:1px;padding:0;text-align:center;text-decoration:none;width:1.375em}.DicomMicroscopyViewer .ol-control button::-moz-focus-inner{border:none;padding:0}.DicomMicroscopyViewer .ol-zoom-extent button{line-height:1.4em}.DicomMicroscopyViewer .ol-compass{display:block;font-weight:400;will-change:transform}.DicomMicroscopyViewer .ol-touch .ol-control button{font-size:1.5em}.DicomMicroscopyViewer .ol-touch .ol-zoom-extent{top:5.5em}.DicomMicroscopyViewer .ol-control button:focus,.DicomMicroscopyViewer .ol-control button:hover{color:var(--ol-foreground-color);outline:1px solid var(--ol-subtle-foreground-color);text-decoration:none}.DicomMicroscopyViewer .ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.DicomMicroscopyViewer .ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.DicomMicroscopyViewer .ol-attribution{-webkit-box-align:center;-ms-flex-align:center;align-items:center;bottom:.5em;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-flow:row-reverse;flex-flow:row-reverse;max-width:calc(100% - 1.3em);right:.5em;text-align:right}.DicomMicroscopyViewer .ol-attribution a{color:var(--ol-subtle-foreground-color);text-decoration:none}.DicomMicroscopyViewer .ol-attribution ul{color:var(--ol-foreground-color);font-size:12px;margin:0;padding:1px .5em;text-shadow:0 0 2px var(--ol-background-color)}.DicomMicroscopyViewer .ol-attribution li{display:inline;list-style:none}.DicomMicroscopyViewer .ol-attribution li:not(:last-child):after{content:" "}.DicomMicroscopyViewer .ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.DicomMicroscopyViewer .ol-attribution button{-ms-flex-negative:0;flex-shrink:0}.DicomMicroscopyViewer .ol-attribution.ol-collapsed ul{display:none}.DicomMicroscopyViewer .ol-attribution:not(.ol-collapsed){background:var(--ol-partial-background-color)}.DicomMicroscopyViewer .ol-attribution.ol-uncollapsible{border-radius:4px 0 0;bottom:0;right:0}.DicomMicroscopyViewer .ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.DicomMicroscopyViewer .ol-attribution.ol-uncollapsible button{display:none}.DicomMicroscopyViewer .ol-zoomslider{height:200px;left:.5em;top:4.5em}.DicomMicroscopyViewer .ol-zoomslider button{height:10px;position:relative}.DicomMicroscopyViewer .ol-touch .ol-zoomslider{top:5.5em}.DicomMicroscopyViewer .ol-overviewmap{bottom:.5em;left:.5em}.DicomMicroscopyViewer .ol-overviewmap.ol-uncollapsible{border-radius:0 4px 0 0;bottom:0;left:0}.DicomMicroscopyViewer .ol-overviewmap .ol-overviewmap-map,.DicomMicroscopyViewer .ol-overviewmap button{display:block}.DicomMicroscopyViewer .ol-overviewmap .ol-overviewmap-map{border:1px solid var(--ol-subtle-foreground-color);height:150px;width:150px}.DicomMicroscopyViewer .ol-overviewmap:not(.ol-collapsed) button{bottom:0;left:0;position:absolute}.DicomMicroscopyViewer .ol-overviewmap.ol-collapsed .ol-overviewmap-map,.DicomMicroscopyViewer .ol-overviewmap.ol-uncollapsible button{display:none}.DicomMicroscopyViewer .ol-overviewmap:not(.ol-collapsed){background:var(--ol-subtle-background-color)}.DicomMicroscopyViewer .ol-overviewmap-box{border:.5px dotted var(--ol-subtle-foreground-color)}.DicomMicroscopyViewer .ol-overviewmap .ol-overviewmap-box:hover{cursor:move}@layout-header-background: #007ea3;@primary-color: #007ea3;@processing-color: #8cb8c6;@success-color: #3f9c35;@warning-color: #eeaf30;@error-color: #96172e;@font-size-base: 14px;.DicomMicroscopyViewer .ol-tooltip{font-size:16px!important}
|
|
2
|
+
.DicomMicroscopyViewer .OpenLayersOverlay{display:block!important;height:100%;pointer-events:none!important;width:100%}.DicomMicroscopyViewer .text-primary-light{color:#ff0;font-size:14px;font-weight:400}.DicomMicroscopyViewer .text-primary-light span{max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.DicomMicroscopyViewer .absolute{position:absolute}.DicomMicroscopyViewer .flex{display:-webkit-box;display:-ms-flexbox;display:flex}.DicomMicroscopyViewer .flex-row{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.DicomMicroscopyViewer .flex-col{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.DicomMicroscopyViewer .pointer-events-none{pointer-events:none}.DicomMicroscopyViewer .left-viewport-scrollbar{left:.5rem}.DicomMicroscopyViewer .right-viewport-scrollbar{right:1.3rem}.DicomMicroscopyViewer .top-viewport{top:.5rem}.DicomMicroscopyViewer .bottom-viewport{bottom:.5rem}.DicomMicroscopyViewer .bottom-viewport.left-viewport{bottom:.5rem;left:calc(.5rem + 250px)}.DicomMicroscopyViewer .right-viewport-scrollbar .flex{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:end}.DicomMicroscopyViewer .microscopy-viewport-overlay{background:#00000080;max-width:40%;padding:.5rem 1rem}.DicomMicroscopyViewer .microscopy-viewport-overlay .flex{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.DicomMicroscopyViewer .top-viewport .flex span:not(.font-light){-ms-flex-negative:0;flex-shrink:0}
|
|
3
|
+
.dicom-tag-browser-table{margin-left:auto;margin-right:auto}.dicom-tag-browser-table-wrapper{overflow-x:scroll}.dicom-tag-browser-table tr{border-top:1px solid #ddd;color:#fff;padding-left:10px;padding-right:10px;white-space:nowrap}.stick{overflow:clip;position:sticky}.dicom-tag-browser-content{overflow:hidden;padding-bottom:50px;width:100%}.dicom-tag-browser-instance-range .range{height:20px}.dicom-tag-browser-instance-range{padding:20px 0}.dicom-tag-browser-table td.dicom-tag-browser-table-center{text-align:center}.dicom-tag-browser-table th{color:"#20A5D6";padding-left:10px;padding-right:10px;text-align:center}.dicom-tag-browser-table th.dicom-tag-browser-table-left{text-align:left}
|
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[569],{
|
|
3
|
+
|
|
4
|
+
/***/ 33569:
|
|
5
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6
|
+
|
|
7
|
+
// ESM COMPAT FLAG
|
|
8
|
+
__webpack_require__.r(__webpack_exports__);
|
|
9
|
+
|
|
10
|
+
// EXPORTS
|
|
11
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
12
|
+
"default": () => (/* binding */ viewports_OHIFCornerstoneSEGViewport)
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
// EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
|
|
16
|
+
var prop_types = __webpack_require__(60216);
|
|
17
|
+
var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
|
|
18
|
+
// EXTERNAL MODULE: ../../../node_modules/react/index.js
|
|
19
|
+
var react = __webpack_require__(32735);
|
|
20
|
+
// EXTERNAL MODULE: ../../../node_modules/react-i18next/dist/es/index.js + 15 modules
|
|
21
|
+
var es = __webpack_require__(21572);
|
|
22
|
+
// EXTERNAL MODULE: ../../core/src/index.ts + 101 modules
|
|
23
|
+
var src = __webpack_require__(48501);
|
|
24
|
+
// EXTERNAL MODULE: ../../ui/src/index.js + 449 modules
|
|
25
|
+
var ui_src = __webpack_require__(43803);
|
|
26
|
+
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/utils/initSEGToolGroup.ts
|
|
27
|
+
function createSEGToolGroupAndAddTools(ToolGroupService, customizationService, toolGroupId) {
|
|
28
|
+
const {
|
|
29
|
+
tools
|
|
30
|
+
} = customizationService.get('cornerstone.overlayViewportTools') ?? {};
|
|
31
|
+
return ToolGroupService.createToolGroupAndAddTools(toolGroupId, tools, {});
|
|
32
|
+
}
|
|
33
|
+
/* harmony default export */ const initSEGToolGroup = (createSEGToolGroupAndAddTools);
|
|
34
|
+
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/utils/_hydrateSEG.ts
|
|
35
|
+
async function _hydrateSEGDisplaySet(_ref) {
|
|
36
|
+
let {
|
|
37
|
+
segDisplaySet,
|
|
38
|
+
viewportIndex,
|
|
39
|
+
servicesManager
|
|
40
|
+
} = _ref;
|
|
41
|
+
const {
|
|
42
|
+
segmentationService,
|
|
43
|
+
hangingProtocolService,
|
|
44
|
+
viewportGridService
|
|
45
|
+
} = servicesManager.services;
|
|
46
|
+
const displaySetInstanceUID = segDisplaySet.referencedDisplaySetInstanceUID;
|
|
47
|
+
let segmentationId = null;
|
|
48
|
+
|
|
49
|
+
// We need the hydration to notify panels about the new segmentation added
|
|
50
|
+
const suppressEvents = false;
|
|
51
|
+
segmentationId = await segmentationService.createSegmentationForSEGDisplaySet(segDisplaySet, segmentationId, suppressEvents);
|
|
52
|
+
segmentationService.hydrateSegmentation(segDisplaySet.displaySetInstanceUID);
|
|
53
|
+
const {
|
|
54
|
+
viewports
|
|
55
|
+
} = viewportGridService.getState();
|
|
56
|
+
const updatedViewports = hangingProtocolService.getViewportsRequireUpdate(viewportIndex, displaySetInstanceUID);
|
|
57
|
+
|
|
58
|
+
// Todo: fix this after we have a better way for stack viewport segmentations
|
|
59
|
+
|
|
60
|
+
// check every viewport in the viewports to see if the displaySetInstanceUID
|
|
61
|
+
// is being displayed, if so we need to update the viewport to use volume viewport
|
|
62
|
+
// (if already is not using it) since Cornerstone3D currently only supports
|
|
63
|
+
// volume viewport for segmentation
|
|
64
|
+
viewports.forEach((viewport, index) => {
|
|
65
|
+
if (index === viewportIndex) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const shouldDisplaySeg = segmentationService.shouldRenderSegmentation(viewport.displaySetInstanceUIDs, segDisplaySet.displaySetInstanceUID);
|
|
69
|
+
if (shouldDisplaySeg) {
|
|
70
|
+
updatedViewports.push({
|
|
71
|
+
viewportIndex: index,
|
|
72
|
+
displaySetInstanceUIDs: viewport.displaySetInstanceUIDs,
|
|
73
|
+
viewportOptions: {
|
|
74
|
+
initialImageOptions: {
|
|
75
|
+
preset: 'middle'
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
// Do the entire update at once
|
|
83
|
+
viewportGridService.setDisplaySetsForViewports(updatedViewports);
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
/* harmony default export */ const _hydrateSEG = (_hydrateSEGDisplaySet);
|
|
87
|
+
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/utils/promptHydrateSEG.ts
|
|
88
|
+
|
|
89
|
+
const RESPONSE = {
|
|
90
|
+
NO_NEVER: -1,
|
|
91
|
+
CANCEL: 0,
|
|
92
|
+
HYDRATE_SEG: 5
|
|
93
|
+
};
|
|
94
|
+
function promptHydrateSEG(_ref) {
|
|
95
|
+
let {
|
|
96
|
+
servicesManager,
|
|
97
|
+
segDisplaySet,
|
|
98
|
+
viewportIndex
|
|
99
|
+
} = _ref;
|
|
100
|
+
const {
|
|
101
|
+
uiViewportDialogService
|
|
102
|
+
} = servicesManager.services;
|
|
103
|
+
return new Promise(async function (resolve, reject) {
|
|
104
|
+
const promptResult = await _askHydrate(uiViewportDialogService, viewportIndex);
|
|
105
|
+
if (promptResult === RESPONSE.HYDRATE_SEG) {
|
|
106
|
+
const isHydrated = await _hydrateSEG({
|
|
107
|
+
segDisplaySet,
|
|
108
|
+
viewportIndex,
|
|
109
|
+
servicesManager
|
|
110
|
+
});
|
|
111
|
+
resolve(isHydrated);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function _askHydrate(uiViewportDialogService, viewportIndex) {
|
|
116
|
+
return new Promise(function (resolve, reject) {
|
|
117
|
+
const message = 'Do you want to open this Segmentation?';
|
|
118
|
+
const actions = [{
|
|
119
|
+
type: 'secondary',
|
|
120
|
+
text: 'No',
|
|
121
|
+
value: RESPONSE.CANCEL
|
|
122
|
+
}, {
|
|
123
|
+
type: 'primary',
|
|
124
|
+
text: 'Yes',
|
|
125
|
+
value: RESPONSE.HYDRATE_SEG
|
|
126
|
+
}];
|
|
127
|
+
const onSubmit = result => {
|
|
128
|
+
uiViewportDialogService.hide();
|
|
129
|
+
resolve(result);
|
|
130
|
+
};
|
|
131
|
+
uiViewportDialogService.show({
|
|
132
|
+
viewportIndex,
|
|
133
|
+
type: 'info',
|
|
134
|
+
message,
|
|
135
|
+
actions,
|
|
136
|
+
onSubmit,
|
|
137
|
+
onOutsideClick: () => {
|
|
138
|
+
uiViewportDialogService.hide();
|
|
139
|
+
resolve(RESPONSE.CANCEL);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/* harmony default export */ const utils_promptHydrateSEG = (promptHydrateSEG);
|
|
145
|
+
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/viewports/_getStatusComponent.tsx
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
function _getStatusComponent(_ref) {
|
|
150
|
+
let {
|
|
151
|
+
isHydrated,
|
|
152
|
+
onStatusClick
|
|
153
|
+
} = _ref;
|
|
154
|
+
let ToolTipMessage = null;
|
|
155
|
+
let StatusIcon = null;
|
|
156
|
+
const {
|
|
157
|
+
t
|
|
158
|
+
} = (0,es/* useTranslation */.$G)("Common");
|
|
159
|
+
const loadStr = t("LOAD");
|
|
160
|
+
switch (isHydrated) {
|
|
161
|
+
case true:
|
|
162
|
+
StatusIcon = () => /*#__PURE__*/react.createElement(ui_src/* Icon */.JO, {
|
|
163
|
+
name: "status-alert"
|
|
164
|
+
});
|
|
165
|
+
ToolTipMessage = () => /*#__PURE__*/react.createElement("div", null, "This Segmentation is loaded in the segmentation panel");
|
|
166
|
+
break;
|
|
167
|
+
case false:
|
|
168
|
+
StatusIcon = () => /*#__PURE__*/react.createElement(ui_src/* Icon */.JO, {
|
|
169
|
+
name: "status-untracked"
|
|
170
|
+
});
|
|
171
|
+
ToolTipMessage = () => /*#__PURE__*/react.createElement("div", null, "Click LOAD to load segmentation.");
|
|
172
|
+
}
|
|
173
|
+
const StatusArea = () => /*#__PURE__*/react.createElement("div", {
|
|
174
|
+
className: "flex h-6 leading-6 cursor-default text-sm text-white"
|
|
175
|
+
}, /*#__PURE__*/react.createElement("div", {
|
|
176
|
+
className: "min-w-[45px] flex items-center p-1 rounded-l-xl rounded-r bg-customgray-100"
|
|
177
|
+
}, /*#__PURE__*/react.createElement(StatusIcon, null), /*#__PURE__*/react.createElement("span", {
|
|
178
|
+
className: "ml-1"
|
|
179
|
+
}, "SEG")), !isHydrated && /*#__PURE__*/react.createElement("div", {
|
|
180
|
+
className: "ml-1 px-1.5 rounded cursor-pointer hover:text-black bg-primary-main hover:bg-primary-light"
|
|
181
|
+
// Using onMouseUp here because onClick is not working when the viewport is not active and is styled with pointer-events:none
|
|
182
|
+
,
|
|
183
|
+
onMouseUp: onStatusClick
|
|
184
|
+
}, loadStr));
|
|
185
|
+
return /*#__PURE__*/react.createElement(react.Fragment, null, ToolTipMessage && /*#__PURE__*/react.createElement(ui_src/* Tooltip */.u, {
|
|
186
|
+
content: /*#__PURE__*/react.createElement(ToolTipMessage, null),
|
|
187
|
+
position: "bottom-left"
|
|
188
|
+
}, /*#__PURE__*/react.createElement(StatusArea, null)), !ToolTipMessage && /*#__PURE__*/react.createElement(StatusArea, null));
|
|
189
|
+
}
|
|
190
|
+
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/viewports/OHIFCornerstoneSEGViewport.tsx
|
|
191
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
const {
|
|
202
|
+
formatDate
|
|
203
|
+
} = src.utils;
|
|
204
|
+
const SEG_TOOLGROUP_BASE_NAME = 'SEGToolGroup';
|
|
205
|
+
function OHIFCornerstoneSEGViewport(props) {
|
|
206
|
+
const {
|
|
207
|
+
children,
|
|
208
|
+
displaySets,
|
|
209
|
+
viewportOptions,
|
|
210
|
+
viewportIndex,
|
|
211
|
+
viewportLabel,
|
|
212
|
+
servicesManager,
|
|
213
|
+
extensionManager
|
|
214
|
+
} = props;
|
|
215
|
+
const {
|
|
216
|
+
t
|
|
217
|
+
} = (0,es/* useTranslation */.$G)('SEGViewport');
|
|
218
|
+
const {
|
|
219
|
+
displaySetService,
|
|
220
|
+
toolGroupService,
|
|
221
|
+
segmentationService,
|
|
222
|
+
uiNotificationService,
|
|
223
|
+
customizationService
|
|
224
|
+
} = servicesManager.services;
|
|
225
|
+
const toolGroupId = `${SEG_TOOLGROUP_BASE_NAME}-${viewportIndex}`;
|
|
226
|
+
|
|
227
|
+
// SEG viewport will always have a single display set
|
|
228
|
+
if (displaySets.length > 1) {
|
|
229
|
+
throw new Error('SEG viewport should only have a single display set');
|
|
230
|
+
}
|
|
231
|
+
const segDisplaySet = displaySets[0];
|
|
232
|
+
const [viewportGrid, viewportGridService] = (0,ui_src/* useViewportGrid */.O_)();
|
|
233
|
+
|
|
234
|
+
// States
|
|
235
|
+
const [isToolGroupCreated, setToolGroupCreated] = (0,react.useState)(false);
|
|
236
|
+
const [selectedSegment, setSelectedSegment] = (0,react.useState)(1);
|
|
237
|
+
|
|
238
|
+
// Hydration means that the SEG is opened and segments are loaded into the
|
|
239
|
+
// segmentation panel, and SEG is also rendered on any viewport that is in the
|
|
240
|
+
// same frameOfReferenceUID as the referencedSeriesUID of the SEG. However,
|
|
241
|
+
// loading basically means SEG loading over network and bit unpacking of the
|
|
242
|
+
// SEG data.
|
|
243
|
+
const [isHydrated, setIsHydrated] = (0,react.useState)(segDisplaySet.isHydrated);
|
|
244
|
+
const [segIsLoading, setSegIsLoading] = (0,react.useState)(!segDisplaySet.isLoaded);
|
|
245
|
+
const [element, setElement] = (0,react.useState)(null);
|
|
246
|
+
const [processingProgress, setProcessingProgress] = (0,react.useState)({
|
|
247
|
+
percentComplete: null,
|
|
248
|
+
totalSegments: null
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
// refs
|
|
252
|
+
const referencedDisplaySetRef = (0,react.useRef)(null);
|
|
253
|
+
const {
|
|
254
|
+
viewports,
|
|
255
|
+
activeViewportIndex
|
|
256
|
+
} = viewportGrid;
|
|
257
|
+
const referencedDisplaySet = segDisplaySet.getReferenceDisplaySet();
|
|
258
|
+
const referencedDisplaySetMetadata = _getReferencedDisplaySetMetadata(referencedDisplaySet);
|
|
259
|
+
referencedDisplaySetRef.current = {
|
|
260
|
+
displaySet: referencedDisplaySet,
|
|
261
|
+
metadata: referencedDisplaySetMetadata
|
|
262
|
+
};
|
|
263
|
+
/**
|
|
264
|
+
* OnElementEnabled callback which is called after the cornerstoneExtension
|
|
265
|
+
* has enabled the element. Note: we delegate all the image rendering to
|
|
266
|
+
* cornerstoneExtension, so we don't need to do anything here regarding
|
|
267
|
+
* the image rendering, element enabling etc.
|
|
268
|
+
*/
|
|
269
|
+
const onElementEnabled = evt => {
|
|
270
|
+
setElement(evt.detail.element);
|
|
271
|
+
};
|
|
272
|
+
const onElementDisabled = () => {
|
|
273
|
+
setElement(null);
|
|
274
|
+
};
|
|
275
|
+
const getCornerstoneViewport = (0,react.useCallback)(() => {
|
|
276
|
+
const {
|
|
277
|
+
component: Component
|
|
278
|
+
} = extensionManager.getModuleEntry('@ohif/extension-cornerstone.viewportModule.cornerstone');
|
|
279
|
+
const {
|
|
280
|
+
displaySet: referencedDisplaySet
|
|
281
|
+
} = referencedDisplaySetRef.current;
|
|
282
|
+
|
|
283
|
+
// Todo: jump to the center of the first segment
|
|
284
|
+
return /*#__PURE__*/react.createElement(Component, _extends({}, props, {
|
|
285
|
+
displaySets: [referencedDisplaySet, segDisplaySet],
|
|
286
|
+
viewportOptions: {
|
|
287
|
+
viewportType: 'volume',
|
|
288
|
+
toolGroupId: toolGroupId,
|
|
289
|
+
orientation: viewportOptions.orientation,
|
|
290
|
+
viewportId: viewportOptions.viewportId
|
|
291
|
+
},
|
|
292
|
+
onElementEnabled: onElementEnabled,
|
|
293
|
+
onElementDisabled: onElementDisabled
|
|
294
|
+
// initialImageIndex={initialImageIndex}
|
|
295
|
+
}));
|
|
296
|
+
}, [viewportIndex, segDisplaySet, toolGroupId]);
|
|
297
|
+
const onSegmentChange = (0,react.useCallback)(direction => {
|
|
298
|
+
direction = direction === 'left' ? -1 : 1;
|
|
299
|
+
const segmentationId = segDisplaySet.displaySetInstanceUID;
|
|
300
|
+
const segmentation = segmentationService.getSegmentation(segmentationId);
|
|
301
|
+
const {
|
|
302
|
+
segments
|
|
303
|
+
} = segmentation;
|
|
304
|
+
const numberOfSegments = Object.keys(segments).length;
|
|
305
|
+
let newSelectedSegmentIndex = selectedSegment + direction;
|
|
306
|
+
|
|
307
|
+
// Segment 0 is always background
|
|
308
|
+
|
|
309
|
+
if (newSelectedSegmentIndex > numberOfSegments - 1) {
|
|
310
|
+
newSelectedSegmentIndex = 1;
|
|
311
|
+
} else if (newSelectedSegmentIndex === 0) {
|
|
312
|
+
newSelectedSegmentIndex = numberOfSegments - 1;
|
|
313
|
+
}
|
|
314
|
+
segmentationService.jumpToSegmentCenter(segmentationId, newSelectedSegmentIndex, toolGroupId);
|
|
315
|
+
setSelectedSegment(newSelectedSegmentIndex);
|
|
316
|
+
}, [selectedSegment]);
|
|
317
|
+
(0,react.useEffect)(() => {
|
|
318
|
+
if (segIsLoading) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
utils_promptHydrateSEG({
|
|
322
|
+
servicesManager,
|
|
323
|
+
viewportIndex,
|
|
324
|
+
segDisplaySet
|
|
325
|
+
}).then(isHydrated => {
|
|
326
|
+
if (isHydrated) {
|
|
327
|
+
setIsHydrated(true);
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
}, [servicesManager, viewportIndex, segDisplaySet, segIsLoading]);
|
|
331
|
+
(0,react.useEffect)(() => {
|
|
332
|
+
const {
|
|
333
|
+
unsubscribe
|
|
334
|
+
} = segmentationService.subscribe(segmentationService.EVENTS.SEGMENTATION_LOADING_COMPLETE, evt => {
|
|
335
|
+
if (evt.segDisplaySet.displaySetInstanceUID === segDisplaySet.displaySetInstanceUID) {
|
|
336
|
+
setSegIsLoading(false);
|
|
337
|
+
}
|
|
338
|
+
if (evt.overlappingSegments) {
|
|
339
|
+
uiNotificationService.show({
|
|
340
|
+
title: 'Overlapping Segments',
|
|
341
|
+
message: 'Overlapping segments detected which is not currently supported',
|
|
342
|
+
type: 'warning'
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
return () => {
|
|
347
|
+
unsubscribe();
|
|
348
|
+
};
|
|
349
|
+
}, [segDisplaySet]);
|
|
350
|
+
(0,react.useEffect)(() => {
|
|
351
|
+
const {
|
|
352
|
+
unsubscribe
|
|
353
|
+
} = segmentationService.subscribe(segmentationService.EVENTS.SEGMENT_LOADING_COMPLETE, _ref => {
|
|
354
|
+
let {
|
|
355
|
+
percentComplete,
|
|
356
|
+
numSegments
|
|
357
|
+
} = _ref;
|
|
358
|
+
setProcessingProgress({
|
|
359
|
+
percentComplete,
|
|
360
|
+
totalSegments: numSegments
|
|
361
|
+
});
|
|
362
|
+
});
|
|
363
|
+
return () => {
|
|
364
|
+
unsubscribe();
|
|
365
|
+
};
|
|
366
|
+
}, [segDisplaySet]);
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
Cleanup the SEG viewport when the viewport is destroyed
|
|
370
|
+
*/
|
|
371
|
+
(0,react.useEffect)(() => {
|
|
372
|
+
const onDisplaySetsRemovedSubscription = displaySetService.subscribe(displaySetService.EVENTS.DISPLAY_SETS_REMOVED, _ref2 => {
|
|
373
|
+
let {
|
|
374
|
+
displaySetInstanceUIDs
|
|
375
|
+
} = _ref2;
|
|
376
|
+
const activeViewport = viewports[activeViewportIndex];
|
|
377
|
+
if (displaySetInstanceUIDs.includes(activeViewport.displaySetInstanceUID)) {
|
|
378
|
+
viewportGridService.setDisplaySetsForViewport({
|
|
379
|
+
viewportIndex: activeViewportIndex,
|
|
380
|
+
displaySetInstanceUIDs: []
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
return () => {
|
|
385
|
+
onDisplaySetsRemovedSubscription.unsubscribe();
|
|
386
|
+
};
|
|
387
|
+
}, []);
|
|
388
|
+
(0,react.useEffect)(() => {
|
|
389
|
+
let toolGroup = toolGroupService.getToolGroup(toolGroupId);
|
|
390
|
+
if (toolGroup) {
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// This creates a custom tool group which has the lifetime of this view
|
|
395
|
+
// only, and does NOT interfere with currently displayed segmentations.
|
|
396
|
+
toolGroup = initSEGToolGroup(toolGroupService, customizationService, toolGroupId);
|
|
397
|
+
setToolGroupCreated(true);
|
|
398
|
+
return () => {
|
|
399
|
+
// remove the segmentation representations if seg displayset changed
|
|
400
|
+
segmentationService.removeSegmentationRepresentationFromToolGroup(toolGroupId);
|
|
401
|
+
|
|
402
|
+
// Only destroy the viewport specific implementation
|
|
403
|
+
toolGroupService.destroyToolGroup(toolGroupId);
|
|
404
|
+
};
|
|
405
|
+
}, []);
|
|
406
|
+
(0,react.useEffect)(() => {
|
|
407
|
+
setIsHydrated(segDisplaySet.isHydrated);
|
|
408
|
+
return () => {
|
|
409
|
+
// remove the segmentation representations if seg displayset changed
|
|
410
|
+
segmentationService.removeSegmentationRepresentationFromToolGroup(toolGroupId);
|
|
411
|
+
referencedDisplaySetRef.current = null;
|
|
412
|
+
};
|
|
413
|
+
}, [segDisplaySet]);
|
|
414
|
+
|
|
415
|
+
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
416
|
+
let childrenWithProps = null;
|
|
417
|
+
if (!referencedDisplaySetRef.current || referencedDisplaySet.displaySetInstanceUID !== referencedDisplaySetRef.current.displaySet.displaySetInstanceUID) {
|
|
418
|
+
return null;
|
|
419
|
+
}
|
|
420
|
+
if (children && children.length) {
|
|
421
|
+
childrenWithProps = children.map((child, index) => {
|
|
422
|
+
return child && /*#__PURE__*/react.cloneElement(child, {
|
|
423
|
+
viewportIndex,
|
|
424
|
+
key: index
|
|
425
|
+
});
|
|
426
|
+
});
|
|
427
|
+
}
|
|
428
|
+
const {
|
|
429
|
+
PatientID,
|
|
430
|
+
PatientName,
|
|
431
|
+
PatientSex,
|
|
432
|
+
PatientAge,
|
|
433
|
+
SliceThickness,
|
|
434
|
+
ManufacturerModelName,
|
|
435
|
+
StudyDate,
|
|
436
|
+
SeriesDescription,
|
|
437
|
+
SpacingBetweenSlices
|
|
438
|
+
} = referencedDisplaySetRef.current.metadata;
|
|
439
|
+
const onStatusClick = async () => {
|
|
440
|
+
const isHydrated = await _hydrateSEG({
|
|
441
|
+
segDisplaySet,
|
|
442
|
+
viewportIndex,
|
|
443
|
+
servicesManager
|
|
444
|
+
});
|
|
445
|
+
setIsHydrated(isHydrated);
|
|
446
|
+
};
|
|
447
|
+
return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(ui_src/* ViewportActionBar */.uY, {
|
|
448
|
+
onDoubleClick: evt => {
|
|
449
|
+
evt.stopPropagation();
|
|
450
|
+
evt.preventDefault();
|
|
451
|
+
},
|
|
452
|
+
onArrowsClick: onSegmentChange,
|
|
453
|
+
getStatusComponent: () => {
|
|
454
|
+
return _getStatusComponent({
|
|
455
|
+
isHydrated,
|
|
456
|
+
onStatusClick
|
|
457
|
+
});
|
|
458
|
+
},
|
|
459
|
+
studyData: {
|
|
460
|
+
label: viewportLabel,
|
|
461
|
+
useAltStyling: true,
|
|
462
|
+
studyDate: formatDate(StudyDate),
|
|
463
|
+
seriesDescription: `SEG Viewport ${SeriesDescription}`,
|
|
464
|
+
patientInformation: {
|
|
465
|
+
patientName: PatientName ? src["default"].utils.formatPN(PatientName.Alphabetic) : '',
|
|
466
|
+
patientSex: PatientSex || '',
|
|
467
|
+
patientAge: PatientAge || '',
|
|
468
|
+
MRN: PatientID || '',
|
|
469
|
+
thickness: SliceThickness ? `${SliceThickness.toFixed(2)}mm` : '',
|
|
470
|
+
spacing: SpacingBetweenSlices !== undefined ? `${SpacingBetweenSlices.toFixed(2)}mm` : '',
|
|
471
|
+
scanner: ManufacturerModelName || ''
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
}), /*#__PURE__*/react.createElement("div", {
|
|
475
|
+
className: "relative flex flex-row w-full h-full overflow-hidden"
|
|
476
|
+
}, segIsLoading && /*#__PURE__*/react.createElement(ui_src/* LoadingIndicatorTotalPercent */.bk, {
|
|
477
|
+
className: "w-full h-full",
|
|
478
|
+
totalNumbers: processingProgress.totalSegments,
|
|
479
|
+
percentComplete: processingProgress.percentComplete,
|
|
480
|
+
loadingText: "Loading SEG..."
|
|
481
|
+
}), getCornerstoneViewport(), childrenWithProps));
|
|
482
|
+
}
|
|
483
|
+
OHIFCornerstoneSEGViewport.propTypes = {
|
|
484
|
+
displaySets: prop_types_default().arrayOf((prop_types_default()).object),
|
|
485
|
+
viewportIndex: (prop_types_default()).number.isRequired,
|
|
486
|
+
dataSource: (prop_types_default()).object,
|
|
487
|
+
children: (prop_types_default()).node,
|
|
488
|
+
customProps: (prop_types_default()).object
|
|
489
|
+
};
|
|
490
|
+
OHIFCornerstoneSEGViewport.defaultProps = {
|
|
491
|
+
customProps: {}
|
|
492
|
+
};
|
|
493
|
+
function _getReferencedDisplaySetMetadata(referencedDisplaySet) {
|
|
494
|
+
const image0 = referencedDisplaySet.images[0];
|
|
495
|
+
const referencedDisplaySetMetadata = {
|
|
496
|
+
PatientID: image0.PatientID,
|
|
497
|
+
PatientName: image0.PatientName,
|
|
498
|
+
PatientSex: image0.PatientSex,
|
|
499
|
+
PatientAge: image0.PatientAge,
|
|
500
|
+
SliceThickness: image0.SliceThickness,
|
|
501
|
+
StudyDate: image0.StudyDate,
|
|
502
|
+
SeriesDescription: image0.SeriesDescription,
|
|
503
|
+
SeriesInstanceUID: image0.SeriesInstanceUID,
|
|
504
|
+
SeriesNumber: image0.SeriesNumber,
|
|
505
|
+
ManufacturerModelName: image0.ManufacturerModelName,
|
|
506
|
+
SpacingBetweenSlices: image0.SpacingBetweenSlices
|
|
507
|
+
};
|
|
508
|
+
return referencedDisplaySetMetadata;
|
|
509
|
+
}
|
|
510
|
+
/* harmony default export */ const viewports_OHIFCornerstoneSEGViewport = (OHIFCornerstoneSEGViewport);
|
|
511
|
+
|
|
512
|
+
/***/ })
|
|
513
|
+
|
|
514
|
+
}]);
|