@ohif/app 3.7.0-beta.42 → 3.7.0-beta.43

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 (33) hide show
  1. package/dist/{204.bundle.2ca243271f4e2e584757.js → 150.bundle.94cbce497cafacd4a7d7.js} +69 -92
  2. package/dist/{195.bundle.b56618d38bc184f8ef78.js → 202.bundle.ac1e5e25d4daf54581b1.js} +3697 -972
  3. package/dist/{236.bundle.a2c84f9a7c7c704ca47b.js → 236.bundle.3c5f844ce9de4ec0777d.js} +1 -1
  4. package/dist/{663.bundle.24e14d035c31bc67a1af.js → 663.bundle.2dcb8a60d59464f4e563.js} +4 -4
  5. package/dist/{678.bundle.efd4a623a9d1bf0aa918.js → 678.bundle.13062f7926c30056aee1.js} +32 -104
  6. package/dist/{754.bundle.36f6f0f1c2cad1ffeadc.js → 754.bundle.8a16fc8ad21fe00c2e15.js} +11928 -7138
  7. package/dist/{774.bundle.e2cf44623c1268d8433d.js → 774.bundle.8ba82ee206266eb2da5e.js} +55 -33
  8. package/dist/{821.bundle.544ef0da9b9ec7c869fa.js → 821.bundle.d4120df6baeed120be9e.js} +2 -2
  9. package/dist/{869.bundle.51e2fc87fab5cb911ec1.js → 869.bundle.c9c018e6757410919ed8.js} +3 -2
  10. package/dist/{925.bundle.150debc1fe2cafa1e036.js → 925.bundle.a2f1103d968c53a2b8fb.js} +26 -20
  11. package/dist/{app.bundle.3dbe3a748e06d0a8d9fc.js → app.bundle.2905ffdd301e3c34286e.js} +28 -18
  12. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  13. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  14. package/dist/index.html +1 -1
  15. package/dist/{index.worker.17eee78bdafa44cbb47d.worker.js → index.worker.e62ecca63f1a2e124230.worker.js} +2 -2
  16. package/dist/index.worker.e62ecca63f1a2e124230.worker.js.map +1 -0
  17. package/dist/sw.js +1 -1
  18. package/package.json +19 -20
  19. package/dist/899.bundle.dc9c8c0729bf29173303.js +0 -4769
  20. package/dist/index.worker.17eee78bdafa44cbb47d.worker.js.map +0 -1
  21. /package/dist/{12.bundle.2c6b0156319ff8d39285.js → 12.bundle.f46296f27a36e6b95f76.js} +0 -0
  22. /package/dist/{128.bundle.ede0e35b2fc74164f0b0.js → 128.bundle.963d34d21c01231fc804.js} +0 -0
  23. /package/dist/{181.bundle.3c90dbb782b783e30fd8.js → 181.bundle.817ca1ba6479fca5fd15.js} +0 -0
  24. /package/dist/{281.bundle.399fb8e0048492f2f14d.js → 281.bundle.ac92bd142441f317f308.js} +0 -0
  25. /package/dist/{30.bundle.2991067a1b7d252441ce.js → 30.bundle.8fb93818b3a58f29f7e3.js} +0 -0
  26. /package/dist/{348.bundle.226b1d5d97c0ea05a302.js → 348.bundle.323f57efcc2239950451.js} +0 -0
  27. /package/dist/{359.bundle.e4810515717797e10a0d.js → 359.bundle.3ae0f07b1c428eeb00a8.js} +0 -0
  28. /package/dist/{378.bundle.3ddca21119a8f6a02e90.js → 378.bundle.c908a6194c50544b45db.js} +0 -0
  29. /package/dist/{410.bundle.4794b1ed5caa5c44d8ab.js → 410.bundle.b3cbeff9c619149a2234.js} +0 -0
  30. /package/dist/{506.bundle.508c7a7018c0600c6683.js → 506.bundle.44629077a406500707ea.js} +0 -0
  31. /package/dist/{782.bundle.c113ddc2ec70ec2ccbea.js → 782.bundle.c511611d980f9aa6563b.js} +0 -0
  32. /package/dist/{814.bundle.ce16dd6b97d682341a9e.js → 814.bundle.8391ddacf39d7c699c5f.js} +0 -0
  33. /package/dist/{822.bundle.83c544a4283056f1331d.js → 822.bundle.34b66f1c1b27e7884df7.js} +0 -0
@@ -2613,7 +2613,7 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
2613
2613
 
2614
2614
 
2615
2615
  const Component = /*#__PURE__*/react.lazy(() => {
2616
- return Promise.all(/* import() */[__webpack_require__.e(899), __webpack_require__.e(754), __webpack_require__.e(604), __webpack_require__.e(417), __webpack_require__.e(23), __webpack_require__.e(821), __webpack_require__.e(250)]).then(__webpack_require__.bind(__webpack_require__, 76516));
2616
+ return Promise.all(/* import() */[__webpack_require__.e(754), __webpack_require__.e(604), __webpack_require__.e(417), __webpack_require__.e(23), __webpack_require__.e(821), __webpack_require__.e(250)]).then(__webpack_require__.bind(__webpack_require__, 76516));
2617
2617
  });
