@ohif/app 3.7.0-beta.43 → 3.7.0-beta.46
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/{150.bundle.94cbce497cafacd4a7d7.js → 150.bundle.2fa62b4d658df1500a7a.js} +71 -3
- package/dist/{181.bundle.817ca1ba6479fca5fd15.js → 181.bundle.f5476625f4ca901a1b91.js} +13 -34
- package/dist/{236.bundle.3c5f844ce9de4ec0777d.js → 236.bundle.c0a68163699ecfe3169a.js} +25 -11
- package/dist/{250.bundle.ee4bcf159c4d610acc3e.js → 250.bundle.1c1cb3520a9285138cfa.js} +18 -6
- package/dist/{30.bundle.8fb93818b3a58f29f7e3.js → 30.bundle.c0b2fa8984080ebcfbbc.js} +3 -1
- package/dist/{378.bundle.c908a6194c50544b45db.js → 378.bundle.61261ee41e0ea0955440.js} +8 -6
- package/dist/{869.bundle.c9c018e6757410919ed8.js → 451.bundle.a08889b823fb10803bd8.js} +38 -68
- package/dist/{810.bundle.b3e2cf57e00d35a12f30.js → 471.bundle.3238a0647d80970085f7.js} +36 -65
- package/dist/{506.bundle.44629077a406500707ea.js → 506.bundle.b23fa19d91dd23ab44be.js} +73 -4
- package/dist/{663.bundle.2dcb8a60d59464f4e563.js → 663.bundle.f5db124e3e922e61e76b.js} +27 -9
- package/dist/{678.bundle.13062f7926c30056aee1.js → 678.bundle.c07616be5e27371d875c.js} +103 -21
- package/dist/{821.bundle.d4120df6baeed120be9e.js → 821.bundle.d175d0a8f3f0148a1993.js} +79 -29
- package/dist/{app.bundle.2905ffdd301e3c34286e.js → app.bundle.7e5633a7d73fc76a884d.js} +255 -95
- package/dist/index.html +1 -1
- package/dist/sw.js +1 -1
- package/package.json +18 -18
- /package/dist/{12.bundle.f46296f27a36e6b95f76.js → 12.bundle.cff58bede0136dc8d013.js} +0 -0
- /package/dist/{128.bundle.963d34d21c01231fc804.js → 128.bundle.620a2fdce44958dbb9fb.js} +0 -0
- /package/dist/{281.bundle.ac92bd142441f317f308.js → 281.bundle.be238c748373d907dffe.js} +0 -0
- /package/dist/{348.bundle.323f57efcc2239950451.js → 348.bundle.dcebcb7b75ff9fcc1d5b.js} +0 -0
- /package/dist/{359.bundle.3ae0f07b1c428eeb00a8.js → 359.bundle.3cdac00ab9649a10741b.js} +0 -0
- /package/dist/{410.bundle.b3cbeff9c619149a2234.js → 410.bundle.fe0269b702be9c375abb.js} +0 -0
- /package/dist/{782.bundle.c511611d980f9aa6563b.js → 782.bundle.f2a1076331c6a6816314.js} +0 -0
- /package/dist/{814.bundle.8391ddacf39d7c699c5f.js → 814.bundle.69e55909aa8b5a776fe4.js} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
(self["webpackChunk"] = self["webpackChunk"] || []).push([[
|
|
2
|
+
(self["webpackChunk"] = self["webpackChunk"] || []).push([[471],{
|
|
3
3
|
|
|
4
|
-
/***/
|
|
4
|
+
/***/ 56471:
|
|
5
5
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6
6
|
|
|
7
7
|
// ESM COMPAT FLAG
|
|
@@ -21,60 +21,8 @@ var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
|
|
|
21
21
|
var src = __webpack_require__(20599);
|
|
22
22
|
// EXTERNAL MODULE: ../../ui/src/index.js + 452 modules
|
|
23
23
|
var ui_src = __webpack_require__(77284);
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
let {
|
|
27
|
-
rtDisplaySet,
|
|
28
|
-
viewportIndex,
|
|
29
|
-
servicesManager
|
|
30
|
-
} = _ref;
|
|
31
|
-
const {
|
|
32
|
-
segmentationService,
|
|
33
|
-
hangingProtocolService,
|
|
34
|
-
viewportGridService
|
|
35
|
-
} = servicesManager.services;
|
|
36
|
-
const displaySetInstanceUID = rtDisplaySet.referencedDisplaySetInstanceUID;
|
|
37
|
-
let segmentationId = null;
|
|
38
|
-
|
|
39
|
-
// We need the hydration to notify panels about the new segmentation added
|
|
40
|
-
const suppressEvents = false;
|
|
41
|
-
segmentationId = await segmentationService.createSegmentationForRTDisplaySet(rtDisplaySet, segmentationId, suppressEvents);
|
|
42
|
-
segmentationService.hydrateSegmentation(rtDisplaySet.displaySetInstanceUID);
|
|
43
|
-
const {
|
|
44
|
-
viewports
|
|
45
|
-
} = viewportGridService.getState();
|
|
46
|
-
const updatedViewports = hangingProtocolService.getViewportsRequireUpdate(viewportIndex, displaySetInstanceUID);
|
|
47
|
-
viewportGridService.setDisplaySetsForViewports(updatedViewports);
|
|
48
|
-
|
|
49
|
-
// Todo: fix this after we have a better way for stack viewport segmentations
|
|
50
|
-
|
|
51
|
-
// check every viewport in the viewports to see if the displaySetInstanceUID
|
|
52
|
-
// is being displayed, if so we need to update the viewport to use volume viewport
|
|
53
|
-
// (if already is not using it) since Cornerstone3D currently only supports
|
|
54
|
-
// volume viewport for segmentation
|
|
55
|
-
viewports.forEach((viewport, index) => {
|
|
56
|
-
if (index === viewportIndex) {
|
|
57
|
-
return;
|
|
58
|
-
}
|
|
59
|
-
const shouldDisplaySeg = segmentationService.shouldRenderSegmentation(viewport.displaySetInstanceUIDs, rtDisplaySet.displaySetInstanceUID);
|
|
60
|
-
if (shouldDisplaySeg) {
|
|
61
|
-
updatedViewports.push({
|
|
62
|
-
viewportIndex: index,
|
|
63
|
-
displaySetInstanceUIDs: viewport.displaySetInstanceUIDs,
|
|
64
|
-
viewportOptions: {
|
|
65
|
-
initialImageOptions: {
|
|
66
|
-
preset: 'middle'
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
// Do the entire update at once
|
|
74
|
-
viewportGridService.setDisplaySetsForViewports(updatedViewports);
|
|
75
|
-
return true;
|
|
76
|
-
}
|
|
77
|
-
/* harmony default export */ const _hydrateRT = (_hydrateRTDisplaySet);
|
|
24
|
+
// EXTERNAL MODULE: ../../../extensions/cornerstone-dicom-rt/src/utils/_hydrateRT.ts
|
|
25
|
+
var _hydrateRT = __webpack_require__(50995);
|
|
78
26
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-rt/src/utils/promptHydrateRT.ts
|
|
79
27
|
|
|
80
28
|
|
|
@@ -88,7 +36,8 @@ function promptHydrateRT(_ref) {
|
|
|
88
36
|
servicesManager,
|
|
89
37
|
rtDisplaySet,
|
|
90
38
|
viewportIndex,
|
|
91
|
-
toolGroupId = 'default'
|
|
39
|
+
toolGroupId = 'default',
|
|
40
|
+
preHydrateCallbacks
|
|
92
41
|
} = _ref;
|
|
93
42
|
const {
|
|
94
43
|
uiViewportDialogService
|
|
@@ -96,7 +45,10 @@ function promptHydrateRT(_ref) {
|
|
|
96
45
|
return new Promise(async function (resolve, reject) {
|
|
97
46
|
const promptResult = await _askHydrate(uiViewportDialogService, viewportIndex);
|
|
98
47
|
if (promptResult === RESPONSE.HYDRATE_SEG) {
|
|
99
|
-
|
|
48
|
+
preHydrateCallbacks?.forEach(callback => {
|
|
49
|
+
callback();
|
|
50
|
+
});
|
|
51
|
+
const isHydrated = await (0,_hydrateRT/* default */.Z)({
|
|
100
52
|
rtDisplaySet,
|
|
101
53
|
viewportIndex,
|
|
102
54
|
toolGroupId,
|
|
@@ -213,7 +165,8 @@ function OHIFCornerstoneRTViewport(props) {
|
|
|
213
165
|
viewportIndex,
|
|
214
166
|
viewportLabel,
|
|
215
167
|
servicesManager,
|
|
216
|
-
extensionManager
|
|
168
|
+
extensionManager,
|
|
169
|
+
commandsManager
|
|
217
170
|
} = props;
|
|
218
171
|
const {
|
|
219
172
|
displaySetService,
|
|
@@ -272,6 +225,16 @@ function OHIFCornerstoneRTViewport(props) {
|
|
|
272
225
|
const onElementDisabled = () => {
|
|
273
226
|
setElement(null);
|
|
274
227
|
};
|
|
228
|
+
const storePresentationState = (0,react.useCallback)(() => {
|
|
229
|
+
viewportGrid?.viewports.forEach(_ref => {
|
|
230
|
+
let {
|
|
231
|
+
viewportIndex
|
|
232
|
+
} = _ref;
|
|
233
|
+
commandsManager.runCommand('storePresentation', {
|
|
234
|
+
viewportIndex
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
}, [viewportGrid]);
|
|
275
238
|
const getCornerstoneViewport = (0,react.useCallback)(() => {
|
|
276
239
|
const {
|
|
277
240
|
component: Component
|
|
@@ -319,7 +282,8 @@ function OHIFCornerstoneRTViewport(props) {
|
|
|
319
282
|
utils_promptHydrateRT({
|
|
320
283
|
servicesManager,
|
|
321
284
|
viewportIndex,
|
|
322
|
-
rtDisplaySet
|
|
285
|
+
rtDisplaySet,
|
|
286
|
+
preHydrateCallbacks: [storePresentationState]
|
|
323
287
|
}).then(isHydrated => {
|
|
324
288
|
if (isHydrated) {
|
|
325
289
|
setIsHydrated(true);
|
|
@@ -348,11 +312,11 @@ function OHIFCornerstoneRTViewport(props) {
|
|
|
348
312
|
(0,react.useEffect)(() => {
|
|
349
313
|
const {
|
|
350
314
|
unsubscribe
|
|
351
|
-
} = segmentationService.subscribe(segmentationService.EVENTS.SEGMENT_LOADING_COMPLETE,
|
|
315
|
+
} = segmentationService.subscribe(segmentationService.EVENTS.SEGMENT_LOADING_COMPLETE, _ref2 => {
|
|
352
316
|
let {
|
|
353
317
|
percentComplete,
|
|
354
318
|
numSegments
|
|
355
|
-
} =
|
|
319
|
+
} = _ref2;
|
|
356
320
|
setProcessingProgress({
|
|
357
321
|
percentComplete,
|
|
358
322
|
totalSegments: numSegments
|
|
@@ -367,10 +331,10 @@ function OHIFCornerstoneRTViewport(props) {
|
|
|
367
331
|
Cleanup the SEG viewport when the viewport is destroyed
|
|
368
332
|
*/
|
|
369
333
|
(0,react.useEffect)(() => {
|
|
370
|
-
const onDisplaySetsRemovedSubscription = displaySetService.subscribe(displaySetService.EVENTS.DISPLAY_SETS_REMOVED,
|
|
334
|
+
const onDisplaySetsRemovedSubscription = displaySetService.subscribe(displaySetService.EVENTS.DISPLAY_SETS_REMOVED, _ref3 => {
|
|
371
335
|
let {
|
|
372
336
|
displaySetInstanceUIDs
|
|
373
|
-
} =
|
|
337
|
+
} = _ref3;
|
|
374
338
|
const activeViewport = viewports[activeViewportIndex];
|
|
375
339
|
if (displaySetInstanceUIDs.includes(activeViewport.displaySetInstanceUID)) {
|
|
376
340
|
viewportGridService.setDisplaySetsForViewport({
|
|
@@ -431,7 +395,14 @@ function OHIFCornerstoneRTViewport(props) {
|
|
|
431
395
|
SeriesNumber
|
|
432
396
|
} = referencedDisplaySetRef.current.metadata;
|
|
433
397
|
const onStatusClick = async () => {
|
|
434
|
-
|
|
398
|
+
// Before hydrating a RT and make it added to all viewports in the grid
|
|
399
|
+
// that share the same frameOfReferenceUID, we need to store the viewport grid
|
|
400
|
+
// presentation state, so that we can restore it after hydrating the RT. This is
|
|
401
|
+
// required if the user has changed the viewport (other viewport than RT viewport)
|
|
402
|
+
// presentation state (w/l and invert) and then opens the RT. If we don't store
|
|
403
|
+
// the presentation state, the viewport will be reset to the default presentation
|
|
404
|
+
storePresentationState();
|
|
405
|
+
const isHydrated = await (0,_hydrateRT/* default */.Z)({
|
|
435
406
|
rtDisplaySet,
|
|
436
407
|
viewportIndex,
|
|
437
408
|
servicesManager
|
|
@@ -9,7 +9,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
9
9
|
|
|
10
10
|
// EXPORTS
|
|
11
11
|
__webpack_require__.d(__webpack_exports__, {
|
|
12
|
-
"default": () => (/* binding */ cornerstone_dicom_rt_src)
|
|
12
|
+
"default": () => (/* binding */ cornerstone_dicom_rt_src),
|
|
13
|
+
hydrateRTDisplaySet: () => (/* reexport */ _hydrateRT/* default */.Z)
|
|
13
14
|
});
|
|
14
15
|
|
|
15
16
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-rt/package.json
|
|
@@ -415,13 +416,16 @@ function getSopClassHandlerModule(_ref2) {
|
|
|
415
416
|
}];
|
|
416
417
|
}
|
|
417
418
|
/* harmony default export */ const src_getSopClassHandlerModule = (getSopClassHandlerModule);
|
|
419
|
+
// EXTERNAL MODULE: ../../../extensions/cornerstone-dicom-rt/src/utils/_hydrateRT.ts
|
|
420
|
+
var _hydrateRT = __webpack_require__(50995);
|
|
418
421
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-rt/src/index.tsx
|
|
419
422
|
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); }
|
|
420
423
|
|
|
421
424
|
|
|
422
425
|
|
|
426
|
+
|
|
423
427
|
const Component = /*#__PURE__*/react.lazy(() => {
|
|
424
|
-
return __webpack_require__.e(/* import() */
|
|
428
|
+
return __webpack_require__.e(/* import() */ 471).then(__webpack_require__.bind(__webpack_require__, 56471));
|
|
425
429
|
});
|
|
426
430
|
const OHIFCornerstoneRTViewport = props => {
|
|
427
431
|
return /*#__PURE__*/react.createElement(react.Suspense, {
|
|
@@ -447,12 +451,14 @@ const extension = {
|
|
|
447
451
|
getViewportModule(_ref) {
|
|
448
452
|
let {
|
|
449
453
|
servicesManager,
|
|
450
|
-
extensionManager
|
|
454
|
+
extensionManager,
|
|
455
|
+
commandsManager
|
|
451
456
|
} = _ref;
|
|
452
457
|
const ExtendedOHIFCornerstoneRTViewport = props => {
|
|
453
458
|
return /*#__PURE__*/react.createElement(OHIFCornerstoneRTViewport, _extends({
|
|
454
459
|
servicesManager: servicesManager,
|
|
455
|
-
extensionManager: extensionManager
|
|
460
|
+
extensionManager: extensionManager,
|
|
461
|
+
commandsManager: commandsManager
|
|
456
462
|
}, props));
|
|
457
463
|
};
|
|
458
464
|
return [{
|
|
@@ -470,6 +476,69 @@ const extension = {
|
|
|
470
476
|
};
|
|
471
477
|
/* harmony default export */ const cornerstone_dicom_rt_src = (extension);
|
|
472
478
|
|
|
479
|
+
|
|
480
|
+
/***/ }),
|
|
481
|
+
|
|
482
|
+
/***/ 50995:
|
|
483
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
484
|
+
|
|
485
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
486
|
+
/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
487
|
+
/* harmony export */ });
|
|
488
|
+
async function _hydrateRTDisplaySet(_ref) {
|
|
489
|
+
let {
|
|
490
|
+
rtDisplaySet,
|
|
491
|
+
viewportIndex,
|
|
492
|
+
servicesManager
|
|
493
|
+
} = _ref;
|
|
494
|
+
const {
|
|
495
|
+
segmentationService,
|
|
496
|
+
hangingProtocolService,
|
|
497
|
+
viewportGridService
|
|
498
|
+
} = servicesManager.services;
|
|
499
|
+
const displaySetInstanceUID = rtDisplaySet.referencedDisplaySetInstanceUID;
|
|
500
|
+
let segmentationId = null;
|
|
501
|
+
|
|
502
|
+
// We need the hydration to notify panels about the new segmentation added
|
|
503
|
+
const suppressEvents = false;
|
|
504
|
+
segmentationId = await segmentationService.createSegmentationForRTDisplaySet(rtDisplaySet, segmentationId, suppressEvents);
|
|
505
|
+
segmentationService.hydrateSegmentation(rtDisplaySet.displaySetInstanceUID);
|
|
506
|
+
const {
|
|
507
|
+
viewports
|
|
508
|
+
} = viewportGridService.getState();
|
|
509
|
+
const updatedViewports = hangingProtocolService.getViewportsRequireUpdate(viewportIndex, displaySetInstanceUID);
|
|
510
|
+
viewportGridService.setDisplaySetsForViewports(updatedViewports);
|
|
511
|
+
|
|
512
|
+
// Todo: fix this after we have a better way for stack viewport segmentations
|
|
513
|
+
|
|
514
|
+
// check every viewport in the viewports to see if the displaySetInstanceUID
|
|
515
|
+
// is being displayed, if so we need to update the viewport to use volume viewport
|
|
516
|
+
// (if already is not using it) since Cornerstone3D currently only supports
|
|
517
|
+
// volume viewport for segmentation
|
|
518
|
+
viewports.forEach((viewport, index) => {
|
|
519
|
+
if (index === viewportIndex) {
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
const shouldDisplaySeg = segmentationService.shouldRenderSegmentation(viewport.displaySetInstanceUIDs, rtDisplaySet.displaySetInstanceUID);
|
|
523
|
+
if (shouldDisplaySeg) {
|
|
524
|
+
updatedViewports.push({
|
|
525
|
+
viewportIndex: index,
|
|
526
|
+
displaySetInstanceUIDs: viewport.displaySetInstanceUIDs,
|
|
527
|
+
viewportOptions: {
|
|
528
|
+
initialImageOptions: {
|
|
529
|
+
preset: 'middle'
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
});
|
|
535
|
+
|
|
536
|
+
// Do the entire update at once
|
|
537
|
+
viewportGridService.setDisplaySetsForViewports(updatedViewports);
|
|
538
|
+
return true;
|
|
539
|
+
}
|
|
540
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_hydrateRTDisplaySet);
|
|
541
|
+
|
|
473
542
|
/***/ })
|
|
474
543
|
|
|
475
544
|
}]);
|
|
@@ -776,7 +776,9 @@ function _measurementReferencesSOPInstanceUID(measurement, SOPInstanceUID, frame
|
|
|
776
776
|
// NOTE: The ReferencedFrameNumber can be multiple values according to the DICOM
|
|
777
777
|
// Standard. But for now, we will support only one ReferenceFrameNumber.
|
|
778
778
|
const ReferencedFrameNumber = measurement.coords[0].ReferencedSOPSequence && measurement.coords[0].ReferencedSOPSequence[0]?.ReferencedFrameNumber || 1;
|
|
779
|
-
if (frameNumber && Number(frameNumber) !== Number(ReferencedFrameNumber))
|
|
779
|
+
if (frameNumber && Number(frameNumber) !== Number(ReferencedFrameNumber)) {
|
|
780
|
+
return false;
|
|
781
|
+
}
|
|
780
782
|
for (let j = 0; j < coords.length; j++) {
|
|
781
783
|
const coord = coords[j];
|
|
782
784
|
const {
|
|
@@ -985,7 +987,9 @@ function _getReferencedImagesList(ImagingMeasurementReportContentSequence) {
|
|
|
985
987
|
const {
|
|
986
988
|
ReferencedSOPSequence
|
|
987
989
|
} = item;
|
|
988
|
-
if (!ReferencedSOPSequence)
|
|
990
|
+
if (!ReferencedSOPSequence) {
|
|
991
|
+
return;
|
|
992
|
+
}
|
|
989
993
|
for (const ref of _getSequenceAsArray(ReferencedSOPSequence)) {
|
|
990
994
|
if (ref.ReferencedSOPClassUID) {
|
|
991
995
|
const {
|
|
@@ -1002,7 +1006,9 @@ function _getReferencedImagesList(ImagingMeasurementReportContentSequence) {
|
|
|
1002
1006
|
return referencedImages;
|
|
1003
1007
|
}
|
|
1004
1008
|
function _getSequenceAsArray(sequence) {
|
|
1005
|
-
if (!sequence)
|
|
1009
|
+
if (!sequence) {
|
|
1010
|
+
return [];
|
|
1011
|
+
}
|
|
1006
1012
|
return Array.isArray(sequence) ? sequence : [sequence];
|
|
1007
1013
|
}
|
|
1008
1014
|
/* harmony default export */ const src_getSopClassHandlerModule = (getSopClassHandlerModule);
|
|
@@ -1366,7 +1372,9 @@ const findInstance = (measurement, displaySetService) => {
|
|
|
1366
1372
|
ReferencedSOPInstanceUID: sopUid
|
|
1367
1373
|
} = measurement;
|
|
1368
1374
|
const referencedDisplaySet = displaySetService.getDisplaySetByUID(displaySetInstanceUID);
|
|
1369
|
-
if (!referencedDisplaySet.images)
|
|
1375
|
+
if (!referencedDisplaySet.images) {
|
|
1376
|
+
return;
|
|
1377
|
+
}
|
|
1370
1378
|
return referencedDisplaySet.images.find(it => it.SOPInstanceUID === sopUid);
|
|
1371
1379
|
};
|
|
1372
1380
|
|
|
@@ -1381,8 +1389,12 @@ const findReferencedInstances = (displaySetService, displaySet) => {
|
|
|
1381
1389
|
const {
|
|
1382
1390
|
imageId
|
|
1383
1391
|
} = measurement;
|
|
1384
|
-
if (!imageId)
|
|
1385
|
-
|
|
1392
|
+
if (!imageId) {
|
|
1393
|
+
continue;
|
|
1394
|
+
}
|
|
1395
|
+
if (instanceById[imageId]) {
|
|
1396
|
+
continue;
|
|
1397
|
+
}
|
|
1386
1398
|
const instance = findInstance(measurement, displaySetService);
|
|
1387
1399
|
if (!instance) {
|
|
1388
1400
|
console.log('Measurement', measurement, 'had no instances found');
|
|
@@ -1627,7 +1639,9 @@ const CORNERSTONE_3D_TOOLS_SOURCE_NAME = 'Cornerstone3DTools';
|
|
|
1627
1639
|
const CORNERSTONE_3D_TOOLS_SOURCE_VERSION = '0.1';
|
|
1628
1640
|
const supportedLegacyCornerstoneTags = ['cornerstoneTools@^4.0.0'];
|
|
1629
1641
|
const convertCode = (codingValues, code) => {
|
|
1630
|
-
if (!code || code.CodingSchemeDesignator === 'CORNERSTONEJS')
|
|
1642
|
+
if (!code || code.CodingSchemeDesignator === 'CORNERSTONEJS') {
|
|
1643
|
+
return;
|
|
1644
|
+
}
|
|
1631
1645
|
const ref = `${code.CodingSchemeDesignator}:${code.CodeValue}`;
|
|
1632
1646
|
const ret = {
|
|
1633
1647
|
...codingValues[ref],
|
|
@@ -1638,13 +1652,17 @@ const convertCode = (codingValues, code) => {
|
|
|
1638
1652
|
return ret;
|
|
1639
1653
|
};
|
|
1640
1654
|
const convertSites = (codingValues, sites) => {
|
|
1641
|
-
if (!sites || !sites.length)
|
|
1655
|
+
if (!sites || !sites.length) {
|
|
1656
|
+
return;
|
|
1657
|
+
}
|
|
1642
1658
|
const ret = [];
|
|
1643
1659
|
// Do as a loop to convert away from Proxy instances
|
|
1644
1660
|
for (let i = 0; i < sites.length; i++) {
|
|
1645
1661
|
// Deal with irregular conversion from dcmjs
|
|
1646
1662
|
const site = convertCode(codingValues, sites[i][0] || sites[i]);
|
|
1647
|
-
if (site)
|
|
1663
|
+
if (site) {
|
|
1664
|
+
ret.push(site);
|
|
1665
|
+
}
|
|
1648
1666
|
}
|
|
1649
1667
|
return ret.length && ret || undefined;
|
|
1650
1668
|
};
|
|
@@ -151,7 +151,9 @@ function callInputDialog(uiDialogService, data, callback) {
|
|
|
151
151
|
} = _ref;
|
|
152
152
|
switch (action.id) {
|
|
153
153
|
case 'save':
|
|
154
|
-
if (typeof validateFunc === 'function' && !validateFunc(value.label))
|
|
154
|
+
if (typeof validateFunc === 'function' && !validateFunc(value.label)) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
155
157
|
callback(value.label, action.id);
|
|
156
158
|
break;
|
|
157
159
|
case 'cancel':
|
|
@@ -601,7 +603,9 @@ function getDisplayText(mappedAnnotations, displaySet) {
|
|
|
601
603
|
}
|
|
602
604
|
const instanceText = InstanceNumber ? ` I: ${InstanceNumber}` : '';
|
|
603
605
|
const frameText = displaySet.isMultiFrame ? ` F: ${frameNumber}` : '';
|
|
604
|
-
if (length === null || length === undefined)
|
|
606
|
+
if (length === null || length === undefined) {
|
|
607
|
+
return displayText;
|
|
608
|
+
}
|
|
605
609
|
const roundedLength = src.utils.roundNumber(length, 2);
|
|
606
610
|
displayText.push(`${roundedLength} mm (S: ${SeriesNumber}${instanceText}${frameText})`);
|
|
607
611
|
return displayText;
|
|
@@ -1496,7 +1500,9 @@ function CobbAngle_getDisplayText(mappedAnnotations, displaySet) {
|
|
|
1496
1500
|
}
|
|
1497
1501
|
const instanceText = InstanceNumber ? ` I: ${InstanceNumber}` : '';
|
|
1498
1502
|
const frameText = displaySet.isMultiFrame ? ` F: ${frameNumber}` : '';
|
|
1499
|
-
if (angle === undefined)
|
|
1503
|
+
if (angle === undefined) {
|
|
1504
|
+
return displayText;
|
|
1505
|
+
}
|
|
1500
1506
|
const roundedAngle = src.utils.roundNumber(angle, 2);
|
|
1501
1507
|
displayText.push(`${roundedAngle} ${unit} (S: ${SeriesNumber}${instanceText}${frameText})`);
|
|
1502
1508
|
return displayText;
|
|
@@ -1676,7 +1682,9 @@ function Angle_getDisplayText(mappedAnnotations, displaySet) {
|
|
|
1676
1682
|
}
|
|
1677
1683
|
const instanceText = InstanceNumber ? ` I: ${InstanceNumber}` : '';
|
|
1678
1684
|
const frameText = displaySet.isMultiFrame ? ` F: ${frameNumber}` : '';
|
|
1679
|
-
if (angle === undefined)
|
|
1685
|
+
if (angle === undefined) {
|
|
1686
|
+
return displayText;
|
|
1687
|
+
}
|
|
1680
1688
|
const roundedAngle = src.utils.roundNumber(angle, 2);
|
|
1681
1689
|
displayText.push(`${roundedAngle} ${unit} (S: ${SeriesNumber}${instanceText}${frameText})`);
|
|
1682
1690
|
return displayText;
|
|
@@ -2710,8 +2718,12 @@ function getNthFrames(imageIds) {
|
|
|
2710
2718
|
* @returns [] reordered to be breadth first traversal of lists
|
|
2711
2719
|
*/
|
|
2712
2720
|
function interleave(lists) {
|
|
2713
|
-
if (!lists || !lists.length)
|
|
2714
|
-
|
|
2721
|
+
if (!lists || !lists.length) {
|
|
2722
|
+
return [];
|
|
2723
|
+
}
|
|
2724
|
+
if (lists.length === 1) {
|
|
2725
|
+
return lists[0];
|
|
2726
|
+
}
|
|
2715
2727
|
console.time('interleave');
|
|
2716
2728
|
const useLists = [...lists];
|
|
2717
2729
|
const ret = [];
|
|
@@ -3000,9 +3012,15 @@ const DEFAULT_CONTEXT_MENU_CLICKS = {
|
|
|
3000
3012
|
function getEventName(evt) {
|
|
3001
3013
|
const button = evt.detail.event.which;
|
|
3002
3014
|
const nameArr = [];
|
|
3003
|
-
if (evt.detail.event.altKey)
|
|
3004
|
-
|
|
3005
|
-
|
|
3015
|
+
if (evt.detail.event.altKey) {
|
|
3016
|
+
nameArr.push('alt');
|
|
3017
|
+
}
|
|
3018
|
+
if (evt.detail.event.ctrlKey) {
|
|
3019
|
+
nameArr.push('ctrl');
|
|
3020
|
+
}
|
|
3021
|
+
if (evt.detail.event.shiftKey) {
|
|
3022
|
+
nameArr.push('shift');
|
|
3023
|
+
}
|
|
3006
3024
|
nameArr.push('button');
|
|
3007
3025
|
nameArr.push(button);
|
|
3008
3026
|
return nameArr.join('');
|
|
@@ -3037,7 +3055,9 @@ function initContextMenu(_ref) {
|
|
|
3037
3055
|
element
|
|
3038
3056
|
} = evt.detail;
|
|
3039
3057
|
const viewportInfo = cornerstoneViewportService.getViewportInfo(viewportId);
|
|
3040
|
-
if (!viewportInfo)
|
|
3058
|
+
if (!viewportInfo) {
|
|
3059
|
+
return;
|
|
3060
|
+
}
|
|
3041
3061
|
const viewportIndex = viewportInfo.getViewportIndex();
|
|
3042
3062
|
// TODO check update upstream
|
|
3043
3063
|
(0,state/* setEnabledElement */.Yc)(viewportIndex, element);
|
|
@@ -3074,9 +3094,15 @@ const DEFAULT_DOUBLE_CLICK = {
|
|
|
3074
3094
|
*/
|
|
3075
3095
|
function getDoubleClickEventName(evt) {
|
|
3076
3096
|
const nameArr = [];
|
|
3077
|
-
if (evt.detail.event.altKey)
|
|
3078
|
-
|
|
3079
|
-
|
|
3097
|
+
if (evt.detail.event.altKey) {
|
|
3098
|
+
nameArr.push('alt');
|
|
3099
|
+
}
|
|
3100
|
+
if (evt.detail.event.ctrlKey) {
|
|
3101
|
+
nameArr.push('ctrl');
|
|
3102
|
+
}
|
|
3103
|
+
if (evt.detail.event.shiftKey) {
|
|
3104
|
+
nameArr.push('shift');
|
|
3105
|
+
}
|
|
3080
3106
|
nameArr.push('doubleClick');
|
|
3081
3107
|
return nameArr.join('');
|
|
3082
3108
|
}
|
|
@@ -3517,7 +3543,9 @@ class DicomFileUploader extends src/* PubSubService */.hC {
|
|
|
3517
3543
|
request.addEventListener('loadend', cleanUpCallback);
|
|
3518
3544
|
}
|
|
3519
3545
|
_checkDicomFile(arrayBuffer) {
|
|
3520
|
-
if (arrayBuffer.length <= 132)
|
|
3546
|
+
if (arrayBuffer.length <= 132) {
|
|
3547
|
+
return false;
|
|
3548
|
+
}
|
|
3521
3549
|
const arr = new Uint8Array(arrayBuffer.slice(128, 132));
|
|
3522
3550
|
// bytes from 128 to 132 must be "DICM"
|
|
3523
3551
|
return Array.from('DICM').every((char, i) => char.charCodeAt(0) === arr[i]);
|
|
@@ -4432,6 +4460,7 @@ function commandsModule(_ref) {
|
|
|
4432
4460
|
toolGroupService,
|
|
4433
4461
|
cineService,
|
|
4434
4462
|
toolbarService,
|
|
4463
|
+
stateSyncService,
|
|
4435
4464
|
uiDialogService,
|
|
4436
4465
|
cornerstoneViewportService,
|
|
4437
4466
|
uiNotificationService,
|
|
@@ -5033,6 +5062,40 @@ function commandsModule(_ref) {
|
|
|
5033
5062
|
);
|
|
5034
5063
|
|
|
5035
5064
|
toolGroup.setToolEnabled(dist_esm.ReferenceLinesTool.toolName);
|
|
5065
|
+
},
|
|
5066
|
+
storePresentation: _ref18 => {
|
|
5067
|
+
let {
|
|
5068
|
+
viewportIndex
|
|
5069
|
+
} = _ref18;
|
|
5070
|
+
const presentation = cornerstoneViewportService.getPresentation(viewportIndex);
|
|
5071
|
+
if (!presentation || !presentation.presentationIds) {
|
|
5072
|
+
return;
|
|
5073
|
+
}
|
|
5074
|
+
const {
|
|
5075
|
+
lutPresentationStore,
|
|
5076
|
+
positionPresentationStore
|
|
5077
|
+
} = stateSyncService.getState();
|
|
5078
|
+
const {
|
|
5079
|
+
presentationIds
|
|
5080
|
+
} = presentation;
|
|
5081
|
+
const {
|
|
5082
|
+
lutPresentationId,
|
|
5083
|
+
positionPresentationId
|
|
5084
|
+
} = presentationIds || {};
|
|
5085
|
+
const storeState = {};
|
|
5086
|
+
if (lutPresentationId) {
|
|
5087
|
+
storeState.lutPresentationStore = {
|
|
5088
|
+
...lutPresentationStore,
|
|
5089
|
+
[lutPresentationId]: presentation
|
|
5090
|
+
};
|
|
5091
|
+
}
|
|
5092
|
+
if (positionPresentationId) {
|
|
5093
|
+
storeState.positionPresentationStore = {
|
|
5094
|
+
...positionPresentationStore,
|
|
5095
|
+
[positionPresentationId]: presentation
|
|
5096
|
+
};
|
|
5097
|
+
}
|
|
5098
|
+
stateSyncService.store(storeState);
|
|
5036
5099
|
}
|
|
5037
5100
|
};
|
|
5038
5101
|
const definitions = {
|
|
@@ -5169,6 +5232,11 @@ function commandsModule(_ref) {
|
|
|
5169
5232
|
},
|
|
5170
5233
|
toggleReferenceLines: {
|
|
5171
5234
|
commandFn: actions.toggleReferenceLines
|
|
5235
|
+
},
|
|
5236
|
+
storePresentation: {
|
|
5237
|
+
commandFn: actions.storePresentation,
|
|
5238
|
+
storeContexts: [],
|
|
5239
|
+
options: {}
|
|
5172
5240
|
}
|
|
5173
5241
|
};
|
|
5174
5242
|
return {
|
|
@@ -7650,7 +7718,9 @@ const DEFAULT_TOOLGROUP_ID = 'default';
|
|
|
7650
7718
|
// Return true if the data contains the given display set UID OR the imageId
|
|
7651
7719
|
// if it is a composite object.
|
|
7652
7720
|
const dataContains = (data, displaySetUID, imageId) => {
|
|
7653
|
-
if (data.displaySetInstanceUID === displaySetUID)
|
|
7721
|
+
if (data.displaySetInstanceUID === displaySetUID) {
|
|
7722
|
+
return true;
|
|
7723
|
+
}
|
|
7654
7724
|
if (imageId && data.isCompositeStack && data.imageIds) {
|
|
7655
7725
|
return !!data.imageIds.find(dataId => dataId === imageId);
|
|
7656
7726
|
}
|
|
@@ -7682,7 +7752,9 @@ class ViewportInfo {
|
|
|
7682
7752
|
* OR if it is a composite stack and contains the given imageId
|
|
7683
7753
|
*/
|
|
7684
7754
|
contains(displaySetUID, imageId) {
|
|
7685
|
-
if (!this.viewportData?.data)
|
|
7755
|
+
if (!this.viewportData?.data) {
|
|
7756
|
+
return false;
|
|
7757
|
+
}
|
|
7686
7758
|
if (this.viewportData.data.length) {
|
|
7687
7759
|
return !!this.viewportData.data.find(data => dataContains(data, displaySetUID, imageId));
|
|
7688
7760
|
}
|
|
@@ -7977,19 +8049,27 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
7977
8049
|
}
|
|
7978
8050
|
setPresentations(viewport, presentations) {
|
|
7979
8051
|
const properties = presentations?.lutPresentation?.properties;
|
|
7980
|
-
if (properties)
|
|
8052
|
+
if (properties) {
|
|
8053
|
+
viewport.setProperties(properties);
|
|
8054
|
+
}
|
|
7981
8055
|
const camera = presentations?.positionPresentation?.camera;
|
|
7982
|
-
if (camera)
|
|
8056
|
+
if (camera) {
|
|
8057
|
+
viewport.setCamera(camera);
|
|
8058
|
+
}
|
|
7983
8059
|
}
|
|
7984
8060
|
getPresentation(viewportIndex) {
|
|
7985
8061
|
const viewportInfo = this.viewportsInfo.get(viewportIndex);
|
|
7986
|
-
if (!viewportInfo)
|
|
8062
|
+
if (!viewportInfo) {
|
|
8063
|
+
return;
|
|
8064
|
+
}
|
|
7987
8065
|
const {
|
|
7988
8066
|
viewportType,
|
|
7989
8067
|
presentationIds
|
|
7990
8068
|
} = viewportInfo.getViewportOptions();
|
|
7991
8069
|
const csViewport = this.getCornerstoneViewportByIndex(viewportIndex);
|
|
7992
|
-
if (!csViewport)
|
|
8070
|
+
if (!csViewport) {
|
|
8071
|
+
return;
|
|
8072
|
+
}
|
|
7993
8073
|
const properties = csViewport.getProperties();
|
|
7994
8074
|
if (properties.isComputedVOI) {
|
|
7995
8075
|
delete properties.voiRange;
|
|
@@ -8141,7 +8221,9 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
8141
8221
|
viewport.setStack(imageIds, initialImageIndexToUse).then(() => {
|
|
8142
8222
|
viewport.setProperties(properties);
|
|
8143
8223
|
const camera = presentations.positionPresentation?.camera;
|
|
8144
|
-
if (camera)
|
|
8224
|
+
if (camera) {
|
|
8225
|
+
viewport.setCamera(camera);
|
|
8226
|
+
}
|
|
8145
8227
|
});
|
|
8146
8228
|
}
|
|
8147
8229
|
_getInitialImageIndexForViewport(viewportInfo, imageIds) {
|