@ohif/app 3.9.0-beta.77 → 3.9.0-beta.78
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/{1169.bundle.a3d3d310f1d8d7e335bf.js → 1169.bundle.d32f38ab5aa329346850.js} +46 -106
- package/dist/{1202.bundle.1468f0e71fea0c593081.js → 1202.bundle.55f140afb05e1ad5512c.js} +503 -153
- package/dist/{2568.css → 1540.css} +1 -0
- package/dist/{1994.bundle.39ea4d1a48d42cdca49b.js → 1994.bundle.083fb36bc0648f2dbda6.js} +3 -3
- package/dist/{9824.bundle.8e8afc799f0534014fa9.js → 2119.bundle.3446480f91f1200cd45c.js} +4 -4
- package/dist/{9824.css → 2119.css} +1 -0
- package/dist/{2650.bundle.1f7d90198b9e361dfb9c.js → 2650.bundle.feb3b241748314884ae4.js} +57 -35
- package/dist/{3117.bundle.c83d0f403d17104a7c4c.js → 3117.bundle.463d5fa4671a93939d36.js} +8 -7
- package/dist/{4210.bundle.f1af90765358215ca053.js → 4210.bundle.38eb5056ac41a0b04d21.js} +2 -2
- package/dist/{4842.bundle.11abbf3f8699b84a7537.js → 4842.bundle.0427b8aa1b52aa050ed2.js} +12 -8
- package/dist/{5888.bundle.f48daf22ce156ac4956a.js → 5888.bundle.ebca6329037cf353968f.js} +14 -7
- package/dist/{2417.bundle.4a0334c8c4047005979e.js → 5898.bundle.be696e0b355efc1c7f05.js} +1947 -1
- package/dist/{2281.bundle.b20397636c4b681f4463.js → 655.bundle.28f107410332c62993a3.js} +170 -66
- package/dist/{6591.bundle.092858f2e84426bc0010.js → 6591.bundle.92a28f98c3f45ac3b3f1.js} +15 -1
- package/dist/{7502.bundle.7f3a72a5571a00fda890.js → 7502.bundle.550aee57ecd221eab7c1.js} +4 -6
- package/dist/{3424.bundle.1b6101d721148c04242b.js → 79.bundle.b03daeeef3e6faf9dca3.js} +5 -47
- package/dist/{8993.bundle.256bb3c84d2564a5f3cf.js → 8993.bundle.23cd5f8560800a97d798.js} +39 -32
- package/dist/{2065.bundle.fc147f9fde903e0768f4.js → 8999.bundle.e23beb310b14ca9ded76.js} +13 -133
- package/dist/{9579.bundle.7212d7a737a71bb61502.js → 9579.bundle.f9c9be0c5ab6cddbde3d.js} +8 -7
- package/dist/{5516.bundle.f61b8aebe75f7bafd5b1.js → 962.bundle.04afab064299df16f869.js} +408 -179
- package/dist/app-config.js +1 -0
- package/dist/{app.bundle.e3ce3b1cf2fae5cedcd3.js → app.bundle.53faac5b01b67714fad2.js} +646 -349
- package/dist/index.html +1 -1
- package/dist/{polySeg.bundle.40b9a8c9006bb15691ee.js → polySeg.bundle.0a70e65fe89169ec7508.js} +1 -1
- package/dist/{suv-peak-worker.bundle.a70e70b9ef87c18b896c.js → suv-peak-worker.bundle.54d68bc1808ad3d77994.js} +1 -1
- package/dist/sw.js +1 -1
- package/package.json +18 -18
- package/dist/7604.bundle.42d3f08efb3a9eae4581.js +0 -1950
- package/dist/{1498.bundle.d8f5281952d09c57ef87.js → 1498.bundle.a2d05ac1f27d0c2d2c9f.js} +0 -0
- package/dist/{153.bundle.94f93195fab889e0add8.js → 153.bundle.3ba838ef3c08a266ae35.js} +0 -0
- package/dist/{2791.bundle.597dca661f5f08060ad3.js → 2791.bundle.cfa27e4347069ab301b7.js} +0 -0
- package/dist/{3497.bundle.a04a2444975bf50fddf8.js → 3497.bundle.512610422a2862584c55.js} +0 -0
- package/dist/{3962.bundle.db07d757866d3a3b20b3.js → 3962.bundle.31bfadcde7f5a2dd8932.js} +0 -0
- package/dist/{4353.bundle.c835b4ea70768a207c59.js → 4353.bundle.c13a0c72c607850ea3c0.js} +0 -0
- package/dist/{4978.bundle.c5d6cac06bcc9656c900.js → 4978.bundle.655344cfd52d9f0641e5.js} +0 -0
- package/dist/{5793.bundle.eed3fe9019c31999efff.js → 5793.bundle.d1b4e887564bbb98752d.js} +0 -0
- package/dist/{6904.bundle.27abf08c0f2e4fe5e06d.js → 6904.bundle.da0d83fcd48a48cfaac1.js} +0 -0
- package/dist/{7246.bundle.d3f1bb1a40801b133810.js → 7246.bundle.f1cbdd5ec9387bb6f8fe.js} +0 -0
- package/dist/{7360.bundle.b28c83aa3910eaa427ee.js → 7360.bundle.d0bdb43af1494bccc433.js} +0 -0
- package/dist/{7376.bundle.1173819ab2acd8610f1e.js → 7376.bundle.d6b445de2d468ab2e8b3.js} +0 -0
- package/dist/{3424.css → 79.css} +1 -1
- /package/dist/{7913.bundle.5702ee8798da273c0c5d.js → 7913.bundle.353baac2e2a5b4bb330d.js} +0 -0
- /package/dist/{818.bundle.b64fae7e982e16a82ca2.js → 818.bundle.b6027359846cc90e32ff.js} +0 -0
- /package/dist/{8944.bundle.3bf7ef09ea87195b9e23.js → 8944.bundle.29926bb653a467c7e7d8.js} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
(globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[
|
|
2
|
+
(globalThis["webpackChunk"] = globalThis["webpackChunk"] || []).push([[962],{
|
|
3
3
|
|
|
4
4
|
/***/ 34:
|
|
5
5
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
@@ -723,7 +723,7 @@ const useViewportActionCornersContext = () => (0,react__WEBPACK_IMPORTED_MODULE_
|
|
|
723
723
|
|
|
724
724
|
/***/ }),
|
|
725
725
|
|
|
726
|
-
/***/
|
|
726
|
+
/***/ 962:
|
|
727
727
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
728
728
|
|
|
729
729
|
// ESM COMPAT FLAG
|
|
@@ -738,7 +738,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
738
738
|
findNearbyToolData: () => (/* reexport */ findNearbyToolData),
|
|
739
739
|
getActiveViewportEnabledElement: () => (/* reexport */ getActiveViewportEnabledElement),
|
|
740
740
|
getEnabledElement: () => (/* reexport */ state/* getEnabledElement */.K8),
|
|
741
|
-
getSOPInstanceAttributes: () => (/* reexport */ getSOPInstanceAttributes
|
|
741
|
+
getSOPInstanceAttributes: () => (/* reexport */ getSOPInstanceAttributes),
|
|
742
742
|
measurementMappingUtils: () => (/* reexport */ utils_namespaceObject),
|
|
743
743
|
setEnabledElement: () => (/* reexport */ state/* setEnabledElement */.Yc),
|
|
744
744
|
toolNames: () => (/* reexport */ toolNames)
|
|
@@ -751,7 +751,7 @@ __webpack_require__.d(utils_namespaceObject, {
|
|
|
751
751
|
getDisplayUnit: () => (utils_getDisplayUnit),
|
|
752
752
|
getFirstAnnotationSelected: () => (getFirstAnnotationSelected),
|
|
753
753
|
getHandlesFromPoints: () => (getHandlesFromPoints),
|
|
754
|
-
getSOPInstanceAttributes: () => (getSOPInstanceAttributes
|
|
754
|
+
getSOPInstanceAttributes: () => (getSOPInstanceAttributes),
|
|
755
755
|
isAnnotationSelected: () => (isAnnotationSelected),
|
|
756
756
|
setAnnotationSelected: () => (setAnnotationSelected)
|
|
757
757
|
});
|
|
@@ -1144,8 +1144,8 @@ function onCompletedCalibrationLine(servicesManager, csToolsEvent) {
|
|
|
1144
1144
|
});
|
|
1145
1145
|
});
|
|
1146
1146
|
}
|
|
1147
|
-
// EXTERNAL MODULE: ../../core/src/utils/index.ts +
|
|
1148
|
-
var utils = __webpack_require__(
|
|
1147
|
+
// EXTERNAL MODULE: ../../core/src/utils/index.ts + 30 modules
|
|
1148
|
+
var utils = __webpack_require__(61512);
|
|
1149
1149
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/tools/OverlayPlaneModuleProvider.ts
|
|
1150
1150
|
|
|
1151
1151
|
const _cachedOverlayMetadata = new Map();
|
|
@@ -1507,8 +1507,46 @@ const toolNames = {
|
|
|
1507
1507
|
|
|
1508
1508
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/measurementServiceMappings/constants/supportedTools.js
|
|
1509
1509
|
/* harmony default export */ const supportedTools = (['Length', 'EllipticalROI', 'CircleROI', 'Bidirectional', 'ArrowAnnotate', 'Angle', 'CobbAngle', 'Probe', 'RectangleROI', 'PlanarFreehandROI', 'SplineROI', 'LivewireContour', 'Probe', 'UltrasoundDirectionalTool']);
|
|
1510
|
-
|
|
1511
|
-
|
|
1510
|
+
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/measurementServiceMappings/utils/getSOPInstanceAttributes.js
|
|
1511
|
+
|
|
1512
|
+
|
|
1513
|
+
/**
|
|
1514
|
+
* It checks if the imageId is provided then it uses it to query
|
|
1515
|
+
* the metadata and get the SOPInstanceUID, SeriesInstanceUID and StudyInstanceUID.
|
|
1516
|
+
* If the imageId is not provided then undefined is returned.
|
|
1517
|
+
* @param {string} imageId The image id of the referenced image
|
|
1518
|
+
* @returns
|
|
1519
|
+
*/
|
|
1520
|
+
function getSOPInstanceAttributes(imageId, displaySetService, annotation) {
|
|
1521
|
+
if (imageId) {
|
|
1522
|
+
return _getUIDFromImageID(imageId);
|
|
1523
|
+
}
|
|
1524
|
+
const {
|
|
1525
|
+
metadata
|
|
1526
|
+
} = annotation;
|
|
1527
|
+
const {
|
|
1528
|
+
volumeId
|
|
1529
|
+
} = metadata;
|
|
1530
|
+
const displaySet = displaySetService.getDisplaySetsBy(displaySet => volumeId.includes(displaySet.uid))[0];
|
|
1531
|
+
const {
|
|
1532
|
+
StudyInstanceUID,
|
|
1533
|
+
SeriesInstanceUID
|
|
1534
|
+
} = displaySet;
|
|
1535
|
+
return {
|
|
1536
|
+
SOPInstanceUID: undefined,
|
|
1537
|
+
SeriesInstanceUID,
|
|
1538
|
+
StudyInstanceUID
|
|
1539
|
+
};
|
|
1540
|
+
}
|
|
1541
|
+
function _getUIDFromImageID(imageId) {
|
|
1542
|
+
const instance = esm.metaData.get('instance', imageId);
|
|
1543
|
+
return {
|
|
1544
|
+
SOPInstanceUID: instance.SOPInstanceUID,
|
|
1545
|
+
SeriesInstanceUID: instance.SeriesInstanceUID,
|
|
1546
|
+
StudyInstanceUID: instance.StudyInstanceUID,
|
|
1547
|
+
frameNumber: instance.frameNumber || 1
|
|
1548
|
+
};
|
|
1549
|
+
}
|
|
1512
1550
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/utils/measurementServiceMappings/Length.ts
|
|
1513
1551
|
|
|
1514
1552
|
|
|
@@ -1548,7 +1586,7 @@ const Length = {
|
|
|
1548
1586
|
SOPInstanceUID,
|
|
1549
1587
|
SeriesInstanceUID,
|
|
1550
1588
|
StudyInstanceUID
|
|
1551
|
-
} =
|
|
1589
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
1552
1590
|
let displaySet;
|
|
1553
1591
|
if (SOPInstanceUID) {
|
|
1554
1592
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -1605,7 +1643,7 @@ function getMappedAnnotations(annotation, displaySetService) {
|
|
|
1605
1643
|
SOPInstanceUID,
|
|
1606
1644
|
SeriesInstanceUID,
|
|
1607
1645
|
frameNumber
|
|
1608
|
-
} =
|
|
1646
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
1609
1647
|
const displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID)[0];
|
|
1610
1648
|
const {
|
|
1611
1649
|
SeriesNumber
|
|
@@ -1678,7 +1716,7 @@ function getDisplayText(mappedAnnotations, displaySet, customizationService) {
|
|
|
1678
1716
|
frameNumber,
|
|
1679
1717
|
unit
|
|
1680
1718
|
} = mappedAnnotations[0];
|
|
1681
|
-
const instance = displaySet.
|
|
1719
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
1682
1720
|
let InstanceNumber;
|
|
1683
1721
|
if (instance) {
|
|
1684
1722
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -1785,7 +1823,7 @@ const Bidirectional = {
|
|
|
1785
1823
|
SOPInstanceUID,
|
|
1786
1824
|
SeriesInstanceUID,
|
|
1787
1825
|
StudyInstanceUID
|
|
1788
|
-
} =
|
|
1826
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
1789
1827
|
let displaySet;
|
|
1790
1828
|
if (SOPInstanceUID) {
|
|
1791
1829
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -1843,7 +1881,7 @@ function Bidirectional_getMappedAnnotations(annotation, displaySetService) {
|
|
|
1843
1881
|
SOPInstanceUID,
|
|
1844
1882
|
SeriesInstanceUID,
|
|
1845
1883
|
frameNumber
|
|
1846
|
-
} =
|
|
1884
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
1847
1885
|
const displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID)[0];
|
|
1848
1886
|
const {
|
|
1849
1887
|
SeriesNumber
|
|
@@ -1920,7 +1958,7 @@ function Bidirectional_getDisplayText(mappedAnnotations, displaySet, customizati
|
|
|
1920
1958
|
} = mappedAnnotations[0];
|
|
1921
1959
|
const roundedLength = src.utils.roundNumber(length, 2);
|
|
1922
1960
|
const roundedWidth = src.utils.roundNumber(width, 2);
|
|
1923
|
-
const instance = displaySet.
|
|
1961
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
1924
1962
|
let InstanceNumber;
|
|
1925
1963
|
if (instance) {
|
|
1926
1964
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -1978,7 +2016,7 @@ const EllipticalROI = {
|
|
|
1978
2016
|
SOPInstanceUID,
|
|
1979
2017
|
SeriesInstanceUID,
|
|
1980
2018
|
StudyInstanceUID
|
|
1981
|
-
} =
|
|
2019
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
1982
2020
|
let displaySet;
|
|
1983
2021
|
if (SOPInstanceUID) {
|
|
1984
2022
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -2035,7 +2073,7 @@ function EllipticalROI_getMappedAnnotations(annotation, displaySetService) {
|
|
|
2035
2073
|
SOPInstanceUID,
|
|
2036
2074
|
SeriesInstanceUID,
|
|
2037
2075
|
frameNumber
|
|
2038
|
-
} =
|
|
2076
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
2039
2077
|
const displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID)[0];
|
|
2040
2078
|
const {
|
|
2041
2079
|
SeriesNumber
|
|
@@ -2122,7 +2160,7 @@ function EllipticalROI_getDisplayText(mappedAnnotations, displaySet, customizati
|
|
|
2122
2160
|
frameNumber,
|
|
2123
2161
|
areaUnit
|
|
2124
2162
|
} = mappedAnnotations[0];
|
|
2125
|
-
const instance = displaySet.
|
|
2163
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
2126
2164
|
let InstanceNumber;
|
|
2127
2165
|
if (instance) {
|
|
2128
2166
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -2183,7 +2221,7 @@ const CircleROI = {
|
|
|
2183
2221
|
SOPInstanceUID,
|
|
2184
2222
|
SeriesInstanceUID,
|
|
2185
2223
|
StudyInstanceUID
|
|
2186
|
-
} =
|
|
2224
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
2187
2225
|
let displaySet;
|
|
2188
2226
|
if (SOPInstanceUID) {
|
|
2189
2227
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -2240,7 +2278,7 @@ function CircleROI_getMappedAnnotations(annotation, displaySetService) {
|
|
|
2240
2278
|
SOPInstanceUID,
|
|
2241
2279
|
SeriesInstanceUID,
|
|
2242
2280
|
frameNumber
|
|
2243
|
-
} =
|
|
2281
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
2244
2282
|
const displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID)[0];
|
|
2245
2283
|
const {
|
|
2246
2284
|
SeriesNumber
|
|
@@ -2327,7 +2365,7 @@ function CircleROI_getDisplayText(mappedAnnotations, displaySet, customizationSe
|
|
|
2327
2365
|
frameNumber,
|
|
2328
2366
|
areaUnit
|
|
2329
2367
|
} = mappedAnnotations[0];
|
|
2330
|
-
const instance = displaySet.
|
|
2368
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
2331
2369
|
let InstanceNumber;
|
|
2332
2370
|
if (instance) {
|
|
2333
2371
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -2393,7 +2431,7 @@ const ArrowAnnotate_Length = {
|
|
|
2393
2431
|
SOPInstanceUID,
|
|
2394
2432
|
SeriesInstanceUID,
|
|
2395
2433
|
StudyInstanceUID
|
|
2396
|
-
} =
|
|
2434
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
2397
2435
|
let displaySet;
|
|
2398
2436
|
if (SOPInstanceUID) {
|
|
2399
2437
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -2445,7 +2483,7 @@ function ArrowAnnotate_getMappedAnnotations(annotation, displaySetService) {
|
|
|
2445
2483
|
SOPInstanceUID,
|
|
2446
2484
|
SeriesInstanceUID,
|
|
2447
2485
|
frameNumber
|
|
2448
|
-
} =
|
|
2486
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
2449
2487
|
const displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID)[0];
|
|
2450
2488
|
const {
|
|
2451
2489
|
SeriesNumber
|
|
@@ -2471,7 +2509,7 @@ function ArrowAnnotate_getDisplayText(mappedAnnotations, displaySet, customizati
|
|
|
2471
2509
|
SOPInstanceUID,
|
|
2472
2510
|
frameNumber
|
|
2473
2511
|
} = mappedAnnotations[0];
|
|
2474
|
-
const instance = displaySet.
|
|
2512
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
2475
2513
|
let InstanceNumber;
|
|
2476
2514
|
if (instance) {
|
|
2477
2515
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -2522,7 +2560,7 @@ const CobbAngle = {
|
|
|
2522
2560
|
SOPInstanceUID,
|
|
2523
2561
|
SeriesInstanceUID,
|
|
2524
2562
|
StudyInstanceUID
|
|
2525
|
-
} =
|
|
2563
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
2526
2564
|
let displaySet;
|
|
2527
2565
|
if (SOPInstanceUID) {
|
|
2528
2566
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -2579,7 +2617,7 @@ function CobbAngle_getMappedAnnotations(annotation, displaySetService) {
|
|
|
2579
2617
|
SOPInstanceUID,
|
|
2580
2618
|
SeriesInstanceUID,
|
|
2581
2619
|
frameNumber
|
|
2582
|
-
} =
|
|
2620
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
2583
2621
|
const displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID)[0];
|
|
2584
2622
|
const {
|
|
2585
2623
|
SeriesNumber
|
|
@@ -2650,7 +2688,7 @@ function CobbAngle_getDisplayText(mappedAnnotations, displaySet, customizationSe
|
|
|
2650
2688
|
SOPInstanceUID,
|
|
2651
2689
|
frameNumber
|
|
2652
2690
|
} = mappedAnnotations[0];
|
|
2653
|
-
const instance = displaySet.
|
|
2691
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
2654
2692
|
let InstanceNumber;
|
|
2655
2693
|
if (instance) {
|
|
2656
2694
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -2705,7 +2743,7 @@ const Angle = {
|
|
|
2705
2743
|
SOPInstanceUID,
|
|
2706
2744
|
SeriesInstanceUID,
|
|
2707
2745
|
StudyInstanceUID
|
|
2708
|
-
} =
|
|
2746
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
2709
2747
|
let displaySet;
|
|
2710
2748
|
if (SOPInstanceUID) {
|
|
2711
2749
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -2762,7 +2800,7 @@ function Angle_getMappedAnnotations(annotation, displaySetService) {
|
|
|
2762
2800
|
SOPInstanceUID,
|
|
2763
2801
|
SeriesInstanceUID,
|
|
2764
2802
|
frameNumber
|
|
2765
|
-
} =
|
|
2803
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
2766
2804
|
const displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID)[0];
|
|
2767
2805
|
const {
|
|
2768
2806
|
SeriesNumber
|
|
@@ -2833,7 +2871,7 @@ function Angle_getDisplayText(mappedAnnotations, displaySet, customizationServic
|
|
|
2833
2871
|
SOPInstanceUID,
|
|
2834
2872
|
frameNumber
|
|
2835
2873
|
} = mappedAnnotations[0];
|
|
2836
|
-
const instance = displaySet.
|
|
2874
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
2837
2875
|
let InstanceNumber;
|
|
2838
2876
|
if (instance) {
|
|
2839
2877
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -2894,7 +2932,7 @@ const PlanarFreehandROI = {
|
|
|
2894
2932
|
SeriesInstanceUID,
|
|
2895
2933
|
frameNumber,
|
|
2896
2934
|
StudyInstanceUID
|
|
2897
|
-
} =
|
|
2935
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
2898
2936
|
let displaySet;
|
|
2899
2937
|
if (SOPInstanceUID) {
|
|
2900
2938
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -3000,9 +3038,9 @@ function PlanarFreehandROI_getDisplayText(annotation, displaySet, customizationS
|
|
|
3000
3038
|
const {
|
|
3001
3039
|
SOPInstanceUID,
|
|
3002
3040
|
frameNumber
|
|
3003
|
-
} =
|
|
3041
|
+
} = getSOPInstanceAttributes(metadata.referencedImageId, displaySetService, annotation);
|
|
3004
3042
|
const displayTextArray = [];
|
|
3005
|
-
const instance = displaySet.
|
|
3043
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
3006
3044
|
let InstanceNumber;
|
|
3007
3045
|
if (instance) {
|
|
3008
3046
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -3084,7 +3122,7 @@ const RectangleROI = {
|
|
|
3084
3122
|
SOPInstanceUID,
|
|
3085
3123
|
SeriesInstanceUID,
|
|
3086
3124
|
StudyInstanceUID
|
|
3087
|
-
} =
|
|
3125
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
3088
3126
|
let displaySet;
|
|
3089
3127
|
if (SOPInstanceUID) {
|
|
3090
3128
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -3141,7 +3179,7 @@ function RectangleROI_getMappedAnnotations(annotation, displaySetService) {
|
|
|
3141
3179
|
SOPInstanceUID,
|
|
3142
3180
|
SeriesInstanceUID,
|
|
3143
3181
|
frameNumber
|
|
3144
|
-
} =
|
|
3182
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
3145
3183
|
const displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID)[0];
|
|
3146
3184
|
const {
|
|
3147
3185
|
SeriesNumber
|
|
@@ -3229,7 +3267,7 @@ function RectangleROI_getDisplayText(mappedAnnotations, displaySet, customizatio
|
|
|
3229
3267
|
frameNumber,
|
|
3230
3268
|
areaUnit
|
|
3231
3269
|
} = mappedAnnotations[0];
|
|
3232
|
-
const instance = displaySet.
|
|
3270
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
3233
3271
|
let InstanceNumber;
|
|
3234
3272
|
if (instance) {
|
|
3235
3273
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -3303,7 +3341,7 @@ const SplineROI = {
|
|
|
3303
3341
|
SeriesInstanceUID,
|
|
3304
3342
|
frameNumber,
|
|
3305
3343
|
StudyInstanceUID
|
|
3306
|
-
} =
|
|
3344
|
+
} = getSOPInstanceAttributes(referencedImageId);
|
|
3307
3345
|
let displaySet;
|
|
3308
3346
|
if (SOPInstanceUID) {
|
|
3309
3347
|
displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -3413,9 +3451,9 @@ function SplineROI_getDisplayText(annotation, displaySet, customizationService)
|
|
|
3413
3451
|
const {
|
|
3414
3452
|
SOPInstanceUID,
|
|
3415
3453
|
frameNumber
|
|
3416
|
-
} =
|
|
3454
|
+
} = getSOPInstanceAttributes(metadata.referencedImageId);
|
|
3417
3455
|
const displayTextArray = [];
|
|
3418
|
-
const instance = displaySet.
|
|
3456
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
3419
3457
|
let InstanceNumber;
|
|
3420
3458
|
if (instance) {
|
|
3421
3459
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -3506,7 +3544,7 @@ const LivewireContour = {
|
|
|
3506
3544
|
SeriesInstanceUID,
|
|
3507
3545
|
frameNumber,
|
|
3508
3546
|
StudyInstanceUID
|
|
3509
|
-
} =
|
|
3547
|
+
} = getSOPInstanceAttributes(referencedImageId);
|
|
3510
3548
|
let displaySet;
|
|
3511
3549
|
if (SOPInstanceUID) {
|
|
3512
3550
|
displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -3600,9 +3638,9 @@ function LivewireContour_getDisplayText(annotation, displaySet, customizationSer
|
|
|
3600
3638
|
const {
|
|
3601
3639
|
SOPInstanceUID,
|
|
3602
3640
|
frameNumber
|
|
3603
|
-
} =
|
|
3641
|
+
} = getSOPInstanceAttributes(metadata.referencedImageId);
|
|
3604
3642
|
const displayText = [];
|
|
3605
|
-
const instance = displaySet.
|
|
3643
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
3606
3644
|
let InstanceNumber;
|
|
3607
3645
|
if (instance) {
|
|
3608
3646
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -3666,7 +3704,7 @@ const Probe = {
|
|
|
3666
3704
|
SOPInstanceUID,
|
|
3667
3705
|
SeriesInstanceUID,
|
|
3668
3706
|
StudyInstanceUID
|
|
3669
|
-
} =
|
|
3707
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
3670
3708
|
let displaySet;
|
|
3671
3709
|
if (SOPInstanceUID) {
|
|
3672
3710
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -3721,7 +3759,7 @@ function Probe_getMappedAnnotations(annotation, displaySetService) {
|
|
|
3721
3759
|
SOPInstanceUID,
|
|
3722
3760
|
SeriesInstanceUID,
|
|
3723
3761
|
frameNumber
|
|
3724
|
-
} =
|
|
3762
|
+
} = getSOPInstanceAttributes(referencedImageId, displaySetService, annotation);
|
|
3725
3763
|
const displaySet = displaySetService.getDisplaySetsForSeries(SeriesInstanceUID)[0];
|
|
3726
3764
|
const {
|
|
3727
3765
|
SeriesNumber
|
|
@@ -3787,7 +3825,7 @@ function Probe_getDisplayText(mappedAnnotations, displaySet, customizationServic
|
|
|
3787
3825
|
SOPInstanceUID,
|
|
3788
3826
|
frameNumber
|
|
3789
3827
|
} = mappedAnnotations[0];
|
|
3790
|
-
const instance = displaySet.
|
|
3828
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
3791
3829
|
let InstanceNumber;
|
|
3792
3830
|
if (instance) {
|
|
3793
3831
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -3841,7 +3879,7 @@ const UltrasoundDirectional = {
|
|
|
3841
3879
|
SOPInstanceUID,
|
|
3842
3880
|
SeriesInstanceUID,
|
|
3843
3881
|
StudyInstanceUID
|
|
3844
|
-
} =
|
|
3882
|
+
} = getSOPInstanceAttributes(referencedImageId);
|
|
3845
3883
|
let displaySet;
|
|
3846
3884
|
if (SOPInstanceUID) {
|
|
3847
3885
|
displaySet = displaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID);
|
|
@@ -3898,7 +3936,7 @@ function UltrasoundDirectional_getMappedAnnotations(annotation, DisplaySetServic
|
|
|
3898
3936
|
SOPInstanceUID,
|
|
3899
3937
|
SeriesInstanceUID,
|
|
3900
3938
|
frameNumber
|
|
3901
|
-
} =
|
|
3939
|
+
} = getSOPInstanceAttributes(referencedImageId);
|
|
3902
3940
|
const displaySet = DisplaySetService.getDisplaySetForSOPInstanceUID(SOPInstanceUID, SeriesInstanceUID, frameNumber);
|
|
3903
3941
|
const {
|
|
3904
3942
|
SeriesNumber
|
|
@@ -3983,7 +4021,7 @@ function UltrasoundDirectional_getDisplayText(mappedAnnotations, displaySet, cus
|
|
|
3983
4021
|
SOPInstanceUID,
|
|
3984
4022
|
frameNumber
|
|
3985
4023
|
} = mappedAnnotations[0];
|
|
3986
|
-
const instance = displaySet.
|
|
4024
|
+
const instance = displaySet.instances.find(image => image.SOPInstanceUID === SOPInstanceUID);
|
|
3987
4025
|
let InstanceNumber;
|
|
3988
4026
|
if (instance) {
|
|
3989
4027
|
InstanceNumber = instance.InstanceNumber;
|
|
@@ -4438,7 +4476,7 @@ const connectMeasurementServiceToTools = (measurementService, cornerstoneViewpor
|
|
|
4438
4476
|
let frameNumber = 1;
|
|
4439
4477
|
if (measurement?.metadata?.referencedImageId) {
|
|
4440
4478
|
imageId = measurement.metadata.referencedImageId;
|
|
4441
|
-
frameNumber =
|
|
4479
|
+
frameNumber = getSOPInstanceAttributes(measurement.metadata.referencedImageId).frameNumber;
|
|
4442
4480
|
} else {
|
|
4443
4481
|
imageId = dataSource.getImageIdsForInstance({
|
|
4444
4482
|
instance
|
|
@@ -12648,18 +12686,26 @@ const STACK = 'stack';
|
|
|
12648
12686
|
const VOLUME = 'volume';
|
|
12649
12687
|
const ORTHOGRAPHIC = 'orthographic';
|
|
12650
12688
|
const VOLUME_3D = 'volume3d';
|
|
12651
|
-
|
|
12652
|
-
|
|
12689
|
+
const VIDEO = 'video';
|
|
12690
|
+
const WHOLESLIDE = 'wholeslide';
|
|
12691
|
+
function getCornerstoneViewportType(viewportType, displaySets) {
|
|
12692
|
+
const lowerViewportType = displaySets?.[0]?.viewportType?.toLowerCase() || viewportType.toLowerCase();
|
|
12653
12693
|
if (lowerViewportType === STACK) {
|
|
12654
12694
|
return esm.Enums.ViewportType.STACK;
|
|
12655
12695
|
}
|
|
12696
|
+
if (lowerViewportType === VIDEO) {
|
|
12697
|
+
return esm.Enums.ViewportType.VIDEO;
|
|
12698
|
+
}
|
|
12699
|
+
if (lowerViewportType === WHOLESLIDE) {
|
|
12700
|
+
return esm.Enums.ViewportType.WholeSlide;
|
|
12701
|
+
}
|
|
12656
12702
|
if (lowerViewportType === VOLUME || lowerViewportType === ORTHOGRAPHIC) {
|
|
12657
12703
|
return esm.Enums.ViewportType.ORTHOGRAPHIC;
|
|
12658
12704
|
}
|
|
12659
12705
|
if (lowerViewportType === VOLUME_3D) {
|
|
12660
12706
|
return esm.Enums.ViewportType.VOLUME_3D;
|
|
12661
12707
|
}
|
|
12662
|
-
throw new Error(`Invalid viewport type: ${viewportType}. Valid types are: stack, volume`);
|
|
12708
|
+
throw new Error(`Invalid viewport type: ${viewportType}. Valid types are: stack, volume, video, wholeslide`);
|
|
12663
12709
|
}
|
|
12664
12710
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/services/CornerstoneCacheService/CornerstoneCacheService.ts
|
|
12665
12711
|
var _CornerstoneCacheService;
|
|
@@ -12696,13 +12742,15 @@ class CornerstoneCacheService {
|
|
|
12696
12742
|
// update viewportOptions to reflect the new viewport type
|
|
12697
12743
|
viewportOptions.viewportType = viewportType;
|
|
12698
12744
|
}
|
|
12699
|
-
const cs3DViewportType = getCornerstoneViewportType(viewportType);
|
|
12745
|
+
const cs3DViewportType = getCornerstoneViewportType(viewportType, displaySets);
|
|
12700
12746
|
let viewportData;
|
|
12701
|
-
if (cs3DViewportType === esm.Enums.ViewportType.STACK) {
|
|
12702
|
-
viewportData = await this._getStackViewportData(dataSource, displaySets, initialImageIndex, cs3DViewportType);
|
|
12703
|
-
}
|
|
12704
12747
|
if (cs3DViewportType === esm.Enums.ViewportType.ORTHOGRAPHIC || cs3DViewportType === esm.Enums.ViewportType.VOLUME_3D) {
|
|
12705
12748
|
viewportData = await this._getVolumeViewportData(dataSource, displaySets, cs3DViewportType);
|
|
12749
|
+
} else if (cs3DViewportType === esm.Enums.ViewportType.STACK) {
|
|
12750
|
+
// Everything else looks like a stack
|
|
12751
|
+
viewportData = await this._getStackViewportData(dataSource, displaySets, initialImageIndex, cs3DViewportType);
|
|
12752
|
+
} else {
|
|
12753
|
+
viewportData = await this._getOtherViewportData(dataSource, displaySets, initialImageIndex, cs3DViewportType);
|
|
12706
12754
|
}
|
|
12707
12755
|
viewportData.viewportType = cs3DViewportType;
|
|
12708
12756
|
return viewportData;
|
|
@@ -12755,6 +12803,22 @@ class CornerstoneCacheService {
|
|
|
12755
12803
|
const newViewportData = await this._getVolumeViewportData(dataSource, displaySets, viewportData.viewportType);
|
|
12756
12804
|
return newViewportData;
|
|
12757
12805
|
}
|
|
12806
|
+
async _getOtherViewportData(dataSource, displaySets, _initialImageIndex, viewportType) {
|
|
12807
|
+
// TODO - handle overlays and secondary display sets, but for now assume
|
|
12808
|
+
// the 1st display set is the one of interest
|
|
12809
|
+
const [displaySet] = displaySets;
|
|
12810
|
+
if (!displaySet.imageIds) {
|
|
12811
|
+
displaySet.imagesIds = this._getCornerstoneStackImageIds(displaySet, dataSource);
|
|
12812
|
+
}
|
|
12813
|
+
const {
|
|
12814
|
+
imageIds: data,
|
|
12815
|
+
viewportType: dsViewportType
|
|
12816
|
+
} = displaySet;
|
|
12817
|
+
return {
|
|
12818
|
+
viewportType: dsViewportType || viewportType,
|
|
12819
|
+
data: displaySets
|
|
12820
|
+
};
|
|
12821
|
+
}
|
|
12758
12822
|
async _getStackViewportData(dataSource, displaySets, initialImageIndex, viewportType) {
|
|
12759
12823
|
const overlayDisplaySets = displaySets.filter(ds => ds.isOverlayDisplaySet);
|
|
12760
12824
|
const nonOverlayDisplaySets = displaySets.filter(ds => !ds.isOverlayDisplaySet);
|
|
@@ -12993,6 +13057,7 @@ class ViewportInfo {
|
|
|
12993
13057
|
this.displaySetOptions = void 0;
|
|
12994
13058
|
this.viewportData = void 0;
|
|
12995
13059
|
this.renderingEngineId = void 0;
|
|
13060
|
+
this.viewReference = void 0;
|
|
12996
13061
|
this.destroy = () => {
|
|
12997
13062
|
this.element = null;
|
|
12998
13063
|
this.viewportData = null;
|
|
@@ -13054,6 +13119,9 @@ class ViewportInfo {
|
|
|
13054
13119
|
getViewportId() {
|
|
13055
13120
|
return this.viewportId;
|
|
13056
13121
|
}
|
|
13122
|
+
getViewReference() {
|
|
13123
|
+
return this.viewportOptions?.viewReference;
|
|
13124
|
+
}
|
|
13057
13125
|
setPublicDisplaySetOptions(publicDisplaySetOptions) {
|
|
13058
13126
|
// map the displaySetOptions and check if they are undefined then set them to default values
|
|
13059
13127
|
const displaySetOptions = this.mapDisplaySetOptions(publicDisplaySetOptions);
|
|
@@ -13074,23 +13142,23 @@ class ViewportInfo {
|
|
|
13074
13142
|
viewportData = viewportData;
|
|
13075
13143
|
return viewportData.data.displaySetInstanceUID === displaySetInstanceUID;
|
|
13076
13144
|
}
|
|
13077
|
-
|
|
13078
|
-
|
|
13145
|
+
|
|
13146
|
+
/**
|
|
13147
|
+
*
|
|
13148
|
+
* @param viewportOptionsEntry - the base values for the options
|
|
13149
|
+
* @param viewportTypeDisplaySet - allows overriding the viewport type
|
|
13150
|
+
*/
|
|
13151
|
+
setPublicViewportOptions(viewportOptionsEntry, viewportTypeDisplaySet) {
|
|
13152
|
+
const ohifViewportType = viewportTypeDisplaySet || viewportOptionsEntry.viewportType || Viewport_STACK;
|
|
13079
13153
|
const {
|
|
13080
|
-
toolGroupId = DEFAULT_TOOLGROUP_ID,
|
|
13081
13154
|
presentationIds
|
|
13082
13155
|
} = viewportOptionsEntry;
|
|
13083
|
-
let
|
|
13084
|
-
|
|
13085
|
-
|
|
13086
|
-
|
|
13087
|
-
|
|
13088
|
-
|
|
13089
|
-
|
|
13090
|
-
// map SAGITTAL, AXIAL, CORONAL orientation to be used by cornerstone
|
|
13091
|
-
if (viewportOptionsEntry.viewportType?.toLowerCase() !== Viewport_STACK) {
|
|
13092
|
-
orientation = getCornerstoneOrientation(viewportOptionsEntry.orientation);
|
|
13093
|
-
}
|
|
13156
|
+
let {
|
|
13157
|
+
toolGroupId = DEFAULT_TOOLGROUP_ID
|
|
13158
|
+
} = viewportOptionsEntry;
|
|
13159
|
+
// Just assign the orientation for any viewport type and let the viewport deal with it
|
|
13160
|
+
const orientation = getCornerstoneOrientation(viewportOptionsEntry.orientation);
|
|
13161
|
+
const viewportType = getCornerstoneViewportType(ohifViewportType);
|
|
13094
13162
|
if (!toolGroupId) {
|
|
13095
13163
|
toolGroupId = DEFAULT_TOOLGROUP_ID;
|
|
13096
13164
|
}
|
|
@@ -13220,11 +13288,18 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
13220
13288
|
this.viewportResizeTimer = null;
|
|
13221
13289
|
this.gridResizeDelay = 50;
|
|
13222
13290
|
this.gridResizeTimeOut = null;
|
|
13291
|
+
this.hangingProtocolService = void 0;
|
|
13292
|
+
this.viewportsInfo = void 0;
|
|
13293
|
+
this.sceneVolumeInputs = void 0;
|
|
13294
|
+
this.viewportDivElements = void 0;
|
|
13295
|
+
this.ViewportPropertiesMap = void 0;
|
|
13296
|
+
this.volumeUIDs = void 0;
|
|
13297
|
+
this.displaySetsNeedRerendering = void 0;
|
|
13298
|
+
this.viewportDisplaySets = void 0;
|
|
13223
13299
|
this.renderingEngine = null;
|
|
13224
13300
|
this.viewportGridResizeObserver = null;
|
|
13225
13301
|
this.servicesManager = servicesManager;
|
|
13226
13302
|
}
|
|
13227
|
-
|
|
13228
13303
|
/**
|
|
13229
13304
|
* Adds the HTML element to the viewportService
|
|
13230
13305
|
* @param {*} viewportId
|
|
@@ -13321,13 +13396,11 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
13321
13396
|
*
|
|
13322
13397
|
* @param viewportId - The ID of the viewport.
|
|
13323
13398
|
* @param presentations - The presentations to apply to the viewport.
|
|
13399
|
+
* @param viewportInfo - Contains a view reference for immediate application
|
|
13324
13400
|
*/
|
|
13325
|
-
setPresentations(viewportId, presentations) {
|
|
13401
|
+
setPresentations(viewportId, presentations, viewportInfo) {
|
|
13326
13402
|
const viewport = this.getCornerstoneViewport(viewportId);
|
|
13327
|
-
if (!viewport) {
|
|
13328
|
-
return;
|
|
13329
|
-
}
|
|
13330
|
-
if (!presentations) {
|
|
13403
|
+
if (!viewport || !presentations) {
|
|
13331
13404
|
return;
|
|
13332
13405
|
}
|
|
13333
13406
|
const {
|
|
@@ -13350,23 +13423,12 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
13350
13423
|
viewport.setProperties(presentation);
|
|
13351
13424
|
}
|
|
13352
13425
|
}
|
|
13353
|
-
|
|
13354
|
-
|
|
13355
|
-
|
|
13356
|
-
|
|
13357
|
-
|
|
13358
|
-
|
|
13359
|
-
} = positionPresentation.presentation;
|
|
13360
|
-
viewport.setCamera({
|
|
13361
|
-
viewPlaneNormal,
|
|
13362
|
-
viewUp
|
|
13363
|
-
});
|
|
13364
|
-
if (zoom !== undefined) {
|
|
13365
|
-
viewport.setZoom(zoom);
|
|
13366
|
-
}
|
|
13367
|
-
if (pan !== undefined) {
|
|
13368
|
-
viewport.setPan(pan);
|
|
13369
|
-
}
|
|
13426
|
+
const viewRef = viewportInfo?.getViewReference() || positionPresentation?.viewReference;
|
|
13427
|
+
if (viewRef) {
|
|
13428
|
+
viewport.setViewReference(viewRef);
|
|
13429
|
+
}
|
|
13430
|
+
if (positionPresentation?.position) {
|
|
13431
|
+
viewport.setViewPresentation(positionPresentation.position);
|
|
13370
13432
|
}
|
|
13371
13433
|
}
|
|
13372
13434
|
|
|
@@ -13392,23 +13454,14 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
13392
13454
|
if (!csViewport) {
|
|
13393
13455
|
return;
|
|
13394
13456
|
}
|
|
13395
|
-
const {
|
|
13396
|
-
viewPlaneNormal,
|
|
13397
|
-
viewUp
|
|
13398
|
-
} = csViewport.getCamera();
|
|
13399
|
-
const initialImageIndex = csViewport.getCurrentImageIdIndex() || 0;
|
|
13400
|
-
const zoom = csViewport.getZoom();
|
|
13401
|
-
const pan = csViewport.getPan();
|
|
13402
13457
|
return {
|
|
13403
13458
|
id: positionPresentationId,
|
|
13404
13459
|
viewportType: viewportInfo.getViewportType(),
|
|
13405
|
-
|
|
13406
|
-
|
|
13407
|
-
|
|
13408
|
-
|
|
13409
|
-
|
|
13410
|
-
pan
|
|
13411
|
-
}
|
|
13460
|
+
viewReference: csViewport.getViewReference(),
|
|
13461
|
+
position: csViewport.getViewPresentation({
|
|
13462
|
+
pan: true,
|
|
13463
|
+
zoom: true
|
|
13464
|
+
})
|
|
13412
13465
|
};
|
|
13413
13466
|
}
|
|
13414
13467
|
|
|
@@ -13566,7 +13619,11 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
13566
13619
|
// override the viewportOptions and displaySetOptions with the public ones
|
|
13567
13620
|
// since those are the newly set ones, we set them here so that it handles defaults
|
|
13568
13621
|
const displaySetOptions = viewportInfo.setPublicDisplaySetOptions(publicDisplaySetOptions);
|
|
13569
|
-
|
|
13622
|
+
// Specify an over-ride for the viewport type, even though it is in the public
|
|
13623
|
+
// viewport options, because the one in the public viewport options is a suggestion
|
|
13624
|
+
// for initial view, whereas the one in viewportData is a requirement based on the
|
|
13625
|
+
// type of data being displayed.
|
|
13626
|
+
const viewportOptions = viewportInfo.setPublicViewportOptions(publicViewportOptions, viewportData.viewportType);
|
|
13570
13627
|
const element = viewportInfo.getElement();
|
|
13571
13628
|
const type = viewportInfo.getViewportType();
|
|
13572
13629
|
const background = viewportInfo.getBackground();
|
|
@@ -13643,26 +13700,81 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
13643
13700
|
|
|
13644
13701
|
/**
|
|
13645
13702
|
* Looks through the viewports to see if the specified measurement can be
|
|
13646
|
-
* displayed in one of the viewports.
|
|
13703
|
+
* displayed in one of the viewports. This function tries to get a "best fit"
|
|
13704
|
+
* viewport to display the image in where it matches, in order:
|
|
13705
|
+
* * Active viewport that can be navigated to the given image without orientation change
|
|
13706
|
+
* * Other viewport that can be navigated to the given image without orientation change
|
|
13707
|
+
* * Active viewport that can change orientation to display the image
|
|
13708
|
+
* * Other viewport that can change orientation to display the image
|
|
13647
13709
|
*
|
|
13648
|
-
*
|
|
13649
|
-
*
|
|
13710
|
+
* It returns `null` otherwise, indicating that a viewport needs display set/type
|
|
13711
|
+
* changes in order to display the image.
|
|
13712
|
+
*
|
|
13713
|
+
* Notes:
|
|
13714
|
+
* * If the display set is displayed in multiple viewports all needing orientation change,
|
|
13715
|
+
* then the active one or first one listed will be modified. This can create unexpected
|
|
13716
|
+
* behaviour for MPR views.
|
|
13717
|
+
* * If the image is contained in multiple display sets, then the first one
|
|
13718
|
+
* found will be navigated (active first, followed by first found)
|
|
13719
|
+
*
|
|
13720
|
+
* @param measurement - The measurement that is desired to view.
|
|
13650
13721
|
* @param activeViewportId - the index that was active at the time the jump
|
|
13651
13722
|
* was initiated.
|
|
13652
13723
|
* @return the viewportId that the measurement should be displayed in.
|
|
13653
13724
|
*/
|
|
13654
|
-
getViewportIdToJump(activeViewportId,
|
|
13655
|
-
|
|
13656
|
-
|
|
13657
|
-
|
|
13725
|
+
getViewportIdToJump(activeViewportId, metadata) {
|
|
13726
|
+
// First check if the active viewport can just be navigated to show the given item
|
|
13727
|
+
const activeViewport = this.getCornerstoneViewport(activeViewportId);
|
|
13728
|
+
if (activeViewport.isReferenceViewable(metadata, {
|
|
13729
|
+
withNavigation: true
|
|
13730
|
+
})) {
|
|
13731
|
+
return activeViewportId;
|
|
13658
13732
|
}
|
|
13659
|
-
|
|
13660
|
-
|
|
13661
|
-
|
|
13662
|
-
|
|
13733
|
+
|
|
13734
|
+
// Next, see if any viewport could be navigated to show the given item,
|
|
13735
|
+
// without considering orientation changes.
|
|
13736
|
+
for (const id of this.viewportsById.keys()) {
|
|
13737
|
+
const viewport = this.getCornerstoneViewport(id);
|
|
13738
|
+
if (viewport?.isReferenceViewable(metadata, {
|
|
13739
|
+
withNavigation: true
|
|
13740
|
+
})) {
|
|
13741
|
+
return id;
|
|
13742
|
+
}
|
|
13743
|
+
}
|
|
13744
|
+
|
|
13745
|
+
// No viewport is in the right display set/orientation to show this, so see if
|
|
13746
|
+
// the active viewport could change orientations to show this
|
|
13747
|
+
if (activeViewport.isReferenceViewable(metadata, {
|
|
13748
|
+
withNavigation: true,
|
|
13749
|
+
withOrientation: true
|
|
13750
|
+
})) {
|
|
13663
13751
|
return activeViewportId;
|
|
13664
13752
|
}
|
|
13665
|
-
|
|
13753
|
+
|
|
13754
|
+
// See if any viewport could show this with an orientation change
|
|
13755
|
+
for (const id of this.viewportsById.keys()) {
|
|
13756
|
+
const viewport = this.getCornerstoneViewport(id);
|
|
13757
|
+
if (viewport?.isReferenceViewable(metadata, {
|
|
13758
|
+
withNavigation: true,
|
|
13759
|
+
withOrientation: true
|
|
13760
|
+
})) {
|
|
13761
|
+
return id;
|
|
13762
|
+
}
|
|
13763
|
+
}
|
|
13764
|
+
|
|
13765
|
+
// No luck, need to update the viewport itself
|
|
13766
|
+
return null;
|
|
13767
|
+
}
|
|
13768
|
+
|
|
13769
|
+
/**
|
|
13770
|
+
* Sets the image data for the given viewport.
|
|
13771
|
+
*/
|
|
13772
|
+
async _setOtherViewport(viewport, viewportData, viewportInfo, _presentations = {}) {
|
|
13773
|
+
const [displaySet] = viewportData.data;
|
|
13774
|
+
return viewport.setDataIds(displaySet.imageIds, {
|
|
13775
|
+
groupId: displaySet.displaySetInstanceUID,
|
|
13776
|
+
viewReference: viewportInfo.getViewReference()
|
|
13777
|
+
});
|
|
13666
13778
|
}
|
|
13667
13779
|
async _setStackViewport(viewport, viewportData, viewportInfo, presentations = {}) {
|
|
13668
13780
|
const displaySetOptions = viewportInfo.getDisplaySetOptions();
|
|
@@ -13676,6 +13788,10 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
13676
13788
|
initialImageIndex,
|
|
13677
13789
|
imageIds
|
|
13678
13790
|
} = viewportData.data[0];
|
|
13791
|
+
|
|
13792
|
+
// Use the slice index from any provided view reference, as the view reference
|
|
13793
|
+
// is being used to navigate to the initial view position for measurement
|
|
13794
|
+
// navigation and other navigation forcing specific views.
|
|
13679
13795
|
let initialImageIndexToUse = presentations?.positionPresentation?.initialImageIndex ?? initialImageIndex;
|
|
13680
13796
|
if (initialImageIndexToUse === undefined || initialImageIndexToUse === null) {
|
|
13681
13797
|
initialImageIndexToUse = this._getInitialImageIndexForViewport(viewportInfo, imageIds) || 0;
|
|
@@ -13704,19 +13820,15 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
13704
13820
|
upper
|
|
13705
13821
|
};
|
|
13706
13822
|
}
|
|
13707
|
-
|
|
13708
|
-
|
|
13709
|
-
}
|
|
13710
|
-
if (colormap !== undefined) {
|
|
13711
|
-
properties.colormap = colormap;
|
|
13712
|
-
}
|
|
13823
|
+
properties.invert = voiInverted ?? properties.invert;
|
|
13824
|
+
properties.colormap = colormap ?? properties.colormap;
|
|
13713
13825
|
}
|
|
13714
13826
|
this._handleOverlays(viewport);
|
|
13715
13827
|
return viewport.setStack(imageIds, initialImageIndexToUse).then(() => {
|
|
13716
13828
|
viewport.setProperties({
|
|
13717
13829
|
...properties
|
|
13718
13830
|
});
|
|
13719
|
-
this.setPresentations(viewport.id, presentations);
|
|
13831
|
+
this.setPresentations(viewport.id, presentations, viewportInfo);
|
|
13720
13832
|
if (displayArea) {
|
|
13721
13833
|
viewport.setDisplayArea(displayArea);
|
|
13722
13834
|
}
|
|
@@ -13854,7 +13966,6 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
13854
13966
|
const displaySetUIDs = viewportGridService.getDisplaySetsUIDsForViewport(viewport.id);
|
|
13855
13967
|
const displaySet = displaySetService.getDisplaySetByUID(displaySetUIDs[0]);
|
|
13856
13968
|
const displaySetModality = displaySet?.Modality;
|
|
13857
|
-
|
|
13858
13969
|
// Todo: use presentations states
|
|
13859
13970
|
const volumesProperties = volumeInputArray.map((volumeInput, index) => {
|
|
13860
13971
|
const {
|
|
@@ -13899,7 +14010,7 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
13899
14010
|
}) => {
|
|
13900
14011
|
viewport.setProperties(properties, volumeId);
|
|
13901
14012
|
});
|
|
13902
|
-
this.setPresentations(viewport.id, presentations);
|
|
14013
|
+
this.setPresentations(viewport.id, presentations, viewportInfo);
|
|
13903
14014
|
this._handleOverlays(viewport);
|
|
13904
14015
|
const toolGroup = toolGroupService.getToolGroupForViewport(viewport.id);
|
|
13905
14016
|
dist_esm.utilities.segmentation.triggerSegmentationRender(toolGroup.id);
|
|
@@ -14035,7 +14146,7 @@ class CornerstoneViewportService extends src/* PubSubService */.hC {
|
|
|
14035
14146
|
if ([esm.VolumeViewport, esm.VolumeViewport3D].some(type => viewport instanceof type)) {
|
|
14036
14147
|
return this._setVolumeViewport(viewport, viewportData, viewportInfo, presentations);
|
|
14037
14148
|
}
|
|
14038
|
-
|
|
14149
|
+
return this._setOtherViewport(viewport, viewportData, viewportInfo, presentations);
|
|
14039
14150
|
}
|
|
14040
14151
|
|
|
14041
14152
|
/**
|
|
@@ -15064,6 +15175,171 @@ const createFrameViewSynchronizer = synchronizerName => {
|
|
|
15064
15175
|
return synchronizer;
|
|
15065
15176
|
};
|
|
15066
15177
|
|
|
15178
|
+
// EXTERNAL MODULE: ../../../node_modules/dcmjs/build/dcmjs.es.js
|
|
15179
|
+
var dcmjs_es = __webpack_require__(67540);
|
|
15180
|
+
// EXTERNAL MODULE: ../../../extensions/default/src/index.ts + 95 modules
|
|
15181
|
+
var default_src = __webpack_require__(10655);
|
|
15182
|
+
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/getSopClassHandlerModule.js
|
|
15183
|
+
|
|
15184
|
+
|
|
15185
|
+
|
|
15186
|
+
|
|
15187
|
+
const {
|
|
15188
|
+
MetadataModules
|
|
15189
|
+
} = esm.Enums;
|
|
15190
|
+
const {
|
|
15191
|
+
utils: getSopClassHandlerModule_utils
|
|
15192
|
+
} = src["default"];
|
|
15193
|
+
const {
|
|
15194
|
+
denaturalizeDataset
|
|
15195
|
+
} = dcmjs_es["default"].data.DicomMetaDictionary;
|
|
15196
|
+
const {
|
|
15197
|
+
transferDenaturalizedDataset,
|
|
15198
|
+
fixMultiValueKeys
|
|
15199
|
+
} = default_src.dicomWebUtils;
|
|
15200
|
+
const SOP_CLASS_UIDS = {
|
|
15201
|
+
VL_WHOLE_SLIDE_MICROSCOPY_IMAGE_STORAGE: '1.2.840.10008.5.1.4.1.1.77.1.6'
|
|
15202
|
+
};
|
|
15203
|
+
const SOPClassHandlerId = '@ohif/extension-cornerstone.sopClassHandlerModule.DicomMicroscopySopClassHandler';
|
|
15204
|
+
function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager) {
|
|
15205
|
+
// If the series has no instances, stop here
|
|
15206
|
+
if (!instances || !instances.length) {
|
|
15207
|
+
throw new Error('No instances were provided');
|
|
15208
|
+
}
|
|
15209
|
+
const instance = instances[0];
|
|
15210
|
+
let singleFrameInstance = instance;
|
|
15211
|
+
let currentFrames = +singleFrameInstance.NumberOfFrames || 1;
|
|
15212
|
+
for (const instanceI of instances) {
|
|
15213
|
+
const framesI = +instanceI.NumberOfFrames || 1;
|
|
15214
|
+
if (framesI < currentFrames) {
|
|
15215
|
+
singleFrameInstance = instanceI;
|
|
15216
|
+
currentFrames = framesI;
|
|
15217
|
+
}
|
|
15218
|
+
}
|
|
15219
|
+
let imageIdForThumbnail = null;
|
|
15220
|
+
const dataSource = extensionManager.getActiveDataSource()[0];
|
|
15221
|
+
if (singleFrameInstance) {
|
|
15222
|
+
if (currentFrames == 1) {
|
|
15223
|
+
// Not all DICOM server implementations support thumbnail service,
|
|
15224
|
+
// So if we have a single-frame image, we will prefer it.
|
|
15225
|
+
imageIdForThumbnail = singleFrameInstance.imageId;
|
|
15226
|
+
}
|
|
15227
|
+
if (!imageIdForThumbnail) {
|
|
15228
|
+
// use the thumbnail service provided by DICOM server
|
|
15229
|
+
imageIdForThumbnail = dataSource.getImageIdsForInstance({
|
|
15230
|
+
instance: singleFrameInstance,
|
|
15231
|
+
thumbnail: true
|
|
15232
|
+
});
|
|
15233
|
+
}
|
|
15234
|
+
}
|
|
15235
|
+
const {
|
|
15236
|
+
FrameOfReferenceUID,
|
|
15237
|
+
SeriesDescription,
|
|
15238
|
+
ContentDate,
|
|
15239
|
+
ContentTime,
|
|
15240
|
+
SeriesNumber,
|
|
15241
|
+
StudyInstanceUID,
|
|
15242
|
+
SeriesInstanceUID,
|
|
15243
|
+
SOPInstanceUID,
|
|
15244
|
+
SOPClassUID
|
|
15245
|
+
} = instance;
|
|
15246
|
+
instances = instances.map(inst => {
|
|
15247
|
+
// NOTE: According to DICOM standard a series should have a FrameOfReferenceUID
|
|
15248
|
+
// When the Microscopy file was built by certain tool from multiple image files,
|
|
15249
|
+
// each instance's FrameOfReferenceUID is sometimes different.
|
|
15250
|
+
// Even though this means the file was not well formatted DICOM VL Whole Slide Microscopy Image,
|
|
15251
|
+
// the case is so often, so let's override this value manually here.
|
|
15252
|
+
//
|
|
15253
|
+
// https://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.7.4.html#sect_C.7.4.1.1.1
|
|
15254
|
+
|
|
15255
|
+
inst.FrameOfReferenceUID = instance.FrameOfReferenceUID;
|
|
15256
|
+
return inst;
|
|
15257
|
+
});
|
|
15258
|
+
const othersFrameOfReferenceUID = instances.filter(v => v).map(inst => inst.FrameOfReferenceUID).filter((value, index, array) => array.indexOf(value) === index);
|
|
15259
|
+
if (othersFrameOfReferenceUID.length > 1) {
|
|
15260
|
+
console.warn('Expected FrameOfReferenceUID of difference instances within a series to be the same, found multiple different values', othersFrameOfReferenceUID);
|
|
15261
|
+
}
|
|
15262
|
+
const displaySet = {
|
|
15263
|
+
plugin: 'microscopy',
|
|
15264
|
+
Modality: 'SM',
|
|
15265
|
+
viewportType: esm.Enums.ViewportType.WholeSlide,
|
|
15266
|
+
altImageText: 'Microscopy',
|
|
15267
|
+
displaySetInstanceUID: getSopClassHandlerModule_utils.guid(),
|
|
15268
|
+
SOPInstanceUID,
|
|
15269
|
+
SeriesInstanceUID,
|
|
15270
|
+
StudyInstanceUID,
|
|
15271
|
+
FrameOfReferenceUID,
|
|
15272
|
+
SOPClassHandlerId,
|
|
15273
|
+
SOPClassUID,
|
|
15274
|
+
SeriesDescription: SeriesDescription || 'Microscopy Data',
|
|
15275
|
+
// Map ContentDate/Time to SeriesTime for series list sorting.
|
|
15276
|
+
SeriesDate: ContentDate,
|
|
15277
|
+
SeriesTime: ContentTime,
|
|
15278
|
+
SeriesNumber,
|
|
15279
|
+
firstInstance: singleFrameInstance,
|
|
15280
|
+
// top level instance in the image Pyramid
|
|
15281
|
+
instance,
|
|
15282
|
+
numImageFrames: 0,
|
|
15283
|
+
numInstances: 1,
|
|
15284
|
+
imageIdForThumbnail,
|
|
15285
|
+
// thumbnail image
|
|
15286
|
+
others: instances,
|
|
15287
|
+
// all other level instances in the image Pyramid
|
|
15288
|
+
instances,
|
|
15289
|
+
othersFrameOfReferenceUID,
|
|
15290
|
+
imageIds: instances.map(instance => instance.imageId)
|
|
15291
|
+
};
|
|
15292
|
+
// The microscopy viewer directly accesses the metadata already loaded, and
|
|
15293
|
+
// uses the DICOMweb client library directly for loading, so it has to be
|
|
15294
|
+
// provided here.
|
|
15295
|
+
const dicomWebClient = dataSource.retrieve.getWadoDicomWebClient?.();
|
|
15296
|
+
const instanceMap = new Map();
|
|
15297
|
+
instances.forEach(instance => instanceMap.set(instance.imageId, instance));
|
|
15298
|
+
if (dicomWebClient) {
|
|
15299
|
+
const webClient = Object.create(dicomWebClient);
|
|
15300
|
+
// This replaces just the dicom web metadata call with one which retrieves
|
|
15301
|
+
// internally.
|
|
15302
|
+
webClient.getDICOMwebMetadata = getDICOMwebMetadata.bind(webClient, instanceMap);
|
|
15303
|
+
esm.utilities.genericMetadataProvider.addRaw(displaySet.imageIds[0], {
|
|
15304
|
+
type: MetadataModules.WADO_WEB_CLIENT,
|
|
15305
|
+
metadata: webClient
|
|
15306
|
+
});
|
|
15307
|
+
} else {
|
|
15308
|
+
// Might have some other way of getting the data in the future or internally?
|
|
15309
|
+
// throw new Error('Unable to provide a DICOMWeb client library, microscopy will fail to view');
|
|
15310
|
+
}
|
|
15311
|
+
return [displaySet];
|
|
15312
|
+
}
|
|
15313
|
+
|
|
15314
|
+
/**
|
|
15315
|
+
* This method provides access to the internal DICOMweb metadata, used to avoid
|
|
15316
|
+
* refetching the DICOMweb data. It gets assigned as a member function to the
|
|
15317
|
+
* dicom web client.
|
|
15318
|
+
*/
|
|
15319
|
+
function getDICOMwebMetadata(instanceMap, imageId) {
|
|
15320
|
+
const instance = instanceMap.get(imageId);
|
|
15321
|
+
if (!instance) {
|
|
15322
|
+
console.warn('Metadata not already found for', imageId, 'in', instanceMap);
|
|
15323
|
+
return this.super.getDICOMwebMetadata(imageId);
|
|
15324
|
+
}
|
|
15325
|
+
return transferDenaturalizedDataset(denaturalizeDataset(fixMultiValueKeys(instanceMap.get(imageId))));
|
|
15326
|
+
}
|
|
15327
|
+
function getDicomMicroscopySopClassHandler({
|
|
15328
|
+
servicesManager,
|
|
15329
|
+
extensionManager
|
|
15330
|
+
}) {
|
|
15331
|
+
const getDisplaySetsFromSeries = instances => {
|
|
15332
|
+
return _getDisplaySetsFromSeries(instances, servicesManager, extensionManager);
|
|
15333
|
+
};
|
|
15334
|
+
return {
|
|
15335
|
+
name: 'DicomMicroscopySopClassHandler',
|
|
15336
|
+
sopClassUids: [SOP_CLASS_UIDS.VL_WHOLE_SLIDE_MICROSCOPY_IMAGE_STORAGE],
|
|
15337
|
+
getDisplaySetsFromSeries
|
|
15338
|
+
};
|
|
15339
|
+
}
|
|
15340
|
+
function getSopClassHandlerModule(params) {
|
|
15341
|
+
return [getDicomMicroscopySopClassHandler(params)];
|
|
15342
|
+
}
|
|
15067
15343
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone/src/index.tsx
|
|
15068
15344
|
function src_extends() { return src_extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, src_extends.apply(null, arguments); }
|
|
15069
15345
|
|
|
@@ -15096,6 +15372,7 @@ function src_extends() { return src_extends = Object.assign ? Object.assign.bind
|
|
|
15096
15372
|
|
|
15097
15373
|
|
|
15098
15374
|
|
|
15375
|
+
|
|
15099
15376
|
|
|
15100
15377
|
|
|
15101
15378
|
const {
|
|
@@ -15266,7 +15543,8 @@ const cornerstoneExtension = {
|
|
|
15266
15543
|
getDynamicVolumeInfo
|
|
15267
15544
|
}
|
|
15268
15545
|
}];
|
|
15269
|
-
}
|
|
15546
|
+
},
|
|
15547
|
+
getSopClassHandlerModule: getSopClassHandlerModule
|
|
15270
15548
|
};
|
|
15271
15549
|
|
|
15272
15550
|
/* harmony default export */ const cornerstone_src = (cornerstoneExtension);
|
|
@@ -15379,55 +15657,6 @@ const reset = () => {
|
|
|
15379
15657
|
};
|
|
15380
15658
|
|
|
15381
15659
|
|
|
15382
|
-
/***/ }),
|
|
15383
|
-
|
|
15384
|
-
/***/ 90927:
|
|
15385
|
-
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
15386
|
-
|
|
15387
|
-
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
15388
|
-
/* harmony export */ Z: () => (/* binding */ getSOPInstanceAttributes)
|
|
15389
|
-
/* harmony export */ });
|
|
15390
|
-
/* harmony import */ var _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12651);
|
|
15391
|
-
|
|
15392
|
-
|
|
15393
|
-
/**
|
|
15394
|
-
* It checks if the imageId is provided then it uses it to query
|
|
15395
|
-
* the metadata and get the SOPInstanceUID, SeriesInstanceUID and StudyInstanceUID.
|
|
15396
|
-
* If the imageId is not provided then undefined is returned.
|
|
15397
|
-
* @param {string} imageId The image id of the referenced image
|
|
15398
|
-
* @returns
|
|
15399
|
-
*/
|
|
15400
|
-
function getSOPInstanceAttributes(imageId, displaySetService, annotation) {
|
|
15401
|
-
if (imageId) {
|
|
15402
|
-
return _getUIDFromImageID(imageId);
|
|
15403
|
-
}
|
|
15404
|
-
const {
|
|
15405
|
-
metadata
|
|
15406
|
-
} = annotation;
|
|
15407
|
-
const {
|
|
15408
|
-
volumeId
|
|
15409
|
-
} = metadata;
|
|
15410
|
-
const displaySet = displaySetService.getDisplaySetsBy(displaySet => volumeId.includes(displaySet.uid))[0];
|
|
15411
|
-
const {
|
|
15412
|
-
StudyInstanceUID,
|
|
15413
|
-
SeriesInstanceUID
|
|
15414
|
-
} = displaySet;
|
|
15415
|
-
return {
|
|
15416
|
-
SOPInstanceUID: undefined,
|
|
15417
|
-
SeriesInstanceUID,
|
|
15418
|
-
StudyInstanceUID
|
|
15419
|
-
};
|
|
15420
|
-
}
|
|
15421
|
-
function _getUIDFromImageID(imageId) {
|
|
15422
|
-
const instance = _cornerstonejs_core__WEBPACK_IMPORTED_MODULE_0__.metaData.get('instance', imageId);
|
|
15423
|
-
return {
|
|
15424
|
-
SOPInstanceUID: instance.SOPInstanceUID,
|
|
15425
|
-
SeriesInstanceUID: instance.SeriesInstanceUID,
|
|
15426
|
-
StudyInstanceUID: instance.StudyInstanceUID,
|
|
15427
|
-
frameNumber: instance.frameNumber || 1
|
|
15428
|
-
};
|
|
15429
|
-
}
|
|
15430
|
-
|
|
15431
15660
|
/***/ })
|
|
15432
15661
|
|
|
15433
15662
|
}]);
|