2618
2618
  const MicroscopyViewport = props => {
2619
2619
  return /*#__PURE__*/react.createElement(react.Suspense, {
@@ -486,8 +486,8 @@ function _getRenderableData(GraphicType, GraphicData, imageId, TrackingIdentifie
486
486
  }
487
487
  return renderableData;
488
488
  }
489
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/@cornerstonejs/adapters.es.js
490
- var adapters_es = __webpack_require__(47195);
489
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/adapters.es.js
490
+ var adapters_es = __webpack_require__(91202);
491
491
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-sr/src/utils/isRehydratable.js
492
492
 
493
493
  const cornerstoneAdapters = adapters_es.adaptersSR.Cornerstone3D.MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;
@@ -1609,8 +1609,8 @@ function getLabelFromDCMJSImportedToolData(toolData) {
1609
1609
  return finding.CodeMeaning;
1610
1610
  }
1611
1611
  }
1612
- // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/@cornerstonejs/adapters.es.js
1613
- var adapters_es = __webpack_require__(47195);
1612
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/adapters.es.js
1613
+ var adapters_es = __webpack_require__(91202);
1614
1614
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-sr/src/utils/hydrateStructuredReport.js
1615
1615
 
1616
1616
 
@@ -6705,11 +6705,11 @@ class SegmentationService extends src/* PubSubService */.hC {
6705
6705
  return this.addOrUpdateSegmentation(Object.assign(segmentation, cachedSegmentation), suppressEvents);
6706
6706
  }
6707
6707
  const {
6708
- segments,
6708
+ labelmapBufferArray,
6709
6709
  referencedVolumeId
6710
6710
  } = segDisplaySet;
6711
- if (!segments || !referencedVolumeId) {
6712
- throw new Error('To create the segmentation from SEG displaySet, the displaySet should be loaded first, you can perform segDisplaySet.load() before calling this method.');
6711
+ if (!labelmapBufferArray || !referencedVolumeId) {
6712
+ throw new Error('No labelmapBufferArray or referencedVolumeId found for the SEG displaySet');
6713
6713
  }
6714
6714
 
6715
6715
  // if the labelmap doesn't exist, we need to create it first from the
@@ -6728,72 +6728,27 @@ class SegmentationService extends src/* PubSubService */.hC {
6728
6728
  sharedArrayBuffer: true
6729
6729
  }
6730
6730
  });
6731
- const [rows, columns] = derivedVolume.dimensions;
6732
6731
  const derivedVolumeScalarData = derivedVolume.getScalarData();
