@ohif/app 3.9.0-beta.77 → 3.9.0-beta.79

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.
Files changed (44) hide show
  1. package/dist/{1169.bundle.a3d3d310f1d8d7e335bf.js → 1169.bundle.d32f38ab5aa329346850.js} +46 -106
  2. package/dist/{1202.bundle.1468f0e71fea0c593081.js → 1202.bundle.55f140afb05e1ad5512c.js} +503 -153
  3. package/dist/{2568.css → 1540.css} +1 -0
  4. package/dist/{1994.bundle.39ea4d1a48d42cdca49b.js → 1994.bundle.04ba989c747992f45c6e.js} +3 -3
  5. package/dist/{9824.bundle.8e8afc799f0534014fa9.js → 2119.bundle.142793bed5b53a2f4a30.js} +4 -4
  6. package/dist/{9824.css → 2119.css} +1 -0
  7. package/dist/{2650.bundle.1f7d90198b9e361dfb9c.js → 2650.bundle.feb3b241748314884ae4.js} +57 -35
  8. package/dist/{3117.bundle.c83d0f403d17104a7c4c.js → 3117.bundle.463d5fa4671a93939d36.js} +8 -7
  9. package/dist/{4210.bundle.f1af90765358215ca053.js → 4210.bundle.e81688aaa6aec1c4f973.js} +2 -2
  10. package/dist/{4842.bundle.11abbf3f8699b84a7537.js → 4842.bundle.9264e466874f0206d564.js} +12 -8
  11. package/dist/{5888.bundle.f48daf22ce156ac4956a.js → 5888.bundle.8b4c8f227376800c6e1d.js} +14 -7
  12. package/dist/{2417.bundle.4a0334c8c4047005979e.js → 5898.bundle.be696e0b355efc1c7f05.js} +1947 -1
  13. package/dist/{2281.bundle.b20397636c4b681f4463.js → 655.bundle.805114d0d89a4bd4d92d.js} +170 -66
  14. package/dist/{6591.bundle.092858f2e84426bc0010.js → 6591.bundle.5b4b8bfff223013aa46f.js} +15 -1
  15. package/dist/{7502.bundle.7f3a72a5571a00fda890.js → 7502.bundle.e37c3a247f287d282838.js} +4 -6
  16. package/dist/{3424.bundle.1b6101d721148c04242b.js → 79.bundle.b03daeeef3e6faf9dca3.js} +5 -47
  17. package/dist/{8993.bundle.256bb3c84d2564a5f3cf.js → 8993.bundle.23cd5f8560800a97d798.js} +39 -32
  18. package/dist/{2065.bundle.fc147f9fde903e0768f4.js → 8999.bundle.d9dbbf80990887877381.js} +13 -133
  19. package/dist/{9579.bundle.7212d7a737a71bb61502.js → 9579.bundle.f9c9be0c5ab6cddbde3d.js} +8 -7
  20. package/dist/{5516.bundle.f61b8aebe75f7bafd5b1.js → 962.bundle.c6dcf9d6c1d56ebff24d.js} +408 -179
  21. package/dist/app-config.js +1 -0
  22. package/dist/{app.bundle.e3ce3b1cf2fae5cedcd3.js → app.bundle.7851cb292073f6e7a0c5.js} +646 -349
  23. package/dist/index.html +1 -1
  24. package/dist/{polySeg.bundle.40b9a8c9006bb15691ee.js → polySeg.bundle.0a70e65fe89169ec7508.js} +1 -1
  25. package/dist/{suv-peak-worker.bundle.a70e70b9ef87c18b896c.js → suv-peak-worker.bundle.54d68bc1808ad3d77994.js} +1 -1
  26. package/dist/sw.js +1 -1
  27. package/package.json +18 -18
  28. package/dist/7604.bundle.42d3f08efb3a9eae4581.js +0 -1950
  29. package/dist/{1498.bundle.d8f5281952d09c57ef87.js → 1498.bundle.a2d05ac1f27d0c2d2c9f.js} +0 -0
  30. package/dist/{153.bundle.94f93195fab889e0add8.js → 153.bundle.52f9f8d3ecfc88f18ebb.js} +0 -0
  31. package/dist/{2791.bundle.597dca661f5f08060ad3.js → 2791.bundle.cdffc588e0401363be5c.js} +0 -0
  32. package/dist/{3497.bundle.a04a2444975bf50fddf8.js → 3497.bundle.512610422a2862584c55.js} +0 -0
  33. package/dist/{3962.bundle.db07d757866d3a3b20b3.js → 3962.bundle.0d49146b27c7b7dcb48a.js} +0 -0
  34. package/dist/{4353.bundle.c835b4ea70768a207c59.js → 4353.bundle.7aacb9d40bc20bb4aa36.js} +0 -0
  35. package/dist/{4978.bundle.c5d6cac06bcc9656c900.js → 4978.bundle.f580a489066e909c8dc9.js} +0 -0
  36. package/dist/{5793.bundle.eed3fe9019c31999efff.js → 5793.bundle.d1b4e887564bbb98752d.js} +0 -0
  37. package/dist/{6904.bundle.27abf08c0f2e4fe5e06d.js → 6904.bundle.da0d83fcd48a48cfaac1.js} +0 -0
  38. package/dist/{7246.bundle.d3f1bb1a40801b133810.js → 7246.bundle.32f7f871fb1016362af8.js} +0 -0
  39. package/dist/{7360.bundle.b28c83aa3910eaa427ee.js → 7360.bundle.4233f9f8747d6facdc54.js} +0 -0
  40. package/dist/{7376.bundle.1173819ab2acd8610f1e.js → 7376.bundle.f087dc1e0e16a41dedbe.js} +0 -0
  41. package/dist/{3424.css → 79.css} +1 -1
  42. /package/dist/{7913.bundle.5702ee8798da273c0c5d.js → 7913.bundle.207d7463f90bb92e4ab4.js} +0 -0
  43. /package/dist/{818.bundle.b64fae7e982e16a82ca2.js → 818.bundle.b6027359846cc90e32ff.js} +0 -0
  44. /package/dist/{8944.bundle.3bf7ef09ea87195b9e23.js → 8944.bundle.2c07f90c73692457ffa3.js} +0 -0
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
8
8
  /* harmony export */ Y: () => (/* binding */ index),
9
+ /* harmony export */ _: () => (/* binding */ adaptersPMAP),
9
10
  /* harmony export */ adaptersRT: () => (/* binding */ adaptersRT),
10
11
  /* harmony export */ adaptersSEG: () => (/* binding */ adaptersSEG),
11
12
  /* harmony export */ adaptersSR: () => (/* binding */ adaptersSR),
