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

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 (34) hide show
  1. package/dist/{204.bundle.2ca243271f4e2e584757.js → 150.bundle.7be19d85d4a4427162b9.js} +71 -93
  2. package/dist/{181.bundle.3c90dbb782b783e30fd8.js → 181.bundle.f4289d6b1c5d35831e37.js} +4 -31
  3. package/dist/{195.bundle.b56618d38bc184f8ef78.js → 202.bundle.ac1e5e25d4daf54581b1.js} +3697 -972
  4. package/dist/{236.bundle.a2c84f9a7c7c704ca47b.js → 236.bundle.b8ef36ef4c5e4e5c3d2b.js} +1 -1
  5. package/dist/{506.bundle.508c7a7018c0600c6683.js → 506.bundle.65256204be221475de80.js} +4 -2
  6. package/dist/{663.bundle.24e14d035c31bc67a1af.js → 663.bundle.5188b8ef1cd9a46373d9.js} +4 -4
  7. package/dist/{678.bundle.efd4a623a9d1bf0aa918.js → 678.bundle.5289463d7f419d56f8f1.js} +72 -104
  8. package/dist/{754.bundle.36f6f0f1c2cad1ffeadc.js → 754.bundle.8a16fc8ad21fe00c2e15.js} +11928 -7138
  9. package/dist/{774.bundle.e2cf44623c1268d8433d.js → 774.bundle.8ba82ee206266eb2da5e.js} +55 -33
  10. package/dist/{810.bundle.b3e2cf57e00d35a12f30.js → 810.bundle.b8f43b6b094a0720e994.js} +30 -7
  11. package/dist/{821.bundle.544ef0da9b9ec7c869fa.js → 821.bundle.fcfa6ec47f096018c0e9.js} +2 -2
  12. package/dist/{869.bundle.51e2fc87fab5cb911ec1.js → 869.bundle.6375669c18e0907b248d.js} +33 -11
  13. package/dist/{925.bundle.150debc1fe2cafa1e036.js → 925.bundle.a2f1103d968c53a2b8fb.js} +26 -20
  14. package/dist/{app.bundle.3dbe3a748e06d0a8d9fc.js → app.bundle.9c84ff949c1d4b8f555f.js} +46 -22
  15. package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
  16. package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
  17. package/dist/index.html +1 -1
  18. package/dist/{index.worker.17eee78bdafa44cbb47d.worker.js → index.worker.e62ecca63f1a2e124230.worker.js} +2 -2
  19. package/dist/index.worker.e62ecca63f1a2e124230.worker.js.map +1 -0
  20. package/dist/sw.js +1 -1
  21. package/package.json +19 -20
  22. package/dist/899.bundle.dc9c8c0729bf29173303.js +0 -4769
  23. package/dist/index.worker.17eee78bdafa44cbb47d.worker.js.map +0 -1
  24. /package/dist/{12.bundle.2c6b0156319ff8d39285.js → 12.bundle.e8a38369f1a90100362f.js} +0 -0
  25. /package/dist/{128.bundle.ede0e35b2fc74164f0b0.js → 128.bundle.c4be183e141214e291da.js} +0 -0
  26. /package/dist/{281.bundle.399fb8e0048492f2f14d.js → 281.bundle.d394ad2bcce3cf7b325f.js} +0 -0
  27. /package/dist/{30.bundle.2991067a1b7d252441ce.js → 30.bundle.21b1175bc35138643825.js} +0 -0
  28. /package/dist/{348.bundle.226b1d5d97c0ea05a302.js → 348.bundle.fdc18553ec7c1b4f6a80.js} +0 -0
  29. /package/dist/{359.bundle.e4810515717797e10a0d.js → 359.bundle.f3867a42352f85e846bb.js} +0 -0
  30. /package/dist/{378.bundle.3ddca21119a8f6a02e90.js → 378.bundle.b7a073e9ed3fce6e27a5.js} +0 -0
  31. /package/dist/{410.bundle.4794b1ed5caa5c44d8ab.js → 410.bundle.8ae97aeddb3375a6d6c6.js} +0 -0
  32. /package/dist/{782.bundle.c113ddc2ec70ec2ccbea.js → 782.bundle.0b55dd2b0e7c80102eec.js} +0 -0
  33. /package/dist/{814.bundle.ce16dd6b97d682341a9e.js → 814.bundle.9f6f3b71096482162688.js} +0 -0
  34. /package/dist/{822.bundle.83c544a4283056f1331d.js → 822.bundle.34b66f1c1b27e7884df7.js} +0 -0