6733
- const {
6734
- imageIds
6735
- } = referencedVolume;
6736
- const sopUIDImageIdIndexMap = imageIds.reduce((acc, imageId, index) => {
6737
- const {
6738
- sopInstanceUid
6739
- } = esm.metaData.get('generalImageModule', imageId);
6740
- acc[sopInstanceUid] = index;
6741
- return acc;
6742
- }, {});
6743
- const numSegments = Object.keys(segments).length;
6744
- // Note: ideally we could use the TypedArray set method, but since each
6745
- // slice can have multiple segments, we need to loop over each slice and
6746
- // set the segment value for each segment.
6747
- let overlappingSegments = false;
6748
- const _segmentInfoUpdate = (segmentInfo, segmentIndex) => {
6732
+ const segmentsInfo = segDisplaySet.segMetadata.data;
6733
+ derivedVolumeScalarData.set(new Uint8Array(labelmapBufferArray[0]));
6734
+ segmentation.segments = segmentsInfo.map((segmentInfo, segmentIndex) => {
6735
+ if (segmentIndex === 0) {
6736
+ return;
6737
+ }
6749
6738
  const {
6750
- pixelData: segPixelData
6739
+ SegmentedPropertyCategoryCodeSequence,
6740
+ SegmentNumber,
6741
+ SegmentLabel,
6742
+ SegmentAlgorithmType,
6743
+ SegmentAlgorithmName,
6744
+ SegmentedPropertyTypeCodeSequence,
6745
+ rgba
6751
6746
  } = segmentInfo;
6752
- let segmentX = 0;
6753
- let segmentY = 0;
6754
- let segmentZ = 0;
6755
- let count = 0;
6756
- for (const [functionalGroupIndex, functionalGroup] of segmentInfo.functionalGroups.entries()) {
6757
- const {
6758
- ReferencedSOPInstanceUID
6759
- } = functionalGroup.DerivationImageSequence.SourceImageSequence;
6760
- const imageIdIndex = sopUIDImageIdIndexMap[ReferencedSOPInstanceUID];
6761
- if (imageIdIndex === -1) {
6762
- return;
6763
- }
6764
- const step = rows * columns;
6765
-
6766
- // we need a faster way to get the pixel data for the current
6767
- // functional group, which we use typed array view
6768
-
6769
- const functionGroupPixelData = new Uint8Array(segPixelData.buffer, functionalGroupIndex * step, step);
6770
- const functionalGroupStartIndex = imageIdIndex * step;
6771
- const functionalGroupEndIndex = (imageIdIndex + 1) * step;
6772
-
6773
- // Note: this for loop is not optimized, since DICOM SEG stores
6774
- // each segment as a separate labelmap so if there is a slice
6775
- // that has multiple segments, we will have to loop over each
6776
- // segment and we cannot use the TypedArray set method.
6777
- for (let i = functionalGroupStartIndex, j = 0; i < functionalGroupEndIndex; i++, j++) {
6778
- if (functionGroupPixelData[j] !== 0) {
6779
- if (derivedVolumeScalarData[i] !== 0) {
6780
- overlappingSegments = true;
6781
- }
6782
- derivedVolumeScalarData[i] = segmentIndex;
6783
-
6784
- // centroid calculations
6785
- segmentX += i % columns;
6786
- segmentY += Math.floor(i / columns) % rows;
6787
- segmentZ += Math.floor(i / (columns * rows));
6788
- count++;
6789
- }
6790
- }
6791
- }
6792
-
6793
- // centroid calculations
6794
- const x = Math.floor(segmentX / count);
6795
- const y = Math.floor(segmentY / count);
6796
- const z = Math.floor(segmentZ / count);
6747
+ const {
6748
+ x,
6749
+ y,
6750
+ z
6751
+ } = segDisplaySet.centroids.get(segmentIndex);
6797
6752
  const centerWorld = derivedVolume.imageData.indexToWorld([x, y, z]);
6798
6753
  segmentation.cachedStats = {
6799
6754
  ...segmentation.cachedStats,
@@ -6808,51 +6763,24 @@ class SegmentationService extends src/* PubSubService */.hC {
6808
6763
  }
6809
6764
  }
6810
6765
  };
6811
- const numInitialized = Object.keys(segmentation.cachedStats.segmentCenter).length;
6812
-
6813
- // Calculate percentage completed
6814
- const percentComplete = Math.round(numInitialized / numSegments * 100);
6815
- this._broadcastEvent(SegmentationService_EVENTS.SEGMENT_LOADING_COMPLETE, {
6816
- percentComplete,
6817
- numSegments: numSegments
6818
- });
6819
- };
6820
- const promiseArray = [];
6821
- for (const segmentIndex in segments) {
6822
- const segmentInfo = segments[segmentIndex];
6823
-
6824
- // Important: we need a non-blocking way to update the segmentation
6825
- // state, otherwise the UI will freeze and the user will not be able
6826
- // to interact with the app or progress bars will not be updated.
6827
- const promise = new Promise((resolve, reject) => {
6828
- setTimeout(() => {
6829
- _segmentInfoUpdate(segmentInfo, segmentIndex);
6830
- resolve();
6831
- }, 0);
6832
- });
6833
- promiseArray.push(promise);
6834
- }
6835
- await Promise.all(promiseArray);
6836
- segmentation.segmentCount = Object.keys(segments).length;
6837
- segmentation.segments = [null]; // segment 0
6838
-
6839
- Object.keys(segments).forEach(segmentIndex => {
6840
- const segmentInfo = segments[segmentIndex];
6841
- const segIndex = Number(segmentIndex);
6842
- segmentation.segments[segIndex] = {
6843
- label: segmentInfo.label || `Segment ${segIndex}`,
6844
- segmentIndex: Number(segmentIndex),
6845
- color: [segmentInfo.color[0], segmentInfo.color[1], segmentInfo.color[2]],
6846
- opacity: segmentInfo.color[3],
6766
+ return {
6767
+ label: SegmentLabel || `Segment ${SegmentNumber}`,
6768
+ segmentIndex: Number(SegmentNumber),
6769
+ category: SegmentedPropertyCategoryCodeSequence ? SegmentedPropertyCategoryCodeSequence.CodeMeaning : '',
6770
+ type: SegmentedPropertyTypeCodeSequence ? SegmentedPropertyTypeCodeSequence.CodeMeaning : '',
6771
+ algorithmType: SegmentAlgorithmType,
6772
+ algorithmName: SegmentAlgorithmName,
6773
+ color: rgba,
6774
+ opacity: 255,
6847
6775
  isVisible: true,
6848
6776
  isLocked: false
6849
6777
  };
6850
6778
  });
6779
+ segmentation.segmentCount = segmentsInfo.length - 1;
6851
6780
  segDisplaySet.isLoaded = true;
6852
6781
  this._broadcastEvent(SegmentationService_EVENTS.SEGMENTATION_LOADING_COMPLETE, {
6853
6782
  segmentationId,
6854
- segDisplaySet,
6855
- overlappingSegments
6783
+ segDisplaySet
6856
6784
  });
6857
6785
  return this.addOrUpdateSegmentation(segmentation, suppressEvents);
6858
6786
  }