@@ -579,10 +580,10 @@ var index$1 = /*#__PURE__*/Object.freeze({
579
580
  var TID1500$1 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.TID1500,
580
581
  addAccessors$1 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.addAccessors;
581
582
  var StructuredReport$1 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .derivations */ .U7.StructuredReport;
582
- var Normalizer$4 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .normalizers */ .oq.Normalizer;
583
+ var Normalizer$6 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .normalizers */ .oq.Normalizer;
583
584
  var TID1500MeasurementReport$1 = TID1500$1.TID1500MeasurementReport,
584
585
  TID1501MeasurementGroup$1 = TID1500$1.TID1501MeasurementGroup;
585
- var DicomMetaDictionary$4 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.DicomMetaDictionary;
586
+ var DicomMetaDictionary$6 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.DicomMetaDictionary;
586
587
  var FINDING$2 = {
587
588
  CodingSchemeDesignator: "DCM",
588
589
  CodeValue: "121071"
@@ -711,7 +712,7 @@ var MeasurementReport$1 = /*#__PURE__*/function () {
711
712
  ReferencedSOPClassUID: sopCommonModule.sopClassUID,
712
713
  ReferencedSOPInstanceUID: sopCommonModule.sopInstanceUID
713
714
  };
714
- if (Normalizer$4.isMultiframeSOPClassUID(sopCommonModule.sopClassUID)) {
715
+ if (Normalizer$6.isMultiframeSOPClassUID(sopCommonModule.sopClassUID)) {
715
716
  ReferencedSOPSequence.ReferencedFrameNumber = frameNumber;
716
717
  }
717
718
 
@@ -752,7 +753,7 @@ var MeasurementReport$1 = /*#__PURE__*/function () {
752
753
  vr: "UI"
753
754
  },
754
755
  ImplementationClassUID: {
755
- Value: [DicomMetaDictionary$4.uid()],
756
+ Value: [DicomMetaDictionary$6.uid()],
756
757
  // TODO: could be git hash or other valid id
757
758
  vr: "UI"
758
759
  },
@@ -1808,6 +1809,44 @@ RectangleRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier
1808
1809
  };
1809
1810
  MeasurementReport$1.registerTool(RectangleRoi);
1810
1811
 
1812
+ var DicomMessage$3 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.DicomMessage, DicomMetaDictionary$5 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.DicomMetaDictionary;
1813
+ var Normalizer$5 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .normalizers */ .oq.Normalizer;
1814
+ /**
1815
+ * Convert an array of cornerstone images into datasets
1816
+ *
1817
+ * @param images - An array of the cornerstone image objects
1818
+ * @param isMultiframe - Whether the images are multiframe
1819
+ * @param options - Options object that may contain:
1820
+ * - SpecificCharacterSet: character set to be set to each dataset
1821
+ */
1822
+ function getDatasetsFromImages(images, isMultiframe, options) {
1823
+ var datasets = [];
1824
+ if (isMultiframe) {
1825
+ var image = images[0];
1826
+ var arrayBuffer = image.data.byteArray.buffer;
1827
+ var dicomData = DicomMessage$3.readFile(arrayBuffer);
1828
+ var dataset = DicomMetaDictionary$5.naturalizeDataset(dicomData.dict);
1829
+ dataset._meta = DicomMetaDictionary$5.namifyDataset(dicomData.meta);
1830
+ datasets.push(dataset);
1831
+ }
1832
+ else {
1833
+ for (var i = 0; i < images.length; i++) {
1834
+ var image = images[i];
1835
+ var arrayBuffer = image.data.byteArray.buffer;
1836
+ var dicomData = DicomMessage$3.readFile(arrayBuffer);
1837
+ var dataset = DicomMetaDictionary$5.naturalizeDataset(dicomData.dict);
1838
+ dataset._meta = DicomMetaDictionary$5.namifyDataset(dicomData.meta);
1839
+ datasets.push(dataset);
1840
+ }
1841
+ }
1842
+ if (options === null || options === void 0 ? void 0 : options.SpecificCharacterSet) {
1843
+ datasets.forEach(function (dataset) {
1844
+ return (dataset.SpecificCharacterSet = options.SpecificCharacterSet);
1845
+ });
1846
+ }
1847
+ return Normalizer$5.normalizeToDataset(datasets);
1848
+ }
1849
+
1811
1850
  var _utilities$orientatio$1 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.orientation,
1812
1851
  rotateDirectionCosinesInPlane$1 = _utilities$orientatio$1.rotateDirectionCosinesInPlane,
1813
1852
  flipIOP$1 = _utilities$orientatio$1.flipImageOrientationPatient,
@@ -1815,13 +1854,13 @@ var _utilities$orientatio$1 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */
1815
1854
  rotateMatrix902D$1 = _utilities$orientatio$1.rotateMatrix902D;
1816
1855
  var datasetToBlob = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.datasetToBlob,
1817
1856
  BitArray$2 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.BitArray,
1818
- DicomMessage$1 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.DicomMessage,
1819
- DicomMetaDictionary$3 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.DicomMetaDictionary;
1820
- var Normalizer$3 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .normalizers */ .oq.Normalizer;
1857
+ DicomMessage$2 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.DicomMessage,
1858
+ DicomMetaDictionary$4 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.DicomMetaDictionary;
1859
+ var Normalizer$4 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .normalizers */ .oq.Normalizer;
1821
1860
  var SegmentationDerivation$2 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .derivations */ .U7.Segmentation;
1822
1861
  var Segmentation$5 = {
1823
1862
  generateSegmentation: generateSegmentation$3,
1824
- generateToolState: generateToolState$3
1863
+ generateToolState: generateToolState$5
1825
1864
  };
1826
1865
 
1827
1866
  /**
@@ -1941,25 +1980,7 @@ function _getSegCount(seg, segments) {
1941
1980
  * @returns {Object} The Seg derived dataSet.
1942
1981
  */
1943
1982
  function _createSegFromImages$1(images, isMultiframe, options) {
1944
- var datasets = [];
1945
- if (isMultiframe) {
1946
- var image = images[0];
1947
- var arrayBuffer = image.data.byteArray.buffer;
1948
- var dicomData = DicomMessage$1.readFile(arrayBuffer);
1949
- var dataset = DicomMetaDictionary$3.naturalizeDataset(dicomData.dict);
1950
- dataset._meta = DicomMetaDictionary$3.namifyDataset(dicomData.meta);
1951
- datasets.push(dataset);
1952
- } else {
1953
- for (var i = 0; i < images.length; i++) {
1954
- var _image = images[i];
1955
- var _arrayBuffer = _image.data.byteArray.buffer;
1956
- var _dicomData = DicomMessage$1.readFile(_arrayBuffer);
1957
- var _dataset = DicomMetaDictionary$3.naturalizeDataset(_dicomData.dict);
1958
- _dataset._meta = DicomMetaDictionary$3.namifyDataset(_dicomData.meta);
1959
- datasets.push(_dataset);
1960
- }
1961
- }
1962
- var multiframe = Normalizer$3.normalizeToDataset(datasets);
1983
+ var multiframe = getDatasetsFromImages(images, isMultiframe);
1963
1984
  return new SegmentationDerivation$2([multiframe], options);
1964
1985
  }
1965
1986
 
@@ -1973,11 +1994,11 @@ function _createSegFromImages$1(images, isMultiframe, options) {
1973
1994
  * @returns {Object} The toolState and an object from which the
1974
1995
  * segment metadata can be derived.
1975
1996
  */
1976
- function generateToolState$3(imageIds, arrayBuffer, metadataProvider) {
1977
- var dicomData = DicomMessage$1.readFile(arrayBuffer);
1978
- var dataset = DicomMetaDictionary$3.naturalizeDataset(dicomData.dict);
1979
- dataset._meta = DicomMetaDictionary$3.namifyDataset(dicomData.meta);
1980
- var multiframe = Normalizer$3.normalizeToDataset([dataset]);
1997
+ function generateToolState$5(imageIds, arrayBuffer, metadataProvider) {
1998
+ var dicomData = DicomMessage$2.readFile(arrayBuffer);
1999
+ var dataset = DicomMetaDictionary$4.naturalizeDataset(dicomData.dict);
2000
+ dataset._meta = DicomMetaDictionary$4.namifyDataset(dicomData.meta);
2001
+ var multiframe = Normalizer$4.normalizeToDataset([dataset]);
1981
2002
  var imagePlaneModule = metadataProvider.get("imagePlaneModule", imageIds[0]);
1982
2003
  if (!imagePlaneModule) {
1983
2004
  console.warn("Insufficient metadata, imagePlaneModule missing.");
@@ -2092,7 +2113,7 @@ function addImageIdSpecificBrushToolState(toolState, imageId, segmentIndex, pixe
2092
2113
  function getImageIdOfSourceImage(SourceImageSequence, imageIds, metadataProvider) {
2093
2114
  var ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID,
2094
2115
  ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;
2095
- return ReferencedFrameNumber ? getImageIdOfReferencedFrame$1(ReferencedSOPInstanceUID, ReferencedFrameNumber, imageIds, metadataProvider) : getImageIdOfReferencedSingleFramedSOPInstance(ReferencedSOPInstanceUID, imageIds, metadataProvider);
2116
+ return ReferencedFrameNumber ? getImageIdOfReferencedFrame$2(ReferencedSOPInstanceUID, ReferencedFrameNumber, imageIds, metadataProvider) : getImageIdOfReferencedSingleFramedSOPInstance(ReferencedSOPInstanceUID, imageIds, metadataProvider);
2096
2117
  }
2097
2118
 
2098
2119
  /**
@@ -2126,7 +2147,7 @@ function getImageIdOfReferencedSingleFramedSOPInstance(sopInstanceUid, imageIds,
2126
2147
  * from the cornerstone imageIds.
2127
2148
  * @return {String} The imageId that corresponds to the sopInstanceUid.
2128
2149
  */
2129
- function getImageIdOfReferencedFrame$1(sopInstanceUid, frameNumber, imageIds, metadataProvider) {
2150
+ function getImageIdOfReferencedFrame$2(sopInstanceUid, frameNumber, imageIds, metadataProvider) {
2130
2151
  var imageId = imageIds.find(function (imageId) {
2131
2152
  var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
2132
2153
  if (!sopCommonModule) {
@@ -2231,6 +2252,70 @@ function getSegmentMetadata$1(multiframe) {
2231
2252
  };
2232
2253
  }
2233
2254
 
2255
+ /**
2256
+ * Returns true if iop1 and iop2 are perpendicular within a tolerance.
2257
+ *
2258
+ * @param iop1 - First ImageOrientationPatient
2259
+ * @param iop2 - Second ImageOrientationPatient
2260
+ * @param tolerance - Tolerance
2261
+ * @returns True if iop1 and iop2 are equal.
2262
+ */
2263
+ function checkIfPerpendicular(iop1, iop2, tolerance) {
2264
+ var absDotColumnCosines = Math.abs(iop1[0] * iop2[0] + iop1[1] * iop2[1] + iop1[2] * iop2[2]);
2265
+ var absDotRowCosines = Math.abs(iop1[3] * iop2[3] + iop1[4] * iop2[4] + iop1[5] * iop2[5]);
2266
+ return ((absDotColumnCosines < tolerance ||
2267
+ Math.abs(absDotColumnCosines - 1) < tolerance) &&
2268
+ (absDotRowCosines < tolerance ||
2269
+ Math.abs(absDotRowCosines - 1) < tolerance));
2270
+ }
2271
+
2272
+ var nearlyEqual = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.orientation.nearlyEqual;
2273
+ /**
2274
+ * Returns true if array1 and array2 are equal within a tolerance.
2275
+ *
2276
+ * @param array1 - First array
2277
+ * @param array2 - Second array
2278
+ * @param tolerance - Tolerance
2279
+ * @returns True if array1 and array2 are equal.
2280
+ */
2281
+ function compareArrays(array1, array2, tolerance) {
2282
+ if (array1.length !== array2.length) {
2283
+ return false;
2284
+ }
2285
+ for (var i = 0; i < array1.length; ++i) {
2286
+ if (!nearlyEqual(array1[i], array2[i], tolerance)) {
2287
+ return false;
2288
+ }
2289
+ }
2290
+ return true;
2291
+ }
2292
+
2293
+ function checkOrientation(multiframe, validOrientations, sourceDataDimensions, tolerance) {
2294
+ var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence, PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence;
2295
+ var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence
2296
+ ? SharedFunctionalGroupsSequence.PlaneOrientationSequence
2297
+ .ImageOrientationPatient
2298
+ : undefined;
2299
+ // Check if in plane.
2300
+ var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[0];
2301
+ var iop = sharedImageOrientationPatient ||
2302
+ PerFrameFunctionalGroups.PlaneOrientationSequence
2303
+ .ImageOrientationPatient;
2304
+ var inPlane = validOrientations.some(function (operation) {
2305
+ return compareArrays(iop, operation, tolerance);
2306
+ });
2307
+ if (inPlane) {
2308
+ return "Planar";
2309
+ }
2310
+ if (checkIfPerpendicular(iop, validOrientations[0], tolerance) &&
2311
+ sourceDataDimensions.includes(multiframe.Rows) &&
2312
+ sourceDataDimensions.includes(multiframe.Columns)) {
2313
+ // Perpendicular and fits on same grid.
2314
+ return "Perpendicular";
2315
+ }
2316
+ return "Oblique";
2317
+ }
2318
+
2234
2319
  /**
2235
2320
  * Cornerstone adapters events
2236
2321
  */
@@ -2252,12 +2337,11 @@ var _utilities$orientatio = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .
2252
2337
  rotateDirectionCosinesInPlane = _utilities$orientatio.rotateDirectionCosinesInPlane,
2253
2338
  flipIOP = _utilities$orientatio.flipImageOrientationPatient,
2254
2339
  flipMatrix2D = _utilities$orientatio.flipMatrix2D,
2255
- rotateMatrix902D = _utilities$orientatio.rotateMatrix902D,
2256
- nearlyEqual = _utilities$orientatio.nearlyEqual;
2340
+ rotateMatrix902D = _utilities$orientatio.rotateMatrix902D;
2257
2341
  var BitArray$1 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.BitArray,
2258
- DicomMessage = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.DicomMessage,
2259
- DicomMetaDictionary$2 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.DicomMetaDictionary;
2260
- var Normalizer$2 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .normalizers */ .oq.Normalizer;
2342
+ DicomMessage$1 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.DicomMessage,
2343
+ DicomMetaDictionary$3 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.DicomMetaDictionary;
2344
+ var Normalizer$3 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .normalizers */ .oq.Normalizer;
2261
2345
  var SegmentationDerivation$1 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .derivations */ .U7.Segmentation;
2262
2346
  var _utilities$compressio = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .utilities */ .hC.compression,
2263
2347
  encode = _utilities$compressio.encode,
@@ -2402,27 +2486,7 @@ function _getLabelmapsFromReferencedFrameIndicies(labelmap3D, referencedFrameInd
2402
2486
  * @returns {Object} The Seg derived dataSet.
2403
2487
  */
2404
2488
  function _createSegFromImages(images, isMultiframe, options) {
2405
- var datasets = [];
2406
- if (isMultiframe) {
2407
- var image = images[0];
2408
- var arrayBuffer = image.data.byteArray.buffer;
2409
- var dicomData = DicomMessage.readFile(arrayBuffer);
2410
- var dataset = DicomMetaDictionary$2.naturalizeDataset(dicomData.dict);
2411
- dataset._meta = DicomMetaDictionary$2.namifyDataset(dicomData.meta);
2412
- dataset.SpecificCharacterSet = "ISO_IR 192";
2413
- datasets.push(dataset);
2414
- } else {
2415
- for (var i = 0; i < images.length; i++) {
2416
- var _image = images[i];
2417
- var _arrayBuffer = _image.data.byteArray.buffer;
2418
- var _dicomData = DicomMessage.readFile(_arrayBuffer);
2419
- var _dataset = DicomMetaDictionary$2.naturalizeDataset(_dicomData.dict);
2420
- _dataset._meta = DicomMetaDictionary$2.namifyDataset(_dicomData.meta);
2421
- _dataset.SpecificCharacterSet = "ISO_IR 192";
2422
- datasets.push(_dataset);
2423
- }
2424
- }
2425
- var multiframe = Normalizer$2.normalizeToDataset(datasets);
2489
+ var multiframe = getDatasetsFromImages(images, isMultiframe);
2426
2490
  return new SegmentationDerivation$1([multiframe], options);
2427
2491
  }
2428
2492
 
@@ -2441,7 +2505,7 @@ function _createSegFromImages(images, isMultiframe, options) {
2441
2505
  * @return {[][][]} 3D list containing the track of segments per frame for each labelMap
2442
2506
  * (available only for the overlapping case).
2443
2507
  */
2444
- function generateToolState$2(_x, _x2, _x3, _x4) {
2508
+ function generateToolState$4(_x, _x2, _x3, _x4) {
2445
2509
  return _generateToolState.apply(this, arguments);
2446
2510
  } // function insertPixelDataPerpendicular(
2447
2511
  // segmentsOnFrame,
@@ -2601,10 +2665,10 @@ function _generateToolState() {
2601
2665
  while (1) switch (_context.prev = _context.next) {
2602
2666
  case 0:
2603
2667
  _options$skipOverlapp = options.skipOverlapping, skipOverlapping = _options$skipOverlapp === void 0 ? false : _options$skipOverlapp, _options$tolerance = options.tolerance, tolerance = _options$tolerance === void 0 ? 1e-3 : _options$tolerance, _options$TypedArrayCo = options.TypedArrayConstructor, TypedArrayConstructor = _options$TypedArrayCo === void 0 ? Uint8Array : _options$TypedArrayCo, _options$maxBytesPerC = options.maxBytesPerChunk, maxBytesPerChunk = _options$maxBytesPerC === void 0 ? 199000000 : _options$maxBytesPerC, eventTarget = options.eventTarget, triggerEvent = options.triggerEvent;
2604
- dicomData = DicomMessage.readFile(arrayBuffer);
2605
- dataset = DicomMetaDictionary$2.naturalizeDataset(dicomData.dict);
2606
- dataset._meta = DicomMetaDictionary$2.namifyDataset(dicomData.meta);
2607
- multiframe = Normalizer$2.normalizeToDataset([dataset]);
2668
+ dicomData = DicomMessage$1.readFile(arrayBuffer);
2669
+ dataset = DicomMetaDictionary$3.naturalizeDataset(dicomData.dict);
2670
+ dataset._meta = DicomMetaDictionary$3.namifyDataset(dicomData.meta);
2671
+ multiframe = Normalizer$3.normalizeToDataset([dataset]);
2608
2672
  imagePlaneModule = metadataProvider.get("imagePlaneModule", imageIds[0]);
2609
2673
  generalSeriesModule = metadataProvider.get("generalSeriesModule", imageIds[0]);
2610
2674
  SeriesInstanceUID = generalSeriesModule.seriesInstanceUID;
@@ -2663,7 +2727,7 @@ function _generateToolState() {
2663
2727
  if (overlapping) {
2664
2728
  insertFunction = insertOverlappingPixelDataPlanar;
2665
2729
  } else {
2666
- insertFunction = insertPixelDataPlanar;
2730
+ insertFunction = insertPixelDataPlanar$1;
2667
2731
  }
2668
2732
  return _context.abrupt("break", 37);
2669
2733
  case 35:
@@ -2731,7 +2795,7 @@ function _generateToolState() {
2731
2795
  }));
2732
2796
  return _generateToolState.apply(this, arguments);
2733
2797
  }
2734
- function findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap) {
2798
+ function findReferenceSourceImageId$1(multiframe, frameSegment, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap) {
2735
2799
  var imageId = undefined;
2736
2800
  if (!multiframe) {
2737
2801
  return imageId;
@@ -2772,12 +2836,12 @@ function findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadata
2772
2836
  frameSourceImageSequence = SourceImageSequence[frameSegment];
2773
2837
  }
2774
2838
  if (frameSourceImageSequence) {
2775
- imageId = getImageIdOfSourceImageBySourceImageSequence(frameSourceImageSequence, sopUIDImageIdIndexMap);
2839
+ imageId = getImageIdOfSourceImageBySourceImageSequence$1(frameSourceImageSequence, sopUIDImageIdIndexMap);
2776
2840
  }
2777
2841
  if (imageId === undefined && ReferencedSeriesSequence) {
2778
2842
  var referencedSeriesSequence = Array.isArray(ReferencedSeriesSequence) ? ReferencedSeriesSequence[0] : ReferencedSeriesSequence;
2779
2843
  var ReferencedSeriesInstanceUID = referencedSeriesSequence.SeriesInstanceUID;
2780
- imageId = getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance);
2844
+ imageId = getImageIdOfSourceImagebyGeometry$1(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance);
2781
2845
  }
2782
2846
  return imageId;
2783
2847
  }
@@ -2814,7 +2878,7 @@ function checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations
2814
2878
  console.warn("Could not retrieve the segment index for frame segment " + frameSegment + ", skipping this frame.");
2815
2879
  return 0; // continue
2816
2880
  }
2817
- var imageId = findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap);
2881
+ var imageId = findReferenceSourceImageId$1(multiframe, frameSegment, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap);
2818
2882
  if (!imageId) {
2819
2883
  console.warn("Image not present in stack, can't import frame : " + frameSegment + ".");
2820
2884
  return 0; // continue
@@ -2923,7 +2987,7 @@ function insertOverlappingPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray,
2923
2987
  if (!alignedPixelDataI) {
2924
2988
  throw new Error("Individual SEG frames are out of plane with respect to the first SEG frame. " + "This is not yet supported. Aborting segmentation loading.");
2925
2989
  }
2926
- var imageId = findReferenceSourceImageId(multiframe, _i2, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap);
2990
+ var imageId = findReferenceSourceImageId$1(multiframe, _i2, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap);
2927
2991
  if (!imageId) {
2928
2992
  console.warn("Image not present in stack, can't import frame : " + _i2 + ".");
2929
2993
  i = _i2;
@@ -2991,7 +3055,7 @@ var getSegmentIndex = function getSegmentIndex(multiframe, frame) {
2991
3055
  var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[frame];
2992
3056
  return PerFrameFunctionalGroups && PerFrameFunctionalGroups.SegmentIdentificationSequence ? PerFrameFunctionalGroups.SegmentIdentificationSequence.ReferencedSegmentNumber : SharedFunctionalGroupsSequence.SegmentIdentificationSequence ? SharedFunctionalGroupsSequence.SegmentIdentificationSequence.ReferencedSegmentNumber : undefined;
2993
3057
  };
2994
- function insertPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance, TypedArrayConstructor, segmentsPixelIndices, sopUIDImageIdIndexMap, imageIdMaps, eventTarget, triggerEvent) {
3058
+ function insertPixelDataPlanar$1(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance, TypedArrayConstructor, segmentsPixelIndices, sopUIDImageIdIndexMap, imageIdMaps, eventTarget, triggerEvent) {
2995
3059
  var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
2996
3060
  PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
2997
3061
  Rows = multiframe.Rows,
@@ -3026,7 +3090,7 @@ function insertPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBu
3026
3090
  if (!segmentsPixelIndices.has(segmentIndex)) {
3027
3091
  segmentsPixelIndices.set(segmentIndex, {});
3028
3092
  }
3029
- var imageId = findReferenceSourceImageId(multiframe, i, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap);
3093
+ var imageId = findReferenceSourceImageId$1(multiframe, i, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap);
3030
3094
  if (!imageId) {
3031
3095
  console.warn("Image not present in stack, can't import frame : " + i + ".");
3032
3096
  continue;
@@ -3082,41 +3146,6 @@ function insertPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBu
3082
3146
  processInChunks();
3083
3147
  });
3084
3148
  }
3085
- function checkOrientation(multiframe, validOrientations, sourceDataDimensions, tolerance) {
3086
- var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
3087
- PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence;
3088
- var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
3089
-
3090
- // Check if in plane.
3091
- var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[0];
3092
- var iop = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
3093
- var inPlane = validOrientations.some(function (operation) {
3094
- return compareArrays(iop, operation, tolerance);
3095
- });
3096
- if (inPlane) {
3097
- return "Planar";
3098
- }
3099
- if (checkIfPerpendicular(iop, validOrientations[0], tolerance) && sourceDataDimensions.includes(multiframe.Rows) && sourceDataDimensions.includes(multiframe.Columns)) {
3100
- // Perpendicular and fits on same grid.
3101
- return "Perpendicular";
3102
- }
3103
- return "Oblique";
3104
- }
3105
-
3106
- /**
3107
- * checkIfPerpendicular - Returns true if iop1 and iop2 are perpendicular
3108
- * within a tolerance.
3109
- *
3110
- * @param {Number[6]} iop1 An ImageOrientationPatient array.
3111
- * @param {Number[6]} iop2 An ImageOrientationPatient array.
3112
- * @param {Number} tolerance.
3113
- * @return {Boolean} True if iop1 and iop2 are equal.
3114
- */
3115
- function checkIfPerpendicular(iop1, iop2, tolerance) {
3116
- var absDotColumnCosines = Math.abs(iop1[0] * iop2[0] + iop1[1] * iop2[1] + iop1[2] * iop2[2]);
3117
- var absDotRowCosines = Math.abs(iop1[3] * iop2[3] + iop1[4] * iop2[4] + iop1[5] * iop2[5]);
3118
- return (absDotColumnCosines < tolerance || Math.abs(absDotColumnCosines - 1) < tolerance) && (absDotRowCosines < tolerance || Math.abs(absDotRowCosines - 1) < tolerance);
3119
- }
3120
3149
 
3121
3150
  /**
3122
3151
  * unpackPixelData - Unpacks bit packed pixelData if the Segmentation is BINARY.
@@ -3179,10 +3208,10 @@ function getUnpackedChunks(data, maxBytesPerChunk) {
3179
3208
  * @param {Object} sopUIDImageIdIndexMap A map of SOPInstanceUIDs to imageIds.
3180
3209
  * @return {String} The corresponding imageId.
3181
3210
  */
3182
- function getImageIdOfSourceImageBySourceImageSequence(SourceImageSequence, sopUIDImageIdIndexMap) {
3211
+ function getImageIdOfSourceImageBySourceImageSequence$1(SourceImageSequence, sopUIDImageIdIndexMap) {
3183
3212
  var ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID,
3184
3213
  ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;
3185
- return ReferencedFrameNumber ? getImageIdOfReferencedFrame(ReferencedSOPInstanceUID, ReferencedFrameNumber, sopUIDImageIdIndexMap) : sopUIDImageIdIndexMap[ReferencedSOPInstanceUID];
3214
+ return ReferencedFrameNumber ? getImageIdOfReferencedFrame$1(ReferencedSOPInstanceUID, ReferencedFrameNumber, sopUIDImageIdIndexMap) : sopUIDImageIdIndexMap[ReferencedSOPInstanceUID];
3186
3215
  }
3187
3216
 
3188
3217
  /**
@@ -3197,7 +3226,7 @@ function getImageIdOfSourceImageBySourceImageSequence(SourceImageSequence, sopUI
3197
3226
  *
3198
3227
  * @return {String} The corresponding imageId.
3199
3228
  */
3200
- function getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance) {
3229
+ function getImageIdOfSourceImagebyGeometry$1(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance) {
3201
3230
  if (ReferencedSeriesInstanceUID === undefined || PerFrameFunctionalGroup.PlanePositionSequence === undefined || PerFrameFunctionalGroup.PlanePositionSequence[0] === undefined || PerFrameFunctionalGroup.PlanePositionSequence[0].ImagePositionPatient === undefined) {
3202
3231
  return undefined;
3203
3232
  }
@@ -3222,7 +3251,7 @@ function getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfR
3222
3251
  * @param {Object} sopUIDImageIdIndexMap A map of SOPInstanceUIDs to imageIds.
3223
3252
  * @return {String} The imageId that corresponds to the sopInstanceUid.
3224
3253
  */
3225
- function getImageIdOfReferencedFrame(sopInstanceUid, frameNumber, sopUIDImageIdIndexMap) {
3254
+ function getImageIdOfReferencedFrame$1(sopInstanceUid, frameNumber, sopUIDImageIdIndexMap) {
3226
3255
  var imageId = sopUIDImageIdIndexMap[sopInstanceUid];
3227
3256
  if (!imageId) {
3228
3257
  return;
@@ -3304,27 +3333,6 @@ function alignPixelDataWithSourceData(pixelData2D, iop, orientations, tolerance)
3304
3333
  return rotateMatrix902D(rotateMatrix902D(rotateMatrix902D(pixelData2D)));
3305
3334
  }
3306
3335
  }
3307
-
3308
- /**
3309
- * compareArrays - Returns true if array1 and array2 are equal
3310
- * within a tolerance.
3311
- *
3312
- * @param {Number[]} array1 - An array.
3313
- * @param {Number[]} array2 - An array.
3314
- * @param {Number} tolerance.
3315
- * @return {Boolean} True if array1 and array2 are equal.
3316
- */
3317
- function compareArrays(array1, array2, tolerance) {
3318
- if (array1.length != array2.length) {
3319
- return false;
3320
- }
3321
- for (var i = 0; i < array1.length; ++i) {
3322
- if (!nearlyEqual(array1[i], array2[i], tolerance)) {
3323
- return false;
3324
- }
3325
- }
3326
- return true;
3327
- }
3328
3336
  function getSegmentMetadata(multiframe, seriesInstanceUid) {
3329
3337
  var segmentSequence = multiframe.SegmentSequence;
3330
3338
  var data = [];
@@ -3438,13 +3446,13 @@ function calculateCentroid(imageIdIndexBufferIndex, multiframe) {
3438
3446
  }
3439
3447
  var Segmentation$4 = {
3440
3448
  generateSegmentation: generateSegmentation$2,
3441
- generateToolState: generateToolState$2,
3449
+ generateToolState: generateToolState$4,
3442
3450
  fillSegmentation: fillSegmentation$1
3443
3451
  };
3444
3452
 
3445
3453
  var Segmentation$3 = {
3446
3454
  generateSegmentation: generateSegmentation$1,
3447
- generateToolState: generateToolState$1,
3455
+ generateToolState: generateToolState$3,
3448
3456
  fillSegmentation: fillSegmentation
3449
3457
  };
3450
3458
 
@@ -3485,7 +3493,7 @@ function generateSegmentation$1(images, labelmaps3DorBrushData) {
3485
3493
  * @returns {Object} The toolState and an object from which the
3486
3494
  * segment metadata can be derived.
3487
3495
  */
3488
- function generateToolState$1(imageIds, arrayBuffer, metadataProvider) {
3496
+ function generateToolState$3(imageIds, arrayBuffer, metadataProvider) {
3489
3497
  var skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
3490
3498
  var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;
3491
3499
  var cornerstoneToolsVersion = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 4;
@@ -3517,22 +3525,6 @@ function fillSegmentation(segmentation, inputLabelmaps3D) {
3517
3525
  console.warn("No generateSegmentation adapater for cornerstone version ".concat(cornerstoneToolsVersion, ", exiting."));
3518
3526
  }
3519
3527
 
3520
- var CornerstoneSR = {
3521
- Length: Length$1,
3522
- FreehandRoi: FreehandRoi,
3523
- Bidirectional: Bidirectional$1,
3524
- EllipticalRoi: EllipticalRoi,
3525
- CircleRoi: CircleRoi,
3526
- ArrowAnnotate: ArrowAnnotate$1,
3527
- MeasurementReport: MeasurementReport$1,
3528
- CobbAngle: CobbAngle$1,
3529
- Angle: Angle$1,
3530
- RectangleRoi: RectangleRoi
3531
- };
3532
- var CornerstoneSEG = {
3533
- Segmentation: Segmentation$3
3534
- };
3535
-
3536
3528
  /******************************************************************************
3537
3529
  Copyright (c) Microsoft Corporation.
3538
3530
 
@@ -3559,6 +3551,121 @@ var __assign = function () {
3559
3551
  };
3560
3552
  return __assign.apply(this, arguments);
3561
3553
  };
3554
+ function __awaiter(thisArg, _arguments, P, generator) {
3555
+ function adopt(value) {
3556
+ return value instanceof P ? value : new P(function (resolve) {
3557
+ resolve(value);
3558
+ });
3559
+ }
3560
+ return new (P || (P = Promise))(function (resolve, reject) {
3561
+ function fulfilled(value) {
3562
+ try {
3563
+ step(generator.next(value));
3564
+ } catch (e) {
3565
+ reject(e);
3566
+ }
3567
+ }
3568
+ function rejected(value) {
3569
+ try {
3570
+ step(generator["throw"](value));
3571
+ } catch (e) {
3572
+ reject(e);
3573
+ }
3574
+ }
3575
+ function step(result) {
3576
+ result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
3577
+ }
3578
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
3579
+ });
3580
+ }
3581
+ function __generator(thisArg, body) {
3582
+ var _ = {
3583
+ label: 0,
3584
+ sent: function () {
3585
+ if (t[0] & 1) throw t[1];
3586
+ return t[1];
3587
+ },
3588
+ trys: [],
3589
+ ops: []
3590
+ },
3591
+ f,
3592
+ y,
3593
+ t,
3594
+ g;
3595
+ return g = {
3596
+ next: verb(0),
3597
+ "throw": verb(1),
3598
+ "return": verb(2)
3599
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function () {
3600
+ return this;
3601
+ }), g;
3602
+ function verb(n) {
3603
+ return function (v) {
3604
+ return step([n, v]);
3605
+ };
3606
+ }
3607
+ function step(op) {
3608
+ if (f) throw new TypeError("Generator is already executing.");
3609
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
3610
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
3611
+ if (y = 0, t) op = [op[0] & 2, t.value];
3612
+ switch (op[0]) {
3613
+ case 0:
3614
+ case 1:
3615
+ t = op;
3616
+ break;
3617
+ case 4:
3618
+ _.label++;
3619
+ return {
3620
+ value: op[1],
3621
+ done: false
3622
+ };
3623
+ case 5:
3624
+ _.label++;
3625
+ y = op[1];
3626
+ op = [0];
3627
+ continue;
3628
+ case 7:
3629
+ op = _.ops.pop();
3630
+ _.trys.pop();
3631
+ continue;
3632
+ default:
3633
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
3634
+ _ = 0;
3635
+ continue;
3636
+ }
3637
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
3638
+ _.label = op[1];
3639
+ break;
3640
+ }
3641
+ if (op[0] === 6 && _.label < t[1]) {
3642
+ _.label = t[1];
3643
+ t = op;
3644
+ break;
3645
+ }
3646
+ if (t && _.label < t[2]) {
3647
+ _.label = t[2];
3648
+ _.ops.push(op);
3649
+ break;
3650
+ }
3651
+ if (t[2]) _.ops.pop();
3652
+ _.trys.pop();
3653
+ continue;
3654
+ }
3655
+ op = body.call(thisArg, _);
3656
+ } catch (e) {
3657
+ op = [6, e];
3658
+ y = 0;
3659
+ } finally {
3660
+ f = t = 0;
3661
+ }
3662
+ if (op[0] & 5) throw op[1];
3663
+ return {
3664
+ value: op[0] ? op[1] : void 0,
3665
+ done: true
3666
+ };
3667
+ }
3668
+ }
3562
3669
  function __spreadArray(to, from, pack) {
3563
3670
  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
3564
3671
  if (ar || !(i in from)) {
@@ -3573,6 +3680,228 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
3573
3680
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
3574
3681
  };
3575
3682
 
3683
+ var DicomMessage = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.DicomMessage, DicomMetaDictionary$2 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .data */ .aT.DicomMetaDictionary;
3684
+ var Normalizer$2 = dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .normalizers */ .oq.Normalizer;
3685
+ function generateToolState$2(imageIds, arrayBuffer, metadataProvider, tolerance) {
3686
+ if (tolerance === void 0) { tolerance = 1e-3; }
3687
+ return __awaiter(this, void 0, void 0, function () {
3688
+ var dicomData, dataset, multiframe, imagePlaneModule, ImageOrientationPatient, validOrientations, pixelData, orientation, sopUIDImageIdIndexMap, orientationText, imageIdMaps;
3689
+ return __generator(this, function (_a) {
3690
+ switch (_a.label) {
3691
+ case 0:
3692
+ dicomData = DicomMessage.readFile(arrayBuffer);
3693
+ dataset = DicomMetaDictionary$2.naturalizeDataset(dicomData.dict);
3694
+ dataset._meta = DicomMetaDictionary$2.namifyDataset(dicomData.meta);
3695
+ multiframe = Normalizer$2.normalizeToDataset([dataset]);
3696
+ imagePlaneModule = metadataProvider.get("imagePlaneModule", imageIds[0]);
3697
+ if (!imagePlaneModule) {
3698
+ console.warn("Insufficient metadata, imagePlaneModule missing.");
3699
+ }
3700
+ ImageOrientationPatient = Array.isArray(imagePlaneModule.rowCosines)
3701
+ ? __spreadArray(__spreadArray([], imagePlaneModule.rowCosines, true), imagePlaneModule.columnCosines, true) : [
3702
+ imagePlaneModule.rowCosines.x,
3703
+ imagePlaneModule.rowCosines.y,
3704
+ imagePlaneModule.rowCosines.z,
3705
+ imagePlaneModule.columnCosines.x,
3706
+ imagePlaneModule.columnCosines.y,
3707
+ imagePlaneModule.columnCosines.z
3708
+ ];
3709
+ validOrientations = [ImageOrientationPatient];
3710
+ pixelData = getPixelData(multiframe);
3711
+ orientation = checkOrientation(multiframe, validOrientations, [imagePlaneModule.rows, imagePlaneModule.columns, imageIds.length], tolerance);
3712
+ sopUIDImageIdIndexMap = imageIds.reduce(function (acc, imageId) {
3713
+ var sopInstanceUID = metadataProvider.get("generalImageModule", imageId).sopInstanceUID;
3714
+ acc[sopInstanceUID] = imageId;
3715
+ return acc;
3716
+ }, {});
3717
+ if (orientation !== "Planar") {
3718
+ orientationText = {
3719
+ Perpendicular: "orthogonal",
3720
+ Oblique: "oblique"
3721
+ };
3722
+ throw new Error("Parametric maps ".concat(orientationText[orientation], " to the acquisition plane of the source data are not yet supported."));
3723
+ }
3724
+ imageIdMaps = imageIds.reduce(function (acc, curr, index) {
3725
+ acc.indices[curr] = index;
3726
+ acc.metadata[curr] = metadataProvider.get("instance", curr);
3727
+ return acc;
3728
+ }, { indices: {}, metadata: {} });
3729
+ return [4 /*yield*/, insertPixelDataPlanar(pixelData, multiframe, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap, imageIdMaps)];
3730
+ case 1:
3731
+ _a.sent();
3732
+ return [2 /*return*/, { pixelData: pixelData }];
3733
+ }
3734
+ });
3735
+ });
3736
+ }
3737
+ function insertPixelDataPlanar(sourcePixelData, multiframe, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap, imageIdMaps) {
3738
+ var targetPixelData = new sourcePixelData.constructor(sourcePixelData.length);
3739
+ var PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence, Rows = multiframe.Rows, Columns = multiframe.Columns;
3740
+ var sliceLength = Columns * Rows;
3741
+ var numSlices = PerFrameFunctionalGroupsSequence.length;
3742
+ for (var i = 0; i < numSlices; i++) {
3743
+ var sourceSliceDataView = new sourcePixelData.constructor(sourcePixelData.buffer, i * sliceLength, sliceLength);
3744
+ var imageId = findReferenceSourceImageId(multiframe, i, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap);
3745
+ if (!imageId) {
3746
+ console.warn("Image not present in stack, can't import frame : " + i + ".");
3747
+ continue;
3748
+ }
3749
+ var sourceImageMetadata = imageIdMaps.metadata[imageId];
3750
+ if (Rows !== sourceImageMetadata.Rows ||
3751
+ Columns !== sourceImageMetadata.Columns) {
3752
+ throw new Error("Parametric map have different geometry dimensions (Rows and Columns) " +
3753
+ "respect to the source image reference frame. This is not yet supported.");
3754
+ }
3755
+ var imageIdIndex = imageIdMaps.indices[imageId];
3756
+ var byteOffset = sliceLength * imageIdIndex * targetPixelData.BYTES_PER_ELEMENT;
3757
+ var targetSliceDataView = new targetPixelData.constructor(targetPixelData.buffer, byteOffset, sliceLength);
3758
+ // Copy from source to target which works for parametric maps with same orientation.
3759
+ // TODO: Find a dataset with parametric map in a different orientation and add finish this implementation
3760
+ targetSliceDataView.set(sourceSliceDataView);
3761
+ }
3762
+ return targetPixelData;
3763
+ }
3764
+ function getPixelData(multiframe) {
3765
+ var _a;
3766
+ var TypedArrayClass;
3767
+ var data;
3768
+ if (multiframe.PixelData) {
3769
+ var validTypedArrays = multiframe.BitsAllocated === 16
3770
+ ? [Uint16Array, Int16Array]
3771
+ : [Uint32Array, Int32Array];
3772
+ TypedArrayClass = validTypedArrays[(_a = multiframe.PixelRepresentation) !== null && _a !== void 0 ? _a : 0];
3773
+ data = multiframe.PixelData;
3774
+ }
3775
+ else if (multiframe.FloatPixelData) {
3776
+ TypedArrayClass = Float32Array;
3777
+ data = multiframe.FloatPixelData;
3778
+ }
3779
+ else if (multiframe.DoubleFloatPixelData) {
3780
+ TypedArrayClass = Float64Array;
3781
+ data = multiframe.DoubleFloatPixelData;
3782
+ }
3783
+ if (data === undefined) {
3784
+ dcmjs__WEBPACK_IMPORTED_MODULE_0__/* .log */ .cM.error("This parametric map pixel data is undefined.");
3785
+ }
3786
+ if (Array.isArray(data)) {
3787
+ data = data[0];
3788
+ }
3789
+ return new TypedArrayClass(data);
3790
+ }
3791
+ function findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance, sopUIDImageIdIndexMap) {
3792
+ var imageId = undefined;
3793
+ if (!multiframe) {
3794
+ return imageId;
3795
+ }
3796
+ var FrameOfReferenceUID = multiframe.FrameOfReferenceUID, PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence, SourceImageSequence = multiframe.SourceImageSequence, ReferencedSeriesSequence = multiframe.ReferencedSeriesSequence;
3797
+ if (!PerFrameFunctionalGroupsSequence ||
3798
+ PerFrameFunctionalGroupsSequence.length === 0) {
3799
+ return imageId;
3800
+ }
3801
+ var PerFrameFunctionalGroup = PerFrameFunctionalGroupsSequence[frameSegment];
3802
+ if (!PerFrameFunctionalGroup) {
3803
+ return imageId;
3804
+ }
3805
+ var frameSourceImageSequence = undefined;
3806
+ if (PerFrameFunctionalGroup.DerivationImageSequence) {
3807
+ var DerivationImageSequence = PerFrameFunctionalGroup.DerivationImageSequence;
3808
+ if (Array.isArray(DerivationImageSequence)) {
3809
+ if (DerivationImageSequence.length !== 0) {
3810
+ DerivationImageSequence = DerivationImageSequence[0];
3811
+ }
3812
+ else {
3813
+ DerivationImageSequence = undefined;
3814
+ }
3815
+ }
3816
+ if (DerivationImageSequence) {
3817
+ frameSourceImageSequence =
3818
+ DerivationImageSequence.SourceImageSequence;
3819
+ if (Array.isArray(frameSourceImageSequence)) {
3820
+ if (frameSourceImageSequence.length !== 0) {
3821
+ frameSourceImageSequence = frameSourceImageSequence[0];
3822
+ }
3823
+ else {
3824
+ frameSourceImageSequence = undefined;
3825
+ }
3826
+ }
3827
+ }
3828
+ }
3829
+ else if (SourceImageSequence && SourceImageSequence.length !== 0) {
3830
+ console.warn("DerivationImageSequence not present, using SourceImageSequence assuming SEG has the same geometry as the source image.");
3831
+ frameSourceImageSequence = SourceImageSequence[frameSegment];
3832
+ }
3833
+ if (frameSourceImageSequence) {
3834
+ imageId = getImageIdOfSourceImageBySourceImageSequence(frameSourceImageSequence, sopUIDImageIdIndexMap);
3835
+ }
3836
+ if (imageId === undefined && ReferencedSeriesSequence) {
3837
+ var referencedSeriesSequence = Array.isArray(ReferencedSeriesSequence)
3838
+ ? ReferencedSeriesSequence[0]
3839
+ : ReferencedSeriesSequence;
3840
+ var ReferencedSeriesInstanceUID = referencedSeriesSequence.SeriesInstanceUID;
3841
+ imageId = getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance);
3842
+ }
3843
+ return imageId;
3844
+ }
3845
+ function getImageIdOfSourceImageBySourceImageSequence(SourceImageSequence, sopUIDImageIdIndexMap) {
3846
+ var ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID, ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;
3847
+ return ReferencedFrameNumber
3848
+ ? getImageIdOfReferencedFrame(ReferencedSOPInstanceUID, ReferencedFrameNumber, sopUIDImageIdIndexMap)
3849
+ : sopUIDImageIdIndexMap[ReferencedSOPInstanceUID];
3850
+ }
3851
+ function getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance) {
3852
+ if (ReferencedSeriesInstanceUID === undefined ||
3853
+ PerFrameFunctionalGroup.PlanePositionSequence === undefined ||
3854
+ PerFrameFunctionalGroup.PlanePositionSequence[0] === undefined ||
3855
+ PerFrameFunctionalGroup.PlanePositionSequence[0]
3856
+ .ImagePositionPatient === undefined) {
3857
+ return undefined;
3858
+ }
3859
+ for (var imageIdsIndex = 0; imageIdsIndex < imageIds.length; ++imageIdsIndex) {
3860
+ var sourceImageMetadata = metadataProvider.get("instance", imageIds[imageIdsIndex]);
3861
+ if (sourceImageMetadata === undefined ||
3862
+ sourceImageMetadata.ImagePositionPatient === undefined ||
3863
+ sourceImageMetadata.FrameOfReferenceUID !== FrameOfReferenceUID ||
3864
+ sourceImageMetadata.SeriesInstanceUID !==
3865
+ ReferencedSeriesInstanceUID) {
3866
+ continue;
3867
+ }
3868
+ if (compareArrays(PerFrameFunctionalGroup.PlanePositionSequence[0]
3869
+ .ImagePositionPatient, sourceImageMetadata.ImagePositionPatient, tolerance)) {
3870
+ return imageIds[imageIdsIndex];
3871
+ }
3872
+ }
3873
+ }
3874
+ function getImageIdOfReferencedFrame(sopInstanceUid, frameNumber, sopUIDImageIdIndexMap) {
3875
+ var imageId = sopUIDImageIdIndexMap[sopInstanceUid];
3876
+ if (!imageId) {
3877
+ return;
3878
+ }
3879
+ var imageIdFrameNumber = Number(imageId.split("frame=")[1]);
3880
+ return imageIdFrameNumber === frameNumber - 1 ? imageId : undefined;
3881
+ }
3882
+ var ParametricMapObj = {
3883
+ generateToolState: generateToolState$2
3884
+ };
3885
+
3886
+ var CornerstoneSR = {
3887
+ Length: Length$1,
3888
+ FreehandRoi: FreehandRoi,
3889
+ Bidirectional: Bidirectional$1,
3890
+ EllipticalRoi: EllipticalRoi,
3891
+ CircleRoi: CircleRoi,
3892
+ ArrowAnnotate: ArrowAnnotate$1,
3893
+ MeasurementReport: MeasurementReport$1,
3894
+ CobbAngle: CobbAngle$1,
3895
+ Angle: Angle$1,
3896
+ RectangleRoi: RectangleRoi
3897
+ };
3898
+ var CornerstoneSEG = {
3899
+ Segmentation: Segmentation$3
3900
+ };
3901
+ var CornerstonePMAP = {
3902
+ ParametricMap: ParametricMapObj
3903
+ };
3904
+
3576
3905
  var CORNERSTONE_3D_TAG = "Cornerstone3DTools@^0.1.0";
3577
3906
 
3578
3907
  // This is a custom coding scheme defined to store some annotations from Cornerstone.
@@ -5056,7 +5385,7 @@ var generateToolStateCornerstoneLegacy = Segmentation$2.generateToolState;
5056
5385
  * list containing the track of segments per frame
5057
5386
  * list containing the track of segments per frame for each labelMap (available only for the overlapping case).
5058
5387
  */
5059
- function generateToolState(imageIds, arrayBuffer, metadataProvider, skipOverlapping, tolerance) {
5388
+ function generateToolState$1(imageIds, arrayBuffer, metadataProvider, skipOverlapping, tolerance) {
5060
5389
  if (skipOverlapping === void 0) { skipOverlapping = false; }
5061
5390
  if (tolerance === void 0) { tolerance = 1e-3; }
5062
5391
  return generateToolStateCornerstoneLegacy(imageIds, arrayBuffer, metadataProvider, skipOverlapping, tolerance);
@@ -5066,6 +5395,19 @@ var Segmentation$1 = /*#__PURE__*/Object.freeze({
5066
5395
  __proto__: null,
5067
5396
  generateLabelMaps2DFrom3D: generateLabelMaps2DFrom3D,
5068
5397
  generateSegmentation: generateSegmentation,
5398
+ generateToolState: generateToolState$1
5399
+ });
5400
+
5401
+ var ParametricMap$1 = CornerstonePMAP.ParametricMap;
5402
+ var generateToolStateCornerstone = ParametricMap$1.generateToolState;
5403
+ function generateToolState(imageIds, arrayBuffer, metadataProvider) {
5404
+ var skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
5405
+ var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;
5406
+ return generateToolStateCornerstone(imageIds, arrayBuffer, metadataProvider, skipOverlapping, tolerance);
5407
+ }
5408
+
5409
+ var ParametricMap = /*#__PURE__*/Object.freeze({
5410
+ __proto__: null,
5069
5411
  generateToolState: generateToolState
5070
5412
  });
5071
5413
 
@@ -5400,6 +5742,9 @@ var Cornerstone3DSR = {
5400
5742
  var Cornerstone3DSEG = {
5401
5743
  Segmentation: Segmentation$1
5402
5744
  };
5745
+ var Cornerstone3DPMAP = {
5746
+ ParametricMap: ParametricMap
5747
+ };
5403
5748
  var Cornerstone3DRT = {
5404
5749
  RTSS: RTSS
5405
5750
  };
@@ -5599,6 +5944,11 @@ var adaptersSEG = {
5599
5944
  Cornerstone3D: Cornerstone3DSEG,
5600
5945
  VTKjs: VTKjsSEG
5601
5946
  };
5947
+ var adaptersPMAP = {
5948
+ Cornerstone: CornerstonePMAP,
5949
+ Cornerstone3D: Cornerstone3DPMAP
5950
+ // VTKjs: VTKjsPMAP
5951
+ };
5602
5952
  var adaptersRT = {
5603
5953
  Cornerstone3D: Cornerstone3DRT
5604
5954
  };