@@ -1,6 +1,6 @@
1
- (self["webpackChunk"] = self["webpackChunk"] || []).push([[204],{
1
+ (self["webpackChunk"] = self["webpackChunk"] || []).push([[150],{
2
2
 
3
- /***/ 65256:
3
+ /***/ 48228:
4
4
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
5
5
 
6
6
  "use strict";
@@ -22,21 +22,33 @@ const SOPClassHandlerId = `${id}.sopClassHandlerModule.${SOPClassHandlerName}`;
22
22
 
23
23
  // EXTERNAL MODULE: ../../../node_modules/react/index.js
24
24
  var react = __webpack_require__(43001);
25
- // EXTERNAL MODULE: ../../../node_modules/@kitware/vtk.js/Common/Core/Math.js
26
- var Core_Math = __webpack_require__(32899);
27
25
  // EXTERNAL MODULE: ../../core/src/index.ts + 103 modules
28
26
  var src = __webpack_require__(20599);
27
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 337 modules
28
+ var esm = __webpack_require__(45754);
29
+ // EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/adapters.es.js
30
+ var adapters_es = __webpack_require__(91202);
29
31
  // EXTERNAL MODULE: ../../../node_modules/dcmjs/build/dcmjs.es.js
30
32
  var dcmjs_es = __webpack_require__(67540);
33
+ ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/utils/dicomlabToRGB.ts
34
+
35
+
36
+ /**
37
+ * Converts a CIELAB color to an RGB color using the dcmjs library.
38
+ * @param cielab - The CIELAB color to convert.
39
+ * @returns The RGB color as an array of three integers between 0 and 255.
40
+ */
41
+ function dicomlabToRGB(cielab) {
42
+ const rgb = dcmjs_es["default"].data.Colors.dicomlab2RGB(cielab).map(x => Math.round(x * 255));
43
+ return rgb;
44
+ }
45
+
31
46
  ;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/getSopClassHandlerModule.js
32
47
 
33
48
 
34
49
 
35
50
 
36
- const {
37
- DicomMessage,
38
- DicomMetaDictionary
39
- } = dcmjs_es["default"].data;
51
+
40
52
  const sopClassUids = ['1.2.840.10008.5.1.4.1.1.66.4'];
41
53
  let loadPromises = {};
42
54
  function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager) {
@@ -130,8 +142,12 @@ function _load(segDisplaySet, servicesManager, extensionManager, headers) {
130
142
  // and also return the same promise to any other callers.
131
143
  loadPromises[SOPInstanceUID] = new Promise(async (resolve, reject) => {
132
144
  if (!segDisplaySet.segments || Object.keys(segDisplaySet.segments).length === 0) {
133
- const segments = await _loadSegments(extensionManager, segDisplaySet, headers);
134
- segDisplaySet.segments = segments;
145
+ await _loadSegments({
146
+ extensionManager,
147
+ servicesManager,
148
+ segDisplaySet,
149
+ headers
150
+ });
135
151
  }
136
152
  const suppressEvents = true;
137
153
  segmentationService.createSegmentationForSEGDisplaySet(segDisplaySet, null, suppressEvents).then(() => {
@@ -144,101 +160,62 @@ function _load(segDisplaySet, servicesManager, extensionManager, headers) {
144
160
  });
145
161
  return loadPromises[SOPInstanceUID];
146
162
  }
147
- async function _loadSegments(extensionManager, segDisplaySet, headers) {
163
+ async function _loadSegments(_ref2) {
164
+ let {
165
+ extensionManager,
166
+ servicesManager,
167
+ segDisplaySet,
168
+ headers
169
+ } = _ref2;
148
170
  const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.common');
171
+ const {
172
+ segmentationService
173
+ } = servicesManager.services;
149
174
  const {
150
175
  dicomLoaderService
151
176
  } = utilityModule.exports;
152
- const segArrayBuffer = await dicomLoaderService.findDicomDataPromise(segDisplaySet, null, headers);
153
- const dicomData = DicomMessage.readFile(segArrayBuffer);
154
- const dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
155
- dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
156
- if (!Array.isArray(dataset.SegmentSequence)) {
157
- dataset.SegmentSequence = [dataset.SegmentSequence];
177
+ const arrayBuffer = await dicomLoaderService.findDicomDataPromise(segDisplaySet, null, headers);
178
+ const cachedReferencedVolume = esm.cache.getVolume(segDisplaySet.referencedVolumeId);
179
+ if (!cachedReferencedVolume) {
180
+ throw new Error('Referenced Volume is missing for the SEG, and stack viewport SEG is not supported yet');
158
181
  }
159
- const segments = _getSegments(dataset);
160
- return segments;
182
+ const {
183
+ imageIds
184
+ } = cachedReferencedVolume;
185
+
186
+ // Todo: what should be defaults here
187
+ const tolerance = 0.001;
188
+ const skipOverlapping = true;
189
+ esm.eventTarget.addEventListener(adapters_es/* Enums */.Yb.Events.SEGMENTATION_LOAD_PROGRESS, evt => {
190
+ const {
191
+ percentComplete
192
+ } = evt.detail;
193
+ segmentationService._broadcastEvent(segmentationService.EVENTS.SEGMENT_LOADING_COMPLETE, {
194
+ percentComplete
195
+ });
196
+ });
197
+ const results = await adapters_es/* adaptersSEG */.ok.Cornerstone3D.Segmentation.generateToolState(imageIds, arrayBuffer, esm.metaData, {
198
+ skipOverlapping,
199
+ tolerance,
200
+ eventTarget: esm.eventTarget,
201
+ triggerEvent: esm.triggerEvent
202
+ });
203
+ results.segMetadata.data.forEach((data, i) => {
204
+ if (i > 0) {
205
+ data.rgba = dicomlabToRGB(data.RecommendedDisplayCIELabValue);
206
+ }
207
+ });
208
+ Object.assign(segDisplaySet, results);
161
209
  }
162
210
  function _segmentationExists(segDisplaySet, segmentationService) {
163
211
  // This should be abstracted with the CornerstoneCacheService
164
212
  return segmentationService.getSegmentation(segDisplaySet.displaySetInstanceUID);
165
213
  }
166
- function _getPixelData(dataset, segments) {
167
- let frameSize = Math.ceil(dataset.Rows * dataset.Columns / 8);
168
- let nextOffset = 0;
169
- Object.keys(segments).forEach(segmentKey => {
170
- const segment = segments[segmentKey];
171
- segment.numberOfFrames = segment.functionalGroups.length;
172
- segment.size = segment.numberOfFrames * frameSize;
173
- segment.offset = nextOffset;
174
- nextOffset = segment.offset + segment.size;
175
- const packedSegment = dataset.PixelData[0].slice(segment.offset, nextOffset);
176
- segment.pixelData = dcmjs_es["default"].data.BitArray.unpack(packedSegment);
177
- segment.geometry = geometryFromFunctionalGroups(dataset, segment.functionalGroups);
178
- });
179
- return segments;
180
- }
181
- function geometryFromFunctionalGroups(dataset, perFrame) {
182
- let pixelMeasures = dataset.SharedFunctionalGroupsSequence.PixelMeasuresSequence;
183
- let planeOrientation = dataset.SharedFunctionalGroupsSequence.PlaneOrientationSequence;
184
- let planePosition = perFrame[0].PlanePositionSequence; // TODO: assume sorted frames!
185
-
186
- const geometry = {};
187
-
188
- // NB: DICOM PixelSpacing is defined as Row then Column,
189
- // unlike ImageOrientationPatient
190
- let spacingBetweenSlices = pixelMeasures.SpacingBetweenSlices;
191
- if (!spacingBetweenSlices) {
192
- if (pixelMeasures.SliceThickness) {
193
- console.log('Using SliceThickness as SpacingBetweenSlices');
194
- spacingBetweenSlices = pixelMeasures.SliceThickness;
195
- }
196
- }
197
- geometry.spacing = [pixelMeasures.PixelSpacing[1], pixelMeasures.PixelSpacing[0], spacingBetweenSlices].map(Number);
198
- geometry.dimensions = [dataset.Columns, dataset.Rows, perFrame.length].map(Number);
199
- let orientation = planeOrientation.ImageOrientationPatient.map(Number);
200
- const columnStepToPatient = orientation.slice(0, 3);
201
- const rowStepToPatient = orientation.slice(3, 6);
202
- geometry.planeNormal = [];
203
- Core_Math/* default.cross */.ZP.cross(columnStepToPatient, rowStepToPatient, geometry.planeNormal);
204
- let firstPosition = perFrame[0].PlanePositionSequence.ImagePositionPatient.map(Number);
205
- let lastPosition = perFrame[perFrame.length - 1].PlanePositionSequence.ImagePositionPatient.map(Number);
206
- geometry.sliceStep = [];
207
- Core_Math/* default.subtract */.ZP.subtract(lastPosition, firstPosition, geometry.sliceStep);
208
- Core_Math/* default.normalize */.ZP.normalize(geometry.sliceStep);
209
- geometry.direction = columnStepToPatient.concat(rowStepToPatient).concat(geometry.sliceStep);
210
- geometry.origin = planePosition.ImagePositionPatient.map(Number);
211
- return geometry;
212
- }
213
- function _getSegments(dataset) {
214
- const segments = {};
215
- dataset.SegmentSequence.forEach(segment => {
216
- const cielab = segment.RecommendedDisplayCIELabValue;
217
- const rgba = dcmjs_es["default"].data.Colors.dicomlab2RGB(cielab).map(x => Math.round(x * 255));
218
- rgba.push(255);
219
- const segmentNumber = segment.SegmentNumber;
220
- segments[segmentNumber] = {
221
- color: rgba,
222
- functionalGroups: [],
223
- offset: null,
224
- size: null,
225
- pixelData: null,
226
- label: segment.SegmentLabel
227
- };
228
- });
229
-
230
- // make a list of functional groups per segment
231
- dataset.PerFrameFunctionalGroupsSequence.forEach(functionalGroup => {
232
- const segmentNumber = functionalGroup.SegmentIdentificationSequence.ReferencedSegmentNumber;
233
- segments[segmentNumber].functionalGroups.push(functionalGroup);
234
- });
235
- return _getPixelData(dataset, segments);
236
- }
237
- function getSopClassHandlerModule(_ref2) {
214
+ function getSopClassHandlerModule(_ref3) {
238
215
  let {
239
216
  servicesManager,
240
217
  extensionManager
241
- } = _ref2;
218
+ } = _ref3;
242
219
  const getDisplaySetsFromSeries = instances => {
243
220
  return _getDisplaySetsFromSeries(instances, servicesManager, extensionManager);
244
221
  };
@@ -654,7 +631,8 @@ const extension = {
654
631
  const ExtendedOHIFCornerstoneSEGViewport = props => {
655
632
  return /*#__PURE__*/react.createElement(OHIFCornerstoneSEGViewport, _extends({
656
633
  servicesManager: servicesManager,
657
- extensionManager: extensionManager
634
+ extensionManager: extensionManager,
635
+ commandsManager: commandsManager
658
636
  }, props));
659
637
  };
660
638
  return [{
@@ -1132,6 +1132,7 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1132
1132
  viewportOptions,
1133
1133
  displaySetOptions,
1134
1134
  servicesManager,
1135
+ commandsManager,
1135
1136
  onElementEnabled,
1136
1137
  onElementDisabled,
1137
1138
  isJumpToMeasurementDisabled,
@@ -1168,35 +1169,6 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1168
1169
  setImageScrollBarHeight();
1169
1170
  }
1170
1171
  }, [elementRef]);
1171
- const storePresentation = () => {
1172
- const currentPresentation = cornerstoneViewportService.getPresentation(viewportIndex);
1173
- if (!currentPresentation || !currentPresentation.presentationIds) return;
1174
- const {
1175
- lutPresentationStore,
1176
- positionPresentationStore
1177
- } = stateSyncService.getState();
1178
- const {
1179
- presentationIds
1180
- } = currentPresentation;
1181
- const {
1182
- lutPresentationId,
1183
- positionPresentationId
1184
- } = presentationIds || {};
1185
- const storeState = {};
1186
- if (lutPresentationId) {
1187
- storeState.lutPresentationStore = {
1188
- ...lutPresentationStore,
1189
- [lutPresentationId]: currentPresentation
1190
- };
1191
- }
1192
- if (positionPresentationId) {
1193
- storeState.positionPresentationStore = {
1194
- ...positionPresentationStore,
1195
- [positionPresentationId]: currentPresentation
1196
- };
1197
- }
1198
- stateSyncService.store(storeState);
1199
- };
1200
1172
  const cleanUpServices = (0,react.useCallback)(() => {
1201
1173
  const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
1202
1174
  if (!viewportInfo) {
@@ -1237,7 +1209,9 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1237
1209
  dist_esm.eventTarget.addEventListener(dist_esm.Enums.Events.ELEMENT_ENABLED, elementEnabledHandler);
1238
1210
  setImageScrollBarHeight();
1239
1211
  return () => {
1240
- storePresentation();
1212
+ commandsManager.runCommand('storePresentation', {
1213
+ viewportIndex
1214
+ });
1241
1215
  cleanUpServices();
1242
1216
  const viewportInfo = cornerstoneViewportService.getViewportInfoByIndex(viewportIndex);
1243
1217
  cornerstoneViewportService.disableElement(viewportIndex);
@@ -1329,7 +1303,6 @@ const OHIFCornerstoneViewport = /*#__PURE__*/react.memo(props => {
1329
1303
  unsubscribeFromJumpToMeasurementEvents();
1330
1304
  };
1331
1305
  }, [displaySets, elementRef, viewportIndex]);
1332
- console.debug('OHIFCornerstoneViewport rendering');
1333
1306
  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("div", {
1334
1307
  className: "viewport-wrapper"
1335
1308
  }, /*#__PURE__*/react.createElement(index_esm/* default */.ZP, {