@ohif/app 3.7.0-beta.6 → 3.7.0-beta.61
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/{917.bundle.57d86a03581296d2ee00.js → 12.bundle.c54b94d07d31f5716eb1.js} +6 -6
- package/dist/{295.bundle.957b1159fec14b9199a1.js → 125.bundle.1ae4c6313c31cd0502cc.js} +4 -4
- package/dist/{208.bundle.182a2d2827d0d8afce33.js → 128.bundle.b0a7aa9ae66c094c40b5.js} +6 -6
- package/dist/{616.bundle.0ab47fe1619e9ed278b9.js → 150.bundle.2075342642eddc35e924.js} +155 -104
- package/dist/{351.bundle.0742237651aef9694a65.js → 181.bundle.70c4340cbe29bd14aafc.js} +147 -129
- package/dist/{351.css → 181.css} +1 -1
- package/dist/{606.bundle.5d876f5f3dd8287f0a28.js → 202.bundle.8007de18c96daaceca7f.js} +1459 -811
- package/dist/{926.bundle.dbc9d0e591cb9217fda2.js → 220.bundle.f7e1c96c94245e70f2be.js} +990 -400
- package/dist/{664.bundle.09abae984223969d1bde.js → 23.bundle.e008ad788170f2ed5569.js} +5 -6
- package/dist/{976.bundle.d6c34ae072976b3d9c29.js → 236.bundle.4aab776fb3e7654f1f0c.js} +38 -24
- package/dist/{55.bundle.550a823e75eb608e8d5e.js → 250.bundle.0d497b1b8afb0cbbe02f.js} +37 -25
- package/dist/{973.bundle.1a5e3125446a7f22729b.js → 281.bundle.c35a76364b385ee72bfd.js} +18 -14
- package/dist/{744.bundle.2282095988d3a22f17eb.js → 30.bundle.777231cf20f408db12f1.js} +128 -119
- package/dist/{192.bundle.2ae9e68532962089836f.js → 348.bundle.be4810ac9ac67cd7d8c5.js} +18 -14
- package/dist/{404.bundle.dd49183aaac4294b003b.js → 359.bundle.d723d31672f7fe575501.js} +13 -19
- package/dist/{82.bundle.0b649d84e313e1928590.js → 362.bundle.9d4d81eab3e31314a932.js} +1274 -287
- package/dist/{50.bundle.5eb258e72b39b2216560.js → 378.bundle.3069476ee6501c83ad44.js} +10 -8
- package/dist/{790.bundle.d362d0c4b8cdf0493e73.js → 410.bundle.f973e56e3a7d8165d87a.js} +6 -6
- package/dist/{151.bundle.31ea35044218837bf73f.js → 417.bundle.720dc8f3a6e99f378aa9.js} +9 -11
- package/dist/{569.bundle.21f8ad57c06a210448b5.js → 451.bundle.a573877dff7b43382138.js} +63 -81
- package/dist/{581.bundle.dc6197189f7c88c27d4c.js → 471.bundle.e9ecd59867a19e323234.js} +44 -72
- package/dist/{199.bundle.ec85a189dbc481dc980b.js → 506.bundle.8b2c661a99271b31663c.js} +79 -10
- package/dist/{935.bundle.deeffff0e4f7b528e3c3.js → 604.bundle.a51f83e64004bca5f497.js} +2 -3
- package/dist/{984.bundle.e48272bf3c41816e19fc.js → 663.bundle.80190c7364dd4095010b.js} +67 -37
- package/dist/{531.bundle.2a82fb1d69e5b57cc72b.js → 677.bundle.ec5f2b4707db33bd4d8e.js} +731 -447
- package/dist/{707.bundle.7fd06edc9852075913ec.js → 678.bundle.adc83cac2fd0ea4f19f2.js} +209 -216
- package/dist/{205.bundle.b5a473c200dcf2bbcdb4.js → 686.bundle.70565410179f1e7d22e6.js} +4 -4
- package/dist/{331.bundle.bd0c13931a21d53086c9.js → 754.bundle.1884c227b361aefa66b4.js} +12383 -7530
- package/dist/{728.bundle.d13856835357400fef82.js → 774.bundle.8ba82ee206266eb2da5e.js} +90 -63
- package/dist/{381.bundle.0905e683605fcbc0895f.js → 775.bundle.2285e7e0e67878948c0d.js} +16 -16
- package/dist/{283.bundle.426df6a7412bc2932775.js → 782.bundle.fc7e353f1dce39953254.js} +57 -26
- package/dist/{642.bundle.0a98bca321a959b489f2.js → 814.bundle.9218ffc353490526c320.js} +6 -6
- package/dist/{799.bundle.758558e64147e5aad612.js → 822.bundle.99bf759483aa32086346.js} +66 -17
- package/dist/{953.bundle.3b0189ebc11cf0946f18.js → 886.bundle.c5a6b96760ea43352375.js} +17 -11
- package/dist/{270.bundle.4564621556b0f963a004.js → 925.bundle.7b06521fc75e0d3f71c3.js} +770 -607
- package/dist/945.min.worker.js +1 -1
- package/dist/945.min.worker.js.map +1 -1
- package/dist/app-config.js +7 -7
- package/dist/{app.bundle.3f8ce0b8b48882f2ff10.js → app.bundle.2a91a8b9b9e61b42cc21.js} +70344 -68432
- package/dist/app.bundle.css +9 -9
- package/dist/cornerstoneDICOMImageLoader.min.js +1 -1
- package/dist/cornerstoneDICOMImageLoader.min.js.map +1 -1
- package/dist/{dicom-microscopy-viewer.bundle.aa60bdf008c32c39cfd7.js → dicom-microscopy-viewer.bundle.2c146384eb9466d02ff8.js} +5 -4
- package/dist/google.js +7 -5
- package/dist/index.html +1 -1
- package/dist/{index.worker.1c69152d710fa7b84bce.worker.js → index.worker.e62ecca63f1a2e124230.worker.js} +2 -2
- package/dist/index.worker.e62ecca63f1a2e124230.worker.js.map +1 -0
- package/dist/sw.js +1 -1
- package/package.json +19 -20
- package/dist/780.bundle.fd0f13dc92e9caa0581e.js +0 -4769
- package/dist/index.worker.1c69152d710fa7b84bce.worker.js.map +0 -1
- /package/dist/{55.css → 250.css} +0 -0
- /package/dist/{806.css → 579.css} +0 -0
- /package/dist/{707.css → 678.css} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
(
|
|
2
|
+
(self["webpackChunk"] = self["webpackChunk"] || []).push([[12],{
|
|
3
3
|
|
|
4
|
-
/***/
|
|
4
|
+
/***/ 85012:
|
|
5
5
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6
6
|
|
|
7
7
|
// ESM COMPAT FLAG
|
|
@@ -13,7 +13,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
13
13
|
});
|
|
14
14
|
|
|
15
15
|
// EXTERNAL MODULE: ../../../node_modules/react/index.js
|
|
16
|
-
var react = __webpack_require__(
|
|
16
|
+
var react = __webpack_require__(43001);
|
|
17
17
|
;// CONCATENATED MODULE: ../../../extensions/dicom-video/package.json
|
|
18
18
|
const package_namespaceObject = JSON.parse('{"u2":"@ohif/extension-dicom-video"}');
|
|
19
19
|
;// CONCATENATED MODULE: ../../../extensions/dicom-video/src/id.js
|
|
@@ -21,8 +21,8 @@ const package_namespaceObject = JSON.parse('{"u2":"@ohif/extension-dicom-video"}
|
|
|
21
21
|
const id = package_namespaceObject.u2;
|
|
22
22
|
const SOPClassHandlerId = `${id}.sopClassHandlerModule.dicom-video`;
|
|
23
23
|
|
|
24
|
-
// EXTERNAL MODULE: ../../core/src/index.ts +
|
|
25
|
-
var src = __webpack_require__(
|
|
24
|
+
// EXTERNAL MODULE: ../../core/src/index.ts + 106 modules
|
|
25
|
+
var src = __webpack_require__(38930);
|
|
26
26
|
;// CONCATENATED MODULE: ../../../extensions/dicom-video/src/getSopClassHandlerModule.js
|
|
27
27
|
|
|
28
28
|
|
|
@@ -127,7 +127,7 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
|
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
const Component = /*#__PURE__*/react.lazy(() => {
|
|
130
|
-
return __webpack_require__.e(/* import() */
|
|
130
|
+
return __webpack_require__.e(/* import() */ 686).then(__webpack_require__.bind(__webpack_require__, 39686));
|
|
131
131
|
});
|
|
132
132
|
const OHIFCornerstoneVideoViewport = props => {
|
|
133
133
|
return /*#__PURE__*/react.createElement(react.Suspense, {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
(
|
|
2
|
+
(self["webpackChunk"] = self["webpackChunk"] || []).push([[125],{
|
|
3
3
|
|
|
4
|
-
/***/
|
|
4
|
+
/***/ 39125:
|
|
5
5
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6
6
|
|
|
7
7
|
__webpack_require__.r(__webpack_exports__);
|
|
8
8
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
9
9
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
10
10
|
/* harmony export */ });
|
|
11
|
-
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(
|
|
12
|
-
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(
|
|
11
|
+
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43001);
|
|
12
|
+
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3827);
|
|
13
13
|
/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);
|
|
14
14
|
|
|
15
15
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
(
|
|
2
|
+
(self["webpackChunk"] = self["webpackChunk"] || []).push([[128],{
|
|
3
3
|
|
|
4
|
-
/***/
|
|
4
|
+
/***/ 59128:
|
|
5
5
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6
6
|
|
|
7
7
|
// ESM COMPAT FLAG
|
|
@@ -12,10 +12,10 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
12
12
|
"default": () => (/* binding */ basic_test_mode_src)
|
|
13
13
|
});
|
|
14
14
|
|
|
15
|
-
// EXTERNAL MODULE: ../../core/src/index.ts +
|
|
16
|
-
var src = __webpack_require__(
|
|
17
|
-
// EXTERNAL MODULE: ../../ui/src/index.js +
|
|
18
|
-
var ui_src = __webpack_require__(
|
|
15
|
+
// EXTERNAL MODULE: ../../core/src/index.ts + 106 modules
|
|
16
|
+
var src = __webpack_require__(38930);
|
|
17
|
+
// EXTERNAL MODULE: ../../ui/src/index.js + 458 modules
|
|
18
|
+
var ui_src = __webpack_require__(33570);
|
|
19
19
|
;// CONCATENATED MODULE: ../../../modes/basic-test-mode/src/toolbarButtons.js
|
|
20
20
|
// TODO: torn, can either bake this here; or have to create a whole new button type
|
|
21
21
|
// Only ways that you can pass in a custom React component for render :l
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
(
|
|
1
|
+
(self["webpackChunk"] = self["webpackChunk"] || []).push([[150],{
|
|
2
2
|
|
|
3
|
-
/***/
|
|
3
|
+
/***/ 48228:
|
|
4
4
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
@@ -9,7 +9,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
9
9
|
|
|
10
10
|
// EXPORTS
|
|
11
11
|
__webpack_require__.d(__webpack_exports__, {
|
|
12
|
-
"default": () => (/* binding */ cornerstone_dicom_seg_src)
|
|
12
|
+
"default": () => (/* binding */ cornerstone_dicom_seg_src),
|
|
13
|
+
hydrateSEGDisplaySet: () => (/* reexport */ _hydrateSEG/* default */.Z)
|
|
13
14
|
});
|
|
14
15
|
|
|
15
16
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/package.json
|
|
@@ -21,22 +22,34 @@ const SOPClassHandlerName = 'dicom-seg';
|
|
|
21
22
|
const SOPClassHandlerId = `${id}.sopClassHandlerModule.${SOPClassHandlerName}`;
|
|
22
23
|
|
|
23
24
|
// EXTERNAL MODULE: ../../../node_modules/react/index.js
|
|
24
|
-
var react = __webpack_require__(
|
|
25
|
-
// EXTERNAL MODULE:
|
|
26
|
-
var
|
|
27
|
-
// EXTERNAL MODULE:
|
|
28
|
-
var
|
|
25
|
+
var react = __webpack_require__(43001);
|
|
26
|
+
// EXTERNAL MODULE: ../../core/src/index.ts + 106 modules
|
|
27
|
+
var src = __webpack_require__(38930);
|
|
28
|
+
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/core/dist/esm/index.js + 337 modules
|
|
29
|
+
var esm = __webpack_require__(45754);
|
|
30
|
+
// EXTERNAL MODULE: ../../../node_modules/@cornerstonejs/adapters/dist/adapters.es.js
|
|
31
|
+
var adapters_es = __webpack_require__(91202);
|
|
29
32
|
// EXTERNAL MODULE: ../../../node_modules/dcmjs/build/dcmjs.es.js
|
|
30
|
-
var dcmjs_es = __webpack_require__(
|
|
33
|
+
var dcmjs_es = __webpack_require__(67540);
|
|
34
|
+
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/utils/dicomlabToRGB.ts
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Converts a CIELAB color to an RGB color using the dcmjs library.
|
|
39
|
+
* @param cielab - The CIELAB color to convert.
|
|
40
|
+
* @returns The RGB color as an array of three integers between 0 and 255.
|
|
41
|
+
*/
|
|
42
|
+
function dicomlabToRGB(cielab) {
|
|
43
|
+
const rgb = dcmjs_es["default"].data.Colors.dicomlab2RGB(cielab).map(x => Math.round(x * 255));
|
|
44
|
+
return rgb;
|
|
45
|
+
}
|
|
46
|
+
|
|
31
47
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/getSopClassHandlerModule.js
|
|
32
48
|
|
|
33
49
|
|
|
34
50
|
|
|
35
51
|
|
|
36
|
-
|
|
37
|
-
DicomMessage,
|
|
38
|
-
DicomMetaDictionary
|
|
39
|
-
} = dcmjs_es["default"].data;
|
|
52
|
+
|
|
40
53
|
const sopClassUids = ['1.2.840.10008.5.1.4.1.1.66.4'];
|
|
41
54
|
let loadPromises = {};
|
|
42
55
|
function _getDisplaySetsFromSeries(instances, servicesManager, extensionManager) {
|
|
@@ -130,8 +143,12 @@ function _load(segDisplaySet, servicesManager, extensionManager, headers) {
|
|
|
130
143
|
// and also return the same promise to any other callers.
|
|
131
144
|
loadPromises[SOPInstanceUID] = new Promise(async (resolve, reject) => {
|
|
132
145
|
if (!segDisplaySet.segments || Object.keys(segDisplaySet.segments).length === 0) {
|
|
133
|
-
|
|
134
|
-
|
|
146
|
+
await _loadSegments({
|
|
147
|
+
extensionManager,
|
|
148
|
+
servicesManager,
|
|
149
|
+
segDisplaySet,
|
|
150
|
+
headers
|
|
151
|
+
});
|
|
135
152
|
}
|
|
136
153
|
const suppressEvents = true;
|
|
137
154
|
segmentationService.createSegmentationForSEGDisplaySet(segDisplaySet, null, suppressEvents).then(() => {
|
|
@@ -144,101 +161,62 @@ function _load(segDisplaySet, servicesManager, extensionManager, headers) {
|
|
|
144
161
|
});
|
|
145
162
|
return loadPromises[SOPInstanceUID];
|
|
146
163
|
}
|
|
147
|
-
async function _loadSegments(
|
|
164
|
+
async function _loadSegments(_ref2) {
|
|
165
|
+
let {
|
|
166
|
+
extensionManager,
|
|
167
|
+
servicesManager,
|
|
168
|
+
segDisplaySet,
|
|
169
|
+
headers
|
|
170
|
+
} = _ref2;
|
|
148
171
|
const utilityModule = extensionManager.getModuleEntry('@ohif/extension-cornerstone.utilityModule.common');
|
|
172
|
+
const {
|
|
173
|
+
segmentationService
|
|
174
|
+
} = servicesManager.services;
|
|
149
175
|
const {
|
|
150
176
|
dicomLoaderService
|
|
151
177
|
} = utilityModule.exports;
|
|
152
|
-
const
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if (!Array.isArray(dataset.SegmentSequence)) {
|
|
157
|
-
dataset.SegmentSequence = [dataset.SegmentSequence];
|
|
178
|
+
const arrayBuffer = await dicomLoaderService.findDicomDataPromise(segDisplaySet, null, headers);
|
|
179
|
+
const cachedReferencedVolume = esm.cache.getVolume(segDisplaySet.referencedVolumeId);
|
|
180
|
+
if (!cachedReferencedVolume) {
|
|
181
|
+
throw new Error('Referenced Volume is missing for the SEG, and stack viewport SEG is not supported yet');
|
|
158
182
|
}
|
|
159
|
-
const
|
|
160
|
-
|
|
183
|
+
const {
|
|
184
|
+
imageIds
|
|
185
|
+
} = cachedReferencedVolume;
|
|
186
|
+
|
|
187
|
+
// Todo: what should be defaults here
|
|
188
|
+
const tolerance = 0.001;
|
|
189
|
+
const skipOverlapping = true;
|
|
190
|
+
esm.eventTarget.addEventListener(adapters_es/* Enums */.Yb.Events.SEGMENTATION_LOAD_PROGRESS, evt => {
|
|
191
|
+
const {
|
|
192
|
+
percentComplete
|
|
193
|
+
} = evt.detail;
|
|
194
|
+
segmentationService._broadcastEvent(segmentationService.EVENTS.SEGMENT_LOADING_COMPLETE, {
|
|
195
|
+
percentComplete
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
const results = await adapters_es/* adaptersSEG */.ok.Cornerstone3D.Segmentation.generateToolState(imageIds, arrayBuffer, esm.metaData, {
|
|
199
|
+
skipOverlapping,
|
|
200
|
+
tolerance,
|
|
201
|
+
eventTarget: esm.eventTarget,
|
|
202
|
+
triggerEvent: esm.triggerEvent
|
|
203
|
+
});
|
|
204
|
+
results.segMetadata.data.forEach((data, i) => {
|
|
205
|
+
if (i > 0) {
|
|
206
|
+
data.rgba = dicomlabToRGB(data.RecommendedDisplayCIELabValue);
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
Object.assign(segDisplaySet, results);
|
|
161
210
|
}
|
|
162
211
|
function _segmentationExists(segDisplaySet, segmentationService) {
|
|
163
212
|
// This should be abstracted with the CornerstoneCacheService
|
|
164
213
|
return segmentationService.getSegmentation(segDisplaySet.displaySetInstanceUID);
|
|
165
214
|
}
|
|
166
|
-
function
|
|
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) {
|
|
215
|
+
function getSopClassHandlerModule(_ref3) {
|
|
238
216
|
let {
|
|
239
217
|
servicesManager,
|
|
240
218
|
extensionManager
|
|
241
|
-
} =
|
|
219
|
+
} = _ref3;
|
|
242
220
|
const getDisplaySetsFromSeries = instances => {
|
|
243
221
|
return _getDisplaySetsFromSeries(instances, servicesManager, extensionManager);
|
|
244
222
|
};
|
|
@@ -250,10 +228,10 @@ function getSopClassHandlerModule(_ref2) {
|
|
|
250
228
|
}
|
|
251
229
|
/* harmony default export */ const src_getSopClassHandlerModule = (getSopClassHandlerModule);
|
|
252
230
|
// EXTERNAL MODULE: ../../../node_modules/prop-types/index.js
|
|
253
|
-
var prop_types = __webpack_require__(
|
|
231
|
+
var prop_types = __webpack_require__(3827);
|
|
254
232
|
var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
|
|
255
|
-
// EXTERNAL MODULE: ../../ui/src/index.js +
|
|
256
|
-
var ui_src = __webpack_require__(
|
|
233
|
+
// EXTERNAL MODULE: ../../ui/src/index.js + 458 modules
|
|
234
|
+
var ui_src = __webpack_require__(33570);
|
|
257
235
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/panels/callInputDialog.tsx
|
|
258
236
|
|
|
259
237
|
|
|
@@ -338,14 +316,17 @@ function callInputDialog(uiDialogService, label, callback) {
|
|
|
338
316
|
}
|
|
339
317
|
}
|
|
340
318
|
/* harmony default export */ const panels_callInputDialog = (callInputDialog);
|
|
319
|
+
// EXTERNAL MODULE: ./state/index.js + 1 modules
|
|
320
|
+
var state = __webpack_require__(62657);
|
|
341
321
|
// EXTERNAL MODULE: ../../../node_modules/react-i18next/dist/es/index.js + 15 modules
|
|
342
|
-
var es = __webpack_require__(
|
|
322
|
+
var es = __webpack_require__(69190);
|
|
343
323
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/panels/PanelSegmentation.tsx
|
|
344
324
|
|
|
345
325
|
|
|
346
326
|
|
|
347
327
|
|
|
348
328
|
|
|
329
|
+
|
|
349
330
|
function PanelSegmentation(_ref) {
|
|
350
331
|
let {
|
|
351
332
|
servicesManager,
|
|
@@ -355,6 +336,8 @@ function PanelSegmentation(_ref) {
|
|
|
355
336
|
segmentationService,
|
|
356
337
|
uiDialogService
|
|
357
338
|
} = servicesManager.services;
|
|
339
|
+
const [appConfig] = (0,state/* useAppConfig */.M)();
|
|
340
|
+
const disableEditing = appConfig?.disableEditing;
|
|
358
341
|
const {
|
|
359
342
|
t
|
|
360
343
|
} = (0,es/* useTranslation */.$G)('PanelSegmentation');
|
|
@@ -496,6 +479,7 @@ function PanelSegmentation(_ref) {
|
|
|
496
479
|
onSegmentationEdit: onSegmentationEdit,
|
|
497
480
|
onSegmentClick: onSegmentClick,
|
|
498
481
|
onSegmentEdit: onSegmentEdit,
|
|
482
|
+
disableEditing: disableEditing,
|
|
499
483
|
onSegmentColorClick: onSegmentColorClick,
|
|
500
484
|
onSegmentDelete: onSegmentDelete,
|
|
501
485
|
onToggleSegmentVisibility: onToggleSegmentVisibility,
|
|
@@ -517,6 +501,7 @@ PanelSegmentation.propTypes = {
|
|
|
517
501
|
commandsManager: prop_types_default().shape({
|
|
518
502
|
runCommand: (prop_types_default()).func.isRequired
|
|
519
503
|
}),
|
|
504
|
+
appConfig: (prop_types_default()).object.isRequired,
|
|
520
505
|
servicesManager: prop_types_default().shape({
|
|
521
506
|
services: prop_types_default().shape({
|
|
522
507
|
segmentationService: prop_types_default().shape({
|
|
@@ -535,7 +520,6 @@ const segProtocol = {
|
|
|
535
520
|
// Don't store this hanging protocol as it applies to the currently active
|
|
536
521
|
// display set by default
|
|
537
522
|
// cacheId: null,
|
|
538
|
-
hasUpdatedPriorsInformation: false,
|
|
539
523
|
name: 'Segmentations',
|
|
540
524
|
// Just apply this one when specifically listed
|
|
541
525
|
protocolMatchingRules: [],
|
|
@@ -594,6 +578,8 @@ function getHangingProtocolModule() {
|
|
|
594
578
|
}
|
|
595
579
|
/* harmony default export */ const src_getHangingProtocolModule = (getHangingProtocolModule);
|
|
596
580
|
|
|
581
|
+
// EXTERNAL MODULE: ../../../extensions/cornerstone-dicom-seg/src/utils/_hydrateSEG.ts
|
|
582
|
+
var _hydrateSEG = __webpack_require__(28417);
|
|
597
583
|
;// CONCATENATED MODULE: ../../../extensions/cornerstone-dicom-seg/src/index.tsx
|
|
598
584
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
599
585
|
|
|
@@ -601,8 +587,9 @@ function _extends() { _extends = Object.assign ? Object.assign.bind() : function
|
|
|
601
587
|
|
|
602
588
|
|
|
603
589
|
|
|
590
|
+
|
|
604
591
|
const Component = /*#__PURE__*/react.lazy(() => {
|
|
605
|
-
return __webpack_require__.e(/* import() */
|
|
592
|
+
return __webpack_require__.e(/* import() */ 451).then(__webpack_require__.bind(__webpack_require__, 4451));
|
|
606
593
|
});
|
|
607
594
|
const OHIFCornerstoneSEGViewport = props => {
|
|
608
595
|
return /*#__PURE__*/react.createElement(react.Suspense, {
|
|
@@ -654,7 +641,8 @@ const extension = {
|
|
|
654
641
|
const ExtendedOHIFCornerstoneSEGViewport = props => {
|
|
655
642
|
return /*#__PURE__*/react.createElement(OHIFCornerstoneSEGViewport, _extends({
|
|
656
643
|
servicesManager: servicesManager,
|
|
657
|
-
extensionManager: extensionManager
|
|
644
|
+
extensionManager: extensionManager,
|
|
645
|
+
commandsManager: commandsManager
|
|
658
646
|
}, props));
|
|
659
647
|
};
|
|
660
648
|
return [{
|
|
@@ -673,6 +661,69 @@ const extension = {
|
|
|
673
661
|
};
|
|
674
662
|
/* harmony default export */ const cornerstone_dicom_seg_src = (extension);
|
|
675
663
|
|
|
664
|
+
|
|
665
|
+
/***/ }),
|
|
666
|
+
|
|
667
|
+
/***/ 28417:
|
|
668
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
669
|
+
|
|
670
|
+
"use strict";
|
|
671
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
672
|
+
/* harmony export */ Z: () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
673
|
+
/* harmony export */ });
|
|
674
|
+
async function _hydrateSEGDisplaySet(_ref) {
|
|
675
|
+
let {
|
|
676
|
+
segDisplaySet,
|
|
677
|
+
viewportIndex,
|
|
678
|
+
servicesManager
|
|
679
|
+
} = _ref;
|
|
680
|
+
const {
|
|
681
|
+
segmentationService,
|
|
682
|
+
hangingProtocolService,
|
|
683
|
+
viewportGridService
|
|
684
|
+
} = servicesManager.services;
|
|
685
|
+
const displaySetInstanceUID = segDisplaySet.referencedDisplaySetInstanceUID;
|
|
686
|
+
let segmentationId = null;
|
|
687
|
+
|
|
688
|
+
// We need the hydration to notify panels about the new segmentation added
|
|
689
|
+
const suppressEvents = false;
|
|
690
|
+
segmentationId = await segmentationService.createSegmentationForSEGDisplaySet(segDisplaySet, segmentationId, suppressEvents);
|
|
691
|
+
segmentationService.hydrateSegmentation(segDisplaySet.displaySetInstanceUID);
|
|
692
|
+
const {
|
|
693
|
+
viewports
|
|
694
|
+
} = viewportGridService.getState();
|
|
695
|
+
const updatedViewports = hangingProtocolService.getViewportsRequireUpdate(viewportIndex, displaySetInstanceUID);
|
|
696
|
+
|
|
697
|
+
// Todo: fix this after we have a better way for stack viewport segmentations
|
|
698
|
+
|
|
699
|
+
// check every viewport in the viewports to see if the displaySetInstanceUID
|
|
700
|
+
// is being displayed, if so we need to update the viewport to use volume viewport
|
|
701
|
+
// (if already is not using it) since Cornerstone3D currently only supports
|
|
702
|
+
// volume viewport for segmentation
|
|
703
|
+
viewports.forEach((viewport, index) => {
|
|
704
|
+
if (index === viewportIndex) {
|
|
705
|
+
return;
|
|
706
|
+
}
|
|
707
|
+
const shouldDisplaySeg = segmentationService.shouldRenderSegmentation(viewport.displaySetInstanceUIDs, segDisplaySet.displaySetInstanceUID);
|
|
708
|
+
if (shouldDisplaySeg) {
|
|
709
|
+
updatedViewports.push({
|
|
710
|
+
viewportIndex: index,
|
|
711
|
+
displaySetInstanceUIDs: viewport.displaySetInstanceUIDs,
|
|
712
|
+
viewportOptions: {
|
|
713
|
+
initialImageOptions: {
|
|
714
|
+
preset: 'middle'
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
});
|
|
720
|
+
|
|
721
|
+
// Do the entire update at once
|
|
722
|
+
viewportGridService.setDisplaySetsForViewports(updatedViewports);
|
|
723
|
+
return true;
|
|
724
|
+
}
|
|
725
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_hydrateSEGDisplaySet);
|
|
726
|
+
|
|
676
727
|
/***/ }),
|
|
677
728
|
|
|
678
729
|
/***/ 78753:
|